From svnnotify @ sourceforge.jp Fri Jun 2 00:11:54 2017 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Fri, 02 Jun 2017 00:11:54 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzY3NjRdICDml6XmnKzoqp7ku6XlpJbjga4=?= =?utf-8?b?5LuW6KiA6Kqe44Oa44O844K444Gr44CB5pel5pys6Kqe44Oa44O844K444G4?= =?utf-8?b?44Gu44Oq44Oz44Kv44KS5by144KL44KI44GG44Gr44GX44Gf44CC?= Message-ID: <1496329914.882920.85888.nullmailer@users.sourceforge.jp> Revision: 6764 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6764 Author: yutakapon Date: 2017-06-02 00:11:54 +0900 (Fri, 02 Jun 2017) Log Message: ----------- 日本語以外の他言語ページに、日本語ページへのリンクを張るようにした。 Modified Paths: -------------- trunk/doc/ja/html/menu/setup-terminalen.html trunk/doc/ja/html/menu/setup-terminalk.html trunk/doc/ja/html/menu/setup-terminalr.html trunk/doc/ja/html/menu/setup-terminalutf8.html -------------- next part -------------- Modified: trunk/doc/ja/html/menu/setup-terminalen.html =================================================================== --- trunk/doc/ja/html/menu/setup-terminalen.html 2017-05-31 12:49:23 UTC (rev 6763) +++ trunk/doc/ja/html/menu/setup-terminalen.html 2017-06-01 15:11:54 UTC (rev 6764) @@ -17,7 +17,7 @@
- "TTSSH" module uses OpenSSL library to perform cryptography related operations. One may think that OpenSSL library contains only Secure Socket Layer (SSL) protocol related functions used for secure web access, however that is wrong assumption. OpenSSL library also supports basic cipher algorithms, which are utilized by "TTSSH" module. Since Secure Layer related functions of the library are not used, it is very unlikely that "TTSSH" module will be compromised if a security hole is found in OpenSSL library.
-
- Zlib library is used to compress SSH packets. Packet compression is effective on low speed networks like for example with dial-up connections, however in high speed networks it may slow down communication. That's why packet compression function is disabled by default.
-
- "PuTTY" is another free terminal emulator that became a de-facto standard worldwide. PuTTY package contains SSH authentication agent called "Pageant". TTSSH uses part of PuTTY source code to support Pageant based authentication method.
+ It is inefficient to build advanced software from scratch, that's why Tera Term actively uses open source libraries. This, however, requires from developers to be careful and avoid license violations, especially GPL.
+ Several Tera Term modules are linked to open source libraries as shown on the drawing below.
+ The macro program is linked to regular expression library "Oniguruma", which allows to handle regular expressions in "waitregex", "strmatch" and "strreplace" macro commands.
+ Tera Term also calls this library to display Oniguruma version information in "About Tera Term" dialog box.
+
+ The macro program is linked to pseudorandom number generator "SFMT", which allows to generate random number in "random" macro command. +
++ "TTSSH" module is linkd to "OpenSSL" library to perform cryptography related operations. One may think that OpenSSL library contains only Secure Socket Layer (SSL) protocol related functions used for secure web access, however that is wrong assumption. OpenSSL library also supports basic cipher algorithms, which are utilized by "TTSSH" module. Since Secure Layer related functions of the library are not used, it is very unlikely that "TTSSH" module will be compromised if a SSL related security hole is found in OpenSSL library. +
+
+ "TTSSH" module is linkd to compression Library "zlib" to compress SSH packets. Packet compression is effective on low speed networks like for example with dial-up connections, however in high speed networks it may slow down communication. That's why packet compression function is disabled by default.
+
+ "TTSSH" module is linkd to terminal emulator "PuTTY." PuTTY package contains SSH authentication agent called "Pageant". TTSSH uses part of PuTTY source code to support Pageant based authentication method. SSH communication part of PuTTY source code is not used. +
+Note that these libraries are called statically (not via dynamic link). When compiling the source code with these libraries use "/MT" option. Tera Term doesn't use dynamic calls to the libraries because not all user environments can support such calls, which may cause Tera Term to crash. - +
-\x81 @ SSH\x83\x82\x83W\x83\x85\x81[\x83\x8B\x82ł\xA0\x82\xE9"TTSSH"\x82?A\x88Í\x86\x8F\x88\x97\x9D\x82\xF0\x8Ds\x82\xA4\x82\xBD\x82?\xC9OpenSSL\x82?p\x82\xB5\x82Ă\xA2\x82?\xB7\x81B"OpenSSL"\x82?\xA2\x82\xA4\x83l\x81[\x83~\x83\x93\x83O\x82\xA9\x82\xE7Web\x83A\x83N\x83Z\x83X\x82?g\x82\xED\x82\xEA\x82\xE9SSL(Secure Socket Layer)\x83v\x83\x8D\x83g\x83R\x83\x8B\x90\xEA\x97p\x82?\x89\x83C\x83u\x83\x89\x83\x8A\x82\xA9\x82?v\x82\xED\x82?\x82\xBF\x82ł\xB7\x82\xAA\x81A\x8A\xEE\x96{\x93I\x82?Í\x86\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82\xF0\x83T\x83|\x81[\x83g\x82\xB5\x82Ă\xA2\x82邱\x82?\xA9\x82\xE7\x81ATTSSH\x82ł\xCDOpenSSL\x82???\xEA\x82\xE9\x92?\x83C\x83\x84\x82?\x8B\x81[\x83`\x83\x93\x82?p\x82\xB7\x82邾\x82\xAF\x82?\xAF\x82?\xC1\x82Ă\xA2\x82?\xB7\x81B\x82\xB1\x82?\xB1\x82??A\x82\xB7\x82??OpenSSL\x83\x89\x83C\x83u\x83\x89\x83\x8A\x82?Z\x83L\x83\x85\x83\x8A\x83e\x83B\x83z\x81[\x83\x8B\x82\xAA\x94\xAD\x8C\xA9\x82\xB3\x82?\x82?\xB5\x82Ă\xE0\x81A
TTSSH\x82??e\x8B\xBF\x82???Ē?\x82?\xA2\x82\xA4\x82\xB1\x82?ł\xB7\x81B
-\x81 @ zlib\x83\x89\x83C\x83u\x83\x89\x83\x8A\x82?ASSH\x83p\x83P\x83b\x83g\x82?\xB3\x8Fk\x82\xF0\x8Ds\x82\xA4\x82\xBD\x82??\x98\x97p\x82\xB5\x82Ă\xA2\x82?\xB7\x81B\x82\xBD\x82\xBE\x82\xB5\x81A\x83_\x83C\x83\x84\x83\x8B\x83A\x83b\x83v\x89\xF1\x90\xFC\x82????\x93x\x82?l\x83b\x83g\x83\x8F\x81[\x83N\x82?\xA8\x82\xA2\x82Ă?A\x83p\x83P\x83b\x83g\x88\xB3\x8Fk\x82?L\x8C\xF8\x82ł\xB7\x82\xAA\x81A\x8D\xF0\x8D\xA1\x82?\x82\x91\xAC\x89\xF1\x90\xFC\x82ł??\xB5\x82?\x93x\x92?\x82\xF0\x8F\xB5\x82\xAD\x91\xAB\x82\xA9\x82\xB9\x82??\xE8\x82?\xB7\x81B\x82?\x82?A\x83f\x83t\x83H\x83\x8B\x83g\x82ł?p\x83P\x83b\x83g\x88\xB3\x8Fk\x8B@\x94\\x82?\xB3\x8C\x{27B0B3}\x82\xEA\x82Ă\xA2\x82?\xB7\x81B
-\x81 @ PuTTY\x82?\xA2\x8AE\x95W\x8F\x80\x82ł\xA0\x82\xE9\x83t\x83\x8A\x81[\x82?^\x81[\x83~\x83i\x83\x8B\x83G\x83~\x83\x85\x83\x8C\x81[\x83^\x82ł\xB7\x81BPuTTY\x82???\xEA\x82\xE9Pageant\x82?Ă?\xEA\x82\xE9SSH\x94F\x8F?G\x81[\x83W\x83F\x83\x93\x83g\x82\xAA\x82\xA0\x82\xE9\x82?ł\xB7\x82\xAA\x81ATTSSH\x82\xC5Pageant\x82?\xE6\x82\xE9\x8C\xF6\x8AJ\x8C\xAE\x94F\x8F?\xF0\x83T\x83|\x81[\x83g\x82\xB7\x82邽\x82??APuTTY\x82?\\x81[\x83X\x83R\x81[\x83h\x82?p\x82\xB5\x82Ă\xA2\x82?\xB7\x81B
+ \x8D\x82\x93x\x82?@\x94\\x82\xF0\x8E\xC0\x8C\xBB\x82\xB7\x82邽\x82??A\x83t\x83\x8B\x83X\x83N\x83\x89\x83b\x83`\x82?\xC0\x91\x95\x82\xB7\x82邱\x82??\x{5E60AA}\x82\xA2\x82\xA2\x82??\xBE\x82\xA6\x82?\xB9\x82\xF1\x81BTera Term\x82ł?J\x94\xAD\x8C\x{5E627B}\x82\xF0\x90}\x82邽\x82??A\x83I\x81[\x83v\x83\x93\x83\\x81[\x83X\x82?\x89\x83C\x83u\x83\x89\x83\x8A\x82\xF0\x90ϋ?I\x82?\x98\x97p\x82\xB5\x82Ă\xA2\x82?\xB7\x81B\x82\xBD\x82\xBE\x82\xB5\x81A\x83I\x81[\x83v\x83\x93\x83\\x81[\x83X\x90\xBB\x95i\x82?\x89\x83C\x83Z\x83\x93\x83X\x82?\xE6\x82鋣\x8D\x87\x82??\x8D\x88??\xA4\x95K\x97v\x82\xAA\x82\xA0\x82\xE8\x82?\xB7\x81i\x93\xC1\x82\xC9GPL\x81j\x81B
+ \x89\xBA\x90}\x82?A\x83I\x81[\x83v\x83\x93\x83\\x81[\x83X\x82?\x89\x83C\x83u\x83\x89\x83\x8A\x82\xF0\x83\x8A\x83\x93\x83N\x82\xB5\x82Ă\xA2\x82?\x83W\x83\x85\x81[\x83\x8B\x82?A\x82\xBB\x82?\x8A\x83\x93\x83N\x8F?\xF0\x8E\xA6\x82\xB5\x82?\xB7\x81B
+ Tera Term\x83}\x83N\x83\x8D\x83v\x83\x8D\x83O\x83\x89\x83\x80\x82?A\x90\xB3\x8BK\x95\\x8C\xBB\x83\x89\x83C\x83u\x83\x89\x83\x8A"Oniguruma"\x82\xF0\x83\x8A\x83\x93\x83N\x82\xB5\x82Ă\xA2\x82?\xB7\x81B"waitregex","strmatch","strreplace"\x83R\x83}\x83\x93\x83h\x82?\xA8\x82\xA2\x82Đ\xB3\x8BK\x95\\x8C\xBB\x82?p\x82\xB7\x82邽\x82?ł\xB7\x81B
+ Tera Term\x96{\x91?ł?A\x83o\x81[\x83W\x83\x87\x83\x93\x83_\x83C\x83A\x83\x8D\x83O\x82\xC9Oniguruma\x82?o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x95\\x8E\xA6\x82\xB7\x82邽\x82?\xBE\x82\xAF\x82?\x8A\x83\x93\x83N\x82\xF0\x82\xB5\x82Ă\xA2\x82?\xB7\x81B
+
+ Tera Term\x83}\x83N\x83\x8D\x83v\x83\x8D\x83O\x83\x89\x83\x80\x82?A\x8B^\x8E\x97\x97\x90\x90\x94\x90\xB6\x90\xAC\x8A\xED"SFMT"\x82\xF0\x83\x8A\x83\x93\x83N\x82\xB5\x82Ă\xA2\x82?\xB7\x81B"random"\x83R\x83}\x83\x93\x83h\x82?\xA8\x82\xA2\x82ė\x90\x90\x94\x82?\xB6\x90\xAC\x82?\x98\x97p\x82\xB3\x82\xEA\x82Ă\xA2\x82?\xB7\x81B +
++ SSH\x83\x82\x83W\x83\x85\x81[\x83\x8B\x82ł\xA0\x82\xE9TTSSH\x82?A\x88Í\x86\x8F\x88\x97\x9D\x82\xF0\x8Ds\x82\xA4\x82\xBD\x82?\xC9"OpenSSL"\x82\xF0\x83\x8A\x83\x93\x83N\x82\xB5\x82Ă\xA2\x82?\xB7\x81BOpenSSL\x82?\xA2\x82\xA4\x83l\x81[\x83~\x83\x93\x83O\x82\xA9\x82\xE7Web\x83A\x83N\x83Z\x83X\x82?g\x82\xED\x82\xEA\x82\xE9SSL(Secure Socket Layer)\x83v\x83\x8D\x83g\x83R\x83\x8B\x90\xEA\x97p\x82?\x89\x83C\x83u\x83\x89\x83\x8A\x82\xA9\x82?v\x82\xED\x82?\x82\xBF\x82ł\xB7\x82\xAA\x81A\x82\xBB\x82\xA4\x82ł?\xA0\x82\xE8\x82?\xB9\x82\xF1\x81BOpenSSL\x82?\xEE\x96{\x93I\x82?Í\x86\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82\xF0\x83T\x83|\x81[\x83g\x82\xB5\x82Ă\xA8\x82\xE8\x81ATTSSH\x82ł\xCDOpenSSL\x82???\xEA\x82\xE9\x88Í\x86\x89\xBB/\x95\x9C\x8D\x86\x83\x8B\x81[\x83`\x83\x93\x82???p\x82\xB5\x82Ă\xA2\x82?\xB7\x81B\x82\xB1\x82?\xB1\x82??A\x82\xB7\x82??OpenSSL\x83\x89\x83C\x83u\x83\x89\x83\x8A\x82\xC9SSL\x8A?A\x82?Z\x83L\x83\x85\x83\x8A\x83e\x83B\x83z\x81[\x83\x 8B\x82\xAA\x94\xAD\x8C\xA9\x82\xB3\x82?\x82?\xB5\x82Ă\xE0\x81ATTSSH\x82??e\x8B\xBF\x82???Ē?\x82?\xA2\x82\xA4\x82\xB1\x82?ł\xB7\x81B +
++ SSH\x83\x82\x83W\x83\x85\x81[\x83\x8B\x82ł\xA0\x82\xE9TTSSH\x82?ASSH\x83p\x83P\x83b\x83g\x82?\xB3\x8Fk\x82\xF0\x8Ds\x82\xA4\x82\xBD\x82??\xB3\x8Fk\x83\x89\x83C\x83u\x83\x89\x83\x8A"zlib"\x82\xF0\x83\x8A\x83\x93\x83N\x82\xB5\x82Ă\xA2\x82?\xB7\x81B\x82\xBD\x82\xBE\x82\xB5\x81A\x83_\x83C\x83\x84\x83\x8B\x83A\x83b\x83v\x89\xF1\x90\xFC\x82????\x93x\x82?l\x83b\x83g\x83\x8F\x81[\x83N\x82?\xA8\x82\xA2\x82Ă?A\x83p\x83P\x83b\x83g\x88\xB3\x8Fk\x82?L\x8C\xF8\x82ł\xB7\x82\xAA\x81A\x8D\xF0\x8D\xA1\x82?\x82\x91\xAC\x89\xF1\x90\xFC\x82ł??\xB5\x82?\x93x\x92?\x82\xF0\x8F\xB5\x82\xAD\x91\xAB\x82\xA9\x82\xB9\x82??\xE8\x82?\xB7\x81B\x82?\x82?A\x83f\x83t\x83H\x83\x8B\x83g\x82ł?p\x83P\x83b\x83g\x88\xB3\x8Fk\x8B@\x94\\x82?\xB3\x8C\x{27B0B3}\x82\xEA\x82Ă\xA2\x82?\xB7\x81B +
++ SSH\x83\x82\x83W\x83\x85\x81[\x83\x8B\x82ł\xA0\x82\xE9TTSSH\x82?A\x92[\x96\x96\x83G\x83~\x83\x85\x83\x8C\x81[\x83^"PuTTY"\x82\xF0\x83\x8A\x83\x93\x83N\x82\xB5\x82Ă\xA2\x82?\xB7\x81BPuTTY\x82?\xCDPageant\x82?Ă?\xEA\x82\xE9SSH\x94F\x8F?G\x81[\x83W\x83F\x83\x93\x83g\x82\xAA\x82\xA0\x82\xE9\x82?ł\xB7\x82\xAA\x81ATTSSH\x82\xC5Pageant\x82?\xE6\x82\xE9\x8C\xF6\x8AJ\x8C\xAE\x94F\x8F?\xF0\x83T\x83|\x81[\x83g\x82\xB7\x82邽\x82??APuTTY\x82?\\x81[\x83X\x83R\x81[\x83h\x82?p\x82\xB5\x82Ă\xA2\x82?\xB7\x81BPuTTY\x82\xCCSSH\x92?M\x95\x94\x95\xAA\x82?\\x81[\x83X\x83R\x81[\x83h\x82?\x98\x97p\x82\xB5\x82Ă\xA2\x82?\xB9\x82\xF1\x81B +
++ \x82?\xA8\x81A\x82\xA2\x82\xB8\x82\xEA\x82?\x89\x83C\x83u\x83\x89\x83\x8A\x82\xE0\x90ÓI\x83\x8A\x83\x93\x83N(static link)\x82?\xB5\x82Ă\xA2\x82?\xB7\x81B\x83\x89\x83C\x83u\x83\x89\x83\x8A\x82?R\x83\x93\x83p\x83C\x83\x8B\x83I\x83v\x83V\x83\x87\x83\x93\x82?\xCD"/MT"\x82\xF0\x95t\x89\xC1\x82\xB5\x82Ă\xA2\x82?\xB7\x81B\x93\xAE\x93I\x83\x8A\x83\x93\x83N(dynamic link)\x82\xF0\x8Ds\x82\xA4\x82?A\x88?\x82?\x86\x81[\x83U\x8A?\xAB\x82\xC5Tera Term\x82\xAA\x8BN\x93\xAE\x82ł\xAB\x82?\xA2\x82?\xA2\x82\xA4\x8C\xBB\x8F?\xAA\x94\xAD\x90\xB6\x82\xB5\x82\xBD\x82\xBD\x82??A\x8C\xBB\x8D?ł?\xAE\x93I\x83\x8A\x83\x93\x83N\x82?s\x82\xC1\x82Ă\xA2\x82?\xB9\x82\xF1\x81B +
+ This page is described when the Language is selected to English on the Setup - General dialog. + Please refer to below page if another language mode is used. +
+ ++ This page is described when the Language is selected to Japanese on the Setup - General dialog. + Please refer to below page if another language mode is used. +
+ ++ ABC$0D$0A +
+
+ NOTICE: ^[(H can not be selected on initial setting.
+
+
+ This page is described when the Language is selected to Korean on the Setup - General dialog. + Please refer to below page if another language mode is used. +
+ ++ ABC$0D$0A +
++ This page is described when the Language is selected to Russian on the Setup - General dialog. + Please refer to below page if another language mode is used. +
+ ++ This page is described when the Language is selected to UTF-8 on the Setup - General dialog. + Please refer to below page if another language mode is used. +
+ ++ ABC$0D$0A +
+
To use UTF-8, changed from English to "UTF-8" or "Japanese" or "Korean" under Setup->General menu.
+
+When the Language "UTF-8" is selected, below function can not be used beside Japanese setting. +
+
+
If you set the Language "Japanese" or "Korean", select "Terminal" from the Tera Term "Setup" menu. Inside the dialog-box,
select "UTF-8" from "Kanji(receive)" or "Kanji(transmit)".
There is no need to restart Tera Term to activate these configuration changes.
From svnnotify @ sourceforge.jp Sun Jun 4 21:54:47 2017
From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp)
Date: Sun, 04 Jun 2017 21:54:47 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzY3NjddICDjg63jgrDjga7jgr/jgqTjg6A=?=
=?utf-8?b?44K544K/44Oz44OX44Gu44OV44Kp44O844Oe44OD44OI44KS5oyH5a6a44Gn?=
=?utf-8?b?44GN44KL44KI44GG44Gr44GX44Gf?=
Message-ID: <1496580887.971842.133118.nullmailer@users.sourceforge.jp>
Revision: 6767
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6767
Author: maya
Date: 2017-06-04 21:54:47 +0900 (Sun, 04 Jun 2017)
Log Message:
-----------
ログのタイムスタンプのフォーマットを指定できるようにした
https://osdn.net/ticket/browse.php?group_id=1412&tid=36971
Modified Paths:
--------------
trunk/installer/release/TERATERM.INI
trunk/teraterm/common/ttlib.c
trunk/teraterm/common/ttlib.h
trunk/teraterm/common/tttypes.h
trunk/teraterm/teraterm/filesys.cpp
trunk/teraterm/ttpset/ttset.c
-------------- next part --------------
Modified: trunk/installer/release/TERATERM.INI
===================================================================
--- trunk/installer/release/TERATERM.INI 2017-06-02 16:10:58 UTC (rev 6766)
+++ trunk/installer/release/TERATERM.INI 2017-06-04 12:54:47 UTC (rev 6767)
@@ -538,6 +538,11 @@
; Lock Terminal Unique ID
LockTUID=on
+; Timestamp format of Log each line
+; %a %b %e %H:%M:%S.%N %Y ... Sun Jun 4 21:12:40.123 JST 2017
+; %Y/%m/%d %H:%M:%S.%N ... 2017/06/04 21:12:40.123
+LogTimestampFormat=%a %b %e %H:%M:%S.%N %Y
+
; Exclusive lock for log file
LogLockExclusive=on
Modified: trunk/teraterm/common/ttlib.c
===================================================================
--- trunk/teraterm/common/ttlib.c 2017-06-02 16:10:58 UTC (rev 6766)
+++ trunk/teraterm/common/ttlib.c 2017-06-04 12:54:47 UTC (rev 6767)
@@ -1460,25 +1460,92 @@
return Table[lang][kcode];
}
-char *mctimelocal()
+char *mctimelocal(char *format)
{
- SYSTEMTIME LocalTime;
+ SYSTEMTIME systime;
static char strtime[29];
char week[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
char month[][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+ char tmp[5];
+ unsigned int i = strlen(format);
- GetLocalTime(&LocalTime);
- _snprintf_s(strtime, sizeof(strtime), _TRUNCATE,
- "%s %s %02d %02d:%02d:%02d.%03d %04d",
- week[LocalTime.wDayOfWeek],
- month[LocalTime.wMonth-1],
- LocalTime.wDay,
- LocalTime.wHour,
- LocalTime.wMinute,
- LocalTime.wSecond,
- LocalTime.wMilliseconds,
- LocalTime.wYear);
+ GetLocalTime(&systime);
+ memset(strtime, 0, sizeof(strtime));
+ for (i=0; i2017.08.xx (Ver 4.96)
-
+
+
+
+
+
+SYNOPSIS:
+%a Abbreviated weekday name
+%b Abbreviated month name
+%d Day of month as decimal number (01 - 31)
+%e Day of month as decimal number ( 1 - 31)
+%H Hour in 24-hour format (00 - 23)
+%N Milisecond as decimal number (000 - 999)
+%m Month as decimal number (01 - 12)
+%M Minute as decimal number (00 - 59)
+%S Second as decimal number (00 - 59)
+%w Weekday as decimal number (0 - 6; Sunday is 0)
+%Y Year with century, as decimal number
+%% Percent sign
+
+
+
+Example:
+; 2017/06/04 21:12:40.123
+LogTimestampFormat=%Y/%m/%d %H:%M:%S.%N
+
+
+
+Default:
+; Sun Jun 4 21:12:40.123 JST 2017
+LogTimestampFormat=%a %b %e %H:%M:%S.%N %Y
+
+
+
+
+
+
+
+
+LogTimestampUTC=on
+
+
+
+Default:
+LogTimestampUTC=off
+
+
+