diff --git a/.gitattributes b/.gitattributes index 02cec6b12248d47431a751498f849412903639d7..d3c138141e12e8fd8d81a0db7118bbb14232bde9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,21 @@ *.ssjs gitlab-language=javascript +*.js text +*.ssjs text +*.src text +*.inc text +*.ini text +*.cfg text +*.html text +*.xml text +*.txt text +*.TXT text +*.json text +*.bat text +*.mak text +*.mk text +makefile text +Makefile text +GNUmakefile text +*.bin -text +*.cnf -text diff --git a/.gitignore b/.gitignore index 2e419f4a2533daf26acc9a8f0f604155b55a1ba0..ad4669580a2d5bff2687f7063e31be07dd09c248 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,10 @@ src/sbbs3/ctrl/*.tds src/sbbs3/ctrl/sbbsctrl.mak 3rdp/src localdefs.mk +data +node2 +node3 +node4 +*.?.cnf +ctrl/recycle +exec/*.bin \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8beb308f56e2d2f4e928d0a497201c6afeba1b8e..e204c879710a6752cf6ad6d36c90cde4779300ab 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,11 +4,6 @@ # see https://hub.docker.com/_/gcc/ image: gcc -# cache outputs to reduce the build time -cache: - paths: - - "**/*.o" - build-sbbs: stage: build # instead of calling g++ directly you can also use some build toolkit like make diff --git a/README.md b/README.md index ad8b192f31e4cfd01716f7b0547b85f75ae66ba7..15b861f2f9e198f35275a700d87d0f62d7c11ddc 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,17 @@ ## BBS-Related Software Source Repository Directories within: - - `3rdp` - Third-party libraries - - `ctrl` - Synchronet BBS configuration and run-time data files - - `docs` - Synchronet BBS documentation (mostly legacy HTML) - - `exec` - Synchronet BBS executable files (mostly JavaScript) + - `3rdp ` - Third-party libraries + - `ctrl ` - Synchronet BBS configuration and run-time data files + - `docs ` - Synchronet BBS documentation (mostly legacy HTML) + - `exec ` - Synchronet BBS executable files (mostly JavaScript) - `install` - Synchronet BBS installation files - - `node1` - Synchronet BBS Terminal Server "node" configuration files - - `src` - Source code (mostly C/C++) - - `text` - Synchronet BBS text and menu files - - `web` - Synchronet Legacy/Runemaster web UI - - `xtrn` - Synchronet BBS doors (mostly JavaScript) + - `node1 ` - Synchronet BBS Terminal Server "node" configuration files + - `src ` - Source code (mostly C/C++) + - `text ` - Synchronet BBS text and menu files + - `web ` - Synchronet Legacy/Runemaster web UI + - `webv4 ` - echicken's web interface (v4) for Synchronet + - `xtrn ` - Synchronet BBS doors (mostly JavaScript) Related web-sites: [Synchronet BBS Software](http://www.synchro.net) diff --git a/ctrl/file.cnf b/ctrl/file.cnf index f8c9922e30d9c9f20ae71bc5e0484563c395598e..a829db1df6deec0997627d8fca1e5f46910de550 100644 Binary files a/ctrl/file.cnf and b/ctrl/file.cnf differ diff --git a/ctrl/json-service.ini b/ctrl/json-service.ini index cea4386019b6135c2183f48d41f39e03c122fcc2..c7ad39829cace7d033e2d5ead47db04852658cdc 100644 --- a/ctrl/json-service.ini +++ b/ctrl/json-service.ini @@ -8,41 +8,3 @@ ; NOTE: after making changes to this file you MUST restart services ; for the changes to take effect -[boggle] -dir=../xtrn/bublbogl/ - -[chickendelivery2] -dir=../xtrn/chickendelivery/ - -[dicewarz] -dir=../xtrn/dicewarz/ - -[druglord] -dir=../xtrn/druglord/ - -[fatfish] -dir=../xtrn/fatfish/ - -[lemons] -dir=../xtrn/lemons/ - -[startrek] -dir=../xtrn/startrek/ - -[synchronetris] -dir=../xtrn/synchronetris/ - -[syncwall2] -dir=../xtrn/syncwall/ - -[synkroban] -dir=../xtrn/synkroban/ - -[thirsty] -dir=../xtrn/thirsty/ - -[uberblox] -dir=../xtrn/uberblox/ - -[tw2] -dir=../xtrn/tw2/ \ No newline at end of file diff --git a/ctrl/main.cnf b/ctrl/main.cnf index fbd14b09d5d5439d5b4559c619436eadc9f9320a..2f674106bd629240d4534cd8fff06147e645b900 100644 Binary files a/ctrl/main.cnf and b/ctrl/main.cnf differ diff --git a/ctrl/modopts.ini b/ctrl/modopts.ini index afecc5e204314bd5eb66c84d117ba176f142c6fb..17858a2b0a24ab11eaeea4b0c94983452d13515e 100644 --- a/ctrl/modopts.ini +++ b/ctrl/modopts.ini @@ -45,14 +45,14 @@ fast_logon = true fast_logon_requirements = eval_first = - eval_last = - -[logonlist] + eval_last = + +[logonlist] last_few_callers = 4 last_few_callers_msg = last_few_callers_fmt = - first_caller_msg = - logons_header_fmt = + first_caller_msg = + logons_header_fmt = nobody_logged_on_fmt = today = yesterday = @@ -78,10 +78,10 @@ [flashpolicyserver] ; If you want to allow flash clients to connect to additional ports, add them here as a comma -; separated list (e.g. 21,25). +; separated list (e.g. 21,25). ; NOTE: Telnet, RLogin and SSH ports are already allowed, so do not need to be listed here extra_ports= - + [jsonchat] ;see exec/load/json-server.js for help setting up a chat server host = bbs.thebrokenbubble.com @@ -103,7 +103,7 @@ include_web_users = true web_inactivity_timeout = 900 web_browsing = browsing - + ; advanced nodelist customizations: ;format: \1n\1h%3d \1n\1g%s ;username_prefix: \1h @@ -113,7 +113,7 @@ ;connection_prefix: ;errors_prefix: \1h\1r ;gender_separator = " " - + [sbbslist] export_freq = 7 add_ars = not guest @@ -127,7 +127,6 @@ timeout=43200 inactivity=900 user_registration=true - minimum_password_length=6 maximum_telegram_length=800 web_directory=../webv4 ftelnet=true diff --git a/ctrl/msgs.cnf b/ctrl/msgs.cnf index 53553ac1f11825ce5c40fa9c2e66d86575b58c90..c8d90a0b44b920381dc87f6054baf72b58f50948 100644 Binary files a/ctrl/msgs.cnf and b/ctrl/msgs.cnf differ diff --git a/ctrl/sbbs.ini b/ctrl/sbbs.ini index b652aaf0515d3f3b6a049acb8ab935b1e6ebf094..a211078726d359ce1c57c6214f91214d5571d4be 100644 --- a/ctrl/sbbs.ini +++ b/ctrl/sbbs.ini @@ -12,6 +12,8 @@ Hostname = ; IP address of network interface to bind to (defaults to ANY/ALL interfaces): Interface = +; IPv4 address of network interface to use for outgoing connections + OutboundInterface = ; Override the SBBSCTRL environment variable (optional): CtrlDirectory = ; Override the default system "temp" directory (optional): @@ -277,6 +279,7 @@ Options = INDEX_FILE | HTML_INDEX_FILE | ALLOW_QWK ; VIRTUAL_HOSTS ; NO_CGI ; ALLOW_TLS +; HSTS_SAFE ; HTTP_LOGGING ; NO_HOST_LOOKUP ; NO_RECYCLE diff --git a/ctrl/sbbsctrl.darkmode.ini b/ctrl/sbbsctrl.darkmode.ini new file mode 100644 index 0000000000000000000000000000000000000000..cef4df8be4e6e73d239d41ae4f0890b812eafb23 --- /dev/null +++ b/ctrl/sbbsctrl.darkmode.ini @@ -0,0 +1,82 @@ +[NodeForm] +ListFontName=MS Sans Serif +ListFontColor=clWhite +ListFontStyle=0 +ListColor=clBlack + +[ClientForm] +ListFontName=MS Sans Serif +ListFontColor=clWhite +ListFontStyle=0 +ListColor=clBlack + +[TelnetForm] +LogFontName=MS Sans Serif +LogFontColor=clWhite +LogFontStyle=0 +LogColor=clBlack + +[EventsForm] +LogFontName=MS Sans Serif +LogFontColor=clWhite +LogFontStyle=0 +LogColor=clBlack + +[ServicesForm] +LogFontName=MS Sans Serif +LogFontColor=clWhite +LogFontStyle=0 +LogColor=clBlack + +[FtpForm] +LogFontName=MS Sans Serif +LogFontColor=clWhite +LogFontStyle=0 +LogColor=clBlack + +[MailForm] +LogFontName=MS Sans Serif +LogFontColor=clWhite +LogFontStyle=0 +LogColor=clBlack + +[WebForm] +LogFontName=MS Sans Serif +LogFontColor=clWhite +LogFontStyle=0 +LogColor=clBlack + +[LogEmergencyFont] +Name=MS Sans Serif +Color=clRed +Style=0 + +[LogAlertFont] +Name=MS Sans Serif +Color=clRed +Style=1 + +[LogCriticalFont] +Name=MS Sans Serif +Color=clRed +Style=1 + +[LogErrorFont] +Name=MS Sans Serif +Color=clRed +Style=0 + +[LogWarningFont] +Name=MS Sans Serif +Color=clFuchsia +Style=0 + +[LogNoticeFont] +Name=MS Sans Serif +Color=clSkyBlue +Style=0 + +[LogDebugFont] +Name=MS Sans Serif +Color=clLime +Style=0 diff --git a/ctrl/sbbsctrl.lightmode.ini b/ctrl/sbbsctrl.lightmode.ini new file mode 100644 index 0000000000000000000000000000000000000000..0973b49aa9c28cc55830c24bfa7189443e2b4f3e --- /dev/null +++ b/ctrl/sbbsctrl.lightmode.ini @@ -0,0 +1,82 @@ +[NodeForm] +ListFontName=MS Sans Serif +ListFontColor=clWindowText +ListFontStyle=0 +ListColor=clWindow + +[ClientForm] +ListFontName=MS Sans Serif +ListFontColor=clWindowText +ListFontStyle=0 +ListColor=clWindow + +[TelnetForm] +LogFontName=MS Sans Serif +LogFontColor=clWindowText +LogFontStyle=0 +LogColor=clWindow + +[EventsForm] +LogFontName=MS Sans Serif +LogFontColor=clWindowText +LogFontStyle=0 +LogColor=clWindow + +[ServicesForm] +LogFontName=MS Sans Serif +LogFontColor=clWindowText +LogFontStyle=0 +LogColor=clWindow + +[FtpForm] +LogFontName=MS Sans Serif +LogFontColor=clWindowText +LogFontStyle=0 +LogColor=clWindow + +[MailForm] +LogFontName=MS Sans Serif +LogFontColor=clWindowText +LogFontStyle=0 +LogColor=clWindow + +[WebForm] +LogFontName=MS Sans Serif +LogFontColor=clWindowText +LogFontStyle=0 +LogColor=clWindow + +[LogEmergencyFont] +Name=MS Sans Serif +Color=clRed +Style=1 + +[LogAlertFont] +Name=MS Sans Serif +Color=clRed +Style=1 + +[LogCriticalFont] +Name=MS Sans Serif +Color=clRed +Style=1 + +[LogErrorFont] +Name=MS Sans Serif +Color=clRed +Style=1 + +[LogWarningFont] +Name=MS Sans Serif +Color=clFuchsia +Style=0 + +[LogNoticeFont] +Name=MS Sans Serif +Color=clBlue +Style=0 + +[LogDebugFont] +Name=MS Sans Serif +Color=clGreen +Style=0 diff --git a/ctrl/services.ini b/ctrl/services.ini index e51c9221d6de8c3fa8be78958ef167d805d3e3f2..22aa6323ae340e44e8f5bc758162f266a041aa1b 100644 --- a/ctrl/services.ini +++ b/ctrl/services.ini @@ -2,7 +2,7 @@ ; Each section is a service, the [section name] is the service/protocol name (by default) -; $Id: services.ini,v 1.14 2020/03/24 06:54:17 rswindell Exp $ +; $Id: services.ini,v 1.15 2020/09/07 rswindell $ ; Global keys supported (in root section and/or per service section): @@ -113,13 +113,6 @@ Port=6667 Options=STATIC | LOOP Command=ircd.js -; JSON inter-bbs communications server -[JSON] -Port=10088 -Interface=127.0.0.1 -Options=STATIC | LOOP -Command=json-service.js - [Hotline] Port=5500 Command=hotline.js @@ -143,11 +136,6 @@ Options=TLS Port=24553 Command=binkit.js -[FlashPolicy] -Port=843 -Command=flashpolicyserver.js -Enabled=false - [WS] Port=1123 Options=NO_HOST_LOOKUP diff --git a/ctrl/text.dat b/ctrl/text.dat index 1dde3fe6886b4c0079dbb49761c2c4eed85f2fa0..ae962dbe3e38cfd1d505f32aefdd6785606a49b8 100644 --- a/ctrl/text.dat +++ b/ctrl/text.dat @@ -330,16 +330,16 @@ "\r\nDownload queue is empty.\r\n" 273 DownloadQueueIsEmpty "\r\n\1-\1g\1hUpload Queue:\1n\1g"\ 274 UploadQueueLstHdr " Description\r\n\r\n\1n" -"\1g\1h%2d: \1n\1g%s %s\r\n" 275 UploadQueueLstFmt +"\1g\1h%2d: \1n\1g%-12s %s\r\n" 275 UploadQueueLstFmt "\r\n\1-\1g\1hDownload Queue:\1n\1g"\ 276 DownloadQueueLstHdr " Credits Bytes Time\r\n\r\n\1n" -"\1g\1h%2d: \1n\1g%s %11.11s %11.11s %s\r\n" 277 DownloadQueueLstFmt +"\1g\1h%2d: \1n\1g%-12s %11.11s %11.11s %s\r\n" 277 DownloadQueueLstFmt "\r\n\1w\1h Totals: %11.11s %11.11s %s\r\n" 278 DownloadQueueTotals "\r\n\1-\1gRemove which file from upload "\ 279 RemoveWhichFromUlQueue "queue (1-%d): \1n" "\r\n\1-\1gRemove which file from download "\ 280 RemoveWhichFromDlQueue "queue (1-%d): \1n" -"\r\nUpload queue is empty\r\n" 281 UploadQueueIsEmpty +"\r\nUpload queue is empty.\r\n" 281 UploadQueueIsEmpty "\r\nHang up after transfer" 282 HangUpAfterXferQ "\r\n\1w\1hStart transfer now (Ctrl-X to abort):\r\n\1n" 283 StartXferNow "\1_\r\n\1b\1hDisconnecting @ELLIPSIS@ \1wH\1bang up or \1wA\1bbort " 284 Disconnecting @@ -423,7 +423,7 @@ "\1bLogons Today : \1c%-5u \1b(Max \1c%u\1b)\r\n" 352 LiLogonsToday "\1bTime on Today : \1c%-5u \1b(Max \1c%u\1b)\r\n" 353 LiTimeonToday "\1bMail Waiting : \1c%u\r\n" 354 LiMailWaiting -"\1bSysop is : \1c" 355 LiSysopIs +"\1b\1hSysop is : \1c%s\r\n" 355 LiSysopIs "Available" 356 LiSysopAvailable "Not Available" 357 LiSysopNotAvailable "\1r\1h\1iYou can't possibly be in two places at the "\ 358 UserOnTwoNodes diff --git a/ctrl/xtrn.cnf b/ctrl/xtrn.cnf index 854d84672a54037c7289437053df6c1a1c3e445b..ab020fc8a102b0e658d0d5d29556f36142c81bd9 100644 Binary files a/ctrl/xtrn.cnf and b/ctrl/xtrn.cnf differ diff --git a/docs/install.rtf b/docs/install.rtf index a395399e109f0fbbd348a576c7f1cbebdedaae18..0c48b43f13317a4e2cdf987383f8edd9c0cba710 100644 Binary files a/docs/install.rtf and b/docs/install.rtf differ diff --git a/docs/text318b.dif b/docs/text318b.dif new file mode 100644 index 0000000000000000000000000000000000000000..20776574fe4734f8fb847373f26a0f3466ea42c6 --- /dev/null +++ b/docs/text318b.dif @@ -0,0 +1,321 @@ +diff --git a/ctrl/text.dat b/ctrl/text.dat +index 5a627144f..ae962dbe3 100644 +--- a/ctrl/text.dat ++++ b/ctrl/text.dat +@@ -1,14 +1,22 @@ +-"\1n\1h\1c�������\1n������\1h\1k�������\1n\1c���������\r\n"\ 001 MsgSubj +- "\1h� \1bSubj\1n\1b: \1h\1c%.70s" +-"\r\n� \1bAttr\1n\1b: \1h\1c%s%s%s%s%s%s%s%s%s%s%s%s%s%s" 002 MsgAttr +-"\r\n� \1bTo \1n\1b: \1h\1c%.70s" 003 MsgTo +-" #%s" 004 MsgToExt +-" (%.40s)" 005 MsgToNet +-"\r\n\1w� \1bFrom\1n\1b: \1h\1c%.70s" 006 MsgFrom +-" #%s" 007 MsgFromExt +-" (%.40s)" 008 MsgFromNet +-"\r\n\1w� \1bDate\1n\1b: \1h\1c%.24s %s (%s)\r\n"\ 009 MsgDate +- "\1w�������\1c���������\1n����������\1h\1k����"\ +- "����\1n\1c�������\1b�������������\1n" +-"\1_\r\n\1b\1hE-mail (User name or number): \1w" 010 Email +-"\r\nPost on %s\1\\ %s" 011 Post ++"\1n\1h\1c\xda\xc4\xc4\xc4\xc4\xc4\xc4"\ 001 MsgSubj ++ "\1n\xc4\xc4\xc4\xc4\xc4\xc4"\ ++ "\1h\1k\xc4\xc4\xc4\xc4\xc4\xc4\xc4"\ ++ "\1n\1c\xc4\xc4\xc4\xc4\xc4"\ ++ "\xfa\xfa\xfa\xfa"\ ++ "\r\n\1h\xb3 \1bSubj\1n\1b: \1h\1c%.70s" ++"\r\n\xb3 \1bAttr\1n\1b: \1h\1c%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" 002 MsgAttr ++"\r\n\xb3 \1bTo \1n\1b: \1h\1c%.70s" 003 MsgTo ++" #%s" 004 MsgToExt ++" (%.40s)" 005 MsgToNet ++"\r\n\1w\xb3 \1bFrom\1n\1b: \1h\1c%.33s" 006 MsgFrom ++" #%s" 007 MsgFromExt ++" (%.35s)" 008 MsgFromNet ++"\r\n\1w\xb3 \1bDate\1n\1b: \1h\1c%.24s %s (%s)\r\n"\ 009 MsgDate ++ "\1w\xc0\xc4\xc4\xc4\xc4\xc4\xc4"\ ++ "\1c\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4"\ ++ "\1n\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4"\ ++ "\1h\1k\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4"\ ++ "\1n\1c\xc4\xc4\xc4\xc4\xc4\xc4\xc4"\ ++ "\1b\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xfa\xfa\xfa\xfa\xfa\xfa\1n" ++"\1_\1?\1b\1hE-mail (User name or number): \1w" 010 Email ++"\r\nPost on %s\1\\ %s" 011 Post +@@ -17,7 +25,7 @@ +-"\1[\7\1n\1r\1hCannot add \1w%s\1r to queue - \1n" 014 CantAddToQueue +-"\1n\r\nThe sending of mail is beyond your ability.\r\n" 015 R_Email +-"\1n\r\nYou can't post messages.\r\n" 016 R_Post +-"\1n\r\nYou can't send E-mail to %s.\r\n" 017 R_Feedback +-"\1n\1m\r\nSending E-mail to \1h%s \1n\1m#%u\1n\r\n" 018 Emailing +-"\1n\1m\r\nPosting on \1h%s\1n\1m %s\r\n" 019 Posting +-"\r\nNew file.\r\n" 020 NewFile ++"\1[\7\1n\1r\1hCannot add \1w%s\1r to queue - \1n" 014 CantAddToQueue ++"\1n\r\nThe sending of mail is beyond your ability.\r\n" 015 R_Email ++"\1n\r\nYou can't post messages.\r\n" 016 R_Post ++"\1n\r\nYou can't send E-mail to %s.\r\n" 017 R_Feedback ++"\1n\1?\1mSending E-mail to \1h%s \1n\1m#%u\1n\r\n" 018 Emailing ++"\1n\1?\1mPosting on \1h%s\1n\1m %s\r\n" 019 Posting ++"\r\nNew file.\r\n" 020 NewFile +@@ -29 +37 @@ +-"Line limit (%u) reached.\r\n" 024 NoMoreLines ++"\1n\1h\1rLine limit (\1w%u\1r) reached.\1n\r\n" 024 NoMoreLines +@@ -35 +43 @@ +-"\r\n\1r\1h\1iAborted.\1n\r\n" 030 Aborted ++"\1?\1r\1h\1iAborted.\1n\r\n" 030 Aborted +@@ -38 +46 @@ +-"\1n\1h\r\nSaving..." 033 Saving ++"\1n\1h\r\nSaving @ELLIPSIS@" 033 Saving +@@ -40 +48 @@ +-"\1n\r\nWriting Index..." 035 WritingIndx ++"\1n\r\nWriting Index @ELLIPSIS@" 035 WritingIndx +@@ -48 +56 @@ +-"\1b\1hAuto message by: \1c%s\1b on %s\1n\r\n\r\n" 042 AutoMsgBy ++"\1b\1hAuto message by: \1c%s\1b on %s\1n\r\n\r\n" 042 AutoMsgBy +@@ -53 +61 @@ +-"\1g\1h%4d \1n\1g%-25.25s \1h%c\1n\1g %.46s\r\n" 047 MailWaitingLstFmt ++"\1g\1h%4d \1n\1g%-25.25s \1h%c\1n\1g %s\r\n" 047 MailWaitingLstFmt +@@ -55,2 +63,2 @@ +-"\r\n\1n\1c� \1b\1hReading E-mail \1n\1c� \1b\1h(\1w?\1b=Menu)"\ 049 ReadingMail +- " (\1w%u\1b of \1w%u\1b): \1n" ++"\r\n\1n\1c� \1b\1hReading E-mail \1n\1c� \1b\1h(\1w\1`?\1b=Menu)"\ 049 ReadingMail ++ " (\1w%u\1b of \1w%u\1b): \1n\1~" +@@ -73,3 +81,3 @@ +- "(\1w?\1b=Menu) (\1w%u\1b of \1w%u\1b): \1n" +-"\1h\1m\r\nSending Internet Mail To: \1w%s\1m\r\n"\ 062 InternetMailing +- " From: \1w%s\r\n" ++ "(\1w\1`?\1b=Menu) (\1w%u\1b of \1w%u\1b): \1n\1~" ++"\1h\1?\1mInternet Mail To: \1w%s\1m\r\n"\ 062 InternetMailing ++ " From: \1w%s\r\n" +@@ -79 +87 @@ +-"\1_\r\n\1q\1g\1h From "\ 065 MailOnSystemLstHdr ++"\1_\r\n\1g\1h From "\ 065 MailOnSystemLstHdr +@@ -81 +89 @@ +-"\1g\1h%5d\1n\1g %-22.22s %-22.22s \1h%c\1n\1g %.25s\r\n" 066 MailOnSystemLstFmt ++"\1g\1h%5d\1n\1g %-22.22s %-22.22s \1h%c\1n\1g %s\r\n" 066 MailOnSystemLstFmt +@@ -84 +92 @@ +-"\1-\r\n\1c%-15.15s \1y\1h%-44.44s \1w%u" 068 SearchSubFmt ++"\1-\r\n\1c%-20s \1y\1h%-50s \1w%6u" 068 SearchSubFmt +@@ -88 +96 @@ +- " %4u\b\b\b\b\1h%s \1n\1c(\1h?\1n\1c=Menu) (\1h%u\1n\1c of \1h%u\1n\1c): \1n" ++ " %4u\b\b\b\b\1h%s \1n\1c(\1h\1`?\1n\1c=Menu) (\1h%u\1n\1c of \1h%u\1n\1c): \1n\1~" +@@ -90 +98 @@ +-"\r\nDelete message #%u '%s'" 073 DeletePostQ ++"\1?Delete message #%u '%s'" 073 DeletePostQ +@@ -95 +103 @@ +-"\1w\1h�����[\1i\1r%c\1n\1h]���Ĵ "\ 077 PrivateChatSeparator ++"\1w\1h\xc4\xc4\xc4\xc4\xc4[\1i\1r%c\1n\1h]\xc4\xc4\xc4\xc4� "\ 077 PrivateChatSeparator +@@ -98,3 +106,3 @@ +- " �����[\1i\1b%c\1n\1h]�����" +-"\1g\1h%5u\1n\1g %-22.22s %-22.22s \1h%c\1n\1g %.25s\r\n" 078 SubMsgLstFmt +-"\1w\1h�����[\1i\1r%c\1n\1h]���Ĵ "\ 079 SysopChatSeparator ++ " �\xc4\xc4\xc4\xc4[\1i\1b%c\1n\1h]\xc4\xc4\xc4\xc4\xc4" ++"\1g\1h%5u\1n\1g %-22.22s %-22.22s \1h%c\1n\1g %s\r\n" 078 SubMsgLstFmt ++"\1w\1h\xc4\xc4\xc4\xc4\xc4[\1i\1r%c\1n\1h]\xc4\xc4\xc4\xc4� "\ 079 SysopChatSeparator +@@ -103 +111 @@ +- " �����[\1i\1b%c\1n\1h]�����" ++ " �\xc4\xc4\xc4\xc4[\1i\1b%c\1n\1h]\xc4\xc4\xc4\xc4\xc4" +@@ -112 +120 @@ +-"\1_\r\n\1y\1hBefore which file: \1n" 088 AddTextFileBeforeWhich ++"\1_\r\n\1y\1hBefore which file [last]: \1n" 088 AddTextFileBeforeWhich +@@ -146 +154 @@ +-"\r\n\1n\1mSending message to \1h%s\r\n" 121 SendingMessageToUser ++"\1n\1?\1mSending message to \1h%s\r\n" 121 SendingMessageToUser +@@ -191 +199 @@ +-"\1n\r\n\1mSending telegram to \1h%s #%u\1n\1m\r\n"\ 162 SendingTelegramToUser ++"\1n\1?\1mSending telegram to \1h%s #%u\1n\1m\r\n"\ 162 SendingTelegramToUser +@@ -196,2 +204,2 @@ +-"\r\n\1w\1hSearching all directories...\r\n" 166 SearchingAllDirs +-"\1w\1hSearching all libraries...\r\n" 167 SearchingAllLibs ++"\r\n\1w\1hSearching all directories @ELLIPSIS@\r\n" 166 SearchingAllDirs ++"\1w\1hSearching all libraries @ELLIPSIS@\r\n" 167 SearchingAllLibs +@@ -206 +214 @@ +-"\1_\r\n\r\n\1y\1hFilespec: \1n" 175 FileSpec ++"\1_\r\n\r\n\1y\1hFilespec: \1n\1~" 175 FileSpec +@@ -216 +224 @@ +-"\1n\r\nInvalid NetMail address.\r\n" 183 InvalidNetMailAddr ++"\1n\r\nInvalid NetMail address: \1h%s\1n\r\n" 183 InvalidNetMailAddr +@@ -218 +226 @@ +-"\1n\1h[\1y%c\1w] \1b%-25s " 185 TransferProtLstFmt ++"\1n\1h[\1y\1~%c\1w] \1b%-25s " 185 TransferProtLstFmt +@@ -232 +240 @@ +-"\1r\1hFilenames, specs, or flags [None]: \1m\1h" 197 BatchDlFlags ++"\1r\1hFilenames, specs, or flags [None]: \1m\1h\1~" 197 BatchDlFlags +@@ -277,3 +285,3 @@ +- "\1w~Q\1yuit or [Next]: \1w" +-"\r\n~Quit or [Next]: " 233 QuitOrNext +-"~Remove, ~Move, ~Edit, ~View, ~Quit, or [Next]: " 234 RExemptRemoveFilePrompt ++ "\1w~Q\1yuit or [~Next]: \1w" ++"\r\n~Quit or [~Next]: " 233 QuitOrNext ++"~Remove, ~Move, ~Edit, ~View, ~Quit, or [~Next]: " 234 RExemptRemoveFilePrompt +@@ -287,2 +295,2 @@ +- "~View, ~Quit, or [Next]: " +-"~Remove, ~Edit, ~View, ~Quit, or [Next]: " 242 UserRemoveFilePrompt ++ "~View, ~Quit, or [~Next]: " ++"~Remove, ~Edit, ~View, ~Quit, or [~Next]: " 242 UserRemoveFilePrompt +@@ -311 +319 @@ +-"\r\nProtocol, ~Batch, ~Quit, or [Next]: " 264 ProtocolBatchQuitOrNext ++"\r\nProtocol, ~Batch, ~Quit, or [~Next]: " 264 ProtocolBatchQuitOrNext +@@ -325 +333 @@ +-"\1g\1h%2d: \1n\1g%s %s\r\n" 275 UploadQueueLstFmt ++"\1g\1h%2d: \1n\1g%-12s %s\r\n" 275 UploadQueueLstFmt +@@ -328 +336 @@ +-"\1g\1h%2d: \1n\1g%s %11.11s %11.11s %s\r\n" 277 DownloadQueueLstFmt ++"\1g\1h%2d: \1n\1g%-12s %11.11s %11.11s %s\r\n" 277 DownloadQueueLstFmt +@@ -334 +342 @@ +-"\r\nUpload queue is empty\r\n" 281 UploadQueueIsEmpty ++"\r\nUpload queue is empty.\r\n" 281 UploadQueueIsEmpty +@@ -337 +345 @@ +-"\1_\r\n\1b\1hDisconnecting... \1wH\1bang up or \1wA\1bbort " 284 Disconnecting ++"\1_\r\n\1b\1hDisconnecting @ELLIPSIS@ \1wH\1bang up or \1wA\1bbort " 284 Disconnecting +@@ -340 +348 @@ +-"Deleting files in temp directory...\r\n" 287 RemovingTempFiles ++"Deleting files in temp directory @ELLIPSIS@\r\n" 287 RemovingTempFiles +@@ -355 +363 @@ +-"\1wSorting..." 300 Sorting ++"\1wSorting @ELLIPSIS@" 300 Sorting +@@ -395 +403 @@ +-"\1_\r\n\1y\1hNew password (4-8 chars): " 332 NewPassword ++"\1_\1?\1y\1hNew password (%u-%u chars): " 332 NewPasswordPromptFmt +@@ -401,10 +409,10 @@ +-"\1_\1b\1h[\1c�\1b] \1yEnter your full name or alias\1\\: \1w" 338 EnterYourAlias +-"\1_\1b\1h[\1c�\1b] \1yEnter your full real name\1\\: \1w" 339 EnterYourRealName +-"\1_\1b\1h[\1c�\1b] \1yEnter your company name\1\\: \1w" 340 EnterYourCompany +-"\1_\1b\1h[\1c�\1b] \1yEnter your handle or call-sign\1\\: \1w" 341 EnterYourHandle +-"\1_\1b\1h[\1c�\1b] \1yEnter your sex (M/F)\1\\: \1w" 342 EnterYourSex +-"\1_\1b\1h[\1c�\1b] \1yEnter your street address\1\\: \1w" 343 EnterYourAddress +-"\1_\1b\1h[\1c�\1b] \1yEnter your voice phone number\1\\: \1w" 344 EnterYourPhoneNumber +-"\1_\1b\1h[\1c�\1b] \1yEnter your birthday (%s)\1\\: \1w" 345 EnterYourBirthday +-"\1_\1b\1h[\1c�\1b] \1yEnter your location\1\\ (e.g. city, state)\1\\: \1w" 346 EnterYourCityState +-"\1_\1b\1h[\1c�\1b] \1yEnter your zip (or postal) code\1\\: \1w" 347 EnterYourZipCode ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your full name or alias\1\\: \1w" 338 EnterYourAlias ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your full real name\1\\: \1w" 339 EnterYourRealName ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your company name\1\\: \1w" 340 EnterYourCompany ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your handle or call-sign\1\\: \1w" 341 EnterYourHandle ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your sex (M/F)\1\\: \1w" 342 EnterYourSex ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your street address\1\\: \1w" 343 EnterYourAddress ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your voice phone number\1\\: \1w" 344 EnterYourPhoneNumber ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your birthday (@DATEFMT@)\1\\: \1w" 345 EnterYourBirthday ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your location\1\\ (e.g. city, state)\1\\: \1w" 346 EnterYourCityState ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yEnter your zip (or postal) code\1\\: \1w" 347 EnterYourZipCode +@@ -418 +426 @@ +-"\1bSysop is : \1c" 355 LiSysopIs ++"\1b\1hSysop is : \1c%s\r\n" 355 LiSysopIs +@@ -434 +442 @@ +-"Do you have a color terminal" 367 ColorTerminalQ ++"Does your terminal display colors" 367 ColorTerminalQ +@@ -439 +447 @@ +-"Does your terminal support IBM extended ASCII" 369 ExAsciiTerminalQ ++"Does your terminal support IBM extended ASCII (CP437)" 369 ExAsciiTerminalQ +@@ -455,4 +463,6 @@ +-"\1l\1n\1c\1h%s \1n\1cExternal Programs:\r\n\r\n" 380 XtrnProgLstHdr +-"\1n\1cNum \1h�\1n\1c Name " 381 XtrnProgLstTitles +-"\1h������������������������������� " 382 XtrnProgLstUnderline +-"\1h\1c%3u � \1n\1c%-25.25s\1h " 383 XtrnProgLstFmt ++"\1n\1c\1h%s \1n\1cExternal Programs:\r\n\r\n" 380 XtrnProgLstHdr ++"\1n\1cNum \1h\xb3\1n\1c Name " 381 XtrnProgLstTitles ++"\1h\xc4\xc4\xc4\xc4�\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4"\ 382 XtrnProgLstUnderline ++ "\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4"\ ++ "\xc4\xc4\xc4\xc4\xc4\xc4 " ++"\1h\1c%3u \xb3 \1n\1c%-32.32s\1h " 383 XtrnProgLstFmt +@@ -473 +483 @@ +-"\r\n\1m\1hChecking Slots..." 395 CheckingSlots ++"\r\n\1m\1hChecking Slots @ELLIPSIS@" 395 CheckingSlots +@@ -537 +547 @@ +-"\1_\1y\1hUser edit (\1w?\1y=Menu) "\ 441 UeditPrompt ++"\1_\1y\1hUser edit (\1w\1`?\1y=Menu) "\ 441 UeditPrompt +@@ -576 +586 @@ +-"\1n\1b[\1h\1wL\1n\1b] \1hScreen Length \1n\1b\1\\: \1c%s\r\n" 477 UserDefaultsRows ++"\1n\1b[\1h\1wL\1n\1b] \1hScreen Length \1n\1b\1\\: \1c%s %s\r\n" 477 UserDefaultsRows +@@ -597 +607 @@ +-"\r\n\1_\1b\1h[\1c�\1b] \1yHow many rows on your monitor "\ 497 HowManyRows ++"\r\n\1_\1b\1h[\1c@CHECKMARK@\1b] \1yHow many rows on your monitor "\ 497 HowManyRows +@@ -601 +611 @@ +-"\1_\1b\1h[\1c�\1b] \1yNetwork mail address\1\\ "\ 500 EnterNetMailAddress ++"\1_\1b\1h[\1c@CHECKMARK@\1b] \1yNetwork mail address\1\\ "\ 500 EnterNetMailAddress +@@ -706 +716 @@ +-"\r\n\1_\1h\1wUnpacking..." 576 QWKUnpacking ++"\r\n\1_\1h\1wUnpacking @ELLIPSIS@" 576 QWKUnpacking +@@ -735,3 +745,3 @@ +-"\r\n\1_\1w\1hUsing your real name...\r\n" 599 UsingRealName +-"\r\n\1_\1w\1hPosting Privately...\r\n" 600 PostingPrivately +-"\r\n\1_\1w\1hPosting anonymously...\r\n" 601 PostingAnonymously ++"\r\n\1_\1w\1hUsing your real name @ELLIPSIS@\r\n" 599 UsingRealName ++"\r\n\1_\1w\1hPosting Privately @ELLIPSIS@\r\n" 600 PostingPrivately ++"\r\n\1_\1w\1hPosting anonymously @ELLIPSIS@\r\n" 601 PostingAnonymously +@@ -756 +766 @@ +-"\1n\1m\r\nSending NetMail To: \1h%s\1n\1m (\1h%s\1n\1m)\r\n"\ 619 NetMailing ++"\1n\1?\1mSending NetMail To: \1h%s\1n\1m (\1h%s\1n\1m)\r\n"\ 619 NetMailing +@@ -777 +787 @@ +-"\1h��� ������������������������� ����" 638 ChatChanLstUnderline ++"\1h\xc4\xc4\xc4 \xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4 \xc4\xc4\xc4\xc4" 638 ChatChanLstUnderline +@@ -800,5 +810,5 @@ +- "(\1h%u\1n\1c) %s (\1h?\1n\1c=Menu) (\1h%u\1n\1c Files\1n\1c): \1n" +-"\1n\1>\1q\1l\x014 \1h\1y[\1wD\1y]ownload \1h\1y[\1wB\1y]atch "\ 661 FileListBatchCommands +- "[\1wV\1y]iew Content [\1wE\1y]xtended Info "\ +- "[\1wP\1y]revious Page [\1wQ\1y]uit\1>\1n\r\n" +-"\r\nDownload attached file: \1w%s\1b (%s bytes)" 662 DownloadAttachedFileQ ++ "(\1h%u\1n\1c) %s (\1h\1`?\1n\1c=Menu) (\1h%u\1n\1c of \1h%u\1n\1c Files\1n\1c): \1n\1~" ++"\1n\1>\1q\1l\x014 \1h\1y[\1w\1~D\1y]ownload \1h\1y[\1w\1~B\1y]atch "\ 661 FileListBatchCommands ++ "[\1w\1~V\1y]iew Content [\1w\1~E\1y]xtended Info "\ ++ "[\1w\1~P\1y]revious Page [\1w\1~Q\1y]uit\1>\1n\r\n" ++"\1\?Download attached file: \1w%s\1b (%s bytes)" 662 DownloadAttachedFileQ +@@ -840 +850 @@ +- "���� ����������������������������������\r\n" ++ "\xc4\xc4\xc4\xc4 \xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\r\n" +@@ -905 +915 @@ +-"\1n\r\nSorry, you can't delete this message.\r\n" 758 CantDeleteMsg ++"\1n\r\nSorry, you can't delete message #%lu.\r\n" 758 CantDeleteMsg +@@ -911 +921 @@ +-"\1n\1hStarting new user registration...\r\n" 764 StartingNewUserRegistration ++"\1n\1hStarting new user registration @ELLIPSIS@\r\n" 764 StartingNewUserRegistration +@@ -952 +962 @@ +-"\r\n� \1bMsg \1n\1b: \1h\1cVoted Up %u times%s and Down %u times%s (Score: %d)" 784 MsgVotes ++"\r\n\xb3 \1bMsg \1n\1b: \1h\1cVoted Up %u times%s and Down %u times%s (Score: %d)" 784 MsgVotes +@@ -965 +975 @@ +-"\1n\1mMIME-decoded plain-text:\1n\r\n" 797 MIMEDecodedPlainText ++"\1n\1mMIME-decoded %s %s-text:\1n\r\n" 797 MIMEDecodedPlainTextFmt +@@ -973 +983 @@ +-"\r\n� \1bTags\1n\1b: \1h\1c%.70s" 805 MsgTags ++"\r\n\xb3 \1bTags\1n\1b: \1h\1c%.70s" 805 MsgTags +@@ -975 +985 @@ +-"\r\n " 807 LongLineContinuationPrefix ++"\r\n" 807 LongLineContinuationPrefix +@@ -978 +988,37 @@ +-"\1[\1>" 810 Scanned +\ No newline at end of file ++"\1[\1>" 810 Scanned ++"\1n\1b\1h[\1c@CHECKMARK@\1b] \1h\1yHIT your \1wBACKSPACE\1y or DELETE-LEFT key: " 811 HitYourBackspaceKey ++"\1\\\1n\1cCharacter \1h%u (%02Xh) \1n\1creceived.\r\n" 812 CharacterReceivedFmt ++"\1r\1h!Unsupported backspace key: \1w%02Xh\r\n" 813 InvalidBackspaceKeyFmt ++"" 814 SwapDeleteKeyQ ++"\1n\1hCBM/\1yPETSCII\1w terminal detected.\r\n" 815 PetTerminalDetected ++"Are you using a CBM/PETSCII terminal" 816 PetTerminalQ ++"Auto " 817 TerminalAutoDetect ++"columns" 818 TerminalColumns ++"rows" 819 TerminalRows ++"(mono) " 820 TerminalMonochrome ++"(color) " 821 TerminalColor ++"(iCE color) " 822 TerminalIceColor ++"Does your terminal display bright background "\ 823 IceColorTerminalQ ++ "(iCE) colors\r\n \1n"\ ++ "(i.e. \1i\1k\x013this text\1n is black on yellow and NOT BLINKING)" ++"Does your terminal support UTF-8" 824 Utf8TerminalQ ++"\r\n\xb3 \1bCC \1n\1b: \1h\1c%.70s" 825 MsgCarbonCopyList ++"\1n\1hLogging on to @BBS@ as @ALIAS@ @ELLIPSIS@\1n\r\n"\ 826 LoggingOn ++ "@RESETPAUSE@" ++"\1n\1b[\1h\1wU\1n\1b] \1hInclude UTF-8 Characters \1n\1b: \1c%s\r\n" 827 QWKSettingsUtf8 ++"\1n\1m\1h%s\1n\1m%.0s posted to you "\ 828 MsgPostedToYouVia ++ "on \1h%s \1n\1m%s\r\n" ++"unlimited" 829 Unlimited ++" via raw" 830 NodeConnectionRaw ++"Does your terminal support mouse reporting" 831 MouseTerminalQ ++"(mouse) " 832 TerminalMouse ++"->)\xb3(<-<(\xb3)>" 833 SpinningCursor0 ++"\xb3/\xc4\\" 834 SpinningCursor1 ++"\xb3\\\xc4/" 835 SpinningCursor2 ++"\xb0\xb1\xb2\xdb\xb2\xb1" 836 SpinningCursor3 ++"-=\xf0=" 837 SpinningCursor4 ++"\xda\xc0\xd9\xbf" 838 SpinningCursor5 ++"\xda\xbf\xd9\xc0" 839 SpinningCursor6 ++"\xdc\xde\xdf\xdd" 840 SpinningCursor7 ++"\xdc\xdd\xdf\xde" 841 SpinningCursor8 ++"\xfa\xf9\xfe\xf9" 842 SpinningCursor9 +\ No newline at end of file diff --git a/docs/v317_new.txt b/docs/v317_new.txt new file mode 100644 index 0000000000000000000000000000000000000000..3f6beecd3f41690296faac7752550a47a6ee18c3 --- /dev/null +++ b/docs/v317_new.txt @@ -0,0 +1,45 @@ + +Subj : Synchronet v3.17b release +To : All +From : Digital Man #1 +Date : Tue Jan 01 2019 02:45 pm PST + +Synchronet v3.17, under development since the release of v3.16c in 2015, has +been officially released and dubbed v3.17b (no, the 'b' is not for beta). + +What changed (since v3.16)? + +- IPv6 support +- TLS everywhere (HTTPS, FTPS, SMTPS, POP3S, NNTPS, etc.) +- SSH server reliability and compatibility improvements +- User avatars (across local and networked message bases) + http://wiki.synchro.net/module:avatars +- Polls and message up/down voting (across local and networked message bases) +- Integrated Fido/BinkP mailer (BinkIT.js) + http://wiki.synchro.net/module:binkit +- Revamped inter-bbs instant messaging + http://wiki.synchro.net/module:privatemsg +- Revamped BBS list module (sbbslist v4) + http://wiki.synchro.net/module:sbbslist +- Custom/loadable/contextual terminal fonts + http://wiki.synchro.net/config:fonts.ini +- Custom terminal palettes (full XBin support) + http://wiki.synchro.net/ref:xbin +- CBM/PETSCII terminal support (including 40-column terminals) +- echicken's web interface v4 included (current snapshot) +- Numerous performance and usability improvements and bug-fixes + +The fresh installer for Windows is at ftp://ftp.synchro.net/sbbs317b.zip +The upgrade package (e.g. from v3.16c) is at ftp://ftp.synchro.net/sbup317b.zip + +If you're already running v3.17a (development version), just update according +to the instructions here: http://wiki.synchro.net/install:dev + +Many thanks to Deuce, echicken, Nelgin, and all the other active sysops, users, +testers, contributors and providers of helpful feedback! + + HYdigital mann + +Synchronet/BBS Terminology Definition #6: +BinkD = Binkley Daemon +Norco, CA WX: 53.4�F, 17.0% humidity, 7 mph SSE wind, 0.00 inches rain/24hrs diff --git a/docs/v318_new.txt b/docs/v318_new.txt new file mode 100644 index 0000000000000000000000000000000000000000..42c800c4e8e712d68ad1afd72dc0c80decc95be9 --- /dev/null +++ b/docs/v318_new.txt @@ -0,0 +1,142 @@ +*************************************************** +* What's New in Synchronet Version 3.18 for Win32 * +* (ChangeLog since v3.17b for Win32 Jan 01, 2019) * +*************************************************** + +Terminal Server +~~~~~~~~~~~~~~~ +o Server-side JavaScript for dynamically-loaded BBS modules + and dynamic-HTML indexes for FTP server +o UTF-8 support + - Auto-detect UTF-8 terminals + - Automatic translation of DOS/native door game output + - Auto-translation between ASCII/CP437, PETSCII, and UTF-8 + - Create and read/translate UTF-8 encoded networked messages, email + - UNICODE display tricks (e.g. double-wide chars, special chars) +o New ARS keywords: UTF8, CP437, ASCII +o Improved CBM/PETSCII terminal support +o Improved support for 40-column terminals +o Improved support for terminals > 80 columns in width +o Bright-background (PETSCII and ANSI iCE-color) terminals supported +o Mouse-reporting terminal support (click-able menu options, scroll-wheel) +o Fast-logon support (logging-in as "!user-id"), enabled via modopts.ini +o Automatic detection of Raw TCP client connections on Telnet ports +o Automatic text-portion of multi-part MIME-messages in QWK message packets +o New operator option to delete numeric ranges of messages in sub-boards +o Configurable treatment of "Soft-CRs" created by external message editors +o @-codes: + - New formatting options: http://wiki.synchro.net/custom:atcodes#formatting + - UNICODE http://wiki.synchro.net/custom:atcodes#unicode + - Mouse "hot spot" control (HOT, CLEAR_HOT, ~, `) + - Many added (including some additional PCBoard codes): + CHECKMARK, ELLIPSIS, COPY, SOUNDCOPY, REGISTERED, TRADEMARK, DEGREE_C, + WIDE, CHARSET, NN, TN, AN, ON, PWDAYS, AUTODEL, DATETIMEZONE, DATEFMT, + FILE, FILESIZE, FILEBYTES, FILEKB, FILEMB, FILEGB, FILL, POS, DELAY, + YESCHAR, NOCHAR, QUITCHAR, BPS:<rate>, PWAGE, PWDATE, MPERC, MPERD, + MAXCALLS, MAXPOSTS, MAXMAILS, MAXLINES, FIRSTON, FIRSTDATEON, FIRSTTIMEON, + EMAILS, FBACKS, ETODAY, PTODAY, LTODAY, MTODAY, MTOTAL, TTODAY, TTOTAL, + TLAST, MEXTRA, TEXTRA, MBANKED, TBANKED, PCR, CREDITS, FREECDT, + REALNAME, STR, STRVAR, JS:<prop>, CLREOL, MAILW#, MAILP#, SPAMW#, + MSG_IMP_DATE, MSG_IMP_TIMEZONE, SYSAVAIL +o New helpful sysop debugging command: ECHO and EVAL +o New sysop command to toggle chat availability: AVAIL +o Auto-ZMODEM upload of message text from user + (internal editor and fseditor.js) +o sexyz: + - Improved YMODEM-G file transfer reliability / compatibility + - Improved ZMODEM downloads where the receiver already has the file +o Built-in support for terminal output rate limiting + (e.g. 9600bps simulation) - requires compatible terminal +o Support the fast display of giant (e.g. multi-gigabyte) text files +o Arrow-up/down history scroll: + - sysop command arguments + - netmail recipient addresses +o Sunrise (DoorFrame) multinode door setup convenience environment variables: + PCBDIR and PCBDRIVE +o ftn-setup.js: menu-driven setup of several FidoNet-style networks +o xtrn-setup.js: menu-driven setup of many external programs (e.g. door games) +o Customizable spinning cursors (10 of them!) in the text.dat +o Easy *random* display file/menu selection (just use wildcards!) +o more loadable modules: automsg, list msgs, text_sec, logonlist +o Message base load/read/scan optimizations +o User notifications of messages posted to them via QWKnet + +General +~~~~~~~ +o install-xtrn.js: automated/wizard-like install of external programs + - run 'jsexec -auto /sbbs/xtrn/*' to auto-discover/install new xtrn progs +o Support for C-style escaping in trashcan/filter files + (e.g. "\ " or "\x20" for a leading space character) +o Sysop email notifications upon chat-paging and logged-errors +o user presence and private messages shared between webv4 and terminal users +o Windows build is now linked with dynamic C/C++ runtime libraries +o Ctrl-F (find) and Ctrl-G (repeat find) in SCFG and EchoCfg +o exportcfg.js: export SBBS configuration data to various file formats +o qnet-ftp.js: new QWKnet/FTP module +o FTP server file listing optimizations +o Numerous mail server improvements + (e.g. msg priority, MIME-encoded header fields) + +Security +~~~~~~~~ +o User security notifications: failed login attempts, password requests +o User password maximum length increased from 8 to 40 characters +o Sysop can set the minimum user password length from 4 to 40 characters +o Sysop-reset of the failed-login/temp-ban list via "ctrl/clear" sem file +o Updated TLS/SSL/SSH library (Cryptlib 3.4.5) and patched for compatibility + and security +o Extended user credits and upload/download byte-stats from 2GB to 4GB + +JavaScript +~~~~~~~~~~ +o JSexec default behavior can be configured via ctrl/jsexec.ini +o IPv6 socket support +o New methods: file_mode(), file_chmod(), utf8_encode(), utf8_decode(), + utf8_get_width(), str_is_utf8(), str_is_utf16(), str_is_ascii(), + str_has_ctrl(), js.exec(), system.get_node(), bbs.show_msg(), + bbs.show_msg_header(), bbs.download_msg_attachments(), + bbs.change_msg_attr(), console.wide(), console.output_rate, + MsgBase.get_index(), MsgBase.dump_msg_header(), system.notify(), + console.add_hotspot(), console.clear_hotspots(), console.scroll_hotspots(), + user.downloaded_file() +o New properties: system.min_password_length, system.max_password_length, + system.autodel, client.user_name, bbs.msghdr_top_of_screen, console.type, + console.charset, console.mouse_mode, console.current_row, + console.keyboard_buffer_level, console.keyboard_buffer_space, Queue.orphan, + msg_area.grp[]/grp_list[].can_access, msg_area.sub[].can_access, + file_area.lib[]/lib_list[].can_access, file_area.dir[].can_access + +SBBSecho +~~~~~~~~ +o Import performance improvements (new smblib, twitlist caching) +o Configurable Soft-CR (0x8D) import behavior: default is to leave-alone +o AreaFix support for links with 5D addresses (zone:net/node[.point]@domain) +o Tic passwords up to 40 chars in length +o Explicit CHRS and NOTE header (control paragraph) import/export support +o Ctrl-A to '@' import-conversion for invalid control paragraphs +o Better "Kill Sent" (KFS) support on exported mail +o Export the original message author's editor columns (COLS kludge) when known +o Simplified and more deterministic TZUTC (timezone) import logic + (just store the UTC offset, don't infer the location) +o Ability to operate without an Area File (for systems with no downlinks) + (set AutoAddsSubs=true, AutoAddToAreaFile=false) +o Auto-detection of UTF-8 encoded message body text + (and never strip Soft-CRs from them) +o sbbsecho.ini format is more compatible crudini/python-iniparse +o NetMail Robots (e.g. tickit-FileFix, a.k.a. TickFix) are now supported +o New remote FileFix module (tickfix.js) for use with tickit.js +o Removed old 80-column word-wrap on import behavior +o Include Message and Reply-IDs in export NetMail messages + +Control Panel +~~~~~~~~~~~~~ +o FidoNet related menu items +o File->Run menu options to auto-install FidoNet networks, external programs +o Now defaults to "dark mode" + (File->Import Settings->sbbsctrl.darkmode.ini to choose it) + +Web Server +~~~~~~~~~~ +o More RFC/standards-conformant HTTP[S] support +o HSTS support: https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security +o Manyfold send-file through-put performance improvement diff --git a/exec/Makefile b/exec/Makefile index 8ccf359135be18c64278e8734b79e2a46fd39483..03fdb7e5ce0df740f805e2a63bc65a6ef0dbec86 100644 --- a/exec/Makefile +++ b/exec/Makefile @@ -31,4 +31,4 @@ all : \ .src.bin: - @baja /q $< + @baja.exe /q $< diff --git a/exec/binkit.js b/exec/binkit.js index 81953756e52d5e45c4888a58eab6b75cd7259928..3b2fecb8a5d30012ec9fb5adbe9b2c479f84df91 100644 --- a/exec/binkit.js +++ b/exec/binkit.js @@ -318,7 +318,7 @@ function callout_auth_cb(mode, bp) if (!bp.cb_data.binkitpw || bp.cb_data.binkitpw === '-') addrs.push(bp.cb_data.binkit_to_addr); - else { + else if(bp.remote_addrs !== undefined) { bp.remote_addrs.forEach(function(addr) { if (bp.cb_data.binkitcfg.node[addr] !== undefined) { if (bp.cb_data.binkitcfg.node[addr].pass === bp.cb_data.binkitpw) diff --git a/exec/chksetup.js b/exec/chksetup.js index d30cc318224f22ee94267981e2abdeb46280f38d..4f4c28924d7f0ce436aee00a80540305cdf86783 100644 --- a/exec/chksetup.js +++ b/exec/chksetup.js @@ -3,7 +3,7 @@ // Sanity-check a Synchronet BBS installation "use strict"; -const REVISION = "$Revision: 1.17 $".split(' ')[1]; +const REVISION = "$Revision: 1.18 $".split(' ')[1]; require("sbbsdefs.js", 'USER_DELETED'); function check_codes(desc, grp_list, sub_list) @@ -257,7 +257,7 @@ var tests = { check_dove_net: function(options) { - const TOTAL_DOVENET_CONFERENCES = 22; + const TOTAL_DOVENET_CONFERENCES = js.global.jsexec_revision ? 22 : 21; var output = []; var grp = msg_area.grp["DOVE-Net"]; if(!grp) diff --git a/exec/default.src b/exec/default.src index 4ede06ccd7b13f5bb6cdadff0b0a1e1392f5e04e..c8774ea630f9466250b4756961cfc62606206da6 100644 --- a/exec/default.src +++ b/exec/default.src @@ -51,7 +51,7 @@ if_true end_if # Display main Prompt -print "\1-\1c\r\n� \1b\1hMain \1n\1c� \1h" +print "\1-\1c\r\n\xfe \1b\1hMain \1n\1c\xfe \1h" compare_ars exempt T if_true print "@TUSED@" @@ -533,7 +533,7 @@ async inc_file_cmds # Display main Prompt -print "\1-\1c\r\n� \1b\1hFile \1n\1c� \1h" +print "\1-\1c\r\n\xfe \1b\1hFile \1n\1c\xfe \1h" compare_ars exempt T if_true print "@TUSED@" diff --git a/exec/fingerservice.js b/exec/fingerservice.js index 8c90539f4347ad7b90e1746de576cafb4d7f2043..125b1f6ac0f52fed2f3fc12644b89f9bb0785918 100644 --- a/exec/fingerservice.js +++ b/exec/fingerservice.js @@ -62,6 +62,8 @@ if(options.findfile === undefined) options.findfile = false; if(options.bbslist === undefined) options.bbslist = false; +if(options.json_dbs === undefined) + options.json_dbs = true; load("nodedefs.js"); load("sockdefs.js"); @@ -382,6 +384,18 @@ if(request.charAt(0)=='?' || request.charAt(0)=='.') { // Handle "special" reque } break; + case "json-dbs": + var f = new File(system.ctrl_dir + "json-service.ini"); + if(f.open("r")) { + var obj = f.iniGetAllObjects(); + for(var i in obj) { + if(!obj[i].read && !obj[i].write) + writeln(obj[i].name); + } + f.close(); + } + break; + default: if(options.bbslist && request.indexOf("bbs:") == 0) { var list = sbbslist.read_list(); @@ -406,6 +420,8 @@ if(request.charAt(0)=='?' || request.charAt(0)=='.') { // Handle "special" reque writeln("\tsockopts"); writeln("\tnodelist"); writeln("\tactive-users.json"); + if(options.json_dbs) + writeln("\tjson-dbs"); if(options.findfile) writeln("\tfindfile"); if(options.bbslist) { diff --git a/exec/ftn-setup.js b/exec/ftn-setup.js index 4ac78745c384e3f89b610c248a480e336ba238eb..ffef89cfb157a72882e3bc12ac54a69da266efcd 100644 --- a/exec/ftn-setup.js +++ b/exec/ftn-setup.js @@ -74,7 +74,7 @@ var key; var zone; console.ungetstr(KEY_UP); while (!js.terminated) { - key = mouse_getkey(K_NONE, undefined, true); + key = mouse_getkey(K_NOSPIN, undefined, true); //key = console.getkey(); if (key.key.toLowerCase() == 'q') break; if (key.mouse && key.mouse.press && key.mouse.button == 0 && key.mouse.y == frame.y + frame.height - 1 && key.mouse.x >= 52 && key.mouse.x <= 65) break; @@ -106,3 +106,5 @@ while (!js.terminated) { } frame.close(); +console.creturn(); +console.cleartoeol(); diff --git a/exec/install-xtrn.js b/exec/install-xtrn.js index 14f26fdb1c40e3e4197558ac87b8d8017991bce7..729b0b6a17a997a5a6c2d8af7110b37b69bde4c3 100644 --- a/exec/install-xtrn.js +++ b/exec/install-xtrn.js @@ -27,6 +27,7 @@ // // [prog:<code>] // name = program name or description (40 chars max) +// cats = additional target installation categories (sections) // cmd = command-line to execute (63 chars max) // clean_cmd = clean-up command-line, if needed (63 chars max) // settings = bit-flags (see XTRN_* in sbbsdefs.js) @@ -69,12 +70,15 @@ // [ini:<filename.ini>[:section]] // keys = comma-separated list of keys to add/update in .ini // values = list of values to eval() and assign to keys[] +// Note: string values must be enclosed in quotes! // Additionally, each section can have the following optional keys that are // only used by this script (i.e. not written to any configuration files): // note = note to sysop displayed before installation // prompt = confirmation prompt (or false if no prompting) // required = if true, this item must be installed to continue +// last = if true, this item will be the last of its type +// done = if true, no more installer items will be processed // // Notes: // @@ -87,7 +91,7 @@ "use strict"; -const REVISION = "$Revision: 1.14 $".split(' ')[1]; +const REVISION = "3.18b"; const ini_fname = "install-xtrn.ini"; load("sbbsdefs.js"); @@ -105,14 +109,19 @@ function aborted() return false; } -function install_xtrn_item(cnf, type, name, desc, item) +function install_xtrn_item(cnf, type, name, desc, item, cats) { if (!item.code) return false; if (!item.name) item.name = name || item.code; - + + if(item.cats) + item.cats = item.cats.split(',').concat(cats); + else + item.cats = cats; + function find_code(objs, code) { if (!options.overwrite) { @@ -155,20 +164,30 @@ function install_xtrn_item(cnf, type, name, desc, item) if (type == "xtrn") { if (!xtrn_area.sec_list.length) return "No external program sections have been created"; - - for (var i = 0; i < xtrn_area.sec_list.length; i++) - print(format("%2u: ", i + 1) + xtrn_area.sec_list[i].name); - var which; - while ((!which || which > xtrn_area.sec_list.length) && !aborted()) - which = js.global.prompt("Install " + item.name + " into which section"); - if(aborted()) - return false; - which = parseInt(which, 10); - if (!which) - return false; - - item.sec = xtrn_area.sec_list[which - 1].number; + for (var i = 0; i < item.cats.length; i++) { + var code = item.cats[i].toLowerCase(); + if(xtrn_area.sec[code] + && confirm("Install " + item.name + " into " + xtrn_area.sec[code].name + " section")) { + item.sec = xtrn_area.sec[code].number; + break; + } + } + if(item.sec === undefined) { + for (var i = 0; i < xtrn_area.sec_list.length; i++) + print(format("%2u: ", i + 1) + xtrn_area.sec_list[i].name); + + var which; + while ((!which || which > xtrn_area.sec_list.length) && !aborted()) + which = js.global.prompt("Install " + item.name + " into which section"); + if(aborted()) + return false; + which = parseInt(which, 10); + if (!which) + return false; + + item.sec = xtrn_area.sec_list[which - 1].number; + } } @@ -241,27 +260,72 @@ function install(ini_fname) editor: { desc: "External Editor", struct: "xedit" } }; + var done = false; for (var t in types) { var list = ini_file.iniGetAllObjects("code", t + ":"); - for (var i = 0; i < list.length; i++) { + for (var i = 0; i < list.length && !done; i++) { var item = list[i]; if (item.startup_dir === undefined) item.startup_dir = startup_dir; - var result = install_xtrn_item(xtrn_cnf, types[t].struct, name, types[t].desc, item); + var result = install_xtrn_item(xtrn_cnf, types[t].struct, name, types[t].desc, item, cats); if (typeof result !== 'boolean') return result; if (result === true) installed++; else if(item.required) return false; + if(item.last === true) + break; + done = item.done; } } + var list = ini_file.iniGetAllObjects("filename", "ini:"); + for (var i = 0; i < list.length && !done; i++) { + var item = list[i]; + var a = item.filename.split(':'); + item.filename = startup_dir + a[0]; + if(!file_exists(item.filename)) + item.filename = file_cfgname(system.ctrl_dir, a[0]); + item.section = a[1] || null; + item.keys = item.keys.split(','); + item.values = item.values.split(','); + var prompt = "Add/update the " + (item.section || "root") + " section of " + file_getname(item.filename); + if (item.prompt !== undefined) + prompt = item.prompt; + if (prompt && !confirm(prompt)) { + if (item.required == true) + return prompt + " is required to continue"; + continue; + } + var file = new File(item.filename); + if(!file.open(file.exists ? 'r+':'w+')) + return "Error " + file.error + " opening " + file.name; + var result = true; + if (options.debug) + print(JSON.stringify(item)); + for(var k in item.keys) { + try { + var value = eval(item.values[k]); + } catch(e) { + return e; + } + print("Setting " + item.keys[k] + " = " + value); + result = file.iniSetValue(item.section, item.keys[k], value); + } + file.close(); + if(required && result !== true) + return false; + if(item.last === true) + break; + done = item.done; + } + var services_ini = new File(file_cfgname(system.ctrl_dir, "services.ini")); var list = ini_file.iniGetAllObjects("protocol", "service:"); - for (var i = 0; i < list.length; i++) { + for (var i = 0; i < list.length && !done; i++) { var item = list[i]; - var prompt = "Install/enable the " + item.protocol + " service in " + services_ini.name; + var prompt = "Install/enable the " + item.protocol + " service in " + file_getname(services_ini.name); if (item.prompt !== undefined) prompt = item.prompt; if (prompt && !confirm(prompt)) { @@ -292,41 +356,13 @@ function install(ini_fname) services_ini.close(); if(required && result !== true) return false; - } - - var list = ini_file.iniGetAllObjects("filename", "ini:"); - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var a = item.filename.split(':'); - item.filename = file_cfgname(system.ctrl_dir, a[0]); - item.section = a[1] || null; - item.keys = item.keys.split(','); - item.values = item.values.split(','); - var prompt = "Add/update the " + (item.section || "root") + " section of " + item.filename; - if (item.prompt !== undefined) - prompt = item.prompt; - if (prompt && !confirm(prompt)) { - if (item.required == true) - return prompt + " is required to continue"; - continue; - } - var file = new File(item.filename); - if(!file.open(file.exists ? 'r+':'w+')) - return "Error " + file.error + " opening " + file.name; - var result = true; - if (options.debug) - print(JSON.stringify(item)); - for(var k in item.keys) { - print("Setting " + item.keys[k] + " = " + eval(item.values[k])); - result = file.iniSetValue(item.section, item.keys[k], eval(item.values[k])); - } - file.close(); - if(required && result !== true) - return false; + if(item.last === true) + break; + done = item.done; } var list = ini_file.iniGetAllObjects("cmd", "exec:"); - for (var i = 0; i < list.length; i++) { + for (var i = 0; i < list.length && !done; i++) { var item = list[i]; var js_args = item.cmd.split(/\s+/); var js_file = js_args.shift(); @@ -355,10 +391,13 @@ function install(ini_fname) ,[js_file, item.startup_dir, {}].concat(js_args)); if (result !== 0 && item.required) return "Error " + result + " executing " + item.cmd; + if(item.last === true) + return true; + done = item.done; } var list = ini_file.iniGetAllObjects("str", "eval:"); - for (var i = 0; i < list.length; i++) { + for (var i = 0; i < list.length && !done; i++) { var item = list[i]; if (!item.cmd) item.cmd = item.str; // the str can't contain [], so allow cmd to override @@ -370,10 +409,18 @@ function install(ini_fname) return prompt + " is required to continue"; continue; } - if (!eval(item.cmd)) { + try { + var result = eval(item.cmd); + } catch(e) { + return e; + } + if (!result) { if (item.required == true) return "Truthful evaluation of '" + item.cmd + "' is required to continue"; } + if(item.last === true) + return true; + done = item.done; } if (installed) { @@ -396,16 +443,45 @@ for (var i = 0; i < argc; i++) { ini_list.push(argv[i]); } +function find_startup_dir(dir) +{ + for (var i in xtrn_area.prog) { + if(!xtrn_area.prog[i].startup_dir) + continue; + if (xtrn_area.prog[i].startup_dir.toLowerCase() == dir.toLowerCase()) + return i; + } + return null; +} + var xtrn_dirs = fullpath(system.ctrl_dir + "../xtrn/*"); if(!ini_list.length) { var dir_list = directory(xtrn_dirs); for(var d in dir_list) { + if(!options.overwrite && find_startup_dir(fullpath(dir_list[d])) != null) + continue; var fname = file_getcase(dir_list[d] + ini_fname); if(fname) ini_list.push(fname); } } +if(!options.auto && ini_list.length > 1) { + for(var i = 0; i < ini_list.length; i++) { + printf("%3d: %s\r\n", i+1, ini_list[i].substr(0, ini_list[i].length - ini_fname.length)); + } + var which; + while(!which || which < 1 || which > ini_list.length) { + var str = prompt("Which or [Q]uit"); + if(aborted()) + exit(0); + if(str && str.toUpperCase() == 'Q') + exit(0); + which = parseInt(str, 10); + } + ini_list = [ini_list[which - 1]]; +} + if(!ini_list.length) { if(options.auto) { alert("No install files (" + ini_fname + ") found in " + xtrn_dirs); @@ -414,6 +490,8 @@ if(!ini_list.length) { var ini_path; while (!ini_path || !file_exists(ini_path)) { ini_path = prompt("Location of " + ini_fname); + if(aborted()) + exit(0); if (file_isdir(ini_path)) ini_path = backslash(ini_path) + ini_fname; } diff --git a/exec/lbshell.js b/exec/lbshell.js index a8a77177351a1efe6661f88c911c9828c4e6ddc7..26be2a01bc814fbf93219a28b0595936a738ac80 100644 --- a/exec/lbshell.js +++ b/exec/lbshell.js @@ -708,6 +708,8 @@ while(bbs.online) { } else { bbs.exec_xtrn(xtrn_area.sec_list[curr_xtrnsec].prog_list[parseInt(x_prog)].number); + if(xtrn_area.sec_list[curr_xtrnsec].prog_list[parseInt(x_prog)].settings & XTRN_PAUSE) + console.pause(); } start_mouse(); draw_main(true); diff --git a/exec/load/fonts.js b/exec/load/fonts.js index 72d6e7a04db47d838c23c7469bad9ebfab148f1a..bc15c6a72143febdeddc27062af4c9237601ff00 100644 --- a/exec/load/fonts.js +++ b/exec/load/fonts.js @@ -57,7 +57,7 @@ function fonts(key) } } -if(cterm.supports_fonts() != false) +if(bbs.online && cterm.supports_fonts() != false) for(var i in argv) fonts(argv[i]); diff --git a/exec/load/frame.js b/exec/load/frame.js index d2bf10f5673c2ce6e752d1cffb7e30938bc19201..42d51e8dfe0cc89e101561e625fa5a2e1a423e58 100644 --- a/exec/load/frame.js +++ b/exec/load/frame.js @@ -1,4 +1,4 @@ -/* $Id: frame.js,v 1.89 2020/05/05 04:23:21 mcmlxxix Exp $ */ +/* $Id: frame.js,v 1.91 2020/08/01 19:32:23 rswindell Exp $ */ /** Javascript Frame Library @@ -1116,18 +1116,17 @@ Frame.prototype.putmsg = function(str,attr) { this.__properties__.curr_attr|=BLINK; break; case 'N': /* Normal */ - this.__properties__.curr_attr&=~HIGH; - this.__properties__.curr_attr&=~BLINK; + this.__properties__.curr_attr=(this.attr); + break; + case '+': + this.__properties__.attr_stack.push(this.__properties__.curr_attr); break; - case '+': - this.__properties__.attr_stack.push(this.__properties__.curr_attr); - break; case '-': /* Normal if High, Blink, or BG */ - if (this.__properties__.attr_stack.length) { - this.__properties__.curr_attr = this.__properties__.attr_stack.pop(); - } else if(this.__properties__.curr_attr & 0xf8) { - this.__properties__.curr_attr=this.attr; - } + if (this.__properties__.attr_stack.length) { + this.__properties__.curr_attr = this.__properties__.attr_stack.pop(); + } else if(this.__properties__.curr_attr & 0xf8) { + this.__properties__.curr_attr=this.attr; + } break; case '_': /* Normal if blink/background */ if(this.__properties__.curr_attr & 0xf0) @@ -1184,6 +1183,7 @@ Frame.prototype.putmsg = function(str,attr) { pos.x++; break; } + } } } diff --git a/exec/load/json-db.js b/exec/load/json-db.js index 2b07022a3635e5ce45302f3b4a7585e5e8d6beec..dd4781ead1a08d8c48fde68932efe6e05af8d085 100644 --- a/exec/load/json-db.js +++ b/exec/load/json-db.js @@ -68,7 +68,7 @@ function JSONdb (fileName, scope) { /* database settings */ this.settings={ /* misc settings */ - FILE:system.data_dir + "json-db.ini", + FILE:system.ctrl_dir + "json-db.ini", FILE_BUFFER:524288, LAST_SAVE:-1, SAVE_INTERVAL:-1, diff --git a/exec/load/podcast_routines.js b/exec/load/podcast_routines.js index cf8297744091ded37dff70a5c7ffc2767f263b6a..6e92497aa651b3b8b8e6c326b5b3122b97591e96 100644 --- a/exec/load/podcast_routines.js +++ b/exec/load/podcast_routines.js @@ -40,7 +40,7 @@ function podcast_load_headers(base, from, to, all_hdrs) continue; if (hdr.from.toLowerCase() != from.toLowerCase() || hdr.to.toLowerCase() != to.toLowerCase()) continue; - if (hdr.from_net_type != NET_NONE) + if (hdr.from_net_type) continue; hdrs.push(hdr); } diff --git a/exec/login.js b/exec/login.js index 4afffb21a7a550b0dcac23f4400ce44d445206a6..5c34a9024748ede3248fb6a9865fa873b6020794 100644 --- a/exec/login.js +++ b/exec/login.js @@ -24,7 +24,7 @@ var guest = options.guest && system.matchuser("guest"); if(!bbs.online) exit(); -if(!console.autoterm) { +if(!(console.autoterm&(USER_ANSI | USER_PETSCII | USER_UTF8))) { console.inactivity_hangup = options.inactive_hangup; log(LOG_NOTICE, "terminal not detected, reducing inactivity hang-up timeout to " + console.inactivity_hangup + " seconds"); } diff --git a/exec/logon.js b/exec/logon.js index dc8158ea7f9a4d57355d1b4d3655a80e09136f67..8af08c76ce14ddac2890f0492ef81049a1bd9556 100644 --- a/exec/logon.js +++ b/exec/logon.js @@ -152,11 +152,12 @@ if(user.security.level==99 /* Sysop logging on */ && !system.matchuser("guest") /* Guest account does not yet exist */ && bbs.mods.userprops.get("logon", "makeguest", true) /* Sysop has not asked to stop this question */ ) { - if(console.yesno("Create Guest/Anonymous user account (highly recommended)")) + if(console.yesno("\1?Create Guest/Anonymous user account (highly recommended)")) load("makeguest.js"); - else if(!console.yesno("Ask again later")) + else if(!console.yesno("Ask again later")) { bbs.mods.userprops.set("logon", "makeguest", false); - console.crlf(); + console.crlf(); + } } // Last few callers diff --git a/exec/major.src b/exec/major.src index 8a69ac35bb3129f1355915d7f870a41d7c4fcfd3..1e56d75383610b57aa995eb26761a4e451a57620 100644 --- a/exec/major.src +++ b/exec/major.src @@ -2,7 +2,7 @@ # MajorBBS Clone Command Shell for Synchronet -# $Id: major.src,v 1.12 2020/04/23 02:46:08 rswindell Exp $ +# $Id: major.src,v 1.13 2020/09/12 02:46:08 rswindell Exp $ # @format.tab-size 8, @format.use-tabs true @@ -53,7 +53,7 @@ cmdkey E end_cmd cmdkey W - print "_\r\nbhE-mail (User name or number): w" + print "\x01_\r\n\x01b\x01hE-mail (User name or number): \x01w" getname 40 compare_str "" if_true @@ -83,7 +83,7 @@ cmdkey E end_cmd cmdkey U - print "_\r\nbhE-mail (User name or number): w" + print "\x01_\r\n\x01b\x01hE-mail (User name or number): \x01w" getname 40 compare_str "" if_true @@ -132,6 +132,7 @@ cmdkey A cmdkey A user_defaults + exec_bin "termsetup" end_cmd cmdkey X @@ -141,7 +142,7 @@ cmdkey A end_cmd cmdkey R - print "\r\nchList Users\r\n" + print "\r\n\x01c\x01hList Users\r\n" mnemonics "\r\n~Logons Today, ~Sub-board, or ~All: " getcmd LSA\r @@ -236,7 +237,7 @@ cmdkey Q cmd_home menu maincfg async - print "\r\nyhConfig: n" + print "\r\n\x01y\x01hConfig: \x01n" getcmd ?QNPIS logkey @@ -300,7 +301,7 @@ getkey logkey cmdkey F - print "\r\nchList Files\r\n" + print "\r\n\x01c\x01hList Files\r\n" getfilespec if_true file_list @@ -308,7 +309,7 @@ cmdkey F end_cmd cmdkey D - print "\r\nchDownload File(s)\r\n" + print "\r\n\x01c\x01hDownload File(s)\r\n" file_download_batch if_true end_cmd @@ -320,7 +321,7 @@ cmdkey D end_cmd cmdkey U - print "\r\nchUpload File\r\n" + print "\r\n\x01c\x01hUpload File\r\n" chkfile "%zmenu/upload.*" if_true menu upload @@ -343,7 +344,7 @@ end_cmd :sysop menu sysmain -print "n\r\nchSelect an option (or X to exit): n" +print "\x01n\r\n\x01c\x01hSelect an option (or X to exit): \x01n" getstrupr 40 compare_str "X" diff --git a/exec/matrix.src b/exec/matrix.src index 094111a0615c52e854e71559ec93af6730db27b3..491d6596eaee74c81f70ac98d05ddbb14275ab70 100644 --- a/exec/matrix.src +++ b/exec/matrix.src @@ -39,42 +39,42 @@ else end_if print " " -print "4yh" -print "������������������������������ͻn\r\n" +print "\x014\x01y\x01h" +print "������������������������������ͻ\x01n\r\n" print " " -print "4yh" -print "� Logon Matrix �nb��n\r\n" +print "\x014\x01y\x01h" +print "� Logon Matrix �\x01n\x01b��\x01n\r\n" print " " -print "4yh" -print "������������������������������nb��n\r\n" -print " 4yh� " +print "\x014\x01y\x01h" +print "������������������������������\x01n\x01b��\x01n\r\n" +print " \x014\x01y\x01h� " compare m 0 if_equal - print "7bh" + print "\x10\x017\x01b\x01h" else - print " 4wh" + print " \x014\x01w\x01h" end_if print " Existing User Account " -print "4y �nb��n\r\n 4yh� " +print "\x014\x01y �\x01n\x01b��\x01n\r\n \x014\x01y\x01h� " compare m 1 if_equal - print "7bh" + print "\x10\x017\x01b\x01h" else - print " 4wh" + print " \x014\x01w\x01h" end_if print " New User Account " -print "4y �nb��n\r\n 4yh� " +print "\x014\x01y �\x01n\x01b��\x01n\r\n \x014\x01y\x01h� " compare m 2 if_equal - print "7bh" + print "\x10\x017\x01b\x01h" else - print " 4wh" + print " \x014\x01w\x01h" end_if print " Guest User Account " -print "4y �nb��n\r\n 4yh" -print "������������������������������ͼnb��n\r\nnb" +print "\x014\x01y �\x01n\x01b��\x01n\r\n \x014\x01y\x01h" +print "������������������������������ͼ\x01n\x01b��\x01n\r\n\x01n\x01b" print " " -print " ��������������������������������n\r\n" +print " ��������������������������������\x01n\r\n" #sync getkey diff --git a/exec/newuser.js b/exec/newuser.js index 95ef1ca915643d4a3e4a4b5f451d8348a0f8e6af..bde4e98da1bcf8a5cbb4507d2de9113a6d981929 100644 --- a/exec/newuser.js +++ b/exec/newuser.js @@ -28,7 +28,7 @@ if(options.send_newuser_welcome) // backwards compatibility hack console.clear(); -if(!user.address.length && user.number>1) { +if(!user.address.length && user.number>1 && options.survey !== false) { print("\1y\1hWhere did you hear about this BBS?"); user.address=console.getstr(30,K_LINE); } diff --git a/exec/pcboard.src b/exec/pcboard.src index 8df8eaa0dcaa081aa1bca88981a710c8c6717b2c..d360f3ed6538af15d6d642cb364a9a5c65767d79 100644 --- a/exec/pcboard.src +++ b/exec/pcboard.src @@ -2,7 +2,7 @@ # PCBoard v15.1 menu/command emulation -# $Id: pcboard.src,v 1.13 2020/04/23 02:46:09 rswindell Exp $ +# $Id: pcboard.src,v 1.14 2020/09/12 02:46:09 rswindell Exp $ # @format.tab-size 8, @format.use-tabs true @@ -18,8 +18,8 @@ if_false end_if node_action node_main async -print "n\r\nyh(r@MINLEFT@y min. left) @GRP@ (@GN@) @SUB@ (@SN@) " -print "Command? n" +print "\x01n\r\n\x01y\x01h(\x01r@MINLEFT@\x01y min. left) @GRP@ (@GN@) @SUB@ (@SN@) " +print "Command? \x01n" getstr 60 compare_str "" @@ -101,7 +101,7 @@ cmdstr L end_cmd cmdstr N - print "\r\nbhUse c@LASTNEW@b for new file scan date" + print "\r\n\x01b\x01hUse \x01c@LASTNEW@\x01b for new file scan date" yes_no "" if_false file_ptrs_cfg @@ -219,6 +219,7 @@ cmdstr G cmdstr W user_defaults + exec_bin "termsetup" end_cmd cmdstr O @@ -271,7 +272,7 @@ if_true crlf finduser if_true - print "yhVerified: w" + print "\x01y\x01hVerified: \x01w" printstr crlf end_if @@ -279,7 +280,7 @@ if_true end_If cmdstr USER - print "\r\nyhUsername search string (Enter=List Conferences Users): w" + print "\r\n\x01y\x01hUsername search string (Enter=List Conferences Users): \x01w" getname 25 compare_str "" if_true @@ -288,7 +289,7 @@ cmdstr USER crlf finduser if_true - print "yhVerified: w" + print "\x01y\x01hVerified: \x01w" printstr crlf end_if @@ -296,6 +297,6 @@ cmdstr USER end_If end_cmd -print "\r\nrhInvalid Entry! Please try again, @FIRST@ ...\r\n" +print "\r\n\x01r\x01hInvalid Entry! Please try again, @FIRST@ ...\r\n" end_cmd diff --git a/exec/privatemsg.js b/exec/privatemsg.js index 67416ee2e754c8d9d020c2b567fd99c660998e8a..02b4222f1ee2bd15cff94da3f0c3005a9028464b 100644 --- a/exec/privatemsg.js +++ b/exec/privatemsg.js @@ -1,4 +1,4 @@ -// $Id: privatemsg.js,v 1.10 2020/04/21 20:30:19 rswindell Exp $ +// $Id: privatemsg.js,v 1.10 2020/09/13 20:30:19 rswindell Exp $ // Private Message Module // Installed in SCFG->System->Loadable Modules->Private Msg @@ -67,8 +67,6 @@ while(bbs.online && !(console.aborted)) { continue; if(node.misc & NODE_POFF) continue; - if(node.useron == user.number) - continue; if(!shown) { writeln(); write(bbs.text(NodeLstHdr)); @@ -81,8 +79,6 @@ while(bbs.online && !(console.aborted)) { var web_users = presence.web_users(); for(w = 0; w < web_users.length; w++) { var web_user = web_users[w]; - if(web_user.name == user.alias) - continue; if(web_user.do_not_disturb) continue; if(!shown) { @@ -103,11 +99,11 @@ while(bbs.online && !(console.aborted)) { var node_num = parseInt(str, 10); var user_num; if(node_num > 0) { - if(users[node_num - 1] == undefined) { + user_num = users[node_num - 1]; + if(user_num == undefined) { write(format(bbs.text(NodeNIsNotInUse), node_num)); break; } - user_num = users[node_num - 1]; } else if(str.charAt(0) == '#') user_num = parseInt(str.slice(1), 10); @@ -122,6 +118,10 @@ while(bbs.online && !(console.aborted)) { break; } } + if(user_num == user.number && !user.is_sysop) { + write(format(bbs.text(NoNeedToSendMsgToSelf))); + break; + } var user_name = system.username(user_num); write(format(bbs.text(SendingTelegramToUser), user_name, user_num)); var msg = []; diff --git a/exec/renegade.src b/exec/renegade.src index 53619df9d048a58b32e217a81d0166ef77dcd02a..a16b089afb268e0a7fa644b78c2c46200252fe3b 100644 --- a/exec/renegade.src +++ b/exec/renegade.src @@ -1,6 +1,6 @@ # renegade.src -# $Id: renegade.src,v 1.16 2020/04/23 02:46:09 rswindell Exp $ +# $Id: renegade.src,v 1.16 2020/09/12 02:46:09 rswindell Exp $ # @format.tab-size 8, @format.use-tabs true @@ -155,6 +155,7 @@ cmdkey O cmdkey P user_defaults + exec_bin "termsetup" end_cmd cmdkey ! diff --git a/exec/sbbslist.js b/exec/sbbslist.js index 10f2d286ca30141e6376d9649854a48d2a95ad8a..4e12a07731d867b37342e4471eb65d6cf5b3f305 100644 --- a/exec/sbbslist.js +++ b/exec/sbbslist.js @@ -736,8 +736,8 @@ function verify_bbs(bbs) for(i in bbs.service) { if(js.terminated) break; - var protocol = bbs.service[i].protocol.toLowerCase(); - if(protocol != "telnet" && protocol != "rlogin") + var protocol = bbs.service[i].protocol; + if(!protocol || (protocol.toLowerCase() != "telnet" && protocol.toLowerCase() != "rlogin")) continue; bbs.entry.autoverify.attempts++; var result = verify_terminal_service(bbs.service[i]); @@ -1082,7 +1082,7 @@ function browse(list) var num_entries_on_page = 0; var prompt_row = 0; var previous_prompt_row = 0; - while(!js.terminated) { + while(js.global.bbs.online && !js.terminated) { // console.clear(LIGHTGRAY); console.home(); console.current_column = 0; @@ -1590,7 +1590,7 @@ function view(list, current) { console.line_counter = 0; console.clear(LIGHTGRAY); - while(!js.terminated) { + while(js.global.bbs.online && !js.terminated) { /* Bounds checking: */ if(current < 0) { @@ -1746,7 +1746,7 @@ function view(list, current) } console.clear(); lib.draw_preview(bbs); - key = console.getkey(); + key = console.getkey(K_NOSPIN); console.clear(); if(!is_nav_key(key)) break; @@ -1763,10 +1763,12 @@ function view(list, current) current++; break; } - if(current >= list.length) + if(current < 0 || current >= list.length) break; bbs = list[current]; } while(!bbs.preview); + if(current < 0 || current >= list.length) + break; } break; case 'L': @@ -1778,7 +1780,7 @@ function view(list, current) if(result == true) { console.clear(); lib.draw_preview(copy); - console.getkey(); + console.getkey(K_NOSPIN); } else { console.crlf(); alert("Result: " + result); @@ -2327,6 +2329,9 @@ function main() case "-exclude": exclude.push(val); break; + case "-force": + export_freq = 0; + break; case "-format": if(val === undefined || val === '?' || !val.length) { print("Supported list formats:"); @@ -2578,6 +2583,9 @@ function main() break; } break; + case "share": + print(lfexpand(JSON.stringify(lib.share_list(list, optval[cmd] == "qwk"), null, 1))); + break; case "add": if(lib.system_exists(list, system.name)) { alert("System '" + system.name + "' already exists"); diff --git a/exec/sdos.src b/exec/sdos.src index 7c568fe29da4f85863703b22f942c1a77acd5892..bee7966242217cd3b90c35aab5b0c42c77f603ef 100644 --- a/exec/sdos.src +++ b/exec/sdos.src @@ -2,7 +2,7 @@ # DOS shell for Synchronet version 2 systems -# $Id: sdos.src,v 1.15 2020/04/23 02:46:09 rswindell Exp $ +# $Id: sdos.src,v 1.15 2020/09/12 02:46:09 rswindell Exp $ # @format.tab-size 8, @format.use-tabs true @@ -149,6 +149,7 @@ if_true compare_str "setup" if_true user_defaults + exec_bin "termsetup" return end_if diff --git a/exec/simple.src b/exec/simple.src index d9dec4f0f4a32aba2656636af972d7368f2c27de..00a47bda776a75f653585ea6a314cc9387b1a4f0 100644 --- a/exec/simple.src +++ b/exec/simple.src @@ -2,7 +2,7 @@ # Simple Synchronet Command Shell - for beginner/first-time users -# $Id: simple.src,v 1.13 2020/04/23 02:46:09 rswindell Exp $ +# $Id: simple.src,v 1.13 2020/09/12 02:46:09 rswindell Exp $ # @format.tab-size 8, @format.use-tabs true @@ -187,6 +187,7 @@ cmdstr DOORS #Account config (user defaults) cmdstr A user_defaults + exec_bin "termsetup" end_cmd #Page another user diff --git a/exec/str_cmds.js b/exec/str_cmds.js index ca9f02ae59c5ee0bb1b66283f18ed7d907537045..99f4edf77a8cc8d70dba324193c2802877e1a20e 100644 --- a/exec/str_cmds.js +++ b/exec/str_cmds.js @@ -65,6 +65,16 @@ function str_cmds(str) //sync // ######################## SYSOP Functions ############################## + if(str=="HELP") { + writeln("AVAIL\tToggle sysop chat availability"); + } + if(str=="AVAIL") { + system.operator_available = !system.operator_available; + write(format(bbs.text(text.LiSysopIs) + , bbs.text(system.operator_available ? text.LiSysopAvailable : text.LiSysopNotAvailable))); + return; + } + if(str=="HELP") { writeln("ERR\tDisplay currrent error log and opptionally delete it as well as"); writeln("\toptionally clearing all nodes error counters."); diff --git a/exec/testbuild.js b/exec/testbuild.js index 58f5df70de9b619bada807a3b985294abc05f225..e8e3913cfe242459b059dc257c9462f831ee157b 100755 --- a/exec/testbuild.js +++ b/exec/testbuild.js @@ -220,9 +220,9 @@ send_email(system.platform + " builds successful in " + elapsed_time(time() - st chdir(temp_dir); -var comment = "Successful build on " + system_description; -system.exec("git tag -m \"" + comment + "\" -a goodbuild_" + platform + "_" + date_str); -system.exec("git push --tags"); +system.exec("git checkout -b dailybuild_" + platform); +system.exec("git merge master"); +system.exec("git push --set-upstream origin dailybuild_" + platform); var dest = file_area.dir["sbbs"].path+archive; log(LOG_INFO,format("Copying %s to %s",archive,dest)); diff --git a/exec/text_sec.js b/exec/text_sec.js index 8b30d186e01b15f9ef0f4a7cb02291237cece34f..e98fd432bb7d57f7d9d1ade3f79f50802873bf0e 100644 --- a/exec/text_sec.js +++ b/exec/text_sec.js @@ -185,6 +185,14 @@ while(bbs.online) { alert("Sorry, you can't read that file"); break; } + if(!list[cmd].path) { + alert("Sorry, that file doesn't exist yet"); + break; + } + if(file_size(list[cmd].path) < 1) { + alert("Sorry, that file doens't have any content yet"); + break; + } var mode = P_OPENCLOSE | P_CPM_EOF; if(list[cmd].mode !== undefined) mode = eval(list[cmd].mode); diff --git a/exec/wildcat.src b/exec/wildcat.src index b4c5a2f05c01cabbe0f48fb5b5b3afc62d44442b..9a9df8698cc002efdfed874e27b44e8d7db5a0d4 100644 --- a/exec/wildcat.src +++ b/exec/wildcat.src @@ -1,6 +1,6 @@ # wildcat.src -# $Id: wildcat.src,v 1.17 2020/04/23 02:46:09 rswindell Exp $ +# $Id: wildcat.src,v 1.17 2020/09/12 02:46:09 rswindell Exp $ # @format.tab-size 8, @format.use-tabs true @@ -95,6 +95,7 @@ cmdkey I cmdkey Y user_defaults + exec_bin "termsetup" end_cmd cmdkey W diff --git a/exec/wwiv.src b/exec/wwiv.src index 2d2d4edbcd5a30f38c61cfffe84b2c5892d6f1c2..230ebc7996bd4610f9b9a77045aa710e79d382af 100644 --- a/exec/wwiv.src +++ b/exec/wwiv.src @@ -21,11 +21,11 @@ async # Display main Prompt compare_ars exempt T if_true - print "\r\nnT - @TUSED@\n\r" + print "\r\n\x01nT - @TUSED@\n\r" else - print "\r\nnT - @TLEFT@\n\r" + print "\r\n\x01nT - @TLEFT@\n\r" end_if -print "yh(@GN@:@SN@) (@GRP@: @SUBL@) : n" +print "\x01y\x01h(@GN@:@SN@) (@GRP@: @SUBL@) : \x01n" # Get key (with / extended commands allowed) getkeye @@ -135,6 +135,7 @@ cmdkey C cmdkey D user_defaults + exec_bin "termsetup" end_cmd cmdkey E @@ -142,7 +143,7 @@ cmdkey E end_cmd cmdkey F - print "\r\nchFind Text in Messages\r\n" + print "\r\n\x01c\x01hFind Text in Messages\r\n" msg_find_text end_cmd @@ -179,7 +180,7 @@ cmdkey $ end_cmd cmdkey N - print "\r\nchNew Message Scan\r\n" + print "\r\n\x01c\x01hNew Message Scan\r\n" msg_new_scan end_cmd @@ -220,7 +221,7 @@ cmdkey S end_cmd cmdkey Y - print "\r\nchScan for Messages Posted to You\r\n" + print "\r\n\x01c\x01hScan for Messages Posted to You\r\n" msg_your_scan end_cmd @@ -229,7 +230,7 @@ cmdkey /S end_cmd cmdkey U - print "\r\nchList Users\r\n" + print "\r\n\x01c\x01hList Users\r\n" mnemonics "\r\n~Logons Today, ~Sub-board, or ~All: " getcmd LSA\r @@ -255,7 +256,7 @@ cmdkey . end_cmd cmdkey Z - print "\r\nchContinuous New Message Scan\r\n" + print "\r\n\x01c\x01hContinuous New Message Scan\r\n" msg_cont_scan end_cmd @@ -276,18 +277,18 @@ cmdkey & end_cmd cmdkey # - print "\r\nchType the actual number, not the symbol.\r\n" + print "\r\n\x01c\x01hType the actual number, not the symbol.\r\n" end_cmd cmdkey /# - print "\r\nchType the actual number, not the symbol.\r\n" + print "\r\n\x01c\x01hType the actual number, not the symbol.\r\n" end_cmd # fall through -print "\r\nchUnrecognized command." +print "\r\n\x01c\x01hUnrecognized command." compare_ars expert if_true - print " Hit 'i?nch' for a menu." + print " Hit '\x01i?\x01n\x01c\x01h' for a menu." end_if crlf end_cmd @@ -306,7 +307,7 @@ if_false menu MAININFO end_if async -print "\r\nyhInfo: n" +print "\r\n\x01y\x01hInfo: \x01n" getcmd ?QISVY\r logkey @@ -350,7 +351,7 @@ if_false menu MAINCFG end_if async -print "\r\nyhConfig: n" +print "\r\n\x01y\x01hConfig: \x01n" getcmd ?QNPIS\r logkey @@ -403,11 +404,11 @@ async # Display main Prompt compare_ars exempt T if_true - print "\r\nnT - @TUSED@\n\r" + print "\r\n\x01nT - @TUSED@\n\r" else - print "\r\nnT - @TLEFT@\n\r" + print "\r\n\x01nT - @TLEFT@\n\r" end_if -print "yh[@LN@:@DN@] [@LIB@: @DIRL@] : n" +print "\x01y\x01h[@LN@:@DN@] [@LIB@: @DIRL@] : \x01n" # Get key (with / extended commands allowed) getkeye @@ -517,7 +518,7 @@ cmdkey C end_cmd cmdkey D - print "\r\nchDownload File(s)\r\n" + print "\r\n\x01c\x01hDownload File(s)\r\n" file_download_batch if_true end_cmd @@ -529,12 +530,12 @@ cmdkey D end_cmd cmdkey /D - print "\r\nchDownload File(s) from User(s)\r\n" + print "\r\n\x01c\x01hDownload File(s) from User(s)\r\n" file_download_user end_cmd cmdkey E - print "\r\nchList Extended File Information\r\n" + print "\r\n\x01c\x01hList Extended File Information\r\n" getfilespec if_true file_list_extended @@ -542,7 +543,7 @@ cmdkey E end_cmd cmdkey F - print "\r\nchFind Text in File Descriptions (no wildcards)\r\n" + print "\r\n\x01c\x01hFind Text in File Descriptions (no wildcards)\r\n" file_find_text end_cmd @@ -559,7 +560,7 @@ cmdkey J end_cmd cmdkey L - print "\r\nchList Files\r\n" + print "\r\n\x01c\x01hList Files\r\n" getfilespec if_true file_list @@ -575,7 +576,7 @@ cmdkey W end_cmd cmdkey N - print "\r\nchNew File Scan\r\n" + print "\r\n\x01c\x01hNew File Scan\r\n" file_new_scan end_cmd @@ -600,7 +601,7 @@ cmdkey /O end_cmd cmdkey R - print "\r\nchRemove/Edit File(s)\r\n" + print "\r\n\x01c\x01hRemove/Edit File(s)\r\n" getfilespec if_true file_remove @@ -608,7 +609,7 @@ cmdkey R end_cmd cmdkey S - print "\r\nchSearch for Filename(s)\r\n" + print "\r\n\x01c\x01hSearch for Filename(s)\r\n" file_find_name end_cmd @@ -621,17 +622,17 @@ cmdkey G end_cmd cmdkey U - print "\r\nchUpload File\r\n" + print "\r\n\x01c\x01hUpload File\r\n" file_upload end_cmd cmdkey /U - print "\r\nchUpload File to User\r\n" + print "\r\n\x01c\x01hUpload File to User\r\n" file_upload_user end_cmd cmdkey V - print "\r\nchView File(s)\r\n" + print "\r\n\x01c\x01hView File(s)\r\n" getfilespec if_true file_view @@ -639,7 +640,7 @@ cmdkey V end_cmd cmdkey Z - print "\r\nchUpload File to Sysop\r\n" + print "\r\n\x01c\x01hUpload File to Sysop\r\n" file_upload_sysop end_cmd @@ -658,7 +659,7 @@ cmdkey T menu XFERCFG end_if async - print "\r\nyhConfig: n" + print "\r\n\x01y\x01hConfig: \x01n" getcmd ?QBP\r logkey @@ -680,11 +681,11 @@ cmdkey T end_cmd cmdkey # - print "\r\nchType the actual number, not the symbol.\r\n" + print "\r\n\x01c\x01hType the actual number, not the symbol.\r\n" end_cmd cmdkey /# - print "\r\nchType the actual number, not the symbol.\r\n" + print "\r\n\x01c\x01hType the actual number, not the symbol.\r\n" end_cmd cmdkey P @@ -696,10 +697,10 @@ cmdkey Y end_cmd # fall through -print "\r\nchUnrecognized command." +print "\r\n\x01c\x01hUnrecognized command." compare_ars expert if_true - print " Hit 'i?nch' for a menu." + print " Hit '\x01i?\x01n\x01c\x01h' for a menu." end_if crlf end_cmd @@ -718,7 +719,7 @@ if_false menu XFERINFO end_if async -print "\r\nyhInfo: n" +print "\r\n\x01y\x01hInfo: \x01n" getcmd ?TYDUQ\r logkey diff --git a/exec/xtrn-setup.js b/exec/xtrn-setup.js index ca6abf3e905b26b3cab18f60e1c0aa5e49418584..f8f04006ceabe0dce1be0da3584c845178278902 100644 --- a/exec/xtrn-setup.js +++ b/exec/xtrn-setup.js @@ -48,6 +48,8 @@ directory(system.exec_dir + '../xtrn/*', GLOB_ONLYDIR).forEach(function (e) { } const xtrn = f.iniGetObject(); f.close(); + if(xtrn['xtrn-setup'] === false) + return; if(!xtrn.Name) { alert("Skipping file with no 'Name' value: " + f.name); return; @@ -76,7 +78,7 @@ var key; var xtrn; console.ungetstr(KEY_UP); while (!js.terminated) { - key = mouse_getkey(K_NONE, undefined, true);//console.getkey(); + key = mouse_getkey(K_NOSPIN, undefined, true);//console.getkey(); if (key.key.toLowerCase() == 'q') break; if (key.mouse && key.mouse.press && key.mouse.button == 0 && key.mouse.y == frame.y + frame.height - 1 && key.mouse.x >= 52 && key.mouse.x <= 65) break; t = tree.getcmd(key); diff --git a/exec/xtrn_sec.js b/exec/xtrn_sec.js index e17755ab93a221184d3ff92c5b21e5527e6b2956..55d7f156b824d1f490cb08c58bf7b6d299628f84 100644 --- a/exec/xtrn_sec.js +++ b/exec/xtrn_sec.js @@ -82,6 +82,7 @@ function sort_by_name(a, b) function exec_xtrn(prog) { + console.attributes = LIGHTGRAY; if(options.clear_screen_on_exec) console.clear(); if(options.eval_before_exec) diff --git a/install/install.iss b/install/install.iss index bb196b6842e236b8118352151154b2394f0bbc38..59e72002a5b11bd784dabc1eb9fc88ddea8f9b83 100644 --- a/install/install.iss +++ b/install/install.iss @@ -2,7 +2,7 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "Synchronet BBS Software" -#define MyAppVersion "3.17b" +#define MyAppVersion "3.18b" #define MyAppPublisher "Rob Swindell" #define MyAppURL "http://www.synchro.net/" #define MyAppSupportURL "http://wiki.synchro.net/howto:support" @@ -10,7 +10,7 @@ #define MyAppExeName "sbbsctrl.exe" #define sbbsCtrlPanel "Synchronet Control Panel" #define release "release" -#define source "e:\src\sbbs317" +#define source "e:\sbbs" [Setup] ; NOTE: The value of AppId uniquely identifies this application. @@ -24,8 +24,8 @@ AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppSupportURL} AppUpdatesURL={#MyAppDownloadURL} -AppCopyright=Copyright 2019 {#MyAppPublisher} -VersionInfoVersion=3.17.1 +AppCopyright=Copyright 2020 {#MyAppPublisher} +VersionInfoVersion=3.18.1 AppMutex=sbbs_running,sbbsctrl_running DefaultDirName={sd}\sbbs DefaultGroupName={#MyAppName} @@ -36,7 +36,7 @@ OutputBaseFilename=setup Compression=lzma SolidCompression=yes MinVersion = 5.1 -InfoBeforeFile=e:\stock\docs\install.rtf +InfoBeforeFile=docs\install.rtf ChangesEnvironment=yes SourceDir={#source} UninstallDisplayIcon="{app}\exec\sbbsctrl.exe" @@ -58,38 +58,41 @@ Name: "enable_web"; Description: "Enable Web Server (HTTP protocol)"; GroupDescr Name: "enable_svcs"; Description: "Enable Synchronet Services (Finger, Gopher, NNTP, IRC, IMAP, etc.)"; GroupDescription: {#services_group} Name: "enable_ntsvcs"; Description: "Enable Synchronet NT services"; GroupDescription: {#ntsvcs_group}; Flags: unchecked Name: "enable_sexpots"; Description: "Enable POTS (dial-up modem) support service"; GroupDescription: {#ntsvcs_group}; Flags: unchecked -name: "web_runemaster"; Description: "Enable Legacy/Runemaster Web Interface"; GroupDescription: {#webui_group}; Flags: exclusive -name: "web_echicken"; Description: "Enable echicken's Web Interface (v4)"; GroupDescription: {#webui_group}; Flags: exclusive unchecked +name: "web_echicken"; Description: "Enable echicken's Web Interface (v4)"; GroupDescription: {#webui_group}; Flags: exclusive +name: "web_runemaster"; Description: "Enable Legacy/Runemaster Web Interface"; GroupDescription: {#webui_group}; Flags: unchecked exclusive [Files] -Source: "src\sbbs3\ctrl\sbbsctrl.exe"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "src\sbbs3\chat\chat.exe"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "src\sbbs3\useredit\useredit.exe"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "src\sbbs3\msvc.win32.exe.{#release}\*.exe"; DestDir: "{app}\exec"; Flags: ignoreversion; Excludes: "textgen.exe, v4upgrade.exe" -Source: "src\sbbs3\msvc.win32.dll.{#release}\*.dll"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "src\sbbs3\msvc.win32.dll.release\sbbsexec.dll"; DestDir: "{sys}"; -Source: "src\sbbs3\scfg\msvc.win32.exe.{#release}\scfg.exe"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "3rdp\win32.release\nspr\bin\nspr4.dll"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "3rdp\win32.release\mozjs\bin\mozjs185-1.0.dll"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "3rdp\win32.release\cryptlib\bin\cl32.dll"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "src\sexpots\{#release}\sexpots.exe"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "s:\sbbs\exec\user.com"; DestDir: "{app}\exec"; Flags: ignoreversion; Check: not IsWin64 -Source: "s:\sbbs\exec\mlabels.exe"; DestDir: "{app}\exec"; Flags: ignoreversion; Check: not IsWin64 -Source: "s:\sbbs\exec\svdmansi.com"; DestDir: "{app}\exec"; Flags: ignoreversion; Check: not IsWin64 -Source: "s:\sbbs\exec\dosxtrn.exe"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "e:\stock\node1\node.cnf"; DestDir: "{app}\node1"; Flags: ignoreversion -Source: "e:\stock\node1\node.cnf"; DestDir: "{app}\node2"; Flags: ignoreversion -Source: "e:\stock\node1\node.cnf"; DestDir: "{app}\node3"; Flags: ignoreversion -Source: "e:\stock\node1\node.cnf"; DestDir: "{app}\node4"; Flags: ignoreversion -Source: "e:\stock\exec\*"; DestDir: "{app}\exec"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "CVS,.#*,baja.js,menu.js,sbbsedit.js,jsdocs.js,testbuild.js,load\menulib.js" -Source: "e:\stock\ctrl\*"; DestDir: "{app}\ctrl"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "CVS,.#*,*.?.cnf,*.?.ini" -Source: "e:\stock\text\*"; DestDir: "{app}\text"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "CVS,.#*" -Source: "e:\stock\xtrn\*"; DestDir: "{app}\xtrn"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "CVS,.#*,server.ini" -Source: "e:\stock\docs\*"; DestDir: "{app}\docs"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "CVS,.#*" -Source: "e:\stock\web\*"; DestDir: "{app}\web"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "CVS,.#*" -Source: "e:\stock\webv4\*"; DestDir: "{app}\webv4"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "CVS,.#*" -Source: "c:\bin\zip.exe"; DestDir: "{app}\exec"; Flags: ignoreversion -Source: "c:\bin\unzip.exe"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "src\sbbs3\ctrl\sbbsctrl.exe"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "src\sbbs3\chat\chat.exe"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "src\sbbs3\useredit\useredit.exe"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "src\sbbs3\msvc.win32.exe.{#release}\*.exe"; DestDir: "{app}\exec"; Flags: ignoreversion; Excludes: "textgen.exe, v4upgrade.exe" +Source: "src\sbbs3\msvc.win32.dll.{#release}\*.dll"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "s:\sbbs\exec\sbbsexec.dll"; DestDir: "{sys}"; +Source: "src\sbbs3\scfg\msvc.win32.exe.{#release}\scfg.exe"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "3rdp\win32.release\nspr\bin\nspr4.dll"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "3rdp\win32.release\mozjs\bin\mozjs185-1.0.dll"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "3rdp\win32.release\cryptlib\bin\cl32.dll"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "src\sexpots\{#release}\sexpots.exe"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "s:\sbbs\exec\user.com"; DestDir: "{app}\exec"; Flags: ignoreversion; Check: not IsWin64 +Source: "s:\sbbs\exec\mlabels.exe"; DestDir: "{app}\exec"; Flags: ignoreversion; Check: not IsWin64 +Source: "s:\sbbs\exec\svdmansi.com"; DestDir: "{app}\exec"; Flags: ignoreversion; Check: not IsWin64 +Source: "s:\sbbs\exec\dosxtrn.exe"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "node1\node.cnf"; DestDir: "{app}\node1"; Flags: ignoreversion +Source: "node1\node.cnf"; DestDir: "{app}\node2"; Flags: ignoreversion +Source: "node1\node.cnf"; DestDir: "{app}\node3"; Flags: ignoreversion +Source: "node1\node.cnf"; DestDir: "{app}\node4"; Flags: ignoreversion +Source: "exec\*"; DestDir: "{app}\exec"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "baja.js,menu.js,sbbsedit.js,jsdocs.js,testbuild.js,load\menulib.js" +Source: "ctrl\*"; DestDir: "{app}\ctrl"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.?.cnf,*.?.ini" +Source: "text\*"; DestDir: "{app}\text"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.0??.*,.gitignore" +Source: "xtrn\*"; DestDir: "{app}\xtrn"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.obj,*.tds,smm,.gitignore" +Source: "docs\*"; DestDir: "{app}\docs"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "web\*"; DestDir: "{app}\web"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "webv4\*"; DestDir: "{app}\webv4"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "webv4\pages\.examples\*"; DestDir: "{app}\webv4\pages"; Flags: ignoreversion recursesubdirs +Source: "webv4\components\.examples\*"; DestDir: "{app}\webv4\components"; Flags: ignoreversion recursesubdirs +Source: "webv4\sidebar\.examples\*"; DestDir: "{app}\webv4\sidebar"; Flags: ignoreversion recursesubdirs +Source: "c:\bin\zip.exe"; DestDir: "{app}\exec"; Flags: ignoreversion +Source: "c:\bin\unzip.exe"; DestDir: "{app}\exec"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] @@ -131,6 +134,7 @@ Filename: "{app}\ctrl\sbbs.ini"; Section: "FTP"; Key: "AutoStart"; String: Filename: "{app}\ctrl\sbbs.ini"; Section: "Web"; Key: "AutoStart"; String: "false"; Tasks: not enable_web Filename: "{app}\ctrl\sbbs.ini"; Section: "Services"; Key: "AutoStart"; String: "false"; Tasks: not enable_svcs Filename: "{app}\ctrl\sbbs.ini"; Section: "BBS"; Key: "Options"; String: "XTRN_MINIMIZED | ALLOW_RLOGIN | ALLOW_SSH | NO_DOS"; Check: IsWin64 +Filename: "{app}\ctrl\sbbs.ini"; Section: "Web"; Key: "RootDirectory"; String: "../web/root"; Tasks: web_runemaster Filename: "{app}\ctrl\sbbs.ini"; Section: "Web"; Key: "RootDirectory"; String: "../webv4/root"; Tasks: web_echicken [Dirs] diff --git a/node1/node.cnf b/node1/node.cnf index 79d7a50a007232d7cd9f9d6b8dd03bd43ecb24c7..194e4ce6ff25dca6d0c6e04cad2ab3d1ee7215d0 100644 Binary files a/node1/node.cnf and b/node1/node.cnf differ diff --git a/src/conio/ansi_cio.c b/src/conio/ansi_cio.c index 5a14e11f457677eefb7048868cd87312cbf015be..5f87ec5b9ba419daa587ec94a7c7f646f6680dc0 100644 --- a/src/conio/ansi_cio.c +++ b/src/conio/ansi_cio.c @@ -999,6 +999,14 @@ int ansi_initciolib(long inmode) return(1); } +void ansi_suspend(void) +{ +#if defined _WIN32 + // Prevents the wait for a key press when exit() is called and the stdin stream is flushed + _unlock_file(stdin); +#endif +} + CIOLIBEXPORT void CIOLIBCALL ansi_ciolib_setdoorway(int enable) { if(cio_api.mode!=CIOLIB_MODE_ANSI) diff --git a/src/conio/ansi_cio.h b/src/conio/ansi_cio.h index 4da258d908c697cf679915080bf163c7a64cbf68..1a652533a0cbdf97ab569251fc607b1e7585f636 100644 --- a/src/conio/ansi_cio.h +++ b/src/conio/ansi_cio.h @@ -70,6 +70,7 @@ int ansi_getch(void); int ansi_getche(void); void ansi_beep(void); void ansi_textmode(int mode); +void ansi_suspend(void); #ifdef __cplusplus } #endif diff --git a/src/conio/ciolib.c b/src/conio/ciolib.c index 39d9a1fa0cc0d1873634a10808e51b1f0dfd18f5..c35658bfc7fefbfada68c8d2a623bcc93bf78302 100644 --- a/src/conio/ciolib.c +++ b/src/conio/ciolib.c @@ -322,6 +322,7 @@ static int try_ansi_init(int mode) cio_api.textmode=ansi_textmode; cio_api.ESCDELAY=&CIOLIB_ANSI_TIMEOUT; cio_api.beep=ansi_beep; + cio_api.suspend=ansi_suspend; return(1); } return(0); diff --git a/src/conio/conio.vcxproj b/src/conio/conio.vcxproj index fcbbd146f071ef187eb58275ce85dbc47fee9146..7de54589694f279a0ce4abf849f1e970c36a9958 100644 --- a/src/conio/conio.vcxproj +++ b/src/conio/conio.vcxproj @@ -65,7 +65,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;LINK_LIST_THREADSAFE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release_mt/conio.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release_mt/</AssemblerListingLocation> diff --git a/src/conio/conio_sdl.vcxproj b/src/conio/conio_sdl.vcxproj index 545907908662ca91ef2f6b96de39a4d681c512f9..72fd54b0b243f423c2e94118919d480a0e82da48 100644 --- a/src/conio/conio_sdl.vcxproj +++ b/src/conio/conio_sdl.vcxproj @@ -61,7 +61,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;LINK_LIST_THREADSAFE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.sdl.release/conio.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.sdl.release/</AssemblerListingLocation> diff --git a/src/sbbs3/addfiles.c b/src/sbbs3/addfiles.c index 73fc9442e922fddcfa83e59b5d9d9ebd3f83cc87..5dabc3ba37fd3d33ad653c5e483a955d496e421c 100644 --- a/src/sbbs3/addfiles.c +++ b/src/sbbs3/addfiles.c @@ -1000,7 +1000,7 @@ int main(int argc, char **argv) synclist(str,i); continue; } - sprintf(str,"%s%s",scfg.dir[f.dir]->path,auto_name); + SAFEPRINTF2(str,"%s%s",scfg.dir[f.dir]->path,auto_name); if(fexistcase(str) && flength(str)>0L) { printf("Auto-adding %s\n",str); addlist(str,f,desc_offset,size_offset); @@ -1015,7 +1015,7 @@ int main(int argc, char **argv) if(!listgiven && !namegiven) { sprintf(str,"%s%s.lst",scfg.dir[f.dir]->path, scfg.dir[f.dir]->code); if(!fexistcase(str) || flength(str)<=0L) - sprintf(str,"%s%s",scfg.dir[f.dir]->path, auto_name); + SAFEPRINTF2(str,"%s%s",scfg.dir[f.dir]->path, auto_name); addlist(str,f,desc_offset,size_offset); if(mode&SYNC_LIST) synclist(str,f.dir); diff --git a/src/sbbs3/addfiles.vcxproj b/src/sbbs3/addfiles.vcxproj index 0ea3f8cfec21197fa9dd1d3af21ecd0df980557d..941a6ebf5076bcf1fe26dcfb16f74b85f8a0209a 100644 --- a/src/sbbs3/addfiles.vcxproj +++ b/src/sbbs3/addfiles.vcxproj @@ -70,7 +70,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WRAPPER_EXPORTS;WIN32;_CONSOLE;SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\addfiles/addfiles.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\addfiles/</AssemblerListingLocation> diff --git a/src/sbbs3/allusers.c b/src/sbbs3/allusers.c index 641f75e8ff1b334c4ed9899a6c3c6b8984feddea..4d5ea513c7fdeaa837321149bf0ae6949b7dae62 100644 --- a/src/sbbs3/allusers.c +++ b/src/sbbs3/allusers.c @@ -223,7 +223,7 @@ int main(int argc, char **argv) for(;argv[i][j];j++) if(isalpha(argv[i][j])) flags|=FLAG(toupper(argv[i][j])); - sprintf(str,"%suser.dat",dir); + SAFEPRINTF(str,"%suser.dat",dir); if(!fexistcase(str) || (file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) { printf("Error opening %s\n",str); exit(1); @@ -287,7 +287,7 @@ int main(int argc, char **argv) for(;argv[i][j];j++) if(isalpha(argv[i][j])) flags|=FLAG(toupper(argv[i][j])); - sprintf(str,"%suser.dat",dir); + SAFEPRINTF(str,"%suser.dat",dir); if(!fexistcase(str) || (file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) { printf("Error opening %s\n",str); exit(1); @@ -342,7 +342,7 @@ int main(int argc, char **argv) j=99; if(j<0) j=0; - sprintf(str,"%suser.dat",dir); + SAFEPRINTF(str,"%suser.dat",dir); if(!fexistcase(str) || (file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) { printf("Error opening %s\n",str); exit(1); diff --git a/src/sbbs3/allusers.vcxproj b/src/sbbs3/allusers.vcxproj index 32aeb522945055d994faec81836c905548d01ac5..a3d20313bead621c4d6380abc638a2dc0ebb8ec2 100644 --- a/src/sbbs3/allusers.vcxproj +++ b/src/sbbs3/allusers.vcxproj @@ -111,7 +111,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\allusers/allusers.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\allusers/</AssemblerListingLocation> diff --git a/src/sbbs3/ans2asc.vcxproj b/src/sbbs3/ans2asc.vcxproj index ec3f4197b5a5f2afd776a6e7792be424058b9e68..03e8fc044e8e7f4c7ca28c00b25fa93bcb28b456 100644 --- a/src/sbbs3/ans2asc.vcxproj +++ b/src/sbbs3/ans2asc.vcxproj @@ -62,7 +62,7 @@ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\ans2asc/ans2asc.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\ans2asc/</AssemblerListingLocation> diff --git a/src/sbbs3/answer.cpp b/src/sbbs3/answer.cpp index a889f5d839300c532b750c86971e4095dd02fa42..38f3471164cd9b2ef92d3df069b4d159a535e9a4 100644 --- a/src/sbbs3/answer.cpp +++ b/src/sbbs3/answer.cpp @@ -452,7 +452,7 @@ bool sbbs_t::answer() if(telnet_rows >= TERM_ROWS_MIN && telnet_rows <= TERM_ROWS_MAX) rows = telnet_rows; } else { - lprintf(LOG_NOTICE, "no Telnet commands received, reverting to Raw/TCP mode"); + lprintf(LOG_NOTICE, "no Telnet commands received, reverting to Raw TCP mode"); telnet_mode |= TELNET_MODE_OFF; client.protocol = "Raw"; client_on(client_socket, &client,/* update: */true); diff --git a/src/sbbs3/asc2ans.vcxproj b/src/sbbs3/asc2ans.vcxproj index a7bde1d7b820cd351bce5adbaaffc2019f37f0e5..ef6e52b3b8b4d1bc03e338a22cf6b2142c9cace8 100644 --- a/src/sbbs3/asc2ans.vcxproj +++ b/src/sbbs3/asc2ans.vcxproj @@ -103,7 +103,7 @@ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\asc2ans/asc2ans.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\asc2ans/</AssemblerListingLocation> diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp index 6b52a1ce6d980fca0e01e750990fb104640596bf..6f166b3cbd304d07c01e584117925a6f79fd6447 100644 --- a/src/sbbs3/atcodes.cpp +++ b/src/sbbs3/atcodes.cpp @@ -456,6 +456,9 @@ const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen, long* pmode, bool if(!strcmp(sp,"SYSOP")) return(cfg.sys_op); + if(strcmp(sp, "SYSAVAIL") == 0) + return text[sysop_available(&cfg) ? LiSysopAvailable : LiSysopNotAvailable]; + if(!strcmp(sp,"LOCATION")) return(cfg.sys_location); @@ -505,7 +508,7 @@ const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen, long* pmode, bool return(cfg.sys_inetaddr); if(!strcmp(sp,"HOSTNAME")) - return(startup->host_name); + return server_host_name(); if(!strcmp(sp,"FIDOADDR")) { if(cfg.total_faddrs) diff --git a/src/sbbs3/baja.vcxproj b/src/sbbs3/baja.vcxproj index 8e231451ebdf6c86dddb8046602d05650a83de1a..30706584144308044dc896b6c94331c4a9ea090c 100644 --- a/src/sbbs3/baja.vcxproj +++ b/src/sbbs3/baja.vcxproj @@ -69,7 +69,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\baja/baja.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\baja/</AssemblerListingLocation> diff --git a/src/sbbs3/bulkmail.cpp b/src/sbbs3/bulkmail.cpp index cbf1da28e16cfda96a7c7f0894c1b1a6fbf87fea..8368a104305d5fb4b4bcb5279c8411bb0b9f09c9 100644 --- a/src/sbbs3/bulkmail.cpp +++ b/src/sbbs3/bulkmail.cpp @@ -117,7 +117,7 @@ bool sbbs_t::bulkmail(uchar *ar) memset(&smb,0,sizeof(smb)); smb.subnum=INVALID_SUB; /* mail database */ - i=savemsg(&cfg, &smb, &msg, &client, startup->host_name, msgbuf, /* remsg: */NULL); + i=savemsg(&cfg, &smb, &msg, &client, server_host_name(), msgbuf, /* remsg: */NULL); free(msgbuf); if(i!=0) { smb_close(&smb); diff --git a/src/sbbs3/chat.cpp b/src/sbbs3/chat.cpp index 4345cc8faf1d25ada3ea49a06adebdee8ed7ef00..e1d767c5971dbaef3f0afefd293cf4f769bf21fa 100644 --- a/src/sbbs3/chat.cpp +++ b/src/sbbs3/chat.cpp @@ -771,7 +771,7 @@ bool sbbs_t::chan_access(uint cnum) /****************************************************************************/ /* Private split-screen (or interspersed) chat with node or local sysop */ /****************************************************************************/ -void sbbs_t::privchat(bool local) +void sbbs_t::privchat(bool forced, int node_num) { char str[128],c,*p,localbuf[5][81],remotebuf[5][81] ,localline=0,remoteline=0,localchar=0,remotechar=0 @@ -787,8 +787,8 @@ void sbbs_t::privchat(bool local) node_t node; time_t last_nodechk=0; - if(local) - n=0; + if(forced) + n = node_num; else { if(useron.rest&FLAG('C')) { @@ -808,23 +808,28 @@ void sbbs_t::privchat(bool local) bprintf(text[NodeNAlreadyInPChat],n); return; } - if((node.action!=NODE_PAGE || node.aux!=cfg.node_num) - && node.misc&NODE_POFF && !SYSOP) { - bprintf(text[CantPageNode],node.misc&NODE_ANON - ? text[UNKNOWN_USER] : username(&cfg,node.useron,tmp)); - return; - } - if(node.action!=NODE_PAGE) { - bprintf(text[PagingUser] - ,node.misc&NODE_ANON ? text[UNKNOWN_USER] : username(&cfg,node.useron,tmp) - ,node.misc&NODE_ANON ? 0 : node.useron); - sprintf(str,text[NodePChatPageMsg] - ,cfg.node_num,thisnode.misc&NODE_ANON - ? text[UNKNOWN_USER] : useron.alias); - putnmsg(&cfg,n,str); - sprintf(str,"paged %s on node %d to private chat" - ,username(&cfg,node.useron,tmp),n); - logline("C",str); + if(SYSOP && getnodedat(n, &node, true) == 0) { + node.misc |= NODE_FCHAT; + putnodedat(n, &node); + } else { + if((node.action!=NODE_PAGE || node.aux!=cfg.node_num) + && node.misc&NODE_POFF) { + bprintf(text[CantPageNode],node.misc&NODE_ANON + ? text[UNKNOWN_USER] : username(&cfg,node.useron,tmp)); + return; + } + if(node.action!=NODE_PAGE) { + bprintf(text[PagingUser] + ,node.misc&NODE_ANON ? text[UNKNOWN_USER] : username(&cfg,node.useron,tmp) + ,node.misc&NODE_ANON ? 0 : node.useron); + sprintf(str,text[NodePChatPageMsg] + ,cfg.node_num,thisnode.misc&NODE_ANON + ? text[UNKNOWN_USER] : useron.alias); + putnmsg(&cfg,n,str); + sprintf(str,"paged %s on node %d to private chat" + ,username(&cfg,node.useron,tmp),n); + logline("C",str); + } } if(getnodedat(cfg.node_num,&thisnode,true)==0) { @@ -858,14 +863,14 @@ void sbbs_t::privchat(bool local) if(getnodedat(cfg.node_num,&thisnode,true)==0) { thisnode.action=action=NODE_PCHT; thisnode.aux=n; - thisnode.misc&=~NODE_LCHAT; + thisnode.misc&=~ (NODE_LCHAT|NODE_FCHAT); putnodedat(cfg.node_num,&thisnode); } - if(!online || sys_status&SS_ABORT) + if(!online || (!forced && (sys_status&SS_ABORT))) return; - if(local) { + if(forced && n == 0) { /* If an external sysop chat event handler is installed, just run that and do nothing else */ if(user_event(EVENT_LOCAL_CHAT)) return; @@ -882,7 +887,7 @@ void sbbs_t::privchat(bool local) */ if(!(sys_status&SS_SPLITP)) { - if(local) + if(forced) bprintf(text[SysopIsHere],cfg.sys_op); else bputs(text[WelcomeToPrivateChat]); @@ -894,7 +899,7 @@ void sbbs_t::privchat(bool local) return; } - if(local) + if(forced && n == 0) sprintf(inpath,"%slchat.dab",cfg.node_dir); else sprintf(inpath,"%schat.dab",cfg.node_path[n-1]); @@ -924,7 +929,7 @@ void sbbs_t::privchat(bool local) putnodedat(cfg.node_num,&thisnode); } - if(!local) { + if(n) { // not local if(getnodedat(n,&node,true)==0) { node.misc|=NODE_RPCHT; /* Set "reset pchat flag" */ putnodedat(n,&node); /* on other node */ @@ -955,15 +960,15 @@ void sbbs_t::privchat(bool local) ansi_save(); ansi_gotoxy(1,13); remote_y=1; - bprintf(local ? local_sep : sep + bprintf(forced ? local_sep : sep ,thisnode.misc&NODE_MSGW ? 'T':' ' ,sectostr(timeleft,tmp) ,thisnode.misc&NODE_NMSG ? 'M':' '); - CRLF; + ansi_gotoxy(1,14); local_y=14; } - while(online && (local || !(sys_status&SS_ABORT))) { + while(online && (forced || !(sys_status&SS_ABORT))) { lncntr=0; if(sys_status&SS_SPLITP) lbuflen=0; @@ -1007,11 +1012,11 @@ void sbbs_t::privchat(bool local) bputs("\1i_\1n"); /* Fake cursor */ ansi_save(); ansi_gotoxy(1,13); - bprintf(local ? local_sep : sep + bprintf(forced ? local_sep : sep ,thisnode.misc&NODE_MSGW ? 'T':' ' ,sectostr(timeleft,tmp) ,thisnode.misc&NODE_NMSG ? 'M':' '); - CRLF; + ansi_gotoxy(1,14); attr(cfg.color[clr_chatlocal]); localbuf[localline][localchar]=0; for(i=0;i<=localline;i++) { @@ -1035,9 +1040,9 @@ void sbbs_t::privchat(bool local) localbuf[localline][localchar]=0; localchar=0; - if(sys_status&SS_SPLITP && local_y==24) { + if(sys_status&SS_SPLITP && local_y >= rows) { ansi_gotoxy(1,13); - bprintf(local ? local_sep : sep + bprintf(forced ? local_sep : sep ,thisnode.misc&NODE_MSGW ? 'T':' ' ,sectostr(timeleft,tmp) ,thisnode.misc&NODE_NMSG ? 'M':' '); @@ -1065,6 +1070,8 @@ void sbbs_t::privchat(bool local) } // SYNC; } + } else { // illegal key + continue; } read(out,&c,1); @@ -1131,7 +1138,7 @@ void sbbs_t::privchat(bool local) if(sys_status&SS_SPLITP && remote_y==12) { CRLF; - bprintf(local ? local_sep : sep + bprintf(forced ? local_sep : sep ,thisnode.misc&NODE_MSGW ? 'T':' ' ,sectostr(timeleft,tmp) ,thisnode.misc&NODE_NMSG ? 'M':' '); @@ -1192,7 +1199,7 @@ void sbbs_t::privchat(bool local) nodesync(); } - if(!local) { + if(n != 0) { getnodedat(n,&node,0); if((node.action!=NODE_PCHT && node.action!=NODE_PAGE) || node.aux!=cfg.node_num) { @@ -1268,7 +1275,7 @@ int sbbs_t::getnodetopage(int all, int telegram) sprintf(str,text[NodeToPrivateChat],lastnodemsg); mnemonics(str); - strcpy(str,lastnodemsguser); + SAFECOPY(str,lastnodemsguser); getstr(str,LEN_ALIAS,K_UPRLWR|K_LINE|K_EDIT|K_AUTODEL); if(sys_status&SS_ABORT) { sys_status&= ~SS_ABORT; @@ -1289,7 +1296,7 @@ int sbbs_t::getnodetopage(int all, int telegram) ? text[UNKNOWN_USER] : username(&cfg,node.useron,tmp)); return(0); } - strcpy(lastnodemsguser,str); + SAFECOPY(lastnodemsguser,str); if(telegram) return(node.useron); return(j); @@ -1330,7 +1337,7 @@ int sbbs_t::getnodetopage(int all, int telegram) } if(telegram) return(j); - strcpy(lastnodemsguser,str); + SAFECOPY(lastnodemsguser,str); return(i); } } @@ -1429,7 +1436,7 @@ void sbbs_t::nodemsg() bprintf("%4s",nulstr); if(!getstr(line,70,K_WRAP|K_MSG)) break; - sprintf(str,"%4s%s\r\n",nulstr,line); + SAFEPRINTF2(str,"%4s%s\r\n",nulstr,line); SAFECAT(buf,str); if(line[0]) { if(i) diff --git a/src/sbbs3/chat/.gitignore b/src/sbbs3/chat/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e51f4ec7fbb8bc519f5439f05c900ee26851e0c9 --- /dev/null +++ b/src/sbbs3/chat/.gitignore @@ -0,0 +1,3 @@ +chat.drc +chat.mak +chat.tds \ No newline at end of file diff --git a/src/sbbs3/chksmb.vcxproj b/src/sbbs3/chksmb.vcxproj index 6eb59c21a1fd1c196d2f310dcee795535730e959..7a678387c3a28ea8065bfc90c689a4d4646b9272 100644 --- a/src/sbbs3/chksmb.vcxproj +++ b/src/sbbs3/chksmb.vcxproj @@ -69,7 +69,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\chksmb/chksmb.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\chksmb/</AssemblerListingLocation> diff --git a/src/sbbs3/ctrl/ClientFormUnit.dfm b/src/sbbs3/ctrl/ClientFormUnit.dfm index d92199f2d1871b05b3046ee9d82edbdcc1c0c115..fcab73c125c48a6b167db474db0b186fd113784c 100644 --- a/src/sbbs3/ctrl/ClientFormUnit.dfm +++ b/src/sbbs3/ctrl/ClientFormUnit.dfm @@ -9,7 +9,7 @@ object ClientForm: TClientForm DragKind = dkDock DragMode = dmAutomatic Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText + Font.Color = clWhite Font.Height = -10 Font.Name = 'MS Sans Serif' Font.Style = [] @@ -23,6 +23,7 @@ object ClientForm: TClientForm Width = 615 Height = 307 Align = alClient + Color = clBlack Columns = < item Caption = 'Socket' diff --git a/src/sbbs3/ctrl/ConfigWizardUnit.cpp b/src/sbbs3/ctrl/ConfigWizardUnit.cpp index 5d8be6bb8400252993cf51e49d84b8168c4d6018..32667eaecdf39e4e6f40ea852ffab419bab9823c 100644 --- a/src/sbbs3/ctrl/ConfigWizardUnit.cpp +++ b/src/sbbs3/ctrl/ConfigWizardUnit.cpp @@ -240,7 +240,7 @@ void __fastcall TConfigWizard::FormShow(TObject *Sender) ,tz_str[i] ); else - strcpy(str,tz_str[i]); + SAFECOPY(str,tz_str[i]); TimeZoneComboBox->Items->Add(str); } sprintf(str,"Other (%s)",smb_zonestr(scfg.sys_timezone,NULL)); @@ -262,6 +262,7 @@ void __fastcall TConfigWizard::FormShow(TObject *Sender) DateUsRadioButton->Checked=true; WizNotebook->PageIndex=0; + ProgressBar->Position=0; ProgressBar->Max=WizNotebook->Pages->Count-1; IllegalCharsLabel->Caption="Illegal characters: '" ILLEGAL_QWKID_CHARS "'"; @@ -284,13 +285,13 @@ void __fastcall TConfigWizard::NextButtonClick(TObject *Sender) MainForm->SaveIniSettings(Sender); // Write CNF files - strcpy(scfg.sys_name,SystemNameEdit->Text.c_str()); - strcpy(scfg.sys_id,QWKIDEdit->Text.c_str()); - strcpy(scfg.sys_location,SystemLocationEdit->Text.c_str()); - strcpy(scfg.sys_op,SysopNameEdit->Text.c_str()); - strcpy(scfg.sys_pass,SystemPasswordEdit->Text.c_str()); - strcpy(scfg.sys_inetaddr,InternetAddressComboBox->Text.c_str()); - strcpy(scfg.qnet_tagline,QNetTaglineEdit->Text.c_str()); + SAFECOPY(scfg.sys_name,SystemNameEdit->Text.c_str()); + SAFECOPY(scfg.sys_id,QWKIDEdit->Text.c_str()); + SAFECOPY(scfg.sys_location,SystemLocationEdit->Text.c_str()); + SAFECOPY(scfg.sys_op,SysopNameEdit->Text.c_str()); + SAFECOPY(scfg.sys_pass,SystemPasswordEdit->Text.c_str()); + SAFECOPY(scfg.sys_inetaddr,InternetAddressComboBox->Text.c_str()); + SAFECOPY(scfg.qnet_tagline,QNetTaglineEdit->Text.c_str()); scfg.sys_nodes=NodesUpDown->Position; if(TimeZoneComboBox->ItemIndex>=0 && TimeZoneComboBox->ItemIndex<=sizeof(tz_val)/sizeof(tz_val[0])) @@ -323,14 +324,12 @@ void __fastcall TConfigWizard::NextButtonClick(TObject *Sender) scfg.sys_misc|=SM_SYSVDELM; scfg.sys_misc&=~SM_USRVDELM; } - scfg.new_install=FALSE; if(!save_cfg(&scfg,0)) { Application->MessageBox("Error saving configuration" ,"ERROR",MB_OK|MB_ICONEXCLAMATION); } else refresh_cfg(&scfg); - Close(); return; } @@ -424,7 +423,7 @@ void __fastcall TConfigWizard::WizNotebookPageChanged(TObject *Sender) char bbsname[41]; char qwkid[9]; int len=0; - strcpy(bbsname,SystemNameEdit->Text.UpperCase().c_str()); + SAFECOPY(bbsname,SystemNameEdit->Text.UpperCase().c_str()); for(char*p=bbsname;*p && len<8;p++) { if(strchr(ILLEGAL_QWKID_CHARS,*p)) continue; diff --git a/src/sbbs3/ctrl/EventsFormUnit.dfm b/src/sbbs3/ctrl/EventsFormUnit.dfm index b584d24b9d35999cb2b75ad8de029e760751fe6b..f816a6097079ca17f0565602952c5e109629445f 100644 --- a/src/sbbs3/ctrl/EventsFormUnit.dfm +++ b/src/sbbs3/ctrl/EventsFormUnit.dfm @@ -23,8 +23,9 @@ object EventsForm: TEventsForm Width = 543 Height = 352 Align = alClient + Color = clBlack Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText + Font.Color = clWhite Font.Height = -12 Font.Name = 'MS Sans Serif' Font.Style = [] diff --git a/src/sbbs3/ctrl/FtpFormUnit.dfm b/src/sbbs3/ctrl/FtpFormUnit.dfm index 807ca4ad51338a66aa0118328f1bfc15e86f2a6d..eac7cb770b412b3e5fc20975b392b794e349fc3a 100644 --- a/src/sbbs3/ctrl/FtpFormUnit.dfm +++ b/src/sbbs3/ctrl/FtpFormUnit.dfm @@ -143,8 +143,9 @@ object FtpForm: TFtpForm Width = 509 Height = 86 Align = alClient + Color = clBlack Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText + Font.Color = clWhite Font.Height = -12 Font.Name = 'MS Sans Serif' Font.Style = [] diff --git a/src/sbbs3/ctrl/MailFormUnit.dfm b/src/sbbs3/ctrl/MailFormUnit.dfm index db748b01448a6b3cce8ad754a58036a8a1672829..b1e737ef98476a352d34cf2bd3075e693bcf9fe6 100644 --- a/src/sbbs3/ctrl/MailFormUnit.dfm +++ b/src/sbbs3/ctrl/MailFormUnit.dfm @@ -146,8 +146,9 @@ object MailForm: TMailForm Width = 464 Height = 86 Align = alClient + Color = clBlack Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText + Font.Color = clWhite Font.Height = -12 Font.Name = 'MS Sans Serif' Font.Style = [] diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp index 73c9030a9c1b690b7001040ff94a0fa09b39140c..45e125b24948a4025bf208d38e3d1aec2aeb644a 100644 --- a/src/sbbs3/ctrl/MainFormUnit.cpp +++ b/src/sbbs3/ctrl/MainFormUnit.cpp @@ -141,9 +141,9 @@ const TColor LogLevelColor[] = { ,clRed ,clRed ,clFuchsia - ,clBlue + ,clSkyBlue ,clBlack /* not used */ - ,clGreen + ,clLime }; link_list_t bbs_log_list; @@ -972,7 +972,7 @@ __fastcall TMainForm::TMainForm(TComponent* Owner) for(i=LOG_EMERG;i<=LOG_DEBUG;i++) { LogFont[i] = new TFont; LogFont[i]->Color=LogLevelColor[i]; - if(i<=LOG_ERR) + if(i <= LOG_CRIT) LogFont[i]->Style = TFontStyles()<< fsBold; } } @@ -1565,12 +1565,12 @@ int __fastcall TMainForm::PageNum(TPageControl* obj) return(PAGE_LOWERRIGHT); } TColor __fastcall TMainForm::ReadColor(TRegistry* Registry - ,AnsiString name) + ,AnsiString name, TColor deflt) { if(Registry->ValueExists(name + "Color")) return(StringToColor(Registry->ReadString(name + "Color"))); - return(clWindow); // Default + return deflt; } void __fastcall TMainForm::WriteColor(TRegistry* Registry ,AnsiString name, TColor color) @@ -1681,21 +1681,16 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) int FtpFormPage=PAGE_LOWERRIGHT; int WebFormPage=PAGE_LOWERRIGHT; int ServicesFormPage=PAGE_LOWERRIGHT; -#if 0 /* not yet working */ - bool TelnetFormVisible=true; - bool EventsFormVisible=true; - bool ServicesFormVisible=true; - bool NodeFormVisible=true; - bool StatsFormVisible=true; - bool ClientFormVisible=true; - bool MailFormVisible=true; - bool FtpFormVisible=true; - bool WebFormVisible=true; -#endif - AnsiString Str; + StartupTimer->Enabled = false; + if(Initialized) { // second time (fresh install) + delete StartupTimer; + BBSConfigWizardMenuItemClick(Sender); + DisplayMainPanels(Sender); + return; + } - delete StartupTimer; + AnsiString Str; // Read Registry keys TRegistry* Registry=new TRegistry; @@ -1741,26 +1736,6 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) if(Registry->ValueExists("WebFormFloating")) WebFormFloating=Registry->ReadBool("WebFormFloating"); } -#if 0 - if(Registry->ValueExists("TelnetFormVisible")) - TelnetFormVisible=Registry->ReadBool("TelnetFormVisible"); - if(Registry->ValueExists("EventsFormVisible")) - EventsFormVisible=Registry->ReadBool("EventsFormVisible"); - if(Registry->ValueExists("ServicesFormVisible")) - ServicesFormVisible=Registry->ReadBool("ServicesFormVisible"); - if(Registry->ValueExists("NodeFormVisible")) - NodeFormVisible=Registry->ReadBool("NodeFormVisible"); - if(Registry->ValueExists("StatsFormVisible")) - StatsFormVisible=Registry->ReadBool("StatsFormVisible"); - if(Registry->ValueExists("ClientFormVisible")) - ClientFormVisible=Registry->ReadBool("ClientFormVisible"); - if(Registry->ValueExists("MailFormVisible")) - MailFormVisible=Registry->ReadBool("MailFormVisible"); - if(Registry->ValueExists("FtpFormVisible")) - FtpFormVisible=Registry->ReadBool("FtpFormVisible"); - if(Registry->ValueExists("WebFormVisible")) - WebFormVisible=Registry->ReadBool("WebFormVisible"); -#endif if(Registry->ValueExists("TelnetFormPage")) TelnetFormPage=Registry->ReadInteger("TelnetFormPage"); if(Registry->ValueExists("EventsFormPage")) @@ -1780,28 +1755,30 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) if(Registry->ValueExists("WebFormPage")) WebFormPage=Registry->ReadInteger("WebFormPage"); - TelnetForm->Log->Color=ReadColor(Registry,"TelnetLog"); + TelnetForm->Log->Color=ReadColor(Registry,"TelnetLog",TelnetForm->Log->Color); ReadFont("TelnetLog",TelnetForm->Log->Font); - EventsForm->Log->Color=ReadColor(Registry,"EventsLog"); + EventsForm->Log->Color=ReadColor(Registry,"EventsLog",EventsForm->Log->Color); ReadFont("EventsLog",EventsForm->Log->Font); - ServicesForm->Log->Color=ReadColor(Registry,"ServicesLog"); + ServicesForm->Log->Color=ReadColor(Registry,"ServicesLog",ServicesForm->Log->Color); ReadFont("ServicesLog",ServicesForm->Log->Font); - MailForm->Log->Color=ReadColor(Registry,"MailLog"); + MailForm->Log->Color=ReadColor(Registry,"MailLog",MailForm->Log->Color); ReadFont("MailLog",MailForm->Log->Font); - FtpForm->Log->Color=ReadColor(Registry,"FtpLog"); + FtpForm->Log->Color=ReadColor(Registry,"FtpLog",FtpForm->Log->Color); ReadFont("FtpLog",FtpForm->Log->Font); - WebForm->Log->Color=ReadColor(Registry,"WebLog"); + WebForm->Log->Color=ReadColor(Registry,"WebLog",WebForm->Log->Color); ReadFont("WebLog",WebForm->Log->Font); - NodeForm->ListBox->Color=ReadColor(Registry,"NodeList"); + NodeForm->ListBox->Color=ReadColor(Registry,"NodeList",NodeForm->ListBox->Color); ReadFont("NodeList",NodeForm->ListBox->Font); - ClientForm->ListView->Color=ReadColor(Registry,"ClientList"); + ClientForm->ListView->Color=ReadColor(Registry,"ClientList",ClientForm->ListView->Color); ReadFont("ClientList",ClientForm->ListView->Font); { int i; - for(i=LOG_EMERG; i<=LOG_DEBUG; i++) - ReadFont("Log" + AnsiString(LogLevelDesc[i]), LogFont[i]); + for(i=LOG_EMERG; i<=LOG_DEBUG; i++) { + if(i != LOG_INFO) + ReadFont("Log" + AnsiString(LogLevelDesc[i]), LogFont[i]); + } } if(Registry->ValueExists("TelnetFormTop")) @@ -1947,263 +1924,27 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) else FtpLogFile=true; - FILE* fp; - if((!Registry->ValueExists("SysAutoStart") - || (Registry->ValueExists("Imported") && Registry->ReadBool("Imported"))) - && ini_file[0]) { - if((fp=fopen(ini_file,"r"))==NULL) { - char err[MAX_PATH*2]; - sprintf(err,"Error %d opening initialization file: %s",errno,ini_file); - Application->MessageBox(err,"ERROR",MB_OK|MB_ICONEXCLAMATION); - Application->Terminate(); - return; - } - sbbs_read_ini(fp, MainForm->ini_file - ,&global - ,&SysAutoStart ,&bbs_startup - ,&FtpAutoStart ,&ftp_startup - ,&WebAutoStart ,&web_startup - ,&MailAutoStart ,&mail_startup - ,&ServicesAutoStart ,&services_startup - ); - StatusBar->Panels->Items[STATUSBAR_LAST_PANEL]->Text="Read " + AnsiString(ini_file); - fclose(fp); - - } else { /* Legacy (v3.10-3.11) */ - - if(Registry->ValueExists("SysAutoStart")) - SysAutoStart=Registry->ReadInteger("SysAutoStart"); - else - SysAutoStart=true; - - if(Registry->ValueExists("MailAutoStart")) - MailAutoStart=Registry->ReadInteger("MailAutoStart"); - else - MailAutoStart=true; - - if(Registry->ValueExists("FtpAutoStart")) - FtpAutoStart=Registry->ReadInteger("FtpAutoStart"); - else - FtpAutoStart=true; - - if(Registry->ValueExists("WebAutoStart")) - WebAutoStart=Registry->ReadInteger("WebAutoStart"); - else - WebAutoStart=true; - - if(Registry->ValueExists("ServicesAutoStart")) - ServicesAutoStart=Registry->ReadInteger("ServicesAutoStart"); - else - ServicesAutoStart=true; - - if(Registry->ValueExists("Hostname")) - SAFECOPY(global.host_name,Registry->ReadString("Hostname").c_str()); - if(Registry->ValueExists("CtrlDirectory")) - SAFECOPY(global.ctrl_dir,Registry->ReadString("CtrlDirectory").c_str()); - if(Registry->ValueExists("TempDirectory")) - SAFECOPY(global.temp_dir,Registry->ReadString("TempDirectory").c_str()); - - if(Registry->ValueExists("SemFileCheckFrequency")) - global.sem_chk_freq=Registry->ReadInteger("SemFileCheckFrequency"); - - /* JavaScript Operating Parameters */ - if(Registry->ValueExists("JS_MaxBytes")) - global.js.max_bytes=Registry->ReadInteger("JS_MaxBytes"); - if(global.js.max_bytes==0) - global.js.max_bytes=JAVASCRIPT_MAX_BYTES; - if(Registry->ValueExists("JS_ContextStack")) - global.js.cx_stack=Registry->ReadInteger("JS_ContextStack"); - if(global.js.cx_stack==0) - global.js.cx_stack=JAVASCRIPT_CONTEXT_STACK; - if(Registry->ValueExists("JS_GcInterval")) - global.js.gc_interval=Registry->ReadInteger("JS_GcInterval"); - if(Registry->ValueExists("JS_YieldInterval")) - global.js.yield_interval=Registry->ReadInteger("JS_YieldInterval"); - -/* - if(Registry->ValueExists("TelnetInterface")) - bbs_startup.telnet_interface=Registry->ReadInteger("TelnetInterface"); - if(Registry->ValueExists("RLoginInterface")) - bbs_startup.rlogin_interface=Registry->ReadInteger("RLoginInterface"); -*/ - - if(Registry->ValueExists("TelnetPort")) - bbs_startup.telnet_port=Registry->ReadInteger("TelnetPort"); - if(Registry->ValueExists("RLoginPort")) - bbs_startup.rlogin_port=Registry->ReadInteger("RLoginPort"); - - if(Registry->ValueExists("FirstNode")) - bbs_startup.first_node=Registry->ReadInteger("FirstNode"); - - if(Registry->ValueExists("LastNode")) - bbs_startup.last_node=Registry->ReadInteger("LastNode"); - - if(Registry->ValueExists("OutbufHighwaterMark")) - bbs_startup.outbuf_highwater_mark=Registry->ReadInteger("OutbufHighwaterMark"); - else - bbs_startup.outbuf_highwater_mark=1024; - if(Registry->ValueExists("OutbufDrainTimeout")) - bbs_startup.outbuf_drain_timeout=Registry->ReadInteger("OutbufDrainTimeout"); - else - bbs_startup.outbuf_drain_timeout=10; - - if(Registry->ValueExists("AnswerSound")) - SAFECOPY(bbs_startup.answer_sound - ,Registry->ReadString("AnswerSound").c_str()); - - if(Registry->ValueExists("HangupSound")) - SAFECOPY(bbs_startup.hangup_sound - ,Registry->ReadString("HangupSound").c_str()); - - if(Registry->ValueExists("StartupOptions")) - bbs_startup.options=Registry->ReadInteger("StartupOptions"); - - if(Registry->ValueExists("MailMaxClients")) - mail_startup.max_clients=Registry->ReadInteger("MailMaxClients"); - - if(Registry->ValueExists("MailMaxInactivity")) - mail_startup.max_inactivity=Registry->ReadInteger("MailMaxInactivity"); - -/* - if(Registry->ValueExists("MailInterface")) - mail_startup.interface_addr=Registry->ReadInteger("MailInterface"); -*/ - - if(Registry->ValueExists("MailMaxDeliveryAttempts")) - mail_startup.max_delivery_attempts - =Registry->ReadInteger("MailMaxDeliveryAttempts"); - - if(Registry->ValueExists("MailRescanFrequency")) - mail_startup.rescan_frequency - =Registry->ReadInteger("MailRescanFrequency"); - - if(Registry->ValueExists("MailLinesPerYield")) - mail_startup.lines_per_yield - =Registry->ReadInteger("MailLinesPerYield"); - - if(Registry->ValueExists("MailMaxRecipients")) - mail_startup.max_recipients - =Registry->ReadInteger("MailMaxRecipients"); - - if(Registry->ValueExists("MailMaxMsgSize")) - mail_startup.max_msg_size - =Registry->ReadInteger("MailMaxMsgSize"); - - if(Registry->ValueExists("MailSMTPPort")) - mail_startup.smtp_port=Registry->ReadInteger("MailSMTPPort"); - - if(Registry->ValueExists("MailPOP3Port")) - mail_startup.pop3_port=Registry->ReadInteger("MailPOP3Port"); - - if(Registry->ValueExists("MailRelayServer")) - SAFECOPY(mail_startup.relay_server - ,Registry->ReadString("MailRelayServer").c_str()); - - if(Registry->ValueExists("MailRelayPort")) - mail_startup.relay_port=Registry->ReadInteger("MailRelayPort"); - - if(Registry->ValueExists("MailDefaultUser")) - SAFECOPY(mail_startup.default_user - ,Registry->ReadString("MailDefaultUser").c_str()); - - if(Registry->ValueExists("MailDNSBlacklistSubject")) - SAFECOPY(mail_startup.dnsbl_tag - ,Registry->ReadString("MailDNSBlacklistSubject").c_str()); - else - SAFECOPY(mail_startup.dnsbl_tag,"SPAM"); - - if(Registry->ValueExists("MailDNSBlacklistHeader")) - SAFECOPY(mail_startup.dnsbl_hdr - ,Registry->ReadString("MailDNSBlacklistHeader").c_str()); - else - SAFECOPY(mail_startup.dnsbl_hdr,"X-DNSBL"); - - if(Registry->ValueExists("MailDNSServer")) - SAFECOPY(mail_startup.dns_server - ,Registry->ReadString("MailDNSServer").c_str()); - - if(Registry->ValueExists("MailInboundSound")) - SAFECOPY(mail_startup.inbound_sound - ,Registry->ReadString("MailInboundSound").c_str()); - - if(Registry->ValueExists("MailOutboundSound")) - SAFECOPY(mail_startup.outbound_sound - ,Registry->ReadString("MailOutboundSound").c_str()); - - if(Registry->ValueExists("MailPOP3Sound")) - SAFECOPY(mail_startup.pop3_sound - ,Registry->ReadString("MailPOP3Sound").c_str()); - - if(Registry->ValueExists("MailOptions")) - mail_startup.options=Registry->ReadInteger("MailOptions"); - - if(Registry->ValueExists("FtpMaxClients")) - ftp_startup.max_clients=Registry->ReadInteger("FtpMaxClients"); - - if(Registry->ValueExists("FtpMaxInactivity")) - ftp_startup.max_inactivity=Registry->ReadInteger("FtpMaxInactivity"); - - if(Registry->ValueExists("FtpQwkTimeout")) - ftp_startup.qwk_timeout=Registry->ReadInteger("FtpQwkTimeout"); - -/* - if(Registry->ValueExists("FtpInterface")) - ftp_startup.interface_addr=Registry->ReadInteger("FtpInterface"); -*/ - - if(Registry->ValueExists("FtpPort")) - ftp_startup.port=Registry->ReadInteger("FtpPort"); - - if(Registry->ValueExists("FtpAnswerSound")) - SAFECOPY(ftp_startup.answer_sound - ,Registry->ReadString("FtpAnswerSound").c_str()); - - if(Registry->ValueExists("FtpHangupSound")) - SAFECOPY(ftp_startup.hangup_sound - ,Registry->ReadString("FtpHangupSound").c_str()); - - if(Registry->ValueExists("FtpHackAttemptSound")) - SAFECOPY(ftp_startup.hack_sound - ,Registry->ReadString("FtpHackAttemptSound").c_str()); - - if(Registry->ValueExists("FtpIndexFileName")) - SAFECOPY(ftp_startup.index_file_name - ,Registry->ReadString("FtpIndexFileName").c_str()); - - if(Registry->ValueExists("FtpHtmlIndexFile")) - SAFECOPY(ftp_startup.html_index_file - ,Registry->ReadString("FtpHtmlIndexFile").c_str()); - - if(Registry->ValueExists("FtpHtmlIndexScript")) - SAFECOPY(ftp_startup.html_index_script - ,Registry->ReadString("FtpHtmlIndexScript").c_str()); - - if(Registry->ValueExists("FtpOptions")) - ftp_startup.options=Registry->ReadInteger("FtpOptions"); - -/* - if(Registry->ValueExists("ServicesInterface")) - services_startup.interface_addr - =Registry->ReadInteger("ServicesInterface"); -*/ - - if(Registry->ValueExists("ServicesAnswerSound")) - SAFECOPY(services_startup.answer_sound - ,Registry->ReadString("ServicesAnswerSound").c_str()); - - if(Registry->ValueExists("ServicesHangupSound")) - SAFECOPY(services_startup.hangup_sound - ,Registry->ReadString("ServicesHangupSound").c_str()); - - if(Registry->ValueExists("ServicesOptions")) - services_startup.options=Registry->ReadInteger("ServicesOptions"); + Registry->CloseKey(); + delete Registry; - if(SaveIniSettings(Sender)) - Registry->WriteBool("Imported",true); /* Use the .ini file for these settings from now on */ + FILE* fp; + if((fp=fopen(ini_file,"r"))==NULL) { + char err[MAX_PATH*2]; + sprintf(err,"Error %d opening initialization file: %s",errno,ini_file); + Application->MessageBox(err,"ERROR",MB_OK|MB_ICONEXCLAMATION); + Application->Terminate(); + return; } - - Registry->CloseKey(); - delete Registry; + sbbs_read_ini(fp, MainForm->ini_file + ,&global + ,&SysAutoStart ,&bbs_startup + ,&FtpAutoStart ,&ftp_startup + ,&WebAutoStart ,&web_startup + ,&MailAutoStart ,&mail_startup + ,&ServicesAutoStart ,&services_startup + ); + StatusBar->Panels->Items[STATUSBAR_LAST_PANEL]->Text="Read " + AnsiString(ini_file); + fclose(fp); AnsiString CtrlDirectory = AnsiString(global.ctrl_dir); if(!FileExists(CtrlDirectory+"MAIN.CNF")) { @@ -2234,32 +1975,6 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) } StatusBar->Panels->Items[STATUSBAR_LAST_PANEL]->Text="Configuration loaded"; - recycle_semfiles=semfile_list_init(cfg.ctrl_dir,"recycle","ctrl"); - semfile_list_add(&recycle_semfiles,ini_file); - semfile_list_check(&initialized,recycle_semfiles); - - shutdown_semfiles=semfile_list_init(cfg.ctrl_dir,"shutdown","ctrl"); - semfile_list_check(&initialized,shutdown_semfiles); - - if(cfg.new_install) { - Application->BringToFront(); - for(int i=0;i<10;i++) { - Application->ProcessMessages(); - Sleep(300); // Let 'em see the logo for a bit - } - BBSConfigWizardMenuItemClick(Sender); - } - - if(bbs_startup.options&BBS_OPT_MUTE) - SoundToggle->Checked=false; - else - SoundToggle->Checked=true; - - if(sysop_available(&cfg)) - ChatToggle->Checked=true; - else - ChatToggle->Checked=false; - if(!NodeFormFloating) NodeForm->ManualDock(PageControl(NodeFormPage),NULL,alClient); if(!ClientFormFloating) @@ -2279,33 +1994,52 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) if(!WebFormFloating) WebForm->ManualDock(PageControl(WebFormPage),NULL,alClient); + recycle_semfiles=semfile_list_init(cfg.ctrl_dir,"recycle","ctrl"); + semfile_list_add(&recycle_semfiles,ini_file); + semfile_list_check(&initialized,recycle_semfiles); + + shutdown_semfiles=semfile_list_init(cfg.ctrl_dir,"shutdown","ctrl"); + semfile_list_check(&initialized,shutdown_semfiles); + + if(cfg.new_install) { + Application->BringToFront(); + StartupTimer->Interval = 2500; // Let 'em see the logo for a bit + StartupTimer->Enabled = true; + } else { + DisplayMainPanels(Sender); + } + Initialized=true; +} + +void __fastcall TMainForm::DisplayMainPanels(TObject* Sender) +{ + if(bbs_startup.options&BBS_OPT_MUTE) + SoundToggle->Checked=false; + else + SoundToggle->Checked=true; + + if(sysop_available(&cfg)) + ChatToggle->Checked=true; + else + ChatToggle->Checked=false; + NodeForm->Show(); -// ViewNodes->Checked=NodeFormVisible, ViewNodesExecute(Sender); ClientForm->Show(); -// ViewClients->Checked=ClientFormVisible, ViewClientsExecute(Sender); StatsForm->Show(); -// ViewStats->Checked=StatsFormVisible, ViewStatsExecute(Sender); TelnetForm->Show(); -// ViewTelnet->Checked=TelnetFormVisible, ViewTelnetExecute(Sender); EventsForm->Show(); -// ViewEvents->Checked=EventsFormVisible, ViewEventsExecute(Sender); FtpForm->Show(); -// ViewFtpServer->Checked=FtpFormVisible, ViewFtpServerExecute(Sender); WebForm->Show(); -// ViewWebServer->Checked=WebFormVisible; -// WebForm->Visible=ViewWebServer->Checked; MailForm->Show(); -// ViewMailServer->Checked=MailFormVisible,ViewMailServerExecute(Sender); ServicesForm->Show(); -// ViewServices->Checked=ServicesFormVisible,ViewServicesExecute(Sender); UpperLeftPageControl->Visible=true; UpperRightPageControl->Visible=true; LowerLeftPageControl->Visible=true; LowerRightPageControl->Visible=true; HorizontalSplitter->Visible=true; - BottomPanel->Visible=true; - TopPanel->Visible=true; + BottomPanel->Visible=true; + TopPanel->Visible=true; // Work-around for CB5 PageControl anomaly int i; @@ -2358,12 +2092,11 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) ServiceStatusTimer->Enabled=true; SetControls(); - - if(!Application->Active) /* Starting up minimized? */ - FormMinimize(Sender); /* Put icon in systray */ - Initialized=true; + if(!Application->Active) /* Starting up minimized? */ + FormMinimize(Sender); /* Put icon in systray */ } + //--------------------------------------------------------------------------- void __fastcall TMainForm::SaveRegistrySettings(TObject* Sender) { @@ -2510,8 +2243,10 @@ void __fastcall TMainForm::SaveRegistrySettings(TObject* Sender) { int i; - for(i=LOG_EMERG;i<=LOG_DEBUG;i++) - WriteFont("Log" + AnsiString(LogLevelDesc[i]), LogFont[i]); + for(i=LOG_EMERG;i<=LOG_DEBUG;i++) { + if(i != LOG_INFO) + WriteFont("Log" + AnsiString(LogLevelDesc[i]), LogFont[i]); + } } Registry->WriteBool("ToolBarVisible",Toolbar->Visible); @@ -2627,7 +2362,7 @@ void __fastcall TMainForm::ExportFont(TMemIniFile* IniFile, const char* section, void __fastcall TMainForm::ImportSettings(TObject* Sender) { OpenDialog->Filter="Settings files (*.ini)|*.ini|All files|*.*"; - OpenDialog->FileName=AnsiString(global.ctrl_dir)+"sbbsctrl.ini"; + OpenDialog->FileName=AnsiString(global.ctrl_dir)+"sbbsctrl*.ini"; if(!OpenDialog->Execute()) return; @@ -2698,6 +2433,15 @@ void __fastcall TMainForm::ImportSettings(TObject* Sender) =IniFile->ReadInteger(section,str,0); } + { + int i; + + for(i=LOG_EMERG; i<=LOG_DEBUG; i++) { + if(i != LOG_INFO) + ImportFont(IniFile, ("Log" + AnsiString(LogLevelDesc[i]) + "Font").c_str(), "", LogFont[i]); + } + } + section = "SpyTerminal"; SpyTerminalWidth=IniFile->ReadInteger(section, "Width", SpyTerminalWidth); SpyTerminalHeight=IniFile->ReadInteger(section, "Height", SpyTerminalHeight); @@ -2782,6 +2526,15 @@ void __fastcall TMainForm::ExportSettings(TObject* Sender) ExportFont(IniFile,section,"LogFont",WebForm->Log->Font); IniFile->WriteString(section,"LogColor",ColorToString(WebForm->Log->Color)); + { + int i; + + for(i=LOG_EMERG; i<=LOG_DEBUG; i++) { + if(i != LOG_INFO) + ExportFont(IniFile, ("Log" + AnsiString(LogLevelDesc[i]) + "Font").c_str(), "", LogFont[i]); + } + } + section = "SpyTerminal"; IniFile->WriteInteger(section, "Width" ,SpyTerminalWidth); @@ -3371,7 +3124,7 @@ void __fastcall TMainForm::BBSConfigWizardMenuItemClick(TObject *Sender) SaveSettings(Sender); // ReloadConfigExecute(Sender); /* unnecessary since refresh_cfg() is already called */ } - delete ConfigWizard; + delete ConfigWizard; inside=false; } diff --git a/src/sbbs3/ctrl/MainFormUnit.h b/src/sbbs3/ctrl/MainFormUnit.h index 564ec7bec628c2701e70ad173b4226f95dc37d5e..e8ec13c10ea8d67224cb856bf67b71c2279994f1 100644 --- a/src/sbbs3/ctrl/MainFormUnit.h +++ b/src/sbbs3/ctrl/MainFormUnit.h @@ -492,7 +492,8 @@ public: // User declarations TPageControl* __fastcall PageControl(int num); int __fastcall PageNum(TPageControl* obj); void __fastcall FormMinimize(TObject *Sender); - TColor __fastcall ReadColor(TRegistry*, AnsiString); + void __fastcall DisplayMainPanels(TObject *Sender); + TColor __fastcall ReadColor(TRegistry*, AnsiString, TColor); void __fastcall WriteColor(TRegistry*, AnsiString, TColor); void __fastcall ReadFont(AnsiString, TFont*); void __fastcall WriteFont(AnsiString, TFont*); diff --git a/src/sbbs3/ctrl/NodeFormUnit.cpp b/src/sbbs3/ctrl/NodeFormUnit.cpp index 050b230bb0f40596e5a065d00a805901895a8b16..e78d86f7ce6594f9ffb03f7f9dcb80d708e91c9e 100644 --- a/src/sbbs3/ctrl/NodeFormUnit.cpp +++ b/src/sbbs3/ctrl/NodeFormUnit.cpp @@ -34,6 +34,7 @@ ****************************************************************************/ //--------------------------------------------------------------------------- +#include "sbbs.h" #include <vcl.h> #pragma hdrstop #include <io.h> @@ -129,6 +130,7 @@ void __fastcall TNodeForm::TimerTick(TObject *Sender) { static int nodedab; char str[256]; + char tmp[128]; char status[128]; int i,n,rd,digits=1; node_t node; @@ -138,11 +140,11 @@ void __fastcall TNodeForm::TimerTick(TObject *Sender) if(nodedab<1) { char path[MAX_PATH+1]; - sprintf(path,"%sNODE.DAB",MainForm->global.ctrl_dir); + sprintf(path,"%snode.dab",MainForm->global.ctrl_dir); nodedab=_sopen(path,O_RDONLY|O_BINARY|O_CREAT, SH_DENYNONE, S_IREAD|S_IWRITE); if(nodedab==-1) { ListBox->Items->Clear(); - ListBox->Items->Add("Error "+AnsiString(errno)+" opening NODE.DAB"); + ListBox->Items->Add("!Error "+AnsiString(errno)+" opening node.dab"); return; } } @@ -169,11 +171,11 @@ void __fastcall TNodeForm::TimerTick(TObject *Sender) if(rd!=sizeof(node_t)) continue; - - sprintf(str,"%*d %s" + + safe_snprintf(str, sizeof(str), "%*d %s" ,digits ,n+1 - ,nodestatus(&MainForm->cfg,&node,status,sizeof(status),n+1)); + ,strip_ctrl(nodestatus(&MainForm->cfg, &node, status, sizeof(status), n+1), tmp)); AnsiString Str=AnsiString(str); if(ListBox->Items->Count<n+1) ListBox->Items->Add(Str); diff --git a/src/sbbs3/ctrl/NodeFormUnit.dfm b/src/sbbs3/ctrl/NodeFormUnit.dfm index 9c7ac1d6d8cd17be71b9837cdd1e4c264b750a1b..8541939bdd12d101fe6f968dc082ffd8009e7182 100644 --- a/src/sbbs3/ctrl/NodeFormUnit.dfm +++ b/src/sbbs3/ctrl/NodeFormUnit.dfm @@ -10,7 +10,7 @@ object NodeForm: TNodeForm DragKind = dkDock DragMode = dmAutomatic Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText + Font.Color = clWhite Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] @@ -114,6 +114,7 @@ object NodeForm: TNodeForm MultiSelect = True PopupMenu = PopupMenu TabOrder = 1 + Color = clBlack end object Timer: TTimer OnTimer = TimerTick diff --git a/src/sbbs3/ctrl/PropertiesDlgUnit.dfm b/src/sbbs3/ctrl/PropertiesDlgUnit.dfm index e884cbf84726f086611984458f482cf86f7375c0..22ff829395246fe240006f511ffa34bf76e23567 100644 --- a/src/sbbs3/ctrl/PropertiesDlgUnit.dfm +++ b/src/sbbs3/ctrl/PropertiesDlgUnit.dfm @@ -326,7 +326,7 @@ object PropertiesDlg: TPropertiesDlg Height = 21 ItemHeight = 13 TabOrder = 0 - Text = 'Node List' + Text = 'Source' OnChange = SourceComboBoxChange Items.Strings = ( 'Node List' @@ -380,6 +380,7 @@ object PropertiesDlg: TPropertiesDlg Height = 21 ItemHeight = 13 TabOrder = 5 + Text = 'Target' Items.Strings = ( 'Node List' 'Client List' diff --git a/src/sbbs3/ctrl/ServicesFormUnit.dfm b/src/sbbs3/ctrl/ServicesFormUnit.dfm index 3c1edab46cfc427326293ab826eb77ee9ce398d1..bfaabcf57ac411d527e61114a6eb4e6e6b2b528d 100644 --- a/src/sbbs3/ctrl/ServicesFormUnit.dfm +++ b/src/sbbs3/ctrl/ServicesFormUnit.dfm @@ -127,8 +127,9 @@ object ServicesForm: TServicesForm Width = 721 Height = 144 Align = alClient + Color = clBlack Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText + Font.Color = clWhite Font.Height = -12 Font.Name = 'MS Sans Serif' Font.Style = [] diff --git a/src/sbbs3/ctrl/TelnetFormUnit.dfm b/src/sbbs3/ctrl/TelnetFormUnit.dfm index ef88ca0ba581acf6d291f591fb58cb6ce8a7b3f0..b83bfc224dda13e6b42e341fc2ae94a4be45f4c4 100644 --- a/src/sbbs3/ctrl/TelnetFormUnit.dfm +++ b/src/sbbs3/ctrl/TelnetFormUnit.dfm @@ -152,8 +152,9 @@ object TelnetForm: TTelnetForm Width = 575 Height = 150 Align = alClient + Color = clBlack Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText + Font.Color = clWhite Font.Height = -12 Font.Name = 'MS Sans Serif' Font.Style = [] diff --git a/src/sbbs3/ctrl/WebCfgDlgUnit.cpp b/src/sbbs3/ctrl/WebCfgDlgUnit.cpp index 708a3700dbc6bfc5adf87615809e6beca9634599..b6dc232e1f80913ce782f263fd8d1729f13b732e 100644 --- a/src/sbbs3/ctrl/WebCfgDlgUnit.cpp +++ b/src/sbbs3/ctrl/WebCfgDlgUnit.cpp @@ -82,6 +82,10 @@ void __fastcall TWebCfgDlg::FormShow(TObject *Sender) TlsEnableCheckBox->Checked = true; else TlsEnableCheckBox->Checked = false; + if(MainForm->web_startup.options&WEB_OPT_HSTS_SAFE) + HSTSEnableCheckBox->Checked = true; + else + HSTSEnableCheckBox->Checked = false; AuthTypesEdit->Text = AnsiString(MainForm->web_startup.default_auth_list); HtmlRootEdit->Text=AnsiString(MainForm->web_startup.root_dir); @@ -135,6 +139,10 @@ void __fastcall TWebCfgDlg::OKBtnClick(TObject *Sender) MainForm->web_startup.options |= WEB_OPT_ALLOW_TLS; else MainForm->web_startup.options &= ~WEB_OPT_ALLOW_TLS; + if(HSTSEnableCheckBox->Checked) + MainForm->web_startup.options |= WEB_OPT_HSTS_SAFE; + else + MainForm->web_startup.options &= ~WEB_OPT_HSTS_SAFE; SAFECOPY(MainForm->web_startup.default_auth_list ,AuthTypesEdit->Text.c_str()); @@ -281,6 +289,7 @@ void __fastcall TWebCfgDlg::TlsEnableCheckBoxClick(TObject *Sender) TlsInterfaceLabel->Enabled = enabled; TlsPortEdit->Enabled = enabled; TlsPortLabel->Enabled = enabled; + HSTSEnableCheckBox->Enabled = enabled; } //--------------------------------------------------------------------------- diff --git a/src/sbbs3/ctrl/WebCfgDlgUnit.dfm b/src/sbbs3/ctrl/WebCfgDlgUnit.dfm index d2c6743199173a7c07caca1033f3719c5f99ffe5..2f1cac267697d0539d73d44df77fa35c5cc304d4 100644 --- a/src/sbbs3/ctrl/WebCfgDlgUnit.dfm +++ b/src/sbbs3/ctrl/WebCfgDlgUnit.dfm @@ -25,8 +25,8 @@ object WebCfgDlg: TWebCfgDlg Top = 3 Width = 278 Height = 199 - ActivePage = HttpTabSheet - TabIndex = 2 + ActivePage = TlsTabSheet + TabIndex = 1 TabOrder = 0 object GeneralTabSheet: TTabSheet Caption = 'General' @@ -200,6 +200,17 @@ object WebCfgDlg: TWebCfgDlg ShowHint = True TabOrder = 2 end + object HSTSEnableCheckBox: TCheckBox + Left = 148 + Top = 10 + Width = 119 + Height = 20 + Hint = 'HTTP Strict Transport Security' + Caption = 'HSTS Support' + ParentShowHint = False + ShowHint = True + TabOrder = 3 + end end object HttpTabSheet: TTabSheet Caption = 'HTTP' diff --git a/src/sbbs3/ctrl/WebCfgDlgUnit.h b/src/sbbs3/ctrl/WebCfgDlgUnit.h index c0979f9a2d075fe2c327d8f23e535890c5d6fd00..1b4083111dad876f6fee28b646213c1a6198fb09 100644 --- a/src/sbbs3/ctrl/WebCfgDlgUnit.h +++ b/src/sbbs3/ctrl/WebCfgDlgUnit.h @@ -108,6 +108,7 @@ __published: // IDE-managed Components TEdit *TlsPortEdit; TLabel *AuthTypesLabel; TEdit *AuthTypesEdit; + TCheckBox *HSTSEnableCheckBox; void __fastcall FormShow(TObject *Sender); void __fastcall AnswerSoundButtonClick(TObject *Sender); void __fastcall HangupSoundButtonClick(TObject *Sender); diff --git a/src/sbbs3/ctrl/WebFormUnit.dfm b/src/sbbs3/ctrl/WebFormUnit.dfm index 281dca641185b153c4e224d6c95ccb01519bfd85..86bc8234fab0c622cea67e27441d6f8f9c3f2282 100644 --- a/src/sbbs3/ctrl/WebFormUnit.dfm +++ b/src/sbbs3/ctrl/WebFormUnit.dfm @@ -148,8 +148,9 @@ object WebForm: TWebForm Width = 446 Height = 165 Align = alClient + Color = clBlack Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText + Font.Color = clWhite Font.Height = -12 Font.Name = 'MS Sans Serif' Font.Style = [] diff --git a/src/sbbs3/ctrl/sbbsctrl.bpr b/src/sbbs3/ctrl/sbbsctrl.bpr index d34814ae5bc418a10939848c636b4f09cd28902d..05f779670b31dbe298f5355cf84523695cdfef04 100644 --- a/src/sbbs3/ctrl/sbbsctrl.bpr +++ b/src/sbbs3/ctrl/sbbsctrl.bpr @@ -125,7 +125,7 @@ IncludeVerInfo=1 AutoIncBuild=1 MajorVer=3 MinorVer=18 -Release=0 +Release=1 Build=0 Debug=0 PreRelease=0 @@ -138,13 +138,13 @@ CodePage=1252 [Version Info Keys] CompanyName=Rob Swindell FileDescription=Synchronet BBS Control Panel -FileVersion=3.18.0.0 +FileVersion=3.18.1.0 InternalName= LegalCopyright=(C) 2020 Rob Swindell LegalTrademarks= OriginalFilename=sbbsctrl.exe ProductName=Synchronet BBS -ProductVersion=3.18a +ProductVersion=3.18b Comments= [Excluded Packages] diff --git a/src/sbbs3/ctrl/sbbsctrl.res b/src/sbbs3/ctrl/sbbsctrl.res index bf7879314206c403f867e46b71cb130faa5fe8d0..9df7b5e30a44d684ccdebf860a204e457e37f41d 100644 Binary files a/src/sbbs3/ctrl/sbbsctrl.res and b/src/sbbs3/ctrl/sbbsctrl.res differ diff --git a/src/sbbs3/delfiles.c b/src/sbbs3/delfiles.c index fd42ce04f0ce4dcfa21823ca2639f5e057c758b8..0aa828d7e546d636a9cc2f7d07a25e1e8c4b0373 100644 --- a/src/sbbs3/delfiles.c +++ b/src/sbbs3/delfiles.c @@ -205,7 +205,7 @@ int main(int argc, char **argv) if(misc&NO_LINK && cfg.dir[i]->misc&DIR_FCHK) { strcpy(tmp,cfg.dir[i]->path); - sprintf(str,"%s*.*",tmp); + SAFEPRINTF(str,"%s*.*",tmp); printf("\nSearching %s for unlinked files\n",str); if(!glob(str, GLOB_MARK, NULL, &gl)) { for(j=0; j<(int)gl.gl_pathc; j++) { @@ -266,7 +266,7 @@ int main(int argc, char **argv) strcpy(workfile.name,fname); unpadfname(workfile.name,fname); workfile.dir=i; - sprintf(str,"%s%s" + SAFEPRINTF2(str,"%s%s" ,workfile.altpath>0 && workfile.altpath<=cfg.altpaths ? cfg.altpath[workfile.altpath-1] : cfg.dir[workfile.dir]->path,fname); diff --git a/src/sbbs3/delfiles.vcxproj b/src/sbbs3/delfiles.vcxproj index 82c1e36acc6836e7e2612fcea11880e2c2a85239..5b201b9f583488271cd2ce32c873a42d5ac27f09 100644 --- a/src/sbbs3/delfiles.vcxproj +++ b/src/sbbs3/delfiles.vcxproj @@ -71,7 +71,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\delfiles/delfiles.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\delfiles/</AssemblerListingLocation> diff --git a/src/sbbs3/dstsedit.c b/src/sbbs3/dstsedit.c index 48cd5afccebe54a56235042e771832e376281be5..18fc8a2785c179497752f2346a001923e6fbdb0f 100644 --- a/src/sbbs3/dstsedit.c +++ b/src/sbbs3/dstsedit.c @@ -63,7 +63,7 @@ main(int argc, char **argv) } backslash(path); - sprintf(str, "%sdsts.dab", path); + SAFEPRINTF(str, "%sdsts.dab", path); if ((file = nopen(str, O_RDONLY)) == -1) { printf("Can't open %s\r\n", str); exit(1); @@ -179,7 +179,7 @@ main(int argc, char **argv) stats.nusers = atoi(str); break; case 'Q': - sprintf(str, "%sdsts.dab", path); + SAFEPRINTF(str, "%sdsts.dab", path); if ((file = nopen(str, O_WRONLY)) == -1) { printf("Error opening %s\r\n", str); exit(1); diff --git a/src/sbbs3/dstsedit.vcxproj b/src/sbbs3/dstsedit.vcxproj index 793a709e1ea62635981d4ad8a552670337745a40..d9caf5befac0d1f3bd01d8054b76aa4b0092f811 100644 --- a/src/sbbs3/dstsedit.vcxproj +++ b/src/sbbs3/dstsedit.vcxproj @@ -71,7 +71,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;NO_SOCKET_SUPPORT;SBBS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\dstsedit/dstsedit.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\dstsedit/</AssemblerListingLocation> diff --git a/src/sbbs3/dupefind.vcxproj b/src/sbbs3/dupefind.vcxproj index bc2b7e1e2baa6ce6d8d2119c1f9ea92851795f80..daa7e3d2c0379b3950ee82964542e2c50cc40151 100644 --- a/src/sbbs3/dupefind.vcxproj +++ b/src/sbbs3/dupefind.vcxproj @@ -112,7 +112,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\dupefind/dupefind.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\dupefind/</AssemblerListingLocation> diff --git a/src/sbbs3/echocfg.vcxproj b/src/sbbs3/echocfg.vcxproj index 8af5ed34388d480d51c42b5e665dc8488ee0e03f..9cdd52a70f716fa3b6b8d84392d2844232f4c1c2 100644 --- a/src/sbbs3/echocfg.vcxproj +++ b/src/sbbs3/echocfg.vcxproj @@ -116,7 +116,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>SBBS_EXPORTS;NDEBUG;WIN32;_CONSOLE;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\echocfg/echocfg.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\echocfg/</AssemblerListingLocation> diff --git a/src/sbbs3/email.cpp b/src/sbbs3/email.cpp index 53bfc6fa92865fb9864f4815df6069a7744c67f1..164468676d8ccceea110d89da3b52cb46f8a4db8 100644 --- a/src/sbbs3/email.cpp +++ b/src/sbbs3/email.cpp @@ -91,11 +91,15 @@ bool sbbs_t::email(int usernumber, const char *top, const char *subj, long mode, bputs(text[UnknownUser]); return(false); } - if((l&NETMAIL) && (cfg.sys_misc&SM_FWDTONET) && !(mode & WM_NOFWD)) { + if((l&NETMAIL) && (cfg.sys_misc&SM_FWDTONET) && !(mode & WM_NOFWD) && !(useron.rest&FLAG('M'))) { getuserrec(&cfg,usernumber,U_NETMAIL,LEN_NETMAIL,str); - bprintf(text[UserNetMail],str); - if((mode & WM_FORCEFWD) || text[ForwardMailQ][0]==0 || yesno(text[ForwardMailQ])) /* Forward to netmail address */ - return(netmail(str, subj, mode, resmb, remsg)); + if(is_supported_netmail_addr(&cfg, str)) { + bprintf(text[UserNetMail],str); + if((mode & WM_FORCEFWD) || yesno(text[ForwardMailQ])) /* Forward to netmail address */ + return(netmail(str, subj, mode, resmb, remsg)); + } else { + bprintf(text[InvalidNetMailAddr], str); + } } if(sys_status&SS_ABORT) { bputs(text[Aborted]); @@ -303,7 +307,7 @@ bool sbbs_t::email(int usernumber, const char *top, const char *subj, long mode, /* Security logging */ msg_client_hfields(&msg,&client); - smb_hfield_str(&msg,SENDERSERVER,startup->host_name); + smb_hfield_str(&msg,SENDERSERVER,server_host_name()); smb_hfield_str(&msg,SUBJECT,title); diff --git a/src/sbbs3/fido.cpp b/src/sbbs3/fido.cpp index 3855f0531817802346e2195e978b194ef8e2b6c1..f2378f3c1f056719987013850730da848976b592 100644 --- a/src/sbbs3/fido.cpp +++ b/src/sbbs3/fido.cpp @@ -82,7 +82,7 @@ bool sbbs_t::lookup_netuser(char *into) strupr(name); str[35]=0; truncsp(str+27); - sprintf(q,"Do you mean %s @%s",str,str+27); + SAFEPRINTF2(q,"Do you mean %s @%s",str,str+27); if(strstr(name,to) && yesno(q)) { fclose(stream); sprintf(into,"%s@%s",str,str+27); diff --git a/src/sbbs3/filelist.c b/src/sbbs3/filelist.c index 9d963188a8930df2e5e41921716d0ecba9f9dbeb..dfed141029ccabcf8339bb54faf0c8069ca7bd79 100644 --- a/src/sbbs3/filelist.c +++ b/src/sbbs3/filelist.c @@ -414,7 +414,7 @@ int main(int argc, char **argv) } if(misc&MINUS) { - sprintf(str,"%s%s",scfg.dir[i]->path,fname); + SAFEPRINTF2(str,"%s%s",scfg.dir[i]->path,fname); if(!fexistcase(str)) fputc('-',out); else @@ -425,7 +425,7 @@ int main(int argc, char **argv) desc_off++; if(misc&DFD) { - sprintf(str,"%s%s",scfg.dir[i]->path,fname); + SAFEPRINTF2(str,"%s%s",scfg.dir[i]->path,fname); fprintf(out,"%s ",unixtodstr(&scfg,(time32_t)fdate(str),str)); desc_off+=9; } diff --git a/src/sbbs3/filelist.vcxproj b/src/sbbs3/filelist.vcxproj index e21587f158c8dcf3c96647326be7f7a971a42805..4b662e6cc44e6b4ee2e3670b0a9eea9e80a10d10 100644 --- a/src/sbbs3/filelist.vcxproj +++ b/src/sbbs3/filelist.vcxproj @@ -71,7 +71,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;WRAPPER_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\filelist/filelist.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\filelist/</AssemblerListingLocation> diff --git a/src/sbbs3/fixsmb.vcxproj b/src/sbbs3/fixsmb.vcxproj index c052dc3c60119828b7f58f819430625b0defd18f..8553232db5cada3a3aaf87534929cdd71cbf928e 100644 --- a/src/sbbs3/fixsmb.vcxproj +++ b/src/sbbs3/fixsmb.vcxproj @@ -110,7 +110,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\fixsmb/fixsmb.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\fixsmb/</AssemblerListingLocation> diff --git a/src/sbbs3/fmsgdump.c b/src/sbbs3/fmsgdump.c index 09b7b7170fe80da0b764361faa052e9d7dceb6cd..b1d2a935659c8af35ffc2f9bcc8b427bd4f47a89 100644 --- a/src/sbbs3/fmsgdump.c +++ b/src/sbbs3/fmsgdump.c @@ -51,7 +51,7 @@ const char* fmsgattr_str(uint16_t attr) if(str[0] == 0) return ""; - static char buf[64]; + static char buf[128]; sprintf(buf, "(%s)", str); return buf; } diff --git a/src/sbbs3/fmsgdump.vcxproj b/src/sbbs3/fmsgdump.vcxproj index a35c81eed80dde1c7ededd325ba0cf0325955c84..a3c90df3f3e9c1f9bff51f9189e1ef6ed9f66772 100644 --- a/src/sbbs3/fmsgdump.vcxproj +++ b/src/sbbs3/fmsgdump.vcxproj @@ -53,6 +53,8 @@ </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <LinkIncremental>false</LinkIncremental> + <OutDir>.\msvc.win32.exe.release\</OutDir> + <IntDir>.\msvc.win32.release\fmsgdump</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index ecd5d1078f65d27e32670c23c95ad655c6678219..9e9065a6787332b2e131db7e88798c6c8ffcbc9d 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -201,6 +201,11 @@ static BOOL winsock_startup(void) #endif +static char* server_host_name(void) +{ + return startup->host_name[0] ? startup->host_name : scfg.sys_inetaddr; +} + static void status(char* str) { if(startup!=NULL && startup->status!=NULL) @@ -593,7 +598,7 @@ js_initcx(JSRuntime* runtime, SOCKET sock, JSObject** glob, JSObject** ftp, js_c break; lprintf(LOG_DEBUG,"%04d JavaScript: Initializing System object",sock); - if(js_CreateSystemObject(js_cx, *glob, &scfg, uptime, startup->host_name, SOCKLIB_DESC)==NULL) + if(js_CreateSystemObject(js_cx, *glob, &scfg, uptime, server_host_name(), SOCKLIB_DESC)==NULL) break; if((*ftp=JS_DefineObject(js_cx, *glob, "ftp", NULL @@ -3124,7 +3129,7 @@ static void ctrl_thread(void* arg) mswait(login_attempts*startup->login_attempt.throttle); } - sockprintf(sock,sess,"220-%s (%s)",scfg.sys_name, startup->host_name); + sockprintf(sock,sess,"220-%s (%s)",scfg.sys_name, server_host_name()); sockprintf(sock,sess," Synchronet FTP Server %s-%s Ready" ,revision,PLATFORM_DESC); sprintf(str,"%sftplogin.txt",scfg.text_dir); @@ -3850,7 +3855,7 @@ static void ctrl_thread(void* arg) ip_addr=0; /* TODO: IPv6 this here lookup */ if(startup->options&FTP_OPT_LOOKUP_PASV_IP - && (host=gethostbyname(startup->host_name))!=NULL) + && (host=gethostbyname(server_host_name()))!=NULL) ip_addr=ntohl(*((ulong*)host->h_addr_list[0])); if(ip_addr==0 && (ip_addr=startup->pasv_ip_addr.s_addr)==0) ip_addr=ntohl(pasv_addr.in.sin_addr.s_addr); @@ -6046,6 +6051,8 @@ void DLLCALL ftp_server(void* arg) protected_uint32_init(&thread_count, 0); do { + protected_uint32_init(&active_clients, 0); + /* Setup intelligent defaults */ if(startup->port==0) startup->port=IPPORT_FTP; if(startup->qwk_timeout==0) startup->qwk_timeout=FTP_DEFAULT_QWK_TIMEOUT; /* seconds */ @@ -6107,9 +6114,6 @@ void DLLCALL ftp_server(void* arg) break; } - if(startup->host_name[0]==0) - SAFECOPY(startup->host_name,scfg.sys_inetaddr); - if((t=checktime())!=0) { /* Check binary time */ lprintf(LOG_ERR,"!TIME PROBLEM (%ld)",t); } @@ -6122,17 +6126,12 @@ void DLLCALL ftp_server(void* arg) else SAFECOPY(scfg.temp_dir,"../temp"); prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); - if(!isdir(scfg.temp_dir) && MKDIR(scfg.temp_dir) != 0) { - lprintf(LOG_ERR, "Error %d creating temp directory: %s", errno, scfg.temp_dir); + if((i = md(scfg.temp_dir)) != 0) { + lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", i, strerror(i), scfg.temp_dir); cleanup(1,__LINE__); break; } lprintf(LOG_DEBUG,"Temporary file directory: %s", scfg.temp_dir); - if(!isdir(scfg.temp_dir)) { - lprintf(LOG_CRIT,"!Invalid temp directory: %s", scfg.temp_dir); - cleanup(1,__LINE__); - break; - } if(!startup->max_clients) { startup->max_clients=scfg.sys_nodes; @@ -6158,7 +6157,6 @@ void DLLCALL ftp_server(void* arg) lprintf(LOG_DEBUG,"Maximum inactivity: %d seconds",startup->max_inactivity); - protected_uint32_init(&active_clients, 0); update_clients(); strlwr(scfg.sys_id); /* Use lower-case unix-looking System ID for group name */ diff --git a/src/sbbs3/ftpsrvr.vcxproj b/src/sbbs3/ftpsrvr.vcxproj index 646d1d20a173bca731e1f54912f98c791a5174e7..e5e655e12a9c79d859140730f9a8ee22ced0cc5c 100644 --- a/src/sbbs3/ftpsrvr.vcxproj +++ b/src/sbbs3/ftpsrvr.vcxproj @@ -81,7 +81,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;FTPSRVR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\ftpsrvr/ftpsrvr.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\ftpsrvr/</AssemblerListingLocation> diff --git a/src/sbbs3/getkey.cpp b/src/sbbs3/getkey.cpp index ab02f3c2670cb3f99a2d6369a6e141334e812ce4..f4a0258ccadebaea4cfc092591c0efe10862aad4 100644 --- a/src/sbbs3/getkey.cpp +++ b/src/sbbs3/getkey.cpp @@ -61,19 +61,30 @@ char sbbs_t::getkey(long mode) mode|=(useron.misc&SPIN); lncntr=0; timeout=time(NULL); +#if !defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR if(mode&K_SPIN) outchar(' '); - +#endif do { if(sys_status&SS_ABORT) { - if(mode&K_SPIN) /* back space once if on spinning cursor */ + if(mode&K_SPIN) { +#if defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR + bputs(" \b"); +#else backspace(); +#endif + } return(0); } if(mode&K_SPIN) { +#if !defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR outchar('\b'); +#endif outchar(cursor[(c++) % cursors]); +#if defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR + outchar('\b'); +#endif } ch=inkey(mode,mode&K_SPIN ? 200:1000); if(sys_status&SS_ABORT) @@ -86,8 +97,13 @@ char sbbs_t::getkey(long mode) continue; if(mode&K_NOEXASC && ch&0x80) continue; - if(mode&K_SPIN) + if(mode&K_SPIN) { +#if defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR + bputs(" \b"); +#else backspace(); +#endif + } if(mode&K_COLD && ch>' ' && useron.misc&COLDKEYS) { if(mode&K_UPPER) outchar(toupper(ch)); diff --git a/src/sbbs3/getnode.cpp b/src/sbbs3/getnode.cpp index b38d88e5cac5a6b442e14e4a2beea0c4ef88ce6d..89e40b1c7443e5273ee8e8171492abf478d9b444 100644 --- a/src/sbbs3/getnode.cpp +++ b/src/sbbs3/getnode.cpp @@ -109,6 +109,18 @@ int sbbs_t::getnodedat(uint number, node_t *node, bool lockit) return(0); } +static int getpagingnode(scfg_t* cfg) +{ + for(int i = 1; i <= cfg->sys_nodes; i++) { + node_t node; + if(i == cfg->node_num) + continue; + if(getnodedat(cfg, i, &node, FALSE, NULL) == 0 && node.action == NODE_PAGE && node.aux == cfg->node_num) + return i; + } + return 0; +} + /****************************************************************************/ /* Synchronizes all the nodes knowledge of the other nodes' actions, mode, */ /* status and other flags. */ @@ -184,6 +196,19 @@ void sbbs_t::nodesync(bool clearline) privchat(true); RESTORELINE; } + + if(thisnode.misc&NODE_FCHAT) { // forced into private chat + int n = getpagingnode(&cfg); + if(n) { + SAVELINE; + privchat(true, n); + RESTORELINE; + } + if(getnodedat(cfg.node_num, &thisnode, true)==0) { + thisnode.misc &= ~NODE_FCHAT; + putnodedat(cfg.node_num, &thisnode); + } + } if(sys_status&SS_USERON && memcmp(&nodesync_user,&useron,sizeof(user_t))) { getusrdirs(); @@ -644,7 +669,7 @@ void sbbs_t::printnodedat(uint number, node_t* node) outchar(')'); } if(SYSOP && ((node->misc - &(NODE_ANON|NODE_UDAT|NODE_INTR|NODE_RRUN|NODE_EVENT|NODE_DOWN|NODE_LCHAT)) + &(NODE_ANON|NODE_UDAT|NODE_INTR|NODE_RRUN|NODE_EVENT|NODE_DOWN|NODE_LCHAT|NODE_FCHAT)) || node->status==NODE_QUIET)) { bputs(" ["); if(node->misc&NODE_ANON) @@ -663,6 +688,8 @@ void sbbs_t::printnodedat(uint number, node_t* node) outchar('D'); if(node->misc&NODE_LCHAT) outchar('C'); + if(node->misc&NODE_FCHAT) + outchar('F'); outchar(']'); } if(node->errors && SYSOP) { diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp index b6786fc82f72c8fff6809606fdbb000bbddd97a6..0e1121e74bd12c466f4ce5a0e2f5088953c1d762 100644 --- a/src/sbbs3/js_bbs.cpp +++ b/src/sbbs3/js_bbs.cpp @@ -3339,7 +3339,7 @@ js_put_telegram(JSContext *cx, uintN argc, jsval *arglist) sbbs->bputs("\1n: \1h"); if(!sbbs->getstr(line, 70, i < 4 ? (K_WRAP|K_MSG) : (K_MSG))) break; - sprintf(str,"%4s%s\r\n",nulstr,line); + SAFEPRINTF2(str,"%4s%s\r\n",nulstr,line); SAFECAT(buf, str); if(i && line[0]) SAFECAT(logbuf, " "); diff --git a/src/sbbs3/js_console.cpp b/src/sbbs3/js_console.cpp index b3c10c9b4ac01b63129dfefe1a8a936b540c30b4..efc8894b05ec01489b3109533b3326cccbdcd1a0 100644 --- a/src/sbbs3/js_console.cpp +++ b/src/sbbs3/js_console.cpp @@ -1395,6 +1395,11 @@ js_printfile(JSContext *cx, uintN argc, jsval *arglist) if((sbbs=(sbbs_t*)js_GetClassPrivate(cx, JS_THIS_OBJECT(cx, arglist), &js_console_class))==NULL) return(JS_FALSE); + if(JSVAL_NULL_OR_VOID(argv[0])) { + JS_ReportError(cx, "No filename specified"); + return JS_FALSE; + } + str = JS_ValueToString(cx, argv[0]); if (!str) return(JS_FALSE); @@ -1424,7 +1429,7 @@ js_printfile(JSContext *cx, uintN argc, jsval *arglist) free(cstr); JS_RESUMEREQUEST(cx, rc); - JS_SET_RVAL(cx, arglist, result ? JS_TRUE : JS_FALSE); + JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(result)); return(JS_TRUE); } @@ -1468,8 +1473,10 @@ js_printtail(JSContext *cx, uintN argc, jsval *arglist) } } - if(js_str==NULL) - return(JS_FALSE); + if(js_str==NULL) { + JS_ReportError(cx, "No filename specified"); + return JS_FALSE; + } if(!lines) lines=5; @@ -1482,7 +1489,7 @@ js_printtail(JSContext *cx, uintN argc, jsval *arglist) free(cstr); JS_RESUMEREQUEST(cx, rc); - JS_SET_RVAL(cx, arglist, result ? JS_TRUE : JS_FALSE); + JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(result)); return(JS_TRUE); } diff --git a/src/sbbs3/js_file_area.c b/src/sbbs3/js_file_area.c index 1a1d5f9e43c8b5db18b270c7a67a76a739009c45..7b0bec7a63e47a4016f44dcb7139dceb48db0d07 100644 --- a/src/sbbs3/js_file_area.c +++ b/src/sbbs3/js_file_area.c @@ -129,7 +129,7 @@ JSBool DLLCALL js_file_area_resolve(JSContext* cx, JSObject* areaobj, jsid id) if(id != JSID_VOID && id != JSID_EMPTY) { jsval idval; - + JS_IdToValue(cx, id, &idval); if(JSVAL_IS_STRING(idval)) JSSTRING_TO_MSTRING(cx, JSVAL_TO_STRING(idval), name, NULL); @@ -219,7 +219,7 @@ JSBool DLLCALL js_file_area_resolve(JSContext* cx, JSObject* areaobj, jsid id) lib_index=-1; if(p->user==NULL || chk_ar(p->cfg,p->cfg->lib[l]->ar,p->user,p->client)) { - if(!JS_GetArrayLength(cx, lib_list, &lib_index)) + if(!JS_GetArrayLength(cx, lib_list, (jsuint*)&lib_index)) return JS_FALSE; if(!JS_SetElement(cx, lib_list, lib_index, &val)) @@ -291,7 +291,7 @@ JSBool DLLCALL js_file_area_resolve(JSContext* cx, JSObject* areaobj, jsid id) dir_index=-1; if(p->user==NULL || chk_ar(p->cfg,p->cfg->dir[d]->ar,p->user,p->client)) { - if(!JS_GetArrayLength(cx, dir_list, &dir_index)) + if(!JS_GetArrayLength(cx, dir_list, (jsuint*)&dir_index)) return JS_FALSE; if(!JS_SetElement(cx, dir_list, dir_index, &val)) diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index 5950ecd173a04f5741a5d63f5d209de749d802a5..3463c010f60ce9d348e53dec60e60ad668a48d75 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -3047,7 +3047,7 @@ js_fcopy(JSContext *cx, uintN argc, jsval *arglist) } rc=JS_SUSPENDREQUEST(cx); - ret=fcopy(src,dest); + ret = CopyFile(src, dest, /* failIfExists: */FALSE); free(src); free(dest); JS_RESUMEREQUEST(cx, rc); diff --git a/src/sbbs3/js_msg_area.c b/src/sbbs3/js_msg_area.c index bc8bed5a1ea5a382bf618a7439a16893a3088011..c3d2d8307a71bf77dcb694a57924e4062e5b1f5d 100644 --- a/src/sbbs3/js_msg_area.c +++ b/src/sbbs3/js_msg_area.c @@ -447,7 +447,7 @@ JSBool DLLCALL js_msg_area_resolve(JSContext* cx, JSObject* areaobj, jsid id) grp_index=-1; if(p->user==NULL || chk_ar(p->cfg,p->cfg->grp[l]->ar,p->user,p->client)) { - if(!JS_GetArrayLength(cx, grp_list, &grp_index)) + if(!JS_GetArrayLength(cx, grp_list, (jsuint*)&grp_index)) return JS_FALSE; if(!JS_SetElement(cx, grp_list, grp_index, &val)) @@ -538,7 +538,7 @@ JSBool DLLCALL js_msg_area_resolve(JSContext* cx, JSObject* areaobj, jsid id) sub_index=-1; if(p->user==NULL || can_user_access_sub(p->cfg,d,p->user,p->client)) { - if(!JS_GetArrayLength(cx, sub_list, &sub_index)) + if(!JS_GetArrayLength(cx, sub_list, (jsuint*)&sub_index)) return JS_FALSE; if(!JS_SetElement(cx, sub_list, sub_index, &val)) diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c index e0e5620aa72020b281220b5fe354011a758e8e3f..583172f39bf81ebad9ea69e58a4f160b875698c1 100644 --- a/src/sbbs3/js_system.c +++ b/src/sbbs3/js_system.c @@ -51,6 +51,7 @@ extern JSClass js_system_class; enum { SYS_PROP_NAME ,SYS_PROP_OP + ,SYS_PROP_OP_AVAIL ,SYS_PROP_ID ,SYS_PROP_MISC ,SYS_PROP_INETADDR @@ -146,6 +147,9 @@ static JSBool js_system_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) case SYS_PROP_OP: p=cfg->sys_op; break; + case SYS_PROP_OP_AVAIL: + *vp=BOOLEAN_TO_JSVAL(sysop_available(cfg)); + break; case SYS_PROP_ID: p=cfg->sys_id; break; @@ -172,7 +176,7 @@ static JSBool js_system_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) *vp = INT_TO_JSVAL(cfg->sys_pwdays); break; case SYS_PROP_MINPWLEN: - *vp = INT_TO_JSVAL(MIN_PASS_LEN); + *vp = INT_TO_JSVAL(cfg->min_pwlen); break; case SYS_PROP_MAXPWLEN: *vp = INT_TO_JSVAL(LEN_PASS); @@ -359,10 +363,16 @@ static JSBool js_system_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict case SYS_PROP_MISC: JS_ValueToInt32(cx, *vp, &sys->cfg->sys_misc); break; + case SYS_PROP_OP_AVAIL: + if(!set_sysop_availability(sys->cfg, JSVAL_TO_BOOLEAN(*vp))) { + JS_ReportError(cx, "%s: Failed to set sysop availability", __FUNCTION__); + return JS_FALSE; + } + break; } #endif - return(TRUE); + return JS_TRUE; } @@ -374,6 +384,7 @@ static jsSyncPropertySpec js_system_properties[] = { #ifndef JSDOOR { "name", SYS_PROP_NAME, SYSOBJ_FLAGS, 310 }, { "operator", SYS_PROP_OP, SYSOBJ_FLAGS, 310 }, + { "operator_available", SYS_PROP_OP_AVAIL, JSPROP_ENUMERATE, 31801 }, { "qwk_id", SYS_PROP_ID, SYSOBJ_FLAGS, 310 }, { "settings", SYS_PROP_MISC, JSPROP_ENUMERATE, 310 }, { "inetaddr", SYS_PROP_INETADDR, JSPROP_READONLY, 310 }, /* alias */ @@ -452,6 +463,7 @@ static jsSyncPropertySpec js_system_properties[] = { static char* sys_prop_desc[] = { "BBS name" ,"operator name" + ,"operator is available for chat" ,"system QWK-ID (for QWK packets)" ,"settings bitfield (see <tt>SYS_*</tt> in <tt>sbbsdefs.js</tt> for bit definitions)" ,"Internet address (host or domain name)" @@ -1589,6 +1601,59 @@ js_put_telegram(JSContext *cx, uintN argc, jsval *arglist) return(JS_TRUE); } +static JSBool +js_notify(JSContext *cx, uintN argc, jsval *arglist) +{ + JSObject *obj=JS_THIS_OBJECT(cx, arglist); + jsval *argv=JS_ARGV(cx, arglist); + int32 usernumber=1; + JSString* js_subj; + JSString* js_msg; + char* subj; + char* msg = NULL; + jsrefcount rc; + BOOL ret; + + JS_SET_RVAL(cx, arglist, JSVAL_VOID); + + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; + + JS_ValueToInt32(cx,argv[0],&usernumber); + if(usernumber<1) + usernumber=1; + + if((js_subj=JS_ValueToString(cx, argv[1]))==NULL) + return JS_FALSE; + + if(argc > 2) { + if((js_msg=JS_ValueToString(cx, argv[2]))==NULL) + return JS_FALSE; + + JSSTRING_TO_MSTRING(cx, js_msg, msg, NULL); + HANDLE_PENDING(cx, msg); + if(msg==NULL) + return JS_TRUE; + } + + JSSTRING_TO_MSTRING(cx, js_subj, subj, NULL); + HANDLE_PENDING(cx,subj); + if(subj==NULL) { + free(msg); + return JS_TRUE; + } + + rc=JS_SUSPENDREQUEST(cx); + ret=notify(sys->cfg, usernumber, subj, msg)==0; + free(subj); + free(msg); + JS_RESUMEREQUEST(cx, rc); + JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(ret)); + + return JS_TRUE; +} + static JSBool js_new_user(JSContext *cx, uintN argc, jsval *arglist) { @@ -1905,7 +1970,7 @@ js_killpid(JSContext *cx, uintN argc, jsval *arglist) static jsSyncMethodSpec js_system_functions[] = { #ifndef JSDOOR - {"username", js_username, 1, JSTYPE_STRING, JSDOCSTR("number") + {"username", js_username, 1, JSTYPE_STRING, JSDOCSTR("user_number") ,JSDOCSTR("returns name of user in specified user record <i>number</i>, or empty string if not found") ,311 }, @@ -1986,6 +2051,10 @@ static jsSyncMethodSpec js_system_functions[] = { ,JSDOCSTR("sends a user a short text message, delivered immediately or during next logon") ,310 }, + {"notify", js_notify, 2, JSTYPE_BOOLEAN, JSDOCSTR("user_number, subject [,message_text]") + ,JSDOCSTR("notify a user or operator via both email and a short text message about an important event") + ,31801 + }, {"newuser", js_new_user, 1, JSTYPE_ALIAS }, {"new_user", js_new_user, 1, JSTYPE_OBJECT, JSDOCSTR("name/alias [,client object]") ,JSDOCSTR("creates a new user record, returns a new <a href=#User>User</a> object representing the new user account, on success.<br>" @@ -1993,7 +2062,7 @@ static jsSyncMethodSpec js_system_functions[] = { "client object is used if the argument is omitted)") ,310 }, - {"del_user", js_del_user, 1, JSTYPE_BOOLEAN, JSDOCSTR("number") + {"del_user", js_del_user, 1, JSTYPE_BOOLEAN, JSDOCSTR("user_number") ,JSDOCSTR("delete the specified user account") ,316 }, diff --git a/src/sbbs3/js_uifc.c b/src/sbbs3/js_uifc.c index cbc39fdd326604f54609762f968a4e294f07f6fb..4d09ea0ac7a9c9d3e3f328d9447b4dd060250681 100644 --- a/src/sbbs3/js_uifc.c +++ b/src/sbbs3/js_uifc.c @@ -755,7 +755,7 @@ js_uifc_list(JSContext *cx, uintN argc, jsval *arglist) } } if(title == NULL || opts == NULL) { - JS_SET_RVAL(cx, arglist, JS_FALSE); + JS_SET_RVAL(cx, arglist, JSVAL_FALSE); } else { rc=JS_SUSPENDREQUEST(cx); JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(uifc->list(mode,left,top,width,(int*)dptr,(int*)bptr,title,opts))); diff --git a/src/sbbs3/jsexec.vcxproj b/src/sbbs3/jsexec.vcxproj index 7dc827aa29aa2649ffa250fcfba520a90e44be0c..e4f3aece34eefde9f6804a415f9724a75fdf6371 100644 --- a/src/sbbs3/jsexec.vcxproj +++ b/src/sbbs3/jsexec.vcxproj @@ -79,7 +79,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\jsexec/jsexec.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\jsexec/</AssemblerListingLocation> diff --git a/src/sbbs3/listfile.cpp b/src/sbbs3/listfile.cpp index f237cbd4d13e219983a015c1c2e37cdc1fe9bcbe..58923be8ead16e05a645677070fad2576f4babd8 100644 --- a/src/sbbs3/listfile.cpp +++ b/src/sbbs3/listfile.cpp @@ -1164,8 +1164,8 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode) && findfile(&cfg,f.dir,path)) bprintf(text[FileAlreadyThere],path); else { - sprintf(path,"%s%s",dirpath,fname); - sprintf(tmp,"%s%s",dirpath,str); + SAFEPRINTF2(path,"%s%s",dirpath,fname); + SAFEPRINTF2(tmp,"%s%s",dirpath,str); if(fexistcase(path) && rename(path,tmp)) bprintf(text[CouldntRenameFile],path,tmp); else { @@ -1184,8 +1184,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode) break; if(f.misc&FM_EXTDESC) { if(!noyes(text[DeleteExtDescriptionQ])) { - remove(str); - f.misc&=~FM_EXTDESC; } + f.misc&=~FM_EXTDESC; } } if(!dir_op(dirnum)) { putfiledat(&cfg,&f); @@ -1227,7 +1226,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode) update_uldate(&cfg, &f); break; case 'F': /* delete file only */ - sprintf(str,"%s%s",dirpath,fname); + SAFEPRINTF2(str,"%s%s",dirpath,fname); if(!fexistcase(str)) bprintf(text[FileDoesNotExist],str); else { @@ -1246,7 +1245,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode) if(noyes(text[RemoveFileQ])) break; removefile(&f); - sprintf(str,"%s%s",dirpath,fname); + SAFEPRINTF2(str,"%s%s",dirpath,fname); if(fexistcase(str)) { if(dir_op(dirnum)) { if(!noyes(text[DeleteFileQ])) { @@ -1341,7 +1340,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode) break; } } else if(mode==FI_DOWNLOAD || mode==FI_USERXFER) { - sprintf(path,"%s%s",dirpath,fname); + SAFEPRINTF2(path,"%s%s",dirpath,fname); if(f.size<1L) { /* getfiledat will set this to -1 if non-existant */ SYNC; /* and 0 byte files shouldn't be d/led */ mnemonics(text[QuitOrNext]); @@ -1418,8 +1417,8 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode) lncntr=0; seqwait(cfg.dir[f.dir]->seqdev); bprintf(text[RetrievingFile],fname); - sprintf(str,"%s%s",dirpath,fname); - sprintf(path,"%s%s",cfg.temp_dir,fname); + SAFEPRINTF2(str,"%s%s",dirpath,fname); + SAFEPRINTF2(path,"%s%s",cfg.temp_dir,fname); mv(str,path,1); /* copy the file to temp dir */ if(getnodedat(cfg.node_num,&thisnode,true)==0) { thisnode.aux=0xf0; diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c index a55d1d66c61c6a2933b3f2eb2bba37da0f9acac8..ee0ecb55f86c5b35c9528dff1c344e4e17a96b55 100644 --- a/src/sbbs3/load_cfg.c +++ b/src/sbbs3/load_cfg.c @@ -326,32 +326,35 @@ void DLLCALL free_text(char* text[]) /****************************************************************************/ /* If the directory 'path' doesn't exist, create it. */ /****************************************************************************/ -BOOL md(char *inpath) +int md(const char* inpath) { char path[MAX_PATH+1]; + char* p; if(inpath[0]==0) - return(FALSE); + return EINVAL; SAFECOPY(path,inpath); /* Remove trailing '.' if present */ - if(path[strlen(path)-1]=='.') - path[strlen(path)-1]=0; + p = lastchar(path); + if(*p=='.') + *p = '\0'; /* Remove trailing slash if present */ - if(path[strlen(path)-1]=='\\' || path[strlen(path)-1]=='/') - path[strlen(path)-1]=0; + p = lastchar(path); + if(*p == '\\' || *p == '/') + *p = '\0'; if(!isdir(path)) { - /* lprintf("Creating directory: %s",path); */ - if(mkpath(path)) { - lprintf(LOG_WARNING,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), path); - return(FALSE); - } + if(mkpath(path) != 0) { + int result = errno; + if(!isdir(path)) // race condition: did another thread make the directory already? + return result; + } } - return(TRUE); + return 0; } /****************************************************************************/ diff --git a/src/sbbs3/load_cfg.vcxproj b/src/sbbs3/load_cfg.vcxproj index afb763fe2d9b19aaaf6eb39b0d103437e6a33660..ff742a99da8fdced5ccab36cb29a5f2ff0dc0e46 100644 --- a/src/sbbs3/load_cfg.vcxproj +++ b/src/sbbs3/load_cfg.vcxproj @@ -86,7 +86,7 @@ <SDLCheck>true</SDLCheck> <ConformanceMode>false</ConformanceMode> <PreprocessorDefinitions>SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> <Link> <SubSystem>Console</SubSystem> diff --git a/src/sbbs3/logon.cpp b/src/sbbs3/logon.cpp index 98fdbc9afc18f9f0dd8ce071be1cde34d7615187..ce7758cefae049179b9305aaac99d991fba69c9c 100644 --- a/src/sbbs3/logon.cpp +++ b/src/sbbs3/logon.cpp @@ -180,6 +180,10 @@ bool sbbs_t::logon() if(useron.misc&AUTOTERM) { useron.misc&=~(ANSI|RIP|PETSCII); useron.misc|=autoterm; + } else if((useron.misc&PETSCII) && (autoterm&ANSI)) { + // User manually-enabled PETSCII, but they're logging in with an ANSI (auto-detected) terminal + useron.misc &= ~PETSCII; + useron.misc |= (AUTOTERM | autoterm); } if(!chk_ar(cfg.shell[useron.shell]->ar,&useron,&client)) { @@ -244,7 +248,7 @@ bool sbbs_t::logon() if(cfg.sys_misc&SM_PWEDIT && yesno(text[NewPasswordQ])) while(online) { - bprintf(text[NewPasswordPromptFmt], MIN_PASS_LEN, LEN_PASS); + bprintf(text[NewPasswordPromptFmt], cfg.min_pwlen, LEN_PASS); getstr(str,LEN_PASS,K_UPPER|K_LINE|K_TRIM); truncsp(str); if(chkpass(str,&useron,true)) @@ -257,8 +261,11 @@ bool sbbs_t::logon() CRLF; bputs(text[VerifyPassword]); } - else + else { + if(!text[NewUserPasswordVerify][0]) + break; bputs(text[NewUserPasswordVerify]); + } console|=CON_R_ECHOX; getstr(tmp,LEN_PASS*2,K_UPPER); console&=~(CON_R_ECHOX|CON_L_ECHOX); @@ -460,8 +467,9 @@ bool sbbs_t::logon() bprintf(text[LiTimeonToday],useron.ttoday ,cfg.level_timeperday[useron.level]+useron.min); bprintf(text[LiMailWaiting],mailw); - bprintf("%s%s\r\n\r\n", text[LiSysopIs] + bprintf(text[LiSysopIs] , text[sysop_available(&cfg) ? LiSysopAvailable : LiSysopNotAvailable]); + newline(); } if(sys_status&SS_EVENT) diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 32548b53e62428ef51e4be15eeeb21fba65a848c..24fd1bd8bd2ad7195c7e6e4c28380c938c56a5c0 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -237,6 +237,11 @@ static BOOL winsock_startup(void) #endif +static char* server_host_name(void) +{ + return startup->host_name[0] ? startup->host_name : scfg.sys_inetaddr; +} + static void update_clients(void) { if(startup!=NULL && startup->clients!=NULL) @@ -1143,7 +1148,7 @@ static void pop3_thread(void* arg) srand((unsigned int)(time(NULL) ^ (time_t)GetCurrentThreadId())); /* seed random number generator */ rand(); /* throw-away first result */ safe_snprintf(challenge,sizeof(challenge),"<%x%x%lx%lx@%.128s>" - ,rand(),socket,(ulong)time(NULL),(ulong)clock(),startup->host_name); + ,rand(),socket,(ulong)time(NULL),(ulong)clock(), server_host_name()); sockprintf(socket,client.protocol,session,"+OK Synchronet %s Server %s-%s Ready %s" ,client.protocol, revision,PLATFORM_DESC,challenge); @@ -2231,7 +2236,7 @@ js_mailproc(SOCKET sock, client_t* client, user_t* user, struct mailproc* mailpr if(*js_glob==NULL) { /* Global Objects (including system, js, client, Socket, MsgBase, File, User, etc. */ if(!js_CreateCommonObjects(*js_cx, &scfg, &scfg, NULL - ,uptime, startup->host_name, SOCKLIB_DESC /* system */ + ,uptime, server_host_name(), SOCKLIB_DESC /* system */ ,&js_callback /* js */ ,&startup->js ,client, sock, -1 /* client */ @@ -3181,7 +3186,7 @@ static void smtp_thread(void* arg) /* SMTP session active: */ sockprintf(socket,client.protocol,session,"220 %s Synchronet %s Server %s-%s Ready" - ,startup->host_name, client.protocol, revision, PLATFORM_DESC); + ,server_host_name(), client.protocol, revision, PLATFORM_DESC); while(1) { rd = sockreadline(socket, client.protocol, session, buf, sizeof(buf)); if(rd<0) @@ -3712,7 +3717,7 @@ static void smtp_thread(void* arg) smb_hfield_str(&msg, RECIPIENT, rcpt_name); smb.subnum=subnum; - if((i=savemsg(&scfg, &smb, &msg, &client, startup->host_name, msgbuf, /* remsg: */NULL))!=SMB_SUCCESS) { + if((i=savemsg(&scfg, &smb, &msg, &client, server_host_name(), msgbuf, /* remsg: */NULL))!=SMB_SUCCESS) { lprintf(LOG_WARNING,"%04d %s !ERROR %d (%s) posting message to %s (%s)" ,socket, client.protocol, i, smb.last_error, scfg.sub[subnum]->sname, smb.file); sockprintf(socket,client.protocol,session, "452 ERROR %d (%s) posting message" @@ -3818,7 +3823,7 @@ static void smtp_thread(void* arg) /* E-mail */ smb.subnum=INVALID_SUB; /* creates message data, but no header or index records (since msg.to==NULL) */ - i=savemsg(&scfg, &smb, &msg, &client, startup->host_name, msgbuf, /* remsg: */NULL); + i=savemsg(&scfg, &smb, &msg, &client, server_host_name(), msgbuf, /* remsg: */NULL); if(smb_countattachments(&smb, &msg, msgbuf) > 0) msg.hdr.auxattr |= MSG_MIMEATTACH; msg.hdr.netattr |= MSG_KILLSENT; @@ -3877,7 +3882,7 @@ static void smtp_thread(void* arg) ,host_name,hello_name ,smtp.client_addr.addr.sa_family==AF_INET6?"IPv6: ":"" ,host_ip - ,startup->host_name + ,server_host_name() ,server_addr.addr.sa_family==AF_INET6?"IPv6: ":"" ,server_ip ,server_name @@ -4068,7 +4073,7 @@ static void smtp_thread(void* arg) p=buf+4; SKIP_WHITESPACE(p); SAFECOPY(hello_name,p); - sockprintf(socket,client.protocol,session,"250 %s",startup->host_name); + sockprintf(socket,client.protocol,session,"250 %s",server_host_name()); esmtp=FALSE; state=SMTP_STATE_HELO; cmd=SMTP_CMD_NONE; @@ -4080,7 +4085,7 @@ static void smtp_thread(void* arg) p=buf+4; SKIP_WHITESPACE(p); SAFECOPY(hello_name,p); - sockprintf(socket,client.protocol,session,"250-%s",startup->host_name); + sockprintf(socket,client.protocol,session,"250-%s",server_host_name()); sockprintf(socket,client.protocol,session,"250-AUTH PLAIN LOGIN CRAM-MD5"); sockprintf(socket,client.protocol,session,"250-SEND"); sockprintf(socket,client.protocol,session,"250-SOML"); @@ -4209,7 +4214,7 @@ static void smtp_thread(void* arg) } if(!stricmp(buf,"AUTH CRAM-MD5")) { safe_snprintf(challenge,sizeof(challenge),"<%x%x%lx%lx@%s>" - ,rand(),socket,(ulong)time(NULL),(ulong)clock(),startup->host_name); + ,rand(),socket,(ulong)time(NULL),(ulong)clock(),server_host_name()); #if 0 lprintf(LOG_DEBUG,"%04d SMTP CRAM-MD5 challenge: %s" ,socket,challenge); @@ -4300,7 +4305,7 @@ static void smtp_thread(void* arg) continue; } if(!stricmp(buf,"QUIT")) { - sockprintf(socket,client.protocol,session,"221 %s Service closing transmission channel",startup->host_name); + sockprintf(socket,client.protocol,session,"221 %s Service closing transmission channel",server_host_name()); break; } if(!stricmp(buf,"NOOP")) { @@ -5104,7 +5109,7 @@ BOOL bounce(SOCKET sock, smb_t* smb, smbmsg_t* msg, char* err, BOOL immediate) else attempts[0]=0; SAFEPRINTF2(str,"%s reporting delivery failure of message %s" - ,startup->host_name, attempts); + ,server_host_name(), attempts); smb_hfield_str(&newmsg, SMB_COMMENT, str); SAFEPRINTF2(str,"from %s to %s\r\n" ,msg->from @@ -5294,7 +5299,7 @@ static SOCKET sendmail_negotiate(CRYPT_SESSION *session, smb_t *smb, smbmsg_t *m return INVALID_SOCKET; } - sockprintf(sock, "SEND", *session,"EHLO %s",startup->host_name); + sockprintf(sock, "SEND", *session,"EHLO %s",server_host_name()); switch (sockgetrsp_opt(sock, "SEND", *session,"250", "STARTTLS", buf, sizeof(buf))) { case -1: if(startup->options&MAIL_OPT_RELAY_TX @@ -5305,7 +5310,7 @@ static SOCKET sendmail_negotiate(CRYPT_SESSION *session, smb_t *smb, smbmsg_t *m mail_close_socket(&sock, session); return INVALID_SOCKET; } - sockprintf(sock, "SEND", *session,"HELO %s",startup->host_name); + sockprintf(sock, "SEND", *session,"HELO %s",server_host_name()); if(!sockgetrsp(sock, "SEND", *session,"250",buf,sizeof(buf))) { SAFEPRINTF3(err,badrsp_err,server,buf,"250"); remove_msg_intransit(smb,msg); @@ -5371,7 +5376,7 @@ static SOCKET sendmail_negotiate(CRYPT_SESSION *session, smb_t *smb, smbmsg_t *m continue; } } - sockprintf(sock,prot,*session,"EHLO %s",startup->host_name); + sockprintf(sock,prot,*session,"EHLO %s",server_host_name()); if(!sockgetrsp(sock, prot, *session,"250",buf,sizeof(buf))) { SAFEPRINTF3(err,badrsp_err,server,buf,"220"); lprintf(LOG_INFO, "%04d SEND/TLS %s", sock, err); @@ -5862,7 +5867,6 @@ static void cleanup(int code) } lprintf(LOG_INFO, "0000 Done waiting for child threads to terminate"); } - free_cfg(&scfg); semfile_list_free(&recycle_semfiles); @@ -5894,7 +5898,6 @@ static void cleanup(int code) if(WSAInitialized && WSACleanup()!=0) lprintf(LOG_ERR,"0000 !WSACleanup ERROR %d",ERROR_VALUE); #endif - thread_down(); status("Down"); if(terminate_server || code) { @@ -6011,6 +6014,8 @@ void DLLCALL mail_server(void* arg) protected_uint32_init(&thread_count, 0); do { + protected_uint32_init(&active_clients, 0); + /* Setup intelligent defaults */ if(startup->relay_port==0) startup->relay_port=IPPORT_SMTP; if(startup->submission_port==0) startup->submission_port=IPPORT_SUBMISSION; @@ -6079,13 +6084,12 @@ void DLLCALL mail_server(void* arg) else SAFECOPY(scfg.temp_dir,"../temp"); prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); - MKDIR(scfg.temp_dir); - lprintf(LOG_DEBUG,"Temporary file directory: %s", scfg.temp_dir); - if(!isdir(scfg.temp_dir)) { - lprintf(LOG_CRIT,"!Invalid temp directory: %s", scfg.temp_dir); + if((i = md(scfg.temp_dir)) != 0) { + lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", i, strerror(i), scfg.temp_dir); cleanup(1); return; } + lprintf(LOG_DEBUG,"Temporary file directory: %s", scfg.temp_dir); /* Parse the mailproc[.host].ini */ mailproc_list=NULL; @@ -6128,9 +6132,6 @@ void DLLCALL mail_server(void* arg) iniCloseFile(fp); } - if(startup->host_name[0]==0) - SAFECOPY(startup->host_name,scfg.sys_inetaddr); - if((t=checktime())!=0) { /* Check binary time */ lprintf(LOG_ERR,"!TIME PROBLEM (%ld)",t); } @@ -6148,7 +6149,6 @@ void DLLCALL mail_server(void* arg) lprintf(LOG_DEBUG,"Maximum inactivity: %u seconds",startup->max_inactivity); - protected_uint32_init(&active_clients, 0); update_clients(); /* open a socket and wait for a client */ diff --git a/src/sbbs3/mailsrvr.vcxproj b/src/sbbs3/mailsrvr.vcxproj index 348a1fd9f07bc6028541dcee0c430fd873e62df4..efe827a7028fe7a7a5455468371cf0f7df60147b 100644 --- a/src/sbbs3/mailsrvr.vcxproj +++ b/src/sbbs3/mailsrvr.vcxproj @@ -132,7 +132,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;MAILSRVR_EXPORTS;SMB_IMPORTS;MD5_IMPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\mailsrvr/mailsrvr.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\mailsrvr/</AssemblerListingLocation> diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 7daab4f0bd2d33c4206c6a1a93dfd6df8b0947db..c0502bb5f0a154552777d41059a6b2bc6ce9bcde 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -1284,7 +1284,7 @@ JSContext* sbbs_t::js_init(JSRuntime** runtime, JSObject** glob, const char* des /* Global Objects (including system, js, client, Socket, MsgBase, File, User, etc. */ if(!js_CreateCommonObjects(js_cx, &scfg, &cfg, js_global_functions - ,uptime, startup->host_name, SOCKLIB_DESC /* system */ + ,uptime, server_host_name(), SOCKLIB_DESC /* system */ ,&js_callback /* js */ ,&startup->js ,&client, client_socket, -1 /* client */ @@ -1768,14 +1768,14 @@ void sbbs_t::send_telnet_cmd(uchar cmd, uchar opt) lprintf(LOG_DEBUG,"sending telnet cmd: %s" ,telnet_cmd_desc(cmd)); sprintf(buf,"%c%c",TELNET_IAC,cmd); - putcom(buf,2); + sendsocket(client_socket, buf, 2); } else { if(startup->options&BBS_OPT_DEBUG_TELNET) lprintf(LOG_DEBUG,"sending telnet cmd: %s %s" ,telnet_cmd_desc(cmd) ,telnet_opt_desc(opt)); sprintf(buf,"%c%c%c",TELNET_IAC,cmd,opt); - putcom(buf,3); + sendsocket(client_socket, buf, 3); } } @@ -2785,7 +2785,7 @@ void event_thread(void* arg) sbbs->online=FALSE; } } - close(userfile); + closeuserdat(userfile); lastprepack=(time32_t)now; SAFEPRINTF(str,"%stime.dab",sbbs->cfg.ctrl_dir); if((file=sbbs->nopen(str,O_WRONLY))==-1) { @@ -3077,7 +3077,7 @@ void event_thread(void* arg) && (now_tm.tm_hour*60)+now_tm.tm_min>=sbbs->cfg.event[i]->time && (now_tm.tm_mday!=tm.tm_mday || now_tm.tm_mon!=tm.tm_mon))) && sbbs->cfg.event[i]->days&(1<<now_tm.tm_wday) - && (sbbs->cfg.event[i]->mdays==0 + && (sbbs->cfg.event[i]->mdays < 2 || sbbs->cfg.event[i]->mdays&(1<<now_tm.tm_mday)) && (sbbs->cfg.event[i]->months==0 || sbbs->cfg.event[i]->months&(1<<now_tm.tm_mon)))) @@ -3312,7 +3312,8 @@ sbbs_t::sbbs_t(ushort node_num, union xp_sockaddr *addr, size_t addr_len, const else SAFECOPY(cfg.temp_dir,"../temp"); prep_dir(cfg.ctrl_dir, cfg.temp_dir, sizeof(cfg.temp_dir)); - md(cfg.temp_dir); + if((i = md(cfg.temp_dir)) != 0) + lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", i, strerror(i), cfg.temp_dir); if(sd==INVALID_SOCKET) { /* events thread */ if(startup->first_node==1) SAFEPRINTF(path,"%sevent",cfg.temp_dir); @@ -3482,8 +3483,6 @@ sbbs_t::sbbs_t(ushort node_num, union xp_sockaddr *addr, size_t addr_len, const /* used by update_qwkroute(): */ qwknode=NULL; total_qwknodes=0; - - spymsg("Connected"); } //**************************************************************************** @@ -3532,7 +3531,7 @@ bool sbbs_t::init() inet_addrtop(&client_addr, client_ipaddr, sizeof(client_ipaddr)); lprintf(LOG_INFO,"socket %u attached to local interface %s port %u" ,client_socket, local_addr, inet_addrport(&addr)); - + spymsg("Connected"); } if((comspec=os_cmdshell())==NULL) { @@ -3540,7 +3539,10 @@ bool sbbs_t::init() return(false); } - md(cfg.temp_dir); + if((i = md(cfg.temp_dir)) != 0) { + lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", i, strerror(i), cfg.temp_dir); + return false; + } /* Shared NODE files */ SAFEPRINTF2(str,"%s%s",cfg.ctrl_dir,"node.dab"); @@ -4820,7 +4822,7 @@ void sbbs_t::daily_maint(void) putuserrec(&cfg,user.number,U_MISC,8,ultoa(user.misc|DELETED,str,16)); } } - close(userfile); + closeuserdat(userfile); lputs(LOG_INFO,"DAILY: Purging deleted/expired e-mail"); SAFEPRINTF(smb.file,"%smail",cfg.data_dir); @@ -5095,9 +5097,6 @@ void DLLCALL bbs_thread(void* arg) return; } - if(startup->host_name[0]==0) - SAFECOPY(startup->host_name,scfg.sys_inetaddr); - if((t=checktime())!=0) { /* Check binary time */ lprintf(LOG_ERR,"!TIME PROBLEM (%ld)",t); } @@ -5122,8 +5121,14 @@ void DLLCALL bbs_thread(void* arg) /* Create missing node directories and dsts.dab files */ lprintf(LOG_INFO,"Verifying/creating node directories"); for(i=0;i<=scfg.sys_nodes;i++) { - if(i) - md(scfg.node_path[i-1]); + if(i) { + int err; + if((err = md(scfg.node_path[i-1])) != 0) { + lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", err, strerror(err), scfg.node_path[i-1]); + cleanup(1); + return; + } + } SAFEPRINTF(str,"%sdsts.dab",i ? scfg.node_path[i-1] : scfg.ctrl_dir); if(flength(str)<DSTSDABLEN) { if((file=sopen(str,O_WRONLY|O_CREAT|O_APPEND, SH_DENYNO, DEFFILEMODE))==-1) { @@ -5833,7 +5838,7 @@ NO_SSH: new_node->client_socket_dup=accept(tmp_sock, (struct sockaddr *)&tmp_addr, &tmp_addr_len); if(new_node->client_socket_dup == INVALID_SOCKET) { - lprintf(LOG_ERR,"Node %d !ERROR (%d) connecting accept()ing on passthru socket" + lprintf(LOG_ERR,"Node %d !ERROR (%d) accepting on passthru socket" ,new_node->cfg.node_num, ERROR_VALUE); lprintf(LOG_WARNING,"Node %d !WARNING native doors which use sockets will not function" ,new_node->cfg.node_num); diff --git a/src/sbbs3/makeuser.vcxproj b/src/sbbs3/makeuser.vcxproj index e80dbdce8ca3303bfdb991e8b9cdcd2b587e26d8..8588ea262e1b9ea1d0cff24bc6720b536642f2ac 100644 --- a/src/sbbs3/makeuser.vcxproj +++ b/src/sbbs3/makeuser.vcxproj @@ -112,7 +112,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\makeuser/makeuser.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\makeuser/</AssemblerListingLocation> diff --git a/src/sbbs3/netmail.cpp b/src/sbbs3/netmail.cpp index 73cdfeeb873c1f75863cc968ad25cf8a7a80f6f9..5e6f206c2c18d3f81bd46fb9d68bed507d565a52 100644 --- a/src/sbbs3/netmail.cpp +++ b/src/sbbs3/netmail.cpp @@ -204,7 +204,7 @@ bool sbbs_t::netmail(const char *into, const char *title, long mode, smb_t* resm SAFECOPY(tmp, cfg.data_dir); if(tmp[0]=='.') /* Relative path */ sprintf(tmp,"%s%s", cfg.node_dir, cfg.data_dir); - sprintf(str,"%sfile/%04u.out/%s",tmp,useron.number,fname); + SAFEPRINTF3(str,"%sfile/%04u.out/%s",tmp,useron.number,fname); SAFECOPY(subj, str); if(fexistcase(str)) { bputs(text[FileAlreadyThere]); @@ -311,7 +311,7 @@ bool sbbs_t::netmail(const char *into, const char *title, long mode, smb_t* resm smb_t smb; memset(&smb, 0, sizeof(smb)); smb.subnum = INVALID_SUB; - int result = savemsg(&cfg, &smb, &msg, &client, startup->host_name, buf, remsg); + int result = savemsg(&cfg, &smb, &msg, &client, server_host_name(), buf, remsg); free(buf); smb_close(&smb); smb_freemsgmem(&msg); @@ -1120,13 +1120,13 @@ bool sbbs_t::inetmail(const char *into, const char *subj, long mode, smb_t* resm /* Security logging */ msg_client_hfields(&msg,&client); - smb_hfield_str(&msg,SENDERSERVER,startup->host_name); + smb_hfield_str(&msg,SENDERSERVER, server_host_name()); smb_hfield_str(&msg,SUBJECT,title); editor_info_to_msg(&msg, editor, charset); - i = savemsg(&cfg, &smb, &msg, &client, startup->host_name, msgbuf, remsg); + i = savemsg(&cfg, &smb, &msg, &client, server_host_name(), msgbuf, remsg); free(msgbuf); if(i!=SMB_SUCCESS) { @@ -1396,7 +1396,7 @@ bool sbbs_t::qnetmail(const char *into, const char *subj, long mode, smb_t* resm /* Security logging */ msg_client_hfields(&msg,&client); - smb_hfield_str(&msg,SENDERSERVER,startup->host_name); + smb_hfield_str(&msg,SENDERSERVER, server_host_name()); smb_hfield_str(&msg,SUBJECT,title); @@ -1423,8 +1423,30 @@ bool sbbs_t::qnetmail(const char *into, const char *subj, long mode, smb_t* resm useron.etoday++; putuserrec(&cfg,useron.number,U_ETODAY,5,ultoa(useron.etoday,tmp,10)); - sprintf(str,"sent QWK NetMail to %s (%s)" + SAFEPRINTF2(str,"sent QWK NetMail to %s (%s)" ,to,fulladdr); logline("EN",str); return(true); } + +extern "C" BOOL is_supported_netmail_addr(scfg_t* cfg, const char* addr) +{ + switch (smb_netaddr_type(addr)) { + case NET_FIDO: + return INT_TO_BOOL(cfg->total_faddrs && (cfg->netmail_misc&NMAIL_ALLOW)); + case NET_INTERNET: + return INT_TO_BOOL(cfg->inetmail_misc&NMAIL_ALLOW); + case NET_QWK: + { + char fulladdr[256] = ""; + const char* p = strchr(addr, '@'); + if(p == NULL) + return FALSE; + qwk_route(cfg, p + 1, fulladdr, sizeof(fulladdr)-1); + return fulladdr[0] != 0; + } + default: + return FALSE; + } + return FALSE; +} diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp index 8e76aff71f47b260c70fb240763c6c8f60508f01..4ba192868020d3e64e9305dbdaad98532b9dcfd8 100644 --- a/src/sbbs3/newuser.cpp +++ b/src/sbbs3/newuser.cpp @@ -152,7 +152,26 @@ BOOL sbbs_t::newuser() } else useron.misc&=~AUTOTERM; - if(!(useron.misc&AUTOTERM)) { + while(text[HitYourBackspaceKey][0] && !(useron.misc&(PETSCII|SWAP_DELETE)) && online) { + bputs(text[HitYourBackspaceKey]); + uchar key = getkey(K_NONE); + bprintf(text[CharacterReceivedFmt], key, key); + if(key == '\b') + break; + if(key == DEL) { + if(text[SwapDeleteKeyQ][0] == 0 || yesno(text[SwapDeleteKeyQ])) + useron.misc |= SWAP_DELETE; + } + else if(key == PETSCII_DELETE) + useron.misc |= (PETSCII|COLOR); + else { + bprintf(text[InvalidBackspaceKeyFmt], key, key); + if(text[ContinueQ][0] && !yesno(text[ContinueQ])) + return FALSE; + } + } + + if(!(useron.misc&(AUTOTERM|PETSCII))) { if(text[AnsiTerminalQ][0] && yesno(text[AnsiTerminalQ])) useron.misc|=ANSI; else @@ -173,25 +192,6 @@ BOOL sbbs_t::newuser() else useron.rows = TERM_ROWS_DEFAULT; - while(text[HitYourBackspaceKey][0] && !(useron.misc&(PETSCII|SWAP_DELETE)) && online) { - bputs(text[HitYourBackspaceKey]); - uchar key = getkey(K_NONE); - bprintf(text[CharacterReceivedFmt], key, key); - if(key == '\b') - break; - if(key == DEL) { - if(text[SwapDeleteKeyQ][0] == 0 || yesno(text[SwapDeleteKeyQ])) - useron.misc |= SWAP_DELETE; - } - else if(key == PETSCII_DELETE) - useron.misc |= (AUTOTERM|PETSCII|COLOR); - else { - bprintf(text[InvalidBackspaceKeyFmt], key, key); - if(text[ContinueQ][0] && !yesno(text[ContinueQ])) - return FALSE; - } - } - if(useron.misc&PETSCII) { autoterm |= PETSCII; outcom(PETSCII_UPPERLOWER); @@ -328,10 +328,10 @@ BOOL sbbs_t::newuser() && !trashcan(useron.netmail,"email")) break; } - if(useron.netmail[0] && cfg.sys_misc&SM_FWDTONET && text[ForwardMailQ][0] && yesno(text[ForwardMailQ])) + useron.misc&=~NETMAIL; + if((cfg.sys_misc&SM_FWDTONET) && is_supported_netmail_addr(&cfg, useron.netmail) && yesno(text[ForwardMailQ])) useron.misc|=NETMAIL; - else - useron.misc&=~NETMAIL; + if(text[UserInfoCorrectQ][0]==0 || yesno(text[UserInfoCorrectQ])) break; } @@ -386,7 +386,7 @@ BOOL sbbs_t::newuser() if(cfg.sys_misc&SM_PWEDIT && text[NewPasswordQ][0] && yesno(text[NewPasswordQ])) while(online) { - bprintf(text[NewPasswordPromptFmt], MIN_PASS_LEN, LEN_PASS); + bprintf(text[NewPasswordPromptFmt], cfg.min_pwlen, LEN_PASS); getstr(str,LEN_PASS,K_UPPER|K_LINE|K_TRIM); truncsp(str); if(chkpass(str,&useron,true)) { @@ -399,7 +399,7 @@ BOOL sbbs_t::newuser() } c=0; - while(online) { + while(online && text[NewUserPasswordVerify][0]) { bputs(text[NewUserPasswordVerify]); console|=CON_R_ECHOX; str[0]=0; diff --git a/src/sbbs3/node.c b/src/sbbs3/node.c index b95966641fb7932340d862f887d51372e4304b2b..e23fd52e8c13a750236970bb0e4c673d54510ca2 100644 --- a/src/sbbs3/node.c +++ b/src/sbbs3/node.c @@ -438,6 +438,8 @@ void printnodedat(int number, node_t node) putchar('D'); if(node.misc&NODE_LCHAT) putchar('C'); + if(node.misc&NODE_FCHAT) + putchar('F'); putchar(']'); } if(node.errors) printf(" %d error%c",node.errors, node.errors>1 ? 's' : '\0' ); diff --git a/src/sbbs3/node.vcxproj b/src/sbbs3/node.vcxproj index 13d20e7fcb0991826c62d8e645b4f87ec98e30fe..3622197890b08c150ac88da974ab8a3640b41b48 100644 --- a/src/sbbs3/node.vcxproj +++ b/src/sbbs3/node.vcxproj @@ -69,7 +69,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\node/node.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\node/</AssemblerListingLocation> diff --git a/src/sbbs3/nodedefs.h b/src/sbbs3/nodedefs.h index b6fc735d54f9a5f41896916ef25e3a8d146b39d8..7e3a8292521070403b15586a6b9ec6d9f10e3322 100644 --- a/src/sbbs3/nodedefs.h +++ b/src/sbbs3/nodedefs.h @@ -76,6 +76,7 @@ enum node_status { /* Node Status */ #define NODE_NMSG (1<<11) /* Node message waiting (new way) */ #define NODE_EXT (1<<12) /* Extended info on node action */ #define NODE_LCHAT (1<<13) /* Being pulled into local chat */ +#define NODE_FCHAT (1<<14) /* Being forced into private chat */ enum node_action { /* Node Action */ NODE_MAIN /* Main Prompt */ diff --git a/src/sbbs3/nopen.c b/src/sbbs3/nopen.c index cbeb653e2001a839f33d4b417222726108e4cb18..b712188b0e47c34fafca30465c42eb2363445403 100644 --- a/src/sbbs3/nopen.c +++ b/src/sbbs3/nopen.c @@ -148,38 +148,6 @@ BOOL fmutex(const char* fname, const char* text, long max_age) return TRUE; } -BOOL fcopy(const char* src, const char* dest) -{ - int ch; - ulong count=0; - FILE* in; - FILE* out; - BOOL success=TRUE; - - if((in=fopen(src,"rb"))==NULL) - return FALSE; - if((out=fopen(dest,"wb"))==NULL) { - fclose(in); - return FALSE; - } - - while(!feof(in)) { - if((ch=fgetc(in))==EOF) - break; - if(fputc(ch,out)==EOF) { - success=FALSE; - break; - } - if(((count++)%(32*1024))==0) - MAYBE_YIELD(); - } - - fclose(in); - fclose(out); - - return(success); -} - BOOL fcompare(const char* fn1, const char* fn2) { FILE* fp1; @@ -240,7 +208,7 @@ BOOL backup(const char *fname, int backup_level, BOOL ren) /* preserve the original time stamp */ ut.modtime = fdate(fname); - if(!fcopy(fname,newname)) + if(!CopyFile(fname, newname, /* failIfExists: */FALSE)) return FALSE; ut.actime = time(NULL); diff --git a/src/sbbs3/nopen.h b/src/sbbs3/nopen.h index d9769d0988e01bd889cf32304fe051cc7d11b18e..c03f8e6af91c1e4c7adb60b3a93f5ac6918f4fad 100644 --- a/src/sbbs3/nopen.h +++ b/src/sbbs3/nopen.h @@ -47,7 +47,6 @@ int nopen(const char* str, int access); FILE * fnopen(int* file, const char* str, int access); BOOL ftouch(const char* fname); BOOL fmutex(const char* fname, const char* text, long max_age); -BOOL fcopy(const char* src, const char* dest); BOOL fcompare(const char* fn1, const char* fn2); BOOL backup(const char* org, int backup_level, BOOL ren); diff --git a/src/sbbs3/ntsvcs.vcxproj b/src/sbbs3/ntsvcs.vcxproj index 6ce9bf2c6d779883dd4ca74615678f0e0cdbfaa6..2bf877f9fa98ea505a946bc16402ac23524782a4 100644 --- a/src/sbbs3/ntsvcs.vcxproj +++ b/src/sbbs3/ntsvcs.vcxproj @@ -118,7 +118,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBSNTSVCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\ntsvcs/ntsvcs.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\ntsvcs/</AssemblerListingLocation> diff --git a/src/sbbs3/postmsg.cpp b/src/sbbs3/postmsg.cpp index c1d30f6f603bafcb858ab5395b027a558e2b42fb..c4899b75bc5ff4f09af0c9a33e146dbab6649fa6 100644 --- a/src/sbbs3/postmsg.cpp +++ b/src/sbbs3/postmsg.cpp @@ -297,7 +297,7 @@ bool sbbs_t::postmsg(uint subnum, long wm_mode, smb_t* resmb, smbmsg_t* remsg) /* Security logging */ msg_client_hfields(&msg,&client); - smb_hfield_str(&msg,SENDERSERVER,startup->host_name); + smb_hfield_str(&msg,SENDERSERVER, server_host_name()); smb_hfield_str(&msg,SUBJECT,title); diff --git a/src/sbbs3/putmsg.cpp b/src/sbbs3/putmsg.cpp index b0cad61d0b4911a1702f3795aa39f8498b47528a..ad8c67cb08835473f35fb054cdfa74821ff0e69f 100644 --- a/src/sbbs3/putmsg.cpp +++ b/src/sbbs3/putmsg.cpp @@ -53,7 +53,6 @@ char sbbs_t::putmsg(const char *buf, long mode, long org_cols, JSObject* obj) { uint tmpatr; - uchar exatr=0; ulong orgcon=console; ulong sys_status_sav=sys_status; enum output_rate output_rate = cur_output_rate; @@ -64,7 +63,7 @@ char sbbs_t::putmsg(const char *buf, long mode, long org_cols, JSObject* obj) attr(LIGHTGRAY); if(mode&P_NOPAUSE) sys_status|=SS_PAUSEOFF; - + char ret = putmsgfrag(buf, &mode, org_cols, obj); if(!(mode&P_SAVEATR)) { console=orgcon; diff --git a/src/sbbs3/qwknodes.c b/src/sbbs3/qwknodes.c index 46c1e976b82cf4987091942b4fd1802d8d6eee75..de128146e4a94ded3aa192c0b01d6f21c80be4d2 100644 --- a/src/sbbs3/qwknodes.c +++ b/src/sbbs3/qwknodes.c @@ -340,7 +340,7 @@ int main(int argc, char **argv) p=addr; else *(p++)=0; - sprintf(str,"%s %s:%s%c%s" + safe_snprintf(str, sizeof(str), "%s %s:%s%c%s" ,unixtodstr(&cfg,msg.hdr.when_written.time,tmp) ,p,cfg.sys_id,p==addr ? 0 : '/' ,addr); diff --git a/src/sbbs3/qwknodes.vcxproj b/src/sbbs3/qwknodes.vcxproj index f366337b5fe08c287b776dfb17f4a853870d7a80..3cc65b5fc5f31ab4326f63d3befd8489f076b894 100644 --- a/src/sbbs3/qwknodes.vcxproj +++ b/src/sbbs3/qwknodes.vcxproj @@ -71,7 +71,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\qwknodes/qwknodes.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\qwknodes/</AssemblerListingLocation> diff --git a/src/sbbs3/readmsgs.cpp b/src/sbbs3/readmsgs.cpp index 726e06298180605b5479cbc02529a664b3ad229b..4fcf265ec2a1267c733f6deb354161f2d2768f9d 100644 --- a/src/sbbs3/readmsgs.cpp +++ b/src/sbbs3/readmsgs.cpp @@ -1163,7 +1163,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find) /* Security logging */ msg_client_hfields(&vote, &client); - smb_hfield_str(&vote, SENDERSERVER, startup->host_name); + smb_hfield_str(&vote, SENDERSERVER, server_host_name()); if((i=votemsg(&cfg, &smb, &vote, notice, text[VoteNoticeFmt])) != SMB_SUCCESS) errormsg(WHERE,ERR_WRITE,smb.file,i,smb.last_error); diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index d5cc3fcea33176da8866ca45f9c90cb7227213a7..31ff5d28d297fb430d7ae800267562b52086b339 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -643,6 +643,7 @@ public: bool gettimeleft_inside; /* str.cpp */ + char* server_host_name(void); char* timestr(time_t); char* datestr(time_t); char timestr_output[60]; @@ -926,7 +927,7 @@ public: void localguru(char *guru, int gurunum); bool sysop_page(void); bool guru_page(void); - void privchat(bool local=false); + void privchat(bool forced=false, int node_num=0); bool chan_access(uint cnum); int getnodetopage(int all, int telegram); @@ -1258,6 +1259,7 @@ extern "C" { DLLEXPORT void DLLCALL free_text(char* text[]); DLLEXPORT ushort DLLCALL sys_timezone(scfg_t* cfg); DLLEXPORT char * DLLCALL prep_dir(const char* base, char* dir, size_t buflen); + DLLEXPORT int DLLCALL md(const char *path); /* scfgsave.c */ DLLEXPORT BOOL DLLCALL save_cfg(scfg_t* cfg, int backup_level); @@ -1293,6 +1295,9 @@ extern "C" { /* qwk.cpp */ DLLEXPORT int qwk_route(scfg_t*, const char *inaddr, char *fulladdr, size_t maxlen); + /* netmail.cpp */ + DLLEXPORT BOOL is_supported_netmail_addr(scfg_t*, const char* addr); + /* con_out.cpp */ unsigned char cp437_to_petscii(unsigned char); @@ -1498,7 +1503,6 @@ int pstrcmp(const char **str1, const char **str2); /* Compares pointers to poi int strsame(const char *str1, const char *str2); /* Compares number of same chars */ /* load_cfg.c */ -BOOL md(char *path); char* prep_code(char *str, const char* prefix); #ifdef SBBS /* These aren't exported */ diff --git a/src/sbbs3/sbbs.vcxproj b/src/sbbs3/sbbs.vcxproj index 9f934f808b6b49f6e24888fcc828d8d8b216d072..e2f04731b4d8d16f830318bcecaaf25e379b4b9f 100644 --- a/src/sbbs3/sbbs.vcxproj +++ b/src/sbbs3/sbbs.vcxproj @@ -131,7 +131,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;SBBS;SBBS_EXPORTS;SMB_EXPORTS;RINGBUF_SEM;RINGBUF_MUTEX;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\sbbs/sbbs.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\sbbs/</AssemblerListingLocation> diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c index 8dba45eaabbb3b49a8f1014e7ba59aa68d274663..c603e9f9331dbaad4c37f82342695a75ad972700 100644 --- a/src/sbbs3/sbbscon.c +++ b/src/sbbs3/sbbscon.c @@ -713,7 +713,7 @@ static int bbs_lputs(void* p, int level, const char *str) ,tm.tm_mon+1,tm.tm_mday ,tm.tm_hour,tm.tm_min,tm.tm_sec); - sprintf(logline,"%sterm %.*s",tstr,(int)sizeof(logline)-32,str); + sprintf(logline,"%sterm %.*s",tstr,(int)sizeof(logline)-70,str); truncsp(logline); lputs(level,logline); @@ -778,7 +778,7 @@ static int stat_lputs(void* p, int level, const char *str) ,tm.tm_mon+1,tm.tm_mday ,tm.tm_hour,tm.tm_min,tm.tm_sec); - sprintf(logline,"%sstat %.*s",tstr,(int)sizeof(logline)-32,str); + sprintf(logline,"%sstat %.*s",tstr,(int)sizeof(logline)-70,str); truncsp(logline); lputs(level,logline); @@ -845,7 +845,7 @@ static int ftp_lputs(void* p, int level, const char *str) ,tm.tm_mon+1,tm.tm_mday ,tm.tm_hour,tm.tm_min,tm.tm_sec); - sprintf(logline,"%sftp %.*s",tstr,(int)sizeof(logline)-32,str); + sprintf(logline,"%sftp %.*s",tstr,(int)sizeof(logline)-70,str); truncsp(logline); lputs(level,logline); @@ -911,7 +911,7 @@ static int mail_lputs(void* p, int level, const char *str) ,tm.tm_mon+1,tm.tm_mday ,tm.tm_hour,tm.tm_min,tm.tm_sec); - sprintf(logline,"%smail %.*s",tstr,(int)sizeof(logline)-32,str); + sprintf(logline,"%smail %.*s",tstr,(int)sizeof(logline)-70,str); truncsp(logline); lputs(level,logline); @@ -977,7 +977,7 @@ static int services_lputs(void* p, int level, const char *str) ,tm.tm_mon+1,tm.tm_mday ,tm.tm_hour,tm.tm_min,tm.tm_sec); - sprintf(logline,"%ssrvc %.*s",tstr,(int)sizeof(logline)-32,str); + sprintf(logline,"%ssrvc %.*s",tstr,(int)sizeof(logline)-70,str); truncsp(logline); lputs(level,logline); @@ -1043,7 +1043,7 @@ static int event_lputs(void* p, int level, const char *str) ,tm.tm_mon+1,tm.tm_mday ,tm.tm_hour,tm.tm_min,tm.tm_sec); - sprintf(logline,"%sevnt %.*s",tstr,(int)sizeof(logline)-32,str); + sprintf(logline,"%sevnt %.*s",tstr,(int)sizeof(logline)-70,str); truncsp(logline); lputs(level,logline); @@ -1085,7 +1085,7 @@ static int web_lputs(void* p, int level, const char *str) ,tm.tm_mon+1,tm.tm_mday ,tm.tm_hour,tm.tm_min,tm.tm_sec); - sprintf(logline,"%sweb %.*s",tstr,(int)sizeof(logline)-32,str); + sprintf(logline,"%sweb %.*s",tstr,(int)sizeof(logline)-70,str); truncsp(logline); lputs(level,logline); diff --git a/src/sbbs3/sbbscon.vcxproj b/src/sbbs3/sbbscon.vcxproj index 6ceaf3842e1c6060775f3204202fe9b068ed5b85..38f81f19af57fda9fc461b0d46ded820598ed337 100644 --- a/src/sbbs3/sbbscon.vcxproj +++ b/src/sbbs3/sbbscon.vcxproj @@ -115,7 +115,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\sbbscon/sbbscon.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\sbbscon/</AssemblerListingLocation> diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 285c9720381dbed7176b8efa9283d698bdeebc26..296b5131557f946a53a4ed9d1b0b6ddc491cb3eb 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -50,7 +50,7 @@ /*************/ #define VERSION "3.18" /* Version: Major.minor */ -#define REVISION 'a' /* Revision: lowercase letter */ +#define REVISION 'b' /* Revision: lowercase letter */ #define VERSION_NUM (31800 + (tolower(REVISION)-'a')) #define VERSION_HEX (0x31800 + (tolower(REVISION)-'a')) diff --git a/src/sbbs3/sbbsecho.vcxproj b/src/sbbs3/sbbsecho.vcxproj index e6bec9bbe6af266fdbae138174027b36e7aa85f9..9ddf9f7968d976c22da77f01a2a2004b6b9ebd0d 100644 --- a/src/sbbs3/sbbsecho.vcxproj +++ b/src/sbbs3/sbbsecho.vcxproj @@ -71,7 +71,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\sbbsecho/sbbsecho.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\sbbsecho/</AssemblerListingLocation> diff --git a/src/sbbs3/scfg/scfg.c b/src/sbbs3/scfg/scfg.c index 33bed347a5ebeb46978808f9923b3496caf21d6f..e6ca0748c3290e09d048e67303918d8cf3043910 100644 --- a/src/sbbs3/scfg/scfg.c +++ b/src/sbbs3/scfg/scfg.c @@ -474,6 +474,7 @@ int main(int argc, char **argv) " Chat Features : Chat actions, sections, pagers, and robots\n" " Message Areas : Message area configuration\n" " Message Options : Message and e-mail options\n" + " Command Shells : Terminal server user interface/menu modules\n" " External Programs : Events, editors, and online programs (doors)\n" " Text File Sections : Text file areas available for online viewing\n" "\n" @@ -1009,8 +1010,8 @@ void shell_cfg() "`Command Shells:`\n" "\n" "This is a list of `Command Shells` configured for your system.\n" - "Command shells are the programmable command and menu structures which\n" - "are available for your BBS.\n" + "Command shells are modules that provide the user interface and menu\n" + "structure for the remote users of your BBS's terminal server.\n" "\n" "To add a command shell section, select the desired location with the\n" "arrow keys and hit ~ INS ~.\n" diff --git a/src/sbbs3/scfg/scfg.h b/src/sbbs3/scfg/scfg.h index 101c5fa2f9b746bdd83b542392fb7194a71bd848..c3992d81ed704c9554ff883934e6e320e582733c 100644 --- a/src/sbbs3/scfg/scfg.h +++ b/src/sbbs3/scfg/scfg.h @@ -47,26 +47,35 @@ #define SETHELP(where) uifc.sethelp(where) +#define SCFG_CMDLINE_PREFIX_HELP "\n" \ + "Command lines may begin with a special `prefix` character to indicate:\n" \ + "\n" \ + " `*` Program is either a JavaScript (`.js`) or Baja (`.bin`) module\n" \ + " `?` Program is a JavaScript (`.js`) module\n" + #define SCFG_CMDLINE_SPEC_HELP "\n" \ - "The following is a list of commonly-used command-line specifiers:\n" \ + "The following is a list of commonly-used command line specifiers:\n" \ "\n" \ - " `%f` The path/filename of the file to act upon or door/game drop file\n" \ + " `%f` The path/filename of the file to act upon or door/game `drop file`\n" \ " `%s` File specification (e.g. `*.txt`) or the current `Startup Directory`\n" \ - " `%!` The Synchronet `exec` directory (use `%@` for non-Unix only)\n" \ " `%.` Executable file extension (`.exe`, or blank for Unix systems)\n" \ - " `%n` The current node directory\n" \ - " `%#` The current node number\n" \ - " `%a` The current user's alias\n" \ - " `%1` The current user's number (use `%2`, `%3`, etc. for 0-padded values)\n" \ - " `%h` The current TCP/IP socket descriptor (handle) value\n" \ + " `%!` The Synchronet `exec directory` (use `%@` for non-Unix only)\n" \ + " `%g` The Synchronet `temp directory`\n" \ + " `%j` The Synchronet `data directory`\n" \ + " `%k` The Synchronet `ctrl directory`\n" \ + " `%z` The Synchronet `text directory`\n" \ + " `%n` The current `node directory`\n" \ + " `%#` The current `node number`\n" \ + " `%a` The current `user's alias`\n" \ + " `%1` The current `user's number` (use `%2`, `%3`, etc. for 0-padded values)\n" \ + " `%h` The current TCP/IP `socket` descriptor (handle) value\n" \ " `%p` The current connection type (protocol, e.g. `telnet`, `rlogin`, etc.)\n" \ - " `%r` The current user's terminal height (rows)\n" \ - " `%w` The current user's terminal width (columns)\n" \ + " `%r` The current user's terminal height (`rows`)\n" \ + " `%w` The current user's terminal width (`columns`)\n" \ "\n" \ "For a complete list of the supported command-line specifiers, see:\n" \ "`http://wiki.synchro.net/config:cmdline`\n" - /*************/ /* Constants */ /*************/ diff --git a/src/sbbs3/scfg/scfg.vcxproj b/src/sbbs3/scfg/scfg.vcxproj index 12d111249f6a2dc34097813aa1461710eb458e0a..97e11a629b96a10e5d8e6bed8065811252dd44b9 100644 --- a/src/sbbs3/scfg/scfg.vcxproj +++ b/src/sbbs3/scfg/scfg.vcxproj @@ -117,7 +117,7 @@ <AdditionalIncludeDirectories>..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SCFG;SBBS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\scfg/scfg.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\scfg/</AssemblerListingLocation> diff --git a/src/sbbs3/scfg/scfgchat.c b/src/sbbs3/scfg/scfgchat.c index 44cb9b026dab22a21f413b6bb080bd1791f0db17..f1953c31c466f88d876b5ac11c72c9560cd1fa1f 100644 --- a/src/sbbs3/scfg/scfgchat.c +++ b/src/sbbs3/scfg/scfgchat.c @@ -75,6 +75,7 @@ void page_cfg() "`External Chat Pager Command Line:`\n" "\n" "This is the command line to execute for this external chat pager.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; if(uifc.input(WIN_MID|WIN_SAV,0,0,"Command Line",str,50 @@ -145,6 +146,7 @@ void page_cfg() "`External Chat Pager Command Line:`\n" "\n" "This is the command line to execute for this external chat pager.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; strcpy(str,cfg.page[i]->cmd); diff --git a/src/sbbs3/scfg/scfgmsg.c b/src/sbbs3/scfg/scfgmsg.c index f47f924103cca00d06b18973563eeadb2788863f..080b2572a89b4223da4a394345d9594b5ee2eb6e 100644 --- a/src/sbbs3/scfg/scfgmsg.c +++ b/src/sbbs3/scfg/scfgmsg.c @@ -1505,10 +1505,18 @@ void msg_opts() uifc.helpbuf= "`Extra Attribute Codes...`\n" "\n" - "Synchronet can support the native text attribute codes of other BBS\n" - "programs in messages (menus, posts, e-mail, etc.) To enable the extra\n" - "attribute codes for another BBS program, set the corresponding option\n" - "to `Yes`.\n" + "Synchronet can support the native text attribute (e.g. color) codes of\n" + "other BBS programs in messages (menus, posts, e-mail, etc.) To enable\n" + "extra attribute codes for another BBS program, set the corresponding\n" + "option to `Yes`.\n" + "\n" + "- WWIV color codes are preceded by a Ctrl-C (ASCII 3) character.\n" + "- PCBoard color codes are of the form `@Xxx` where `xx` are hex digits.\n" + "- Wildcat color codes are of the form `@xx@` where `xx` are hex digits.\n" + "- Celerity color codes are of the form `|x` where `x` is an alpha char.\n" + "- Renegade color codes are of the form `|xx` where `xx` are decimal digits.\n" + "\n" + "See `http://wiki.synchro.net/custom:colors` for details.\n" ; j=0; diff --git a/src/sbbs3/scfg/scfgnet.c b/src/sbbs3/scfg/scfgnet.c index baac2a478785de3cc8ffdf602095f438ddd1d72a..eb3ac852c194c6450a033e6fbc0252a56dbdf207 100644 --- a/src/sbbs3/scfg/scfgnet.c +++ b/src/sbbs3/scfg/scfgnet.c @@ -225,7 +225,7 @@ void net_cfg() "`QWK Network Hubs:`\n" "\n" "This is a list of QWK network hubs that your system calls to exchange\n" - "packets with.\n" + "message packets with.\n" "\n" "To add a hub, select the desired location with the arrow keys and hit\n" "~ INS ~.\n" @@ -245,7 +245,7 @@ void net_cfg() "`QWK Network Hub System ID:`\n" "\n" "This is the QWK System ID of this hub. It is used for incoming and\n" - "outgoing network packets and must be accurate.\n" + "outgoing network message packets and must be accurate.\n" ; if(uifc.input(WIN_MID|WIN_SAV,0,0 ,"System ID",str,LEN_QWKID,K_UPPER)<1) @@ -444,6 +444,9 @@ void net_cfg() "This is a filename that will be used as a semaphore (signal) to your\n" "FidoNet front-end that new NetMail has been created and the messages\n" "should be re-scanned.\n" + "\n" + "`Command line specifiers may be included in the semaphore filename.`\n" + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"NetMail Semaphore" ,cfg.netmail_sem,sizeof(cfg.netmail_sem)-1,K_EDIT); @@ -455,6 +458,9 @@ void net_cfg() "This is a filename that will be used as a semaphore (signal) to your\n" "FidoNet front-end that new EchoMail has been created and the messages\n" "should be re-scanned.\n" + "\n" + "`Command line specifiers may be included in the semaphore filename.`\n" + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"EchoMail Semaphore" ,cfg.echomail_sem,sizeof(cfg.echomail_sem)-1,K_EDIT); @@ -470,7 +476,7 @@ void net_cfg() ,cfg.netmail_dir,sizeof(cfg.netmail_dir)-1,K_EDIT); break; case 5: - i=0; + i = (cfg.netmail_misc & NMAIL_ALLOW) ? 0 : 1; uifc.helpbuf= "`Allow Users to Send NetMail:`\n" "\n" @@ -489,7 +495,7 @@ void net_cfg() } break; case 6: - i=0; + i = (cfg.netmail_misc & NMAIL_FILE) ? 0 : 1; uifc.helpbuf= "`Allow Users to Send NetMail File Attachments:`\n" "\n" @@ -508,7 +514,7 @@ void net_cfg() } break; case 7: - i=1; + i = (cfg.netmail_misc & NMAIL_ALIAS) ? 0 : 1; uifc.helpbuf= "`Use Aliases in NetMail:`\n" "\n" @@ -529,7 +535,7 @@ void net_cfg() } break; case 8: - i=1; + i = (cfg.netmail_misc & NMAIL_CRASH) ? 0 : 1; uifc.helpbuf= "`NetMail Defaults to Crash Status:`\n" "\n" @@ -548,7 +554,7 @@ void net_cfg() } break; case 9: - i=1; + i = (cfg.netmail_misc & NMAIL_DIRECT) ? 0 : 1; uifc.helpbuf= "`NetMail Defaults to Direct Status:`\n" "\n" @@ -567,7 +573,7 @@ void net_cfg() } break; case 10: - i=1; + i = (cfg.netmail_misc & NMAIL_HOLD) ? 0 : 1; uifc.helpbuf= "`NetMail Defaults to Hold Status:`\n" "\n" @@ -586,7 +592,7 @@ void net_cfg() } break; case 11: - i=0; + i = (cfg.netmail_misc & NMAIL_KILL) ? 0 : 1; uifc.helpbuf= "`Kill NetMail After it is Sent:`\n" "\n" @@ -618,7 +624,7 @@ void net_cfg() cfg.netmail_cost=atol(str); break; case 13: - i=0; + i = (cfg.netmail_misc & NMAIL_CHSRCADDR) ? 0 : 1; uifc.helpbuf= "`Choose NetMail Source Address:`\n" "\n" @@ -694,6 +700,9 @@ void net_cfg() "This is a filename that will be used as a semaphore (signal) to any\n" "external Internet e-mail processors that new mail has been received\n" "and the message base should be re-scanned.\n" + "\n" + "`Command line specifiers may be included in the semaphore filename.`\n" + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"Inbound Semaphore" ,cfg.smtpmail_sem,sizeof(cfg.smtpmail_sem)-1,K_EDIT); @@ -705,12 +714,15 @@ void net_cfg() "This is a filename that will be used as a semaphore (signal) to any\n" "external Internet gateways (if supported) that new mail has been created\n" "and the message base should be re-scanned.\n" + "\n" + "`Command line specifiers may be included in the semaphore filename.`\n" + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"Outbound Semaphore" ,cfg.inetmail_sem,sizeof(cfg.inetmail_sem)-1,K_EDIT); break; case 3: - i=0; + i = (cfg.inetmail_misc & NMAIL_ALLOW) ? 0 : 1; uifc.helpbuf= "`Allow Users to Send Internet E-mail:`\n" "\n" @@ -729,7 +741,7 @@ void net_cfg() } break; case 4: - i=0; + i = (cfg.inetmail_misc & NMAIL_FILE) ? 0 : 1; uifc.helpbuf= "`Allow Users to Send Internet E-mail File Attachments:`\n" "\n" @@ -748,7 +760,7 @@ void net_cfg() } break; case 5: - i=1; + i = (cfg.inetmail_misc & NMAIL_ALIAS) ? 0 : 1; uifc.helpbuf= "`Use Aliases in Internet E-mail:`\n" "\n" @@ -769,7 +781,7 @@ void net_cfg() } break; case 6: - i=0; + i = (cfg.inetmail_misc & NMAIL_KILL) ? 0 : 1; uifc.helpbuf= "`Kill Internet E-mail After it is Sent:`\n" "\n" @@ -879,6 +891,11 @@ void qhub_edit(int num) "found in Kludge Lines and also addresses the 25-character QWK field\n" "length limits. HEADERS.DAT is supported in Synchronet v3.15 and later.\n" "\n" + "Synchronet v3.18 and later supports `UTF-8` encoded messages within QWK\n" + "packets. If the hub is using Synchronet v3.18 or later, set this option\n" + "to `Yes`. This option also changes the QWK new-line sequence to the ASCII\n" + "LF (10) character instead of the traditional QWK newline byte (227).\n" + "\n" "`Extended (QWKE) Packets` are not normally used in QWK Networking.\n" "Setting this to `Yes` enables some QWKE-specific Kludge Lines that are\n" "superfluous when the HEADERS.DAT file is supported and used.\n" @@ -920,6 +937,8 @@ void qhub_edit(int num) "\n" "This is the command line to use to create (compress) REP packets for\n" "this QWK network hub.\n" + SCFG_CMDLINE_PREFIX_HELP + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"" ,cfg.qhub[num]->pack,sizeof(cfg.qhub[num]->pack)-1,K_EDIT); @@ -930,6 +949,8 @@ void qhub_edit(int num) "\n" "This is the command line to use to extract (decompress) QWK packets from\n" "this QWK network hub.\n" + SCFG_CMDLINE_PREFIX_HELP + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"" ,cfg.qhub[num]->unpack,sizeof(cfg.qhub[num]->unpack)-1,K_EDIT); @@ -940,6 +961,8 @@ void qhub_edit(int num) "\n" "This is the command line to use to initiate a call-out to this QWK\n" "network hub.\n" + SCFG_CMDLINE_PREFIX_HELP + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"" ,cfg.qhub[num]->call,sizeof(cfg.qhub[num]->call)-1,K_EDIT); diff --git a/src/sbbs3/scfg/scfgnode.c b/src/sbbs3/scfg/scfgnode.c index 003d0d5c82ee8b40fb57a58c92125e4e9161fddf..d51a250ab45f77b1c850dc32e82bf3c0cb85ded5 100644 --- a/src/sbbs3/scfg/scfgnode.c +++ b/src/sbbs3/scfg/scfgnode.c @@ -55,9 +55,16 @@ void node_menu() if(savnode) j|=WIN_PASTE; uifc.helpbuf= - "`Node List:`\n" + "`Nodes:`\n" "\n" - "This is the list of configured nodes in your system.\n" + "This is the list of configured terminal server nodes. A node is required\n" + "for each supported simultaneous 'caller'.\n" + "\n" + "`Note:` The `FirstNode` (e.g. Node 1) configuration settings are used for\n" + " all the nodes supported by a single terminal server instance.\n" + "\n" + "`Note:` When nodes are added to this list, the `LastNode` value must be\n" + " adjusted accordingly. See the `ctrl/sbbs.ini` file for more details.\n" "\n" "To add a node, hit ~ INS ~.\n" "\n" @@ -184,12 +191,11 @@ void node_cfg() opt[i][0]=0; sprintf(str,"Node %d Configuration",cfg.node_num); uifc.helpbuf= - "`Node Configuration Menu:`\n" + "`Node Configuration:`\n" "\n" - "This is the node configuration menu. The options available from this\n" - "menu will only affect the selected node's configuration.\n" - "\n" - "Options with a trailing `...` will produce a sub-menu of more options.\n" + "The configuration settings of the `FirstNode` will determine the behavior\n" + "of all nodes of a single terminal server instance (through `LastNode`).\n" + "See the `ctrl/sbbs.ini` file for details.\n" ; switch(uifc.list(WIN_ACT|WIN_CHE|WIN_BOT|WIN_RHT,0,0,60,&node_dflt,0 ,str,opt)) { @@ -205,8 +211,9 @@ void node_cfg() case 0: uifc.helpbuf= "`Node Phone Number:`\n" - "This is the phone number to access the selected node (e.g. for SEXPOTS).\n" - "This value is used for documentary purposes only.\n" + "\n" + "This is the phone number to access the selected node (e.g. for `SEXPOTS`).\n" + "This value is used for information purposes only.\n" ; uifc.input(WIN_MID|WIN_SAV,0,10,"Phone Number",cfg.node_phone,sizeof(cfg.node_phone)-1,K_EDIT); break; @@ -238,7 +245,7 @@ void node_cfg() "This is the toggle options menu for the selected node's configuration.\n" "\n" "The available options from this menu can all be toggled between two or\n" - "more states, such as `Yes` and `No``\n" + "more states, such as `Yes` and `No``.\n" ; switch(uifc.list(WIN_BOT|WIN_RHT|WIN_ACT|WIN_SAV,3,2,35,&tog_dflt ,&tog_bar,"Toggle Options",opt)) { @@ -250,8 +257,8 @@ void node_cfg() uifc.helpbuf= "`Allow Login by User Number:`\n" "\n" - "If you want users to be able login using their user number at the `NN:`\n" - "set this option to `Yes`.\n" + "If you want users to be able login using their user number at the\n" + "login prompt, set this option to `Yes`.\n" ; i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0 ,"Allow Login by User Number",uifcYesNoOpts); @@ -289,7 +296,7 @@ void node_cfg() "`Always Prompt for Password:`\n" "\n" "If you want to have attempted logins using an unknown user name still\n" - "prompt for a password, set this option to `Yes`.\n" + "prompt for a password (i.e. for enhanced security), set this option to `Yes`.\n" ; i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0 ,"Always Prompt for Password",uifcYesNoOpts); @@ -327,8 +334,8 @@ void node_cfg() uifc.helpbuf= "`Spinning Pause Prompt:`\n" "\n" - "If you want to have a spinning cursor at the [Hit a key] prompt, set\n" - "this option to `Yes`.\n" + "If you want to display a spinning cursor at the [Hit a key] prompt,\n" + "set this option to `Yes`.\n" ; i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0 ,"Spinning Cursor at Pause Prompt",uifcYesNoOpts); @@ -411,7 +418,7 @@ void node_cfg() "whom the feedback is sent. The normal value of this option is `1` for\n" "user number one.\n" ; - uifc.input(WIN_MID,0,13,"Validation User Number (0=Nobody)" + uifc.input(WIN_MID|WIN_SAV,0,13,"Validation User Number (0=Nobody)" ,str,4,K_NUMBER|K_EDIT); cfg.node_valuser=atoi(str); break; @@ -427,13 +434,13 @@ void node_cfg() "\n" "Note: error messages are always logged as well (e.g. to `data/error.log`)." ; - uifc.input(WIN_MID,0,13,"Notification User Number (0=Nobody)" + uifc.input(WIN_MID|WIN_SAV,0,13,"Notification User Number (0=Nobody)" ,str,4,K_NUMBER|K_EDIT); cfg.node_erruser=atoi(str); break; case __COUNTER__: uifc.helpbuf= - "~ Notification Error Level ~\n" + "`Notification Error Level`\n" "\n" "Select the minimum severity of error messages that should be forwarded\n" "to the Notification User. The normal setting would be `Critical`."; @@ -451,7 +458,7 @@ void node_cfg() "`Semaphore Check Frequency While Waiting for Call (in seconds):`\n" "\n" "This is the number of seconds between semaphore checks while this node\n" - "is waiting for a caller. Default is `60` seconds.\n" + "is waiting for a caller. Default is `5` seconds.\n" ; uifc.input(WIN_MID|WIN_SAV,0,14 ,"Seconds Between Semaphore Checks" @@ -464,7 +471,7 @@ void node_cfg() "`Statistics Check Frequency While Waiting for Call (in seconds):`\n" "\n" "This is the number of seconds between static checks while this node\n" - "is waiting for a caller. Default is `10` seconds.\n" + "is waiting for a caller. Default is `5` seconds.\n" ; uifc.input(WIN_MID|WIN_SAV,0,14 ,"Seconds Between Statistic Checks" @@ -501,14 +508,13 @@ void node_cfg() uifc.helpbuf= "`Daily Event:`\n" "\n" - "If you have an event that this node should run every day, enter the\n" - "command line for that event here.\n" - "\n" - "An event can be any valid DOS command line. If multiple programs or\n" - "commands are required, use a batch file.\n" + "If you have an event that this node's terminal server should run every\n" + "day, enter the command line for that event here.\n" "\n" - "Remember: The `%!` command line specifier is an abbreviation for your\n" - " configured `EXEC` directory path.\n" + "An event can be any valid command line. If multiple programs or commands\n" + "are required, use a batch file or shell script.\n" + SCFG_CMDLINE_PREFIX_HELP + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,10,"Daily Event" ,cfg.node_daily,sizeof(cfg.node_daily)-1,K_EDIT); @@ -522,9 +528,6 @@ void node_cfg() "disk or other volatile media. This directory contains the system's menus\n" "and other important text files, so be sure the files and directories are\n" "moved to this directory if you decide to change it.\n" - "\n" - "This option allows you to change the location of your control directory.\n" - "The `/text/`` suffix (sub-directory) cannot be changed or removed.\n" ; uifc.input(WIN_MID|WIN_SAV,0,10,"Text Directory" ,cfg.text_dir,sizeof(cfg.text_dir)-1,K_EDIT); diff --git a/src/sbbs3/scfg/scfgsys.c b/src/sbbs3/scfg/scfgsys.c index c023a35b311cd18084a5c61f6b24df910ddcadac..d6b0e86fc103da75db9adf434a565487250694e8 100644 --- a/src/sbbs3/scfg/scfgsys.c +++ b/src/sbbs3/scfg/scfgsys.c @@ -39,7 +39,9 @@ static void configure_dst(void) strcpy(opt[1],"No"); strcpy(opt[2],"Automatic"); opt[3][0]=0; - int i=1; + int i = 2; + if(!(cfg.sys_misc & SM_AUTO_DST)) + i = !(cfg.sys_timezone & DAYLIGHT); uifc.helpbuf= "`Daylight Saving Time (DST):`\n" "\n" @@ -99,15 +101,17 @@ void sys_cfg(void) sprintf(opt[i++],"%-33.33s%s","Operator",cfg.sys_op); sprintf(opt[i++],"%-33.33s%s","Password","**********"); - sprintf(str,"%s Password" + SAFEPRINTF(str,"%s Password" ,cfg.sys_misc&SM_PWEDIT && cfg.sys_pwdays ? "Users Must Change" : cfg.sys_pwdays ? "Users Get New Random" : "Users Can Change"); if(cfg.sys_pwdays) - sprintf(tmp,"Every %u Days",cfg.sys_pwdays); + SAFEPRINTF(tmp,"Every %u Days",cfg.sys_pwdays); else if(cfg.sys_misc&SM_PWEDIT) - strcpy(tmp,"Yes"); + SAFECOPY(tmp,"Yes"); else - strcpy(tmp,"No"); + SAFECOPY(tmp,"No"); + if(cfg.sys_misc&SM_PWEDIT) + sprintf(tmp + strlen(tmp), ", %u chars minimum", cfg.min_pwlen); sprintf(opt[i++],"%-33.33s%s",str,tmp); sprintf(opt[i++],"%-33.33s%u","Days to Preserve Deleted Users" @@ -170,7 +174,7 @@ void sys_cfg(void) uifc.input(WIN_MID,0,0,"Location",cfg.sys_location,sizeof(cfg.sys_location)-1,K_EDIT); break; case 2: - i=0; + i = !(cfg.sys_timezone & US_ZONE); uifc.helpbuf= "`United States Time Zone:`\n" "\n" @@ -410,7 +414,7 @@ void sys_cfg(void) uifc.input(WIN_MID,0,0,"System Password",cfg.sys_pass,sizeof(cfg.sys_pass)-1,K_EDIT|K_UPPER); break; case 5: - i=1; + i = (cfg.sys_misc&SM_PWEDIT) ? 0 : 1; uifc.helpbuf= "`Allow Users to Change Their Password:`\n" "\n" @@ -427,27 +431,41 @@ void sys_cfg(void) else if(i==1 && cfg.sys_misc&SM_PWEDIT) { cfg.sys_misc&=~SM_PWEDIT; uifc.changes=1; + } else if(i == -1) + break; + + if(cfg.sys_misc&SM_PWEDIT) { + SAFEPRINTF(tmp, "%u", cfg.min_pwlen); + SAFEPRINTF2(str, "Minimum Password Length (between %u and %u)", MIN_PASS_LEN, LEN_PASS); + if(uifc.input(WIN_MID|WIN_SAV,0,0, str + ,tmp, 2, K_NUMBER|K_EDIT) < 1) + break; + cfg.min_pwlen=atoi(tmp); + if(cfg.min_pwlen < MIN_PASS_LEN) + cfg.min_pwlen = MIN_PASS_LEN; + if(cfg.min_pwlen > LEN_PASS) + cfg.min_pwlen = LEN_PASS; } - i=0; + i = cfg.sys_pwdays ? 0 : 1; uifc.helpbuf= - "`Force Periodic Password uifc.changes:`\n" + "`Force Periodic New Password:`\n" "\n" - "If you want your users to be forced to change their passwords\n" - "periodically, select `Yes`.\n" + "If you want your users to be forced to have a new password periodically,\n" + "select `Yes`.\n" ; i=uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Force Periodic Password Changes",opt); + ,"Force Periodic New Password",uifcYesNoOpts); if(!i) { ultoa(cfg.sys_pwdays,str,10); uifc.helpbuf= - "`Maximum Days Between Password uifc.changes:`\n" + "`Maximum Days Between New Passwords:`\n" "\n" - "Enter the maximum number of days allowed between password uifc.changes.\n" + "Enter the maximum number of days allowed between password changes.\n" "If a user has not voluntarily changed his or her password in this\n" "many days, he or she will be forced to change their password upon\n" "logon.\n" ; - uifc.input(WIN_MID,0,0,"Maximum Days Between Password Changes" + uifc.input(WIN_MID,0,0,"Maximum Days Between New Password" ,str,5,K_NUMBER|K_EDIT); cfg.sys_pwdays=atoi(str); } @@ -476,7 +494,7 @@ void sys_cfg(void) uifc.helpbuf= "`Maximum Days of Inactivity Before Auto-Deletion:`\n" "\n" - "If you want users that haven't logged on in certain period of time to\n" + "If you want users that have not logged-on in a certain period of time to\n" "be automatically deleted, set this value to the maximum number of days\n" "of inactivity before the user is deleted. Setting this value to `0`\n" "disables this feature.\n" @@ -491,9 +509,9 @@ void sys_cfg(void) uifc.helpbuf= "`New User Password:`\n" "\n" - "If you want callers to only be able to logon as `New` if they know a\n" - "certain password, enter that password here. If you want any caller to\n" - "be able to logon as New, leave this option blank.\n" + "If you want callers to only be able to logon as `New` ~ only ~ if they know\n" + "a secret password, enter that password here. If you prefer any caller\n" + "be able to logon as `New`, leave this option blank.\n" ; uifc.input(WIN_MID,0,0,"New User Password",cfg.new_pass,sizeof(cfg.new_pass)-1 ,K_EDIT|K_UPPER); @@ -612,7 +630,8 @@ void sys_cfg(void) uifc.helpbuf= "`Allow Sysop Logins:`\n" "\n" - "If you want to be able to login with sysop access, set this option to `Yes`.\n" + "If you want to be able to login with system operator access, set this\n" + "option to `Yes`.\n" ; i=uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0 ,"Allow Sysop Logins",uifcYesNoOpts); @@ -952,6 +971,8 @@ void sys_cfg(void) "`New User Exemption Flags:`\n" "\n" "These are the exemptions that are automatically given to new users.\n" + "\n" + "See `http://wiki.synchro.net/access:exemptions` for details.\n" ; uifc.input(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26 ,K_EDIT|K_UPPER|K_ALPHA); @@ -963,6 +984,8 @@ void sys_cfg(void) "`New User Restriction Flags:`\n" "\n" "These are the restrictions that are automatically given to new users.\n" + "\n" + "See `http://wiki.synchro.net/access:restrictions` for details.\n" ; uifc.input(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26 ,K_EDIT|K_UPPER|K_ALPHA); @@ -1084,8 +1107,8 @@ void sys_cfg(void) "settings on this menu. The user can then change them to his or her\n" "liking.\n" "\n" - "See the Synchronet User Manual for more information on the individual\n" - "options available.\n" + "See the Synchronet User Manual (`http://synchro.net/docs/user.html`)\n" + "for more information on the individual options available.\n" ; j=0; k=0; @@ -1128,7 +1151,7 @@ void sys_cfg(void) ,"Auto Hang-up After Xfer" ,cfg.new_misc&AUTOHANG ? "Yes":"No"); opt[i][0]=0; - j=uifc.list(WIN_BOT|WIN_RHT,2,1,0,&j,&k + j=uifc.list(WIN_BOT|WIN_RHT|WIN_SAV,2,1,0,&j,&k ,"Default Toggle Options",opt); if(j==-1) break; @@ -1240,7 +1263,7 @@ void sys_cfg(void) ,"Color Terminal" ,cfg.uq&UQ_COLORTERM ? "Yes":"No"); opt[i][0]=0; - j=uifc.list(WIN_BOT|WIN_RHT,2,1,0,&j,&k + j=uifc.list(WIN_BOT|WIN_RHT|WIN_SAV,2,1,0,&j,&k ,"New User Questions",opt); if(j==-1) break; @@ -1374,7 +1397,7 @@ void sys_cfg(void) "Think of it as a password to guarantee that new users read the text\n" "displayed to them.\n" ; - uifc.input(WIN_MID,0,0,"New User Magic Word",cfg.new_magic,sizeof(cfg.new_magic)-1 + uifc.input(WIN_MID|WIN_SAV,0,0,"New User Magic Word",cfg.new_magic,sizeof(cfg.new_magic)-1 ,K_EDIT|K_UPPER); break; case 1: @@ -1385,6 +1408,8 @@ void sys_cfg(void) "This directory must be located where `ALL` nodes can access it and\n" "`MUST NOT` be placed on a RAM disk or other volatile media.\n" "\n" + "See `http://wiki.synchro.net/dir:data` for details.\n" + "\n" "This option allows you to change the location of your data directory.\n" ; strcpy(str,cfg.data_dir); @@ -1399,6 +1424,8 @@ void sys_cfg(void) "`Log File Directory:`\n" "\n" "Log files will be stored in this directory.\n" + "\n" + "By default, this is set to the same as your Data File directory.\n" ; strcpy(str,cfg.logs_dir); if(uifc.input(WIN_MID|WIN_SAV,0,9,"Logs Directory" @@ -1411,12 +1438,15 @@ void sys_cfg(void) uifc.helpbuf= "`Executable/Module File Directory:`\n" "\n" - "The Synchronet exec directory contains executable files that your BBS\n" - "executes. This directory does `not` need to be in your DOS search path.\n" + "The Synchronet exec directory contains program and script files that the\n" + "BBS executes. This directory does `not` need to be in your OS search path.\n" + "\n" "If you place programs in this directory for the BBS to execute, you\n" - "should place the `%!` abbreviation for the exec directory at the\n" + "should place the `%!` specifier for the `exec` directory at the\n" "beginning of the configured command-lines.\n" "\n" + "See `http://wiki.synchro.net/dir:exec` for details.\n" + "\n" "This option allows you to change the location of your exec directory.\n" ; strcpy(str,cfg.exec_dir); @@ -1431,12 +1461,17 @@ void sys_cfg(void) "`Modified Modules Directory:`\n" "\n" "This optional directory can be used to specify a location where modified\n" - "module files are stored. These modified modules will take precedence over\n" - "stock modules with the same filename (in the exec directory) and will\n" - "not be overwritten by future updates/upgrades.\n" + "module files are stored. These modified modules will take precedence\n" + "over modules with the same filename (in the `exec` directory) and will\n" + "`not be overwritten` by future updates/upgrades.\n" "\n" - "If this directory is `blank`, then this feature is not used and all modules\n" - "are assumed to be located in the `exec` directory.\n" + "Sub-directory searches of this directory also take precedence\n" + "(e.g. `mods/load/*` overrides `exec/load/*`).\n" + "\n" + "If this directory is `blank`, then this feature is not used and all\n" + "modules are assumed to be located in the `exec` directory.\n" + "\n" + "See `http://wiki.synchro.net/dir:mods` for details.\n" ; strcpy(str,cfg.mods_dir); if(uifc.input(WIN_MID|WIN_SAV,0,9,"Mods Directory" @@ -1483,9 +1518,9 @@ void sys_cfg(void) "\n" "This is the monetary value of a credit (How many credits per dollar).\n" "This value should be a power of 2 (1, 2, 4, 8, 16, 32, 64, 128, etc.)\n" - "since credits are usually converted by 100 kilobyte (102400) blocks.\n" - "To make a dollar worth two megabytes of credits, set this value to\n" - "2,097,152 (a megabyte is 1024*1024 or 1048576).\n" + "since credits are usually converted in 100 kibibyte (102400) blocks.\n" + "To make a dollar worth two mebibytes of credits, set this value to\n" + "2,097,152 (a mebibyte is 1024*1024 or 1048576).\n" ; ultoa(cfg.cdt_per_dollar,str,10); uifc.input(WIN_MID|WIN_SAV,0,0 @@ -1668,15 +1703,15 @@ void sys_cfg(void) "`Scan Msgs` Executed when a user reads or scans a message sub-board\n" "`Scan Subs` Executed when a user scans one or more sub-boards for msgs\n" "`List Msgs` Executed when a user lists msgs from the msg read prompt\n" - "`List Logons` Executed when a user lists logons (i.e. '-y' for yesterday)\n" + "`List Logons` Executed when a user lists logons ('-y' for yesterday)\n" "`List Nodes` Executed when a user lists all nodes\n" "`Who's Online` Executed when a user lists the nodes in-use (e.g. `^U`)\n" "`Private Msg` Executed when a user sends a private node msg (e.g. `^P`)\n" "\n" "`Note:` JavaScript modules take precedence over Baja modules if both exist\n" - "in your `exec` or `mods` directories.\n" + " in your `exec` or `mods` directories.\n" ; - switch(uifc.list(WIN_ACT|WIN_T2B|WIN_RHT,0,0,32,&k,0 + switch(uifc.list(WIN_ACT|WIN_T2B|WIN_RHT,0,0,40,&k,0 ,"Loadable Modules",opt)) { case -1: @@ -2060,10 +2095,6 @@ void sys_cfg(void) "user's expiration date may be extended and additional credits may also\n" "be added using quick-validation sets.\n" "\n" - "Holding down ~ ALT ~ and one of the number keys (`1-9`) while a user\n" - "is online, automatically sets his or user security values to the\n" - "quick-validation set for that number key.\n" - "\n" "From within the `User Edit` function, a sysop can use the `V`alidate\n" "User command and select from this quick-validation list to change a\n" "user's security values with very few key-strokes.\n" diff --git a/src/sbbs3/scfg/scfgxfr1.c b/src/sbbs3/scfg/scfgxfr1.c index 0e91d51d4cf68381c3076b7ad20a360c8f6a442b..7c135097705904357dd257fdb6ccf1c9d6b248a9 100644 --- a/src/sbbs3/scfg/scfgxfr1.c +++ b/src/sbbs3/scfg/scfgxfr1.c @@ -337,7 +337,7 @@ void xfer_opts() ,cfg.fview[i]->ext,sizeof(cfg.fview[i]->ext)-1,K_EDIT); break; case 1: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.fview[i]->cmd,sizeof(cfg.fview[i]->cmd)-1,K_EDIT); @@ -468,7 +468,7 @@ void xfer_opts() ,cfg.ftest[i]->ext,sizeof(cfg.ftest[i]->ext)-1,K_EDIT); break; case 1: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.ftest[i]->cmd,sizeof(cfg.ftest[i]->cmd)-1,K_EDIT); @@ -602,7 +602,7 @@ void xfer_opts() ,cfg.dlevent[i]->ext,sizeof(cfg.dlevent[i]->ext)-1,K_EDIT); break; case 1: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.dlevent[i]->cmd,sizeof(cfg.dlevent[i]->cmd)-1,K_EDIT); @@ -727,7 +727,7 @@ void xfer_opts() ,cfg.fextr[i]->ext,sizeof(cfg.fextr[i]->ext)-1,K_EDIT); break; case 1: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.fextr[i]->cmd,sizeof(cfg.fextr[i]->cmd)-1,K_EDIT); @@ -845,7 +845,7 @@ void xfer_opts() ,cfg.fcomp[i]->ext,sizeof(cfg.fcomp[i]->ext)-1,K_EDIT); break; case 1: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.fcomp[i]->cmd,sizeof(cfg.fcomp[i]->cmd)-1,K_EDIT); @@ -998,31 +998,31 @@ void xfer_opts() getar(str,cfg.prot[i]->arstr); break; case 3: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.prot[i]->ulcmd,sizeof(cfg.prot[i]->ulcmd)-1,K_EDIT); break; case 4: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.prot[i]->dlcmd,sizeof(cfg.prot[i]->dlcmd)-1,K_EDIT); break; case 5: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.prot[i]->batulcmd,sizeof(cfg.prot[i]->batulcmd)-1,K_EDIT); break; case 6: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.prot[i]->batdlcmd,sizeof(cfg.prot[i]->batdlcmd)-1,K_EDIT); break; case 7: - uifc.helpbuf = SCFG_CMDLINE_SPEC_HELP; + uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP; uifc.input(WIN_MID|WIN_SAV,0,0 ,"Command" ,cfg.prot[i]->bicmd,sizeof(cfg.prot[i]->bicmd)-1,K_EDIT); diff --git a/src/sbbs3/scfg/scfgxfr2.c b/src/sbbs3/scfg/scfgxfr2.c index ed2887efcd375d6067a0224de85bbad68bc76d6f..69eadb4bcf95a8a7a977015b32dba2788594a6c2 100644 --- a/src/sbbs3/scfg/scfgxfr2.c +++ b/src/sbbs3/scfg/scfgxfr2.c @@ -1272,7 +1272,7 @@ void dir_cfg(uint libnum) "the directory based on the date the file was uploaded or last\n" "downloaded (If the `Purge by Last Download` toggle option is used).\n" "\n" - "The Synchronet file base maintenance program (`DELFILES`) must be used\n" + "The Synchronet file base maintenance program (`delfiles`) must be used\n" "to automatically remove files based on age.\n" ; uifc.input(WIN_MID|WIN_SAV,0,17,"Maximum Age of Files (in days)" @@ -1746,7 +1746,7 @@ void dir_cfg(uint libnum) uifc.helpbuf= "`Purge Files Based on Date of Last Download:`\n" "\n" - "Using the Synchronet file base maintenance utility (`DELFILES`), you can\n" + "Using the Synchronet file base maintenance utility (`delfiles`), you can\n" "have files removed based on the number of days since last downloaded\n" "rather than the number of days since the file was uploaded (default),\n" "by setting this option to `Yes`.\n" @@ -1911,7 +1911,10 @@ void dir_cfg(uint libnum) "`Upload Semaphore File:`\n" "\n" "This is a filename that will be used as a semaphore (signal) to your\n" - "FidoNet front-end that new files are ready to be hatched for export.\n" + "FidoNet software that new files are ready to be hatched for export.\n" + "\n" + "`Command line specifiers may be included in the semaphore filename.`\n" + SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,17,"Upload Semaphore" ,cfg.dir[i]->upload_sem,sizeof(cfg.dir[i]->upload_sem)-1,K_EDIT); diff --git a/src/sbbs3/scfg/scfgxtrn.c b/src/sbbs3/scfg/scfgxtrn.c index 93e038c27bbbdc8b33d4d5b8815c9f9ed0db1a09..84a75a8d8b4c8e7fd0ef4cf78c0215e6289c4174 100644 --- a/src/sbbs3/scfg/scfgxtrn.c +++ b/src/sbbs3/scfg/scfgxtrn.c @@ -44,11 +44,11 @@ static char* use_shell_opt = "Use Shell / New Context"; static char* use_shell_help = "`Use System Shell or New JavaScript Context to Execute:`\n" "\n" - "If this command-line requires the system command shell to execute\n" + "If this command line requires the system command shell to execute\n" "(e.g. uses pipes/redirection or invokes a Unix shell script or\n" "DOS/Windows batch/command file), then set this option to ~Yes~.\n" "\n" - "If this command-line is invoking a Synchronet JavaScript module\n" + "If this command line is invoking a Synchronet JavaScript module\n" "(e.g. it begins with a '`?`' character), then setting this option to ~Yes~\n" "will enable the creation and initialization of a new JavaScript run-time\n" "context for it to execute within, for every invocation." @@ -313,8 +313,8 @@ void xprogs_cfg() uifc.helpbuf= "`Online External Programs:`\n" "\n" - "From this menu, you can configure external events, external editors, or\n" - "online external programs (doors).\n" + "From this menu, you can configure external events, external message\n" + "editors, or online external programs (e.g. `door games`).\n" ; switch(uifc.list(WIN_ORG|WIN_CHE|WIN_ACT,0,0,0,&xprogs_dflt,0 ,"External Programs",opt)) { @@ -383,6 +383,7 @@ void fevents_cfg() "in the logon sequence of users that includes interaction or requires\n" "account information, you probably want to use an online external\n" "program configured to run as a logon event.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"Logon Event" @@ -398,6 +399,7 @@ void fevents_cfg() "wish to have a program execute before carrier is dropped, you probably\n" "want to use an `Online External Program` configured to run as a logoff\n" "event.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"Logout Event" @@ -409,6 +411,7 @@ void fevents_cfg() "\n" "This is the command line for a program that will run after the first\n" "user that logs on after midnight, logs off (regardless of what node).\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,0,"Daily Event" @@ -584,6 +587,7 @@ void tevents_cfg() "`Timed Event Command Line:`\n" "\n" "This is the command line to execute upon this timed event.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,10,"Command" @@ -1122,6 +1126,7 @@ void xtrn_cfg(uint section) "`Online Program Command Line:`\n" "\n" "This is the command line to execute to run the online program.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,10,"Command" @@ -1133,6 +1138,7 @@ void xtrn_cfg(uint section) "\n" "This is the command line to execute after the main command line. This\n" "option is usually only used for multiuser online programs.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,10,"Clean-up" @@ -1373,8 +1379,9 @@ void xtrn_cfg(uint section) "Set this option to ~Yes~ if you would like an automatic screen pause\n" "(`[Hit a key]` prompt) to appear after the program executes.\n" "\n" - "This can be useful if the program displays information just before exiting\n" - "or you want to debug a program with a program not running correctly.\n" + "This can be useful if the program displays information just before\n" + "exiting or you want to debug a program with a program not running\n" + "correctly.\n" ; k=uifc.list(WIN_MID|WIN_SAV,0,0,0,&k,0 ,"Pause After Execution",uifcYesNoOpts); @@ -1769,6 +1776,7 @@ void xedit_cfg() "`External Editor Command Line:`\n" "\n" "This is the command line to execute when using this editor.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,10,"Command" @@ -2543,6 +2551,7 @@ void hotkey_cfg(void) "`Hot Key Event Command Line:`\n" "\n" "This is the command line to execute when this hot key is pressed.\n" + SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP ; uifc.input(WIN_MID|WIN_SAV,0,10,"Command" diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h index b5481b31444d10299aba541f0258a71a506eaf21..84d28f8a83df032c7764104ac140d567115905b3 100644 --- a/src/sbbs3/scfgdefs.h +++ b/src/sbbs3/scfgdefs.h @@ -456,6 +456,7 @@ typedef struct char sys_daily[LEN_CMD+1]; /* Daily event */ char sys_logon[LEN_CMD+1]; /* Logon event */ char sys_logout[LEN_CMD+1]; /* Logoff event */ + uint8_t min_pwlen; uint16_t sys_pwdays; /* Max days between password change */ uint16_t sys_deldays; /* Days to keep deleted users */ uint16_t sys_autodel; /* Autodeletion after x days inactive */ diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c index 2e5c9f2be495113862039feb6a5abfc8d8df101f..2b8e2210a647c550ede4a9fc0c8615727378c127 100644 --- a/src/sbbs3/scfglib1.c +++ b/src/sbbs3/scfglib1.c @@ -233,7 +233,13 @@ BOOL read_main_cfg(scfg_t* cfg, char* error) get_int(cfg->new_install,instream); get_int(cfg->new_msgscan_init,instream); get_int(cfg->guest_msgscan_init,instream); - for(i=0;i<5;i++) + get_int(cfg->min_pwlen, instream); + if(cfg->min_pwlen < MIN_PASS_LEN) + cfg->min_pwlen = MIN_PASS_LEN; + if(cfg->min_pwlen > LEN_PASS) + cfg->min_pwlen = LEN_PASS; + get_int(c, instream); + for(i=0;i<4;i++) get_int(n,instream); /*************************/ @@ -773,8 +779,6 @@ void make_data_dirs(scfg_t* cfg) md(str); SAFEPRINTF(str,"%suser",cfg->data_dir); md(str); - SAFEPRINTF(str,"%suser/ptrs",cfg->data_dir); - md(str); SAFEPRINTF(str,"%sqnet",cfg->data_dir); md(str); SAFEPRINTF(str,"%sfile",cfg->data_dir); diff --git a/src/sbbs3/scfgsave.c b/src/sbbs3/scfgsave.c index f86bde4a974fdf42b1177fdb27e6b3a3a29747e0..27c29b6020e037050369ab981d3bac1b0d91cffd 100644 --- a/src/sbbs3/scfgsave.c +++ b/src/sbbs3/scfgsave.c @@ -220,8 +220,10 @@ BOOL DLLCALL write_main_cfg(scfg_t* cfg, int backup_level) put_int(cfg->new_install,stream); put_int(cfg->new_msgscan_init, stream); put_int(cfg->guest_msgscan_init, stream); + put_int(cfg->min_pwlen, stream); + put_int(c, stream); n=0; - for(i=0;i<5;i++) + for(i=0;i<4;i++) put_int(n,stream); put_int(cfg->expired_level,stream); diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 9c3019e0202ade215008431d062bc39c0918ed77..08f672e0e47cdec6fcb61ab7c534527105115f49 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -182,6 +182,11 @@ static BOOL winsock_startup(void) #endif +static char* server_host_name(void) +{ + return startup->host_name[0] ? startup->host_name : scfg.sys_inetaddr; +} + static ulong active_clients(void) { ulong i; @@ -824,7 +829,7 @@ js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client, if(!js_CreateUserObjects(js_cx, *glob, &scfg, /*user: */NULL, service_client->client, NULL, service_client->subscan)) break; - if(js_CreateSystemObject(js_cx, *glob, &scfg, uptime, startup->host_name, SOCKLIB_DESC)==NULL) + if(js_CreateSystemObject(js_cx, *glob, &scfg, uptime, server_host_name(), SOCKLIB_DESC)==NULL) break; if(service_client->service->js_server_props.version[0]==0) { @@ -1123,9 +1128,9 @@ static void js_service_thread(void* arg) /* RUN SCRIPT */ SAFECOPY(fname,service->cmd); truncstr(fname," "); - sprintf(spath,"%s%s",scfg.mods_dir,fname); + SAFEPRINTF2(spath,"%s%s",scfg.mods_dir,fname); if(scfg.mods_dir[0]==0 || !fexist(spath)) - sprintf(spath,"%s%s",scfg.exec_dir,fname); + SAFEPRINTF2(spath,"%s%s",scfg.exec_dir,fname); js_init_args(js_cx, js_glob, service->cmd); @@ -1241,9 +1246,9 @@ static void js_static_service_thread(void* arg) SAFECOPY(fname,service->cmd); truncstr(fname," "); - sprintf(spath,"%s%s",scfg.mods_dir,fname); + SAFEPRINTF2(spath,"%s%s",scfg.mods_dir,fname); if(scfg.mods_dir[0]==0 || !fexist(spath)) - sprintf(spath,"%s%s",scfg.exec_dir,fname); + SAFEPRINTF2(spath,"%s%s",scfg.exec_dir,fname); do { if((js_cx=js_initcx(js_runtime,INVALID_SOCKET,&service_client,&js_glob))==NULL) { @@ -1832,16 +1837,12 @@ void DLLCALL services_thread(void* arg) else SAFECOPY(scfg.temp_dir,"../temp"); prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); - MKDIR(scfg.temp_dir); - lprintf(LOG_DEBUG,"Temporary file directory: %s", scfg.temp_dir); - if(!isdir(scfg.temp_dir)) { - lprintf(LOG_CRIT,"!Invalid temp directory: %s", scfg.temp_dir); + if((i = md(scfg.temp_dir)) != 0) { + lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", i, strerror(i), scfg.temp_dir); cleanup(1); return; } - - if(startup->host_name[0]==0) - SAFECOPY(startup->host_name,scfg.sys_inetaddr); + lprintf(LOG_DEBUG,"Temporary file directory: %s", scfg.temp_dir); if((t=checktime())!=0) { /* Check binary time */ lprintf(LOG_ERR,"!TIME PROBLEM (%ld)",t); diff --git a/src/sbbs3/services.vcxproj b/src/sbbs3/services.vcxproj index 5fb6b0a8c85565f48c2f1055f73869f0421c1cff..dc71b1a2f392174060b6a593fef7d3be1d6bf350 100644 --- a/src/sbbs3/services.vcxproj +++ b/src/sbbs3/services.vcxproj @@ -131,7 +131,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;SERVICES_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\services/services.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\services/</AssemblerListingLocation> diff --git a/src/sbbs3/sexyz.vcxproj b/src/sbbs3/sexyz.vcxproj index d36a1e5ce15812a70ae8315f5841d4fcf9b34334..54532b1a37a197a5e7ef2eb28f72865c7af767b3 100644 --- a/src/sbbs3/sexyz.vcxproj +++ b/src/sbbs3/sexyz.vcxproj @@ -112,7 +112,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;RINGBUF_SEM;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\sexyz/sexyz.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\sexyz/</AssemblerListingLocation> diff --git a/src/sbbs3/slog.c b/src/sbbs3/slog.c index 2e2ce40df396c6b06b98e8c23564caf7627b87fd..958cd656296ed08980e85cbbd5a2bd8ff639e7d8 100644 --- a/src/sbbs3/slog.c +++ b/src/sbbs3/slog.c @@ -54,7 +54,7 @@ if(!dir[0]) { backslash(dir); -sprintf(str,"%scsts.dab",dir); +SAFEPRINTF(str,"%scsts.dab",dir); if(!fexistcase(str)) { printf("%s does not exist\r\n",str); return(1); } @@ -111,9 +111,10 @@ while(l>-1L) { ,fbacks,ulb/1024,uls,dlb/1024,dls); lncntr++; if(pause && lncntr>=20) { - printf("[Hit a key]"); + printf("More (Y/n) ? "); fflush(stdout); - if(getchar()==3) + char ch = getchar(); + if(ch == CTRL_C || toupper(ch) == 'N') break; printf("\r"); lncntr=0; } } diff --git a/src/sbbs3/slog.vcxproj b/src/sbbs3/slog.vcxproj index 5213af3474afdb697c3bbded5f08de7af985872d..fad7a7d1c6de3115cd432a09d0cd7f04819a0ea4 100644 --- a/src/sbbs3/slog.vcxproj +++ b/src/sbbs3/slog.vcxproj @@ -109,7 +109,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\slog/slog.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\slog/</AssemblerListingLocation> diff --git a/src/sbbs3/smbactiv.vcxproj b/src/sbbs3/smbactiv.vcxproj index bb21030abdf85195a6fe74da24720db7aef270a3..c194623e124b1e0bdcf34e409700f28d2aac1d5e 100644 --- a/src/sbbs3/smbactiv.vcxproj +++ b/src/sbbs3/smbactiv.vcxproj @@ -112,7 +112,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;NO_SOCKET_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\smbactiv/smbactiv.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\smbactiv/</AssemblerListingLocation> diff --git a/src/sbbs3/smbutil.vcxproj b/src/sbbs3/smbutil.vcxproj index 8d6e60b323a4ef13429eb25483b7edb0185aa988..2db9a515966f9e54c8236d1c2eea50e5444d8849 100644 --- a/src/sbbs3/smbutil.vcxproj +++ b/src/sbbs3/smbutil.vcxproj @@ -71,7 +71,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;SBBS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\smbutil/smbutil.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\smbutil/</AssemblerListingLocation> diff --git a/src/sbbs3/str.cpp b/src/sbbs3/str.cpp index 70071f0358c787fc99f9d199769087190e45b121..c3732489c0e378403b4781b995bc5718967aa3da 100644 --- a/src/sbbs3/str.cpp +++ b/src/sbbs3/str.cpp @@ -111,7 +111,7 @@ void sbbs_t::userlist(long mode) } j++; } - close(userfile); + closeuserdat(userfile); if(i<=k) { /* aborted */ if(sort) for(i=0;i<j;i++) @@ -702,7 +702,7 @@ bool sbbs_t::chkpass(char *passwd, user_t* user, bool unique) SAFECOPY(pass,passwd); strupr(pass); - if(strlen(pass) < MIN_PASS_LEN) { + if(strlen(pass) < cfg.min_pwlen) { bputs(text[PasswordTooShort]); return(false); } @@ -1059,8 +1059,8 @@ extern RingBuf* node_inbuf[]; bool sbbs_t::spy(uint i /* node_num */) { char ch; - char ansi_seq[32]; - int ansi_len; + char ansi_seq[256]; + size_t ansi_len; int in; if(!i || i>MAX_NODES) { @@ -1077,7 +1077,10 @@ bool sbbs_t::spy(uint i /* node_num */) } bprintf("*** Synchronet Remote Spy on Node %d: Ctrl-C to Abort ***" "\r\n\r\n",i); - spy_socket[i-1]=client_socket; + if(passthru_thread_running) + spy_socket[i-1]=client_socket_dup; + else + spy_socket[i-1]=client_socket; ansi_len=0; while(online && client_socket!=INVALID_SOCKET @@ -1089,38 +1092,54 @@ bool sbbs_t::spy(uint i /* node_num */) continue; } ch=in; - if(ch==ESC) { - if(!ansi_len) { - ansi_seq[ansi_len++]=ch; - continue; + if(ch == ESC) { + if(ansi_len) + ansi_len = 0; + else { + if((in = incom(500)) != NOINP) { + if(in == '[') { + ansi_seq[ansi_len++] = ESC; + ansi_seq[ansi_len++] = '['; + continue; + } else { + if(node_inbuf[i-1] != NULL) { + RingBufWrite(node_inbuf[i-1], (uchar*)&ch, sizeof(ch)); + ch = in; + } + } + } } - ansi_len=0; } - if(ansi_len && ansi_len<(int)sizeof(ansi_seq)-2) { - if(ansi_len==1) { - if(ch=='[') { - ansi_seq[ansi_len++]=ch; - continue; + if(ansi_len) { + if(ansi_len < sizeof(ansi_seq)) + ansi_seq[ansi_len++] = ch; + if(ch >= '@' && ch <= '~') { + switch(ch) { + case 'A': // Up + case 'B': // Down + case 'C': // Right + case 'D': // Left + case 'F': // Preceding line + case 'H': // Home + case 'K': // End + case 'V': // PageUp + case 'U': // PageDn + case '@': // Insert + case '~': // Various VT-220 + // Pass-through these sequences to spied-upon node (eat all others) + if(node_inbuf[i-1] != NULL) + RingBufWrite(node_inbuf[i-1], (uchar*)ansi_seq, ansi_len); + break; } ansi_len=0; } - if(ch=='R') { /* throw-away cursor position report */ - ansi_len=0; - continue; - } - ansi_seq[ansi_len++]=ch; - if(isalpha(ch)) { - if(node_inbuf[i-1]!=NULL) - RingBufWrite(node_inbuf[i-1],(uchar*)ansi_seq,ansi_len); - ansi_len=0; - } continue; } if(ch<' ') { lncntr=0; /* defeat pause */ spy_socket[i-1]=INVALID_SOCKET; /* disable spy output */ ch=handle_ctrlkey(ch,K_NONE); - spy_socket[i-1]=client_socket; /* enable spy output */ + spy_socket[i-1] = passthru_thread_running ? client_socket_dup : client_socket; /* enable spy output */ if(ch==0) continue; } @@ -1128,6 +1147,7 @@ bool sbbs_t::spy(uint i /* node_num */) RingBufWrite(node_inbuf[i-1],(uchar*)&ch,1); } spy_socket[i-1]=INVALID_SOCKET; + return(true); } @@ -1272,3 +1292,8 @@ char* sbbs_t::age_of_posted_item(char* buf, size_t max, time_t t) safe_snprintf(buf, max, text[AgeOfPostedItem], value, units, past); return buf; } + +char* sbbs_t::server_host_name(void) +{ + return startup->host_name[0] ? startup->host_name : cfg.sys_inetaddr; +} diff --git a/src/sbbs3/text_defaults.c b/src/sbbs3/text_defaults.c index c20b074f9bbad678740c89be2377001e5c8de289..064b44f5ba097c62073a06f5c965521ce7c20206 100644 --- a/src/sbbs3/text_defaults.c +++ b/src/sbbs3/text_defaults.c @@ -440,19 +440,19 @@ const char * const text_defaults[TOTAL_TEXT]={ ,"\x0d\x0a\x44\x6f\x77\x6e\x6c\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x2e\x0d\x0a" // 273 DownloadQueueIsEmpty ,"\x0d\x0a\x01\x2d\x01\x67\x01\x68\x55\x70\x6c\x6f\x61\x64\x20\x51\x75\x65\x75\x65\x3a\x01\x6e\x01\x67\x20\x20\x20\x20\x20\x20\x20" "\x20\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x0d\x0a\x0d\x0a\x01\x6e" // 274 UploadQueueLstHdr - ,"\x01\x67\x01\x68\x25\x32\x64\x3a\x20\x01\x6e\x01\x67\x25\x73\x20\x20\x20\x20\x20\x25\x73\x0d\x0a" // 275 UploadQueueLstFmt + ,"\x01\x67\x01\x68\x25\x32\x64\x3a\x20\x01\x6e\x01\x67\x25\x2d\x31\x32\x73\x20\x20\x20\x20\x20\x25\x73\x0d\x0a" // 275 UploadQueueLstFmt ,"\x0d\x0a\x01\x2d\x01\x67\x01\x68\x44\x6f\x77\x6e\x6c\x6f\x61\x64\x20\x51\x75\x65\x75\x65\x3a\x01\x6e\x01\x67\x20\x20\x20\x20\x20" "\x20\x43\x72\x65\x64\x69\x74\x73\x20\x20\x20\x20\x20\x20\x42\x79\x74\x65\x73\x20\x20\x20\x20\x20\x20\x20\x20\x54\x69\x6d\x65\x0d" "\x0a\x0d\x0a\x01\x6e" // 276 DownloadQueueLstHdr - ,"\x01\x67\x01\x68\x25\x32\x64\x3a\x20\x01\x6e\x01\x67\x25\x73\x20\x25\x31\x31\x2e\x31\x31\x73\x20\x25\x31\x31\x2e\x31\x31\x73\x20" - "\x20\x20\x20\x20\x25\x73\x0d\x0a" // 277 DownloadQueueLstFmt + ,"\x01\x67\x01\x68\x25\x32\x64\x3a\x20\x01\x6e\x01\x67\x25\x2d\x31\x32\x73\x20\x25\x31\x31\x2e\x31\x31\x73\x20\x25\x31\x31\x2e\x31" + "\x31\x73\x20\x20\x20\x20\x20\x25\x73\x0d\x0a" // 277 DownloadQueueLstFmt ,"\x0d\x0a\x01\x77\x01\x68\x20\x20\x20\x20\x20\x20\x20\x20\x20\x54\x6f\x74\x61\x6c\x73\x3a\x20\x25\x31\x31\x2e\x31\x31\x73\x20\x25" "\x31\x31\x2e\x31\x31\x73\x20\x20\x20\x20\x20\x25\x73\x0d\x0a" // 278 DownloadQueueTotals ,"\x0d\x0a\x01\x2d\x01\x67\x52\x65\x6d\x6f\x76\x65\x20\x77\x68\x69\x63\x68\x20\x66\x69\x6c\x65\x20\x66\x72\x6f\x6d\x20\x75\x70\x6c" "\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x28\x31\x2d\x25\x64\x29\x3a\x20\x01\x6e" // 279 RemoveWhichFromUlQueue ,"\x0d\x0a\x01\x2d\x01\x67\x52\x65\x6d\x6f\x76\x65\x20\x77\x68\x69\x63\x68\x20\x66\x69\x6c\x65\x20\x66\x72\x6f\x6d\x20\x64\x6f\x77" "\x6e\x6c\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x28\x31\x2d\x25\x64\x29\x3a\x20\x01\x6e" // 280 RemoveWhichFromDlQueue - ,"\x0d\x0a\x55\x70\x6c\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x0d\x0a" // 281 UploadQueueIsEmpty + ,"\x0d\x0a\x55\x70\x6c\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x2e\x0d\x0a" // 281 UploadQueueIsEmpty ,"\x0d\x0a\x48\x61\x6e\x67\x20\x75\x70\x20\x61\x66\x74\x65\x72\x20\x74\x72\x61\x6e\x73\x66\x65\x72" // 282 HangUpAfterXferQ ,"\x0d\x0a\x01\x77\x01\x68\x53\x74\x61\x72\x74\x20\x74\x72\x61\x6e\x73\x66\x65\x72\x20\x6e\x6f\x77\x20\x28\x43\x74\x72\x6c\x2d\x58" "\x20\x74\x6f\x20\x61\x62\x6f\x72\x74\x29\x3a\x0d\x0a\x01\x6e" // 283 StartXferNow @@ -576,7 +576,7 @@ const char * const text_defaults[TOTAL_TEXT]={ ,"\x01\x62\x54\x69\x6d\x65\x20\x6f\x6e\x20\x54\x6f\x64\x61\x79\x20\x20\x20\x3a\x20\x01\x63\x25\x2d\x35\x75\x20\x01\x62\x28\x4d\x61" "\x78\x20\x01\x63\x25\x75\x01\x62\x29\x0d\x0a" // 353 LiTimeonToday ,"\x01\x62\x4d\x61\x69\x6c\x20\x57\x61\x69\x74\x69\x6e\x67\x20\x20\x20\x20\x3a\x20\x01\x63\x25\x75\x0d\x0a" // 354 LiMailWaiting - ,"\x01\x62\x53\x79\x73\x6f\x70\x20\x69\x73\x20\x20\x20\x20\x20\x20\x20\x20\x3a\x20\x01\x63" // 355 LiSysopIs + ,"\x01\x62\x01\x68\x53\x79\x73\x6f\x70\x20\x69\x73\x20\x20\x20\x20\x20\x20\x20\x20\x3a\x20\x01\x63\x25\x73\x0d\x0a" // 355 LiSysopIs ,"\x41\x76\x61\x69\x6c\x61\x62\x6c\x65" // 356 LiSysopAvailable ,"\x4e\x6f\x74\x20\x41\x76\x61\x69\x6c\x61\x62\x6c\x65" // 357 LiSysopNotAvailable ,"\x01\x72\x01\x68\x01\x69\x59\x6f\x75\x20\x63\x61\x6e\x27\x74\x20\x70\x6f\x73\x73\x69\x62\x6c\x79\x20\x62\x65\x20\x69\x6e\x20\x74" diff --git a/src/sbbs3/textgen.vcxproj b/src/sbbs3/textgen.vcxproj index 86ecc88d2b5fd4a4dbb9c5ca5fe3f30aad9bbf6a..91c125b6c7b34e4bcdba720b3e1ff2f51cd50bdb 100644 --- a/src/sbbs3/textgen.vcxproj +++ b/src/sbbs3/textgen.vcxproj @@ -119,7 +119,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;SBBS_EXPORTS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\textgen/textgen.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\textgen/</AssemblerListingLocation> diff --git a/src/sbbs3/umonitor/chat.c b/src/sbbs3/umonitor/chat.c index 389d9319c5aabf3d86934164e39c140b7037a293..3cab69648a6b74b87c20805d92e8a2746811c519 100644 --- a/src/sbbs3/umonitor/chat.c +++ b/src/sbbs3/umonitor/chat.c @@ -129,7 +129,7 @@ int chat(scfg_t *cfg, int nodenum, node_t *node, box_t *boxch, void(*timecallbac int in,out; char inpath[MAX_PATH]; char outpath[MAX_PATH]; - char usrname[128]; + char usrname[128] = "Unknown user"; char *p; char ch; time_t now; @@ -139,34 +139,35 @@ int chat(scfg_t *cfg, int nodenum, node_t *node, box_t *boxch, void(*timecallbac gettextinfo(&ti); if((buf=(char *)alloca(ti.screenwidth*ti.screenheight*2))==NULL) { - return(-1); + return __LINE__; } if(getnodedat(cfg,nodenum,node,FALSE,NULL)) - return(-1); + return __LINE__; username(cfg,node->useron,usrname); - gettext(1,1,ti.screenwidth,ti.screenheight,buf); - drawchatwin(boxch,usrname,cfg->sys_op); - sprintf(outpath,"%slchat.dab",cfg->node_path[nodenum-1]); if((out=sopen(outpath,O_RDWR|O_CREAT|O_BINARY,O_DENYNONE ,DEFFILEMODE))==-1) - return(-1); + return __LINE__; sprintf(inpath,"%schat.dab",cfg->node_path[nodenum-1]); if((in=sopen(inpath,O_RDWR|O_CREAT|O_BINARY,O_DENYNONE ,DEFFILEMODE))==-1) { close(out); - return(-1); + return __LINE__; } if((p=(char *)alloca(PCHAT_LEN))==NULL) { close(in); close(out); - return(-1); + return __LINE__; } + + gettext(1,1,ti.screenwidth,ti.screenheight,buf); + drawchatwin(boxch,usrname,cfg->sys_op); + memset(p,0,PCHAT_LEN); write(in,p,PCHAT_LEN); write(out,p,PCHAT_LEN); @@ -176,7 +177,7 @@ int chat(scfg_t *cfg, int nodenum, node_t *node, box_t *boxch, void(*timecallbac togglechat(cfg,nodenum,node,TRUE); while(in != -1) { - + now=time(NULL); if(now!=last_nodechk) { diff --git a/src/sbbs3/umonitor/umonitor.c b/src/sbbs3/umonitor/umonitor.c index e53cd75fd1e329f2a10a255c6ade39d4db37c656..6613c4020533563d3753b965b58256fec1bfcae5 100644 --- a/src/sbbs3/umonitor/umonitor.c +++ b/src/sbbs3/umonitor/umonitor.c @@ -948,7 +948,7 @@ USAGE: #endif " A = ANSI mode\n" "-l# = set screen lines to #\n" - "-s# = set idle slsep to # milliseconds (defualt: %d)\n" + "-s# = set idle slsep to # milliseconds (default: %d)\n" ,argv[0] ,idle_sleep ); @@ -1192,8 +1192,11 @@ USAGE: uifc.msg("Error reading node data!"); continue; } - if((node.status==NODE_INUSE) && node.useron) - chat(&cfg,main_dflt,&node,&boxch,NULL); + if((node.status==NODE_INUSE) && node.useron) { + int result = chat(&cfg,main_dflt,&node,&boxch,NULL); + if(result != 0) + uifc.msgf("Chat error: %d (%s)", result, strerror(errno)); + } continue; } @@ -1305,9 +1308,12 @@ USAGE: break; case 3: /* Chat with User */ - chat(&cfg,main_dflt,&node,&boxch,NULL); + { + int result = chat(&cfg,main_dflt,&node,&boxch,NULL); + if(result != 0) + uifc.msgf("Chat error %d (%s)", result, strerror(errno)); break; - + } case 4: /* Node Toggles */ node_toggles(&cfg, j); break; diff --git a/src/sbbs3/un_qwk.cpp b/src/sbbs3/un_qwk.cpp index ac856bdbdad54f8d9082aa5d4c887b27d7ee5fe5..9b0472baf389f9cdd6893715b856febbc2a62335 100644 --- a/src/sbbs3/un_qwk.cpp +++ b/src/sbbs3/un_qwk.cpp @@ -396,7 +396,7 @@ bool sbbs_t::unpack_qwk(char *packet,uint hubnum) MKDIR(inbox); // Copy files - sprintf(fname,"%s/%s",inbox,dirent->d_name); + SAFEPRINTF2(fname,"%s/%s",inbox,dirent->d_name); mv(str,fname,1 /* overwrite */); sprintf(str,text[ReceivedFileViaQWK],dirent->d_name,cfg.qhub[hubnum]->id); putsmsg(&cfg,1,str); diff --git a/src/sbbs3/unbaja.vcxproj b/src/sbbs3/unbaja.vcxproj index b1119bc3ebd49f5fbe9a16d65ad5c1bb7dee63c6..1ade29c6c23cb5f8ad1034bc6bdb3f1f011695dd 100644 --- a/src/sbbs3/unbaja.vcxproj +++ b/src/sbbs3/unbaja.vcxproj @@ -110,7 +110,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\unbaja/unbaja.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\unbaja/</AssemblerListingLocation> diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp index 05476e6db14d78a30d1e62b55adfb351335b85e7..4733ad1cabb11c9298b033bb6089e9c731805568 100644 --- a/src/sbbs3/upload.cpp +++ b/src/sbbs3/upload.cpp @@ -316,7 +316,7 @@ bool sbbs_t::upload(uint dirnum) ,cfg.dir[dirnum]->sname); if(!yesno(str)) return(false); action=NODE_ULNG; - sprintf(str,"%s%s",path,fname); + SAFEPRINTF2(str,"%s%s",path,fname); if(fexistcase(str)) { /* File is on disk */ #ifdef _WIN32 GetShortPathName(str, spath, sizeof(spath)); @@ -459,7 +459,7 @@ bool sbbs_t::upload(uint dirnum) if(!noyes(text[AnonymousQ])) f.misc|=FM_ANON; } - sprintf(str,"%s%s",path,fname); + SAFEPRINTF2(str,"%s%s",path,fname); if(fexistcase(str)) { /* File is on disk */ if(!uploadfile(&f)) return(false); @@ -570,7 +570,7 @@ bool sbbs_t::bulkupload(uint dirnum) SYNC; dir=opendir(path); while(dir!=NULL && (dirent=readdir(dir))!=NULL && !msgabort()) { - sprintf(str,"%s%s",path,dirent->d_name); + SAFEPRINTF2(str,"%s%s",path,dirent->d_name); if(isdir(str)) continue; #ifdef _WIN32 diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 5b035417cdf73a7203f5d8d8aee6db68a5a8fdb3..c1c7837d6ba87ffac284e705922f4446cb11ffe0 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -207,6 +207,8 @@ int openuserdat(scfg_t* cfg, BOOL for_modify) int closeuserdat(int file) { + if(file < 1) + return -1; return close(file); } diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp index 787a2953c0c1fd046c61d15d0e48614cb0b964d4..76c10af8578b15484e535fd7e275fe7b82a6d81c 100644 --- a/src/sbbs3/useredit.cpp +++ b/src/sbbs3/useredit.cpp @@ -969,7 +969,7 @@ void sbbs_t::maindflts(user_t* user) if(sys_status&SS_ABORT) break; if(!(term&PETSCII)) { - if(!(user->misc&UTF8) && !yesno(text[ExAsciiTerminalQ])) + if(!(term&UTF8) && !yesno(text[ExAsciiTerminalQ])) user->misc|=NO_EXASCII; else user->misc&=~NO_EXASCII; @@ -1082,11 +1082,9 @@ void sbbs_t::maindflts(user_t* user) if(sys_status&SS_ABORT) break; putuserrec(&cfg,user->number,U_NETMAIL,LEN_NETMAIL,user->netmail); - if(user->netmail[0] == 0 || noyes(text[ForwardMailQ])) - user->misc&=~NETMAIL; - else { - user->misc|=NETMAIL; - } + user->misc &= ~NETMAIL; + if(is_supported_netmail_addr(&cfg, user->netmail) && !noyes(text[ForwardMailQ])) + user->misc |= NETMAIL; putuserrec(&cfg,user->number,U_MISC,8,ultoa(user->misc,str,16)); break; case 'C': @@ -1114,7 +1112,7 @@ void sbbs_t::maindflts(user_t* user) pause(); break; } - bprintf(text[NewPasswordPromptFmt], MIN_PASS_LEN, LEN_PASS); + bprintf(text[NewPasswordPromptFmt], cfg.min_pwlen, LEN_PASS); if(!getstr(str,LEN_PASS,K_UPPER|K_LINE|K_TRIM)) break; truncsp(str); diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index 762e31f9bc15a781305923ee7ddf558a2c2ccac8..e88d3741aaa61474eeea333a5ff02a62f54d91cc 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -740,6 +740,11 @@ static BOOL winsock_startup(void) #endif +static char* server_host_name(void) +{ + return startup->host_name[0] ? startup->host_name : scfg.sys_inetaddr; +} + static void status(char* str) { if(startup!=NULL && startup->status!=NULL) @@ -1513,18 +1518,19 @@ static void send_error(http_session_t * session, unsigned line, const char* mess if(session->req.error_dir) { /* We have a custom error directory from webctrl.ini look there first */ - sprintf(sbuf,"%s%s%s",session->req.error_dir,error_code,startup->ssjs_ext); + SAFEPRINTF3(sbuf,"%s%s%s",session->req.error_dir,error_code,startup->ssjs_ext); if(stat(sbuf,&sb)) { /* No custom .ssjs error message... check for custom .html */ - sprintf(sbuf2,"%s%s.html",session->req.error_dir,error_code); + SAFEPRINTF2(sbuf2,"%s%s.html",session->req.error_dir,error_code); if(stat(sbuf2,&sb)) { /* Nope, no custom .html error either, check for global ssjs one */ - sprintf(sbuf,"%s%s%s",error_dir,error_code,startup->ssjs_ext); + SAFEPRINTF3(sbuf,"%s%s%s",error_dir,error_code,startup->ssjs_ext); } } } - else - sprintf(sbuf,"%s%s%s",error_dir,error_code,startup->ssjs_ext); + else { + SAFEPRINTF3(sbuf,"%s%s%s",error_dir,error_code,startup->ssjs_ext); + } if(!stat(sbuf,&sb)) { lprintf(LOG_INFO,"%04d Using SSJS error page",session->socket); session->req.dynamic=IS_SSJS; @@ -2797,7 +2803,7 @@ static BOOL parse_headers(http_session_t * session) } if(content_len) session->req.post_len = content_len; - add_env(session,"SERVER_NAME",session->req.host[0] ? session->req.host : startup->host_name ); + add_env(session,"SERVER_NAME",session->req.host[0] ? session->req.host : server_host_name() ); return TRUE; } @@ -3125,12 +3131,12 @@ static BOOL get_request_headers(http_session_t * session) } if(!(session->req.vhost[0])) { - SAFECOPY(session->req.vhost, startup->host_name); + SAFECOPY(session->req.vhost, server_host_name()); /* Lower-case for normalization */ strlwr(session->req.vhost); } if(!(session->req.host[0])) { - SAFECOPY(session->req.host, startup->host_name); + SAFECOPY(session->req.host, server_host_name()); /* Lower-case for normalization */ strlwr(session->req.host); } @@ -3606,7 +3612,7 @@ static BOOL check_request(http_session_t * session) p=last_slash; /* Terminate the path after the slash */ *(last_slash+1)=0; - sprintf(str,"%saccess.ars",curdir); + SAFEPRINTF(str,"%saccess.ars",curdir); if(!stat(str,&sb)) { /* NEVER serve up an access.ars file */ lprintf(LOG_WARNING,"%04d !WARNING! access.ars support is deprecated and will be REMOVED very soon.",session->socket); @@ -3628,7 +3634,7 @@ static BOOL check_request(http_session_t * session) /* Truncate at \r or \n - can use last_slash since I'm done with it.*/ truncsp(session->req.ars); } - sprintf(str,"%swebctrl.ini",curdir); + SAFEPRINTF(str,"%swebctrl.ini",curdir); if(!stat(str,&sb)) { /* NEVER serve up a webctrl.ini file */ if(!strcmp(path,str)) { @@ -5764,7 +5770,7 @@ js_initcx(http_session_t *session) if(!js_CreateCommonObjects(js_cx, &scfg, NULL ,NULL /* global */ ,uptime /* system */ - ,startup->host_name /* system */ + ,server_host_name() /* system */ ,SOCKLIB_DESC /* system */ ,&session->js_callback /* js */ ,&startup->js /* js */ @@ -6909,7 +6915,8 @@ void DLLCALL web_server(void* arg) http_session_t * session=NULL; void *acc_type; char *ssl_estr; - int lvl; + int lvl; + int i; startup=(web_startup_t*)arg; @@ -6950,6 +6957,8 @@ void DLLCALL web_server(void* arg) protected_uint32_init(&thread_count, 0); do { + protected_uint32_init(&active_clients,0); + /* Setup intelligent defaults */ if(startup->port==0) startup->port=IPPORT_HTTP; if(startup->root_dir[0]==0) SAFECOPY(startup->root_dir,WEB_DEFAULT_ROOT_DIR); @@ -7028,13 +7037,12 @@ void DLLCALL web_server(void* arg) else SAFECOPY(scfg.temp_dir,"../temp"); prep_dir(startup->ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); - lprintf(LOG_DEBUG,"Temporary file directory: %s", scfg.temp_dir); - MKDIR(scfg.temp_dir); - if(!isdir(scfg.temp_dir)) { - lprintf(LOG_CRIT,"!Invalid temp directory: %s", scfg.temp_dir); + if((i = md(scfg.temp_dir)) != 0) { + lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", i, strerror(i), scfg.temp_dir); cleanup(1); return; } + lprintf(LOG_DEBUG,"Temporary file directory: %s", scfg.temp_dir); lprintf(LOG_DEBUG,"Root directory: %s", root_dir); lprintf(LOG_DEBUG,"Error directory: %s", error_dir); lprintf(LOG_DEBUG,"CGI directory: %s", cgi_dir); @@ -7067,13 +7075,9 @@ void DLLCALL web_server(void* arg) iniCloseFile(fp); } - if(startup->host_name[0]==0) - SAFECOPY(startup->host_name,scfg.sys_inetaddr); - if(uptime==0) uptime=time(NULL); /* this must be done *after* setting the timezone */ - protected_uint32_init(&active_clients,0); update_clients(); /* open a socket and wait for a client */ diff --git a/src/sbbs3/websrvr.vcxproj b/src/sbbs3/websrvr.vcxproj index 760d454c096123ab4f67c4c8764a73356429690f..8fd13ace4d626e9de6a4216141366f8270c7556e 100644 --- a/src/sbbs3/websrvr.vcxproj +++ b/src/sbbs3/websrvr.vcxproj @@ -83,7 +83,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;WEBSRVR_EXPORTS;RINGBUF_SEM;RINGBUF_MUTEX;RINGBUF_EVENT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release\websrvr/websrvr.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release\websrvr/</AssemblerListingLocation> diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp index 6387eefa8b057c67221c3f46273a751a9cce1b94..5a31310774affa0d81c638976b05cc7d1a237252 100644 --- a/src/sbbs3/writemsg.cpp +++ b/src/sbbs3/writemsg.cpp @@ -1236,7 +1236,7 @@ bool sbbs_t::editfile(char *fname, bool msg) if(stricmp(msgtmp,path)) { removecase(msgtmp); if(fexistcase(path)) - fcopy(path, msgtmp); + CopyFile(path, msgtmp, /* failIfExists: */FALSE); } editor_inf(useron_xedit,/* to: */fname,/* from: */nulstr,/* subj: */nulstr,/* mode: */0,INVALID_SUB,/* tagfile: */NULL); @@ -1378,7 +1378,7 @@ void sbbs_t::forwardmail(smbmsg_t *msg, int usernumber) /* Security logging */ msg_client_hfields(msg,&client); - smb_hfield_str(msg,SENDERSERVER,startup->host_name); + smb_hfield_str(msg,SENDERSERVER, server_host_name()); username(&cfg,usernumber,touser); smb_hfield_str(msg,RECIPIENT,touser); diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp index 473f80119075096e765a6d0aea292ea9c4047313..0297e571abedeb494ce0e435d355def1f81c106e 100644 --- a/src/sbbs3/xtrn_sec.cpp +++ b/src/sbbs3/xtrn_sec.cpp @@ -212,7 +212,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl return; } - sprintf(str,"%s\n%s\n%s\n%s\n" + safe_snprintf(str, sizeof(str), "%s\n%s\n%s\n%s\n" ,name /* User name */ ,cfg.sys_name /* System name */ ,cfg.sys_op /* Sysop name */ @@ -220,7 +220,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl lfexpand(str,misc); write(file,str,strlen(str)); - sprintf(str,"%s\n%s\n%u\n%u\n%lu\n%s\n%lu\n%lu\n" + safe_snprintf(str, sizeof(str), "%s\n%s\n%u\n%u\n%lu\n%s\n%lu\n%lu\n" ,ctrl_dir /* Ctrl dir */ ,data_dir /* Data dir */ ,cfg.sys_nodes /* Total system nodes */ @@ -234,7 +234,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl lfexpand(str,misc); write(file,str,strlen(str)); - sprintf(str,"%u\n%u\n%s\n%c\n%u\n%s\n" + safe_snprintf(str, sizeof(str), "%u\n%u\n%s\n%c\n%u\n%s\n" ,useron.level /* User main level */ ,useron.level /* User transfer level */ ,useron.birth /* User birthday */ @@ -244,7 +244,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl lfexpand(str,misc); write(file,str,strlen(str)); - sprintf(str,"%u\n%u\n%x\n%lu\n%s\n%s\n" + safe_snprintf(str, sizeof(str), "%u\n%u\n%x\n%lu\n%s\n%s\n" "%s\n%s\n%s\n%s\n%s\n%s\n%lu\n" ,misc&(XTRN_STDIO|XTRN_CONIO) ? 0:cfg.com_port /* Com port or 0 if !FOSSIL */ ,cfg.com_irq /* Com IRQ */ @@ -295,7 +295,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl lfexpand(str,misc); write(file,str,strlen(str)); - sprintf(str,"%s\n%s\n%d\n%s\n%lu\n%s\n%s\n%s\n%s\n" + safe_snprintf(str, sizeof(str), "%s\n%s\n%d\n%s\n%lu\n%s\n%s\n%s\n%s\n" "%" PRIx32 "\n%d\n" ,ltoaf(useron.flags3,tmp) /* Flag set #3 */ ,ltoaf(useron.flags4,tmp2) /* Flag set #4 */ @@ -329,7 +329,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl if(tleft>0x7fff) /* Reduce time-left for broken 16-bit doors */ tleft=0x7fff; /* That interpret this value as a signed short */ - sprintf(str,"%u\n%s\n%s\n%s\n%u\n%c\n" + safe_snprintf(str, sizeof(str), "%u\n%s\n%s\n%s\n%u\n%c\n" ,useron.number /* User number */ ,name /* User name */ ,useron.name /* User real name */ @@ -340,7 +340,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl lfexpand(str,misc); write(file,str,strlen(str)); - sprintf(str,"%lu\n%s\n%lu\n%ld\n%u\n%u\n%u\n%ld\n%u\n" + safe_snprintf(str, sizeof(str), "%lu\n%s\n%lu\n%ld\n%u\n%u\n%u\n%ld\n%u\n" ,useron.cdt+useron.freecdt /* Gold */ ,unixtodstr(&cfg,useron.laston,tmp) /* User last on date */ ,cols /* User screen width */ @@ -353,7 +353,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl lfexpand(str,misc); write(file,str,strlen(str)); - sprintf(str,"%lu\n%s\n%s\n%s\n%lu\n%d\n%s\n%s\n" + safe_snprintf(str, sizeof(str), "%lu\n%s\n%s\n%s\n%lu\n%d\n%s\n%s\n" "%u\n%u\n%lu\n%u\n%lu\n%u\n%s\n" ,tleft /* Time left in seconds */ ,node_dir /* Gfiles dir (log dir) */ @@ -464,7 +464,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl lfexpand(str,misc); write(file,str,strlen(str)); - sprintf(str,"%u\n%lu\n%s\n%s\n%s\n%s" + safe_snprintf(str, sizeof(str), "%u\n%lu\n%s\n%s\n%s\n%s" "\n%s\n%02d:%02d\n%c\n" ,0 /* 30: Kbytes downloaded today */ ,(useron.cdt+useron.freecdt)/1024UL /* 31: Max Kbytes to download today */ diff --git a/src/sexpots/sexpots.c b/src/sexpots/sexpots.c index 568d5b8845cf3ec0d1cc1a8dba5ef67b03b4c79b..f46b39b47d6ed6603dc9a4f25acaf0d3df502f08 100644 --- a/src/sexpots/sexpots.c +++ b/src/sexpots/sexpots.c @@ -2,7 +2,7 @@ /* Synchronet External Plain Old Telephone System (POTS) support */ -/* $Id: sexpots.c,v 1.32 2019/05/05 22:48:33 rswindell Exp $ */ +/* $Id: sexpots.c,v 1.33 2020/09/11 22:48:33 rswindell Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * @@ -43,6 +43,7 @@ #include "dirwrap.h" #include "datewrap.h" #include "sockwrap.h" +#include "threadwrap.h" #include "ini_file.h" /* comio lib */ @@ -152,7 +153,10 @@ int usage(const char* fname) #endif "\n" ,getfname(fname) - ,NAME); +#if defined(_WIN32) + ,NAME +#endif + ); return 0; } @@ -788,8 +792,6 @@ BOOL wait_for_call(COM_HANDLE com_handle) { char str[128]; char* p; - BOOL result=TRUE; - DWORD events=0; time_t start=time(NULL); ZERO_VAR(cid_name); @@ -835,7 +837,7 @@ BOOL wait_for_call(COM_HANDLE com_handle) if(strncmp(p,"CONNECT ",8)==0) { long rate=atoi(p+8); if(rate) - SAFEPRINTF2(termspeed,"%u,%u", rate, rate); + SAFEPRINTF2(termspeed,"%ld,%ld", rate, rate); } else if(strncmp(p,"NMBR",4)==0 || strncmp(p,"MESG",4)==0) { p+=4; @@ -1139,7 +1141,7 @@ BYTE* telnet_interpret(BYTE* inbuf, int inlen, BYTE* outbuf, int *outlen) ,telnet_opt_desc(option)); /* sub-option terminated */ if(option==TELNET_TERM_TYPE && telnet_cmd[3]==TELNET_TERM_SEND) { - BYTE buf[32]; + char buf[32]; int len=sprintf(buf,"%c%c%c%c%s%c%c" ,TELNET_IAC,TELNET_SB ,TELNET_TERM_TYPE,TELNET_TERM_IS @@ -1150,7 +1152,7 @@ BYTE* telnet_interpret(BYTE* inbuf, int inlen, BYTE* outbuf, int *outlen) sendsocket(sock,buf,len); /* request_telnet_opt(TELNET_WILL, TELNET_TERM_SPEED); */ } else if(option==TELNET_TERM_SPEED && telnet_cmd[3]==TELNET_TERM_SEND) { - BYTE buf[32]; + char buf[32]; int len=sprintf(buf,"%c%c%c%c%s%c%c" ,TELNET_IAC,TELNET_SB ,TELNET_TERM_SPEED,TELNET_TERM_IS @@ -1186,7 +1188,7 @@ BYTE* telnet_interpret(BYTE* inbuf, int inlen, BYTE* outbuf, int *outlen) break; case TELNET_SEND_LOCATION: if(command==TELNET_DO) { - BYTE buf[128]; + char buf[128]; int len=safe_snprintf(buf,sizeof(buf),"%c%c%c%s %s%c%c" ,TELNET_IAC,TELNET_SB ,TELNET_SEND_LOCATION diff --git a/src/sexpots/sexpots.vcxproj b/src/sexpots/sexpots.vcxproj index b5f846a55cd59736d3800ed12bbff54dadff5116..43707514259c57cb9b1d3b9b9b0705318de33976 100644 --- a/src/sexpots/sexpots.vcxproj +++ b/src/sexpots/sexpots.vcxproj @@ -58,7 +58,7 @@ </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <StringPooling>true</StringPooling> <FunctionLevelLinking>true</FunctionLevelLinking> diff --git a/src/sexpots/targets.mk b/src/sexpots/targets.mk index b498d6a1cbf0454d0936e49b77c6e6e18caacb1c..7b82013b8129cee342b7605c45805ffd289ace0a 100644 --- a/src/sexpots/targets.mk +++ b/src/sexpots/targets.mk @@ -2,4 +2,14 @@ SEXPOTS = $(EXEODIR)$(DIRSEP)sexpots$(EXEFILE) all: xpdev-mt $(MTOBJODIR) $(EXEODIR) $(SEXPOTS) +ifdef SBBSEXEC +.PHONY: install +install: all + install $(EXEODIR)/* $(SBBSEXEC) + +.PHONY: symlinks +symlinks: all + ln -sfr $(EXEODIR)/* $(SBBSEXEC) +endif + $(SEXPOTS): $(XPDEV-MT_LIB) diff --git a/src/smblib/smblib.vcxproj b/src/smblib/smblib.vcxproj index fa3712691e4922889ceb377046ac547b524899f7..bec0680c3d9969f4d481e6ada0fad7c5b6ef2896 100644 --- a/src/smblib/smblib.vcxproj +++ b/src/smblib/smblib.vcxproj @@ -62,7 +62,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;SMB_EXPORTS;MD5_EXPORTS;B64_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release/smblib.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release/</AssemblerListingLocation> diff --git a/src/uifc/uifc.vcxproj b/src/uifc/uifc.vcxproj index 04d73d0139f36a8239d27431eff3c6468f28203b..6b2bf23ead80968936cf4926b8890ed0b3e998f0 100644 --- a/src/uifc/uifc.vcxproj +++ b/src/uifc/uifc.vcxproj @@ -88,7 +88,7 @@ <AdditionalIncludeDirectories>..\conio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release/uifc.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release/</AssemblerListingLocation> diff --git a/src/xpdev/dirwrap.c b/src/xpdev/dirwrap.c index 268aea1502dea16126db69ac21b6dcccd2fe5e88..2882ddaadf80f9809df2996a6ebe1922a82e8b50 100644 --- a/src/xpdev/dirwrap.c +++ b/src/xpdev/dirwrap.c @@ -1218,3 +1218,38 @@ int DLLCALL mkpath(const char* path) return(result); } + +#if !defined _WIN32 +BOOL CopyFile(const char* src, const char* dest, BOOL failIfExists) +{ + uint8_t buf[256 * 1024]; + FILE* in; + FILE* out; + BOOL success=TRUE; + + if(failIfExists && fexist(dest)) + return FALSE; + if((in=fopen(src,"rb"))==NULL) + return FALSE; + if((out=fopen(dest,"wb"))==NULL) { + fclose(in); + return FALSE; + } + + while(!feof(in)) { + size_t rd = fread(buf, sizeof(uint8_t), sizeof(buf), in); + if(rd < 1) + break; + if(fwrite(buf, sizeof(uint8_t), rd, out) != rd) { + success = FALSE; + break; + } + MAYBE_YIELD(); + } + + fclose(in); + fclose(out); + + return success; +} +#endif diff --git a/src/xpdev/dirwrap.h b/src/xpdev/dirwrap.h index c98f3f4f883b7f58b200744a56db4c1bc7673808..4bb505b22fdecd9691515fbf79e54c9988b1a5d1 100644 --- a/src/xpdev/dirwrap.h +++ b/src/xpdev/dirwrap.h @@ -250,6 +250,10 @@ DLLEXPORT int DLLCALL removecase(const char *path); #define removecase(x) remove(x) #endif +#if !defined _WIN32 +DLLEXPORT BOOL CopyFile(const char* src, const char* dest, BOOL failIfExists); +#endif + #if defined(__cplusplus) } #endif diff --git a/src/xpdev/xpdev.vcxproj b/src/xpdev/xpdev.vcxproj index 996a194f172db52020762d8efe5db7af784cd2d6..882e3da4bfefbb2eb5384284a9857a94b4928fae 100644 --- a/src/xpdev/xpdev.vcxproj +++ b/src/xpdev/xpdev.vcxproj @@ -84,7 +84,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;%(PreprocessorDefinitions);HAS_STDINT_H</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release/xpdev.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release/</AssemblerListingLocation> diff --git a/src/xpdev/xpdev_mt.vcxproj b/src/xpdev/xpdev_mt.vcxproj index 87f2bf91743ddda01267b42ace3a539dad49f2b6..bf2b0141b58cd5b662f3681018651db00764d91d 100644 --- a/src/xpdev/xpdev_mt.vcxproj +++ b/src/xpdev/xpdev_mt.vcxproj @@ -86,7 +86,7 @@ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;LINK_LIST_THREADSAFE;%(PreprocessorDefinitions);HAS_STDINT_H</PreprocessorDefinitions> <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeaderOutputFile>.\msvc.win32.release_mt/xpdev_mt.pch</PrecompiledHeaderOutputFile> <AssemblerListingLocation>.\msvc.win32.release_mt/</AssemblerListingLocation> diff --git a/text/.gitignore b/text/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..6b2e2808db4ff1e969462e836835f3e458b49c22 --- /dev/null +++ b/text/.gitignore @@ -0,0 +1 @@ +*.0??.* diff --git a/text/banner3.msg b/text/banner3.msg index db16738088a59ebe06ac7ee66021746a5869d67f..f21554bf92d89ffa8d5860258d1c60fa4534db72 100755 --- a/text/banner3.msg +++ b/text/banner3.msg @@ -1,2 +1,7 @@ - -NH4B�NB�H4�NB�H4��NB�H4������NB�H��NB�H�NB�H4�0�NB�H�NB�H4�NB�W �H7�0�N H4B�NB�H��NB�H�NB�H4��NB�H�NB�H�4��0�NB�H�4߱���0���NB�H�NB�H�������NB�H4�NB�H4���NB�H4��NB�H4�NB�H4�NB�������������W H7��0�7�0�N� H7��N H���N H��N H�7۱N�H7��N H���7�0�7�N�H�7�0����N� H7�0�7�N�H7��0��7�N � B���������������������������HW������7�N H7�0�N H�������7�0���������7�0�����N H���7��N�H����N H���N B�����������������4Kgj0B������������W H�۲N H��۲N�H�7�N �H7�0�N H��7�N H۲N H7�0ݲ�N H���7�0�7�N�H�7�N H��7�0��N H�۲N B���4Wbbs software0B���H4�NB�H4�NB�H4��NB�H4�����NB�H�NB�H��NB�H4�NB�HW�N� HB�NB�H4�NB�W �B�H4�0�NB�W H��N HB�NB�H��NB�H��NB�H���NB�H��4�NB�W H�N HB�NB�H�NB�H��4�NB�H4���������NB�H4��NB�H4�NB�Z +N +H4B�NB�H4�NB�H4��NB�H4������NB�H��NB�H�NB�H4�0�NB�H�NB�H4�NB�W �H7�0�N H4B�NB�H��NB�H�NB�H4��NB�H�NB�H�4��0�NB�H�4߱���0���NB�H�NB�H�������NB�H4�NB�H4���NB�H4��NB�H4�NB� +�������������W H7��0�7�0�N� H7��N H���N H��N H�7۱N�H7��N H���7�0�7�N�H�7�0����N� H7�0�7�N�H7��0��7�N � B������������� +�������������HW������7�N H7�0�N H�������7�0���������7�0�����N H���7��N�H����N H���N B���������������� +4Kgj0B������������W H�۲N H��۲N�H�7�N �H7�0�N H��7�N H۲N H7�0ݲ�N H���7�0�7�N�H�7�N H��7�0��N H�۲N B���4Wbbs software0B� +�H4�NB�H4�NB�H4��NB�H4�����NB�H�NB�H��NB�H4�NB�HW�N� HB�NB�H4�NB�W �B�H4�0�NB�W H��N HB�NB�H��NB�H��NB�H���NB�H��4�NB�W H�N HB�NB�H�NB�H��4�NB�H4���������NB�H4��NB�H4� +Z \ No newline at end of file diff --git a/text/menu/chat.msg b/text/menu/chat.msg index 83cff1b18bbc00d00262b7b09ea6eca3194c7fc5..ec06bf006e378c6723411d7080780cdde77ed0cc 100644 --- a/text/menu/chat.msg +++ b/text/menu/chat.msg @@ -5,7 +5,7 @@ ����4 HWJoin a Chat NB���� � HCJY NCJoin/initiate multinode chatW�B� � HCPNC Join/start private node/node chatG B� -� HCCY NCChat with @SYSOP-L##############@G B� +� HCCY NCChat with Sysop: HY@SYSAVAIL-L####@NG B� � HCTY NCTalk with The Guru (AI)W�B� � HCFY NCFinger (query) remote user/systemW B� � HCRY NCInternet Relay Chat (IRC)W�B� diff --git a/text/menu/e-mail.html b/text/menu/e-mail.html deleted file mode 100644 index 807f9fffad10446e5721331cc2c272365121d708..0000000000000000000000000000000000000000 --- a/text/menu/e-mail.html +++ /dev/null @@ -1,22 +0,0 @@ -<html> -<head><title>E-Mail menu</title></head> -<body> -<table> - <tr> - <td><a href="S">E-mail the SysOp</a></td> - <td><a href="U">E-mail a user</a></td> - </tr> - <tr> - <td><a href="R">Read your email</a></td> - <td><a href="F">Send feedback</a></td> - </tr> - <tr> - <td><a href="N">Send NetMail</a></td> - <td><a href="K">Read email you have send</a></td> - </tr> - <tr> - <td colspan="2"><a href="Q">Return to main menu</a></td> - </tr> -</table> -</body> -</html> diff --git a/text/menu/main.html b/text/menu/main.html deleted file mode 100644 index 76641541ebcbc56cd0566db68a77c3511e4bc52c..0000000000000000000000000000000000000000 --- a/text/menu/main.html +++ /dev/null @@ -1,75 +0,0 @@ -<html> -<head><title>Main Menu</title></head> -<body> -<table> - <tr> - <td> <a href="-">Previous Sub</a> </td> - <td> <a href="+">Next Sub</a> </td> - </tr> - <tr> - <td> <a href="[">Previous Group</a> </td> - <td> <a href="]">Next Group</a> </td> - </tr> - <tr> - <td> <a href="A">Auto Message</a> </td> - <td> <a href="B">Browse/New Message Scan</a> </td> - </tr> - <tr> - <td> <a href="C">Chat Section</a> </td> - <td> <a href="D">User Config</a> </td> - </tr> - <tr> - <td> <a href="E">E-Mail</a> </td> - <td> <a href="F">Find text in messages</a> </td> - </tr> - <tr> - <td> <a href="G">Text section</a> </td> - <td> <a href="I">Info section</a> </td> - </tr> - <tr> - <td> <a href="J">Select a new sub</a> </td> - <td> <a href="/L">List nodes</a> </td> - </tr> - <tr> - <td> <a href="M">Time bank</a> </td> - <td> <a href="N">New Message Scan</a> </td> - </tr> - <tr> - <td> <a href="/N">All new messages scan</a> </td> - <td> <a href="O">Log off</a> </td> - </tr> - <tr> - <td> <a href="/O">Log off NOW</a> </td> - <td> <a href="P">Post a message</a> </td> - </tr> - <tr> - <td> <a href="Q">QWK Section</a> </td> - <td> <a href="R">Scan posts</a> </td> - </tr> - <tr> - <td> <a href="S">Scan messages to you</a> </td> - <td> <a href="/S">Scan messages to you more?</a> </td> - </tr> - <tr> - <td> <a href="U">List Users</a> </td> - <td> <a href="/U">List all users</a> </td> - </tr> - <tr> - <td> <a href="X">Externals</a> </td> - <td> <a href="Z">Continuous new message scan</a> </td> - </tr> - <tr> - <td> <a href="/Z">Cont. new message scan more?</a> </td> - <td> <a href="*">Sub scan?</a> </td> - </tr> - <tr> - <td> <a href="/*">Sub scan true?</a> </td> - <td> <a href="&">Main config</a> </td> - </tr> - <tr> - <td> <a href="T">File transfers</a></td> - <td> <a href="~">Click here for an error</a> </td> - </tr> -</table> -</body> -</html> diff --git a/text/menu/maincfg.html b/text/menu/maincfg.html deleted file mode 100644 index 6befd177cb1d9ffab1cb7f9ab13848286cdc4ce8..0000000000000000000000000000000000000000 --- a/text/menu/maincfg.html +++ /dev/null @@ -1,18 +0,0 @@ -<html> -<head><title>Main configuration</title></head> -<body> -<table> - <tr> - <td><a href="N">New Message scan</a></td> - <td><a href="S">To you scan</a></td> - </tr> - <tr> - <td><a href="P">Message pointers</a></td> - <td><a href="I">Re-init pointers</a></td> - </tr> - <tr> - <td colspan="2"><a href="Q">Return to previous menu</a></td> - </tr> -</table> -</body> -</html> diff --git a/text/menu/maininfo.html b/text/menu/maininfo.html deleted file mode 100644 index beed5e749d7e6869d2b1b087b116e86c8dbb945c..0000000000000000000000000000000000000000 --- a/text/menu/maininfo.html +++ /dev/null @@ -1,18 +0,0 @@ -<html> -<head><title>Info section</title></head> -<body> -<table> - <tr> - <td><a href="I">System information</a></td> - <td><a href="S">Sub info</a></td> - </tr> - <tr> - <td><a href="Y">Your info</a></td> - <td><a href="V">Version Info</a></td> - </tr> - <tr> - <td colspan="2"><a href="Q">Return to previous menu</a></td> - </tr> -</table> -</body> -</html> diff --git a/text/menu/renegade/email.asc b/text/menu/renegade/email.asc index 6616545401a4b7773c47cc00ca0253ae5eeaa495..f8a849202ee366a518f60ae9242923585da97189 100644 --- a/text/menu/renegade/email.asc +++ b/text/menu/renegade/email.asc @@ -1,7 +1,8 @@ -�nhr������������������������������������������������������Ŀ -��4 wSynchronet Reneclone Email System Menu r0� -��������������������������������������������������������� - c4��������������������������������������������������������������������������Ŀ0 - 4� [yRc]ead Email [yEc]nter Email [yNc]etmail �0 - 4� [yVc]iew Outgoing [yQc]uit to Main [yGc]oodbye [y/Gc]oodbye Fast! �0 - 4����������������������������������������������������������������������������0n +N�HR������������������������������������������������������Ŀ +N�HR�4 WSynchronet Reneclone Email System Menu 0R� +N�HR��������������������������������������������������������4Y@HOT@ +0R 4C��������������������������������������������������������������������������Ŀ +0 4� [YRC]ead Email [YEC]nter Email [YNC]etmail � +0 4� [YVC]iew Outgoing [YQC]uit to Main [YGC]oodbye [Y/GC]oodbye Fast! � +0 4���������������������������������������������������������������������������� +Z \ No newline at end of file diff --git a/text/menu/renegade/main.asc b/text/menu/renegade/main.asc index 51eca948e9520182fe42461987427032af8163ef..68d4a3426e8c650157969e9e82f2154ead4796b7 100644 --- a/text/menu/renegade/main.asc +++ b/text/menu/renegade/main.asc @@ -1,12 +1,13 @@ -�nhr������������������������������������������������������Ŀ -��4 wSynchronet Reneclone Main System Menu r0� -��������������������������������������������������������� - c4��������������������������������������������������������������������������Ŀ0 - 4� [yMc]essage System [yFc]ile System [yOc]nline System [yEc]mail System �0 - 4� [ySc]ystem Bulletins [yUc]ser Listing [yYc]our Info [yAc]uto-message �0 - 4� [yWc]ho's online [yLc]ist of Callers [y!c]Offline Mail [yPc]ersonal Info �0 - 4� [yNc]ote to SysOp [yCc]hat System [yIc]nfo on System [yXc]pert Toggle �0 - 4� [yGc]oodbye & Logoff [y/Gc]oodbye Fast! [y$c]Time Bank [y/Lc]ist Nodes �0 - 4����������������������������������������������������������������������������0n -( - hc[y*c] Sysop Menun) +N�HR������������������������������������������������������Ŀ +N�HR�4 WSynchronet Reneclone Main System Menu 0R� +N�HR��������������������������������������������������������4Y@HOT@ +0R 4C��������������������������������������������������������������������������Ŀ +0 4� [YMC]essage System [YFC]ile System [YOC]nline System [YEC]mail System � +0 4� [YSC]ystem Bulletins [YUC]ser Listing [YYC]our Info [YAC]uto-message � +0 4� [YWC]ho's online [YLC]ist of Callers [Y!C]Offline Mail [YPC]ersonal Info � +0 4� [YNC]ote to SysOp [YCC]hat System [YIC]nfo on System [YXC]pert Toggle � +0 4� [YGC]oodbye & Logoff [Y/GC]oodbye Fast! [Y$C]Time Bank [Y/LC]ist Nodes � +0 4���������������������������������������������������������������������������� + +N�HC[Y@~*@C] Sysop Menu +Z \ No newline at end of file diff --git a/text/menu/renegade/message.asc b/text/menu/renegade/message.asc index 8fcb58d5e94de600f73ea5f331c89506e2eb38b4..4c85314777a89de02daa6764db814f47a9180c95 100644 --- a/text/menu/renegade/message.asc +++ b/text/menu/renegade/message.asc @@ -1,10 +1,11 @@ -�nhr������������������������������������������������������Ŀ -��4 wSynchronet Reneclone Message System Menu r0� -��������������������������������������������������������� - c4�������������������������������������������������������������������������Ŀ0 - 4� [y#c]Sub Change [y/#c]Group Change [y[c]Previous Sub [y]c]Next Sub �0 - 4� [yCc]hat System [yRc]ead Messages [ySc]can Messages [yPc]ost Message �0 - 4� [yFc]ile Menu [yGc]oodbye [y/Gc]oodbye [yUc]sers w/Access �0 - 4� [yNc]ew Message Scan [yQc]uit to Main [yEc]nter Email [yZc]Set Scan Areas�0 - 4� [yAc]rea List [yJc]ump to Area [y/Lc]ist Nodes [yYc]our Messages �0 - 4���������������������������������������������������������������������������0n +N�HR������������������������������������������������������Ŀ +N�HR�4 WSynchronet Reneclone Message System Menu 0R� +N�HR��������������������������������������������������������4Y@HOT@ +0R 4C�������������������������������������������������������������������������Ŀ +0 4� [Y#C]Sub Change [Y/#C]Group Change [Y[C]Previous Sub [Y]C]Next Sub � +0 4� [YCC]hat System [YRC]ead Messages [YSC]can Messages [YPC]ost Message � +0 4� [YFC]ile Menu [YGC]oodbye [Y/GC]oodbye [YUC]sers w/Access � +0 4� [YNC]ew Message Scan [YQC]uit to Main [YEC]nter Email [YZC]Set Scan Areas� +0 4� [YAC]rea List [YJC]ump to Area [Y/LC]ist Nodes [YYC]our Messages � +0 4��������������������������������������������������������������������������� +Z \ No newline at end of file diff --git a/text/menu/renegade/transfer.asc b/text/menu/renegade/transfer.asc index 1d72a4348a7d42f0d5df6fd9e9e5c213e4cd554d..113833d3443fc787f9c56d9026a837e8538ee7a5 100644 --- a/text/menu/renegade/transfer.asc +++ b/text/menu/renegade/transfer.asc @@ -1,13 +1,14 @@ -�nhr������������������������������������������������������Ŀ -��4 wSynchronet Reneclone File System Menu r0� -��������������������������������������������������������� - c4��������������������������������������������������������������������������Ŀ0 - 4� [y#c]Dir Change [y/#c]Lib Change [y[c]Previous Dir [y]c]Next Dir �0 - 4� [y/Ac]rchive Menu [yAc]rea List [yCc]hat System [yDc]ownload �0 - 4� [yEc]nter Batch Mode [yFc]ind Description [yGc]oodbye [y/Gc]oodbye �0 - 4� [yPc]ointer Date [yLc]ist Files [yMc]essage Menu [yNc]ew Files �0 - 4� [yUc]pload! [yQc]uit to Main [yVc]iew Archive [ySc]earch Filespec �0 - 4� [yYc]our File info [yJc]ump to Area [y/Lc]ist Nodes �0 - 4����������������������������������������������������������������������������0n -( - hc[y*c] Sysop Menun) +N�HR������������������������������������������������������Ŀ +N�HR�4 WSynchronet Reneclone File System Menu 0R� +N�HR��������������������������������������������������������4Y@HOT@ +0R 4C��������������������������������������������������������������������������Ŀ +0 4� [Y#C]Dir Change [Y/#C]Lib Change [Y[C]Previous Dir [Y]C]Next Dir � +0 4� [Y/AC]rchive Menu [YAC]rea List [YCC]hat System [YDC]ownload � +0 4� [YEC]nter Batch Mode [YFC]ind Description [YGC]oodbye [Y/GC]oodbye � +0 4� [YPC]ointer Date [YLC]ist Files [YMC]essage Menu [YNC]ew Files � +0 4� [YUC]pload! [YQC]uit to Main [YVC]iew Archive [YSC]earch Filespec � +0 4� [YYC]our File info [YJC]ump to Area [Y/LC]ist Nodes � +0 4���������������������������������������������������������������������������� + +N�HC[Y@~*@C] Sysop Menu +Z \ No newline at end of file diff --git a/text/menu/tail.asc b/text/menu/tail.asc index 3abbb8b4f4226a1cbeb270bacfb2f70efa492acb..48a369fc9e0c1a539928dbde90153ce780e9a948 100644 --- a/text/menu/tail.asc +++ b/text/menu/tail.asc @@ -1 +1 @@ -n h4y Anytime c� hCtrl-U n4cWho's online hCtrl-P n4cSend private msg hCtrl-C n4cAbort cmd/text n +n h4y Anytime c� h@~Ctrl-U~\x15@ n4cWho's online h@~Ctrl-P~\x10@ n4cSend private msg h@~Ctrl-C~\x03@ n4cAbort cmd/text n diff --git a/text/menu/transfer.html b/text/menu/transfer.html deleted file mode 100644 index d37cc6b0b2a764cdf2329b691343d4ef570b697e..0000000000000000000000000000000000000000 --- a/text/menu/transfer.html +++ /dev/null @@ -1,68 +0,0 @@ -<html> -<head><title>File Transfers</title></head> -<body> -<table> - <tr> - <td><a href="-">Previous directory</a></td> - <td><a href="+">Next directory</a></td> - </tr> - <tr> - <td><a href="[">Previous library</a></td> - <td><a href="]">Next library</a></td> - </tr> - <tr> - <td><a href="B">Batch menu</a></td> - <td><a href="C">Chat section</a></td> - </tr> - <tr> - <td><a href="D">Download files</a></td> - <td><a href="E">List extended file information</a></td> - </tr> - <tr> - <td><a href="F">Find text in descriptions</a></td> - <td><a href="I">File information</a></td> - </tr> - <tr> - <td><a href="J">Change dir/lib</a></td> - <td><a href="L">List files</a></td> - </tr> - <tr> - <td><a href="N">New file scan</a></td> - <td><a href="O">Log off</a></td> - </tr> - <tr> - <td><a href="R">Remove/Edit files</a></td> - <td><a href="S">Search for filename</a></td> - </tr> - <tr> - <td><a href="T">File transfers</a></td> - <td><a href="U">Upload file</a></td> - </tr> - <tr> - <td><a href="V">View files</a></td> - <td><a href="Z">Upload to SysOp</a></td> - </tr> - <tr> - <td><a href="*">Change dir/lib</a></td> - <td><a href="/D">Download user files</a></td> - </tr> - <tr> - <td><a href="/F">Find in all</a></td> - <td><a href="/L">List all</a></td> - </tr> - <tr> - <td><a href="/N">New scan all</a></td> - <td><a href="/O">Log off NOW</a></td> - </tr> - <tr> - <td><a href="/S">Scan all</a></td> - <td><a href="/U">Upload to user</a></td> - </tr> - <tr> - <td><a href="/*">List libs</a></td> - <td><a href="&">Transfer confi</a></td> - </tr> -</table> -<center><a href="Q">Return to previous menu</a></center> -</body> -</html> diff --git a/text/menu/wwiv/main.asc b/text/menu/wwiv/main.asc index 81f5f4e93b3fef0654747370a0e5f19092e2e37f..834bf8cab3a0f6c71b194e162d5a0ebf0f19375f 100644 --- a/text/menu/wwiv/main.asc +++ b/text/menu/wwiv/main.asc @@ -1,2 +1,2 @@ -�nh4 WWIV Main Menu 0 -nhb������������������������������������������������������������������������������ͻ����nh4nh4 nh4Miscellaneous nhb��������nh4nh4 nh4System Features nhb�������nh4nh4 nh4Message Base Commands nhb����Ķ�nhcA nhyAuto Message�nhb�nhcE nhyE-Mail Menu�nhb�nhcN nhyNew Message Scan�nhb��nhcL nhyBBS List�nhb�nhcD nhyDefault Section�nhb�nhcP nhyPost Message�nhb��nhcI nhySystem Info�nhb�nhcG nhyText File Section nhb�nhcQ nhyQuick Scan Current Msg Base nhb��nhcO nhyLog Off�nhb�nhcT nhyTransfer Area�nhb�nhcS nhyScan Current Message Base nhb��nhc/O nhyFast Logoff�nhb�nhc. nhyOn-Line Programs nhb�nhcZ nhyScan New Messages Non-Stop nhb��nhcU nhyUser List�nhb�nhcM nhyQWK Mail Packer�nhb�nhc* nhyList Msg Base Titles�nhb������nh4nh4 nh4Message Scansnhb���Ĵnhc& nhyMessage Base Config nhb�nhc/* nhyList Msg Area Titles�nhb��nhcY nhyScan for Your Msgs nhb�nhcC nhyChat Area�nhb�nhc} nhyMove One Msg Base Higher nhb��nhcF nhyFind Text in Msgs nhb�nhcJ nhyJump to Msg Base nhb�nhc] nhyMove One Msg Area Higher nhb�����������������������Ĵnhc$ nhyTime/Credit Bank nhb�nhc{ nhyMove One Msg Base Lower�nhb�� nhcCTRL-U nhyWho's Online nhb�����������������������Ĵnhc[ nhyMove One Msg Area Lower�nhb�� nhcCTRL-P nhyPage/Send Message to Another User nhb�nhc# nhyEnter number of Msg Base nhb�� nhcCTRL-C nhyAbort Command/Menu�nhb�nhc/# nhyEnter Number of Msg Area nhb�������������������������������������������������������������������������������ͼn \ No newline at end of file +N�H4 WWIV Main Menu N�HC@HOT@ +B������������������������������������������������������������������������������ͻ����4W Miscellaneous 0B��������4W System Features 0B�������4W Message Base Commands 0B����Ķ�CA YAuto MessageN�HB�CE YE-Mail MenuN�HB�CN YNew Message ScanN�HB��CL YBBS ListN�HB�CD YDefault SectionN�HB�CP YPost MessageN�HB��CI YSystem InfoN�HB�CG YText File SectionN�HB�CQ YQuick Scan Current Msg Base B��CO YLog OffN�HB�CT YTransfer AreaN�HB�CS YScan Current Message BaseN�HB��C/O YFast LogoffN�HB�C. YOn-Line ProgramsN�HB�CZ YScan New Messages Non-Stop B��CU YUser ListN�HB�CM YQWK Mail PackerN�HB�C* YList Msg Base TitlesN�HB������4W Message Scans0B���ĴC& YMessage Base Config B�C/* YList Msg Area TitlesN�HB��CY YScan for Your Msgs B�CC YChat AreaN�HB�C} YMove One Msg Base HigherN�HB��CF YFind Text in Msgs B�CJ YJump to Msg BaseN�HB�C] YMove One Msg Area HigherN�HB�����������������������ĴC$ YTime/Credit BankN�HB�C{ YMove One Msg Base LowerN�HB�� NCTRL-UHC YWho's Online B�����������������������ĴC[ YMove One Msg Area LowerN�HB�� NCTRL-PHC YPage/Send Message to Another UserN�HB�C# YEnter number of Msg BaseN�HB�� NCTRL-CHC YAbort Command/MenuN�HB�C/# YEnter Number of Msg AreaN�HB�������������������������������������������������������������������������������ͼZ \ No newline at end of file diff --git a/text/menu/wwiv/transfer.asc b/text/menu/wwiv/transfer.asc index 8e4920fc73bf7e234b7b1550619b93a92547b534..a7c2c5e6af89d3d4f1a6117c431fc4f12ba45589 100644 --- a/text/menu/wwiv/transfer.asc +++ b/text/menu/wwiv/transfer.asc @@ -1,2 +1,2 @@ -�nh4 WWIV Transfer Menu 0 -ng����������ng4 nh4File Transfers ng�����������������������ng4 nh4File Searches ng��������������ķ� nhbD nhc> nhyDownload a File�ng� nhbF nhc> nhySearch by File Description�ng�� nhbR nhc> nhyRemove a File You Uploaded�ng� nhbS nhc> nhySearch by File Name�ng�� nhbU nhc> nhyUpload a File�ng� nhbL nhc> nhyList Files - Current Directory�ng�� nhbZ nhc> nhyUpload a File to Sysop�ng� nhbN nhc> nhyList all New Files�ng�� nhbE nhc> nhyExtended File Info�ng� nhb* nhc> nhyList all Directories in Library ng�� nhbB nhc> nhyBatch Download/Upload�ng�nhb/* nhc> nhyList all Libraries�ng��nhb/D nhc> nhyDownload from user�ng� nhb# nhc> nhySelect Directory�ng��nhb/U nhc> nhyUpload to User�ng�nhb/# nhc> nhySelect Library�ng�����������ng4 nh4Miscellaneous ng������������Ķ nhb> nhc> nhyMove Forward One Directory�ng�� nhbC nhc> nhyChat Menu�ng� nhb+ nhc> nhyMove Forward One Directory�ng�� nhbO nhc> nhyLog Off�ng� nhb] nhc> nhyMove Forward One Library�ng��nhb/O nhc> nhyFast Log Off�ng� nhb< nhc> nhyMove Backward One Directory�ng�� nhbP nhc> nhySet New Search Date�ng� nhb- nhc> nhyMove Backward One Directory�ng�� nhbQ nhc> nhyQuit to Main Menu�ng� nhb[ nhc> nhyMove Backward One Library�ng�� nhbT nhc> nhySet Transfer Options�ng� nhbJ nhc> nhyJump to New File Area�ng�� nhbY nhc> nhyYour Transfer Stats�ng����������������������������������������Ķ����������ng4 nh4Archive Commands ng���������Ķ nhcCtrl U - Who's Online�ng�� nhbV nhc> nhyList Files in Archive�ng� nhcCtrl P - Send Private Message�ng�� nhbG nhc> nhyAccess Archive Command Menu�ng� nhcCtrl K - Ctrl-key Menu�ng�������������������������������������������������������������������������������Ľ \ No newline at end of file +N�H4 WWIV Transfer Menu N�HB@HOT@ +NG����������4 HWFile Transfers NG�����������������������4 HWFile Searches NG��������������ķ� HBD C> YDownload a FileN�G� HBF C> YSearch by File DescriptionN�G�� HBR C> YRemove a File You UploadedN�G� HBS C> YSearch by File NameN�G�� HBU C> YUpload a FileN�G� HBL C> YList Files - Current DirectoryN�G�� HBZ C> YUpload a File to SysopN�G� HBN C> YList all New FilesN�G�� HBE C> YExtended File InfoN�G� HB* C> YList all Directories in LibraryN�G�� HBB C> YBatch Download/UploadN�G�HB/* C> YList all LibrariesN�G��HB/D C> YDownload from userN�G� HB# C> YSelect DirectoryN�G��HB/U C> YUpload to UserN�G�HB/# C> YSelect LibraryN�G�����������4 HWMiscellaneous NG������������Ķ HB> C> YMove Forward One DirectoryN�G�� HBC C> YChat MenuN�G� HB+ C> YMove Forward One DirectoryN�G�� HBO C> YLog OffN�G� HB] C> YMove Forward One LibraryN�G��HB/O C> YFast Log OffN�G� HB< C> YMove Backward One DirectoryN�G�� HBP C> YSet New Search DateN�G� HB- C> YMove Backward One DirectoryN�G�� HBQ C> YQuit to Main MenuN�G� HB[ C> YMove Backward One LibraryN�G�� HBT C> YSet Transfer OptionsN�G� HBJ C> YJump to New File AreaN�G�� HBY C> YYour Transfer StatsN�G����������������������������������������Ķ����������4 HWArchive Commands NG���������Ķ HCCTRL-U - Who's OnlineN�G�� HBV C> YList Files in ArchiveN�G� HCCTRL-P - Send Private MessageN�G�� HBG C> YAccess Archive Command MenuN�G� HCCTRL-K - Ctrl-key MenuN�G�������������������������������������������������������������������������������ĽZ \ No newline at end of file diff --git a/text/menu/xfercfg.html b/text/menu/xfercfg.html deleted file mode 100644 index fd3fb73fa6330366694cd606c4e2ad10cc805956..0000000000000000000000000000000000000000 --- a/text/menu/xfercfg.html +++ /dev/null @@ -1,15 +0,0 @@ -<html> -<head><title>File Transfer configuration</title></head> -<body> -<table> - <tr> - <td><a href="P">Set newscan time</a></td> - <td><a href="B">Toggle batch</a></td> - </tr> - <tr> - <td><a href="E">Toggle extended descriptions</a></td> - <td><a href="Q">Return to previous menu</a></td> - </tr> -</table> -</body> -</html> diff --git a/text/menu/xferinfo.html b/text/menu/xferinfo.html deleted file mode 100644 index fcec63ad0f169ca66c23a97182159f7c63905386..0000000000000000000000000000000000000000 --- a/text/menu/xferinfo.html +++ /dev/null @@ -1,16 +0,0 @@ -<html> -<head><title>File Info</title></head> -<body> -<table> - <tr> - <td><a href="T">Transfer Policy</a></td> - <td><a href="Y">Your info</a></td> - </tr> - <tr> - <td><a href="D">Directory Info</a></td> - <td><a href="U">List Users</a></td> - </tr> -</table> -<center><a href="Q">Return to previous menu</a></td> -</body> -</html> diff --git a/text/sbbs.msg b/text/sbbs.msg index 7dd0d8e3ca1e28d98421cd74aa375cb0c1e2c8cc..711e55aefaa75c680e04d43c4199285a714fc5ae 100644 --- a/text/sbbs.msg +++ b/text/sbbs.msg @@ -10,7 +10,7 @@ w Synchronet BBS for @PLATFORM@ - Version @FULL_VER@ w @COPYRIGHT@ - http://www.synchro.net gh -32-bit Multi-threaded Bulletin Board System Software for the Internet Age +Native Multi-threaded Bulletin Board System Software for the Internet Age ng Integrated TCP/IP Servers: hong Telnet/RLogin/SSH hong SMTP/POP3 (inbound and outbound e-mail) @@ -19,7 +19,7 @@ Integrated TCP/IP Servers: hong Telnet/RLogin/SSH hong Web (HTTP with server-side JavaScript and CGI) hong Finger, Gopher, and IRC h -Native versions for Win32 and Unix (e.g. Linux, FreeBSD, and OpenBSD) platforms +Native versions for Win32 and Unix-like (e.g. Linux and FreeBSD) platforms n@CLS@----------------------------------------------------------------------------- hRemembering these keys will help you enjoy your cSynchronetw Telnet experience: n----------------------------------------------------------------------------- diff --git a/web/lib/leftnav_html.ssjs b/web/lib/leftnav_html.ssjs index 16e63565868d8fc49b959b89d5ca0f5aac8ee42b..4b750f0afb21c338d3309ec7e38594191e4a821f 100644 --- a/web/lib/leftnav_html.ssjs +++ b/web/lib/leftnav_html.ssjs @@ -16,7 +16,7 @@ template.ftp_url += host; if(ftp_port!=21) template.ftp_url += ftp_port; - template.ftpidx ="/00index.html?$" + new Date().valueOf().toString(36); + template.ftpidx ="/"; template.ftpqwk = "/" + system.qwk_id.toLowerCase() + ".qwk"; } diff --git a/web/root/telnet/BUGS b/web/root/telnet/BUGS deleted file mode 100644 index e627e4b6131cd7a048f91bc851d60b015761d10a..0000000000000000000000000000000000000000 --- a/web/root/telnet/BUGS +++ /dev/null @@ -1,19 +0,0 @@ -The Java(tm) Telnet Applet - -There are still some bugs we know of and we will draw attention to during -development. Take a look at http://www.first.gmd.de/persons/leo/java/Telnet -from time to time to get new versions or mail to leo@first.gmd.de to get -notified of new versions. - -Report bugs to leo@first.gmd.de stating the Operating System you use plus -the Web browser or Applet Viewer version. Attach the java console log if -possible. - -Known BUGS: - - * There is still a bug when you try to resize the window too much. - SYMPTOMS: The font/screen rssize gets switched off and the font - is set to default - WORKAROUND: None yet. - - * Redraw problems on Win* platforms. diff --git a/web/root/telnet/CHANGES b/web/root/telnet/CHANGES deleted file mode 100644 index 9b0e4fa5bdfc5b05c86a7c4d050b8145ed142c6f..0000000000000000000000000000000000000000 --- a/web/root/telnet/CHANGES +++ /dev/null @@ -1,563 +0,0 @@ -1999-04-09 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/MudConnector.java: Patched to make it compilable with jdk 1.2 - - * modules/ButtonBar.java: - There was a bug, when adding an input field the button event handler was not - initialized. :-( - -1999-03-20 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: - When linefeeding, we may cross from top into the scrolling region. - bug found & fixed by Greg Doughty <gmdoughty@lucent.com> - - * display/CharDisplay.java: - small fixes by Greg Doughty <gmdoughty@lucent.com> - (drawline & brightness for bold attribute) - -1999-03-04 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * telnet.java: Default connection goes to the web server - -1999-03-03 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: - why did we ignore control-Fx ? seems to have been introduced by 1.22 (Rays patches) - -1999-03-01 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: - backspace did not backspace in some editors (ESC[P should delete at least 1 char) - originmode renamed to moveoutsidemargins, some places in code fixed. - (vi O command). - -1998-12-01 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: \xxxx escapes - - * telnet.java: localecho = no/yes/auto (auto is default) - -1998-08-07 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: *** empty log message *** - -1998-03-18 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: patched a scrollbar bug - -1998-03-07 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: *** empty log message *** - - * display/vt320.java: added documentation. a bit ;) - - * display/vt320.java: - some changes and additions to function key handling (contributed by Mike Scott <MIMS@chevron.com>, cleaned up by me :) - -1998-02-24 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/ButtonBar.java: text is cleared after send - -1998-02-23 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/vt320.java: - bugfix for unEscape, while even number of chars, it had to end with a - backslash :( - -1998-02-17 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: argl, ESC wasn't replaced - - * display/vt320.java: ARGH. unEscape did not work - -1998-02-09 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * socket/TelnetIO.java, telnet.java, display/CharDisplay.java: - *** empty log message *** - - * telnet.java: download for executables - -1997-12-16 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * socket/TelnetIO.java, telnet.java: *** empty log message *** - - * socket/TelnetIO.java, modules/BSXModule.java: - a new module, back from the very first version of the telnet ;-) - - * display/CharDisplay.java: *** empty log message *** - - * telnet.java: BSX has been added to the modules list for compiling - - * modules/ButtonBar.java: *** empty log message *** - -1997-11-07 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: ESC [ G added - - * display/vt320.java: ESC [ d implemented - -1997-11-04 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/ButtonBar.java: - ButtonBar text input field accept the return key now! - -1997-11-03 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: some more originmode fixes - - * display/SoftFont.java: added 0x2666 , BLACK DIAMOND? - - * display/vt320.java: ESC M fixed - scrollregions/cursorpositioning fixed - didn't scroll when in last line... fixed - -1997-11-03 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/Script.java: Script now includes dialog popup support - - * display/vt320.java: documentation for F-keys - -1997-10-31 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/SoftFont.java, display/vt320.java: - ESC [ P fixed (vanishing text in vi I think), - ESC [ @ added (cmdline editing bash), - statusline handling removed again (too broken for good), - misc characterset fixes - -1997-10-30 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/Script.java: - Included support for Dialog prompting, after an idea from - -> albert s boyers <boyers@minniemouse.cemax.com> - - * display/CharDisplay.java: *** empty log message *** - - * telnet.java: My version of index.html got corrupted. - I have removed the output of module names from telnet.java. - -1997-10-15 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: hmm, don't need CSI Pn $ - ? - -1997-10-15 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java, display/vt320.java: - First try on a status line. - -1997-10-14 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: *** empty log message *** - -1997-10-13 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: prelim statusline support - - * display/CharDisplay.java: - windowBase doesn't belong into calc. of the X cursorposition, Leo!!! - -1997-10-10 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: scrollback buffer bug fixed - -1997-10-08 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/ButtonBar.java: Switched back to FlowLayout. - -1997-10-07 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/CharDisplay.java: selectionend underflows fixed too - -1997-09-30 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: 8 bit CSI was wrong - RI added - - * display/CharDisplay.java: - fix selection overflows when resizing on Win* - -1997-09-05 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: a bit more debugoutput - -1997-09-05 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * socket/TelnetWrapper.java: *** empty log message *** - -1997-09-05 Marcus Meissner <marcus@tanis.first.gmd.de> - - * socket/TimedOutException.java: new file by George Ruban - - * socket/TelnetIO.java: George Ruban added available - -1997-08-30 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/SoftFont.java: - square root, black square added. one char fixed - - * display/CharDisplay.java: - colors by default darker so brightness works better ;) - - * display/vt320.java: - fixed focus problem in NS4 by using display.requestFocus instead of just requestFocus - -1997-08-29 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: debuyg off - - * display/vt320.java: - report chars >0x100, where no softfont is present. - fixed 1 character, added DARK SHADE, BLACK SQUARE, SQUARE ROOT - -1997-08-18 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/ButtonBar.java: *** empty log message *** - - * modules/ButtonBar.java: GridLayout error - - * modules/ButtonBar.java: changing the configuration... - - * display/CharDisplay.java: - small bugfix, setting the font only once in paint() - - * telnet.java: - First attempts to ease module configuration (configuration file) - -1997-08-17 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: @ can now be generated on german keyboards - -1997-08-07 Marcus Meissner <marcus@tanis.first.gmd.de> - - * display/vt320.java: added origin mode (vor ESC [ .. H). - fixed tabsetting. - (two vttest problems) - - * display/CharDisplay.java: - deleteLine fixed... was copying one line too many - -1997-08-02 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: gr mapping broken - -1997-07-25 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: - basic charset handling fixed, charset G2/G3 switchers added. (still lacking) - -1997-07-24 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/ButtonBar.java: gridLayout for ButtonBar - - * modules/ButtonBar.java: *** empty log message *** - - * display/CharDisplay.java: - I have fixed the scrollBar bug. Expect a strange looking scrollbar under - Windows 95!, but it works as expected! - - * telnet.java, appWrapper.java: - There is a bug I cannot explain, when using the "startButton" with - appWrapper. The telnet window will black out when iconizing the - browser window. However, resizing the telnet window redisplays its - contents. - -1997-07-21 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: changed bare ESC to \u001b - -1997-07-10 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: --debugoutput - - * display/CharDisplay.java: - deleteLine: in case of a specified scroll area, deleteLine's bottom was 1 too less (second part of emacs ^K bug) - -1997-07-09 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: debug off - -1997-07-09 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/TextLabel.java: a simple applet to display text labels - -1997-07-09 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: - CSI Pn M was deleting one less line than desired.... one part of emacs ^K problem fixed - -1997-07-08 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/ButtonBar.java, appWrapper.java: - reattaching applet when clicking on the space on the web browser - - * modules/ButtonBar.java, appWrapper.java, frame.java, telnet.java: - Closing the frame of a detached window destroys it! - -1997-07-04 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/SoftFont.java: decreased memory usage... - - * display/vt320.java: - use 8bit control chars only when not using ibmcharset... - - * display/SoftFont.java: *** empty log message *** - - * display/SoftFont.java: - speed up for softfonts by directly specifying fillrects (not complete) - -1997-07-01 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * telnet.java, appWrapper.java: *** empty log message *** - - * modules/ButtonBar.java: - When no parent window was created, destroy applet window. - - * appWrapper.java: *** empty log message *** - -1997-07-01 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: - oops, some TSTATE_xxx weren't switching back to TSTATE_DATA - -1997-06-30 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * appWrapper.java: added more documentation, more changes to come - -1997-06-29 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * appWrapper.java: - The appWrapper can now only display a button to launch the applet - -1997-06-29 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: use 8bit control chars even when using ibmcharset - - * display/SoftFont.java: *** empty log message *** - - * display/vt320.java: - use cp431 (doslatin1us) instead of cp850 (doslatin1) ... most bbs systems - seem to use this. - - * display/CharDisplay.java: - added softfont capability. - CharDisplay is now able to display softfonts (rendered by SoftFont) and - standard fonts so the loss of speed should be marginal. - - some cleanups in paint() - - * display/SoftFont.java: - a softfont emulator capable to display usually missing UNICODE characters - (currently used for line and boxdrawings in the IBM PC charset) - -1997-06-09 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: - don't handle chars as bit-8-set VT sequences when using the IBM charset - -1997-06-08 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: - hmm, telnet linefeed string changed from \r\0 to \r\n (CR LF?) (RFC 1123) - -1997-05-27 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: there was a nullpointer bug - - * tools/proxy.java: added date and time logging - -1997-05-27 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: - a lot of additions and fixes done by "Ray Whitmer <raywhitmer@itsnet.com>" - - key handling (esp. function key, return etc.) - - Emulation fixes (a lot of them) - - VMS additions - -1997-05-27 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * socket/TelnetIO.java, display/vt320.java, appWrapper.java, telnet.java: - included version information for online retrieval - -1997-05-27 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: *** empty log message *** - -1997-05-27 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: documentation for setScrollbar() - -1997-05-26 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java, display/vt320.java: - moved the scrollbar to the character display - -1997-05-20 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: changed VTibmcharset to VTcharset - - * display/vt320.java: added docu - - * display/vt320.java: - scratch any \r input from terminal - - ibm charset mapping added - -1997-05-08 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: - added restore default color (fore and background) in ESC [ Pn* m - -1997-05-06 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: fixed insertmode ESC [ 4 l/h - -1997-05-05 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: some more documentation - - * display/CharDisplay.java: - implemented colors: bright + black reveals as dark gray (foreground only) - - * display/CharDisplay.java, display/vt320.java: - added a border to the character display - cursorposition is now set and retrieved by setCursorPos() and getCursorPos() - necessary for future adaption to JDK 1.1 - -1997-04-29 msmeissn <msmeissn@tanis.first.gmd.de> - - * telnet.java: - return now sends \r\n to the terminal and \r\0 to the server. - -1997-04-18 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: ESC [ L fixed ... messed up 'vi' o command - -1997-04-15 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * tools/proxy.java: - the connecting client gets a message when the remote host is - not available. - -1997-04-14 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * telnet.java: telnet will not connect if no host is given as parameter - - * tools/proxy.java: the proxy does not exit when a host is unavailable - - * socket/TelnetIO.java: - bugfix: lost connection is now detected immediately - - * modules/MudConnector.java: 3D-status bar and info Button - - * display/CharDisplay.java: rudimentary support for copy&paste - - * telnet.java: added compilation of MudConnector to Makefile - -1997-04-10 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/CharDisplay.java: - deleteLine ... nicht size.height, sondern bottom. - fixt ein 'vim' Problem - -1997-04-04 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * telnet.java: telnet.java does not exit when no destination is given. - - * modules/ButtonBar.java, modules/MudConnector.java: - MudConnector is a new module designed for Andrew Cowans www.mudconnect.com - It loads a file of muds plus addresses to connect to. WOrks only in - connection with a proxy server! - -1997-04-04 msmeissn <msmeissn@tanis.first.gmd.de> - - * socket/TelnetIO.java: SGI problem fixed. - - * socket/TelnetIO.java: *** empty log message *** - -1997-03-24 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/Script.java, modules/ButtonBar.java, modules/Module.java: - module interface changed: receive() now returns a String or null - - * telnet.java: - removed the script module from testpage and changed the module interface - slightly - -1997-03-19 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/Module.java, modules/Script.java, modules/ButtonBar.java: - Modules are now notified of connect() and disconnect() - - * telnet.java: - added notification of modules upon connect and disconnect - -1997-03-19 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: - delete left frtom cursor was leaving out 1 element - - * display/vt320.java: use enough tabs.... - -1997-03-18 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: total reformatiert auf zweier spaces - -1997-03-18 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: fixed a bug when resizing the screen - -1997-03-18 msmeissn <msmeissn@tanis.first.gmd.de> - - * display/vt320.java: layout(0 statt display.resize9) - - * display/vt320.java: und nochnmal - - * display/vt320.java: ESC [ nr P added - first try at 132/80 resize - -1997-03-18 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/CharDisplay.java: *** empty log message *** - - * modules/ButtonBar.java: - It seems that \27 != ^[ (escape). Now the \e escape should work. - - * display/vt320.java: - Don't initialize, when a character display exists. - This should fix the detaching problem, where the screen was blank after - it was added to the external frame. - -1997-03-17 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/ButtonBar.java: added documentation for the \e character - -1997-03-13 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * display/vt320.java: fixed bug in documentation VTrows default is 24 - -1997-03-12 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/ButtonBar.java: fixed bug in send text from input field - - * telnet.java: minor changes - -1997-03-05 Matthias L. Jugel <leo@tanis.first.gmd.de> - - * modules/Script.java, modules/ButtonBar.java, display/vt320.java: - added documentation - - * modules/ButtonBar.java: - moved the documentation from index.html to this source file - - * telnet.java: fixed bug in connect - - * modules/ButtonBar.java: port number bug - - * display/vt320.java: documentation changes - - * CharDisplayTest.java, IOtest.java, appWrapper.java, display/CharDisplay.java, display/Terminal.java, display/TerminalHost.java, display/vt320.java, modules/ButtonBar.java, modules/Module.java, modules/Script.java, socket/StatusPeer.java, socket/TelnetIO.java, telnet.java, tools/proxy.java: - Initial CVS Registering - - This is the java(tm) Telnet Applet - - - * CharDisplayTest.java, IOtest.java, appWrapper.java, display/CharDisplay.java, display/Terminal.java, display/TerminalHost.java, display/vt320.java, modules/ButtonBar.java, modules/Module.java, modules/Script.java, socket/StatusPeer.java, socket/TelnetIO.java, telnet.java, tools/proxy.java: - New file. - diff --git a/web/root/telnet/COPYING b/web/root/telnet/COPYING deleted file mode 100644 index 32e6f4083fa4bb257dbedf93a9c392e054639282..0000000000000000000000000000000000000000 --- a/web/root/telnet/COPYING +++ /dev/null @@ -1,333 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 -Mass Ave, Cambridge, MA 02139, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public License is intended -to guarantee your freedom to share and change free software--to make sure -the software is free for all its users. This General Public License applies -to most of the Free Software Foundation's software and to any other program -whose authors commit to using it. (Some other Free Software Foundation -software is covered by the GNU Library General Public License instead.) You -can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for this service if you -wish), that you receive source code or can get it if you want it, that you -can change the software or use pieces of it in new free programs; and that -you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or -for a fee, you must give the recipients all the rights that you have. You -must make sure that they, too, receive or can get the source code. And you -must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, distribute -and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If -the software is modified by someone else and passed on, we want its -recipients to know that what they have is not the original, so that any -problems introduced by others will not reflect on the original authors' -reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program -proprietary. To prevent this, we have made it clear that any patent must be -licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification -follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms -of this General Public License. The "Program", below, refers to any such -program or work, and a "work based on the Program" means either the Program -or any derivative work under copyright law: that is to say, a work -containing the Program or a portion of it, either verbatim or with -modifications and/or translated into another language. (Hereinafter, -translation is included without limitation in the term "modification".) Each -licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running the Program -is not restricted, and the output from the Program is covered only if its -contents constitute a work based on the Program (independent of having been -made by running the Program). Whether that is true depends on what the -Program does. - -1. You may copy and distribute verbatim copies of the Program's source code -as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this -License and to the absence of any warranty; and give any other recipients of -the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, -thus forming a work based on the Program, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - * a) You must cause the modified files to carry prominent notices stating - that you changed the files and the date of any change. - - * b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any part - thereof, to be licensed as a whole at no charge to all third parties - under the terms of this License. - - * c) If the modified program normally reads commands interactively when - run, you must cause it, when started running for such interactive use - in the most ordinary way, to print or display an announcement including - an appropriate copyright notice and a notice that there is no warranty - (or else, saying that you provide a warranty) and that users may - redistribute the program under these conditions, and telling the user - how to view a copy of this License. (Exception: if the Program itself - is interactive but does not normally print such an announcement, your - work based on the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, and can be -reasonably considered independent and separate works in themselves, then -this License, and its terms, do not apply to those sections when you -distribute them as separate works. But when you distribute the same sections -as part of a whole which is a work based on the Program, the distribution of -the whole must be on the terms of this License, whose permissions for other -licensees extend to the entire whole, and thus to each and every part -regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise -the right to control the distribution of derivative or collective works -based on the Program. - -In addition, mere aggregation of another work not based on the Program with -the Program (or with a work based on the Program) on a volume of a storage -or distribution medium does not bring the other work under the scope of this -License. - -3. You may copy and distribute the Program (or a work based on it, under -Section 2) in object code or executable form under the terms of Sections 1 -and 2 above provided that you also do one of the following: - - * a) Accompany it with the complete corresponding machine-readable source - code, which must be distributed under the terms of Sections 1 and 2 - above on a medium customarily used for software interchange; or, - - * b) Accompany it with a written offer, valid for at least three years, - to give any third party, for a charge no more than your cost of - physically performing source distribution, a complete machine-readable - copy of the corresponding source code, to be distributed under the - terms of Sections 1 and 2 above on a medium customarily used for - software interchange; or, - - * c) Accompany it with the information you received as to the offer to - distribute corresponding source code. (This alternative is allowed only - for noncommercial distribution and only if you received the program in - object code or executable form with such an offer, in accord with - Subsection b above.) - -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, complete source code means all -the source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and -installation of the executable. However, as a special exception, the source -code distributed need not include anything that is normally distributed (in -either source or binary form) with the major components (compiler, kernel, -and so on) of the operating system on which the executable runs, unless that -component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to -copy from a designated place, then offering equivalent access to copy the -source code from the same place counts as distribution of the source code, -even though third parties are not compelled to copy the source along with -the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as -expressly provided under this License. Any attempt otherwise to copy, -modify, sublicense or distribute the Program is void, and will automatically -terminate your rights under this License. However, parties who have received -copies, or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Program or its derivative works. These actions are prohibited by law if you -do not accept this License. Therefore, by modifying or distributing the -Program (or any work based on the Program), you indicate your acceptance of -this License to do so, and all its terms and conditions for copying, -distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these terms -and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible -for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot distribute so -as to satisfy simultaneously your obligations under this License and any -other pertinent obligations, then as a consequence you may not distribute -the Program at all. For example, if a patent license would not permit -royalty-free redistribution of the Program by all those who receive copies -directly or indirectly through you, then the only way you could satisfy both -it and this License would be to refrain entirely from distribution of the -Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents -or other property right claims or to contest validity of any such claims; -this section has the sole purpose of protecting the integrity of the free -software distribution system, which is implemented by public license -practices. Many people have made generous contributions to the wide range of -software distributed through that system in reliance on consistent -application of that system; it is up to the author/donor to decide if he or -she is willing to distribute software through any other system and a -licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Program under this License may add an -explicit geographical distribution limitation excluding those countries, so -that distribution is permitted only in or among countries not thus excluded. -In such case, this License incorporates the limitation as if written in the -body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of -the General Public License from time to time. Such new versions will be -similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -10. If you wish to incorporate parts of the Program into other free programs -whose distribution conditions are different, write to the author to ask for -permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO -THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM -PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR -CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible -use to the public, the best way to achieve this is to make it free software -which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively convey the -exclusion of warranty; and each file should have at least the "copyright" -line and a pointer to where the full notice is found. - -one line to give the program's name and an idea of what it does. -Copyright (C) 19yy name of author - -This program 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 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when -it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) 19yy name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details -type `show w'. This is free software, and you are welcome -to redistribute it under certain conditions; type `show c' -for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may be -called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright -interest in the program `Gnomovision' -(which makes passes at compilers) written -by James Hacker. - -signature of Ty Coon, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General Public -License instead of this License. diff --git a/web/root/telnet/COPYING.LIB b/web/root/telnet/COPYING.LIB deleted file mode 100644 index ed7233fe00e4e5588fa9adcdbe5a0199c8fc0221..0000000000000000000000000000000000000000 --- a/web/root/telnet/COPYING.LIB +++ /dev/null @@ -1,462 +0,0 @@ -GNU LIBRARY GENERAL PUBLIC LICENSE - -Version 2, June 1991 - -Copyright (C) 1991 Free Software Foundation, Inc. -675 Mass Ave, Cambridge, MA 02139, USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - -Preamble - -The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are -intended to guarantee your freedom to share and change free software--to -make sure the software is free for all its users. - -This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries -whose authors decide to use it. You can use it for your libraries, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for this service if you -wish), that you receive source code or can get it if you want it, that you -can change the software or use pieces of it in new free programs; and that -you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - -For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You -must make sure that they, too, receive or can get the source code. If you -link a program with the library, you must provide complete object files to -the recipients so that they can relink them with the library, after making -changes to the library and recompiling it. And you must show them these -terms so they know their rights. - -Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - -Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - -Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary one; -be sure to read it in full, and don't assume that anything in it is the same -as in the ordinary license. - -The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in a -textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - -Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker -conditions might promote sharing better. - -However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to permit -developers of non-free programs to use free libraries, while preserving your -freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards -changes in header files, but we have achieved it as regards changes in the -actual functions of the Library.) The hope is that this will lead to faster -development of free libraries. - -The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code -derived from the library, while the latter only works together with the -library. - -Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it -may be distributed under the terms of this Library General Public License -(also called "this License"). Each licensee is addressed as "you". - -A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - -The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means -either the Library or any derivative work under copyright law: that is to -say, a work containing the Library or a portion of it, either verbatim or -with modifications and/or translated straightforwardly into another -language. (Hereinafter, translation is included without limitation in the -term "modification".) - -"Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the -source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and -installation of the library. - -Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is -covered only if its contents constitute a work based on the Library -(independent of the use of the Library in a tool for writing it). Whether -that is true depends on what the Library does and what the program that uses -the Library does. - -1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the notices -that refer to this License and to the absence of any warranty; and -distribute a copy of this License along with the Library. - -You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - * a) The modified work must itself be a software library. - - * b) You must cause the files modified to carry prominent notices stating - that you changed the files and the date of any change. - - * c) You must cause the whole of the work to be licensed at no charge to - all third parties under the terms of this License. - - * d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses the - facility, other than as an argument passed when the facility is - invoked, then you must make a good faith effort to ensure that, in the - event an application does not supply such function or table, the - facility still operates, and performs whatever part of its purpose - remains meaningful. (For example, a function in a library to compute - square roots has a purpose that is entirely well-defined independent of - the application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must be - optional: if the application does not supply it, the square root - function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be -reasonably considered independent and separate works in themselves, then -this License, and its terms, do not apply to those sections when you -distribute them as separate works. But when you distribute the same sections -as part of a whole which is a work based on the Library, the distribution of -the whole must be on the terms of this License, whose permissions for other -licensees extend to the entire whole, and thus to each and every part -regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise -the right to control the distribution of derivative or collective works -based on the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage -or distribution medium does not bring the other work under the scope of this -License. - -3. You may opt to apply the terms of the ordinary GNU General Public License -instead of this License to a given copy of the Library. To do this, you must -alter all the notices that refer to this License, so that they refer to the -ordinary GNU General Public License, version 2, instead of to this License. -(If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you -wish.) Do not make any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for -software interchange. - -If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code -from the same place satisfies the requirement to distribute the source code, -even though third parties are not compelled to copy the source along with -the object code. - -5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of -this License. - -However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable -is therefore covered by this License. Section 6 states terms for -distribution of such executables. - -When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work -of the Library even though the source code is not. Whether this is true is -especially significant if the work can be linked without the Library, or if -the work is itself a library. The threshold for this to be true is not -precisely defined by law. - -If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten -lines or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables -containing this object code plus portions of the Library will still fall -under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are -linked directly with the Library itself. - -6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your -choice, provided that the terms permit modification of the work for the -customer's own use and reverse engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution -displays copyright notices, you must include the copyright notice for the -Library among them, as well as a reference directing the user to the copy of -this License. Also, you must do one of these things: - - * a) Accompany the work with the complete corresponding machine-readable - source code for the Library including whatever changes were used in the - work (which must be distributed under Sections 1 and 2 above); and, if - the work is an executable linked with the Library, with the complete - machine-readable "work that uses the Library", as object code and/or - source code, so that the user can modify the Library and then relink to - produce a modified executable containing the modified Library. (It is - understood that the user who changes the contents of definitions files - in the Library will not necessarily be able to recompile the - application to use the modified definitions.) - - * b) Accompany the work with a written offer, valid for at least three - years, to give the same user the materials specified in Subsection 6a, - above, for a charge no more than the cost of performing this - distribution. - - * c) If distribution of the work is made by offering access to copy from - a designated place, offer equivalent access to copy the above specified - materials from the same place. - - * d) Verify that the user has already received a copy of these materials - or that you have already sent this user a copy. - -For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in -either source or binary form) with the major components (compiler, kernel, -and so on) of the operating system on which the executable runs, unless that -component itself accompanies the executable. - -It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - -7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided -that the separate distribution of the work based on the Library and of the -other library facilities is otherwise permitted, and provided that you do -these two things: - - * a) Accompany the combined library with a copy of the same work based on - the Library, uncombined with any other library facilities. This must be - distributed under the terms of the Sections above. - - * b) Give prominent notice with the combined library of the fact that - part of it is a work based on the Library, and explaining where to find - the accompanying uncombined form of the same work. - -8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense, link with, or distribute the Library -is void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such parties -remain in full compliance. - -9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you -do not accept this License. Therefore, by modifying or distributing the -Library (or any work based on the Library), you indicate your acceptance of -this License to do so, and all its terms and conditions for copying, -distributing or modifying the Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to -these terms and conditions. You may not impose any further restrictions on -the recipients' exercise of the rights granted herein. You are not -responsible for enforcing compliance by third parties to this License. - -11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot distribute so -as to satisfy simultaneously your obligations under this License and any -other pertinent obligations, then as a consequence you may not distribute -the Library at all. For example, if a patent license would not permit -royalty-free redistribution of the Library by all those who receive copies -directly or indirectly through you, then the only way you could satisfy both -it and this License would be to refrain entirely from distribution of the -Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents -or other property right claims or to contest validity of any such claims; -this section has the sole purpose of protecting the integrity of the free -software distribution system which is implemented by public license -practices. Many people have made generous contributions to the wide range of -software distributed through that system in reliance on consistent -application of that system; it is up to the author/donor to decide if he or -she is willing to distribute software through any other system and a -licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an -explicit geographical distribution limitation excluding those countries, so -that distribution is permitted only in or among countries not thus excluded. -In such case, this License incorporates the limitation as if written in the -body of this License. - -13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Library does not specify a license version -number, you may choose any version ever published by the Free Software -Foundation. - -14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the -author to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - -NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO -THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY -PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR -CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER -SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Libraries - -If you develop a new library, and you want it to be of the greatest possible -use to the public, we recommend making it free software that everyone can -redistribute and change. You can do so by permitting redistribution under -these terms (or, alternatively, under the terms of the ordinary General -Public License). - -To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - -one line to give the library's name and an idea of what it does. -Copyright (C) year name of author - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the -Free Software Foundation, Inc., 675 Mass Ave, Cambridge, -MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in -the library `Frob' (a library for tweaking knobs) written -by James Random Hacker. - -signature of Ty Coon, 1 April 1990 -Ty Coon, President of Vice - -That's all there is to it! diff --git a/web/root/telnet/CharDisplay.html b/web/root/telnet/CharDisplay.html deleted file mode 100644 index 4bb7245cc337eb6cd35b624dcca71046b2538e47..0000000000000000000000000000000000000000 --- a/web/root/telnet/CharDisplay.html +++ /dev/null @@ -1,16 +0,0 @@ -<HTML> -<HEAD> -<TITLE>The JAVA Telnet Applet: Test drive</TITLE> -</HEAD> - -<H1>The JAVA Telnet Applet: Test drive</H1> - -<P>© 1996, 97 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -<A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus -Meißner</A> -<P> -<CENTER> -<TABLE BORDER> -<APPLET CODE="CharDisplayTest.class" WIDTH=600 HEIGHT=480> </APPLET> -</TABLE> -</HTML> diff --git a/web/root/telnet/CharDisplayTest.class b/web/root/telnet/CharDisplayTest.class deleted file mode 100644 index fd452d3061032f8b309f22e70227c6c688dfc676..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/CharDisplayTest.class and /dev/null differ diff --git a/web/root/telnet/CharDisplayTest.java b/web/root/telnet/CharDisplayTest.java deleted file mode 100644 index 2cfbf7704c5ba167753899f648a320e333b7f85e..0000000000000000000000000000000000000000 --- a/web/root/telnet/CharDisplayTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - * CharDisplayTest - * -- - * $Id: CharDisplayTest.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Mon Feb 17 20:11:20 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -import java.applet.Applet; -import java.awt.Button; -import java.awt.Panel; -import java.awt.Event; -import java.awt.FlowLayout; -import java.awt.BorderLayout; -import java.awt.Choice; -import java.awt.TextField; -import java.awt.Font; - -import display.CharDisplay; - -/** - * CharDisplayTest -- a test applet to show the display/CharDisplay features - * -- - * @version $Id: CharDisplayTest.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - */ -public class CharDisplayTest extends Applet -{ - CharDisplay display = new CharDisplay(80, 24, "Courier", 14); - - Panel buttons = new Panel(); - Button info = new Button("Information"); - Button chars = new Button("Character Table"); - Button attr = new Button("Attributes"); - Choice fonts = new Choice(); - TextField from = new TextField("0", 4); - - public void init() - { - setLayout(new BorderLayout()); - fonts.addItem("Helvetica"); - fonts.addItem("TimesRoman"); - fonts.addItem("Courier"); - fonts.addItem("Dialog"); - fonts.addItem("DialogInput"); - fonts.addItem("ZapfDingBats"); - fonts.addItem("default"); - buttons.add(info); - buttons.add(chars); - buttons.add(attr); - buttons.add(fonts); - buttons.add(from); - add("North", buttons); - display.setResizeStrategy(CharDisplay.RESIZE_FONT); - add("Center", display); - Info(); - } - - public boolean handleEvent(Event evt) - { - if(evt.target == info) { Info(); return true; } - if(evt.target == chars) { CharacterTable(); return true; } - if(evt.target == attr) { Attributes(); return true; } - if(evt.id == Event.ACTION_EVENT && - (evt.target == fonts || evt.target == from)) - { - remove(display); - display = new CharDisplay(80, 24, fonts.getSelectedItem(), 12); - add("Center", display); - CharacterTable(); - layout(); - return true; - } - return false; - } - - private void Clear() - { - display.deleteArea(0, 0, 80, 24); - } - - private void Info() - { - Clear(); - display.putString(4, 1, "CharDisplay.class Information", CharDisplay.INVERT); - display.putString(4, 3, "Version: "+display.version, CharDisplay.BOLD); - display.putString(4, 5, "This class implements several hardware features needed to implement"); - display.putString(4, 6, "a video terminal."); - display.putString(4, 7, "This includes simple operations, such as putting and inserting single"); - display.putString(4, 8, "characters or strings on the screen, character attributes and colors."); - display.putString(4, 9, "Special features like inserting lines, scrolling text up or down and"); - display.putString(4,10, "defining scrollareas help implementing terminal emulations."); - display.redraw(); - } - - private void CharacterTable() - { - int ch = (new Integer(from.getText())).intValue(); - - Clear(); - display.putString( 4, 1, "Character Table", CharDisplay.INVERT); - for(int c = 1; c < 80; c += 6) - for(int l = 3; l < 23; l++) - { - display.putString(c, l, ""+ch, CharDisplay.INVERT); - display.putChar(c+4, l, (char)ch++); - } - display.markLine(3, 20); - display.redraw(); - } - - private void Attributes() - { - int c = 4, l = 8; - - Clear(); - display.putString( 4, 1, "Character attributes", CharDisplay.INVERT); - display.putString( 4, 3, "Normal", CharDisplay.NORMAL); - display.putString(22, 3, "Bold", CharDisplay.BOLD); - display.putString(40, 3, "Underline", CharDisplay.UNDERLINE); - display.putString(58, 3, "Invert", CharDisplay.INVERT); - - display.putString( 4, 5, "Black", 1 << 3 | 8 << 7); - display.putString(13, 5, "Red", 2 << 3); - display.putString(22, 5, "Green", 3 << 3); - display.putString(31, 5, "Yellow", 4 << 3); - display.putString(40, 5, "Blue", 5 << 3); - display.putString(49, 5, "Magenta", 6 << 3); - display.putString(58, 5, "Cyan", 7 << 3); - display.putString(67, 5, "LightGray", 8 << 3); - - for(int bg = 1; bg <= 8; bg++) - { - for(int fg = 1; fg <= 8; fg++) - { - for(int a = 0; a <= 7; a++) - { - display.putChar(c++, l, '@', (fg << 3) | (bg << 7) | a); - display.redraw(); - } - c++; - } - l += 2; c = 4; - } - - } -} diff --git a/web/root/telnet/Documentation/Source/CharDisplayTest.html b/web/root/telnet/Documentation/Source/CharDisplayTest.html deleted file mode 100644 index 4baba482e620c301e1b266c3b60616d2a4b4facd..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/CharDisplayTest.html +++ /dev/null @@ -1,495 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:33 CEST 1999 --> -<TITLE> -: Class CharDisplayTest -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="appWrapper.html"><B>PREV CLASS</B></A> - <A HREF="proxy.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="CharDisplayTest.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -Class CharDisplayTest</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--java.applet.Applet - | - +--<B>CharDisplayTest</B> -</PRE> -<HR> -<DL> -<DT>public class <B>CharDisplayTest</B><DT>extends java.applet.Applet</DL> - -<P> -CharDisplayTest -- a test applet to show the display/CharDisplay features - -- -<P> -<DL> -<DT><B>Version: </B><DD>$Id: CharDisplayTest.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -<DT><B>See Also: </B><DD><A HREF="serialized-form.html#CharDisplayTest">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="CharDisplayTest.html#CharDisplayTest()">CharDisplayTest</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="CharDisplayTest.html#handleEvent(java.awt.Event)">handleEvent</A></B>(java.awt.Event evt)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="CharDisplayTest.html#init()">init</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.applet.Applet"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.applet.Applet</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>destroy, -getAppletContext, -getAppletInfo, -getAudioClip, -getAudioClip, -getCodeBase, -getDocumentBase, -getImage, -getImage, -getLocale, -getParameter, -getParameterInfo, -isActive, -newAudioClip, -play, -play, -resize, -resize, -setStub, -showStatus, -start, -stop</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Panel"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Panel</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>addNotify</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paint, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -reshape, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="CharDisplayTest()"><!-- --></A><H3> -CharDisplayTest</H3> -<PRE> -public <B>CharDisplayTest</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="init()"><!-- --></A><H3> -init</H3> -<PRE> -public void <B>init</B>()</PRE> -<DL> -<DD><DL> -<DT><B>Overrides:</B><DD>init in class java.applet.Applet</DL> -</DD> -</DL> -<HR> - -<A NAME="handleEvent(java.awt.Event)"><!-- --></A><H3> -handleEvent</H3> -<PRE> -public boolean <B>handleEvent</B>(java.awt.Event evt)</PRE> -<DL> -<DD><DL> -<DT><B>Overrides:</B><DD>handleEvent in class java.awt.Component</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="appWrapper.html"><B>PREV CLASS</B></A> - <A HREF="proxy.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="CharDisplayTest.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/allclasses-frame.html b/web/root/telnet/Documentation/Source/allclasses-frame.html deleted file mode 100644 index cc7104a4bb829a73122f75d198baa9cce8fc20e4..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/allclasses-frame.html +++ /dev/null @@ -1,61 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:31 CEST 1999 --> -<TITLE> -All Classes -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> -<FONT size="+1" ID="FrameHeadingFont"> -<B>All Classes</B></FONT> -<BR> - -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT ID="FrameItemFont"><A HREF="appWrapper.html" TARGET="classFrame">appWrapper</A> -<BR> -<A HREF="modules/BSXModule.html" TARGET="classFrame">BSXModule</A> -<BR> -<A HREF="modules/ButtonBar.html" TARGET="classFrame">ButtonBar</A> -<BR> -<A HREF="display/CharDisplay.html" TARGET="classFrame">CharDisplay</A> -<BR> -<A HREF="CharDisplayTest.html" TARGET="classFrame">CharDisplayTest</A> -<BR> -<A HREF="modules/Module.html" TARGET="classFrame"><I>Module</I></A> -<BR> -<A HREF="modules/MudConnector.html" TARGET="classFrame">MudConnector</A> -<BR> -<A HREF="proxy.html" TARGET="classFrame">proxy</A> -<BR> -<A HREF="modules/Script.html" TARGET="classFrame">Script</A> -<BR> -<A HREF="display/SoftFont.html" TARGET="classFrame">SoftFont</A> -<BR> -<A HREF="socket/StatusPeer.html" TARGET="classFrame"><I>StatusPeer</I></A> -<BR> -<A HREF="telnet.html" TARGET="classFrame">telnet</A> -<BR> -<A HREF="socket/TelnetIO.html" TARGET="classFrame">TelnetIO</A> -<BR> -<A HREF="socket/TelnetWrapper.html" TARGET="classFrame">TelnetWrapper</A> -<BR> -<A HREF="display/Terminal.html" TARGET="classFrame">Terminal</A> -<BR> -<A HREF="display/TerminalHost.html" TARGET="classFrame"><I>TerminalHost</I></A> -<BR> -<A HREF="modules/TextLabel.html" TARGET="classFrame">TextLabel</A> -<BR> -<A HREF="socket/TimedOutException.html" TARGET="classFrame">TimedOutException</A> -<BR> -<A HREF="display/vt320.html" TARGET="classFrame">vt320</A> -<BR> -</FONT></TD> -</TR> -</TABLE> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/appWrapper.html b/web/root/telnet/Documentation/Source/appWrapper.html deleted file mode 100644 index 55eaf78969f593ef81de1b2ee92fb5846ab60315..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/appWrapper.html +++ /dev/null @@ -1,637 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Class appWrapper -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - <A HREF="CharDisplayTest.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="appWrapper.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -Class appWrapper</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--java.applet.Applet - | - +--<B>appWrapper</B> -</PRE> -<HR> -<DL> -<DT>public class <B>appWrapper</B><DT>extends java.applet.Applet<DT>implements java.applet.AppletStub, java.lang.Runnable</DL> - -<P> -The appWrapper is thought to make the applet itself independent from - the original context. This is necessary to be able to detach the applet - from the web browsers window without disconnecting it from events. - Note: This applet should work with any applet without changes. - - <DL> - <DT><B><PRE><PARAM NAME="applet" VALUE="<I>applet</I>"></PRE></B> - <DD>Defines the applet to be loaded by the appWrapper. State the applet - class name without ".class"!<P> - <DT><B><PRE><PARAM NAME="startButton" VALUE="<I>text</I>"></PRE></B> - <DD>If this parameter is set the applet is not loaded until the user presses - the button. This decreases first time download delay. The <I>text</I> - given as value to the parameter is shown on the button. While loading - the applet the message "Loading ..." is shown on the button.<P> - <DT><B><PRE><PARAM NAME="stopButton" VALUE="<I>text</I>"></PRE></B> - <DD>This parameter defines the button text when the applet is loaded. When - pressing the button while the applet is running this causes the applet - window to be destroyed and the applet is stopped.<P> - <DT><B><PRE><PARAM NAME="frameTitle" VALUE="<I>text</I>"></PRE></B> - <DD>The <I>frameTitle</I> is the text that is shown in the title bar of the - applet window.<P> - </DL> -<P> -<DL> -<DT><B>Version: </B><DD>$Id: appWrapper.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel</DD> -<DT><B>See Also: </B><DD><A HREF="serialized-form.html#appWrapper">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="appWrapper.html#appWrapper()">appWrapper</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="appWrapper.html#appletResize(int, int)">appletResize</A></B>(int width, - int height)</CODE> - -<BR> - This method is called when the applet want's to be resized.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="appWrapper.html#getAppletInfo()">getAppletInfo</A></B>()</CODE> - -<BR> - Give information about the applet.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String[][]</CODE></FONT></TD> -<TD><CODE><B><A HREF="appWrapper.html#getParameterInfo()">getParameterInfo</A></B>()</CODE> - -<BR> - Give information about the appWrapper and the applet loaded.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="appWrapper.html#handleEvent(java.awt.Event)">handleEvent</A></B>(java.awt.Event evt)</CODE> - -<BR> - Handle button events.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="appWrapper.html#init()">init</A></B>()</CODE> - -<BR> - Applet initialization.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="appWrapper.html#paint(java.awt.Graphics)">paint</A></B>(java.awt.Graphics g)</CODE> - -<BR> - Write a message to the applet area.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="appWrapper.html#reshape(int, int, int, int)">reshape</A></B>(int x, - int y, - int w, - int h)</CODE> - -<BR> - reshape the applet and ourself</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="appWrapper.html#run()">run</A></B>()</CODE> - -<BR> - Load the applet finally.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.applet.Applet"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.applet.Applet</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>destroy, -getAppletContext, -getAudioClip, -getAudioClip, -getCodeBase, -getDocumentBase, -getImage, -getImage, -getLocale, -getParameter, -isActive, -newAudioClip, -play, -play, -resize, -resize, -setStub, -showStatus, -start, -stop</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Panel"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Panel</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>addNotify</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="appWrapper()"><!-- --></A><H3> -appWrapper</H3> -<PRE> -public <B>appWrapper</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="init()"><!-- --></A><H3> -init</H3> -<PRE> -public void <B>init</B>()</PRE> -<DL> -<DD>Applet initialization. We load the class giving in parameter "applet" - and set the stub corresponding to ours. Thus we are able to give - it access to the parameters and any applet specific context.<DD><DL> -<DT><B>Overrides:</B><DD>init in class java.applet.Applet</DL> -</DD> -</DL> -<HR> - -<A NAME="run()"><!-- --></A><H3> -run</H3> -<PRE> -public void <B>run</B>()</PRE> -<DL> -<DD>Load the applet finally. When using a button this creates a new frame - to put the applet in.<DD><DL> -<DT><B>Specified by: </B><DD>run in interface java.lang.Runnable</DL> -</DD> -</DL> -<HR> - -<A NAME="appletResize(int, int)"><!-- --></A><H3> -appletResize</H3> -<PRE> -public void <B>appletResize</B>(int width, - int height)</PRE> -<DL> -<DD>This method is called when the applet want's to be resized.<DD><DL> -<DT><B>Specified by: </B><DD>appletResize in interface java.applet.AppletStub<DT><B>Parameters:</B><DD><CODE>width</CODE> - the width of the applet<DD><CODE>height</CODE> - the height of the applet</DL> -</DD> -</DL> -<HR> - -<A NAME="getAppletInfo()"><!-- --></A><H3> -getAppletInfo</H3> -<PRE> -public java.lang.String <B>getAppletInfo</B>()</PRE> -<DL> -<DD>Give information about the applet.<DD><DL> -<DT><B>Overrides:</B><DD>getAppletInfo in class java.applet.Applet</DL> -</DD> -</DL> -<HR> - -<A NAME="getParameterInfo()"><!-- --></A><H3> -getParameterInfo</H3> -<PRE> -public java.lang.String[][] <B>getParameterInfo</B>()</PRE> -<DL> -<DD>Give information about the appWrapper and the applet loaded.<DD><DL> -<DT><B>Overrides:</B><DD>getParameterInfo in class java.applet.Applet</DL> -</DD> -</DL> -<HR> - -<A NAME="paint(java.awt.Graphics)"><!-- --></A><H3> -paint</H3> -<PRE> -public void <B>paint</B>(java.awt.Graphics g)</PRE> -<DL> -<DD>Write a message to the applet area.<DD><DL> -<DT><B>Overrides:</B><DD>paint in class java.awt.Container</DL> -</DD> -</DL> -<HR> - -<A NAME="reshape(int, int, int, int)"><!-- --></A><H3> -reshape</H3> -<PRE> -public void <B>reshape</B>(int x, - int y, - int w, - int h)</PRE> -<DL> -<DD>reshape the applet and ourself<DD><DL> -<DT><B>Overrides:</B><DD>reshape in class java.awt.Component</DL> -</DD> -</DL> -<HR> - -<A NAME="handleEvent(java.awt.Event)"><!-- --></A><H3> -handleEvent</H3> -<PRE> -public boolean <B>handleEvent</B>(java.awt.Event evt)</PRE> -<DL> -<DD>Handle button events. When pressed it either creates the new applet - window or destoys it.<DD><DL> -<DT><B>Overrides:</B><DD>handleEvent in class java.awt.Component</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - <A HREF="CharDisplayTest.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="appWrapper.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/deprecated-list.html b/web/root/telnet/Documentation/Source/deprecated-list.html deleted file mode 100644 index 3406b6aaf3cffbc7306df0054eb8da0370f394a6..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/deprecated-list.html +++ /dev/null @@ -1,91 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:31 CEST 1999 --> -<TITLE> -: Deprecated List -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Deprecated</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="deprecated-list.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<CENTER> -<H2> -<B>Deprecated API</B></H2> -</CENTER> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Deprecated</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="deprecated-list.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/display/CharDisplay.html b/web/root/telnet/Documentation/Source/display/CharDisplay.html deleted file mode 100644 index 5326b155936b62dbda9ac6450e13910a77e1486b..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/display/CharDisplay.html +++ /dev/null @@ -1,1563 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:34 CEST 1999 --> -<TITLE> -: Class CharDisplay -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - <A HREF="../display/SoftFont.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="CharDisplay.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -display</FONT> -<BR> -Class CharDisplay</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--<B>display.CharDisplay</B> -</PRE> -<HR> -<DL> -<DT>public class <B>CharDisplay</B><DT>extends java.awt.Panel</DL> - -<P> -A simple character display. -<P> -<DL> -<DT><B>Version: </B><DD>$Id: CharDisplay.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -<DT><B>See Also: </B><DD><A HREF="../serialized-form.html#display.CharDisplay">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="field_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Field Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#BOLD">BOLD</A></B></CODE> - -<BR> - Make character bold.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#debug">debug</A></B></CODE> - -<BR> - Enable debug messages.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#INVERT">INVERT</A></B></CODE> - -<BR> - Invert character.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#NORMAL">NORMAL</A></B></CODE> - -<BR> - Make character normal.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#RESIZE_FONT">RESIZE_FONT</A></B></CODE> - -<BR> - Resize the font to the new screensize.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#RESIZE_NONE">RESIZE_NONE</A></B></CODE> - -<BR> - Do nothing when the container is resized.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#RESIZE_SCREEN">RESIZE_SCREEN</A></B></CODE> - -<BR> - Resize the width and height of the characterscreen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#SCROLL_DOWN">SCROLL_DOWN</A></B></CODE> - -<BR> - Scroll down when inserting a line.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#SCROLL_UP">SCROLL_UP</A></B></CODE> - -<BR> - Scroll up when inserting a line.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#UNDERLINE">UNDERLINE</A></B></CODE> - -<BR> - Underline character.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#version">version</A></B></CODE> - -<BR> - If you need the runtime version, just ask this variable.</TD> -</TR> -</TABLE> - <A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../display/CharDisplay.html#CharDisplay()">CharDisplay</A></B>()</CODE> - -<BR> - Create a character display with size 80x24 and Font "Courier", size 12.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../display/CharDisplay.html#CharDisplay(int, int)">CharDisplay</A></B>(int width, - int height)</CODE> - -<BR> - Create a character display with specific size, Font is "Courier", size 12.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../display/CharDisplay.html#CharDisplay(int, int, java.lang.String, int)">CharDisplay</A></B>(int width, - int height, - java.lang.String fname, - int fsize)</CODE> - -<BR> - Create a character display with specific size, font and font size.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../display/CharDisplay.html#CharDisplay(java.lang.String, int)">CharDisplay</A></B>(java.lang.String fname, - int fsize)</CODE> - -<BR> - Create a character display with 80x24 and specific font and font size.</TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#deleteArea(int, int, int, int)">deleteArea</A></B>(int c, - int l, - int w, - int h)</CODE> - -<BR> - Delete a rectangular portion of the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#deleteChar(int, int)">deleteChar</A></B>(int c, - int l)</CODE> - -<BR> - Delete a character at a given position on the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#deleteLine(int)">deleteLine</A></B>(int l)</CODE> - -<BR> - Delete a line at a specific position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getAttributes(int, int)">getAttributes</A></B>(int c, - int l)</CODE> - -<BR> - Get the attributes for the specified position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getBottomMargin()">getBottomMargin</A></B>()</CODE> - -<BR> - Get the bottom scroll margin.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getBufferSize()">getBufferSize</A></B>()</CODE> - -<BR> - Retrieve current scrollback buffer size.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> char</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getChar(int, int)">getChar</A></B>(int c, - int l)</CODE> - -<BR> - Get the character at the specified position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getColumns()">getColumns</A></B>()</CODE> - -<BR> - Get amount of columns on the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.awt.Dimension</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getCursorPos()">getCursorPos</A></B>()</CODE> - -<BR> - Get the current cursor position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getMaxBufferSize()">getMaxBufferSize</A></B>()</CODE> - -<BR> - Retrieve maximum buffer Size.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getRows()">getRows</A></B>()</CODE> - -<BR> - Get amount of rows on the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getTopMargin()">getTopMargin</A></B>()</CODE> - -<BR> - Get the top scroll margin.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#getWindowBase()">getWindowBase</A></B>()</CODE> - -<BR> - Get the current window base.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#handleEvent(java.awt.Event)">handleEvent</A></B>(java.awt.Event evt)</CODE> - -<BR> - Handle mouse events for copy & paste</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#insertChar(int, int, char, int)">insertChar</A></B>(int c, - int l, - char ch, - int attributes)</CODE> - -<BR> - Insert a character at a specific position on the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#insertLine(int)">insertLine</A></B>(int l)</CODE> - -<BR> - Insert a blank line at a specific position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#insertLine(int, boolean)">insertLine</A></B>(int l, - boolean scrollDown)</CODE> - -<BR> - Insert a blank line at a specific position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#insertLine(int, int)">insertLine</A></B>(int l, - int n)</CODE> - -<BR> - Insert blank lines at a specific position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#insertLine(int, int, boolean)">insertLine</A></B>(int l, - int n, - boolean scrollDown)</CODE> - -<BR> - Insert blank lines at a specific position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.awt.Insets</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#insets()">insets</A></B>()</CODE> - -<BR> - The insets of the character display define the border.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#markLine(int, int)">markLine</A></B>(int l, - int n)</CODE> - -<BR> - Mark lines to be updated with redraw().</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.awt.Color</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#notbold(java.awt.Color)">notbold</A></B>(java.awt.Color colr)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#paint(java.awt.Graphics)">paint</A></B>(java.awt.Graphics g)</CODE> - -<BR> - Paint the current screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.awt.Dimension</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#preferredSize()">preferredSize</A></B>()</CODE> - -<BR> - Return the preferred Size of the character display.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#putChar(int, int, char)">putChar</A></B>(int c, - int l, - char ch)</CODE> - -<BR> - Put a character on the screen with normal font and outline.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#putChar(int, int, char, int)">putChar</A></B>(int c, - int l, - char ch, - int attributes)</CODE> - -<BR> - Put a character on the screen with specific font and outline.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#putString(int, int, java.lang.String)">putString</A></B>(int c, - int l, - java.lang.String s)</CODE> - -<BR> - Put a String at a specific position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#putString(int, int, java.lang.String, int)">putString</A></B>(int c, - int l, - java.lang.String s, - int attributes)</CODE> - -<BR> - Put a String at a specific position giving all characters the same - attributes.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#redraw()">redraw</A></B>()</CODE> - -<BR> - Redraw marked lines.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#reshape(int, int, int, int)">reshape</A></B>(int x, - int y, - int w, - int h)</CODE> - -<BR> - Reshape character display according to resize strategy.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setBorder(int, boolean)">setBorder</A></B>(int thickness, - boolean raised)</CODE> - -<BR> - Set the border thickness and the border type.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setBottomMargin(int)">setBottomMargin</A></B>(int l)</CODE> - -<BR> - Set the bottom scroll margin for the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setBufferSize(int)">setBufferSize</A></B>(int amount)</CODE> - -<BR> - Set scrollback buffer size.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setCursorPos(int, int)">setCursorPos</A></B>(int c, - int l)</CODE> - -<BR> - Puts the cursor at the specified position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setResizeStrategy(int)">setResizeStrategy</A></B>(int strategy)</CODE> - -<BR> - Set the strategy when window is resized.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setScrollbar(java.lang.String)">setScrollbar</A></B>(java.lang.String position)</CODE> - -<BR> - Set the scrollbar position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setTopMargin(int)">setTopMargin</A></B>(int l)</CODE> - -<BR> - Set the top scroll margin for the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setWindowBase(int)">setWindowBase</A></B>(int line)</CODE> - -<BR> - Set the current window base.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#setWindowSize(int, int)">setWindowSize</A></B>(int width, - int height)</CODE> - -<BR> - Change the size of the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.awt.Dimension</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#size()">size</A></B>()</CODE> - -<BR> - Return the real size in points of the character display.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/CharDisplay.html#update(java.awt.Graphics)">update</A></B>(java.awt.Graphics g)</CODE> - -<BR> - Update the display.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Panel"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Panel</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>addNotify</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paintComponents, -paramString, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocale, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -resize, -resize, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - -<A NAME="field_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Field Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="version"><!-- --></A><H3> -version</H3> -<PRE> -public java.lang.String <B>version</B></PRE> -<DL> -<DD>If you need the runtime version, just ask this variable.</DL> -<HR> - -<A NAME="debug"><!-- --></A><H3> -debug</H3> -<PRE> -public static final int <B>debug</B></PRE> -<DL> -<DD>Enable debug messages. This is final static to prevent unused - code to be compiled.</DL> -<HR> - -<A NAME="SCROLL_UP"><!-- --></A><H3> -SCROLL_UP</H3> -<PRE> -public static final boolean <B>SCROLL_UP</B></PRE> -<DL> -<DD>Scroll up when inserting a line.</DL> -<HR> - -<A NAME="SCROLL_DOWN"><!-- --></A><H3> -SCROLL_DOWN</H3> -<PRE> -public static final boolean <B>SCROLL_DOWN</B></PRE> -<DL> -<DD>Scroll down when inserting a line.</DL> -<HR> - -<A NAME="RESIZE_NONE"><!-- --></A><H3> -RESIZE_NONE</H3> -<PRE> -public static final int <B>RESIZE_NONE</B></PRE> -<DL> -<DD>Do nothing when the container is resized.</DL> -<HR> - -<A NAME="RESIZE_SCREEN"><!-- --></A><H3> -RESIZE_SCREEN</H3> -<PRE> -public static final int <B>RESIZE_SCREEN</B></PRE> -<DL> -<DD>Resize the width and height of the characterscreen.</DL> -<HR> - -<A NAME="RESIZE_FONT"><!-- --></A><H3> -RESIZE_FONT</H3> -<PRE> -public static final int <B>RESIZE_FONT</B></PRE> -<DL> -<DD>Resize the font to the new screensize.</DL> -<HR> - -<A NAME="NORMAL"><!-- --></A><H3> -NORMAL</H3> -<PRE> -public static final int <B>NORMAL</B></PRE> -<DL> -<DD>Make character normal.</DL> -<HR> - -<A NAME="BOLD"><!-- --></A><H3> -BOLD</H3> -<PRE> -public static final int <B>BOLD</B></PRE> -<DL> -<DD>Make character bold.</DL> -<HR> - -<A NAME="UNDERLINE"><!-- --></A><H3> -UNDERLINE</H3> -<PRE> -public static final int <B>UNDERLINE</B></PRE> -<DL> -<DD>Underline character.</DL> -<HR> - -<A NAME="INVERT"><!-- --></A><H3> -INVERT</H3> -<PRE> -public static final int <B>INVERT</B></PRE> -<DL> -<DD>Invert character.</DL> - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="CharDisplay()"><!-- --></A><H3> -CharDisplay</H3> -<PRE> -public <B>CharDisplay</B>()</PRE> -<DL> -<DD>Create a character display with size 80x24 and Font "Courier", size 12.</DL> -<HR> - -<A NAME="CharDisplay(int, int)"><!-- --></A><H3> -CharDisplay</H3> -<PRE> -public <B>CharDisplay</B>(int width, - int height)</PRE> -<DL> -<DD>Create a character display with specific size, Font is "Courier", size 12.</DL> -<HR> - -<A NAME="CharDisplay(java.lang.String, int)"><!-- --></A><H3> -CharDisplay</H3> -<PRE> -public <B>CharDisplay</B>(java.lang.String fname, - int fsize)</PRE> -<DL> -<DD>Create a character display with 80x24 and specific font and font size.</DL> -<HR> - -<A NAME="CharDisplay(int, int, java.lang.String, int)"><!-- --></A><H3> -CharDisplay</H3> -<PRE> -public <B>CharDisplay</B>(int width, - int height, - java.lang.String fname, - int fsize)</PRE> -<DL> -<DD>Create a character display with specific size, font and font size.</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="notbold(java.awt.Color)"><!-- --></A><H3> -notbold</H3> -<PRE> -public java.awt.Color <B>notbold</B>(java.awt.Color colr)</PRE> -<DL> -</DL> -<HR> - -<A NAME="putChar(int, int, char)"><!-- --></A><H3> -putChar</H3> -<PRE> -public void <B>putChar</B>(int c, - int l, - char ch)</PRE> -<DL> -<DD>Put a character on the screen with normal font and outline. - The character previously on that position will be overwritten. - You need to call redraw() to update the screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (line)<DD><CODE>ch</CODE> - the character to show on the screen<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#insertChar(int, int, char, int)"><CODE>insertChar(int, int, char, int)</CODE></A>, -<A HREF="../display/CharDisplay.html#deleteChar(int, int)"><CODE>deleteChar(int, int)</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="putChar(int, int, char, int)"><!-- --></A><H3> -putChar</H3> -<PRE> -public void <B>putChar</B>(int c, - int l, - char ch, - int attributes)</PRE> -<DL> -<DD>Put a character on the screen with specific font and outline. - The character previously on that position will be overwritten. - You need to call redraw() to update the screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (line)<DD><CODE>ch</CODE> - the character to show on the screen<DD><CODE>attributes</CODE> - the character attributes<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#BOLD"><CODE>BOLD</CODE></A>, -<A HREF="../display/CharDisplay.html#UNDERLINE"><CODE>UNDERLINE</CODE></A>, -<A HREF="../display/CharDisplay.html#INVERT"><CODE>INVERT</CODE></A>, -<A HREF="../display/CharDisplay.html#NORMAL"><CODE>NORMAL</CODE></A>, -<A HREF="../display/CharDisplay.html#insertChar(int, int, char, int)"><CODE>insertChar(int, int, char, int)</CODE></A>, -<A HREF="../display/CharDisplay.html#deleteChar(int, int)"><CODE>deleteChar(int, int)</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="getChar(int, int)"><!-- --></A><H3> -getChar</H3> -<PRE> -public char <B>getChar</B>(int c, - int l)</PRE> -<DL> -<DD>Get the character at the specified position.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (line)<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#putChar(int, int, char)"><CODE>putChar(int, int, char)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="getAttributes(int, int)"><!-- --></A><H3> -getAttributes</H3> -<PRE> -public int <B>getAttributes</B>(int c, - int l)</PRE> -<DL> -<DD>Get the attributes for the specified position.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (line)<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#putChar(int, int, char)"><CODE>putChar(int, int, char)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="insertChar(int, int, char, int)"><!-- --></A><H3> -insertChar</H3> -<PRE> -public void <B>insertChar</B>(int c, - int l, - char ch, - int attributes)</PRE> -<DL> -<DD>Insert a character at a specific position on the screen. - All character right to from this position will be moved one to the right. - You need to call redraw() to update the screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (line)<DD><CODE>ch</CODE> - the character to insert<DD><CODE>attributes</CODE> - the character attributes<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#BOLD"><CODE>BOLD</CODE></A>, -<A HREF="../display/CharDisplay.html#UNDERLINE"><CODE>UNDERLINE</CODE></A>, -<A HREF="../display/CharDisplay.html#INVERT"><CODE>INVERT</CODE></A>, -<A HREF="../display/CharDisplay.html#NORMAL"><CODE>NORMAL</CODE></A>, -<A HREF="../display/CharDisplay.html#putChar(int, int, char)"><CODE>putChar(int, int, char)</CODE></A>, -<A HREF="../display/CharDisplay.html#deleteChar(int, int)"><CODE>deleteChar(int, int)</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="deleteChar(int, int)"><!-- --></A><H3> -deleteChar</H3> -<PRE> -public void <B>deleteChar</B>(int c, - int l)</PRE> -<DL> -<DD>Delete a character at a given position on the screen. - All characters right to the position will be moved one to the left. - You need to call redraw() to update the screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (line)<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#putChar(int, int, char)"><CODE>putChar(int, int, char)</CODE></A>, -<A HREF="../display/CharDisplay.html#insertChar(int, int, char, int)"><CODE>insertChar(int, int, char, int)</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="putString(int, int, java.lang.String)"><!-- --></A><H3> -putString</H3> -<PRE> -public void <B>putString</B>(int c, - int l, - java.lang.String s)</PRE> -<DL> -<DD>Put a String at a specific position. Any characters previously on that - position will be overwritten. You need to call redraw() for screen update.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (line)<DD><CODE>s</CODE> - the string to be shown on the screen<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#BOLD"><CODE>BOLD</CODE></A>, -<A HREF="../display/CharDisplay.html#UNDERLINE"><CODE>UNDERLINE</CODE></A>, -<A HREF="../display/CharDisplay.html#INVERT"><CODE>INVERT</CODE></A>, -<A HREF="../display/CharDisplay.html#NORMAL"><CODE>NORMAL</CODE></A>, -<A HREF="../display/CharDisplay.html#putChar(int, int, char)"><CODE>putChar(int, int, char)</CODE></A>, -<A HREF="../display/CharDisplay.html#insertLine(int)"><CODE>insertLine(int)</CODE></A>, -<A HREF="../display/CharDisplay.html#deleteLine(int)"><CODE>deleteLine(int)</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="putString(int, int, java.lang.String, int)"><!-- --></A><H3> -putString</H3> -<PRE> -public void <B>putString</B>(int c, - int l, - java.lang.String s, - int attributes)</PRE> -<DL> -<DD>Put a String at a specific position giving all characters the same - attributes. Any characters previously on that position will be - overwritten. You need to call redraw() to update the screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (line)<DD><CODE>s</CODE> - the string to be shown on the screen<DD><CODE>attributes</CODE> - character attributes<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#BOLD"><CODE>BOLD</CODE></A>, -<A HREF="../display/CharDisplay.html#UNDERLINE"><CODE>UNDERLINE</CODE></A>, -<A HREF="../display/CharDisplay.html#INVERT"><CODE>INVERT</CODE></A>, -<A HREF="../display/CharDisplay.html#NORMAL"><CODE>NORMAL</CODE></A>, -<A HREF="../display/CharDisplay.html#putChar(int, int, char)"><CODE>putChar(int, int, char)</CODE></A>, -<A HREF="../display/CharDisplay.html#insertLine(int)"><CODE>insertLine(int)</CODE></A>, -<A HREF="../display/CharDisplay.html#deleteLine(int)"><CODE>deleteLine(int)</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="insertLine(int)"><!-- --></A><H3> -insertLine</H3> -<PRE> -public void <B>insertLine</B>(int l)</PRE> -<DL> -<DD>Insert a blank line at a specific position. - The current line and all previous lines are scrolled one line up. The - top line is lost. You need to call redraw() to update the screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>l</CODE> - the y-coordinate to insert the line<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#deleteLine(int)"><CODE>deleteLine(int)</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="insertLine(int, int)"><!-- --></A><H3> -insertLine</H3> -<PRE> -public void <B>insertLine</B>(int l, - int n)</PRE> -<DL> -<DD>Insert blank lines at a specific position. - You need to call redraw() to update the screen<DD><DL> -<DT><B>Parameters:</B><DD><CODE>l</CODE> - the y-coordinate to insert the line<DD><CODE>n</CODE> - amount of lines to be inserted<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#deleteLine(int)"><CODE>deleteLine(int)</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="insertLine(int, boolean)"><!-- --></A><H3> -insertLine</H3> -<PRE> -public void <B>insertLine</B>(int l, - boolean scrollDown)</PRE> -<DL> -<DD>Insert a blank line at a specific position. Scroll text according to - the argument. - You need to call redraw() to update the screen<DD><DL> -<DT><B>Parameters:</B><DD><CODE>l</CODE> - the y-coordinate to insert the line<DD><CODE>scrollDown</CODE> - scroll down<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#deleteLine(int)"><CODE>deleteLine(int)</CODE></A>, -<A HREF="../display/CharDisplay.html#SCROLL_UP"><CODE>SCROLL_UP</CODE></A>, -<A HREF="../display/CharDisplay.html#SCROLL_DOWN"><CODE>SCROLL_DOWN</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="insertLine(int, int, boolean)"><!-- --></A><H3> -insertLine</H3> -<PRE> -public void <B>insertLine</B>(int l, - int n, - boolean scrollDown)</PRE> -<DL> -<DD>Insert blank lines at a specific position. - The current line and all previous lines are scrolled one line up. The - top line is lost. You need to call redraw() to update the screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>l</CODE> - the y-coordinate to insert the line<DD><CODE>n</CODE> - number of lines to be inserted<DD><CODE>scrollDown</CODE> - scroll down<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#deleteLine(int)"><CODE>deleteLine(int)</CODE></A>, -<A HREF="../display/CharDisplay.html#SCROLL_UP"><CODE>SCROLL_UP</CODE></A>, -<A HREF="../display/CharDisplay.html#SCROLL_DOWN"><CODE>SCROLL_DOWN</CODE></A>, -<A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="deleteLine(int)"><!-- --></A><H3> -deleteLine</H3> -<PRE> -public void <B>deleteLine</B>(int l)</PRE> -<DL> -<DD>Delete a line at a specific position. Subsequent lines will be scrolled - up to fill the space and a blank line is inserted at the end of the - screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>l</CODE> - the y-coordinate to insert the line<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#deleteLine(int)"><CODE>deleteLine(int)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="deleteArea(int, int, int, int)"><!-- --></A><H3> -deleteArea</H3> -<PRE> -public void <B>deleteArea</B>(int c, - int l, - int w, - int h)</PRE> -<DL> -<DD>Delete a rectangular portion of the screen. - You need to call redraw() to update the screen.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - x-coordinate (column)<DD><CODE>l</CODE> - y-coordinate (row)<DD><CODE>w</CODE> - with of the area in characters<DD><CODE>h</CODE> - height of the area in characters<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#deleteChar(int, int)"><CODE>deleteChar(int, int)</CODE></A>, -<A HREF="../display/CharDisplay.html#deleteLine(int)"><CODE>deleteLine(int)</CODE></A>, -<CODE>redraw</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="setCursorPos(int, int)"><!-- --></A><H3> -setCursorPos</H3> -<PRE> -public void <B>setCursorPos</B>(int c, - int l)</PRE> -<DL> -<DD>Puts the cursor at the specified position.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - column<DD><CODE>l</CODE> - line</DL> -</DD> -</DL> -<HR> - -<A NAME="getCursorPos()"><!-- --></A><H3> -getCursorPos</H3> -<PRE> -public java.awt.Dimension <B>getCursorPos</B>()</PRE> -<DL> -<DD>Get the current cursor position.<DD><DL> -<DT><B>See Also: </B><DD><CODE>Dimension</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="setTopMargin(int)"><!-- --></A><H3> -setTopMargin</H3> -<PRE> -public void <B>setTopMargin</B>(int l)</PRE> -<DL> -<DD>Set the top scroll margin for the screen. If the current bottom margin - is smaller it will become the top margin and the line will become the - bottom margin.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>l</CODE> - line that is the margin</DL> -</DD> -</DL> -<HR> - -<A NAME="getTopMargin()"><!-- --></A><H3> -getTopMargin</H3> -<PRE> -public int <B>getTopMargin</B>()</PRE> -<DL> -<DD>Get the top scroll margin.</DL> -<HR> - -<A NAME="setBottomMargin(int)"><!-- --></A><H3> -setBottomMargin</H3> -<PRE> -public void <B>setBottomMargin</B>(int l)</PRE> -<DL> -<DD>Set the bottom scroll margin for the screen. If the current top margin - is bigger it will become the bottom margin and the line will become the - top margin.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>l</CODE> - line that is the margin</DL> -</DD> -</DL> -<HR> - -<A NAME="getBottomMargin()"><!-- --></A><H3> -getBottomMargin</H3> -<PRE> -public int <B>getBottomMargin</B>()</PRE> -<DL> -<DD>Get the bottom scroll margin.</DL> -<HR> - -<A NAME="setBufferSize(int)"><!-- --></A><H3> -setBufferSize</H3> -<PRE> -public void <B>setBufferSize</B>(int amount)</PRE> -<DL> -<DD>Set scrollback buffer size.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>amount</CODE> - new size of the buffer</DL> -</DD> -</DL> -<HR> - -<A NAME="getBufferSize()"><!-- --></A><H3> -getBufferSize</H3> -<PRE> -public int <B>getBufferSize</B>()</PRE> -<DL> -<DD>Retrieve current scrollback buffer size.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#setBufferSize(int)"><CODE>setBufferSize(int)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="getMaxBufferSize()"><!-- --></A><H3> -getMaxBufferSize</H3> -<PRE> -public int <B>getMaxBufferSize</B>()</PRE> -<DL> -<DD>Retrieve maximum buffer Size.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#getBufferSize()"><CODE>getBufferSize()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="setWindowBase(int)"><!-- --></A><H3> -setWindowBase</H3> -<PRE> -public void <B>setWindowBase</B>(int line)</PRE> -<DL> -<DD>Set the current window base. This allows to view the scrollback buffer.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>line</CODE> - the line where the screen window starts<DT><B>See Also: </B><DD><CODE>setBufferSize</CODE>, -<CODE>getBufferSize</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="getWindowBase()"><!-- --></A><H3> -getWindowBase</H3> -<PRE> -public int <B>getWindowBase</B>()</PRE> -<DL> -<DD>Get the current window base.<DD><DL> -<DT><B>See Also: </B><DD><CODE>setWindowBase</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="setWindowSize(int, int)"><!-- --></A><H3> -setWindowSize</H3> -<PRE> -public void <B>setWindowSize</B>(int width, - int height)</PRE> -<DL> -<DD>Change the size of the screen. This will include adjustment of the - scrollback buffer.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>columns</CODE> - width of the screen<DD><CODE>columns</CODE> - height of the screen</DL> -</DD> -</DL> -<HR> - -<A NAME="setResizeStrategy(int)"><!-- --></A><H3> -setResizeStrategy</H3> -<PRE> -public void <B>setResizeStrategy</B>(int strategy)</PRE> -<DL> -<DD>Set the strategy when window is resized. - RESIZE_FONT is default.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>strategy</CODE> - the strategy<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#RESIZE_NONE"><CODE>RESIZE_NONE</CODE></A>, -<A HREF="../display/CharDisplay.html#RESIZE_FONT"><CODE>RESIZE_FONT</CODE></A>, -<A HREF="../display/CharDisplay.html#RESIZE_SCREEN"><CODE>RESIZE_SCREEN</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="getRows()"><!-- --></A><H3> -getRows</H3> -<PRE> -public int <B>getRows</B>()</PRE> -<DL> -<DD>Get amount of rows on the screen.</DL> -<HR> - -<A NAME="getColumns()"><!-- --></A><H3> -getColumns</H3> -<PRE> -public int <B>getColumns</B>()</PRE> -<DL> -<DD>Get amount of columns on the screen.</DL> -<HR> - -<A NAME="setBorder(int, boolean)"><!-- --></A><H3> -setBorder</H3> -<PRE> -public void <B>setBorder</B>(int thickness, - boolean raised)</PRE> -<DL> -<DD>Set the border thickness and the border type.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>thickness</CODE> - border thickness in pixels, zero means no border<DD><CODE>raised</CODE> - a boolean indicating a raised or embossed border</DL> -</DD> -</DL> -<HR> - -<A NAME="setScrollbar(java.lang.String)"><!-- --></A><H3> -setScrollbar</H3> -<PRE> -public void <B>setScrollbar</B>(java.lang.String position)</PRE> -<DL> -<DD>Set the scrollbar position. valid values are "East" or "West".<DD><DL> -<DT><B>Parameters:</B><DD><CODE>position</CODE> - the position of the scrollbar</DL> -</DD> -</DL> -<HR> - -<A NAME="markLine(int, int)"><!-- --></A><H3> -markLine</H3> -<PRE> -public void <B>markLine</B>(int l, - int n)</PRE> -<DL> -<DD>Mark lines to be updated with redraw().<DD><DL> -<DT><B>Parameters:</B><DD><CODE>l</CODE> - starting line<DD><CODE>n</CODE> - amount of lines to be updated<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#redraw()"><CODE>redraw()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="redraw()"><!-- --></A><H3> -redraw</H3> -<PRE> -public void <B>redraw</B>()</PRE> -<DL> -<DD>Redraw marked lines.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#markLine(int, int)"><CODE>markLine(int, int)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="update(java.awt.Graphics)"><!-- --></A><H3> -update</H3> -<PRE> -public void <B>update</B>(java.awt.Graphics g)</PRE> -<DL> -<DD>Update the display. to reduce flashing we have overridden this method.<DD><DL> -<DT><B>Overrides:</B><DD>update in class java.awt.Container</DL> -</DD> -</DL> -<HR> - -<A NAME="paint(java.awt.Graphics)"><!-- --></A><H3> -paint</H3> -<PRE> -public void <B>paint</B>(java.awt.Graphics g)</PRE> -<DL> -<DD>Paint the current screen. All painting is done here. Only lines that have - changed will be redrawn!<DD><DL> -<DT><B>Overrides:</B><DD>paint in class java.awt.Container</DL> -</DD> -</DL> -<HR> - -<A NAME="reshape(int, int, int, int)"><!-- --></A><H3> -reshape</H3> -<PRE> -public void <B>reshape</B>(int x, - int y, - int w, - int h)</PRE> -<DL> -<DD>Reshape character display according to resize strategy.<DD><DL> -<DT><B>Overrides:</B><DD>reshape in class java.awt.Component<DT><B>See Also: </B><DD><A HREF="../display/CharDisplay.html#setResizeStrategy(int)"><CODE>setResizeStrategy(int)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="size()"><!-- --></A><H3> -size</H3> -<PRE> -public java.awt.Dimension <B>size</B>()</PRE> -<DL> -<DD>Return the real size in points of the character display.<DD><DL> -<DT><B>Returns:</B><DD>Dimension the dimension of the display<DT><B>Overrides:</B><DD>size in class java.awt.Component<DT><B>See Also: </B><DD><CODE>Dimension</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="preferredSize()"><!-- --></A><H3> -preferredSize</H3> -<PRE> -public java.awt.Dimension <B>preferredSize</B>()</PRE> -<DL> -<DD>Return the preferred Size of the character display. - This turns out to be the actual size.<DD><DL> -<DT><B>Returns:</B><DD>Dimension dimension of the display<DT><B>Overrides:</B><DD>preferredSize in class java.awt.Container<DT><B>See Also: </B><DD><CODE>size</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="insets()"><!-- --></A><H3> -insets</H3> -<PRE> -public java.awt.Insets <B>insets</B>()</PRE> -<DL> -<DD>The insets of the character display define the border.<DD><DL> -<DT><B>Returns:</B><DD>Insets border thickness in pixels<DT><B>Overrides:</B><DD>insets in class java.awt.Container</DL> -</DD> -</DL> -<HR> - -<A NAME="handleEvent(java.awt.Event)"><!-- --></A><H3> -handleEvent</H3> -<PRE> -public boolean <B>handleEvent</B>(java.awt.Event evt)</PRE> -<DL> -<DD>Handle mouse events for copy & paste<DD><DL> -<DT><B>Parameters:</B><DD><CODE>evt</CODE> - the event that occured<DT><B>Returns:</B><DD>boolean true if action was taken<DT><B>Overrides:</B><DD>handleEvent in class java.awt.Component<DT><B>See Also: </B><DD><CODE>Event</CODE></DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - <A HREF="../display/SoftFont.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="CharDisplay.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/display/SoftFont.html b/web/root/telnet/Documentation/Source/display/SoftFont.html deleted file mode 100644 index e9d22339d6202757e220f6eb7e9c1014c8a7e674..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/display/SoftFont.html +++ /dev/null @@ -1,242 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:34 CEST 1999 --> -<TITLE> -: Class SoftFont -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/CharDisplay.html"><B>PREV CLASS</B></A> - <A HREF="../display/Terminal.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="SoftFont.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -display</FONT> -<BR> -Class SoftFont</H2> -<PRE> -java.lang.Object - | - +--<B>display.SoftFont</B> -</PRE> -<HR> -<DL> -<DT>public class <B>SoftFont</B><DT>extends java.lang.Object</DL> - -<P> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../display/SoftFont.html#SoftFont()">SoftFont</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/SoftFont.html#drawChar(java.awt.Graphics, char, int, int, int, int)">drawChar</A></B>(java.awt.Graphics g, - char c, - int x, - int y, - int cw, - int ch)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/SoftFont.html#inSoftFont(char)">inSoftFont</A></B>(char c)</CODE> - -<BR> - </TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -toString, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="SoftFont()"><!-- --></A><H3> -SoftFont</H3> -<PRE> -public <B>SoftFont</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="inSoftFont(char)"><!-- --></A><H3> -inSoftFont</H3> -<PRE> -public boolean <B>inSoftFont</B>(char c)</PRE> -<DL> -</DL> -<HR> - -<A NAME="drawChar(java.awt.Graphics, char, int, int, int, int)"><!-- --></A><H3> -drawChar</H3> -<PRE> -public void <B>drawChar</B>(java.awt.Graphics g, - char c, - int x, - int y, - int cw, - int ch)</PRE> -<DL> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/CharDisplay.html"><B>PREV CLASS</B></A> - <A HREF="../display/Terminal.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="SoftFont.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/display/Terminal.html b/web/root/telnet/Documentation/Source/display/Terminal.html deleted file mode 100644 index 842c5de1f23cf9515f9c0dd9d6f45ff235ea2058..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/display/Terminal.html +++ /dev/null @@ -1,528 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:34 CEST 1999 --> -<TITLE> -: Class Terminal -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/SoftFont.html"><B>PREV CLASS</B></A> - <A HREF="../display/vt320.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="Terminal.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -display</FONT> -<BR> -Class Terminal</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--<B>display.Terminal</B> -</PRE> -<DL> -<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../display/vt320.html">vt320</A></DD> -</DL> -<HR> -<DL> -<DT>public abstract class <B>Terminal</B><DT>extends java.awt.Panel</DL> - -<P> -Terminal is an abstract emulation class. - It contains a character display. -<P> -<DL> -<DT><B>Version: </B><DD>$Id: Terminal.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -<DT><B>See Also: </B><DD><A HREF="../serialized-form.html#display.Terminal">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../display/Terminal.html#Terminal()">Terminal</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>abstract java.lang.String[][]</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/Terminal.html#getParameterInfo()">getParameterInfo</A></B>()</CODE> - -<BR> - Get the specific parameter info for the emulation.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>abstract java.awt.Dimension</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/Terminal.html#getSize()">getSize</A></B>()</CODE> - -<BR> - Return the current size of the terminal in characters.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>abstract java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/Terminal.html#getTerminalType()">getTerminalType</A></B>()</CODE> - -<BR> - Return actual terminal type identifier.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>abstract void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/Terminal.html#putChar(char)">putChar</A></B>(char c)</CODE> - -<BR> - Put a character on the screen.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>abstract void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/Terminal.html#putString(java.lang.String)">putString</A></B>(java.lang.String s)</CODE> - -<BR> - Put a character on the screen.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Panel"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Panel</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>addNotify</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paint, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocale, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -handleEvent, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -reshape, -resize, -resize, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="Terminal()"><!-- --></A><H3> -Terminal</H3> -<PRE> -public <B>Terminal</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="getParameterInfo()"><!-- --></A><H3> -getParameterInfo</H3> -<PRE> -public abstract java.lang.String[][] <B>getParameterInfo</B>()</PRE> -<DL> -<DD>Get the specific parameter info for the emulation.<DD><DL> -<DT><B>See Also: </B><DD><CODE>Applet</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="putChar(char)"><!-- --></A><H3> -putChar</H3> -<PRE> -public abstract void <B>putChar</B>(char c)</PRE> -<DL> -<DD>Put a character on the screen. The method has to see if it is - a special character that needs to be handles special.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>c</CODE> - the character<DT><B>See Also: </B><DD><A HREF="../display/Terminal.html#putString(java.lang.String)"><CODE>putString(java.lang.String)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="putString(java.lang.String)"><!-- --></A><H3> -putString</H3> -<PRE> -public abstract void <B>putString</B>(java.lang.String s)</PRE> -<DL> -<DD>Put a character on the screen. The method has to parse the string - may handle special characters.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>s</CODE> - the string<DT><B>See Also: </B><DD><A HREF="../display/Terminal.html#putString(java.lang.String)"><CODE>putString(java.lang.String)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="getSize()"><!-- --></A><H3> -getSize</H3> -<PRE> -public abstract java.awt.Dimension <B>getSize</B>()</PRE> -<DL> -<DD>Return the current size of the terminal in characters.<DD><DL> -<DT><B>Overrides:</B><DD>getSize in class java.awt.Component</DL> -</DD> -</DL> -<HR> - -<A NAME="getTerminalType()"><!-- --></A><H3> -getTerminalType</H3> -<PRE> -public abstract java.lang.String <B>getTerminalType</B>()</PRE> -<DL> -<DD>Return actual terminal type identifier.</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/SoftFont.html"><B>PREV CLASS</B></A> - <A HREF="../display/vt320.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="Terminal.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/display/TerminalHost.html b/web/root/telnet/Documentation/Source/display/TerminalHost.html deleted file mode 100644 index defad23341fc8b14e0067fe7394e9fa75d8b5166..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/display/TerminalHost.html +++ /dev/null @@ -1,178 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:33 CEST 1999 --> -<TITLE> -: Interface TerminalHost -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TerminalHost.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | CONSTR | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | CONSTR | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -display</FONT> -<BR> -Interface TerminalHost</H2> -<DL> -<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../telnet.html">telnet</A>, <A HREF="../display/vt320.html">vt320</A></DD> -</DL> -<HR> -<DL> -<DT>public abstract interface <B>TerminalHost</B></DL> - -<P> -TerminalHost is an interface for the remote (virtual) end of our connection - to the host computer we are connected to. -<P> -<DL> -<DT><B>Version: </B><DD>$Id: TerminalHost.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L Jugel, Marcus Mei�ner</DD> -</DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/TerminalHost.html#send(java.lang.String)">send</A></B>(java.lang.String s)</CODE> - -<BR> - Send a string to the host and return if it was received successfully.</TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="send(java.lang.String)"><!-- --></A><H3> -send</H3> -<PRE> -public boolean <B>send</B>(java.lang.String s)</PRE> -<DL> -<DD>Send a string to the host and return if it was received successfully.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>s</CODE> - the string to send<DT><B>Returns:</B><DD>True for successful receivement.</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TerminalHost.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | CONSTR | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | CONSTR | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/display/package-frame.html b/web/root/telnet/Documentation/Source/display/package-frame.html deleted file mode 100644 index 3197fdeddd0d18e9b406434b0155d325156a39e2..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/display/package-frame.html +++ /dev/null @@ -1,43 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Package display -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> -<FONT size="+1" ID="FrameTitleFont"> -<A HREF="../display/package-summary.html" TARGET="classFrame">display</A></FONT> -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT size="+1" ID="FrameHeadingFont"> -Interfaces</FONT> -<FONT ID="FrameItemFont"> -<BR> -<A HREF="TerminalHost.html" TARGET="classFrame"><I>TerminalHost</I></A></FONT></TD> -</TR> -</TABLE> - - -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT size="+1" ID="FrameHeadingFont"> -Classes</FONT> -<FONT ID="FrameItemFont"> -<BR> -<A HREF="CharDisplay.html" TARGET="classFrame">CharDisplay</A> -<BR> -<A HREF="SoftFont.html" TARGET="classFrame">SoftFont</A> -<BR> -<A HREF="Terminal.html" TARGET="classFrame">Terminal</A> -<BR> -<A HREF="vt320.html" TARGET="classFrame">vt320</A></FONT></TD> -</TR> -</TABLE> - - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/display/package-summary.html b/web/root/telnet/Documentation/Source/display/package-summary.html deleted file mode 100644 index 9ba0b65d51862a58a311fe198115829811e05f50..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/display/package-summary.html +++ /dev/null @@ -1,131 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Package display -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Package</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV PACKAGE - <A HREF="../modules/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<H2> -Package display -</H2> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Interface Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="TerminalHost.html"><I>TerminalHost</I></A></B></TD> -<TD>TerminalHost is an interface for the remote (virtual) end of our connection - to the host computer we are connected to.</TD> -</TR> -</TABLE> - - -<P> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="CharDisplay.html">CharDisplay</A></B></TD> -<TD>A simple character display.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="SoftFont.html">SoftFont</A></B></TD> -<TD> </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="Terminal.html">Terminal</A></B></TD> -<TD>Terminal is an abstract emulation class.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="vt320.html">vt320</A></B></TD> -<TD>A DEC VT320 Terminal Emulation (includes VT100/220 and ANSI).</TD> -</TR> -</TABLE> - - -<P> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Package</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV PACKAGE - <A HREF="../modules/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/display/package-tree.html b/web/root/telnet/Documentation/Source/display/package-tree.html deleted file mode 100644 index fdec70375e6258c49e965e0a08145ba8407b3603..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/display/package-tree.html +++ /dev/null @@ -1,117 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: display Class Hierarchy -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Tree</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - <A HREF="../modules/package-tree.html"><B>NEXT</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<CENTER> -<H2> -Hierarchy For Package display -</H2> -</CENTER> -<DL> -<DT><B>Package Hierarchies: </B><DD><A HREF="../overview-tree.html">All Packages</A></DL> -<HR> -<H2> -Class Hierarchy -</H2> -<UL> -<LI TYPE="circle">class java.lang.Object<UL> -<LI TYPE="circle">class java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) -<UL> -<LI TYPE="circle">class java.awt.Container<UL> -<LI TYPE="circle">class java.awt.Panel<UL> -<LI TYPE="circle">class display.<A HREF="../display/CharDisplay.html"><B>CharDisplay</B></A><LI TYPE="circle">class display.<A HREF="../display/Terminal.html"><B>Terminal</B></A><UL> -<LI TYPE="circle">class display.<A HREF="../display/vt320.html"><B>vt320</B></A> (implements display.<A HREF="../display/TerminalHost.html">TerminalHost</A>) -</UL> -</UL> -</UL> -</UL> -<LI TYPE="circle">class display.<A HREF="../display/SoftFont.html"><B>SoftFont</B></A></UL> -</UL> -<H2> -Interface Hierarchy -</H2> -<UL> -<LI TYPE="circle">interface display.<A HREF="../display/TerminalHost.html"><B>TerminalHost</B></A></UL> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Tree</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - <A HREF="../modules/package-tree.html"><B>NEXT</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/display/vt320.html b/web/root/telnet/Documentation/Source/display/vt320.html deleted file mode 100644 index c9e5000eb19a9c44ddab3efa07c0608493ad4ffa..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/display/vt320.html +++ /dev/null @@ -1,842 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:34 CEST 1999 --> -<TITLE> -: Class vt320 -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/Terminal.html"><B>PREV CLASS</B></A> - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="vt320.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -display</FONT> -<BR> -Class vt320</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--<A HREF="../display/Terminal.html">display.Terminal</A> - | - +--<B>display.vt320</B> -</PRE> -<HR> -<DL> -<DT>public class <B>vt320</B><DT>extends <A HREF="../display/Terminal.html">Terminal</A><DT>implements <A HREF="../display/TerminalHost.html">TerminalHost</A></DL> - -<P> -A DEC VT320 Terminal Emulation (includes VT100/220 and ANSI). - - The terminal emulation accesses the applet parameters to configure itself. - The following parameters may be set. Default values are written in - <I>italics</I> and other possible values are <B>bold</B>. - <DL> - <DT><TT><PARAM NAME="Fx" VALUE="<I>functionkeytext</I>"></TT> - <DD>Sets the string sent when the function key Fx (x between 1 und 20) - is pressed. - <DT><TT><PARAM NAME="VTcolumns" VALUE="<I>80</I>"></TT> - <DD>Sets the columns of the terminal initially. If the parameter - VTresize is set to <B>screen</B> this may change, else it is fixed. - <DT><TT><PARAM NAME="VTrows" VALUE="<I>24</I>"></TT> - <DD>Sets the rows of the terminal initially. If the parameter - value of VTresize <B>screen</B> this may change! - <DT><TT><PARAM NAME="VTfont" VALUE="<I>Courier</I>"></TT> - <DD>Sets the font to be used for the terminal. It is recommended to - use <I>Courier</I> or at least a fixed width font. - <DT><TT><PARAM NAME="VTfontsize" VALUE="<I>14</I>"></TT> - <DD>Sets the font size for the terminal. If the parameter - value of VTresize is set to <B>font</B> this may change! - <DT><TT><PARAM NAME="VTresize" VALUE="<I>font</I>"></TT> - <DD>This parameter determines what the terminal should do if the window - is resized. The default setting <I><B>font</B></I> will result in - resizing the font until is matches the window best. Other possible - values are <B>none</B> or <B>screen</B>. <B>none</B> will let nothing - happen and <B>screen</B> will let the display try to change the - amount of rows and columns to match the window best. - <DT><TT><PARAM NAME="VTscrollbar" VALUE="<I>false</I>"></TT> - <DD>Setting this parameter to <B>true</B> will add a scrollbar west to - the terminal. Other possible values include <B>left</B> to put the - scrollbar on the left side of the terminal and <B>right</B> to put it - explicitely to the right side. - <DT><TT><PARAM NAME="VTid" VALUE="<I>vt320</I>"></TT> - <DD>This parameter will override the terminal id <I>vt320</I>. It may - be used to determine special terminal abilities of VT Terminals. - <DT><TT><PARAM NAME="VTbuffer" VALUE="<I>xx</I>"></TT> - <DD>Initially this parameter is the same as the VTrows parameter. It - cannot be less than the amount of rows on the display. It determines - the available scrollback buffer. - <DT><TT><PARAM NAME="VTcharset" VALUE="<I>none</I>"></TT> - <DD>Setting this parameter to <B>ibm</B> will enable mapping of ibm - characters (as used in PC BBS systems) to UNICODE characters. Note - that those special characters probably won't show on UNIX systems - due to lack in X11 UNICODE support. - <DT><TT><PARAM NAME="VTvms" VALUE="<I>false</I>"></TT> - <DD>Setting this parameter to <B>true</B> will change the Backspace key - into a delete key, cause the numeric keypad keys to emit VT100 - codes when Ctrl is pressed, and make other VMS-important keyboard - definitions. - <DT><TT><PARAM NAME="F<I>nr</I>" VALUE="<I>string</I>"></TT> - <DD>Function keys from <I>F1</I> to <I>F20</I> are programmable. You can - install any possible string including special characters, such as - <TABLE BORDER> - <TR><TD><TT>\e</TT></TD><TD>Escape</TD> - <TR><TD><TT>\b</TT></TD><TD>Backspace</TD> - <TR><TD><TT>\n</TT></TD><TD>Newline</TD> - <TR><TD><TT>\r</TT></TD><TD>Return</TD> - <TR><TD><TT>\xxxx</TT></TD><TD>Character xxxx (decimal)</TD> - </TABLE> - <DT><TT><PARAM NAME="CF<I>nr</I>" VALUE="<I>string</I>"></TT> - <DD>Function keys (with the Control-key pressed) from <I>CF1</I> to <I>CF20</I> are programmable too. - <DT><TT><PARAM NAME="SF<I>nr</I>" VALUE="<I>string</I>"></TT> - <DD>Function keys (with the Shift-key pressed) from <I>SF1</I> to <I>SF20</I> are programmable too. - <DT><TT><PARAM NAME="AF<I>nr</I>" VALUE="<I>string</I>"></TT> - <DD>Function keys (with the Alt-key pressed) from <I>AF1</I> to <I>AF20</I> are programmable too. - </DL> -<P> -<DL> -<DT><B>Version: </B><DD>$Id: vt320.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei?ner</DD> -<DT><B>See Also: </B><DD><A HREF="../serialized-form.html#display.vt320">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="field_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Field Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#INSERT">INSERT</A></B></CODE> - -<BR> - The Insert key.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#KEYCAPS_LOCK">KEYCAPS_LOCK</A></B></CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#KEYINSERT">KEYINSERT</A></B></CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#KEYNUM_LOCK">KEYNUM_LOCK</A></B></CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#KEYPAUSE">KEYPAUSE</A></B></CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#KEYPRINT_SCREEN">KEYPRINT_SCREEN</A></B></CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#KEYSCROLL_LOCK">KEYSCROLL_LOCK</A></B></CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static char[]</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#unimap">unimap</A></B></CODE> - -<BR> - </TD> -</TR> -</TABLE> - <A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../display/vt320.html#vt320()">vt320</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#addNotify()">addNotify</A></B>()</CODE> - -<BR> - Initialize terminal.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String[][]</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#getParameterInfo()">getParameterInfo</A></B>()</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.awt.Dimension</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#getSize()">getSize</A></B>()</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#getTerminalType()">getTerminalType</A></B>()</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#handleEvent(java.awt.Event)">handleEvent</A></B>(java.awt.Event evt)</CODE> - -<BR> - Handle events for the terminal.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> char</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#map_cp850_unicode(char)">map_cp850_unicode</A></B>(char x)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#putChar(char)">putChar</A></B>(char c)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#putChar(char, boolean)">putChar</A></B>(char c, - boolean doshowcursor)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#putString(java.lang.String)">putString</A></B>(java.lang.String s)</CODE> - -<BR> - Put String at current cursor position.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#send(java.lang.String)">send</A></B>(java.lang.String s)</CODE> - -<BR> - Dummy method to handle input events (String).</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../display/vt320.html#toString()">toString</A></B>()</CODE> - -<BR> - Return the version of the terminal emulation and its display.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paint, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocale, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -reshape, -resize, -resize, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - -<A NAME="field_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Field Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="KEYPRINT_SCREEN"><!-- --></A><H3> -KEYPRINT_SCREEN</H3> -<PRE> -public static final int <B>KEYPRINT_SCREEN</B></PRE> -<DL> -</DL> -<HR> - -<A NAME="KEYSCROLL_LOCK"><!-- --></A><H3> -KEYSCROLL_LOCK</H3> -<PRE> -public static final int <B>KEYSCROLL_LOCK</B></PRE> -<DL> -</DL> -<HR> - -<A NAME="KEYCAPS_LOCK"><!-- --></A><H3> -KEYCAPS_LOCK</H3> -<PRE> -public static final int <B>KEYCAPS_LOCK</B></PRE> -<DL> -</DL> -<HR> - -<A NAME="KEYNUM_LOCK"><!-- --></A><H3> -KEYNUM_LOCK</H3> -<PRE> -public static final int <B>KEYNUM_LOCK</B></PRE> -<DL> -</DL> -<HR> - -<A NAME="KEYPAUSE"><!-- --></A><H3> -KEYPAUSE</H3> -<PRE> -public static final int <B>KEYPAUSE</B></PRE> -<DL> -</DL> -<HR> - -<A NAME="KEYINSERT"><!-- --></A><H3> -KEYINSERT</H3> -<PRE> -public static final int <B>KEYINSERT</B></PRE> -<DL> -</DL> -<HR> - -<A NAME="INSERT"><!-- --></A><H3> -INSERT</H3> -<PRE> -public static final int <B>INSERT</B></PRE> -<DL> -<DD>The Insert key.</DL> -<HR> - -<A NAME="unimap"><!-- --></A><H3> -unimap</H3> -<PRE> -public static final char[] <B>unimap</B></PRE> -<DL> -</DL> - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="vt320()"><!-- --></A><H3> -vt320</H3> -<PRE> -public <B>vt320</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="toString()"><!-- --></A><H3> -toString</H3> -<PRE> -public java.lang.String <B>toString</B>()</PRE> -<DL> -<DD>Return the version of the terminal emulation and its display.<DD><DL> -<DT><B>Overrides:</B><DD>toString in class java.awt.Component</DL> -</DD> -</DL> -<HR> - -<A NAME="getParameterInfo()"><!-- --></A><H3> -getParameterInfo</H3> -<PRE> -public java.lang.String[][] <B>getParameterInfo</B>()</PRE> -<DL> -<DD><DL> -<DT><B>Overrides:</B><DD><A HREF="../display/Terminal.html#getParameterInfo()">getParameterInfo</A> in class <A HREF="../display/Terminal.html">Terminal</A></DL> -</DD> -</DL> -<HR> - -<A NAME="addNotify()"><!-- --></A><H3> -addNotify</H3> -<PRE> -public void <B>addNotify</B>()</PRE> -<DL> -<DD>Initialize terminal.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>parent</CODE> - the applet parent where to get parameters from<DT><B>Overrides:</B><DD>addNotify in class java.awt.Panel<DT><B>See Also: </B><DD><A HREF="../display/Terminal.html"><CODE>Terminal</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="getSize()"><!-- --></A><H3> -getSize</H3> -<PRE> -public java.awt.Dimension <B>getSize</B>()</PRE> -<DL> -<DD><DL> -<DT><B>Overrides:</B><DD><A HREF="../display/Terminal.html#getSize()">getSize</A> in class <A HREF="../display/Terminal.html">Terminal</A></DL> -</DD> -</DL> -<HR> - -<A NAME="getTerminalType()"><!-- --></A><H3> -getTerminalType</H3> -<PRE> -public java.lang.String <B>getTerminalType</B>()</PRE> -<DL> -<DD><DL> -<DT><B>Overrides:</B><DD><A HREF="../display/Terminal.html#getTerminalType()">getTerminalType</A> in class <A HREF="../display/Terminal.html">Terminal</A></DL> -</DD> -</DL> -<HR> - -<A NAME="handleEvent(java.awt.Event)"><!-- --></A><H3> -handleEvent</H3> -<PRE> -public boolean <B>handleEvent</B>(java.awt.Event evt)</PRE> -<DL> -<DD>Handle events for the terminal. Only accept events for the scroll - bar. Any other events have to be propagated to the parent.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>evt</CODE> - the event<DT><B>Overrides:</B><DD>handleEvent in class java.awt.Component</DL> -</DD> -</DL> -<HR> - -<A NAME="send(java.lang.String)"><!-- --></A><H3> -send</H3> -<PRE> -public boolean <B>send</B>(java.lang.String s)</PRE> -<DL> -<DD>Dummy method to handle input events (String). - This is only needed if our parent is not TerminalHost<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../display/TerminalHost.html#send(java.lang.String)">send</A> in interface <A HREF="../display/TerminalHost.html">TerminalHost</A><DT><B>Parameters:</B><DD><CODE>s</CODE> - String to handle<DT><B>Returns:</B><DD>always true<DT><B>See Also: </B><DD><A HREF="../display/TerminalHost.html"><CODE>TerminalHost</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="putString(java.lang.String)"><!-- --></A><H3> -putString</H3> -<PRE> -public void <B>putString</B>(java.lang.String s)</PRE> -<DL> -<DD>Put String at current cursor position. Moves cursor - according to the String. Does NOT wrap.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>s</CODE> - the string<DT><B>Overrides:</B><DD><A HREF="../display/Terminal.html#putString(java.lang.String)">putString</A> in class <A HREF="../display/Terminal.html">Terminal</A></DL> -</DD> -</DL> -<HR> - -<A NAME="putChar(char)"><!-- --></A><H3> -putChar</H3> -<PRE> -public void <B>putChar</B>(char c)</PRE> -<DL> -<DD><DL> -<DT><B>Overrides:</B><DD><A HREF="../display/Terminal.html#putChar(char)">putChar</A> in class <A HREF="../display/Terminal.html">Terminal</A></DL> -</DD> -</DL> -<HR> - -<A NAME="map_cp850_unicode(char)"><!-- --></A><H3> -map_cp850_unicode</H3> -<PRE> -public char <B>map_cp850_unicode</B>(char x)</PRE> -<DL> -<DD><DL> -</DL> -</DD> -</DL> -<HR> - -<A NAME="putChar(char, boolean)"><!-- --></A><H3> -putChar</H3> -<PRE> -public void <B>putChar</B>(char c, - boolean doshowcursor)</PRE> -<DL> -<DD><DL> -</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/Terminal.html"><B>PREV CLASS</B></A> - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="vt320.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/help-doc.html b/web/root/telnet/Documentation/Source/help-doc.html deleted file mode 100644 index dfaccc436dd37febf989cb9dc7de5143aca98c18..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/help-doc.html +++ /dev/null @@ -1,146 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:37 CEST 1999 --> -<TITLE> -: API Help -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Help</B></FONT> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<CENTER> -<H1> -How This API Document Is Organized</H1> -</CENTER> -This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3> -Overview</H3> -<BLOCKQUOTE> - -<P> -The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.</BLOCKQUOTE> -<H3> -Package</H3> -<BLOCKQUOTE> - -<P> -Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL> -<LI>Interfaces (italic)<LI>Classes<LI>Exceptions<LI>Errors</UL> -</BLOCKQUOTE> -<H3> -Class/Interface</H3> -<BLOCKQUOTE> - -<P> -Each class, interface, inner class and inner interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL> -<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description -<P> -<LI>Inner Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary -<P> -<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL> -Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE> -<H3> -Tree (Class Hierarchy)</H3> -<BLOCKQUOTE> -There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL> -<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL> -</BLOCKQUOTE> -<H3> -Deprecated API</H3> -<BLOCKQUOTE> -The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE> -<H3> -Index</H3> -<BLOCKQUOTE> -The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE> -<H3> -Prev/Next</H3> -These links take you to the next or previous class, interface, package, or related page.<H3> -Frames/No Frames</H3> -These links show and hide the HTML frames. All pages are available with or without frames. -<P> -<H3> -Serialized Form</H3> -Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. -<P> -<FONT SIZE="-1"> -<EM> -This help file applies to API documentation generated using the standard doclet. </EM> -</FONT> -<BR> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Help</B></FONT> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/images/blue-ball-small.gif b/web/root/telnet/Documentation/Source/images/blue-ball-small.gif deleted file mode 100644 index d4c5cde5b005117d443e595db216e8a212831f75..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/blue-ball-small.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/blue-ball.gif b/web/root/telnet/Documentation/Source/images/blue-ball.gif deleted file mode 100644 index edc29b786ce52736bf9f2a1ac38aaa78b1799e92..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/blue-ball.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/class-index.gif b/web/root/telnet/Documentation/Source/images/class-index.gif deleted file mode 100644 index 7f276bcb242e6136502f60bded36f5326bab534a..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/class-index.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/constrct.gif b/web/root/telnet/Documentation/Source/images/constrct.gif deleted file mode 100644 index d1a6ae507ca808dd0df7f7cef51fbb3a4aa7050a..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/constrct.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/constructor-index.gif b/web/root/telnet/Documentation/Source/images/constructor-index.gif deleted file mode 100644 index 435cac42386bbd6537502c2cf4f0e61dbe5bbf67..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/constructor-index.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/constructors.gif b/web/root/telnet/Documentation/Source/images/constructors.gif deleted file mode 100644 index d1a6ae507ca808dd0df7f7cef51fbb3a4aa7050a..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/constructors.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/cyan-ball-small.gif b/web/root/telnet/Documentation/Source/images/cyan-ball-small.gif deleted file mode 100644 index 7f74357443af1e4323a2e6597c59a2e8a508b149..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/cyan-ball-small.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/cyan-ball.gif b/web/root/telnet/Documentation/Source/images/cyan-ball.gif deleted file mode 100644 index 97ca1f2b6e3956db2a34dea63b25bf308fa0085c..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/cyan-ball.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/error-index.gif b/web/root/telnet/Documentation/Source/images/error-index.gif deleted file mode 100644 index 22835ff8c64d5af8369f589cf17819263a8e8fbc..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/error-index.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/exception-index.gif b/web/root/telnet/Documentation/Source/images/exception-index.gif deleted file mode 100644 index e3830d9c52e7899bb62b56f56f71ba304108ed83..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/exception-index.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/field_ix.gif b/web/root/telnet/Documentation/Source/images/field_ix.gif deleted file mode 100644 index 304ce7d59a25edb878a96399ebcdd77cd9d3a0c8..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/field_ix.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/fields.gif b/web/root/telnet/Documentation/Source/images/fields.gif deleted file mode 100644 index 6e2a42d940e367265e076bba834884a633461d3c..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/fields.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/green-ball-small.gif b/web/root/telnet/Documentation/Source/images/green-ball-small.gif deleted file mode 100644 index 17fea5b32bb808c030865d16d4640a1598e6b76d..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/green-ball-small.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/green-ball.gif b/web/root/telnet/Documentation/Source/images/green-ball.gif deleted file mode 100644 index 71e1b2ec2db92415bf28bc917b772ab874000d31..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/green-ball.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/interface-index.gif b/web/root/telnet/Documentation/Source/images/interface-index.gif deleted file mode 100644 index bf93dda9e3536f9bd1129ff3008d6ca8e998dceb..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/interface-index.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/magenta-ball-small.gif b/web/root/telnet/Documentation/Source/images/magenta-ball-small.gif deleted file mode 100644 index bd0584b3c6751baf523dbb07d856bd5443a23a20..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/magenta-ball-small.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/magenta-ball.gif b/web/root/telnet/Documentation/Source/images/magenta-ball.gif deleted file mode 100644 index 5da03b84d2bf772dd396adf1be8a53e7c46ec54b..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/magenta-ball.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/method-index.gif b/web/root/telnet/Documentation/Source/images/method-index.gif deleted file mode 100644 index a05e7051160fc7b579abde9ea02e0af9d796cb8e..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/method-index.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/methods.gif b/web/root/telnet/Documentation/Source/images/methods.gif deleted file mode 100644 index 949e01b8a33818bf52b2d124a504967d0d75e954..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/methods.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/package-index.gif b/web/root/telnet/Documentation/Source/images/package-index.gif deleted file mode 100644 index f894d4210d743ad9a4f0736159ef226279508dc1..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/package-index.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/red-ball-small.gif b/web/root/telnet/Documentation/Source/images/red-ball-small.gif deleted file mode 100644 index f6b3c372ca1e7e70f805981b93c6cd678570e993..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/red-ball-small.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/red-ball.gif b/web/root/telnet/Documentation/Source/images/red-ball.gif deleted file mode 100644 index dca92960148cb3751f9b2de8cf96f26293c15888..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/red-ball.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/variable-index.gif b/web/root/telnet/Documentation/Source/images/variable-index.gif deleted file mode 100644 index 65cc029e722f8cc8d4663328fe955faab8455982..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/variable-index.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/variables.gif b/web/root/telnet/Documentation/Source/images/variables.gif deleted file mode 100644 index 6e2a42d940e367265e076bba834884a633461d3c..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/variables.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/yellow-ball-small.gif b/web/root/telnet/Documentation/Source/images/yellow-ball-small.gif deleted file mode 100644 index 8e5f57cdfcbfbd4ccd3504bdae10cbc9215ef8ca..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/yellow-ball-small.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/images/yellow-ball.gif b/web/root/telnet/Documentation/Source/images/yellow-ball.gif deleted file mode 100644 index 2b8c0bb3d6baad5fdb28a878b33c265daeafe9d4..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/Source/images/yellow-ball.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/Source/index-all.html b/web/root/telnet/Documentation/Source/index-all.html deleted file mode 100644 index 7986cb5770aeb352781ffb9f8c9e1256dd51223c..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/index-all.html +++ /dev/null @@ -1,801 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:31 CEST 1999 --> -<TITLE> -: Index -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Index</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_K_">K</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> <HR> -<A NAME="_A_"><!-- --></A><H2> -<B>A</B></H2> -<DL> -<DT><A HREF="display/vt320.html#addNotify()"><B>addNotify()</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD>Initialize terminal. -<DT><A HREF="modules/BSXModule.html#addNotify()"><B>addNotify()</B></A> - -Method in class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD>Adds two Buttons to the Panel and instanciates a BSXWindow. -<DT><A HREF="modules/MudConnector.html#addNotify()"><B>addNotify()</B></A> - -Method in class modules.<A HREF="modules/MudConnector.html">MudConnector</A> -<DD>when newly added try to load the mudlist using the parameter "mudlist" -<DT><A HREF="modules/ButtonBar.html#addNotify()"><B>addNotify()</B></A> - -Method in class modules.<A HREF="modules/ButtonBar.html">ButtonBar</A> -<DD>create the buttonbar from the parameter list. -<DT><A HREF="telnet.html#address"><B>address</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>The host address to connect to. -<DT><A HREF="appWrapper.html#appletResize(int, int)"><B>appletResize(int, int)</B></A> - -Method in class <A HREF="appWrapper.html">appWrapper</A> -<DD>This method is called when the applet want's to be resized. -<DT><A HREF="appWrapper.html"><B>appWrapper</B></A> - class <A HREF="appWrapper.html">appWrapper</A>.<DD>The appWrapper is thought to make the applet itself independent from - the original context.<DT><A HREF="appWrapper.html#appWrapper()"><B>appWrapper()</B></A> - -Constructor for class <A HREF="appWrapper.html">appWrapper</A> -<DD> -<DT><A HREF="socket/TelnetWrapper.html#available()"><B>available()</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Returns bytes available to be read. -<DT><A HREF="socket/TelnetIO.html#available()"><B>available()</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Returns bytes available to be read. -</DL> -<HR> -<A NAME="_B_"><!-- --></A><H2> -<B>B</B></H2> -<DL> -<DT><A HREF="display/CharDisplay.html#BOLD"><B>BOLD</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Make character bold. -<DT><A HREF="modules/BSXModule.html"><B>BSXModule</B></A> - class modules.<A HREF="modules/BSXModule.html">BSXModule</A>.<DD>The ultimate BSX module implements most of the common used - BSX controll sequences.<DT><A HREF="modules/BSXModule.html#BSXModule()"><B>BSXModule()</B></A> - -Constructor for class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD> -<DT><A HREF="modules/ButtonBar.html"><B>ButtonBar</B></A> - class modules.<A HREF="modules/ButtonBar.html">ButtonBar</A>.<DD>This class implements a programmable button bar.<DT><A HREF="modules/ButtonBar.html#ButtonBar()"><B>ButtonBar()</B></A> - -Constructor for class modules.<A HREF="modules/ButtonBar.html">ButtonBar</A> -<DD> -</DL> -<HR> -<A NAME="_C_"><!-- --></A><H2> -<B>C</B></H2> -<DL> -<DT><A HREF="display/CharDisplay.html"><B>CharDisplay</B></A> - class display.<A HREF="display/CharDisplay.html">CharDisplay</A>.<DD>A simple character display.<DT><A HREF="display/CharDisplay.html#CharDisplay()"><B>CharDisplay()</B></A> - -Constructor for class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Create a character display with size 80x24 and Font "Courier", size 12. -<DT><A HREF="display/CharDisplay.html#CharDisplay(int, int)"><B>CharDisplay(int, int)</B></A> - -Constructor for class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Create a character display with specific size, Font is "Courier", size 12. -<DT><A HREF="display/CharDisplay.html#CharDisplay(int, int, java.lang.String, int)"><B>CharDisplay(int, int, String, int)</B></A> - -Constructor for class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Create a character display with specific size, font and font size. -<DT><A HREF="display/CharDisplay.html#CharDisplay(java.lang.String, int)"><B>CharDisplay(String, int)</B></A> - -Constructor for class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Create a character display with 80x24 and specific font and font size. -<DT><A HREF="CharDisplayTest.html"><B>CharDisplayTest</B></A> - class <A HREF="CharDisplayTest.html">CharDisplayTest</A>.<DD>CharDisplayTest -- a test applet to show the display/CharDisplay features - --<DT><A HREF="CharDisplayTest.html#CharDisplayTest()"><B>CharDisplayTest()</B></A> - -Constructor for class <A HREF="CharDisplayTest.html">CharDisplayTest</A> -<DD> -<DT><A HREF="modules/BSXModule.html#clientVersion"><B>clientVersion</B></A> - -Variable in class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD>Client Version -<DT><A HREF="telnet.html#connect()"><B>connect()</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Connect to the specified host and port but don't break existing - connections. -<DT><A HREF="telnet.html#connect(java.lang.String)"><B>connect(String)</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Connect to the specified host and port but don't break existing - connections. -<DT><A HREF="socket/TelnetIO.html#connect(java.lang.String)"><B>connect(String)</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Connect to the remote host at the default telnet port (23). -<DT><A HREF="telnet.html#connect(java.lang.String, int)"><B>connect(String, int)</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Connect to the specified host and port but don't break existing - connections. -<DT><A HREF="socket/TelnetIO.html#connect(java.lang.String, int)"><B>connect(String, int)</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Connect to the remote host at the specified port. -<DT><A HREF="modules/BSXModule.html#connect(java.lang.String, int)"><B>connect(String, int)</B></A> - -Method in class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD>do nothing -<DT><A HREF="modules/Module.html#connect(java.lang.String, int)"><B>connect(String, int)</B></A> - -Method in interface modules.<A HREF="modules/Module.html">Module</A> -<DD>Connected to the remote host. -<DT><A HREF="modules/TextLabel.html#connect(java.lang.String, int)"><B>connect(String, int)</B></A> - -Method in class modules.<A HREF="modules/TextLabel.html">TextLabel</A> -<DD>Do nothing upon connect. -<DT><A HREF="modules/MudConnector.html#connect(java.lang.String, int)"><B>connect(String, int)</B></A> - -Method in class modules.<A HREF="modules/MudConnector.html">MudConnector</A> -<DD>dummy methods -<DT><A HREF="modules/Script.html#connect(java.lang.String, int)"><B>connect(String, int)</B></A> - -Method in class modules.<A HREF="modules/Script.html">Script</A> -<DD>Configure the script module by reading the script PARAMeter. -<DT><A HREF="modules/ButtonBar.html#connect(java.lang.String, int)"><B>connect(String, int)</B></A> - -Method in class modules.<A HREF="modules/ButtonBar.html">ButtonBar</A> -<DD>If the applet connects this method is called. -</DL> -<HR> -<A NAME="_D_"><!-- --></A><H2> -<B>D</B></H2> -<DL> -<DT><A HREF="display/CharDisplay.html#debug"><B>debug</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Enable debug messages. -<DT><A HREF="socket/TelnetWrapper.html#debug"><B>debug</B></A> - -Variable in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Set to true for System.out.println debugging. -<DT><A HREF="display/CharDisplay.html#deleteArea(int, int, int, int)"><B>deleteArea(int, int, int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Delete a rectangular portion of the screen. -<DT><A HREF="display/CharDisplay.html#deleteChar(int, int)"><B>deleteChar(int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Delete a character at a given position on the screen. -<DT><A HREF="display/CharDisplay.html#deleteLine(int)"><B>deleteLine(int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Delete a line at a specific position. -<DT><A HREF="telnet.html#disconnect()"><B>disconnect()</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Disconnect from the remote host. -<DT><A HREF="socket/TelnetWrapper.html#disconnect()"><B>disconnect()</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Ends the telnet connection. -<DT><A HREF="socket/TelnetIO.html#disconnect()"><B>disconnect()</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Disconnect from remote host. -<DT><A HREF="modules/BSXModule.html#disconnect()"><B>disconnect()</B></A> - -Method in class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD>do nothing -<DT><A HREF="modules/Module.html#disconnect()"><B>disconnect()</B></A> - -Method in interface modules.<A HREF="modules/Module.html">Module</A> -<DD>Disconnect from the host. -<DT><A HREF="modules/TextLabel.html#disconnect()"><B>disconnect()</B></A> - -Method in class modules.<A HREF="modules/TextLabel.html">TextLabel</A> -<DD>Do nothing upon disconnecton. -<DT><A HREF="modules/MudConnector.html#disconnect()"><B>disconnect()</B></A> - -Method in class modules.<A HREF="modules/MudConnector.html">MudConnector</A> -<DD> -<DT><A HREF="modules/Script.html#disconnect()"><B>disconnect()</B></A> - -Method in class modules.<A HREF="modules/Script.html">Script</A> -<DD>Get notified of disconnection. -<DT><A HREF="modules/ButtonBar.html#disconnect()"><B>disconnect()</B></A> - -Method in class modules.<A HREF="modules/ButtonBar.html">ButtonBar</A> -<DD>Get notified of disconnection. -<DT><A HREF="display/package-summary.html">display</A> - package display<DD> <DT><A HREF="display/SoftFont.html#drawChar(java.awt.Graphics, char, int, int, int, int)"><B>drawChar(Graphics, char, int, int, int, int)</B></A> - -Method in class display.<A HREF="display/SoftFont.html">SoftFont</A> -<DD> -</DL> -<HR> -<A NAME="_E_"><!-- --></A><H2> -<B>E</B></H2> -<DL> -<DT><A HREF="telnet.html#emulation"><B>emulation</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>Emulation type (default is vt320). -</DL> -<HR> -<A NAME="_F_"><!-- --></A><H2> -<B>F</B></H2> -<DL> -<DT><A HREF="socket/TelnetWrapper.html#finalize()"><B>finalize()</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Ends the telnet connection. -</DL> -<HR> -<A NAME="_G_"><!-- --></A><H2> -<B>G</B></H2> -<DL> -<DT><A HREF="telnet.html#getAppletInfo()"><B>getAppletInfo()</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Retrieve the current version of the applet. -<DT><A HREF="appWrapper.html#getAppletInfo()"><B>getAppletInfo()</B></A> - -Method in class <A HREF="appWrapper.html">appWrapper</A> -<DD>Give information about the applet. -<DT><A HREF="display/CharDisplay.html#getAttributes(int, int)"><B>getAttributes(int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Get the attributes for the specified position. -<DT><A HREF="display/CharDisplay.html#getBottomMargin()"><B>getBottomMargin()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Get the bottom scroll margin. -<DT><A HREF="display/CharDisplay.html#getBufferSize()"><B>getBufferSize()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Retrieve current scrollback buffer size. -<DT><A HREF="display/CharDisplay.html#getChar(int, int)"><B>getChar(int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Get the character at the specified position. -<DT><A HREF="display/CharDisplay.html#getColumns()"><B>getColumns()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Get amount of columns on the screen. -<DT><A HREF="display/CharDisplay.html#getCursorPos()"><B>getCursorPos()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Get the current cursor position. -<DT><A HREF="display/CharDisplay.html#getMaxBufferSize()"><B>getMaxBufferSize()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Retrieve maximum buffer Size. -<DT><A HREF="telnet.html#getParameter(java.lang.String)"><B>getParameter(String)</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>We override the Applet method getParameter() to be able to handle - parameters even as application. -<DT><A HREF="telnet.html#getParameterInfo()"><B>getParameterInfo()</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Retrieve parameter tag information. -<DT><A HREF="appWrapper.html#getParameterInfo()"><B>getParameterInfo()</B></A> - -Method in class <A HREF="appWrapper.html">appWrapper</A> -<DD>Give information about the appWrapper and the applet loaded. -<DT><A HREF="display/Terminal.html#getParameterInfo()"><B>getParameterInfo()</B></A> - -Method in class display.<A HREF="display/Terminal.html">Terminal</A> -<DD>Get the specific parameter info for the emulation. -<DT><A HREF="display/vt320.html#getParameterInfo()"><B>getParameterInfo()</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/CharDisplay.html#getRows()"><B>getRows()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Get amount of rows on the screen. -<DT><A HREF="display/Terminal.html#getSize()"><B>getSize()</B></A> - -Method in class display.<A HREF="display/Terminal.html">Terminal</A> -<DD>Return the current size of the terminal in characters. -<DT><A HREF="display/vt320.html#getSize()"><B>getSize()</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/Terminal.html#getTerminalType()"><B>getTerminalType()</B></A> - -Method in class display.<A HREF="display/Terminal.html">Terminal</A> -<DD>Return actual terminal type identifier. -<DT><A HREF="display/vt320.html#getTerminalType()"><B>getTerminalType()</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/CharDisplay.html#getTopMargin()"><B>getTopMargin()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Get the top scroll margin. -<DT><A HREF="display/CharDisplay.html#getWindowBase()"><B>getWindowBase()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Get the current window base. -</DL> -<HR> -<A NAME="_H_"><!-- --></A><H2> -<B>H</B></H2> -<DL> -<DT><A HREF="appWrapper.html#handleEvent(java.awt.Event)"><B>handleEvent(Event)</B></A> - -Method in class <A HREF="appWrapper.html">appWrapper</A> -<DD>Handle button events. -<DT><A HREF="CharDisplayTest.html#handleEvent(java.awt.Event)"><B>handleEvent(Event)</B></A> - -Method in class <A HREF="CharDisplayTest.html">CharDisplayTest</A> -<DD> -<DT><A HREF="display/CharDisplay.html#handleEvent(java.awt.Event)"><B>handleEvent(Event)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Handle mouse events for copy & paste -<DT><A HREF="display/vt320.html#handleEvent(java.awt.Event)"><B>handleEvent(Event)</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD>Handle events for the terminal. -<DT><A HREF="modules/BSXModule.html#handleEvent(java.awt.Event)"><B>handleEvent(Event)</B></A> - -Method in class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD>Java 1.0 eventhandling routines. -<DT><A HREF="modules/MudConnector.html#handleEvent(java.awt.Event)"><B>handleEvent(Event)</B></A> - -Method in class modules.<A HREF="modules/MudConnector.html">MudConnector</A> -<DD>handle list selection, connect, disconnect and refresh button -<DT><A HREF="modules/ButtonBar.html#handleEvent(java.awt.Event)"><B>handleEvent(Event)</B></A> - -Method in class modules.<A HREF="modules/ButtonBar.html">ButtonBar</A> -<DD> -</DL> -<HR> -<A NAME="_I_"><!-- --></A><H2> -<B>I</B></H2> -<DL> -<DT><A HREF="telnet.html#init()"><B>init()</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Initialize applet. -<DT><A HREF="appWrapper.html#init()"><B>init()</B></A> - -Method in class <A HREF="appWrapper.html">appWrapper</A> -<DD>Applet initialization. -<DT><A HREF="CharDisplayTest.html#init()"><B>init()</B></A> - -Method in class <A HREF="CharDisplayTest.html">CharDisplayTest</A> -<DD> -<DT><A HREF="display/vt320.html#INSERT"><B>INSERT</B></A> - -Static variable in class display.<A HREF="display/vt320.html">vt320</A> -<DD>The Insert key. -<DT><A HREF="display/CharDisplay.html#insertChar(int, int, char, int)"><B>insertChar(int, int, char, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Insert a character at a specific position on the screen. -<DT><A HREF="display/CharDisplay.html#insertLine(int)"><B>insertLine(int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Insert a blank line at a specific position. -<DT><A HREF="display/CharDisplay.html#insertLine(int, boolean)"><B>insertLine(int, boolean)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Insert a blank line at a specific position. -<DT><A HREF="display/CharDisplay.html#insertLine(int, int)"><B>insertLine(int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Insert blank lines at a specific position. -<DT><A HREF="display/CharDisplay.html#insertLine(int, int, boolean)"><B>insertLine(int, int, boolean)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Insert blank lines at a specific position. -<DT><A HREF="display/CharDisplay.html#insets()"><B>insets()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>The insets of the character display define the border. -<DT><A HREF="display/SoftFont.html#inSoftFont(char)"><B>inSoftFont(char)</B></A> - -Method in class display.<A HREF="display/SoftFont.html">SoftFont</A> -<DD> -<DT><A HREF="display/CharDisplay.html#INVERT"><B>INVERT</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Invert character. -</DL> -<HR> -<A NAME="_K_"><!-- --></A><H2> -<B>K</B></H2> -<DL> -<DT><A HREF="display/vt320.html#KEYCAPS_LOCK"><B>KEYCAPS_LOCK</B></A> - -Static variable in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/vt320.html#KEYINSERT"><B>KEYINSERT</B></A> - -Static variable in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/vt320.html#KEYNUM_LOCK"><B>KEYNUM_LOCK</B></A> - -Static variable in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/vt320.html#KEYPAUSE"><B>KEYPAUSE</B></A> - -Static variable in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/vt320.html#KEYPRINT_SCREEN"><B>KEYPRINT_SCREEN</B></A> - -Static variable in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/vt320.html#KEYSCROLL_LOCK"><B>KEYSCROLL_LOCK</B></A> - -Static variable in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -</DL> -<HR> -<A NAME="_L_"><!-- --></A><H2> -<B>L</B></H2> -<DL> -<DT><A HREF="socket/TelnetWrapper.html#login(java.lang.String, java.lang.String)"><B>login(String, String)</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Logs in as a particular user and password. -</DL> -<HR> -<A NAME="_M_"><!-- --></A><H2> -<B>M</B></H2> -<DL> -<DT><A HREF="telnet.html#main(java.lang.String[])"><B>main(String[])</B></A> - -Static method in class <A HREF="telnet.html">telnet</A> -<DD>The main function is called on startup of the application. -<DT><A HREF="proxy.html#main(java.lang.String[])"><B>main(String[])</B></A> - -Static method in class <A HREF="proxy.html">proxy</A> -<DD>This method is called when the application is run on the commandline. -<DT><A HREF="socket/TelnetWrapper.html#main(java.lang.String[])"><B>main(String[])</B></A> - -Static method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Telnet test driver. -<DT><A HREF="modules/BSXModule.html#main(java.lang.String[])"><B>main(String[])</B></A> - -Static method in class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD>a main for test-purposes -<DT><A HREF="display/vt320.html#map_cp850_unicode(char)"><B>map_cp850_unicode(char)</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/CharDisplay.html#markLine(int, int)"><B>markLine(int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Mark lines to be updated with redraw(). -<DT><A HREF="modules/Module.html"><B>Module</B></A> - interface modules.<A HREF="modules/Module.html">Module</A>.<DD>Modules must implement this interface to be detected as valid modules<DT><A HREF="modules/package-summary.html">modules</A> - package modules<DD> <DT><A HREF="telnet.html#modules"><B>modules</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>Dynamically loaded modules are stored here. -<DT><A HREF="modules/MudConnector.html"><B>MudConnector</B></A> - class modules.<A HREF="modules/MudConnector.html">MudConnector</A>.<DD>A specially designed module for the - <A HREF="http://www.mudconnect.com/">MUD Connector</A>.<DT><A HREF="modules/MudConnector.html#MudConnector()"><B>MudConnector()</B></A> - -Constructor for class modules.<A HREF="modules/MudConnector.html">MudConnector</A> -<DD> -</DL> -<HR> -<A NAME="_N_"><!-- --></A><H2> -<B>N</B></H2> -<DL> -<DT><A HREF="display/CharDisplay.html#NORMAL"><B>NORMAL</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Make character normal. -<DT><A HREF="display/CharDisplay.html#notbold(java.awt.Color)"><B>notbold(Color)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD> -<DT><A HREF="telnet.html#notifyStatus(java.util.Vector)"><B>notifyStatus(Vector)</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>This method is called when telnet needs to be notified of status changes. -<DT><A HREF="socket/TelnetIO.html#notifyStatus(java.util.Vector)"><B>notifyStatus(Vector)</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Notify about current telnet status. -<DT><A HREF="socket/StatusPeer.html#notifyStatus(java.util.Vector)"><B>notifyStatus(Vector)</B></A> - -Method in interface socket.<A HREF="socket/StatusPeer.html">StatusPeer</A> -<DD>This method is called for the peer of the TelnetIO class if there is - a statuschange. -</DL> -<HR> -<A NAME="_P_"><!-- --></A><H2> -<B>P</B></H2> -<DL> -<DT><A HREF="appWrapper.html#paint(java.awt.Graphics)"><B>paint(Graphics)</B></A> - -Method in class <A HREF="appWrapper.html">appWrapper</A> -<DD>Write a message to the applet area. -<DT><A HREF="display/CharDisplay.html#paint(java.awt.Graphics)"><B>paint(Graphics)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Paint the current screen. -<DT><A HREF="telnet.html#params"><B>params</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>This Hashtable contains information retrievable by getParameter() in case - the program is run as an application and the AppletStub is missing. -<DT><A HREF="telnet.html#port"><B>port</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>The port number (default ist 23). -<DT><A HREF="display/CharDisplay.html#preferredSize()"><B>preferredSize()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Return the preferred Size of the character display. -<DT><A HREF="proxy.html"><B>proxy</B></A> - class <A HREF="proxy.html">proxy</A>.<DD>proxy class -- implements a proxy server to redirect network access<DT><A HREF="telnet.html#proxy"><B>proxy</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>The proxy ip address. -<DT><A HREF="proxy.html#proxy(int, java.lang.String, int)"><B>proxy(int, String, int)</B></A> - -Constructor for class <A HREF="proxy.html">proxy</A> -<DD>Create a server socket and start listening on the local port. -<DT><A HREF="telnet.html#proxyport"><B>proxyport</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>The proxy port number. -<DT><A HREF="display/Terminal.html#putChar(char)"><B>putChar(char)</B></A> - -Method in class display.<A HREF="display/Terminal.html">Terminal</A> -<DD>Put a character on the screen. -<DT><A HREF="display/vt320.html#putChar(char)"><B>putChar(char)</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/vt320.html#putChar(char, boolean)"><B>putChar(char, boolean)</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="display/CharDisplay.html#putChar(int, int, char)"><B>putChar(int, int, char)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Put a character on the screen with normal font and outline. -<DT><A HREF="display/CharDisplay.html#putChar(int, int, char, int)"><B>putChar(int, int, char, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Put a character on the screen with specific font and outline. -<DT><A HREF="display/CharDisplay.html#putString(int, int, java.lang.String)"><B>putString(int, int, String)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Put a String at a specific position. -<DT><A HREF="display/CharDisplay.html#putString(int, int, java.lang.String, int)"><B>putString(int, int, String, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Put a String at a specific position giving all characters the same - attributes. -<DT><A HREF="display/Terminal.html#putString(java.lang.String)"><B>putString(String)</B></A> - -Method in class display.<A HREF="display/Terminal.html">Terminal</A> -<DD>Put a character on the screen. -<DT><A HREF="display/vt320.html#putString(java.lang.String)"><B>putString(String)</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD>Put String at current cursor position. -</DL> -<HR> -<A NAME="_R_"><!-- --></A><H2> -<B>R</B></H2> -<DL> -<DT><A HREF="socket/TelnetWrapper.html#receive()"><B>receive()</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Returns a String from the telnet connection. -<DT><A HREF="socket/TelnetIO.html#receive()"><B>receive()</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Read data from the remote host. -<DT><A HREF="modules/BSXModule.html#receive(java.lang.String)"><B>receive(String)</B></A> - -Method in class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD>This method is called by the telnet, so that we can parse the String. -<DT><A HREF="modules/Module.html#receive(java.lang.String)"><B>receive(String)</B></A> - -Method in interface modules.<A HREF="modules/Module.html">Module</A> -<DD>Receive data from somewhere. -<DT><A HREF="modules/TextLabel.html#receive(java.lang.String)"><B>receive(String)</B></A> - -Method in class modules.<A HREF="modules/TextLabel.html">TextLabel</A> -<DD>Do nothing when receiving text. -<DT><A HREF="modules/MudConnector.html#receive(java.lang.String)"><B>receive(String)</B></A> - -Method in class modules.<A HREF="modules/MudConnector.html">MudConnector</A> -<DD> -<DT><A HREF="modules/Script.html#receive(java.lang.String)"><B>receive(String)</B></A> - -Method in class modules.<A HREF="modules/Script.html">Script</A> -<DD>This method is called when data is received. -<DT><A HREF="modules/ButtonBar.html#receive(java.lang.String)"><B>receive(String)</B></A> - -Method in class modules.<A HREF="modules/ButtonBar.html">ButtonBar</A> -<DD>This module does not take any input. -<DT><A HREF="socket/TelnetWrapper.html#receiveBytes()"><B>receiveBytes()</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Returns a byte array. -<DT><A HREF="socket/TelnetWrapper.html#receiveUntil(java.lang.String)"><B>receiveUntil(String)</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Returns all data received up until a certain token. -<DT><A HREF="socket/TelnetWrapper.html#receiveUntil(java.lang.String, long)"><B>receiveUntil(String, long)</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Returns all data received up until a certain token. -<DT><A HREF="display/CharDisplay.html#redraw()"><B>redraw()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Redraw marked lines. -<DT><A HREF="appWrapper.html#reshape(int, int, int, int)"><B>reshape(int, int, int, int)</B></A> - -Method in class <A HREF="appWrapper.html">appWrapper</A> -<DD>reshape the applet and ourself -<DT><A HREF="display/CharDisplay.html#reshape(int, int, int, int)"><B>reshape(int, int, int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Reshape character display according to resize strategy. -<DT><A HREF="display/CharDisplay.html#RESIZE_FONT"><B>RESIZE_FONT</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Resize the font to the new screensize. -<DT><A HREF="display/CharDisplay.html#RESIZE_NONE"><B>RESIZE_NONE</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Do nothing when the container is resized. -<DT><A HREF="display/CharDisplay.html#RESIZE_SCREEN"><B>RESIZE_SCREEN</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Resize the width and height of the characterscreen. -<DT><A HREF="telnet.html#run()"><B>run()</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Try to read data from the sockets and put it on the terminal. -<DT><A HREF="appWrapper.html#run()"><B>run()</B></A> - -Method in class <A HREF="appWrapper.html">appWrapper</A> -<DD>Load the applet finally. -<DT><A HREF="proxy.html#run()"><B>run()</B></A> - -Method in class <A HREF="proxy.html">proxy</A> -<DD>Cycle around until an error occurs and wait for incoming connections. -<DT><A HREF="modules/MudConnector.html#run()"><B>run()</B></A> - -Method in class modules.<A HREF="modules/MudConnector.html">MudConnector</A> -<DD>The body of the thread opens a URLConnection with the address given as - parameter "mudlist" and downloads it. -</DL> -<HR> -<A NAME="_S_"><!-- --></A><H2> -<B>S</B></H2> -<DL> -<DT><A HREF="modules/Script.html"><B>Script</B></A> - class modules.<A HREF="modules/Script.html">Script</A>.<DD>A very simple scripting module.<DT><A HREF="modules/Script.html#Script()"><B>Script()</B></A> - -Constructor for class modules.<A HREF="modules/Script.html">Script</A> -<DD> -<DT><A HREF="display/CharDisplay.html#SCROLL_DOWN"><B>SCROLL_DOWN</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Scroll down when inserting a line. -<DT><A HREF="display/CharDisplay.html#SCROLL_UP"><B>SCROLL_UP</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Scroll up when inserting a line. -<DT><A HREF="socket/TelnetIO.html#send(byte)"><B>send(byte)</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD> -<DT><A HREF="socket/TelnetWrapper.html#send(byte[])"><B>send(byte[])</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Sends bytes over the telnet connection. -<DT><A HREF="socket/TelnetIO.html#send(byte[])"><B>send(byte[])</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Send data to the remote host. -<DT><A HREF="telnet.html#send(java.lang.String)"><B>send(String)</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Send a String to the remote host. -<DT><A HREF="display/TerminalHost.html#send(java.lang.String)"><B>send(String)</B></A> - -Method in interface display.<A HREF="display/TerminalHost.html">TerminalHost</A> -<DD>Send a string to the host and return if it was received successfully. -<DT><A HREF="display/vt320.html#send(java.lang.String)"><B>send(String)</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD>Dummy method to handle input events (String). -<DT><A HREF="socket/TelnetWrapper.html#send(java.lang.String)"><B>send(String)</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Sends a String to the remote host. -<DT><A HREF="socket/TelnetWrapper.html#sendLine(java.lang.String)"><B>sendLine(String)</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Sends a line to the remote host, returns all data before the prompt. -<DT><A HREF="display/CharDisplay.html#setBorder(int, boolean)"><B>setBorder(int, boolean)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Set the border thickness and the border type. -<DT><A HREF="display/CharDisplay.html#setBottomMargin(int)"><B>setBottomMargin(int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Set the bottom scroll margin for the screen. -<DT><A HREF="display/CharDisplay.html#setBufferSize(int)"><B>setBufferSize(int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Set scrollback buffer size. -<DT><A HREF="display/CharDisplay.html#setCursorPos(int, int)"><B>setCursorPos(int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Puts the cursor at the specified position. -<DT><A HREF="socket/TelnetWrapper.html#setDefaultPrompt(java.lang.String)"><B>setDefaultPrompt(String)</B></A> - -Static method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Sets the default prompt used by all TelnetWrappers. -<DT><A HREF="modules/BSXModule.html#setLoader(java.lang.Object)"><B>setLoader(Object)</B></A> - -Method in class modules.<A HREF="modules/BSXModule.html">BSXModule</A> -<DD>register o as our parent -<DT><A HREF="modules/Module.html#setLoader(java.lang.Object)"><B>setLoader(Object)</B></A> - -Method in interface modules.<A HREF="modules/Module.html">Module</A> -<DD>Set the loader of the module. -<DT><A HREF="modules/TextLabel.html#setLoader(java.lang.Object)"><B>setLoader(Object)</B></A> - -Method in class modules.<A HREF="modules/TextLabel.html">TextLabel</A> -<DD>Set the applet as module loader and configure. -<DT><A HREF="modules/MudConnector.html#setLoader(java.lang.Object)"><B>setLoader(Object)</B></A> - -Method in class modules.<A HREF="modules/MudConnector.html">MudConnector</A> -<DD>setLoader() is called upon start of the parent applet. -<DT><A HREF="modules/Script.html#setLoader(java.lang.Object)"><B>setLoader(Object)</B></A> - -Method in class modules.<A HREF="modules/Script.html">Script</A> -<DD>Set the applet as module loader -<DT><A HREF="modules/ButtonBar.html#setLoader(java.lang.Object)"><B>setLoader(Object)</B></A> - -Method in class modules.<A HREF="modules/ButtonBar.html">ButtonBar</A> -<DD>This method is called by our loader to notify us of it. -<DT><A HREF="socket/TelnetWrapper.html#setLogin(java.lang.String, java.lang.String)"><B>setLogin(String, String)</B></A> - -Static method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Sets the default login used by TelnetWrappers. -<DT><A HREF="socket/TelnetIO.html#setPeer(socket.StatusPeer)"><B>setPeer(StatusPeer)</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Set the object to be notified about current status. -<DT><A HREF="socket/TelnetWrapper.html#setPrompt(java.lang.String)"><B>setPrompt(String)</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Sets the expected prompt. -<DT><A HREF="display/CharDisplay.html#setResizeStrategy(int)"><B>setResizeStrategy(int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Set the strategy when window is resized. -<DT><A HREF="display/CharDisplay.html#setScrollbar(java.lang.String)"><B>setScrollbar(String)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Set the scrollbar position. -<DT><A HREF="display/CharDisplay.html#setTopMargin(int)"><B>setTopMargin(int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Set the top scroll margin for the screen. -<DT><A HREF="display/CharDisplay.html#setWindowBase(int)"><B>setWindowBase(int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Set the current window base. -<DT><A HREF="display/CharDisplay.html#setWindowSize(int, int)"><B>setWindowSize(int, int)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Change the size of the screen. -<DT><A HREF="display/CharDisplay.html#size()"><B>size()</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Return the real size in points of the character display. -<DT><A HREF="socket/package-summary.html">socket</A> - package socket<DD> <DT><A HREF="display/SoftFont.html"><B>SoftFont</B></A> - class display.<A HREF="display/SoftFont.html">SoftFont</A>.<DD> <DT><A HREF="display/SoftFont.html#SoftFont()"><B>SoftFont()</B></A> - -Constructor for class display.<A HREF="display/SoftFont.html">SoftFont</A> -<DD> -<DT><A HREF="telnet.html#start()"><B>start()</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Upon start of the applet try to create a new connection. -<DT><A HREF="socket/StatusPeer.html"><B>StatusPeer</B></A> - interface socket.<A HREF="socket/StatusPeer.html">StatusPeer</A>.<DD>StatusPeer -- interface for status messages - --<DT><A HREF="telnet.html#stop()"><B>stop()</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Disconnect when the applet is stopped. -</DL> -<HR> -<A NAME="_T_"><!-- --></A><H2> -<B>T</B></H2> -<DL> -<DT><A HREF="telnet.html"><B>telnet</B></A> - class <A HREF="telnet.html">telnet</A>.<DD>A telnet implementation that supports different terminal emulations.<DT><A HREF="telnet.html#telnet()"><B>telnet()</B></A> - -Constructor for class <A HREF="telnet.html">telnet</A> -<DD> -<DT><A HREF="socket/TelnetIO.html"><B>TelnetIO</B></A> - class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A>.<DD>Implements simple telnet io<DT><A HREF="socket/TelnetIO.html#TelnetIO()"><B>TelnetIO()</B></A> - -Constructor for class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD> -<DT><A HREF="socket/TelnetWrapper.html"><B>TelnetWrapper</B></A> - class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A>.<DD>Wrapper for a Java Telnet call.<DT><A HREF="socket/TelnetWrapper.html#TelnetWrapper(java.lang.String)"><B>TelnetWrapper(String)</B></A> - -Constructor for class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Connects to the default telnet port on the given host. -<DT><A HREF="socket/TelnetWrapper.html#TelnetWrapper(java.lang.String, int)"><B>TelnetWrapper(String, int)</B></A> - -Constructor for class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Connects to a specific telnet port on the given host. -<DT><A HREF="telnet.html#term"><B>term</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>The terminal emulation (dynamically loaded). -<DT><A HREF="display/Terminal.html"><B>Terminal</B></A> - class display.<A HREF="display/Terminal.html">Terminal</A>.<DD>Terminal is an abstract emulation class.<DT><A HREF="display/Terminal.html#Terminal()"><B>Terminal()</B></A> - -Constructor for class display.<A HREF="display/Terminal.html">Terminal</A> -<DD> -<DT><A HREF="display/TerminalHost.html"><B>TerminalHost</B></A> - interface display.<A HREF="display/TerminalHost.html">TerminalHost</A>.<DD>TerminalHost is an interface for the remote (virtual) end of our connection - to the host computer we are connected to.<DT><A HREF="modules/TextLabel.html"><B>TextLabel</B></A> - class modules.<A HREF="modules/TextLabel.html">TextLabel</A>.<DD>This small module lets you display text somewhere in the applets area.<DT><A HREF="modules/TextLabel.html#TextLabel()"><B>TextLabel()</B></A> - -Constructor for class modules.<A HREF="modules/TextLabel.html">TextLabel</A> -<DD> -<DT><A HREF="socket/TimedOutException.html"><B>TimedOutException</B></A> - exception socket.<A HREF="socket/TimedOutException.html">TimedOutException</A>.<DD>Exception thrown when a Telnet connection takes too long - before receiving a specified String token.<DT><A HREF="socket/TimedOutException.html#TimedOutException()"><B>TimedOutException()</B></A> - -Constructor for class socket.<A HREF="socket/TimedOutException.html">TimedOutException</A> -<DD> -<DT><A HREF="socket/TimedOutException.html#TimedOutException(java.lang.String)"><B>TimedOutException(String)</B></A> - -Constructor for class socket.<A HREF="socket/TimedOutException.html">TimedOutException</A> -<DD> -<DT><A HREF="telnet.html#tio"><B>tio</B></A> - -Variable in class <A HREF="telnet.html">telnet</A> -<DD>The telnet io methods. -<DT><A HREF="display/vt320.html#toString()"><B>toString()</B></A> - -Method in class display.<A HREF="display/vt320.html">vt320</A> -<DD>Return the version of the terminal emulation and its display. -<DT><A HREF="socket/TelnetIO.html#toString()"><B>toString()</B></A> - -Method in class socket.<A HREF="socket/TelnetIO.html">TelnetIO</A> -<DD>Return the version of TelnetIO. -</DL> -<HR> -<A NAME="_U_"><!-- --></A><H2> -<B>U</B></H2> -<DL> -<DT><A HREF="display/CharDisplay.html#UNDERLINE"><B>UNDERLINE</B></A> - -Static variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Underline character. -<DT><A HREF="display/vt320.html#unimap"><B>unimap</B></A> - -Static variable in class display.<A HREF="display/vt320.html">vt320</A> -<DD> -<DT><A HREF="socket/TelnetWrapper.html#unsetLogin()"><B>unsetLogin()</B></A> - -Static method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Turns off the default login of TelnetWrappers. -<DT><A HREF="display/CharDisplay.html#update(java.awt.Graphics)"><B>update(Graphics)</B></A> - -Method in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>Update the display. -</DL> -<HR> -<A NAME="_V_"><!-- --></A><H2> -<B>V</B></H2> -<DL> -<DT><A HREF="display/CharDisplay.html#version"><B>version</B></A> - -Variable in class display.<A HREF="display/CharDisplay.html">CharDisplay</A> -<DD>If you need the runtime version, just ask this variable. -<DT><A HREF="display/vt320.html"><B>vt320</B></A> - class display.<A HREF="display/vt320.html">vt320</A>.<DD>A DEC VT320 Terminal Emulation (includes VT100/220 and ANSI).<DT><A HREF="display/vt320.html#vt320()"><B>vt320()</B></A> - -Constructor for class display.<A HREF="display/vt320.html">vt320</A> -<DD> -</DL> -<HR> -<A NAME="_W_"><!-- --></A><H2> -<B>W</B></H2> -<DL> -<DT><A HREF="socket/TelnetWrapper.html#wait(java.lang.String)"><B>wait(String)</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Skip any received data until the token appears. -<DT><A HREF="socket/TelnetWrapper.html#wait(java.lang.String, long)"><B>wait(String, long)</B></A> - -Method in class socket.<A HREF="socket/TelnetWrapper.html">TelnetWrapper</A> -<DD>Wait for a String or a timeout. -<DT><A HREF="telnet.html#writeToSocket(java.lang.String)"><B>writeToSocket(String)</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Send a String to the remote Host. -<DT><A HREF="telnet.html#writeToUser(java.lang.String)"><B>writeToUser(String)</B></A> - -Method in class <A HREF="telnet.html">telnet</A> -<DD>Send a String to the users terminal -</DL> -<HR> -<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_K_">K</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Index</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/index.html b/web/root/telnet/Documentation/Source/index.html deleted file mode 100644 index cc35f0b2e31163b4d57f6055eb8958c07fae9131..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/index.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:31 CEST 1999--> -<TITLE> -Generated Documentation (Untitled) -</TITLE> -</HEAD> -<FRAMESET cols="20%,80%"> -<FRAMESET rows="30%,70%"> -<FRAME src="overview-frame.html" name="packageListFrame"> -<FRAME src="allclasses-frame.html" name="packageFrame"> -</FRAMESET> -<FRAME src="overview-summary.html" name="classFrame"> -</FRAMESET> -<NOFRAMES> -<H2> -Frame Alert</H2> - -<P> -This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. -<BR> -Link to <A HREF="overview-summary.html">Non-frame version.</A></NOFRAMES> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/BSXModule.html b/web/root/telnet/Documentation/Source/modules/BSXModule.html deleted file mode 100644 index d1f285c8d7b53c1ea286c9a889973a4684f5961b..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/BSXModule.html +++ /dev/null @@ -1,596 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:35 CEST 1999 --> -<TITLE> -: Class BSXModule -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - <A HREF="../modules/ButtonBar.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="BSXModule.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -modules</FONT> -<BR> -Class BSXModule</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--<B>modules.BSXModule</B> -</PRE> -<HR> -<DL> -<DT>public class <B>BSXModule</B><DT>extends java.awt.Panel<DT>implements <A HREF="../modules/Module.html">Module</A></DL> - -<P> -The ultimate BSX module implements most of the common used - BSX controll sequences. - <P> - Features:<UL> - <LI>a Statemachine to parse the Strings passed by the telnet - <LI>a own package named bsx, for Window and Polygon handling - terrible english because my native language is german - </UL> - TODO:<UL> - <LI>more BSX Sequences - <LI>Documentaion - </UL> -<P> -<DL> -<DT><B>Author: </B><DD>Thomas Kriegelstein</DD> -<DT><B>See Also: </B><DD><A HREF="../serialized-form.html#modules.BSXModule">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="field_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Field Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/BSXModule.html#clientVersion">clientVersion</A></B></CODE> - -<BR> - Client Version</TD> -</TR> -</TABLE> - <A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../modules/BSXModule.html#BSXModule()">BSXModule</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/BSXModule.html#addNotify()">addNotify</A></B>()</CODE> - -<BR> - Adds two Buttons to the Panel and instanciates a BSXWindow.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/BSXModule.html#connect(java.lang.String, int)">connect</A></B>(java.lang.String host, - int port)</CODE> - -<BR> - do nothing</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/BSXModule.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - do nothing</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/BSXModule.html#handleEvent(java.awt.Event)">handleEvent</A></B>(java.awt.Event e)</CODE> - -<BR> - Java 1.0 eventhandling routines.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/BSXModule.html#main(java.lang.String[])">main</A></B>(java.lang.String[] args)</CODE> - -<BR> - a main for test-purposes</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/BSXModule.html#receive(java.lang.String)">receive</A></B>(java.lang.String s)</CODE> - -<BR> - This method is called by the telnet, so that we can parse the String.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/BSXModule.html#setLoader(java.lang.Object)">setLoader</A></B>(java.lang.Object o)</CODE> - -<BR> - register o as our parent</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paint, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocale, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -reshape, -resize, -resize, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - -<A NAME="field_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Field Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="clientVersion"><!-- --></A><H3> -clientVersion</H3> -<PRE> -protected java.lang.String <B>clientVersion</B></PRE> -<DL> -<DD>Client Version</DL> - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="BSXModule()"><!-- --></A><H3> -BSXModule</H3> -<PRE> -public <B>BSXModule</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="setLoader(java.lang.Object)"><!-- --></A><H3> -setLoader</H3> -<PRE> -public void <B>setLoader</B>(java.lang.Object o)</PRE> -<DL> -<DD>register o as our parent<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#setLoader(java.lang.Object)">setLoader</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String, int)"><!-- --></A><H3> -connect</H3> -<PRE> -public void <B>connect</B>(java.lang.String host, - int port)</PRE> -<DL> -<DD>do nothing<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#connect(java.lang.String, int)">connect</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public void <B>disconnect</B>()</PRE> -<DL> -<DD>do nothing<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#disconnect()">disconnect</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<HR> - -<A NAME="receive(java.lang.String)"><!-- --></A><H3> -receive</H3> -<PRE> -public java.lang.String <B>receive</B>(java.lang.String s)</PRE> -<DL> -<DD>This method is called by the telnet, so that we can parse the String. - Prints out the filtered String if logging s enabled.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#receive(java.lang.String)">receive</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>String</CODE> - s the String to be parsed<DT><B>Returns:</B><DD>a filtered String with no BSX sequences in it</DL> -</DD> -</DL> -<HR> - -<A NAME="addNotify()"><!-- --></A><H3> -addNotify</H3> -<PRE> -public void <B>addNotify</B>()</PRE> -<DL> -<DD>Adds two Buttons to the Panel and instanciates a BSXWindow.<DD><DL> -<DT><B>Overrides:</B><DD>addNotify in class java.awt.Panel</DL> -</DD> -</DL> -<HR> - -<A NAME="handleEvent(java.awt.Event)"><!-- --></A><H3> -handleEvent</H3> -<PRE> -public boolean <B>handleEvent</B>(java.awt.Event e)</PRE> -<DL> -<DD>Java 1.0 eventhandling routines.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>Event</CODE> - e<DT><B>Returns:</B><DD>true if Event has been recognized and fullfilled.<DT><B>Overrides:</B><DD>handleEvent in class java.awt.Component</DL> -</DD> -</DL> -<HR> - -<A NAME="main(java.lang.String[])"><!-- --></A><H3> -main</H3> -<PRE> -public static void <B>main</B>(java.lang.String[] args)</PRE> -<DL> -<DD>a main for test-purposes<DD><DL> -</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - <A HREF="../modules/ButtonBar.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="BSXModule.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/ButtonBar.html b/web/root/telnet/Documentation/Source/modules/ButtonBar.html deleted file mode 100644 index 9297f5368f546aa5087f7672953a73f522e82e06..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/ButtonBar.html +++ /dev/null @@ -1,636 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:35 CEST 1999 --> -<TITLE> -: Class ButtonBar -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/BSXModule.html"><B>PREV CLASS</B></A> - <A HREF="../modules/MudConnector.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="ButtonBar.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -modules</FONT> -<BR> -Class ButtonBar</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--<B>modules.ButtonBar</B> -</PRE> -<HR> -<DL> -<DT>public class <B>ButtonBar</B><DT>extends java.awt.Panel<DT>implements <A HREF="../modules/Module.html">Module</A></DL> - -<P> -This class implements a programmable button bar. - You can add <A HREF="#buttons">Buttons</A> and <A HREF="#fields">Input - fields</A> to trigger actions in the <A HREF="telnet.html">telnet - applet</A>. On how to load a module, please refer to the - <A HREF="telnet.html">telnet</A> documentation. - - <DL> - <A NAME="buttons"></A> - <DT><B>Buttons:</B> - <DD><TT><PARAM NAME=<B><I>number</I></B>#Button VALUE="<B><I>buttontext</I></B>|<B><I>buttonaction</I></B>"></TT> - <DD><B><I>number</I></B> is the sequence number and determines the place - of the button on the row. - <P> - <DD><B><I>buttontext</I></B> is a string displayed on the button. - <P> - <DD><A NAME="buttonaction"><B><I>buttonaction</I></B></A> may be one - of the following functions or strings<BR> - <FONT SIZE=-1>(<I>Note:</I> the backslash character - in front of the dollar sign is mandatory!)</FONT> - <UL> - <LI><TT><I>simple text</I></TT> - to be sent to the remote host. Newline and/or carriage return - characters may be added in C syntax <B>\n</B> and <B>\r</B>. - To support unimplemented function keys the <B>\e</B> escape - character may be useful. The <B>\b</B> backspace character is - also supported. - The text may contain <A HREF="#fieldreference"><B><I>field - reference(s)</I></B></A>. - <P> - <LI><TT>\$connect(<B><I>host</I></B>[,<B><I>port</I></B>])</TT> - tries to initiate a connection to the <B><I>host</I></B> - at the <B><I>port</I></B>, if given. The standard port is - 23. <B><I>host</I></B> and <B><I>port</I></B> may be hostname - and number or <A HREF="#fieldreference"><B><I>field - reference(s)</I></B></A>. If a connection already exists - nothing will happen.<BR> - <FONT SIZE=-1>(<I>Note:</I> It is not allowed to have - spaces anywhere inside the parenthesis!)</FONT> - <P> - <LI><TT>\$disconnect()</TT> - terminates the current connection, but if there was no - connection nothing will happen. - <P> - <LI><TT>\$detach()</TT> - detaches the applet from the web browser window and - creates a new frame externally. This may be used to allow - users to use the applet while browsing the web with the - same browser window.<BR> - <FONT SIZE=-1>(<I>Note:</I> You need to load the applet via the - <A HREF="appWrapper.html">appWrapper class</A> or - it will not work properly!)</FONT> - </UL> - <DD><B>Examples:</B><BR> - <FONT SIZE=-1>(<I>Note:</I> It makes sense if you look at the - examples for input fields below.)</FONT> - <PRE> - <PARAM NAME=1#Button VALUE="HELP!|help\r\n"> - <PARAM NAME=2#Button VALUE="HELP:|help \@help@\r\n"> - <PARAM NAME=4#Button VALUE="simple|\$connect(localhost)"> - <PARAM NAME=5#Button VALUE="complete|\$connect(www,4711)"> - <PARAM NAME=6#Button VALUE="connect|\$connect(\@address@)"> - <PARAM NAME=8#Button VALUE="connect to port|\$connect(\@address@,\@port@)"> - <PARAM NAME=10#Button VALUE="window|\$detach()"> - </PRE> - <P> - <A NAME="fields"></A> - <DT><B>Input fields</B> - <DD><TT><PARAM NAME=<B><I>number</I></B>#Input VALUE="<B><I>fieldname</I></B>[#<I><B>length</B></I>]|<B><I>initial text</I></B>[|<B><I>action</I></B>]"></TT> - <DD><B><I>number</I></B> is the sequence number and determines the place - of the field on the row. - <P> - <DD><A NAME="fieldreference"><B><I>fieldname</I></B></A> is a - symbolic name to reference the input field. A reference may be used in - <A HREF="#buttonaction"><B><I>button actions</I></B></A> and - is constructed as follows: - <TT>\@<B><I>fieldname</I></B>@</TT> - The <B>\@fieldname@</B> macro will be replaced by the string entered in - the text field. - <P> - <DD><B><I>length</I></B> is the length of the input field in numbers of - characters. - <P> - <DD><B><I>initial text</I></B> is the text to be placed into the input - field on startup - <DD><B><I>action</I></B> may be used similar to a - <A HREF="#buttonaction"><B><I>button action</I></B></A>. This action - will be used if the users presses Return in the inputfield. Leave - empty if you only want to use a button to send the text! - <DD><B>Examples:</B><BR> - <FONT SIZE=-1>(<I>Note:</I> It makes sense if you look at the - examples for buttons before.)</FONT> - <PRE> - <PARAM NAME=3#Input VALUE="help#10|"> - <PARAM NAME=7#Input VALUE="address|www.first.gmd.de"> - <PARAM NAME=8#Input VALUE="send#5|who|\@send@\r\n"> - <PARAM NAME=9#Input VALUE="port#5|4711"> - </PRE> - <P> - </DL> -<P> -<DL> -<DT><B>Version: </B><DD>$Id: ButtonBar.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -<DT><B>See Also: </B><DD><A HREF="../modules/Module.html"><CODE>Module</CODE></A>, <A HREF="../serialized-form.html#modules.ButtonBar">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../modules/ButtonBar.html#ButtonBar()">ButtonBar</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/ButtonBar.html#addNotify()">addNotify</A></B>()</CODE> - -<BR> - create the buttonbar from the parameter list.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/ButtonBar.html#connect(java.lang.String, int)">connect</A></B>(java.lang.String host, - int port)</CODE> - -<BR> - If the applet connects this method is called.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/ButtonBar.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - Get notified of disconnection.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/ButtonBar.html#handleEvent(java.awt.Event)">handleEvent</A></B>(java.awt.Event evt)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/ButtonBar.html#receive(java.lang.String)">receive</A></B>(java.lang.String s)</CODE> - -<BR> - This module does not take any input.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/ButtonBar.html#setLoader(java.lang.Object)">setLoader</A></B>(java.lang.Object o)</CODE> - -<BR> - This method is called by our loader to notify us of it.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paint, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocale, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -reshape, -resize, -resize, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="ButtonBar()"><!-- --></A><H3> -ButtonBar</H3> -<PRE> -public <B>ButtonBar</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="setLoader(java.lang.Object)"><!-- --></A><H3> -setLoader</H3> -<PRE> -public void <B>setLoader</B>(java.lang.Object o)</PRE> -<DL> -<DD>This method is called by our loader to notify us of it.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#setLoader(java.lang.Object)">setLoader</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>o</CODE> - The object that has loaded this object.<DT><B>See Also: </B><DD><CODE>display.Module</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String, int)"><!-- --></A><H3> -connect</H3> -<PRE> -public void <B>connect</B>(java.lang.String host, - int port)</PRE> -<DL> -<DD>If the applet connects this method is called.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#connect(java.lang.String, int)">connect</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>host</CODE> - remote hostaddress - not used<DD><CODE>port</CODE> - remote port - not used</DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public void <B>disconnect</B>()</PRE> -<DL> -<DD>Get notified of disconnection. Do nothing.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#disconnect()">disconnect</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<HR> - -<A NAME="receive(java.lang.String)"><!-- --></A><H3> -receive</H3> -<PRE> -public java.lang.String <B>receive</B>(java.lang.String s)</PRE> -<DL> -<DD>This module does not take any input. It works passive.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#receive(java.lang.String)">receive</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Returns:</B><DD>null to remove from the list of receiver modules.<DT><B>See Also: </B><DD><CODE>display.Module</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="addNotify()"><!-- --></A><H3> -addNotify</H3> -<PRE> -public void <B>addNotify</B>()</PRE> -<DL> -<DD>create the buttonbar from the parameter list. We will know our parent, - when we have been added.<DD><DL> -<DT><B>Overrides:</B><DD>addNotify in class java.awt.Panel</DL> -</DD> -</DL> -<HR> - -<A NAME="handleEvent(java.awt.Event)"><!-- --></A><H3> -handleEvent</H3> -<PRE> -public boolean <B>handleEvent</B>(java.awt.Event evt)</PRE> -<DL> -<DD><DL> -<DT><B>Overrides:</B><DD>handleEvent in class java.awt.Component</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/BSXModule.html"><B>PREV CLASS</B></A> - <A HREF="../modules/MudConnector.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="ButtonBar.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/Module.html b/web/root/telnet/Documentation/Source/modules/Module.html deleted file mode 100644 index e44b819ca8539ba351072a3831624075b54d6fd1..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/Module.html +++ /dev/null @@ -1,235 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:35 CEST 1999 --> -<TITLE> -: Interface Module -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="Module.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | CONSTR | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | CONSTR | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -modules</FONT> -<BR> -Interface Module</H2> -<DL> -<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../modules/BSXModule.html">BSXModule</A>, <A HREF="../modules/TextLabel.html">TextLabel</A>, <A HREF="../modules/MudConnector.html">MudConnector</A>, <A HREF="../modules/Script.html">Script</A>, <A HREF="../modules/ButtonBar.html">ButtonBar</A></DD> -</DL> -<HR> -<DL> -<DT>public abstract interface <B>Module</B></DL> - -<P> -Modules must implement this interface to be detected as valid modules -<P> -<DL> -<DT><B>Version: </B><DD>$Id: Module.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -</DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/Module.html#connect(java.lang.String, int)">connect</A></B>(java.lang.String host, - int port)</CODE> - -<BR> - Connected to the remote host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/Module.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - Disconnect from the host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/Module.html#receive(java.lang.String)">receive</A></B>(java.lang.String s)</CODE> - -<BR> - Receive data from somewhere.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/Module.html#setLoader(java.lang.Object)">setLoader</A></B>(java.lang.Object loader)</CODE> - -<BR> - Set the loader of the module.</TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="setLoader(java.lang.Object)"><!-- --></A><H3> -setLoader</H3> -<PRE> -public void <B>setLoader</B>(java.lang.Object loader)</PRE> -<DL> -<DD>Set the loader of the module. This is necessary to know if you want to - contact the modules parent.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>loader</CODE> - The object that has loaded this module.</DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String, int)"><!-- --></A><H3> -connect</H3> -<PRE> -public void <B>connect</B>(java.lang.String host, - int port)</PRE> -<DL> -<DD>Connected to the remote host. This method notifies upon new connection.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>host</CODE> - remote hostname<DD><CODE>port</CODE> - remote port</DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public void <B>disconnect</B>()</PRE> -<DL> -<DD>Disconnect from the host. This method notifies of lost connection.</DL> -<HR> - -<A NAME="receive(java.lang.String)"><!-- --></A><H3> -receive</H3> -<PRE> -public java.lang.String <B>receive</B>(java.lang.String s)</PRE> -<DL> -<DD>Receive data from somewhere. If a modules does not want to receive data - it should return null to remove itself from the list of receiver modules.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>s</CODE> - The string we receive.<DT><B>Returns:</B><DD>the modified string or null (to remove from receiver list)</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="Module.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | CONSTR | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | CONSTR | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/MudConnector.html b/web/root/telnet/Documentation/Source/modules/MudConnector.html deleted file mode 100644 index 3183a4f0528506f4fa792f6157d82cdec4ef2ef1..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/MudConnector.html +++ /dev/null @@ -1,571 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:35 CEST 1999 --> -<TITLE> -: Class MudConnector -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/ButtonBar.html"><B>PREV CLASS</B></A> - <A HREF="../modules/Script.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="MudConnector.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -modules</FONT> -<BR> -Class MudConnector</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--<B>modules.MudConnector</B> -</PRE> -<HR> -<DL> -<DT>public class <B>MudConnector</B><DT>extends java.awt.Panel<DT>implements <A HREF="../modules/Module.html">Module</A>, java.lang.Runnable</DL> - -<P> -A specially designed module for the - <A HREF="http://www.mudconnect.com/">MUD Connector</A>. - It loads a list of MUDs via http and displays them in a list box to - be selected. A selected MUD can then be entered. - - <DL> - <DT><B>MudConnector parameterfile:</B> - <DD><PRE><PARAM NAME=MUDlist VALUE="<B><I>url</I></B>"></PRE> - <DD>The url of the Mudlist. This url MUST be located on the same web - server as the applet! - </DL> -<P> -<DL> -<DT><B>Version: </B><DD>$Id: MudConnector.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -<DT><B>See Also: </B><DD><A HREF="../modules/Module.html"><CODE>Module</CODE></A>, <A HREF="../serialized-form.html#modules.MudConnector">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../modules/MudConnector.html#MudConnector()">MudConnector</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/MudConnector.html#addNotify()">addNotify</A></B>()</CODE> - -<BR> - when newly added try to load the mudlist using the parameter "mudlist"</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/MudConnector.html#connect(java.lang.String, int)">connect</A></B>(java.lang.String host, - int port)</CODE> - -<BR> - dummy methods</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/MudConnector.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/MudConnector.html#handleEvent(java.awt.Event)">handleEvent</A></B>(java.awt.Event evt)</CODE> - -<BR> - handle list selection, connect, disconnect and refresh button</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/MudConnector.html#receive(java.lang.String)">receive</A></B>(java.lang.String str)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/MudConnector.html#run()">run</A></B>()</CODE> - -<BR> - The body of the thread opens a URLConnection with the address given as - parameter "mudlist" and downloads it.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/MudConnector.html#setLoader(java.lang.Object)">setLoader</A></B>(java.lang.Object loader)</CODE> - -<BR> - setLoader() is called upon start of the parent applet.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paint, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocale, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -reshape, -resize, -resize, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="MudConnector()"><!-- --></A><H3> -MudConnector</H3> -<PRE> -public <B>MudConnector</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="setLoader(java.lang.Object)"><!-- --></A><H3> -setLoader</H3> -<PRE> -public void <B>setLoader</B>(java.lang.Object loader)</PRE> -<DL> -<DD>setLoader() is called upon start of the parent applet. This method - initializes the GUI of the module, e.g the list and buttons.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#setLoader(java.lang.Object)">setLoader</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>loader</CODE> - the parent applet</DL> -</DD> -</DL> -<HR> - -<A NAME="addNotify()"><!-- --></A><H3> -addNotify</H3> -<PRE> -public void <B>addNotify</B>()</PRE> -<DL> -<DD>when newly added try to load the mudlist using the parameter "mudlist"<DD><DL> -<DT><B>Overrides:</B><DD>addNotify in class java.awt.Panel</DL> -</DD> -</DL> -<HR> - -<A NAME="run()"><!-- --></A><H3> -run</H3> -<PRE> -public void <B>run</B>()</PRE> -<DL> -<DD>The body of the thread opens a URLConnection with the address given as - parameter "mudlist" and downloads it. It expects a tabulator separated - list <mudname> <mudhost> <mudport> and the amount of muds in the file - at the beginning of the file.<DD><DL> -<DT><B>Specified by: </B><DD>run in interface java.lang.Runnable</DL> -</DD> -</DL> -<HR> - -<A NAME="handleEvent(java.awt.Event)"><!-- --></A><H3> -handleEvent</H3> -<PRE> -public boolean <B>handleEvent</B>(java.awt.Event evt)</PRE> -<DL> -<DD>handle list selection, connect, disconnect and refresh button<DD><DL> -<DT><B>Parameters:</B><DD><CODE>evt</CODE> - the event to process<DT><B>Overrides:</B><DD>handleEvent in class java.awt.Component</DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String, int)"><!-- --></A><H3> -connect</H3> -<PRE> -public void <B>connect</B>(java.lang.String host, - int port)</PRE> -<DL> -<DD>dummy methods<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#connect(java.lang.String, int)">connect</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public void <B>disconnect</B>()</PRE> -<DL> -<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#disconnect()">disconnect</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<HR> - -<A NAME="receive(java.lang.String)"><!-- --></A><H3> -receive</H3> -<PRE> -public java.lang.String <B>receive</B>(java.lang.String str)</PRE> -<DL> -<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#receive(java.lang.String)">receive</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/ButtonBar.html"><B>PREV CLASS</B></A> - <A HREF="../modules/Script.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="MudConnector.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/Script.html b/web/root/telnet/Documentation/Source/modules/Script.html deleted file mode 100644 index 0861dce893f007eb907a82e655abd5fc5b12bb10..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/Script.html +++ /dev/null @@ -1,348 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:35 CEST 1999 --> -<TITLE> -: Class Script -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/MudConnector.html"><B>PREV CLASS</B></A> - <A HREF="../modules/TextLabel.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="Script.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -modules</FONT> -<BR> -Class Script</H2> -<PRE> -java.lang.Object - | - +--java.util.Dictionary - | - +--java.util.Hashtable - | - +--<B>modules.Script</B> -</PRE> -<HR> -<DL> -<DT>public class <B>Script</B><DT>extends java.util.Hashtable<DT>implements <A HREF="../modules/Module.html">Module</A></DL> - -<P> -A very simple scripting module. It takes pairs of pattern and text and - sends the corresponding text when the pattern matches. Each pattern is - only matched once per connected session. - - <DL> - <DT><B>Scripts:</B> - <DD><PRE><PARAM NAME=script VALUE="<B><I>pattern</I></B>|<B><I>text</I></B>|<B><I>...</I></B>"></PRE> - <DD>A script contains of pairs of <I>pattern</I> and <I>text</I> strings. - If the pattern is matched against the output from the remote host, - the corresponding text will be sent. Each pattern will match only - <B>once</B> per session. A session is defined by connect and - disconnect.<P> - Thus it is possible to program an autologin as follows:<BR> - <PRE><B>"login:|leo|Password:|mypassword|leo@www|ls"</B></PRE> - Newlines will be added automatically to the string sent! At the - moment the order of the pattern and text pairs is <I>not</I> relevant. - <P> - It is possible to prompt the user for input if a match occurs. If the - corresponding <I>text</I> is a string enclosed in braces ([] or {}) a - dialog window is opened with <I>text</I> as prompt. A special case - is an empty prompt in which case the <I>pattern</I> will be shown as - prompt. "[Your name:]" would open a dialog window with the - text "Your name" as prompt. Curly braces have a special - meaning; any user input will be shown as "*" which makes - it possible to program password prompts. Example: - "{Your password:}".<P> - A special match like: "login:|[]" can be used to open a - dialog and display "login:" as prompt. This works for - "{}" as well. - - </DL> -<P> -<DL> -<DT><B>Version: </B><DD>$Id: Script.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -<DT><B>See Also: </B><DD><A HREF="../modules/Module.html"><CODE>Module</CODE></A>, <A HREF="../serialized-form.html#modules.Script">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../modules/Script.html#Script()">Script</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/Script.html#connect(java.lang.String, int)">connect</A></B>(java.lang.String host, - int port)</CODE> - -<BR> - Configure the script module by reading the script PARAMeter.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/Script.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - Get notified of disconnection.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/Script.html#receive(java.lang.String)">receive</A></B>(java.lang.String s)</CODE> - -<BR> - This method is called when data is received.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/Script.html#setLoader(java.lang.Object)">setLoader</A></B>(java.lang.Object o)</CODE> - -<BR> - Set the applet as module loader</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.util.Hashtable"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.util.Hashtable</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clear, -clone, -contains, -containsKey, -containsValue, -elements, -entrySet, -equals, -get, -hashCode, -isEmpty, -keys, -keySet, -put, -putAll, -rehash, -remove, -size, -toString, -values</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>finalize, -getClass, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="Script()"><!-- --></A><H3> -Script</H3> -<PRE> -public <B>Script</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="setLoader(java.lang.Object)"><!-- --></A><H3> -setLoader</H3> -<PRE> -public void <B>setLoader</B>(java.lang.Object o)</PRE> -<DL> -<DD>Set the applet as module loader<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#setLoader(java.lang.Object)">setLoader</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>o</CODE> - the object that is the applet (must be an Applet)<DT><B>See Also: </B><DD><CODE>module.Module</CODE>, -<CODE>Applet</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String, int)"><!-- --></A><H3> -connect</H3> -<PRE> -public void <B>connect</B>(java.lang.String host, - int port)</PRE> -<DL> -<DD>Configure the script module by reading the script PARAMeter.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#connect(java.lang.String, int)">connect</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>host</CODE> - remote hostaddress - not used<DD><CODE>port</CODE> - remote port - not used</DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public void <B>disconnect</B>()</PRE> -<DL> -<DD>Get notified of disconnection. Do nothing.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#disconnect()">disconnect</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<HR> - -<A NAME="receive(java.lang.String)"><!-- --></A><H3> -receive</H3> -<PRE> -public java.lang.String <B>receive</B>(java.lang.String s)</PRE> -<DL> -<DD>This method is called when data is received. It tries to match the - input to the list of patterns and sends corresponding text on success. - If the response is [] or {} the user will be prompted with the matching - text. You can modify the prompt string by entering it inside of the - brackets or curly braces (e.g. [Enter your id:]). In case of curly - braces the input area will not show the typed in text (for passwords)!<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#receive(java.lang.String)">receive</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>s</CODE> - The string to test.<DT><B>See Also: </B><DD><CODE>peer.InputPeer</CODE></DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/MudConnector.html"><B>PREV CLASS</B></A> - <A HREF="../modules/TextLabel.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="Script.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/TextLabel.html b/web/root/telnet/Documentation/Source/modules/TextLabel.html deleted file mode 100644 index 0c47df17489ea0698f1a18ed63dd1a5f31f5396a..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/TextLabel.html +++ /dev/null @@ -1,523 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:35 CEST 1999 --> -<TITLE> -: Class TextLabel -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/Script.html"><B>PREV CLASS</B></A> - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TextLabel.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -modules</FONT> -<BR> -Class TextLabel</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--<B>modules.TextLabel</B> -</PRE> -<HR> -<DL> -<DT>public class <B>TextLabel</B><DT>extends java.awt.Panel<DT>implements <A HREF="../modules/Module.html">Module</A></DL> - -<P> -This small module lets you display text somewhere in the applets area. - - <DL> - <DT><B>Label:</B> - <DD><PRE><PARAM NAME=labelRows VALUE="<B><I>rows</B></I>"></PRE> - <DD>Defines the how many rows the label will have. - <DD><PRE><PARAM NAME=labelCols VALUE="<B><I>cols</B></I>"></PRE> - <DD>Defines the how many columns the label will have. - <DD><PRE><PARAM NAME=labelFont VALUE="<B><I>font[,size]</B></I>"></PRE> - <DD>The font for displaying the label text. If the <I>size</I> is left out - a standard size of 14 points is assumed. - <DD><PRE><PARAM NAME=label#<I>number</I> VALUE="<B><I>text</I></B>"></PRE> - <DT>The labels are enumerated and displayed in rows and columns. - </DL> -<P> -<DL> -<DT><B>Version: </B><DD>$Id: TextLabel.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -<DT><B>See Also: </B><DD><A HREF="../modules/Module.html"><CODE>Module</CODE></A>, <A HREF="../serialized-form.html#modules.TextLabel">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../modules/TextLabel.html#TextLabel()">TextLabel</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/TextLabel.html#connect(java.lang.String, int)">connect</A></B>(java.lang.String host, - int port)</CODE> - -<BR> - Do nothing upon connect.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/TextLabel.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - Do nothing upon disconnecton.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/TextLabel.html#receive(java.lang.String)">receive</A></B>(java.lang.String s)</CODE> - -<BR> - Do nothing when receiving text.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../modules/TextLabel.html#setLoader(java.lang.Object)">setLoader</A></B>(java.lang.Object o)</CODE> - -<BR> - Set the applet as module loader and configure.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Panel"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Panel</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>addNotify</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paint, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocale, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -handleEvent, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -reshape, -resize, -resize, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="TextLabel()"><!-- --></A><H3> -TextLabel</H3> -<PRE> -public <B>TextLabel</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="setLoader(java.lang.Object)"><!-- --></A><H3> -setLoader</H3> -<PRE> -public void <B>setLoader</B>(java.lang.Object o)</PRE> -<DL> -<DD>Set the applet as module loader and configure.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#setLoader(java.lang.Object)">setLoader</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>o</CODE> - the object that is the applet (must be an Applet)<DT><B>See Also: </B><DD><CODE>module.Module</CODE>, -<CODE>Applet</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String, int)"><!-- --></A><H3> -connect</H3> -<PRE> -public void <B>connect</B>(java.lang.String host, - int port)</PRE> -<DL> -<DD>Do nothing upon connect.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#connect(java.lang.String, int)">connect</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>host</CODE> - remote hostaddress - not used<DD><CODE>port</CODE> - remote port - not used</DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public void <B>disconnect</B>()</PRE> -<DL> -<DD>Do nothing upon disconnecton.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#disconnect()">disconnect</A> in interface <A HREF="../modules/Module.html">Module</A></DL> -</DD> -</DL> -<HR> - -<A NAME="receive(java.lang.String)"><!-- --></A><H3> -receive</H3> -<PRE> -public java.lang.String <B>receive</B>(java.lang.String s)</PRE> -<DL> -<DD>Do nothing when receiving text. Be removed upon first call.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../modules/Module.html#receive(java.lang.String)">receive</A> in interface <A HREF="../modules/Module.html">Module</A><DT><B>Parameters:</B><DD><CODE>s</CODE> - The string received.<DT><B>See Also: </B><DD><CODE>peer.InputPeer</CODE></DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/Script.html"><B>PREV CLASS</B></A> - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TextLabel.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/package-frame.html b/web/root/telnet/Documentation/Source/modules/package-frame.html deleted file mode 100644 index dab1f3cd1d23177faada934fdd39386c3c03310e..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/package-frame.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Package modules -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> -<FONT size="+1" ID="FrameTitleFont"> -<A HREF="../modules/package-summary.html" TARGET="classFrame">modules</A></FONT> -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT size="+1" ID="FrameHeadingFont"> -Interfaces</FONT> -<FONT ID="FrameItemFont"> -<BR> -<A HREF="Module.html" TARGET="classFrame"><I>Module</I></A></FONT></TD> -</TR> -</TABLE> - - -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT size="+1" ID="FrameHeadingFont"> -Classes</FONT> -<FONT ID="FrameItemFont"> -<BR> -<A HREF="BSXModule.html" TARGET="classFrame">BSXModule</A> -<BR> -<A HREF="ButtonBar.html" TARGET="classFrame">ButtonBar</A> -<BR> -<A HREF="MudConnector.html" TARGET="classFrame">MudConnector</A> -<BR> -<A HREF="Script.html" TARGET="classFrame">Script</A> -<BR> -<A HREF="TextLabel.html" TARGET="classFrame">TextLabel</A></FONT></TD> -</TR> -</TABLE> - - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/package-summary.html b/web/root/telnet/Documentation/Source/modules/package-summary.html deleted file mode 100644 index 6ff39f7c094d1925f43b24ed0ba66f8288d17f9a..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/package-summary.html +++ /dev/null @@ -1,136 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Package modules -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Package</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/package-summary.html"><B>PREV PACKAGE</B></A> - <A HREF="../socket/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<H2> -Package modules -</H2> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Interface Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="Module.html"><I>Module</I></A></B></TD> -<TD>Modules must implement this interface to be detected as valid modules</TD> -</TR> -</TABLE> - - -<P> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="BSXModule.html">BSXModule</A></B></TD> -<TD>The ultimate BSX module implements most of the common used - BSX controll sequences.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="ButtonBar.html">ButtonBar</A></B></TD> -<TD>This class implements a programmable button bar.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="MudConnector.html">MudConnector</A></B></TD> -<TD>A specially designed module for the - <A HREF="http://www.mudconnect.com/">MUD Connector</A>.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="Script.html">Script</A></B></TD> -<TD>A very simple scripting module.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="TextLabel.html">TextLabel</A></B></TD> -<TD>This small module lets you display text somewhere in the applets area.</TD> -</TR> -</TABLE> - - -<P> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Package</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/package-summary.html"><B>PREV PACKAGE</B></A> - <A HREF="../socket/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/modules/package-tree.html b/web/root/telnet/Documentation/Source/modules/package-tree.html deleted file mode 100644 index 00d9e9dd6bf2d0157b0b10560cbc5c5876067b54..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/modules/package-tree.html +++ /dev/null @@ -1,124 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: modules Class Hierarchy -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Tree</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/package-tree.html"><B>PREV</B></A> - <A HREF="../socket/package-tree.html"><B>NEXT</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<CENTER> -<H2> -Hierarchy For Package modules -</H2> -</CENTER> -<DL> -<DT><B>Package Hierarchies: </B><DD><A HREF="../overview-tree.html">All Packages</A></DL> -<HR> -<H2> -Class Hierarchy -</H2> -<UL> -<LI TYPE="circle">class java.lang.Object<UL> -<LI TYPE="circle">class java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) -<UL> -<LI TYPE="circle">class java.awt.Container<UL> -<LI TYPE="circle">class java.awt.Panel<UL> -<LI TYPE="circle">class modules.<A HREF="../modules/BSXModule.html"><B>BSXModule</B></A> (implements modules.<A HREF="../modules/Module.html">Module</A>) -<LI TYPE="circle">class modules.<A HREF="../modules/ButtonBar.html"><B>ButtonBar</B></A> (implements modules.<A HREF="../modules/Module.html">Module</A>) -<LI TYPE="circle">class modules.<A HREF="../modules/MudConnector.html"><B>MudConnector</B></A> (implements modules.<A HREF="../modules/Module.html">Module</A>, java.lang.Runnable) -<LI TYPE="circle">class modules.<A HREF="../modules/TextLabel.html"><B>TextLabel</B></A> (implements modules.<A HREF="../modules/Module.html">Module</A>) -</UL> -</UL> -</UL> -<LI TYPE="circle">class java.util.Dictionary<UL> -<LI TYPE="circle">class java.util.Hashtable (implements java.lang.Cloneable, java.util.Map, java.io.Serializable) -<UL> -<LI TYPE="circle">class modules.<A HREF="../modules/Script.html"><B>Script</B></A> (implements modules.<A HREF="../modules/Module.html">Module</A>) -</UL> -</UL> -</UL> -</UL> -<H2> -Interface Hierarchy -</H2> -<UL> -<LI TYPE="circle">interface modules.<A HREF="../modules/Module.html"><B>Module</B></A></UL> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Tree</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../display/package-tree.html"><B>PREV</B></A> - <A HREF="../socket/package-tree.html"><B>NEXT</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/overview-frame.html b/web/root/telnet/Documentation/Source/overview-frame.html deleted file mode 100644 index cc150b57d8f590b36224bfe7ae8a741fd3882819..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/overview-frame.html +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Overview -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT size="+1" ID="FrameTitleFont"> -<B></B></FONT></TD> -</TR> -</TABLE> - -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT ID="FrameItemFont"><A HREF="allclasses-frame.html" TARGET="packageFrame">All Classes</A></FONT> -<P> -<FONT size="+1" ID="FrameHeadingFont"> -Packages</FONT> -<BR> -<FONT ID="FrameItemFont"><A HREF="display/package-frame.html" TARGET="packageFrame">display</A></FONT> -<BR> -<FONT ID="FrameItemFont"><A HREF="modules/package-frame.html" TARGET="packageFrame">modules</A></FONT> -<BR> -<FONT ID="FrameItemFont"><A HREF="socket/package-frame.html" TARGET="packageFrame">socket</A></FONT> -<BR> -</TD> -</TR> -</TABLE> - -<P> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/overview-summary.html b/web/root/telnet/Documentation/Source/overview-summary.html deleted file mode 100644 index 6579b2f6228feb102c97fed167bef04eabab6e6e..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/overview-summary.html +++ /dev/null @@ -1,108 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Overview -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Overview</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Packages</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="20%"><B><A HREF="display/package-summary.html">display</A></B></TD> -<TD> </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="20%"><B><A HREF="modules/package-summary.html">modules</A></B></TD> -<TD> </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="20%"><B><A HREF="socket/package-summary.html">socket</A></B></TD> -<TD> </TD> -</TR> -</TABLE> - -<P> - <HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Overview</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/overview-tree.html b/web/root/telnet/Documentation/Source/overview-tree.html deleted file mode 100644 index 79d996ed79d9c52f03cf4a56b4914462aefaf9f1..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/overview-tree.html +++ /dev/null @@ -1,139 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:30 CEST 1999 --> -<TITLE> -: Class Hierarchy -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Tree</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="overview-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<CENTER> -<H2> -Hierarchy For All Packages</H2> -</CENTER> -<DL> -<DT><B>Package Hierarchies: </B><DD><A HREF="display/package-tree.html">display</A>, <A HREF="modules/package-tree.html">modules</A>, <A HREF="socket/package-tree.html">socket</A></DL> -<HR> -<H2> -Class Hierarchy -</H2> -<UL> -<LI TYPE="circle">class java.lang.Object<UL> -<LI TYPE="circle">class java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) -<UL> -<LI TYPE="circle">class java.awt.Container<UL> -<LI TYPE="circle">class java.awt.Panel<UL> -<LI TYPE="circle">class java.applet.Applet<UL> -<LI TYPE="circle">class <A HREF="appWrapper.html"><B>appWrapper</B></A> (implements java.applet.AppletStub, java.lang.Runnable) -<LI TYPE="circle">class <A HREF="CharDisplayTest.html"><B>CharDisplayTest</B></A><LI TYPE="circle">class <A HREF="telnet.html"><B>telnet</B></A> (implements java.lang.Runnable, socket.<A HREF="socket/StatusPeer.html">StatusPeer</A>, display.<A HREF="display/TerminalHost.html">TerminalHost</A>) -</UL> -<LI TYPE="circle">class modules.<A HREF="modules/BSXModule.html"><B>BSXModule</B></A> (implements modules.<A HREF="modules/Module.html">Module</A>) -<LI TYPE="circle">class modules.<A HREF="modules/ButtonBar.html"><B>ButtonBar</B></A> (implements modules.<A HREF="modules/Module.html">Module</A>) -<LI TYPE="circle">class display.<A HREF="display/CharDisplay.html"><B>CharDisplay</B></A><LI TYPE="circle">class modules.<A HREF="modules/MudConnector.html"><B>MudConnector</B></A> (implements modules.<A HREF="modules/Module.html">Module</A>, java.lang.Runnable) -<LI TYPE="circle">class display.<A HREF="display/Terminal.html"><B>Terminal</B></A><UL> -<LI TYPE="circle">class display.<A HREF="display/vt320.html"><B>vt320</B></A> (implements display.<A HREF="display/TerminalHost.html">TerminalHost</A>) -</UL> -<LI TYPE="circle">class modules.<A HREF="modules/TextLabel.html"><B>TextLabel</B></A> (implements modules.<A HREF="modules/Module.html">Module</A>) -</UL> -</UL> -</UL> -<LI TYPE="circle">class java.util.Dictionary<UL> -<LI TYPE="circle">class java.util.Hashtable (implements java.lang.Cloneable, java.util.Map, java.io.Serializable) -<UL> -<LI TYPE="circle">class modules.<A HREF="modules/Script.html"><B>Script</B></A> (implements modules.<A HREF="modules/Module.html">Module</A>) -</UL> -</UL> -<LI TYPE="circle">class <A HREF="proxy.html"><B>proxy</B></A> (implements java.lang.Runnable) -<LI TYPE="circle">class display.<A HREF="display/SoftFont.html"><B>SoftFont</B></A><LI TYPE="circle">class socket.<A HREF="socket/TelnetIO.html"><B>TelnetIO</B></A> (implements socket.<A HREF="socket/StatusPeer.html">StatusPeer</A>) -<LI TYPE="circle">class socket.<A HREF="socket/TelnetWrapper.html"><B>TelnetWrapper</B></A><LI TYPE="circle">class java.lang.Throwable (implements java.io.Serializable) -<UL> -<LI TYPE="circle">class java.lang.Exception<UL> -<LI TYPE="circle">class java.io.IOException<UL> -<LI TYPE="circle">class socket.<A HREF="socket/TimedOutException.html"><B>TimedOutException</B></A></UL> -</UL> -</UL> -</UL> -</UL> -<H2> -Interface Hierarchy -</H2> -<UL> -<LI TYPE="circle">interface modules.<A HREF="modules/Module.html"><B>Module</B></A><LI TYPE="circle">interface socket.<A HREF="socket/StatusPeer.html"><B>StatusPeer</B></A><LI TYPE="circle">interface display.<A HREF="display/TerminalHost.html"><B>TerminalHost</B></A></UL> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Tree</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="overview-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/package-list b/web/root/telnet/Documentation/Source/package-list deleted file mode 100644 index 1b8a62b2c95b65d4035becc7c7aaf262d67186a8..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/package-list +++ /dev/null @@ -1,3 +0,0 @@ -display -modules -socket diff --git a/web/root/telnet/Documentation/Source/packages.html b/web/root/telnet/Documentation/Source/packages.html deleted file mode 100644 index 4bca39c29c825a83f78a62d8813b01aa16616469..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/packages.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:31 CEST 1999 --> -<TITLE> - -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<BR> - -<BR> - -<BR> -<CENTER> -The front page has been renamed.Please see: -<BR> - <A HREF="index.html">Frame version</A> -<BR> - <A HREF="overview-summary.html">Non-frame version.</A></CENTER> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/proxy.html b/web/root/telnet/Documentation/Source/proxy.html deleted file mode 100644 index f5e6778ca113a9674d0b258b4f89a9b8df6c85e9..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/proxy.html +++ /dev/null @@ -1,252 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:33 CEST 1999 --> -<TITLE> -: Class proxy -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="CharDisplayTest.html"><B>PREV CLASS</B></A> - <A HREF="telnet.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="proxy.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -Class proxy</H2> -<PRE> -java.lang.Object - | - +--<B>proxy</B> -</PRE> -<HR> -<DL> -<DT>public class <B>proxy</B><DT>extends java.lang.Object<DT>implements java.lang.Runnable</DL> - -<P> -proxy class -- implements a proxy server to redirect network access -<P> -<DL> -<DT><B>Version: </B><DD>$Id: proxy.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -</DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="proxy.html#proxy(int, java.lang.String, int)">proxy</A></B>(int lport, - java.lang.String raddr, - int rport)</CODE> - -<BR> - Create a server socket and start listening on the local port.</TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static void</CODE></FONT></TD> -<TD><CODE><B><A HREF="proxy.html#main(java.lang.String[])">main</A></B>(java.lang.String[] args)</CODE> - -<BR> - This method is called when the application is run on the commandline.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="proxy.html#run()">run</A></B>()</CODE> - -<BR> - Cycle around until an error occurs and wait for incoming connections.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -toString, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="proxy(int, java.lang.String, int)"><!-- --></A><H3> -proxy</H3> -<PRE> -public <B>proxy</B>(int lport, - java.lang.String raddr, - int rport)</PRE> -<DL> -<DD>Create a server socket and start listening on the local port.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>lport</CODE> - local port<DD><CODE>raddr</CODE> - address of the destination<DD><CODE>rport</CODE> - port on the destination host</DL> -</DD> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="main(java.lang.String[])"><!-- --></A><H3> -main</H3> -<PRE> -public static void <B>main</B>(java.lang.String[] args)</PRE> -<DL> -<DD>This method is called when the application is run on the commandline. - It takes two or three arguments: - usage: java proxy local-port destination-host destination-port<DD><DL> -<DT><B>Parameters:</B><DD><CODE>args</CODE> - The command line arguments</DL> -</DD> -</DL> -<HR> - -<A NAME="run()"><!-- --></A><H3> -run</H3> -<PRE> -public void <B>run</B>()</PRE> -<DL> -<DD>Cycle around until an error occurs and wait for incoming connections. - An incoming connection will create two redirectors. One for - local-host - destination-host and one for destination-host - local-host.<DD><DL> -<DT><B>Specified by: </B><DD>run in interface java.lang.Runnable</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="CharDisplayTest.html"><B>PREV CLASS</B></A> - <A HREF="telnet.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="proxy.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/serialized-form.html b/web/root/telnet/Documentation/Source/serialized-form.html deleted file mode 100644 index 72f77d6f637fcd0130360ce4bf12086ccbfa7673..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/serialized-form.html +++ /dev/null @@ -1,1635 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:36 CEST 1999 --> -<TITLE> -Serialized Form -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="serialized-form.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<CENTER> -<H1> -Serialized Form</H1> -</CENTER> -<HR SIZE="4" NOSHADE> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD ALIGN="center"><FONT SIZE="+2"> -<B>Package</B> <B>display</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="display.CharDisplay"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="display/CharDisplay.html">display.CharDisplay</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -bottomMargin</H3> -<PRE> -int <B>bottomMargin</B></PRE> -<DL> -</DL> -<HR> - -<H3> -bufSize</H3> -<PRE> -int <B>bufSize</B></PRE> -<DL> -</DL> -<HR> - -<H3> -charArray</H3> -<PRE> -char[][] <B>charArray</B></PRE> -<DL> -</DL> -<HR> - -<H3> -charAttributes</H3> -<PRE> -int[][] <B>charAttributes</B></PRE> -<DL> -</DL> -<HR> - -<H3> -charDescent</H3> -<PRE> -int <B>charDescent</B></PRE> -<DL> -</DL> -<HR> - -<H3> -charHeight</H3> -<PRE> -int <B>charHeight</B></PRE> -<DL> -</DL> -<HR> - -<H3> -charWidth</H3> -<PRE> -int <B>charWidth</B></PRE> -<DL> -</DL> -<HR> - -<H3> -color</H3> -<PRE> -java.awt.Color[] <B>color</B></PRE> -<DL> -</DL> -<HR> - -<H3> -cursorX</H3> -<PRE> -int <B>cursorX</B></PRE> -<DL> -</DL> -<HR> - -<H3> -cursorY</H3> -<PRE> -int <B>cursorY</B></PRE> -<DL> -</DL> -<HR> - -<H3> -fm</H3> -<PRE> -java.awt.FontMetrics <B>fm</B></PRE> -<DL> -</DL> -<HR> - -<H3> -insets</H3> -<PRE> -java.awt.Insets <B>insets</B></PRE> -<DL> -</DL> -<HR> - -<H3> -maxBufSize</H3> -<PRE> -int <B>maxBufSize</B></PRE> -<DL> -</DL> -<HR> - -<H3> -normalFont</H3> -<PRE> -java.awt.Font <B>normalFont</B></PRE> -<DL> -</DL> -<HR> - -<H3> -raised</H3> -<PRE> -boolean <B>raised</B></PRE> -<DL> -</DL> -<HR> - -<H3> -resizeStrategy</H3> -<PRE> -int <B>resizeStrategy</B></PRE> -<DL> -</DL> -<HR> - -<H3> -scrBarPos</H3> -<PRE> -java.lang.String <B>scrBarPos</B></PRE> -<DL> -</DL> -<HR> - -<H3> -screenBase</H3> -<PRE> -int <B>screenBase</B></PRE> -<DL> -</DL> -<HR> - -<H3> -screenLocked</H3> -<PRE> -boolean <B>screenLocked</B></PRE> -<DL> -</DL> -<HR> - -<H3> -scrollBar</H3> -<PRE> -java.awt.Scrollbar <B>scrollBar</B></PRE> -<DL> -</DL> -<HR> - -<H3> -selectBegin</H3> -<PRE> -java.awt.Point <B>selectBegin</B></PRE> -<DL> -</DL> -<HR> - -<H3> -selectEnd</H3> -<PRE> -java.awt.Point <B>selectEnd</B></PRE> -<DL> -</DL> -<HR> - -<H3> -selectFrame</H3> -<PRE> -java.awt.Frame <B>selectFrame</B></PRE> -<DL> -</DL> -<HR> - -<H3> -selection</H3> -<PRE> -java.awt.TextArea <B>selection</B></PRE> -<DL> -</DL> -<HR> - -<H3> -sf</H3> -<PRE> -<A HREF="display/SoftFont.html">SoftFont</A> <B>sf</B></PRE> -<DL> -</DL> -<HR> - -<H3> -size</H3> -<PRE> -java.awt.Dimension <B>size</B></PRE> -<DL> -</DL> -<HR> - -<H3> -topMargin</H3> -<PRE> -int <B>topMargin</B></PRE> -<DL> -</DL> -<HR> - -<H3> -update</H3> -<PRE> -boolean[] <B>update</B></PRE> -<DL> -</DL> -<HR> - -<H3> -version</H3> -<PRE> -java.lang.String <B>version</B></PRE> -<DL> -<DD>If you need the runtime version, just ask this variable.</DL> -<HR> - -<H3> -windowBase</H3> -<PRE> -int <B>windowBase</B></PRE> -<DL> -</DL> - -<P> -<A NAME="display.Terminal"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="display/Terminal.html">display.Terminal</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> - -<P> -<A NAME="display.vt320"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="display/vt320.html">display.vt320</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -attributes</H3> -<PRE> -int <B>attributes</B></PRE> -<DL> -</DL> -<HR> - -<H3> -C</H3> -<PRE> -int <B>C</B></PRE> -<DL> -</DL> -<HR> - -<H3> -DCEvar</H3> -<PRE> -int <B>DCEvar</B></PRE> -<DL> -</DL> -<HR> - -<H3> -DCEvars</H3> -<PRE> -int[] <B>DCEvars</B></PRE> -<DL> -</DL> -<HR> - -<H3> -dcs</H3> -<PRE> -java.lang.String <B>dcs</B></PRE> -<DL> -</DL> -<HR> - -<H3> -display</H3> -<PRE> -<A HREF="display/CharDisplay.html">CharDisplay</A> <B>display</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Do</H3> -<PRE> -java.lang.String <B>Do</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Find</H3> -<PRE> -java.lang.String <B>Find</B></PRE> -<DL> -</DL> -<HR> - -<H3> -FunctionKey</H3> -<PRE> -java.lang.String[] <B>FunctionKey</B></PRE> -<DL> -<DD>Strings to send on function key presseic</DL> -<HR> - -<H3> -FunctionKeyAlt</H3> -<PRE> -java.lang.String[] <B>FunctionKeyAlt</B></PRE> -<DL> -</DL> -<HR> - -<H3> -FunctionKeyCtrl</H3> -<PRE> -java.lang.String[] <B>FunctionKeyCtrl</B></PRE> -<DL> -</DL> -<HR> - -<H3> -FunctionKeyShift</H3> -<PRE> -java.lang.String[] <B>FunctionKeyShift</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Help</H3> -<PRE> -java.lang.String <B>Help</B></PRE> -<DL> -</DL> -<HR> - -<H3> -host</H3> -<PRE> -<A HREF="display/TerminalHost.html">TerminalHost</A> <B>host</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Insert</H3> -<PRE> -java.lang.String <B>Insert</B></PRE> -<DL> -</DL> -<HR> - -<H3> -insertmode</H3> -<PRE> -int <B>insertmode</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KeyBacktab</H3> -<PRE> -java.lang.String <B>KeyBacktab</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KeyDown</H3> -<PRE> -java.lang.String <B>KeyDown</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KeyLeft</H3> -<PRE> -java.lang.String <B>KeyLeft</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KeyRight</H3> -<PRE> -java.lang.String <B>KeyRight</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KeyTab</H3> -<PRE> -java.lang.String <B>KeyTab</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KeyUp</H3> -<PRE> -java.lang.String <B>KeyUp</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP0</H3> -<PRE> -java.lang.String <B>KP0</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP1</H3> -<PRE> -java.lang.String <B>KP1</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP2</H3> -<PRE> -java.lang.String <B>KP2</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP3</H3> -<PRE> -java.lang.String <B>KP3</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP4</H3> -<PRE> -java.lang.String <B>KP4</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP5</H3> -<PRE> -java.lang.String <B>KP5</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP6</H3> -<PRE> -java.lang.String <B>KP6</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP7</H3> -<PRE> -java.lang.String <B>KP7</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP8</H3> -<PRE> -java.lang.String <B>KP8</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KP9</H3> -<PRE> -java.lang.String <B>KP9</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KPComma</H3> -<PRE> -java.lang.String <B>KPComma</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KPEnter</H3> -<PRE> -java.lang.String <B>KPEnter</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KPMinus</H3> -<PRE> -java.lang.String <B>KPMinus</B></PRE> -<DL> -</DL> -<HR> - -<H3> -KPPeriod</H3> -<PRE> -java.lang.String <B>KPPeriod</B></PRE> -<DL> -</DL> -<HR> - -<H3> -moveoutsidemargins</H3> -<PRE> -boolean <B>moveoutsidemargins</B></PRE> -<DL> -</DL> -<HR> - -<H3> -NextScn</H3> -<PRE> -java.lang.String <B>NextScn</B></PRE> -<DL> -</DL> -<HR> - -<H3> -normalcursor</H3> -<PRE> -int <B>normalcursor</B></PRE> -<DL> -</DL> -<HR> - -<H3> -osc</H3> -<PRE> -java.lang.String <B>osc</B></PRE> -<DL> -</DL> -<HR> - -<H3> -osn</H3> -<PRE> -java.lang.String <B>osn</B></PRE> -<DL> -</DL> -<HR> - -<H3> -PF1</H3> -<PRE> -java.lang.String <B>PF1</B></PRE> -<DL> -</DL> -<HR> - -<H3> -PF2</H3> -<PRE> -java.lang.String <B>PF2</B></PRE> -<DL> -</DL> -<HR> - -<H3> -PF3</H3> -<PRE> -java.lang.String <B>PF3</B></PRE> -<DL> -</DL> -<HR> - -<H3> -PF4</H3> -<PRE> -java.lang.String <B>PF4</B></PRE> -<DL> -</DL> -<HR> - -<H3> -pressedKey</H3> -<PRE> -int <B>pressedKey</B></PRE> -<DL> -</DL> -<HR> - -<H3> -pressedWhen</H3> -<PRE> -long <B>pressedWhen</B></PRE> -<DL> -</DL> -<HR> - -<H3> -PrevScn</H3> -<PRE> -java.lang.String <B>PrevScn</B></PRE> -<DL> -</DL> -<HR> - -<H3> -R</H3> -<PRE> -int <B>R</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Remove</H3> -<PRE> -java.lang.String <B>Remove</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Sa</H3> -<PRE> -int <B>Sa</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Sc</H3> -<PRE> -int <B>Sc</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Select</H3> -<PRE> -java.lang.String <B>Select</B></PRE> -<DL> -</DL> -<HR> - -<H3> -sendcrlf</H3> -<PRE> -boolean <B>sendcrlf</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Sr</H3> -<PRE> -int <B>Sr</B></PRE> -<DL> -</DL> -<HR> - -<H3> -statusmode</H3> -<PRE> -int <B>statusmode</B></PRE> -<DL> -</DL> -<HR> - -<H3> -Tabs</H3> -<PRE> -byte[] <B>Tabs</B></PRE> -<DL> -</DL> -<HR> - -<H3> -term_state</H3> -<PRE> -int <B>term_state</B></PRE> -<DL> -</DL> -<HR> - -<H3> -terminalID</H3> -<PRE> -java.lang.String <B>terminalID</B></PRE> -<DL> -</DL> -<HR> - -<H3> -useibmcharset</H3> -<PRE> -boolean <B>useibmcharset</B></PRE> -<DL> -</DL> -<HR> - -<H3> -vms</H3> -<PRE> -boolean <B>vms</B></PRE> -<DL> -</DL> -<HR> - -<H3> -vt52mode</H3> -<PRE> -int <B>vt52mode</B></PRE> -<DL> -</DL> - -<P> -<HR SIZE="4" NOSHADE> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD ALIGN="center"><FONT SIZE="+2"> -<B>Package</B> <B>modules</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="modules.BSXModule"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="modules/BSXModule.html">modules.BSXModule</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -bsxButton</H3> -<PRE> -java.awt.Button <B>bsxButton</B></PRE> -<DL> -<DD>the Buttons to switch on and off the logging and BSX handling</DL> -<HR> - -<H3> -bsxCheckIt</H3> -<PRE> -boolean <B>bsxCheckIt</B></PRE> -<DL> -<DD>the states of the Buttons</DL> -<HR> - -<H3> -BSXData</H3> -<PRE> -java.lang.String <B>BSXData</B></PRE> -<DL> -<DD>holds the BSX description, including the numbers of polygons and edges</DL> -<HR> - -<H3> -bsxWindow</H3> -<PRE> -modules.bsx.BSXDisplay <B>bsxWindow</B></PRE> -<DL> -<DD>The Frame, where the graphic is drawn</DL> -<HR> - -<H3> -clientVersion</H3> -<PRE> -java.lang.String <B>clientVersion</B></PRE> -<DL> -<DD>Client Version</DL> -<HR> - -<H3> -intEdges</H3> -<PRE> -int <B>intEdges</B></PRE> -<DL> -<DD>holds the number of edges in the current polygon as an int</DL> -<HR> - -<H3> -intPolys</H3> -<PRE> -int <B>intPolys</B></PRE> -<DL> -<DD>holds the number of polygons in the current description as an int</DL> -<HR> - -<H3> -intXPos</H3> -<PRE> -int <B>intXPos</B></PRE> -<DL> -<DD>holds the X position of the current object as an int</DL> -<HR> - -<H3> -intYPos</H3> -<PRE> -int <B>intYPos</B></PRE> -<DL> -<DD>holds the Y position of the current object as an int</DL> -<HR> - -<H3> -lastCommand</H3> -<PRE> -java.lang.String <B>lastCommand</B></PRE> -<DL> -<DD>lastCommand is a Statedescriptor.<BR> - if lastCommand.length()=4 then the entire Command has been read - else go on reading the command completly<BR> - Commands are: PRO SCE VIO DFS DFO TMS RMO RFS RQV PUR - additional commands are: BOM EOM LON LOF TXT which will not be supported - by Regenbogen BSX java Client.<BR> - Commands are preceeded by a @</DL> -<HR> - -<H3> -lastState</H3> -<PRE> -int <B>lastState</B></PRE> -<DL> -<DD>lastState identifies what we have done last time we received a string - <UL> - <LI>-1 undefined -> used to mark succesful work - <LI> 0 nothing -> go on searching for a new command - <LI> 1 identifier -> we have to complete the identifier - <LI> 2 download -> we have to get more BSXData - </UL></DL> -<HR> - -<H3> -logButton</H3> -<PRE> -java.awt.Button <B>logButton</B></PRE> -<DL> -<DD>the Buttons to switch on and off the logging and BSX handling</DL> -<HR> - -<H3> -logging</H3> -<PRE> -boolean <B>logging</B></PRE> -<DL> -<DD>the states of the Buttons</DL> -<HR> - -<H3> -parent</H3> -<PRE> -<A HREF="telnet.html">telnet</A> <B>parent</B></PRE> -<DL> -<DD>Our parent, the telnet app.</DL> -<HR> - -<H3> -strEdges</H3> -<PRE> -java.lang.String <B>strEdges</B></PRE> -<DL> -<DD>holds the number of edges in the current polygon as a String</DL> -<HR> - -<H3> -strIdentifier</H3> -<PRE> -java.lang.String <B>strIdentifier</B></PRE> -<DL> -<DD>holds the identifier of the current object</DL> -<HR> - -<H3> -strPolys</H3> -<PRE> -java.lang.String <B>strPolys</B></PRE> -<DL> -<DD>holds the number of polygons in the current description as a String</DL> -<HR> - -<H3> -strXPos</H3> -<PRE> -java.lang.String <B>strXPos</B></PRE> -<DL> -<DD>holds the X position of the current object as a String</DL> -<HR> - -<H3> -strYPos</H3> -<PRE> -java.lang.String <B>strYPos</B></PRE> -<DL> -<DD>holds the Y position of the current object as a String</DL> -<HR> - -<H3> -toplevel</H3> -<PRE> -java.awt.Container <B>toplevel</B></PRE> -<DL> -<DD>the Container, wich is around us</DL> - -<P> -<A NAME="modules.ButtonBar"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="modules/ButtonBar.html">modules.ButtonBar</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -buttons</H3> -<PRE> -java.util.Hashtable <B>buttons</B></PRE> -<DL> -</DL> -<HR> - -<H3> -fields</H3> -<PRE> -java.util.Hashtable <B>fields</B></PRE> -<DL> -</DL> -<HR> - -<H3> -parent</H3> -<PRE> -<A HREF="telnet.html">telnet</A> <B>parent</B></PRE> -<DL> -</DL> -<HR> - -<H3> -toplevel</H3> -<PRE> -java.awt.Container <B>toplevel</B></PRE> -<DL> -</DL> - -<P> -<A NAME="modules.MudConnector"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="modules/MudConnector.html">modules.MudConnector</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -address</H3> -<PRE> -java.awt.Panel <B>address</B></PRE> -<DL> -</DL> -<HR> - -<H3> -app</H3> -<PRE> -<A HREF="telnet.html">telnet</A> <B>app</B></PRE> -<DL> -</DL> -<HR> - -<H3> -connectButton</H3> -<PRE> -java.awt.Button <B>connectButton</B></PRE> -<DL> -</DL> -<HR> - -<H3> -disconnectButton</H3> -<PRE> -java.awt.Button <B>disconnectButton</B></PRE> -<DL> -</DL> -<HR> - -<H3> -display</H3> -<PRE> -java.awt.List <B>display</B></PRE> -<DL> -</DL> -<HR> - -<H3> -index</H3> -<PRE> -java.util.Vector <B>index</B></PRE> -<DL> -</DL> -<HR> - -<H3> -indicator</H3> -<PRE> -java.awt.Label <B>indicator</B></PRE> -<DL> -</DL> -<HR> - -<H3> -info</H3> -<PRE> -java.awt.TextField <B>info</B></PRE> -<DL> -</DL> -<HR> - -<H3> -layouter</H3> -<PRE> -java.awt.CardLayout <B>layouter</B></PRE> -<DL> -</DL> -<HR> - -<H3> -progress</H3> -<PRE> -java.awt.Panel <B>progress</B></PRE> -<DL> -</DL> -<HR> - -<H3> -refreshButton</H3> -<PRE> -java.awt.Button <B>refreshButton</B></PRE> -<DL> -</DL> -<HR> - -<H3> -server</H3> -<PRE> -java.net.URL <B>server</B></PRE> -<DL> -</DL> -<HR> - -<H3> -showButton</H3> -<PRE> -java.awt.Button <B>showButton</B></PRE> -<DL> -</DL> -<HR> - -<H3> -url</H3> -<PRE> -java.lang.String <B>url</B></PRE> -<DL> -</DL> - -<P> -<A NAME="modules.Script"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="modules/Script.html">modules.Script</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -applet</H3> -<PRE> -<A HREF="telnet.html">telnet</A> <B>applet</B></PRE> -<DL> -</DL> - -<P> -<A NAME="modules.TextLabel"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="modules/TextLabel.html">modules.TextLabel</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -applet</H3> -<PRE> -<A HREF="telnet.html">telnet</A> <B>applet</B></PRE> -<DL> -</DL> - -<P> -<HR SIZE="4" NOSHADE> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD ALIGN="center"><FONT SIZE="+2"> -<B>Package</B> <B>socket</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="socket.TimedOutException"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="socket/TimedOutException.html">socket.TimedOutException</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> - -<P> -<HR SIZE="4" NOSHADE> -<A NAME="appWrapper"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="appWrapper.html">appWrapper</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -applet</H3> -<PRE> -java.applet.Applet <B>applet</B></PRE> -<DL> -</DL> -<HR> - -<H3> -appletName</H3> -<PRE> -java.lang.String <B>appletName</B></PRE> -<DL> -</DL> -<HR> - -<H3> -f</H3> -<PRE> -frame <B>f</B></PRE> -<DL> -</DL> -<HR> - -<H3> -frameTitle</H3> -<PRE> -java.lang.String <B>frameTitle</B></PRE> -<DL> -</DL> -<HR> - -<H3> -loader</H3> -<PRE> -java.lang.Thread <B>loader</B></PRE> -<DL> -</DL> -<HR> - -<H3> -startButton</H3> -<PRE> -java.awt.Button <B>startButton</B></PRE> -<DL> -</DL> -<HR> - -<H3> -startLabel</H3> -<PRE> -java.lang.String <B>startLabel</B></PRE> -<DL> -</DL> -<HR> - -<H3> -stopLabel</H3> -<PRE> -java.lang.String <B>stopLabel</B></PRE> -<DL> -</DL> - -<P> -<HR SIZE="4" NOSHADE> -<A NAME="CharDisplayTest"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="CharDisplayTest.html">CharDisplayTest</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -attr</H3> -<PRE> -java.awt.Button <B>attr</B></PRE> -<DL> -</DL> -<HR> - -<H3> -buttons</H3> -<PRE> -java.awt.Panel <B>buttons</B></PRE> -<DL> -</DL> -<HR> - -<H3> -chars</H3> -<PRE> -java.awt.Button <B>chars</B></PRE> -<DL> -</DL> -<HR> - -<H3> -display</H3> -<PRE> -<A HREF="display/CharDisplay.html">CharDisplay</A> <B>display</B></PRE> -<DL> -</DL> -<HR> - -<H3> -fonts</H3> -<PRE> -java.awt.Choice <B>fonts</B></PRE> -<DL> -</DL> -<HR> - -<H3> -from</H3> -<PRE> -java.awt.TextField <B>from</B></PRE> -<DL> -</DL> -<HR> - -<H3> -info</H3> -<PRE> -java.awt.Button <B>info</B></PRE> -<DL> -</DL> - -<P> -<HR SIZE="4" NOSHADE> -<A NAME="telnet"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableSubHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class <A HREF="telnet.html">telnet</A> implements Serializable</B></FONT></TD> -</TR> -</TABLE> - -<P> -<A NAME="serializedForm"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Serialized Fields</B></FONT></TD> -</TR> -</TABLE> - -<H3> -address</H3> -<PRE> -java.lang.String <B>address</B></PRE> -<DL> -<DD>The host address to connect to. This is retrieved from the PARAM tag - "address".</DL> -<HR> - -<H3> -connected</H3> -<PRE> -boolean <B>connected</B></PRE> -<DL> -</DL> -<HR> - -<H3> -emulation</H3> -<PRE> -java.lang.String <B>emulation</B></PRE> -<DL> -<DD>Emulation type (default is vt320). This can be specified as the PARAM - tag "emulation".<DD><DL> -<DT><B>See Also: </B><DD><CODE>term</CODE>, -<A HREF="display/Terminal.html"><CODE>Terminal</CODE></A>, -<A HREF="display/TerminalHost.html"><CODE>TerminalHost</CODE></A></DL> -</DD> -</DL> -<HR> - -<H3> -localecho</H3> -<PRE> -boolean <B>localecho</B></PRE> -<DL> -</DL> -<HR> - -<H3> -modules</H3> -<PRE> -java.util.Vector <B>modules</B></PRE> -<DL> -<DD>Dynamically loaded modules are stored here.</DL> -<HR> - -<H3> -params</H3> -<PRE> -java.util.Hashtable <B>params</B></PRE> -<DL> -<DD>This Hashtable contains information retrievable by getParameter() in case - the program is run as an application and the AppletStub is missing.</DL> -<HR> - -<H3> -parent</H3> -<PRE> -java.awt.Container <B>parent</B></PRE> -<DL> -</DL> -<HR> - -<H3> -port</H3> -<PRE> -int <B>port</B></PRE> -<DL> -<DD>The port number (default ist 23). This can be specified as the PARAM tag - "port".</DL> -<HR> - -<H3> -proxy</H3> -<PRE> -java.lang.String <B>proxy</B></PRE> -<DL> -<DD>The proxy ip address. If this variable is set telnet will try to connect - to this address and then send a string to tell the relay where the - target host is.<DD><DL> -<DT><B>See Also: </B><DD><CODE>address</CODE></DL> -</DD> -</DL> -<HR> - -<H3> -proxyport</H3> -<PRE> -int <B>proxyport</B></PRE> -<DL> -<DD>The proxy port number. This is the port where the relay is expected to - listen for incoming connections.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="proxy.html"><CODE>proxy</CODE></A>, -<CODE>port</CODE></DL> -</DD> -</DL> -<HR> - -<H3> -t</H3> -<PRE> -java.lang.Thread <B>t</B></PRE> -<DL> -</DL> -<HR> - -<H3> -term</H3> -<PRE> -<A HREF="display/Terminal.html">Terminal</A> <B>term</B></PRE> -<DL> -<DD>The terminal emulation (dynamically loaded).<DD><DL> -<DT><B>See Also: </B><DD><CODE>emulation</CODE>, -<A HREF="display/Terminal.html"><CODE>Terminal</CODE></A>, -<A HREF="display/TerminalHost.html"><CODE>TerminalHost</CODE></A></DL> -</DD> -</DL> -<HR> - -<H3> -tio</H3> -<PRE> -<A HREF="socket/TelnetIO.html">TelnetIO</A> <B>tio</B></PRE> -<DL> -<DD>The telnet io methods.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="socket/TelnetIO.html"><CODE>TelnetIO</CODE></A></DL> -</DD> -</DL> - -<P> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Package</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="serialized-form.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/socket/StatusPeer.html b/web/root/telnet/Documentation/Source/socket/StatusPeer.html deleted file mode 100644 index 8b3989b4ef5dc748f1b572ccfd476a4029355eaa..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/socket/StatusPeer.html +++ /dev/null @@ -1,181 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:35 CEST 1999 --> -<TITLE> -: Interface StatusPeer -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="StatusPeer.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | CONSTR | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | CONSTR | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -socket</FONT> -<BR> -Interface StatusPeer</H2> -<DL> -<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../telnet.html">telnet</A>, <A HREF="../socket/TelnetIO.html">TelnetIO</A></DD> -</DL> -<HR> -<DL> -<DT>public abstract interface <B>StatusPeer</B></DL> - -<P> -StatusPeer -- interface for status messages - -- -<P> -<DL> -<DT><B>Version: </B><DD>$Id: StatusPeer.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -</DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.Object</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/StatusPeer.html#notifyStatus(java.util.Vector)">notifyStatus</A></B>(java.util.Vector status)</CODE> - -<BR> - This method is called for the peer of the TelnetIO class if there is - a statuschange.</TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="notifyStatus(java.util.Vector)"><!-- --></A><H3> -notifyStatus</H3> -<PRE> -public java.lang.Object <B>notifyStatus</B>(java.util.Vector status)</PRE> -<DL> -<DD>This method is called for the peer of the TelnetIO class if there is - a statuschange.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>status</CODE> - A Vector containing the key as element 0 and any arguments - from element 1 on.<DT><B>Returns:</B><DD>an object that matches the requested information or null<DT><B>See Also: </B><DD><A HREF="../socket/TelnetIO.html"><CODE>TelnetIO</CODE></A></DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="StatusPeer.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | CONSTR | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | CONSTR | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/socket/TelnetIO.html b/web/root/telnet/Documentation/Source/socket/TelnetIO.html deleted file mode 100644 index 2b41ba308809bb31637e65174b2a92ee14363a34..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/socket/TelnetIO.html +++ /dev/null @@ -1,408 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:36 CEST 1999 --> -<TITLE> -: Class TelnetIO -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - <A HREF="../socket/TelnetWrapper.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TelnetIO.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -socket</FONT> -<BR> -Class TelnetIO</H2> -<PRE> -java.lang.Object - | - +--<B>socket.TelnetIO</B> -</PRE> -<HR> -<DL> -<DT>public class <B>TelnetIO</B><DT>extends java.lang.Object<DT>implements <A HREF="../socket/StatusPeer.html">StatusPeer</A></DL> - -<P> -Implements simple telnet io -<P> -<DL> -<DT><B>Version: </B><DD>$Id: TelnetIO.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -</DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#TelnetIO()">TelnetIO</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#available()">available</A></B>()</CODE> - -<BR> - Returns bytes available to be read.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#connect(java.lang.String)">connect</A></B>(java.lang.String address)</CODE> - -<BR> - Connect to the remote host at the default telnet port (23).</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#connect(java.lang.String, int)">connect</A></B>(java.lang.String address, - int port)</CODE> - -<BR> - Connect to the remote host at the specified port.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - Disconnect from remote host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.Object</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#notifyStatus(java.util.Vector)">notifyStatus</A></B>(java.util.Vector status)</CODE> - -<BR> - Notify about current telnet status.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> byte[]</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#receive()">receive</A></B>()</CODE> - -<BR> - Read data from the remote host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#send(byte)">send</A></B>(byte b)</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#send(byte[])">send</A></B>(byte[] buf)</CODE> - -<BR> - Send data to the remote host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#setPeer(socket.StatusPeer)">setPeer</A></B>(<A HREF="../socket/StatusPeer.html">StatusPeer</A> obj)</CODE> - -<BR> - Set the object to be notified about current status.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetIO.html#toString()">toString</A></B>()</CODE> - -<BR> - Return the version of TelnetIO.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="TelnetIO()"><!-- --></A><H3> -TelnetIO</H3> -<PRE> -public <B>TelnetIO</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="toString()"><!-- --></A><H3> -toString</H3> -<PRE> -public java.lang.String <B>toString</B>()</PRE> -<DL> -<DD>Return the version of TelnetIO.<DD><DL> -<DT><B>Overrides:</B><DD>toString in class java.lang.Object</DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String, int)"><!-- --></A><H3> -connect</H3> -<PRE> -public void <B>connect</B>(java.lang.String address, - int port) - throws java.io.IOException</PRE> -<DL> -<DD>Connect to the remote host at the specified port.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>address</CODE> - the symbolic host address<DD><CODE>port</CODE> - the numeric port<DT><B>See Also: </B><DD><A HREF="../socket/TelnetIO.html#disconnect()"><CODE>disconnect()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public void <B>disconnect</B>() - throws java.io.IOException</PRE> -<DL> -<DD>Disconnect from remote host.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="../socket/TelnetIO.html#connect(java.lang.String, int)"><CODE>connect(java.lang.String, int)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String)"><!-- --></A><H3> -connect</H3> -<PRE> -public void <B>connect</B>(java.lang.String address) - throws java.io.IOException</PRE> -<DL> -<DD>Connect to the remote host at the default telnet port (23).<DD><DL> -<DT><B>Parameters:</B><DD><CODE>address</CODE> - the symbolic host address</DL> -</DD> -</DL> -<HR> - -<A NAME="setPeer(socket.StatusPeer)"><!-- --></A><H3> -setPeer</H3> -<PRE> -public void <B>setPeer</B>(<A HREF="../socket/StatusPeer.html">StatusPeer</A> obj)</PRE> -<DL> -<DD>Set the object to be notified about current status.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>obj</CODE> - object to be notified.</DL> -</DD> -</DL> -<HR> - -<A NAME="available()"><!-- --></A><H3> -available</H3> -<PRE> -public int <B>available</B>() - throws java.io.IOException</PRE> -<DL> -<DD>Returns bytes available to be read. Since they haven't been - negotiated over, this could be misleading. - Most useful as a boolean value - "are any bytes available" - - rather than as an exact count of "how many ara available."<DD><DL> -<DT><B>Throws:</B><DD>java.io.IOException - on problems with the socket connection</DL> -</DD> -</DL> -<HR> - -<A NAME="receive()"><!-- --></A><H3> -receive</H3> -<PRE> -public byte[] <B>receive</B>() - throws java.io.IOException</PRE> -<DL> -<DD>Read data from the remote host. Blocks until data is available. - Returns an array of bytes.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="../socket/TelnetIO.html#send(byte[])"><CODE>send(byte[])</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="send(byte[])"><!-- --></A><H3> -send</H3> -<PRE> -public void <B>send</B>(byte[] buf) - throws java.io.IOException</PRE> -<DL> -<DD>Send data to the remote host.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>buf</CODE> - array of bytes to send<DT><B>See Also: </B><DD><A HREF="../socket/TelnetIO.html#receive()"><CODE>receive()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="send(byte)"><!-- --></A><H3> -send</H3> -<PRE> -public void <B>send</B>(byte b) - throws java.io.IOException</PRE> -<DL> -<DD><DL> -</DL> -</DD> -</DL> -<HR> - -<A NAME="notifyStatus(java.util.Vector)"><!-- --></A><H3> -notifyStatus</H3> -<PRE> -public java.lang.Object <B>notifyStatus</B>(java.util.Vector status)</PRE> -<DL> -<DD>Notify about current telnet status. This method is called top-down.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="../socket/StatusPeer.html#notifyStatus(java.util.Vector)">notifyStatus</A> in interface <A HREF="../socket/StatusPeer.html">StatusPeer</A><DT><B>Parameters:</B><DD><CODE>status</CODE> - contains status information</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - <A HREF="../socket/TelnetWrapper.html"><B>NEXT CLASS</B></A></FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TelnetIO.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/socket/TelnetWrapper.html b/web/root/telnet/Documentation/Source/socket/TelnetWrapper.html deleted file mode 100644 index e035970ef8f0538ae46e1cdda49c7cc31bbb4b80..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/socket/TelnetWrapper.html +++ /dev/null @@ -1,679 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:36 CEST 1999 --> -<TITLE> -: Class TelnetWrapper -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../socket/TelnetIO.html"><B>PREV CLASS</B></A> - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TelnetWrapper.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -socket</FONT> -<BR> -Class TelnetWrapper</H2> -<PRE> -java.lang.Object - | - +--<B>socket.TelnetWrapper</B> -</PRE> -<HR> -<DL> -<DT>public class <B>TelnetWrapper</B><DT>extends java.lang.Object</DL> - -<P> -Wrapper for a Java Telnet call. - To use, make a new TelnetWrapper() with the name or IP address of a host. - Then, for most uses, the easiest way is to call setPrompt() with the - expected prompt, then call login(), and a sequence of sendLine()'s - until you get what you want done. - <P> - If you don't know the prompt ahead of time, you have to do a sequence of - send() and wait() or receiveUntil() calls. send() sends a string across - the telnet connection. Add a '\r' to the end if you want to - complete a command. wait() waits for an exact string from the other side - of the telnet connection, and returns nothing, - receiveUntil() also waits for a string, but returns all the data - that it received while waiting, including the string itself. - Use this if you want the output from a command. Please note that - the telnet connection will usually echo the sent command. - <P> - sendLine() is generally better, since it adds the '\r' - automatically, waits for the prompt before returning, and returns all - data received before the prompt, with the prompt itself cut off the - end, and the sent command cut off the beginning. login() and - sendLine() are implemented using send(), wait() and receiveUntil(). - They can be freely mixed and matched. - <P> - Here is a simple example of the use of TelnetWrapper: - <PRE> - // creates a new file in /tmp, lists the directory to prove it done - { - TelnetWrapper telnet = new TelnetWrapper("123.45.78.90"); - - // setting the correct prompt ahead of time is very important - // if you want to use login and sendLine - telnet.setPrompt("$ "); - telnet.login("loginname", "password"); - - // this is how you have to do it otherwise - telnet.send("touch /tmp/TELNET_WRAPPER" + "\r"); - telnet.wait("$ "); - - // sendLine 1: adds the \r automatically, 2: waits for the prompt - // before returning 3: returns what was printed from the command - String ls = telnet.sendLine("ls /tmp"); - System.out.println(ls); - - // clean up - telnet.disconnect(); - } - </PRE> -<P> -<DL> -<DT><B>Version: </B><DD>0.2 5/15/97 - added comments, replaced String += with - StringBuffer.append() in receiveUntil(), added port constructor</DD> -<DT><B>Author: </B><DD>George Ruban 3/4/97</DD> -<DT><B>See Also: </B><DD><A HREF="../socket/TelnetIO.html"><CODE>TelnetIO</CODE></A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="field_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Field Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#debug">debug</A></B></CODE> - -<BR> - Set to true for System.out.println debugging.</TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#TelnetWrapper(java.lang.String)">TelnetWrapper</A></B>(java.lang.String host)</CODE> - -<BR> - Connects to the default telnet port on the given host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#TelnetWrapper(java.lang.String, int)">TelnetWrapper</A></B>(java.lang.String host, - int port)</CODE> - -<BR> - Connects to a specific telnet port on the given host.</TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> int</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#available()">available</A></B>()</CODE> - -<BR> - Returns bytes available to be read.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - Ends the telnet connection.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#finalize()">finalize</A></B>()</CODE> - -<BR> - Ends the telnet connection.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#login(java.lang.String, java.lang.String)">login</A></B>(java.lang.String loginName, - java.lang.String password)</CODE> - -<BR> - Logs in as a particular user and password.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#main(java.lang.String[])">main</A></B>(java.lang.String[] args)</CODE> - -<BR> - Telnet test driver.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#receive()">receive</A></B>()</CODE> - -<BR> - Returns a String from the telnet connection.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> byte[]</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#receiveBytes()">receiveBytes</A></B>()</CODE> - -<BR> - Returns a byte array.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#receiveUntil(java.lang.String)">receiveUntil</A></B>(java.lang.String token)</CODE> - -<BR> - Returns all data received up until a certain token.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#receiveUntil(java.lang.String, long)">receiveUntil</A></B>(java.lang.String token, - long timeout)</CODE> - -<BR> - Returns all data received up until a certain token.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#send(byte[])">send</A></B>(byte[] buf)</CODE> - -<BR> - Sends bytes over the telnet connection.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#send(java.lang.String)">send</A></B>(java.lang.String s)</CODE> - -<BR> - Sends a String to the remote host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#sendLine(java.lang.String)">sendLine</A></B>(java.lang.String command)</CODE> - -<BR> - Sends a line to the remote host, returns all data before the prompt.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#setDefaultPrompt(java.lang.String)">setDefaultPrompt</A></B>(java.lang.String prompt)</CODE> - -<BR> - Sets the default prompt used by all TelnetWrappers.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#setLogin(java.lang.String, java.lang.String)">setLogin</A></B>(java.lang.String login, - java.lang.String password)</CODE> - -<BR> - Sets the default login used by TelnetWrappers.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#setPrompt(java.lang.String)">setPrompt</A></B>(java.lang.String prompt)</CODE> - -<BR> - Sets the expected prompt.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#unsetLogin()">unsetLogin</A></B>()</CODE> - -<BR> - Turns off the default login of TelnetWrappers.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#wait(java.lang.String)">wait</A></B>(java.lang.String token)</CODE> - -<BR> - Skip any received data until the token appears.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="../socket/TelnetWrapper.html#wait(java.lang.String, long)">wait</A></B>(java.lang.String token, - long timeout)</CODE> - -<BR> - Wait for a String or a timeout.</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -getClass, -hashCode, -notify, -notifyAll, -toString, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - -<A NAME="field_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Field Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="debug"><!-- --></A><H3> -debug</H3> -<PRE> -public boolean <B>debug</B></PRE> -<DL> -<DD>Set to true for System.out.println debugging.</DL> - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="TelnetWrapper(java.lang.String)"><!-- --></A><H3> -TelnetWrapper</H3> -<PRE> -public <B>TelnetWrapper</B>(java.lang.String host) - throws java.io.IOException</PRE> -<DL> -<DD>Connects to the default telnet port on the given host. - If the defaultLogin and defaultPassword are non-null, attempts login.</DL> -<HR> - -<A NAME="TelnetWrapper(java.lang.String, int)"><!-- --></A><H3> -TelnetWrapper</H3> -<PRE> -public <B>TelnetWrapper</B>(java.lang.String host, - int port) - throws java.io.IOException</PRE> -<DL> -<DD>Connects to a specific telnet port on the given host. - If the defaultLogin and defaultPassword are non-null, attempts login.</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="wait(java.lang.String)"><!-- --></A><H3> -wait</H3> -<PRE> -public void <B>wait</B>(java.lang.String token) - throws java.io.IOException</PRE> -<DL> -<DD>Skip any received data until the token appears. - More efficient than receiveUntil, but liable to fail on large - tokens that can be spread over several "send"s. In that case, - consider using receiveUntil and ignoring the return value.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>token</CODE> - String to wait for<DT><B>Throws:</B><DD>java.io.IOException - on problems with the socket connection<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#receiveUntil(java.lang.String)"><CODE>receiveUntil(java.lang.String)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="wait(java.lang.String, long)"><!-- --></A><H3> -wait</H3> -<PRE> -public void <B>wait</B>(java.lang.String token, - long timeout) - throws java.io.IOException, - <A HREF="../socket/TimedOutException.html">TimedOutException</A></PRE> -<DL> -<DD>Wait for a String or a timeout. - If time runs out, throws a TimedOutException. - Sleeps in intervals of 100 milliseconds until either receiving the - token or timeout. - <P> - More efficient than receiveUntil, but liable to fail on large - tokens that can be spread over several "send"s. In that case, - consider using receiveUntil and ignoring the return value.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>token</CODE> - String to wait for<DD><CODE>timeout</CODE> - time in milliseconds to wait (negative means wait forever)<DT><B>Throws:</B><DD>java.io.IOException - on problems with the socket connection<DD><A HREF="../socket/TimedOutException.html">TimedOutException</A> - if time runs out before token received<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#receiveUntil(java.lang.String, long)"><CODE>receiveUntil(String, long)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="available()"><!-- --></A><H3> -available</H3> -<PRE> -public int <B>available</B>() - throws java.io.IOException</PRE> -<DL> -<DD>Returns bytes available to be read. Since they haven't been - negotiated over, this could be misleading...</DL> -<HR> - -<A NAME="receive()"><!-- --></A><H3> -receive</H3> -<PRE> -public java.lang.String <B>receive</B>() - throws java.io.IOException</PRE> -<DL> -<DD>Returns a String from the telnet connection. Blocks - until one is available. No guarantees that the string is in - any way complete. - NOTE: uses Java 1.0.2 style String-bytes conversion.</DL> -<HR> - -<A NAME="receiveBytes()"><!-- --></A><H3> -receiveBytes</H3> -<PRE> -public byte[] <B>receiveBytes</B>() - throws java.io.IOException</PRE> -<DL> -<DD>Returns a byte array. Blocks until data is available.</DL> -<HR> - -<A NAME="receiveUntil(java.lang.String)"><!-- --></A><H3> -receiveUntil</H3> -<PRE> -public java.lang.String <B>receiveUntil</B>(java.lang.String token) - throws java.io.IOException</PRE> -<DL> -<DD>Returns all data received up until a certain token.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>token</CODE> - String to wait for<DT><B>Throws:</B><DD>java.io.IOException - on problems with the socket connection<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#wait(java.lang.String)"><CODE>wait(java.lang.String)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="receiveUntil(java.lang.String, long)"><!-- --></A><H3> -receiveUntil</H3> -<PRE> -public java.lang.String <B>receiveUntil</B>(java.lang.String token, - long timeout) - throws java.io.IOException, - <A HREF="../socket/TimedOutException.html">TimedOutException</A></PRE> -<DL> -<DD>Returns all data received up until a certain token.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>token</CODE> - String to wait for<DD><CODE>timeout</CODE> - time in milliseconds to wait (negative means wait forever)<DT><B>Throws:</B><DD>java.io.IOException - on problems with the socket connection<DD><A HREF="../socket/TimedOutException.html">TimedOutException</A> - if time runs out before token received<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#wait(java.lang.String, long)"><CODE>wait(String, long)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="send(java.lang.String)"><!-- --></A><H3> -send</H3> -<PRE> -public void <B>send</B>(java.lang.String s) - throws java.io.IOException</PRE> -<DL> -<DD>Sends a String to the remote host. - NOTE: uses Java 1.0.2 style String-bytes conversion.<DD><DL> -<DT><B>Throws:</B><DD>java.io.IOException - on problems with the socket connection</DL> -</DD> -</DL> -<HR> - -<A NAME="sendLine(java.lang.String)"><!-- --></A><H3> -sendLine</H3> -<PRE> -public java.lang.String <B>sendLine</B>(java.lang.String command) - throws java.io.IOException</PRE> -<DL> -<DD>Sends a line to the remote host, returns all data before the prompt. - Since telnet seems to rely on carriage returns ('\r'), - one will be appended to the sent string, if necessary.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>command</CODE> - command line to send<DT><B>Returns:</B><DD>whatever data the command produced before the prompt.<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#setPrompt(java.lang.String)"><CODE>setPrompt(java.lang.String)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="send(byte[])"><!-- --></A><H3> -send</H3> -<PRE> -public void <B>send</B>(byte[] buf) - throws java.io.IOException</PRE> -<DL> -<DD>Sends bytes over the telnet connection.</DL> -<HR> - -<A NAME="login(java.lang.String, java.lang.String)"><!-- --></A><H3> -login</H3> -<PRE> -public void <B>login</B>(java.lang.String loginName, - java.lang.String password) - throws java.io.IOException</PRE> -<DL> -<DD>Logs in as a particular user and password. - Returns after receiving prompt.</DL> -<HR> - -<A NAME="setPrompt(java.lang.String)"><!-- --></A><H3> -setPrompt</H3> -<PRE> -public void <B>setPrompt</B>(java.lang.String prompt)</PRE> -<DL> -<DD>Sets the expected prompt. - If this function is not explicitly called, the default prompt is used.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#setDefaultPrompt(java.lang.String)"><CODE>setDefaultPrompt(java.lang.String)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="setDefaultPrompt(java.lang.String)"><!-- --></A><H3> -setDefaultPrompt</H3> -<PRE> -public static void <B>setDefaultPrompt</B>(java.lang.String prompt)</PRE> -<DL> -<DD>Sets the default prompt used by all TelnetWrappers. - This can be specifically overridden for a specific instance. - The default prompt starts out as "$ " until this function is called.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#setPrompt(java.lang.String)"><CODE>setPrompt(java.lang.String)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="setLogin(java.lang.String, java.lang.String)"><!-- --></A><H3> -setLogin</H3> -<PRE> -public static void <B>setLogin</B>(java.lang.String login, - java.lang.String password)</PRE> -<DL> -<DD>Sets the default login used by TelnetWrappers. - If this method is called with non-null login and password, - all TelnetWrappers will attempt to login when first created.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>login</CODE> - login name to use<DD><CODE>password</CODE> - password to use<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#login(java.lang.String, java.lang.String)"><CODE>login(java.lang.String, java.lang.String)</CODE></A>, -<A HREF="../socket/TelnetWrapper.html#unsetLogin()"><CODE>unsetLogin()</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="unsetLogin()"><!-- --></A><H3> -unsetLogin</H3> -<PRE> -public static void <B>unsetLogin</B>()</PRE> -<DL> -<DD>Turns off the default login of TelnetWrappers. - After this method is called, TelnetWrappers will not - login until that method is explicitly called.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="../socket/TelnetWrapper.html#setLogin(java.lang.String, java.lang.String)"><CODE>setLogin(java.lang.String, java.lang.String)</CODE></A>, -<A HREF="../socket/TelnetWrapper.html#login(java.lang.String, java.lang.String)"><CODE>login(java.lang.String, java.lang.String)</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public void <B>disconnect</B>() - throws java.io.IOException</PRE> -<DL> -<DD>Ends the telnet connection.</DL> -<HR> - -<A NAME="finalize()"><!-- --></A><H3> -finalize</H3> -<PRE> -public void <B>finalize</B>()</PRE> -<DL> -<DD>Ends the telnet connection.<DD><DL> -<DT><B>Overrides:</B><DD>finalize in class java.lang.Object</DL> -</DD> -</DL> -<HR> - -<A NAME="main(java.lang.String[])"><!-- --></A><H3> -main</H3> -<PRE> -public static void <B>main</B>(java.lang.String[] args) - throws java.io.IOException</PRE> -<DL> -<DD>Telnet test driver. - Modeled after the IOtest.java example in the Telnet Applet. - Logs in to "host", creates a timestamped file in /tmp, lists the - /tmp directory to System.out, disconnects. Shows off several - TelnetWrapper methods.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>args</CODE> - host login password prompt</DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../socket/TelnetIO.html"><B>PREV CLASS</B></A> - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TelnetWrapper.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/socket/TimedOutException.html b/web/root/telnet/Documentation/Source/socket/TimedOutException.html deleted file mode 100644 index 4f180a154cd49b90bba26bc9098a7ea7afd11efe..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/socket/TimedOutException.html +++ /dev/null @@ -1,228 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:36 CEST 1999 --> -<TITLE> -: Class TimedOutException -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TimedOutException.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | METHOD</FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -<FONT SIZE="-1"> -socket</FONT> -<BR> -Class TimedOutException</H2> -<PRE> -java.lang.Object - | - +--java.lang.Throwable - | - +--java.lang.Exception - | - +--java.io.IOException - | - +--<B>socket.TimedOutException</B> -</PRE> -<HR> -<DL> -<DT>public class <B>TimedOutException</B><DT>extends java.io.IOException</DL> - -<P> -Exception thrown when a Telnet connection takes too long - before receiving a specified String token. -<P> -<DL> -<DT><B>Version: </B><DD>0.1 7/30/97</DD> -<DT><B>Author: </B><DD>George Ruban</DD> -<DT><B>See Also: </B><DD><A HREF="../serialized-form.html#socket.TimedOutException">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../socket/TimedOutException.html#TimedOutException()">TimedOutException</A></B>()</CODE> - -<BR> - </TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="../socket/TimedOutException.html#TimedOutException(java.lang.String)">TimedOutException</A></B>(java.lang.String message)</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Throwable</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>fillInStackTrace, -getLocalizedMessage, -getMessage, -printStackTrace, -printStackTrace, -printStackTrace, -toString</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="TimedOutException()"><!-- --></A><H3> -TimedOutException</H3> -<PRE> -public <B>TimedOutException</B>()</PRE> -<DL> -</DL> -<HR> - -<A NAME="TimedOutException(java.lang.String)"><!-- --></A><H3> -TimedOutException</H3> -<PRE> -public <B>TimedOutException</B>(java.lang.String message)</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - PREV CLASS - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="TimedOutException.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | METHOD</FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/socket/package-frame.html b/web/root/telnet/Documentation/Source/socket/package-frame.html deleted file mode 100644 index 9fb033f62a534bdd31ebbb2cd719fbe42c3d40e2..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/socket/package-frame.html +++ /dev/null @@ -1,50 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Package socket -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> -<FONT size="+1" ID="FrameTitleFont"> -<A HREF="../socket/package-summary.html" TARGET="classFrame">socket</A></FONT> -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT size="+1" ID="FrameHeadingFont"> -Interfaces</FONT> -<FONT ID="FrameItemFont"> -<BR> -<A HREF="StatusPeer.html" TARGET="classFrame"><I>StatusPeer</I></A></FONT></TD> -</TR> -</TABLE> - - -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT size="+1" ID="FrameHeadingFont"> -Classes</FONT> -<FONT ID="FrameItemFont"> -<BR> -<A HREF="TelnetIO.html" TARGET="classFrame">TelnetIO</A> -<BR> -<A HREF="TelnetWrapper.html" TARGET="classFrame">TelnetWrapper</A></FONT></TD> -</TR> -</TABLE> - - -<TABLE BORDER="0" WIDTH="100%"> -<TR> -<TD NOWRAP><FONT size="+1" ID="FrameHeadingFont"> -Exceptions</FONT> -<FONT ID="FrameItemFont"> -<BR> -<A HREF="TimedOutException.html" TARGET="classFrame">TimedOutException</A></FONT></TD> -</TR> -</TABLE> - - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/socket/package-summary.html b/web/root/telnet/Documentation/Source/socket/package-summary.html deleted file mode 100644 index 9e552b3660439ddc009507989973041fedb938f0..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/socket/package-summary.html +++ /dev/null @@ -1,138 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: Package socket -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Package</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/package-summary.html"><B>PREV PACKAGE</B></A> - NEXT PACKAGE</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<H2> -Package socket -</H2> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Interface Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="StatusPeer.html"><I>StatusPeer</I></A></B></TD> -<TD>StatusPeer -- interface for status messages - --</TD> -</TR> -</TABLE> - - -<P> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Class Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="TelnetIO.html">TelnetIO</A></B></TD> -<TD>Implements simple telnet io</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="TelnetWrapper.html">TelnetWrapper</A></B></TD> -<TD>Wrapper for a Java Telnet call.</TD> -</TR> -</TABLE> - - -<P> - -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Exception Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD WIDTH="15%"><B><A HREF="TimedOutException.html">TimedOutException</A></B></TD> -<TD>Exception thrown when a Telnet connection takes too long - before receiving a specified String token.</TD> -</TR> -</TABLE> - - -<P> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Package</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/package-summary.html"><B>PREV PACKAGE</B></A> - NEXT PACKAGE</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/socket/package-tree.html b/web/root/telnet/Documentation/Source/socket/package-tree.html deleted file mode 100644 index 166ea991e812cad41ac4d5ef047b743c9968bc86..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/socket/package-tree.html +++ /dev/null @@ -1,115 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:32 CEST 1999 --> -<TITLE> -: socket Class Hierarchy -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Tree</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/package-tree.html"><B>PREV</B></A> - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<CENTER> -<H2> -Hierarchy For Package socket -</H2> -</CENTER> -<DL> -<DT><B>Package Hierarchies: </B><DD><A HREF="../overview-tree.html">All Packages</A></DL> -<HR> -<H2> -Class Hierarchy -</H2> -<UL> -<LI TYPE="circle">class java.lang.Object<UL> -<LI TYPE="circle">class socket.<A HREF="../socket/TelnetIO.html"><B>TelnetIO</B></A> (implements socket.<A HREF="../socket/StatusPeer.html">StatusPeer</A>) -<LI TYPE="circle">class socket.<A HREF="../socket/TelnetWrapper.html"><B>TelnetWrapper</B></A><LI TYPE="circle">class java.lang.Throwable (implements java.io.Serializable) -<UL> -<LI TYPE="circle">class java.lang.Exception<UL> -<LI TYPE="circle">class java.io.IOException<UL> -<LI TYPE="circle">class socket.<A HREF="../socket/TimedOutException.html"><B>TimedOutException</B></A></UL> -</UL> -</UL> -</UL> -</UL> -<H2> -Interface Hierarchy -</H2> -<UL> -<LI TYPE="circle">interface socket.<A HREF="../socket/StatusPeer.html"><B>StatusPeer</B></A></UL> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <FONT ID="NavBarFont1">Class</FONT> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Tree</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="../help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../modules/package-tree.html"><B>PREV</B></A> - NEXT</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="../index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/Source/stylesheet.css b/web/root/telnet/Documentation/Source/stylesheet.css deleted file mode 100644 index 539689f8414b8ea28dfa954527aa59993b904108..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/stylesheet.css +++ /dev/null @@ -1,29 +0,0 @@ -/* Javadoc style sheet */ - -/* Define colors, fonts and other style attributes here to override the defaults */ - -/* Page background color */ -body { background-color: #FFFFFF } - -/* Table colors */ -#TableHeadingColor { background: #CCCCFF } /* Dark mauve */ -#TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ -#TableRowColor { background: #FFFFFF } /* White */ - -/* Font used in left-hand frame lists */ -#FrameTitleFont { font-size: normal; font-family: normal } -#FrameHeadingFont { font-size: normal; font-family: normal } -#FrameItemFont { font-size: normal; font-family: normal } - -/* Example of smaller, sans-serif font in frames */ -/* #FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */ - -/* Navigation bar fonts and colors */ -#NavBarCell1 { background-color:#EEEEFF;}/* Light mauve */ -#NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */ -#NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} -#NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} - -#NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} -#NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} - diff --git a/web/root/telnet/Documentation/Source/telnet.html b/web/root/telnet/Documentation/Source/telnet.html deleted file mode 100644 index a780c05a3af91f2af337baf574643c0225bfb54f..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/Source/telnet.html +++ /dev/null @@ -1,955 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<!--NewPage--> -<HTML> -<HEAD> -<!-- Generated by javadoc on Wed Jun 16 11:44:33 CEST 1999 --> -<TITLE> -: Class telnet -</TITLE> -<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"> -</HEAD> -<BODY BGCOLOR="white"> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_top"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_top_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="proxy.html"><B>PREV CLASS</B></A> - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="telnet.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> -<!-- ======== START OF CLASS DATA ======== --> -<H2> -Class telnet</H2> -<PRE> -java.lang.Object - | - +--java.awt.Component - | - +--java.awt.Container - | - +--java.awt.Panel - | - +--java.applet.Applet - | - +--<B>telnet</B> -</PRE> -<HR> -<DL> -<DT>public class <B>telnet</B><DT>extends java.applet.Applet<DT>implements java.lang.Runnable, <A HREF="display/TerminalHost.html">TerminalHost</A>, <A HREF="socket/StatusPeer.html">StatusPeer</A></DL> - -<P> -A telnet implementation that supports different terminal emulations. -<P> -<DL> -<DT><B>Version: </B><DD>$Id: telnet.html,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $</DD> -<DT><B>Author: </B><DD>Matthias L. Jugel, Marcus Mei�ner</DD> -<DT><B>See Also: </B><DD><A HREF="serialized-form.html#telnet">Serialized Form</A></DL> -<HR> - -<P> -<!-- ======== INNER CLASS SUMMARY ======== --> - - -<!-- =========== FIELD SUMMARY =========== --> - -<A NAME="field_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Field Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#address">address</A></B></CODE> - -<BR> - The host address to connect to.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#emulation">emulation</A></B></CODE> - -<BR> - Emulation type (default is vt320).</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected java.util.Vector</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#modules">modules</A></B></CODE> - -<BR> - Dynamically loaded modules are stored here.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.util.Hashtable</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#params">params</A></B></CODE> - -<BR> - This Hashtable contains information retrievable by getParameter() in case - the program is run as an application and the AppletStub is missing.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected int</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#port">port</A></B></CODE> - -<BR> - The port number (default ist 23).</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#proxy">proxy</A></B></CODE> - -<BR> - The proxy ip address.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected int</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#proxyport">proxyport</A></B></CODE> - -<BR> - The proxy port number.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected <A HREF="display/Terminal.html">Terminal</A></CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#term">term</A></B></CODE> - -<BR> - The terminal emulation (dynamically loaded).</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>protected <A HREF="socket/TelnetIO.html">TelnetIO</A></CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#tio">tio</A></B></CODE> - -<BR> - The telnet io methods.</TD> -</TR> -</TABLE> - <A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Fields inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>BOTTOM_ALIGNMENT, -CENTER_ALIGNMENT, -LEFT_ALIGNMENT, -RIGHT_ALIGNMENT, -TOP_ALIGNMENT</CODE></TD> -</TR> -</TABLE> - -<!-- ======== CONSTRUCTOR SUMMARY ======== --> - -<A NAME="constructor_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Constructor Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE><B><A HREF="telnet.html#telnet()">telnet</A></B>()</CODE> - -<BR> - </TD> -</TR> -</TABLE> - -<!-- ========== METHOD SUMMARY =========== --> - -<A NAME="method_summary"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=2><FONT SIZE="+2"> -<B>Method Summary</B></FONT></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#connect()">connect</A></B>()</CODE> - -<BR> - Connect to the specified host and port but don't break existing - connections.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#connect(java.lang.String)">connect</A></B>(java.lang.String host)</CODE> - -<BR> - Connect to the specified host and port but don't break existing - connections.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#connect(java.lang.String, int)">connect</A></B>(java.lang.String host, - int prt)</CODE> - -<BR> - Connect to the specified host and port but don't break existing - connections.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#disconnect()">disconnect</A></B>()</CODE> - -<BR> - Disconnect from the remote host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#getAppletInfo()">getAppletInfo</A></B>()</CODE> - -<BR> - Retrieve the current version of the applet.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#getParameter(java.lang.String)">getParameter</A></B>(java.lang.String name)</CODE> - -<BR> - We override the Applet method getParameter() to be able to handle - parameters even as application.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.String[][]</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#getParameterInfo()">getParameterInfo</A></B>()</CODE> - -<BR> - Retrieve parameter tag information.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#init()">init</A></B>()</CODE> - -<BR> - Initialize applet.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE>static void</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#main(java.lang.String[])">main</A></B>(java.lang.String[] args)</CODE> - -<BR> - The main function is called on startup of the application.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> java.lang.Object</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#notifyStatus(java.util.Vector)">notifyStatus</A></B>(java.util.Vector status)</CODE> - -<BR> - This method is called when telnet needs to be notified of status changes.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#run()">run</A></B>()</CODE> - -<BR> - Try to read data from the sockets and put it on the terminal.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#send(java.lang.String)">send</A></B>(java.lang.String str)</CODE> - -<BR> - Send a String to the remote host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#start()">start</A></B>()</CODE> - -<BR> - Upon start of the applet try to create a new connection.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#stop()">stop</A></B>()</CODE> - -<BR> - Disconnect when the applet is stopped.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> boolean</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#writeToSocket(java.lang.String)">writeToSocket</A></B>(java.lang.String str)</CODE> - -<BR> - Send a String to the remote Host.</TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> -<CODE> void</CODE></FONT></TD> -<TD><CODE><B><A HREF="telnet.html#writeToUser(java.lang.String)">writeToUser</A></B>(java.lang.String str)</CODE> - -<BR> - Send a String to the users terminal</TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.applet.Applet"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.applet.Applet</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>destroy, -getAppletContext, -getAudioClip, -getAudioClip, -getCodeBase, -getDocumentBase, -getImage, -getImage, -getLocale, -isActive, -newAudioClip, -play, -play, -resize, -resize, -setStub, -showStatus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Panel"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Panel</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>addNotify</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Container</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>add, -add, -add, -add, -add, -addContainerListener, -addImpl, -countComponents, -deliverEvent, -doLayout, -findComponentAt, -findComponentAt, -getAlignmentX, -getAlignmentY, -getComponent, -getComponentAt, -getComponentAt, -getComponentCount, -getComponents, -getInsets, -getLayout, -getMaximumSize, -getMinimumSize, -getPreferredSize, -insets, -invalidate, -isAncestorOf, -layout, -list, -list, -locate, -minimumSize, -paint, -paintComponents, -paramString, -preferredSize, -print, -printComponents, -processContainerEvent, -processEvent, -remove, -remove, -removeAll, -removeContainerListener, -removeNotify, -setFont, -setLayout, -update, -validate, -validateTree</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.awt.Component</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>action, -add, -addComponentListener, -addFocusListener, -addInputMethodListener, -addKeyListener, -addMouseListener, -addMouseMotionListener, -addPropertyChangeListener, -addPropertyChangeListener, -bounds, -checkImage, -checkImage, -coalesceEvents, -contains, -contains, -createImage, -createImage, -disable, -disableEvents, -dispatchEvent, -enable, -enable, -enableEvents, -enableInputMethods, -firePropertyChange, -getBackground, -getBounds, -getBounds, -getColorModel, -getComponentOrientation, -getCursor, -getDropTarget, -getFont, -getFontMetrics, -getForeground, -getGraphics, -getHeight, -getInputContext, -getInputMethodRequests, -getLocation, -getLocation, -getLocationOnScreen, -getName, -getParent, -getPeer, -getSize, -getSize, -getToolkit, -getTreeLock, -getWidth, -getX, -getY, -gotFocus, -handleEvent, -hasFocus, -hide, -imageUpdate, -inside, -isDisplayable, -isDoubleBuffered, -isEnabled, -isFocusTraversable, -isLightweight, -isOpaque, -isShowing, -isValid, -isVisible, -keyDown, -keyUp, -list, -list, -list, -location, -lostFocus, -mouseDown, -mouseDrag, -mouseEnter, -mouseExit, -mouseMove, -mouseUp, -move, -nextFocus, -paintAll, -postEvent, -prepareImage, -prepareImage, -printAll, -processComponentEvent, -processFocusEvent, -processInputMethodEvent, -processKeyEvent, -processMouseEvent, -processMouseMotionEvent, -remove, -removeComponentListener, -removeFocusListener, -removeInputMethodListener, -removeKeyListener, -removeMouseListener, -removeMouseMotionListener, -removePropertyChangeListener, -removePropertyChangeListener, -repaint, -repaint, -repaint, -repaint, -requestFocus, -reshape, -setBackground, -setBounds, -setBounds, -setComponentOrientation, -setCursor, -setDropTarget, -setEnabled, -setForeground, -setLocale, -setLocation, -setLocation, -setName, -setSize, -setSize, -setVisible, -show, -show, -size, -toString, -transferFocus</CODE></TD> -</TR> -</TABLE> - <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#EEEEFF" ID="TableSubHeadingColor"> -<TD><B>Methods inherited from class java.lang.Object</B></TD> -</TR> -<TR BGCOLOR="white" ID="TableRowColor"> -<TD><CODE>clone, -equals, -finalize, -getClass, -hashCode, -notify, -notifyAll, -wait, -wait, -wait</CODE></TD> -</TR> -</TABLE> - -<P> - -<!-- ============ FIELD DETAIL =========== --> - -<A NAME="field_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Field Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="tio"><!-- --></A><H3> -tio</H3> -<PRE> -protected <A HREF="socket/TelnetIO.html">TelnetIO</A> <B>tio</B></PRE> -<DL> -<DD>The telnet io methods.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="socket/TelnetIO.html"><CODE>TelnetIO</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="term"><!-- --></A><H3> -term</H3> -<PRE> -protected <A HREF="display/Terminal.html">Terminal</A> <B>term</B></PRE> -<DL> -<DD>The terminal emulation (dynamically loaded).<DD><DL> -<DT><B>See Also: </B><DD><CODE>emulation</CODE>, -<A HREF="display/Terminal.html"><CODE>Terminal</CODE></A>, -<A HREF="display/TerminalHost.html"><CODE>TerminalHost</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="address"><!-- --></A><H3> -address</H3> -<PRE> -protected java.lang.String <B>address</B></PRE> -<DL> -<DD>The host address to connect to. This is retrieved from the PARAM tag - "address".</DL> -<HR> - -<A NAME="port"><!-- --></A><H3> -port</H3> -<PRE> -protected int <B>port</B></PRE> -<DL> -<DD>The port number (default ist 23). This can be specified as the PARAM tag - "port".</DL> -<HR> - -<A NAME="proxy"><!-- --></A><H3> -proxy</H3> -<PRE> -protected java.lang.String <B>proxy</B></PRE> -<DL> -<DD>The proxy ip address. If this variable is set telnet will try to connect - to this address and then send a string to tell the relay where the - target host is.<DD><DL> -<DT><B>See Also: </B><DD><CODE>address</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="proxyport"><!-- --></A><H3> -proxyport</H3> -<PRE> -protected int <B>proxyport</B></PRE> -<DL> -<DD>The proxy port number. This is the port where the relay is expected to - listen for incoming connections.<DD><DL> -<DT><B>See Also: </B><DD><A HREF="proxy.html"><CODE>proxy</CODE></A>, -<CODE>port</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="emulation"><!-- --></A><H3> -emulation</H3> -<PRE> -protected java.lang.String <B>emulation</B></PRE> -<DL> -<DD>Emulation type (default is vt320). This can be specified as the PARAM - tag "emulation".<DD><DL> -<DT><B>See Also: </B><DD><CODE>term</CODE>, -<A HREF="display/Terminal.html"><CODE>Terminal</CODE></A>, -<A HREF="display/TerminalHost.html"><CODE>TerminalHost</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="modules"><!-- --></A><H3> -modules</H3> -<PRE> -protected java.util.Vector <B>modules</B></PRE> -<DL> -<DD>Dynamically loaded modules are stored here.</DL> -<HR> - -<A NAME="params"><!-- --></A><H3> -params</H3> -<PRE> -public java.util.Hashtable <B>params</B></PRE> -<DL> -<DD>This Hashtable contains information retrievable by getParameter() in case - the program is run as an application and the AppletStub is missing.</DL> - -<!-- ========= CONSTRUCTOR DETAIL ======== --> - -<A NAME="constructor_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Constructor Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="telnet()"><!-- --></A><H3> -telnet</H3> -<PRE> -public <B>telnet</B>()</PRE> -<DL> -</DL> - -<!-- ============ METHOD DETAIL ========== --> - -<A NAME="method_detail"><!-- --></A> -<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" ID="TableHeadingColor"> -<TD COLSPAN=1><FONT SIZE="+2"> -<B>Method Detail</B></FONT></TD> -</TR> -</TABLE> - -<A NAME="getAppletInfo()"><!-- --></A><H3> -getAppletInfo</H3> -<PRE> -public java.lang.String <B>getAppletInfo</B>()</PRE> -<DL> -<DD>Retrieve the current version of the applet.<DD><DL> -<DT><B>Returns:</B><DD>String a string with the version information.<DT><B>Overrides:</B><DD>getAppletInfo in class java.applet.Applet</DL> -</DD> -</DL> -<HR> - -<A NAME="getParameterInfo()"><!-- --></A><H3> -getParameterInfo</H3> -<PRE> -public java.lang.String[][] <B>getParameterInfo</B>()</PRE> -<DL> -<DD>Retrieve parameter tag information. This includes the tag information from - terminal and loaded modules.<DD><DL> -<DT><B>Returns:</B><DD>String an array of array of string with tag information<DT><B>Overrides:</B><DD>getParameterInfo in class java.applet.Applet<DT><B>See Also: </B><DD><CODE>Applet.getParameterInfo()</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="getParameter(java.lang.String)"><!-- --></A><H3> -getParameter</H3> -<PRE> -public java.lang.String <B>getParameter</B>(java.lang.String name)</PRE> -<DL> -<DD>We override the Applet method getParameter() to be able to handle - parameters even as application.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>name</CODE> - The name of the queried parameter.<DT><B>Returns:</B><DD>the value of the parameter<DT><B>Overrides:</B><DD>getParameter in class java.applet.Applet<DT><B>See Also: </B><DD><CODE>Applet.getParameter(java.lang.String)</CODE></DL> -</DD> -</DL> -<HR> - -<A NAME="main(java.lang.String[])"><!-- --></A><H3> -main</H3> -<PRE> -public static void <B>main</B>(java.lang.String[] args)</PRE> -<DL> -<DD>The main function is called on startup of the application.<DD><DL> -</DL> -</DD> -</DL> -<HR> - -<A NAME="init()"><!-- --></A><H3> -init</H3> -<PRE> -public void <B>init</B>()</PRE> -<DL> -<DD>Initialize applet. This method reads the PARAM tags "address", - "port" and "emulation". The emulation class is loaded dynamically. - It also loads modules given as parameter "module#<nr>".<DD><DL> -<DT><B>Overrides:</B><DD>init in class java.applet.Applet</DL> -</DD> -</DL> -<HR> - -<A NAME="start()"><!-- --></A><H3> -start</H3> -<PRE> -public void <B>start</B>()</PRE> -<DL> -<DD>Upon start of the applet try to create a new connection.<DD><DL> -<DT><B>Overrides:</B><DD>start in class java.applet.Applet</DL> -</DD> -</DL> -<HR> - -<A NAME="stop()"><!-- --></A><H3> -stop</H3> -<PRE> -public final void <B>stop</B>()</PRE> -<DL> -<DD>Disconnect when the applet is stopped.<DD><DL> -<DT><B>Overrides:</B><DD>stop in class java.applet.Applet</DL> -</DD> -</DL> -<HR> - -<A NAME="run()"><!-- --></A><H3> -run</H3> -<PRE> -public void <B>run</B>()</PRE> -<DL> -<DD>Try to read data from the sockets and put it on the terminal. - This is done until the thread dies or an error occurs.<DD><DL> -<DT><B>Specified by: </B><DD>run in interface java.lang.Runnable</DL> -</DD> -</DL> -<HR> - -<A NAME="connect()"><!-- --></A><H3> -connect</H3> -<PRE> -public boolean <B>connect</B>()</PRE> -<DL> -<DD>Connect to the specified host and port but don't break existing - connections. Connects to the host and port specified in the tags.<DD><DL> -<DT><B>Returns:</B><DD>false if connection was unsuccessful</DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String)"><!-- --></A><H3> -connect</H3> -<PRE> -public boolean <B>connect</B>(java.lang.String host)</PRE> -<DL> -<DD>Connect to the specified host and port but don't break existing - connections. Uses the port specified in the tags or 23.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>host</CODE> - destination host address</DL> -</DD> -</DL> -<HR> - -<A NAME="connect(java.lang.String, int)"><!-- --></A><H3> -connect</H3> -<PRE> -public boolean <B>connect</B>(java.lang.String host, - int prt)</PRE> -<DL> -<DD>Connect to the specified host and port but don't break existing - connections.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>host</CODE> - destination host address<DD><CODE>prt</CODE> - destination hosts port</DL> -</DD> -</DL> -<HR> - -<A NAME="disconnect()"><!-- --></A><H3> -disconnect</H3> -<PRE> -public boolean <B>disconnect</B>()</PRE> -<DL> -<DD>Disconnect from the remote host.<DD><DL> -<DT><B>Returns:</B><DD>false if there was a problem disconnecting.</DL> -</DD> -</DL> -<HR> - -<A NAME="send(java.lang.String)"><!-- --></A><H3> -send</H3> -<PRE> -public boolean <B>send</B>(java.lang.String str)</PRE> -<DL> -<DD>Send a String to the remote host. Implements display.TerminalHost<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="display/TerminalHost.html#send(java.lang.String)">send</A> in interface <A HREF="display/TerminalHost.html">TerminalHost</A><DT><B>Parameters:</B><DD><CODE>s</CODE> - String to be sent<DT><B>Returns:</B><DD>true if we are connected<DT><B>See Also: </B><DD><A HREF="display/TerminalHost.html"><CODE>TerminalHost</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="writeToSocket(java.lang.String)"><!-- --></A><H3> -writeToSocket</H3> -<PRE> -public boolean <B>writeToSocket</B>(java.lang.String str)</PRE> -<DL> -<DD>Send a String to the remote Host.<DD><DL> -<DT><B>Parameters:</B><DD><CODE>str</CODE> - String to be sent<DT><B>Returns:</B><DD>true if we are connected<DT><B>See Also: </B><DD><A HREF="modules/BSXModule.html"><CODE>BSXModule</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="writeToUser(java.lang.String)"><!-- --></A><H3> -writeToUser</H3> -<PRE> -public void <B>writeToUser</B>(java.lang.String str)</PRE> -<DL> -<DD>Send a String to the users terminal<DD><DL> -<DT><B>Parameters:</B><DD><CODE>str</CODE> - String to be displayed<DT><B>Returns:</B><DD>void<DT><B>See Also: </B><DD><A HREF="modules/BSXModule.html"><CODE>BSXModule</CODE></A></DL> -</DD> -</DL> -<HR> - -<A NAME="notifyStatus(java.util.Vector)"><!-- --></A><H3> -notifyStatus</H3> -<PRE> -public java.lang.Object <B>notifyStatus</B>(java.util.Vector status)</PRE> -<DL> -<DD>This method is called when telnet needs to be notified of status changes.<DD><DL> -<DT><B>Specified by: </B><DD><A HREF="socket/StatusPeer.html#notifyStatus(java.util.Vector)">notifyStatus</A> in interface <A HREF="socket/StatusPeer.html">StatusPeer</A><DT><B>Parameters:</B><DD><CODE>status</CODE> - Vector of status information.<DT><B>Returns:</B><DD>an object of the information requested.<DT><B>See Also: </B><DD><A HREF="socket/StatusPeer.html"><CODE>StatusPeer</CODE></A></DL> -</DD> -</DL> -<!-- ========= END OF CLASS DATA ========= --> -<HR> - -<!-- ========== START OF NAVBAR ========== --> -<A NAME="navbar_bottom"><!-- --></A> -<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> -<TR> -<TD COLSPAN=2 BGCOLOR="#EEEEFF" ID="NavBarCell1"> -<A NAME="navbar_bottom_firstrow"><!-- --></A> -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> - <TR ALIGN="center" VALIGN="top"> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-summary.html"><FONT ID="NavBarFont1"><B>Overview</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="package-summary.html"><FONT ID="NavBarFont1"><B>Package</B></FONT></A> </TD> - <TD BGCOLOR="#FFFFFF" ID="NavBarCell1Rev"> <FONT ID="NavBarFont1Rev"><B>Class</B></FONT> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A> </TD> - <TD BGCOLOR="#EEEEFF" ID="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A> </TD> - </TR> -</TABLE> -</TD> -<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> -</EM> -</TD> -</TR> - -<TR> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="proxy.html"><B>PREV CLASS</B></A> - NEXT CLASS</FONT></TD> -<TD BGCOLOR="white" ID="NavBarCell2"><FONT SIZE="-2"> - <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> - <A HREF="telnet.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD> -</TR> -<TR> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> - SUMMARY: INNER | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> -<TD VALIGN="top" ID="NavBarCell3"><FONT SIZE="-2"> -DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> -</TR> -</TABLE> -<!-- =========== END OF NAVBAR =========== --> - -<HR> - -</BODY> -</HTML> diff --git a/web/root/telnet/Documentation/images/bin.gif b/web/root/telnet/Documentation/images/bin.gif deleted file mode 100644 index 57f865726866125d4318578574a52ebd455943f6..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/bin.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/border.gif b/web/root/telnet/Documentation/images/border.gif deleted file mode 100644 index af596665f7e367c40df12ce77197b5cccb367b76..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/border.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/check.gif b/web/root/telnet/Documentation/images/check.gif deleted file mode 100644 index 6dca2af7fd56c87de9e9cfcf0dd866fe0506f892..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/check.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/checkS.gif b/web/root/telnet/Documentation/images/checkS.gif deleted file mode 100644 index c86ec6c9b9744567cf8d63d73d8263497e975abc..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/checkS.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/doc.gif b/web/root/telnet/Documentation/images/doc.gif deleted file mode 100644 index 238fdb14e1c5956f0d2a8adad207147bed7509f1..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/doc.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/flash.gif b/web/root/telnet/Documentation/images/flash.gif deleted file mode 100644 index 1942939e04fa4afb5e6b9298d323f0b74fc5e7a9..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/flash.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/left.gif b/web/root/telnet/Documentation/images/left.gif deleted file mode 100644 index ba9bb0addc873a50162a66f16f964d7b94b36177..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/left.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/mail.gif b/web/root/telnet/Documentation/images/mail.gif deleted file mode 100644 index 864ed206d575baa9e780086cf7f35ecd69d00624..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/mail.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/star.gif b/web/root/telnet/Documentation/images/star.gif deleted file mode 100644 index b079be2c501f965e2afd106c2d979c43938a6616..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/star.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/testit.gif b/web/root/telnet/Documentation/images/testit.gif deleted file mode 100644 index 51474b21d704de2a8421db05df59a94eb48a36f8..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/testit.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/images/user.gif b/web/root/telnet/Documentation/images/user.gif deleted file mode 100644 index 12608388b86a9fdeaa4d92eb5b40606483f3604c..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/Documentation/images/user.gif and /dev/null differ diff --git a/web/root/telnet/Documentation/index.html b/web/root/telnet/Documentation/index.html deleted file mode 100644 index e2c861089f5655e3e6f6c6d3699048b2a472789a..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/index.html +++ /dev/null @@ -1,696 +0,0 @@ -<!doctype HTML public "-//W30//DTD W3 HTML 3.0//EN"> -<HTML> - <HEAD><TITLE>The Java(tm) Telnet Applet: Documentation</TITLE></HEAD> - <BODY BGCOLOR="#ffffff"> - <A NAME="TOP"></A> - <H1>The <A HREF="http://java.sun.com/">Java<SUP>(tm)</SUP></A> - Telnet Applet: Documentation</H1> - © 1996-98 <A HREF="mailto:leo@mud.de">Matthias L. Jugel</A>, - <A HREF="mailto:marcus@mud.de">Marcus Meißner</A> - <HR> - <P> - The package contains several parts of which the most important one is the - <B>Telnet Applet/Application</B>. Select from the list below what you - are interested in. If you only want to use the applet choose <A - HREF="#SetupTelnet">Telnet</A> from <B>Setup</B> and if you want to use the - <A HREF="Source/packages.html">packages</A> in your own programming, select the - appropriate from <B>Source Code</B>. - <H3 ALIGN=CENTER><A HREF="#Readme">READ THIS FIRST</A></H3> - <H3 ALIGN=CENTER><A HREF="#SetupDoc">Setup</A></H3> - <P ALIGN=CENTER> - <B>[ - <A HREF="#SetupTelnet">Telnet</A> | - <A HREF="#SetupTerminal">Terminal Emulation</A> | - <A HREF="#SetupModules">Modules</A> - ]<BR>[ - <A HREF="#SetupAppWrapper">Applet Wrapper</A> | - <A HREF="#SetupProxy">Proxy Server</A> - ]</B> - <H3 ALIGN=CENTER><A HREF="#SourceDoc">Source Code</A></H3> - <P ALIGN=CENTER> - <B>[ - <A HREF="Source/telnet.html">Telnet</A> | - <A HREF="#SourceTerminal">Terminal Emulation</A> | - <A HREF="#SourceModules">Modules</A> - ]<BR>[ - <A HREF="Source/appWrapper.html">Applet Wrapper</A> | - <A HREF="Source/proxy.html">Proxy Server</A> - ]<BR>[ - <A HREF="Source/packages.html">Packages</A> | - <A HREF="Source/AllNames.html">Field and Method Index</A> | - <A HREF="Source/tree.html">Class Tree</A> - ]</B> - <P> - <A HREF="../index.html"> - <IMG SRC="images/left.gif" BORDER=0 ALT="[BACK]"></A> - <B>Get the <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet">latest - version</A> here!</B> - <HR> - - <A NAME="Readme"></A> - <H1>READ THIS FIRST</H1> - - We found that some people have no knowlegde whatsoever of java and its - restrictions. We have compiled a few questions and answers here as well - as some reasons why you should or should not use - <B>The Java<SUP>(tm)</SUP> Telnet Applet</B>: - - <DL> - <DT><B>Some web page told me I need telnet, is this it?</B> - <DD>Yes and No! The Applet is a fully featured Telnet and Terminal - emulator, but usually you're better off using the program that - comes with your system. Most of the UNIX based systems have very - good terminal emulators (xterm) and alway have a telnet - application. Windows 95 comes with a telnet if you have the network - stuff installed it's there: c:\windows\telnet.exe. It should be - sufficient. If you want better terminal emulation and <I>colours</I> - the better choice is <B>The Java<SUP>(tm)</SUP> Telnet Applet</B>! - <P> - <DT><B>I cannot connect to some.where.com? It only says - "Trying some.where.com ..."</B> - <DD>A Java applet is restricted in several ways. One of the restrictions - is that it may <I>only</I> connect to the web server where it was - downloaded from! So if you put the applet on <I>www.where.com</I> but - set the "address" field to <I>some.where.com</I> you - won't get a connection. Read about our - <A HREF="#SetupProxy">relayd daemons</A>! - <P> - <DT><B>But I loaded the HTML file from my harddisk and it still does - not work!</B> - <DD>Netscape and Internet Explorer do not accept your hard disk as - secure space. So they will prevent the applet from accessing any - resource, such as the network. You may overcome that by adding the - directory where the applet is stored to your "CLASSPATH" - environment variable <I>before</I> running the browser. - <P> - </DL> - <HR> - <A NAME="SetupDoc"></A> - <H1>Setup Documentation</H1> - <A NAME="SetupTelnet"></A> - <H2>How to setup the Telnet Applet</H2> - Make sure, you got the - <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet">latest version</A> - of the Java<SUP>(tm)</SUP> Telnet Applet. Refer to the - <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet/index.download.html"> - download page</A> on how to get it and how to - extract the files from the archive. After successfully extracting the complete - package you should have a directory <B>Telnet/</B> containing <B>*.html</B>, - <B>*.java</B> and <B>*.class</B> files as well as the directores - <B>Documentation/</B>, <B>display/</B>, <B>modules/</B>, <B>socket/</B> and - <B>tools</B>.<P> - To install the applet on your web page you need as least the following files - and directories. Make sure that all files and directories are <B>readable - by other users</B>! - <PRE> - index.test.html - telnet.class - appWrapper.class - display/ - display/SoftFont.class - display/CharDisplay.class - display/Terminal.class - display/TerminalHost.class - display/vt320.class - socket/ - socket/TelnetIO.class - socket/StatusPeer.class - modules/ - modules/Module.class - modules/Script.class - modules/ButtonBar.class - modules/MudConnector.class - </PRE> - Now edit <B>index.test.html</B> to adapt it to your needs or look at the - example below! The file is documented and if you have questions about - the <I>Modules</I> refer to the - <A HREF="#SetupModules">Module Documentation</A> or look at the <A - HREF="Source/Package-modules.html">Source Code</A>. You will find, that not - <B>telnet.class</B> is loaded as applet, but <B>appWrapper.class</B> instead. - This is necessary to enable the <B>detach</B> feature! - <P> - <DL> - <DT><B><I>Important Note:</I></B> - <DD>We would appreciate to see <B>credits</B> on a page using the applet - which includes a link to the <I> - <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet">applets home - page</A></I> and names of the <I>authors</I> as mentioned on - <A HREF="#TOP">top</A> of this page. You may simply use our - <A HREF="../index.test.html">test page</A> and edit it to your needs.<BR> - In response we will include a link to your page on our - <I><A HREF="user.html">user page</A></I>, if you like. - </DL> - <P> - The telnet applet can be customized using the following parameters: - <PRE> - <PARAM NAME=address VALUE="tanis.first.gmd.de"> - <PARAM NAME=port VALUE="23"> - <PARAM NAME=emulation VALUE="vt320"> - - <PARAM NAME=proxy VALUE="www.first.gmd.de"> - <PARAM NAME=proxyport VALUE="31415"> - </PRE> - The <B><I>proxy</I></B> and <B><I>proxyport</I></B> parameters may be left - out. They are needed if your target host is NOT the same as your web server - and you are using the <A HREF="#mrelayd">relay daemon</A>. - <P> - <A NAME="Example_1"></A> - <H3>Example:</H3> - (all possible parameters) - <PRE> - <APPLET CODE="<A HREF="Source/appWrapper.html">appWrapper.class</A>" WIDTH=600 HEIGHT=480> - - <!-- appWrapper parameters --> - <PARAM NAME="applet" VALUE="<A HREF="Source/telnet.html">telnet</A>"> - - <!-- optional (WIDTH and HEIGHT should be changed!) --> - <PARAM NAME="startButton" VALUE="Connect to www.first.gmd.de!"> - <PARAM NAME="stopButton" VALUE="Shutdown telnet!"> - <PARAM NAME="frameTitle" VALUE="The Java Telnet Applet: WWW"> - - <!-- applet parameters: address and port and emulation --> - <PARAM NAME="address" VALUE="www.first.gmd.de"> - <PARAM NAME="port" VALUE="23"> - <PARAM NAME="emulation" VALUE="vt320"> - - <!-- terminal emulation parameters (optional)--> - <PARAM NAME="VTscrollbar" VALUE="true"> - <PARAM NAME="VTresize" VALUE="font"> - <PARAM NAME="VTfont" VALUE="Courier"> - <PARAM NAME="VTfontsize" VALUE="13"> - <PARAM NAME="VTid" VALUE="vt220"> - <PARAM NAME="VTcharset" VALUE="ibm"> - - <!-- module parameters: #1 is a buttonbar (optional) --> - <PARAM NAME="module#1" VALUE="<A HREF="#ButtonBar">ButtonBar</A>@North"> - <PARAM NAME="1#Button" VALUE="connect|\$connect()"> - <PARAM NAME="2#Button" VALUE="disconnect|\$disconnect()"> - <PARAM NAME="3#Button" VALUE="Detach/Delete Window|\$detach()"> - <PARAM NAME="4#Button" VALUE="Send:|\@send@\r\n"> - <PARAM NAME="5#Input" VALUE="send#10|who"> - - <!-- module parameter: #2 is a scripting module (optional) --> - <PARAM NAME="module#2" VALUE="<A HREF="#Script">Script</A>"> - <PARAM NAME="script" VALUE="login:|leo"> - - <!-- make sure, non-java-capable browser get a message: --> - <B> - Your Browser seems to have no <A HREF="http://java.sun.com/">Java</A> - support. Please get a new browser or enable Java to see this applet! - </B> - </APPLET> - </PRE> - <P> - <HR> - <A NAME="SetupTerminal"></A> - <H2>Setting up the Terminal Emulation</H2> - The Terminal Emulation is a very important part of the Telnet Applet, because - it enables you to use programs that make use of certain features of hardware - terminals like <B>VT100</B> or <B>ANSI</B>. Supplied with the package is an - almost <B>VT320 compliant</B> terminal emulation, that should include the two - mentioned earlier. This means that the applet can do colors, even if the - original <B>VT320</B> terminal cannot!<P> - The applet supports the <B><I>special graphical character set</I></B> of VT - terminals. The new implementation supports all graphical characters with a - small drawback. The more graphical characters on the screen the slower is the - display. We will remove the current implementation when full UNICODE support - is available from all browsers (full JDK 1.2 compatibility). - <P> - To configure the terminal emulation look at the list of parameters below:<BR> - <I>Note:</I> Default values are typeset in <I>italics</I> and other possible - values in <B>bold</B>. - <DL> - <DT><TT><B><PARAM NAME="localecho" VALUE="<I>auto</I>"></B></TT> - <DD>Sets the mode the local echo should be handled. If using auto, - or if this parameter is not present, the applet autodetects localecho - mode using telnet option negotiation. If set to <I>no</I>, nothing - will be echoed, ever. Any other value enables every character to be - echoed. - <DT><TT><B><PARAM NAME="VTcolumns" VALUE="<I>80</I>"></B></TT> - <DD>Sets the columns of the terminal initially. If the parameter - VTresize is set to <B>screen</B> this may change, else it is fixed. - <DT><B><TT><PARAM NAME="VTrows" VALUE="<I>24</I>"></TT></B> - <DD>Sets the rows of the terminal initially. If the parameter - value of VTresize <B>screen</B> this may change! - <DT><B><TT><PARAM NAME="VTfont" VALUE="<I>Courier</I>"></TT></B> - <DD>Sets the font to be used for the terminal. It is recommended to - use <I>Courier</I> or at least a fixed width font. - <DT><B><TT><PARAM NAME="VTfontsize" VALUE="<I>14</I>"></TT></B> - <DD>Sets the font size for the terminal. If the parameter - value of VTresize is set to <B>font</B> this may change! - <DT><B><TT><PARAM NAME="VTresize" VALUE="<I>font</I>"></TT></B> - <DD>This parameter determines what the terminal should do if the window - is resized. The default setting <I><B>font</B></I> will result in - resizing the font until is matches the window best. Other possible - values are <B>none</B> or <B>screen</B>. <B>none</B> will let nothing - happen and <B>screen</B> will let the display try to change the - amount of rows and columns to match the window best. - <DT><B><TT><PARAM NAME="VTscrollbar" VALUE="<I>false</I>"></TT></B> - <DD>Setting this parameter to <B>true</B> will add a scrollbar west to - the terminal. Other possible values include <B>left</B> to put the - scrollbar on the left side of the terminal and <B>right</B> to put it - explicitely to the right side. - <DT><B><TT><PARAM NAME="VTid" VALUE="<I>vt320</I>"></TT></B> - <DD>This parameter will override the terminal id <I>vt320</I>. It may - be used to determine special terminal abilities of VT Terminals. - <DT><B><TT><PARAM NAME="VTbuffer" VALUE="<I>xx</I>"></TT></B> - <DD>Initially this parameter is the same as the VTrows parameter. It - cannot be less than the amount of rows on the display. It determines - the available scrollback buffer. - <DT><B><TT><PARAM NAME="VTcharset" VALUE="<I>none</I>"></TT></B> - <DD>Setting this parameter to <B>ibm</B> will enable mapping of ibm - characters (as used in PC BBS systems) to UNICODE characters. Note - that those special characters probably won't show on UNIX systems - due to lack in X11 UNICODE support. - <DT><B><TT><PARAM NAME="VTvms" VALUE="<I>false</I>"></TT></B> - <DD>Setting this parameter to <B>true</B> will change the Backspace key - into a delete key, cause the numeric keypad keys to emit VT100 - codes when Ctrl is pressed, and make other VMS-important keyboard - definitions. - <DT><B><TT><PARAM NAME="F<I>nr</I>" VALUE="<I>string</I>"></TT></B> - <DD>Function keys from <I>F1</I> to <I>F20</I> are programmable. You can - install any possible string including special characters, such as - <TABLE BORDER> - <TR><TD><TT>\e</TT></TD><TD>Escape</TD><TD></TD> - <TD><TT>\b</TT></TD><TD>Backspace</TD><TD></TD> - <TD><TT>\n</TT></TD><TD>Newline</TD><TD></TD> - <TD><TT>\r</TT></TD><TD>Return</TD> - <TD><TT>\xxxx</TT></TD><TD>Character xxxx (decimal)</TD> - </TABLE> - </DL> - <P> - Please look at the <A HREF="#Example_1">example above</A>. - <P> - <HR> - <A NAME="SetupModules"></A> - <H2>Setting up Modules</H2> - Another feature of the Java<SUP>(tm)</SUP> Telnet Applet is the ability to - dynamically load <B>modules</B>. A module is a java class that is loaded - after the applet has been initialized and may be used to <I>enhance</I> the - user interface or to background work in some way.<P> - To load a module a special parameter has to be added to the applet PARAM tags: - <P> - <TT><B><PARAM NAME=module#<I>number</I> VALUE="<I>modulename</I>@<I>direction</I>"></B> - </TT> - <UL> - <LI><B><I>number</I></B> is a sequence number, used by the applet to - determine the modules. Numbers must be adjacent or modules may not - be loaded. - <LI><B><I>modulename</I></B> is the name of the modules to be - loaded. Modules already in the package are described below. - <LI><B>@<I>direction</I></B> is the position of the applet in relation to - the window. Possible values are: <B>North, South, East, West</B>. The - module will then be placed accordingly. It is <I>not</I> possible to - place two modules at the same position! <I>The positional parameter may - be left out and the module will then be placed <B>North</B></I>. - </UL> - <P> - - At the moment the package features three modules: - <DL> - <DT><A HREF="#ButtonBar"><B>ButtonBar</B></A> - <DD>The ButtonBar is a modules to enhance the user interface. Using - PARAM tags <B>buttons</B> and <B>input fields</B> can be added to - send text to the remote host or to <B>detach</B> the applet.<P> - <DT><A HREF="#Script"><B>Script</B></A> - <DD>Sometimes it is useful to have simple script abilities. This module - <B>executes a script</B> based on text received from the remote host. - <P> - <DT><A HREF="#MudConnector"><B>MudConnector</B></A> - <DD>This module is a special program for the <A - HREF="http://www.mudconnect.com">Mud Connector</A> by Andrew Cowan. It - loads a list of muds and displays information like host and port. - </DL> - <P> - <A NAME="ButtonBar"></A> - <H3>The ButtonBar</H3> - The ButtonBar may be used to add <A HREF="#buttons">buttons</A> to the applet - that execute functions or simply send a specified text to the remote host. - In addition it is possible to specify <A HREF="#fields">input - fields</A> as external input means.<P> - To load the module include the following tag into the <B>.html</B> file - (example):<P> - <TT><B><PARAM NAME=module#<I>1</I> VALUE="<I>ButtonBar</I>"></B> - </TT><P> - Below is a description of possible PARAM tags and a description of supported - functions: - <DL> - <DT><A NAME="buttons"></A><B>Buttons:</B> - <DD><TT><PARAM NAME=<B><I>number</I></B>#Button VALUE="<B><I>buttontext</I></B>|<B><I>buttonaction</I></B>"></TT> - <DD><B><I>number</I></B> is the sequence number and determines the place - of the button on the row. - <P> - <DD><B><I>buttontext</I></B> is a string displayed on the button. - <P> - <DD><A NAME="buttonaction"><B><I>buttonaction</I></B></A> may be one - of the following functions or strings<BR> - <FONT SIZE=-1>(<I>Note:</I> the backslash character - in front of the dollar sign is mandatory!)</FONT> - <UL> - <LI><TT><I>simple text</I></TT> - to be sent to the remote host. Newline and/or carriage return - characters may be added in C syntax <B>\n</B> and <B>\r</B>. - To support unimplemented function keys the <B>\e</B> escape - character may be useful. The <B>\b</B> backspace character is - also supported. - The text may contain <A HREF="#fieldreference"><B><I>field - reference(s)</I></B></A>.<BR> - <P> - <LI><TT>\$connect(<B><I>host</I></B>[,<B><I>port</I></B>])</TT> - tries to initiate a connection to the <B><I>host</I></B> - at the <B><I>port</I></B>, if given. The standard port is - 23. <B><I>host</I></B> and <B><I>port</I></B> may be hostname - and number or <A HREF="#fieldreference"><B><I>field - reference(s)</I></B></A>. If a connection already exists - nothing will happen.<BR> - <FONT SIZE=-1>(<I>Note:</I> It is not allowed to have - spaces anywhere inside the parenthesis!)</FONT> - <P> - <LI><TT>\$disconnect()</TT> - terminates the current connection, but if there was no - connection nothing will happen. - <P> - <LI><A NAME="detach"><TT>\$detach()</TT></A> - detaches the applet from the web browser window and - creates a new frame externally. This may be used to allow - users to use the applet while browsing the web with the - same browser window.<BR> - <FONT SIZE=-1>(<I>Note:</I> You need to load the applet via the - <A HREF="#SetupAppWrapper">Applet Wrapper</A> or - it will not work properly!)</FONT> - </UL> - <P> - <DD><A NAME="Example_2"><B>Examples:</B></A><BR> - <FONT SIZE=-1>(<I>Note:</I> It makes sense if you look at the - examples for <A HREF="#Example_3">input fields</A> below.)</FONT> - <PRE> - <PARAM NAME=1#Button VALUE="HELP!|help\r\n"> - <PARAM NAME=2#Button VALUE="HELP:|help \@help@\r\n"> - <PARAM NAME=4#Button VALUE="simple|\$connect(localhost)"> - <PARAM NAME=5#Button VALUE="complete|\$connect(www,4711)"> - <PARAM NAME=6#Button VALUE="connect|\$connect(\@address@)"> - <PARAM NAME=8#Button VALUE="connect to port|\$connect(\@address@,\@port@)"> - <PARAM NAME=10#Button VALUE="window|\$detach()"> - </PRE> - <P> - <A NAME="fields"></A> - <DT><B>Input fields</B> - <DD><TT><PARAM NAME=<B><I>number</I></B>#Input VALUE="<B><I>fieldname</I></B>[#<I><B>length</B></I>]|<B><I>initial text</I></B>[|<B><I>action</I></B>]"></TT> - <DD><B><I>number</I></B> is the sequence number and determines the place - of the field on the row. - <P> - <DD><A NAME="fieldreference"><B><I>fieldname</I></B></A> is a - symbolic name to reference the input field. A reference may be used in - <A HREF="#buttonaction"><B><I>button actions</I></B></A> and - is constructed as follows: - <TT>\@<B><I>fieldname</I></B>@</TT> - The <B>\@fieldname@</B> macro will be replaced by the string entered in - the text field. - <P> - <DD><B><I>length</I></B> is the length of the input field in numbers of - characters. - <P> - <DD><B><I>initial text</I></B> is the text to be placed into the input - field on startup - <P> - <DD><B><I>action</I></B> may be used similar to a - <A HREF="#buttonaction"><B><I>button action</I></B></A>. This action - will be used if the users presses Return in the inputfield. Leave - empty if you only want to use a button to send the text! - <P> - <DD><A NAME="Example_3"><B>Examples:</B></A><BR> - <FONT SIZE=-1>(<I>Note:</I> It makes sense if you look at the - examples for <A HREF="#Example_2">buttons</A> before.)</FONT> - <PRE> - <PARAM NAME=3#Input VALUE="help#10|"> - <PARAM NAME=7#Input VALUE="address|www.first.gmd.de"> - <PARAM NAME=9#Input VALUE="port#5|4711"> - </PRE> - <P> - </DL> - <A NAME="Script"></A> - <H3>The Script Module</H3> - The script module gives a very simple implementation of an <I>input - triggered</I> script executor. This means it sends text to the remote host - when the received text matches a <I>pattern</I> that can be programmed. It - executes each <I>pair of pattern and text</I> only once and stops working - after all patterns have been matched. It will start working again upon a - new connection. - <P> - To load the module include the following tag into the <B>.html</B> file - (example):<P> - <TT><B><PARAM NAME=module#<I>1</I> VALUE="<I>Script</I>"></B> - </TT><P> - Below is a description of possible PARAM tags and a description of script: - <DL> - <DT><B>Scripts:</B> - <DD><TT><PARAM NAME=script VALUE="<B><I>pattern</I></B>|<B><I>text</I></B>|<B><I>...</I></B>"></TT> - <DD>A script contains of pairs of <I>pattern</I> and <I>text</I> strings. - If the pattern is matched against the output from the remote host, - the corresponding text will be sent. Each pattern will match only - <B>once</B> per connected session. - Thus it is possible to program an autologin as follows:<BR> - <TT><B>"login:|leo|Password:|mypassword|leo@www|ls"</B></TT> - Newlines will be added automatically to the string sent! At the - moment the order of the pattern and text pairs is <I>not</I> relevant. - <P> - It is possible to prompt the user for input if a match occurs. If the - corresponding <I>text</I> is a string enclosed in braces ([] or {}) a - dialog window is opened with <I>text</I> as prompt. A special case - is an empty prompt in which case the <I>pattern</I> will be shown as - prompt. "[Your name:]" would open a dialog window with the - text "Your name" as prompt. Curly braces have a special - meaning; any user input will be shown as "*" which makes - it possible to program password prompts. Example: - "{Your password:}".<P> - A special match like: "login:|[]" can be used to open a - dialog and display "login:" as prompt. This works for - "{}" as well. - </DL> - <P> - <A NAME="MudConnector"></A> - <H3>MudConnector</H3> - This module is a special edition for the <A - HREF="http://www.mudconnect.com/">Mud Connector</A>. It features a list of - MUDs and a few buttons to connect, disconnect and get infos about the MUDs. - A very nice example for a specialized module. - To load the module include the following tag into the <B>.html</B> file - (example):<P> - <TT><B><PARAM NAME=module#<I>1</I> VALUE="<I>MudConnector</I>"></B> - </TT> - The MudConnector expects the following PARAM tags: - <DL> - <DT><B>Mudlist URL:</B> - <DD><TT><PARAM NAME=mudlist VALUE="<B><I>URL</I></B>"></TT> - <DD>The URL should be a file containing line by line the <I>MUD name</I>, the - <I>Mud address</I> and the <I>MUD port</I>, separated by tabulators. - The first line in the file should be the number of MUDs in the file. - <P> - <DD><B>Example:</B><BR> - <TT><PARAM NAME=mudlist VALUE="http://www.mud.de/~leo/mudlist.data"></TT> - <P> - </DL> - <P> - <HR> - <A NAME="SetupAppWrapper"></A> - <H2>The Applet Wrapper Setup</H2> - The applet wrapper is an applet that does nothing else than loading the, for - example, telnet applet. To understand why this is necessary you have to look - at the experiences we have made.<P> - Simply using the telnet applet in the following manner:<P> - <TT><APPLET CODE="telnet.class" WIDTH=600 HEIGHT=480></TT> - and using the <A HREF="#detach">detach</A> function stops the applet after - you have detached the applet and want to browse the web again. It seems that - the Web browser stops all threads connected to the applet if you leave the - page where the applet is located and thus it doesn't even update its display - anymore.<P> - We have found out that this is not true for applets loaded within the applet - on the page (e.g. the appWrapper). Look at the following description on how - to setup the appWrapper. It will probably work with any given applet out on - the web! - <P> - <PRE> - <APPLET CODE="appWrapper.class" WIDTH=600 HEIGHT=480> - <PARAM NAME=applet VALUE="<I>telnet</I>> - - <!-- optional (WIDTH and HEIGHT should be changed!) --> - <PARAM NAME=startButton VALUE="<I>text</I>"> - <PARAM NAME=stopButton VALUE="<I>text</I>"> - <PARAM NAME=frameTitle VALUE="<I>text</I>"> - <!-- all other telnet applet parameters go here --> - </APPLET> - </PRE> - The <B>appWrapper</B> knows only about the PARAM tag <B>applet</B>, which is - the applet to be loaded. In this case it must be in the same directory as the - <B>appWrapper.class</B>. Refer to the <A HREF="#Example_1">telnet example</A> - above for the telnet parameters.<P> - If a <B>startButton</B> is specified the applet won't start automatically, - but instead the appWrapper will display a button with the <I>text</I> on - it. The <B>stopButton</B> defines the text that appears on the button when - the applet is loaded and running and <B>frameTitle</B> specifies the frame - title text of the window the applet runs in. - <P> - <HR> - <A NAME="SetupProxy"></A> - <H2>Setting up the proxy server</H2> - There are two proxy servers provided with the telnet applet. The first one - is written in java and does support connections to <B>one</B> target host only - and the second one is written in C and supports different targets (called - relay daemon).<P> - <H4 ALIGN=CENTER> - [<A HREF="#javaproxy">Java Proxy</A> | - <A HREF="#relayd">Simple Relay Daemon</A> | - <A HREF="#mrelayd">Relay Daemon</A>] - </H4> - <P> - <A NAME="javaproxy"></A> - <H3>The Java Proxy Server</H3> - The proxy server is a small java program - to overcome the security restrictions of java capable web browsers.<P> - The proxy is used to redirect a connection to a given - host. Usually an applet can only connect to the web server it has - been loaded from. Installing the proxy on your web server allows the - applet to connect to a host you would like to connect to.<P> - <DL> - <DT><B>How to run the proxy application?</B> - <DD>To run the proxy you require the following: - <OL> - <LI>A java interpreter (usually included in the JDK) - <LI>A compiled version of the proxy - (<A HREF="tools/proxy.class">proxy.class</A>) - </OL><P> - On the <I>WWW-Server command line</I> run the proxy server as follows: - <TT>java proxy 9999 remotehostname 23 - </TT> - This lets the proxy listen on port 9999 and it redirects - all connections to the host "remotehostname" at port 23. You - can leave the port parameter out if it is 23 (telnet port). - <P> - The proxy should start with something like the output below: - <TT> - proxy: destination host is remotehostname at port 23 - proxy: listening on port 9999 - </TT> - Upon successful connection the output should produce something - like this: - <TT> - proxy: accepted connection from augra.first.gmd.de - proxy: connecting www.first.gmd.de <-> remotehostname - </TT> - <DT><B>How to shut down the proxy?</B> - <DD>To shut down the proxy press ^C (Ctrl+C or Strg+C on a german - keyboard) if you have startet it normally. More advanced users - will run the proxy like - <TT>java proxy 9999 remotehost 23 >& errorlog &</TT> - to put it into the background. The "errorlog" file should then - contain any messages. You can kill that process by looking for - the process id (ps | grep proxy) and issuing the kill - <processid> command (this applies to UNIX only). - <P> - <DT><B>I get an error message like "class proxy not found"!</B> - <DD>You may have to set the CLASSPATH environment variable to - point to the current directory or to the directory where - proxy.class is located. - </DL> - <P> - <A NAME="relayd"></A> - <H3>The Simple Relay Daemon</H3> - The <I>simple</I> relay daemon works just like the - <A HREF="#javaproxy">proxy</A> above, but is a C version. It allows - connections only to a specified host and port which is preferrable for - security reasons. You can run the program (after compiling it) with the - following command line: - <TT> - relayd serverport targethost targetport - or just - relayd serverport targethost - </TT> - It will then listen on the <I>serverport</I> of the machine you started it and - connect to the <I>targethost</I>. The standard <I>targetport</I> is 23. - <P> - <A NAME="mrelayd"></A> - <H3>The Relay Daemon</H3> - The relay daemon is a program written by Marcus Meißner to support - different target hosts. It relays the connections from the applet to a - host that must be given to the relay daemon after connecting.<P> - The daemon expects a string - <TT>relay <I>address port</I></TT> - It must be run on the web server of the applet. - The relay daemon is not included in compiled form, because we would have to - support a number of platforms. However, you can write to us if you need a - special compiled version for your hardware platform.<P> - You should include the following tags to tell <A - HREF="#SetupTelnet">telnet</A> that it is supposed to use the prox server - <PRE> - <PARAM NAME=proxy VALUE="www.first.gmd.de"> - <PARAM NAME=proxyport VALUE="31415"> - </PRE> - <HR> - <A NAME="SourceDoc"></A> - <H1>Source Code Documentation</H1> - The Source Code of <B>The Java<SUP>(tm)</SUP> Telnet Applet</B> is available - under the terms of the <A HREF="http://www.fsf.org/copyleft/gpl.html"><B>GNU - General Public License</B></A> as documented in the file <A - HREF="../COPYING">COPYING</A>. In case you would like to use the packages as - libraries please apply the <A HREF="http://www.fsf.org/copyleft/lgpl.html"><B> - GNU Library General Public License</B></A> as documented in the file <A - HREF="../COPYING.LIB">COPYING.LIB</A>.<P> - Select from the structure below, what you would like to see. Each file - contains a <B>Version:</B> field determining its current status and version. - If you are not sure to have the most current version, please - <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet/index.download.html"> - look here</A>.<P> - If you are unsure, whether you've got the newest version, compare your - copy of the file <A HREF="../REVISION"><B>REVISION</B></A> and this - <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet/REVISION"> - <B>REVISION</B></A>, which is a direct link to the - <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet/">home page</A>. - The latest changes are documented in the file - <A HREF="../CHANGES"><B>CHANGES</B></A>. - <UL> - <LI><A HREF="Source/appWrapper.html">appWrapper.java</A> - <LI><A HREF="Source/telnet.html">telnet.java</A> - <UL> - <LI><A HREF="Source/Package-socket.html">Socket Package</A> - <UL> - <LI><A HREF="Source/socket.TelnetIO.html">socket/TelnetIO.java</A> - <LI><A HREF="Source/socket.StatusPeer.html">socket/StatusPeer.java</A> - </UL> - <LI><A NAME="SourceTerminal"></A> - <A HREF="Source/Package-display.html">Display Package</A> - <UL> - <LI><A HREF="Source/display.CharDisplay.html">display/CharDisplay.java</A> - <LI><A HREF="Source/display.SoftFont.html">display/SoftFont.java</A> - <LI><A HREF="Source/display.Terminal.html">display/Terminal.java</A> - <LI><A HREF="Source/display.TerminalHost.html">display/TerminalHost.java</A> - <LI><A HREF="Source/display.vt320.html">display/vt320.java</A> - </UL> - <LI><A NAME="SourceModules"></A> - <A HREF="Source/Package-modules.html">Module Package</A> - <UL> - <LI><A HREF="Source/modules.Module.html">modules/Module.java</A> - <LI><A HREF="Source/modules.ButtonBar.html">modules/ButtonBar.java</A> - <LI><A HREF="Source/modules.Script.html">modules/Script.java</A> - <LI><A HREF="Source/modules.MudConnector.html">modules/MudConnector.java</A> - </UL> - </UL> - <LI><A HREF="Source/IOtest.html">IOtest.java</A> - <LI><A HREF="Source/CharDisplayTest.html">CharDisplayTest.html</A> - <LI>Tools - <UL> - <LI><A HREF="Source/proxy.html">tools/proxy</A> - <LI><A HREF="Source/redirector.html">tools/redirector</A> (proxy.java) - <LI><A HREF="../tools/relayd.c">tools/relayd.c</A> (simple proxy) - <LI><A HREF="../tools/mrelayd.c">tools/mrelayd.c</A> (enhanced proxy) - </UL> - </UL> - <HR> - <A HREF="../index.html"> - <IMG ALIGN=LEFT SRC="images/left.gif" BORDER=0 ALT="[BACK]"></A> - <B>Get the <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet">latest - version</A> here!</B> <BR> - <!-- html-ts start --> - Last modified: Wed Jul 23 14:55:15 1997 by Matthias L. Jugel - <!-- html-ts end --> - </BODY> -</HTML> diff --git a/web/root/telnet/Documentation/user.html b/web/root/telnet/Documentation/user.html deleted file mode 100644 index 404b750814c2ce242b5f838a4ef992baed938296..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/user.html +++ /dev/null @@ -1,288 +0,0 @@ -<!doctype HTML public "-//W30//DTD W3 HTML 3.0//EN"> -<HTML> - <HEAD><TITLE>The Java(tm) Telnet Applet: User Pages</TITLE></HEAD> - <BODY BGCOLOR="#ffffff"> - <H1>The <A HREF="http://java.sun.com/">Java<SUP>(tm)</SUP></A> - Telnet Applet: User Pages</H1> - <P ALIGN=LEFT> - © 1996-98 <A HREF="mailto:leo@first.gmd.de">Matthias L. - Jugel</A>, <A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de"> - Marcus Meißner</A> - <HR> - <P> - To show you that this applet is actually <I>useful</I>, we have created - this page of users. All those pages below have some sort of service, - provided through <A HREF="whatis.telnet.html">telnet</A> and use the - applet to make it easier to access their sites. This may either be some - <I>text-based virtual reality</I> or a <I>chat line</I>. Even more - promising is the usage for <I>library catalogues</I> or <I>online - information systems</I>. While looking around on the net we found that - a lot of users put the applet on their private page to access their - local accounts via the web.<P> - <A HREF="http://www.snymor.edu/~drewwe/">Bill Drew</A>, Systems - Librarian, SUNY College of Agriculture and Technology, wrote an - <A HREF="http://www.ariadne.ac.uk/issue8/java-telnet/intro.html"> - <B>Article</B></A> about using the applet to access his libraries OPAC - system and a German Internet Newsletter - <A HREF="http://www.intern.de/7_97_3.htm"><B>INTERNET Intern</B></A> - (german) found it useful.<P> - We are <I>happy to be referred</I> by the - <A HREF="http://library.usask.ca/hytelnet"><B>HYTELNET</B></A> resource - collection of <A HREF="whatis.telnet.html">telnet</A>-accessible - <I>library services</I> and <A HREF="http://www.mudconnect.com/"> - <B>The Mud Connector</B></A>, the most comprehensive list of - <I>text-based virtual realities</I> on the web. The Applet is also - mentioned on the <A HREF="http://www.cs.utk.edu/~shuford/terminal/pc_emulation.html#internet"><B>Video Terminal Informations</B></A> page. - This is the right place to look for <I>native</I> terminal emulation - programs.<P> - <B>The <A HREF="http://java.sun.com/">Java<SUP>(tm)</SUP></A> Telnet - Applet</B> is <A HREF="http://www.gnu.ai.mit.edu/software/java/gnu-recommended-software.html#Applets">recommended GNU Software</A>. - <P> - All Resources, alphabetically sorted: - <P> - <DL> - <DT><B><I><BIG>S</BIG>ERVICES</I></B><HR> - <DD><DL> - <DT><B>Information Provider</B> - <DD><A HREF="http://library.usask.ca/hytelnet">HYTELNET</A> - (referring page) - <DD><A HREF="http://www.mudconnect.com/">The Mud Connector</A> - (<A HREF="http://www.mudconnect.com/java/Telnet/index.cgi"> - <I>telnet</I></A>) - <P></DL> - <DD><DL> - <DT><B>Libraries:</B> - <DD><A HREF="http://opac.uni-erlangen.de/">University of Erlangen/OPAC</A> - (<A HREF="http://opac.uni-erlangen.de/Telnet/telnet.html"> - <I>telnet (german)</I></A>) - <DD><A HREF="http://jerome.cs.unm.edu/">ISTEC Libraries</A> - (<A HREF="http://jerome.cs.unm.edu/Telnet/welcome.html"> - <I>telnet</I></A>) - <DD><A HREF="http://www.ub.ku-eichstaett.de/">Katholische Universitätsbibliothek Eichstätt</A> - german - (<A HREF="http://www.ub.ku-eichstaett.de/Telnet/jvtopac02.html"><I>telnet</I></A>) - <DD><A HREF="http://www.lib.kth.se/">Royal Institute of Technology Library, Stockholm, Sweden</A> - (<A HREF="http://www.lib.kth.se/telnet/telnete.html"><I>telnet</I></A>), - (<A HREF="http://www.lib.kth.se/telnet/mattelnete.html"><I>telnet to Mathematics Library</I></A>) - - <DD><A HREF="http://www.falcon.edu/catalog/">Falcon Catalog</A> - (<A HREF="http://www.falcon.edu/catalog/JavaTelnet/"><I>telnet</I></A>) - <DD><A HREF="http://library.princeton.edu/">Princeton University - Library</A> - (<A HREF="http://library.princeton.edu/catalogs_and_databases/online_catalog.html"><I>telnet</I></A>) - <DD><A HREF="http://www.buc.unican.es/">BIBLIOTECA de Universidad de Cantabria</A> (spanish) - (<A HREF="http://www.buc.unican.es/capel2.htm"><I>telnet</I></A>) - <DD><A HREF="http://snymoraa.cs.snymor.edu/pages/library/">SUNY - Morrisville College Library</A> - (<A - HREF="http://snymoraa.snymor.edu/pages/library/telnet/netopac.htmlx"> - <I>telnet</I></A>) - <P></DL> - <DD><DL> - <DT><B>Remote System Access:</B> - <DD><A HREF="http://www.crpa.it/agrishar/bbs">AgriShare BBS</A> - (<A HREF="http://www.crpa.it/agrishar/bbs/Telnet/"> - <I>telnet</I></A>) - <DD><A HREF="http://cereal.mv.com/">Cereal BBS</A> - (<A HREF="http://cereal.mv.com/javatelnet/telnet/tel.html"> - <I>telnet</I></A>) - <DD><A HREF="http://www.cu-muc.de/">Connection Universe</A> - (<A HREF="http://www.cu-muc.de/chat/"><I>telnet</I></A>) - - <DD><A HREF="http://www.deltronix.com/">Deltronix Online</A> - (<A HREF="http://www.deltronix.com/public/telnet_deltronix.html"><I>telnet</I></A>) - Online Games, Message areas, Web hosting, Since 1988 - <DD><A HREF="http://dtk.campus.luth.se/">DTK homepage</A> - swedish - (<A HREF="http://dtk.campus.luth.se/telnet/"><I>telnet</I></A>) - <DD><A HREF="http://www.edenbbs.com">Eden BBS</A> - (<A HREF="http://www.webprecision.com/telnet/edengate.htm"> - <I>telnet</I></A>) - <DD><A HREF="http://bbs.exo.com/">Exo BBS</A> - (<A HREF="http://bbs.exo.com/telnet.html"><I>telnet</I></A>) - <DD><A HREF="http://shell.enteract.com/">EnterAct</A> - (<A HREF="http://shell.enteract.com/~horvath/Telnet/"><I>telnet</I></A>) - <DD><A HREF="http://infectionflux.myriad.net/">infection flux</A> - (<A HREF="http://infectionflux.myriad.net/~tony/Telnet/index.html"><I> - telnet</I></A>) - <DD><A HREF="http://www.inconnect.com/">INTERNET CONNECT</A> - (<A HREF="http://www.inconnect.com/telnet.html"><I>telnet</I></A>) - <DD><A HREF="http://206.251.72.99/">ITEX Online</A> - (<A HREF="http://206.251.72.99/java/Telnet/telnet_itex.net.html"><I> - telnet</I></A>) - <DD><A HREF="http://jungle.olivet.edu/">Jungle BBS</A> - (<A HREF="http://jungle.olivet.edu/telnet/"><I>telnet</I></A>) - <DD><A HREF="http://home.kiss.de/">KISS</A> - Kaiserslautern Internet - Solutions Service GmbH - (<A HREF="http://home.kiss.de/Telnet/login.html"><I>telnet</I></A>) - <DD><A HREF="http://www.nyx.net/">Nyx.net</A> - A public access UNIX - System - (<A HREF="http://nyx.nyx.net:8002/"><I>telnet</I></A>) - <DD><A HREF="http://pointblank.com/">Point Blank BBS</A> - (<A HREF="http://pointblank.com/"><I>telnet</I></A>) - <DD><A HREF="http://remcen.ehhs.cmich.edu/">REMCentral</A> - (<A HREF="http://remcen.ehhs.cmich.edu/telnet.html"><I>telnet</I></A>) - <DD><A HREF="http://www.southex.net/">SouthEX Interactive</A> - (<A HREF="http://www.southex.net/logon.htm"><I>telnet</I></A>) - <DD><A HREF="http://www.thegate.net/">The Gate BBS</A> - (<A HREF="http://www.thegate.net/"><I>telnet</I></A>) - <DD><A HREF="http://TheMatrix.com/">The Matrix.com</A> - (<A HREF="http://TheMatrix.com/telnet.html"><I>telnet</I></A>) - <DD><A HREF="http://www.tiga.com.au/">TIGA - Total Interactive Gaming - Australia</A> (<A HREF="http://www.tiga.com.au/telnet/jtelnet.htm"> - <I>telnet</I></A>) - <DD><A HREF="http://w3.uokhsc.edu/">The University of Oklahoma Health - Sciences Center</A> - (<A HREF="http://www.uokhsc.edu/home/service/telnet/"><I>telnet</I></A>) - <DD><A HREF="http://uncnsrd.mt-kisco.ny.us/">UNCENSORED! BBS</A> - (<A HREF="http://uncnsrd.mt-kisco.ny.us/Telnet/"><I>telnet</I></A>) - <DD><A HREF="http://undergnd.metrobbs.com/">Metropolis UNDERGROUND (<i>defect</i>)</A> - (<A HREF="http://undergnd.metrobbs.com/"><I>telnet</I></A>) - <P></DL> - <DT><B><I><BIG>R</BIG>ECREATIONAL</I></B><HR> - <DD><DL> - <DT><B>Text-based Virtual Reality (MUD):</B> - <DD><A HREF="http://abyss.nucleus.com/">The Abyss</A> - (<A HREF="http://abyss.nucleus.com/telnet.html"><I>telnet</I></A>) - <DD><A HREF="http://www.arctic.org/">ArcticMud</A> - (<A HREF="http://www.arctic.org/help/java_telnet.html"> - <I>telnet</I></A>) - <DD><A HREF="http://www.niweb.com/pgregg/">Crossed Swords</A> - (<A HREF="http://www.niweb.com/pgregg/telnetxswords.html"> - <I>telnet</I></A>) - <DD><A HREF="http://fmmikek.ftech.net/cuckoo/">the cuckoo's nest</A> - (<A HREF="http://fmmikek.ftech.net/cuckoo/Telnet/"><I>telnet</I></A>) - <DD><A HREF="http://hell.wh8.tu-dresden.de/~delusion/">Dimension *X*</A> - (<A HREF="http://hell.wh8.tu-dresden.de/~delusion/connect.html"> - <I>telnet</I></A>) - <DD><A HREF="http://mud.skool.com/">Dimension *X*</A> - (<A HREF="http://mud.skool.com/telnet/"> - <I>telnet</I></A>) - <DD><A HREF="http://www.erols.com/moodyg/">Dragon Bane</A> - (<A HREF="http://moodyg.erols.com/Telnet/drgnbn.html"> - <I>telnet</I></A>) - <DD><A HREF="http://dragon.fmi.uni-passau.de/">Dragon MUD</A> - (<A HREF="http://dragon.fmi.uni-passau.de/Telnet/telnet.html"> - <I>telnet</I></A>) - <DD><A HREF="http://www.empire1.com/emperor/empire.html">Empire MUD</A> - (<A HREF="http://www.empire1.com/emperor/Empire-MUD/EmpireMUD.html"> <I>telnet</I></A>) -<!-- ist zwar da, connected aber nicht - <DD><A HREF="http://mud.dwango.com/~mud/">eQuoria</A> - (<A HREF="http://mud.dwango.com/~mud/side.html"> <I>telnet</I></A>) ---> - <DD><A HREF="http://ff.mud.de">FinalFrontier</A> - german - (<A HREF="http://ff.mud.de/play.html"> <I>telnet</I></A>) - <DD><A HREF="http://www.insomnia-mud.com/~insomnia/">Insomnia-MUD</A> - (<A HREF="http://www.insomnia-mud.com/~insomnia/Telnet/mud.html"> <I>telnet</I></A>) - <DD><A HREF="http://bw2.baub.bwk.tue.nl/">JoranMud/Fatal Dimensions</A> - (<A HREF="http://bw2.baub.bwk.tue.nl/Telnet/joranmud.html"> <I>telnet</I></A>) - <DD><A HREF="http://www.ishar.com/">Ishar</A> - (<A HREF="http://www.ishar.com/telnet/"><I>telnet</I></A>) -<!-- scheint nicht mehr zu gehen - <DD><A HREF="http://www.lr2.com/">Lost Rivers 2</A> - (<A HREF="http://www.graphweb.com/lr/java/connect.htm"> - <I>telnet</I></A>) - --> -<!-- dito - <DD><A HREF="http://sdphul.ucsd.edu/antan/">The Marches of Antan</A> - (<A HREF="http://sdphul.ucsd.edu/antan/telnet/"><I>telnet</I></A>) - --> -<!-- dito - <DD><A HREF="http://medievia.netaxs.com:8080/">Medievia</A> - (<A HREF="http://medievia.netaxs.com:8080/java/Telnet/javaconnect.html"> - <I>telnet</I></A>) - --> -<!-- dito - <DD><A HREF="http://terminator.pathcom.com/~miked/ms/">The Midnight - Sanctuary</A> - (<A HREF="http://mud.imperium.net/~mudmstr/Telnet/play_sanctuary.html"> - <I>telnet</I></A>) - --> - <DD><A HREF="http://mg.mud.de/">MorgenGrauen</A> - german - (<A HREF="http://mg.mud.de/online/"> <I>telnet</I></A>) - <DD><A HREF="http://www.mudweiser.mudservices.com/">MUDweiser</A> - (<A HREF="http://www.mudweiser.mudservices.com/Telnet/"> <I>telnet</I></A>) - <DD><A HREF="http://mud.lysator.liu.se/Telnet/">NannyMUD</A> - (<A HREF="http://mud.lysator.liu.se/java/Telnet/"> <I>telnet</I></A>) - <DD><A HREF="http://www.reddragon.org/">Red Dragon LPmud</A> - (<A HREF="http://www.reddragon.org/Telnet/app.html"><I>telnet</I></A>) - <DD><A HREF="http://www.df.lth.se/~tommy/robotech/index.html">Robotech MUSH</A> - (<A HREF="http://robotech.df.lth.se/~robotech/Telnet/index.test.html"><I>telnet</I></A>) - <DD><A HREF="http://www.tsr.org/">An Age Of Legends: The Shadow Realms</A> - (<A HREF="http://www.tsr.org/Telnet/play.html"> - <I>telnet</I></A>) - <DD><A HREF="http://www.suvangi.com/">MUD Suvangi</A> - (<A HREF="http://www.suvangi.com/java/Telnet/telnet.html"> - <I>telnet</I></A>) - <DD><A HREF="http://supermud3.com/">SuperMUD 3</A> - (<A HREF="http://www.supermud3.com/game/java/index.html"><I>telnet</I></A>) - - <DD><A HREF="http://tapp.mud.de:8080/">TAPPMud</A> - (<A HREF="http://tapp.mud.de:8080/mud.html"><I>telnet</I></A>) - <DD><A HREF="http://tragickingdom.ml.org">Tragic Kingdom</A> - (<A HREF="http://tragickingdom.ml.org/chat/"><I>telnet</I></A>) - <DD><A HREF="http://terrafirma.terra.mud.org/">TerraFirmA</A> - (<A HREF="http://terrafirma.terra.mud.org/java/"><I>telnet</I></A>) - <DD><A HREF="http://tecfa.unige.ch/moo/">TECFEA Moo</A> - (<A HREF="http://tecfa.unige.ch/moo/clients/jmud/telnet-tecfa.html"> - <I>telnet</I></A>) <B>it definitely needs update!</B> - <DD><A HREF="http://mudhole.ehche.ac.uk/~tnt/">TNT</A> - (<A HREF="http://mudhole.ehche.ac.uk/~tnt/java.html"><I>telnet</I></A>) - <DD><A HREF="http://UNItopia.uni-stuttgart.de/">UNItopia</A> - german - (<A HREF="http://UNItopia.uni-stuttgart.de/telnet/"><I>telnet</I></A>) - <DD><A HREF="http://wilma.rz.uni-leipzig.de/mud/">Wunderland</A> - german - (<A HREF="http://wilma.rz.uni-leipzig.de/mud/telnet.html"> - <I>telnet</I></A>) - </DL><P> - <DD><DL> - <DT><B>Chats & Talkers:</B> - <DD><A HREF="http://apollos.ttu.ee/">Banalim</A> - (<A HREF="http://apollos.ttu.ee/valitsus/Telnet/"><I>telnet</I></A>) - <DD><A HREF="http://cafe.guam.net/">Cafe Guam</A> - (<A HREF="http://http://cafe.guam.net/cafe2000/"><I>Cafe 2000</I></A>) -<!-- down - <DD><A HREF="http://crime.stack.nl/~rjkap/java.html">Capsi Chat</A> - (<A HREF="http://crime.stack.nl/~rjkap/java.html"><I>telnet</I></A>) - --> - <DD><A HREF="http://www.talker.com/xena/">Xena: Chakrams & Scrolls</A> - (<A HREF="http://www.talker.com/xena/java/"><I>telnet</I></A>) - <DD><A HREF="http://www.talkers.org/cn/">Cirrus Nebula</A> - (<A HREF="http://www.talkers.org/cn/telnet.html"><I>telnet</I></A>) -<!-- - <DD><A HREF="http://funcity.newaygo.mi.us/~hsh/">Home Sweet Home</A> - (<A HREF="http://funcity.newaygo.mi.us/~hsh/chat/index.html"> - <I>telnet</I></A>) - --> -<!-- - <DD><A HREF="http://www.cs.ut.ee/~helger/muumi/">Moominvalley talker</A> - (<A HREF="http://www.cs.ut.ee/~helger/muumi/connect/"> - <I>telnet</I></A>) - --> - <DD><A HREF="http://amaterasu.math.orst.edu:8080/~sharpej/information/backyard.html">The Backyard</A> - (<A HREF="http://amaterasu.math.orst.edu:8080/~sharpej/information/telnet.html"><I>telnet</I></A>) -<!-- - <DD><A HREF="http://www.zait.uni-bremen.de/Esperanto/VEK/">VEKejo - (Esperanto)</A> - (<A HREF="http://www.zait.uni-bremen.de/Esperanto/VEK/telnet.html"> - <I>telnet</I></A>) - --> - <DD><A HREF="http://uberworld.ml.org/">UberWorld</A> - (<A HREF="http://uberworld.ml.org/telnet.html"> - <I>telnet</I></A>) - <DD><A HREF="http://kunpux.cogsci.kun.nl/~splotch/">Splotch (some non Turing test)</A> - (<A HREF="http://kunpux.cogsci.kun.nl/~splotch/start-java-telnet.html"> - <I>telnet</I></A>) - <DD><A HREF="http://talkers.skl.com/~bourbons/">Bourbon Street</A> - (<A HREF="http://talkers.skl.com/~bourbons/class/java.html"> - <I>telnet</I></A>) - <P></DL> - </DL> - <P> - <HR> - <A HREF="../index.html"> - <IMG ALIGN=LEFT SRC="images/left.gif" BORDER=0 ALT="[BACK]"></A> - <B>Get the - <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet">latest - version</A> here!</B> <BR> - <!-- html-ts start --> - Last modified: Wed Jul 23 15:00:43 1997 by Matthias L. Jugel - <!-- html-ts end --> - </BODY> -</HTML> diff --git a/web/root/telnet/Documentation/whatis.telnet.html b/web/root/telnet/Documentation/whatis.telnet.html deleted file mode 100644 index ddc38c82193a5e173c23fb853ebd8c4f6923b597..0000000000000000000000000000000000000000 --- a/web/root/telnet/Documentation/whatis.telnet.html +++ /dev/null @@ -1,31 +0,0 @@ -<!doctype HTML public "-//W30//DTD W3 HTML 3.0//EN"> -<HTML> -<HEAD><TITLE>The Java(tm) Telnet Applet: What is TELNET?</TITLE></HEAD> -<BODY BGCOLOR="#ffffff"> -<H1>The <A HREF="http://java.sun.com/">Java<SUP>(tm)</SUP></A> - Telnet Applet: What is TELNET?</H1> -<P ALIGN=LEFT> -© 1996-98 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -<A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus Meißner</A> -<HR> -<P> -Telnet allows you to login to another <I>Internet location</I> to gain -access to <B>databases</B>, <B>library catalogs</B>, and <B>interactive -environments</B>. It works like a terminal connected to your computer, -only that that computer may be far away.<P> -If you want to connect directly to a remote computer you need to know a -<I>valid login ID</I> usually given to you by the provider of the service. -<P> -To get a list of telnet service providers, please have a look at our list of -<A HREF="user.html"><B>Applet Users</B></A>. -<P> -<HR> -<A HREF="../index.html"> -<IMG ALIGN=LEFT SRC="images/left.gif" BORDER=0 ALT="[BACK]"></A> -<B>Get the <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet">latest -version</A> here!</B> <BR> -<!-- html-ts start --> -Last modified: Thu Mar 13 12:29:58 1997 by Matthias L. Jugel -<!-- html-ts end --> -</BODY> -</HTML> diff --git a/web/root/telnet/INSTALL b/web/root/telnet/INSTALL deleted file mode 100644 index e34907fcb3aa734e4066f887d80a7f4756f5c6b4..0000000000000000000000000000000000000000 --- a/web/root/telnet/INSTALL +++ /dev/null @@ -1,55 +0,0 @@ -** The Java(tm) Telnet Applet ** - -------------------------------------------------------------- -If you want to use the classes only do the following: - -* UNIX: - gzip -cd telnet.tgz | tar xf - \*.class - -* DOS/Windows: - pkunzip -d telnet.zip - * Maybe you can unzip it by just clicking on the - package or Netscape knows how to handle .zip. - -This will extract the classes and create the required -directory structure (/ is \ on DOS/Windows): - - telnet.class - socket/TelnetIO.class - socket/StatusPeer.class - display/CharDisplay.class - display/Terminal.class - display/TerminalHost.class - display/vt320.class - modules/ButtonBar.class - modules/Script.class - -------------------------------------------------------------- -In case you like to compile the sources yourself extract -everything and type the following: - - make realclean - make telnet.class - -The Makefile will compile all classes recursively even though -the java compiler would do this by itself when running -"java telnet.java". - -Just typing "make" will print you all available make targets: - - make test - compile applet and run appletviewer - make telnet - compile standalone and run telnet - make doc - create documentation - make clean - delete backup files - make realclean - make clean and delete .class files - -------------------------------------------------------------- - -Hint: Always remember that the applet can only connect to the - server it has been loaded from! You will get a security - exception when trying to connect to some other host. - - If you load your applet locally via the file:// URL - don't forget to set the CLASSPATH environment variable - to the directory, where the telnet.class resides _before_ - you start your appletviewer or web browser! diff --git a/web/root/telnet/IOtest.class b/web/root/telnet/IOtest.class deleted file mode 100644 index 7e90843c7e059e3751d0d85810b5533e4a26992b..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/IOtest.class and /dev/null differ diff --git a/web/root/telnet/IOtest.java b/web/root/telnet/IOtest.java deleted file mode 100644 index bbd0d26059a45d8db51aff6dd5856b7a4466100a..0000000000000000000000000000000000000000 --- a/web/root/telnet/IOtest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* IOtest.java -- An example how to use the TelnetIO class - * -- - * Author: Matthias L. Jugel - * - * Usage: compile with javac IOtest.java - * run program with java IOtest - * - * This is not an applet, but the idea might be used in one. - */ - -import java.util.Vector; -import java.io.*; -import socket.*; - -/** - * IOtest -- a test class for telnet i/o - * -- - * @version $Id: IOtest.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel - */ -class IOtest { - - // create a new telnet io instance - static TelnetIO tio = new TelnetIO(); - - // skip any received data until the prompt appears - private static void wait(String prompt) - { - String tmp = ""; - do { - try { tmp = new String(tio.receive(), 0); } - catch(IOException e) { e.printStackTrace(); } - System.out.println(tmp); - } while(tmp.indexOf(prompt) == -1); - } - - // send a string to the remote host, since TelnetIO needs a byte buffer - // we have to convert the string first - private static void send(String str) - { - byte[] buf = new byte[str.length()]; - str.getBytes(0, str.length(), buf, 0); - try { tio.send(buf); } catch(IOException e) {} - } - - // this function is called when running the class with java IOtest - // looks very much like a modem login script ;-) - public static void main(String args[]) - { - try { - tio.connect("localhost"); - wait("login:"); - send("<YOUR LOGIN NAME>\r"); - wait("Password:"); - send("<YOUR PASSWORD>\r"); - wait("<YOUR SHELL PROMPT>"); - send("touch /tmp/THIS_WAS_AN_APPLET\r"); - tio.disconnect(); - } catch(IOException e) { e.printStackTrace(); } - } -} diff --git a/web/root/telnet/Makefile b/web/root/telnet/Makefile deleted file mode 100644 index e9a10316d3e938a91456c3127f5e939f7886450a..0000000000000000000000000000000000000000 --- a/web/root/telnet/Makefile +++ /dev/null @@ -1,178 +0,0 @@ -# -# This file is part of "The Java Telnet Applet". -# -# This 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) -# any later version. -# -# "The Java Telnet Applet" is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with The JAVA Telnet Applet; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# $Id: Makefile,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - -OPT = -DEBUG = -g -deprecation -JAVA = java -JAVAC = javac -JAVADOC = javadoc -APPV = appletviewer - -.SUFFIXES: .java .class .html - -.java.class: - $(JAVAC) $(OPT) $(DEBUG) $< - -.class.html: - $(APPLV) $@ - -HELP: - @echo 'To compile "The Java Telnet Applet" do one of the following:' - @echo '------------------------------------------------------------' - @echo 'make all - compile all files to classes' - @echo 'make test - compile applet and run appletviewer' - @echo 'make telnet - compile standalone and run telnet' - @echo 'make chartest - compile character display test and run' - @echo 'make proxy - compile proxy server' - @echo 'make doc - create documentation' - @echo 'make clean - delete backup files' - @echo 'make realclean - make clean and delete .class files' - -all: appWrapper.class telnet.class modules tools - @echo All classes created. - -test: appWrapper.class telnet.class - $(APPV) index.test.html - -telnet: appWrapper.class telnet.class - $(JAVA) telnet localhost - -chartest: CharDisplayTest.class - $(APPV) CharDisplay.html - -doc: - $(JAVADOC) -d Documentation/Source -author -version \ - display socket modules \ - telnet.java appWrapper.java \ - tools/proxy.java CharDisplayTest.java IOtest.java - -tar: - rm -f ../telnet.tgz ../telnet.zip - (cd ..; tar cf - Telnet | gzip - > telnet.tgz) - (cd ..; zip -r telnet.zip Telnet) - -bin-tar: all - rm -f ../classes.tgz ../classes.zip - (cd ..; tar cf - Telnet/*.class Telnet/*/*.class \ - Telnet/README Telnet/INSTALL Telnet/COPYING \ - | gzip - > classes.tgz) - (zip -r ../classes.zip *.class */*.class README INSTALL COPYING) - -revision: - grep @version *.java */*.java|awk '{split($$6,rev,".");printf("%-26.26s %2.2s.%-2.2s (%s)\n",$$1,rev[1],rev[2],$$7);}' > REVISION - rcs2log *.java */*.java > CHANGES - sed -e"s/package:.*$$/package: `date +%c`/" index.html > index.html.x - mv index.html.x index.html - -dist: realclean all doc tar bin-tar - @echo DONE. - -clean: - rm -f *~ */*~ - -realclean: clean - rm -f *.class */*.class - (cd tools; make clean) - -# dependencies - -appWrapper.class: \ - appWrapper.java \ - frame.java - -telnet.class: \ - telnet.java \ - display \ - socket \ - modules - -# display classes and terminal emulation - -display: \ - display/vt320.class - -display/vt320.class: \ - display/vt320.java \ - display/CharDisplay.java \ - display/TerminalHost.java \ - display/Terminal.java - -display/CharDisplay.java: \ - display/SoftFont.java - -# socket io classes -socket: \ - socket/TelnetIO.class \ - socket/TelnetWrapper.class - -socket/TelnetIO.class: \ - socket/TelnetIO.java \ - socket/StatusPeer.java - -# dynamical loaded modules -modules: modules/ButtonBar.class \ - modules/Script.class \ - modules/TextLabel.class \ - modules/MudConnector.class \ - modules/BSXModule.class - -modules/ButtonBar.class: \ - modules/ButtonBar.java \ - modules/Module.java \ - frame.java - -modules/Script.class: \ - modules/Script.java \ - modules/Module.java - -modules/MudConnector.class: \ - modules/MudConnector.java \ - modules/Module.java - -modules/BSXModule.class: \ - modules/bsx/BSXDisplay.java \ - modules/bsx/BSXGraphic.java \ - modules/bsx/BSXInputStream.java \ - modules/bsx/BSXObject.java \ - modules/bsx/BSXPolygon.java \ - modules/bsx/BSXScene.java - -# tools -tools: \ - tools/proxy.class \ - CharDisplayTest.class \ - IOtest.class \ - tools/mrelayd \ - tools/relayd - -tools/proxy.class: \ - tools/proxy.java - -CharDisplayTest.class: \ - CharDisplayTest.java \ - display/CharDisplay.java - -IOtest.class: \ - IOtest.java \ - socket/TelnetIO.java - -socket/TelnetWrapper.class: \ - socket/TelnetWrapper.java \ - socket/TelnetIO.java diff --git a/web/root/telnet/README b/web/root/telnet/README deleted file mode 100644 index 58f23de91dbcad2b5fe96af78cd18fc536049cf4..0000000000000000000000000000000000000000 --- a/web/root/telnet/README +++ /dev/null @@ -1,55 +0,0 @@ -The Java Telnet Applet - -Authors: Matthias L. Jugel (leo@first.gmd.de) - Marcus Mei�ner (msmeissn@cip.informatik.uni-erlangen.de) - -This applet is the result of our attempt to make a useful java application -and to provide better access to the world of internet through the almost -everywhere available Web browser. - -We hope you find this piece of software as useful as we do. The source code -is publicly available under the GPL. - -If you encounter any problems, bugs or else don't hesitate to contact us. - - http://www.first.gmd.de/persons/leo/java/Telnet - -will always have the newest version. - -This distibution should contain the following files and directories: - -README - this file -REVISION - contains version information about .java files -CHANGES - all changes are logged here -INSTALL - how to install the applet -COPYING - GNU General Public Licence -COPYING.LIB - GNU Library General Public Licence -BUGS - known bugs -Makefile - to create .class files and documentation - -telnet.java - the telnet applet/application -socket/TelnetIO.java - all telnet negotiation handling -socket/StatusPeer.java - a status peer interface -display/Terminal.java - an abstract terminal class -display/TerminalHost.java - a virtual terminal host interface -display/CharDisplay.java - a general purpose character display -display/vt320.java - a VT320/ANSI emulation class using CharDisplay -modules/ButtonBar.java - a programmable button bar -modules/Script.java - a simple script module - -The package contains also all precompiled classes! - -tools/IOtest.java - an example program which works like a - script executor -tools/TelnetWrapper.java - another example program provided by - George Ruban -tools/CharDisplayTest.java- a test class for display/CharDisplay.java - -tools/proxy.java - a simple proxy server - -*.html - various test files -examples/*.html - example files for different usage - -Documentation/ - documentation of the JAVA source code -CVS/ - revision control, contains the history of - the source code diff --git a/web/root/telnet/REVISION b/web/root/telnet/REVISION deleted file mode 100644 index 1be1ae1ddb2cea878481de0d0fa8e673b8e4844c..0000000000000000000000000000000000000000 --- a/web/root/telnet/REVISION +++ /dev/null @@ -1,20 +0,0 @@ -CharDisplayTest.java: 1.1 (1997/03/05) -IOtest.java: 1.1 (1997/03/05) -appWrapper.java: 1.9 (1997/07/24) -telnet.java: 1.21 (1999/03/04) -display/CharDisplay.java: 1.29 (1999/03/20) -display/Terminal.java: 1.1 (1997/03/05) -display/TerminalHost.java: 1.1 (1997/03/05) -display/vt320.java: 1.60 (1999/03/20) -modules/ButtonBar.java: 1.23 (1999/04/09) -modules/Module.java: 1.3 (1997/03/24) -modules/MudConnector.java: 1.3 (1999/04/09) -modules/Script.java: 1.6 (1997/11/03) -modules/TextLabel.java: 1.1 (1997/07/09) -socket/StatusPeer.java: 1.1 (1997/03/05) -socket/TelnetIO.java: 1.10 (1998/02/09) -socket/TelnetIO.java: Ge. (Ruban) -socket/TelnetWrapper.java: -. (added) -socket/TelnetWrapper.java: -. (added) -socket/TimedOutException.j */. () -tools/proxy.java: 1.4 (1997/05/27) diff --git a/web/root/telnet/TODO b/web/root/telnet/TODO deleted file mode 100644 index 3c5da65f35516537ed601396f23a7ba94c16e2b8..0000000000000000000000000000000000000000 --- a/web/root/telnet/TODO +++ /dev/null @@ -1,22 +0,0 @@ -The Java(tm) Telnet Applet - --- TODO LIST -- - -May, 27, 1997 - - * connection timeout - -tools/proxy.java - * additional log file - -March, 14, 1997 - - -display/vt320.java - * should add an edit line when using line mode - * vttest compliance - * 80/132 columns switching to resize the window instead of the font - -display/CharDisplay.java - * Needs to be refined. The Font resizing in one method and the usage - of addNotify() is recommendet. diff --git a/web/root/telnet/appWrapper.class b/web/root/telnet/appWrapper.class deleted file mode 100644 index fac64e5ab34219192efc5e7af094d2e276e5eb2f..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/appWrapper.class and /dev/null differ diff --git a/web/root/telnet/appWrapper.java b/web/root/telnet/appWrapper.java deleted file mode 100644 index 003da5ee479daa220c8bdcdf3148f7abc9b74f77..0000000000000000000000000000000000000000 --- a/web/root/telnet/appWrapper.java +++ /dev/null @@ -1,256 +0,0 @@ -/** - * appWrapper -- applet/application wrapper - * -- - * $Id: appWrapper.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Thu Jul 24 13:08:23 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -import java.applet.Applet; -import java.applet.AppletStub; - -import java.awt.Frame; -import java.awt.Event; -import java.awt.Panel; -import java.awt.Button; -import java.awt.BorderLayout; -import java.awt.Graphics; -import java.awt.Color; -import java.awt.FontMetrics; - -/** - * The appWrapper is thought to make the applet itself independent from - * the original context. This is necessary to be able to detach the applet - * from the web browsers window without disconnecting it from events. - * Note: This applet should work with any applet without changes. - * - * <DL> - * <DT><B><PRE><PARAM NAME="applet" VALUE="<I>applet</I>"></PRE></B> - * <DD>Defines the applet to be loaded by the appWrapper. State the applet - * class name without ".class"!<P> - * <DT><B><PRE><PARAM NAME="startButton" VALUE="<I>text</I>"></PRE></B> - * <DD>If this parameter is set the applet is not loaded until the user presses - * the button. This decreases first time download delay. The <I>text</I> - * given as value to the parameter is shown on the button. While loading - * the applet the message "Loading ..." is shown on the button.<P> - * <DT><B><PRE><PARAM NAME="stopButton" VALUE="<I>text</I>"></PRE></B> - * <DD>This parameter defines the button text when the applet is loaded. When - * pressing the button while the applet is running this causes the applet - * window to be destroyed and the applet is stopped.<P> - * <DT><B><PRE><PARAM NAME="frameTitle" VALUE="<I>text</I>"></PRE></B> - * <DD>The <I>frameTitle</I> is the text that is shown in the title bar of the - * applet window.<P> - * </DL> - * @version $Id: appWrapper.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel - */ -public class appWrapper extends Applet implements AppletStub, Runnable -{ - Thread loader = null; - - String appletName = null; - Applet applet = null; - - Button startButton = null; - String startLabel, stopLabel, frameTitle; - - frame f; - - /** - * Applet initialization. We load the class giving in parameter "applet" - * and set the stub corresponding to ours. Thus we are able to give - * it access to the parameters and any applet specific context. - */ - public void init() { - - // get the applet parameter - if((appletName = getParameter("applet")) == null) { - showStatus("appWrapper: missing applet parameter, nothing loaded"); - System.err.println("appWrapper: missing applet parameter"); - return; - } - - setLayout(new BorderLayout()); - - // get the button and title parameters - if((startLabel = getParameter("startButton")) == null) - run(); - else { - startButton = new Button(getParameter("startButton")); - add("Center", startButton); - if((stopLabel = getParameter("stopButton")) == null) - stopLabel = "STOP!"; - if((frameTitle = getParameter("frameTitle")) == null) - frameTitle = "The Java Telnet Applet"; - } - - } - - /** - * Load the applet finally. When using a button this creates a new frame - * to put the applet in. - */ - public void run() { - if(applet == null) try { - applet = (Applet)Class.forName(getParameter("applet")).newInstance(); - applet.setStub(this); - } catch(Exception e) { - System.err.println("appWrapper: could not load "+appletName); - e.printStackTrace(); - return; - } else { - System.err.println("appWrapper: applet already loaded"); - return; - } - - if(startButton == null) { - add("Center", applet); - applet.init(); - } else { - f = new frame(frameTitle); - f.setLayout(new BorderLayout()); - f.add("Center", applet); - applet.init(); - f.resize(applet.minimumSize()); - f.pack(); - f.show(); - } - applet.start(); - - if(startButton != null) - startButton.setLabel(stopLabel); - - // stop loader thread - while(loader != null) { - if(f == null || !f.isVisible()) { - startButton.setLabel(startLabel); - loader.stop(); - loader = null; - } - try { loader.sleep(5000); } - catch(InterruptedException e) { - e.printStackTrace(); - } - } - } - - /** - * This method is called when the applet want's to be resized. - * @param width the width of the applet - * @param height the height of the applet - */ - public void appletResize(int width, int height) { - System.err.println("appWrapper: appletResize()"); - if(applet != null) applet.resize(width, height); - } - - /** - * Give information about the applet. - */ - public String getAppletInfo() - { - String info = "appWrapper: $Id: appWrapper.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $\n"; - if(applet != null) - info += applet.getAppletInfo(); - return info; - } - - /** - * Give information about the appWrapper and the applet loaded. - */ - public String[][] getParameterInfo() - { - String info[][]; - String wrapper[][] = { - {"applet", "String", "appWrapper: Applet to load"}, - }; - if(applet != null) { - String tmp[][] = applet.getParameterInfo(); - info = new String[tmp.length + 1][3]; - System.arraycopy(tmp, 0, info, 1, tmp.length); - } - else info = new String[1][3]; - System.arraycopy(wrapper, 0, info, 0, 1); - - return info; - } - - /** - * Write a message to the applet area. - */ - public void paint(Graphics g) - { - String message; - if(applet != null) - message = "Click to reattach the Applet!"; - else message = "The was no applet load (maybe an error)!"; - - - int width = size().width / 2 - - (getFontMetrics(getFont())).stringWidth(message) / 2; - int height = size().height / 2; - - g.setColor(Color.red); - g.drawString(message, width, height); - } - - /** - * reshape the applet and ourself - */ - public void reshape(int x, int y, int w, int h) - { - if(applet != null) applet.reshape(x, y, w, h); - super.reshape(x, y, w, h); - } - - /** - * Handle button events. When pressed it either creates the new applet - * window or destoys it. - */ - public boolean handleEvent(Event evt) - { - if(evt.target == startButton && evt.id == Event.ACTION_EVENT) { - if(applet == null) { - startButton.setLabel("Loading ..."); - (loader = new Thread(this)).start(); - } else { - if(applet.getParent() instanceof Frame) { - Frame frame = (Frame)applet.getParent(); - frame.hide(); - frame.dispose(); - } - applet.stop(); - applet.destroy(); - applet = null; - startButton.setLabel(startLabel); - } - return true; - } - if(evt.id == Event.MOUSE_UP && applet.getParent() instanceof Frame) { - Frame frame = (Frame)applet.getParent(); - frame.hide(); - frame.dispose(); - add("Center", applet); - validate(); - layout(); - return true; - } - return false; - } -} diff --git a/web/root/telnet/classes.zip b/web/root/telnet/classes.zip deleted file mode 100644 index cb379d8a09a6b3f757679bfe247d1a8feb60d6c8..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/classes.zip and /dev/null differ diff --git a/web/root/telnet/display/CharDisplay.class b/web/root/telnet/display/CharDisplay.class deleted file mode 100644 index 6fa29a3fba83747ea12b7c9bf45fe67af7bf0985..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/display/CharDisplay.class and /dev/null differ diff --git a/web/root/telnet/display/CharDisplay.java b/web/root/telnet/display/CharDisplay.java deleted file mode 100644 index 9d3b32768e9dc2cff5147102393fe021a4f4da20..0000000000000000000000000000000000000000 --- a/web/root/telnet/display/CharDisplay.java +++ /dev/null @@ -1,1297 +0,0 @@ -/** - * CharDisplay -- a simple character display - * -- - * $Id: CharDisplay.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Thu Jul 24 15:19:18 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package display; - -import java.awt.Graphics; -import java.awt.Panel; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Point; -import java.awt.Insets; -import java.awt.Event; -import java.awt.TextArea; -import java.awt.Label; -import java.awt.Frame; -import java.awt.Scrollbar; -import java.awt.Rectangle; - -/** - * A simple character display. - * @version $Id: CharDisplay.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - */ -public class CharDisplay extends Panel -{ - /** - * If you need the runtime version, just ask this variable. - */ - public String version = "$Revision: 1.1.1.1 $ $Date: 2005/09/25 22:40:20 $"; - /** - * Enable debug messages. This is final static to prevent unused - * code to be compiled. - */ - public final static int debug = 0; - - private Dimension size; /* rows and columns */ - private Insets insets; /* size of the border */ - private boolean raised; /* indicator if the border is raised */ - - private char charArray[][]; /* contains the characters */ - private int charAttributes[][]; /* contains character attrs */ - private int bufSize, maxBufSize; /* buffer sizes */ - - private int windowBase; /* where the start displaying */ - private int screenBase; /* the actual screen start */ - private int topMargin; /* top scroll margon */ - private int bottomMargin; /* bottom scroll margon */ - private Scrollbar scrollBar; /* the scroll bar */ - private String scrBarPos; /* the scroll bar position */ - - private Font normalFont; /* normal font */ - private FontMetrics fm; /* current font metrics */ - private int charWidth; /* current width of a char */ - private int charHeight; /* current height of a char */ - private int charDescent; /* base line descent */ - private int resizeStrategy; /* current resizing strategy */ - - private int cursorX, cursorY; /* current cursor position */ - private Point selectBegin, selectEnd; /* selection coordinates */ - private TextArea selection; - private Frame selectFrame; - - private display.SoftFont sf = new display.SoftFont(); - - private boolean screenLocked = false; /* screen needs to be locked */ - /* because of paint requests */ - /* during other operations */ - private boolean update[]; - - public Color notbold(Color colr) - { - return new Color(Math.max((int) (colr.getRed() *.85), 0), - Math.max((int) (colr.getGreen() * .85), 0), - Math.max((int) (colr.getBlue() * .85), 0)); - } - - private Color color[] = { notbold(Color.black), - notbold(Color.red), - notbold(Color.green), - notbold(Color.yellow), - notbold(Color.blue), - notbold(Color.magenta), - notbold(Color.cyan), - notbold(Color.white), - }; - private final static int COLOR_FG_STD = 7; - private final static int COLOR_FG_BOLD = 3; - private final static int COLOR_BG_STD = 0; - private final static int COLOR = 0x7f8; - private final static int COLOR_FG = 0x78; - private final static int COLOR_BG = 0x780; - - /** - * Scroll up when inserting a line. - */ - public final static boolean SCROLL_UP = false; - /** - * Scroll down when inserting a line. - */ - public final static boolean SCROLL_DOWN = true; - - /** - * Do nothing when the container is resized. - */ - public final static int RESIZE_NONE = 0; - /** - * Resize the width and height of the characterscreen. - */ - public final static int RESIZE_SCREEN = 1; - /** - * Resize the font to the new screensize. - */ - public final static int RESIZE_FONT = 2; - - /** - * Make character normal. - */ - public final static int NORMAL = 0x00; - /** - * Make character bold. - */ - public final static int BOLD = 0x01; - /** - * Underline character. - */ - public final static int UNDERLINE = 0x02; - /** - * Invert character. - */ - public final static int INVERT = 0x04; - - private void InitializeCharDisplay(int width, int height, - String fontname, int fsize) - { - System.err.println("CharDisplay: screen size: ["+width+","+height+"]"); - normalFont = new Font(fontname, Font.BOLD, fsize); - setFont(normalFont); - fm = getFontMetrics(normalFont); - if(fm != null) - { - charWidth = fm.charWidth('@'); - charHeight = fm.getHeight(); - charDescent = fm.getDescent(); - } - - resizeStrategy = RESIZE_FONT; - size = new Dimension(width, height); - charArray = new char[size.height][size.width]; - charAttributes = new int[size.height][size.width]; - bufSize = size.height; - maxBufSize = 2 * size.height; - - windowBase = 0; - screenBase = 0; - topMargin = 0; - bottomMargin = size.height - 1; - - update = new boolean[size.height + 1]; - for(int i = 1; i <= size.height; i++) update[i] = true; - - selectBegin = new Point(0,0); - selectEnd = new Point(0,0); - - setLayout(null); - } - - /** - * Create a character display with size 80x24 and Font "Courier", size 12. - */ - public CharDisplay() - { - InitializeCharDisplay(80, 24, "Courier", 12); - } - - /** - * Create a character display with specific size, Font is "Courier", size 12. - */ - public CharDisplay(int width, int height) - { - InitializeCharDisplay(width, height, "Courier", 12); - } - - /** - * Create a character display with 80x24 and specific font and font size. - */ - public CharDisplay(String fname, int fsize) - { - InitializeCharDisplay(80, 24, fname, fsize); - } - - /** - * Create a character display with specific size, font and font size. - */ - public CharDisplay(int width, int height, String fname, int fsize) - { - InitializeCharDisplay(width, height, fname, fsize); - } - - /** - * Put a character on the screen with normal font and outline. - * The character previously on that position will be overwritten. - * You need to call redraw() to update the screen. - * @param c x-coordinate (column) - * @param l y-coordinate (line) - * @param ch the character to show on the screen - * @see #insertChar - * @see #deleteChar - * @see #redraw - */ - public void putChar(int c, int l, char ch) - { - putChar(c, l, ch, NORMAL); - } - - /** - * Put a character on the screen with specific font and outline. - * The character previously on that position will be overwritten. - * You need to call redraw() to update the screen. - * @param c x-coordinate (column) - * @param l y-coordinate (line) - * @param ch the character to show on the screen - * @param attributes the character attributes - * @see #BOLD - * @see #UNDERLINE - * @see #INVERT - * @see #NORMAL - * @see #insertChar - * @see #deleteChar - * @see #redraw - */ - - public void putChar(int c, int l, char ch, int attributes) - { - c = checkBounds(c, 0, size.width - 1); - l = checkBounds(l, 0, size.height - 1); - charArray[screenBase + l][c] = ch; - charAttributes[screenBase + l][c] = attributes; - markLine(l, 1); - } - - /** - * Get the character at the specified position. - * @param c x-coordinate (column) - * @param l y-coordinate (line) - * @see #putChar - */ - public char getChar(int c, int l) - { - c = checkBounds(c, 0, size.width - 1); - l = checkBounds(l, 0, size.height - 1); - return charArray[l][c]; - } - - /** - * Get the attributes for the specified position. - * @param c x-coordinate (column) - * @param l y-coordinate (line) - * @see #putChar - */ - public int getAttributes(int c, int l) - { - c = checkBounds(c, 0, size.width - 1); - l = checkBounds(l, 0, size.height - 1); - return charAttributes[l][c]; - } - - /** - * Insert a character at a specific position on the screen. - * All character right to from this position will be moved one to the right. - * You need to call redraw() to update the screen. - * @param c x-coordinate (column) - * @param l y-coordinate (line) - * @param ch the character to insert - * @param attributes the character attributes - * @see #BOLD - * @see #UNDERLINE - * @see #INVERT - * @see #NORMAL - * @see #putChar - * @see #deleteChar - * @see #redraw - */ - public void insertChar(int c, int l, char ch, int attributes) - { - c = checkBounds(c, 0, size.width - 1); - l = checkBounds(l, 0, size.height - 1); - System.arraycopy(charArray[screenBase + l], c, - charArray[screenBase + l], c + 1, size.width - c - 1); - System.arraycopy(charAttributes[screenBase + l], c, - charAttributes[screenBase + l], c + 1, size.width - c - 1); - putChar(c, l, ch, attributes); - } - - /** - * Delete a character at a given position on the screen. - * All characters right to the position will be moved one to the left. - * You need to call redraw() to update the screen. - * @param c x-coordinate (column) - * @param l y-coordinate (line) - * @see #putChar - * @see #insertChar - * @see #redraw - */ - public void deleteChar(int c, int l) - { - c = checkBounds(c, 0, size.width - 1); - l = checkBounds(l, 0, size.height - 1); - if(c < size.width - 1) - { - System.arraycopy(charArray[screenBase + l], c + 1, - charArray[screenBase + l], c, size.width - c - 1); - System.arraycopy(charAttributes[screenBase + l], c + 1, - charAttributes[screenBase + l], c, size.width - c - 1); - } - putChar(size.width - 1, l, (char)0); - } - - /** - * Put a String at a specific position. Any characters previously on that - * position will be overwritten. You need to call redraw() for screen update. - * @param c x-coordinate (column) - * @param l y-coordinate (line) - * @param s the string to be shown on the screen - * @see #BOLD - * @see #UNDERLINE - * @see #INVERT - * @see #NORMAL - * @see #putChar - * @see #insertLine - * @see #deleteLine - * @see #redraw - */ - public void putString(int c, int l, String s) - { - putString(c, l, s, NORMAL); - } - - /** - * Put a String at a specific position giving all characters the same - * attributes. Any characters previously on that position will be - * overwritten. You need to call redraw() to update the screen. - * @param c x-coordinate (column) - * @param l y-coordinate (line) - * @param s the string to be shown on the screen - * @param attributes character attributes - * @see #BOLD - * @see #UNDERLINE - * @see #INVERT - * @see #NORMAL - * @see #putChar - * @see #insertLine - * @see #deleteLine - * @see #redraw - */ - public void putString(int c, int l, String s, int attributes) - { - for(int i = 0; i < s.length() && c + i < size.width; i++) - putChar(c + i, l, s.charAt(i), attributes); - } - - /** - * Insert a blank line at a specific position. - * The current line and all previous lines are scrolled one line up. The - * top line is lost. You need to call redraw() to update the screen. - * @param l the y-coordinate to insert the line - * @see #deleteLine - * @see #redraw - */ - public void insertLine(int l) - { - insertLine(l, 1, SCROLL_UP); - } - - /** - * Insert blank lines at a specific position. - * You need to call redraw() to update the screen - * @param l the y-coordinate to insert the line - * @param n amount of lines to be inserted - * @see #deleteLine - * @see #redraw - */ - public void insertLine(int l, int n) - { - insertLine(l, n, SCROLL_UP); - } - - /** - * Insert a blank line at a specific position. Scroll text according to - * the argument. - * You need to call redraw() to update the screen - * @param l the y-coordinate to insert the line - * @param scrollDown scroll down - * @see #deleteLine - * @see #SCROLL_UP - * @see #SCROLL_DOWN - * @see #redraw - */ - public void insertLine(int l, boolean scrollDown) - { - insertLine(l, 1, scrollDown); - } - - /** - * Insert blank lines at a specific position. - * The current line and all previous lines are scrolled one line up. The - * top line is lost. You need to call redraw() to update the screen. - * @param l the y-coordinate to insert the line - * @param n number of lines to be inserted - * @param scrollDown scroll down - * @see #deleteLine - * @see #SCROLL_UP - * @see #SCROLL_DOWN - * @see #redraw - */ - public synchronized void insertLine(int l, int n, boolean scrollDown) - { - screenLocked = true; - - l = checkBounds(l, 0, size.height - 1); - - char cbuf[][] = null; - int abuf[][] = null; - int offset = 0; - int oldBase = screenBase; - int top = (l < topMargin ? - 0 : (l > bottomMargin ? - (bottomMargin + 1 < size.height ? - bottomMargin + 1 : size.height - 1) : topMargin)); - int bottom = (l > bottomMargin ? - size.height - 1 : (l < topMargin ? - (topMargin > 0 ? - topMargin - 1 : 0) : bottomMargin)); - - - if(scrollDown) { - if(n > (bottom - top)) n = (bottom - top); - cbuf = new char[bottom - l - (n - 1)][size.width]; - abuf = new int[bottom - l - (n - 1)][size.width]; - - System.arraycopy(charArray, oldBase + l, cbuf, 0, bottom - l - (n - 1)); - System.arraycopy(charAttributes, oldBase + l, - abuf, 0, bottom - l - (n - 1)); - System.arraycopy(cbuf, 0, charArray, oldBase + l + n, - bottom - l - (n - 1)); - System.arraycopy(abuf, 0, charAttributes, oldBase + l + n, - bottom - l - (n - 1)); - cbuf = charArray; - abuf = charAttributes; - } else try { - if(n > (bottom - top) + 1) n = (bottom - top) + 1; - if(bufSize < maxBufSize) { - if(bufSize + n > maxBufSize) { - offset = n - (maxBufSize - bufSize); - bufSize = maxBufSize; - screenBase = maxBufSize - size.height - 1; - windowBase = screenBase; - } else { - screenBase += n; - windowBase += n; - bufSize += n; - } - cbuf = new char[bufSize][size.width]; - abuf = new int[bufSize][size.width]; - } else { - offset = n; - cbuf = charArray; - abuf = charAttributes; - } - /* - * copy anything from the top of the buffer (+offset) to the new top - * up to the screenBase. - */ - if(oldBase > 0) - { - System.arraycopy(charArray, offset, - cbuf, 0, - oldBase - offset); - System.arraycopy(charAttributes, offset, - abuf, 0, - oldBase - offset); - } - /* - * copy anything from the top of the screen (screenBase) up to the - * topMargin to the new screen - */ - if(top > 0) - { - System.arraycopy(charArray, oldBase, - cbuf, screenBase, - top); - System.arraycopy(charAttributes, oldBase, - abuf, screenBase, - top); - } - /* - * copy anything from the topMargin up to the amount of lines inserted - * to the gap left over between scrollback buffer and screenBase - */ - if(oldBase > 0) { - System.arraycopy(charArray, oldBase + top, - cbuf, oldBase - offset, - n); - System.arraycopy(charAttributes, oldBase + top, - abuf, oldBase - offset, - n); - } - /* - * copy anything from topMargin + n up to the line linserted to the - * topMargin - */ - System.arraycopy(charArray, oldBase + top + n, - cbuf, screenBase + top, - l - top - (n - 1)); - System.arraycopy(charAttributes, oldBase + top + n, - abuf, screenBase + top, - l - top - (n - 1)); - /* - * copy the all lines next to the inserted to the new buffer - */ - if(l < size.height - 1) - { - System.arraycopy(charArray, oldBase + l + 1, - cbuf, screenBase + l + 1, - (size.height - 1) - l); - System.arraycopy(charAttributes, oldBase + l + 1, - abuf, screenBase + l + 1, - (size.height - 1) - l); - } - } catch(ArrayIndexOutOfBoundsException e) { - System.err.println("*** Error while scrolling up:"); - System.err.println("--- BEGIN STACKTRACE ---"); - e.printStackTrace(); - System.err.println("--- END STACKTRACE ---"); - System.err.println("bufSize="+bufSize+", maxBufSize="+maxBufSize); - System.err.println("top="+top+", bottom="+bottom); - System.err.println("n="+n+", l="+l); - System.err.println("screenBase="+screenBase+", windowBase="+windowBase); - System.err.println("oldBase="+oldBase); - System.err.println("size.width="+size.width+", size.height="+size.height); - System.err.println("abuf.length="+abuf.length+", cbuf.length="+cbuf.length); - System.err.println("*** done dumping debug information"); - } - - for(int i = 0; i < n; i++) - { - cbuf[(screenBase + l) + (scrollDown ? i : -i) ] = new char[size.width]; - abuf[(screenBase + l) + (scrollDown ? i : -i) ] = new int[size.width]; - } - - charArray = cbuf; - charAttributes = abuf; - - if(scrollDown) - markLine(l, bottom - l + 1); - else - markLine(top, l - top + 1); - - if(scrollBar != null) - scrollBar.setValues(windowBase, size.height, 0, bufSize); - - screenLocked = false; - } - - /** - * Delete a line at a specific position. Subsequent lines will be scrolled - * up to fill the space and a blank line is inserted at the end of the - * screen. - * @param l the y-coordinate to insert the line - * @see #deleteLine - */ - public void deleteLine(int l) - { - l = checkBounds(l, 0, size.height - 1); - - int bottom = (l>bottomMargin?size.height-1: - (l<topMargin?topMargin:bottomMargin+1)); - System.arraycopy(charArray, screenBase + l + 1, - charArray, screenBase + l, bottom - l -1 ); - System.arraycopy(charAttributes, screenBase + l + 1, - charAttributes, screenBase + l, bottom - l -1); - charArray[screenBase + bottom - 1] = new char[size.width]; - charAttributes[screenBase + bottom - 1] = new int[size.width]; - markLine(l, bottom - l); - } - - - /** - * Delete a rectangular portion of the screen. - * You need to call redraw() to update the screen. - * @param c x-coordinate (column) - * @param l y-coordinate (row) - * @param w with of the area in characters - * @param h height of the area in characters - * @see #deleteChar - * @see #deleteLine - * @see redraw - */ - public void deleteArea(int c, int l, int w, int h) - { - c = checkBounds(c, 0, size.width - 1); - l = checkBounds(l, 0, size.height - 1); - - char cbuf[] = new char[w]; - int abuf[] = new int[w]; - - for(int i = 0; i < h && l + i < size.height; i++) - { - System.arraycopy(cbuf, 0, charArray[screenBase + l + i], c, w); - System.arraycopy(abuf, 0, charAttributes[screenBase + l + i], c, w); - } - markLine(l, h); - } - - /** - * Puts the cursor at the specified position. - * @param c column - * @param l line - */ - public void setCursorPos(int c, int l) - { - c = checkBounds(c, 0, size.width - 1); - l = checkBounds(l, 0, size.height - 1); - markLine(cursorY, 1); - cursorX = (c < size.width ? c : size.width); - cursorY = (l < size.height ? l : size.height); - markLine(l, 1); - } - - /** - * Get the current cursor position. - * @see java.awt.Dimension - */ - public Dimension getCursorPos() - { - return new Dimension(cursorX, cursorY); - } - - /** - * Set the top scroll margin for the screen. If the current bottom margin - * is smaller it will become the top margin and the line will become the - * bottom margin. - * @param l line that is the margin - */ - public void setTopMargin(int l) - { - if(l > bottomMargin) - { - topMargin = bottomMargin; - bottomMargin = l; - } - else - topMargin = l; - if(topMargin < 0) topMargin = 0; - if(bottomMargin > size.height - 1) bottomMargin = size.height - 1; - } - - /** - * Get the top scroll margin. - */ - public int getTopMargin() - { - return topMargin; - } - - /** - * Set the bottom scroll margin for the screen. If the current top margin - * is bigger it will become the bottom margin and the line will become the - * top margin. - * @param l line that is the margin - */ - public void setBottomMargin(int l) - { - if(l < topMargin) - { - bottomMargin = topMargin; - topMargin = l; - } - else - bottomMargin = l; - if(topMargin < 0) topMargin = 0; - if(bottomMargin > size.height - 1) bottomMargin = size.height - 1; - } - - /** - * Get the bottom scroll margin. - */ - public int getBottomMargin() - { - return bottomMargin; - } - - /** - * Set scrollback buffer size. - * @param amount new size of the buffer - */ - public void setBufferSize(int amount) - { - screenLocked = true; - - if(amount < size.height) amount = size.height; - if(amount < maxBufSize) - { - char cbuf[][] = new char[amount][size.width]; - int abuf[][] = new int[amount][size.width]; - System.arraycopy(charArray, bufSize - amount, cbuf, 0, amount); - System.arraycopy(charAttributes, bufSize - amount, abuf, 0, amount); - charArray = cbuf; - charAttributes = abuf; - } - maxBufSize = amount; - - screenLocked = false; - - repaint(); - } - - /** - * Retrieve current scrollback buffer size. - * @see #setBufferSize - */ - public int getBufferSize() - { - return bufSize; - } - - /** - * Retrieve maximum buffer Size. - * @see #getBufferSize - */ - public int getMaxBufferSize() - { - return maxBufSize; - } - - /** - * Set the current window base. This allows to view the scrollback buffer. - * @param line the line where the screen window starts - * @see setBufferSize - * @see getBufferSize - */ - public void setWindowBase(int line) - { - if(line > screenBase) line = screenBase; - else if(line < 0) line = 0; - windowBase = line; - repaint(); - } - - /** - * Get the current window base. - * @see setWindowBase - */ - public int getWindowBase() - { - return windowBase; - } - - /** - * Change the size of the screen. This will include adjustment of the - * scrollback buffer. - * @param columns width of the screen - * @param columns height of the screen - */ - public void setWindowSize(int width, int height) - { - char cbuf[][]; - int abuf[][]; - int bsize = bufSize; - - if(width < 1 || height < 1) return; - - screenLocked = true; - - super.update(getGraphics()); - - if(height > maxBufSize) - maxBufSize = height; - if(height > bufSize) - { - bufSize = height; - screenBase = 0; - windowBase = 0; - } - - cbuf = new char[bufSize][width]; - abuf = new int[bufSize][width]; - - for(int i = 0; i < bsize && i < bufSize; i++) - { - System.arraycopy(charArray[i], 0, cbuf[i], 0, - width < size.width ? width : size.width); - System.arraycopy(charAttributes[i], 0, abuf[i], 0, - width < size.width ? width : size.width); - } - charArray = cbuf; - charAttributes = abuf; - size = new Dimension(width, height); - topMargin = 0; - bottomMargin = height - 1; - update = new boolean[height + 1]; - for(int i = 0; i <= height; i++) update[i] = true; - screenLocked = false; - } - - /** - * Set the strategy when window is resized. - * RESIZE_FONT is default. - * @param strategy the strategy - * @see #RESIZE_NONE - * @see #RESIZE_FONT - * @see #RESIZE_SCREEN - */ - public void setResizeStrategy(int strategy) - { - resizeStrategy = strategy; - } - - /** - * Get amount of rows on the screen. - */ - public int getRows() { return size.height; } - - /** - * Get amount of columns on the screen. - */ - public int getColumns() { return size.width; } - - /** - * Set the border thickness and the border type. - * @param thickness border thickness in pixels, zero means no border - * @param raised a boolean indicating a raised or embossed border - */ - public void setBorder(int thickness, boolean raised) - { - if(thickness == 0) insets = null; - else insets = new Insets(thickness+1, thickness+1, - thickness+1, thickness+1); - this.raised = raised; - } - - /** - * Set the scrollbar position. valid values are "East" or "West". - * @param position the position of the scrollbar - */ - public void setScrollbar(String position) - { - add(scrollBar = new Scrollbar()); - scrollBar.setValues(windowBase, size.height, 0, bufSize - size.height); - scrBarPos = position; - } - - /** - * Mark lines to be updated with redraw(). - * @param l starting line - * @param n amount of lines to be updated - * @see #redraw - */ - public void markLine(int l, int n) - { - l = checkBounds(l, 0, size.height - 1); - for(int i = 0; i < n && l + i < size.height; i++) - update[l + i + 1] = true; - } - - /** - * Redraw marked lines. - * @see #markLine - */ - public void redraw() - { - update[0] = true; - repaint(); - } - - /** - * Update the display. to reduce flashing we have overridden this method. - */ - public void update(Graphics g) - { - paint(g); - } - - /** - * Paint the current screen. All painting is done here. Only lines that have - * changed will be redrawn! - */ - public synchronized void paint(Graphics g) - { - if(screenLocked) return; - int xoffset = (super.size().width - size.width * charWidth - - (scrollBar != null ? 15 : 0)) / 2; - int yoffset = (super.size().height - size.height * charHeight) / 2; - - Color fg = color[COLOR_FG_STD]; - Color bg = color[COLOR_BG_STD]; - - if(scrollBar != null && scrBarPos.equals("West")) xoffset += 15; - - g.setFont(normalFont); - - for(int l = 0; l < size.height; l++) - { - if(update[0] && !update[l + 1]) continue; - update[l + 1] = false; - for(int c = 0; c < size.width; c++) - { - int addr = 0; - int currAttr = charAttributes[windowBase + l][c]; - - fg = color[COLOR_FG_STD]; - bg = color[COLOR_BG_STD]; - - // Special handling of BOLD for terminals used on 5ESS - if(((currAttr & BOLD) != 0) && - ((currAttr & COLOR_FG) == 0) && - ((currAttr & COLOR_BG) == 0) ) - { - fg = color[COLOR_FG_BOLD]; - } - - if ((currAttr & COLOR_FG) != 0) { - fg = color[((currAttr & COLOR_FG) >> 3)-1]; - } - if ((currAttr & COLOR_BG) != 0) { - bg = color[((currAttr & COLOR_BG) >> 7)-1]; - } - - if((currAttr & BOLD) != 0) { - if(fg.equals(Color.black)) - fg = Color.gray; - else { - fg = fg.brighter(); - bg = bg.brighter(); - } - } - if((currAttr & INVERT) != 0) { Color swapc = bg; bg=fg;fg=swapc; } - - if (sf.inSoftFont(charArray[windowBase + l][c])) { - g.setColor(bg); - g.fillRect(c * charWidth + xoffset, l * charHeight + yoffset, - charWidth, charHeight); - g.setColor(fg); - sf.drawChar(g,charArray[windowBase + l][c],xoffset+c*charWidth, - l*charHeight+yoffset, charWidth, charHeight); - if((currAttr & UNDERLINE) != 0) - g.drawLine(c * charWidth + xoffset, - (l+1) * charHeight - charDescent / 2 + yoffset, - c * charWidth + charWidth + xoffset, - (l+1) * charHeight - charDescent / 2 + yoffset); - continue; - } - - // determine the maximum of characters we can print in one go - while(c + addr < size.width && - charAttributes[windowBase + l][c + addr] == currAttr && - !sf.inSoftFont(charArray[windowBase + l ][c+addr]) - ) { - if(charArray[windowBase + l][c + addr] < ' ') - charArray[windowBase + l][c + addr] = ' '; - addr++; - } - - // clear the part of the screen we want to change (fill rectangle) - g.setColor(bg); - g.fillRect(c * charWidth + xoffset, l * charHeight + yoffset, - addr * charWidth, charHeight); - - g.setColor(fg); - - // draw the characters - g.drawChars(charArray[windowBase + l], c, addr, - c * charWidth + xoffset, - (l+1) * charHeight - charDescent + yoffset); - - if((currAttr & UNDERLINE) != 0) - g.drawLine(c * charWidth + xoffset, - (l+1) * charHeight - charDescent / 2 + yoffset, - c * charWidth + addr * charWidth + xoffset, - (l+1) * charHeight - charDescent / 2 + yoffset); - - c += addr - 1; - } - } - - // draw cursor - if(screenBase + cursorY >= windowBase && - screenBase + cursorY < windowBase + size.height) - { - g.setColor(color[COLOR_FG_STD]); - g.setXORMode(color[COLOR_BG_STD]); - g.fillRect( cursorX * charWidth + xoffset, - (cursorY + screenBase - windowBase) * charHeight + yoffset, - charWidth, charHeight); - g.setPaintMode(); - } - - if(windowBase <= selectBegin.y || windowBase <= selectEnd.y) { - int beginLine = selectBegin.y - windowBase; - int endLine = selectEnd.y - selectBegin.y; - if(beginLine < 0) { - endLine += beginLine; - beginLine = 0; - } - if(endLine > size.height) endLine = size.height - beginLine; - - g.setXORMode(color[COLOR_BG_STD]); - g.fillRect(selectBegin.x * charWidth + xoffset, - beginLine * charHeight + yoffset, - (endLine == 0 ? (selectEnd.x - selectBegin.x) : - (size.width - selectBegin.x)) - * charWidth, - charHeight); - if(endLine > 1) - g.fillRect(0 + xoffset, - (beginLine + 1) * charHeight + yoffset, - size.width * charWidth, - (endLine - 1) * charHeight); - if(endLine > 0) - g.fillRect(0 + xoffset, - (beginLine + endLine) * charHeight + yoffset, - selectEnd.x * charWidth, - charHeight); - g.setPaintMode(); - } - - if(insets != null) { - g.setColor(getBackground()); - xoffset--; yoffset--; - for(int i = insets.top - 1; i >= 0; i--) - g.draw3DRect(xoffset - i, yoffset - i, - charWidth * size.width + 1 + i * 2, - charHeight * size.height + 1 + i * 2, - raised); - } - - update[0] = false; - } - - private int checkBounds(int value, int lower, int upper) - { - if(value < lower) return lower; - if(value > upper) return upper; - return value; - } - - /** - * Reshape character display according to resize strategy. - * @see #setResizeStrategy - */ - public void reshape(int x, int y, int w, int h) - { - if(debug > 0) - System.err.println("CharDisplay: reshape("+x+","+y+","+w+","+h+")"); - - int xborder = 0, yborder = 0; - - if(insets != null) { - w -= (xborder = insets.left + insets.right); - h -= (yborder = insets.top + insets.bottom); - } - if(scrollBar != null) { w -= 15;} - - Font tmpFont = normalFont; - String fontName = normalFont.getName(); - fm = getFontMetrics(normalFont); - if(fm != null) - { - charWidth = fm.charWidth('@'); - charHeight = fm.getHeight(); - } - - switch(resizeStrategy) - { - case RESIZE_SCREEN: - setWindowSize(w / charWidth, size.height = h / charHeight); - break; - case RESIZE_FONT: - int height = h / size.height; - int width = w / size.width; - - fm = getFontMetrics(normalFont = new Font(fontName, Font.PLAIN, - charHeight)); - - // adapt current font size (from small up to best fit) - if(fm.getHeight() < height || fm.charWidth('@') < width) - do { - fm = getFontMetrics(normalFont = new Font(fontName, Font.PLAIN, - ++charHeight)); - } while(fm.getHeight() < height || - fm.charWidth('@') < width); - - // now check if we got a font that is too large - if(fm.getHeight() > height || fm.charWidth('@') > width) - do { - fm = getFontMetrics(normalFont = new Font(fontName, Font.PLAIN, - --charHeight)); - } while(charHeight > 1 && - (fm.getHeight() > height || - fm.charWidth('@') > width)); - - if(charHeight <= 1) - { - System.err.println("CharDisplay: error during resize, resetting"); - normalFont = tmpFont; - System.err.println("CharDisplay: disabling font/screen resize"); - resizeStrategy = RESIZE_NONE; - } - - setFont(normalFont); - fm = getFontMetrics(normalFont); - charWidth = fm.charWidth('@'); - charHeight = fm.getHeight(); - charDescent = fm.getDescent(); - break; - case RESIZE_NONE: - default: - break; - } - if(debug > 0) - { - System.err.println("CharDisplay: charWidth="+charWidth+", "+ - "charHeight="+charHeight+", "+ - "charDescent="+charDescent); - System.err.println("CharDisplay: "+normalFont+", "+fm); - } - super.reshape(x, y, - w + xborder + (scrollBar != null ? 15 : 0), - h + yborder); - - if(scrollBar != null) { - int xoffset = (super.size().width - size.width * charWidth - 15) / 2; - int yoffset = (super.size().height - size.height * charHeight) / 2; - if(scrBarPos.equals("West")) - scrollBar.reshape(xoffset - (xborder / 2), yoffset - yborder / 2, - 15, size.height * charHeight + yborder); - else - scrollBar.reshape(xoffset + (xborder / 2) + size.width * charWidth, - yoffset - yborder / 2, 15, - size.height * charHeight + yborder); - } - } - - /** - * Return the real size in points of the character display. - * @return Dimension the dimension of the display - * @see java.awt.Dimension - */ - public Dimension size() - { - int xborder = 0, yborder = 0; - if(insets != null) { - xborder = insets.left + insets.right; - yborder = insets.top + insets.bottom; - } - if(scrollBar != null) xborder += 15; - - return new Dimension(size.width * charWidth + xborder, - size.height * charHeight + yborder); - } - - /** - * Return the preferred Size of the character display. - * This turns out to be the actual size. - * @return Dimension dimension of the display - * @see size - */ - public Dimension preferredSize() - { - return size(); - } - - /** - * The insets of the character display define the border. - * @return Insets border thickness in pixels - */ - public Insets insets() - { - return insets == null ? super.insets() : insets; - } - - /** - * Handle mouse events for copy & paste - * @param evt the event that occured - * @return boolean true if action was taken - * @see java.awt.Event - */ - public boolean handleEvent(Event evt) - { - // handle scrollbar events - if(evt != null && evt.target == scrollBar && evt.arg != null) { - int val = ((Integer)evt.arg).intValue(); - setWindowBase(val); - return true; - } - - if(evt.id == Event.MOUSE_DOWN || evt.id == Event.MOUSE_UP || - evt.id == Event.MOUSE_DRAG) { - int xoffset = (super.size().width - size.width * charWidth) / 2; - int yoffset = (super.size().height - size.height * charHeight) / 2; - switch(evt.id) { - case Event.MOUSE_DOWN: - selectBegin.x = (evt.x - xoffset) / charWidth; - selectBegin.y = (evt.y - yoffset) / charHeight + windowBase; - selectEnd.x = selectBegin.x; - selectEnd.y = selectBegin.y; - if(selectFrame != null) selectFrame.hide(); - break; - case Event.MOUSE_UP: - case Event.MOUSE_DRAG: - int x = (evt.x - xoffset) / charWidth; - int y = (evt.y - yoffset) / charHeight + windowBase; - int oldx = selectEnd.x, oldy = selectEnd.y; - - if((x < selectBegin.x && y < selectBegin.y) && - (x < selectEnd.x && y < selectEnd.y)) { - selectBegin.x = x; - selectBegin.y = y; - } else { - selectEnd.x = x; - selectEnd.y = y; - } - - if(evt.id == Event.MOUSE_UP) { - if(selectBegin.x == selectEnd.x && - selectBegin.y == selectEnd.y) { - repaint(); - return true; - } - String tmp = ""; - // fix end.x and end.y, they can get over the border - if (selectEnd.x < 0) selectEnd.x = 0; - if (selectEnd.y < 0) selectEnd.y = 0; - if (selectEnd.y >= charArray.length) { - selectEnd.y = charArray.length-1; - } - if (selectEnd.x >= charArray[0].length) { - selectEnd.x = charArray[0].length-1; - } - for(int l = selectBegin.y; l <= selectEnd.y; l++) - if(l == selectBegin.y) - tmp = (new String(charArray[l])).substring(selectBegin.x) + "\n"; - else if(l == selectEnd.y) - tmp += (new String(charArray[l])).substring(0, selectEnd.x); - else tmp += new String(charArray[l]) + "\n"; - if(selectFrame == null) { - - /* for jdk-1.1 - String s=(String) ((StringSelection)this.getToolkit(). - getSystemClipboard(). - getContents(this)). - getTransferData(DataFlavor.stringFlavor); - System.out.println(s); - */ - selectFrame = new Frame("Pasteboard"); - selection = new TextArea(); - selection.setFont(normalFont); - selectFrame.add("Center", selection); - selectFrame.add("South", new Label("Click on the terminal window"+ - " to hide!")); - selectFrame.pack(); - } - selection.setText(tmp); - selectFrame.show(); - selection.selectAll(); - repaint(); - } else - if(oldx != x || oldy != y) repaint(); - break; - } - return true; - } - return false; - } -} diff --git a/web/root/telnet/display/SoftFont.class b/web/root/telnet/display/SoftFont.class deleted file mode 100644 index 327e2572416d75f327814f185071c176d60282d3..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/display/SoftFont.class and /dev/null differ diff --git a/web/root/telnet/display/SoftFont.java b/web/root/telnet/display/SoftFont.java deleted file mode 100644 index 961799049c5f283a8e018937b93509dd70970be9..0000000000000000000000000000000000000000 --- a/web/root/telnet/display/SoftFont.java +++ /dev/null @@ -1,1005 +0,0 @@ -/* - * SoftFont -- a unicode softfont displayer - * -- - * $Id: SoftFont.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -package display; - -import java.awt.*; -import java.util.*; -/**********************************************/ -/* */ -/* Font file generated by cpi2fnt */ -/* */ -/**********************************************/ - -public class SoftFont { - final static private char SF_BITMAP = 0; - final static private char SF_FILLRECT = 1; - - - final static private char SF_CHAR = 0; - final static private char SF_WIDTH= 1; - final static private char SF_HEIGHT= 2; - final static private char SF_TYPE = 3; - final static private char SF_DATA = 4; - java.util.Hashtable font; - /** - * softfont characterdata - */ - private static char[][] fontdata = { - - {0x01,8,8,SF_BITMAP, /* 1 0x01 '^A' */ - 0x7e, /* 01111110 */ - 0x81, /* 10000001 */ - 0xa5, /* 10100101 */ - 0x81, /* 10000001 */ - 0xbd, /* 10111101 */ - 0x99, /* 10011001 */ - 0x81, /* 10000001 */ - 0x7e, /* 01111110 */ - },{ 0x02,8,8,SF_BITMAP,/* 2 0x02 '^B' */ - 0x7e, /* 01111110 */ - 0xff, /* 11111111 */ - 0xdb, /* 11011011 */ - 0xff, /* 11111111 */ - 0xc3, /* 11000011 */ - 0xe7, /* 11100111 */ - 0xff, /* 11111111 */ - 0x7e, /* 01111110 */ - },{ 0x03,8,8,SF_BITMAP,/* 3 0x03 '^C' */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - },{ 0x04,8,8,SF_BITMAP,/* 4 0x04 '^D' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - },{ 0x05,8,8,SF_BITMAP,/* 5 0x05 '^E' */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - },{ 0x06,8,8,SF_BITMAP,/* 6 0x06 '^F' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - },{ 0x2666,8,8,SF_BITMAP,/* 9830 0x2666 BLACK DIAMOND */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x07,8,8,SF_BITMAP,/* 7 0x07 '^G' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x08,8,8,SF_BITMAP,/* 8 0x08 '^H' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xe7, /* 11100111 */ - 0xc3, /* 11000011 */ - 0xc3, /* 11000011 */ - 0xe7, /* 11100111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - },{ 0x09,8,8,SF_BITMAP,/* 9 0x09 '^I' */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x42, /* 01000010 */ - 0x42, /* 01000010 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - },{ 0x0a,8,8,SF_BITMAP,/* 10 0x0a '^J' */ - 0xff, /* 11111111 */ - 0xc3, /* 11000011 */ - 0x99, /* 10011001 */ - 0xbd, /* 10111101 */ - 0xbd, /* 10111101 */ - 0x99, /* 10011001 */ - 0xc3, /* 11000011 */ - 0xff, /* 11111111 */ - },{ 0x0b,8,8,SF_BITMAP,/* 11 0x0b '^K' */ - 0x0f, /* 00001111 */ - 0x07, /* 00000111 */ - 0x0f, /* 00001111 */ - 0x7d, /* 01111101 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x78, /* 01111000 */ - },{ 0x0c,8,8,SF_BITMAP,/* 12 0x0c '^L' */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - },{ 0x0d,8,8,SF_BITMAP,/* 13 0x0d '^M' */ - 0x3f, /* 00111111 */ - 0x33, /* 00110011 */ - 0x3f, /* 00111111 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x70, /* 01110000 */ - 0xf0, /* 11110000 */ - 0xe0, /* 11100000 */ - },{ 0x0e,8,8,SF_BITMAP,/* 14 0x0e '^N' */ - 0x7f, /* 01111111 */ - 0x63, /* 01100011 */ - 0x7f, /* 01111111 */ - 0x63, /* 01100011 */ - 0x63, /* 01100011 */ - 0x67, /* 01100111 */ - 0xe6, /* 11100110 */ - 0xc0, /* 11000000 */ - },{ 0x0f,8,8,SF_BITMAP,/* 15 0x0f '^O' */ - 0x18, /* 00011000 */ - 0xdb, /* 11011011 */ - 0x3c, /* 00111100 */ - 0xe7, /* 11100111 */ - 0xe7, /* 11100111 */ - 0x3c, /* 00111100 */ - 0xdb, /* 11011011 */ - 0x18, /* 00011000 */ - },{ 0x10,8,8,SF_BITMAP,/* 16 0x10 '^P' */ - 0x80, /* 10000000 */ - 0xe0, /* 11100000 */ - 0xf8, /* 11111000 */ - 0xfe, /* 11111110 */ - 0xf8, /* 11111000 */ - 0xe0, /* 11100000 */ - 0x80, /* 10000000 */ - 0x00, /* 00000000 */ - },{ 0x11,8,8,SF_BITMAP,/* 17 0x11 '^Q' */ - 0x02, /* 00000010 */ - 0x0e, /* 00001110 */ - 0x3e, /* 00111110 */ - 0xfe, /* 11111110 */ - 0x3e, /* 00111110 */ - 0x0e, /* 00001110 */ - 0x02, /* 00000010 */ - 0x00, /* 00000000 */ - },{ 0x12,8,8,SF_BITMAP,/* 18 0x12 '^R' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - },{ 0x13,8,8,SF_BITMAP,/* 19 0x13 '^S' */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - },{ 0x14,8,8,SF_BITMAP,/* 20 0x14 '^T' */ - 0x7f, /* 01111111 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7b, /* 01111011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x00, /* 00000000 */ - },{ 0x15,8,8,SF_BITMAP,/* 21 0x15 '^U' */ - 0x3e, /* 00111110 */ - 0x61, /* 01100001 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x86, /* 10000110 */ - 0x7c, /* 01111100 */ - },{ 0x16,8,8,SF_BITMAP,/* 22 0x16 '^V' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - },{ 0x17,8,8,SF_BITMAP,/* 23 0x17 '^W' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - },{ 0x18,8,8,SF_BITMAP,/* 24 0x18 '^X' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - },{ 0x19,8,8,SF_BITMAP,/* 25 0x19 '^Y' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - },{ 0x1a,8,8,SF_BITMAP,/* 26 0x1a '^Z' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x1b,8,8,SF_BITMAP,/* 27 0x1b '^[' */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x1c,8,8,SF_BITMAP,/* 28 0x1c '^\' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x1d,8,8,SF_BITMAP,/* 29 0x1d '^]' */ - 0x00, /* 00000000 */ - 0x24, /* 00100100 */ - 0x66, /* 01100110 */ - 0xff, /* 11111111 */ - 0x66, /* 01100110 */ - 0x24, /* 00100100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x1e,8,8,SF_BITMAP,/* 30 0x1e '^^' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x1f,8,8,SF_BITMAP,/* 31 0x1f '^_' */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x7f,8,8,SF_BITMAP,/* 127 0x7f '' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - },{ 0x2591,8,8,SF_BITMAP,/* LIGHT SHADE */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - },{ 0x2592,8,8,SF_BITMAP,/* MEDIUM SHADE */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - },{ 0x2593,8,8,SF_BITMAP,/* DARK SHADE */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - },{ 0x221a,8,8,SF_BITMAP,/* SQUARE ROOT */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - },{ 0x2320,8,8,SF_BITMAP,/* UPPER INTERVAL*/ - 0x0e, /* 00001110 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - },{ 0x25a0,8,8,SF_FILLRECT,/* BLACK SQUARE */ - 0x2244, - /* 00000000 */ - /* 00000000 */ - /* 00111100 */ - /* 00111100 */ - /* 00111100 */ - /* 00111100 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2502,8,8,SF_FILLRECT,/*BOX DRAWINGS LIGHT VERTICAL*/ - 0x3028, - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2524,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT VERTICAL AND LEFT */ - 0x3028, - 0x0431, - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 11111000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2561,8,8,SF_FILLRECT,/*BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE*/ - 0x3028, - 0x0231, - 0x0431, - /* 00011000 */ - /* 00011000 */ - /* 11111000 */ - /* 00011000 */ - /* 11111000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2562,8,8,SF_FILLRECT,/* BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE */ - 0x2028, - 0x5028, - 0x0421, - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 11110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2556,8,8,SF_FILLRECT,/* BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE */ - 0x0471, - 0x2523, - 0x5523, - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 11111110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2555,8,8,SF_FILLRECT,/* BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE */ - 0x3226, - 0x0231, - 0x0431, - /* 00000000 */ - /* 00000000 */ - /* 11111000 */ - /* 00011000 */ - /* 11111000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2563,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE VERTICAL AND LEFT*/ - 0x2022, - 0x0221, - 0x0421, - 0x2424, - 0x5028, - /* 00110110 */ - /* 00110110 */ - /* 11110110 */ - /* 00000110 */ - /* 11110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2551,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE VERTICAL */ - 0x2028, - 0x5028, - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2557,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE DOWN AND LEFT */ - 0x0271, - 0x5325, - 0x0441, - 0x2523, - /* 00000000 */ - /* 00000000 */ - /* 11111110 */ - /* 00000110 */ - /* 11110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x255d,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE UP AND LEFT */ - 0x2022, - 0x0241, - 0x5025, - 0x0451, - /* 00110110 */ - /* 00110110 */ - /* 11110110 */ - /* 00000110 */ - /* 11111110 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x255c,8,8,SF_FILLRECT,/* BOX DRAWINGS UP DOUBLE AND LEFT SINGLE */ - 0x2024, - 0x5024, - 0x0471, - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 11111110 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x255b,8,8,SF_FILLRECT,/* BOX DRAWINGS UP SINGLE AND LEFT DOUBLE */ - 0x3025, - 0x0231, - 0x0431, - /* 00011000 */ - /* 00011000 */ - /* 11111000 */ - /* 00011000 */ - /* 11111000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2510,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT DOWN AND LEFT */ - 0x0451, - 0x3523, - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 11111000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2514,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT UP AND RIGHT */ - 0x3025, - 0x5431, - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2534,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT UP AND HORIZONTAL */ - 0x3024, - 0x0481, - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 11111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x252c,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ - 0x0481, - 0x3523, - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 11111111 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x251c,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ - 0x3028, - 0x5431, - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011111 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2500,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT HORIZONTAL */ - 0x0481, - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 11111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x253c,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ - 0x3028, - 0x0481, - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 11111111 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x255e,8,8,SF_FILLRECT,/* BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE */ - 0x3028, - 0x5231, - 0x5431, - /* 00011000 */ - /* 00011000 */ - /* 00011111 */ - /* 00011000 */ - /* 00011111 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x255f,8,8,SF_FILLRECT,/* BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE */ - 0x2028, - 0x5028, - 0x7411, - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110111 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x255a,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE UP AND RIGHT */ - 0x2025, - 0x5023, - 0x7211, - 0x4441, - /* 00110110 */ - /* 00110110 */ - /* 00110111 */ - /* 00110000 */ - /* 00111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2554,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE DOWN AND RIGHT */ - 0x2261, - 0x2325, - 0x5424, - 0x7411, - /* 00000000 */ - /* 00000000 */ - /* 00111111 */ - /* 00110000 */ - /* 00110111 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2569,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE UP AND HORIZONTAL */ - 0x2022, - 0x0241, - 0x5022, - 0x5231, - 0x0481, - /* 00110110 */ - /* 00110110 */ - /* 11110111 */ - /* 00000000 */ - /* 11111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2566,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL */ - 0x0281, - 0x0441, - 0x2523, - 0x5431, - 0x5523, - /* 00000000 */ - /* 00000000 */ - /* 11111111 */ - /* 00000000 */ - /* 11110111 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2560,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE VERTICAL AND RIGHT */ - 0x2028, - 0x5022, - 0x5231, - 0x5431, - 0x5623, - /* 00110110 */ - /* 00110110 */ - /* 00110111 */ - /* 00110000 */ - /* 00110111 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2550,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE HORIZONTAL */ - 0x0281, - 0x0481, - /* 00000000 */ - /* 00000000 */ - /* 11111111 */ - /* 00000000 */ - /* 11111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x256c,8,8,SF_FILLRECT,/* BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL */ - 0x2022, - 0x0241, - 0x5022, - 0x5231, - 0x0441, - 0x2523, - 0x5431, - 0x5523, - /* 00110110 */ - /* 00110110 */ - /* 11110111 */ - /* 00000000 */ - /* 11110111 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2567,8,8,SF_FILLRECT,/* BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE */ - 0x3022, - 0x0281, - 0x0481, - /* 00011000 */ - /* 00011000 */ - /* 11111111 */ - /* 00000000 */ - /* 11111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2568,8,8,SF_FILLRECT,/* BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE */ - 0x2024, - 0x5024, - 0x0481, - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 11111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2564,8,8,SF_FILLRECT,/* BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE */ - 0x0281, - 0x0481, - 0x3523, - /* 00000000 */ - /* 00000000 */ - /* 11111111 */ - /* 00000000 */ - /* 11111111 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2565,8,8,SF_FILLRECT,/* BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE */ - 0x0481, - 0x2523, - 0x5523, - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 11111111 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x2559,8,8,SF_FILLRECT,/* BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE */ - 0x2024, - 0x5024, - 0x2461, - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2558,8,8,SF_FILLRECT,/* BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE */ - 0x3025, - 0x5231, - 0x5431, - /* 00011000 */ - /* 00011000 */ - /* 00011111 */ - /* 00011000 */ - /* 00011111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x2552,8,8,SF_FILLRECT,/* BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE */ - 0x3226, - 0x5231, - 0x5431, - /* 00000000 */ - /* 00000000 */ - /* 00011111 */ - /* 00011000 */ - /* 00011111 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2553,8,8,SF_FILLRECT,/* BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE */ - 0x2461, - 0x2523, - 0x5523, - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00111111 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x256b,8,8,SF_FILLRECT,/* BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE */ - 0x2028, - 0x5028, - 0x0481, - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - /* 11111111 */ - /* 00110110 */ - /* 00110110 */ - /* 00110110 */ - },{ 0x256a,8,8,SF_FILLRECT,/* BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE */ - 0x3028, - 0x0281, - 0x0481, - /* 00011000 */ - /* 00011000 */ - /* 11111111 */ - /* 00011000 */ - /* 11111111 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2518,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT UP AND LEFT */ - 0x3025, - 0x0431, - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - /* 11111000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - },{ 0x250c,8,8,SF_FILLRECT,/* BOX DRAWINGS LIGHT DOWN AND RIGHT */ - 0x3451, - 0x3523, - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00011111 */ - /* 00011000 */ - /* 00011000 */ - /* 00011000 */ - },{ 0x2588,8,8,SF_FILLRECT,/* FULL BLOCK */ - 0x0088, - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - },{ 0x2584,8,8,SF_FILLRECT,/* LOWER HALF BLOCK */ - 0x0484, - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - },{ 0x258c,8,8,SF_FILLRECT,/* LEFT HALF BLOCK */ - 0x0048, - /* 11110000 */ - /* 11110000 */ - /* 11110000 */ - /* 11110000 */ - /* 11110000 */ - /* 11110000 */ - /* 11110000 */ - /* 11110000 */ - },{ 0x2590,8,8,SF_FILLRECT,/* RIGHT HALF BLOCK */ - 0x4048, - /* 00001111 */ - /* 00001111 */ - /* 00001111 */ - /* 00001111 */ - /* 00001111 */ - /* 00001111 */ - /* 00001111 */ - /* 00001111 */ - },{ 0x2580,8,8,SF_FILLRECT,/* UPPER HALF BLOCK */ - 0x0084, - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - /* 11111111 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - /* 00000000 */ - }}; - - public SoftFont() { - font = new java.util.Hashtable(); - for (int i=0;i<fontdata.length;i++) - font.put(new Integer(fontdata[i][0]),new Integer(i)); - - } - - public boolean inSoftFont(char c) { - boolean insoftfont; - - insoftfont = (null!=font.get(new Integer(c))); - if (!insoftfont && (int)c>=0x100) { - System.out.println("Character "+((int)c)+" not in softfont"); - } - return insoftfont; - } - - public void drawChar(Graphics g,char c,int x,int y,int cw,int ch) { - double dw,dh; - Object Ientry; - int w,h,entry,i,fontwidth,fontheight; - - Ientry = font.get(new Integer(c)); - if (Ientry == null) - return; - entry = ((Integer)Ientry).intValue(); - fontwidth = fontdata[entry][SF_WIDTH]; - fontheight = fontdata[entry][SF_HEIGHT]; - - dw = cw*1.0/fontwidth; - dh = ch*1.0/fontheight; - - switch (fontdata[entry][SF_TYPE]) { - case SF_BITMAP: - for (h=0;h<fontheight;h++) { - for (w=0;w<fontwidth;w++) { - //FIXME: 8 bit max currently... - if (0!=(fontdata[entry][h+SF_DATA] & (1<<(7-w)))) { - g.fillRect( - x+(int)(w*dw), - y+(int)(h*dh), - ((int)((w+1)*dw))-(int)(w*dw), - ((int)((h+1)*dh))-(int)(h*dh) - ); - } - } - } - break; - case SF_FILLRECT: - i=SF_DATA; - while (i<fontdata[entry].length) { - int xw,xh; - - w=(fontdata[entry][i]&0xF000)>>12; - h=(fontdata[entry][i]&0x0F00)>>8; - xw = (fontdata[entry][i]&0x00F0)>>4; - xh = (fontdata[entry][i]&0x000F); - g.fillRect( - x+(int)(w*dw), - y+(int)(h*dh), - ((int)((w+xw)*dw))-(int)(w*dw), - ((int)((h+xh)*dh))-(int)(h*dh) - ); - i++; - } - break; - default: - break; - } - } -} diff --git a/web/root/telnet/display/Terminal.class b/web/root/telnet/display/Terminal.class deleted file mode 100644 index 306194a18f27bca5ea14723f54b056893f459902..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/display/Terminal.class and /dev/null differ diff --git a/web/root/telnet/display/Terminal.java b/web/root/telnet/display/Terminal.java deleted file mode 100644 index 30cb6d0a4efbe59d69e07f9e13997419a064d5f8..0000000000000000000000000000000000000000 --- a/web/root/telnet/display/Terminal.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Terminal -- Terminal emulation (abstract class) - * -- - * $Id: Terminal.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Wed Mar 5 11:27:13 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package display; - -import java.awt.Panel; -import java.awt.Dimension; - -/** - * Terminal is an abstract emulation class. - * It contains a character display. - * - * @version $Id: Terminal.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - */ -public abstract class Terminal extends Panel -{ - /** - * Get the specific parameter info for the emulation. - * @see java.applet.Applet - */ - public abstract String[][] getParameterInfo(); - - /** - * Put a character on the screen. The method has to see if it is - * a special character that needs to be handles special. - * @param c the character - * @see #putString - */ - public abstract void putChar(char c); - - /** - * Put a character on the screen. The method has to parse the string - * may handle special characters. - * @param s the string - * @see #putString - */ - public abstract void putString(String s); - - /** - * Return the current size of the terminal in characters. - */ - public abstract Dimension getSize(); - - /** - * Return actual terminal type identifier. - */ - public abstract String getTerminalType(); -} diff --git a/web/root/telnet/display/TerminalHost.class b/web/root/telnet/display/TerminalHost.class deleted file mode 100644 index 5fb34238c0b8d2e1d9ed6b08ea0b9bd0fc818542..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/display/TerminalHost.class and /dev/null differ diff --git a/web/root/telnet/display/TerminalHost.java b/web/root/telnet/display/TerminalHost.java deleted file mode 100644 index 29bdf6c0f354896e53d9edbb564a8f54afd1cecc..0000000000000000000000000000000000000000 --- a/web/root/telnet/display/TerminalHost.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * TerminalHost -- this interface defines the remote end of the connection - * from our Terminal to the Host (virtual). - * -- - * $Id: TerminalHost.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Wed Mar 5 12:01:31 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package display; - -/** - * TerminalHost is an interface for the remote (virtual) end of our connection - * to the host computer we are connected to. - * @version $Id: TerminalHost.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L Jugel, Marcus Mei�ner - */ -public interface TerminalHost -{ - /** - * Send a string to the host and return if it was received successfully. - * @param s the string to send - * @return True for successful receivement. - */ - public boolean send(String s); -} - diff --git a/web/root/telnet/display/vt320.class b/web/root/telnet/display/vt320.class deleted file mode 100644 index ee8e4b86e851d2554b71d612cca520e7e8a38ab2..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/display/vt320.class and /dev/null differ diff --git a/web/root/telnet/display/vt320.java b/web/root/telnet/display/vt320.java deleted file mode 100644 index 81ebb13331ea66f5159afc64eefcb7d2176c85e2..0000000000000000000000000000000000000000 --- a/web/root/telnet/display/vt320.java +++ /dev/null @@ -1,2021 +0,0 @@ -/* - * vt320 -- a DEC VT320 Terminal emulation - * -- - * $Id: vt320.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package display; - -import java.awt.Scrollbar; -import java.awt.Event; -import java.awt.Dimension; -import java.awt.BorderLayout; -import java.awt.FlowLayout; -import java.util.Vector; - -import java.applet.Applet; - -/** - * A DEC VT320 Terminal Emulation (includes VT100/220 and ANSI). - * - * The terminal emulation accesses the applet parameters to configure itself. - * The following parameters may be set. Default values are written in - * <I>italics</I> and other possible values are <B>bold</B>. - * <DL> - * <DT><TT><PARAM NAME="Fx" VALUE="<I>functionkeytext</I>"></TT> - * <DD>Sets the string sent when the function key Fx (x between 1 und 20) - * is pressed. - * <DT><TT><PARAM NAME="VTcolumns" VALUE="<I>80</I>"></TT> - * <DD>Sets the columns of the terminal initially. If the parameter - * VTresize is set to <B>screen</B> this may change, else it is fixed. - * <DT><TT><PARAM NAME="VTrows" VALUE="<I>24</I>"></TT> - * <DD>Sets the rows of the terminal initially. If the parameter - * value of VTresize <B>screen</B> this may change! - * <DT><TT><PARAM NAME="VTfont" VALUE="<I>Courier</I>"></TT> - * <DD>Sets the font to be used for the terminal. It is recommended to - * use <I>Courier</I> or at least a fixed width font. - * <DT><TT><PARAM NAME="VTfontsize" VALUE="<I>14</I>"></TT> - * <DD>Sets the font size for the terminal. If the parameter - * value of VTresize is set to <B>font</B> this may change! - * <DT><TT><PARAM NAME="VTresize" VALUE="<I>font</I>"></TT> - * <DD>This parameter determines what the terminal should do if the window - * is resized. The default setting <I><B>font</B></I> will result in - * resizing the font until is matches the window best. Other possible - * values are <B>none</B> or <B>screen</B>. <B>none</B> will let nothing - * happen and <B>screen</B> will let the display try to change the - * amount of rows and columns to match the window best. - * <DT><TT><PARAM NAME="VTscrollbar" VALUE="<I>false</I>"></TT> - * <DD>Setting this parameter to <B>true</B> will add a scrollbar west to - * the terminal. Other possible values include <B>left</B> to put the - * scrollbar on the left side of the terminal and <B>right</B> to put it - * explicitely to the right side. - * <DT><TT><PARAM NAME="VTid" VALUE="<I>vt320</I>"></TT> - * <DD>This parameter will override the terminal id <I>vt320</I>. It may - * be used to determine special terminal abilities of VT Terminals. - * <DT><TT><PARAM NAME="VTbuffer" VALUE="<I>xx</I>"></TT> - * <DD>Initially this parameter is the same as the VTrows parameter. It - * cannot be less than the amount of rows on the display. It determines - * the available scrollback buffer. - * <DT><TT><PARAM NAME="VTcharset" VALUE="<I>none</I>"></TT> - * <DD>Setting this parameter to <B>ibm</B> will enable mapping of ibm - * characters (as used in PC BBS systems) to UNICODE characters. Note - * that those special characters probably won't show on UNIX systems - * due to lack in X11 UNICODE support. - * <DT><TT><PARAM NAME="VTvms" VALUE="<I>false</I>"></TT> - * <DD>Setting this parameter to <B>true</B> will change the Backspace key - * into a delete key, cause the numeric keypad keys to emit VT100 - * codes when Ctrl is pressed, and make other VMS-important keyboard - * definitions. - * <DT><TT><PARAM NAME="F<I>nr</I>" VALUE="<I>string</I>"></TT> - * <DD>Function keys from <I>F1</I> to <I>F20</I> are programmable. You can - * install any possible string including special characters, such as - * <TABLE BORDER> - * <TR><TD><TT>\e</TT></TD><TD>Escape</TD> - * <TR><TD><TT>\b</TT></TD><TD>Backspace</TD> - * <TR><TD><TT>\n</TT></TD><TD>Newline</TD> - * <TR><TD><TT>\r</TT></TD><TD>Return</TD> - * <TR><TD><TT>\xxxx</TT></TD><TD>Character xxxx (decimal)</TD> - * </TABLE> - * <DT><TT><PARAM NAME="CF<I>nr</I>" VALUE="<I>string</I>"></TT> - * <DD>Function keys (with the Control-key pressed) from <I>CF1</I> to <I>CF20</I> are programmable too. - * <DT><TT><PARAM NAME="SF<I>nr</I>" VALUE="<I>string</I>"></TT> - * <DD>Function keys (with the Shift-key pressed) from <I>SF1</I> to <I>SF20</I> are programmable too. - * <DT><TT><PARAM NAME="AF<I>nr</I>" VALUE="<I>string</I>"></TT> - * <DD>Function keys (with the Alt-key pressed) from <I>AF1</I> to <I>AF20</I> are programmable too. - * </DL> - * @version $Id: vt320.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei?ner - */ -public class vt320 extends Terminal implements TerminalHost -{ - /** - * Return the version of the terminal emulation and its display. - */ - public String toString() { return "$Id: vt320.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ "+display.version; } - - // the input handler takes the keyboard input from us. - private TerminalHost host = this; - - // due to a bug with Windows we need a keypress cache - private int pressedKey = ' '; - private long pressedWhen = ' '; - - // The character display - private CharDisplay display; - private static int debug = 0; - private String terminalID = "vt320"; - - // X - COLUMNS, Y - ROWS - int R,C; - int Sc,Sr,Sa; - int attributes = 0; - int insertmode = 0; - int statusmode = 0; - int vt52mode = 0; - int normalcursor = 0; - boolean moveoutsidemargins = true; - boolean sendcrlf = true; - - private boolean useibmcharset = false; - - private static int lastwaslf = 0; - private static int i; - private final static char ESC = 27; - private final static char IND = 132; - private final static char NEL = 133; - private final static char RI = 141; - private final static char HTS = 136; - private final static char DCS = 144; - private final static char CSI = 155; - private final static char OSC = 157; - private final static int TSTATE_DATA = 0; - private final static int TSTATE_ESC = 1; /* ESC */ - private final static int TSTATE_CSI = 2; /* ESC [ */ - private final static int TSTATE_DCS = 3; /* ESC P */ - private final static int TSTATE_DCEQ = 4; /* ESC [? */ - private final static int TSTATE_ESCSQUARE= 5; /* ESC # */ - private final static int TSTATE_OSC= 6; /* ESC ] */ - private final static int TSTATE_SETG0= 7; /* ESC (? */ - private final static int TSTATE_SETG1= 8; /* ESC )? */ - private final static int TSTATE_SETG2= 9; /* ESC *? */ - private final static int TSTATE_SETG3= 10; /* ESC +? */ - private final static int TSTATE_CSI_DOLLAR = 11; /* ESC [ Pn $ */ - - /* The graphics charsets - * B - default ASCII - * A - default UK - * 0 - DEC SPECIAL - * < - User defined - * .... - */ - private static char gx[] = { - 'B', // g0 - '0', // g1 - 'A', // g2 - '<', // g3 - }; - private static char gr = 1; // default GR to G1 - private static char gl = 0; // default GL to G0 - - // array to store DEC Special -> Unicode mapping - // Unicode DEC Unicode name (DEC name) - private static char DECSPECIAL[] = { - '\u0040', //5f blank - '\u2666', //60 black diamond - '\u2592', //61 grey square - '\u2409', //62 Horizontal tab (ht) pict. for control - '\u240c', //63 Form Feed (ff) pict. for control - '\u240d', //64 Carriage Return (cr) pict. for control - '\u240a', //65 Line Feed (lf) pict. for control - '\u00ba', //66 Masculine ordinal indicator - '\u00b1', //67 Plus or minus sign - '\u2424', //68 New Line (nl) pict. for control - '\u240b', //69 Vertical Tab (vt) pict. for control - '\u2518', //6a Forms light up and left - '\u2510', //6b Forms light down and left - '\u250c', //6c Forms light down and right - '\u2514', //6d Forms light up and right - '\u253c', //6e Forms light vertical and horizontal - '\u2594', //6f Upper 1/8 block (Scan 1) - '\u2580', //70 Upper 1/2 block (Scan 3) - '\u2500', //71 Forms light horizontal or ?em dash? (Scan 5) - '\u25ac', //72 \u25ac black rect. or \u2582 lower 1/4 (Scan 7) - '\u005f', //73 \u005f underscore or \u2581 lower 1/8 (Scan 9) - '\u251c', //74 Forms light vertical and right - '\u2524', //75 Forms light vertical and left - '\u2534', //76 Forms light up and horizontal - '\u252c', //77 Forms light down and horizontal - '\u2502', //78 vertical bar - '\u2264', //79 less than or equal - '\u2265', //7a greater than or equal - '\u00b6', //7b paragraph - '\u2260', //7c not equal - '\u00a3', //7d Pound Sign (british) - '\u00b7' //7e Middle Dot - }; - - private final static int KEYUP = Event.UP % 1000; - private final static int KEYDOWN = Event.DOWN % 1000; - private final static int KEYLEFT = Event.LEFT % 1000; - private final static int KEYRIGHT = Event.RIGHT % 1000; - private final static int KEYF1 = Event.F1 % 1000; - private final static int KEYF2 = Event.F2 % 1000; - private final static int KEYF3 = Event.F3 % 1000; - private final static int KEYF4 = Event.F4 % 1000; - private final static int KEYF5 = Event.F5 % 1000; - private final static int KEYF6 = Event.F6 % 1000; - private final static int KEYF7 = Event.F7 % 1000; - private final static int KEYF8 = Event.F8 % 1000; - private final static int KEYF9 = Event.F9 % 1000; - private final static int KEYF10 = Event.F10 % 1000; - private final static int KEYF11 = Event.F11 % 1000; - private final static int KEYF12 = Event.F12 % 1000; - private final static int KEYPGDN = Event.PGDN % 1000; - private final static int KEYPGUP = Event.PGUP % 1000; - - private final static int KEYHOME = Event.HOME % 1000; - private final static int KEYEND = Event.END % 1000; - - public static final int KEYPRINT_SCREEN = 20; - public static final int KEYSCROLL_LOCK = 21; - public static final int KEYCAPS_LOCK = 22; - public static final int KEYNUM_LOCK = 23; - public static final int KEYPAUSE = 24; - public static final int KEYINSERT = 25; - - /** - * The Insert key. - */ - public static final int INSERT = 1025; - - /** - * Strings to send on function key presseic - */ - private String FunctionKey[]; - private String FunctionKeyShift[]; - private String FunctionKeyCtrl[]; - private String FunctionKeyAlt[]; - private String KeyUp; - private String KeyDown; - private String KeyLeft; - private String KeyRight; - private String KeyBacktab; - private String KeyTab; - - private String KP0; - private String KP1; - private String KP2; - private String KP3; - private String KP4; - private String KP5; - private String KP6; - private String KP7; - private String KP8; - private String KP9; - private String KPMinus; - private String KPComma; - private String KPPeriod; - private String KPEnter; - private String PF1; - private String PF2; - private String PF3; - private String PF4; - private String Help; - private String Do; - private String Find; - private String Insert; - private String Remove; - private String Select; - private String PrevScn; - private String NextScn; - - - private String osc,dcs; /* to memorize OSC & DCS control sequence */ - - private int term_state = TSTATE_DATA; - private boolean vms = false; - private byte[] Tabs; - private int[] DCEvars = new int [10]; - private int DCEvar; - - /* operation system we run on, Scrollbar hack */ - private String osn = System.getProperty("os.name"); - - public String[][] getParameterInfo() { - String pinfo[][] = { - {"VTcolumns", "Integer", "Columns of the terminal"}, - {"VTrows", "Integer", "Rows of the terminal"}, - {"VTfont", "String", "Terminal font (default is Courier)"}, - {"VTfontsize", "Integer", "Font size"}, - {"VTbuffer", "Integer", "Scrollback buffer size"}, - {"VTscrollbar","Boolean", "Enable or disable scrollbar"}, - {"VTresize", "String", "One of none, font, screen"}, - {"VTid", "String", "Terminal id, standard is VT320"}, - {"VTcharset", "String", "Charset used"}, - {"VTvms", "Boolean", "Enable or disable VMS key mappings"}, - {"F1 - F20", "String", "Programmable Function Keys"}, - {"SF1 - SF20", "String", "Programmable Shift-ed Function Keys"}, - {"CF1 - CF20", "String", "Programmable Control-ed Function Keys"}, - {"AF1 - AF20", "String", "Programmable Alt-ed Function Keys"}, - }; - return pinfo; - } - - static String unEscape(String tmp) { - int idx = 0, oldidx = 0; - String cmd; - - cmd = ""; - while((idx = tmp.indexOf('\\', oldidx)) >= 0 && - ++idx <= tmp.length()) { - cmd += tmp.substring(oldidx, idx-1); - if(idx == tmp.length()) return cmd; - switch(tmp.charAt(idx)) { - case 'b': cmd += "\b"; break; - case 'e': cmd += "\u001b"; break; - case 'n': cmd += "\n"; break; - case 'r': cmd += "\r"; break; - case 't': cmd += "\t"; break; - case 'v': cmd += "\u000b"; break; - case 'a': cmd += "\u0012"; break; - default : - if ( (tmp.charAt(idx)>='0') && (tmp.charAt(idx)<='9')) { - for (i = idx;i<tmp.length();i++) { - if ( (tmp.charAt(i)<'0') || (tmp.charAt(i)>'9')) - break; - } - cmd += (char)(new java.lang.Integer(tmp.substring(idx, i)).intValue()); - idx = i-1; - } else - cmd += tmp.substring(idx, ++idx);break; - } - oldidx = ++idx; - } - if(oldidx <= tmp.length()) cmd += tmp.substring(oldidx); - return cmd; - } - - /** - * Initialize terminal. - * @param parent the applet parent where to get parameters from - * @see display.Terminal - */ - public void addNotify() { - if(display == null) { - String width = "80", height = "24", resize ="font"; - String font = "Courier", fs = "14", bufs = "100"; - String scrb = "false"; - String vms = "false"; - String ibmcset = "false"; - - Applet applet = (Applet)getParent(); - - if(applet != null) { - try { - host = (TerminalHost)applet; - } catch(ClassCastException e) { - System.err.println("vt320: "+applet+" cannot receive terminal input"); - host = this; - } - - width = applet.getParameter("VTcolumns"); - height = applet.getParameter("VTrows"); - font = applet.getParameter("VTfont"); - fs = applet.getParameter("VTfontsize"); - bufs = applet.getParameter("VTbuffer"); - scrb = applet.getParameter("VTscrollbar"); - vms = applet.getParameter("VTvms"); - resize = applet.getParameter("VTresize"); - resize = resize == null ? "font" : resize; - ibmcset = applet.getParameter("VTcharset"); - if ((ibmcset!=null)&&(ibmcset.equals("ibm"))) - useibmcharset=true; - - if(applet.getParameter("VTid") != null) - terminalID = applet.getParameter("VTid"); - } - - display = new CharDisplay( - width==null?80:(new Integer(width)).intValue(), - (height==null?24:(new Integer(height)).intValue()), - font==null?"Courier":font, - fs==null?14:(new Integer(fs)).intValue() - ); - display.setBottomMargin((height==null? - 24: - (new Integer(height)).intValue()) - 1); - display.setBufferSize(bufs==null?100:(new Integer(bufs)).intValue()); - if(resize.equals("none")) - display.setResizeStrategy(CharDisplay.RESIZE_NONE); - if(resize.equals("font")) - display.setResizeStrategy(CharDisplay.RESIZE_FONT); - if(resize.equals("screen")) - display.setResizeStrategy(CharDisplay.RESIZE_SCREEN); - - display.setBorder(2, false); - - setLayout(new BorderLayout()); - if(scrb != null && !scrb.equals("false")) { - if(scrb.equals("left") || scrb.equals("true")) - display.setScrollbar("West"); - else if(scrb.equals("right")) - display.setScrollbar("East"); - else - System.out.println("vt320: unknown scrollbar location: "+scrb); - } - if(vms != null && vms.equals("true")) - { - this.vms = true; - } - add("Center", display); - InitTerminalVars(); - for (int i=1;i<20;i++) - { - if (applet.getParameter("F"+i)!=null) - FunctionKey[i] = unEscape(applet.getParameter("F"+i)); - if (applet.getParameter("SF"+i)!=null) - FunctionKeyShift[i] = unEscape(applet.getParameter("SF"+i)); - if (applet.getParameter("CF"+i)!=null) - FunctionKeyCtrl[i] = unEscape(applet.getParameter("CF"+i)); - if (applet.getParameter("AF"+i)!=null) - FunctionKeyAlt[i] = unEscape(applet.getParameter("AF"+i)); - } - } - super.addNotify(); - } - - private void InitTerminalVars() { - int nw = display.getColumns(); - - if (nw<132) nw=132; //catch possible later 132/80 resizes - Tabs = new byte[nw]; - for (int i=0;i<nw;i+=8) { - Tabs[i]=1; - } - - PF1 = "\u001bOP"; - PF2 = "\u001bOQ"; - PF3 = "\u001bOR"; - PF4 = "\u001bOS"; - - Find = "\u001b[1~"; - Insert = "\u001b[2~"; - Remove = "\u001b[3~"; - Select = "\u001b[4~"; - PrevScn = "\u001b[5~"; - NextScn = "\u001b[6~"; - - Help = "\u001b[28~"; - Do = "\u001b[29~"; - - FunctionKey = new String[21]; - FunctionKey[0]= ""; - FunctionKey[1]= PF1; - FunctionKey[2]= PF2; - FunctionKey[3]= PF3; - FunctionKey[4]= PF4; - /* following are defined differently for vt220 / vt132 ... */ - FunctionKey[5]= "\u001b[15~"; - FunctionKey[6]= "\u001b[17~"; - FunctionKey[7]= "\u001b[18~"; - FunctionKey[8]= "\u001b[19~"; - FunctionKey[9]= "\u001b[20~"; - FunctionKey[10]= "\u001b[21~"; - FunctionKey[11]= "\u001b[23~"; - FunctionKey[12]= "\u001b[24~"; - FunctionKey[13]= "\u001b[25~"; - FunctionKey[14]= "\u001b[26~"; - FunctionKey[15]= Help; - FunctionKey[16]= Do; - FunctionKey[17]= "\u001b[31~"; - FunctionKey[18]= "\u001b[32~"; - FunctionKey[19]= "\u001b[33~"; - FunctionKey[20]= "\u001b[34~"; - - FunctionKeyShift = new String[21]; - FunctionKeyAlt = new String[21]; - FunctionKeyCtrl = new String[21]; - - for (int i=0;i<20;i++) - { - FunctionKeyShift[i]=""; - FunctionKeyAlt[i]=""; - FunctionKeyCtrl[i]=""; - } - FunctionKeyShift[15] = Find; - FunctionKeyShift[16] = Select; - - KeyTab = "\u0009"; - KeyBacktab = "\u001bOP\u0009"; - KeyUp = "\u001b[A"; - KeyDown = "\u001b[B"; - KeyRight = "\u001b[C"; - KeyLeft = "\u001b[D"; - KP0 = "\u001bOp"; - KP1 = "\u001bOq"; - KP2 = "\u001bOr"; - KP3 = "\u001bOs"; - KP4 = "\u001bOt"; - KP5 = "\u001bOu"; - KP6 = "\u001bOv"; - KP7 = "\u001bOw"; - KP8 = "\u001bOx"; - KP9 = "\u001bOy"; - KPMinus = "\u001bOm"; - KPComma = "\u001bOl"; - KPPeriod = "\u001bOn"; - KPEnter = "\u001bOM"; - - /* ... */ - } - - public Dimension getSize() { - return new Dimension(display.getColumns(), display.getRows()); - } - - public String getTerminalType() { return terminalID; } - - /** - * Handle events for the terminal. Only accept events for the scroll - * bar. Any other events have to be propagated to the parent. - * @param evt the event - */ - public boolean handleEvent(Event evt) { - // request focus if mouse enters (necessary to avoid mistakes) - if(evt.id == Event.MOUSE_ENTER) { display.requestFocus(); return true; } - // give focus away if mouse leaves the window - if(evt.id == Event.MOUSE_EXIT) { nextFocus(); return true; } - - // handle keyboard events - - /* Netscape for windows does not send keyDown when period - * is pressed. This hack catches the keyUp event. - */ - int id = evt.id; - - boolean control = (((evt.CTRL_MASK & evt.modifiers)==0) ? false : true); - boolean shift = (((evt.SHIFT_MASK & evt.modifiers)==0) ? false : true ); - boolean alt = (((evt.ALT_MASK & evt.modifiers)==0) ? false :true); - - pressedKey: - { - if (pressedKey == 10 - && (evt.key == 10 - || evt.key == 13) - && evt.when - pressedWhen < 50) // Ray: Elliminate stuttering enter/return - break pressedKey; - - int priorKey = pressedKey; - if(id == Event.KEY_PRESS) - pressedKey = evt.key; // Keep track of last pressed key - else if (evt.key == '.' - && evt.id != Event.KEY_RELEASE - && evt.key != pressedKey - ) { - pressedKey = 0; - } else - break pressedKey; - pressedWhen = evt.when; - if (evt.key == 10 && !control) { - if (sendcrlf) - host.send("\r\n"); /* YES, see RFC 854 */ - else - host.send("\r"); /* YES, see RFC 854 */ - return true; - } else -/* FIXME: on german PC keyboards you have to use Alt-Ctrl-q to get an @, - * so we can't just use it here... will probably break some other VMS stuff - * -Marcus - if (((!vms && evt.key == '2') || evt.key == '@' || evt.key == ' ') && control) - */ - if (((!vms && evt.key == '2') || evt.key == ' ') && control) - return host.send("" + (char)0); - else if (vms) { - if (evt.key == 8) { - if (shift && !control) - return host.send("" + (char)10); // VMS shift deletes word back - if (control && !shift) - return host.send("" + (char)24); // VMS control deletes line back - return host.send("" + (char)127); // VMS other is delete - } - if (evt.key == 127 && !control) { - if (shift) - return host.send(Insert); // VMS shift delete = insert - else - return host.send(Remove); // VMS delete = remove - } - if (control) { - switch(evt.key) { - case '0': - return host.send(KP0); - case '1': - return host.send(KP1); - case '2': - return host.send(KP2); - case '3': - return host.send(KP3); - case '4': - return host.send(KP4); - case '5': - return host.send(KP5); - case '6': - return host.send(KP6); - case '7': - return host.send(KP7); - case '8': - return host.send(KP8); - case '9': - return host.send(KP9); - case '.': - return host.send(KPPeriod); - case '-': - case 31: - return host.send(KPMinus); - case '+': - return host.send(KPComma); - case 10: - return host.send(KPEnter); - case '/': - return host.send(PF2); - case '*': - return host.send(PF3); - } - if (shift && evt.key < 32) - return host.send(PF1+(char)(evt.key + 64)); - } - } - // Hmmm. Outside the VMS case? - if (shift && (evt.key == '\t')) - return host.send(KeyBacktab); - else - return host.send(""+(char)evt.key); - } - - String input = ""; - - if (evt.id == evt.KEY_ACTION) - { - String fmap[]; - /* bloodsucking little buggers at netscape - * don't keep to the standard java values - * of <ARROW> or <Fx> - */ - fmap = FunctionKey; - if (shift) - fmap = FunctionKeyShift; - if (control) - fmap = FunctionKeyCtrl; - if (alt) - fmap = FunctionKeyAlt; - switch (evt.key % 1000) { - case KEYF1: - input = fmap[1]; - break; - case KEYF2: - input = fmap[2]; - break; - case KEYF3: - input = fmap[3]; - break; - case KEYF4: - input = fmap[4]; - break; - case KEYF5: - input = fmap[5]; - break; - case KEYF6: - input = fmap[6]; - break; - case KEYF7: - input = fmap[7]; - break; - case KEYF8: - input = fmap[8]; - break; - case KEYF9: - input = fmap[9]; - break; - case KEYF10: - input = fmap[10]; - break; - case KEYF11: - input = fmap[11]; - break; - case KEYF12: - input = fmap[12]; - break; - case KEYUP: - input = KeyUp; - break; - case KEYDOWN: - input = KeyDown; - break; - case KEYLEFT: - input = KeyLeft; - break; - case KEYRIGHT: - input = KeyRight; - break; - case KEYPGDN: - input = NextScn; - break; - case KEYPGUP: - input = PrevScn; - break; - case KEYINSERT: - input = Insert; - break; -// The following cases fall through if not in VMS mode. - case KEYHOME: - if (vms) - { - input = "" + (char)8; - break; - } - //FALLTHROUGH - case KEYEND: - if (vms) - { - input = "" + (char)5; - break; - } - //FALLTHROUGH - case KEYNUM_LOCK: - if (vms && control) { - if (pressedKey != evt.key) { - pressedKey = evt.key; - input = PF1; - } else - pressedKey = ' '; // Here, we eat a second numlock since that returns numlock state - } - break; - default: - /*if (debug>0)*/ - System.out.println("vt320: unknown event:"+(int)evt.key); - break; - } - } - - if(input != null && input.length() > 0) - return host.send(input); - - return false; - } - - /** - * Dummy method to handle input events (String). - * This is only needed if our parent is not TerminalHost - * @param s String to handle - * @return always true - * @see display.TerminalHost - */ - public boolean send(String s) { - putString(s); - return true; - } - - private void handle_dcs(String dcs) { - System.out.println("DCS: "+dcs); - } - private void handle_osc(String osc) { - System.out.println("OSC: "+osc); - } - - /** - * Put String at current cursor position. Moves cursor - * according to the String. Does NOT wrap. - * @param s the string - */ - public void putString(String s) { - int i,len=s.length(); - - display.markLine(R,1); - for (i=0;i<len;i++) - putChar(s.charAt(i),false); - display.setCursorPos(C, R); - display.redraw(); - } - - public void putChar(char c) { - putChar(c,true); - display.redraw(); - } - - public final static char unimap[] = { -//# -//# Name: cp437_DOSLatinUS to Unicode table -//# Unicode version: 1.1 -//# Table version: 1.1 -//# Table format: Format A -//# Date: 03/31/95 -//# Authors: Michel Suignard <michelsu@microsoft.com> -//# Lori Hoerth <lorih@microsoft.com> -//# General notes: none -//# -//# Format: Three tab-separated columns -//# Column #1 is the cp1255_WinHebrew code (in hex) -//# Column #2 is the Unicode (in hex as 0xXXXX) -//# Column #3 is the Unicode name (follows a comment sign, '#') -//# -//# The entries are in cp437_DOSLatinUS order -//# - - 0x0000,// #NULL - 0x0001,// #START OF HEADING - 0x0002,// #START OF TEXT - 0x0003,// #END OF TEXT - 0x0004,// #END OF TRANSMISSION - 0x0005,// #ENQUIRY - 0x0006,// #ACKNOWLEDGE - 0x0007,// #BELL - 0x0008,// #BACKSPACE - 0x0009,// #HORIZONTAL TABULATION - 0x000a,// #LINE FEED - 0x000b,// #VERTICAL TABULATION - 0x000c,// #FORM FEED - 0x000d,// #CARRIAGE RETURN - 0x000e,// #SHIFT OUT - 0x000f,// #SHIFT IN - 0x0010,// #DATA LINK ESCAPE - 0x0011,// #DEVICE CONTROL ONE - 0x0012,// #DEVICE CONTROL TWO - 0x0013,// #DEVICE CONTROL THREE - 0x0014,// #DEVICE CONTROL FOUR - 0x0015,// #NEGATIVE ACKNOWLEDGE - 0x0016,// #SYNCHRONOUS IDLE - 0x0017,// #END OF TRANSMISSION BLOCK - 0x0018,// #CANCEL - 0x0019,// #END OF MEDIUM - 0x001a,// #SUBSTITUTE - 0x001b,// #ESCAPE - 0x001c,// #FILE SEPARATOR - 0x001d,// #GROUP SEPARATOR - 0x001e,// #RECORD SEPARATOR - 0x001f,// #UNIT SEPARATOR - 0x0020,// #SPACE - 0x0021,// #EXCLAMATION MARK - 0x0022,// #QUOTATION MARK - 0x0023,// #NUMBER SIGN - 0x0024,// #DOLLAR SIGN - 0x0025,// #PERCENT SIGN - 0x0026,// #AMPERSAND - 0x0027,// #APOSTROPHE - 0x0028,// #LEFT PARENTHESIS - 0x0029,// #RIGHT PARENTHESIS - 0x002a,// #ASTERISK - 0x002b,// #PLUS SIGN - 0x002c,// #COMMA - 0x002d,// #HYPHEN-MINUS - 0x002e,// #FULL STOP - 0x002f,// #SOLIDUS - 0x0030,// #DIGIT ZERO - 0x0031,// #DIGIT ONE - 0x0032,// #DIGIT TWO - 0x0033,// #DIGIT THREE - 0x0034,// #DIGIT FOUR - 0x0035,// #DIGIT FIVE - 0x0036,// #DIGIT SIX - 0x0037,// #DIGIT SEVEN - 0x0038,// #DIGIT EIGHT - 0x0039,// #DIGIT NINE - 0x003a,// #COLON - 0x003b,// #SEMICOLON - 0x003c,// #LESS-THAN SIGN - 0x003d,// #EQUALS SIGN - 0x003e,// #GREATER-THAN SIGN - 0x003f,// #QUESTION MARK - 0x0040,// #COMMERCIAL AT - 0x0041,// #LATIN CAPITAL LETTER A - 0x0042,// #LATIN CAPITAL LETTER B - 0x0043,// #LATIN CAPITAL LETTER C - 0x0044,// #LATIN CAPITAL LETTER D - 0x0045,// #LATIN CAPITAL LETTER E - 0x0046,// #LATIN CAPITAL LETTER F - 0x0047,// #LATIN CAPITAL LETTER G - 0x0048,// #LATIN CAPITAL LETTER H - 0x0049,// #LATIN CAPITAL LETTER I - 0x004a,// #LATIN CAPITAL LETTER J - 0x004b,// #LATIN CAPITAL LETTER K - 0x004c,// #LATIN CAPITAL LETTER L - 0x004d,// #LATIN CAPITAL LETTER M - 0x004e,// #LATIN CAPITAL LETTER N - 0x004f,// #LATIN CAPITAL LETTER O - 0x0050,// #LATIN CAPITAL LETTER P - 0x0051,// #LATIN CAPITAL LETTER Q - 0x0052,// #LATIN CAPITAL LETTER R - 0x0053,// #LATIN CAPITAL LETTER S - 0x0054,// #LATIN CAPITAL LETTER T - 0x0055,// #LATIN CAPITAL LETTER U - 0x0056,// #LATIN CAPITAL LETTER V - 0x0057,// #LATIN CAPITAL LETTER W - 0x0058,// #LATIN CAPITAL LETTER X - 0x0059,// #LATIN CAPITAL LETTER Y - 0x005a,// #LATIN CAPITAL LETTER Z - 0x005b,// #LEFT SQUARE BRACKET - 0x005c,// #REVERSE SOLIDUS - 0x005d,// #RIGHT SQUARE BRACKET - 0x005e,// #CIRCUMFLEX ACCENT - 0x005f,// #LOW LINE - 0x0060,// #GRAVE ACCENT - 0x0061,// #LATIN SMALL LETTER A - 0x0062,// #LATIN SMALL LETTER B - 0x0063,// #LATIN SMALL LETTER C - 0x0064,// #LATIN SMALL LETTER D - 0x0065,// #LATIN SMALL LETTER E - 0x0066,// #LATIN SMALL LETTER F - 0x0067,// #LATIN SMALL LETTER G - 0x0068,// #LATIN SMALL LETTER H - 0x0069,// #LATIN SMALL LETTER I - 0x006a,// #LATIN SMALL LETTER J - 0x006b,// #LATIN SMALL LETTER K - 0x006c,// #LATIN SMALL LETTER L - 0x006d,// #LATIN SMALL LETTER M - 0x006e,// #LATIN SMALL LETTER N - 0x006f,// #LATIN SMALL LETTER O - 0x0070,// #LATIN SMALL LETTER P - 0x0071,// #LATIN SMALL LETTER Q - 0x0072,// #LATIN SMALL LETTER R - 0x0073,// #LATIN SMALL LETTER S - 0x0074,// #LATIN SMALL LETTER T - 0x0075,// #LATIN SMALL LETTER U - 0x0076,// #LATIN SMALL LETTER V - 0x0077,// #LATIN SMALL LETTER W - 0x0078,// #LATIN SMALL LETTER X - 0x0079,// #LATIN SMALL LETTER Y - 0x007a,// #LATIN SMALL LETTER Z - 0x007b,// #LEFT CURLY BRACKET - 0x007c,// #VERTICAL LINE - 0x007d,// #RIGHT CURLY BRACKET - 0x007e,// #TILDE - 0x007f,// #DELETE - 0x00c7,// #LATIN CAPITAL LETTER C WITH CEDILLA - 0x00fc,// #LATIN SMALL LETTER U WITH DIAERESIS - 0x00e9,// #LATIN SMALL LETTER E WITH ACUTE - 0x00e2,// #LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e4,// #LATIN SMALL LETTER A WITH DIAERESIS - 0x00e0,// #LATIN SMALL LETTER A WITH GRAVE - 0x00e5,// #LATIN SMALL LETTER A WITH RING ABOVE - 0x00e7,// #LATIN SMALL LETTER C WITH CEDILLA - 0x00ea,// #LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb,// #LATIN SMALL LETTER E WITH DIAERESIS - 0x00e8,// #LATIN SMALL LETTER E WITH GRAVE - 0x00ef,// #LATIN SMALL LETTER I WITH DIAERESIS - 0x00ee,// #LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ec,// #LATIN SMALL LETTER I WITH GRAVE - 0x00c4,// #LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5,// #LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c9,// #LATIN CAPITAL LETTER E WITH ACUTE - 0x00e6,// #LATIN SMALL LIGATURE AE - 0x00c6,// #LATIN CAPITAL LIGATURE AE - 0x00f4,// #LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f6,// #LATIN SMALL LETTER O WITH DIAERESIS - 0x00f2,// #LATIN SMALL LETTER O WITH GRAVE - 0x00fb,// #LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00f9,// #LATIN SMALL LETTER U WITH GRAVE - 0x00ff,// #LATIN SMALL LETTER Y WITH DIAERESIS - 0x00d6,// #LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00dc,// #LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00a2,// #CENT SIGN - 0x00a3,// #POUND SIGN - 0x00a5,// #YEN SIGN - 0x20a7,// #PESETA SIGN - 0x0192,// #LATIN SMALL LETTER F WITH HOOK - 0x00e1,// #LATIN SMALL LETTER A WITH ACUTE - 0x00ed,// #LATIN SMALL LETTER I WITH ACUTE - 0x00f3,// #LATIN SMALL LETTER O WITH ACUTE - 0x00fa,// #LATIN SMALL LETTER U WITH ACUTE - 0x00f1,// #LATIN SMALL LETTER N WITH TILDE - 0x00d1,// #LATIN CAPITAL LETTER N WITH TILDE - 0x00aa,// #FEMININE ORDINAL INDICATOR - 0x00ba,// #MASCULINE ORDINAL INDICATOR - 0x00bf,// #INVERTED QUESTION MARK - 0x2310,// #REVERSED NOT SIGN - 0x00ac,// #NOT SIGN - 0x00bd,// #VULGAR FRACTION ONE HALF - 0x00bc,// #VULGAR FRACTION ONE QUARTER - 0x00a1,// #INVERTED EXCLAMATION MARK - 0x00ab,// #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bb,// #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x2591,// #LIGHT SHADE - 0x2592,// #MEDIUM SHADE - 0x2593,// #DARK SHADE - 0x2502,// #BOX DRAWINGS LIGHT VERTICAL - 0x2524,// #BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x2561,// #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562,// #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2556,// #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2555,// #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2563,// #BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2551,// #BOX DRAWINGS DOUBLE VERTICAL - 0x2557,// #BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255d,// #BOX DRAWINGS DOUBLE UP AND LEFT - 0x255c,// #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255b,// #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x2510,// #BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514,// #BOX DRAWINGS LIGHT UP AND RIGHT - 0x2534,// #BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x252c,// #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x251c,// #BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2500,// #BOX DRAWINGS LIGHT HORIZONTAL - 0x253c,// #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x255e,// #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f,// #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x255a,// #BOX DRAWINGS DOUBLE UP AND RIGHT - 0x2554,// #BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2569,// #BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x2566,// #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2560,// #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2550,// #BOX DRAWINGS DOUBLE HORIZONTAL - 0x256c,// #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2567,// #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568,// #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2564,// #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565,// #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2559,// #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x2558,// #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2552,// #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553,// #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x256b,// #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256a,// #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x2518,// #BOX DRAWINGS LIGHT UP AND LEFT - 0x250c,// #BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2588,// #FULL BLOCK - 0x2584,// #LOWER HALF BLOCK - 0x258c,// #LEFT HALF BLOCK - 0x2590,// #RIGHT HALF BLOCK - 0x2580,// #UPPER HALF BLOCK - 0x03b1,// #GREEK SMALL LETTER ALPHA - 0x00df,// #LATIN SMALL LETTER SHARP S - 0x0393,// #GREEK CAPITAL LETTER GAMMA - 0x03c0,// #GREEK SMALL LETTER PI - 0x03a3,// #GREEK CAPITAL LETTER SIGMA - 0x03c3,// #GREEK SMALL LETTER SIGMA - 0x00b5,// #MICRO SIGN - 0x03c4,// #GREEK SMALL LETTER TAU - 0x03a6,// #GREEK CAPITAL LETTER PHI - 0x0398,// #GREEK CAPITAL LETTER THETA - 0x03a9,// #GREEK CAPITAL LETTER OMEGA - 0x03b4,// #GREEK SMALL LETTER DELTA - 0x221e,// #INFINITY - 0x03c6,// #GREEK SMALL LETTER PHI - 0x03b5,// #GREEK SMALL LETTER EPSILON - 0x2229,// #INTERSECTION - 0x2261,// #IDENTICAL TO - 0x00b1,// #PLUS-MINUS SIGN - 0x2265,// #GREATER-THAN OR EQUAL TO - 0x2264,// #LESS-THAN OR EQUAL TO - 0x2320,// #TOP HALF INTEGRAL - 0x2321,// #BOTTOM HALF INTEGRAL - 0x00f7,// #DIVISION SIGN - 0x2248,// #ALMOST EQUAL TO - 0x00b0,// #DEGREE SIGN - 0x2219,// #BULLET OPERATOR - 0x00b7,// #MIDDLE DOT - 0x221a,// #SQUARE ROOT - 0x207f,// #SUPERSCRIPT LATIN SMALL LETTER N - 0x00b2,// #SUPERSCRIPT TWO - 0x25a0,// #BLACK SQUARE - 0x00a0,// #NO-BREAK SPACE - }; - - public char map_cp850_unicode(char x) { - if (x>=0x100) - return x; - return unimap[x]; - } - - private void _SetCursor(int row,int col) { - int maxr = display.getRows(); - int tm = display.getTopMargin(); - - R = (row<0)?0:row; - C = (col<0)?0:col; - - if (!moveoutsidemargins) { - R += display.getTopMargin(); - maxr = display.getBottomMargin(); - } - if (R>maxr) R = maxr; - } - - public void putChar(char c,boolean doshowcursor) { - Dimension size; - int rows = display.getRows() ; //statusline - int columns = display.getColumns(); - int tm = display.getTopMargin(); - int bm = display.getBottomMargin(); - String tosend; - Vector vec; - byte msg[]; - - if (debug>4) System.out.println("putChar("+c+" ["+((int)c)+"]) at R="+R+" , C="+C+", columns="+columns+", rows="+rows); - display.markLine(R,1); - if (c>255) { - if (debug>0) - System.out.println("char > 255:"+((int)c)); - return; - } - switch (term_state) { - case TSTATE_DATA: - /* FIXME: we shouldn't use chars with bit 8 set if ibmcharset. - * probably... but some BBS do anyway... - */ - if (!useibmcharset) { - boolean doneflag = true; - switch (c) { - case OSC: - osc=""; - term_state = TSTATE_OSC; - break; - case RI: - if (R>tm) - R--; - else - display.insertLine(R,1,display.SCROLL_DOWN); - if (debug>1) - System.out.println("RI"); - break; - case IND: - if (R == tm - 1 || R == bm || R == rows - 1) // Ray: not bottom margin - 1 - display.insertLine(R,1,display.SCROLL_UP); - else - R++; - if (debug>1) - System.out.println("IND (at "+R+" )"); - break; - case NEL: - if (R == tm - 1 || R == bm || R == rows - 1) // Ray: not bottom margin - 1 - display.insertLine(R,1,display.SCROLL_UP); - else - R++; - C=0; - if (debug>1) - System.out.println("NEL (at "+R+" )"); - break; - case HTS: - Tabs[C] = 1; - if (debug>1) - System.out.println("HTS"); - break; - case DCS: - dcs=""; - term_state = TSTATE_DCS; - break; - default: - doneflag = false; - break; - } - if (doneflag) break; - } - switch (c) { - case CSI: // should be in the 8bit section, but some BBS use this - term_state = TSTATE_DCEQ; - break; - case ESC: - term_state = TSTATE_ESC; - lastwaslf=0; - break; - case '\b': - C--; - if (C<0) - C=0; - lastwaslf = 0; - break; - case '\t': - if (insertmode == 1) { - int nr,newc; - - newc = C; - do { - display.insertChar(C,R,' ',attributes); - newc++; - } while (newc<columns && Tabs[newc]==0); - } else { - do { - display.putChar(C++,R,' ',attributes); - } while (C<columns && (Tabs[C]==0)); - } - lastwaslf = 0; - break; - case '\r': - C=0; - break; - case '\n': - if (debug>3) - System.out.println("R= "+R+", bm "+bm+", tm="+tm+", rows="+rows); - if (!vms) - { - if (lastwaslf!=0 && lastwaslf!=c) // Ray: I do not understand this logic. - break; - lastwaslf=c; - /*C = 0;*/ - } - // note: we do not scroll at the topmargin! only at the bottommargin - // of the scrollregion and at the display bottom. - if ( R == bm || R >= rows - 1) - display.insertLine(R,1); - else - R++; - break; - case '\016': - /* ^N, Shift out - Put G1 into GL */ - gl = 1; - break; - case '\017': - /* ^O, Shift in - Put G0 into GL */ - gl = 0; - break; - default: - lastwaslf=0; - if (c<32) { - if (c!=0) - if (debug>0) - System.out.println("TSTATE_DATA char: "+((int)c)); - break; - } - if(C >= columns) { - if(R < rows - 1) - R++; - else - display.insertLine(R,display.SCROLL_UP); - C = 0; - } - - // Mapping if DEC Special is chosen charset - if ( gx[gl] == '0' ) { - if ( c >= '\u005f' && c <= '\u007e' ) { - if (debug>3) - System.out.print("Mapping "+c+" (index "+((short)c-0x5f)+" to "); - c = DECSPECIAL[(short)c - 0x5f]; - if (debug>3) - System.out.println(c+" ("+(int)c+")"); - } - } -/* - if ( gx[gr] == '0' ) { - if ( c >= '\u00bf' && c <= '\u00fe' ) { - if (debug>2) - System.out.print("Mapping "+c); - c = DECSPECIAL[(short)c - 0xbf]; - if (debug>2) - System.out.println("to "+c); - } - } -*/ - if (useibmcharset) - c = map_cp850_unicode(c); - - /*if(true || (statusmode == 0)) { */ - if (debug>4) System.out.println("output "+c+" at "+C+","+R); - if (insertmode==1) { - display.insertChar(C, R, c, attributes); - } else { - display.putChar(C, R, c, attributes); - } - /* - } else { - if (insertmode==1) { - display.insertChar(C, rows, c, attributes); - } else { - display.putChar(C, rows, c, attributes); - } - } - */ - C++; - break; - } /* switch(c) */ - break; - case TSTATE_OSC: - if ((c<0x20) && (c!=ESC)) {// NP - No printing character - handle_osc(osc); - term_state = TSTATE_DATA; - break; - } - //but check for vt102 ESC \ - if (c=='\\' && osc.charAt(osc.length()-1)==ESC) { - handle_osc(osc); - term_state = TSTATE_DATA; - break; - } - osc = osc + c; - break; - case TSTATE_ESC: - switch (c) { - case '#': - term_state = TSTATE_ESCSQUARE; - break; - case 'c': - /* Hard terminal reset */ - /*FIXME:*/ - term_state = TSTATE_DATA; - break; - case '[': - term_state = TSTATE_CSI; - DCEvar = 0; - DCEvars[0] = 0; - DCEvars[1] = 0; - DCEvars[2] = 0; - DCEvars[3] = 0; - break; - case ']': - osc=""; - term_state = TSTATE_OSC; - break; - case 'P': - dcs=""; - term_state = TSTATE_DCS; - break; - case 'E': - if (R == tm - 1 || R == bm || R == rows - 1) // Ray: not bottom margin - 1 - display.insertLine(R,1,display.SCROLL_UP); - else - R++; - C=0; - if (debug>1) - System.out.println("ESC E (at "+R+")"); - term_state = TSTATE_DATA; - break; - case 'D': - if (R == tm - 1 || R == bm || R == rows - 1) - display.insertLine(R,1,display.SCROLL_UP); - else - R++; - if (debug>1) - System.out.println("ESC D (at "+R+" )"); - term_state = TSTATE_DATA; - break; - case 'M': // IL - if ((R>=tm) && (R<=bm)) // in scrolregion - display.insertLine(R,1,display.SCROLL_DOWN); - /* else do nothing ; */ - if (debug>1) - System.out.println("ESC M "); - term_state = TSTATE_DATA; - break; - case 'H': - if (debug>1) - System.out.println("ESC H at "+C); - /* right border probably ...*/ - if (C>=columns) - C=columns-1; - Tabs[C] = 1; - term_state = TSTATE_DATA; - break; - case '=': - /*application keypad*/ - if (debug>0) - System.out.println("ESC ="); - term_state = TSTATE_DATA; - break; - case '>': - /*normal keypad*/ - if (debug>0) - System.out.println("ESC >"); - term_state = TSTATE_DATA; - break; - case '7': - /*save cursor */ - Sc = C; - Sr = R; - Sa = attributes; - if (debug>1) - System.out.println("ESC 7"); - term_state = TSTATE_DATA; - break; - case '8': - /*restore cursor */ - C = Sc; - R = Sr; - attributes = Sa; - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC 7"); - break; - case '(': - /* Designate G0 Character set (ISO 2022) */ - term_state = TSTATE_SETG0; - break; - case ')': - /* Designate G0 character set (ISO 2022) */ - term_state = TSTATE_SETG1; - break; - case '*': - /* Designate G1 Character set (ISO 2022) */ - term_state = TSTATE_SETG2; - break; - case '+': - /* Designate G1 Character set (ISO 2022) */ - term_state = TSTATE_SETG3; - break; - case '~': - /* Locking Shift 1, right */ - term_state = TSTATE_DATA; - gr = 1; - break; - case 'n': - /* Locking Shift 2 */ - term_state = TSTATE_DATA; - gl = 2; - break; - case '}': - /* Locking Shift 2, right */ - term_state = TSTATE_DATA; - gr = 2; - break; - case 'o': - /* Locking Shift 3 */ - term_state = TSTATE_DATA; - gl = 3; - break; - case '|': - /* Locking Shift 3, right */ - term_state = TSTATE_DATA; - gr = 3; - break; - default: - System.out.println("ESC unknown letter: ("+((int)c)+")"); - term_state = TSTATE_DATA; - break; - } - break; - case TSTATE_SETG0: - if(c!='0' && c!='A' && c!='B') - System.out.println("ESC ( : G0 char set? ("+((int)c)+")"); - else { - if (debug>2) System.out.println("ESC ( : G0 char set ("+c+" "+((int)c)+")"); - gx[0] = c; - } - term_state = TSTATE_DATA; - break; - case TSTATE_SETG1: - if(c!='0' && c!='A' && c!='B') - System.out.println("ESC ) :G1 char set? ("+((int)c)+")"); - else { - if (debug>2) System.out.println("ESC ) :G1 char set ("+c+" "+((int)c)+")"); - gx[1] = c; - } - term_state = TSTATE_DATA; - break; - case TSTATE_SETG2: - if(c!='0' && c!='A' && c!='B') - System.out.println("ESC*:G2 char set? ("+((int)c)+")"); - else { - if (debug>2) System.out.println("ESC*:G2 char set ("+c+" "+((int)c)+")"); - gx[2] = c; - } - term_state = TSTATE_DATA; - break; - case TSTATE_SETG3: - if(c!='0' && c!='A' && c!='B') - System.out.println("ESC+:G3 char set? ("+((int)c)+")"); - else { - if (debug>2) System.out.println("ESC+:G3 char set ("+c+" "+((int)c)+")"); - gx[3] = c; - } - term_state = TSTATE_DATA; - break; - case TSTATE_ESCSQUARE: - switch (c) { - case '8': - for (int i=0;i<columns;i++) - for (int j=0;j<rows;j++) - display.putChar(i,j,'E',0); - break; - default: - System.out.println("ESC # "+c+" not supported."); - break; - } - term_state = TSTATE_DATA; - break; - case TSTATE_DCS: - if (c=='\\' && dcs.charAt(dcs.length()-1)==ESC) { - handle_dcs(dcs); - term_state = TSTATE_DATA; - break; - } - dcs = dcs + c; - break; - case TSTATE_DCEQ: - switch (c) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - DCEvars[DCEvar]=DCEvars[DCEvar]*10+((int)c)-48; - break; - case 'r': // XTERM_RESTORE - if (true || debug>1) - System.out.println("ESC [ ? "+DCEvars[0]+" r"); - /* DEC Mode reset */ - switch (DCEvars[0]){ - case 3: /* 80 columns*/ - size = display.size(); - display.setWindowSize(80,rows); - layout(); - break; - case 4: /* scrolling mode, smooth */ - break; - case 5: /* light background */ - break; - case 6: /* move inside margins ? */ - moveoutsidemargins = true; - break; - case 12:/* local echo off */ - break; - } - term_state = TSTATE_DATA; - break; - case 'h': // DECSET - if (debug>0) - System.out.println("ESC [ ? "+DCEvars[0]+" h"); - /* DEC Mode set */ - switch (DCEvars[0]){ - case 1: /* Application cursor keys */ - KeyUp = "\u001bOA"; - KeyDown = "\u001bOB"; - KeyRight= "\u001bOC"; - KeyLeft = "\u001bOD"; - break; - case 3: /* 132 columns*/ - size = display.size(); - display.setWindowSize(132,rows); - layout(); - break; - case 4: /* scrolling mode, smooth */ - break; - case 5: /* light background */ - break; - case 6: /* move inside margins ? */ - moveoutsidemargins = false; - break; - case 12:/* local echo off */ - break; - } - term_state = TSTATE_DATA; - break; - case 'l': //DECRST - /* DEC Mode reset */ - if (debug>0) - System.out.println("ESC [ ? "+DCEvars[0]+" l"); - switch (DCEvars[0]){ - case 1: /* Application cursor keys */ - KeyUp = "\u001b[A"; - KeyDown = "\u001b[B"; - KeyRight= "\u001b[C"; - KeyLeft = "\u001b[D"; - break; - case 3: /* 80 columns*/ - size = display.size(); - display.setWindowSize(80,rows); - layout(); - break; - case 4: /* scrolling mode, jump */ - break; - case 5: /* dark background */ - break; - case 6: /* move outside margins ? */ - moveoutsidemargins = true; - break; - case 12:/* local echo on */ - break; - } - term_state = TSTATE_DATA; - break; - case ';': - DCEvar++; - DCEvars[DCEvar] = 0; - break; - case 'n': - if (debug>0) - System.out.println("ESC [ ? "+DCEvars[0]+" n"); - switch (DCEvars[0]) { - case 15: - /* printer? no printer. */ - host.send(((char)ESC)+"[?13n"); - System.out.println("ESC[5n"); - break; - default:break; - } - term_state = TSTATE_DATA; - break; - default: - if (debug>0) - System.out.println("ESC [ ? "+DCEvars[0]+" "+c); - term_state = TSTATE_DATA; - break; - } - break; - case TSTATE_CSI_DOLLAR: - switch (c) { - case '}': - System.out.println("Active Status Display now "+DCEvars[0]); - statusmode = DCEvars[0]; - break; -/* bad documentation? - case '-': - System.out.println("Set Status Display now "+DCEvars[0]); - break; - */ - case '~': - System.out.println("Status Line mode now "+DCEvars[0]); - break; - default: - System.out.println("UNKNOWN Status Display code "+c+", with Pn="+DCEvars[0]); - break; - } - term_state = TSTATE_DATA; - break; - case TSTATE_CSI: - switch (c) { - case '$': - term_state=TSTATE_CSI_DOLLAR; - break; - case '?': - DCEvar=0; - DCEvars[0]=0; - term_state=TSTATE_DCEQ; - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - DCEvars[DCEvar]=DCEvars[DCEvar]*10+((int)c)-48; - break; - case ';': - DCEvar++; - DCEvars[DCEvar] = 0; - break; - case 'c':/* send primary device attributes */ - /* send (ESC[?61c) */ - host.send(((char)ESC)+"[?1;2c"); - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" c"); - break; - case 'q': - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" q"); - term_state = TSTATE_DATA; - break; - case 'g': - /* used for tabsets */ - switch (DCEvars[0]){ - case 3:/* clear them */ - int nw = display.getColumns(); - Tabs = new byte[nw]; - break; - case 0: - Tabs[C] = 0; - break; - } - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" g"); - term_state = TSTATE_DATA; - break; - case 'h': - switch (DCEvars[0]) { - case 4: - insertmode = 1; - break; - case 20: - sendcrlf = true; - break; - default: - System.out.println("unsupported: ESC [ "+DCEvars[0]+" h"); - break; - } - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" h"); - break; - case 'l': - switch (DCEvars[0]) { - case 4: - insertmode = 0; - break; - case 20: - sendcrlf = false; - break; - } - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" l"); - break; - case 'A': // CUU - { - int limit; - /* FIXME: xterm only cares about 0 and topmargin */ - if (R > bm) - limit = bm+1; - else if (R >= tm) { - limit = tm; - } else - limit = 0; - if (DCEvars[0]==0) - R--; - else - R-=DCEvars[0]; - if (R < limit) - R = limit; - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" A"); - break; - } - case 'B': // CUD - /* cursor down n (1) times */ - { - int limit; - if (R < tm) - limit = tm-1; - else if (R <= bm) { - limit = bm; - } else - limit = rows - 1; - if (DCEvars[0]==0) - R++; - else - R+=DCEvars[0]; - if (R > limit) - R = limit; - else { - if (debug>2) System.out.println("Not limited."); - } - if (debug>2) System.out.println("to: " + R); - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" B (at C="+C+")"); - break; - } - case 'C': - if (DCEvars[0]==0) - C++; - else - C+=DCEvars[0]; - if (C>columns-1) - C=columns-1; - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" C"); - break; - case 'd': // CVA - R = DCEvars[0]; - System.out.println("ESC [ "+DCEvars[0]+" d"); - term_state = TSTATE_DATA; - break; - case 'D': - if (DCEvars[0]==0) - C--; - else - C-=DCEvars[0]; - if (C<0) C=0; - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" D"); - break; - case 'r': // DECSTBM - if (DCEvar>0) // Ray: Any argument is optional - { - R = DCEvars[1]-1; - if (R < 0) - R = rows-1; - else if (R >= rows) { - R = rows - 1; - } - } else - R = rows - 1; - display.setBottomMargin(DCEvars[1]-1); - if (R >= DCEvars[0]) - { - R = DCEvars[0]-1; - if (R < 0) - R = 0; - } - display.setTopMargin(DCEvars[0]-1); - _SetCursor(0,0); - if (debug>1) - System.out.println("ESC ["+DCEvars[0]+" ; "+DCEvars[1]+" r"); - term_state = TSTATE_DATA; - break; - case 'G': /* CUP / cursor absolute column */ - C = DCEvars[0]; - System.out.println("ESC [ "+DCEvars[0]+" G"); - term_state = TSTATE_DATA; - break; - case 'H': /* CUP / cursor position */ - /* gets 2 arguments */ - _SetCursor(DCEvars[0]-1,DCEvars[1]-1); - term_state = TSTATE_DATA; - if (debug>2) { - System.out.println("ESC [ "+DCEvars[0]+";"+DCEvars[1]+" H, moveoutsidemargins "+moveoutsidemargins); - System.out.println(" -> R now "+R+", C now "+C); - } - break; - case 'f': /* move cursor 2 */ - /* gets 2 arguments */ - R = DCEvars[0]-1; - C = DCEvars[1]-1; - if (C<0) C=0; - if (R<0) R=0; - term_state = TSTATE_DATA; - if (debug>2) - System.out.println("ESC [ "+DCEvars[0]+";"+DCEvars[1]+" f"); - break; - case 'L': - /* insert n lines */ - if (DCEvars[0]==0) - display.insertLine(R,display.SCROLL_DOWN); - else - display.insertLine(R,DCEvars[0],display.SCROLL_DOWN); - term_state = TSTATE_DATA; - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" L (at R "+R+")"); - break; - case 'M': - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+"M at R="+R); - if (DCEvars[0]==0) - display.deleteLine(R); - else - for (int i=0;i<DCEvars[0];i++) - display.deleteLine(R); - term_state = TSTATE_DATA; - break; - case 'K': - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" K"); - /* clear in line */ - switch (DCEvars[0]) { - case 0:/*clear to right*/ - if (C<columns-1) - display.deleteArea(C,R,columns-C,1); - break; - case 1:/*clear to the left*/ - if (C>0) - display.deleteArea(0,R,C,1); // Ray: Should at least include character before this one, not C-1 - break; - case 2:/*clear whole line */ - display.deleteArea(0,R,columns,1); - break; - } - term_state = TSTATE_DATA; - break; - case 'J': - /* clear display.below current line */ - switch (DCEvars[0]) { - case 0: - if (R<rows-1) - display.deleteArea(0,R + 1,columns,rows-R-1); - if (C<columns-1) - display.deleteArea(C,R,columns-C,1); - break; - case 1: - if (R>0) - display.deleteArea(0,0,columns,R-1); - if (C>0) - display.deleteArea(0,R,C,1); // Ray: Should at least include character before this one, not C-1 - break; - case 2: - display.deleteArea(0,0,columns,rows); - break; - } - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" J"); - term_state = TSTATE_DATA; - break; - case '@': - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" @"); - for (int i=0;i<DCEvars[0];i++) - display.insertChar(C,R,' ',attributes); - term_state = TSTATE_DATA; - break; - case 'P': - if (debug>1) - System.out.println("ESC [ "+DCEvars[0]+" P, C="+C+",R="+R); - if (DCEvars[0]==0) DCEvars[0]=1; - for (int i=0;i<DCEvars[0];i++) - display.deleteChar(C,R); - term_state = TSTATE_DATA; - break; - case 'n': - switch (DCEvars[0]){ - case 5: /* malfunction? No malfunction. */ - host.send(((char)ESC)+"[0n"); - if(debug > 1) - System.out.println("ESC[5n"); - break; - case 6: - host.send(((char)ESC)+"["+R+";"+C+"R"); - if(debug > 1) - System.out.println("ESC[6n"); - break; - default: - if (debug>0) - System.out.println("ESC [ "+DCEvars[0]+" n??"); - break; - } - term_state = TSTATE_DATA; - break; - case 'm': /* attributes as color, bold , blink,*/ - if (debug>3) - System.out.print("ESC [ "); - if (DCEvar == 0 && DCEvars[0] == 0) - attributes = 0; - for (i=0;i<=DCEvar;i++) { - switch (DCEvars[i]) { - case 0: - if (DCEvar>0) - attributes =0; - break; - case 4: - attributes |= CharDisplay.UNDERLINE; - break; - case 1: - attributes |= CharDisplay.BOLD; - break; - case 7: - attributes |= CharDisplay.INVERT; - break; - case 5: /* blink on */ - break; - case 25: /* blinking off */ - break; - case 27: - attributes &= ~CharDisplay.INVERT; - break; - case 24: - attributes &= ~CharDisplay.UNDERLINE; - break; - case 22: - attributes &= ~CharDisplay.BOLD; - break; - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - attributes &= ~(0xf<<3); - attributes |= ((DCEvars[i]-30)+1)<<3; - break; - case 39: - attributes &= ~(0xf<<3); - break; - case 40: - case 41: - case 42: - case 43: - case 44: - case 45: - case 46: - case 47: - attributes &= ~(0xf<<7); - attributes |= ((DCEvars[i]-40)+1)<<7; - break; - case 49: - attributes &= ~(0xf<<7); - break; - - default: - System.out.println("ESC [ "+DCEvars[i]+" m unknown..."); - break; - } - if (debug>3) - System.out.print(""+DCEvars[i]+";"); - } - if (debug>3) - System.out.print(" (attributes = "+attributes+")m \n"); - term_state = TSTATE_DATA; - break; - default: - if (debug>0) - System.out.println("ESC [ unknown letter:"+c+" ("+((int)c)+")"); - term_state = TSTATE_DATA; - break; - } - break; - default: - term_state = TSTATE_DATA; - break; - } - if (C > columns) C = columns; - if (R > rows) R = rows; - if (C < 0) C = 0; - if (R < 0) R = 0; - if (doshowcursor) - display.setCursorPos(C, R); - display.markLine(R,1); - } -} diff --git a/web/root/telnet/examples/bbs.html b/web/root/telnet/examples/bbs.html deleted file mode 100644 index 89375f178e18ac9a3009b559830eb3f8ea100bbf..0000000000000000000000000000000000000000 --- a/web/root/telnet/examples/bbs.html +++ /dev/null @@ -1,33 +0,0 @@ -<HTML> -<HEAD> -<TITLE>The JAVA Telnet Applet - Cereal BBS</TITLE> -</HEAD> - -<H1>A JAVA Telnet Applet example - Cereal BBS </H1> - -<P>© 1996 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -© 1996 <A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus -Meißner</A> -<P> -BBS Example one connects you to cereal.mv.com BBS after you pressed the button -below. It supports full ANSI graphics and uses the appWrapper for maximum -utilization of the web browser. After detaching the telnet window you can -still go on browsing the web. -<P> -<APPLET CODEBASE="../" CODE="appWrapper.class" WIDTH=100 HEIGHT=25> -<PARAM NAME=applet VALUE="telnet"> -<PARAM NAME=startButton VALUE="Connect to Cereal!"> -<PARAM NAME=stopButton VALUE="Shutdown Telnet"> -<PARAM NAME=frameTitle VALUE="The Java Telnet Applet: Example [cereal.mv.com]"> -<PARAM NAME=address VALUE="cereal.mv.com"> -<PARAM NAME=port VALUE="23"> -<PARAM NAME=emulation VALUE="vt320"> -<PARAM NAME=VTcolumns VALUE="80"> -<PARAM NAME=VTrows VALUE="24"> -<PARAM NAME=VTfont VALUE="Courier"> -<PARAM NAME=VTfontsize VALUE="12"> -<PARAM NAME=VTbuffer VALUE="1000"> -<PARAM NAME=VTscrollbar VALUE="true"> -<PARAM NAME=VTcharset VALUE="ibm"> -</APPLET> -</HTML> diff --git a/web/root/telnet/examples/bbs2.html b/web/root/telnet/examples/bbs2.html deleted file mode 100644 index 09d54564729abab447f0fc0efddab23af807fe8f..0000000000000000000000000000000000000000 --- a/web/root/telnet/examples/bbs2.html +++ /dev/null @@ -1,29 +0,0 @@ -<HTML> -<HEAD> -<TITLE>The JAVA Telnet Applet - The Rock Garden BBS</TITLE> -</HEAD> - -<H1>A JAVA Telnet Applet example - The Rock Garden BBS</H1> - -<P>© 1996 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -© 1996 <A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus -Meißner</A> -<P> -BBS example two. Connect to Rock Garden BBS with fill ANSI graphics character -support. This example makes use of the appWrapper. -<P> -<APPLET CODEBASE="../" CODE="appWrapper.class" WIDTH=640 HEIGHT=480> -<PARAM NAME=applet VALUE="telnet"> - -<PARAM NAME=address VALUE="garden.hvs.com"> -<PARAM NAME=port VALUE="23"> -<PARAM NAME=emulation VALUE="vt320"> -<PARAM NAME=VTcolumns VALUE="80"> -<PARAM NAME=VTrows VALUE="24"> -<PARAM NAME=VTfont VALUE="Courier"> -<PARAM NAME=VTfontsize VALUE="12"> -<PARAM NAME=VTbuffer VALUE="1000"> -<PARAM NAME=VTscrollbar VALUE="true"> -<PARAM NAME=VTcharset VALUE="ibm"> -</APPLET> -</HTML> diff --git a/web/root/telnet/examples/bbs3.html b/web/root/telnet/examples/bbs3.html deleted file mode 100644 index c64d6f208bbe65f57b8f89f362dd366dae7b61ca..0000000000000000000000000000000000000000 --- a/web/root/telnet/examples/bbs3.html +++ /dev/null @@ -1,26 +0,0 @@ -<HTML> -<HEAD> -<TITLE>The JAVA Telnet Applet - Connection Universe BBS</TITLE> -</HEAD> - -<H1>A JAVA Telnet Applet example - Connection Universe BBS</H1> - -<P>© 1996 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -© 1996 <A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus -Meißner</A> -<P> -BBS example three. It connects you to Connection Universe with full ANSI -graphics character support. This example does not use the appWrapper. It -is recommended, however. -<P> -<APPLET CODEBASE="../" CODE="telnet.class" WIDTH=640 HEIGHT=480> -<PARAM NAME=address VALUE="www.cu-muc.de"> -<PARAM NAME=port VALUE="23"> -<PARAM NAME=emulation VALUE="vt320"> -<PARAM NAME=VTcolumns VALUE="80"> -<PARAM NAME=VTrows VALUE="24"> -<PARAM NAME=VTfont VALUE="Courier"> -<PARAM NAME=VTfontsize VALUE="12"> -<PARAM NAME=VTcharset VALUE="ibm"> -</APPLET> -</HTML> diff --git a/web/root/telnet/examples/lh.html b/web/root/telnet/examples/lh.html deleted file mode 100644 index 61d288e8898b7aff059184bc55b7d8587c033656..0000000000000000000000000000000000000000 --- a/web/root/telnet/examples/lh.html +++ /dev/null @@ -1,34 +0,0 @@ -<HTML> -<HEAD> -<TITLE>The JAVA Telnet Applet - localhost</TITLE> -</HEAD> - -<H1>A JAVA Telnet Applet - localhost</H1> - -<P>© 1996 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -© 1996 <A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus -Meißner</A> -<P> -Another example using the telnet applet only. Without the appWrapper it -causes the applet to hange when you leave the page. It is customized with -a buttonbar for usage on UNIX systems. -<P> -<APPLET CODEBASE="../" CODE="telnet.class" WIDTH=640 HEIGHT=480> -<PARAM NAME=address VALUE="localhost"> -<PARAM NAME=port VALUE="23"> -<PARAM NAME=emulation VALUE="vt320"> -<PARAM NAME=VTcolumns VALUE="80"> -<PARAM NAME=VTrows VALUE="24"> -<PARAM NAME=VTfont VALUE="Courier"> -<PARAM NAME=VTfontsize VALUE="12"> -<PARAM NAME=VTbuffer VALUE="1000"> -<PARAM NAME=VTscrollbar VALUE="true"> -<PARAM NAME=1#Button VALUE="List Users|who\n"> -<PARAM NAME=2#Button VALUE="Execute:|sag \@exec@\n"> -<PARAM NAME=3#Input VALUE="exec#10|ps"> -<PARAM NAME=4#Button VALUE="Connect:|\$connect(\@addr@)"> -<PARAM NAME=5#Input VALUE="addr#20|localhost"> -<PARAM NAME=6#Button VALUE="Disconnect!|\$disconnect()"> -<PARAM NAME=script VALUE="login:|leo|TERM =|vt100"> -</APPLET> -</HTML> diff --git a/web/root/telnet/examples/mg.html b/web/root/telnet/examples/mg.html deleted file mode 100644 index 2baa869f2703d5ab3eb9f8e9eba084bfd3f946a5..0000000000000000000000000000000000000000 --- a/web/root/telnet/examples/mg.html +++ /dev/null @@ -1,49 +0,0 @@ -<HTML> -<HEAD> -<TITLE>The Java(tm) Telnet Applet: Connect to MorgenGrauen</TITLE> -</HEAD> -<BODY> - -<H1>The Java<SUP>(tm)</SUP> Telnet Applet: Connect to MorgenGrauen</H1> - -<P>© 1996-98 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -<A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus Meißner</A> -<P> -This is a variation with almost all available parameters set. Two modules -(ButtonBar and Script) are used for customization. It will login you as -guest in the MUD MorgenGrauen. -<P> - -<APPLET CODEBASE="../" CODE="telnet.class" WIDTH=640 HEIGHT=480> - <PARAM NAME=address VALUE="mg.mud.de"> - <PARAM NAME=port VALUE="23"> - - <!-- terminal emulation --> - <PARAM NAME=VTscrollbar VALUE="true"> - <PARAM NAME=VTresize VALUE="font"> - <PARAM NAME=VTfont VALUE="Courier"> - <PARAM NAME=VTfontsize VALUE="13"> - <PARAM NAME=VTid VALUE="vt320"> - - <!-- modules: #1 is a buttonbar --> - <PARAM NAME=module#1 VALUE="ButtonBar@North"> - <PARAM NAME=1#Button VALUE="Norden|norden\n\r"> - <PARAM NAME=2#Button VALUE="S\üden|sueden\n\r"> - <PARAM NAME=3#Button VALUE="Westen|westen\n\r"> - <PARAM NAME=4#Button VALUE="Osten|Osten\n\r"> - <PARAM NAME=5#Button VALUE="Anwesende|kwer\n\r"> - <PARAM NAME=6#Button VALUE="HILFE!|hilfe \@help@\n\r"> - <PARAM NAME=7#Input VALUE="help#20|"> - <PARAM NAME=8#Button VALUE="Verbinden|\$connect()"> - <PARAM NAME=9#Button VALUE="Abbrechen|\$disconnect()"> - <PARAM NAME=10#Button VALUE="Externes Fenster|\$detach()"> - <PARAM NAME=11#Button VALUE="Text senden:|\@send@\r\n"> - <PARAM NAME=12#Input VALUE="send#80|wer"> - - <!-- modules: #2 is a script --> - <PARAM NAME=module#2 VALUE="Script"> - <PARAM NAME=script VALUE="denn ?|gast|EMail|none|ch:|weiblich"> - -</APPLET> -</BODY> -</HTML> diff --git a/web/root/telnet/examples/tapp.html b/web/root/telnet/examples/tapp.html deleted file mode 100644 index 9501a1a3aeec47f9ebe08261f0378a3098290362..0000000000000000000000000000000000000000 --- a/web/root/telnet/examples/tapp.html +++ /dev/null @@ -1,21 +0,0 @@ -<HTML> -<HEAD> -<TITLE>The JAVA Telnet Applet - TAPPMud</TITLE> -</HEAD> -</BODY> - -<H1>A JAVA Telnet Applet example - TAPPMud</H1> - -<P>© 1996 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -© 1996 <A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus -Meißner</A> -<P> -This is a very small example with no customization. The telnet applet itself -is loaded on the page. Leaving the page causes the applet to stop working, -but no disconnecting from the remote host.<P> - -<APPLET CODEBASE="../" CODE="telnet.class" WIDTH=600 HEIGHT=400> -<PARAM NAME=address VALUE="tapp.mud.de"> -</APPLET> -</BODY> -</HTML> diff --git a/web/root/telnet/frame.class b/web/root/telnet/frame.class deleted file mode 100644 index 24cd6b269e1c8e46fae41295679c9717c22e25da..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/frame.class and /dev/null differ diff --git a/web/root/telnet/frame.java b/web/root/telnet/frame.java deleted file mode 100644 index d30d5a19d57d1904100b1f2b9c5179e24d17277e..0000000000000000000000000000000000000000 --- a/web/root/telnet/frame.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * frame -- a frame subclass for handling frame events - * -- - * $Id: frame.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Tue Jul 8 10:02:36 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -import java.awt.Frame; -import java.awt.Component; -import java.awt.Event; -import java.applet.Applet; - -public class frame extends Frame -{ - public frame(String title) { super(title); } - - public boolean handleEvent(Event evt) { - if(evt.target == this && evt.id == Event.WINDOW_DESTROY) { - Component comp[] = getComponents(); - for(int i = comp.length - 1; i >= 0; i--) - if(comp[i] instanceof Applet) { - ((Applet)comp[i]).stop(); - this.dispose(); - return true; - } - } - return false; - } -} - - - diff --git a/web/root/telnet/ibmtest.html b/web/root/telnet/ibmtest.html deleted file mode 100644 index 0140ce6e02e8c8e89d04e37def8605c185d0b3bc..0000000000000000000000000000000000000000 --- a/web/root/telnet/ibmtest.html +++ /dev/null @@ -1,31 +0,0 @@ -<HTML> -<HEAD> -<TITLE>The JAVA Telnet Applet</TITLE> -</HEAD> - -<H1>The JAVA Telnet Applet</H1> - -<P>© 1996 <A HREF="mailto:leo@first.gmd.de">Matthias L. Jugel</A>, -© 1996 <A HREF="mailto:msmeissn@cip.informatik.uni-erlangen.de">Marcus -Meißner</A> - -<APPLET CODE="telnet.class" WIDTH=640 HEIGHT=480> -<PARAM NAME=address VALUE="tanis.first.gmd.de"> -<PARAM NAME=port VALUE="23"> -<PARAM NAME=emulation VALUE="vt320"> -<PARAM NAME=VTcolumns VALUE="80"> -<PARAM NAME=VTrows VALUE="24"> -<PARAM NAME=VTfont VALUE="Courier"> -<PARAM NAME=VTfontsize VALUE="12"> -<PARAM NAME=VTbuffer VALUE="1000"> -<PARAM NAME=VTscrollbar VALUE="true"> -<PARAM NAME=VTcharset VALUE="ibm"> -<PARAM NAME=1#Button VALUE="List Users|who\n"> -<PARAM NAME=2#Button VALUE="Execute:|sag \@exec@\n"> -<PARAM NAME=3#Input VALUE="exec#10|ps"> -<PARAM NAME=4#Button VALUE="Connect:|\$connect(\@addr@)"> -<PARAM NAME=5#Input VALUE="addr#20|localhost"> -<PARAM NAME=6#Button VALUE="Disconnect!|\$disconnect()"> -<PARAM NAME=script VALUE="login:|leo|TERM =|vt100"> -</APPLET> -</HTML> diff --git a/web/root/telnet/index.download.html b/web/root/telnet/index.download.html deleted file mode 100644 index 27e680d4931894db11c2236b1a08badb697f0339..0000000000000000000000000000000000000000 --- a/web/root/telnet/index.download.html +++ /dev/null @@ -1,182 +0,0 @@ -<!doctype HTML public "-//W30//DTD W3 HTML 3.0//EN"> -<HTML> - <HEAD> - <TITLE>The Java(tm) Telnet Applet: Downloading and Unpacking</TITLE> - </HEAD> - <BODY BGCOLOR="#ffffff"> - <H1>The <A HREF="http://java.sun.com/">Java<SUP>(tm)</SUP></A> - Telnet Applet: Download</H1> - © 1996, 97 <A HREF="mailto:leo@mud.de">Matthias L. Jugel</A>, - <A HREF="mailto:marcus@mud.de">Marcus Meißner</A> - <HR> - <H2 ALIGN=CENTER> - [<A HREF="#package">Package</A> | <A HREF="#class">Classes</A>] - </H2> - <HR> - <P> - <A NAME="package"></A> - <H2>Package download and Unpacking</H2> - Select the package according to your operating system. Apple users may - choose to select the <A HREF="../telnet.zip">telnet.zip</A> file. Please be - aware that the packages contain <I>long filenames</I> and may not work with - systems not supporting these, such as Windows 3.x.<P> - If you have problems unpacking one of the packages read the notes below the - table or <A HREF="mailto:leo@mud.de,marcus@mud.de">contact us</A> if it doesn't make - sense. - <P> - <CENTER> - <TABLE BORDER=1> - <TR ALIGN=CENTER> - <TD><TD><B>UNIX</B> <TD><B>Windows NT/95 & Apple</B></TD> - <TR ALIGN=CENTER> - <TD><B>full package</B> - <TD><A HREF="../telnet.tgz">telnet.tgz</A></TD> - <TD><A HREF="../telnet.zip">telnet.zip</A></TD> - <TR ALIGN=CENTER> - <TD><B>classes only</B> - <TD><A HREF="../classes.tgz">classes.tgz</A></TD> - <TD><A HREF="../classes.zip">classes.zip</A></TD> - <TR ALIGN=CENTER> - <TR ALIGN=CENTER> - <TD><B>patches</B> - <TD COLSPAN=2> - <A HREF="../telnet-srp-diff.tar.gz">secure authentication</A><BR> - </TD> - <TR ALIGN=CENTER> - <TD><B>full package</B> - <TD><A HREF="../telnet_p.tgz">telnet_p.tgz</A></TD> - <TD><A HREF="../telnet_p.zip">telnet_p.zip</A></TD> - <TR ALIGN=CENTER> - <TD><B>classes only</B> - <TD><A HREF="../class_p.tgz">class_p.tgz</A></TD> - <TD><A HREF="../class_p.zip">class_p.zip</A></TD> - </TABLE> - <P> - <I>Note:</I> <A HREF="http://srp.stanford.edu/srp/"><B>Secure - Remote Password Authentication (SRP)</B></A>, © - <A HREF="http://www.stanford.edu">Stanford University</A>, - <A HREF="http://srp.stanford.edu/srp/export/eps-1.3.tar.gz"> - official distribution</A><BR> download the <B>patched</B> - version if you don't want to do it yourself.<P> - <I>Note:</I> We recommend you download the classes.zip in any case and - use the <BR><TT><APPLET ARCHIVE="classes.zip" ...></TT> parameter.<BR> - This <B>decreases the download time</B> for the applet! - <P> - <TABLE BORDER=1> - <TR ALIGN=CENTER> - <TD><TD><B>Linux</B> <TD><B>Windows NT</B></TD> - <TR ALIGN=CENTER> - <TD><B>simple relayd</B> - <TD><A HREF="tools/relayd">relayd</A></TD> - <TD><A HREF="tools/relayd.exe">relayd.exe</A></TD> - <TR ALIGN=CENTER> - <TD><B>multi relayd</B> - <TD><A HREF="tools/mrelayd">mrelayd</A></TD> - <TD><A HREF="tools/mrelayd.exe">mrelayd.exe</A></TD> - </TABLE> - <P> - <I>Note:</I> Do a <B>chmod +x relayd</B> after download to make the - file executable.<BR>If you need a binary for a different - platform <A HREF="mailto:leo@mud.de,marcus@mud.de">please - ask.</A> - </CENTER> - <P> - <DL> - <DT><B>Apple Computers:</B><P> - <DD>Unless you have a UNIX tar and gzip implementation download the - <A HREF="../telnet.zip">telnet.zip</A> file.<P> - <DT><B>Windows NT/95:</B><P> - <DD>Select the <A HREF="../telnet.zip">telnet.zip</A> file and unpack it - using one of the publicly available tools, like - <A HREF="http://www.winzip.com">WinZIP</A>. Make sure you have selected - the checkbox to <B>extract subdirectories</B>!<P> - <DT><B>UNIX:</B><P> - <DD>Extract the files from the <A HREF="../telnet.tgz">telnet.tgz</A> file - using the following command: - <PRE><B>gunzip -c telnet.tgz | tar xvf -</B></PRE> - This will extract a directory called <B>Telnet/</B> containing the - full source code + documentation and precompiled classes. <B>gunzip</B> - (GNU unzip) can be found on a public ftp server.<P> - </DL> - For further information on using and installing the applet please refer to the - <A HREF="Documentation/index.html">Documentation</A>. - <HR> - <A NAME="class"></A> - <H2>Direct CLASS download:</H2> - Sometimes it is not necessary to download the complete package just to update - one class. Below is the tree of classes to directly download the class you - may need. If you are not sure, which classes have changed have a look at - your copy of the file REVISION and the same file on the home page of the - applet. If you are viewing this page from your own copy, - <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet/index.download.html"> - go to the home page download</A>. Higher revision numbers indicate changes. - <P> - Right click on the link and select <I>Save as ...</I>. Please make sure you - download all needed classes. If you're downloading the first time, please - use the <A HREF="#package">package download</A> links above! - <P> - If you want all classes at once download either - <A HREF="../classes.tgz">classes.tgz</A> (<B>UNIX</B>) or - <A HREF="../classes.zip">classes.zip</A> (<B>Windows/Apple</B>). - <P> - <UL> - <LI><A HREF="appWrapper.class">appWrapper.class</A> (applet wrapper) - <LI><A HREF="frame.class">frame.class</A> (appWrapper needs it!)<P> - <LI><B><A HREF="telnet.class">telnet.class</A></B> (applet/application) - <UL> - <LI><A HREF="display/CharDisplay.class">display/CharDisplay.class</A> - (character display class) - <LI><A HREF="display/SoftFont.class">display/SoftFont.class</A> - (software font for special characters) - <LI><A HREF="display/Terminal.class">display/Terminal.class</A> - (abstract terminal) - <LI><A HREF="display/TerminalHost.class">display/TerminalHost.class</A> - (abstract host interface) - <LI><A HREF="display/vt320.class">display/vt320.class</A> - (VT/ANSI terminal emulation) - <P> - <LI><A HREF="socket/TelnetIO.class">socket/TelnetIO.class</A> - (telnet io handling) - <LI><A HREF="socket/StatusPeer.class">socket/StatusPeer.class</A> - (status peer interface) - <P> - <LI><A HREF="modules/Module.class">modules/Module.class</A> - (abstract module interface) - <LI><A HREF="modules/ButtonBar.class">modules/ButtonBar.class</A> - (programmable button bar) - <LI><A HREF="modules/Script.class">modules/Script.class</A> - (simple script module) - <LI><A HREF="modules/MudConnector.class">modules/MudConnector.class</A> - (a specialized specialized example module) - <LI><A HREF="modules/BSXModule.class">modules/BSXModule</A> - (a graphical MUD extension) - <UL> - <LI><A HREF="modules/bsx/BSXDisplay.class">modules/bsx/BSXDisplay.class</A> - <LI><A HREF="modules/bsx/BSXGraphic.class">modules/bsx/BSXGraphic.class</A> - <LI><A HREF="modules/bsx/BSXInputStream.class">modules/bsx/BSXInputStream.class</A> - <LI><A HREF="modules/bsx/BSXObject.class">modules/bsx/BSXObject.class</A> - <LI><A HREF="modules/bsx/BSXPolygon.class">modules/bsx/BSXPolygon.class</A> - <LI><A HREF="modules/bsx/BSXScene.class">modules/bsx/BSXScene.class</A> - </UL> - </UL><P> - <LI><B>additional tools:</B> - <UL> - <LI><A HREF="tools/proxy.class">tools/proxy.class</A> (application)<BR> - Standalone program to be run as server for telnet redirection. - <LI><A HREF="tools/redirector.class">tools/redirector.class</A> - (internal redirector) - </UL><P> - <LI><A HREF="IOtest.class">IOtest.class</A> (application) - <LI><A HREF="TelnetWrapper.class">TelnetWrapper.class</A> (application) - <LI><A HREF="CharDisplayTest.class">CharDisplayTest.class</A> - </UL> - <HR> - <A HREF="index.html"> - <IMG ALIGN=LEFT SRC="Documentation/images/left.gif" BORDER=0 ALT="[BACK]"></A> - <B>Get the <A HREF="http://www.first.gmd.de/persons/leo/java/Telnet">latest - version</A> here!</B> <BR> - <!-- html-ts start --> - Last modified: Wed Jul 23 14:46:07 1997 by Matthias L. Jugel - <!-- html-ts end --> - </BODY> -</HTML> diff --git a/web/root/telnet/index.ssjs b/web/root/telnet/index.ssjs deleted file mode 100644 index d9889e380df08817b0631532165e775126960078..0000000000000000000000000000000000000000 --- a/web/root/telnet/index.ssjs +++ /dev/null @@ -1,2 +0,0 @@ -load(web_root_dir + "/../lib/template.ssjs"); -write_template("telnet.inc"); \ No newline at end of file diff --git a/web/root/telnet/modules/BSXModule.class b/web/root/telnet/modules/BSXModule.class deleted file mode 100644 index 7dbf91c7379142919954dd2d85e7b756b06668ea..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/BSXModule.class and /dev/null differ diff --git a/web/root/telnet/modules/BSXModule.java b/web/root/telnet/modules/BSXModule.java deleted file mode 100644 index 5ca21fc16e7b6cdd909f1ce0454e625b9debeb9a..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/BSXModule.java +++ /dev/null @@ -1,562 +0,0 @@ -/** - * BSXModule -- implements BSX controll sequence handling - * -- - * $Id: BSXModule.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Tue Oct 14 18:00:00 1997 by Thomas Kriegelstein :$ - * - * This file and the related package may be part of "The Java Telnet - * Applet" by Matthias L. Jugel. - * - * This 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) - * any later version. - * - * "The BSXModule" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -package modules; - -import telnet; -import frame; - -import modules.bsx.*; -import java.applet.Applet; -import java.awt.*; -import java.io.*; -import java.util.*; -/** - * The ultimate BSX module implements most of the common used - * BSX controll sequences. - * <P> - * Features:<UL> - * <LI>a Statemachine to parse the Strings passed by the telnet - * <LI>a own package named bsx, for Window and Polygon handling - * terrible english because my native language is german - * </UL> - * TODO:<UL> - * <LI>more BSX Sequences - * <LI>Documentaion - * </UL> - * - * @author Thomas Kriegelstein - */ - -public class BSXModule extends Panel implements Module -{ - /** Client Version */ - protected String clientVersion = "Foob 0.5"; - /** The Frame, where the graphic is drawn */ - private BSXDisplay bsxWindow; - /** Our parent, the telnet app. */ - private telnet parent; - /** the Container, wich is around us */ - private Container toplevel; - /** the Buttons to switch on and off the logging and BSX handling */ - private Button bsxButton,logButton; - /** the states of the Buttons */ - private boolean bsxCheckIt,logging; - /** register o as our parent */ - public void setLoader(Object o) { parent = (telnet)o; } - /** do nothing */ - public void connect(String host, int port) {} - /** do nothing */ - public void disconnect() {} - /** - * This method is called by the telnet, so that we can parse the String. - * Prints out the filtered String if logging s enabled. - * @param String s the String to be parsed - * @return a filtered String with no BSX sequences in it - */ - public String receive(String s) - { - String res; - if (!bsxCheckIt) res=s; - else res=parseString(s); - if (logging) - System.out.println(res); - return res; - } - /** - * Adds two Buttons to the Panel and instanciates a BSXWindow. - */ - public void addNotify() - { - this.setLayout(new GridLayout(1,0)); - // Enable BSX Parsing - if (bsxWindow==null) - { - this.add(bsxButton=new Button("BSX aus!")); - bsxCheckIt=true; - this.add(logButton=new Button("Logging an!")); - logging=false; - bsxWindow = new BSXDisplay(); - } - // - super.addNotify(); - } - /** - * Java 1.0 eventhandling routines. - * @param Event e - * @return true if Event has been recognized and fullfilled. - */ - public boolean handleEvent(Event e) - { - if ((e.id==Event.ACTION_EVENT)&&(e.target==bsxButton)) - { - bsxCheckIt=!bsxCheckIt; - if (bsxCheckIt) - { - parent.writeToSocket("#VER "+clientVersion+"\r\n"); - bsxButton.setLabel("BSX aus!"); - bsxWindow.show(); - } - else - { - parent.writeToSocket("#VER\r\n"); - bsxButton.setLabel("BSX an!"); - bsxWindow.hide(); - if (debug>1) - { - parent.writeToUser(lastCommand+strIdentifier+BSXData); - System.out.println("BSX off: last Input -"); - System.out.println(lastCommand+strIdentifier+BSXData); - } - } - resetMachine(); - return true; - } - if ((e.id==Event.ACTION_EVENT)&&(e.target==logButton)) - { - logging=!logging; - if (logging) - { - logButton.setLabel("Logging aus!"); - } - else - { - logButton.setLabel("Logging an!"); - } - return true; - } - return super.handleEvent(e); - } - - /** - * And here we go again * latest implementation of my StateMachine - * all methods that return a String, return the String passed to them - * but without the chars they have recognized and solved - * the real results are contained in the (global) variables - */ - - /** - * my Debuglevel, because this software is still beta. - */ - private static int debug = 0; - /** - * a main for test-purposes - */ - public static void main (String args[]) - { - BSXModule bsxm=new BSXModule(); - debug=1; - String res; - res=bsxm.parseString("Testing@Hawk@RQV@SCEintro.@VIO/magier:foobar.@RFS@RMO/magier:foo"); - res+=bsxm.parseString("bar.@RFSThis is a test.@TMS@PRO@RFS@BOMTest me Carefully."); - System.out.println("Gefiltert: "+res); - } - /** - * lastCommand is a Statedescriptor.<BR> - * if lastCommand.length()=4 then the entire Command has been read - * else go on reading the command completly<BR> - * Commands are: PRO SCE VIO DFS DFO TMS RMO RFS RQV PUR - * additional commands are: BOM EOM LON LOF TXT which will not be supported - * by Regenbogen BSX java Client.<BR> - * Commands are preceeded by a @ - */ - private String lastCommand=""; - /** - * lastState identifies what we have done last time we received a string - * <UL> - * <LI>-1 undefined -> used to mark succesful work - * <LI> 0 nothing -> go on searching for a new command - * <LI> 1 identifier -> we have to complete the identifier - * <LI> 2 download -> we have to get more BSXData - * </UL> - */ - private int lastState; - /** holds the identifier of the current object */ - private String strIdentifier=""; - /** holds the X position of the current object as a String*/ - private String strXPos=""; - /** holds the X position of the current object as an int */ - private int intXPos=0; - /** holds the Y position of the current object as a String*/ - private String strYPos=""; - /** holds the Y position of the current object as an int */ - private int intYPos=0; - /** holds the number of polygons in the current description as a String */ - private String strPolys=""; - /** holds the number of polygons in the current description as an int */ - private int intPolys=0; - /** holds the number of edges in the current polygon as a String */ - private String strEdges=""; - /** holds the number of edges in the current polygon as an int */ - private int intEdges=0; - /** holds the BSX description, including the numbers of polygons and edges */ - private String BSXData=""; - /** - * reset machine to an initial status - */ - private void resetMachine() - { - if (debug>0) - { - System.err.println("BSXStateMachine statustrace:"); - System.err.println("Command: "+lastCommand); - System.err.println("State: "+lastState); - System.err.println("Identifier: "+strIdentifier); - } - lastCommand=""; - lastState=0; - strIdentifier=""; - strXPos=""; - intXPos=0; - strYPos=""; - intYPos=0; - strPolys=""; - intPolys=0; - strEdges=""; - intEdges=0; - BSXData=""; - } - /** - * convert a Hexnumber contained in a 2byteString into int - * @param String s - * @return the converted int or 0 if not succesful - */ - private int asciiHexToInt(String s) - { - if (s.length()==2) - { - try - { - int h=(int)s.charAt(0); - if (h>='A') h-='A'-10; else h-='0'; - int l=(int)s.charAt(1); - if (l>='A') l-='A'-10; else l-='0'; - if (debug>9) warn("Converting Hex: "+s+" to int: "+(h*16+l)); - return h*16+l; - } - catch (Exception e) - { - return 0; - } - } - return 0; - } - /** - * The method called to start the parsing - * @param String s - * @return filtered String - */ - private String parseString(String s) - { - if ((s.indexOf("@")==-1)&&(lastState==0)) - { - if (debug>0) warn("parseString done"); - return s; - } - if (lastState!=0) - { - if (debug>0) warn("parseString pending Input"); - s=decodeCommand(s); - } - int i=0; - int pos=s.indexOf("@",i); - String res=""; - while ((pos!=-1)&&(pos<s.length())) - { - if (debug>0) warn("parseString Command at "+pos); - res+=s.substring(0,pos); - if (debug>0) warn("still to parse: "+s.substring(pos)); - String tmp=decodeCommand(s.substring(pos)); - if (tmp.equals(s.substring(pos))) i++; - else i=0; - s=tmp; - pos=s.indexOf("@",i); // search for next Command - } - res+=s; - return res; - } - /** - * simple messaging for debug purposes - * @param String s to write to stderr - */ - private void warn(String s) { System.err.println("Warning: "+s+"."); } - /** - * read the identifier into strIdentifier - * @param String s to be parsed - * @returns String without the first identifier - */ - private String readIdentifier(String s) - { - if (strIdentifier.equals("")) lastState=1; - if (lastState==1) - { - int i=s.indexOf("."); - if (i==-1) - { - strIdentifier+=s; - return ""; - } - else - { - lastState=-1; - strIdentifier+=s.substring(0,i); - return s.substring(i+1); - } - } - return s; - } - /** - * read the BSX-Descriptions into BSXData - * @param String s to be parsed - * @return String without the first BSX Data sequence - */ - private String readBSXData(String s) - { - if (strPolys.equals("")) lastState=2; - if (lastState==2) - { - while((strPolys.length()<2)&&(s.length()>0)) - { - BSXData+=s.charAt(0); - strPolys+=s.charAt(0); s=s.substring(1); - } - if (strPolys.length()<2) return ""; - else if (debug>1) warn("PolyCount read:"+strPolys); - if (intPolys == 0) - intPolys=asciiHexToInt(strPolys); - if (debug>9) warn("equals "+intPolys); - while ((s.length()>0)&&(intPolys>0)) - { - while((strEdges.length()<2)&&(s.length()>0)) - { - BSXData+=s.charAt(0); - strEdges+=s.charAt(0); s=s.substring(1); - } - if (strEdges.length()<2) return ""; - else if (debug>1) warn("EdgeCount read:"+strEdges); - if (intEdges == 0) - intEdges=(asciiHexToInt(strEdges)*2+1)*2; - // color plus every edge x,y times 2 is the number of chars to read. - while((s.length()>0)&&(intEdges>0)) - { - BSXData+=s.charAt(0); s=s.substring(1); - intEdges--; - } - if (intEdges>0) return ""; - strEdges=""; // reset the number of Edges! - intPolys--; - } - if (intPolys>0) return ""; - if (intPolys==0) strPolys=""; - lastState=-1; - } - return s; - } - /** - * read the Command, catch all necessary data, and execute it - * @param String s to be parsed - * @return String without first command - */ - private String decodeCommand(String s) - { - while ((lastCommand.length()!=4)&&(s.length()>0)) - { - lastCommand+=s.charAt(0); s=s.substring(1); - } - if (lastCommand.length()!=4) - { - lastState=-1; - return ""; - } - if (false) {} // hehe, just to write everytime "else if" - // ReFresh Scene - else if (lastCommand.equals("@RFS")) - { - resetMachine(); - if (bsxWindow!=null) bsxWindow.repaint(); - else warn("No BSX Output Available"); - } - // VIsualize Object - else if (lastCommand.equals("@VIO")) - { - s=readIdentifier(s); - if (lastState==1) return ""; - while ((strXPos.length()<2)&&(s.length()>0)) - { - strXPos+=s.charAt(0); s=s.substring(1); - } - if (strXPos.length()!=2) - { - return ""; - } - while ((strYPos.length()<2)&&(s.length()>0)) - { - strYPos+=s.charAt(0); s=s.substring(1); - } - if (strYPos.length()!=2) - { - return ""; - } - intXPos=asciiHexToInt(strXPos); - intYPos=asciiHexToInt(strYPos); - if (bsxWindow!=null) - if (!bsxWindow.showObject(strIdentifier,intXPos,intYPos)) - if (parent!=null) - parent.writeToSocket("#RQO "+strIdentifier+"\r\n"); - else warn("no Socket to send to"); - else - if (debug>0) - System.out.println("Query BSX-Description for "+strIdentifier); - else ; - else warn("no BSX Output available"); - resetMachine(); - } - // ReMove Object - else if (lastCommand.equals("@RMO")) - { - s=readIdentifier(s); - if (lastState==1) return ""; - if (bsxWindow!=null) bsxWindow.removeObject(strIdentifier); - else warn("no BSX Output available"); - resetMachine(); - } - // ReQuest Version - else if (lastCommand.equals("@RQV")) - { - if (parent!=null) parent.writeToSocket("#VER "+clientVersion+"\r\n"); - else warn("no Socket to send to"); - resetMachine(); - } - // PROmotion - else if (lastCommand.equals("@PRO")) - { - if (parent!=null) - parent.writeToUser( -"****************************************************************************\r\n"+ -"* *\r\n"+ -"* Regenbogen BSX - Ein MultiUser Dungeon mit Grafikunterst�tzung *\r\n"+ -"* Adresse: rb.mud.de Port: 4711 Admins: mud@rb.mud.de *\r\n"+ -"* Hier ist was los Leute! Kommt. Lest. Schaut. Spielt. Und Redet. *\r\n"+ -"* *\r\n"+ -"* Client: von Foobar basierend auf Arbeiten von Riwa und Hate@Morgengrauen *\r\n"+ -"* *\r\n"+ -"*****************************************************************Java*rulez*\r\n" - ); - else warn("no User to display promotion available"); - resetMachine(); - } - // display SCEne - else if (lastCommand.equals("@SCE")) - { - s=readIdentifier(s); - if (lastState==1) return ""; - if (bsxWindow!=null) - if (!bsxWindow.showScene(strIdentifier)) - if (parent!=null) - parent.writeToSocket("#RQS "+strIdentifier+"\r\n"); - else warn("no Socket to send to"); - else - if (debug>0) - System.out.println("Query BSX-Scene for "+strIdentifier); - else ; - else warn("no BSX Output available"); - resetMachine(); - } - // DeFine Object - else if (lastCommand.equals("@DFO")) - { - s=readIdentifier(s); - if (lastState==1) return ""; - s=readBSXData(s); - if (lastState==2) return ""; - BSXInputStream bis=new BSXInputStream(new StringBufferInputStream(BSXData)); - if (bsxWindow!=null) - try { - bsxWindow.addObject(strIdentifier,bis.readBSXGraphic()); - } catch (IOException e) { e.printStackTrace(); resetMachine(); return s; } - else warn("no BSX Output available"); - resetMachine(); - } - else if (lastCommand.equals("@DFS")) - { - s=readIdentifier(s); - if (lastState==1) return ""; - s=readBSXData(s); - if (lastState==2) return ""; - BSXInputStream bis=new BSXInputStream(new StringBufferInputStream(BSXData)); - if (bsxWindow!=null) - try { - bsxWindow.addScene(strIdentifier,bis.readBSXGraphic()); - } catch (IOException e) { e.printStackTrace(); resetMachine(); return s; } - else warn("no BSX Output available"); - resetMachine(); - } - else if (lastCommand.equals("@PUR")) - { - warn("@PUR not implemented yet"); - resetMachine(); - } - else if (lastCommand.equals("@TXT")) - { - warn("@TXT not implemented (and no plan for doing that)"); - resetMachine(); - } - else if (lastCommand.equals("@BOM")) - { - warn("@BOM not implemented (and no plan for doing that)"); - resetMachine(); - } - else if (lastCommand.equals("@EOM")) - { - warn("@EOM not implemented (and no plan for doing that)"); - resetMachine(); - } - else if (lastCommand.equals("@LON")) - { - warn("@LON not implemented yet"); - resetMachine(); - } - else if (lastCommand.equals("@LOF")) - { - warn("@LOF not implemented yet"); - resetMachine(); - } - else if (lastCommand.equals("@TMS")) - { - if (parent!=null) - { - parent.writeToUser("Received @TMS to end this session.\r\n"); - } - else - warn("@TMS received! Session not terminated. Close connection manually."); - resetMachine(); - } - s=lastCommand+s; - resetMachine(); - return s; - } -} - - - diff --git a/web/root/telnet/modules/ButtonBar.class b/web/root/telnet/modules/ButtonBar.class deleted file mode 100644 index 62a49c9dff4c6bfb913dc57fa73f98264347dbcc..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/ButtonBar.class and /dev/null differ diff --git a/web/root/telnet/modules/ButtonBar.java b/web/root/telnet/modules/ButtonBar.java deleted file mode 100644 index 4db6b454a4341ce266a65ee5189e2d3279d1b6cb..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/ButtonBar.java +++ /dev/null @@ -1,388 +0,0 @@ -/** - * ButtonBar -- a programmable button bar - * -- - * $Id: ButtonBar.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Mon Aug 4 14:12:21 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package modules; - -import telnet; -import frame; - -import java.applet.Applet; -import java.util.Hashtable; -import java.util.Vector; - -import java.awt.Panel; -import java.awt.Button; -import java.awt.TextField; -import java.awt.Event; -import java.awt.BorderLayout; -import java.awt.GridLayout; -import java.awt.Dimension; -import java.awt.Container; -import java.awt.Frame; - -/** - * This class implements a programmable button bar. - * You can add <A HREF="#buttons">Buttons</A> and <A HREF="#fields">Input - * fields</A> to trigger actions in the <A HREF="telnet.html">telnet - * applet</A>. On how to load a module, please refer to the - * <A HREF="telnet.html">telnet</A> documentation. - * - * <DL> - * <A NAME="buttons"></A> - * <DT><B>Buttons:</B> - * <DD><TT><PARAM NAME=<B><I>number</I></B>#Button VALUE="<B><I>buttontext</I></B>|<B><I>buttonaction</I></B>"></TT> - * <DD><B><I>number</I></B> is the sequence number and determines the place - * of the button on the row. - * <P> - * <DD><B><I>buttontext</I></B> is a string displayed on the button. - * <P> - * <DD><A NAME="buttonaction"><B><I>buttonaction</I></B></A> may be one - * of the following functions or strings<BR> - * <FONT SIZE=-1>(<I>Note:</I> the backslash character - * in front of the dollar sign is mandatory!)</FONT> - * <UL> - * <LI><TT><I>simple text</I></TT> - * to be sent to the remote host. Newline and/or carriage return - * characters may be added in C syntax <B>\n</B> and <B>\r</B>. - * To support unimplemented function keys the <B>\e</B> escape - * character may be useful. The <B>\b</B> backspace character is - * also supported. - * The text may contain <A HREF="#fieldreference"><B><I>field - * reference(s)</I></B></A>. - * <P> - * <LI><TT>\$connect(<B><I>host</I></B>[,<B><I>port</I></B>])</TT> - * tries to initiate a connection to the <B><I>host</I></B> - * at the <B><I>port</I></B>, if given. The standard port is - * 23. <B><I>host</I></B> and <B><I>port</I></B> may be hostname - * and number or <A HREF="#fieldreference"><B><I>field - * reference(s)</I></B></A>. If a connection already exists - * nothing will happen.<BR> - * <FONT SIZE=-1>(<I>Note:</I> It is not allowed to have - * spaces anywhere inside the parenthesis!)</FONT> - * <P> - * <LI><TT>\$disconnect()</TT> - * terminates the current connection, but if there was no - * connection nothing will happen. - * <P> - * <LI><TT>\$detach()</TT> - * detaches the applet from the web browser window and - * creates a new frame externally. This may be used to allow - * users to use the applet while browsing the web with the - * same browser window.<BR> - * <FONT SIZE=-1>(<I>Note:</I> You need to load the applet via the - * <A HREF="appWrapper.html">appWrapper class</A> or - * it will not work properly!)</FONT> - * </UL> - * <DD><B>Examples:</B><BR> - * <FONT SIZE=-1>(<I>Note:</I> It makes sense if you look at the - * examples for input fields below.)</FONT> - * <PRE> - * <PARAM NAME=1#Button VALUE="HELP!|help\r\n"> - * <PARAM NAME=2#Button VALUE="HELP:|help \@help@\r\n"> - * <PARAM NAME=4#Button VALUE="simple|\$connect(localhost)"> - * <PARAM NAME=5#Button VALUE="complete|\$connect(www,4711)"> - * <PARAM NAME=6#Button VALUE="connect|\$connect(\@address@)"> - * <PARAM NAME=8#Button VALUE="connect to port|\$connect(\@address@,\@port@)"> - * <PARAM NAME=10#Button VALUE="window|\$detach()"> - * </PRE> - * <P> - * <A NAME="fields"></A> - * <DT><B>Input fields</B> - * <DD><TT><PARAM NAME=<B><I>number</I></B>#Input VALUE="<B><I>fieldname</I></B>[#<I><B>length</B></I>]|<B><I>initial text</I></B>[|<B><I>action</I></B>]"></TT> - * <DD><B><I>number</I></B> is the sequence number and determines the place - * of the field on the row. - * <P> - * <DD><A NAME="fieldreference"><B><I>fieldname</I></B></A> is a - * symbolic name to reference the input field. A reference may be used in - * <A HREF="#buttonaction"><B><I>button actions</I></B></A> and - * is constructed as follows: - * <TT>\@<B><I>fieldname</I></B>@</TT> - * The <B>\@fieldname@</B> macro will be replaced by the string entered in - * the text field. - * <P> - * <DD><B><I>length</I></B> is the length of the input field in numbers of - * characters. - * <P> - * <DD><B><I>initial text</I></B> is the text to be placed into the input - * field on startup - * <DD><B><I>action</I></B> may be used similar to a - * <A HREF="#buttonaction"><B><I>button action</I></B></A>. This action - * will be used if the users presses Return in the inputfield. Leave - * empty if you only want to use a button to send the text! - * <DD><B>Examples:</B><BR> - * <FONT SIZE=-1>(<I>Note:</I> It makes sense if you look at the - * examples for buttons before.)</FONT> - * <PRE> - * <PARAM NAME=3#Input VALUE="help#10|"> - * <PARAM NAME=7#Input VALUE="address|www.first.gmd.de"> - * <PARAM NAME=8#Input VALUE="send#5|who|\@send@\r\n"> - * <PARAM NAME=9#Input VALUE="port#5|4711"> - * </PRE> - * <P> - * </DL> - * @version $Id: ButtonBar.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - * @see modules.Module - */ -public class ButtonBar extends Panel implements Module -{ - // our parent is the telnet app - private telnet parent; - - // these tables contain our buttons and fields. - private Hashtable buttons = null; - private Hashtable fields = null; - - // the top level (for detaching) - private Container toplevel; - - /** - * This method is called by our loader to notify us of it. - * @param o The object that has loaded this object. - * @see display.Module - */ - public void setLoader(Object o) { parent = (telnet)o; } - - /** - * If the applet connects this method is called. - * @param host remote hostaddress - not used - * @param port remote port - not used - */ - public void connect(String host, int port) { - // do nothing yet. - } - - /** - * Get notified of disconnection. Do nothing. - */ - public void disconnect() { - // do nothing yet - } - - /** - * This module does not take any input. It works passive. - * @return null to remove from the list of receiver modules. - * @see display.Module - */ - public String receive(String s) { return null; } - - /** - * create the buttonbar from the parameter list. We will know our parent, - * when we have been added. - */ - public void addNotify() { - if(buttons == null && fields == null) { - String tmp; - - int nr = 1; - String button = null, input = null; - while((button = parent.getParameter(nr+"#Button")) != null || - (input = parent.getParameter(nr+"#Input")) != null) { - nr++; - if(button != null) { - if(buttons == null) buttons = new Hashtable(); - int idx = button.indexOf('|'); - if(button.length() == 0) - System.out.println("ButtonBar: Button: no definition"); - if(idx < 0 || idx == 0) { - System.out.println("ButtonBar: Button: empty name \""+button+"\""); - continue; - } - if(idx == button.length() - 1) { - System.out.println("ButtonBar: Button: empty command \""+button+"\""); - continue; - } - Button b = new Button(button.substring(0, idx)); - buttons.put(b, button.substring(idx+1, button.length())); - add(b); - } else - if(input != null) { - if(fields == null) fields = new Hashtable(); - if(buttons == null) buttons = new Hashtable(); - int idx = input.indexOf('|'); - if(input.length() == 0) - System.out.println("ButtonBar: Input field: no definition"); - if(idx < 0 || idx == 0) { - System.out.println("ButtonBar: Input field: empty name \""+input+"\""); - continue; - } - int si, size; - if((si = input.indexOf('#', 0)) == 0) { - System.out.println("ButtonBar: Input field: empty name"); - continue; - } - if(si < 0 || si == idx-1) size = 10; - else size = Integer.parseInt(input.substring(si+1, idx)); - TextField t = - new TextField(input.substring(idx + 1, - input.lastIndexOf('|') == idx ? - input.length() : - (idx = input.lastIndexOf('|'))), - size); - buttons.put(t, input.substring(idx + 1, input.length())); - fields.put(input.substring(0, (si < 0 ? idx : si)), t); - add(t); - } - button = input = null; - } - } - super.addNotify(); - } - - public boolean handleEvent(Event evt) { - String tmp; - if(evt.id == Event.ACTION_EVENT && - (tmp = (String)buttons.get(evt.target)) != null) { - System.out.println("ButtonBar: "+tmp); - String cmd = "", function = null; - int idx = 0, oldidx = 0; - while((idx = tmp.indexOf('\\', oldidx)) >= 0 && - ++idx <= tmp.length()) { - cmd += tmp.substring(oldidx, idx-1); - switch(tmp.charAt(idx)) { - case 'b': cmd += "\b"; break; - case 'e': cmd += ""; break; - case 'n': cmd += "\n"; break; - case 'r': cmd += "\r"; break; - case '$': { - int ni = tmp.indexOf('(', idx+1); - if(ni < idx) { - System.out.println("ERROR: Function: missing '('"); - break; - } - if(ni == ++idx) { - System.out.println("ERROR: Function: missing name"); - break; - } - function = tmp.substring(idx, ni); - idx = ni+1; - ni = tmp.indexOf(')', idx); - if(ni < idx) { - System.out.println("ERROR: Function: missing ')'"); - break; - } - tmp = tmp.substring(idx, ni); - idx = oldidx = 0; - continue; - } - case '@': { - int ni = tmp.indexOf('@', idx+1); - if(ni < idx) { - System.out.println("ERROR: Input Field: '@'-End Marker not found"); - break; - } - if(ni == ++idx) { - System.out.println("ERROR: Input Field: no name specified"); - break; - } - String name = tmp.substring(idx, ni); - idx = ni; - TextField t; - if(fields == null || (t = (TextField)fields.get(name)) == null) { - System.out.println("ERROR: Input Field: requested input \""+ - name+"\" does not exist"); - break; - } - cmd += t.getText(); - t.setText(""); - break; - } - default : cmd += tmp.substring(idx, ++idx); - } - oldidx = ++idx; - } - - if(oldidx <= tmp.length()) cmd += tmp.substring(oldidx, tmp.length()); - - if(function != null) { - if(function.equals("exit")) { - try { - System.exit(0); - } catch(Exception e) { e.printStackTrace(); } - } - if(function.equals("connect")) { - String address = null; - int port = -1; - try { - if((idx = cmd.indexOf(",")) >= 0) { - try { - port = Integer.parseInt(cmd.substring(idx+1, cmd.length())); - } catch(Exception e) { - port = -1; - } - cmd = cmd.substring(0, idx); - } - if(cmd.length() > 0) address = cmd; - if(address != null) - if(port != -1) parent.connect(address, port); - else parent.connect(address); - else parent.connect(); - } catch(Exception e) { - System.err.println("ButtonBar: connect(): failed"); - e.printStackTrace(); - } - } else - if(function.equals("disconnect") && parent.disconnect()) - parent.send("\r\nClosed connection.\r\n"); - else - if(function.equals("detach")) { - if(parent.getParent() instanceof Frame) { - Frame top = (Frame)parent.getParent(); - if(toplevel != null) { - System.out.println("ButtonBar: reattaching applet..."); - toplevel.setLayout(new BorderLayout()); - toplevel.add("Center", parent); - toplevel.validate(); - toplevel.layout(); - toplevel = null; - } else { - System.out.println("ButtonBar: destroying window..."); - parent.disconnect(); - } - top.dispose(); - } else { - System.out.println("ButtonBar: detaching applet..."); - toplevel = parent.getParent(); - frame top = new frame("The Java Telnet Applet"); - Dimension s = parent.size(); - top.reshape(0, 0, s.width, s.height); - top.setLayout(new BorderLayout()); - top.add("Center", parent); - top.pack(); - top.show(); - } - } - else - System.out.println("ERROR: function not implemented: \""+ - function+"\""); - return true; - } - // cmd += tmp.substring(oldidx, tmp.length()); - if(cmd.length() > 0) parent.send(cmd); - return true; - } - return false; - } -} - diff --git a/web/root/telnet/modules/Module.class b/web/root/telnet/modules/Module.class deleted file mode 100644 index de74206f80ea43457fdd6d25c0b722cae3572861..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/Module.class and /dev/null differ diff --git a/web/root/telnet/modules/Module.java b/web/root/telnet/modules/Module.java deleted file mode 100644 index 422f84f5ad8264d08a24079c92cb12ffd25f4078..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/Module.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Module -- Module interface - * -- - * $Id: Module.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Mon Mar 24 15:35:13 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package modules; - -/** - * Modules must implement this interface to be detected as valid modules - * @version $Id: Module.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - */ -public interface Module -{ - /** - * Set the loader of the module. This is necessary to know if you want to - * contact the modules parent. - * @param loader The object that has loaded this module. - */ - public void setLoader(Object loader); - - /** - * Connected to the remote host. This method notifies upon new connection. - * @param host remote hostname - * @param port remote port - */ - public void connect(String host, int port); - - /** - * Disconnect from the host. This method notifies of lost connection. - */ - public void disconnect(); - - /** - * Receive data from somewhere. If a modules does not want to receive data - * it should return null to remove itself from the list of receiver modules. - * @param s The string we receive. - * @return the modified string or null (to remove from receiver list) - */ - public String receive(String s); -} - diff --git a/web/root/telnet/modules/MudConnector.class b/web/root/telnet/modules/MudConnector.class deleted file mode 100644 index 646fe276964ffc12fd4f25dc22e285bb3af3b495..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/MudConnector.class and /dev/null differ diff --git a/web/root/telnet/modules/MudConnector.java b/web/root/telnet/modules/MudConnector.java deleted file mode 100644 index 3b6039bccdf0b50a84f3a36805256f1162fa6205..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/MudConnector.java +++ /dev/null @@ -1,300 +0,0 @@ -/** - * MudConnector -- This module is especially designed for the - * MUD Connector (http://www.mudconnect.com/) - * It loads a tabulator separated list via http and - * displays it in a List-Box. - * -- - * $Id: MudConnector.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Sun Apr 13 22:29:16 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -package modules; - -import telnet; - -import java.applet.*; -import java.awt.*; -import java.io.*; -import java.net.*; -import java.util.*; - -/** - * A specially designed module for the - * <A HREF="http://www.mudconnect.com/">MUD Connector</A>. - * It loads a list of MUDs via http and displays them in a list box to - * be selected. A selected MUD can then be entered. - * - * <DL> - * <DT><B>MudConnector parameterfile:</B> - * <DD><PRE><PARAM NAME=MUDlist VALUE="<B><I>url</I></B>"></PRE> - * <DD>The url of the Mudlist. This url MUST be located on the same web - * server as the applet! - * </DL> - * @version $Id: MudConnector.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - * @see modules.Module - */ -public class MudConnector extends Panel implements Module, Runnable -{ - // parent applet - private telnet app; - - // server url for the mudlist - private String url; - private URL server; - - // vector containing the mud data (host#port) - private Vector index = new Vector(); - // the actually displayed list of muds - private java.awt.List display = new java.awt.List(); - - private CardLayout layouter; - private Panel progress, address; - private Label indicator; - private TextField info; - - // buttons - private Button connectButton, disconnectButton, refreshButton, showButton; - - /** - * setLoader() is called upon start of the parent applet. This method - * initializes the GUI of the module, e.g the list and buttons. - * @param loader the parent applet - */ - public void setLoader(Object loader) { - // do nothing if we already know our loader - if(app != null) return; - app = (telnet)loader; - - // cardlayout to display either the progress while loading the mudlist - // or the mud listbox plus its buttons. - setLayout(layouter = new CardLayout()); - - add("PROGRESS", progress = new Panel()); - progress.add(indicator = new Label("Loading mudlist, please wait...")); - - // the interactive module GUI is arranged in a grid - GridBagLayout grid = new GridBagLayout(); - - address = new Panel(); - address.setLayout(grid); - - // the constraints for each of the components - GridBagConstraints constraints = new GridBagConstraints(); - - // the listbox is arranged on the left side getting most of the space - constraints.gridheight = 2; - constraints.weightx = 2.0; - constraints.fill = GridBagConstraints.BOTH; - grid.setConstraints(display, constraints); - address.add(display); - - // generic panel that places its components centered. - Panel panel = new Panel(); - - // the button panel, buttons are placed east of the list and on the top - panel.add(showButton = new Button("Info!")); - panel.add(connectButton = new Button("connect")); - panel.add(disconnectButton = new Button("disconnect")); - panel.add(refreshButton = new Button("refresh list")); - constraints.weightx = 0.0; - constraints.weightx = 0.0; - constraints.gridheight = 1; - constraints.gridwidth = GridBagConstraints.REMAINDER; - constraints.fill = GridBagConstraints.NONE; - grid.setConstraints(panel, constraints); - address.add(panel); - - // the mud information text is below the buttons - (panel = new Panel()).add(info = new TextField(30)); - info.setEditable(false); - address.add(panel); - grid.setConstraints(panel, constraints); - add("ADDRESS", address); - - layouter.show(this, "PROGRESS"); - } - - /** - * when newly added try to load the mudlist using the parameter "mudlist" - */ - public void addNotify() - { - super.addNotify(); - if(url == null) { - if(app.getParameter("mudlist") != null) { - url = app.getParameter("mudlist"); - loadData(); - } - else { - indicator.setText("The \"mudlist\" is not set, "+ - "cannot load data!"); - System.out.println("MudConnector: cannot load data, missing parameter"); - } - } - } - - /** - * initiate the loading process, display progress meter - */ - private void loadData() - { - layouter.show(this, "PROGRESS"); - - Thread t = new Thread(this); - t.setPriority(Thread.MIN_PRIORITY); - t.start(); - } - - /** - * The body of the thread opens a URLConnection with the address given as - * parameter "mudlist" and downloads it. It expects a tabulator separated - * list <mudname> <mudhost> <mudport> and the amount of muds in the file - * at the beginning of the file. - */ - public void run() - { - try { - System.out.print("MudConnector: loading data..."); - if(display.countItems() > 0) display.clear(); - index = new Vector(); - - // open the url and the data stream - server = new URL(url); - StreamTokenizer ts = new StreamTokenizer(server.openStream()); - // reset the syntax and make all but the chars from 0-31 to - // plain text - ts.resetSyntax(); - ts.whitespaceChars(0, 31); - ts.wordChars(32, 255); - - // paint a rectangle for the progress indicator with the size of the - // text above - Graphics pg = progress.getGraphics(); - - // initialize the current number of muds loaded and load the maximum - // number of muds in the file (first line in the file) - int p = 1, max = 1; - int token = ts.nextToken(); - if(token != ts.TT_EOF) try { - ts.sval = ts.sval.substring(1); - max = Integer.parseInt(ts.sval); - System.out.print("["+max+" muds expected] "); - token = ts.nextToken(); - } catch(NumberFormatException e) { - System.out.print("'"+ts.sval+"'"); - System.out.print("[# of muds incorrect, expecting 1000] "); - max = 1000; - } - - // read line by line and display the progress bar - while(token != ts.TT_EOF) { - pg.setColor(getBackground()); - pg.draw3DRect(indicator.location().x - 1, - indicator.location().y + indicator.size().height + 4, - indicator.size().width + 1, 21, false); - pg.fill3DRect(indicator.location().x, - indicator.location().y + indicator.size().height + 5, - p++ * indicator.size().width / max, 20, true); - - String name = ts.sval; token = ts.nextToken(); - if(token != ts.TT_EOL && token != ts.TT_EOF) { - String host = ts.sval; token = ts.nextToken(); - int port; - try { - port = Integer.parseInt(ts.sval); - } catch(NumberFormatException e) { - port = 23; - } - display.addItem(name); - index.addElement(host+"#"+port); - } else - System.out.println("unexpected ("+name+") "+ - (token == ts.TT_EOF ? "EOF" : "EOL")); - while((token = ts.nextToken()) != ts.TT_WORD && - token != ts.TT_EOF); - } - } catch(Exception e) { - indicator.setText("The \"mudlist\" parameter is incorrect, "+ - "cannot load data!"); - e.printStackTrace(); - } - System.out.println("("+index.size()+" muds)...done"); - layouter.show(this, "ADDRESS"); - } - - /** - * handle list selection, connect, disconnect and refresh button - * @param evt the event to process - */ - public boolean handleEvent(Event evt) { - if(evt.target == connectButton && evt.id == Event.ACTION_EVENT) { - if(display.getSelectedIndex() < 0 || - display.getSelectedIndex() > index.size()) { - info.setText("You did not select a MUD!"); - return false; - } - String address = (String)index.elementAt(display.getSelectedIndex()); - int port = Integer.parseInt(address.substring(address.indexOf('#')+1)); - app.connect(address.substring(0, address.indexOf('#')), port); - return true; - } - if(evt.target == disconnectButton && evt.id == Event.ACTION_EVENT) - app.disconnect(); - if(evt.target == refreshButton && evt.id == Event.ACTION_EVENT) - loadData(); - if(evt.target == showButton && evt.id == Event.ACTION_EVENT) { - if(display.getSelectedIndex() < 0 || - display.getSelectedIndex() > index.size()) { - info.setText("You did not select a MUD!"); - return false; - } - URL page = null; - try { - page = new URL("http://www.mudconnect.com/mud-bin/adv_search.cgi"+ - "?Mode=MUD&mud="+ - display.getSelectedItem().replace(' ', '+')); - } catch(MalformedURLException e) { - info.setText("There was an URL error!"); - e.printStackTrace(); - return false; - } - app.getAppletContext().showDocument(page, "_TOP"); - return true; - } - - if(evt.target == display && evt.id == Event.LIST_SELECT) { - String tmp = (String)index.elementAt(display.getSelectedIndex()); - info.setText(tmp.substring(0, tmp.indexOf('#'))+" "+ - tmp.substring(tmp.indexOf('#')+1)); - } - return false; - } - - /** - * dummy methods - */ - public void connect(String host, int port) {} - public void disconnect() {} - public String receive(String str) - { - return null; - } - -} diff --git a/web/root/telnet/modules/Script.class b/web/root/telnet/modules/Script.class deleted file mode 100644 index 35b5c7f2735e7113003c4287d7632b8f8c3ce679..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/Script.class and /dev/null differ diff --git a/web/root/telnet/modules/Script.java b/web/root/telnet/modules/Script.java deleted file mode 100644 index 8eb47842ee3cf8d66a8b37ea1e9f42f8e652b76a..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/Script.java +++ /dev/null @@ -1,176 +0,0 @@ -/** - * Script -- A module for scripting (very simple). - * -- - * $Id: Script.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Mon Mar 24 15:52:12 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package modules; - -import telnet; -import java.util.Hashtable; -import java.util.Enumeration; -import java.awt.Dialog; -import java.awt.Frame; -import java.awt.TextField; -import java.awt.Label; -import java.awt.Event; - -/** - * A very simple scripting module. It takes pairs of pattern and text and - * sends the corresponding text when the pattern matches. Each pattern is - * only matched once per connected session. - * - * <DL> - * <DT><B>Scripts:</B> - * <DD><PRE><PARAM NAME=script VALUE="<B><I>pattern</I></B>|<B><I>text</I></B>|<B><I>...</I></B>"></PRE> - * <DD>A script contains of pairs of <I>pattern</I> and <I>text</I> strings. - * If the pattern is matched against the output from the remote host, - * the corresponding text will be sent. Each pattern will match only - * <B>once</B> per session. A session is defined by connect and - * disconnect.<P> - * Thus it is possible to program an autologin as follows:<BR> - * <PRE><B>"login:|leo|Password:|mypassword|leo@www|ls"</B></PRE> - * Newlines will be added automatically to the string sent! At the - * moment the order of the pattern and text pairs is <I>not</I> relevant. - * <P> - * It is possible to prompt the user for input if a match occurs. If the - * corresponding <I>text</I> is a string enclosed in braces ([] or {}) a - * dialog window is opened with <I>text</I> as prompt. A special case - * is an empty prompt in which case the <I>pattern</I> will be shown as - * prompt. "[Your name:]" would open a dialog window with the - * text "Your name" as prompt. Curly braces have a special - * meaning; any user input will be shown as "*" which makes - * it possible to program password prompts. Example: - * "{Your password:}".<P> - * A special match like: "login:|[]" can be used to open a - * dialog and display "login:" as prompt. This works for - * "{}" as well. - * - * </DL> - * @version $Id: Script.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - * @see modules.Module - */ -public class Script extends Hashtable implements Module -{ - // This is the target for any text we want to send - private telnet applet = null; - - /** - * Set the applet as module loader - * @param o the object that is the applet (must be an Applet) - * @see module.Module - * @see java.applet.Applet - */ - public void setLoader(Object o) { applet = (telnet)o; } - - /** - * Configure the script module by reading the script PARAMeter. - * @param host remote hostaddress - not used - * @param port remote port - not used - */ - public void connect(String host, int port) { - String tmp = applet.getParameter("script"); - - // delete all entries - clear(); - - if(tmp != null) { - int idx = tmp.indexOf('|'); - int oldidx = 0; - while(idx >= 0) { - String match = tmp.substring(oldidx, idx); - oldidx = idx; - idx = tmp.indexOf('|', idx+1); - idx = idx < 0 ? idx = tmp.length() : idx; - String send = tmp.substring(oldidx+1, idx); - put(match, send); - oldidx = idx+1; - idx = tmp.indexOf('|', idx+1); - } - } - } - - /** - * Get notified of disconnection. Do nothing. - */ - public void disconnect() {} - - /** - * This method is called when data is received. It tries to match the - * input to the list of patterns and sends corresponding text on success. - * If the response is [] or {} the user will be prompted with the matching - * text. You can modify the prompt string by entering it inside of the - * brackets or curly braces (e.g. [Enter your id:]). In case of curly - * braces the input area will not show the typed in text (for passwords)! - * - * @param s The string to test. - * @see peer.InputPeer - */ - public String receive(String s) { - if(isEmpty()) return s; - Enumeration match = keys(); - while(match.hasMoreElements()) { - String key = (String)match.nextElement(); - if(s.indexOf(key) != -1) { - String value = (String)get(key); - if(value.indexOf("[") == 0 || value.indexOf("{") == 0) { - TextField input = new TextField(20); - if(value.startsWith("{")) input.setEchoCharacter('*'); - if("[]".equals(value) || "{}".equals(value)) value = key; - else value = value.substring(1, value.length() - 1); - Thread current = Thread.currentThread(); - new UserDialog(new Frame(), value, false, current, input); - current.suspend(); - value = input.getText(); - } - applet.send(value + "\r"); - remove(key); - } - } - return s; - } -} - -class UserDialog extends Dialog { - TextField input; - Thread thread; - String value; - - public UserDialog(Frame parent, String value, boolean modal, - Thread t, TextField reply) { - super(parent, value, modal); - thread = t; input = reply; - add("West", new Label(value)); - add("Center", input); - pack(); - show(); - } - - public boolean handleEvent(Event evt) { - if(evt.target == input && evt.key == 10) { - thread.resume(); - hide(); dispose(); - return true; - } - return false; - } -} diff --git a/web/root/telnet/modules/TextLabel.class b/web/root/telnet/modules/TextLabel.class deleted file mode 100644 index 29c98729da91621470ed25a962bc43a73a9227d8..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/TextLabel.class and /dev/null differ diff --git a/web/root/telnet/modules/TextLabel.java b/web/root/telnet/modules/TextLabel.java deleted file mode 100644 index b2c6eeb6231f3ca6a71fc6c21d322e5ed09d6afe..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/TextLabel.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * TextLabel -- A module to display a Label on the applet. - * -- - * $Id: TextLabel.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Wed Jul 9 17:37:28 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package modules; - -import telnet; -import java.awt.Panel; -import java.awt.Label; -import java.awt.GridLayout; -import java.awt.Font; - -/** - * This small module lets you display text somewhere in the applets area. - * - * <DL> - * <DT><B>Label:</B> - * <DD><PRE><PARAM NAME=labelRows VALUE="<B><I>rows</B></I>"></PRE> - * <DD>Defines the how many rows the label will have. - * <DD><PRE><PARAM NAME=labelCols VALUE="<B><I>cols</B></I>"></PRE> - * <DD>Defines the how many columns the label will have. - * <DD><PRE><PARAM NAME=labelFont VALUE="<B><I>font[,size]</B></I>"></PRE> - * <DD>The font for displaying the label text. If the <I>size</I> is left out - * a standard size of 14 points is assumed. - * <DD><PRE><PARAM NAME=label#<I>number</I> VALUE="<B><I>text</I></B>"></PRE> - * <DT>The labels are enumerated and displayed in rows and columns. - * </DL> - * @version $Id: TextLabel.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - * @see modules.Module - */ -public class TextLabel extends Panel implements Module -{ - telnet applet; - - /** - * Set the applet as module loader and configure. - * @param o the object that is the applet (must be an Applet) - * @see module.Module - * @see java.applet.Applet - */ - public void setLoader(Object o) { - applet = (telnet)o; - - int rows = 1, cols = 1; - - String tmp = applet.getParameter("labelRows"); - if(tmp != null) rows = Integer.parseInt(tmp); - if((tmp = applet.getParameter("labelCols")) != null) - cols = Integer.parseInt(tmp); - - setLayout(new GridLayout(rows, cols)); - - Font labelFont = null; - if((tmp = applet.getParameter("labelFont")) != null) { - int idx = tmp.indexOf(","); - int size = 14; - if(idx != -1) size = Integer.parseInt(tmp.substring(idx+1)); - labelFont = new Font(tmp, Font.PLAIN, size); - } - - int no = 1; - while((tmp = applet.getParameter("label#"+no++)) != null) { - Label text = new Label(tmp); - if(labelFont != null) text.setFont(labelFont); - add(text); - } - } - - /** - * Do nothing upon connect. - * @param host remote hostaddress - not used - * @param port remote port - not used - */ - public void connect(String host, int port) {} - - /** - * Do nothing upon disconnecton. - */ - public void disconnect() {} - - /** - * Do nothing when receiving text. Be removed upon first call. - * @param s The string received. - * @see peer.InputPeer - */ - public String receive(String s) { return null; } -} - diff --git a/web/root/telnet/modules/UserDialog.class b/web/root/telnet/modules/UserDialog.class deleted file mode 100644 index d75c8682b5b3d91af341aacf96770d8656564b02..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/UserDialog.class and /dev/null differ diff --git a/web/root/telnet/modules/bsx/BSXDisplay.class b/web/root/telnet/modules/bsx/BSXDisplay.class deleted file mode 100644 index 3a02a183fd15ea156f85f849aef6d6b6847ae4fe..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/bsx/BSXDisplay.class and /dev/null differ diff --git a/web/root/telnet/modules/bsx/BSXDisplay.java b/web/root/telnet/modules/bsx/BSXDisplay.java deleted file mode 100644 index 263f4f8ad7801fb07bf174bc671229bcdf9928c3..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/bsx/BSXDisplay.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * BSXDisplay -- a graphics component for drawing BSX Objects on - * -- - * $Id: BSXDisplay.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Thu Feb 15 00:47:34 1996 by Matthias L. Jugel :$ - */ -package modules.bsx; - -import java.awt.*; -import java.util.Hashtable; -import java.util.Enumeration; -import java.util.Vector; - -public class BSXDisplay extends Frame -{ -private int Scale = 100; /* display scale */ - -private Hashtable scenes; /* scene store */ -private Hashtable objects; /* object store */ - -private String curScene = ""; /* current scene */ - -private Image imageBuffer; -private Graphics gBuffer; -public BSXDisplay() { this("BSXModule - Visit Regenbogen rb.mud.de:4780"); } -public BSXDisplay(String title) { - super(title); - addNotify(); - imageBuffer = createImage(511,255); - if(imageBuffer==null) { - System.out.println("Couldn't create an offscreen-image :("); - System.exit(1); - } - gBuffer = imageBuffer.getGraphics(); - scenes = new Hashtable(); - objects = new Hashtable(); - setScale(100); - resize(510,255); - show(); -} - -public void setScale(int scale) { - Scale = scale; - resize(511 * Scale / 100, 255 * Scale / 100); -} - - /* add a scene to the store, do not yet display */ -public void addScene(String id, BSXGraphic picture) - { - BSXScene scene = new BSXScene(picture); - BSXScene sc = (BSXScene)scenes.get(id); - if(sc != null) - { - scene.objects = sc.objects; - scenes.remove(id); - } - scenes.put(id, scene); - if(curScene.equals(id)) redraw(); - } - - /* show current scene */ -public boolean showScene() { return showScene(curScene); } - - /* show scene given as argument */ -public boolean showScene(String id) - { - curScene = id; - if(!scenes.containsKey(id)) - { - addScene(id, new BSXGraphic()); - return false; - } - redraw(); - return true; - } - - /* add object to store */ -public void addObject(String id, BSXGraphic o) - { - objects.put(id, o); - BSXScene scene = (BSXScene)scenes.get(curScene); - if(scene != null && scene.objects.containsKey(id)) redraw(); - } - - /* show object at position 0, layer 0 */ -public boolean showObject(String id) { return showObject(id, 0, 0); } - - /* show object at position in layer */ -public boolean showObject(String id, int position, int layer) - { - BSXScene scene = (BSXScene)scenes.get(curScene); - - /* add object to scene database */ - if((scene = (BSXScene)scenes.get(curScene)) == null) - { - addScene(curScene, new BSXGraphic()); - scene = (BSXScene)scenes.get(curScene); - } - - BSXObject o = new BSXObject(position, layer); - scene.objects.put(id, o); - - /* check if object is in our database */ - if(!objects.containsKey(id)) return false; - - redraw(); - return true; - } - - /* remove object from scene, if scene exists */ -public boolean removeObject(String id) - { - BSXScene scene = (BSXScene)scenes.get(curScene); - if(scene != null) - { - BSXObject o = (BSXObject)scene.objects.get(id); - scene.objects.remove(id); - if(o != null) - redraw(); - } - return true; - } - - /* redraw image buffer */ -public void redraw() - { - BSXScene scene = (BSXScene)scenes.get(curScene); - if(scene == null) return; - - Vector[] layer = new Vector[8]; - /* create layers */ - for(Enumeration e = scene.objects.keys(); e.hasMoreElements();) - { - String key; key = (String)e.nextElement(); - BSXObject o = (BSXObject)scene.objects.get(key); - if(layer[o.layer] == null) layer[o.layer] = new Vector(); - layer[o.layer].addElement(key); - } - - /* draw background graphic */ - if(scene.background != null && scene.background.size() > 0) - drawPicture(scene.background); - else - return; - - /* display layers from back to front */ - for(int l = 7; l >= 0; l--) - if(layer[l] != null) - for(int o = layer[l].size()-1; o >= 0; o--) - { - BSXObject obj = (BSXObject) - scene.objects.get(layer[l].elementAt(o)); - drawPicture((BSXGraphic)objects.get(layer[l].elementAt(o)), - 16 * obj.position, 4 * obj.layer); - } - paint(getGraphics()); - } - -public Point Translate(int x, int y, - int centreX, int centreY, int scale) - { - return new Point(( x - 127 + centreX) * 2 * scale / 100, - (255 - (y - 127 + centreY)) * scale / 100); - } - -public void drawPicture(BSXGraphic pic) { drawPicture(pic, 127, 127); } - -public void drawPicture(BSXGraphic pic, int position, int layer) - { - if(pic == null) return; - int ap = pic.size(); - for(int i = 0; i < ap; i++) - { - BSXPolygon poly = (BSXPolygon)pic.elementAt(i); - Polygon p = new Polygon(); - gBuffer.setColor(poly.getColor()); - for(int j = poly.npoints - 1; j >= 0; j--) - { - Point pt = Translate(poly.xpoints[j], poly.ypoints[j], - position, layer, Scale); - p.addPoint(pt.x, pt.y); - } - gBuffer.fillPolygon(p); - } - } - -public boolean mouseEnter(Event evt, int x, int y) - { - //System.out.println("MOUSE ENTERS"); - requestFocus(); - return true; - } - - -public void update(Graphics g) - { - paint(g); - } - - -public void paint(Graphics g) - { - g.drawImage(imageBuffer, 0, 0, this); - } -} - - - - - - - - diff --git a/web/root/telnet/modules/bsx/BSXGraphic.class b/web/root/telnet/modules/bsx/BSXGraphic.class deleted file mode 100644 index f6d0d9ffa7d03f9e0a9fcd9a35910f65a426e369..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/bsx/BSXGraphic.class and /dev/null differ diff --git a/web/root/telnet/modules/bsx/BSXGraphic.java b/web/root/telnet/modules/bsx/BSXGraphic.java deleted file mode 100644 index a1c4155a73c23e2ba9a540c40cc5286630bb3564..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/bsx/BSXGraphic.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * BSXGraphic -- BSX Graphics Object - * -- - * $Id: BSXGraphic.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Wed Feb 14 21:35:42 1996 by Matthias L. Jugel :$ - */ -package modules.bsx; - -import java.util.Vector; - -public class BSXGraphic extends Vector -{ - public BSXGraphic() { super(); } - public BSXGraphic(int s) - { - super(s); - } - - public void addPolygon(BSXPolygon p) { addElement(p); } -} diff --git a/web/root/telnet/modules/bsx/BSXInputStream.class b/web/root/telnet/modules/bsx/BSXInputStream.class deleted file mode 100644 index 2dbfe7e691ddc059e3763aae5073f501191f541a..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/bsx/BSXInputStream.class and /dev/null differ diff --git a/web/root/telnet/modules/bsx/BSXInputStream.java b/web/root/telnet/modules/bsx/BSXInputStream.java deleted file mode 100644 index 5868a7a8dac4cff0b2c1caa2324305b08fa3d499..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/bsx/BSXInputStream.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * BSXInputStream -- extends InputStream for BSX Polygons - * -- - * $Id: BSXInputStream.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Wed Feb 14 21:36:56 1996 by Matthias L. Jugel :$ - */ -package modules.bsx; - -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStream; - -import java.awt.Polygon; -import java.awt.Rectangle; - -public class BSXInputStream extends DataInputStream -{ - public BSXInputStream(InputStream in) { super(in); } - - public final BSXGraphic readBSXGraphic() /* read a BSX graphic */ - throws IOException - { - int ap = readASCIIHex(); - BSXGraphic picture = new BSXGraphic(ap); - for(; ap > 0; ap--) picture.addPolygon(readBSXPolygon()); - return picture; - } - - public final BSXPolygon readBSXPolygon() /* read a BSX polygon */ - throws IOException - { - BSXPolygon p = new BSXPolygon(); /* create new BSX polygon */ - int points = readASCIIHex(); /* get amount of edges */ - int color = readASCIIHex(); /* get color */ - - p.setColor(color); - for(; points > 0 ; points--) - { - int x, y; - x = readASCIIHex(); - y = readASCIIHex(); - p.addPoint(x, y); - } - return p; - } - - public int readASCIIHex() /* read 2 byte ASCII hex val */ - { - int h, l; - try { - h = (int)readByte(); - l = (int)readByte(); - } catch(Exception e) { return 0; } - h = h-'0'-(h>'9'?'A'-'9'-1:0); - l = l-'0'-(l>'9'?'A'-'9'-1:0); - return 16*h+l; - } -} - - diff --git a/web/root/telnet/modules/bsx/BSXObject.class b/web/root/telnet/modules/bsx/BSXObject.class deleted file mode 100644 index d5a83339d9a99cedaf233b34e84631cde6410b73..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/bsx/BSXObject.class and /dev/null differ diff --git a/web/root/telnet/modules/bsx/BSXObject.java b/web/root/telnet/modules/bsx/BSXObject.java deleted file mode 100644 index f4237f424077fe6318de92b648b08d0edb415b31..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/bsx/BSXObject.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * BSXObject -- a simple BSX Object - * -- - * $Id: BSXObject.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - */ -package modules.bsx; - -public class BSXObject -{ - public int position = 0, layer = 0; - public boolean visible = true; - - public BSXObject(int p, int l) { position = p; layer = l; } -} diff --git a/web/root/telnet/modules/bsx/BSXPolygon.class b/web/root/telnet/modules/bsx/BSXPolygon.class deleted file mode 100644 index adcc78c71905f3c32288ac7016aac5d20581f1ae..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/bsx/BSXPolygon.class and /dev/null differ diff --git a/web/root/telnet/modules/bsx/BSXPolygon.java b/web/root/telnet/modules/bsx/BSXPolygon.java deleted file mode 100644 index d2384035e9669d2918f54cd32c75c65dae198c04..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/bsx/BSXPolygon.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * BSXPolygon -- anhanced Polygon (to meet BSX standard) - * includes color for each polygon - * -- - * $Id: BSXPolygon.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - */ -package modules.bsx; - -import java.awt.Polygon; -import java.awt.Color; - -public class BSXPolygon extends Polygon -{ - private Color colTable[] = { - new Color( 0, 0, 0), - new Color( 0, 0, 255), - new Color( 34, 139, 34), - new Color(135, 206, 235), - new Color(205, 92, 92), - new Color(255, 105, 180), - new Color(165, 42, 42), - new Color(211, 211, 211), - new Color(105, 105, 105), - new Color( 0, 191, 255), - new Color( 0, 255, 0), - new Color( 0, 255, 255), - new Color(255, 99, 71), - new Color(255, 0, 255), - new Color(255, 255, 0), - new Color(255, 255, 255) - }; - - private Color Pcolor = Color.black; - - public BSXPolygon() { super(); } - public BSXPolygon(int color) { super(); Pcolor = new Color(color); } - public BSXPolygon(int xpoints[], int ypoints[], int npoints, int color) - { - super(xpoints, ypoints, npoints); - Pcolor = colTable[color]; - } - - public void setColor(int color) { Pcolor = colTable[color]; } - public Color getColor() { return Pcolor; } -} diff --git a/web/root/telnet/modules/bsx/BSXScene.class b/web/root/telnet/modules/bsx/BSXScene.class deleted file mode 100644 index 6a28bafe9275eec3d83f333df561f7fc2d1a8569..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/modules/bsx/BSXScene.class and /dev/null differ diff --git a/web/root/telnet/modules/bsx/BSXScene.java b/web/root/telnet/modules/bsx/BSXScene.java deleted file mode 100644 index c81a98627ec8125ec0c089020e7fda637c660336..0000000000000000000000000000000000000000 --- a/web/root/telnet/modules/bsx/BSXScene.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * BSXScene -- BSX Scene - * -- - * $Id: BSXScene.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - */ -package modules.bsx; - -import java.util.Hashtable; - -public class BSXScene -{ - public BSXGraphic background; - public Hashtable objects = new Hashtable(); - - public BSXScene() { background = null; } - public BSXScene(BSXGraphic pic) { background = pic; } -} diff --git a/web/root/telnet/socket/StatusPeer.class b/web/root/telnet/socket/StatusPeer.class deleted file mode 100644 index a53275a970599d88ac5c3b8dbd9b3c8b86c60b9d..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/socket/StatusPeer.class and /dev/null differ diff --git a/web/root/telnet/socket/StatusPeer.java b/web/root/telnet/socket/StatusPeer.java deleted file mode 100644 index cc17b67cb6d9761590c7dca94be6f3795ff17859..0000000000000000000000000000000000000000 --- a/web/root/telnet/socket/StatusPeer.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Status peer interface. - * -- - * $Id: StatusPeer.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Wed Mar 5 13:40:54 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package socket; - -import java.util.Vector; - -/** - * StatusPeer -- interface for status messages - * -- - * @version $Id: StatusPeer.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - */ - -public interface StatusPeer -{ - /** - * This method is called for the peer of the TelnetIO class if there is - * a statuschange. - * @param status A Vector containing the key as element 0 and any arguments - * from element 1 on. - * @return an object that matches the requested information or null - * @see socket.TelnetIO - */ - public Object notifyStatus(Vector status); -} diff --git a/web/root/telnet/socket/TelnetIO.class b/web/root/telnet/socket/TelnetIO.class deleted file mode 100644 index bcd3e99f7fa8e679082d45cdd157c2c662cc9e07..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/socket/TelnetIO.class and /dev/null differ diff --git a/web/root/telnet/socket/TelnetIO.java b/web/root/telnet/socket/TelnetIO.java deleted file mode 100644 index 87da79ff5111d7c3715ea610de41fd6b5509f4f8..0000000000000000000000000000000000000000 --- a/web/root/telnet/socket/TelnetIO.java +++ /dev/null @@ -1,614 +0,0 @@ -/** - * socket.TelnetIO - a telnet implementation - * -- - * $Id: TelnetIO.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Tue May 27 13:27:05 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -package socket; - -import java.net.Socket; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.awt.Dimension; -import java.util.Vector; - -/** - * Implements simple telnet io - * - * @version $Id: TelnetIO.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - * @version 1.2 3/7/97 George Ruban added available() because it was needed. - */ -public class TelnetIO implements StatusPeer -{ - /** - * Return the version of TelnetIO. - */ - public String toString() { return "$Id: TelnetIO.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $"; } - - /** - * Debug level. This results in additional diagnostic messages on the - * java console. - */ - private static int debug = 0; - - /** - * State variable for telnetnegotiation reader - */ - private byte neg_state = 0; - - /** - * constants for the negotiation state - */ - private final static byte STATE_DATA = 0; - private final static byte STATE_IAC = 1; - private final static byte STATE_IACSB = 2; - private final static byte STATE_IACWILL = 3; - private final static byte STATE_IACDO = 4; - private final static byte STATE_IACWONT = 5; - private final static byte STATE_IACDONT = 6; - private final static byte STATE_IACSBIAC = 7; - private final static byte STATE_IACSBDATA = 8; - private final static byte STATE_IACSBDATAIAC = 9; - - /** - * What IAC SB <xx> we are handling right now - */ - private byte current_sb; - - /** - * IAC - init sequence for telnet negotiation. - */ - private final static byte IAC = (byte)255; - /** - * [IAC] End Of Record - */ - private final static byte EOR = (byte)239; - /** - * [IAC] WILL - */ - private final static byte WILL = (byte)251; - /** - * [IAC] WONT - */ - private final static byte WONT = (byte)252; - /** - * [IAC] DO - */ - private final static byte DO = (byte)253; - /** - * [IAC] DONT - */ - private final static byte DONT = (byte)254; - /** - * [IAC] Sub Begin - */ - private final static byte SB = (byte)250; - /** - * [IAC] Sub End - */ - private final static byte SE = (byte)240; - /** - * Telnet option: echo text - */ - private final static byte TELOPT_ECHO = (byte)1; /* echo on/off */ - /** - * Telnet option: End Of Record - */ - private final static byte TELOPT_EOR = (byte)25; /* end of record */ - /** - * Telnet option: Negotiate About Window Size - */ - private final static byte TELOPT_NAWS = (byte)31; /* NA-WindowSize*/ - /** - * Telnet option: Terminal Type - */ - private final static byte TELOPT_TTYPE = (byte)24; /* terminal type */ - - private final static byte[] IACWILL = { IAC, WILL }; - private final static byte[] IACWONT = { IAC, WONT }; - private final static byte[] IACDO = { IAC, DO }; - private final static byte[] IACDONT = { IAC, DONT }; - private final static byte[] IACSB = { IAC, SB }; - private final static byte[] IACSE = { IAC, SE }; - - /** - * Telnet option qualifier 'IS' - */ - private final static byte TELQUAL_IS = (byte)0; - - /** - * Telnet option qualifier 'SEND' - */ - private final static byte TELQUAL_SEND = (byte)1; - - /** - * What IAC DO(NT) request do we have received already ? - */ - private byte[] receivedDX; - - /** - * What IAC WILL/WONT request do we have received already ? - */ - private byte[] receivedWX; - /** - * What IAC DO/DONT request do we have sent already ? - */ - private byte[] sentDX; - /** - * What IAC WILL/WONT request do we have sent already ? - */ - private byte[] sentWX; - - private Socket socket; - private BufferedInputStream is; - private BufferedOutputStream os; - - private StatusPeer peer = this; /* peer, notified on status */ - - /** - * Connect to the remote host at the specified port. - * @param address the symbolic host address - * @param port the numeric port - * @see #disconnect - */ - public void connect(String address, int port) throws IOException { - if(debug > 0) System.out.println("Telnet.connect("+address+","+port+")"); - socket = new Socket(address, port); - is = new BufferedInputStream(socket.getInputStream()); - os = new BufferedOutputStream(socket.getOutputStream()); - neg_state = 0; - receivedDX = new byte[256]; - sentDX = new byte[256]; - receivedWX = new byte[256]; - sentWX = new byte[256]; - } - - /** - * Disconnect from remote host. - * @see #connect - */ - public void disconnect() throws IOException { - if(debug > 0) System.out.println("TelnetIO.disconnect()"); - if(socket !=null) socket.close(); - } - - /** - * Connect to the remote host at the default telnet port (23). - * @param address the symbolic host address - */ - public void connect(String address) throws IOException { - connect(address, 23); - } - - /** - * Set the object to be notified about current status. - * @param obj object to be notified. - */ - public void setPeer(StatusPeer obj) { peer = obj; } - - /** Returns bytes available to be read. Since they haven't been - * negotiated over, this could be misleading. - * Most useful as a boolean value - "are any bytes available" - - * rather than as an exact count of "how many ara available." - * - * @exception IOException on problems with the socket connection - */ - public int available() throws IOException - { - return is.available(); - } - - - /** - * Read data from the remote host. Blocks until data is available. - * Returns an array of bytes. - * @see #send - */ - public byte[] receive() throws IOException { - int count = is.available(); - byte buf[] = new byte[count]; - count = is.read(buf); - if(count < 0) throw new IOException("Connection closed."); - if(debug > 1) System.out.println("TelnetIO.receive(): read bytes: "+count); - buf = negotiate(buf, count); - return buf; - } - - /** - * Send data to the remote host. - * @param buf array of bytes to send - * @see #receive - */ - public void send(byte[] buf) throws IOException { - if(debug > 1) System.out.println("TelnetIO.send("+buf+")"); - os.write(buf); - os.flush(); - } - - public void send(byte b) throws IOException { - if(debug > 1) System.out.println("TelnetIO.send("+b+")"); - os.write(b); - os.flush(); - } - - /** - * Handle an incoming IAC SB <type> <bytes> IAC SE - * @param type type of SB - * @param sbata byte array as <bytes> - * @param sbcount nr of bytes. may be 0 too. - */ - private void handle_sb(byte type, byte[] sbdata, int sbcount) - throws IOException - { - if(debug > 1) - System.out.println("TelnetIO.handle_sb("+type+")"); - switch (type) { - case TELOPT_TTYPE: - if (sbcount>0 && sbdata[0]==TELQUAL_SEND) { - String ttype; - send(IACSB);send(TELOPT_TTYPE);send(TELQUAL_IS); - /* FIXME: need more logic here if we use - * more than one terminal type - */ - Vector vec = new Vector(2); - vec.addElement("TTYPE"); - ttype = (String)peer.notifyStatus(vec); - if(ttype == null) ttype = "dumb"; - byte[] bttype = new byte[ttype.length()]; - - ttype.getBytes(0,ttype.length(), bttype, 0); - send(bttype); - send(IACSE); - } - - } - } - - /** - * Notify about current telnet status. This method is called top-down. - * @param status contains status information - */ - public Object notifyStatus(Vector status) { - if(debug > 0) - System.out.println("TelnetIO.notifyStatus("+status+")"); - return null; - } - - /* wo faengt buf an bei buf[0] oder bei buf[1] */ - private byte[] negotiate(byte buf[], int count) throws IOException { - if(debug > 1) - System.out.println("TelnetIO.negotiate("+buf+","+count+")"); - byte nbuf[] = new byte[count]; - byte sbbuf[] = new byte[count]; - byte sendbuf[] = new byte[3]; - byte b,reply; - int sbcount = 0; - int boffset = 0, noffset = 0; - Vector vec = new Vector(2); - - while(boffset < count) { - b=buf[boffset++]; - /* of course, byte is a signed entity (-128 -> 127) - * but apparently the SGI Netscape 3.0 doesn't seem - * to care and provides happily values up to 255 - */ - if (b>=128) - b=(byte)((int)b-256); - switch (neg_state) { - case STATE_DATA: - if (b==IAC) { - neg_state = STATE_IAC; - } else { - nbuf[noffset++]=b; - } - break; - case STATE_IAC: - switch (b) { - case IAC: - if(debug > 2) - System.out.print("IAC "); - neg_state = STATE_DATA; - nbuf[noffset++]=IAC; - break; - case WILL: - if(debug > 2) - System.out.print("WILL "); - neg_state = STATE_IACWILL; - break; - case WONT: - if(debug > 2) - System.out.print("WONT "); - neg_state = STATE_IACWONT; - break; - case DONT: - if(debug > 2) - System.out.print("DONT "); - neg_state = STATE_IACDONT; - break; - case DO: - if(debug > 2) - System.out.print("DO "); - neg_state = STATE_IACDO; - break; - case EOR: - if(debug > 2) - System.out.print("EOR "); - neg_state = STATE_DATA; - break; - case SB: - if(debug > 2) - System.out.print("SB "); - neg_state = STATE_IACSB; - sbcount = 0; - break; - default: - if(debug > 2) - System.out.print( - "<UNKNOWN "+b+" > " - ); - neg_state = STATE_DATA; - break; - } - break; - case STATE_IACWILL: - switch(b) { - case TELOPT_ECHO: - if(debug > 2) - System.out.println("ECHO"); - reply = DO; - vec = new Vector(2); - vec.addElement("NOLOCALECHO"); - peer.notifyStatus(vec); - break; - case TELOPT_EOR: - if(debug > 2) - System.out.println("EOR"); - reply = DO; - break; - default: - if(debug > 2) - System.out.println( - "<UNKNOWN,"+b+">" - ); - reply = DONT; - break; - } - if(debug > 1) - System.out.println("<"+b+", WILL ="+WILL+">"); - if ( reply != sentDX[b+128] || - WILL != receivedWX[b+128] - ) { - sendbuf[0]=IAC; - sendbuf[1]=reply; - sendbuf[2]=b; - send(sendbuf); - sentDX[b+128] = reply; - receivedWX[b+128] = WILL; - } - neg_state = STATE_DATA; - break; - case STATE_IACWONT: - switch(b) { - case TELOPT_ECHO: - if(debug > 2) - System.out.println("ECHO"); - - vec = new Vector(2); - vec.addElement("LOCALECHO"); - peer.notifyStatus(vec); - reply = DONT; - break; - case TELOPT_EOR: - if(debug > 2) - System.out.println("EOR"); - reply = DONT; - break; - default: - if(debug > 2) - System.out.println( - "<UNKNOWN,"+b+">" - ); - reply = DONT; - break; - } - if ( reply != sentDX[b+128] || - WONT != receivedWX[b+128] - ) { - sendbuf[0]=IAC; - sendbuf[1]=reply; - sendbuf[2]=b; - send(sendbuf); - sentDX[b+128] = reply; - receivedWX[b+128] = WILL; - } - neg_state = STATE_DATA; - break; - case STATE_IACDO: - switch (b) { - case TELOPT_ECHO: - if(debug > 2) - System.out.println("ECHO"); - reply = WILL; - vec = new Vector(2); - vec.addElement("LOCALECHO"); - peer.notifyStatus(vec); - break; - case TELOPT_TTYPE: - if(debug > 2) - System.out.println("TTYPE"); - reply = WILL; - break; - case TELOPT_NAWS: - if(debug > 2) - System.out.println("NAWS"); - vec = new Vector(2); - vec.addElement("NAWS"); - Dimension size = (Dimension) - peer.notifyStatus(vec); - receivedDX[b] = DO; - if(size == null) - { - /* this shouldn't happen */ - send(IAC); - send(WONT); - send(TELOPT_NAWS); - reply = WONT; - sentWX[b] = WONT; - break; - } - reply = WILL; - sentWX[b] = WILL; - sendbuf[0]=IAC; - sendbuf[1]=WILL; - sendbuf[2]=TELOPT_NAWS; - send(sendbuf); - send(IAC);send(SB);send(TELOPT_NAWS); - send((byte) (size.width >> 8)); - send((byte) (size.width & 0xff)); - send((byte) (size.height >> 8)); - send((byte) (size.height & 0xff)); - send(IAC);send(SE); - break; - default: - if(debug > 2) - System.out.println( - "<UNKNOWN,"+b+">" - ); - reply = WONT; - break; - } - if ( reply != sentWX[128+b] || - DO != receivedDX[128+b] - ) { - sendbuf[0]=IAC; - sendbuf[1]=reply; - sendbuf[2]=b; - send(sendbuf); - sentWX[b+128] = reply; - receivedDX[b+128] = DO; - } - neg_state = STATE_DATA; - break; - case STATE_IACDONT: - switch (b) { - case TELOPT_ECHO: - if(debug > 2) - System.out.println("ECHO"); - reply = WONT; - vec = new Vector(2); - vec.addElement("NOLOCALECHO"); - peer.notifyStatus(vec); - break; - case TELOPT_NAWS: - if(debug > 2) - System.out.println("NAWS"); - reply = WONT; - break; - default: - if(debug > 2) - System.out.println( - "<UNKNOWN,"+b+">" - ); - reply = WONT; - break; - } - if ( reply != sentWX[b+128] || - DONT != receivedDX[b+128] - ) { - send(IAC);send(reply);send(b); - sentWX[b+128] = reply; - receivedDX[b+128] = DONT; - } - neg_state = STATE_DATA; - break; - case STATE_IACSBIAC: - if(debug > 2) System.out.println(""+b+" "); - if (b == IAC) { - sbcount = 0; - current_sb = b; - neg_state = STATE_IACSBDATA; - } else { - System.out.println("(bad) "+b+" "); - neg_state = STATE_DATA; - } - break; - case STATE_IACSB: - if(debug > 2) System.out.println(""+b+" "); - switch (b) { - case IAC: - neg_state = STATE_IACSBIAC; - break; - default: - current_sb = b; - sbcount = 0; - neg_state = STATE_IACSBDATA; - break; - } - break; - case STATE_IACSBDATA: - if (debug > 2) System.out.println(""+b+" "); - switch (b) { - case IAC: - neg_state = STATE_IACSBDATAIAC; - break; - default: - sbbuf[sbcount++] = b; - break; - } - break; - case STATE_IACSBDATAIAC: - if (debug > 2) System.out.println(""+b+" "); - switch (b) { - case IAC: - neg_state = STATE_IACSBDATA; - sbbuf[sbcount++] = IAC; - break; - case SE: - handle_sb(current_sb,sbbuf,sbcount); - current_sb = 0; - neg_state = STATE_DATA; - break; - case SB: - handle_sb(current_sb,sbbuf,sbcount); - neg_state = STATE_IACSB; - break; - default: - neg_state = STATE_DATA; - break; - } - break; - default: - if (debug > 2) - System.out.println( - "This should not happen: "+ - neg_state+" " - ); - neg_state = STATE_DATA; - break; - } - } - buf = new byte[noffset]; - System.arraycopy(nbuf, 0, buf, 0, noffset); - return buf; - } -} diff --git a/web/root/telnet/socket/TelnetWrapper.class b/web/root/telnet/socket/TelnetWrapper.class deleted file mode 100644 index afd702d1c44a904c9966ced29ae10322d12a0098..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/socket/TelnetWrapper.class and /dev/null differ diff --git a/web/root/telnet/socket/TelnetWrapper.java b/web/root/telnet/socket/TelnetWrapper.java deleted file mode 100644 index a7f6c7fb2add0a1afd81cf0c1f077cdcc4fb10ad..0000000000000000000000000000000000000000 --- a/web/root/telnet/socket/TelnetWrapper.java +++ /dev/null @@ -1,396 +0,0 @@ -package socket; - -import java.io.IOException; -import java.util.Date; - -/** Wrapper for a Java Telnet call. - * To use, make a new TelnetWrapper() with the name or IP address of a host. - * Then, for most uses, the easiest way is to call setPrompt() with the - * expected prompt, then call login(), and a sequence of sendLine()'s - * until you get what you want done. - * <P> - * If you don't know the prompt ahead of time, you have to do a sequence of - * send() and wait() or receiveUntil() calls. send() sends a string across - * the telnet connection. Add a '\r' to the end if you want to - * complete a command. wait() waits for an exact string from the other side - * of the telnet connection, and returns nothing, - * receiveUntil() also waits for a string, but returns all the data - * that it received while waiting, including the string itself. - * Use this if you want the output from a command. Please note that - * the telnet connection will usually echo the sent command. - * <P> - * sendLine() is generally better, since it adds the '\r' - * automatically, waits for the prompt before returning, and returns all - * data received before the prompt, with the prompt itself cut off the - * end, and the sent command cut off the beginning. login() and - * sendLine() are implemented using send(), wait() and receiveUntil(). - * They can be freely mixed and matched. - * <P> - * Here is a simple example of the use of TelnetWrapper: - * <PRE> - * // creates a new file in /tmp, lists the directory to prove it done - * { - * TelnetWrapper telnet = new TelnetWrapper("123.45.78.90"); - * - * // setting the correct prompt ahead of time is very important - * // if you want to use login and sendLine - * telnet.setPrompt("$ "); - * telnet.login("loginname", "password"); - * - * // this is how you have to do it otherwise - * telnet.send("touch /tmp/TELNET_WRAPPER" + "\r"); - * telnet.wait("$ "); - * - * // sendLine 1: adds the \r automatically, 2: waits for the prompt - * // before returning 3: returns what was printed from the command - * String ls = telnet.sendLine("ls /tmp"); - * System.out.println(ls); - * - * // clean up - * telnet.disconnect(); - * } - * </PRE> - * @author George Ruban 3/4/97 - * @version 0.2 5/15/97 - added comments, replaced String += with - * StringBuffer.append() in receiveUntil(), added port constructor - * @version 0.3 7/30/97 - added optional timeout to receiveUntil() and wait() - * @see TelnetIO - */ -public class TelnetWrapper -{ - /** The telnet connection. That which is wrapped. */ - TelnetIO tio; - /** Set to true for System.out.println debugging. */ - public boolean debug = false; - /** The current prompt on the remote system. */ - private String prompt; - - /** The default prompt used by all TelnetWrappers unless specifically - * overridden. - * @see #setPrompt - */ - private static String defaultPrompt = "$ "; - - /** The default login name used by TelnetWrappers. - * If defaultLogin and defaultPassword are both non-null - * when a TelnetWrapper is created, the TelnetWrapper will attempt - * to login. - */ - private static String defaultLogin = null; - - /** The default password used by TelnetWrappers. - * If defaultLogin and defaultPassword are both non-null - * when a TelnetWrapper is created, the TelnetWrapper will attempt - * to login. - */ - private static String defaultPassword = null; - - /** Skip any received data until the token appears. - * More efficient than receiveUntil, but liable to fail on large - * tokens that can be spread over several "send"s. In that case, - * consider using receiveUntil and ignoring the return value. - * @param token String to wait for - * @exception IOException on problems with the socket connection - * @see #receiveUntil - */ - public void wait(String token) throws IOException - { - wait(token, -1); - } - - /** Wait for a String or a timeout. - * If time runs out, throws a TimedOutException. - * Sleeps in intervals of 100 milliseconds until either receiving the - * token or timeout. - * <P> - * More efficient than receiveUntil, but liable to fail on large - * tokens that can be spread over several "send"s. In that case, - * consider using receiveUntil and ignoring the return value. - * @param token String to wait for - * @param timeout time in milliseconds to wait (negative means wait forever) - * @exception IOException on problems with the socket connection - * @exception TimedOutException if time runs out before token received - * @see #receiveUntil(String, long) - */ - public void wait(String token, long timeout) - throws IOException, TimedOutException - { - if(debug) System.out.println("wait(" + token + ", " + timeout + ")..."); - String tmp = ""; - long deadline = 0; - if(timeout >= 0) - deadline = new Date().getTime() + timeout; - - do { - if(timeout >= 0) - { - while(available() <= 0) - { - if(new Date().getTime() > deadline) - throw new TimedOutException(); - try{ - Thread.currentThread().sleep(100); - } - catch(InterruptedException ignored) - {} - } - } - tmp = receive(); - } while(tmp.indexOf(token) == -1); - if(debug) System.out.println("wait(" + token + ", " + timeout + - ") successful."); - } - - /** Returns bytes available to be read. Since they haven't been - * negotiated over, this could be misleading... - */ - public int available() throws IOException - { - return tio.available(); - } - - /** Returns a String from the telnet connection. Blocks - * until one is available. No guarantees that the string is in - * any way complete. - * NOTE: uses Java 1.0.2 style String-bytes conversion.*/ - public String receive() throws IOException - { - String s = new String(receiveBytes(), 0); - if(debug) System.out.println(s); - return s; - } - - /** Returns a byte array. Blocks until data is available. */ - public byte[] receiveBytes() throws IOException - { - return tio.receive(); - } - - /** Returns all data received up until a certain token. - * @param token String to wait for - * @exception IOException on problems with the socket connection - * @see #wait - */ - public String receiveUntil(String token) throws IOException - { - return receiveUntil(token, -1); - } - - - /** Returns all data received up until a certain token. - * @param token String to wait for - * @param timeout time in milliseconds to wait (negative means wait forever) - * @exception IOException on problems with the socket connection - * @exception TimedOutException if time runs out before token received - * @see #wait(String, long) - */ - public String receiveUntil(String token, long timeout) - throws IOException, TimedOutException - { - StringBuffer buf = new StringBuffer(); - long deadline = 0; - if(timeout >= 0) - deadline = new Date().getTime() + timeout; - do - { - if(timeout >= 0) - { - while(available() <= 0) - { - if(new Date().getTime() > deadline) - throw new TimedOutException(); - try{ - Thread.currentThread().sleep(100); - } - catch(InterruptedException ignored) - {} - } - } - buf.append(receive()); - } while(buf.toString().indexOf(token) == -1); - return buf.toString(); - } - - /** Sends a String to the remote host. - * NOTE: uses Java 1.0.2 style String-bytes conversion. - * @exception IOException on problems with the socket connection - */ - public void send(String s) throws IOException - { - if(debug) System.out.println(s); - byte[] buf = new byte[s.length()]; - s.getBytes(0, buf.length, buf, 0); - tio.send(buf); - } - - /** Sends a line to the remote host, returns all data before the prompt. - * Since telnet seems to rely on carriage returns ('\r'), - * one will be appended to the sent string, if necessary. - * @param command command line to send - * @return whatever data the command produced before the prompt. - * @see #setPrompt - */ - public String sendLine(String command) throws IOException - { - if(command.charAt(command.length() -1) != '\r') - command += "\r"; - send(command); - String s = receiveUntil(prompt); - - // telnet typically echoes the command with a \r\n ending... - return s.substring(command.length() + 1, s.indexOf(prompt)); - } - - /** Sends bytes over the telnet connection. */ - public void send(byte[] buf) throws IOException - { - tio.send(buf); - } - - /** Logs in as a particular user and password. - * Returns after receiving prompt. */ - public void login(String loginName, String password) throws IOException - { - wait("login:"); - send(loginName + "\r"); - wait("Password:"); - sendLine(password + "\r"); - } - - /** Connects to the default telnet port on the given host. - * If the defaultLogin and defaultPassword are non-null, attempts login. */ - public TelnetWrapper(String host) throws IOException - { - tio = new TelnetIO(); - setPrompt(defaultPrompt); - tio.connect(host); - if(defaultLogin != null && defaultPassword != null) - { - login(defaultLogin, defaultPassword); - } - } - - /** Connects to a specific telnet port on the given host. - * If the defaultLogin and defaultPassword are non-null, attempts login. */ - public TelnetWrapper(String host, int port) throws IOException - { - tio = new TelnetIO(); - setPrompt(defaultPrompt); - tio.connect(host, port); - if(defaultLogin != null && defaultPassword != null) - { - login(defaultLogin, defaultPassword); - } - } - - /** Sets the expected prompt. - * If this function is not explicitly called, the default prompt is used. - * @see #setDefaultPrompt - */ - public void setPrompt(String prompt) - { - if(prompt == null) throw new IllegalArgumentException("null prompt."); - this.prompt = prompt; - } - - /** Sets the default prompt used by all TelnetWrappers. - * This can be specifically overridden for a specific instance. - * The default prompt starts out as "$ " until this function is called. - * @see #setPrompt - */ - public static void setDefaultPrompt(String prompt) - { - if(prompt == null) throw new IllegalArgumentException("null prompt."); - defaultPrompt = prompt; - } - - /** Sets the default login used by TelnetWrappers. - * If this method is called with non-null login and password, - * all TelnetWrappers will attempt to login when first created. - * @param login login name to use - * @param password password to use - * @see #login - * @see #unsetLogin - */ - public static void setLogin(String login, String password) - { - if(login == null || password == null) - throw new IllegalArgumentException("null login or password."); - defaultLogin = login; - defaultPassword = password; - } - - - /** Turns off the default login of TelnetWrappers. - * After this method is called, TelnetWrappers will not - * login until that method is explicitly called. - * @see #setLogin - * @see #login - */ - public static void unsetLogin() - { - defaultLogin = defaultPassword = null; - } - - /** Ends the telnet connection. */ - public void disconnect() throws IOException - { - if(tio != null) tio.disconnect(); - tio = null; - } - - /** Ends the telnet connection. */ - public void finalize() - { - try - { - disconnect(); - } - catch(IOException e) - {} // after all, what can be done at this point? - } - - /** Telnet test driver. - * Modeled after the IOtest.java example in the Telnet Applet. - * Logs in to "host", creates a timestamped file in /tmp, lists the - * /tmp directory to System.out, disconnects. Shows off several - * TelnetWrapper methods. - * @param args host login password prompt - */ - public static void main(String args[]) throws IOException - { - if(args.length != 4) throw new - IllegalArgumentException("Usage: TelnetWrapper host login password prompt"); - - String host = args[0]; - String login = args[1]; - String password = args[2]; - String prompt = args[3]; - - Date now = new Date(); - String timestamp = now.getYear() + "-" + - (now.getMonth()+1) + "-" + now.getDate() + "-" + - now.getHours() + ":" + now.getMinutes() + ":" + - now.getSeconds(); - TelnetWrapper telnet = new TelnetWrapper(host); - telnet.debug = true; - - // setting the correct prompt ahead of time is very important - // if you want to use login and sendLine - telnet.setPrompt(prompt); - telnet.login(login, password); - - // this is how you have to do it otherwise - telnet.send("touch /tmp/TELNET_WRAPPER-" + timestamp + "\r"); - telnet.wait(prompt); - - // sendLine 1: adds the \r automatically, 2: waits for the prompt - // before returning 3: returns what was printed from the command - String ls = telnet.sendLine("ls /tmp"); - System.out.println(ls); - - // clean up - telnet.disconnect(); - } -} - diff --git a/web/root/telnet/socket/TimedOutException.class b/web/root/telnet/socket/TimedOutException.class deleted file mode 100644 index 274c0796a57b759a398048452383233ec17c6112..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/socket/TimedOutException.class and /dev/null differ diff --git a/web/root/telnet/socket/TimedOutException.java b/web/root/telnet/socket/TimedOutException.java deleted file mode 100644 index ac9621714dac48a0d5b559aeed59480fe892624e..0000000000000000000000000000000000000000 --- a/web/root/telnet/socket/TimedOutException.java +++ /dev/null @@ -1,19 +0,0 @@ -package socket; -import java.io.IOException; - -/** Exception thrown when a Telnet connection takes too long - * before receiving a specified String token. - * @author George Ruban - * @version 0.1 7/30/97 */ -public class TimedOutException extends IOException -{ - public TimedOutException() - { - } - - public TimedOutException(String message) - { - super(message); - } -} - diff --git a/web/root/telnet/telnet.class b/web/root/telnet/telnet.class deleted file mode 100644 index fb4bd00a58ea4ab22ff3c73f40e1ae680beb76f6..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/telnet.class and /dev/null differ diff --git a/web/root/telnet/telnet.java b/web/root/telnet/telnet.java deleted file mode 100644 index e99235295b6037f6398762cdadc37f2bbf132e03..0000000000000000000000000000000000000000 --- a/web/root/telnet/telnet.java +++ /dev/null @@ -1,576 +0,0 @@ -/** - * telnet -- implements a simple telnet - * -- - * $Id: telnet.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Mon Aug 4 13:11:14 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -import java.applet.Applet; -import java.awt.Frame; -import java.awt.Component; -import java.awt.Container; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.Panel; -import java.awt.Event; -import java.util.Vector; -import java.util.Hashtable; -import java.util.Enumeration; -import java.io.IOException; - -import socket.TelnetIO; -import socket.StatusPeer; - -import display.Terminal; -import display.TerminalHost; - -import modules.Module; - -/** - * A telnet implementation that supports different terminal emulations. - * @version $Id: telnet.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * @author Matthias L. Jugel, Marcus Mei�ner - */ -public class telnet extends Applet implements Runnable, TerminalHost, StatusPeer -{ - /** - * The telnet io methods. - * @see socket.TelnetIO - */ - protected TelnetIO tio; - - /** - * The terminal emulation (dynamically loaded). - * @see emulation - * @see display.Terminal - * @see display.TerminalHost - */ - protected Terminal term; - - /** - * The host address to connect to. This is retrieved from the PARAM tag - * "address". - */ - protected String address; - - /** - * The port number (default ist 23). This can be specified as the PARAM tag - * "port". - */ - protected int port = 23; - - /** - * The proxy ip address. If this variable is set telnet will try to connect - * to this address and then send a string to tell the relay where the - * target host is. - * @see address - */ - protected String proxy = null; - /** - * The proxy port number. This is the port where the relay is expected to - * listen for incoming connections. - * @see proxy - * @see port - */ - protected int proxyport; - - /** - * Emulation type (default is vt320). This can be specified as the PARAM - * tag "emulation". - * @see term - * @see display.Terminal - * @see display.TerminalHost - */ - protected String emulation = "vt320"; - - /** - * Dynamically loaded modules are stored here. - */ - protected Vector modules = null; - - // some state variables; - private boolean localecho = true; - private boolean connected = false; - - private Thread t; - private Container parent; - - /** - * This Hashtable contains information retrievable by getParameter() in case - * the program is run as an application and the AppletStub is missing. - */ - public Hashtable params; - - /** - * Retrieve the current version of the applet. - * @return String a string with the version information. - */ - public String getAppletInfo() - { - String info = "The Java(tm) Telnet Applet\n$Id: telnet.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $\n"; - info += "Terminal emulation: "+term.getTerminalType()+ - " ["+term.toString()+"]\n"; - info += "Terminal IO version: "+tio.toString()+"\n"; - if(modules != null && modules.size() > 0) { - info += "Resident modules loaded: ("+modules.size()+")"; - for(int i = 0; i < modules.size(); i++) - info += " + "+(modules.elementAt(i)).toString()+"\n"; - } - - return info; - } - - /** - * Retrieve parameter tag information. This includes the tag information from - * terminal and loaded modules. - * @return String an array of array of string with tag information - * @see java.applet.Applet#getParameterInfo - */ - public String[][] getParameterInfo() - { - String pinfo[][]; - String info[][] = { - {"address", "String", "IP address"}, - {"port", "Integer", "Port number"}, - {"proxy", "String", "IP address of relay"}, - {"proxyport","Integer", "Port number of relay"}, - {"emulation","String", "Emulation to be used (standard is vt320)"}, - {"localecho","String", "Localecho Mode (on/off/auto)"}, - }; - String tinfo[][] = (term != null ? term.getParameterInfo() : null); - if(tinfo != null) pinfo = new String[tinfo.length + 3][3]; - else pinfo = new String[3][3]; - System.arraycopy(info, 0, pinfo, 0, 3); - System.arraycopy(tinfo, 0, pinfo, 3, tinfo.length); - return pinfo; - } - - /** - * We override the Applet method getParameter() to be able to handle - * parameters even as application. - * @param name The name of the queried parameter. - * @return the value of the parameter - * @see java.applet.Applet#getParameter - */ - public String getParameter(String name) - { - if(params == null) return super.getParameter(name); - return (String)params.get(name); - } - - /** - * The main function is called on startup of the application. - */ - public static void main(String args[]) - { - // an application has to create a new instance of itself. - telnet applet = new telnet(); - - // create params from command line arguments - applet.params = new Hashtable(); - switch(args.length) - { - case 2: applet.params.put("port", args[1]); - case 1: applet.params.put("address", args[0]); - break; - default: - System.out.println("Usage: java telnet host [port]"); - System.exit(0); - } - applet.params.put("VTscrollbar", "true"); - applet.params.put("module#1", "ButtonBar"); - applet.params.put("1#Button", "Exit|\\$exit()"); - applet.params.put("2#Button", "Connect|\\$connect(\\@address@,\\@port@)"); - applet.params.put("3#Input", "address#30|" - +(args.length > 0 ? args[0] : "localhost")); - applet.params.put("4#Input", "port#4|23"); - applet.params.put("5#Button", "Disconnect|\\$disconnect()"); - - // we put the applet in its own frame - Frame frame = new Frame("The Java Telnet Application ["+args[0]+"]"); - frame.setLayout(new BorderLayout()); - frame.add("Center", applet); - frame.resize(380, 590); - - applet.init(); - - frame.pack(); - frame.show(); - - applet.start(); - } - - /** - * Initialize applet. This method reads the PARAM tags "address", - * "port" and "emulation". The emulation class is loaded dynamically. - * It also loads modules given as parameter "module#<nr>". - */ - public void init() - { - String tmp; - - // save the current parent for future use - parent = getParent(); - - // get the address we want to connect to - if((address = getParameter("address")) == null) - address = getDocumentBase().getHost(); - - if((tmp = getParameter("port")) == null) - port = 23; - else - port = Integer.parseInt(tmp); - - if((proxy = getParameter("proxy")) != null) - if((tmp = getParameter("proxyport")) == null) - proxyport = 31415; - else - proxyport = Integer.parseInt(tmp); - - if((emulation = getParameter("emulation")) == null) - emulation = "vt320"; - - // load the terminal emulation - try { - term = (Terminal)Class.forName("display."+emulation).newInstance(); - System.out.println("telnet: load terminal emulation: "+emulation); - } catch(Exception e) { - System.err.println("telnet: cannot load terminal emulation "+emulation); - e.printStackTrace(); - } - setLayout(new BorderLayout()); - - // load modules, position is determined by the @<position> modifier - modules = new Vector(); - int nr = 1; - while((tmp = getParameter("module#"+nr++)) != null) try { - Panel north = null, south = null, west = null, east = null; - String position = "North", initFile = null; - - // try to get the initialization file name - if(tmp.indexOf(',') != -1) { - initFile = tmp.substring(tmp.indexOf(','+1)); - tmp = tmp.substring(0, tmp.indexOf(',')); - initFile = tmp.substring(tmp.indexOf(','+1)); - } - - // find the desired location - if(tmp.indexOf('@') != -1) { - position = tmp.substring(tmp.indexOf('@')+1); - tmp = tmp.substring(0, tmp.indexOf('@')); - } - Object obj = (Object)Class.forName("modules."+tmp).newInstance(); - - // probe for module (implementing modules.Module) - try { - ((Module)obj).setLoader(this); - modules.addElement((Module)obj); - System.out.println("telnet: module "+tmp+" detected"); - } catch(ClassCastException e) { - System.out.println("telnet: warning: "+tmp+" may not be a "+ - "valid module"); - } - - // probe for visible component (java.awt.Component and descendants) - try { - Component component = (Component)obj; - if(position.equals("North")) { - if(north == null) { north = new Panel(); add("North", north); } - north.add(component); - } else if(position.equals("South")) { - if(south == null) { south = new Panel(); add("South", south); } - south.add(component); - } else if(position.equals("East")) { - if(east == null) { east = new Panel(); add("East", east); } - east.add(component); - } else if(position.equals("West")) { - if(west == null) { west = new Panel(); add("West", west); } - west.add(component); - } - System.err.println("telnet: module "+tmp+" is a visible component"); - } catch(ClassCastException e) {} - - } catch(Exception e) { - System.err.println("telnet: cannot load module "+tmp); - e.printStackTrace(); - } - if(modules.isEmpty()) modules = null; - add("Center", term); - } - - /** - * Upon start of the applet try to create a new connection. - */ - public void start() - { - if(!connect(address, port) && params == null) - showStatus("telnet: connection to "+address+" "+port+" failed"); - } - - /** - * Disconnect when the applet is stopped. - */ - public final void stop() - { - disconnect(); - } - - /** - * Try to read data from the sockets and put it on the terminal. - * This is done until the thread dies or an error occurs. - */ - public void run() - { - while(t != null) - try { - String tmp = new String(tio.receive(), 0); - - // cycle through the list of modules - if(modules != null) { - Enumeration modlist = modules.elements(); - while(modlist.hasMoreElements()) { - Module m = (Module)modlist.nextElement(); - String modified = m.receive(tmp); - // call the receive() method and if it returns null - // remove the module from the list - if(modified == null) modules.removeElement(m); - else tmp = modified; - } - } - // put the modified string to the terminal - term.putString(tmp); - } catch(IOException e) { - disconnect(); - } - } - - /** - * Connect to the specified host and port but don't break existing - * connections. Connects to the host and port specified in the tags. - * @return false if connection was unsuccessful - */ - public boolean connect() - { - return connect(address, port); - } - - /** - * Connect to the specified host and port but don't break existing - * connections. Uses the port specified in the tags or 23. - * @param host destination host address - */ - public boolean connect(String host) - { - return connect(host, port); - } - - /** - * Connect to the specified host and port but don't break existing - * connections. - * @param host destination host address - * @param prt destination hosts port - */ - public boolean connect(String host, int prt) - { - address = host; port = prt; - - if(address == null || address.length() == 0) return false; - - // There should be no thread when we try to connect - if(t != null && connected) { - System.err.println("telnet: connect: existing connection preserved"); - return false; - } else t = null; - - try { - // In any case try to disconnect if tio is still active - // if there was no tio create a new one. - if(tio != null) try { tio.disconnect(); } catch(IOException e) {} - else (tio = new TelnetIO()).setPeer(this); - - term.putString("Trying "+address+(port==23?"":" "+port)+" ...\n\r"); - try { - // connect to to our destination at the given port - if(proxy != null) { - tio.connect(proxy, proxyport); - String str = "relay "+address+" "+port+"\n"; - byte[] bytes = new byte[str.length()]; - str.getBytes(0, str.length(), bytes, 0); - tio.send(bytes); - } else - tio.connect(address, port); - term.putString("Connected to "+address+".\n\r"); - // initial conditions are connected and localecho - connected = true; - localecho = true; - if ( (getParameter("localecho")!=null) && - getParameter("localecho").equals("no") - ) - localecho = false; - - // cycle through the list of modules and notify connection - if(modules != null) { - Enumeration modlist = modules.elements(); - while(modlist.hasMoreElements()) - // call the connect() method - ((Module)modlist.nextElement()).connect(address, port); - } - } catch(IOException e) { - term.putString("Failed to connect.\n\r"); - // to be sure, we remove the TelnetIO instance - tio = null; - System.err.println("telnet: failed to connect to "+address+" "+port); - e.printStackTrace(); - return false; - } - // if our connection was successful, create a new thread and start it - t = new Thread(this); - t.setPriority(Thread.MIN_PRIORITY); - t.start(); - } catch(Exception e) { - // hmm, what happened? - System.err.println("telnet: an error occured:"); - e.printStackTrace(); - return false; - } - return true; - } - - /** - * Disconnect from the remote host. - * @return false if there was a problem disconnecting. - */ - public boolean disconnect() - { - if(tio == null) { - System.err.println("telnet: no connection"); - return false; - } - try { - connected = false; t = null; - // cycle through the list of modules and notify connection - if(modules != null) { - Enumeration modlist = modules.elements(); - while(modlist.hasMoreElements()) - // call the disconnect() method - ((Module)modlist.nextElement()).disconnect(); - } - term.putString("\n\rConnection closed.\n\r"); - tio.disconnect(); - } catch(Exception e) { - System.err.println("telnet: disconnection problem"); - e.printStackTrace(); - tio = null; t = null; - return false; - } - return true; - } - - /** - * Send a String to the remote host. Implements display.TerminalHost - * @param s String to be sent - * @return true if we are connected - * @see display.TerminalHost - */ - public boolean send(String str) - { - if(connected) try { - byte[] bytes = new byte[str.length()]; - str.getBytes(0, str.length(), bytes, 0); - tio.send(bytes); - if(localecho) { - if ((str.length()==2) && (str.charAt(0)=='\r') && (str.charAt(1)==0)) - term.putString("\r\n"); - else - term.putString(str); - } - } catch(Exception e) { - System.err.println("telnet.send(): disconnected"); - disconnect(); - return false; - } - else return false; - return true; - } - - /** - * Send a String to the remote Host. - * @param str String to be sent - * @return true if we are connected - * @see modules.BSXModule - */ - public boolean writeToSocket(String str) - { - if (connected) try { - byte[] bytes = new byte[str.length()]; - str.getBytes(0, str.length(), bytes, 0); - tio.send(bytes); - } catch(Exception e) { - System.err.println("telnet.send(): disconnected"); - disconnect(); - return false; - } - else return false; - return true; - } - /** - * Send a String to the users terminal - * @param str String to be displayed - * @return void - * @see modules.BSXModule - */ - public void writeToUser(String str) - { - if (term!=null) - term.putString(str); - } - - /** - * This method is called when telnet needs to be notified of status changes. - * @param status Vector of status information. - * @return an object of the information requested. - * @see socket.StatusPeer - */ - public Object notifyStatus(Vector status) - { - String what = (String)status.elementAt(0); - - if(what.equals("NAWS")) - return term.getSize(); - if(what.equals("TTYPE")) - if(term.getTerminalType() == null) - return emulation; - else return term.getTerminalType(); - - if(what.equals("LOCALECHO") || what.equals("NOLOCALECHO")) { - boolean nlocalecho = localecho ; - if(what.equals("LOCALECHO")) - nlocalecho = true; - if(what.equals("NOLOCALECHO")) - nlocalecho = false; - if ( (getParameter("localecho")==null) || - getParameter("localecho").equals("auto") - ) - localecho = nlocalecho; - /* else ignore ... */ - } - return null; - } -} diff --git a/web/root/telnet/tools/Makefile b/web/root/telnet/tools/Makefile deleted file mode 100644 index 860d4590dc5bf416ef3e224ae7fd3a0f0833d562..0000000000000000000000000000000000000000 --- a/web/root/telnet/tools/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# -# This file is part of "The Java Telnet Applet". -# -# This 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) -# any later version. -# -# "The Java Telnet Applet" is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with The JAVA Telnet Applet; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -OPT = -O -DEBUG = -g - -.SUFFIXES: .java .class .html - -.java.class: - javac -classpath ../:$(CLASSPATH) $(OPT) $(DEBUG) $< - -.class.html: - (env CLASSPATH=../:$(CLASSPATH); appletviewer $@) - -all: proxy.class - -relay: mrelayd relayd - -clean: - rm -f *~ - -realclean: clean - rm -f *.class relayd mrelayd - -# dependencies - -proxy.class: proxy.java -redirector.class: proxy.java diff --git a/web/root/telnet/tools/mrelayd b/web/root/telnet/tools/mrelayd deleted file mode 100644 index 9d3ce804bf52195ac9273fd5d06fce36037e41f8..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/tools/mrelayd and /dev/null differ diff --git a/web/root/telnet/tools/mrelayd.c b/web/root/telnet/tools/mrelayd.c deleted file mode 100644 index 27c79aae4885a058526293d6a20bbf37bd188f7c..0000000000000000000000000000000000000000 --- a/web/root/telnet/tools/mrelayd.c +++ /dev/null @@ -1,566 +0,0 @@ -/** - * mrelayd.c -- a relay daemon - * -- - * $Id: mrelayd.c,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* mrelayd.c (c) 1996,1997 Marcus Meissner <marcus@mud.de> */ - -/* Compile with: cc -o relayd relayd.c - * or: gcc -o relayd relayd.c - * Solaris: (g)cc -o relayd relayd.c -lsocket -lnsl - */ - -/* this program expects the string: - * "relay <hostname> <port>" or "relay <hostname>" - * after connecting. It will then try to connect to the specified host - * if failures occur, it will terminate the connection. - */ - -/* adjust this to a reasonable limit */ -#define MAXUSERS 120 - -/* message printed if all slots are used ... */ -#define FAILMESSAGE "Sorry, all slots are full.\r\n" - -/* string printed before connection */ -#define RELAYHEADER "Relayd $Revision: 1.1.1.1 $ (c) Marcus Meissner\r\n" - -/* the tcp port this demons is listening on ... */ -#define LISTENPORT 31415 - -/* default connect port (telnet) */ -#define DEFAULTPORT 23 - -/* default buffersize */ -#define DEFAULTSIZE 2000 - -#include <stdio.h> -#ifdef _WIN32 -#include <winsock.h> -#include <signal.h> -#define ioctl ioctlsocket -#define read(a,b,c) recv(a,b,c,0) -#define write(a,b,c) send(a,b,c,0) -#define close _lclose -#define EINTR WSAEINTR -#define perror xperror -void xperror(char *s) { - fprintf(stderr,"%s: %d\n",s,GetLastError()); -} -#else -#include <sys/time.h> -#include <unistd.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <netdb.h> -#include <sys/errno.h> -#include <sys/signal.h> -#include <sys/fcntl.h> -#include <sys/ioctl.h> -#endif -#include <memory.h> -#include <malloc.h> -#include <string.h> -#include <sys/types.h> - -#if defined(sun) && defined(__GNUC__) -int socket(int,int,int); -int shutdown(int,int); -int close(int); -int bind(int,struct sockaddr*,int); -int listen(int,int); -void bzero(char*,int); -int select(int,fd_set *,fd_set*,fd_set*,struct timeval*); -int accept(int,struct sockaddr*,int*); -int connect(int,struct sockaddr*,int); -int recvfrom(int,char*,int,int,struct sockaddr*,int*); -/*void perror(char*); SLOWLARIS HASS*/ -/*int sendto(int,char*,int,int,struct sockaddr*,int); SLOWLARIS HASS*/ -#endif - -#ifdef hpux -/* redefinition... to avoid prototype in <time.h> */ -#define FD_CAST int -#endif - -#ifdef sgi -void bzero(void*,int); -#endif - -#ifndef FD_CAST -#define FD_CAST fd_set -#endif - -extern int errno; - -struct relay { - char *inbuf,*outbuf; - int infd,outfd,incur,outcur,insize,outsize; - struct sockaddr_in inaddr,outaddr; - int state; -#define STATE_ACCEPTED 0 -#define STATE_OK 1 - int flags; -#define FLAG_EOF_USER 1 -#define FLAG_EOF_TARGET 2 -#define FLAG_CLOSED_TARGET 4 -#define FLAG_CLOSED_USER 8 -} *relays = NULL; -int nrofrelays = 0; - -void* -xmalloc(int size) { - void*x; - - x=malloc(size); - if (!x && size) { - fprintf(stderr,"Out of memory, exiting.\n"); - exit(1); - } - return x; -} - -void* -xrealloc(void *y,int size) { - void*x; - - x=realloc(y,size); - if (!x && size) { - fprintf(stderr,"Out of memory, exiting.\n"); - exit(1); - } - return x; -} - -static int -fd_make_nonblocking(int fd) { - int isnonblock=0; - -#ifdef FIONBIO - if (!isnonblock) { - int b; - b=1; - if (-1==ioctl(fd,FIONBIO,&b)) { - perror("ioctl FIONBIO"); - } else - isnonblock=1; - } -#endif -#ifdef O_NDELAY - if (!isnonblock) { - int flags; - - if (-1==(flags=fcntl(fd,F_GETFL))) { - perror("fcntl F_GETFL"); - } else { - flags|=O_NDELAY; - if (-1==fcntl(fd,F_SETFL,flags)) { - perror("fcntl F_SETFL O_NDELAY"); - } else - isnonblock=1; - } - } -#endif -#ifdef O_NONBLOCK - if (!isnonblock) { - int flags; - - if (-1==(flags=fcntl(fd,F_GETFL))) { - perror("fcntl F_GETFL"); - } else { - flags|=O_NONBLOCK; - if (-1==fcntl(fd,F_SETFL,flags)) { - perror("fcntl F_SETFL O_NONBLOCK"); - } else - isnonblock=1; - } - } -#endif - return isnonblock; -} - -void -clean_connection(struct relay *relay) { - if (!relay) return; - if (relay->outfd>=0) { - if (-1==close(relay->outfd)) - perror("close"); - relay->outfd=-1; - } - if (relay->infd>=0) { - if (-1==close(relay->infd)) - perror("close"); - relay->infd=-1; - } - free(relay->outbuf);free(relay->inbuf); - memcpy(relay,relay+1,sizeof(struct relay)*(nrofrelays-(relay-relays)-1)); - relays = xrealloc(relays,sizeof(struct relay)*(--nrofrelays)); -} - -void -main(argc,argv) -int argc; -char **argv; -{ - int i,j,res; - int acfd; - struct sockaddr_in acsa; - char readbuf[1000],relaystring[1000]; - struct in_addr targetaddr; -#ifdef _WIN32 - { - WSADATA wsad; - - WSAStartup(0x0101,&wsad); - } -#else - close(0); - close(1); -#endif -#ifdef SIGPIPE - signal(SIGPIPE,SIG_IGN); -#endif -#ifdef SIGHUP - signal(SIGHUP,SIG_IGN); /* don't terminate on session detach */ -#endif - strcpy(relaystring,FAILMESSAGE); - if (-1==(acfd=socket(PF_INET,SOCK_STREAM,0))) { - perror("socket(accept_socket)"); - exit(1); - } - - acsa.sin_family=AF_INET; - acsa.sin_port=htons(LISTENPORT); - acsa.sin_addr.s_addr=INADDR_ANY; -#ifdef SO_REUSEADDR - { - int reuseit=1; - if (-1==setsockopt(acfd,SOL_SOCKET,SO_REUSEADDR,(char*)&reuseit,sizeof(reuseit))) - perror("setsockopt SOL_SOCKET SO_REUSEADDR"); - } -#endif - if (-1==bind(acfd,(struct sockaddr*)&acsa,sizeof(struct sockaddr_in))) { - perror("bind"); - exit(1); - } - /* 5 is usual the maximum anyway */ - if (-1==listen(acfd,5)) { - perror("listen"); - exit(1); - } - while (1) { - fd_set readfds,writefds; - int width; - - width=3; - if (acfd>=width) - width=acfd+1; -restart_select: - FD_ZERO(&readfds);FD_ZERO(&writefds); - FD_SET(acfd,&readfds); - for (i=nrofrelays;i--;) { - struct relay *relay = relays+i; - - /* both sides closed? -> clean */ - if ((relay->flags & (FLAG_CLOSED_TARGET|FLAG_CLOSED_USER)) == - (FLAG_CLOSED_TARGET|FLAG_CLOSED_USER) - ) { - clean_connection(relay); - continue; - } - /* transmitted all stuff left to user? -> close */ - if ((relay->flags&(FLAG_CLOSED_TARGET|FLAG_EOF_TARGET))&&(!relay->outcur)) { - clean_connection(relay); - continue; - } - /* transmitted all stuff left to target? -> close */ - if ((relay->flags&(FLAG_CLOSED_USER|FLAG_EOF_USER))&&(!relay->incur)) { - clean_connection(relay); - continue; - } - - if (relay->outfd>=0) { - /*need to do that... else it will cause load 1*/ - if (relay->incur) - FD_SET(relay->outfd,&writefds); - if (!(relay->flags & FLAG_EOF_TARGET)) - FD_SET(relay->outfd,&readfds); - if (relay->outfd>=width) - width=relay->outfd+1; - } - if (relay->infd>=0) { - /*need to do that... else it will cause load 1*/ - if (relay->outcur) - FD_SET(relay->infd,&writefds); - if (!(relay->flags & FLAG_EOF_USER)) - FD_SET(relay->infd,&readfds); - if (relay->infd>=width) - width=relay->infd+1; - } - } - if (-1==select( width, - (FD_CAST*)&readfds, - (FD_CAST*)&writefds, - NULL,/*no exceptfds.*/ - 0) - ) { - if (errno!=EINTR) - perror("select"); - else - goto restart_select; - } - if (FD_ISSET(acfd,&readfds)) { - int afd; - int aclen; - struct sockaddr_in conaddr; - struct relay *relay = NULL; - - aclen=sizeof(struct sockaddr_in); - if (-1==(afd=accept(acfd,(struct sockaddr*)&conaddr,&aclen))) - perror("accept"); - if (relays) - relays=(struct relay*)xrealloc(relays,sizeof(struct relay)*(nrofrelays+1)); - else - relays=(struct relay*)xmalloc(sizeof(struct relay)); - nrofrelays++; - relay = relays+(nrofrelays-1); - relay->inbuf = xmalloc(DEFAULTSIZE); - relay->outbuf = xmalloc(DEFAULTSIZE); - relay->insize = DEFAULTSIZE; - relay->outsize = DEFAULTSIZE; - relay->flags = 0; - relay->incur = 0; - relay->outcur = 0; - relay->infd = afd; - relay->outfd = -1; - relay->state = STATE_ACCEPTED; - memcpy(&relay->inaddr,&conaddr,sizeof(struct sockaddr_in)); - if (nrofrelays>=MAXUSERS) { - strcpy(relay->outbuf,relaystring); - relay->outcur = strlen(relaystring)+1; - relay->state = STATE_OK; - relay->flags = FLAG_CLOSED_TARGET; - } -#ifdef SO_LINGER - { - struct linger sol; - sol.l_linger = 5; - sol.l_onoff = 1; - if (-1==setsockopt(acfd,SOL_SOCKET,SO_LINGER,(char*)&sol,sizeof(sol))) - perror("setsockopt SOL_SOCKET SO_LINGER"); - } -#endif - } - for (i=nrofrelays;i--;) { - struct relay *relay = relays+i; - - if ((relay->infd>=0) && FD_ISSET(relay->infd,&readfds)) { - do { - if (-1==(res=read(relay->infd,readbuf,1000))) { - if (errno==EINTR) - break; - /* user side has broken the connection */ - close(relay->infd);relay->infd=-1; - relay->flags |= FLAG_CLOSED_USER; - break; - } - break; - } while (1); - if (res==0) { - /* we read the End Of File marker. but we still have to write - * the rest of the text - */ - relay->flags |= FLAG_EOF_USER; - } - if (res>0) { - readbuf[res]='\0'; - while (relay->incur+res>=relay->insize) { - relay->inbuf=xrealloc(relay->inbuf,relay->insize*2); - relay->insize*=2; - } - memcpy(relay->inbuf+relay->incur,readbuf,res+1); - relay->incur+=res; - } - if ( (relay->outfd==-1) && - (relay->state==STATE_ACCEPTED) && - memchr(relay->inbuf,'\n',relay->incur) - ) { - char sendbuf[200]; - struct hostent *hp; - char *s,*nextchar,*tmp; - int port; - - s = memchr(relay->inbuf,'\n',relay->incur); - if (!s) - continue; - *s='\0'; - nextchar=s+1; - if ((s=memchr(relay->inbuf,'\r',(s-relay->inbuf)))) - *s='\0'; - - - relay->state = STATE_OK; - - tmp = (char*)xmalloc(strlen(relay->inbuf)); - if (2!=sscanf(relay->inbuf,"relay %s %d", - tmp,&port - )) { - if (!sscanf(relay->inbuf,"relay %s",tmp)) { - - free(tmp); - /* we avoid telling potential hackers how to use this relay */ - sprintf(relay->outbuf,"550 Bad syntax. Go away.\n",tmp); - relay->outcur = strlen(relay->outbuf); - relay->flags = FLAG_CLOSED_TARGET; - continue; - } else - port = DEFAULTPORT; - } - hp=gethostbyname(tmp); - if (!hp) {/* not found */ - sprintf(relay->outbuf,"No hostentry for '%s'!\n",tmp); - free(tmp); - relay->outcur = strlen(relay->outbuf); - relay->flags = FLAG_CLOSED_TARGET; - continue; - } - memcpy(&targetaddr,hp->h_addr_list[0],sizeof(struct in_addr)); - relay->outaddr.sin_family=AF_INET; - relay->outaddr.sin_port=htons(port); - memcpy(&(relay->outaddr.sin_addr),&targetaddr,4); - strcpy(sendbuf,RELAYHEADER); - relay->outcur=strlen(sendbuf); - memcpy(relay->outbuf,sendbuf,strlen(sendbuf)+1); - if (-1==(relay->outfd=socket(PF_INET,SOCK_STREAM,0))) - perror("socket(connect_socket)"); -#ifndef _WIN32 - (void)fd_make_nonblocking(relay->outfd); -#endif - if ( (-1==connect( relay->outfd, - (struct sockaddr*)&(relay->outaddr), - sizeof(struct sockaddr_in)) -#ifdef _WIN32 - ) && (WSAGetLastError()!=WSAEINPROGRESS) -#else - ) && (errno!=EINPROGRESS) -#endif - ) { - sprintf(readbuf,"Connect to %s failed: %s\n",tmp,strerror(errno)); - perror("connect"); - close(relay->outfd);relay->outfd=-1; - relay->state = STATE_OK; - relay->flags |= FLAG_CLOSED_TARGET; - strcpy(relay->outbuf,readbuf); - relay->outsize = strlen(readbuf)+1; - free(tmp); - continue; - } - free(tmp); -#ifdef SEND_REMOTEIP - /* only useful if you want to tell the - * remotemud the _real_ host the caller - * is calling from - */ - tmphp=gethostbyaddr( - (char*)(&(conaddr.sin_addr)), - sizeof(struct in_addr), - AF_INET - ); - if (!tmphp) { - sprintf(sendbuf,"remoteip %s %s\n", - inet_ntoa(conaddr.sin_addr), - inet_ntoa(conaddr.sin_addr) - ); - } else { - sprintf(sendbuf,"remoteip %s %s\n", - inet_ntoa(conaddr.sin_addr), - tmphp->h_name - ); - } - memcpy(relay->inbuf,sendbuf,strlen(sendbuf)+1); - relay->incur=strlen(sendbuf); -#else - relay->inbuf[0]='\0'; - relay->incur=0; -#endif - } - } - if ((relay->outfd>=0) && FD_ISSET(relay->outfd,&readfds)) { - do { - if (-1==(res=read(relay->outfd,readbuf,1000))) { - if (errno==EINTR) - continue; - /* the mudside has broken the - * connection. we still have - * to transmit the rest of - * the text - */ - close(relay->outfd);relay->outfd=-1; - relay->flags |= FLAG_CLOSED_TARGET; - break; - } - break; - } while (1); - if (res==0) { - /* we read the End Of File marker. but we still have to write - * the rest of the text - */ - relay->flags |= FLAG_EOF_TARGET; - } - if (res>0) { - /* 0 is not automagically appended. */ - readbuf[res]='\0'; - while (relay->outcur+res>=relay->outsize) { - relay->outbuf=xrealloc(relay->outbuf,relay->outsize*2); - relay->outsize*=2; - } - memcpy(relay->outbuf+relay->outcur,readbuf,res+1); - relay->outcur+=res; - } - } - if ((relay->infd>=0) && FD_ISSET(relay->infd,&writefds)) { - j=relay->outcur; - if (-1==(res=write(relay->infd,relay->outbuf,j))) { - if (errno!=EINTR) { - close(relay->infd);relay->infd=-1; - relay->flags |= FLAG_CLOSED_USER; - } - } - if (res>0) { - memcpy(relay->outbuf,relay->outbuf+res,relay->outcur-res); - relay->outcur-=res; - } - } - if ((relay->outfd>=0) && FD_ISSET(relay->outfd,&writefds)) { - j=relay->incur; - if (-1==(res=write(relay->outfd,relay->inbuf,j))) { - if (errno!=EINTR) { - close(relay->outfd);relay->outfd=-1; - relay->flags |= FLAG_CLOSED_TARGET; - } - } - if (res>0) { - memcpy(relay->inbuf,relay->inbuf+res,relay->incur-res); - relay->incur-=res; - } - } - } - } -} diff --git a/web/root/telnet/tools/mrelayd.exe b/web/root/telnet/tools/mrelayd.exe deleted file mode 100755 index d33f2d3cc6f8cab216b6f0feb0d1f26b8fb9de6e..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/tools/mrelayd.exe and /dev/null differ diff --git a/web/root/telnet/tools/proxy.class b/web/root/telnet/tools/proxy.class deleted file mode 100644 index c64e0eba0f001753af79ad00ba71688834e86782..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/tools/proxy.class and /dev/null differ diff --git a/web/root/telnet/tools/proxy.java b/web/root/telnet/tools/proxy.java deleted file mode 100644 index 564b5287b8761ce29e27392d565ae07cce0443fe..0000000000000000000000000000000000000000 --- a/web/root/telnet/tools/proxy.java +++ /dev/null @@ -1,225 +0,0 @@ -/** - * proxy -- a proxy server for telnet - * -- - * $Id: proxy.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * $timestamp: Tue May 27 15:08:19 1997 by Matthias L. Jugel :$ - * - * This file is part of "The Java Telnet Applet". - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -import java.net.*; -import java.io.*; -import java.util.*; - -/** - * proxy class -- implements a proxy server to redirect network access - * @author Matthias L. Jugel, Marcus Mei�ner - * @version $Id: proxy.java,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - */ - -public class proxy implements Runnable -{ - String remoteHost; - int localPort, remotePort; - - Thread listener, connection; - - ServerSocket server; - - /** - * Create a server socket and start listening on the local port. - * @param lport local port - * @param raddr address of the destination - * @param rport port on the destination host - */ - public proxy(int lport, String raddr, int rport) - { - localPort = lport; - remoteHost = raddr; remotePort = rport; - - log("destination host is "+remoteHost+" at port "+remotePort); - try { - server = new ServerSocket(localPort); - } catch(Exception e) { - System.err.println("proxy: error: cannot create server socket"); - } - log("listening on port "+localPort); - - listener = new Thread(this); - listener.setPriority(Thread.MIN_PRIORITY); - listener.start(); - } - - /** - * This method is called when the application is run on the commandline. - * It takes two or three arguments: - * usage: java proxy local-port destination-host destination-port - * @param args The command line arguments - */ - public static void main(String args[]) - { - String remoteHost = ""; - int localPort = 0, remotePort = 0; - - if(args.length < 2) - { - System.err.println("proxy: usage: proxy <port> "+ - "<destination host> [<destination port>]"); - System.exit(1); - } - try { - localPort = Integer.parseInt(args[0]); - } catch(Exception e) { - System.err.println("proxy: parameter <port>: number expected"); - System.exit(1); - } - remoteHost = args[1]; - if(args.length > 2) - { - try { - remotePort = Integer.parseInt(args[2]); - } catch(Exception e) { - System.err.println("proxy: parameter <destination port>: "+ - "number expected"); - System.exit(1); - } - } - - proxy me = new proxy(localPort, - remoteHost, (remotePort == 0 ? 23 : remotePort)); - } - - /** - * Cycle around until an error occurs and wait for incoming connections. - * An incoming connection will create two redirectors. One for - * local-host - destination-host and one for destination-host - local-host. - */ - public void run() - { - while(true) - { - Socket localSocket = null; - try { - localSocket = server.accept(); - } catch(Exception e) { - System.err.println("proxy: error: accept connection failed"); - continue; - } - log("accepted connection from "+ - localSocket.getInetAddress().getHostName()); - try { - Socket destinationSocket = new Socket(remoteHost, remotePort); - log("connecting "+localSocket.getInetAddress().getHostName()+" <-> "+ - destinationSocket.getInetAddress().getHostName()); - redirector r1 = new redirector(localSocket, destinationSocket); - redirector r2 = new redirector(destinationSocket, localSocket); - r1.couple(r2); - r2.couple(r1); - } catch(Exception e) { - System.err.println("proxy: error: cannot create sockets"); - try { - DataOutputStream os = new DataOutputStream(localSocket.getOutputStream()); - os.writeChars("Remote host refused connection.\n"); - localSocket.close(); - } catch(IOException ioe) { ioe.printStackTrace(); } - continue; - } - } - } - - private void log(String msg) - { - System.out.println("proxy: ["+new Date()+"] "+msg); - } -} - -/** - * A class useful for the proxy server. - * This class takes over control of newly created connections and redirects - * the data streams. - */ -class redirector implements Runnable -{ - private redirector companion = null; - private Socket localSocket, remoteSocket; - private InputStream from; - private OutputStream to; - private byte[] buffer = new byte[4096]; - - /** - * redirector gets the streams from sockets - */ - public redirector(Socket local, Socket remote) - { - try { - localSocket = local; - remoteSocket = remote; - from = localSocket.getInputStream(); - to = remoteSocket.getOutputStream(); - } catch(Exception e) { - System.err.println("redirector: cannot get streams"); - } - } - - /** - * couple this redirector instance with another one (usually the other - * direction of the connection) - */ - public void couple(redirector c) { - companion = c; - Thread listen = new Thread(this); - listen.start(); - } - - /** - * decouple us from our companion. This will let this redirector die after - * exiting from run() - */ - public void decouple() { companion = null; } - - /** - * read data from the input and write it to the destination stream until - * an error occurs or our companion is decoupled from us - */ - public void run() - { - int count; - try { - while(companion != null) { - if((count = from.read(buffer)) < 0) - break; - to.write(buffer, 0, count); - } - } catch(Exception e) { - System.err.println("redirector: connection lost"); - } - try { - from.close(); - to.close(); - localSocket.close(); - remoteSocket.close(); - // is our companion dead? no, then decouple, because we die - if(companion != null) companion.decouple(); - } catch(Exception io) { - System.err.println("redirector: error closing streams and sockets"); - io.printStackTrace(); - } - } -} - - diff --git a/web/root/telnet/tools/redirector.class b/web/root/telnet/tools/redirector.class deleted file mode 100644 index 4498f80091a1c4f9f291c23f9566a00b08ebb808..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/tools/redirector.class and /dev/null differ diff --git a/web/root/telnet/tools/relayd b/web/root/telnet/tools/relayd deleted file mode 100644 index 8844ac1707c457d32930d644f461d030b5af9580..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/tools/relayd and /dev/null differ diff --git a/web/root/telnet/tools/relayd.c b/web/root/telnet/tools/relayd.c deleted file mode 100644 index 66fdc22e954c181b475f683ac57ee93547dfe667..0000000000000000000000000000000000000000 --- a/web/root/telnet/tools/relayd.c +++ /dev/null @@ -1,448 +0,0 @@ -/** - * relayd.c -- a relay daemon (using one targethost/port) - * -- - * $Id: relayd.c,v 1.1.1.1 2005/09/25 22:40:20 rswindell Exp $ - * - * This 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) - * any later version. - * - * "The Java Telnet Applet" is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* relayd.c (c) 1996,1997 Marcus Meissner <marcus@mud.de> */ - -/* Compile with: cc -o relayd relayd.c - * or: gcc -o relayd relayd.c - * Solaris: (g)cc -o relayd relayd.c -lsocket -lnsl - */ - -/* this program expects the string: - * "relay <hostname> <port>" or "relay <hostname>" - * after connecting. It will then try to connect to the specified host - * if failures occur, it will terminate the connection. - */ - -/* adjust this to a reasonable limit */ -#define MAXUSERS 120 - -/* message printed if all slots are used ... */ -#define FAILMESSAGE "Sorry, all slots are full.\r\n" - -/* string printed before connection */ -#define RELAYHEADER "Relayd (c) Marcus Meissner\r\n" - -#include <stdio.h> -#ifdef _WIN32 -#include <stdlib.h> -#include <errno.h> -#include <signal.h> -#include <winsock.h> -#include <io.h> -#define ioctl ioctlsocket -#define write(h,buf,size) send(h,buf,size,0) -#define read(a,b,c) recv(a,b,c,0) -#define close _lclose -#define EINPROGRESS WSAEWOULDBLOCK -#else -#include <unistd.h> -#include <sys/time.h> -#include <sys/socket.h> -#include <sys/errno.h> -#include <sys/signal.h> -#include <sys/fcntl.h> -#include <sys/ioctl.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <netdb.h> -#endif -#include <memory.h> -#include <malloc.h> -#include <string.h> -#include <sys/types.h> - - - -#if defined(sun) && defined(__GNUC__) -int socket(int,int,int); -int shutdown(int,int); -int close(int); -int bind(int,struct sockaddr*,int); -int listen(int,int); -void bzero(char*,int); -int select(int,fd_set *,fd_set*,fd_set*,struct timeval*); -int accept(int,struct sockaddr*,int*); -int connect(int,struct sockaddr*,int); -int recvfrom(int,char*,int,int,struct sockaddr*,int*); -/*void perror(char*); SLOWLARIS HASS*/ -/*int sendto(int,char*,int,int,struct sockaddr*,int); SLOWLARIS HASS*/ -#endif - -#ifdef hpux -/* redefinition... to avoid prototype in <time.h> */ -#define FD_CAST int -#endif - -#ifdef sgi -void bzero(void*,int); -#endif - -#ifndef FD_CAST -#define FD_CAST fd_set -#endif - -extern int errno; - -char *inbuf[MAXUSERS],*outbuf[MAXUSERS]; -int insize[MAXUSERS],outsize[MAXUSERS]; -int incur[MAXUSERS],outcur[MAXUSERS]; -int outfd[MAXUSERS],infd[MAXUSERS]; -struct sockaddr_in inaddr[MAXUSERS],outaddr[MAXUSERS]; - -#ifdef _WIN32 -#define perror xperror -void xperror(char *str) { - fprintf(stderr,"%s: %d\n",str,GetLastError()); -} -#endif - -static int -fd_make_nonblocking(int fd) { - int isnonblock=0; - -#ifdef FIONBIO - if (!isnonblock) { - int b; - b=1; - if (-1==ioctl(fd,FIONBIO,&b)) { - perror("ioctl FIONBIO"); - } else - isnonblock=1; - } -#endif -#ifdef O_NDELAY - if (!isnonblock) { - int flags; - - if (-1==(flags=fcntl(fd,F_GETFL))) { - perror("fcntl F_GETFL"); - } else { - flags|=O_NDELAY; - if (-1==fcntl(fd,F_SETFL,flags)) { - perror("fcntl F_SETFL O_NDELAY"); - } else - isnonblock=1; - } - } -#endif -#ifdef O_NONBLOCK - if (!isnonblock) { - int flags; - - if (-1==(flags=fcntl(fd,F_GETFL))) { - perror("fcntl F_GETFL"); - } else { - flags|=O_NONBLOCK; - if (-1==fcntl(fd,F_SETFL,flags)) { - perror("fcntl F_SETFL O_NONBLOCK"); - } else - isnonblock=1; - } - } -#endif - return isnonblock; -} - -void -clean_connection(i) -int i; -{ - if (outfd[i]>=0) { - if (-1==close(outfd[i])) - perror("close"); - outfd[i]=-1; - } - if (infd[i]>=0) { - if (-1==close(infd[i])) - perror("close"); - infd[i]=-1; - } - incur[i]=outcur[i]=0; - outbuf[i][0]=inbuf[i][0]='\0'; -} - -void -usage() { - fprintf(stderr,"Usage: relayd <listenport> <targethost> [<targetport>]\n"); -} - -void -main(argc,argv) -int argc; -char **argv; -{ - int i,j,res; - int acfd; - struct sockaddr_in acsa; - char readbuf[1000],relaystring[1000]; - struct in_addr targetaddr; - struct hostent *hp; - char *targethost; - int port,targetport; - -#ifdef _WIN32 - { - WSADATA wsad; - - WSAStartup(0x0101,&wsad); - } -#else - close(0); - close(1); -#endif - -#ifdef SIGPIPE - signal(SIGPIPE,SIG_IGN); -#endif - switch (argc) { - default: - case 1: - case 2: - usage(); - exit(1); - case 3: - if (!sscanf(argv[1],"%d",&port)) { - usage(); - exit(1); - } - targethost = argv[2]; - targetport = 23; - break; - case 4: - if (!sscanf(argv[1],"%d",&port)) { - usage();exit(1); - } - if (!sscanf(argv[3],"%d",&targetport)) { - usage();exit(1); - } - targethost=argv[2]; - break; - } - strcpy(relaystring,FAILMESSAGE); - if (-1==(acfd=socket(PF_INET,SOCK_STREAM,0))) { - perror("socket(accept_socket)"); - exit(1); - } - for (i=MAXUSERS;i--;) { - inbuf[i]=malloc(10000*sizeof(char)); - outbuf[i]=malloc(10000*sizeof(char)); - inbuf[i][0]='\0';outbuf[i][0]='\0'; - - insize[i]=10000;incur[i]=0; - - outsize[i]=10000;outcur[i]=0; - outfd[i]=infd[i]=-1; - } - - acsa.sin_family=AF_INET; - acsa.sin_port=htons(port); - acsa.sin_addr.s_addr=INADDR_ANY; - if (-1==bind(acfd,(struct sockaddr*)&acsa,sizeof(struct sockaddr_in))) { - perror("bind"); - exit(1); - } - /* 5 is usual the maximum anyway */ - if (-1==listen(acfd,5)) { - perror("listen"); - exit(1); - } - while (1) { - fd_set readfds,writefds; - int width; - - width=3; - if (acfd>=width) - width=acfd+1; -restart_select: - FD_ZERO(&readfds);FD_ZERO(&writefds); - FD_SET(acfd,&readfds); - for (i=MAXUSERS;i--;) { - if (outfd[i]>=0) { - /*need to do that... else it will cause load 1*/ - if (incur[i]) - FD_SET(outfd[i],&writefds); - FD_SET(outfd[i],&readfds); - if (outfd[i]>=width) - width=outfd[i]+1; - } - if (infd[i]>=0) { - /*need to do that... else it will cause load 1*/ - if (outcur[i]) - FD_SET(infd[i],&writefds); - FD_SET(infd[i],&readfds); - if (infd[i]>=width) - width=infd[i]+1; - } - } - if (-1==select( width, - (FD_CAST*)&readfds, - (FD_CAST*)&writefds, - NULL,/*no exceptfds.*/ - 0) - ) { - if (errno!=EINTR) - perror("select"); - else - goto restart_select; - } - if (FD_ISSET(acfd,&readfds)) { - int afd; - int aclen; - struct sockaddr_in conaddr; - - aclen=sizeof(struct sockaddr_in); - if (-1==(afd=accept(acfd,(struct sockaddr*)&conaddr,&aclen))) - perror("accept"); - for (i=MAXUSERS;i--;) - if ((infd[i]==-1) && (outfd[i]==-1)) - break; - if (i==-1) { - write(afd,relaystring,strlen(relaystring)); - close(afd); - } else { - char sendbuf[200]; - infd[i]=afd; - memcpy(&inaddr[i],&conaddr,sizeof(struct sockaddr_in)); - /* outfd setting delayed until we get - * to the first line - */ - hp=gethostbyname(targethost); - if (!hp) {/* not found */ - clean_connection(i); - continue; - } - memcpy(&targetaddr,hp->h_addr_list[0],sizeof(struct in_addr)); - outaddr[i].sin_family=AF_INET; - outaddr[i].sin_port=htons(targetport); - memcpy(&(outaddr[i].sin_addr),&targetaddr,4); - strcpy(sendbuf,RELAYHEADER); - outcur[i]=strlen(sendbuf); - memcpy(outbuf[i],sendbuf,strlen(sendbuf)+1); - if (-1==(outfd[i]=socket(PF_INET,SOCK_STREAM,0))) - perror("socket(connect_socket)"); -#ifndef _WIN32 - (void)fd_make_nonblocking(outfd[i]); -#endif - if ( (-1==connect( outfd[i], - (struct sockaddr*)&outaddr[i], - sizeof(struct sockaddr_in)) -#ifdef _WIN32 - ) && (WSAGetLastError()!=WSAEWOULDBLOCK) -#else - ) && (errno!=EINPROGRESS) -#endif - ) { -#ifdef _WIN32 - sprintf(readbuf,"Connect to %s failed: %d\n",targethost,GetLastError()); -#else - sprintf(readbuf,"Connect to %s failed.\n",targethost); -#endif - perror("connect"); - if (-1==write(infd[i],readbuf,strlen(readbuf))) - perror("write"); - clean_connection(i); - continue; - } - inbuf[i][0]='\0'; - incur[i]=0; - } - } - for (i=MAXUSERS;i--;) { - if ((infd[i]>=0) && FD_ISSET(infd[i],&readfds)) { - do { - if (-1==(res=read(infd[i],readbuf,1000))) { - if (errno==EINTR) - continue; - /* user side has broken the connection */ - clean_connection(i); - break; - } - break; - } while (1); - if (res==0) /* EOF */ - clean_connection(i); - if (res>0) { - readbuf[res]='\0'; - while (incur[i]+res>=insize[i]) { - inbuf[i]=realloc(inbuf[i],insize[i]*2); - insize[i]*=2; - } - memcpy(inbuf[i]+incur[i],readbuf,res+1); - incur[i]+=res; - } - } - if ((outfd[i]>=0) && FD_ISSET(outfd[i],&readfds)) { - do { - if (-1==(res=read(outfd[i],readbuf,1000))) { - if (errno==EINTR) - continue; - /* the mudside has broken the - * connection. we still have - * to transmit the rest of - * the text - */ - outfd[i]=-1; - break; - } - break; - } while (1); - if (res==0) - clean_connection(i); - if (res>0) { - /* 0 is not automagically appended. */ - readbuf[res]='\0'; - while (outcur[i]+res>=outsize[i]) { - outbuf[i]=realloc(outbuf[i],outsize[i]*2); - outsize[i]*=2; - } - memcpy(outbuf[i]+outcur[i],readbuf,res+1); - outcur[i]+=res; - } - } - if ((infd[i]>=0) && FD_ISSET(infd[i],&writefds)) { - j=outcur[i]; - if (-1==(res=write(infd[i],outbuf[i],j))) { - if (errno!=EINTR) { - clean_connection(i); - } - } - if (res>0) { - memcpy(outbuf[i],outbuf[i]+res,outcur[i]-res); - outcur[i]-=res; - } - } - if ((outfd[i]>=0) && FD_ISSET(outfd[i],&writefds)) { - j=incur[i]; - if (-1==(res=write(outfd[i],inbuf[i],j))) { - if (errno!=EINTR) { - outfd[i]=-1; - /*clean_connection(i);*/ - } - } - if (res>0) { - memcpy(inbuf[i],inbuf[i]+res,incur[i]-res); - incur[i]-=res; - } - } - } - } -} diff --git a/web/root/telnet/tools/relayd.exe b/web/root/telnet/tools/relayd.exe deleted file mode 100755 index dec7203e0165ab34e6f255165cd12ffb0a183322..0000000000000000000000000000000000000000 Binary files a/web/root/telnet/tools/relayd.exe and /dev/null differ diff --git a/webv4/.gitignore b/webv4/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..884830444d37978aaae3dbe869017f6603ff590f --- /dev/null +++ b/webv4/.gitignore @@ -0,0 +1,19 @@ +# Ignore processed XJS files +*.xjs.ssjs + +# Ignore non-example pages +pages/* +!pages/.examples + +# Ignore non-example sidebar modules +sidebar/* +!sidebar/.examples + +# Ignore non-example components +components/* +!components/.examples + +root/css/custom.css +root/logo.gif +root/.well-known + diff --git a/webv4/components/.examples/footer.xjs b/webv4/components/.examples/footer.xjs new file mode 100644 index 0000000000000000000000000000000000000000..9549be99a44663572738cf465d9a328e049c56fd --- /dev/null +++ b/webv4/components/.examples/footer.xjs @@ -0,0 +1 @@ +<p>© <?xjs write(system.name + ", " + strftime("%Y")); ?></p> diff --git a/webv4/components/.examples/header.xjs b/webv4/components/.examples/header.xjs new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/webv4/components/.examples/modal.xjs b/webv4/components/.examples/modal.xjs new file mode 100644 index 0000000000000000000000000000000000000000..a7bd3e5375faa5ec720d75cc7b26b662a8b2ea3b --- /dev/null +++ b/webv4/components/.examples/modal.xjs @@ -0,0 +1,14 @@ +<div class="modal" id="popUpModal" tabindex="-1" role="dialog" style="display:none;"> + <div class="modal-dialog" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h4 class="modal-title" id="popUpModalTitle">Pop-Up Thingie</h4> + </div> + <div class="modal-body" id="popUpModalBody"></div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" id="popUpModalCloseButton"><? write(locale.strings.main.button_close); ?></button> + <button type="button" class="btn btn-primary" id="popUpModalActionButton" hidden><? write(locale.strings.main.button_submit); ?></button> + </div> + </div> + </div> +</div> \ No newline at end of file diff --git a/webv4/components/.examples/navbar.xjs b/webv4/components/.examples/navbar.xjs new file mode 100644 index 0000000000000000000000000000000000000000..9729c504289f3e88b2b6597f7072fadead002ccf --- /dev/null +++ b/webv4/components/.examples/navbar.xjs @@ -0,0 +1,95 @@ +<?xjs function subMenu(obj, title, path) { ?> + <li class="dropdown<?xjs if (path.match(/\//g).length > 1) write('-submenu'); ?>"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> + <? write(title.replace(/^.*\-/, '')); ?> + <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <?xjs menu(obj.list, path); ?> + </ul> + </li> +<?xjs } ?> + +<?xjs + function menu(obj, path) { + Object.keys(obj).forEach(function (e) { + if (obj[e].type == 'list') { + subMenu(obj[e], e, (path || '') + e + '/'); + } else { +?> + <li> + <?xjs if (obj[e].type == 'link') { ?> + <a class="dropdown-item" href="./?page=<?xjs write(obj[e].page); ?>" target="_blank"> + <?xjs } else { ?> + <a class="dropdown-item" href="./?page=<?xjs write((path || '') + obj[e].page); ?>"> + <?xjs } ?> + <? write(e); ?> + </a> + </li> +<?xjs + } + }); + } +?> + +<nav class="navbar navbar-default navbar-fixed-top"> + <div class="container<?xjs if (settings.layout_full_width) write('-fluid'); ?>"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only"><? write(locale.strings.main.label_sidebar); ?></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="./"><? write(settings.brand || system.name); ?></a> + </div> + <div id="navbar" class="collapse navbar-collapse"> + <ul class="nav navbar-nav"> + <?xjs menu(getPageList(settings.web_pages)); ?> + </ul> + <ul class="nav navbar-nav navbar-right"> + <?xjs if (user.alias === settings.guest || user.number < 1) { ?> + <?xjs if (settings.user_registration) { ?> + <li> + <a href="./?page=000-register.xjs"><? write(locale.strings.main.menu_item_register); ?></a> + </li> + <?xjs } ?> + <li class="nav-item dropdown"> + <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> + <? write(locale.strings.main.menu_item_login); ?> + <span class="caret"></span> + </a> + <div id="login-form" class="dropdown-menu" style="padding:15px; padding-bottom:0px;"> + <form id="form-login"> + <label for="input-username" class="sr-only"><? write(locale.strings.main.input_username); ?></label> + <input id="input-username" title="<? write(locale.strings.main.input_username); ?>" type="text" class="dropdown form-control" placeholder="<? write(locale.strings.main.input_username); ?>"> + <label for="input-password" class="sr-only"><? write(locale.strings.main.input_password); ?></label> + <input id="input-password" title="<? write(locale.strings.main.input_password); ?>" type="password" class="dropdown form-control" placeholder="<? write(locale.strings.main.input_password); ?>"> + <input id="button-login" class="dropdown btn btn-primary" type="submit" value="<? write(locale.strings.main.button_login); ?>"> + </form> + </div> + </li> + <?xjs } else { ?> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> + <? write(user.alias); ?> + <span class="badge scanned" title="Unread mail" id="badge-unread-mail"></span> + <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <li> + <a href="./?page=000-mail.xjs"> + <? write(locale.strings.main.menu_item_mail); ?> + <span class="badge scanned" title="<?xjs write(locale.strings.main.label_unread_mail); ?>" id="badge-unread-mail-inner"></span> + </a> + </li> + <li> + <a id="button-logout" href="#"><? write(locale.strings.main.menu_item_logout); ?></a> + </li> + </ul> + </li> + <?xjs } ?> + </ul> + </div> + </div> +</nav> \ No newline at end of file diff --git a/webv4/lib/auth.js b/webv4/lib/auth.js new file mode 100644 index 0000000000000000000000000000000000000000..35abf9a9e1593f911d40cf2250e83197ca7bac0f --- /dev/null +++ b/webv4/lib/auth.js @@ -0,0 +1,199 @@ +require('sbbsdefs.js', 'SYS_CLOSED'); + +function randomString(length) { + var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(""); + var str = ''; + for (var i = 0; i < length; i++) { + str += chars[Math.floor(Math.random() * chars.length)]; + } + return str; +} + +function getSession(un) { + var fn = format('%suser/%04d.web', system.data_dir, un); + if (!file_exists(fn)) return false; + var f = new File(fn); + if (!f.open('r')) return false; + var session = f.iniGetObject(); + f.close(); + return session; +} + +function getSessionValue(un, key) { + var session = getSession(un); + if (!session || typeof session[key] === 'undefined') return null; + return session[key]; +} + +function setSessionValue(un, key, value) { + var fn = format('%suser/%04d.web', system.data_dir, un); + var f = new File(fn); + f.open(f.exists ? 'r+' : 'w+'); + f.iniSetValue(null, key, value); + f.close(); +} + +function setCookie(usr, sessionKey) { + if (usr instanceof User && usr.number > 0) { + set_cookie( + 'synchronet', + usr.number + ',' + sessionKey, + (time() + settings.timeout), + http_request.host.replace(/\:\d*/g, ''), + '/' + ); + setSessionValue(usr.number, 'key', sessionKey); + } +} + +function validateSession(cookies) { + + var usr = new User(0); + for (var c in cookies) { + + if (cookies[c].search(/^\d+,\w+$/) < 0) continue; + + var cookie = cookies[c].split(','); + + try { + usr.number = cookie[0]; + if (usr.number < 1) { + throw 'Invalid user number ' + cookie[0] + ' in cookie.'; + } + } catch (err) { + log(LOG_DEBUG, err); + continue; + } + + var session = getSession(usr.number); + if (typeof session !== 'object') continue; + if (typeof session.key != 'string' || session.key != cookie[1]) { + continue; + } + + var _usr = authenticate(usr.alias, usr.security.password, false); + _usr = undefined; + setCookie(usr, session.key); + setSessionValue(usr.number, 'ip_address', client.ip_address); + if (session.session_start === undefined || time() - parseInt(session.session_start, 10) > settings.timeout) { + setSessionValue(usr.number, 'session_start', time()); + if(!usr.is_sysop || (system.settings&SYS_SYSSTAT)) { + const logonlist_lib = load({}, 'logonlist_lib.js'); + logonlist_lib.add({ node: 'Web' }); + } + } + break; + + } + usr = undefined; + +} + +function destroySession(cookies) { + + var usr = new User(0); + for (var c in cookies) { + + if (cookies[c].search(/^\d+,\w+$/) < 0) continue; + + var cookie = cookies[c].split(','); + + try { + + usr.number = cookie[0]; + if(usr.number < 1) { + throw 'Invalid user number ' + cookie[0] + ' in cookie.'; + } + + var session = getSession(usr.number); + if (typeof session !== 'object') { + throw 'Invalid session for user #' + usr.number; + } + + if (session.key !== cookie[1]) { + throw 'Invalid session key for user #' + user.number; + } + + set_cookie( + 'synchronet', + usr.number + ',' + session.key, + (time() - settings.timeout), + http_request.host.replace(/\:\d*/g, ''), + '/' + ); + + var fn = format('%suser/%04d.web', system.data_dir, usr.number); + file_remove(fn); + + break; + + } catch (err) { + log(LOG_DEBUG, + 'Error destroying session: ' + err + ', cookie: ' + cookies[c] + ); + } + + } + usr = undefined; + +} + +function authenticate(alias, password, inc_logons) { + var un = system.matchuser(alias); + if (un < 1) return false; + var usr = new User(un); + if (usr.settings&USER_DELETED) return false; + if (!login(usr.alias, password, inc_logons)) return false; + return usr; +} + +function is_user() { + return user.number > 0 && user.alias != settings.guest; +} + +(function () { + // If someone is trying to log in + if (http_request.query.username !== undefined && + http_request.query.username[0].length <= LEN_ALIAS && + http_request.query.password !== undefined && + http_request.query.password[0].length <= LEN_PASS + ) { + var usr = authenticate( + http_request.query.username[0], + http_request.query.password[0], + true + ); + if (usr instanceof User) { + destroySession(http_request.cookie.synchronet || {}); + setCookie(usr, randomString(512)); + } + usr = undefined; + // If they have a cookie + } else if ( + http_request.cookie.synchronet !== undefined && + http_request.cookie.synchronet.some(function (e) { + return(e.search(/^\d+,\w+$/) != -1); + }) + ) { + // Verify & update their session, or log them out if requested + if (typeof http_request.query.logout === 'undefined') { + validateSession(http_request.cookie.synchronet); + } else { + destroySession(http_request.cookie.synchronet); + } + } + + // If they haven't authenticated as an actual user yet + if (user.number === 0) { + // Try to log them in as the guest user + var gn = system.matchuser(settings.guest); + if (gn > 0) { + var gu = new User(gn); + login(gu.alias, gu.security.password); + gu = undefined; + } else { + // Otherwise just kill the script, for security's sake + exit(); + } + } +})(); diff --git a/webv4/lib/avatars.js b/webv4/lib/avatars.js new file mode 100644 index 0000000000000000000000000000000000000000..24c8da2078f0c52f56345b30001882d3cdd9e1a6 --- /dev/null +++ b/webv4/lib/avatars.js @@ -0,0 +1,38 @@ +var avatar_lib = load({}, 'avatar_lib.js'); + +function Avatars() { + + const cache = { local : {}, network : {} }; + + this.__defineGetter__('cache', function () { return cache; }); + + this.get_localuser = function (usernumber) { + if (typeof cache.local[usernumber] == 'undefined') { + var data = avatar_lib.read_localuser(usernumber); + if (!data || data.disabled) { + cache.local[usernumber] = false; + } else { + cache.local[usernumber] = data.data; + } + } else { + return cache.local[usernumber]; + } + } + + this.get_netuser = function (username, netaddr) { + if (typeof cache.network[netaddr] == 'undefined') { + cache.network[netaddr] = {}; + } + if (typeof cache.network[netaddr][username] == 'undefined') { + var data = avatar_lib.read_netuser(username, netaddr); + if (!data || data.disabled) { + cache.network[netaddr][username] = false; + } else { + cache.network[netaddr][username] = data.data; + } + } else { + return cache.network[netaddr][username]; + } + } + +} diff --git a/webv4/lib/events/forum.js b/webv4/lib/events/forum.js new file mode 100644 index 0000000000000000000000000000000000000000..96bf879c08851a2aee27ba4b11850bb5c427579c --- /dev/null +++ b/webv4/lib/events/forum.js @@ -0,0 +1,77 @@ +load(settings.web_lib + 'forum.js'); + +var last_subs; +var last_groups; +var last_threads; +var last_run = 0; +const frequency = (settings.refresh_interval || 60000) / 1000; + +// Where 'a' is the previous data and 'b' is new +function shallow_diff(a, b) { + const ret = {}; + Object.keys(a).forEach(function (e) { + if (typeof b[e] == 'undefined') { + ret[e] = b[e]; + } else if (a[e].scanned != b[e].scanned || a[e].total != b[e].total) { + ret[e] = b[e]; + } + }); + return Object.keys(ret).length ? ret : undefined; +} + +function forum_emit(evt, data) { + emit({ event: 'forum', data: JSON.stringify({ type: evt, data: data }) }); +} + +function scan_groups() { + const scan = getGroupUnreadCounts(); + if (!last_groups) { + forum_emit('groups_unread', scan); + } else { + const diff = shallow_diff(last_groups, scan); + if (diff) forum_emit('groups_unread', scan); + } + last_groups = scan; +} + +function scan_subs(group) { + const scan = getSubUnreadCounts(group); + if (!last_subs) { + forum_emit('subs_unread', scan); + } else { + const diff = shallow_diff(last_subs, scan); + if (diff) forum_emit('subs_unread', scan); + } + last_subs = scan; +} + +function scan_threads(sub, offset, page_size) { + const scan = getThreadStats(sub, offset, page_size); + if (!last_threads) { + forum_emit('threads', scan); + } else { + const ret = Object.keys(scan).reduce(function (a, c) { + if (typeof last_threads[c] == 'undefined') { + a[c] = scan[c]; + } else if (scan[c].total != last_threads[c].total) { + a[c] = scan[c]; + } else if (scan[c].votes.total != last_threads[c].votes.total) { + a[c] = scan[c]; + } + return a; + }, {}); + if (Object.keys(ret).length) forum_emit('threads', ret); + } + last_threads = scan; +} + +function cycle() { + if (!is_user()) return; + if (time() - last_run <= frequency) return; + last_run = time(); + if (Request.has_param('groups_unread')) scan_groups(); + if (Request.has_param('subs_unread')) scan_subs(Request.get_param('subs_unread')); + if (Request.has_param('threads')) scan_threads(Request.get_param('threads'), Request.get_param('offset'), Request.get_param('page_size')); +} + +this; diff --git a/webv4/lib/events/mail.js b/webv4/lib/events/mail.js new file mode 100644 index 0000000000000000000000000000000000000000..986b81875f53cb41f7035cd4ecaef5a9f0c21c33 --- /dev/null +++ b/webv4/lib/events/mail.js @@ -0,0 +1,16 @@ +var last_run = 0; +var frequency = 30; +var last_count = 0; + +function cycle() { + if (user.number < 1 || user.alias == settings.guest) return; + if (time() - last_run <= frequency) return; + last_run = time(); + const count = user.stats.mail_waiting; + if (count > 0 || (count == 0 && last_count > 0)) { + emit({ event: 'mail', data: JSON.stringify({ count: count })}); + } + last_count = count; +} + +this; diff --git a/webv4/lib/events/nodelist.js b/webv4/lib/events/nodelist.js new file mode 100644 index 0000000000000000000000000000000000000000..a3f931f61e971959cb4af9f5c7aae2f3867e3a69 --- /dev/null +++ b/webv4/lib/events/nodelist.js @@ -0,0 +1,112 @@ +var last_run = 0; +var frequency = 15; + +const node_state = system.node_list.map(function (e, i) { + return { + status: -1, + action: -1, + aux: -1, + extaux: -1, + useron: -1, + connection : -1 + }; +}); + +const web_state = {}; + +function scan_nodes() { + var change = false; + system.node_list.forEach(function (e, i) { + const n = system.node_list[i]; + if (n.status != node_state[i].status + || n.action != node_state[i].action + || n.useron != node_state[i].useron + ) { + change = true; + const obj = { + status: n.status, + action: n.action, + aux: n.aux, + extaux: n.extaux, + useron: n.useron, + connection: n.connection + }; + node_state[i] = obj; + } + }); + return change; +} + +function scan_web() { + var change = false; + const sessions = directory(system.data_dir + 'user/*.web'); + sessions.forEach(function (e) { + const base = file_getname(e).replace(file_getext(e), ''); + const un = parseInt(base, 10); + if (isNaN(un) || un < 1 || un > system.lastuser) return; + if (time() - file_date(e) >= settings.inactivity) { + if (web_state[base]) { + delete web_state[base]; + change = true; + } + } else { + const action = getSessionValue(un, 'action'); + if (web_state[base] != action) { + web_state[base] = action; + change = true; + } + } + }); + return change; +} + +function scan() { + var out = []; + var usr = new User(1); + const node_change = scan_nodes(); + const web_change = scan_web(); + if (node_change) { + out = node_state.map(function (e, i) { + if (e.status != 3) { + return { + node: i + 1, + status: null, + action: null, + user: null, + connection: '' + }; + } else { + usr.number = e.useron; + return { + node: i + 1, + status: format(NodeStatus[e.status], e.aux, e.extaux), + action: format(NodeAction[e.action], e.aux, e.extaux), + user: usr.alias, + connection : NodeConnectionProper[e.connection] ? NodeConnectionProper[e.connection] : (e.connection + ' bps') + }; + } + }); + } + if (node_change || web_change) { + out = out.concat(Object.keys(web_state).map(function (e) { + usr.number = parseInt(e, 10); + return { + node: 'W', + action: locale.strings.sidebar_node_list.label_status_web + ' ' + web_state[e], + user: usr.alias, + connection: 'Web' + }; + })); + } + usr = undefined; + return out; +} + +function cycle() { + if (time() - last_run <= frequency) return; + last_run = time(); + const data = scan(); + if (data.length) emit({ event: 'nodelist', data: JSON.stringify(data) }); +} + +this; diff --git a/webv4/lib/events/sbbsimsg.js b/webv4/lib/events/sbbsimsg.js new file mode 100644 index 0000000000000000000000000000000000000000..e6aba16afdea569ec6d4cb9e4aa5aa5005f8c882 --- /dev/null +++ b/webv4/lib/events/sbbsimsg.js @@ -0,0 +1,27 @@ +const sbbsimsg = load({}, "sbbsimsg_lib.js"); + +var last_run = 0; +const frequency = 60; +const timeout = 2500; + +function list() { + const state = {}; + sbbsimsg.read_sys_list(); + var sent = sbbsimsg.request_active_users(); + sbbsimsg.poll_systems(sent, 0.25, timeout, function () { }); + for (var i in sbbsimsg.sys_list) { + var sys = sbbsimsg.sys_list[i]; + if (sys.users.length) { + state[sys.name] = { host: sys.host, users: sys.users }; + } + } + emit({ event: 'sbbsimsg', data: JSON.stringify(state) }); +} + +function cycle() { + if (time() - last_run <= frequency) return; + last_run = time(); + // list(); +} + +this; diff --git a/webv4/lib/events/telegram.js b/webv4/lib/events/telegram.js new file mode 100644 index 0000000000000000000000000000000000000000..f05716bc789f93b2d8688fc5e37a310750bb85c9 --- /dev/null +++ b/webv4/lib/events/telegram.js @@ -0,0 +1,18 @@ +var last_run = 0; +var frequency = 15; + +function cycle() { + if (user.alias === settings.guest) return; + if (time() - last_run <= frequency) return; + last_run = time(); + const tg = system.get_telegram(user.number); + if (tg !== null) emit({ event: 'telegram' + , data: JSON.stringify(html_encode(tg.replace('\7', '').replace(/\1./g, '') + , /* ex-ascii */true + , /* white-space */false + , /* ansi */false + , /* ctrl_a */false)) + }); +} + +this; diff --git a/webv4/lib/files.js b/webv4/lib/files.js new file mode 100644 index 0000000000000000000000000000000000000000..a4fc22ba812564cace06a8fa54f5533e58b19c1a --- /dev/null +++ b/webv4/lib/files.js @@ -0,0 +1,33 @@ +require('filebase.js', 'FileBase'); +require('file_size.js', 'file_size_str'); + +function count_files(dir) { + var n = 0; + const fn = format("%s%s.ixb", file_area.dir[dir].data_dir, dir); + if (!file_exists(fn)) return n; + return Math.floor(file_size(fn) / 22); // ixb record length is 22 bytes +} + +function listLibraries() { + return file_area.lib_list.filter(function (library) { + return library.dir_list.length >= 1; + }); +} + +function listDirectories(library) { + var dirs = []; + file_area.lib_list[library].dir_list.forEach(function (dir) { + const fc = count_files(dir.code); + if (fc < 1) return; + dirs.push({ dir: dir, fileCount: fc }); + }); + return dirs; +} + +function listFiles(dir) { + return (new FileBase(file_area.dir[dir].code)).map(function (df) { + df.size = df.path ? file_size_str(file_size(df.path)) : 'Unknown'; + df._size = df.path ? file_size(df.path) : 0; + return df; + }); +} diff --git a/webv4/lib/forum.js b/webv4/lib/forum.js new file mode 100644 index 0000000000000000000000000000000000000000..9dcf3cca65f6aca33d86055493e4dec4e0fc599e --- /dev/null +++ b/webv4/lib/forum.js @@ -0,0 +1,1156 @@ +require('sbbsdefs.js', 'MSG_DELETE'); +load(settings.web_lib + 'mime-decode.js'); + +function listGroups() { + const response = []; + msg_area.grp_list.forEach(function (grp) { + if (grp.sub_list.length < 1) return; + response.push({ + index: grp.index, + name: grp.name, + description: grp.description, + sub_count: grp.sub_list.length + }); + }); + return response; +} + +// Returns an array of objects of "useful" information about subs +function listSubs(group) { + return msg_area.grp_list[group].sub_list.map(function (sub) { + return { + index: sub.index, + code: sub.code, + grp_index: sub.grp_index, + grp_name: sub.grp_name, + name: sub.name, + description: sub.description, + qwk_name: sub.qwk_name, + qwk_conf: sub.qwk_conf, + qwk_tagline: sub.qwknet_tagline, + newsgroup: sub.newsgroup, + ars: sub.ars, + read_ars: sub.read_ars, + can_read: sub.can_read, + post_ars: sub.post_ars, + can_post: sub.can_post, + operator_ars: sub.operator_ars, + is_operator: sub.is_operator, + moderated_ars: sub.moderated_ars, + is_moderated: sub.is_moderated, + scan_ptr: sub.scan_ptr, + scan_cfg: sub.scan_cfg + }; + }); +} + +function listThreads(sub, offset, count, page_offset) { + + offset = parseInt(offset); + if (isNaN(offset) || offset < 0) return false; + count = parseInt(count); + if (isNaN(count) || count < 1) return false; + + if (page_offset) offset = offset * count; + + var threads = getMessageThreads(sub, settings.max_messages); + if (offset >= threads.order.length) return false; + + var stop = Math.min(threads.order.length, offset + count); + var ret = { total: threads.order.length, threads : [] }; + for (var n = offset; n < stop; n++) { + var thread = threads.thread[threads.order[n]]; + var msgs = Object.keys(thread.messages); + thread.first = thread.messages[msgs[0]]; + thread.last = thread.messages[msgs[msgs.length - 1]]; + thread.messages = msgs.length; + ret.threads.push(thread); + } + + return ret; + +} + +function getSubUnreadCount(sub) { + var ret = { + scanned : 0, + total : 0 + }; + if (typeof msg_area.sub[sub] === 'undefined') return ret; + try { + var msgBase = new MsgBase(sub); + msgBase.open(); + for (var m = msg_area.sub[sub].scan_ptr + 1; m <= msgBase.last_msg; m++) { + var i = msgBase.get_msg_index(m); + if (i === null || i.attr&MSG_DELETE || i.attr&MSG_NODISP) continue; + if (( msg_area.sub[sub].scan_cfg&SCAN_CFG_YONLY && + i.to === crc16_calc(user.alias.toLowerCase()) || + i.to === crc16_calc(user.name.toLowerCase()) || + (sub === 'mail' && i.to === crc16_calc(user.number)) + ) || + msg_area.sub[sub].scan_cfg&SCAN_CFG_NEW + ) { + ret.scanned++; + } + ret.total++; + } + msgBase.close(); + } catch (err) { + log(LOG_ERR, err); + } + return ret; +} + +function getSubUnreadCounts(group) { + return msg_area.grp_list[group].sub_list.reduce(function (a, c) { + a[c.code] = getSubUnreadCount(c.code); + return a; + }, {}); +} + +function getGroupUnreadCount(group) { + var ret = { + scanned : 0, + total : 0 + }; + if (typeof msg_area.grp_list[group] === 'undefined') return ret; + msg_area.grp_list[group].sub_list.forEach(function (sub) { + var count = getSubUnreadCount(sub.code); + ret.scanned += count.scanned; + ret.total += count.total; + }); + return ret; +} + +function getGroupUnreadCounts() { + return msg_area.grp_list.reduce(function (a, c) { + a[c.index] = getGroupUnreadCount(c.index); + return a; + }, {}); +} + +function getUnreadInThread(sub, thread, mkeys) { + if (typeof thread == 'number') { + var threads = getMessageThreads(sub, settings.max_messages); + if (typeof threads.thread[thread] == 'undefined') return 0; + thread = threads.thread[thread]; + } + var count = 0; + if (!mkeys) mkeys = Object.keys(thread.messages); + mkeys.forEach(function (m) { + if (thread.messages[m].number > msg_area.sub[sub].scan_ptr) count++; + }); + return count; +} + +function getThreadVoteTotals(thread, mkeys) { + return mkeys.reduce(function (a, c, i) { + if (thread.messages[c].upvotes > 0) { + if (i == 0) a.up.p++; + a.up.t++; + } + if (thread.messages[c].downvotes > 0) { + if (i == 0) a.down.p++; + a.down.t++; + } + a.total = a.up.t + a.down.t; + return a; + }, { up: { p: 0, t: 0 }, down: { p: 0, t: 0 }, total: 0 }); +} + +// { [thread_id]: { total, unread, votes: { up: { parent, total }, down: { parent, total }, total }, newest } } +function getThreadStats(sub, offset, page_size) { + const threads = getMessageThreads(sub, settings.max_messages); + const ret = {}; + if (!offset) offset = 0; + if (!page_size) page_size = threads.order.length - offset; + offset = offset * page_size; + var stop = Math.min(threads.order.length, offset + page_size); + for (var n = offset; n < stop; n++) { + var thread = threads.thread[threads.order[n]]; + var mkeys = Object.keys(thread.messages); + ret[threads.order[n]] = { + total: mkeys.length, + unread: getUnreadInThread(sub, thread, mkeys), + votes: getThreadVoteTotals(thread, mkeys), + newest: { + from: thread.messages[mkeys[mkeys.length - 1]].from, + date: system.timestr(thread.messages[mkeys[mkeys.length - 1]].when_written_time) + } + }; + } + return ret; +} + +function getVotesInThread(sub, thread) { + var ret = { t : { u : 0, d : 0 }, m : {} }; + if (typeof msg_area.sub[sub] === 'undefined') return ret; + if (typeof thread === 'number') { + var threads = getMessageThreads(sub, settings.max_messages); + if (typeof threads.thread[thread] === 'undefined') return ret; + thread = threads.thread[thread]; + } + var msgBase = new MsgBase(sub); + if (!msgBase.open()) return ret; + Object.keys(thread.messages).forEach( + function (m) { + if (thread.messages[m].upvotes > 0 || + thread.messages[m].downvotes > 0 + ) { + ret.t.up += thread.messages[m].upvotes; + ret.t.down += thread.messages[m].downvotes; + ret.m[thread.messages[m].number] = { + u : thread.messages[m].upvotes, + d : thread.messages[m].downvotes, + v : msgBase.how_user_voted( + thread.messages[m].number, + msgBase.cfg.settings&SUB_NAME ? user.name : user.alias + ) + }; + } + } + ); + msgBase.close(); + return ret; +} + +function getVotesInThreads(sub) { + var threads = getMessageThreads(sub, settings.max_messages); + var ret = {}; + Object.keys(threads.thread).forEach( + function(t) { + Object.keys(threads.thread[t].messages).forEach( + function (m, i) { + if (threads.thread[t].messages[m].upvotes < 1 && + threads.thread[t].messages[m].downvotes < 1 + ) { + return; + } + if (typeof ret[t] === 'undefined') { + ret[t] = { p : { u : 0, d : 0 }, t : { u : 0, d : 0 } }; + if (i < 1) { + ret[t].p.u = threads.thread[t].messages[m].upvotes; + ret[t].p.d = threads.thread[t].messages[m].downvotes; + } + } + ret[t].t.u += threads.thread[t].messages[m].upvotes; + ret[t].t.d += threads.thread[t].messages[m].downvotes; + } + ); + } + ); + return ret; +} + +function getUserPollData(sub, id) { + var ret = { answers : 0, tally : [], show_results : false }; + if (typeof msg_area.sub[sub] === 'undefined') return ret; + id = parseInt(id); + if (isNaN(id)) return ret; + var msgBase = new MsgBase(sub); + if (!msgBase.open()) return ret; + // var header = msgBase.get_msg_header(id); + // Temporary use of get_all_msg_headers() to get header.tally for polls + var headers = msgBase.get_all_msg_headers(); + var header = null; + for (var h in headers) { + if (headers[h].number !== id) continue; + header = headers[h]; + break; + } + // End of temporary shitfest + if (header === null || !(header.attr&MSG_POLL)) { + msgBase.close(); + return ret; + } + if (header.tally && Array.isArray(header.tally)) ret.tally = header.tally; + ret.answers = msgBase.how_user_voted( + header.number, + msgBase.cfg.settings&SUB_NAME ? user.name : user.alias + ); + msgBase.close(); + var pollAttr = header.auxattr&POLL_RESULTS_MASK; + if (header.from === user.alias || header.from === user.name) { + ret.show_results = true; + } else if (pollAttr === POLL_RESULTS_CLOSED && header.auxattr&POLL_CLOSED) { + ret.show_results = true; + } else if (pollAttr === POLL_RESULTS_OPEN) { + ret.show_results = true; + } else if (pollAttr === POLL_RESULTS_VOTERS && ret.answers > 0) { + ret.show_results = true; + } + return ret; +} + +function getMailHeaders(sent, ascending) { + if (typeof sent !== 'undefined' && + sent && + user.security.restrictions&UFLAG_K + ) { + return []; // They'll just see nothing. Provide actual feedback? Does anyone use REST K? + } + var headers = []; + var msgBase = new MsgBase('mail'); + if (!msgBase.open()) return headers; + for (var m = msgBase.first_msg; m <= msgBase.last_msg; m++) { + var h = msgBase.get_msg_header(m); + if (h === null || h.attr&MSG_DELETE) continue; + if ( (typeof sent != 'undefined' && sent) && + h.from_ext != user.number + ) { + continue; + } else if ( + (typeof sent == 'undefined' || !sent) && + h.to_ext != user.number + ) { + continue; + } + headers.push(h); + } + msgBase.close(); + if (typeof ascending === 'undefined' || !ascending) headers.reverse(); + return headers; +} + +function is_spam(header) { + return (header.attr&MSG_SPAM || (header.subject.search(/^SPAM:/) > -1)); +} + +function get_mail_headers(filter, ascending) { + const ret = { + headers: [], + sent: { read: 0, unread: 0 }, + spam: { read: 0, unread: 0 }, + inbox: { read: 0, unread: 0 } + }; + if (filter == 'sent' && user.security.restrictions&UFLAG_K) return ret; // I don't remember what this is for. + const msg_base = new MsgBase('mail'); + if (!msg_base.open()) return ret; + for (var n = msg_base.first_msg; n <= msg_base.last_msg; n++) { + var h = msg_base.get_msg_header(n); + if (h === null || h.attr&MSG_DELETE) continue; + if (h.from_ext == user.number) { + h.attr&MSG_READ ? ret.sent.read++ : (ret.sent.unread++); + if (filter == 'sent') ret.headers.push(h); + } + if (h.to_ext == user.number) { + if (is_spam(h)) { + h.attr&MSG_READ ? ret.spam.read++ : (ret.spam.unread++); + if (filter == 'spam') ret.headers.push(h); + } else { + h.attr&MSG_READ ? ret.inbox.read++ : (ret.inbox.unread++); + if (filter == 'inbox') ret.headers.push(h); + } + } + } + msg_base.close(); + if (ascending) ret.headers.reverse(); + return ret; +} + +function mimeDecode(header, body, code) { + const ret = { + type : '', + body : [] + }; + const msg = mime_decode(header, body, code); + if (msg.inlines) { + ret.inlines = msg.inlines.map(function (e) { + return format( + '<a href="./api/attachments.ssjs?sub=%s&msg=%s&cid=%s" target="_blank">%s</a>', + code, header.number, e, e + ); + }); + } + if (msg.attachments) { + ret.attachments = msg.attachments.map(function (e) { + return format( + '<a href="./api/attachments.ssjs?sub=%s&msg=%s&filename=%s" target="_blank">%s</a>', + code, header.number, e, e + ); + }); + } + ret.type = msg.type; + ret.body = msg.body; + return ret; +} + +function getMailBody(number) { + + var ret = { + type : '', + body : '' + }; + + number = Number(number); + if (isNaN(number) || number < 0) return ret; + + var msgBase = new MsgBase('mail'); + if (!msgBase.open()) return ret; + var header = msgBase.get_msg_header(false, number, false); + if (header !== null && (header.to_ext == user.number || header.from_ext == user.number)) { + const body = msgBase.get_msg_body(false, header); + const pt_body = msgBase.get_msg_body(false, header, false, false, true, true); + if (header.to_ext == user.number && (header.attr^MSG_READ)) { + header.attr|=MSG_READ; + msgBase.put_msg_header(false, number, header); + } + } + msgBase.close(); + if (!body) return ret; + + var decoded = mimeDecode(header, body, 'mail'); + ret.type = decoded.type; + ret.body = formatMessage(pt_body == body ? decoded.body : pt_body); // See above re: pt_body + ret.inlines = decoded.inlines; + ret.attachments = decoded.attachments; + + return ret; +} + +// Returns the user's signature, or an empty String +function getSignature() { + var fn = format('%s/user/%04d.sig', system.data_dir, user.number); + if (!file_exists(fn)) return ''; + var f = new File(fn); + f.open('r'); + if(js.global.utf8_encode) + var signature = utf8_encode(f.read()); + else + var signature = ascii_str(f.read()); + f.close(); + return signature; +} + +// Post a messge to 'sub' +// Called by postNew/postReply, not directly +function postMessage(sub, header, body) { + var ret = false; + if (user.alias === settings.guest || + typeof msg_area.sub[sub] === 'undefined' || + !msg_area.sub[sub].can_post || + typeof header.to !== 'string' || + header.to === '' || + typeof header.from !== 'string' || + typeof header.subject !== 'string' || + typeof body !== 'string' || + body === '' + ) { + return ret; + } + try { + if (msg_area.sub[sub].settings&SUB_NAME) { + if (user.name === '') return ret; + header.from = user.name; + } + body = lfexpand(body); + var msgBase = new MsgBase(sub); + if(msgBase.open()) { + header.ftn_charset = "UTF-8 4"; + header.auxattr = MSG_HFIELDS_UTF8; + ret = msgBase.save_msg(header, word_wrap(body)); + msgBase.close(); + } + } catch (err) { + log(err); + } + if (ret) user.posted_message(); + return ret; +} + +// Post a message to the mail sub, if this user can do so +// Called by postNew/postReply, not directly +function postMail(header, body) { + // Lazy ARS checks; we could check the *type* of email being sent, I guess. + if (user.security.restrictions&UFLAG_E || + user.security.restrictions&UFLAG_M + ) { + return false; + } + if (typeof header.to !== 'string' || + typeof header.subject !== 'string' || + typeof body !== 'string' + ) { + return false; + } + var ret = false; + if (user.number < 1 || user.alias === settings.guest) return ret; + var na = netaddr_type(header.to_net_addr); + header.to_net_type = na; + if (na === NET_NONE) { + var un = system.matchuser(header.to); + if (un === 0) return false; // Should actually inform about this + header.to_ext = un; + } + var msgBase = new MsgBase('mail'); + if (msgBase.open()) { + header.ftn_charset = "UTF-8 4"; + header.auxattr = MSG_HFIELDS_UTF8; + ret = msgBase.save_msg(header, lfexpand(body)); + msgBase.close(); + } + if (ret) user.sent_email(); + return ret; +} + +// Post a new (non-reply) message to 'sub' +function postNew(sub, to, subject, body) { + if (typeof sub !== 'string' || + typeof to !== 'string' || + to === '' || + typeof subject !== 'string' || + subject === '' || + typeof body !== 'string' || + body === '' + ) { + return false; + } + var header = { + to : to, + from : user.alias, + from_ext : user.number, + subject : subject + }; + if (sub === 'mail') { + header.to_ext = system.matchuser(to); + if (header.to_ext === 0) + header.to_net_addr = header.to; + return postMail(header, body); + } else { + return postMessage(sub, header, body); + } +} + +// Add a new message to 'sub' in reply to parent message 'pid' +function postReply(sub, body, pid) { + var ret = false; + if ( typeof sub !== 'string' || + typeof body !== 'string' || + typeof pid !== 'number' + ) { + return ret; + } + try { + var msgBase = new MsgBase(sub); + msgBase.open(); + var pHeader = msgBase.get_msg_header(pid); + msgBase.close(); + if (pHeader === null) return ret; + var header = { + 'to' : pHeader.from == user.alias ? pHeader.to : pHeader.from, + 'from' : user.alias, + 'subject' : pHeader.subject, + 'thread_id' : ( + typeof pHeader.thread_id === 'undefined' + ? pHeader.number + : pHeader.thread_id + ), + 'thread_back' : pHeader.number + }; + if (sub === 'mail') { + if (typeof pHeader.from_net_addr !== 'undefined') { + header.to_net_addr = pHeader.from_net_addr; + } + ret = postMail(header, body); + } else { + ret = postMessage(sub, header, body); + } + } catch (err) { + log(err); + } + return ret; +} + +function postPoll(sub, subject, votes, results, answers, comments) { + + if (user.alias == settings.guest || user.security.restrictions&UFLAG_V) { + return false; + } + + if (typeof msg_area.sub[sub] === 'undefined' || !msg_area.sub[sub].can_post) { + return false; + } + + if (typeof subject !== 'string' || subject.length < 1) return false; + + if (!Array.isArray(answers) || answers.length < 2) return false; + + votes = parseInt(votes); + if (isNaN(votes) || votes < 1 || votes > 15) return false; + if (votes > answers) votes = answers; + + results = parseInt(results); + if (isNaN(results) || results < 0 || results > 3) { + return false; + } + + var header = { + attr : MSG_POLL, + subject : subject.substr(0, LEN_TITLE), + from : msg_area.sub[sub].settings&SUB_AONLY ? "Anonymous" : (msg_area.sub[sub].settings&SUB_NAME ? user.name : user.alias), + from_ext : user.number, + to : 'All', + field_list : [], + auxattr : (results<<POLL_RESULTS_SHIFT) | MSG_HFIELDS_UTF8, + votes : votes + }; + + if (Array.isArray(comments)) { + comments.forEach( + function (e) { + header.field_list.push( + { type : SMB_COMMENT, data : e.substr(0, LEN_TITLE) } + ); + } + ); + } + + answers.forEach( + function (e) { + header.field_list.push( + { type : SMB_POLL_ANSWER, data : e.substr(0, LEN_TITLE) } + ); + } + ); + + var msgBase = new MsgBase(sub); + if (!msgBase.open()) return false; + var ret = msgBase.add_poll(header); + msgBase.close(); + + if (ret) user.posted_message(); + return ret; + +} + +// Delete a message if +// - This is the mail sub, and the message was sent by or to this user +// - This is another sub on which the user is an operator +function deleteMessage(sub, number) { + number = parseInt(number); + if (typeof msg_area.sub[sub] === 'undefined' && sub !== 'mail') { + return false; + } + var msgBase = new MsgBase(sub); + if (!msgBase.open()) return false; + var header = msgBase.get_msg_header(number); + if (header === null) return false; + if (sub === 'mail' && + (header.to_ext == user.number || header.from_ext == user.number) + ) { + var ret = msgBase.remove_msg(number); + } else if (sub !== 'mail' && msg_area.sub[sub].is_operator) { + var ret = msgBase.remove_msg(number); + } else { + var ret = false; + } + msgBase.close(); + return ret; +} + +function deleteMail(numbers) { + if (typeof numbers === 'undefined' || !Array.isArray(numbers)) return false; + var msgBase = new MsgBase('mail'); + if (!msgBase.open()) return false; + numbers.forEach( + function (e) { + e = parseInt(e); + if (isNaN(e) || e < msgBase.first_msg || e > msgBase.last_msg) return; + var header = msgBase.get_msg_header(e); + if (header === null) return; + if (header.to_ext == user.number || header.from_ext == user.number) { + msgBase.remove_msg(e); + } + } + ); + msgBase.close(); + return true; +} + +function voteMessage(sub, number, up) { + if (typeof msg_area.sub[sub] === 'undefined' && sub !== 'mail') { + return false; + } + if (user.alias == settings.guest || user.security.restrictions&UFLAG_V) { + return false; + } + if (msg_area.sub[sub].settings&SUB_NOVOTING) return false; + number = parseInt(number); + if (isNaN(number)) return false; + up = parseInt(up); + if (isNaN(up) || up < 0 || up > 1) return false; + var msgBase = new MsgBase(sub); + if (!msgBase.open()) return false; + var header = msgBase.get_msg_header(number); + if (header === null || header.attr&MSG_POLL) { + msgBase.close(); + return false; + } + var uv = msgBase.how_user_voted( + header.number, msgBase.cfg.settings&SUB_NAME ? user.name : user.alias + ); + if (uv === 0) { + var vh = { + 'from' : msgBase.cfg.settings&SUB_NAME ? user.name : user.alias, + 'from_ext' : user.number, + 'from_net_type' : NET_NONE, + 'thread_back' : header.number, + 'attr' : up ? MSG_UPVOTE : MSG_DOWNVOTE + }; + var ret = msgBase.vote_msg(vh); + } + msgBase.close(); + return ret; +} + +function submitPollAnswers(sub, number, answers) { + if (typeof msg_area.sub[sub] === 'undefined') return false; + if (msg_area.sub[sub].settings&SUB_NOVOTING) return false; + if (user.alias == settings.guest || user.security.restrictions&UFLAG_V) { + return false; + } + number = parseInt(number); + if (isNaN(number)) return false; + var msgBase = new MsgBase(sub); + if (!msgBase.open()) return false; + var ret = false; + var header = msgBase.get_msg_header(number); + if (header !== null && + header.attr&MSG_POLL && + !(header.auxattr&POLL_CLOSED) && + answers.length > 0 && + ( answers.length <= header.votes || + (answers.length == 1 && header.votes == 0) + ) + ) { + var uv = msgBase.how_user_voted( + number, msgBase.cfg.settings&SUB_NAME ? user.name : user.alias + ); + if (uv === 0) { + var a = 0; + answers.forEach( + function (e) { + e = parseInt(e); + if (isNaN(e) || e < 0 || e > 15) return; + a|=(1<<e); + } + ); + ret = msgBase.vote_msg( + { 'from' : msgBase.cfg.settings&SUB_NAME ? user.name : user.alias, + 'from_ext' : user.number, + 'from_net_type' : NET_NONE, + 'thread_back' : number, + 'attr' : MSG_VOTE, + 'votes' : a + } + ); + } + } + msgBase.close(); + return ret; +} + +// Deuce's URL-ifier +function linkify(body) { + urlRE = /(?:https?|ftp|telnet|ssh|gopher|rlogin|news):\/\/[^\s'"'<>()]*|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6}/gi; + body = body.replace( + urlRE, + function (str) { + var ret='' + var p=0; + var link=str.replace(/\.*$/, ''); + var linktext=link; + if (link.indexOf('://') === -1) link = 'mailto:' + link; + return ('<a class="ulLink" href="' + link + '">' + linktext + '</a>' + str.substr(linktext.length)); + } + ); + return (body); +} + +// Somewhat modified version of Deuce's "magical quoting stuff" from v3 +function quotify(body) { + + var blockquote_start = '<blockquote>'; + var blockquote_end = '</blockquote>'; + + var lines = body.split(/\r?\n/); + body = ''; + + var quote_depth=0; + var prefixes = []; + + for (l in lines) { + + var line_prefix = ''; + var m = lines[l].match(/^((?:\s?[^\s]{0,3}>\s?)+)/); + + if (m !== null) { + + var new_prefixes = m[1].match(/\s?[^\s]{0,3}>\s?/g); + var p; + var broken = false; + + line = lines[l]; + + // If the new length is smaller than the old one, close the extras + for (p = new_prefixes.length; p < prefixes.length; p++) { + if (quote_depth < 1) continue; + line_prefix = line_prefix + blockquote_end; + quote_depth--; + } + + for (p in new_prefixes) { + // Remove prefix from start of line + line = line.substr(new_prefixes[p].length); + + if (typeof prefixes[p] === "undefined") { + /* New depth */ + line_prefix = line_prefix + blockquote_start; + quote_depth++; + } else if (broken) { + line_prefix = line_prefix + blockquote_start; + quote_depth++; + } else if (prefixes[p].replace(/^\s*(.*?)\s*$/,"$1") != new_prefixes[p].replace(/^\s*(.*?)\s*$/,"$1")) { + // Close all remaining old prefixes and start one new one + var o; + for (o = p; o < prefixes.length && o < new_prefixes.length; o++) { + if (quote_depth > 0) { + line_prefix = blockquote_end + line_prefix; + quote_depth--; + } + } + line_prefix = blockquote_start + line_prefix; + quote_depth++; + broken = true; + } + } + + prefixes = new_prefixes.slice(); + line = line_prefix + line; + + } else { + + for (p = 0; p < prefixes.length; p++) { + if (quote_depth < 1) continue; + line_prefix = line_prefix + blockquote_end; + quote_depth--; + } + prefixes = []; + line = line_prefix + lines[l]; + + } + + body = body + line + "\r\n"; + + } + + if (quote_depth !== 0) { + for (;quote_depth > 0; quote_depth--) { + body += blockquote_end; + } + } + + return body.replace(/\<\/blockquote\>\r\n<blockquote\>/g, "\r\n"); + +} + +// Format message body for the web +function formatMessage(body, ansi, exascii) { + + // Workaround for html_encode(body, true, false, false, false); + // which causes a crash if body is empty + if (body === '') return body; + + if (typeof ansi === 'boolean' && ansi) { + + body = html_encode(body, true, false, true, true); + body = body.replace(/\r?\n+(<\/span>)?$/,'$1'); + body = linkify(body); + + // Get the last line + var body_m = body.match(/\n([^\n]*)$/); + if (body_m !== null) { + body = '<pre>'+body; + body_m[1] = body_m[1].replace(/&[^;]*;/g,"."); + body_m[1] = body_m[1].replace(/<[^>]*>/g,""); + var lenremain = 80 - body_m[1].length; + while (lenremain > 0) { + body += ' '; + lenremain--; + } + body += '</pre>'; + } else { + /* If we couldn't get the last line, add a line of 80 columns */ + var line = ""; + for (n = 0; n < 80; n++) { + line += ' '; + } + body = '<pre>' + body + line + "</pre>"; + } + + } else { + + // Strip CTRL-A + body = body.replace(/\1./g,''); + // Strip ANSI + body = body.replace(/\x1b\[[\x30-\x3f]*[\x20-\x2f]*[\x40-\x7e]/g,''); + body = body.replace(/\x1b[\x40-\x7e]/g,''); + // Strip unprintable control chars (NULL, BEL, DEL, ESC) + body = body.replace(/[\x00\x07\x1b\x7f]/g,''); + + // Format for the web + body = word_wrap(body, body.length); + body = html_encode(body, exascii, false, false, false); + body = quotify(body); + body = linkify(body); + body = body.replace(/\r\n$/,''); + body = body.replace(/(\r?\n)/g, "<br>$1"); + + } + + return body; + +} + +function setScanCfg(sub, cfg) { + + var opts = [ + 0, + SCAN_CFG_NEW, + SCAN_CFG_YONLY + ]; + + if (typeof msg_area.sub[sub] === 'undefined') return false; + + cfg = parseInt(cfg); + if (isNaN(cfg) || cfg < 0 || cfg > 2) return false; + + if (cfg === 2) opts[cfg]|=SCAN_CFG_NEW; + + msg_area.sub[sub].scan_cfg = opts[cfg]; + return true; + +} + +function getMessageThreads(sub, max) { + + var threads = { thread : {}, order : [] }; + var subjects = {}; + + if (typeof msg_area.sub[sub] === 'undefined') return threads; + if (!msg_area.sub[sub].can_read) return threads; + + function addToThread(thread_id, header, subject) { + if (typeof subject !== 'undefined') subjects[subject] = thread_id; + if (header.when_written_time > threads.thread[thread_id].newest) { + threads.thread[thread_id].newest = header.when_written_time; + } + if (is_user() && header.number > msg_area.sub[sub].scan_ptr) { + threads.thread[thread_id].unread++; + } + threads.thread[thread_id].messages[header.number] = { + attr : header.attr, + auxattr : header.auxattr, + number : header.number, + from : (header.attr&MSG_ANONYMOUS) ? "Anonymous" : (header.is_utf8 ? header.from : utf8_encode(header.from)), + from_ext : header.from_ext, + from_net_addr : header.from_net_addr, + to : header.is_utf8 ? header.to : utf8_encode(header.to), + when_written_time : header.when_written_time, + upvotes : (header.attr&MSG_POLL ? 0 : (header.upvotes || 0)), + downvotes : (header.attr&MSG_POLL ? 0 : (header.downvotes || 0)), + is_utf8: header.is_utf8 + }; + if (header.attr&MSG_POLL) { + header.field_list.sort( + function (a, b) { + if (a.type === 0x62) return -1; + if (b.type === 0x62) return 1; + return 0; + } + ); + threads.thread[thread_id].messages[header.number].poll_comments = []; + threads.thread[thread_id].messages[header.number].poll_answers = []; + header.field_list.forEach( + function (e) { + switch (e.type) { + case SMB_COMMENT: + threads.thread[thread_id].messages[header.number].poll_comments.push(e); + break; + case SMB_POLL_ANSWER: + threads.thread[thread_id].messages[header.number].poll_answers.push(e); + break; + default: + break; + } + } + ); + threads.thread[thread_id].messages[header.number].votes = header.votes; + threads.thread[thread_id].messages[header.number].tally = header.tally || []; + threads.thread[thread_id].messages[header.number].subject = header.subject; + } else { + threads.thread[thread_id].votes.up += (header.upvotes || 0); + threads.thread[thread_id].votes.down += (header.downvotes || 0); + } + } + + function getSomeMessageHeaders(msgBase, count) { + var start = msgBase.last_msg - count; + if (start < msgBase.first_msg) start = msgBase.first_msg; + var headers = {}; + var c = 0; + for (var m = start; m <= msgBase.last_msg; m++) { + var header = msgBase.get_msg_header(m); + if (header === null || header.attr&MSG_DELETE) continue; + if (settings.forum_no_spam && is_spam(header)) continue; + headers[header.number] = header; + c++; + if (c >= count) break; + } + return headers; + } + + var msgBase = new MsgBase(sub); + if (!msgBase.open()) return threads; + if ((typeof max == 'number' && max > 0) || typeof msgBase.get_all_msg_headers != 'function') { + var headers = getSomeMessageHeaders(msgBase, max); + } else { + var headers = msgBase.get_all_msg_headers(); + } + msgBase.close(); + if (!headers) return threads; + + Object.keys(headers).forEach( + + function(h) { + + if (headers[h] === null || headers[h].attr&MSG_DELETE) { + delete headers[h]; + return; + } + + if (settings.forum_no_spam && is_spam(header)) { + delete headers[h]; + return; + } + + if (sub === 'mail' && + headers[h].to !== user.alias && + headers[h].to !== user.name && + headers[h].to_ext !== user.number && + headers[h].from !== user.alias && + headers[h].from !== user.name && + headers[h].from_ext !== user.number + ) { + delete headers[h]; + return; + } + + var subject = headers[h].subject.replace(/^(re:\s*)*/ig, ''); + + if (typeof subjects[subject] !== 'undefined') { + + addToThread(subjects[subject], headers[h]); + + } else if (headers[h].thread_id !== 0) { + + if (typeof threads.thread[headers[h].thread_id] + !== 'undefined' + ) { + addToThread(headers[h].thread_id, headers[h], subject); + } else { + threads.thread[headers[h].thread_id] = { + id: headers[h].thread_id, + newest : 0, + subject: headers[h].subject, + messages: {}, + votes: { + up: 0, + down: 0 + }, + unread: 0 + }; + addToThread(headers[h].thread_id, headers[h], subject); + } + + } else if (headers[h].thread_back !== 0) { + + if (typeof threads.thread[headers[h].thread_back] + !== 'undefined' + ) { + addToThread(headers[h].thread_back, headers[h], subject); + } else { + var threaded = false; + for (var t in threads.thread) { + if (typeof + threads.thread[t].messages[headers[h].thread_back] + !== 'undefined' + ) { + addToThread(t, headers[h], subject); + threaded = true; + break; + } + } + if (!threaded) { + threads.thread[headers[h].thread_back] = { + id: headers[h].thread_back, + newest: 0, + subject: headers[h].subject, + messages: {}, + votes: { + up: 0, + down: 0 + }, + unread: 0 + }; + addToThread( + headers[h].thread_back, + headers[h], + subject + ); + } + } + + } else { + + threads.thread[headers[h].number] = { + id: headers[h].number, + newest: 0, + subject: headers[h].subject, + messages: {}, + votes: { + up: 0, + down: 0 + }, + unread: 0 + }; + addToThread(headers[h].number, headers[h], subject); + + } + + delete headers[h]; + + } + + ); + + threads.order = Object.keys(threads.thread).sort(function (a, b) { + return threads.thread[b].newest - threads.thread[a].newest; + }); + + return threads; + +} + +function isValidRequest() { + if (Request.has_param('group')) { + const grp = Request.get_param('group'); + if (typeof msg_area.grp_list[grp] == 'undefined') return false; + if (!user.compare_ars(msg_area.grp_list[grp].ars)) return false; + } + if (Request.has_param('sub')) { + const sub = Request.get_param('sub'); + if (typeof msg_area.sub[sub] == 'undefined') return false; + } + return true; +} diff --git a/webv4/lib/ftelnet.js b/webv4/lib/ftelnet.js new file mode 100644 index 0000000000000000000000000000000000000000..edcb2318ad7366e6b20e1b639a9d4c8218c3f97d --- /dev/null +++ b/webv4/lib/ftelnet.js @@ -0,0 +1,50 @@ +require('http.js', 'HTTPRequest'); + +function get_splash() { + var DefaultSplash = 'G1swbQ0KG1syOEMbWzE7MzBtICAgG1swbRtbMTlDG1szNG3cG1sxbdwbWzBtICAgG1szNG3cDQobWzM3bRtbMTNDG1sxbSAbWzMzbSAbWzBtG1sxM0MbWzM0bdwbWzM3bSAgG1szNG3c3LAbWzQ0OzMwbbIbWzQwOzM3bRtbMTFDG1szNG0gIBtbMW3c3xtbMG0bWzlDG1sxOzMwbWdqL9rkDQobWzBtG1s2QxtbMW1zeW5jaHJvbmV0G1swbSAgIBtbMTszMG3c3BtbMG0gG1sxOzMwbd8bWzBtICAgG1szNG3+G1szN20bWzVDG1szNG0gIN+y29zcG1szN20gICAbWzM0bdzcICAgG1sxbd4bWzA7MzRt3Q0KG1szN20bWzdDG1szNG3cG1szN20gG1szNG3+G1szN20gICAg3NzcG1sxbbGxsBtbMG0gICAgG1szNG3c3Nzc2xtbMTs0NG3cICD+G1swOzM0bdvc3tsbWzQ0OzMwbbAbWzQwOzM0bbLfIN4bWzE7NDRtsLAbWzA7MzRtsbDcG1sxbdwbWzQ2bbIbWzA7MzRtIBtbMzdt3xtbMTszMG3fG1swbdsbWzE7NDdt3Nzc3NwbWzBtsiAgIBtbMzRt3xtbMzdtICAbWzM0bd/f3NwNChtbMzdtICAgIBtbMTszNG3cG1swOzM0bd8bWzM3bSAgINwbWzFt3BtbNDdt3BtbNDBt29sbWzQ3bdvb27EbWzQwbbAbWzBtICAbWzM0bdwbWzE7NDRt3NwbWzQwbdvf3xtbMDszNG3fG1szN20g3NzcIBtbMzRt3BtbMTs0NG2wG1swOzM0bdvfG1szN20g3NzcIBtbMzRt3htbMTs0NG2yG1swOzM0bdwbWzQ0OzMybbAbWzQ2OzM0bbIbWzE7NDBt398bWzA7MzRt3xtbMzZtIBtbMzdtICAbWzE7NDc7MzBt3BtbMzdtstvb2xtbNDBtsRtbMG0gINzc3Nzc3CAbWzE7MzRtsN0NChtbMG0gIBtbMTszNG0g3htbMDszNG3dG1szN20gICAbWzFtsBtbNDdtstvb29/f29uyG1swbd0gG1sxOzM0bbEbWzQ2bbIbWzQ3bbIbWzQ2bbIbWzQwbbIbWzBtIBtbMTs0N23e29vbG1s0MG2xG1swbSAbWzE7MzRt3BtbNDRtshtbMDszNG3fG1szN23cG1sxOzQ3bbCx29uyG1swbd0gG1s0NjszNG3cG1sxOzQwbd8bWzBtIBtbMTszMG3cG1swbdwbWzE7NDdtsLCwsLAbWzBt3NsbWzE7NDdtstvbshtbNDBtsBtbMG0g2xtbMTs0N23b27AbWzBtIBtbMzRt3N8bWzFt39zcG1swOzM0bdwNChtbMzdtICAgIBtbNDY7MzBtshtbNDA7MzRtICAbWzE7MzBt3htbNDc7MzdtsbLb29wbWzBt3CDfG1sxOzQ3bd/fG1swbdvcIBtbMTszNG3f3xtbMDszNG0gG1sxbbEbWzBtIBtbMTs0N23e29sbWzQwbbIbWzBt3RtbMTszNG3eG1s0Nm2yG1swbSAbWzE7MzBt3BtbMG2y3xtbMTs0N22xstvbG1s0MG2xG1swbSAg3BtbMTs0N22wsbKysrKysrEbWzBtIBtbMTs0NzszMG2wG1szN23b29sbWzQwbbEbWzBtIN4bWzE7NDdt3tuyG1swbd0bWzM0bd8bWzE7NDRtsBtbNDBt2xtbNDdtsrIbWzQwbbEbWzA7MzRtsrEbWzM3bSAbWzM0bbANCiAgG1sxbSAbWzA7MzRt3NwbWzE7NDRtsBtbMDszNG3cG1szN20gG1sxOzMwbd8bWzBt3xtbMTs0N23f39vb3BtbMG3cICAbWzE7MzBt3BtbMG3c3NwbWzFtsBtbMzBt3RtbMzRtsBtbMG0gG1sxOzQ3bd7b2xtbNDBtsbAbWzBt3BtbMzZt3xtbMzdtICAbWzM0bdwbWzM3bSCwG1sxOzQ3bbLbsrAbWzBtIBtbMW2wG1s0N22xstvb39vb2xtbNDBtshtbMG3dIBtbMTszMG3eG1s0NzszN22x29uxG1swbdzc2xtbMTs0N23b2xtbNDBtstzcG1swbdwbWzFt3BtbMG3c3CDcIBtbMTszNG2wG1swOzQ0OzMwbbIbWzBtDQobWzM0bSAg2xtbMTs0NG2wshtbMDszNG0gG1sxOzQ0bbEbWzQwbbEbWzA7NDY7MzRtshtbNDBt3NwbWzM3bSDf3xtbMTs0N23f39wbWzBt3CAbWzE7NDdtsdvb2xtbMG3dIBtbMTszMG3eG1s0NzszN23e29sbWzQwbbCyG1s0N23b29wbWzQwbdwbWzBt3BtbMzRtIBtbMTszN20gG1s0N22ysrEgG1s0MDszMG3eG1s0NzszN22xstvbG1swbd8gG1sxbbAbWzQ3bdvb3RtbMG0gG1szNG3+IBtbMTszN22wG1s0N22y29vb29vb27KxG1swbSAbWzM0bdwbWzFt3BtbMDszNm3cG1sxOzM0bdwbWzA7MzRt3NwbWzFt3BtbMDszNG3fDQog3htbNDQ7MzZtsBtbNDY7MzRtshtbMTs0MG3d3t/fG1swbSDc3NwgG1szNG3cG1szN20g3tsbWzE7NDdt3BtbMG3bG1sxbbEbWzQ3bbLb29wbWzBt3N4bWzE7NDdt29uyG1swbd0bWzE7NDdtsbLb29vb3BtbMG3cG1sxOzQ3bbKxsBtbMG3bG1sxOzMwbd4bWzQ3OzM3bbCy27EbWzBtIBtbMzRtINwbWzE7MzBt3xtbMG3fG1sxbd/fG1szMG0gG1swbSDeG1sxOzQ3bbCysRtbMG3dICDbG1sxOzQ3bbKyshtbMG3dIBtbMzRt3xtbMW3f3BtbNDZtshtbMG0NChtbMzRtICDfG1sxbdsbWzQ2bd+yG1s0MG3dG1swbbAbWzQ3OzMwbbAbWzQwOzM3bdsbWzFtsRtbMG3c3NzcG1sxOzQ3bSAbWzQwbbGxG1s0N20gG1swbdwbWzE7NDc7MzBt3BtbNDA7Mzdt3xtbNDdt39/b29vbsRtbMG0gG1sxOzQ3bbCxsbAbWzBtIBtbMW3f2xtbNDdt29uysBtbMG3bIBtbMTs0NzszMG3cG1szN22wsbAbWzBt29wgG1szNG3f3xtbMzdtINyxG1sxOzMwbd0bWzBtINsbWzE7NDdtsbEbWzBt3RtbMzRt3twbWzM3bd4bWzE7NDdtsbGxG1swbdsgG1sxOzQ0OzM2bbAbWzQwOzM0bd/fDQobWzBtG1s1QxtbMTszNG0gG1swOzM0bSAbWzM3bbAbWzQ3OzMwbbAbWzQwOzM3bdvb2xtbMTs0N23bsrGwsCAbWzBt29vbG1sxOzQ3OzMwbd8bWzQwbdwbWzBtIN4bWzE7NDdtsrKyG1swbd3e2xtbMTs0N22wsBtbMG3b3SAgG1sxbd/bG1s0N23bsbAbWzBt3SDfG1sxOzQ3bSAbWzQwbbGxG1s0N20g3BtbMG3bG1sxOzQ3bf4bWzBt29uyG1sxbd0bWzA7MzRt3BtbMzdt3htbMTs0N22wG1swbdsbWzFt3RtbMzRt3htbMDs0NDszNm2wG1s0MDszN23eG1sxOzQ3bbCwsBtbMG3bG1sxbd0bWzA7MzZt3t0NChtbMzdtICAgIBtbMzZtsBtbNDY7MzBtshtbNDA7MzdtICAbWzFt3xtbNDdt3NzcG1s0MG2yG1swbd3f39/fIBtbMTszNG3c3BtbMDszNG3c3BtbMzdtINsbWzE7NDdtsLCwG1swbSAbWzFt39/fG1s0N23c3NwbWzQwbd0bWzA7MzRt3xtbMW3cG1swbSAbWzFt3xtbNDdtsrEbWzQwbbEbWzBt3CAbWzM0bdwbWzM3bSDf39vbG1s0NzszMG2wG1s0MDszN22yG1sxbd/fG1swbSAg3tsbWzFt3xtbMDszNG0gG1s0NDszNm2yG1s0MDszN20gG1sxbbAbWzBt29sbWzQ3OzMwbbAbWzE7NDA7MzdtsRtbMG0gG1sxOzM2bd8NChtbMG0bWzZDG1szNm3fG1szN20gIBtbMzZt3BtbMzdtICAbWzM2bdzcG1sxbdwbWzA7MzZt39/bG1sxbbEbWzQ0bbAbWzA7NDQ7MzZtsBtbNDA7MzRtst8bWzM3bd4bWzE7NDc7MzNtIBtbMG3bG1sxOzQ3OzMzbbAbWzQwbd0bWzMwbbAbWzBtsBtbNDc7MzBtshtbNDA7MzdtICAbWzM0bdwbWzM3bSAbWzFt3xtbMG0gG1sxOzM2bbAbWzQ2OzM0bd8bWzQwbdzcG1swbSAbWzFt39/f3NwbWzBtIBtbMzRt3yDc3NwgG1szN20gG1szNG0gG1sxOzM3bdwbWzBt3xtbMW3fG1swbSAbWzE7MzRt3htbMG0g39/fG1sxbd/fDQobWzBtG1sxM0MbWzM0bSAbWzM3bSAgG1szNG2wG1szN20gG1szNG2wG1s0NDszMG2yG1s0MDszN20gIBtbMW3cG1s0N23cG1szM23c27LbG1s0MDszN23b29sbWzMzbd8bWzBtIBtbMzRtICDf3xtbNDQ7MzZtIN/fsBtbNDA7MzRt2xtbMW3f3BtbMG0bWzVD/iAgICDfG1s1QxtbMzRtIP4NChtbMzdtG1syNkMbWzE7MzNt3Nvb3xtbMG0bWzEyQxtbMzRtIN4bWzFt3bAbWzA7NDQ7MzBtshtbNDA7MzdtIBtbMTszMG0gIBtbMzNtYmJzG1swbSBzb2Z0d2FyZQ0KG1syNUMbWzE7MzNt3NsbWzM3bd8bWzBtG1sxMkMbWzM0bdwbWzM3bSAgG1szNG3fDQobWzM3bRtbMjRDG1sxOzM2bdwbWzM3bdsbWzMzbdzcDQobWzBtG1syNUMbWzE7MzNt3N8NChtbMG0bWzI1QxtbMTszM23dDQo='; + if (settings && settings.ftelnet_splash) { + var f = new File(settings.ftelnet_splash); + f.open('rb'); + var splash = base64_encode(f.read()); + f.close(); + return splash || DefaultSplash; + } else { + return DefaultSplash; + } +} + +function get_variant() { + if (!settings) return 'norip.noxfer'; + return (settings.ftelnet_rip ? 'rip' : 'norip') + '.' + (settings.ftelnet_xfer ? 'xfer' : 'noxfer'); +} + +function get_cached_url(f) { + if (f.open('r')) { + const ret = f.read(); + f.close(); + return ret; + } + return 'http://embed-v2.ftelnet.ca/js/ftelnet-loader.' + get_variant() + '.js?v=2018-09-14'; +} + +function get_url() { + + const f = new File(system.temp_dir + 'ftelnet.url'); + if (!f.exists || time() - f.date > 86400) { + try { + var str = (new HTTPRequest()).Get('http://embed-v2.ftelnet.ca/js/ftelnet-loader.' + get_variant() + '.js?v=' + (new Date()).getTime()); + } catch (err) { + log(LOG_ERR, 'Failed to fetch fTelnet URL'); + str = ''; + } + const match = str.match(/^.+\ssrc="(.*)"\s.+/); + if (match !== null) { + if (f.open('w')) { + f.write(match[1]); + f.close(); + } + return match[1]; + } + } + return get_cached_url(f); +} diff --git a/webv4/lib/init.js b/webv4/lib/init.js new file mode 100644 index 0000000000000000000000000000000000000000..49dc6e3c8b25bb56fc95556a880f1ba390c35c0d --- /dev/null +++ b/webv4/lib/init.js @@ -0,0 +1,69 @@ +require('sbbsdefs.js', 'SYS_CLOSED'); + +// Paths +settings.web_directory = fullpath( + backslash( + typeof settings.web_directory === 'undefined' + ? '../web' + : settings.web_directory + ) +); +settings.web_root = fullpath( + backslash( + typeof settings.web_root === 'undefined' + ? settings.web_directory + 'root' + : settings.web_root + ) +); +settings.web_lib = backslash(settings.web_directory + 'lib/'); +settings.web_components = backslash(settings.web_directory + 'components/'); +settings.web_pages = backslash(fullpath(settings.web_root + '../pages')); +settings.web_sidebar = backslash(fullpath(settings.web_root + '../sidebar')); + +var defaults = { + guest : { + default : 'Guest', + test : function () { + return system.matchuser(settings.guest) ? null : 'Guest account unavailable'; + } + }, + timeout : { default : 43200 }, + user_registration : { default : false }, + minimum_password_length : { default : 4 }, + email_validation : { default : true }, + email_validation_level : { default : 50 }, + max_messages : { + default : 0, + test : function () { + return settings.max_messages >= 0 ? null : 'max_messages must be >= 0'; + } + }, + page_size : { + default : 25, + test : function () { + return settings.page_size >= 1 ? null : 'page_size must be >= 1'; + } + }, + forum_extended_ascii : { default : true }, + active_node_list : { default : true }, + hide_empty_stats : { default : true } +}; + +Object.keys(defaults).forEach(function (e) { + if (typeof settings[e] == 'undefined') { + settings[e] = defaults[e].default; + } else if (typeof settings[e] != typeof defaults[e].default) { + log(LOG_ERROR, 'Invalid ' + e + ' setting: ' + settings[e]); + exit(); + } else if (typeof defaults[e].test == 'function') { + const t = defaults[e].test(); + if (t !== null) { + log(LOG_ERROR, t); + exit(); + } + } +}); + +defaults = undefined; + +require(settings.web_lib + 'locale.js', 'locale'); diff --git a/webv4/lib/locale.js b/webv4/lib/locale.js new file mode 100644 index 0000000000000000000000000000000000000000..ff5448479f03594f2c0b3f64f4d0494e737f1f71 --- /dev/null +++ b/webv4/lib/locale.js @@ -0,0 +1,7 @@ +if (!settings.locale) { + require(backslash(settings.web_lib + 'locale/') + 'en_us.js', 'Locale'); +} else { + require(backslash(settings.web_lib + 'locale/') + settings.locale + '.js', 'Locale'); +} + +var locale = new Locale(); diff --git a/webv4/lib/locale/en_ca.ini b/webv4/lib/locale/en_ca.ini new file mode 100644 index 0000000000000000000000000000000000000000..fdafd671d76a2a9d1e14d0a52d122af6b1ef9d34 --- /dev/null +++ b/webv4/lib/locale/en_ca.ini @@ -0,0 +1,5 @@ +[page_register] +input_zipcode = Postal code +input_location = Location (City, Province) +placeholder_zipcode = H0H0H0 +placeholder_location = City, Province diff --git a/webv4/lib/locale/en_ca.js b/webv4/lib/locale/en_ca.js new file mode 100644 index 0000000000000000000000000000000000000000..705e50728b1bf70c3d2f8a08c860e29a7243ea8b --- /dev/null +++ b/webv4/lib/locale/en_ca.js @@ -0,0 +1,9 @@ +require(backslash(settings.web_lib + 'locale/') + 'en_us.js', 'EN_US'); + +function EN_CA() { + EN_US.call(this, 'en_ca'); +} +EN_CA.prototype = Object.create(EN_US.prototype); +EN_CA.prototype.constructor = EN_US; + +var Locale = EN_CA; diff --git a/webv4/lib/locale/en_us.ini b/webv4/lib/locale/en_us.ini new file mode 100644 index 0000000000000000000000000000000000000000..94be526bf2d0d37d6faa3467061e9cc0deb88ce5 --- /dev/null +++ b/webv4/lib/locale/en_us.ini @@ -0,0 +1,144 @@ +[main] +button_close = Close +button_submit = Submit +button_login = Log in +input_username = Username +input_password = Password +label_sidebar = Sidebar +label_unread_mail = Unread mail +menu_item_login = Log in +menu_item_logout = Log out +menu_item_mail = Mail +menu_item_register = Register + +[page_home] +button_ftelnet = Connect via Telnet + +[page_mail] +button_post_new = Post a new message +button_select_all = Select all messages +button_delete_selected = Delete selected messages +label_message_from = From +label_message_to = To +label_message_date = on +label_message_subject = Subject +label_tab_inbox = Inbox +label_tab_sent = Sent + +[page_register] +title = Register +button_register = Register +label_field_required = Required +input_alias = Username +input_password = Password +input_password_confirm = Confirm password +input_email = Email address +input_name = Real name +input_street_address = Street address +input_zipcode = Zip Code +input_location = Location (City, State) +input_phone = Telephone number +input_birthdate = Birthdate +input_gender = Gender +input_gender_withheld = Withheld +input_gender_male = Male +input_gender_female = Female +input_gender_other = Other +input_registration_password = Registration password +stat_suffix_field_required = required +help_text_required = Fields marked with an asterisk are required. All others can be left blank if you wish. +help_text_minimum_characters = Minimum of %d characters +help_text_maximum_characters = Maximum of %d characters +message_account_created = Your account has been created +placeholder_netmail = pat@m.f +placeholder_name = Pat Androgyne +placeholder_street_address = 123 Any Street +placeholder_zipcode = 92860 +placeholder_location = City, State +placeholder_phone = 800-555-5555 + +[page_files] +title = Files +stat_suffix_file = file +stat_suffix_files = files +stat_suffix_directory = directory +stat_suffix_directories = directories + +[page_forum] +title = XJS Test Forum +sub_boards = sub-boards +label_thread_from = By +label_message_from = From +label_message_to = To +label_message_date = on +label_message_subject = Subject +label_thread_latest_reply = Latest reply from +suffix_reply_count = reply +suffix_replies_count = replies +badge_poll = POLL +badge_downvotes = Downvotes - Parent / Thread Total +badge_upvotes = Upvotes - Parent / Thread Total +badge_unread_messages = Unread messages +button_post_message = Post a new message +button_post_poll = Post a new poll +button_scan_new = Include in new message scan +button_scan_you = Include in new message scan (messages to you only) +button_scan_off = Exclude from new message scan +button_thread_first_page = First page +button_thread_back_pages = Jump %s page(s) backward +button_thread_previous_page = Previous page +button_thread_next_page = Next page +button_thread_forward_pages = Jump %s page(s) forward +button_thread_last_page = Last page + +[sidebar_node_list] +label_title = Who's Online +label_connection_column = Via +label_node_column = Node +label_send_telegram = Send a telegram +label_status_column = Status +label_status_web = browsing + +[sidebar_recent_visitors] +label_title = Recent Visitors +label_location = from +label_connection = via + +[sidebar_system_info] +label_title = System Info +label_sysop = Sysop: +label_location = Location: +label_users = Users: +label_nodes = Nodes: +label_uptime = Uptime: +label_calls_total = Calls: +label_calls_today = Calls today: +label_files_total = Files: +label_files_uploaded_today = U/L today: +label_files_downloaded_today = D/L today: +label_messages_total = Messages: +label_messages_posted_today = Posted today: +stat_suffix_files = files +stat_suffix_bytes = bytes + +[api_system] +nodelist_action_prefix = viewing +telegram_header_format = Telegram from %s via WWW on %s + +[api_register] +log_success = User #%d registered via HTTP +log_bot_attempt = Hidden registration form field filled. Likely a bot. Cancelling registration. +error_failed = Failed to create user record. +error_bad_syspass = Incorrect registration password. +error_invalid_alias = Valid username is required. +error_alias_taken = Username already taken. +error_password_mismatch = Password and confirmation are required, and must match. +error_password_length = Password must be %d to %d characters in length. +error_email_required = Valid email address is required. +error_invalid_email = Invalid email address +error_invalid_name = Valid real name is required. +error_invalid_location = Valid location is required. +error_invalid_street_address = Valid street address and postal code are required +error_invalid_phone = Valid phone number is required. +error_invalid_gender = Sex is required. Heh heh heh. +error_invalid_birthdate = Valid birthdate is required. diff --git a/webv4/lib/locale/en_us.js b/webv4/lib/locale/en_us.js new file mode 100644 index 0000000000000000000000000000000000000000..7a8c8dd2c15d316ca4f1ac001bbb28312ef19fd8 --- /dev/null +++ b/webv4/lib/locale/en_us.js @@ -0,0 +1,75 @@ +function EN_US(name) { + + const ini_path = backslash(settings.web_lib + 'locale/') + 'en_us.ini'; + if (typeof name == 'string') { + const mod_path = backslash(settings.web_lib + 'locale/') + name + '.ini'; + } + + var f = new File(ini_path); + f.open('r'); + var sections = f.iniGetSections(); + f.close(); + f = undefined; + + const _strings = {}; + const strings = {}; + sections.forEach(function (e) { + Object.defineProperty(strings, e, { + enumerable: true, + get: function () { + if (_strings[e]) return _strings[e]; + var f = new File(ini_path); + f.open('r'); + const o = f.iniGetObject(e); + f.close(); + if (mod_path) { + f = new File(mod_path); + f.open('r'); + const oo = f.iniGetObject(e); + f.close(); + if (oo !== null) { + Object.keys(oo).forEach(function (ee) { + o[ee] = oo[ee]; + }); + } + } + f = undefined; + _strings[e] = o; + return o; + } + }); + }); + Object.defineProperty(this, 'strings', { value: strings }); + + var active_section = 'page_main'; + Object.defineProperty(this, 'section', { + get: function () { + return active_section; + }, + set: function (s) { + active_section = s; + } + }); + +} + +EN_US.prototype.group_numbers = function (n) { + n = n + ''; + const d = n.indexOf('.'); + return n.substring(0, d > -1 ? d : n.length).split('').reverse().reduce( + function (a, c, i) { + return a + (i > 0 && !(i % 3) ? ',' + c : c); + }, '' + ).split('').reverse().join('') + (d > -1 ? n.substring(d) : ''); +} + +EN_US.prototype.write = function (str, sec) { + write(this.strings[sec || this.section][str]); +} + +EN_US.prototype.writef = function (str) { + const args = Array.concat(this.strings[this.section][str], Array.apply(null, arguments).slice(1)); + write(format.apply(null, args)); +} + +var Locale = EN_US; diff --git a/webv4/lib/locale/es_ar.ini b/webv4/lib/locale/es_ar.ini new file mode 100644 index 0000000000000000000000000000000000000000..c7132ea2618a0bf8176bc1f65208d651a1b3907b --- /dev/null +++ b/webv4/lib/locale/es_ar.ini @@ -0,0 +1,144 @@ +[main] +button_close = Cerrar +button_submit = Enviar +button_login = Iniciar sesión +input_username = Usuario +input_password = Clave +label_sidebar = Sidebar +label_unread_mail = Ne leídos +menu_item_login = Ingresar +menu_item_logout = Salir +menu_item_mail = Correo +menu_item_register = Registrar + +[page_home] +button_ftelnet = Conectar via Telnet + +[page_mail] +button_post_new = Escribir un mensaje +button_select_all = Seleccionar todos +button_delete_selected = Eliminar seleccionados +label_message_from = De +label_message_to = Para +label_message_date = el +label_message_subject = Asunto +label_tab_inbox = Entrada +label_tab_sent = Enviados + +[page_register] +title = Registrar +button_register = Registrar +label_field_required = Requerido +input_alias = Usuario +input_password = Clave +input_password_confirm = Confirmar clave +input_email = Dirección de Email +input_name = Nombre real +input_street_address = Dirección +input_zipcode = Cod. Postal +input_location = Lugar (Ciudad, Estado) +input_phone = Teléfono +input_birthdate = Nacimiento +input_gender = Genero +input_gender_withheld = Retenido +input_gender_male = Masculino +input_gender_female = Femenino +input_gender_other = Otro +input_registration_password = Clave de registro +stat_suffix_field_required = obligatorio +help_text_required = Campos marcados con asterisco son obligatorios. Todo los demas pueden quedar en blanco si lo desea. +help_text_minimum_characters = Mínimo de %d caracteres +help_text_maximum_characters = Máximo de %d caracteres +message_account_created = Su cuenta ha sido creada +placeholder_netmail = jp@m.f +placeholder_name = Juan Perez +placeholder_street_address = Calle 123 +placeholder_zipcode = 92860 +placeholder_location = Ciudad, Estado +placeholder_phone = 800-555-5555 + +[page_files] +title = Archivos +stat_suffix_file = archivo +stat_suffix_files = archivos +stat_suffix_directory = directorio +stat_suffix_directories = directorios + +[page_forum] +title = XJS Foros de prueba +sub_boards = sub-boards +label_thread_from = Por +label_message_from = De +label_message_to = Para +label_message_date = el +label_message_subject = Asunto +label_thread_latest_reply = última respuesta de +suffix_reply_count = respuesta +suffix_replies_count = respuestas +badge_poll = ENCUESTA +badge_downvotes = Downvotes - Parent / Thread Total +badge_upvotes = Upvotes - Parent / Thread Total +badge_unread_messages = No leidos +button_post_message = Nuevo mensaje +button_post_poll = Nueva encuesta +button_scan_new = Incluir en escaneo de nuevos mensajes +button_scan_you = Incluir en escaneo de nuevos mensajes (mensajes solo para ud.) +button_scan_off = Excluir del escaneo de nuevos mensajes +button_thread_first_page = First page +button_thread_back_pages = Saltar %s página(s) atras +button_thread_previous_page = Página anterior +button_thread_next_page = Página siguiente +button_thread_forward_pages = Salta %s página(s) adelante +button_thread_last_page = Última página + +[sidebar_node_list] +label_title = Quien está en Línea +label_connection_column = Vía +label_node_column = Nodo +label_send_telegram = Enviar Telegram +label_status_column = Estado +label_status_web = navegando + +[sidebar_recent_visitors] +label_title = Visitas Recientes +label_location = desde +label_connection = vía + +[sidebar_system_info] +label_title = Información el Systema +label_sysop = Sysop: +label_location = Lugar: +label_users = Usuarios: +label_nodes = Nodos: +label_uptime = Uptime: +label_calls_total = Llamadas: +label_calls_today = Llamadas de hoy: +label_files_total = Archivoss: +label_files_uploaded_today = U/L hoy: +label_files_downloaded_today = D/L hoy: +label_messages_total = Mensajes: +label_messages_posted_today = Mensajes hoy: +stat_suffix_files = archivos +stat_suffix_bytes = bytes + +[api_system] +nodelist_action_prefix = viendo +telegram_header_format = Telegram de %s vía WWW el %s + +[api_register] +log_success = Usuario #%d registrado vía HTTP +log_bot_attempt = Hidden registration form field filled. Likely a bot. Cancelling registration. +error_failed = Error al crear el registro de usuario. +error_bad_syspass = Clave incorrecta. +error_invalid_alias = Usuario es obligatorio. +error_alias_taken = Usuario ya existente. +error_password_mismatch = La clave y confirmación son obligatorios y deben concidir. +error_password_length = La clave debe ser de %d a %d caracteres de longitud. +error_email_required = Dirección de E-mail es obligatoria. +error_invalid_email = Direccion de E-mail inválida. +error_invalid_name = Nombre real es obligatorio. +error_invalid_location = Lugar es obligatorio. +error_invalid_street_address = Direccion y Cod. postal son obligatorios. +error_invalid_phone = Telefono es obligatorio. +error_invalid_gender = Sexo es obligatorio. Heh heh heh. +error_invalid_birthdate = Nacimiento es obligatorio. diff --git a/webv4/lib/mime-decode.js b/webv4/lib/mime-decode.js new file mode 100644 index 0000000000000000000000000000000000000000..4865315bc1fe341c9e727f1ed64cc69a2590dcc7 --- /dev/null +++ b/webv4/lib/mime-decode.js @@ -0,0 +1,283 @@ +/* $Id: mime_decode.ssjs,v 1.22 2009/05/06 21:54:05 deuce Exp $ */ + +function regex_escape(str) +{ + str=str.replace(/([\\\^\$\*\+\?\.\(\)\{\}\[\]])/g,"\\$1"); + return(str); +} + +function count_attachments(hdr, body) +{ + var Message=new Array; + var CT; + var TE; + var attach=0; + + if(hdr==undefined || body==undefined || hdr.field_list==undefined) + return(0); + for(head in hdr.field_list) { + if(hdr.field_list[head].data.search(/content-type:/i)!=-1) { + CT=hdr.field_list[head].data; + } + else if(hdr.field_list[head].data.search(/content-transfer-encoding:/i)!=-1) { + TE=hdr.field_list[head].data; + } + } + + if(CT==undefined) + return(0); + + if(CT.search(/multipart\/[^\s;]*/i)!=-1) { + var bound=CT.match(/;[\s\r\n]*boundary="{0,1}([^";\r\n]*)"{0,1}/i); + if(bound==undefined) + return(attach); + bound[1]=regex_escape(bound[1]); + re=new RegExp ("--"+bound[1]+"-{0,2}",""); + msgbits=body.split(re); + /* Search for attachments/inlined */ + for(bit in msgbits) { + var pieces=msgbits[bit].split(/\r?\n\r?\n/); + var disp=pieces[0].match(/content-disposition:\s+(?:attachment|inline)[;\s]*filename="?([^";\r\n]*)"?/i); + if(disp!=undefined) { + attach++; + } + } + } + + return(attach); +} + +function mime_decode(hdr, body, sub) +{ + var Message=new Array; + var CT; + var TE; + var undef; + + if(hdr==undefined || body==undefined || hdr.field_list==undefined) { + Message.type="plain"; + Message.body=decode_body(TE,undef,body); + return(Message); + } + for(head in hdr.field_list) { + if(hdr.field_list[head].data.search(/content-type:/i)!=-1) { + CT=hdr.field_list[head].data; + } + else if(hdr.field_list[head].data.search(/content-transfer-encoding:/i)!=-1) { + TE=hdr.field_list[head].data; + } + } + if(CT==undefined) { + Message.type="plain"; + Message.body=decode_body(TE,undef,body); + return(Message); + } + if(CT.search(/multipart\/[^\s;]*/i)!=-1) { + var bound=CT.match(/;[\s\r\n]*boundary="{0,1}([^";\r\n]*)"{0,1}/i); + if(bound!=undefined) { + bound[1]=regex_escape(bound[1]); + re=new RegExp ("--"+bound[1]+"-{0,2}"); + msgbits=body.split(re); + /* Search for attachments/inlined */ + for(bit in msgbits) { + var pieces=msgbits[bit].split(/\r?\n\r?\n/); + var disp=pieces[0].match(/content-disposition:\s+(?:attachment|inline)[;\s]*filename="?([^";\r\n]*)"?/i); + if(disp!=undefined) { + /* Attachment */ + if(Message.attachments==undefined) + Message.attachments=new Array; + Message.attachments.push(disp[1]); + } + disp=pieces[0].match(/content-id:\s+\<?([^\<\>;\r\n]*)\>?/i); + if(disp!=undefined) { + /* Inline Attachment */ + if(Message.inlines==undefined) + Message.inlines=new Array; + Message.inlines.push(disp[1]); + } + } + /* Search for HTML encoded bit */ + for(bit in msgbits) { + var pieces=msgbits[bit].split(/\r?\n\r?\n/); + var pheads=pieces[0]; + if(pheads==undefined) + continue; + var content=pieces.slice(1).join(''); + if(content==undefined) + continue; + if(pheads.search(/content-type: text\/html/i)!=-1) { + Message.body=decode_body(TE,pheads,content); + if(Message.inlines!=undefined) { + for(il in Message.inlines) { + var path=http_request.virtual_path; + var basepath=path.match(/^(.*\/)[^\/]*$/); + re=new RegExp("cid:("+regex_escape(Message.inlines[il])+")","ig"); + Message.body=Message.body.replace(re,basepath[1]+"api/attachments.ssjs?sub="+sub+"&msg="+hdr.number+"&cid=$1"); + } + } + Message.type="html"; + return(Message); + } + } + /* Search for plaintext bit */ + for(bit in msgbits) { + var pieces=msgbits[bit].split(/\r?\n\r?\n/); + var pheads=pieces[0]; + var content=pieces.slice(1).join(''); + if(content==undefined) + continue; + if(pheads.search(/content-type: text\/plain/i)!=-1) { + Message.body=decode_body(TE,pheads,content); + Message.type="plain"; + return(Message); + } + } + } + } + + if(CT.search(/text\/html/i)!=-1) { + Message.type="html"; + Message.body=decode_body(TE,undef,body); + return(Message); + } + + Message.type="plain"; + Message.body=body; + return(Message); +} + +function decode_body(TE, heads, body) +{ + var tmp; + + if(heads!=undefined && heads != "") { + tmp=heads.match(/content-transfer-encoding: ([^;\r\n]*)/i); + if(tmp!=undefined) + tmp=tmp[1]; + else { + if(TE!=undefined) { + tmp=TE.match(/content-transfer-encoding: ([^;\r\n]*)/i); + if(tmp!=undefined) + tmp=tmp[1]; + } + } + } + else { + if(TE!=undefined) { + tmp=TE.match(/content-transfer-encoding: ([^;\r\n]*)/i); + if(tmp!=undefined) + tmp=tmp[1]; + } + else + tmp=""; + } + + if(tmp==undefined) + tmp=""; + if(tmp.search(/quoted-printable/i)!=-1) { + body=body.replace(/\=(\r{0,1}\n)/g,"$1"); + body=body.replace(/\=([A-F0-9]{2})/ig,function (str,p1,offset,s) + { + var i=parseInt(p1,16); + if(i==NaN || i==undefined) + return('='+p1); + return ascii(i); + } + ); + return body; + } + if(tmp.search(/base64/i)!=-1) { + body=body.replace(/[^A-Za-z0-9\+\/\=]/g,''); + return base64_decode(body); + } + + return body; +} + +function mime_get_attach(hdr, body, filename) +{ + var Message=new Array; + var CT; + var TE; + var undef; + + for(head in hdr.field_list) { + if(hdr.field_list[head].data.search(/content-type:/i)!=-1) { + CT=hdr.field_list[head].data; + } + else if(hdr.field_list[head].data.search(/content-transfer-encoding:/i)!=-1) { + TE=hdr.field_list[head].data; + } + } + if(CT==undefined) { + return(undefined); + } + if(CT.search(/multipart\/[^\s;]*/i)!=-1) { + var bound=CT.match(/;[\s\r\n]*boundary="{0,1}([^";\r\n]*)"{0,1}/i); + if(bound==undefined) + return(undefined); + bound[1]=regex_escape(bound[1]); + re=new RegExp ("--"+bound[1]+"-{0,2}"); + msgbits=body.split(re); + /* Search for attachments */ + for(bit in msgbits) { + var pieces=msgbits[bit].split(/\r+\n\r+\n/); + var disp=pieces[0].match(/content-disposition:\s+(?:attachment|inline)[;\s]*filename="?([^";\r\n]*)"?/i); + if(disp==undefined) + continue; + if(disp[1]==filename) { + var contyp=pieces[0].match(/content-type:\s*([^\r\n]*)/i); + var content=pieces.slice(1).join(''); + if(contyp!=undefined && contyp[0]!=undefined) + Message.content_type=contyp[1]; + Message.body=decode_body(undefined,pieces[0],content); + return(Message); + } + } + } + return(undefined); +} + +function mime_get_cid_attach(hdr, body, cid) +{ + var Message=new Array; + var CT; + var TE; + var undef; + + for(head in hdr.field_list) { + if(hdr.field_list[head].data.search(/content-type:/i)!=-1) { + CT=hdr.field_list[head].data; + } + else if(hdr.field_list[head].data.search(/content-transfer-encoding:/i)!=-1) { + TE=hdr.field_list[head].data; + } + } + if(CT==undefined) { + return(undefined); + } + if(CT.search(/multipart\/[^\s;]*/i)!=-1) { + var bound=CT.match(/;[\s\r\n]*boundary="{0,1}([^";\r\n]*)"{0,1}/i); + if(bound==undefined) + return(undefined); + bound[1]=regex_escape(bound[1]); + re=new RegExp ("--"+bound[1]+"-{0,2}"); + msgbits=body.split(re); + /* Search for attachments */ + for(bit in msgbits) { + var pieces=msgbits[bit].split(/\r?\n\r?\n/); + var disp=pieces[0].match(/content-id:\s+<?([^\<\>;\r\n]*)>?/i); + if(disp==undefined) + continue; + if(disp[1]==cid) { + var contyp=pieces[0].match(/content-type:\s*([^\r\n]*)/i); + var content=pieces.slice(1).join(''); + if(contyp!=undefined && contyp[0]!=undefined) + Message.content_type=contyp[1]; + Message.body=decode_body(undefined,pieces[0],content); + return(Message); + } + } + } + return(undefined); +} diff --git a/webv4/lib/pages.js b/webv4/lib/pages.js new file mode 100644 index 0000000000000000000000000000000000000000..55a7b0035b221b51e30c225b92a75f1f432ef037 --- /dev/null +++ b/webv4/lib/pages.js @@ -0,0 +1,193 @@ +require('xjs.js', 'xjs_compile'); + +function getWebCtrl(dir) { + if (!file_exists(dir + 'webctrl.ini')) return false; + var f = new File(dir + 'webctrl.ini'); + if (!f.open('r')) { + log('Unable to open ' + dir + 'webctrl.ini'); + exit(); + } + var ini = f.iniGetAllObjects(); + f.close(); + return ini; +} + +function webCtrlTest(ini, filename) { + var ret = true; + for (var i = 0; i < ini.length; i++) { + if (!wildmatch(false, filename, ini[i].name)) continue; + if (typeof ini[i].AccessRequirements === 'undefined' || + user.compare_ars(ini[i].AccessRequirements) + ) { + continue; + } + ret = false; + break; + } + return ret; +} + +function getCtrlLine(file) { + + const ret = { + options: { + hidden: false, + no_sidebar: false + }, + title: file_getname(file) + }; + + if (fullpath(file).indexOf(fullpath(settings.web_pages)) != 0) return ret; + + var ctrl = ''; + const f = new File(file); + const ext = file_getext(file).toUpperCase(); + switch (ext) { + case '.JS': + case '.SSJS': + if (!f.open('r')) return ret; + while (!f.eof) { + var i = f.readln().match(/\/\/(.*?)$/); + if (i !== null && i.length > 1) { + ctrl = i[1]; + break; + } + } + f.close(); + break; + case '.XJS': + case '.HTML': + if (!f.open('r')) return ret; + while (!f.eof) { + var i = f.readln().match(/\<\!\-\-(.*?)\-\-\>/); + if (i !== null && i.length > 1) { + ctrl = i[1]; + break; + } + } + f.close(); + break; + default: + ctrl = file_getname(file); + break; + } + + var opts = ctrl.match(/^(.*?)\:/); + if (opts === null || opts.length < 2) { + opts = []; + } else { + opts = opts[1].toUpperCase().split('|'); + } + + var title = ctrl.replace(/^.*\:/, ''); + if (opts.indexOf('HIDDEN') > -1) ret.options.hidden = true; + if (opts.indexOf('NO_SIDEBAR') > -1) ret.options.no_sidebar = true; + if (title != '') ret.title = title; + + return ret; + +} + +function getPageList(dir) { + + dir = backslash(fullpath(dir)); + if (dir.indexOf(settings.web_pages) !== 0) return {}; + + const webctrl = getWebCtrl(dir); + + const sep = system.platform.search(/^win/i) == 0 ? '\\' : '/'; + + const pages = directory(dir + '*').reduce(function (a, c) { + if (file_isdir(c)) { + const list = getPageList(c); + if (Object.keys(list).length) { + a[c.replace(/\\*\/*$/, '').split(sep).slice(-1)] = { type: 'list', list: list }; + } + return a; + } + const ext = file_getext(c).toUpperCase(); + if (c.search(/(\.xjs\.ssjs|webctrl\.ini)$/i) < 0 + && ['.HTML', '.SSJS', '.XJS', '.TXT', '.LINK'].indexOf(ext) > -1 + ) { + const fn = file_getname(c); + if (webctrl && !webCtrlTest(webctrl, fn)) return a; + if (ext == '.LINK') { + const f = new File(c); + if (!f.open('r')) return a; + const l = f.readln().split(','); + f.close(); + if (l.length < 2) return a; + a[l[1]] = { page: l[0], type: 'link' }; + } else { + const ctrl = getCtrlLine(c); + if (!ctrl.options.hidden) { + a[ctrl.title] = { page: file_getname(c), type: 'page' }; + } + } + } + return a; + }, {}); + + return pages; + +} + +function getPage(page) { + + var ret = ''; + + var p = settings.web_pages + page; + + if (!file_exists(p)) return ret; + + var ext = file_getext(p).toUpperCase(); + + if (user.alias != settings.guest) { + var ctrl = getCtrlLine(p); + if (typeof ctrl !== 'undefined' && !ctrl.options.hidden) { + setSessionValue(user.number, 'action', ctrl.title); + } + } + + switch(ext) { + case '.SSJS': + if (ext === '.SSJS' && p.search(/\.xjs\.ssjs$/i) >= 0) break; + (function () { + load(p, true); + })(); + break; + case '.XJS': + (function () { + load(xjs_compile(p), true); + })(); + break; + case '.HTML': + var f = new File(p); + f.open('r'); + if (f.is_open) { + ret = f.read(); + f.close(); + } + break; + case '.TXT': + var f = new File(p); + f.open('r'); + if (f.is_open) { + ret = '<pre>' + f.read() + '</pre>'; + f.close(); + } + break; + default: + break; + } + + return ret; + +} + +function writePage(page) { + var ini = getWebCtrl(settings.web_pages + '/' + page.replace(file_getname(page), '')); + if ((typeof ini === "boolean" && !ini) || webCtrlTest(ini, page)) { + write(getPage(page)); + } +} diff --git a/webv4/lib/request.js b/webv4/lib/request.js new file mode 100644 index 0000000000000000000000000000000000000000..828cb82674abe8771ba1888056bab85ca2640724 --- /dev/null +++ b/webv4/lib/request.js @@ -0,0 +1,18 @@ +// Helpers for http_request +var Request = { + // Query parameter p exists and first instance is of optional type t + has_param: function (p) { + return (Array.isArray(http_request.query[p]) && http_request.query[p].length); + }, + // First instance of query parameter p, or undefined + get_param: function (p) { + if (Array.isArray(http_request.query[p]) && http_request.query[p].length) { + return http_request.query[p][0]; + } + }, + write_param: function (p) { + if (Array.isArray(http_request.query[p]) && http_request.query[p].length) { + write(http_request.query[p][0]); + } + } +}; diff --git a/webv4/lib/sidebar.js b/webv4/lib/sidebar.js new file mode 100644 index 0000000000000000000000000000000000000000..92b0ba53ed4686dd303dcd9494dbcb3547750463 --- /dev/null +++ b/webv4/lib/sidebar.js @@ -0,0 +1,59 @@ +function getFileContents(file) { + const f = new File(file); + if (!f.open('r')) return ''; + const ret = f.read(); + f.close(); + return ret; +} + +function getSidebarModules() { + return directory(settings.web_sidebar + '*').filter(function (e) { + return (!file_isdir(e)); + }); +} + +function getSidebarModule(module) { + + var ret = ''; + if (!file_exists(module)) return ret; + const ext = file_getext(module).toUpperCase(); + + switch (ext) { + case '.SSJS': + if (ext === '.SSJS' && module.search(/\.xjs\.ssjs$/i) >= 0) break; + (function () { + load(module, true); + })(); + break; + case '.XJS': + (function () { + load(xjs_compile(module), true); + })(); + break; + case '.HTML': + ret = getFileContents(module); + break; + case '.TXT': + const tfc = getFileContents(module); + if (tfc.length) ret = '<pre>' + tfc + '</pre>'; + break; + default: + break; + } + + return ret; + +} + +function writeSidebarModules() { + const modules = getSidebarModules(); + write('<ul class="list-group">'); + modules.forEach(function (module) { + if (module.search(/\.xjs\.ssjs$/i) >= 0) return; + write('<li class="list-group-item sidebar">'); + const str = getSidebarModule(module); + if (str.length) write(str); + write('</li>'); + }); + write('</ul>'); +} diff --git a/webv4/pages/.examples/000-home.xjs b/webv4/pages/.examples/000-home.xjs new file mode 100644 index 0000000000000000000000000000000000000000..32b5353df82af16356ee2a36e23572ad651df34b --- /dev/null +++ b/webv4/pages/.examples/000-home.xjs @@ -0,0 +1,51 @@ +<!--Home--> + +<!-- fTelnet --> +<?xjs + if (settings.ftelnet) { + load(settings.web_lib + 'ftelnet.js'); + load('ftelnethelper.js'); +?> + <div id="fTelnetContainer" class="fTelnetContainer"></div> + <?xjs if (!settings.ftelnet_menubar) { ?> + <style>.fTelnetStatusBar { display : none; }</style> + <div class="row"> + <div class="center-block" style="width:200px;margin-bottom:1em;margin-top:1em;"> + <button id="ftelnet-connect" class="btn btn-primary"> + <?xjs write(locale.strings.page_home.button_ftelnet); ?> + </button> + </div> + </div> + <?xjs } ?> + + <script id="fTelnetScript" src="<?xjs write(get_url()); ?>"></script> + <script> + var wsp = <?xjs write(settings.wsp || GetWebSocketServicePort()); ?>; + var wssp = <?xjs write(settings.wssp || GetWebSocketServicePort(true)); ?>; + var Options = new fTelnetOptions(); + Options.BareLFtoCRLF = false; + Options.BitsPerSecond = 57600; + Options.ButtonBarVisible = true; + Options.ConnectionType = 'telnet'; + Options.Emulation = 'ansi-bbs'; + Options.Enter = '\r'; + Options.Font = 'CP437'; + Options.ForceWss = false; + Options.Hostname = '<?xjs write(http_request.vhost); ?>'; + Options.LocalEcho = false; + Options.Port = location.protocol == 'https:' ? wssp : wsp; + Options.ScreenColumns = 80; + Options.ScreenRows = 25; + Options.SplashScreen = '<?xjs write(get_splash()); ?>'; + var fTelnet = new fTelnetClient('fTelnetContainer', Options); + fTelnet.ButtonBarVisible = true; + if ($('#ftelnet-connect').length) { + $('#ftelnet-connect').click(function() { + fTelnet.Connect(); + }); + } + </script> + +<?xjs } ?> + +<!-- end fTelnet --> diff --git a/webv4/pages/.examples/000-mail.xjs b/webv4/pages/.examples/000-mail.xjs new file mode 100644 index 0000000000000000000000000000000000000000..7c1b9aada35be065721e2fc33993b544d00d0963 --- /dev/null +++ b/webv4/pages/.examples/000-mail.xjs @@ -0,0 +1,124 @@ +<!--HIDDEN:Mail--> + +<?xjs + if (user.number == 0 || user.alias == settings.guest) exit(); + load('sbbsdefs.js'); + load(settings.web_lib + 'forum.js'); + var _mail_tab = http_request.query.tab ? http_request.query.tab[0] : 'inbox'; + var _mail = get_mail_headers(_mail_tab, true); + function _active_tab(tab) { + return tab == _mail_tab ? 'active' : ''; + } +?> + +<?xjs function writeMessage(header) { ?> + <li id="li-<?xjs write(header.number); ?>" class="list-group-item mail striped <?xjs write(header.attr&MSG_READ ? 'read' : 'unread'); ?>"> + <div class="row"> + <div class="col-sm-1"> + <div class="checkbox"> + <label class="checkbox-inline"> + <input id="check-<?xjs write(header.number); ?>" type="checkbox" class="mail-select"> + </label> + </div> + </div> + <div class="col-sm-11" style="cursor:pointer;" onclick="getMailBody(<?xjs write(header.number); ?>)"> + <?xjs write(_mail_tab == 'sent' ? locale.strings.page_mail.label_message_to : locale.strings.page_mail.label_message_from); ?>: + <strong><?xjs write(_mail_tab == 'sent' ? header.to : header.from); ?></strong> + <?xjs if (header.from_net_type != NET_NONE) { ?> + <<?xjs write(_mail_tab == 'sent' ? (header.to + '@' + header.to_net_addr) : (header.from + '@' + header.from_net_addr)); ?>> + <?xjs } ?> + <?xjs write(locale.strings.page_mail.label_message_date); ?> + <?xjs write((new Date(header.when_written_time * 1000)).toLocaleString()); ?> + <p> + <?xjs write(locale.strings.page_mail.label_message_subject); ?>: + <strong><?xjs write(header.subject); ?></strong> + </p> + </div> + </div> + <div class="message" id="message-<?xjs write(header.number); ?>" hidden></div> + </li> +<?xjs } ?> + +<?xjs + function _read_unread(tab) { + write('('); + if (_mail[tab].unread) { + write('<strong>' + _mail[tab].unread + '</strong>'); + } else { + write(_mail[tab].unread); + } + write('/' + _mail[tab].read); + write(')'); + } +?> + +<script type="text/javascript" src="./js/forum.js"></script> + +<script type="text/javascript"> + + function selectAllMail() { + $('input.mail-select').each(function () { + $(this).prop('checked', $(this).prop('checked') ? false : true); + }); + } + + async function deleteSelectedMail() { + const numbers = []; + $('input.mail-select:checked').each(function () { + numbers.push($(this).attr('id').split('-')[1]); + }); + const data = await v4_get('./api/forum.ssjs?call=delete-mail&number=' + numbers.join('&number=')); + if (!data.success) return; + numbers.forEach(e => $('#li-' + e).remove()); + } + +</script> + +<?xjs if (typeof http_request.query.notice != "undefined") { ?> + <div id="noticebox" class="alert alert-warning"> + <?xjs write(http_request.query.notice[0]); ?> + </div> + <script type="text/javascript"> + $("#noticebox").fadeOut(3000, function () { + $("#noticebox").remove(); + }); + </script> +<?xjs } ?> + +<?xjs if (!(user.security.restrictions&UFLAG_E) && !(user.security.restrictions&UFLAG_M)) { ?> + <button class="btn btn-default icon" aria-label="<?xjs write(locale.strings.page_mail.button_post_new); ?>" title="<?xjs write(locale.strings.page_mail.button_post_new); ?>" onclick="addNew('mail')"> + <span class="glyphicon glyphicon-pencil"></span> + </button> + <button class="btn btn-default icon" aria-label="<?xjs write(locale.strings.page_mail.button_select_all); ?>" title="<?xjs write(locale.strings.page_mail.button_select_all); ?>" onclick="selectAllMail()"> + <span class="glyphicon glyphicon-check"></span> + </button> + <button class="btn btn-default icon" aria-label="<?xjs write(locale.strings.page_mail.button_delete_selected); ?>" title="<?xjs write(locale.strings.page_mail.button_delete_selected); ?>" onclick="deleteSelectedMail()"> + <span class="glyphicon glyphicon-trash"></span> + </button> +<?xjs } ?> + +<ul class="nav nav-tabs"> + <li role="presentation" class="<?xjs write(_active_tab('inbox')); ?>"> + <a href="./?page=<?xjs write(page); ?>&tab=inbox"> + <?xjs write(locale.strings.page_mail.label_tab_inbox); ?> + <?xjs _read_unread('inbox'); ?> + </a> + </li> + <li role="presentation" class="<?xjs write(_active_tab('spam')); ?>"> + <a href="./?page=<?xjs write(page); ?>&tab=spam"> + Spam + <?xjs _read_unread('spam'); ?> + </a> + </li> + <li role="presentation" class="<?xjs write(_active_tab('sent')); ?>"> + <a href="./?page=<?xjs write(page); ?>&tab=sent"> + <?xjs write(locale.strings.page_mail.label_tab_sent); ?> + <?xjs _read_unread('sent'); ?> + </a> + </li> +</ul> +<br> + +<ul id="forum-list-container" class="list-group"> + <?xjs _mail.headers.forEach(writeMessage); ?> +</ul> diff --git a/webv4/pages/.examples/000-register.xjs b/webv4/pages/.examples/000-register.xjs new file mode 100644 index 0000000000000000000000000000000000000000..2ecaafe25de4d2b09fe083040ebe742115826485 --- /dev/null +++ b/webv4/pages/.examples/000-register.xjs @@ -0,0 +1,231 @@ +<!--HIDDEN:Registration--> + +<!-- + Username/alias and password are always required. All other fields are set + as 'required' (or not) based on your New User Question Toggles as set in + the System Configuration section of scfg. You can delete any fields of + this form that your system does not require. +--> + +<?xjs + if (user.number > 0 && user.alias !== settings.guest) exit(); + + require('sbbsdefs.js', 'SYS_CLOSED'); + + function required(mask) { + return ((system.new_user_questions&mask) ? (' ' + locale.strings.page_register.stat_suffix_field_required) : ''); + } + + function notRequired(mask) { + return ((system.new_user_questions&mask) ? '' : (' ' + locale.strings.page_register.stat_suffix_field_required)); + } + + + function iconRequired(mask) { + if (required(mask).length > 0) { +?> + <span title="<?xjs write(locale.strings.page_register.label_field_required); ?>" class="glyphicon glyphicon-asterisk"></span> +<?xjs + } + } + + function iconNotRequired(mask) { + if (notRequired(mask).length > 0) { +?> + <span title="<?xjs write(locale.strings.page_register.label_field_required); ?>" class="glyphicon glyphicon-asterisk"></span> +<?xjs + } + } +?> + +<script type="text/javascript" src="./js/validator.js"></script> + +<div class="well well-sm"><h3><?xjs write(locale.strings.page_register.title); ?></h3></div> + +<div id="errorbox" class="bg-danger" hidden></div> + +<div id="form-register-container"> + + <div style="margin-bottom:1em;"> + <span title="<?xjs write(locale.strings.page_register.label_field_required); ?>" class="glyphicon glyphicon-asterisk"></span> + <?xjs write(locale.strings.page_register.help_text_required); ?> + </div> + + <form id="form-register" data-toggle="validator"> + + <div class="form-group"> + <label for="alias"><?xjs write(locale.strings.page_register.input_alias); ?></label> + <span title="<?xjs write(locale.strings.page_register.label_field_required); ?>" class="glyphicon glyphicon-asterisk"></span> + <input type="text" data-minlength="1" maxlength="<?xjs write(LEN_ALIAS); ?>" class="form-control" id="alias" name="alias" placeholder="<?xjs write(locale.strings.page_register.input_alias); ?>" required> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, LEN_ALIAS)); ?> + </span> + </div> + + <div class="form-group"> + <label for="password1" class="control-label"> + <?xjs write(locale.strings.page_register.input_password); ?> + </label> + <span title="<?xjs write(locale.strings.page_register.label_field_required); ?>" class="glyphicon glyphicon-asterisk"></span> + <input type="password" data-minlength="<?xjs write(system.min_password_length) ?>" maxlength="<?xjs write(system.max_password_length) ?>" class="form-control" id="password1" name="password1" placeholder="<?xjs write(locale.strings.page_register.input_password); ?>" required> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_minimum_characters, system.min_password_length)); ?>, + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, system.max_password_length)); ?> + </span> + </div> + <div class="form-group"> + <label for="password2" class="control-label"> + <?xjs write(locale.strings.page_register.input_password_confirm); ?> + </label> + <span title="<?xjs write(locale.strings.page_register.label_field_required); ?>" class="glyphicon glyphicon-asterisk"></span> + <input type="password" data-minlength="<?xjs write(system.min_password_length) ?>" maxlength="<?xjs write(system.max_password_length) ?>" class="form-control" id="password2" name="password2" placeholder="<?xjs write(locale.strings.page_register.input_password_confirm); ?>" data-match="#password1" required> + </div> + + <div class="form-group"> + <label for="netmail"><?xjs write(locale.strings.page_register.input_email); ?></label> + <?xjs iconNotRequired(UQ_NONETMAIL); ?> + <input type="email" data-minlength="6" maxlength="<?xjs write(LEN_NETMAIL); ?>"class="form-control" id="netmail" name="netmail" placeholder="<?xjs write(locale.strings.page_register.placeholder_netmail); ?>"<?xjs write(notRequired(UQ_NONETMAIL)); ?>> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, LEN_NETMAIL)); ?> + </span> + </div> + + <div class="form-group"> + <label for="realname"><?xjs write(locale.strings.page_register.input_name); ?></label> + <?xjs iconRequired(UQ_REALNAME); ?> + <input type="text" data-minlength="1" maxlength="<?xjs write(LEN_NAME); ?>" class="form-control" id="realname" name="realname" placeholder="<?xjs write(locale.strings.page_register.placeholder_name); ?>"<?xjs write(required(UQ_REALNAME)); ?>> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, LEN_NAME)); ?> + </span> + </div> + + <div class="form-group"> + <label for="address"> + <?xjs write(locale.strings.page_register.input_street_address); ?> + </label> + <?xjs iconRequired(UQ_ADDRESS); ?> + <input type="text" data-minlength="3" maxlength="<?xjs write(LEN_ADDRESS); ?>" class="form-control" id="address" name="address" placeholder="<?xjs write(locale.strings.page_register.placeholder_street_address); ?>"<?xjs write(required(UQ_ADDRESS)); ?>> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, LEN_ADDRESS)); ?> + </span> + </div> + + <div class="form-group"> + <label for="zipcode"><?xjs write(locale.strings.page_register.input_zipcode); ?></label> + <?xjs iconRequired(UQ_ADDRESS); ?> + <input type="text" data-minlength="3" maxlength="<?xjs write(LEN_ADDRESS); ?>" class="form-control" id="zipcode" name="zipcode" placeholder="<?xjs write(locale.strings.page_register.placeholder_zipcode); ?>"<?xjs write(required(UQ_ADDRESS)); ?>> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, LEN_ADDRESS)); ?> + </span> + </div> + + <div class="form-group"> + <label for="location"><?xjs write(locale.strings.page_register.input_location); ?></label> + <?xjs iconRequired(UQ_LOCATION); ?> + <input type="text" data-minlength="1" maxlength="<?xjs write(LEN_LOCATION); ?>" class="form-control" id="location" name="location" placeholder="<?xjs write(locale.strings.page_register.placeholder_location); ?>"<?xjs write(required(UQ_LOCATION)); ?>> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, LEN_LOCATION)); ?> + </span> + </div> + + <div class="form-group"> + <label for="phone"><?xjs write(locale.strings.page_register.input_phone); ?></label> + <?xjs iconRequired(UQ_PHONE); ?> + <input type="text" data-minlength="3" maxlength="<?xjs write(LEN_PHONE); ?>" class="form-control" id="phone" name="phone" placeholder="<?xjs write(locale.strings.page_register.placeholder_phone); ?>"<?xjs write(required(UQ_PHONE)); ?>> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, LEN_PHONE)); ?> + </span> + </div> + + <div class="form-group"> + <label for="birth"><?xjs write(locale.strings.page_register.input_birthdate); ?></label> + <?xjs iconRequired(UQ_BIRTH); ?> + <input type="text" data-minlength="<?xjs write(LEN_BIRTH); ?>" maxlength="<?xjs write(LEN_BIRTH); ?>" class="form-control" id="birth" name="birth" placeholder="<?xjs write(system.settings&SYS_EURODATE ? 'DD/MM/YY' : 'MM/DD/YY'); ?>" <?xjs write(required(UQ_BIRTH)); ?>> + <span class="help-block"> + <?xjs write(format(locale.strings.page_register.help_text_maximum_characters, LEN_BIRTH)); ?> + </span> + </div> + + <div class="form-inline"> + <?xjs iconRequired(UQ_SEX); ?> + <label><?xjs write(locale.strings.page_register.input_gender); ?></label> + <div class="radio"> + <label> + <input type="radio" id="gender-withheld" name="gender" value="X" checked> + <?xjs write(locale.strings.page_register.input_gender_withheld); ?> + </label> + </div> + <div class="radio"> + <label> + <input type="radio" id="gender-male" name="gender" value="M"> + <?xjs write(locale.strings.page_register.input_gender_male); ?> + </label> + </div> + <div class="radio"> + <label> + <input type="radio" id="gender-female" name="gender" value="F"> + <?xjs write(locale.strings.page_register.input_gender_female); ?> + </label> + </div> + <div class="radio"> + <label> + <input type="radio" id="gender-other" name="gender" value="O"> + <?xjs write(locale.strings.page_register.input_gender_other); ?> + </label> + </div> + </div> + <br> + + <?xjs if(system.newuser_password !== '') { ?> + <div class="form-group"> + <label for="newuser-password"> + <?xjs write(locale.strings.page_register.input_registration_password); ?> + </label> + <input type="password" id="newuser-password" name="newuser-password" data-minlength="1" maxlength="8"> + </div> + <?xjs } ?> + + <!-- Traps - leave these here. They will be hidden from users. --> + <input id="send-me-free-stuff" title="Don't fill this field" name="send-me-free-stuff" type="text"> + <input id="subscribe-to-newsletter" title="Don't check this box" name="subscribe-to-newsletter" value="1" type="checkbox"> + + <div class="pull-right"> + <button class="btn btn-primary" type="submit"> + <?xjs write(locale.strings.page_register.button_register); ?> + </button> + </div> + + </form> + +</div> + +<script type="text/javascript"> + + function register() { + $.post('./api/register.ssjs', $('#form-register').serialize()).done(function (data) { + if (data.errors && data.errors.length > 0) { + $('#errorbox').html(''); + data.errors.forEach(function (err) { + $('#errorbox').append('<p>' + err + '</p>'); + }); + $('#errorbox').attr('hidden', false); + } else { + $('#errorbox').attr('hidden', true); + $('#form-register-container').html( + '<?xjs write(locale.strings.page_register.message_account_created); ?>' + ); + } + }); + } + + $('#form-register').validator().on('submit', function (evt) { + if (evt.isDefaultPrevented()) return; + evt.preventDefault(); + register(); + }); + + // Traps + $('#send-me-free-stuff').attr('hidden', true); + $('#subscribe-to-newsletter').attr('hidden', true); + +</script> diff --git a/webv4/pages/.examples/001-forum.ssjs b/webv4/pages/.examples/001-forum.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..d43118cd6017c9341f3ecd85aebc187c7190a102 --- /dev/null +++ b/webv4/pages/.examples/001-forum.ssjs @@ -0,0 +1,714 @@ +//Forum + +require('sbbsdefs.js', 'SYS_CLOSED'); +load(settings.web_lib + 'forum.js'); +load(settings.web_lib + 'avatars.js'); + +var strings = { + script : { + open : '<script type="text/javascript">', + thread_navigation : 'threadNav();', + interval : 'setInterval(function () { %s }, %s);', + vote_functions : 'enableVoteButtonHandlers("%s");', + vote_refresh_thread : 'getVotesInThread("%s", %s)', + vote_refresh_threads : 'getVotesInThreads("%s")', + get_group_unread : 'getGroupUnreadCount("%s")', + get_sub_unread : 'getSubUnreadCount("%s")', + poll_control : 'pollControl("%s", %s)', + get_poll_data : 'getPollData("%s", %s)', + close : '</script>' + }, + notice_box : '<div id="noticebox" class="alert alert-warning">%s<script type="text/javascript">$("#noticebox").fadeOut(3000,function(){$("#noticebox").remove();});</script></div>', + group_list : { + breadcrumb : '<ol class="breadcrumb"><li><a href="./?page=%s">Forum</a></li></ol>', + container : { + open : '<div id="forum-list-container" class="list-group">', + close : '</div>' + }, + item : '<a href="./?page=%s&group=%s" class="list-group-item striped"><h3><strong>%s</strong></h3><span title="Unread messages (other)" class="badge ignored" id="badge-ignored-%s"></span><span title="Unread messages (scanned subs)" class="badge scanned" id="badge-scanned-%s"></span><p>%s : %s sub-boards</p></a>' + }, + sub_list : { + breadcrumb : '<ol class="breadcrumb"><li><a href="./?page=%s">Forum</a></li><li><a href="./?page=%s&group=%s">%s</a></li></ol>', + container : { + open : '<div id="forum-list-container" class="list-group">', + close : '</div>' + }, + item : '<a href="./?page=%s&sub=%s" class="list-group-item striped%s"><h4><strong>%s</strong></h4><span title="Unread messages" class="badge %s" id="badge-%s"></span><p>%s</p></a>' + }, + thread_list : { + breadcrumb : '<ol class="breadcrumb"><li><a href="./?page=%s">Forum</a></li><li><a href="./?page=%s&group=%s">%s</a></li><li><a href="./?page=%s&sub=%s">%s</a></li></ol>', + container : { + open : '<div id="forum-list-container" class="list-group">', + close : '</div>' + }, + item : { + open : '<a href="./?page=%s&sub=%s&thread=%s" class="list-group-item striped"><div class="row">', + details : { + open : '<div class="col-sm-9">', + info : '<strong>%s</strong><p>By <strong>%s</strong> on %s</p><p>Latest reply by <strong>%s</strong> on %s</p>', + close : '</div>' + }, + badges : { + open : '<div class="col-sm-3"><div class="pull-right">', + unread : '<span title="Unread messages" class="badge%s" id="badge-%s">%s</span>', + votes : { + up : '<span id="uv-%s" title="Upvotes - Parent / Thread Total" class="badge upvote-bg"><span class="glyphicon glyphicon-arrow-up"></span><span id="uv-count-%s">%s / %s</span></span> ', + down : '<span id="dv-%s" title="Downvotes - Parent / Thread Total" class="badge downvote-bg"><span class="glyphicon glyphicon-arrow-down"></span><span id="dv-count-%s">%s / %s</span></span>', + }, + poll : '<span class="badge">POLL</span>', + close : '</div></div>' + }, + close : '</div></a>' + }, + controls : { + post : '<button class="btn btn-default icon" aria-label="Post a new message" title="Post a new message" onclick="addNew(\'%s\')"><span class="glyphicon glyphicon-pencil"></span></button>', + post_poll : '<button class="btn btn-default icon" aria-label="Post a new poll" title="Post a new poll" onclick="addPoll(\'%s\')"><span class="glyphicon glyphicon-list-alt"></span></button>', + scan_new : '<div class="pull-right"><button id="scan-cfg-new" class="btn %s icon" aria-label="Scan for new messages" title="Scan for new messages" onclick="setScanCfg(\'%s\', 1)"><span class="glyphicon glyphicon-ok-sign"></span></button>', + scan_you : '<button id="scan-cfg-youonly" class="btn %s icon" aria-label="Scan for new messages to you only" title="Scan for new messages to you only" onclick="setScanCfg(\'%s\', 2)"><span class="glyphicon glyphicon-user"></span></button>', + scan_off : '<button id="scan-cfg-off" class="btn %s icon" aria-label="Do not scan this sub" title="Do not scan this sub" onclick="setScanCfg(\'%s\', 0)"><span class="glyphicon glyphicon-ban-circle"></span></button></div>' + } + }, + thread_view : { + breadcrumb : '<ol class="breadcrumb"><li><a href="./?page=%s">Forum</a></li><li><a href="./?page=%s&group=%s">%s</a></li><li><a href="./?page=%s&sub=%s">%s</a></li></ol>', + jump_unread : '<div id="jump-unread-container" style="margin-bottom:1em;" hidden><a class="btn btn-default" id="jump-unread" title="Jump to first unread message" href="#"><span class="glyphicon glyphicon-star"></span></a></div>', + set_unread : '$("#jump-unread").attr("href", "#%s");$("#jump-unread-container").attr("hidden", false);', + container : { + open : '<ul id="forum-list-container" class="list-group">', + close : '</ul>' + }, + subject : '<h4><strong>%s</strong></h4>' + }, + message : { + anchor : '<a id="%s"></a>', + open : '<li class="list-group-item striped" id="li-%s">', + header : { + open : '<div class="row">', + details : { + open : '<div class="col-sm-9">', + unread : '<span title="Unread" class="glyphicon glyphicon-star"></span>', + avatar : '<div name="avatar-%s" class="pull-left" style="padding-right:1em;"></div>', + info : 'From <strong>%s</strong>%s to <strong>%s</strong> on %s', + close : '</div>' + }, + voting : { + open : '<div class="col-sm-3"><div class="pull-right">', + poll : '<span class="badge">POLL</span>', + buttons : { + up : '<button id="uv-%s" class="btn-uv btn btn-default icon %s"><span title="Upvotes" class="glyphicon glyphicon-arrow-up"></span><span id="uv-count-%s" title="Upvotes">%s</span></button>', + down : '<button id="dv-%s" class="btn-dv btn btn-default icon %s"><span title="Downvotes" class="glyphicon glyphicon-arrow-down"></span><span id="dv-count-%s" title="Downvotes">%s</span></button>' + }, + close : '</div></div>' + }, + close : '</div>' + }, + body : { + open : '<div class="message" id="message-%s">', + poll : { + container : { + open : '<ul class="list-group">', + close : '</ul>' + }, + title : '<li class="list-group-item"><strong>%s</strong></li>', + comment : '<li class="list-group-item">%s</li>', + answer : { + open : '<li class="list-group-item %s"><label><input type="%s" name="poll-%s" value="%s">%s</label> <div id="poll-count-%s-%s" class="pull-right">%s</div></li>', + closed : '<li class="list-group-item checkbox%s">%s) %s <div id="poll-count-%s-%s" class="pull-right">%s</div></li>' + }, + last : '<li class="clearfix list-group-item"> <div class="pull-right">%s</div></li>', + button : '<button id="submit-poll-%s" class="btn btn-primary" onclick="submitPollAnswers(\'%s\', %s)">Vote</button>', + closed : 'This poll has been closed.', + disallowed : 'You cannot vote on this poll.', + voted : 'You already voted on this poll.' + }, + close : '</div>' + }, + controls : { + oldest : '<a class="btn btn-default icon" title="Jump to oldest message" aria-label="Jump to oldest message" href="#%s"><span class="glyphicon glyphicon-fast-backward"></span></a>', + previous : '<a class="btn btn-default icon" title="Jump to previous message" aria-label="Jump to previous message" href="#%s" id="pm-%s"><span class="glyphicon glyphicon-step-backward"></span></a>', + link : '<a class="btn btn-default icon" title="Direct link to this message" aria-label="Direct link to this message" href="#%s"><span class="glyphicon glyphicon-link"></span></a>', + next : '<a class="btn btn-default icon" title="Jump to next message" aria-label="Jump to next message" href="#%s" id="nm-%s"><span class="glyphicon glyphicon-step-forward"></span></a>', + newest : '<a class="btn btn-default icon" title="Jump to newest message" aria-label="Jump to newest message" href="#%s"><span class="glyphicon glyphicon-fast-forward"></span></a>', + reply : '<button class="btn btn-default icon" title="Reply to this message" aria-label="Reply to this message" name="reply-%s" onclick="addReply(\'%s\', \'%s\')"><span class="glyphicon glyphicon-comment"></span></button>', + remove : '<button class="btn btn-default icon" title="Delete this message" aria-label="Delete this message" onclick="deleteMessage(\'%s\',\'%s\')"><span class="glyphicon glyphicon-trash"></span></button>' + }, + close : '</li>' + } +}; + +var avatars = new Avatars(); + +writeln('<script type="text/javascript" src="./js/forum.js"></script>'); +writeln('<script type="text/javascript" src="./js/graphics-converter.js"></script>'); +writeln('<script type="text/javascript" src="./js/avatars.js"></script>'); + +if (typeof http_request.query.notice !== 'undefined') { + writeln(format(strings.notice_box, http_request.query.notice[0])); +} + +if (typeof http_request.query.sub !== 'undefined' && + typeof msg_area.sub[http_request.query.sub[0]] !== 'undefined' && + typeof http_request.query.thread !== 'undefined' && + msg_area.sub[http_request.query.sub[0]].can_read +) { + + // Thread view + var msgBase = new MsgBase(http_request.query.sub[0]); + + var firstUnread = ''; + + function writeMessage(thread, keys, key, index) { + + var header = thread.messages[key]; + if (header.attr&MSG_POLL && + (msgBase.cfg.settings&SUB_NOVOTING || !settings.vote_functions) + ) { + return; + } + + var body = msgBase.get_msg_body(header.number); + if (body === null) return; + + writeln(format(strings.message.anchor, header.number)); + writeln(format(strings.message.open, header.number)); + + // Show subject if first message + if (index === 0) writeln(format(strings.thread_view.subject, thread.subject)); + + // Header + writeln(strings.message.header.open); + + writeln(strings.message.header.details.open); + if (user.alias != settings.guest && + header.number > msg_area.sub[http_request.query.sub[0]].scan_ptr + ) { + writeln(strings.message.header.details.unread); + if (firstUnread === '') firstUnread += header.number; + } + + if (typeof header.from_net_addr != 'undefined') { + avatars.get_netuser(header.from, header.from_net_addr); + writeln(format(strings.message.header.details.avatar, header.from + '@' + header.from_net_addr)); + } else { + avatars.get_localuser(header.from_ext); + writeln(format(strings.message.header.details.avatar, header.from_ext)); + } + + writeln( + format( + strings.message.header.details.info, + header.from, + typeof header.from_net_addr === 'undefined' ? '' : '@' + header.from_net_addr, + header.to || 'All', + (new Date(header.when_written_time * 1000)).toLocaleString() + ) + ); + writeln(strings.message.header.details.close); + + writeln(strings.message.header.voting.open); + if (settings.vote_functions && + !(msgBase.cfg.settings&SUB_NOVOTING) && + !(header.attr&MSG_POLL) + ) { + writeln( + format( + strings.message.header.voting.buttons.up, + header.number, + user.alias == settings.guest || user.security.restrictions&UFLAG_V || msgBase.cfg.settings&SUB_NOVOTING ? 'disabled' : '', + header.number, + header.upvotes + ) + ); + writeln( + format( + strings.message.header.voting.buttons.down, + header.number, + user.alias == settings.guest || user.security.restrictions&UFLAG_V || msgBase.cfg.settings&SUB_NOVOTING ? 'disabled' : '', + header.number, + header.downvotes + ) + ); + } else if ( + settings.vote_functions && + !(msgBase.cfg.settings&SUB_NOVOTING) && + header.attr&MSG_POLL + ) { + writeln(strings.message.header.voting.poll); + } + writeln(strings.message.header.voting.close); + + writeln(strings.message.header.close); + + // Body + writeln(format(strings.message.body.open, header.number)); + // If this is a poll message + if (settings.vote_functions && + !(msgBase.cfg.settings&SUB_NOVOTING) && + header.attr&MSG_POLL + ) { + + var pollData = getUserPollData(http_request.query.sub[0], header.number); + + writeln(strings.message.body.poll.container.open); + + writeln(format(strings.message.body.poll.title, header.subject)); + + header.poll_comments.forEach( + function (e) { + writeln(format(strings.message.body.poll.comment, e.data)); + } + ); + + // Poll is closed or user has voted + if (header.auxattr&POLL_CLOSED || + pollData.answers > 0 || + user.alias == settings.guest || + user.security.restrictions&UFLAG_V + ) { + header.poll_answers.forEach( + function (e, i) { + writeln( + format( + strings.message.body.poll.answer.closed, + pollData.answers&(1<<i) ? ' upvote-bg' : '', + i + 1, e.data, header.number, i, + pollData.show_results ? header.tally[i] || 0 : '' + ) + ); + } + ); + // Poll is open and user hasn't voted + } else { + header.poll_answers.forEach( + function (e, i) { + writeln( + format( + strings.message.body.poll.answer.open, + header.votes < 2 ? 'radio' : 'checkbox', + header.votes < 2 ? 'radio' : 'checkbox', + header.number, i, e.data, header.number, i, + pollData.show_results ? header.tally[i] || 0 : '' + ) + ); + } + ); + } + + if (header.auxattr&POLL_CLOSED) { + writeln(format(strings.message.body.poll.last, strings.message.body.poll.closed)); + } else if (pollData.answers > 0) { + writeln(format(strings.message.body.poll.last, strings.message.body.poll.voted)); + } else if (user.alias == settings.guest || user.security.restrictions&UFLAG_V || msgBase.cfg.settings&SUB_NOVOTING) { + writeln(format(strings.message.body.poll.last, strings.message.body.poll.disallowed)); + } else { + writeln( + format ( + strings.message.body.poll.last, + format( + strings.message.body.poll.button, + header.number, http_request.query.sub[0], header.number + ) + ) + ); + } + + writeln(strings.message.body.poll.container.close); + writeln(strings.message.body.close); + + writeln(strings.script.open); + if (header.votes > 1) { + writeln(format(strings.script.poll_control, header.number, header.votes)); + } + // Refresh poll results every so often + writeln( + format( + strings.script.interval, + format( + strings.script.get_poll_data, + http_request.query.sub[0], header.number + ), + settings.refresh_interval || 60000 + ) + ); + writeln(strings.script.close); + + // This is a normal message + } else { + writeln(formatMessage(body, false, settings.forum_extended_ascii && !header.is_utf8)); + writeln(strings.message.body.close); + } + + var prev = index === 0 ? thread.messages[thread.__first].number : thread.messages[keys[index - 1]].number; + var next = key === thread.__last ? thread.messages[thread.__last].number : thread.messages[keys[index + 1]].number; + + // Standard controls + writeln(format(strings.message.controls.oldest, thread.messages[thread.__first].number)); + writeln(format(strings.message.controls.previous, prev, header.number)); + writeln(format(strings.message.controls.link, header.number)); + writeln(format(strings.message.controls.next, next, header.number)); + writeln(format(strings.message.controls.newest, thread.messages[thread.__last].number)); + + // User can post + if (user.alias !== settings.guest && msg_area.sub[msgBase.cfg.code].can_post) { + writeln(format(strings.message.controls.reply, header.number, msgBase.cfg.code, header.number)); + } + + // User is operator + if (user.alias != settings.guest && msg_area.sub[msgBase.cfg.code].is_operator) { + writeln(format(strings.message.controls.remove, msgBase.cfg.code, header.number)); + } + + writeln(strings.message.close); + + } + + writeln( + format( + strings.thread_view.breadcrumb, + http_request.query.page[0], + http_request.query.page[0], + msg_area.sub[http_request.query.sub[0]].grp_index, + msg_area.sub[http_request.query.sub[0]].grp_name, + http_request.query.page[0], + http_request.query.sub[0], + msg_area.sub[http_request.query.sub[0]].name + ) + ); + writeln(strings.thread_view.jump_unread); + + try { + msgBase.open(); + var thread = getMessageThreads( + http_request.query.sub[0], + settings.max_messages + ).thread[ + http_request.query.thread[0] + ]; + var keys = Object.keys(thread.messages); + thread.__first = keys[0]; + thread.__last = keys[keys.length - 1]; + writeln(strings.thread_view.container.open); + keys.forEach(function (key, index) { writeMessage(thread, keys, key, index); }); + writeln(strings.thread_view.container.close); + if (keys.length > 1 && firstUnread !== '') { + writeln(strings.script.open); + writeln(format(strings.thread_view.set_unread, firstUnread)); + writeln(strings.script.close); + } + // Update scan pointer + if (user.alias !== settings.guest && + !isNaN(thread.messages[thread.__last].number) && + thread.messages[thread.__last].number < 0xFFFFFFFF && + thread.messages[thread.__last].number > msg_area.sub[http_request.query.sub[0]].scan_ptr && + thread.messages[thread.__last].number <= msgBase.last_msg + ) { + msg_area.sub[http_request.query.sub[0]].scan_ptr = + thread.messages[thread.__last].number; + } + msgBase.close(); + + writeln(strings.script.open); + if (settings.keyboard_navigation) writeln(strings.script.thread_navigation); + if (settings.vote_functions) { + if (user.alias != settings.guest || user.security.restrictions&UFLAG_V) { + writeln( + format(strings.script.vote_functions, http_request.query.sub[0]) + ); + } + writeln( + format( + strings.script.vote_refresh_thread, + http_request.query.sub[0], thread.__first + ) + ); + writeln( + format( + strings.script.interval, + format( + strings.script.vote_refresh_thread, + http_request.query.sub[0], thread.__first + ), + settings.refresh_interval || 60000 + ) + ); + } + writeln('const avatarizer = new Avatarizer();'); + Object.keys(avatars.cache.local).forEach( + function (e) { + const bin = avatars.get_localuser(e); + if (!bin) return; + writeln('avatarizer.get_localuser("' + e + '", "' + bin + '");'); + } + ); + Object.keys(avatars.cache.network).forEach( + function (e) { + Object.keys(avatars.cache.network[e]).forEach( + function (ee) { + const bin = avatars.get_netuser(ee, e); + if (!bin) return; + writeln('avatarizer.get_netuser("' + ee + '", "' + e + '", "' + bin + '");'); + } + ) + } + ); + writeln(strings.script.close); + + + } catch (err) { + log(LOG_WARNING, err); + } + +} else if ( + typeof http_request.query.sub !== 'undefined' && + typeof msg_area.sub[http_request.query.sub[0]] !== 'undefined' && + msg_area.sub[http_request.query.sub[0]].can_read +) { + + // Thread list + function writeThread(thread) { + + if (user.number > 0 && user.alias != settings.guest) { + var unread = getUnreadInThread(http_request.query.sub[0], thread); + } else { + var unread = 0; + } + var keys = Object.keys(thread.messages); + var first = keys[0]; + var last = keys[keys.length - 1]; + writeln( + format( + strings.thread_list.item.open, + http_request.query.page[0], + http_request.query.sub[0], + thread.id + ) + ); + + writeln(strings.thread_list.item.details.open); + writeln( + format( + strings.thread_list.item.details.info, + thread.subject, + thread.messages[first].from, + (new Date(thread.messages[first].when_written_time * 1000)).toLocaleString(), + thread.messages[last].from, + (new Date(thread.messages[last].when_written_time * 1000)).toLocaleString() + ) + ); + writeln(strings.thread_list.item.details.close); + + writeln(strings.thread_list.item.badges.open); + if (settings.vote_functions && + !(msg_area.sub[http_request.query.sub[0]].settings&SUB_NOVOTING) && + (thread.votes.up > 0 || thread.votes.down > 0) + ) { + writeln( + format( + strings.thread_list.item.badges.votes.up, + thread.messages[first].number, + thread.messages[first].number, + thread.messages[first].upvotes, + thread.votes.up + ) + ); + writeln( + format( + strings.thread_list.item.badges.votes.down, + thread.messages[first].number, + thread.messages[first].number, + thread.messages[first].downvotes, + thread.votes.down + ) + ); + } + writeln( + format( + strings.thread_list.item.badges.unread, + msg_area.sub[http_request.query.sub[0]].scan_cfg&SCAN_CFG_NEW ? ' scanned' : '', + thread.messages[first].number, + (unread == 0 ? '' : unread) + ) + ); + if (settings.vote_functions && + !(msg_area.sub[http_request.query.sub[0]].settings&SUB_NOVOTING) && + thread.messages[first].attr&MSG_POLL + ) { + writeln(strings.thread_list.item.badges.poll); + } + writeln(strings.thread_list.item.badges.close); + + writeln(strings.thread_list.item.close); + + } + + writeln( + format( + strings.thread_list.breadcrumb, + http_request.query.page[0], + http_request.query.page[0], + msg_area.sub[http_request.query.sub[0]].grp_index, + msg_area.sub[http_request.query.sub[0]].grp_name, + http_request.query.page[0], + http_request.query.sub[0], + msg_area.sub[http_request.query.sub[0]].name + ) + ); + + if (user.alias !== settings.guest && msg_area.sub[http_request.query.sub[0]].can_post) { + writeln(format(strings.thread_list.controls.post, http_request.query.sub[0])); + if (settings.vote_functions && + !(msg_area.sub[http_request.query.sub[0]].settings&SUB_NOVOTING) && + !(user.security.restrictions&UFLAG_V) + ) { + writeln(format(strings.thread_list.controls.post_poll, http_request.query.sub[0])); + } + } + + if (user.alias !== settings.guest) { + writeln( + format( + strings.thread_list.controls.scan_new, + !(msg_area.sub[http_request.query.sub[0]].scan_cfg&SCAN_CFG_YONLY) && msg_area.sub[http_request.query.sub[0]].scan_cfg&SCAN_CFG_NEW ? 'btn-primary' : 'btn-default', + http_request.query.sub[0] + ) + ); + writeln( + format( + strings.thread_list.controls.scan_you, + msg_area.sub[http_request.query.sub[0]].scan_cfg&SCAN_CFG_YONLY ? 'btn-primary' : 'btn-default', + http_request.query.sub[0] + ) + ); + writeln( + format( + strings.thread_list.controls.scan_off, + !(msg_area.sub[http_request.query.sub[0]].scan_cfg&SCAN_CFG_NEW) && !(msg_area.sub[http_request.query.sub[0]].scan_cfg&SCAN_CFG_YONLY) ? 'btn-primary' : 'btn-default', + http_request.query.sub[0] + ) + ); + } + + try { + var threads = getMessageThreads(http_request.query.sub[0], settings.max_messages); + writeln(strings.thread_list.container.open); + threads.order.forEach(function(t){writeThread(threads.thread[t]);}); + writeln(strings.thread_list.container.close); + } catch (err) { + log(LOG_WARNING, err); + } + + if (settings.vote_functions) { + writeln(strings.script.open); + writeln( + format( + strings.script.interval, + format(strings.script.vote_refresh_threads, http_request.query.sub[0]), + settings.refresh_interval || 60000 + ) + ); + writeln(strings.script.close); + } + +} else if ( + typeof http_request.query.group !== 'undefined' && + typeof msg_area.grp_list[http_request.query.group[0]] !== 'undefined' +) { + + // Sub list + function writeSub(sub) { + writeln( + format( + strings.sub_list.item, + http_request.query.page[0], + sub.code, + sub.scan_cfg&SCAN_CFG_NEW || sub.scan_cfg&SCAN_CFG_YONLY ? ' scanned' : '', + sub.name, + sub.scan_cfg&SCAN_CFG_NEW || sub.scan_cfg&SCAN_CFG_YONLY ? 'scanned' : 'total', + sub.code, + sub.description + ) + ); + } + + function writeApiCall(subs) { + writeln(strings.script.open); + var codes = []; + subs.forEach(function (sub) { codes.push(sub.code); }); + codes = codes.join('&sub='); + writeln(format(strings.script.get_sub_unread, codes)); + writeln( + format( + strings.script.interval, + format(strings.script.get_sub_unread, codes), + settings.refresh_interval || 60000 + ) + ); + writeln(strings.script.close); + } + + writeln( + format( + strings.sub_list.breadcrumb, + http_request.query.page[0], + http_request.query.page[0], + http_request.query.group[0], + msg_area.grp_list[http_request.query.group[0]].name + ) + ); + + try { + var subs = listSubs(http_request.query.group[0]); + writeln(strings.sub_list.container.open); + subs.forEach(writeSub); + writeln(strings.sub_list.container.close); + if (user.number > 0 && user.alias !== settings.guest) writeApiCall(subs); + } catch (err) { + log(LOG_WARNING, err); + } + +} else { + + // Group list + function writeGroup(group) { + writeln( + format( + strings.group_list.item, + http_request.query.page[0], + group.index, + group.name, + group.index, + group.index, + group.description, + group.sub_count + ) + ); + } + + function writeApiCall(groups) { + writeln(strings.script.open); + var indexes = []; + groups.forEach(function(group) { indexes.push(group.index); }); + indexes = indexes.join('&group='); + writeln(format(strings.script.get_group_unread, indexes)); + writeln( + format( + strings.script.interval, + format(strings.script.get_group_unread, indexes), + settings.refresh_interval || 60000 + ) + ); + writeln(strings.script.close); + } + + writeln(format(strings.group_list.breadcrumb, http_request.query.page[0])); + + try { + var groups = listGroups(); + writeln(strings.group_list.container.open); + groups.forEach(writeGroup); + writeln(strings.group_list.container.close); + if (user.number > 0 && user.alias !== settings.guest) writeApiCall(groups); + } catch (err) { + log(LOG_WARNING, err); + } + +} diff --git a/webv4/pages/.examples/001-forum.xjs b/webv4/pages/.examples/001-forum.xjs new file mode 100644 index 0000000000000000000000000000000000000000..2f40948612a3618cecbc8142a00a00eb5c465efe --- /dev/null +++ b/webv4/pages/.examples/001-forum.xjs @@ -0,0 +1,251 @@ +<!--HIDDEN:New Forum--> + +<script type="text/javascript" src="./js/forum.js"></script> + +<?xjs + load(settings.web_lib + 'request.js'); + load(settings.web_lib + 'forum.js'); + locale.section = 'page_forum'; +?> + +<!-- To do: Search (forum, group, sub, or thread), Sortation and data-attributes --> + +<?xjs if (Request.has_param('sub') && Request.has_param('thread')) { ?> + + <?xjs + var offset = Request.has_param('offset') ? parseInt(Request.get_param('offset')) : 0; + const thread = getMessageThreads(Request.get_param('sub'), settings.max_messages).thread[Request.get_param('thread')]; + ?> + + <ol class="breadcrumb"> + <li> + <a href="./?page=<? Request.write_param('page'); ?>"> + <? locale.write('title'); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&group=<? Request.write_param('group'); ?>"> + <? write(msg_area.grp_list[msg_area.sub[Request.get_param('sub')].grp_index].name); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&sub=<? Request.write_param('sub'); ?>"> + <? write(msg_area.sub[Request.get_param('sub')].name); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&sub=<? Request.write_param('sub'); ?>&thread=<? Request.write_param('thread'); ?>"> + <? write(thread.subject); ?> + </a> + </li> + </ol> + + <div id="jump-unread-container" style="margin-bottom:1em;"> + <a class="btn btn-default" id="jump-unread" title="Jump to first unread message" href="#"> + <span class="glyphicon glyphicon-star"></span> + </a> + </div> + + <div id="forum-list-container" class="list-group"> + + </div> + +<?xjs } else if (Request.has_param('sub') && typeof msg_area.sub[Request.get_param('sub')] != 'undefined') { ?> + + <ol class="breadcrumb"> + <li> + <a href="./?page=<? Request.write_param('page'); ?>"> + <? locale.write('title'); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&group=<? write(msg_area.grp_list[msg_area.sub[Request.get_param('sub')].grp_index].number); ?>"> + <? write(msg_area.grp_list[msg_area.sub[Request.get_param('sub')].grp_index].name); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&sub=<? Request.write_param('sub'); ?>"> + <? write(msg_area.sub[Request.get_param('sub')].name); ?> + </a> + </li> + </ol> + + <?xjs + var offset = Request.has_param('offset') ? parseInt(Request.get_param('offset')) : 0; + const threads = listThreads(Request.get_param('sub'), offset, settings.page_size, true) || { total: 0, threads: [] }; + const sub = msg_area.sub[Request.get_param('sub')]; + ?> + + <button class="btn btn-default icon" aria-label="<? locale.write('button_post_message'); ?>" title="<? locale.write('button_post_message'); ?>" onclick="addNew('<? write(sub.code); ?>')"> + <span class="glyphicon glyphicon-pencil"></span> + </button> + <button class="btn btn-default icon" aria-label="<? locale.write('button_post_poll'); ?>" title="<? locale.write('button_post_poll'); ?>" onclick="addPoll('<? write(sub.code); ?>')"> + <span class="glyphicon glyphicon-list-alt"></span> + </button> + + <div class="pull-right"> + <button id="scan-cfg-new" class="btn btn-default icon" aria-label="<? locale.write('button_scan_new'); ?>" title="<? locale.write('button_scan_new'); ?>" onclick="setScanCfg('<? write(sub.code); ?>', 1)"> + <span class="glyphicon glyphicon-ok-sign"></span> + </button> + <button id="scan-cfg-youonly" class="btn btn-default icon" aria-label="<? locale.write('button_scan_you'); ?>" title="<? locale.write('button_scan_you'); ?>" onclick="setScanCfg('<? write(sub.code); ?>', 2)"> + <span class="glyphicon glyphicon-user"></span> + </button> + <button id="scan-cfg-off" class="btn btn-primary icon" aria-label="<? locale.write('button_scan_off'); ?>" title="<? locale.write('button_scan_off'); ?>" onclick="setScanCfg('<? write(sub.code); ?>', 0)"> + <span class="glyphicon glyphicon-ban-circle"></span> + </button> + </div> + + <div id="forum-thread-replies-template" hidden> + <p> + <strong data-message-count></strong> + <span data-suffix-reply hidden><? locale.write('suffix_reply_count'); ?>.</span> + <span data-suffix-replies hidden><? locale.write('suffix_replies_count'); ?>.</span> + <? locale.write('label_thread_latest_reply'); ?> + <strong data-last-from></strong> + <span data-last-time></span> + </p> + </div> + + <div id="forum-thread-stats-template" hidden> + <?xjs if (is_user()) { ?> + <span data-unread-messages title="<? locale.write('badge_unread_messages'); ?>" class="badge <? write(sub.scan_cfg&SCAN_CFG_NEW || sub.scan_cfg&SCAN_CFG_YONLY ? 'scanned' : ''); ?>" hidden></span> + <?xjs } ?> + <span data-upvotes-badge title="<? locale.write('badge_upvotes'); ?>" class="badge upvote-bg" style="display:none;"> + <span class="glyphicon glyphicon-arrow-up"></span> + <span data-upvotes></span> + </span> + <span data-downvotes-badge title="<? locale.write('badge_downvotes'); ?>" class="badge downvote-bg" style="display:none;"> + <span class="glyphicon glyphicon-arrow-down"></span> + <span data-downvotes></span> + </span> + </div> + + <div id="forum-list-container" class="list-group"> + <?xjs threads.threads.forEach(function (e) { ?> + <a href="./?page=<? Request.write_param('page'); ?>&sub=<? Request.write_param('sub'); ?>&thread=<? write(e.id); ?>" class="list-group-item striped"> + <div class="row"> + <div id="left-<? write(e.id); ?>" class="col-sm-9"> + <strong><? write(e.subject); ?></strong> + <p><strong><? write(e.first.from); ?></strong>, <? write(system.timestr(e.first.when_written_time)); ?></p> + </div> + <div class="col-sm-3"> + <div id="right-<? write(e.id); ?>" class="pull-right"></div> + </div> + </div> + </a> + <?xjs }); ?> + </div> + + <?xjs if (threads.total / settings.page_size > 1) { ?> + <?xjs qs = http_request.query_string.replace(/&offset=\d+/g, ''); ?> + <div class="btn-group"> + <?xjs if (offset > 0) { ?> + <a href="./?<? write(qs); ?>&offset=0" role="button" class="btn btn-default" title="<? locale.write('button_thread_first_page'); ?>"> + <span class="glyphicon glyphicon-fast-backward"></span> + </a> + <a href="./?<? write(qs); ?>&offset=<? write(Math.max(0, offset - 9)); ?>" role="button" class="btn btn-default" title="<? locale.writef('button_thread_back_pages', Math.min(9, offset)); ?>"> + <span class="glyphicon glyphicon-backward"></span> + </a> + <a href="./?<? write(qs); ?>&offset=<? write(Math.max(0, offset - 1)); ?>" role="button" class="btn btn-default" title="<? locale.write('button_thread_previous_page'); ?>"> + <span class="glyphicon glyphicon-step-backward"></span> + </a> + <?xjs } ?> + <a href="./?<? write(qs); ?>&offset=<? write(offset); ?>" role="button" class="btn btn-default" disabled> + <? write(offset + 1); ?> + </a> + <?xjs for (var n = offset + 1; n < threads.total / settings.page_size && n - offset < 9; n++) { ?> + <a href="./?<? write(qs); ?>&offset=<? write(n); ?>" role="button" class="btn btn-default"><? write(n + 1); ?></a> + <?xjs } ?> + <?xjs if (threads.total / settings.page_size > offset + 9) { ?> + <a href="./?<? write(qs); ?>&offset=<? write(offset + 1); ?>" role="button" class="btn btn-default" title="<? locale.write('button_thread_next_page'); ?>"> + <span class="glyphicon glyphicon-step-forward"></span> + </a> + <a href="./?<? write(qs); ?>&offset=<? write(offset + 9); ?>" role="button" class="btn btn-default" title="<? locale.writef('button_thread_forward_pages', Math.min(9, Math.floor(threads.total / settings.page_size))); ?>"> + <span class="glyphicon glyphicon-forward"></span> + </a> + <a href="./?<? write(qs); ?>&offset=<? write(Math.floor(threads.total / settings.page_size)); ?>" role="button" class="btn btn-default" title="<? locale.write('button_thread_last_page'); ?>"> + <span class="glyphicon glyphicon-fast-forward"></span> + </a> + <?xjs } ?> + </div class="btn-group"> + <?xjs } ?> + + <script type="text/javascript"> + registerEventListener('forum', function (e) { + const data = JSON.parse(e.data); + if (data.type != 'threads') return; + onThreadStats(data.data); + }, { + threads: '<? Request.write_param("sub"); ?>', + offset: '<? write(offset); ?>', + page_size: '<? write(settings.page_size); ?>' + }); + </script> + +<?xjs } else if (Request.has_param('group') && typeof msg_area.grp_list[Request.get_param('group')] != 'undefined') { ?> + + <ol class="breadcrumb"> + <li> + <a href="./?page=<? Request.write_param('page'); ?>"> + <? locale.write('title'); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&group=<? Request.write_param('group'); ?>"> + <? write(msg_area.grp_list[Request.get_param('group')].name); ?> + </a> + </li> + </ol> + + <div id="forum-list-container" class="list-group"> + <?xjs const subs = listSubs(Request.get_param('group')); ?> + <?xjs subs.forEach(function (e) { ?> + <a href="./?page=<? Request.write_param('page'); ?>&sub=<? write(e.code); ?>" class="list-group-item striped"> + <h4><strong><? write(e.name); ?></strong></h4> + <span title="<? locale.write('badge_unread_messages'); ?>" class="badge <? write(e.scan_cfg&SCAN_CFG_NEW || e.scan_cfg&SCAN_CFG_YONLY ? 'scanned' : 'total'); ?>" id="badge-<? write(e.code); ?>"></span> + <p><? write(e.description); ?></p> + </a> + <?xjs }); ?> + </div> + + <?xjs if (is_user()) { ?> + <script type="text/javascript"> + registerEventListener('forum', function (e) { + const data = JSON.parse(e.data); + if (data.type != 'subs_unread') return; + onSubUnreadCount(data.data); + }, { subs_unread: '<? Request.write_param("group"); ?>' }); + </script> + <?xjs } ?> + +<?xjs } else { ?> + + <ol class="breadcrumb"> + <li> + <a href="./?page=<? Request.write_param('page'); ?>"><? locale.write('title'); ?></a> + </li> + </ol> + + <div id="forum-list-container" class="list-group"> + <?xjs const groups = listGroups(); ?> + <?xjs groups.forEach(function (e) { ?> + <a href="./?page=<? Request.write_param('page'); ?>&group=<? write(e.index); ?>" class="list-group-item striped"> + <h3><strong><? write(e.name); ?></strong></h3> + <span title="<? locale.write('badge_unread_messages'); ?>" class="badge ignored" id="badge-ignored-<? write(e.index); ?>"></span> + <span title="<? locale.write('badge_unread_messages'); ?>" class="badge scanned" id="badge-scanned-<? write(e.index); ?>"></span> + <p><? write(e.description); ?>: <? write(e.sub_count); ?> <? locale.write('sub_boards'); ?></p> + </a> + <?xjs }); ?> + </div> + + <?xjs if (is_user()) { ?> + <script type="text/javascript"> + registerEventListener('forum', function (e) { + const data = JSON.parse(e.data); + if (data.type != 'groups_unread') return; + onGroupUnreadCount(data.data); + }, { groups_unread: null }); + </script> + <?xjs } ?> + +<?xjs } ?> diff --git a/webv4/pages/.examples/002-files.xjs b/webv4/pages/.examples/002-files.xjs new file mode 100644 index 0000000000000000000000000000000000000000..b0e510aaa014f991db9bd8d9120349d84ee10850 --- /dev/null +++ b/webv4/pages/.examples/002-files.xjs @@ -0,0 +1,130 @@ +<!--Files--> + +<?xjs + load(settings.web_lib + 'request.js'); + load(settings.web_lib + 'files.js'); + locale.section = 'page_files'; + if (Request.has_param('dir') && file_area.dir[Request.get_param('dir')]) { +?> + <ol class="breadcrumb"> + <li> + <a href="./?page=<? Request.write_param('page'); ?>"> + <? locale.write('title'); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&library=<? write(file_area.dir[Request.get_param('dir')].lib_index); ?>"> + <? write(file_area.dir[Request.get_param('dir')].lib_name); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&dir=<? Request.write_param('dir'); ?>"> + <? Request.write_param('dir'); ?> + </a> + </li> + </ol> + + <?xjs function writeFileDetails(file) { ?> + <a href="./api/files.ssjs?call=download-file&dir=<? Request.write_param('dir'); ?>&file=<? write(file.name); ?>" target="_blank" class="list-group-item striped" data-file-list-element data-size="<? write(file._size); ?>" data-uploaded="<? write(file.uldate); ?>" data-name="<? write(file.name); ?>"> + <strong><? write(file.name); ?></strong> (<? write(file.size); ?>) + <p><em>Uploaded <? write(system.timestr(file.uldate)); ?></em></p> + <?xjs if (typeof file.extdesc === 'undefined') { ?> + <p><? write(file.desc); ?></p> + <?xjs } else if (file.extdesc.search(/(\x1B\[|[\xA8-\xFE])/) > -1) { ?> + <pre class="ansi"><? write(html_encode(file.extdesc, true, false, true, true)); ?></pre> + <?xjs } else { ?> + <pre class="list"><? write(file.extdesc.replace(/[^\r,\n\x20-\x7E]/g, '')); ?></pre> + <?xjs } ?> + </a> + <?xjs } ?> + + <div class="clearfix" style="margin-bottom:1em;"> + <div class="dropdown pull-right"> + <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + Sort by <span class="caret"></span> + </button> + <ul class="dropdown-menu dropdown-menu-right"> + <li class="text-right"><a href="#" onclick="file_sort('data-uploaded', true)">Date Uploaded <span class="glyphicon glyphicon-chevron-up" aria-hidden="true"></span></a></li> + <li class="text-right"><a href="#" onclick="file_sort('data-uploaded', false)">Date Uploaded <span class="glyphicon glyphicon-chevron-down" aria-hidden="true"></span></a></li> + <li class="text-right"><a href="#" onclick="file_sort('data-name', true)">Name <span class="glyphicon glyphicon-chevron-up" aria-hidden="true"></span></a></li> + <li class="text-right"><a href="#" onclick="file_sort('data-name', false)">Name <span class="glyphicon glyphicon-chevron-down" aria-hidden="true"></span></a></li> + <li class="text-right"><a href="#" onclick="file_sort('data-size', true)">Size <span class="glyphicon glyphicon-chevron-up" aria-hidden="true"></span></a></li> + <li class="text-right"><a href="#" onclick="file_sort('data-size', false)">Size <span class="glyphicon glyphicon-chevron-down" aria-hidden="true"></span></a></li> + </ul> + </div> + </div> + <div id="file-list-container" class="list-group"> + <?xjs listFiles(Request.get_param('dir')).forEach(writeFileDetails); ?> + </div> + +<?xjs } else if (Request.has_param('library') && file_area.lib_list[Request.get_param('library')]) { ?> + + <ol class="breadcrumb"> + <li> + <a href="./?page=<? Request.write_param('page'); ?>"> + <? locale.write('title'); ?> + </a> + </li> + <li> + <a href="./?page=<? Request.write_param('page'); ?>&library=<? Request.write_param('library'); ?>"> + <? write(file_area.lib_list[Request.get_param('library')].name); ?> + </a> + </li> + </ol> + + + <?xjs function writeDirectory(dir) { ?> + <a href="./?page=<? Request.write_param('page'); ?>&dir=<? write(dir.dir.code); ?>" class="list-group-item striped"> + <h4><strong><? write(dir.dir.name); ?></strong></h4> + <p> + <? write(dir.dir.description); ?>: + <? write(dir.fileCount); ?> + <? locale.write(dir.fileCount === 1 ? 'stat_suffix_file' : 'stat_suffix_files'); ?> + </p> + </a> + <?xjs } ?> + + <div id="file-list-container" class="list-group"> + <?xjs listDirectories(Request.get_param('library')).forEach(writeDirectory); ?> + </div> + +<?xjs } else { ?> + + <ol class="breadcrumb"> + <li> + <a href="./?page=<? Request.write_param('page'); ?>"><? locale.write('title'); ?></a> + </li> + </ol> + + <?xjs function writeLibrary(library) { ?> + <a href="./?page=<? Request.write_param('page'); ?>&library=<? write(library.index); ?>" class="list-group-item striped"> + <h3><strong><? write(library.name); ?></strong></h3> + <p> + <? write(library.description); ?>: + <? write(library.dir_list.length); ?> + <? locale.write(library.dir_list.length === 1 ? 'stat_suffix_directory' : 'stat_suffix_directories'); ?> + </p> + </a> + <?xjs } ?> + + <div id="file-list-container" class="list-group"> + <?xjs listLibraries().forEach(writeLibrary); ?> + </div> + +<?xjs } ?> + +<script type="text/javascript"> + function file_sort(field, ascending) { + const list = Array.from(document.querySelectorAll('a[data-file-list-element]')).sort((a, b) => { + if (a.getAttribute(field) == b.getAttribute(field)) return 0; + if (a.getAttribute(field) > b.getAttribute(field)) { + return ascending ? 1 : -1 + } else { + return ascending ? -1 : 1 + } + }); + const flc = document.getElementById('file-list-container'); + flc.innerHTML = ''; + list.forEach(e => flc.appendChild(e)); + } +</script> diff --git a/webv4/pages/.examples/003-games.xjs b/webv4/pages/.examples/003-games.xjs new file mode 100644 index 0000000000000000000000000000000000000000..9f6ae7423737a8c2122bd22c84a48cb127478bc0 --- /dev/null +++ b/webv4/pages/.examples/003-games.xjs @@ -0,0 +1,96 @@ +<!--Games--> +<?xjs + + load("ftelnethelper.js"); + load(settings.web_lib + 'ftelnet.js'); + + if (typeof settings.xtrn_blacklist === 'string') { + settings.xtrn_blacklist = settings.xtrn_blacklist.toLowerCase().split(','); + } else { + settings.xtrn_blacklist = []; + } + + var xtrn = {}; + xtrn_area.sec_list.forEach(function (sec) { + if (!sec.can_access || sec.prog_list.length < 1) return; + if (settings.xtrn_blacklist.indexOf(sec.code.toLowerCase()) > -1) return; + var x = []; + sec.prog_list.forEach(function (prog) { + if (!prog.can_access || !prog.can_run) return; + if (settings.xtrn_blacklist.indexOf(prog.code.toLowerCase()) > -1) return; + x.push({ c : prog.code, n : prog.name }); + }); + if (x.length > 0) xtrn[sec.name] = x; + }); + +?> + +<style>.fTelnetStatusBar { display : none; }</style> + +<a name="fTelnet"></a> +<div id="fTelnetContainer" class="fTelnetContainer" style="margin-bottom:1em;"></div> + +<div id="xtrn-list" class="list-group"> + <div id="xtrn-list-template" class="list-group-item" style="display:none;"> + <h4></h4> + <ul class="nav nav-pills"> + <li id="xtrn-item-template" role="presentation" style="display:none;"> + <a href="#fTelnet"></a> + </li> + </ul> + </div> +</div> + +<?xjs write('<script id="fTelnetScript" src="//embed-v2.ftelnet.ca/js/ftelnet-loader.norip.noxfer.js?v=' + (new Date()).getTime() + '"></script>'); ?> +<script type="text/javascript"> + var wsp = <?xjs write(settings.wsp || GetWebSocketServicePort()); ?>; + var wssp = <?xjs write(settings.wssp || GetWebSocketServicePort(true)); ?>; + var Options = new fTelnetOptions(); + Options.BareLFtoCRLF = false; + Options.BitsPerSecond = 57600; + Options.ConnectionType = 'rlogin'; + Options.Emulation = 'ansi-bbs'; + Options.Enter = '\r'; + Options.Font = 'CP437'; + Options.ForceWss = false; + Options.Hostname = '<?xjs write(http_request.vhost); ?>'; + Options.LocalEcho = false; + Options.Port = location.protocol == 'https:' ? wssp : wsp; + Options.RLoginClientUsername = '<?xjs write(user.security.password); ?>'; + Options.RLoginServerUsername = '<?xjs write(user.alias); ?>'; + Options.ScreenColumns = 80; + Options.ScreenRows = 25; + Options.SplashScreen = Options.SplashScreen = '<?xjs write(get_splash()); ?>'; + Options.WebSocketUrlPath = '?Port=<?xjs write(GetRLoginPort()); ?>'; + var fTelnet = new fTelnetClient('fTelnetContainer', Options); + fTelnet.OnConnectionClose = function () { + window.location.reload(); + }; + + async function launchXtrn(code) { + await v4_get('./api/system.ssjs?call=set-xtrn-intent&code=' + code); + fTelnet._Options.RLoginTerminalType = 'xtrn=' + code; + fTelnet.Connect(); + } + + var xtrn = <?xjs write(JSON.stringify(xtrn)); ?>; + Object.keys(xtrn).forEach(function (x) { + var e = $('#xtrn-list-template').clone(); + $($(e).find('h4')[0]).text(x); + var ul = $($(e).find('ul')[0]); + xtrn[x].forEach(function (xx) { + var li = $('#xtrn-item-template').clone(); + var a = $(li).find('a')[0]; + $(a).text(xx.n); + $(a).click(function (evt) { + launchXtrn(xx.c); + }); + $(ul).append(li); + $(li).show(); + }); + $(e).append(ul); + $('#xtrn-list').append(e); + $(e).show(); + }); + +</script> diff --git a/webv4/pages/.examples/More/001-userlist.xjs b/webv4/pages/.examples/More/001-userlist.xjs new file mode 100644 index 0000000000000000000000000000000000000000..ea9772a34aa6e403d30fb8a4935a676f1ce92ee8 --- /dev/null +++ b/webv4/pages/.examples/More/001-userlist.xjs @@ -0,0 +1,202 @@ +<!--User List--> +<?xjs + + var pageSize = 500; + + // Uncomment/comment properties below to enable/disable list columns + // Rearrange to change order of appearance + var columns = { + // number : { name : "#", type : "number" }, + alias : { name : 'Alias', type : 'string' }, + // name : { name : "Name", type : "string" }, + // age : { name : "Age", type : "number" }, + // gender : { name : "Sex", type : "string" }, + location : { name : 'Location', type : 'string' }, + laston_date : { name : 'Last On', type : 'date' }, + // connection : { name : "Via", type : "string" }, + // firston_date : { name : "First On", type : "date" }, + // total_logons : { name : "Calls", type : "number" }, + // total_posts : { name : "Posts", type : "number" } + }; + + // Most people won't need to edit below this line + load('sbbsdefs.js'); + + if (typeof http_request.query.offset === 'undefined' || + isNaN(parseInt(http_request.query.offset[0])) || + parseInt(http_request.query.offset[0]) < 1 + ) { + var offset = 0; + } else { + var offset = parseInt(http_request.query.offset[0]); + } + + var url = format( + 'http://%s%s', + http_request.host, + http_request.request_string.split("&")[0] + ); + + function sortUser(a, b, sortOrder, type) { + if (type === 'string') { + a = a.toUpperCase(); + b = b.toUpperCase(); + ret = ( + a < b + ? (sortOrder === 'ascending' ? 1 : -1) + : ( a > b + ? (sortOrder === 'ascending' ? -1 : 1) + : 0 + ) + ); + } else if (type === 'number' || type === 'date') { + ret = ( + a < b + ? (sortOrder === 'ascending' ? -1 : 1) + : ( a > b + ? (sortOrder === 'ascending' ? 1 : -1) + : 0 + ) + ); + } + return ret; + } + + function sortUsers(a, b) { + var ret = 0; + if (typeof http_request.query.sortby !== 'undefined' && + typeof http_request.query.sortorder !== 'undefined' && + ( http_request.query.sortorder[0] === 'ascending' || + http_request.query.sortorder[0] === 'descending' + ) + ) { + var sortBy = http_request.query.sortby[0].toLowerCase(); + var sortOrder = http_request.query.sortorder[0].toLowerCase(); + for (var c in columns) { + if (sortBy != c) continue; + ret = sortUser(a[c], b[c], sortOrder, columns[c].type); + break; + } + } + return ret; + } + + function makeSortURLs(field, order) { + return format( + '<a class="icon" ' + + 'href="./?page=%s&sortby=%s&sortorder=ascending&offset=%s">' + + '<span class="glyphicon glyphicon-arrow-up"></span>' + + '</a>' + + '<a class="icon" ' + + 'href="./?page=%s&sortby=%s&sortorder=descending&offset=%s">' + + '<span class="glyphicon glyphicon-arrow-down"></span>' + + '</a>', + http_request.query.page[0], + field, + offset, + http_request.query.page[0], + field, + offset + ); + } + + function makePagerURLs() { + var ret = { previous : '', next : '' }; + if (offset > 1) { + ret.previous = format( + '<li><a href="./?page=%s&offset=%s">Previous</a></li>', + http_request.query.page[0], + Math.max(0, offset - pageSize) + ); + } + if (system.lastuser - offset > pageSize) { + ret.next = format( + '<li><a href="./?page=%s&offset=%s">Next</a></li>', + http_request.query.page[0], + Math.min( + offset + pageSize, offset + (system.lastuser - offset) + ) + ); + } + return ret; + } + + function copyProperties(source, dest) { + for (var property in source) { + if (( typeof source[property] === 'string' || + typeof source[property] === 'number' + ) && typeof columns[property] !== 'undefined' + ) { + dest[property] = source[property]; + } else if (property === 'stats') { + for (var stat in source.stats) { + if (typeof columns[stat] === 'undefined') continue; + dest[stat] = source.stats[stat]; + } + } + } + return dest; + } + + function loadUsers(offset, pageSize) { + var users = []; + var usr = new User(1); + for (var u = 1; u <= system.lastuser; u++) { + usr.number = u; + if (usr.settings&USER_DELETED || + usr.compare_ars('REST Q') || + usr.alias === 'Guest' || + usr.alias === settings.guest + ) { + continue; + } + users.push(copyProperties(usr, {})); + } + usr = undefined; + users.sort(sortUsers); + return users.slice(offset, offset + pageSize); + } + + function writeColumns() { + for (var c in columns) { + writeln('<th>' + columns[c].name + ' ' + makeSortURLs(c) + '</th>'); + } + } + + function writeRows(users) { + for (var u = 0; u < users.length; u++) { + writeln('<tr>'); + for (var c in columns) { + writeln( + '<td>' + + ( columns[c].type === 'date' + ? system.timestr(users[u][c]) + : users[u][c].toString() + ) + '</td>' + ); + } + writeln('</tr>'); + } + } + + var pager = makePagerURLs(); + +?> + +<div class="well well-sm"><h3>User List</h3></div> +<table class="table table-striped"> + <thead> + <tr> + <?xjs writeColumns(); ?> + </tr> + </thead> + <tbody> + <?xjs writeRows(loadUsers(offset, pageSize)); ?> + </tbody> +</table> + +<nav> + <ul class="pager"> + <?xjs writeln(pager.previous); writeln(pager.next); ?> + </ul> +</nav> diff --git a/webv4/pages/.examples/More/999-sbbslist.xjs b/webv4/pages/.examples/More/999-sbbslist.xjs new file mode 100644 index 0000000000000000000000000000000000000000..fc67babcffd75c66d22fd3a27d8c06a94dbe33ef --- /dev/null +++ b/webv4/pages/.examples/More/999-sbbslist.xjs @@ -0,0 +1,123 @@ +<!--HIDDEN:Synchronet BBS List--> + +<style> + .zoomedIn { + font-size : 10pt; + cursor : zoom-out; + line-height : 99%; + letter-spacing : -1px; + } + .zoomedOut { + font-size : 2pt; + cursor : zoom-in; + } + pre.ansi { + background-color : black; + } +</style> + +<script type="text/javascript"> + + function zoom(elem) { + if ($(elem).hasClass('zoomedIn')) { + $(elem).removeClass('zoomedIn'); + $(elem).addClass('zoomedOut'); + } else { + $(elem).removeClass('zoomedOut'); + $(elem).addClass('zoomedIn'); + } + } + +</script> + +<div class="well well-sm"><h3>Synchronet BBS List</h3></div> + +<div class="list-group" style="margin-top:1em;"> +<?xjs + + load('graphic.js'); + require('portdefs.js', 'standard_service_port'); + var lib = load({}, "sbbslist_lib.js"); + + function bbs_preview(bbs) { + var graphic=new Graphic(); + graphic.BIN = lib.decode_preview(bbs.preview); + writeln( + '<div class="pull-left" ' + + 'style="margin-right:5px;" ' + + 'title="Click to Zoom in">' + ); + write( + '<pre class="ansi zoomedOut" onclick="zoom(this)">' + ); + var html = graphic.HTML; + html = html.replace(/background-color: black;/g, ''); + html = html.replace(/\"color: #a8a8a8;/g, '"'); + html = html.replace(/\ style=\" \"/g, ''); + html = html.replace(/<span>([^<]*)<\/span>/g,'$1'); + write(html); + writeln('</pre>'); + writeln('</div>'); + } + + var list = lib.read_list(); + if (list === null) list = []; + lib.sort(list, "verify"); + + list.forEach( + function (e) { + var items = { + Location : (typeof e.location === 'string' ? e.location : ''), + Sysops : e.sysop.map(function (ee) { return ee.name; }).join(', '), + Services : e.service.map( + function (ee) { + if (!ee.protocol) + return ''; + var r = ee.protocol + ': ' + ee.address; + if (typeof ee.port === 'number' + && ee.port != standard_service_port[ee.protocol]) + r += ':' + ee.port; + if (ee.description !== undefined && ee.description.length > 0) + r += ' (' + ee.description + ')'; + return r; + } + ).join ('<br>'), + Networks : e.network.map( + function (ee) { + var r = ee.name; + if (typeof ee.address === 'string' && ee.address !== '') { + r += ' (' + ee.address + ')'; + } + return r; + } + ).join('<br>'), + Software : (typeof e.software !== 'string' ? '' : e.software) + + }; + writeln('<li class="list-group-item striped">'); + writeln('<p class="h4">'); + if (typeof e.web_site === 'string' && e.web_site !== '') { + writeln('<a href="http://' + e.web_site + '">' + e.name + '</a>'); + } else { + writeln(e.name); + } + writeln('</p>'); + if (e.preview) bbs_preview(e); + writeln('<div>' + e.description.join(' ') + '</div><p>'); + writeln('<table class="table table-condensed table-responsive">'); + Object.keys(items).forEach( + function (ee) { + if (items[ee].length < 1) return; + writeln( + '<tr><td>' + ee + '</td><td>' + items[ee] + '</td></tr>' + ); + } + ); + writeln('</table>'); + writeln('</li>'); + + } + ); + +?> +</div> diff --git a/webv4/pages/.examples/More/webctrl.ini b/webv4/pages/.examples/More/webctrl.ini new file mode 100644 index 0000000000000000000000000000000000000000..b5b2b7570adf3bb2f253bd4c2a85395e2aabfcfa --- /dev/null +++ b/webv4/pages/.examples/More/webctrl.ini @@ -0,0 +1,6 @@ +AccessRequirements = level 90 +Authorization = Digest + +[*userlist.xjs] +AccessRequirements = LEVEL 50 AND REST NOT G + diff --git a/webv4/pages/.examples/webctrl.ini b/webv4/pages/.examples/webctrl.ini new file mode 100644 index 0000000000000000000000000000000000000000..8593d5892e056d3979c5e5bd82c82d932cea8927 --- /dev/null +++ b/webv4/pages/.examples/webctrl.ini @@ -0,0 +1,6 @@ +AccessRequirements = level 90 +Authorization = Digest + +[*games.xjs] +AccessRequirements = LEVEL 50 AND REST NOT G + diff --git a/webv4/root/api/attachments.ssjs b/webv4/root/api/attachments.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..50411bb234927c8ca83bef374b1c1d5be6be21fb --- /dev/null +++ b/webv4/root/api/attachments.ssjs @@ -0,0 +1,63 @@ +require('sbbsdefs.js', 'SYS_CLOSED'); + +var settings = load('modopts.js', 'web'); + +load(settings.web_directory + '/lib/init.js'); +load(settings.web_lib + 'auth.js'); +load(settings.web_lib + 'mime-decode.js'); + +function barfOut(err) { + log(LOG_WARNING, err); + exit(); +} + +if (typeof http_request.query.sub === 'undefined' || + ( http_request.query.sub[0] !== 'mail' && + typeof msg_area.sub[http_request.query.sub[0]] === 'undefined' + ) +) { + barfOut('Invalid sub.'); +} + +var sub = http_request.query.sub[0]; + +if (typeof http_request.query.msg === 'undefined') { + barfOut('No message number provided.'); +} + +var id = parseInt(http_request.query.msg[0]); + +if (typeof http_request.query.cid !== 'undefined') { + var cid = http_request.query.cid[0]; +} else if (typeof http_request.query.filename !== 'undefined') { + var filename = http_request.query.filename[0]; +} else { + barfOut('No attachment specified.'); +} + +var msgBase = new MsgBase(sub); +if (!msgBase.open()) barfOut('Unable to open MsgBase ' + sub); + +var header = msgBase.get_msg_header(false, id); +if (header === null) barfOut('No such message.'); +if (typeof msgBase.cfg === 'undefined' && header.to_ext != user.number) { + barfOut('Not your message.'); +} + +var body = msgBase.get_msg_body(false, id, header); +if (body === null) barfOut('Cannot read message body!'); +msgBase.close(); + +if (typeof cid !== 'undefined') { + var att = mime_get_cid_attach(header, body, cid); +} else if (typeof filename !== 'undefined') { + var att = mime_get_attach(header, body, filename); +} + +if (typeof att != 'undefined') { + if (typeof att.content_type !== 'undefined') { + http_reply.header['Content-Type'] = att.content_type; + } + http_reply.header['Content-Length'] = att.body.length; + write(att.body); +} diff --git a/webv4/root/api/auth.ssjs b/webv4/root/api/auth.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..f0454aea47fa5232b4331ccaccc0aae7d1ebcc16 --- /dev/null +++ b/webv4/root/api/auth.ssjs @@ -0,0 +1,13 @@ +var settings = load('modopts.js', 'web'); + +load(settings.web_directory + '/lib/init.js'); +load(settings.web_lib + 'auth.js'); + +var response = JSON.stringify({ + authenticated: (user.alias !== settings.guest) +}); + +http_reply.header['Content-Type'] = 'application/json'; +http_reply.header['Content-Length'] = response.length; + +write(response); diff --git a/webv4/root/api/events.ssjs b/webv4/root/api/events.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..93d50b7191898590ec25995039174ede74a5b97b --- /dev/null +++ b/webv4/root/api/events.ssjs @@ -0,0 +1,58 @@ +require('sbbsdefs.js', 'SYS_CLOSED'); +var settings = load('modopts.js', 'web'); +load(settings.web_directory + '/lib/init.js'); +load(settings.web_lib + 'auth.js'); +load(settings.web_lib + 'request.js'); + +js.time_limit = 0; + +http_reply.header['Cache-Control'] = 'no-cache'; +http_reply.header['Content-type'] = 'text/event-stream'; +http_reply.header['X-Accel-Buffering'] = 'no'; // probably not needed by everyone (nginx) + +const keepalive = 15; +var last_send = 0; + +function ping() { + if (time() - last_send > keepalive) { + write(': ping\n\n'); + last_send = time(); + } +} + +function emit(obj) { + Object.keys(obj).forEach(function (e) { + write(e + ': ' + (typeof obj[e] == 'object' ? JSON.stringify(obj[e]) : obj[e]) + '\n'); + }); + write('\n'); + last_send = time(); +} + +const callbacks = {}; +if (file_isdir(settings.web_lib + 'events')) { + if (Array.isArray(http_request.query.subscribe)) { + http_request.query.subscribe.forEach(function (e) { + const base = file_getname(e).replace(file_getext(e), ''); + const script = settings.web_lib + 'events/' + base + '.js'; + try { + if (file_exists(script)) callbacks[e] = load({}, script); + } catch (err) { + log(LOG_ERR, 'Failed to load event module ' + e + ': ' + err); + } + }); + } +} + +ping(); +while (client.socket.is_connected) { + Object.keys(callbacks).forEach(function (e) { + try { + callbacks[e].cycle(); + } catch (err) { + log(LOG_ERR, 'Callback ' + e + ' failed: ' + err); + delete callbacks[e]; + } + }); + mswait(50); + ping(); +} diff --git a/webv4/root/api/files.ssjs b/webv4/root/api/files.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..00f08a3b732714f00fae881e94bea39bac5edbca --- /dev/null +++ b/webv4/root/api/files.ssjs @@ -0,0 +1,70 @@ +load('sbbsdefs.js'); +var settings = load('modopts.js', 'web'); + +load(settings.web_directory + '/lib/init.js'); +load(settings.web_lib + 'auth.js'); +require('filebase.js', 'FileBase'); + +var CHUNK_SIZE = 1024; + +var reply = {}; +if ((http_request.method === 'GET' || http_request.method === 'POST') && + typeof http_request.query.call !== 'undefined' && user.number > 0 +) { + + switch (http_request.query.call[0].toLowerCase()) { + case 'download-file': + if (typeof http_request.query.dir !== 'undefined' && + typeof file_area.dir[http_request.query.dir[0]] !== 'undefined' && + file_area.dir[http_request.query.dir[0]].lib_index >= 0 && + file_area.dir[http_request.query.dir[0]].index >= 0 && + file_area.dir[http_request.query.dir[0]].can_download && + typeof http_request.query.file !== 'undefined' + ) { + var dircode = file_area.dir[http_request.query.dir[0]].code; + var fileBase = new FileBase(dircode); + var file = null; + fileBase.some(function (e) { + if (e.base.toLowerCase() + '.' + e.ext.toLowerCase() !== http_request.query.file[0].toLowerCase()) { + return false; + } else if (typeof e.path !== 'undefined') { + file = e; + return true; + } + }); + if (file === null) { + reply.error = 'File not found'; + break; + } + if (!file_area.dir[dircode].is_exempt && file.credits > (user.security.credits + user.security.free_credits)) { + reply.error = 'Not enough credits to download this file'; + break; + } + http_reply.header['Content-Type'] = 'application/octet-stream'; + http_reply.header['Content-Disposition'] = 'attachment; filename="' + file.base + '.' + file.ext + '"'; + http_reply.header['Content-Encoding'] = 'binary'; + http_reply.header['Content-Length'] = file_size(file.path); + var f = new File(file.path); + f.open('rb'); + for (var n = 0; n < f.length; n += CHUNK_SIZE) { + var r = f.length - f.position; + write(f.read(r > CHUNK_SIZE ? CHUNK_SIZE : r)); + yield(false); + } + f.close(); + reply = false; + user.downloaded_file(dircode, file.path); + } + break; + default: + break; + } + +} + +if (!reply) exit(); + +reply = JSON.stringify(reply); +http_reply.header['Content-Type'] = 'application/json'; +http_reply.header['Content-Length'] = reply.length; +write(reply); diff --git a/webv4/root/api/forum.ssjs b/webv4/root/api/forum.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..8835437a2f2c8e31803fd16448c6b9a0a387ffa6 --- /dev/null +++ b/webv4/root/api/forum.ssjs @@ -0,0 +1,256 @@ +/* This script is an interface between HTTP clients and the functions defined + in web/lib/forum.js. A basic check for an authenticated, non-guest user + is done here; otherwise all permission checking is done at the function + level. */ + +var settings = load('modopts.js', 'web'); + +load(settings.web_directory + '/lib/init.js'); +load(settings.web_lib + 'auth.js'); +load(settings.web_lib + 'forum.js'); + +var reply = {}; + +// There must be an API call, and the user must not be a guest or unknown +if ((http_request.method === 'GET' || http_request.method === 'POST') && + typeof http_request.query.call !== 'undefined' +) { + + var handled = false; + + // Authenticated calls + if (user.number > 0 && user.alias !== settings.guest) { + + handled = true; + + switch(http_request.query.call[0].toLowerCase()) { + + case 'get-mail-unread-count': + reply.count = user.stats.mail_waiting; + break; + + case 'get-mail-body': + if (typeof http_request.query.number !== 'undefined') { + reply = getMailBody(http_request.query.number[0]); + } + break; + + case 'get-signature': + reply.signature = getSignature(); + break; + + case 'post-reply': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.body !== 'undefined' && + typeof http_request.query.pid !== 'undefined' + ) { + reply.success = postReply( + http_request.query.sub[0], + http_request.query.body[0], + Number(http_request.query.pid[0]) + ); + } else { + reply.success = false; + } + break; + + case 'post': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.to !== 'undefined' && + typeof http_request.query.subject !== 'undefined' && + typeof http_request.query.body !== 'undefined' + ) { + reply.success = postNew( + http_request.query.sub[0], + http_request.query.to[0], + http_request.query.subject[0], + http_request.query.body[0] + ); + } else { + reply.success = false; + } + break; + + case 'delete-message': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.number !== 'undefined' + ) { + reply.success = deleteMessage( + http_request.query.sub[0], + http_request.query.number[0] + ); + } else { + reply.success = false; + } + break; + + case 'delete-mail': + if (typeof http_request.query.number !== 'undefined') { + reply.success = deleteMail(http_request.query.number); + } else { + reply.success = false; + } + break; + + case 'set-scan-cfg': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.cfg !== 'undefined' + ) { + reply.success = setScanCfg( + http_request.query.sub[0], + http_request.query.cfg[0] + ); + } else { + reply.success = false; + } + break; + + case 'vote': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.id !== 'undefined' && + typeof http_request.query.up !== 'undefined' && + !(user.security.restrictions&UFLAG_V) + ) { + reply.success = voteMessage( + http_request.query.sub[0], + http_request.query.id[0], + http_request.query.up[0] + ); + } else { + reply.success = false; + } + break; + + case 'submit-poll-answers': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.id !== 'undefined' && + typeof http_request.query.answer !== 'undefined' + ) { + reply.success = submitPollAnswers( + http_request.query.sub[0], + http_request.query.id[0], + http_request.query.answer + ); + } + break; + + case 'submit-poll': + if (typeof http_request.query.subject !== 'undefined' && + typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.votes !== 'undefined' && + typeof http_request.query.results !== 'undefined' && + typeof http_request.query.answer !== 'undefined' + ) { + reply.success = postPoll( + http_request.query.sub[0], + http_request.query.subject[0], + http_request.query.votes[0], + http_request.query.results[0], + http_request.query.answer, + http_request.query.comment || [] + ); + } + break; + + default: + handled = false; + break; + + } + + } + + // Unauthenticated calls + if (!handled) { + + switch(http_request.query.call[0].toLowerCase()) { + + case 'get-thread-votes': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.id !== 'undefined' + ) { + var id = parseInt(http_request.query.id[0]); + if (!isNaN(id)) { + reply = getVotesInThread( + http_request.query.sub[0], + id + ); + } + } + break; + + case 'get-sub-votes': + if (typeof http_request.query.sub !== 'undefined') { + reply = getVotesInThreads(http_request.query.sub[0]); + } + break; + + case 'get-poll-results': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.id !== 'undefined' + ) { + reply = getUserPollData( + http_request.query.sub[0], + http_request.query.id[0] + ); + } + break; + + case 'list-groups': + reply = listGroups(); + break; + + case 'list-subs': + if (typeof http_request.query.group !== 'undefined') { + reply = listSubs(http_request.query.group[0]); + } + break; + + case 'list-threads': + if (typeof http_request.query.sub !== 'undefined' && + typeof http_request.query.offset !== 'undefined' + ) { + if (typeof http_request.query.count !== 'undefined') { + var count = http_request.query.count[0]; + } + reply = listThreads( + http_request.query.sub[0], + http_request.query.offset[0], + count || settings.page_size + ).threads; + } + break; + + case 'get-group-unread-count': + if (typeof http_request.query.group !== 'undefined') { + http_request.query.group.forEach( + function(group) { + reply[group] = getGroupUnreadCount(group); + } + ); + } + break; + + case 'get-sub-unread-count': + if (typeof http_request.query.sub !== 'undefined') { + http_request.query.sub.forEach( + function(sub) { + reply[sub] = getSubUnreadCount(sub); + } + ); + } + break; + + default: + break; + + } + + } + +} + +reply = JSON.stringify(reply); +http_reply.header['Content-Type'] = 'application/json'; +http_reply.header['Content-Length'] = reply.length; +write(reply); diff --git a/webv4/root/api/github.ssjs b/webv4/root/api/github.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..48a5d889b6b6c2a2ddd91bfca4d6b66570c465ee --- /dev/null +++ b/webv4/root/api/github.ssjs @@ -0,0 +1,83 @@ +/* Posts a notification message to a list of sub-boards when commits are made + to a GitHub repository. + + - In your repository, go to Settings -> Webhooks -> Add webhook + - Payload URL: https://your-bbs-hostname/api/github.ssjs + - Content-type: application/json + - Secret: some-secret-passphrase-here + - Which events: Just the push event + - Active: checked + - Add webhook + + - On your BBS server, edit ctrl/modopts.ini + - Add a [github-notify] section + - For each repository you wish to configure, add a key-value pair like: + - my-repository-name=secret,SUB + - Where 'secret' is the secret passphrase as configured above + - Where 'SUB' is the internal code of a sub-board to post to + - Multiple subs can be specified, separated by commas +*/ + +require('sbbsdefs.js', 'SYS_CLOSED'); +require('hmac.js', 'hmac_sha1'); +var options = load({}, 'modopts.js', 'github_notify'); +load(system.exec_dir + '../web/lib/init.js'); + +function b2h(str) { + return str.split('').map(function (e) { + var n = ascii(e).toString(16); + return n.length < 2 ? ('0' + n) : n; + }).join(''); +} + +function verify_signature(key, payload, hash) { + return (b2h(hmac_sha1(key, payload)) === hash); +} + +try { + var hash = http_request.header['x-hub-signature'].split('=')[1]; + var payload = JSON.parse(http_request.post_data); + if (typeof options[payload.repository.name] === 'undefined') { + throw 'Unknown repository ' + payload.repository.name; + } + var subs = options[payload.repository.name].split(','); + var secret = subs.shift(); + if (!verify_signature(secret, http_request.post_data, hash)) { + throw 'GitHub signature mismatch'; + } +} catch (err) { + log(LOG_ERR, err); + exit(); +} + +var header = { + from: payload.head_commit.author.username, + to: 'All', + subject: 'Changes to ' + payload.repository.full_name +}; + +var body = payload.commits.map(function (e) { + const ret = [ 'Commit ID: ' + e.id, 'Author: ' + e.author.username ]; + if (e.added.length) ret.push('Added: ' + e.added.join(', ')); + if (e.removed.length) ret.push('Removed: ' + e.removed.join(', ')); + if (e.modified.length) ret.push('Modified: ' + e.modified.join(', ')); + ret.push('', 'Message:', e.message, '', 'Commit URL:', e.url, ''); + return ret.join('\r\n'); +}).concat('Repository URL: ' + payload.repository.url).join('\r\n\r\n'); + +subs.forEach(function (sub) { + try { + const mb = new MsgBase(sub); + if (!mb.open()) throw 'Failed to open message base ' + sub; + if (!mb.save_msg(header, body)) throw 'Failed to save message'; + mb.close(); + } catch (err) { + log(LOG_ERR, err); + } +}); + +var _tf = new File(system.data_dir + '/github_notify'); +if (_tf.open('w')) { + _tf.write(body); + _tf.close(); +} diff --git a/webv4/root/api/register.ssjs b/webv4/root/api/register.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..350a084e627c6db3461882385638cb0ba0fb74c0 --- /dev/null +++ b/webv4/root/api/register.ssjs @@ -0,0 +1,161 @@ +require('sbbsdefs.js', 'SYS_CLOSED'); +var settings = load('modopts.js', 'web'); +load(settings.web_directory + '/lib/init.js'); +load(settings.web_lib + 'auth.js'); +load(settings.web_lib + 'request.js'); + +if (user.alias !== settings.guest) exit(); +if (!settings.user_registration) exit(); + +var MIN_ALIAS = 1, + MIN_REALNAME = 3, + MIN_NETMAIL = 6, + MIN_LOCATION = 4, + MIN_ADDRESS = 6, + MIN_PHONE = 3; + +var reply = { + errors : [], + userNumber : 0 +}; + +var prepUser = { + alias : '', + handle : '', + name : '', + netmail : '', + address : '', + zipcode : '', + location : '', + phone : '', + birthdate : '', + gender : '', + password : '' +}; + +function required(mask) { + return (system.new_user_questions&mask); +} + +function clean_param(param) { + if (Request.has_param(param)) return Request.get_param(param).replace(/[\x00-\x19\x7F]/g, ''); + return ""; +} + +function in_range(n, min, max) { + return n >= min && n <= max; +} + +function valid_param(p, min, max) { + if (!Request.has_param(p)) return false; + if (!in_range(clean_param(p).length, min, max)) return false; + return true; +} + +function is_dupe(field, str) { + return system.matchuserdata(field, str) !== 0; +} + +function newUser() { + var usr = system.new_user(prepUser.alias); + if (typeof usr === 'number') { + reply.errors.push(locale.strings.api_register.error_failed); + return; + } + log(LOG_INFO, format(locale.strings.api_register.log_success, usr.number)); + usr.security.password = prepUser.password; + for (var property in prepUser) { + if (property === 'alias' || property === 'password') continue; + usr[property] = prepUser[property]; + } + if (typeof settings.newuser_level == 'number' && settings.newuser_level >= 0 && settings.newuser_level <= 99) { + usr.security.level = settings.newuser_level; + } + ['flags1', 'flags2', 'flags3', 'flags4', 'exemptions', 'restrictions'].forEach(function (e) { + const k = 'newuser_' + e; + if (settings[k] && settings[k].search(/[^a-zA-Z]/) < 0) { + usr.security[e] = '+' + settings[k]; + } + }); + reply.userNumber = usr.number; +} + +// See if the hidden form fields were filled +if (Request.get_param('send-me-free-stuff') != '' || Request.get_param('subscribe-to-newsletter') !== undefined) { + log(LOG_WARNING, locale.strings.api_register.log_bot_attempt); + exit(); +} + +if (system.newuser_password !== '' && (!Request.has_param('newuser-password') || Request.get_param('newuser-password') != system.newuser_password)) { + reply.errors.push(locale.strings.api_register.error_bad_syspass); +} + +if (!valid_param('alias', MIN_ALIAS, LEN_ALIAS) || !system.check_name(clean_param('alias'))) { + reply.errors.push(locale.strings.api_register.error_invalid_alias); +} else if (system.matchuser(clean_param('alias')) > 0) { + reply.errors.push(locale.strings.api_register.error_alias_taken); +} else { + prepUser.alias = clean_param('alias'); + prepUser.handle = clean_param('alias'); +} + +if (!Request.has_param('password1') || !Request.has_param('password2') || clean_param('password1') != clean_param('password2')) { + reply.errors.push(locale.strings.api_register.error_password_mismatch); +} else if (!in_range(clean_param('password1').length, system.min_password_length, system.max_password_length)) { + reply.errors.push(format(locale.strings.api_register.error_password_length, system.min_password_length, system.max_password_length)); +} else { + prepUser.password = clean_param('password1'); +} + +if (valid_param('netmail', MIN_NETMAIL, LEN_NETMAIL)) { + prepUser.netmail = clean_param('netmail'); +} else if (!required(UQ_NONETMAIL)) { + reply.errors.push(locale.strings.api_register.error_email_required); +} + +if (valid_param('realname', MIN_REALNAME, LEN_NAME) && (!required(UQ_DUPREAL) || !is_dupe(U_NAME, clean_param('realname')))) { + prepUser.name = clean_param('realname'); +} else if (required(UQ_REALNAME)) { + reply.errors.push(locale.strings.api_register.error_invalid_name); +} + +// UQ_NOCOMMAS should be checked and acted on +if (valid_param('location', MIN_LOCATION, LEN_LOCATION)) { + prepUser.location = clean_param('location'); +} else if (required(UQ_LOCATION)) { + reply.errors.push(locale.strings.api_register.error_invalid_location); +} + +if (valid_param('address', MIN_ADDRESS, LEN_ADDRESS) && valid_param('zipcode', 3, LEN_ADDRESS)) { + prepUser.address = clean_param('address'); + prepUser.zipcode = clean_param('zipcode'); +} else if (required(UQ_ADDRESS)) { + reply.errors.push(locale.strings.api_register.error_invalid_street_address); +} + +// Validate? Who cares? +if (valid_param('phone', MIN_PHONE, LEN_PHONE)) { + prepUser.phone = clean_param('phone'); +} else if (required(UQ_PHONE)) { + reply.errors.push(locale.strings.api_register.error_invalid_phone); +} + +if (valid_param('gender', 1, 1) && ['X', 'M', 'F', 'O'].indexOf(Request.get_param('gender')) > -1) { + prepUser.birthdate = clean_param('gender'); +} else if (required(UQ_SEX)) { + reply.errors.push(locale.strings.api_register.error_invalid_gender); +} + +if (Request.has_param('birth') && clean_param('birth').match(/^\d\d\/\d\d\/\d\d$/) !== null) { + // Should really test for valid date (and date format per system config) + prepUser.birthdate = clean_param('birth'); +} else if (required(UQ_BIRTH)) { + reply.errors.push(locale.strings.api_register.error_invalid_birthdate); +} + +if (reply.errors.length < 1) newUser(); + +reply = JSON.stringify(reply); +http_reply.header['Content-Type'] = 'application/json'; +http_reply.header['Content-Length'] = reply.length; +write(reply); diff --git a/webv4/root/api/sbbsimsg.ssjs b/webv4/root/api/sbbsimsg.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..0c3eba0bd917be1f94ea824205afe768fa43b05c --- /dev/null +++ b/webv4/root/api/sbbsimsg.ssjs @@ -0,0 +1,28 @@ + +require('sbbsdefs.js', 'SYS_CLOSED'); // Is this actually used? +require('nodedefs.js', 'NODE_WFC'); // Is this actually used? +var settings = load('modopts.js', 'web'); +load(settings.web_directory + '/lib/init.js'); +load(settings.web_lib + 'auth.js'); +var sbbsimsg = load({}, "sbbsimsg_lib.js"); + +var reply = {}; + +if (user.number > 0 && user.alias != settings.guest + && typeof http_request.query.call != 'undefined' + && http_request.query.call[0] == 'send_telegram' + && typeof http_request.query.host != 'undefined' + && typeof http_request.query.username != 'undefined' + && typeof http_request.query.message != 'undefined' +) { + sbbsimsg.send_msg( + http_request.query.username[0] + '@' + http_request.query.host[0], + http_request.query.message[0], + user.alias + ); +} + +reply = JSON.stringify(reply); +http_reply.header['Content-Type'] = 'application/json'; +http_reply.header['Content-Length'] = reply.length; +write(reply); diff --git a/webv4/root/api/system.ssjs b/webv4/root/api/system.ssjs new file mode 100644 index 0000000000000000000000000000000000000000..1ed5bc100546144f8f08ee5f83acea2568dfdc26 --- /dev/null +++ b/webv4/root/api/system.ssjs @@ -0,0 +1,97 @@ +require('sbbsdefs.js', 'SYS_CLOSED'); +require('nodedefs.js', 'NODE_WFC'); +var settings = load('modopts.js', 'web'); + +load(settings.web_directory + '/lib/init.js'); +load(settings.web_lib + 'auth.js'); + +var reply = {}; + +if ((http_request.method === 'GET' || http_request.method === 'POST') && + typeof http_request.query.call !== 'undefined' && + user.number > 0 +) { + + switch (http_request.query.call[0]) { + + case 'node-list': + var usr = new User(1); + reply = system.node_list.reduce(function (a, c, i) { + if (c.status !== 3) return a; + usr.number = c.useron; + a.push({ + node: i, + status: format(NodeStatus[c.status], c.aux, c.extaux), + action: format(NodeAction[c.action], c.aux, c.extaux), + user: usr.alias, + connection: usr.connection + }); + return a; + }, []); + for (var un = 1; un < system.lastuser; un++) { + usr.number = un; + if (usr.connection !== 'HTTP') continue; + if (usr.alias === settings.guest) continue; + if (usr.settings&USER_QUIET) continue; + if (usr.logontime < time() - settings.inactivity) continue; + var webAction = getSessionValue(usr.number, 'action'); + if (webAction === null) continue; + reply.push({ + status: '', + action: locale.strings.api_system.nodelist_action_prefix + ' ' + webAction, + user: usr.alias, + connection: 'W' + }); + } + usr = undefined; + break; + + case 'send-telegram': + if (user.alias === settings.guest) break; + if (typeof http_request.query.user === 'undefined') break; + if (typeof http_request.query.telegram === 'undefined' || + http_request.query.telegram[0] === '' + ) { + break; + } + if (http_request.query.telegram[0].length > + settings.maximum_telegram_length + ) { + break; + } + var un = system.matchuser(http_request.query.user[0]); + if (un < 1) break; + system.put_telegram( + un, format( + locale.strings.api_system.telegram_header_format, + user.alias, (new Date()).toLocaleString() + ) + '\r\n' + utf8_decode(http_request.query.telegram[0]) + '\r\n' + ); + break; + + case 'get-telegram': + if (user.alias === settings.guest) break; + reply.telegram = system.get_telegram(user.number); + break; + + case 'set-xtrn-intent': + if (user.alias === settings.guest) break; + if (typeof http_request.query.code === 'undefined') break; + if (http_request.query.code[0].length > 8) break; + if (typeof xtrn_area.prog[http_request.query.code[0]] === 'undefined') { + break; + } + setSessionValue(user.number, 'xtrn', http_request.query.code[0]); + break; + + default: + break; + + } + +} + +reply = JSON.stringify(reply); +http_reply.header['Content-Type'] = 'application/json'; +http_reply.header['Content-Length'] = reply.length; +write(reply); diff --git a/webv4/root/bootstrap/css/bootstrap-theme.css b/webv4/root/bootstrap/css/bootstrap-theme.css new file mode 100644 index 0000000000000000000000000000000000000000..c19cd5c4ba7af19b770268f642cad1fe4952d9b2 --- /dev/null +++ b/webv4/root/bootstrap/css/bootstrap-theme.css @@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/webv4/root/bootstrap/css/bootstrap-theme.css.map b/webv4/root/bootstrap/css/bootstrap-theme.css.map new file mode 100644 index 0000000000000000000000000000000000000000..753531147d9b355f58d950b269b58f30915bbbcc --- /dev/null +++ b/webv4/root/bootstrap/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/webv4/root/bootstrap/css/bootstrap-theme.min.css b/webv4/root/bootstrap/css/bootstrap-theme.min.css new file mode 100644 index 0000000000000000000000000000000000000000..61358b13d045694a6963c5334eab2831e53978ac --- /dev/null +++ b/webv4/root/bootstrap/css/bootstrap-theme.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file diff --git a/webv4/root/bootstrap/css/bootstrap.css b/webv4/root/bootstrap/css/bootstrap.css new file mode 100644 index 0000000000000000000000000000000000000000..680e7687862ea56dbd8f7717b23eeacc6e0de78c --- /dev/null +++ b/webv4/root/bootstrap/css/bootstrap.css @@ -0,0 +1,6800 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 3; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/webv4/root/bootstrap/css/bootstrap.css.map b/webv4/root/bootstrap/css/bootstrap.css.map new file mode 100644 index 0000000000000000000000000000000000000000..9f60ed2b1bd4ed75d3b2861366a82bd678404963 --- /dev/null +++ b/webv4/root/bootstrap/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACG5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDDD;ACQD;EACE,UAAA;CDND;ACmBD;;;;;;;;;;;;;EAaE,eAAA;CDjBD;ACyBD;;;;EAIE,sBAAA;EACA,yBAAA;CDvBD;AC+BD;EACE,cAAA;EACA,UAAA;CD7BD;ACqCD;;EAEE,cAAA;CDnCD;AC6CD;EACE,8BAAA;CD3CD;ACmDD;;EAEE,WAAA;CDjDD;AC2DD;EACE,0BAAA;CDzDD;ACgED;;EAEE,kBAAA;CD9DD;ACqED;EACE,mBAAA;CDnED;AC2ED;EACE,eAAA;EACA,iBAAA;CDzED;ACgFD;EACE,iBAAA;EACA,YAAA;CD9ED;ACqFD;EACE,eAAA;CDnFD;AC0FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CDxFD;AC2FD;EACE,YAAA;CDzFD;AC4FD;EACE,gBAAA;CD1FD;ACoGD;EACE,UAAA;CDlGD;ACyGD;EACE,iBAAA;CDvGD;ACiHD;EACE,iBAAA;CD/GD;ACsHD;EACE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,UAAA;CDpHD;AC2HD;EACE,eAAA;CDzHD;ACgID;;;;EAIE,kCAAA;EACA,eAAA;CD9HD;ACgJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CD9ID;ACqJD;EACE,kBAAA;CDnJD;AC6JD;;EAEE,qBAAA;CD3JD;ACsKD;;;;EAIE,2BAAA;EACA,gBAAA;CDpKD;AC2KD;;EAEE,gBAAA;CDzKD;ACgLD;;EAEE,UAAA;EACA,WAAA;CD9KD;ACsLD;EACE,oBAAA;CDpLD;AC+LD;;EAEE,+BAAA;KAAA,4BAAA;UAAA,uBAAA;EACA,WAAA;CD7LD;ACsMD;;EAEE,aAAA;CDpMD;AC4MD;EACE,8BAAA;EACA,gCAAA;KAAA,6BAAA;UAAA,wBAAA;CD1MD;ACmND;;EAEE,yBAAA;CDjND;ACwND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDtND;AC8ND;EACE,UAAA;EACA,WAAA;CD5ND;ACmOD;EACE,eAAA;CDjOD;ACyOD;EACE,kBAAA;CDvOD;ACiPD;EACE,0BAAA;EACA,kBAAA;CD/OD;ACkPD;;EAEE,WAAA;CDhPD;AACD,qFAAqF;AElFrF;EA7FI;;;IAGI,mCAAA;IACA,uBAAA;IACA,oCAAA;YAAA,4BAAA;IACA,6BAAA;GFkLL;EE/KC;;IAEI,2BAAA;GFiLL;EE9KC;IACI,6BAAA;GFgLL;EE7KC;IACI,8BAAA;GF+KL;EE1KC;;IAEI,YAAA;GF4KL;EEzKC;;IAEI,uBAAA;IACA,yBAAA;GF2KL;EExKC;IACI,4BAAA;GF0KL;EEvKC;;IAEI,yBAAA;GFyKL;EEtKC;IACI,2BAAA;GFwKL;EErKC;;;IAGI,WAAA;IACA,UAAA;GFuKL;EEpKC;;IAEI,wBAAA;GFsKL;EEhKC;IACI,cAAA;GFkKL;EEhKC;;IAGQ,kCAAA;GFiKT;EE9JC;IACI,uBAAA;GFgKL;EE7JC;IACI,qCAAA;GF+JL;EEhKC;;IAKQ,kCAAA;GF+JT;EE5JC;;IAGQ,kCAAA;GF6JT;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,oBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,eAAA;CH8O9C;AG7OmC;EAAW,eAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIthCD;ECgEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AIxhCD;;EC6DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIthCD;EACE,gBAAA;EACA,8CAAA;CJwhCD;AIrhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,0BAAA;CJuhCD;AInhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJqhCD;AI/gCD;EACE,eAAA;EACA,sBAAA;CJihCD;AI/gCC;;EAEE,eAAA;EACA,2BAAA;CJihCH;AI9gCC;EErDA,qBAAA;EAEA,2CAAA;EACA,qBAAA;CNqkCD;AIxgCD;EACE,UAAA;CJ0gCD;AIpgCD;EACE,uBAAA;CJsgCD;AIlgCD;;;;;EGvEE,eAAA;EACA,gBAAA;EACA,aAAA;CPglCD;AItgCD;EACE,mBAAA;CJwgCD;AIlgCD;EACE,aAAA;EACA,wBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EC6FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EEvLR,sBAAA;EACA,gBAAA;EACA,aAAA;CPgmCD;AIlgCD;EACE,mBAAA;CJogCD;AI9/BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJggCD;AIx/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJ0/BD;AIl/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJo/BH;AIz+BD;EACE,gBAAA;CJ2+BD;AQloCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR8oCD;AQnpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,oBAAA;EACA,eAAA;EACA,eAAA;CRoqCH;AQhqCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRqqCD;AQzqCD;;;;;;;;;;;;EAQI,eAAA;CR+qCH;AQ5qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRirCD;AQrrCD;;;;;;;;;;;;EAQI,eAAA;CR2rCH;AQvrCD;;EAAU,gBAAA;CR2rCT;AQ1rCD;;EAAU,gBAAA;CR8rCT;AQ7rCD;;EAAU,gBAAA;CRisCT;AQhsCD;;EAAU,gBAAA;CRosCT;AQnsCD;;EAAU,gBAAA;CRusCT;AQtsCD;;EAAU,gBAAA;CR0sCT;AQpsCD;EACE,iBAAA;CRssCD;AQnsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRqsCD;AQhsCD;EAAA;IAFI,gBAAA;GRssCD;CACF;AQ9rCD;;EAEE,eAAA;CRgsCD;AQ7rCD;;EAEE,0BAAA;EACA,cAAA;CR+rCD;AQ3rCD;EAAuB,iBAAA;CR8rCtB;AQ7rCD;EAAuB,kBAAA;CRgsCtB;AQ/rCD;EAAuB,mBAAA;CRksCtB;AQjsCD;EAAuB,oBAAA;CRosCtB;AQnsCD;EAAuB,oBAAA;CRssCtB;AQnsCD;EAAuB,0BAAA;CRssCtB;AQrsCD;EAAuB,0BAAA;CRwsCtB;AQvsCD;EAAuB,2BAAA;CR0sCtB;AQvsCD;EACE,eAAA;CRysCD;AQvsCD;ECrGE,eAAA;CT+yCD;AS9yCC;;EAEE,eAAA;CTgzCH;AQ3sCD;ECxGE,eAAA;CTszCD;ASrzCC;;EAEE,eAAA;CTuzCH;AQ/sCD;EC3GE,eAAA;CT6zCD;AS5zCC;;EAEE,eAAA;CT8zCH;AQntCD;EC9GE,eAAA;CTo0CD;ASn0CC;;EAEE,eAAA;CTq0CH;AQvtCD;ECjHE,eAAA;CT20CD;AS10CC;;EAEE,eAAA;CT40CH;AQvtCD;EAGE,YAAA;EE3HA,0BAAA;CVm1CD;AUl1CC;;EAEE,0BAAA;CVo1CH;AQztCD;EE9HE,0BAAA;CV01CD;AUz1CC;;EAEE,0BAAA;CV21CH;AQ7tCD;EEjIE,0BAAA;CVi2CD;AUh2CC;;EAEE,0BAAA;CVk2CH;AQjuCD;EEpIE,0BAAA;CVw2CD;AUv2CC;;EAEE,0BAAA;CVy2CH;AQruCD;EEvIE,0BAAA;CV+2CD;AU92CC;;EAEE,0BAAA;CVg3CH;AQpuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRsuCD;AQ9tCD;;EAEE,cAAA;EACA,oBAAA;CRguCD;AQnuCD;;;;EAMI,iBAAA;CRmuCH;AQ5tCD;EACE,gBAAA;EACA,iBAAA;CR8tCD;AQ1tCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR6tCD;AQ/tCD;EAKI,sBAAA;EACA,kBAAA;EACA,mBAAA;CR6tCH;AQxtCD;EACE,cAAA;EACA,oBAAA;CR0tCD;AQxtCD;;EAEE,wBAAA;CR0tCD;AQxtCD;EACE,kBAAA;CR0tCD;AQxtCD;EACE,eAAA;CR0tCD;AQjsCD;EAAA;IAVM,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGtNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXs6CC;EQ3sCH;IAHM,mBAAA;GRitCH;CACF;AQxsCD;;EAGE,aAAA;EACA,kCAAA;CRysCD;AQvsCD;EACE,eAAA;EA9IqB,0BAAA;CRw1CtB;AQrsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRusCD;AQlsCG;;;EACE,iBAAA;CRssCL;AQhtCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRksCH;AQhsCG;;;EACE,uBAAA;CRosCL;AQ5rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,gCAAA;EACA,eAAA;EACA,kBAAA;CR8rCD;AQxrCG;;;;;;EAAW,YAAA;CRgsCd;AQ/rCG;;;;;;EACE,uBAAA;CRssCL;AQhsCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRksCD;AYx+CD;;;;EAIE,+DAAA;CZ0+CD;AYt+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZw+CD;AYp+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;EACA,uDAAA;UAAA,+CAAA;CZs+CD;AY5+CD;EASI,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,yBAAA;UAAA,iBAAA;CZs+CH;AYj+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,sBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;CZm+CD;AY9+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZk+CH;AY79CD;EACE,kBAAA;EACA,mBAAA;CZ+9CD;AazhDD;ECHE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;Cd+hDD;AazhDC;EAAA;IAFE,aAAA;Gb+hDD;CACF;Aa3hDC;EAAA;IAFE,aAAA;GbiiDD;CACF;Aa7hDD;EAAA;IAFI,cAAA;GbmiDD;CACF;Aa1hDD;ECvBE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;CdojDD;AavhDD;ECvBE,mBAAA;EACA,oBAAA;CdijDD;AejjDG;EACE,mBAAA;EAEA,gBAAA;EAEA,mBAAA;EACA,oBAAA;CfijDL;AejiDG;EACE,YAAA;CfmiDL;Ae5hDC;EACE,YAAA;Cf8hDH;Ae/hDC;EACE,oBAAA;CfiiDH;AeliDC;EACE,oBAAA;CfoiDH;AeriDC;EACE,WAAA;CfuiDH;AexiDC;EACE,oBAAA;Cf0iDH;Ae3iDC;EACE,oBAAA;Cf6iDH;Ae9iDC;EACE,WAAA;CfgjDH;AejjDC;EACE,oBAAA;CfmjDH;AepjDC;EACE,oBAAA;CfsjDH;AevjDC;EACE,WAAA;CfyjDH;Ae1jDC;EACE,oBAAA;Cf4jDH;Ae7jDC;EACE,mBAAA;Cf+jDH;AejjDC;EACE,YAAA;CfmjDH;AepjDC;EACE,oBAAA;CfsjDH;AevjDC;EACE,oBAAA;CfyjDH;Ae1jDC;EACE,WAAA;Cf4jDH;Ae7jDC;EACE,oBAAA;Cf+jDH;AehkDC;EACE,oBAAA;CfkkDH;AenkDC;EACE,WAAA;CfqkDH;AetkDC;EACE,oBAAA;CfwkDH;AezkDC;EACE,oBAAA;Cf2kDH;Ae5kDC;EACE,WAAA;Cf8kDH;Ae/kDC;EACE,oBAAA;CfilDH;AellDC;EACE,mBAAA;CfolDH;AehlDC;EACE,YAAA;CfklDH;AelmDC;EACE,WAAA;CfomDH;AermDC;EACE,mBAAA;CfumDH;AexmDC;EACE,mBAAA;Cf0mDH;Ae3mDC;EACE,UAAA;Cf6mDH;Ae9mDC;EACE,mBAAA;CfgnDH;AejnDC;EACE,mBAAA;CfmnDH;AepnDC;EACE,UAAA;CfsnDH;AevnDC;EACE,mBAAA;CfynDH;Ae1nDC;EACE,mBAAA;Cf4nDH;Ae7nDC;EACE,UAAA;Cf+nDH;AehoDC;EACE,mBAAA;CfkoDH;AenoDC;EACE,kBAAA;CfqoDH;AejoDC;EACE,WAAA;CfmoDH;AernDC;EACE,kBAAA;CfunDH;AexnDC;EACE,0BAAA;Cf0nDH;Ae3nDC;EACE,0BAAA;Cf6nDH;Ae9nDC;EACE,iBAAA;CfgoDH;AejoDC;EACE,0BAAA;CfmoDH;AepoDC;EACE,0BAAA;CfsoDH;AevoDC;EACE,iBAAA;CfyoDH;Ae1oDC;EACE,0BAAA;Cf4oDH;Ae7oDC;EACE,0BAAA;Cf+oDH;AehpDC;EACE,iBAAA;CfkpDH;AenpDC;EACE,0BAAA;CfqpDH;AetpDC;EACE,yBAAA;CfwpDH;AezpDC;EACE,gBAAA;Cf2pDH;Aa3pDD;EElCI;IACE,YAAA;GfgsDH;EezrDD;IACE,YAAA;Gf2rDD;Ee5rDD;IACE,oBAAA;Gf8rDD;Ee/rDD;IACE,oBAAA;GfisDD;EelsDD;IACE,WAAA;GfosDD;EersDD;IACE,oBAAA;GfusDD;EexsDD;IACE,oBAAA;Gf0sDD;Ee3sDD;IACE,WAAA;Gf6sDD;Ee9sDD;IACE,oBAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,WAAA;GfstDD;EevtDD;IACE,oBAAA;GfytDD;Ee1tDD;IACE,mBAAA;Gf4tDD;Ee9sDD;IACE,YAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,oBAAA;GfstDD;EevtDD;IACE,WAAA;GfytDD;Ee1tDD;IACE,oBAAA;Gf4tDD;Ee7tDD;IACE,oBAAA;Gf+tDD;EehuDD;IACE,WAAA;GfkuDD;EenuDD;IACE,oBAAA;GfquDD;EetuDD;IACE,oBAAA;GfwuDD;EezuDD;IACE,WAAA;Gf2uDD;Ee5uDD;IACE,oBAAA;Gf8uDD;Ee/uDD;IACE,mBAAA;GfivDD;Ee7uDD;IACE,YAAA;Gf+uDD;Ee/vDD;IACE,WAAA;GfiwDD;EelwDD;IACE,mBAAA;GfowDD;EerwDD;IACE,mBAAA;GfuwDD;EexwDD;IACE,UAAA;Gf0wDD;Ee3wDD;IACE,mBAAA;Gf6wDD;Ee9wDD;IACE,mBAAA;GfgxDD;EejxDD;IACE,UAAA;GfmxDD;EepxDD;IACE,mBAAA;GfsxDD;EevxDD;IACE,mBAAA;GfyxDD;Ee1xDD;IACE,UAAA;Gf4xDD;Ee7xDD;IACE,mBAAA;Gf+xDD;EehyDD;IACE,kBAAA;GfkyDD;Ee9xDD;IACE,WAAA;GfgyDD;EelxDD;IACE,kBAAA;GfoxDD;EerxDD;IACE,0BAAA;GfuxDD;EexxDD;IACE,0BAAA;Gf0xDD;Ee3xDD;IACE,iBAAA;Gf6xDD;Ee9xDD;IACE,0BAAA;GfgyDD;EejyDD;IACE,0BAAA;GfmyDD;EepyDD;IACE,iBAAA;GfsyDD;EevyDD;IACE,0BAAA;GfyyDD;Ee1yDD;IACE,0BAAA;Gf4yDD;Ee7yDD;IACE,iBAAA;Gf+yDD;EehzDD;IACE,0BAAA;GfkzDD;EenzDD;IACE,yBAAA;GfqzDD;EetzDD;IACE,gBAAA;GfwzDD;CACF;AahzDD;EE3CI;IACE,YAAA;Gf81DH;Eev1DD;IACE,YAAA;Gfy1DD;Ee11DD;IACE,oBAAA;Gf41DD;Ee71DD;IACE,oBAAA;Gf+1DD;Eeh2DD;IACE,WAAA;Gfk2DD;Een2DD;IACE,oBAAA;Gfq2DD;Eet2DD;IACE,oBAAA;Gfw2DD;Eez2DD;IACE,WAAA;Gf22DD;Ee52DD;IACE,oBAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,WAAA;Gfo3DD;Eer3DD;IACE,oBAAA;Gfu3DD;Eex3DD;IACE,mBAAA;Gf03DD;Ee52DD;IACE,YAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,oBAAA;Gfo3DD;Eer3DD;IACE,WAAA;Gfu3DD;Eex3DD;IACE,oBAAA;Gf03DD;Ee33DD;IACE,oBAAA;Gf63DD;Ee93DD;IACE,WAAA;Gfg4DD;Eej4DD;IACE,oBAAA;Gfm4DD;Eep4DD;IACE,oBAAA;Gfs4DD;Eev4DD;IACE,WAAA;Gfy4DD;Ee14DD;IACE,oBAAA;Gf44DD;Ee74DD;IACE,mBAAA;Gf+4DD;Ee34DD;IACE,YAAA;Gf64DD;Ee75DD;IACE,WAAA;Gf+5DD;Eeh6DD;IACE,mBAAA;Gfk6DD;Een6DD;IACE,mBAAA;Gfq6DD;Eet6DD;IACE,UAAA;Gfw6DD;Eez6DD;IACE,mBAAA;Gf26DD;Ee56DD;IACE,mBAAA;Gf86DD;Ee/6DD;IACE,UAAA;Gfi7DD;Eel7DD;IACE,mBAAA;Gfo7DD;Eer7DD;IACE,mBAAA;Gfu7DD;Eex7DD;IACE,UAAA;Gf07DD;Ee37DD;IACE,mBAAA;Gf67DD;Ee97DD;IACE,kBAAA;Gfg8DD;Ee57DD;IACE,WAAA;Gf87DD;Eeh7DD;IACE,kBAAA;Gfk7DD;Een7DD;IACE,0BAAA;Gfq7DD;Eet7DD;IACE,0BAAA;Gfw7DD;Eez7DD;IACE,iBAAA;Gf27DD;Ee57DD;IACE,0BAAA;Gf87DD;Ee/7DD;IACE,0BAAA;Gfi8DD;Eel8DD;IACE,iBAAA;Gfo8DD;Eer8DD;IACE,0BAAA;Gfu8DD;Eex8DD;IACE,0BAAA;Gf08DD;Ee38DD;IACE,iBAAA;Gf68DD;Ee98DD;IACE,0BAAA;Gfg9DD;Eej9DD;IACE,yBAAA;Gfm9DD;Eep9DD;IACE,gBAAA;Gfs9DD;CACF;Aa38DD;EE9CI;IACE,YAAA;Gf4/DH;Eer/DD;IACE,YAAA;Gfu/DD;Eex/DD;IACE,oBAAA;Gf0/DD;Ee3/DD;IACE,oBAAA;Gf6/DD;Ee9/DD;IACE,WAAA;GfggED;EejgED;IACE,oBAAA;GfmgED;EepgED;IACE,oBAAA;GfsgED;EevgED;IACE,WAAA;GfygED;Ee1gED;IACE,oBAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,WAAA;GfkhED;EenhED;IACE,oBAAA;GfqhED;EethED;IACE,mBAAA;GfwhED;Ee1gED;IACE,YAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,oBAAA;GfkhED;EenhED;IACE,WAAA;GfqhED;EethED;IACE,oBAAA;GfwhED;EezhED;IACE,oBAAA;Gf2hED;Ee5hED;IACE,WAAA;Gf8hED;Ee/hED;IACE,oBAAA;GfiiED;EeliED;IACE,oBAAA;GfoiED;EeriED;IACE,WAAA;GfuiED;EexiED;IACE,oBAAA;Gf0iED;Ee3iED;IACE,mBAAA;Gf6iED;EeziED;IACE,YAAA;Gf2iED;Ee3jED;IACE,WAAA;Gf6jED;Ee9jED;IACE,mBAAA;GfgkED;EejkED;IACE,mBAAA;GfmkED;EepkED;IACE,UAAA;GfskED;EevkED;IACE,mBAAA;GfykED;Ee1kED;IACE,mBAAA;Gf4kED;Ee7kED;IACE,UAAA;Gf+kED;EehlED;IACE,mBAAA;GfklED;EenlED;IACE,mBAAA;GfqlED;EetlED;IACE,UAAA;GfwlED;EezlED;IACE,mBAAA;Gf2lED;Ee5lED;IACE,kBAAA;Gf8lED;Ee1lED;IACE,WAAA;Gf4lED;Ee9kED;IACE,kBAAA;GfglED;EejlED;IACE,0BAAA;GfmlED;EeplED;IACE,0BAAA;GfslED;EevlED;IACE,iBAAA;GfylED;Ee1lED;IACE,0BAAA;Gf4lED;Ee7lED;IACE,0BAAA;Gf+lED;EehmED;IACE,iBAAA;GfkmED;EenmED;IACE,0BAAA;GfqmED;EetmED;IACE,0BAAA;GfwmED;EezmED;IACE,iBAAA;Gf2mED;Ee5mED;IACE,0BAAA;Gf8mED;Ee/mED;IACE,yBAAA;GfinED;EelnED;IACE,gBAAA;GfonED;CACF;AgBxrED;EACE,8BAAA;ChB0rED;AgBxrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChB0rED;AgBxrED;EACE,iBAAA;ChB0rED;AgBprED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBsrED;AgBzrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,8BAAA;ChBsrEP;AgBpsED;EAoBI,uBAAA;EACA,iCAAA;ChBmrEH;AgBxsED;;;;;;EA8BQ,cAAA;ChBkrEP;AgBhtED;EAoCI,8BAAA;ChB+qEH;AgBntED;EAyCI,0BAAA;ChB6qEH;AgBtqED;;;;;;EAOQ,aAAA;ChBuqEP;AgB5pED;EACE,0BAAA;ChB8pED;AgB/pED;;;;;;EAQQ,0BAAA;ChB+pEP;AgBvqED;;EAeM,yBAAA;ChB4pEL;AgBlpED;EAEI,0BAAA;ChBmpEH;AgB1oED;EAEI,0BAAA;ChB2oEH;AgBloED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBooED;AgB/nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBkoEL;AiB9wEC;;;;;;;;;;;;EAOI,0BAAA;CjBqxEL;AiB/wEC;;;;;EAMI,0BAAA;CjBgxEL;AiBnyEC;;;;;;;;;;;;EAOI,0BAAA;CjB0yEL;AiBpyEC;;;;;EAMI,0BAAA;CjBqyEL;AiBxzEC;;;;;;;;;;;;EAOI,0BAAA;CjB+zEL;AiBzzEC;;;;;EAMI,0BAAA;CjB0zEL;AiB70EC;;;;;;;;;;;;EAOI,0BAAA;CjBo1EL;AiB90EC;;;;;EAMI,0BAAA;CjB+0EL;AiBl2EC;;;;;;;;;;;;EAOI,0BAAA;CjBy2EL;AiBn2EC;;;;;EAMI,0BAAA;CjBo2EL;AgBltED;EACE,iBAAA;EACA,kBAAA;ChBotED;AgBvpED;EAAA;IA1DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,0BAAA;GhBqtED;EgB/pEH;IAlDM,iBAAA;GhBotEH;EgBlqEH;;;;;;IAzCY,oBAAA;GhBmtET;EgB1qEH;IAjCM,UAAA;GhB8sEH;EgB7qEH;;;;;;IAxBY,eAAA;GhB6sET;EgBrrEH;;;;;;IApBY,gBAAA;GhBitET;EgB7rEH;;;;IAPY,iBAAA;GhB0sET;CACF;AkBp6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBm6ED;AkBh6ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBk6ED;AkB/5ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBi6ED;AkBt5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL63ET;AkBt5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBw5ED;AkBr5ED;EACE,eAAA;ClBu5ED;AkBn5ED;EACE,eAAA;EACA,YAAA;ClBq5ED;AkBj5ED;;EAEE,aAAA;ClBm5ED;AkB/4ED;;;EZvEE,qBAAA;EAEA,2CAAA;EACA,qBAAA;CN09ED;AkB/4ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClBi5ED;AkBv3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,0BAAA;EACA,uBAAA;EACA,0BAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CL0zET;AmBl8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CL27ET;AK15EC;EACE,eAAA;EACA,WAAA;CL45EH;AK15EC;EAA0B,eAAA;CL65E3B;AK55EC;EAAgC,eAAA;CL+5EjC;AkB/3EC;;;EAGE,0BAAA;EACA,WAAA;ClBi4EH;AkB93EC;;EAEE,oBAAA;ClBg4EH;AkB53EC;EACE,aAAA;ClB83EH;AkBl3ED;EACE,yBAAA;ClBo3ED;AkB50ED;EAtBI;;;;IACE,kBAAA;GlBw2EH;EkBr2EC;;;;;;;;IAEE,kBAAA;GlB62EH;EkB12EC;;;;;;;;IAEE,kBAAA;GlBk3EH;CACF;AkBx2ED;EACE,oBAAA;ClB02ED;AkBl2ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBo2ED;AkBz2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBq2EH;AkBl2ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBo2ED;AkBj2ED;;EAEE,iBAAA;ClBm2ED;AkB/1ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClBi2ED;AkB/1ED;;EAEE,cAAA;EACA,kBAAA;ClBi2ED;AkBx1EC;;;;;;EAGE,oBAAA;ClB61EH;AkBv1EC;;;;EAEE,oBAAA;ClB21EH;AkBr1EC;;;;EAGI,oBAAA;ClBw1EL;AkB70ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClB60ED;AkB30EC;;EAEE,gBAAA;EACA,iBAAA;ClB60EH;AkBh0ED;EC7PE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBgkFD;AmB9jFC;EACE,aAAA;EACA,kBAAA;CnBgkFH;AmB7jFC;;EAEE,aAAA;CnB+jFH;AkB50ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClB60EH;AkBn1ED;EASI,aAAA;EACA,kBAAA;ClB60EH;AkBv1ED;;EAcI,aAAA;ClB60EH;AkB31ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClB60EH;AkBz0ED;ECzRE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBqmFD;AmBnmFC;EACE,aAAA;EACA,kBAAA;CnBqmFH;AmBlmFC;;EAEE,aAAA;CnBomFH;AkBr1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBs1EH;AkB51ED;EASI,aAAA;EACA,kBAAA;ClBs1EH;AkBh2ED;;EAcI,aAAA;ClBs1EH;AkBp2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBs1EH;AkB70ED;EAEE,mBAAA;ClB80ED;AkBh1ED;EAMI,sBAAA;ClB60EH;AkBz0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClB20ED;AkBz0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClB20ED;AkBz0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClB20ED;AkBv0ED;;;;;;;;;;ECpZI,eAAA;CnBuuFH;AkBn1ED;EChZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwrFT;AmBtuFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6rFT;AkB71ED;ECtYI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBsuFH;AkBl2ED;EChYI,eAAA;CnBquFH;AkBl2ED;;;;;;;;;;ECvZI,eAAA;CnBqwFH;AkB92ED;ECnZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLstFT;AmBpwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL2tFT;AkBx3ED;ECzYI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBowFH;AkB73ED;ECnYI,eAAA;CnBmwFH;AkB73ED;;;;;;;;;;EC1ZI,eAAA;CnBmyFH;AkBz4ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLovFT;AmBlyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CLyvFT;AkBn5ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBkyFH;AkBx5ED;ECtYI,eAAA;CnBiyFH;AkBp5EC;EACG,UAAA;ClBs5EJ;AkBp5EC;EACG,OAAA;ClBs5EJ;AkB54ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB84ED;AkB3zED;EAAA;IA9DM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB63EH;EkBj0EH;IAvDM,sBAAA;IACA,YAAA;IACA,uBAAA;GlB23EH;EkBt0EH;IAhDM,sBAAA;GlBy3EH;EkBz0EH;IA5CM,sBAAA;IACA,uBAAA;GlBw3EH;EkB70EH;;;IAtCQ,YAAA;GlBw3EL;EkBl1EH;IAhCM,YAAA;GlBq3EH;EkBr1EH;IA5BM,iBAAA;IACA,uBAAA;GlBo3EH;EkBz1EH;;IApBM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlBi3EH;EkBh2EH;;IAdQ,gBAAA;GlBk3EL;EkBp2EH;;IATM,mBAAA;IACA,eAAA;GlBi3EH;EkBz2EH;IAHM,OAAA;GlB+2EH;CACF;AkBr2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClBk2EH;AkB72ED;;EAiBI,iBAAA;ClBg2EH;AkBj3ED;EJhhBE,mBAAA;EACA,oBAAA;Cdo4FD;AkB90EC;EAAA;IAVI,kBAAA;IACA,iBAAA;IACA,iBAAA;GlB41EH;CACF;AkB53ED;EAwCI,YAAA;ClBu1EH;AkBz0EC;EAAA;IAJM,yBAAA;IACA,gBAAA;GlBi1EL;CACF;AkBv0EC;EAAA;IAJM,iBAAA;IACA,gBAAA;GlB+0EL;CACF;AoBl6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC6CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB4JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CL6tFT;AoBr6FG;;;;;;EdrBF,qBAAA;EAEA,2CAAA;EACA,qBAAA;CNi8FD;AoBz6FC;;;EAGE,eAAA;EACA,sBAAA;CpB26FH;AoBx6FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLg5FT;AoBx6FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CLy5FT;AoBx6FG;;EAEE,qBAAA;CpB06FL;AoBj6FD;EC3DE,eAAA;EACA,0BAAA;EACA,sBAAA;CrB+9FD;AqB79FC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBq+FT;AqBl+FC;;;EAGE,uBAAA;CrBo+FH;AqB/9FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrB6+FT;AoB/9FD;ECTI,eAAA;EACA,0BAAA;CrB2+FH;AoBh+FD;EC9DE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBiiGD;AqB/hGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuiGT;AqBpiGC;;;EAGE,uBAAA;CrBsiGH;AqBjiGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrB+iGT;AoB9hGD;ECZI,eAAA;EACA,0BAAA;CrB6iGH;AoB9hGD;EClEE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBmmGD;AqBjmGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBymGT;AqBtmGC;;;EAGE,uBAAA;CrBwmGH;AqBnmGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBinGT;AoB5lGD;EChBI,eAAA;EACA,0BAAA;CrB+mGH;AoB5lGD;ECtEE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBqqGD;AqBnqGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB2qGT;AqBxqGC;;;EAGE,uBAAA;CrB0qGH;AqBrqGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBmrGT;AoB1pGD;ECpBI,eAAA;EACA,0BAAA;CrBirGH;AoB1pGD;EC1EE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBuuGD;AqBruGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB6uGT;AqB1uGC;;;EAGE,uBAAA;CrB4uGH;AqBvuGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBqvGT;AoBxtGD;ECxBI,eAAA;EACA,0BAAA;CrBmvGH;AoBxtGD;EC9EE,eAAA;EACA,0BAAA;EACA,sBAAA;CrByyGD;AqBvyGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+yGT;AqB5yGC;;;EAGE,uBAAA;CrB8yGH;AqBzyGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBuzGT;AoBtxGD;EC5BI,eAAA;EACA,0BAAA;CrBqzGH;AoBjxGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpBmxGD;AoBjxGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLuzGT;AoBlxGC;;;;EAIE,0BAAA;CpBoxGH;AoBlxGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpBoxGH;AoBhxGG;;;;EAEE,eAAA;EACA,sBAAA;CpBoxGL;AoB3wGD;;ECrEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBo1GD;AoB9wGD;;ECzEE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrB21GD;AoBjxGD;;EC7EE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBk2GD;AoBhxGD;EACE,eAAA;EACA,YAAA;CpBkxGD;AoB9wGD;EACE,gBAAA;CpBgxGD;AoBzwGC;;;EACE,YAAA;CpB6wGH;AuBv6GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLsvGT;AuB16GC;EACE,WAAA;CvB46GH;AuBx6GD;EACE,cAAA;CvB06GD;AuBx6GC;EAAY,eAAA;CvB26Gb;AuB16GC;EAAY,mBAAA;CvB66Gb;AuB56GC;EAAY,yBAAA;CvB+6Gb;AuB56GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CLgwGT;AwB18GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxB48GD;AwBx8GD;;EAEE,mBAAA;CxB08GD;AwBt8GD;EACE,WAAA;CxBw8GD;AwBp8GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,0BAAA;EACA,0BAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBu8GD;AwBl8GC;EACE,SAAA;EACA,WAAA;CxBo8GH;AwB79GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBy/GD;AwBn+GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBm8GH;AwB77GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB+7GH;AwBz7GC;;;EAGE,eAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxB27GH;AwBl7GC;;;EAGE,eAAA;CxBo7GH;AwBh7GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxBk7GH;AwB76GD;EAGI,eAAA;CxB66GH;AwBh7GD;EAQI,WAAA;CxB26GH;AwBn6GD;EACE,WAAA;EACA,SAAA;CxBq6GD;AwB75GD;EACE,QAAA;EACA,YAAA;CxB+5GD;AwB35GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB65GD;AwBz5GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxB25GD;AwBv5GD;EACE,SAAA;EACA,WAAA;CxBy5GD;AwBj5GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxBi5GH;AwBx5GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxBi5GH;AwB53GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB+8GC;EwB54GD;IA1DA,QAAA;IACA,YAAA;GxBy8GC;CACF;A2BzlHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3B2lHD;A2B/lHD;;EAMI,mBAAA;EACA,YAAA;C3B6lHH;A2B3lHG;;;;;;;;EAIE,WAAA;C3BimHL;A2B3lHD;;;;EAKI,kBAAA;C3B4lHH;A2BvlHD;EACE,kBAAA;C3BylHD;A2B1lHD;;;EAOI,YAAA;C3BwlHH;A2B/lHD;;;EAYI,iBAAA;C3BwlHH;A2BplHD;EACE,iBAAA;C3BslHD;A2BllHD;EACE,eAAA;C3BolHD;A2BnlHC;EClDA,8BAAA;EACG,2BAAA;C5BwoHJ;A2BllHD;;EC/CE,6BAAA;EACG,0BAAA;C5BqoHJ;A2BjlHD;EACE,YAAA;C3BmlHD;A2BjlHD;EACE,iBAAA;C3BmlHD;A2BjlHD;;ECnEE,8BAAA;EACG,2BAAA;C5BwpHJ;A2BhlHD;ECjEE,6BAAA;EACG,0BAAA;C5BopHJ;A2B/kHD;;EAEE,WAAA;C3BilHD;A2BhkHD;EACE,kBAAA;EACA,mBAAA;C3BkkHD;A2BhkHD;EACE,mBAAA;EACA,oBAAA;C3BkkHD;A2B7jHD;EtB/CE,yDAAA;EACQ,iDAAA;CL+mHT;A2B7jHC;EtBnDA,yBAAA;EACQ,iBAAA;CLmnHT;A2B1jHD;EACE,eAAA;C3B4jHD;A2BzjHD;EACE,wBAAA;EACA,uBAAA;C3B2jHD;A2BxjHD;EACE,wBAAA;C3B0jHD;A2BnjHD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3BojHH;A2B3jHD;EAcM,YAAA;C3BgjHL;A2B9jHD;;;;EAsBI,iBAAA;EACA,eAAA;C3B8iHH;A2BziHC;EACE,iBAAA;C3B2iHH;A2BziHC;EACE,6BAAA;ECpKF,8BAAA;EACC,6BAAA;C5BgtHF;A2B1iHC;EACE,+BAAA;EChLF,2BAAA;EACC,0BAAA;C5B6tHF;A2B1iHD;EACE,iBAAA;C3B4iHD;A2B1iHD;;EC/KE,8BAAA;EACC,6BAAA;C5B6tHF;A2BziHD;EC7LE,2BAAA;EACC,0BAAA;C5ByuHF;A2BriHD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3BuiHD;A2B3iHD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3BwiHH;A2BjjHD;EAYI,YAAA;C3BwiHH;A2BpjHD;EAgBI,WAAA;C3BuiHH;A2BthHD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3BuhHL;A6BjwHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BmwHD;A6BhwHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7BkwHH;A6B3wHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7B0vHH;A6BjvHD;;;EV8BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBwtHD;AmBttHC;;;EACE,aAAA;EACA,kBAAA;CnB0tHH;AmBvtHC;;;;;;EAEE,aAAA;CnB6tHH;A6BnwHD;;;EVyBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB+uHD;AmB7uHC;;;EACE,aAAA;EACA,kBAAA;CnBivHH;AmB9uHC;;;;;;EAEE,aAAA;CnBovHH;A6BjxHD;;;EAGE,oBAAA;C7BmxHD;A6BjxHC;;;EACE,iBAAA;C7BqxHH;A6BjxHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7BmxHD;A6B9wHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;C7BgxHD;A6B7wHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B+wHH;A6B7wHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B+wHH;A6BnyHD;;EA0BI,cAAA;C7B6wHH;A6BxwHD;;;;;;;EDhGE,8BAAA;EACG,2BAAA;C5Bi3HJ;A6BzwHD;EACE,gBAAA;C7B2wHD;A6BzwHD;;;;;;;EDpGE,6BAAA;EACG,0BAAA;C5Bs3HJ;A6B1wHD;EACE,eAAA;C7B4wHD;A6BvwHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BuwHD;A6B5wHD;EAUI,mBAAA;C7BqwHH;A6B/wHD;EAYM,kBAAA;C7BswHL;A6BnwHG;;;EAGE,WAAA;C7BqwHL;A6BhwHC;;EAGI,mBAAA;C7BiwHL;A6B9vHC;;EAGI,WAAA;EACA,kBAAA;C7B+vHL;A8B15HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B45HD;A8B/5HD;EAOI,mBAAA;EACA,eAAA;C9B25HH;A8Bn6HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B25HL;A8B15HK;;EAEE,sBAAA;EACA,0BAAA;C9B45HP;A8Bv5HG;EACE,eAAA;C9By5HL;A8Bv5HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9By5HP;A8Bl5HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bo5HL;A8B77HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBm8HD;A8Bn8HD;EA0DI,gBAAA;C9B44HH;A8Bn4HD;EACE,iCAAA;C9Bq4HD;A8Bt4HD;EAGI,YAAA;EAEA,oBAAA;C9Bq4HH;A8B14HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bo4HL;A8Bn4HK;EACE,sCAAA;C9Bq4HP;A8B/3HK;;;EAGE,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,iCAAA;EACA,gBAAA;C9Bi4HP;A8B53HC;EAqDA,YAAA;EA8BA,iBAAA;C9B6yHD;A8Bh4HC;EAwDE,YAAA;C9B20HH;A8Bn4HC;EA0DI,mBAAA;EACA,mBAAA;C9B40HL;A8Bv4HC;EAgEE,UAAA;EACA,WAAA;C9B00HH;A8B9zHD;EAAA;IAPM,oBAAA;IACA,UAAA;G9By0HH;E8Bn0HH;IAJQ,iBAAA;G9B00HL;CACF;A8Bp5HC;EAuFE,gBAAA;EACA,mBAAA;C9Bg0HH;A8Bx5HC;;;EA8FE,0BAAA;C9B+zHH;A8BjzHD;EAAA;IATM,iCAAA;IACA,2BAAA;G9B8zHH;E8BtzHH;;;IAHM,6BAAA;G9B8zHH;CACF;A8B/5HD;EAEI,YAAA;C9Bg6HH;A8Bl6HD;EAMM,mBAAA;C9B+5HL;A8Br6HD;EASM,iBAAA;C9B+5HL;A8B15HK;;;EAGE,eAAA;EACA,0BAAA;C9B45HP;A8Bp5HD;EAEI,YAAA;C9Bq5HH;A8Bv5HD;EAIM,gBAAA;EACA,eAAA;C9Bs5HL;A8B14HD;EACE,YAAA;C9B44HD;A8B74HD;EAII,YAAA;C9B44HH;A8Bh5HD;EAMM,mBAAA;EACA,mBAAA;C9B64HL;A8Bp5HD;EAYI,UAAA;EACA,WAAA;C9B24HH;A8B/3HD;EAAA;IAPM,oBAAA;IACA,UAAA;G9B04HH;E8Bp4HH;IAJQ,iBAAA;G9B24HL;CACF;A8Bn4HD;EACE,iBAAA;C9Bq4HD;A8Bt4HD;EAKI,gBAAA;EACA,mBAAA;C9Bo4HH;A8B14HD;;;EAYI,0BAAA;C9Bm4HH;A8Br3HD;EAAA;IATM,iCAAA;IACA,2BAAA;G9Bk4HH;E8B13HH;;;IAHM,6BAAA;G9Bk4HH;CACF;A8Bz3HD;EAEI,cAAA;C9B03HH;A8B53HD;EAKI,eAAA;C9B03HH;A8Bj3HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5B8lIF;A+BxlID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B0lID;A+BllID;EAAA;IAFI,mBAAA;G/BwlID;CACF;A+BzkID;EAAA;IAFI,YAAA;G/B+kID;CACF;A+BjkID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BkkID;A+BhkIC;EACE,iBAAA;C/BkkIH;A+BtiID;EAAA;IAxBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BkkID;E+BhkIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BkkIH;E+B/jIC;IACE,oBAAA;G/BikIH;E+B5jIC;;;IAGE,gBAAA;IACA,iBAAA;G/B8jIH;CACF;A+B1jID;;EAGI,kBAAA;C/B2jIH;A+BtjIC;EAAA;;IAFI,kBAAA;G/B6jIH;CACF;A+BpjID;;;;EAII,oBAAA;EACA,mBAAA;C/BsjIH;A+BhjIC;EAAA;;;;IAHI,gBAAA;IACA,eAAA;G/B0jIH;CACF;A+B9iID;EACE,cAAA;EACA,sBAAA;C/BgjID;A+B3iID;EAAA;IAFI,iBAAA;G/BijID;CACF;A+B7iID;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B+iID;A+BziID;EAAA;;IAFI,iBAAA;G/BgjID;CACF;A+B9iID;EACE,OAAA;EACA,sBAAA;C/BgjID;A+B9iID;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BgjID;A+B1iID;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B4iID;A+B1iIC;;EAEE,sBAAA;C/B4iIH;A+BrjID;EAaI,eAAA;C/B2iIH;A+BliID;EALI;;IAEE,mBAAA;G/B0iIH;CACF;A+BhiID;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/BmiID;A+B/hIC;EACE,WAAA;C/BiiIH;A+B/iID;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B+hIH;A+BrjID;EAyBI,gBAAA;C/B+hIH;A+BzhID;EAAA;IAFI,cAAA;G/B+hID;CACF;A+BthID;EACE,oBAAA;C/BwhID;A+BzhID;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/BwhIH;A+B5/HC;EAAA;IAtBI,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/BshIH;E+BtgID;;IAbM,2BAAA;G/BuhIL;E+B1gID;IAVM,kBAAA;G/BuhIL;E+BthIK;;IAEE,uBAAA;G/BwhIP;CACF;A+BtgID;EAAA;IAXI,YAAA;IACA,UAAA;G/BqhID;E+B3gIH;IAPM,YAAA;G/BqhIH;E+B9gIH;IALQ,kBAAA;IACA,qBAAA;G/BshIL;CACF;A+B3gID;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC4yID;AkB5xHD;EAAA;IA9DM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB81HH;EkBlyHH;IAvDM,sBAAA;IACA,YAAA;IACA,uBAAA;GlB41HH;EkBvyHH;IAhDM,sBAAA;GlB01HH;EkB1yHH;IA5CM,sBAAA;IACA,uBAAA;GlBy1HH;EkB9yHH;;;IAtCQ,YAAA;GlBy1HL;EkBnzHH;IAhCM,YAAA;GlBs1HH;EkBtzHH;IA5BM,iBAAA;IACA,uBAAA;GlBq1HH;EkB1zHH;;IApBM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlBk1HH;EkBj0HH;;IAdQ,gBAAA;GlBm1HL;EkBr0HH;;IATM,mBAAA;IACA,eAAA;GlBk1HH;EkB10HH;IAHM,OAAA;GlBg1HH;CACF;A+BpjIC;EAAA;IANI,mBAAA;G/B8jIH;E+B5jIG;IACE,iBAAA;G/B8jIL;CACF;A+B7iID;EAAA;IARI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLmzIP;CACF;A+BnjID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B03IF;A+BnjID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5By3IF;A+B/iID;EChVE,gBAAA;EACA,mBAAA;ChCk4ID;A+BhjIC;ECnVA,iBAAA;EACA,oBAAA;ChCs4ID;A+BjjIC;ECtVA,iBAAA;EACA,oBAAA;ChC04ID;A+B3iID;EChWE,iBAAA;EACA,oBAAA;ChC84ID;A+BviID;EAAA;IAJI,YAAA;IACA,kBAAA;IACA,mBAAA;G/B+iID;CACF;A+BlhID;EAhBE;IExWA,uBAAA;GjC84IC;E+BriID;IE5WA,wBAAA;IF8WE,oBAAA;G/BuiID;E+BziID;IAKI,gBAAA;G/BuiIH;CACF;A+B9hID;EACE,0BAAA;EACA,sBAAA;C/BgiID;A+BliID;EAKI,eAAA;C/BgiIH;A+B/hIG;;EAEE,eAAA;EACA,8BAAA;C/BiiIL;A+B1iID;EAcI,eAAA;C/B+hIH;A+B7iID;EAmBM,eAAA;C/B6hIL;A+B3hIK;;EAEE,eAAA;EACA,8BAAA;C/B6hIP;A+BzhIK;;;EAGE,eAAA;EACA,0BAAA;C/B2hIP;A+BvhIK;;;EAGE,eAAA;EACA,8BAAA;C/ByhIP;A+BjkID;EA8CI,sBAAA;C/BshIH;A+BrhIG;;EAEE,0BAAA;C/BuhIL;A+BxkID;EAoDM,0BAAA;C/BuhIL;A+B3kID;;EA0DI,sBAAA;C/BqhIH;A+B9gIK;;;EAGE,0BAAA;EACA,eAAA;C/BghIP;A+B/+HC;EAAA;IAzBQ,eAAA;G/B4gIP;E+B3gIO;;IAEE,eAAA;IACA,8BAAA;G/B6gIT;E+BzgIO;;;IAGE,eAAA;IACA,0BAAA;G/B2gIT;E+BvgIO;;;IAGE,eAAA;IACA,8BAAA;G/BygIT;CACF;A+B3mID;EA8GI,eAAA;C/BggIH;A+B//HG;EACE,eAAA;C/BigIL;A+BjnID;EAqHI,eAAA;C/B+/HH;A+B9/HG;;EAEE,eAAA;C/BggIL;A+B5/HK;;;;EAEE,eAAA;C/BggIP;A+Bx/HD;EACE,0BAAA;EACA,sBAAA;C/B0/HD;A+B5/HD;EAKI,eAAA;C/B0/HH;A+Bz/HG;;EAEE,eAAA;EACA,8BAAA;C/B2/HL;A+BpgID;EAcI,eAAA;C/By/HH;A+BvgID;EAmBM,eAAA;C/Bu/HL;A+Br/HK;;EAEE,eAAA;EACA,8BAAA;C/Bu/HP;A+Bn/HK;;;EAGE,eAAA;EACA,0BAAA;C/Bq/HP;A+Bj/HK;;;EAGE,eAAA;EACA,8BAAA;C/Bm/HP;A+B3hID;EA+CI,sBAAA;C/B++HH;A+B9+HG;;EAEE,0BAAA;C/Bg/HL;A+BliID;EAqDM,0BAAA;C/Bg/HL;A+BriID;;EA2DI,sBAAA;C/B8+HH;A+Bx+HK;;;EAGE,0BAAA;EACA,eAAA;C/B0+HP;A+Bn8HC;EAAA;IA/BQ,sBAAA;G/Bs+HP;E+Bv8HD;IA5BQ,0BAAA;G/Bs+HP;E+B18HD;IAzBQ,eAAA;G/Bs+HP;E+Br+HO;;IAEE,eAAA;IACA,8BAAA;G/Bu+HT;E+Bn+HO;;;IAGE,eAAA;IACA,0BAAA;G/Bq+HT;E+Bj+HO;;;IAGE,eAAA;IACA,8BAAA;G/Bm+HT;CACF;A+B3kID;EA+GI,eAAA;C/B+9HH;A+B99HG;EACE,eAAA;C/Bg+HL;A+BjlID;EAsHI,eAAA;C/B89HH;A+B79HG;;EAEE,eAAA;C/B+9HL;A+B39HK;;;;EAEE,eAAA;C/B+9HP;AkCzmJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC2mJD;AkChnJD;EAQI,sBAAA;ClC2mJH;AkCnnJD;EAWM,kBAAA;EACA,eAAA;EACA,eAAA;ClC2mJL;AkCxnJD;EAkBI,eAAA;ClCymJH;AmC7nJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC+nJD;AmCnoJD;EAOI,gBAAA;CnC+nJH;AmCtoJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,kBAAA;CnCgoJL;AmC9nJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B2oJJ;AmC7nJG;;EPvBF,gCAAA;EACG,6BAAA;C5BwpJJ;AmCxnJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;CnC4nJL;AmCtnJG;;;;;;EAGE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC2nJL;AmClrJD;;;;;;EAkEM,eAAA;EACA,0BAAA;EACA,sBAAA;EACA,oBAAA;CnCwnJL;AmC/mJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpC8rJL;AoC5rJG;;ERKF,+BAAA;EACG,4BAAA;C5B2rJJ;AoC3rJG;;ERTF,gCAAA;EACG,6BAAA;C5BwsJJ;AmC1nJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpC8sJL;AoC5sJG;;ERKF,+BAAA;EACG,4BAAA;C5B2sJJ;AoC3sJG;;ERTF,gCAAA;EACG,6BAAA;C5BwtJJ;AqC3tJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrC6tJD;AqCjuJD;EAOI,gBAAA;CrC6tJH;AqCpuJD;;EAUM,sBAAA;EACA,kBAAA;EACA,0BAAA;EACA,0BAAA;EACA,oBAAA;CrC8tJL;AqC5uJD;;EAmBM,sBAAA;EACA,0BAAA;CrC6tJL;AqCjvJD;;EA2BM,aAAA;CrC0tJL;AqCrvJD;;EAkCM,YAAA;CrCutJL;AqCzvJD;;;;EA2CM,eAAA;EACA,0BAAA;EACA,oBAAA;CrCotJL;AsClwJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCowJD;AsChwJG;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;CtCkwJL;AsC7vJC;EACE,cAAA;CtC+vJH;AsC3vJC;EACE,mBAAA;EACA,UAAA;CtC6vJH;AsCtvJD;ECtCE,0BAAA;CvC+xJD;AuC5xJG;;EAEE,0BAAA;CvC8xJL;AsCzvJD;EC1CE,0BAAA;CvCsyJD;AuCnyJG;;EAEE,0BAAA;CvCqyJL;AsC5vJD;EC9CE,0BAAA;CvC6yJD;AuC1yJG;;EAEE,0BAAA;CvC4yJL;AsC/vJD;EClDE,0BAAA;CvCozJD;AuCjzJG;;EAEE,0BAAA;CvCmzJL;AsClwJD;ECtDE,0BAAA;CvC2zJD;AuCxzJG;;EAEE,0BAAA;CvC0zJL;AsCrwJD;EC1DE,0BAAA;CvCk0JD;AuC/zJG;;EAEE,0BAAA;CvCi0JL;AwCn0JD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCq0JD;AwCl0JC;EACE,cAAA;CxCo0JH;AwCh0JC;EACE,mBAAA;EACA,UAAA;CxCk0JH;AwC/zJC;;EAEE,OAAA;EACA,iBAAA;CxCi0JH;AwC5zJG;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;CxC8zJL;AwCzzJC;;EAEE,eAAA;EACA,0BAAA;CxC2zJH;AwCxzJC;EACE,aAAA;CxC0zJH;AwCvzJC;EACE,kBAAA;CxCyzJH;AwCtzJC;EACE,iBAAA;CxCwzJH;AyCl3JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCo3JD;AyCz3JD;;EASI,eAAA;CzCo3JH;AyC73JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCm3JH;AyCl4JD;EAmBI,0BAAA;CzCk3JH;AyC/2JC;;EAEE,mBAAA;CzCi3JH;AyCz4JD;EA4BI,gBAAA;CzCg3JH;AyC91JD;EAAA;IAdI,kBAAA;IACA,qBAAA;GzCg3JD;EyC92JC;;IAEE,mBAAA;IACA,oBAAA;GzCg3JH;EyCx2JH;;IAHM,gBAAA;GzC+2JH;CACF;A0C15JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CL4uJT;A0Ct6JD;;EAaI,kBAAA;EACA,mBAAA;C1C65JH;A0Cz5JC;;;EAGE,sBAAA;C1C25JH;A0Ch7JD;EA0BI,aAAA;EACA,eAAA;C1Cy5JH;A2Cl7JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Co7JD;A2Cx7JD;EAQI,cAAA;EAEA,eAAA;C3Ck7JH;A2C57JD;EAeI,kBAAA;C3Cg7JH;A2C/7JD;;EAqBI,iBAAA;C3C86JH;A2Cn8JD;EAyBI,gBAAA;C3C66JH;A2Cr6JD;;EAEE,oBAAA;C3Cu6JD;A2Cz6JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Cu6JH;A2C/5JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cy9JD;A2Cp6JD;EClDI,0BAAA;C5Cy9JH;A2Cv6JD;EC/CI,eAAA;C5Cy9JH;A2Ct6JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Co+JD;A2C36JD;ECtDI,0BAAA;C5Co+JH;A2C96JD;ECnDI,eAAA;C5Co+JH;A2C76JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C++JD;A2Cl7JD;EC1DI,0BAAA;C5C++JH;A2Cr7JD;ECvDI,eAAA;C5C++JH;A2Cp7JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C0/JD;A2Cz7JD;EC9DI,0BAAA;C5C0/JH;A2C57JD;EC3DI,eAAA;C5C0/JH;A6C5/JD;EACE;IAAQ,4BAAA;G7C+/JP;E6C9/JD;IAAQ,yBAAA;G7CigKP;CACF;A6C9/JD;EACE;IAAQ,4BAAA;G7CigKP;E6ChgKD;IAAQ,yBAAA;G7CmgKP;CACF;A6CtgKD;EACE;IAAQ,4BAAA;G7CigKP;E6ChgKD;IAAQ,yBAAA;G7CmgKP;CACF;A6C5/JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CLy9JT;A6C3/JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CL62JT;A6Cx/JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7C4/JD;A6Cr/JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLqiKT;A6Cl/JD;EErEE,0BAAA;C/C0jKD;A+CvjKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C0gKH;A6Ct/JD;EEzEE,0BAAA;C/CkkKD;A+C/jKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9CkhKH;A6C1/JD;EE7EE,0BAAA;C/C0kKD;A+CvkKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C0hKH;A6C9/JD;EEjFE,0BAAA;C/CklKD;A+C/kKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9CkiKH;AgD1lKD;EAEE,iBAAA;ChD2lKD;AgDzlKC;EACE,cAAA;ChD2lKH;AgDvlKD;;EAEE,QAAA;EACA,iBAAA;ChDylKD;AgDtlKD;EACE,eAAA;ChDwlKD;AgDrlKD;EACE,eAAA;ChDulKD;AgDplKC;EACE,gBAAA;ChDslKH;AgDllKD;;EAEE,mBAAA;ChDolKD;AgDjlKD;;EAEE,oBAAA;ChDmlKD;AgDhlKD;;;EAGE,oBAAA;EACA,oBAAA;ChDklKD;AgD/kKD;EACE,uBAAA;ChDilKD;AgD9kKD;EACE,uBAAA;ChDglKD;AgD5kKD;EACE,cAAA;EACA,mBAAA;ChD8kKD;AgDxkKD;EACE,gBAAA;EACA,iBAAA;ChD0kKD;AiDjoKD;EAEE,oBAAA;EACA,gBAAA;CjDkoKD;AiD1nKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,0BAAA;EACA,0BAAA;CjD2nKD;AiDxnKC;ErB3BA,6BAAA;EACC,4BAAA;C5BspKF;AiDznKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BmpKF;AiDlnKD;;EAEE,eAAA;CjDonKD;AiDtnKD;;EAKI,eAAA;CjDqnKH;AiDjnKC;;;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CjDqnKH;AiDjnKD;EACE,YAAA;EACA,iBAAA;CjDmnKD;AiD9mKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDgnKH;AiDrnKC;;;EASI,eAAA;CjDinKL;AiD1nKC;;;EAYI,eAAA;CjDmnKL;AiD9mKC;;;EAGE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;CjDgnKH;AiDtnKC;;;;;;;;;EAYI,eAAA;CjDqnKL;AiDjoKC;;;EAeI,eAAA;CjDunKL;AkDztKC;EACE,eAAA;EACA,0BAAA;ClD2tKH;AkDztKG;;EAEE,eAAA;ClD2tKL;AkD7tKG;;EAKI,eAAA;ClD4tKP;AkDztKK;;;;EAEE,eAAA;EACA,0BAAA;ClD6tKP;AkD3tKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDguKP;AkDtvKC;EACE,eAAA;EACA,0BAAA;ClDwvKH;AkDtvKG;;EAEE,eAAA;ClDwvKL;AkD1vKG;;EAKI,eAAA;ClDyvKP;AkDtvKK;;;;EAEE,eAAA;EACA,0BAAA;ClD0vKP;AkDxvKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD6vKP;AkDnxKC;EACE,eAAA;EACA,0BAAA;ClDqxKH;AkDnxKG;;EAEE,eAAA;ClDqxKL;AkDvxKG;;EAKI,eAAA;ClDsxKP;AkDnxKK;;;;EAEE,eAAA;EACA,0BAAA;ClDuxKP;AkDrxKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD0xKP;AkDhzKC;EACE,eAAA;EACA,0BAAA;ClDkzKH;AkDhzKG;;EAEE,eAAA;ClDkzKL;AkDpzKG;;EAKI,eAAA;ClDmzKP;AkDhzKK;;;;EAEE,eAAA;EACA,0BAAA;ClDozKP;AkDlzKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDuzKP;AiDttKD;EACE,cAAA;EACA,mBAAA;CjDwtKD;AiDttKD;EACE,iBAAA;EACA,iBAAA;CjDwtKD;AmDl1KD;EACE,oBAAA;EACA,0BAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CL2xKT;AmDj1KD;EACE,cAAA;CnDm1KD;AmD90KD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5Bq2KF;AmDp1KD;EAMI,eAAA;CnDi1KH;AmD50KD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnD80KD;AmDl1KD;;;;;EAWI,eAAA;CnD80KH;AmDz0KD;EACE,mBAAA;EACA,0BAAA;EACA,8BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5Bo3KF;AmDn0KD;;EAGI,iBAAA;CnDo0KH;AmDv0KD;;EAMM,oBAAA;EACA,iBAAA;CnDq0KL;AmDj0KG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5B24KF;AmD/zKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5By4KF;AmDx1KD;EvB1DE,2BAAA;EACC,0BAAA;C5Bq5KF;AmD3zKD;EAEI,oBAAA;CnD4zKH;AmDzzKD;EACE,oBAAA;CnD2zKD;AmDnzKD;;;EAII,iBAAA;CnDozKH;AmDxzKD;;;EAOM,mBAAA;EACA,oBAAA;CnDszKL;AmD9zKD;;EvBzGE,6BAAA;EACC,4BAAA;C5B26KF;AmDn0KD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDszKP;AmD10KD;;;;;;;;EAwBU,4BAAA;CnD4zKT;AmDp1KD;;;;;;;;EA4BU,6BAAA;CnDk0KT;AmD91KD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bm8KF;AmDn2KD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDg0KP;AmD12KD;;;;;;;;EA8CU,+BAAA;CnDs0KT;AmDp3KD;;;;;;;;EAkDU,gCAAA;CnD40KT;AmD93KD;;;;EA2DI,8BAAA;CnDy0KH;AmDp4KD;;EA+DI,cAAA;CnDy0KH;AmDx4KD;;EAmEI,UAAA;CnDy0KH;AmD54KD;;;;;;;;;;;;EA0EU,eAAA;CnDg1KT;AmD15KD;;;;;;;;;;;;EA8EU,gBAAA;CnD01KT;AmDx6KD;;;;;;;;EAuFU,iBAAA;CnD21KT;AmDl7KD;;;;;;;;EAgGU,iBAAA;CnD41KT;AmD57KD;EAsGI,UAAA;EACA,iBAAA;CnDy1KH;AmD/0KD;EACE,oBAAA;CnDi1KD;AmDl1KD;EAKI,iBAAA;EACA,mBAAA;CnDg1KH;AmDt1KD;EASM,gBAAA;CnDg1KL;AmDz1KD;EAcI,iBAAA;CnD80KH;AmD51KD;;EAkBM,8BAAA;CnD80KL;AmDh2KD;EAuBI,cAAA;CnD40KH;AmDn2KD;EAyBM,iCAAA;CnD60KL;AmDt0KD;EC1PE,sBAAA;CpDmkLD;AoDjkLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDmkLH;AoDtkLC;EAMI,0BAAA;CpDmkLL;AoDzkLC;EASI,eAAA;EACA,0BAAA;CpDmkLL;AoDhkLC;EAEI,6BAAA;CpDikLL;AmDr1KD;EC7PE,sBAAA;CpDqlLD;AoDnlLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDqlLH;AoDxlLC;EAMI,0BAAA;CpDqlLL;AoD3lLC;EASI,eAAA;EACA,0BAAA;CpDqlLL;AoDllLC;EAEI,6BAAA;CpDmlLL;AmDp2KD;EChQE,sBAAA;CpDumLD;AoDrmLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDumLH;AoD1mLC;EAMI,0BAAA;CpDumLL;AoD7mLC;EASI,eAAA;EACA,0BAAA;CpDumLL;AoDpmLC;EAEI,6BAAA;CpDqmLL;AmDn3KD;ECnQE,sBAAA;CpDynLD;AoDvnLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDynLH;AoD5nLC;EAMI,0BAAA;CpDynLL;AoD/nLC;EASI,eAAA;EACA,0BAAA;CpDynLL;AoDtnLC;EAEI,6BAAA;CpDunLL;AmDl4KD;ECtQE,sBAAA;CpD2oLD;AoDzoLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD2oLH;AoD9oLC;EAMI,0BAAA;CpD2oLL;AoDjpLC;EASI,eAAA;EACA,0BAAA;CpD2oLL;AoDxoLC;EAEI,6BAAA;CpDyoLL;AmDj5KD;ECzQE,sBAAA;CpD6pLD;AoD3pLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD6pLH;AoDhqLC;EAMI,0BAAA;CpD6pLL;AoDnqLC;EASI,eAAA;EACA,0BAAA;CpD6pLL;AoD1pLC;EAEI,6BAAA;CpD2pLL;AqD3qLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD6qLD;AqDlrLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrD6qLH;AqDxqLD;EACE,uBAAA;CrD0qLD;AqDtqLD;EACE,oBAAA;CrDwqLD;AsDnsLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CL8oLT;AsD7sLD;EASI,mBAAA;EACA,kCAAA;CtDusLH;AsDlsLD;EACE,cAAA;EACA,mBAAA;CtDosLD;AsDlsLD;EACE,aAAA;EACA,mBAAA;CtDosLD;AuD1tLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,6BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBmuLD;AuD3tLC;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtB2uLD;AuDvtLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvDytLH;AwD9uLD;EACE,iBAAA;CxDgvLD;AwD5uLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxD2uLD;AwDxuLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CL2jLT;AwD9uLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLsoLT;AwDlvLD;EACE,mBAAA;EACA,iBAAA;CxDovLD;AwDhvLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDkvLD;AwD9uLD;EACE,mBAAA;EACA,0BAAA;EACA,0BAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDgvLD;AwD5uLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,0BAAA;CxD8uLD;AwD5uLC;ElCrEA,WAAA;EAGA,yBAAA;CtBkzLD;AwD/uLC;ElCtEA,aAAA;EAGA,0BAAA;CtBszLD;AwD9uLD;EACE,cAAA;EACA,iCAAA;EACA,0BAAA;CxDgvLD;AwD7uLD;EACE,iBAAA;CxD+uLD;AwD3uLD;EACE,UAAA;EACA,wBAAA;CxD6uLD;AwDxuLD;EACE,mBAAA;EACA,cAAA;CxD0uLD;AwDtuLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDwuLD;AwD3uLD;EAQI,iBAAA;EACA,iBAAA;CxDsuLH;AwD/uLD;EAaI,kBAAA;CxDquLH;AwDlvLD;EAiBI,eAAA;CxDouLH;AwD/tLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDiuLD;AwD/sLD;EAZE;IACE,aAAA;IACA,kBAAA;GxD8tLD;EwD5tLD;InDvEA,kDAAA;IACQ,0CAAA;GLsyLP;EwD3tLD;IAAY,aAAA;GxD8tLX;CACF;AwDztLD;EAFE;IAAY,aAAA;GxD+tLX;CACF;AyD92LD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBq4LD;AyD13LC;EnCdA,aAAA;EAGA,0BAAA;CtBy4LD;AyD73LC;EAAW,iBAAA;EAAmB,eAAA;CzDi4L/B;AyDh4LC;EAAW,iBAAA;EAAmB,eAAA;CzDo4L/B;AyDn4LC;EAAW,gBAAA;EAAmB,eAAA;CzDu4L/B;AyDt4LC;EAAW,kBAAA;EAAmB,eAAA;CzD04L/B;AyDt4LD;EACE,iBAAA;EACA,iBAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,mBAAA;CzDw4LD;AyDp4LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDs4LD;AyDl4LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,4BAAA;CzDo4LH;AyDl4LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,2BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;A2Dj+LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,0BAAA;EACA,qCAAA;UAAA,6BAAA;EACA,0BAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLi8LT;A2D5+LC;EAAY,kBAAA;C3D++Lb;A2D9+LC;EAAY,kBAAA;C3Di/Lb;A2Dh/LC;EAAY,iBAAA;C3Dm/Lb;A2Dl/LC;EAAY,mBAAA;C3Dq/Lb;A2Dl/LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Do/LD;A2Dj/LD;EACE,kBAAA;C3Dm/LD;A2D3+LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3D6+LH;A2D1+LD;EACE,mBAAA;C3D4+LD;A2D1+LD;EACE,mBAAA;EACA,YAAA;C3D4+LD;A2Dx+LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;C3D2+LL;A2Dx+LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,4BAAA;C3D2+LL;A2Dx+LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;C3D2+LL;A2Dv+LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3Dy+LH;A2Dx+LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,2BAAA;EACA,cAAA;C3D0+LL;A4DnmMD;EACE,mBAAA;C5DqmMD;A4DlmMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DomMD;A4DvmMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLw7LT;A4D9mMD;;EAcM,eAAA;C5DomML;A4D1kMC;EAAA;IvDiKA,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GL69LP;E4DxmMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D2mML;E4DzmMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5D4mML;E4D1mMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5D6mML;CACF;A4DnpMD;;;EA6CI,eAAA;C5D2mMH;A4DxpMD;EAiDI,QAAA;C5D0mMH;A4D3pMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5DymMH;A4DjqMD;EA4DI,WAAA;C5DwmMH;A4DpqMD;EA+DI,YAAA;C5DwmMH;A4DvqMD;;EAmEI,QAAA;C5DwmMH;A4D3qMD;EAuEI,YAAA;C5DumMH;A4D9qMD;EA0EI,WAAA;C5DumMH;A4D/lMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,eAAA;EACA,mBAAA;EACA,0CAAA;C5DkmMD;A4D7lMC;EdlGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CksMH;A4DjmMC;EACE,WAAA;EACA,SAAA;EdvGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9C2sMH;A4DnmMC;;EAEE,WAAA;EACA,eAAA;EACA,sBAAA;EtCtHF,aAAA;EAGA,0BAAA;CtB0tMD;A4DpoMD;;;;EAsCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DomMH;A4D9oMD;;EA8CI,UAAA;EACA,mBAAA;C5DomMH;A4DnpMD;;EAmDI,WAAA;EACA,oBAAA;C5DomMH;A4DxpMD;;EAwDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DomMH;A4D/lMG;EACE,iBAAA;C5DimML;A4D7lMG;EACE,iBAAA;C5D+lML;A4DrlMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5DulMD;A4DhmMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5D6kMH;A4D5mMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,0BAAA;C5D6kMH;A4DtkMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,eAAA;EACA,mBAAA;EACA,0CAAA;C5DwkMD;A4DvkMC;EACE,kBAAA;C5DykMH;A4DhiMD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DkkMH;E4D1kMD;;IAYI,mBAAA;G5DkkMH;E4D9kMD;;IAgBI,oBAAA;G5DkkMH;E4D7jMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5D+jMD;E4D3jMD;IACE,aAAA;G5D6jMD;CACF;A6D3zMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7Dy1MH;A6Dv1MC;;;;;;;;;;;;;;;EACE,YAAA;C7Du2MH;AiC/2MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9D03MD;AiCj3MD;EACE,wBAAA;CjCm3MD;AiCj3MD;EACE,uBAAA;CjCm3MD;AiC32MD;EACE,yBAAA;CjC62MD;AiC32MD;EACE,0BAAA;CjC62MD;AiC32MD;EACE,mBAAA;CjC62MD;AiC32MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/Du4MD;AiCz2MD;EACE,yBAAA;CjC22MD;AiCp2MD;EACE,gBAAA;CjCs2MD;AgEv4MD;EACE,oBAAA;ChEy4MD;AgEn4MD;;;;ECdE,yBAAA;CjEu5MD;AgEl4MD;;;;;;;;;;;;EAYE,yBAAA;ChEo4MD;AgE73MD;EAAA;IChDE,0BAAA;GjEi7MC;EiEh7MD;IAAU,0BAAA;GjEm7MT;EiEl7MD;IAAU,8BAAA;GjEq7MT;EiEp7MD;;IACU,+BAAA;GjEu7MT;CACF;AgEv4MD;EAAA;IAFI,0BAAA;GhE64MD;CACF;AgEv4MD;EAAA;IAFI,2BAAA;GhE64MD;CACF;AgEv4MD;EAAA;IAFI,iCAAA;GhE64MD;CACF;AgEt4MD;EAAA;ICrEE,0BAAA;GjE+8MC;EiE98MD;IAAU,0BAAA;GjEi9MT;EiEh9MD;IAAU,8BAAA;GjEm9MT;EiEl9MD;;IACU,+BAAA;GjEq9MT;CACF;AgEh5MD;EAAA;IAFI,0BAAA;GhEs5MD;CACF;AgEh5MD;EAAA;IAFI,2BAAA;GhEs5MD;CACF;AgEh5MD;EAAA;IAFI,iCAAA;GhEs5MD;CACF;AgE/4MD;EAAA;IC1FE,0BAAA;GjE6+MC;EiE5+MD;IAAU,0BAAA;GjE++MT;EiE9+MD;IAAU,8BAAA;GjEi/MT;EiEh/MD;;IACU,+BAAA;GjEm/MT;CACF;AgEz5MD;EAAA;IAFI,0BAAA;GhE+5MD;CACF;AgEz5MD;EAAA;IAFI,2BAAA;GhE+5MD;CACF;AgEz5MD;EAAA;IAFI,iCAAA;GhE+5MD;CACF;AgEx5MD;EAAA;IC/GE,0BAAA;GjE2gNC;EiE1gND;IAAU,0BAAA;GjE6gNT;EiE5gND;IAAU,8BAAA;GjE+gNT;EiE9gND;;IACU,+BAAA;GjEihNT;CACF;AgEl6MD;EAAA;IAFI,0BAAA;GhEw6MD;CACF;AgEl6MD;EAAA;IAFI,2BAAA;GhEw6MD;CACF;AgEl6MD;EAAA;IAFI,iCAAA;GhEw6MD;CACF;AgEj6MD;EAAA;IC5HE,yBAAA;GjEiiNC;CACF;AgEj6MD;EAAA;ICjIE,yBAAA;GjEsiNC;CACF;AgEj6MD;EAAA;ICtIE,yBAAA;GjE2iNC;CACF;AgEj6MD;EAAA;IC3IE,yBAAA;GjEgjNC;CACF;AgE95MD;ECnJE,yBAAA;CjEojND;AgE35MD;EAAA;ICjKE,0BAAA;GjEgkNC;EiE/jND;IAAU,0BAAA;GjEkkNT;EiEjkND;IAAU,8BAAA;GjEokNT;EiEnkND;;IACU,+BAAA;GjEskNT;CACF;AgEz6MD;EACE,yBAAA;ChE26MD;AgEt6MD;EAAA;IAFI,0BAAA;GhE46MD;CACF;AgE16MD;EACE,yBAAA;ChE46MD;AgEv6MD;EAAA;IAFI,2BAAA;GhE66MD;CACF;AgE36MD;EACE,yBAAA;ChE66MD;AgEx6MD;EAAA;IAFI,iCAAA;GhE86MD;CACF;AgEv6MD;EAAA;ICpLE,yBAAA;GjE+lNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #ffffff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #ffffff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #ffffff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #ffffff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #ffffff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #ffffff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #ffffff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 3;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 8.3, iOS doesn't support `datetime` or `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n &.form-control {\n line-height: @input-height-base;\n }\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n min-height: (@line-height-computed + @font-size-base);\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n .form-control {\n height: @input-height-small;\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n border-radius: @input-border-radius-small;\n }\n select.form-control {\n height: @input-height-small;\n line-height: @input-height-small;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-small;\n min-height: (@line-height-computed + @font-size-small);\n padding: (@padding-small-vertical + 1) @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n }\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n .form-control {\n height: @input-height-large;\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n border-radius: @input-border-radius-large;\n }\n select.form-control {\n height: @input-height-large;\n line-height: @input-height-large;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-large;\n min-height: (@line-height-computed + @font-size-large);\n padding: (@padding-large-vertical + 1) @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: floor((@grid-gutter-width / 2));\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n font-size: @font-size-large;\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n font-size: @font-size-small;\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `<a>` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @btn-border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @btn-border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a&,\n button& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n .border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-small;\n\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n",".reset-text() {\n font-family: @font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: @line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-base;\n\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000px);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table !important; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]} \ No newline at end of file diff --git a/webv4/root/bootstrap/css/bootstrap.min.css b/webv4/root/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000000000000000000000000000000000000..d65c66b1ba297eeb3b5976b71c64c736b41bb763 --- /dev/null +++ b/webv4/root/bootstrap/css/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.eot b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64 Binary files /dev/null and b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.eot differ diff --git a/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.svg b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000000000000000000000000000000000000..94fb5490a2ed10b2c69a4a567a4fd2e4f706d841 --- /dev/null +++ b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="400" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> +<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode=" " /> +<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="433" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="162" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> +<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> +<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> +<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> +<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> +<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> +<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> +<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> +<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> +<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> +<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> +<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> +<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> +<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> +<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> +<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> +<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> +<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> +<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> +<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> +<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> +<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> +<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> +<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> +<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> +<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> +<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> +<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> +<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> +<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> +<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> +<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> +<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> +<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> +<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> +<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> +<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> +<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> +<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> +<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> +<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> +<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> +<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> +<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> +<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> +<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> +<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> +<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> +<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> +<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> +<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> +<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> +<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> +<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> +<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> +<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> +<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> +<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> +<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> +<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> +<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> +<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> +<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> +<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> +<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> +<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> +<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> +<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> +<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> +<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> +<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> +<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> +<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> +<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> +<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> +<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> +<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> +<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> +<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> +<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> +<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> +<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> +<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> +<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> +<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> +<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> +<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> +<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> +<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> +<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> +<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> +<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> +<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> +<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> +<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> +<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> +<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> +<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> +<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> +<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> +<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> +<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> +<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> +<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> +<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> +<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> +<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> +<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> +<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> +<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> +<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> +<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> +<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> +<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> +<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> +<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> +<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> +<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> +<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> +<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> +<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.ttf b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b Binary files /dev/null and b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.ttf differ diff --git a/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.woff b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..9e612858f802245ddcbf59788a0db942224bab35 Binary files /dev/null and b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.woff differ diff --git a/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 Binary files /dev/null and b/webv4/root/bootstrap/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/webv4/root/bootstrap/js/bootstrap.js b/webv4/root/bootstrap/js/bootstrap.js new file mode 100644 index 0000000000000000000000000000000000000000..5debfd7de97d5bada8dbd090331fb62103b2493e --- /dev/null +++ b/webv4/root/bootstrap/js/bootstrap.js @@ -0,0 +1,2363 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under the MIT license + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.5 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.5 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.5' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.5 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.5' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state += 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') + } + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') + } + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.5 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = null + this.sliding = null + this.interval = null + this.$active = null + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.5' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.5 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.5' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.5 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.5' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown', relatedTarget) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.disabled):visible a' + var $items = $parent.find('.dropdown-menu' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.5 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$dialog = this.$element.find('.modal-dialog') + this.$backdrop = null + this.isShown = null + this.originalBodyPad = null + this.scrollbarWidth = 0 + this.ignoreBackdropClick = false + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.5' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal') + + this.$dialog.off('mousedown.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $(document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body) + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false + return + } + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog() + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = window.innerWidth + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect() + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + this.originalBodyPad = document.body.style.paddingRight || '' + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.5 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null + this.options = null + this.enabled = null + this.timeout = null + this.hoverState = null + this.$element = null + this.inState = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.5' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) + this.inState = { click: false, hover: false, focus: false } + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in' + return + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + this.$element.trigger('inserted.bs.' + this.type) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var viewportDim = this.getPosition(this.$viewport) + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top += marginTop + offset.left += marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = $(this.$tip) + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var elOffset = isBody ? { top: 0, left: 0 } : $element.offset() + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click + if (self.isInStateTrue()) self.enter(self) + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null + that.$arrow = null + that.$viewport = null + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.5 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.5' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.5 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + this.$body = $(document.body) + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.5' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var that = this + var offsetMethod = 'offset' + var offsetBase = 0 + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + that.offsets.push(this[0]) + that.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.5 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + // jscs:disable requireDollarBeforejQueryAssignment + this.element = $(element) + // jscs:enable requireDollarBeforejQueryAssignment + } + + Tab.VERSION = '3.3.5' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu').length) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.5 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = null + this.unpin = null + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.5' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && scrollTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = Math.max($(document).height(), $(document.body).height()) + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(jQuery); diff --git a/webv4/root/bootstrap/js/bootstrap.min.js b/webv4/root/bootstrap/js/bootstrap.min.js new file mode 100644 index 0000000000000000000000000000000000000000..133aeecb98aa2b05d2dc1fcd623afcb37204828a --- /dev/null +++ b/webv4/root/bootstrap/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")), +d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/webv4/root/bootstrap/js/npm.js b/webv4/root/bootstrap/js/npm.js new file mode 100644 index 0000000000000000000000000000000000000000..bf6aa80602d9303b61e8d5e63c10568e55b6a4d8 --- /dev/null +++ b/webv4/root/bootstrap/js/npm.js @@ -0,0 +1,13 @@ +// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. +require('../../js/transition.js') +require('../../js/alert.js') +require('../../js/button.js') +require('../../js/carousel.js') +require('../../js/collapse.js') +require('../../js/dropdown.js') +require('../../js/modal.js') +require('../../js/tooltip.js') +require('../../js/popover.js') +require('../../js/scrollspy.js') +require('../../js/tab.js') +require('../../js/affix.js') \ No newline at end of file diff --git a/webv4/root/css/navbar-fixed-top.css b/webv4/root/css/navbar-fixed-top.css new file mode 100644 index 0000000000000000000000000000000000000000..383ca8d4ce99a374e792e5c9bc53937ce2ad4013 --- /dev/null +++ b/webv4/root/css/navbar-fixed-top.css @@ -0,0 +1,9 @@ +body { + min-height: 2000px; + padding-top: 70px; +} + +.dropdown-menu { + max-height: 500px; + overflow-y: auto; +} \ No newline at end of file diff --git a/webv4/root/css/offcanvas.css b/webv4/root/css/offcanvas.css new file mode 100644 index 0000000000000000000000000000000000000000..40f97c4c20c6a93d4ab59efade4eb0998330f25d --- /dev/null +++ b/webv4/root/css/offcanvas.css @@ -0,0 +1,59 @@ +/* + * Style tweaks + * -------------------------------------------------- + */ +html, +body { + overflow-x: hidden; /* Prevent scroll on narrow devices */ +} +body { + padding-top: 70px; +} +footer { + padding: 30px 0; +} + +/* + * Off Canvas + * -------------------------------------------------- + */ +@media screen and (max-width: 767px) { + .row-offcanvas { + position: relative; + -webkit-transition: all .25s ease-out; + -o-transition: all .25s ease-out; + transition: all .25s ease-out; + } + + .row-offcanvas-right { + right: 0; + } + + .row-offcanvas-left { + left: 0; + } + + .row-offcanvas-right + .sidebar-offcanvas { + right: -50%; /* 6 columns */ + } + + .row-offcanvas-left + .sidebar-offcanvas { + left: -50%; /* 6 columns */ + } + + .row-offcanvas-right.active { + right: 50%; /* 6 columns */ + } + + .row-offcanvas-left.active { + left: 50%; /* 6 columns */ + } + + .sidebar-offcanvas { + position: absolute; + top: 0; + width: 50%; /* 6 columns */ + } +} \ No newline at end of file diff --git a/webv4/root/css/style.css b/webv4/root/css/style.css new file mode 100644 index 0000000000000000000000000000000000000000..7751bb1a8ed1e4a3274afa526dca9a58a355e007 --- /dev/null +++ b/webv4/root/css/style.css @@ -0,0 +1,177 @@ +/* Alternating rows in lists of messages, Who's Online, etc. */ +.striped:nth-of-type(even), .table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th { + background: #F2F2F2; +} + +/* A link in a list when the mouse is hovering over it (mostly applies to the Forum) */ +a.list-group-item:hover, a.list-group-item:active, li.list-group-item.mail:hover { + background-color: #A9E2F3; +} + +/* A link to a scanned sub in a list, should you wish to style it, I guess. */ +a.list-group-item.scanned:hover { +} + +/* An unread mail message in the list view. */ +a.unread { + background: #FFFFFF; +} + +/* A read mail message in the list view. */ +a.read { + background: #E6E6E6; +} + +/* Unread-message indicator for scanned subs. */ +span.badge.scanned { + background-color: #2E9AFE; +} + +/* Unread-message indicator for all subs. */ +span.badge.total { +} + +/* Inline quoted text in a message. */ +blockquote { + font-size: 14px; + border-left : 5px solid #A4A4A4; +} + +/* The 'current' message being viewed in a thread. */ +li.current { + border-left-color : #000000; + border-right-color : #000000; +} + +/* Unused? */ +span.message-header.unread { + background-color: #FCF8E3; +} + +/* You probably don't need to mess with rules below this line. */ + +blockquote { + margin: .5em; + padding: .5em; +} + +div.message { + margin: 1em 0 1em 1em; +} + +input.dropdown { + clear: both; + margin: 0 0 1em 0; +} + +pre.ansi { + background-color : black; + font-family : Courier New, monospace; + line-height : 1; +} + +pre.list { + color : inherit; + background-color : inherit; + border : none; +} + +.list-group-item.sidebar { + overflow: hidden; + word-wrap: break-word; +} + +.list-group-item.sidebar:empty { + display: none; +} + +.icon { + margin: 0 1em 1em 0; +} + +.reply { + margin: 1em 0 1em 0; +} + +/* Upvote button */ +.btn-uv { } + +/* Downvote button */ +.btn-dv { } + +.upvote-bg { + background-color : #F0B27A; +} + +.downvote-bg { + background-color : #85C1E9; +} + +.upvote-fg, .upvote:hover { + color : #F0B27A; +} + +.downvote-fg, .downvote:hover { + color : #85C1E9; +} + +.indicator { + background-color: transparent !important; + -webkit-animation: indicator-fade 3s ease 0s 1 alternate !important; +} + +@-webkit-keyframes indicator-fade { + from { background-color: #82E0AA; } + to { background-color: transparent; } +} + +-moz-animation: indicator-fade 3s ease 0s 1 alternate !important; +} + +@-moz-keyframes indicator-fade { + from { background-color: #82E0AA; } + to { background-color: transparent; } +} + +-ms-animation: indicator-fade 3s ease 0s 1 alternate !important; +} + +@-ms-keyframes indicator-fade { + from { background-color: #82E0AA; } + to { background-color: transparent; } +} + +-o-animation: indicator-fade 3s ease 0s 1 alternate !important; +} + +@-o-keyframes indicator-fade { + from { background-color: #82E0AA;} + to { background-color: transparent; } +} + +animation: indicator-fade 3s ease 0s 1 alternate !important; +} + +@keyframes indicator-fade { + from { background-color: #82E0AA;} + to { background-color: transparent; } +} + +.dropdown-submenu { + position: relative; +} +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; +} + +.breadcrumb { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.breadcrumb li { + display: inline; +} \ No newline at end of file diff --git a/webv4/root/error/400.html b/webv4/root/error/400.html new file mode 100644 index 0000000000000000000000000000000000000000..db9d38c8f9958bab50ad8aaf9f6cdff06731e561 --- /dev/null +++ b/webv4/root/error/400.html @@ -0,0 +1,9 @@ +<HTML> +<HEAD> +<!-- $Id: 400.html,v 1.3 2004/10/27 05:57:42 deuce Exp $ --> +<TITLE>Bad Request</TITLE> +</HEAD> +<BODY> +Your browser has sent a request that this server can not understand +</BODY> +</HTML> diff --git a/webv4/root/error/401.html b/webv4/root/error/401.html new file mode 100644 index 0000000000000000000000000000000000000000..42265595fa3c48ec8319edda4b9954f27bee2a12 --- /dev/null +++ b/webv4/root/error/401.html @@ -0,0 +1,9 @@ +<HTML> +<HEAD> +<!-- $Id: 401.html,v 1.3 2004/10/27 05:57:42 deuce Exp $ --> +<TITLE>Unauthorized</TITLE> +</HEAD> +<BODY> +You are not authorized to view this page +</BODY> +</HTML> diff --git a/webv4/root/error/403.html b/webv4/root/error/403.html new file mode 100644 index 0000000000000000000000000000000000000000..e5db33f06582595645ae4667f3fe8339eda3951a --- /dev/null +++ b/webv4/root/error/403.html @@ -0,0 +1,9 @@ +<HTML> +<HEAD> +<!-- $Id: 403.html,v 1.3 2004/10/27 05:57:42 deuce Exp $ --> +<TITLE>Forbiden</TITLE> +</HEAD> +<BODY> +You are forbidden from viewing this page +</BODY> +</HTML> diff --git a/webv4/root/error/404.html b/webv4/root/error/404.html new file mode 100644 index 0000000000000000000000000000000000000000..dddbf324c9dae6bb6d33b2dd4404260d44ed1528 --- /dev/null +++ b/webv4/root/error/404.html @@ -0,0 +1,8 @@ +<html> +<head> +<!-- $Id: 404.html,v 1.4 2010/02/22 23:03:25 rswindell Exp $ --> +<title>404 File not found!</title> +<body> +No resource at this location. +</body> +</html> diff --git a/webv4/root/error/414.html b/webv4/root/error/414.html new file mode 100644 index 0000000000000000000000000000000000000000..cb262b31b900ea4b39d20f8d9fd222eea502c12f --- /dev/null +++ b/webv4/root/error/414.html @@ -0,0 +1,9 @@ +<HTML> +<HEAD> +<!-- $Id: 414.html,v 1.3 2004/10/27 05:57:42 deuce Exp $ --> +<TITLE>Request URI Too Long</TITLE> +</HEAD> +<BODY> +The request URI was too long +</BODY> +</HTML> diff --git a/webv4/root/error/416.html b/webv4/root/error/416.html new file mode 100644 index 0000000000000000000000000000000000000000..c31fe1df8a19bc55708e7f056f3b3e2f243b5975 --- /dev/null +++ b/webv4/root/error/416.html @@ -0,0 +1,9 @@ +<HTML> +<HEAD> +<!-- $Id: 416.html,v 1.1 2006/08/08 04:48:45 deuce Exp $ --> +<TITLE>Requested Range Unsatisfiable</TITLE> +</HEAD> +<BODY> +Your browser requested a range which cannot be satisfied. +</BODY> +</HTML> diff --git a/webv4/root/error/500.html b/webv4/root/error/500.html new file mode 100644 index 0000000000000000000000000000000000000000..52d797f64a1735d0268efc9fee6f329f1a5987ab --- /dev/null +++ b/webv4/root/error/500.html @@ -0,0 +1,9 @@ +<HTML> +<HEAD> +<!-- $Id: 500.html,v 1.4 2005/09/12 00:15:19 deuce Exp $ --> +<TITLE>Internal Server Error</TITLE> +</HEAD> +<BODY> +Internal Server Error! +</BODY> +</HTML> diff --git a/webv4/root/error/501.html b/webv4/root/error/501.html new file mode 100644 index 0000000000000000000000000000000000000000..c9b3afb035f950b91109deba8cc1bc927b110d0c --- /dev/null +++ b/webv4/root/error/501.html @@ -0,0 +1,9 @@ +<HTML> +<HEAD> +<!-- $Id: 501.html,v 1.3 2004/10/27 05:57:42 deuce Exp $ --> +<TITLE>Not Implemented</TITLE> +</HEAD> +<BODY> +Support for the type of request has not yet been added to Synchronet +</BODY> +</HTML> diff --git a/webv4/root/images/ajax-loader-small.gif b/webv4/root/images/ajax-loader-small.gif new file mode 100644 index 0000000000000000000000000000000000000000..09d621ede9dbe610877292e554c858d60573359e Binary files /dev/null and b/webv4/root/images/ajax-loader-small.gif differ diff --git a/webv4/root/images/cp437-ibm-vga8.png b/webv4/root/images/cp437-ibm-vga8.png new file mode 100644 index 0000000000000000000000000000000000000000..e23a9e64a81bc0b52349f6d3cf9abc13f05ef370 Binary files /dev/null and b/webv4/root/images/cp437-ibm-vga8.png differ diff --git a/webv4/root/images/favicon.ico b/webv4/root/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bcf9f091444f146b69a3da4e0eeb6f35fb84baf0 Binary files /dev/null and b/webv4/root/images/favicon.ico differ diff --git a/webv4/root/index.xjs b/webv4/root/index.xjs new file mode 100644 index 0000000000000000000000000000000000000000..efcf5e51540e186231048962fa5f24b963703b36 --- /dev/null +++ b/webv4/root/index.xjs @@ -0,0 +1,115 @@ +<?xjs + var settings = load('modopts.js', 'web'); + load(settings.web_directory + '/lib/init.js'); + + load(settings.web_lib + 'auth.js'); + load(settings.web_lib + 'pages.js'); + load(settings.web_lib + 'sidebar.js'); + + var page = typeof http_request.query.page == 'undefined' ? '000-home.xjs' : http_request.query.page[0]; + if (page.search(/(?:https?|ftp|telnet|ssh|gopher|rlogin|news):\/\/[^\s'"'<>()]*|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6}/i) > -1) { + http_reply.status = '301 Moved Permanently'; + http_reply.header['Location'] = page; + exit(); + } + + if (!file_exists(fullpath(settings.web_pages + page)) || fullpath(settings.web_pages + page).indexOf(fullpath(settings.web_pages)) !== 0) { + page = '000-home.xjs'; + } + var page_ctrl = getCtrlLine(settings.web_pages + page); +?> + +<?xjs + function _sidebar() { + if (settings.layout_sidebar_off || page_ctrl.options.no_sidebar) return; +?> + <div class="col-xs-6 col-sm-3 sidebar-offcanvas" id="sidebar"><? writeSidebarModules(); ?></div> +<?xjs + } +?> + +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="icon" href="./images/favicon.ico"> + <title><? write(page_ctrl.title + ': ' + system.name); ?></title> + <link href="./bootstrap/css/bootstrap.min.css" rel="stylesheet"> + <link href="./css/offcanvas.css" rel="stylesheet"> + <link href="./css/style.css" rel="stylesheet"> + <?xjs if (file_exists(settings.web_root + 'css/custom.css')) { ?> + <link href="./css/custom.css" rel="stylesheet"> + <?xjs } ?> + </head> + + <body> + + <script src="./js/jquery.min.js"></script> + <script src="./bootstrap/js/bootstrap.min.js"></script> + <script src="./js/common.js"></script> + + <?xjs + (function () { + load(xjs_compile(settings.web_components + 'modal.xjs')); + })(); + + if (file_exists(settings.web_components + 'header.xjs')) { + (function () { + load(xjs_compile(settings.web_components + 'header.xjs')); + })(); + } + + (function () { + load(xjs_compile(settings.web_components + 'navbar.xjs')); + })(); + ?> + + <div class="container<?xjs if (settings.layout_full_width) write('-fluid'); ?>"> + <div class="row row-offcanvas row-offcanvas-<?xjs write(settings.layout_sidebar_left ? 'left' : 'right'); ?>"> + <?xjs if (settings.layout_sidebar_left) _sidebar(); ?> + <div class="col-xs-12 col-sm-<?xjs write(settings.layout_sidebar_off || page_ctrl.options.no_sidebar ? 12 : 9); ?>"> + <div style="clear:both;"> + <p class="pull-<?xjs write(settings.layout_sidebar_left ? 'left' : 'right'); ?> visible-xs"> + <button title="Toggle sidebar" type="button" class="btn btn-primary btn-xs" data-toggle="offcanvas"><span class="glyphicon glyphicon-tasks"></span><?xjs write(locale.strings.main.label_sidebar); ?></button> + </p> + </div> + <?xjs writePage(page); ?> + </div> + <?xjs if (!settings.layout_sidebar_left || settings.layout_sidebar_right) _sidebar(); ?> + </div> + <hr> + <footer> + <?xjs + if (file_exists(settings.web_components + 'footer.xjs')) { + (function () { + load(xjs_compile(settings.web_components + 'footer.xjs')); + })(); + } else { + ?> + <p>© <?xjs write(system.name + ", " + strftime("%Y")); ?></p> + <?xjs + } + ?> + </footer> + </div> + + <script src="./js/offcanvas.js"></script> + <script> + $('.dropdown-menu a.dropdown-toggle').on('click', function (e) { + if (!$(this).next().hasClass('show')) { + $(this).parents('.dropdown-menu').first().find('.show').removeClass("show"); + } + var $subMenu = $(this).next(".dropdown-menu"); + $subMenu.toggleClass('show'); + $(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function (e) { + $('.dropdown-submenu .show').removeClass("show"); + }); + return false; + }); + </script> + + </body> + +</html> diff --git a/webv4/root/js/avatars.js b/webv4/root/js/avatars.js new file mode 100644 index 0000000000000000000000000000000000000000..bd04ecb0ce0f14b0d2e93b99650a00ffdbbc0c64 --- /dev/null +++ b/webv4/root/js/avatars.js @@ -0,0 +1,39 @@ +function Avatarizer() { + + const cache = { local : {}, network : {} }; + const graphics_converter = new GraphicsConverter('./images/cp437-ibm-vga8.png', 8, 16, 64, 4); + + function populate_image(target, image) { + $("[name='avatar-" + target + "']").each( + function () { $(this).append($(image).clone()); } + ); + } + + this.get_localuser = function (usernumber, bin) { + if (typeof cache.local[usernumber] == 'undefined') { + cache.local[usernumber] = null; + graphics_converter.from_bin( + atob(bin), 10, 6, function (img) { + cache.local[usernumber] = img; + populate_image(usernumber, img); + } + ); + } + } + + this.get_netuser = function (username, netaddr, bin) { + if (typeof cache.network[netaddr] == 'undefined') { + cache.network[netaddr] = {}; + } + if (typeof cache.network[netaddr][username] == 'undefined') { + cache.network[netaddr][username] = null; + graphics_converter.from_bin( + atob(bin), 10, 6, function (img) { + cache.network[netaddr][username] = img; + populate_image(username + '@' + netaddr, img); + } + ); + } + } + +} diff --git a/webv4/root/js/common.js b/webv4/root/js/common.js new file mode 100644 index 0000000000000000000000000000000000000000..b9229626877c82a4795e382fd573ba2d2efcfa6b --- /dev/null +++ b/webv4/root/js/common.js @@ -0,0 +1,142 @@ +// How often to check for unread mail, new telegrams (milliseconds) +var updateInterval = 60000; +const _sbbs_events = {}; + +async function v4_fetch(url, method, body) { + const init = { method, headers: {} }; + if (method == 'POST' && body) { + init.body = body; + if (body instanceof URLSearchParams) { + init.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + } + } + try { + return await fetch(url, init).then(res => res.json()); + } catch (err) { + console.log('Error on fetch', url, init); + } +} + +function v4_get(url) { + return v4_fetch(url); +} + +// May need adjustment for multipart/form-data at some point +function v4_post(url, data) { + const fd = new URLSearchParams(); + for (let e in data) { + if (Array.isArray(data[e])) { + data[e].forEach(ee => fd.append(e, ee)); + } else { + fd.append(e, data[e]); + } + } + return v4_fetch(url, 'POST', fd); +} + +async function login(evt) { + if ($('#input-username').val() == '' || $('#input-password').val() == '') { + return; + } + if (typeof evt !== 'undefined') evt.preventDefault(); + const res = await v4_post('./api/auth.ssjs', { + username: $('#input-username').val(), + password: $('#input-password').val() + }); + if (res.authenticated) { + window.location.reload(true); + } else { + $('#login-form').append('<p class="text-danger">Login failed</p>'); + } +} + +async function logout() { + const res = await v4_post('./api/auth.ssjs', { logout: true }); + if (!res.authenticated) window.location.href = '/'; +} + +function scrollUp() { + if (window.location.hash === '') return; + if ($('#navbar').length < 1) return; + window.scrollBy(0, -document.getElementById('navbar').offsetHeight); +} + +function sendTelegram(alias) { + function send_tg(evt) { + if (typeof evt !== 'undefined') evt.preventDefault(); + v4_post('./api/system.ssjs', { call: 'send-telegram', user: alias, telegram: $('#telegram').val() }); + $('#popUpModal').modal('hide'); + } + $('#popUpModalTitle').html('Send a telegram to ' + alias); + $('#popUpModalBody').html( + '<form id="send-telegram-form">' + + '<input type="text" class="form-control" placeholder="My message" name="telegram" id="telegram">' + + '<input type="submit" value="submit" class="hidden">' + + '</form>' + ); + $('#send-telegram-form').submit(send_tg); + $('#popUpModalActionButton').click(send_tg); + $('#popUpModalActionButton').show(); + $('#popUpModal').modal('show'); +} + +function registerEventListener(scope, callback, params) { + params = Object.keys(params || {}).reduce(function (a, c) { + a += '&' + c + '=' + params[c]; + return a; + }, ''); + _sbbs_events[scope] = { + qs: 'subscribe=' + scope + params, + callback: callback + }; +} + +window.onload = function () { + + $('#button-logout').click(logout); + $('#button-login').click(login); + $('#form-login').submit(login); + + $('#popUpModal').on('hidden.bs.modal', function (e) { + $('#popUpModalActionButton').off('click'); + $('#popUpModalTitle').empty(); + $('#popUpModalBody').empty(); + }); + $("#popUpModalCloseButton").click(function () { + $('#popUpModal').modal('hide'); + }); + + setTimeout(scrollUp, 25); + window.onhashchange = scrollUp; + + if ($('#button-logout').length > 0) { + + registerEventListener('mail', function (e) { + const data = JSON.parse(e.data); + if (typeof data.count != 'number') return; + $('#badge-unread-mail').text(data.count < 1 ? '' : data.count); + $('#badge-unread-mail-inner').text(data.count < 1 ? '' : data.count); + }); + + registerEventListener('telegram', function (e) { + const tg = JSON.parse(e.data).replace(/\1./g, '').replace( + /\r?\n/g, '<br>' + ); + $('#popUpModalTitle').html('New telegram(s) received'); + $('#popUpModalBody').append(tg); + $('#popUpModalActionButton').hide(); + $('#popUpModal').modal('show'); + }); + + } + + const qs = Object.keys(_sbbs_events).reduce(function (a, c, i) { + return a + (i == 0 ? '?' : '&') + _sbbs_events[c].qs; + }, ''); + + const es = new EventSource('/api/events.ssjs' + qs); + Object.keys(_sbbs_events).forEach(function (e) { + es.addEventListener(e, _sbbs_events[e].callback); + }); + +} diff --git a/webv4/root/js/forum.js b/webv4/root/js/forum.js new file mode 100644 index 0000000000000000000000000000000000000000..679dd5a97f91d3b672e148257aab716c1cb38259 --- /dev/null +++ b/webv4/root/js/forum.js @@ -0,0 +1,542 @@ +// Add a parameter to the query string +function insertParam(key, value) { + key = encodeURIComponent(key); + value = encodeURIComponent(value); + var kvp = window.location.search.substr(1).split('&'); + var i = kvp.length, x; + while (i--) { + x = kvp[i].split('='); + if (x[0] == key) { + x[1] = value; + kvp[i] = x.join('='); + break; + } + } + if (i<0) kvp[kvp.length] = [key,value].join('='); + window.location.search = kvp.join('&'); +} + +// For now we'll just remove nested quotes from the parent post +function quotify(id) { + $('#quote-' + id).attr('disabled', true); + var html = $('#message-' + id).clone(); + html.find('blockquote').remove(); + $('#replytext-' + id).val( + html.text().replace(/\n\s*\n\s*\n/g, '\n\n').split(/\r?\n/).map( + function (line) { return ("> " + line); } + ).join('\n') + + $('#replytext-' +id).val() + ); +} + +// (Try to) post a new message to 'sub' via the web API +async function postNew(sub) { + $('#newmessage-button').attr('disabled', true); + var to = $('#newmessage-to').val(); + var subject = $('#newmessage-subject').val(); + var body = $('#newmessage-body').val(); + const data = await v4_post('./api/forum.ssjs', { + call: 'post', + sub, + to, + subject, + body + }); + if (data.success) { + $('#newmessage').remove(); + insertParam('notice', 'Your message has been posted.'); + } + $('#newmessage-button').attr('disabled', false); +} + +// (Try to) post a reply to message number 'id' of 'sub' via the web API +async function postReply(sub, id) { + $('#reply-button-' + id).attr('disabled', true); + var body = $('#replytext-' + id).val(); + const data = await v4_post('./api/forum.ssjs', { + call: 'post-reply', + sub, + body, + pid: id + }); + if (data.success) { + $('#quote-' + id).attr('disabled', false); + $('#replybox-' + id).remove(); + insertParam('notice', 'Your message has been posted.'); + } else { + $('#reply-button-' + id).attr('disabled', false); + } +} + +// (Try to) delete a message via the web API +async function deleteMessage(sub, id) { + const res = await v4_post('./api/forum.ssjs', { call: 'delete-message', sub: sub, number: id }); + if (res.success) { + $('#li-' + id).remove(); + insertParam('notice', 'Message deleted.'); + } +} + +// Add a new message input form to the element with id 'forum-list-container' for sub 'sub' +function addNew(sub) { + if ($('#newmessage').length > 0) return; + $('#forum-list-container').append( + '<li id="newmessage" class="list-group-item">' + + '<input id="newmessage-to" class="form-control" type="text" placeholder="To"><br>' + + '<input id="newmessage-subject" class="form-control" type="text" placeholder="Subject"><br>' + + '<textarea id="newmessage-body" class="form-control" rows="8"></textarea><br>' + + '<input id="newmessage-button" class="btn btn-primary" type="submit" value="Submit" onclick="postNew(\'' + sub + '\')">' + + '</li>' + ); + v4_get('./api/forum.ssjs?call=get-signature').then(data => { + $('#newmessage-body').val($('#newmessage-body').val() + '\r\n' + data.signature); + $("#newmessage-body")[0].setSelectionRange(0,0); + }); + window.location.hash = '#newmessage'; + $('#newmessage-body').keydown(evt => evt.stopImmediatePropagation()); +} + +async function submitPoll(sub) { + + $('#newpoll-submit').attr('disabled', true); + + if ($('input[name="newpoll-answers"]:checked').length !== 1) return; + + var subject = $('#newpoll-subject').val(); + if (subject.length < 1) return; + + var answerCount = $('input[name="newpoll-answers"]:checked:first').val(); + if (answerCount == 2) answerCount = $('input[name="newpoll-answer-count"]').val(); + if (answerCount < 0 || answerCount > 15) return; + + var results = parseInt($('input[name="newpoll-results"]:checked').val()); + if (results < 0 || results > 3) return; + + var answers = []; + $('input[name="newpoll-answer-input"]').each(function () { + var val = $(this).val(); + if (val !== '') answers.push(val); + }); + if (answers.length < 1) return; + + var comments = []; + $('input[name="newpoll-comment-input"]').each(function () { + var val = $(this).val(); + if (val !== '') comments.push(val); + }); + + const post_data = { + sub, + subject, + votes: answerCount, + results, + answer: answers + }; + if (comments.length) post_data.comment = comments; + const res = await v4_post('./api/forum.ssjs?call=submit-poll', post_data); + $('#newpoll-submit').attr('disabled', false); + if (res.success) { + $('#newpoll').remove(); + insertParam('notice', 'Your poll has been posted.'); + } + +} + +function addPollField(type, elem) { + + var prefix = 'newpoll-' + type; + + var count = $('div[name="' + prefix + '"]').length; + if (type === 'answer' && count > 15) return; + var number = count + 1; + + $(elem).append( + '<div id="' + prefix + '-container-' + number + '" name="' + prefix + '" class="form-group">' + + '<label for="' + prefix + '-' + number + '" class="col-sm-2 control-label">' + + (type === 'answer' ? 'Answer' : 'Comment') + + '</label>' + + '<div class="col-sm-9">' + + '<input id="' + prefix + '-' + number + '" class="form-control" name="' + prefix + '-input" type="text" maxlength="70"> ' + + '</div>' + + '<div class="col-sm-1">' + + '<button type="button" class="btn btn-danger" onclick="$(\'#' + prefix + '-container-' + number + '\').remove()">' + + '<span class="glyphicon glyphicon-remove"></span>' + + '</button> ' + + '</div>' + + '</div>' + ); + + $('#' + prefix + '-' + number).keydown(function (evt) { + evt.stopImmediatePropagation(); + }); + +} + +function addPoll(sub) { + if ($('#newpoll').length > 0) return; + $('#forum-list-container').append( + '<li id="newpoll" class="list-group-item">' + + '<strong>Add a new poll</strong>' + + '<form id="newpoll-form" class="form-horizontal">' + + '<div class="form-group">' + + '<label for="newpoll-subject" class="col-sm-2 control-label">Question</label>' + + '<div class="col-sm-10">' + + '<input id="newpoll-subject" class="form-control" type="text" placeholder="Required" maxlength="70">' + + '</div>' + + '</div>' + + '<div id="newpoll-comment-group"></div>' + + '<div class="form-group">' + + '<label for="newpoll-answers" class="col-sm-2 control-label">Selection</label>' + + '<div class="col-sm-10">' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-answers" value="1" checked> Single' + + '</label>' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-answers" value="2"> Multiple ' + + '<input type="number" name="newpoll-answer-count" min="1" max="15" value="1">' + + '</label>' + + '</div>' + + '</div>' + + '<div class="form-group">' + + '<label for="newpoll-results" class="col-sm-2 control-label">Show results</label>' + + '<div class="col-sm-10">' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-results" value="0" checked> Voters' + + '</label>' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-results" value="1"> Everyone' + + '</label>' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-results" value="2"> Me Only (Until closed) ' + + '</label>' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-results" value="3"> Me Only ' + + '</label>' + + '</div>' + + '</div>' + + '<div id="newpoll-answer-group"></div>' + + '<div id="newpoll-button" class="form-group">' + + '<div class="col-sm-offset-2 col-sm-10">' + + '<button id="newpoll-submit" type="button" class="btn btn-primary" onclick="submitPoll(\'' + sub + '\')">' + + 'Submit' + + '</button>' + + '<div class="pull-right">' + + '<button type="button" title="Add another comment" class="btn btn-success" onclick="addPollField(\'comment\', \'#newpoll-comment-group\')">' + + '<span class="glyphicon glyphicon-pencil"></span>' + + '</button> ' + + '<button type="button" title="Add another answer" class="btn btn-success" onclick="addPollField(\'answer\', \'#newpoll-answer-group\')">' + + '<span class="glyphicon glyphicon-plus"></span>' + + '</button> ' + + '</div>' + + '</div>' + + '</div>' + + '</form>' + + '</li>' + ); + addPollField('comment', '#newpoll-comment-group'); + addPollField('answer', '#newpoll-answer-group'); + addPollField('answer', '#newpoll-answer-group'); + window.location.hash = '#newpoll'; +} + +// Add a reply input form to the page for message with number 'id' in sub 'sub' +function addReply(sub, id) { + if ($('#replybox-' + id).length > 0) return; + $('#li-' + id).append( + '<div class="reply" id="replybox-' + id + '">' + + '<strong>Reply</strong>' + + '<textarea rows="8" class="form-control reply" id="replytext-' + id + '""></textarea>' + + '<button id="quote-' + id + '" class="btn" onclick="quotify(' + id + ')">Quote</button> ' + + '<input id="reply-button-' + id + '" class="btn btn-primary" type="submit" value="Submit" onclick="postReply(\'' + sub + '\', ' + id + ')">' + + '</div>' + ); + v4_get('./api/forum.ssjs?call=get-signature').then(data => { + $('#replytext-' + id).val($('#replytext-' + id).val() + '\r\n' + data.signature); + $('#replytext-' + id)[0].setSelectionRange(0,0); + }); + $('#replytext-' + id).keydown(evt => evt.stopImmediatePropagation()); +} + +function onSubUnreadCount(data) { + for (sub in data) { + if (data[sub].scanned > 0) { + $('#badge-' + sub).text(data[sub].total); + } else if (data[sub].total > 0) { + $('#badge-' + sub).text(data[sub].total); + } else { + $('#badge-' + sub).text(''); + } + } +} + +// 'sub' can be a single sub code, or a string of <sub1>&sub=<sub2>&sub=<sub3>... +async function getSubUnreadCount(sub) { + const res = await v4_get('./api/forum.ssjs?call=get-sub-unread-count&sub=' + sub); + onSubUnreadCount(res); +} + +function onGroupUnreadCount(data) { + for (group in data) { + $('#badge-scanned-' + group).text( + (data[group].scanned == 0 ? "" : data[group].scanned) + ); + $('#badge-ignored-' + group).text( + data[group].total == 0 || data[group].total == data[group].scanned + ? '' + : (data[group].total - data[group].scanned) + ); + } +} + +// 'group' can be a single group index, or a string of 0&group=1&group=2... +async function getGroupUnreadCount(group) { + const res = await v4_get('./api/forum.ssjs?call=get-group-unread-count&group=' + group); + onGroupUnreadCount(res); +} + +function onThreadStats(data) { + Object.keys(data).forEach(e => { + + let div1; + if (!$('#replies-' + e).length) { + div1 = $('#forum-thread-replies-template').clone(); + div1.attr('id', 'replies-' + e); + $('#left-' + e).append(div1); + } else { + div1 = $('#replies-' + e); + } + if (data[e].total > 1) { + div1.find('strong[data-message-count]').first().html(data[e].total - 1); + if (data[e].total == 2) { + div1.find('span[data-suffix-reply]').first().attr('hidden', false); + } else { + div1.find('span[data-suffix-replies]').first().attr('hidden', false); + } + div1.find('strong[data-last-from]').first().html(data[e].newest.from); + div1.find('span[data-last-time]').first().html(data[e].newest.date); + div1.attr('hidden', false); + } + + let div2; + if (!$('#stats-' + e).length) { + div2 = $('#forum-thread-stats-template').clone(); + div2.attr('id', 'stats-' + e); + $('#right-' + e).append(div2); + } else { + div2 = $('#stats-' + e); + } + if (data[e].unread) { + const urm = div2.find('span[data-unread-messages]'); + if (urm.length) { + urm.first().html(data[e].unread); + urm.first().attr('hidden', false); + div2.attr('hidden', false); + } + } + + if (data[e].votes.total) { + if (data[e].votes.up.t) { + div2.find('span[data-upvotes]').first().html(data[e].votes.up.p + '/' + data[e].votes.up.t); + div2.find('span[data-upvotes-badge]').first().css('display', ''); + } + if (data[e].votes.down.t) { + div2.find('span[data-downvotes]').first().html(data[e].votes.down.p + '/' + data[e].votes.down.t); + div2.find('span[data-downvotes-badge]').first().css('display', ''); + } + div2.attr('hidden', false); + } + + }); +} + +/* Fetch a private mail message's body (with links to attachments) where 'id' + is the message number. Output it to an element with id 'message-<id>'. */ +async function getMailBody(id) { + if (!$('#message-' + id).attr('hidden')) { + $('#message-' + id).attr('hidden', true); + } else if ($('#message-' + id).html() != '') { + $('#message-' + id).attr('hidden', false); + } else { + const data = await v4_get('./api/forum.ssjs?call=get-mail-body&number=' + id); + var str = data.body; + if (data.inlines && data.inlines.length > 0) { + str += '<br>Inline attachments: ' + data.inlines.join('<br>') + '<br>'; + } + if (data.attachments && data.attachments.length > 0) { + str += '<br>Attachments: ' + data.attachments.join('<br>') + '<br>'; + } + str += + '<button class="btn btn-default icon" ' + + 'aria-label="Reply to this message" ' + + 'title="Reply to this message" ' + + 'name="reply-' + id + '" ' + + 'onclick="addReply(\'mail\',' + id + ')">' + + '<span class="glyphicon glyphicon-comment"></span>' + + '</button>' + + '<button class="btn btn-default icon" aria-label="Delete this message" ' + + 'title="Delete this message" onclick="deleteMessage(\'mail\',' + id + ')">' + + '<span class="glyphicon glyphicon-trash"></span>' + + '</button>'; + $('#message-' + id).html(str); + $('#message-' + id).attr('hidden', false); + } +} + +async function setScanCfg(sub, cfg) { + var opts = [ 'scan-cfg-off', 'scan-cfg-new', 'scan-cfg-youonly' ]; + const data = await v4_get('./api/forum.ssjs?call=set-scan-cfg&sub=' + sub + '&cfg=' + cfg); + if (!data.success) return; + opts.forEach((e, i) => { + $('#' + e).toggleClass('btn-primary', (cfg == i)); + $('#' + e).toggleClass('btn-default', (cfg != i)); + }); +} + +function threadNav() { + + if (window.location.hash === '') { + $($('#forum-list-container').children('.list-group-item')[0]).addClass('current'); + } else if ($('#li-' + window.location.hash.substr(1)).length > 0) { + $('#li-' + window.location.hash.substr(1)).addClass('current'); + } + + $(window).keydown(function (evt) { + var cid = $($('#forum-list-container').children('.current')[0]).attr('id').substr(3); + switch (evt.keyCode) { + case 37: + // Left + window.location.hash = $('#pm-' + cid).attr('href'); + break; + case 39: + // Right + window.location.hash = $('#nm-' + cid).attr('href'); + break; + default: + break; + } + }); + + $(window).on('hashchange', function () { + $('#forum-list-container').children('.current').removeClass('current'); + var id = window.location.hash.substr(1); + if ($('#li-' + id).length < 1) return; + $('#li-' + id).addClass('current'); + }); + +} + +async function vote(sub, id) { + id = id.split('-'); + if (id.length != 2 || (id[0] != 'uv' && id[0] != 'dv') || isNaN(parseInt(id[1]))) { + return; + } + const data = await v4_get('./api/forum.ssjs?call=vote&sub=' + sub + '&id=' + id[1] + '&up=' + (id[0] === 'uv' ? 1 : 0)); + if (!data.success) return; + $('#' + id[0] + '-' + id[1]).addClass(id[0] === 'uv' ? 'upvote-fg' : 'downvote-fg'); + $('#' + id[0] + '-' + id[1]).attr('disabled', true); + $('#' + id[0] + '-' + id[1]).blur(); + const count = parseInt($('#' + id[0] + '-count-' + id[1]).text()) + 1; + $('#' + id[0] + '-count-' + id[1]).text(count); +} + +function enableVoteButtonHandlers(sub) { + $('.btn-uv').click(function () { + vote(sub, this.id); + }); + $('.btn-dv').click(function () { + vote(sub, this.id); + }); +} + +async function getVotesInThread(sub, id) { + const data = await v4_get('./api/forum.ssjs?call=get-thread-votes&sub=' + sub + '&id=' + id); + Object.keys(data.m).forEach(m => { + var uv = parseInt($('#uv-count-' + m).text()); + var dv = parseInt($('#dv-count-' + m).text()); + if (uv !== data.m[m].u) { + $('#uv-count-' + m).text(data.m[m].u); + $('#uv-' + m).addClass('indicator'); + } + if (dv !== data.m[m].d) { + $('#dv-count-' + m).text(data.m[m].d); + $('#dv-' + m).addClass('indicator'); + } + switch (data.m[m].v) { + case 1: + $('#uv-' + m).addClass('upvote-fg'); + $('#uv-' + m).attr('disabled', true); + $('#dv-' + m).attr('disabled', true); + break; + case 2: + $('#dv-' + m).addClass('downvote-fg'); + $('#uv-' + m).attr('disabled', true); + $('#dv-' + m).attr('disabled', true); + break; + default: + break; + } + }); +} + +async function getVotesInThreads(sub) { + const data = await v4_get('./api/forum.ssjs?call=get-sub-votes&sub=' + sub); + Object.keys(data).forEach(t => { + var uv = data[t].p.u + ' / ' + data[t].t.u; + var dv = data[t].p.d + ' / ' + data[t].t.d; + if (uv !== $('#uv-count-' + t).text()) $('#uv-count-' + t).text(uv); + if (dv !== $('#dv-count-' + t).text()) $('#dv-count-' + t).text(dv); + }); +} + +async function submitPollAnswers(sub, id) { + if ($('input[name="poll-' + id + '"]:checked').length < 1) return; + var answers = []; + $('input[name="poll-' + id + '"]:checked').each(function () { + answers.push($(this).val()); + }); + answers = answers.join('&answer='); + + const post_data = { + call: 'submit-poll-answers', + sub, + id, + answer: answers + }; + const data = await v4_post('./api/forum.ssjs', post_data); + $('input[name="poll-' + id + '"]').each(function () { + $(this).attr('disabled', true); + if ($(this).prop('checked')) { + $(this).parent().parent().addClass('upvote-bg'); + } + }); + $('submit-poll-' + id).attr('disabled', true); +} + +function pollControl(id, count) { + $('input[name="poll-' + id + '"]').each(function () { + $(this).change(function () { + if ($('input[name="poll-' + id + '"]:checked').length >= count) { + $('input[name="poll-' + id + '"]:not(:checked)').each(function () { + $(this).attr('disabled', true); + }); + } else { + $('input[name="poll-' + id + '"]:not(:checked)').each(function () { + $(this).attr('disabled', false); + }); + } + }); + }); +} + +async function getPollData(sub, id) { + const data = await v4_get('./api/forum.ssjs?call=get-poll-results&sub=' + sub + '&id=' + id); + data.tally.forEach((e, i) => { + if (e > 0) $('#poll-count-' + id + '-' + i).text(e); + }); + if (data.answers > 0) { + $('input[name="poll-' + id + '"]').each(function () { + $(this).attr('disabled', true); + }); + $('#submit-poll-' + id).attr('disabled', true); + } +} diff --git a/webv4/root/js/graphics-converter.js b/webv4/root/js/graphics-converter.js new file mode 100644 index 0000000000000000000000000000000000000000..7bd086a0c70d2c2fd66738de7fa8b1b71032532c --- /dev/null +++ b/webv4/root/js/graphics-converter.js @@ -0,0 +1,281 @@ +function GraphicsConverter(spritesheet_src, font_width, font_height, spritesheet_columns, spritesheet_rows) { + + if (!spritesheet_src) spritesheet_src = '/images/cp437-ibm-vga8.png'; + if (!font_width) font_width = 8; + if (!font_height) font_height = 16; + if (!spritesheet_columns) spritesheet_columns = 64; + if (!spritesheet_rows) spritesheet_rows = 4; + + const COLORS = [ + "#000000", // Black + "#0000A8", // Blue + "#00A800", // Green + "#00A8A8", // Cyan + "#A80000", // Red + "#A800A8", // Magenta + "#A85400", // Brown + "#A8A8A8", // Light Grey + "#545454", // Dark Grey (High Black) + "#5454FC", // Light Blue + "#54FC54", // Light Green + "#54FCFC", // Light Cyan + "#FC5454", // Light Red + "#FC54FC", // Light Magenta + "#FCFC54", // Yellow (High Brown) + "#FFFFFF" // White + ]; + + const ANSI_COLORS = [ + "#000000", // Black + "#A80000", // Red + "#00A800", // Green + "#A85400", // Brown + "#0000A8", // Blue + "#A800A8", // Magenta + "#00A8A8", // Cyan + "#A8A8A8", // Light Grey + "#545454", // Dark Grey (High Black) + "#FC5454", // Light Red + "#54FC54", // Light Green + "#FCFC54", // Yellow (High Brown) + "#5454FC", // Light Blue + "#FC54FC", // Light Magenta + "#54FCFC", // Light Cyan + "#FFFFFF" // White + ]; + + function get_workspace(cols, rows, callback) { + + const container = document.createElement('div'); + + const canvas = document.createElement('canvas'); + const ctx = canvas.getContext('2d'); + ctx.canvas.width = cols * font_width; + ctx.canvas.height = rows * font_height; + ctx.fillStyle = COLORS[0]; + ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height); + + const spritesheet_canvas = document.createElement('canvas'); + const spritesheet_ctx = spritesheet_canvas.getContext('2d'); + spritesheet_ctx.canvas.width = spritesheet_columns * font_width; + spritesheet_ctx.canvas.height = spritesheet_rows * font_height; + spritesheet_canvas.style.display = 'none'; + + container.appendChild(canvas); + container.appendChild(spritesheet_canvas); + + const img = new Image(); + img.addEventListener('load', function () { + spritesheet_ctx.drawImage(img, 0, 0); + callback({ + container: container, + ctx: ctx, + spritesheet_ctx: spritesheet_ctx + }) + }); + img.src = spritesheet_src; + + } + + function delete_workspace(workspace) { + $(workspace.container).remove(); + } + + // Clip character # 'char' from the spritesheet and return it as ImageData + function get_character(workspace, char) { + const x = (char * font_width) % (font_width * spritesheet_columns); + const y = font_height * Math.floor(char / spritesheet_columns); + return workspace.spritesheet_ctx.getImageData(x, y, font_width, font_height); + } + + // Draw ImageData 'char' at coordinates 'x', 'y' on the canvas + // Colours 'fg' and 'bg' are values from the COLOURS array + function put_character(workspace, char, x, y, fg, bg) { + // Draw the character + workspace.ctx.globalCompositeOperation = 'source-over'; + workspace.ctx.putImageData(char, x, y); + // Overlay it with the foreground colour + workspace.ctx.fillStyle = fg; + workspace.ctx.globalCompositeOperation = 'source-atop'; + workspace.ctx.fillRect(x, y, font_width, font_height); + // Draw the background colour behind it + workspace.ctx.globalCompositeOperation = 'destination-over'; + workspace.ctx.fillStyle = bg; + workspace.ctx.fillRect(x, y, font_width, font_height); + } + + function get_png(workspace, callback) { + const data = workspace.ctx.canvas.toDataURL(); + const img = new Image(); + img.addEventListener('load', function () { + callback(img); + }); + img.src = data; + } + + this.from_bin = function (bin, cols, rows, callback) { + get_workspace(cols, rows, function (workspace) { + var x = 0; + var y = 0; + for (var n = 0; n < cols * rows * 2; n = n + 2) { + const char = bin.substr(n, 1).charCodeAt(0); + const attr = bin.substr(n + 1, 1).charCodeAt(0); + put_character( + workspace, + get_character(workspace, char), + x * font_width, + y * font_height, + COLORS[attr&15], + COLORS[(attr>>4)&7] + ); + x++; + if (x >= cols) { + x = 0; + y++; + } + } + get_png(workspace, function (img) { + delete_workspace(workspace); + callback(img); + }); + }); + } + + this.from_ans = function (ans, target, rate) { + var x = 0; + var y = 0; + var _x = 0; + var _y = 0; + var fg = 7; + var bg = 0; + var high = 0; + var match; + var opts; + const re = /^\u001b\[((?:[0-9]{0,2};?)*)([a-zA-Z])/; + const data = [[]]; + const seq = []; + while (ans.length) { + match = re.exec(ans); + if (match !== null) { + ans = ans.substr(match[0].length); + opts = match[1].split(';').map(function (e) { + return parseInt(e); + }); + switch (match[2]) { + case 'A': + y = Math.max(y - (opts[0] || 1), 0); + break; + case 'B': + y += (opts[0] || 1); + data[y] = []; + break; + case 'C': + x = Math.min(x + (opts[0] || 1), 79); + break; + case 'D': + x = Math.max(x - (opts[0] || 1), 0); + break; + case 'f': + case 'H': + y = opts[0] || 1; + x = opts[1] || 1; + if (y >= data.length) data[y] = []; + break; + case 'm': + for (var o in opts) { + var i = parseInt(opts[o]); + if (i == 0) { + fg = 7; + bg = 0; + high = 0; + } else if (i == 1) { + high = 1; + } else if (i == 5) { + // blink + } else if (i >= 30 && i <= 37) { + fg = i - 30; + } else if (i >= 40 && i <= 47) { + bg = i - 40; + } + } + break; + case 's': // push xy + _x = x; + _y = y; + break; + case 'u': // pop xy + x = _x; + y = _y; + break; + case 'J': + if (opts.length == 1 && opts[0] == 2) { + for (var yy = 0; yy < data.length; yy++) { + if (!Array.isArray(data[yy])) data[yy] = []; + for (var xx = 0; xx < 80; xx++) { + data[yy][xx] = { c: ' ', a: fg|(bg<<3)|(high<<7) }; + } + } + } + break; + case 'K': + for (var xx = 0; xx < 80; xx++) { + data[y][xx] = { c: ' ', a: fg|(bg<<3)|(high<<7) }; + } + break; + default: + // Unknown or unimplemented command + break; + } + } else { + var ch = ans.substr(0, 1); + switch (ch) { + case '\x1a': + ans = ''; + break; + case '\r': + y++; + data.push([]); + break; + case '\n': + x = 0; + break; + default: + data[y][x] = { c: ch, a: fg|(bg<<3)|(high<<7) }; + seq.push({y:y,x:x}); + x++; + if (x > 79) { + x = 0; + y++; + data.push([]); + } + break; + } + ans = ans.substr(1); + } + } + get_workspace(80, data.length, function (workspace) { + if (typeof target == 'string') { + $(target).prepend(workspace.container); + } + seq.forEach(function (e, i) { + function draw() { + put_character( + workspace, + get_character(workspace, data[e.y][e.x].c.charCodeAt(0)), + e.x * font_width, + e.y * font_height, + ANSI_COLORS[(data[e.y][e.x].a&7) + ((data[e.y][e.x].a&(1<<7)) ? 8 : 0)], + ANSI_COLORS[(data[e.y][e.x].a>>3)&7] + ); + } + if (rate) { + setTimeout(draw, i * Math.ceil(1000 / (rate / 8))); + } else { + draw(); + } + }); + if (typeof target == 'function') get_png(workspace, target); + }); + } + +} diff --git a/webv4/root/js/jquery.min.js b/webv4/root/js/jquery.min.js new file mode 100644 index 0000000000000000000000000000000000000000..f3644431eea2f04111468e57034018c341592f65 --- /dev/null +++ b/webv4/root/js/jquery.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){ +return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m}); +//# sourceMappingURL=jquery.min.map \ No newline at end of file diff --git a/webv4/root/js/offcanvas.js b/webv4/root/js/offcanvas.js new file mode 100644 index 0000000000000000000000000000000000000000..d2f37f22c9c5d682a9b2b6781ea74b44840b3017 --- /dev/null +++ b/webv4/root/js/offcanvas.js @@ -0,0 +1,5 @@ +$(document).ready(function () { + $('[data-toggle="offcanvas"]').click(function () { + $('.row-offcanvas').toggleClass('active') + }); +}); \ No newline at end of file diff --git a/webv4/root/js/validator.js b/webv4/root/js/validator.js new file mode 100644 index 0000000000000000000000000000000000000000..687d9839fa92d862dcf73fc756f176237a38d316 --- /dev/null +++ b/webv4/root/js/validator.js @@ -0,0 +1,325 @@ +/* ======================================================================== + * Bootstrap (plugin): validator.js v0.9.0 + * ======================================================================== + * The MIT License (MIT) + * + * Copyright (c) 2015 Cina Saffary. + * Made by @1000hz in the style of Bootstrap 3 era @fat + * + * 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 THE + * AUTHORS OR COPYRIGHT HOLDERS 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. + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // VALIDATOR CLASS DEFINITION + // ========================== + + var Validator = function (element, options) { + this.$element = $(element) + this.options = options + + options.errors = $.extend({}, Validator.DEFAULTS.errors, options.errors) + + for (var custom in options.custom) { + if (!options.errors[custom]) throw new Error('Missing default error message for custom validator: ' + custom) + } + + $.extend(Validator.VALIDATORS, options.custom) + + this.$element.attr('novalidate', true) // disable automatic native validation + this.toggleSubmit() + + this.$element.on('input.bs.validator change.bs.validator focusout.bs.validator', $.proxy(this.validateInput, this)) + this.$element.on('submit.bs.validator', $.proxy(this.onSubmit, this)) + + this.$element.find('[data-match]').each(function () { + var $this = $(this) + var target = $this.data('match') + + $(target).on('input.bs.validator', function (e) { + $this.val() && $this.trigger('input.bs.validator') + }) + }) + } + + Validator.INPUT_SELECTOR = ':input:not([type="submit"], button):enabled:visible' + + Validator.DEFAULTS = { + delay: 500, + html: false, + disable: true, + custom: {}, + errors: { + match: 'Does not match', + minlength: 'Not long enough' + }, + feedback: { + success: 'glyphicon-ok', + error: 'glyphicon-remove' + } + } + + Validator.VALIDATORS = { + 'native': function ($el) { + var el = $el[0] + return el.checkValidity ? el.checkValidity() : true + }, + 'match': function ($el) { + var target = $el.data('match') + return !$el.val() || $el.val() === $(target).val() + }, + 'minlength': function ($el) { + var minlength = $el.data('minlength') + return !$el.val() || $el.val().length >= minlength + } + } + + Validator.prototype.validateInput = function (e) { + var $el = $(e.target) + var prevErrors = $el.data('bs.validator.errors') + var errors + + if ($el.is('[type="radio"]')) $el = this.$element.find('input[name="' + $el.attr('name') + '"]') + + this.$element.trigger(e = $.Event('validate.bs.validator', {relatedTarget: $el[0]})) + + if (e.isDefaultPrevented()) return + + var self = this + + this.runValidators($el).done(function (errors) { + $el.data('bs.validator.errors', errors) + + errors.length ? self.showErrors($el) : self.clearErrors($el) + + if (!prevErrors || errors.toString() !== prevErrors.toString()) { + e = errors.length + ? $.Event('invalid.bs.validator', {relatedTarget: $el[0], detail: errors}) + : $.Event('valid.bs.validator', {relatedTarget: $el[0], detail: prevErrors}) + + self.$element.trigger(e) + } + + self.toggleSubmit() + + self.$element.trigger($.Event('validated.bs.validator', {relatedTarget: $el[0]})) + }) + } + + + Validator.prototype.runValidators = function ($el) { + var errors = [] + var deferred = $.Deferred() + var options = this.options + + $el.data('bs.validator.deferred') && $el.data('bs.validator.deferred').reject() + $el.data('bs.validator.deferred', deferred) + + function getErrorMessage(key) { + return $el.data(key + '-error') + || $el.data('error') + || key == 'native' && $el[0].validationMessage + || options.errors[key] + } + + $.each(Validator.VALIDATORS, $.proxy(function (key, validator) { + if (($el.data(key) || key == 'native') && !validator.call(this, $el)) { + var error = getErrorMessage(key) + !~errors.indexOf(error) && errors.push(error) + } + }, this)) + + if (!errors.length && $el.val() && $el.data('remote')) { + this.defer($el, function () { + var data = {} + data[$el.attr('name')] = $el.val() + $.get($el.data('remote'), data) + .fail(function (jqXHR, textStatus, error) { errors.push(getErrorMessage('remote') || error) }) + .always(function () { deferred.resolve(errors)}) + }) + } else deferred.resolve(errors) + + return deferred.promise() + } + + Validator.prototype.validate = function () { + var delay = this.options.delay + + this.options.delay = 0 + this.$element.find(Validator.INPUT_SELECTOR).trigger('input.bs.validator') + this.options.delay = delay + + return this + } + + Validator.prototype.showErrors = function ($el) { + var method = this.options.html ? 'html' : 'text' + + this.defer($el, function () { + var $group = $el.closest('.form-group') + var $block = $group.find('.help-block.with-errors') + var $feedback = $group.find('.form-control-feedback') + var errors = $el.data('bs.validator.errors') + + if (!errors.length) return + + errors = $('<ul/>') + .addClass('list-unstyled') + .append($.map(errors, function (error) { return $('<li/>')[method](error) })) + + $block.data('bs.validator.originalContent') === undefined && $block.data('bs.validator.originalContent', $block.html()) + $block.empty().append(errors) + $group.addClass('has-error') + + $feedback.length + && $feedback.removeClass(this.options.feedback.success) + && $feedback.addClass(this.options.feedback.error) + && $group.removeClass('has-success') + }) + } + + Validator.prototype.clearErrors = function ($el) { + var $group = $el.closest('.form-group') + var $block = $group.find('.help-block.with-errors') + var $feedback = $group.find('.form-control-feedback') + + $block.html($block.data('bs.validator.originalContent')) + $group.removeClass('has-error') + + $feedback.length + && $feedback.removeClass(this.options.feedback.error) + && $feedback.addClass(this.options.feedback.success) + && $group.addClass('has-success') + } + + Validator.prototype.hasErrors = function () { + function fieldErrors() { + return !!($(this).data('bs.validator.errors') || []).length + } + + return !!this.$element.find(Validator.INPUT_SELECTOR).filter(fieldErrors).length + } + + Validator.prototype.isIncomplete = function () { + function fieldIncomplete() { + return this.type === 'checkbox' ? !this.checked : + this.type === 'radio' ? !$('[name="' + this.name + '"]:checked').length : + $.trim(this.value) === '' + } + + return !!this.$element.find(Validator.INPUT_SELECTOR).filter('[required]').filter(fieldIncomplete).length + } + + Validator.prototype.onSubmit = function (e) { + this.validate() + if (this.isIncomplete() || this.hasErrors()) e.preventDefault() + } + + Validator.prototype.toggleSubmit = function () { + if(!this.options.disable) return + + var $btn = $('button[type="submit"], input[type="submit"]') + .filter('[form="' + this.$element.attr('id') + '"]') + .add(this.$element.find('input[type="submit"], button[type="submit"]')) + + $btn.toggleClass('disabled', this.isIncomplete() || this.hasErrors()) + } + + Validator.prototype.defer = function ($el, callback) { + callback = $.proxy(callback, this) + if (!this.options.delay) return callback() + window.clearTimeout($el.data('bs.validator.timeout')) + $el.data('bs.validator.timeout', window.setTimeout(callback, this.options.delay)) + } + + Validator.prototype.destroy = function () { + this.$element + .removeAttr('novalidate') + .removeData('bs.validator') + .off('.bs.validator') + + this.$element.find(Validator.INPUT_SELECTOR) + .off('.bs.validator') + .removeData(['bs.validator.errors', 'bs.validator.deferred']) + .each(function () { + var $this = $(this) + var timeout = $this.data('bs.validator.timeout') + window.clearTimeout(timeout) && $this.removeData('bs.validator.timeout') + }) + + this.$element.find('.help-block.with-errors').each(function () { + var $this = $(this) + var originalContent = $this.data('bs.validator.originalContent') + + $this + .removeData('bs.validator.originalContent') + .html(originalContent) + }) + + this.$element.find('input[type="submit"], button[type="submit"]').removeClass('disabled') + + this.$element.find('.has-error').removeClass('has-error') + + return this + } + + // VALIDATOR PLUGIN DEFINITION + // =========================== + + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var options = $.extend({}, Validator.DEFAULTS, $this.data(), typeof option == 'object' && option) + var data = $this.data('bs.validator') + + if (!data && option == 'destroy') return + if (!data) $this.data('bs.validator', (data = new Validator(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.validator + + $.fn.validator = Plugin + $.fn.validator.Constructor = Validator + + + // VALIDATOR NO CONFLICT + // ===================== + + $.fn.validator.noConflict = function () { + $.fn.validator = old + return this + } + + + // VALIDATOR DATA-API + // ================== + + $(window).on('load', function () { + $('form[data-toggle="validator"]').each(function () { + var $form = $(this) + Plugin.call($form, $form.data()) + }) + }) + +}(jQuery); diff --git a/webv4/sidebar/.examples/001-nodelist.xjs b/webv4/sidebar/.examples/001-nodelist.xjs new file mode 100644 index 0000000000000000000000000000000000000000..ed922ea45b322d4ce4dc9ce2fbc5f779f3617035 --- /dev/null +++ b/webv4/sidebar/.examples/001-nodelist.xjs @@ -0,0 +1,149 @@ +<h4><?xjs write(locale.strings.sidebar_node_list.label_title); ?></h4> +<div id="sbbs-nodelist"></div> +<?xjs if (settings.nodelist_ibbs) { ?> + <div id="sbbsimsg-nodelist"></div> +<?xjs } ?> + +<script type="text/javascript"> + + const anl = <?xjs write(settings.active_node_list); ?>; + const nch = '<?xjs write(settings.active_node_list ? locale.strings.sidebar_node_list.label_connection_column : locale.strings.sidebar_node_list.label_node_column) ?>'; + const nll = <?xjs write(system.node_list.length); ?>; + var niu = 0; + var ns = 0; + + function _sb_list_node(e) { + if (e.action === null || e.user === null) return; + $('#sbbs-nodelist-table').append( + '<tr>' + + '<th scope="row">' + + (anl ? e.connection : (typeof e.node == 'number' ? e.node + 1 : e.connection)) + + '</th>' + + '<td id="nodelist-' + e.node + '">' + + (e.user == '' ? e.status : ('<strong>' + e.user + '</strong> ' + e.action)) + + '</td>' + + '</tr>' + ); + if (e.user != '' && <?xjs write(user.alias != settings.guest); ?>) { + $('#nodelist-' + e.node).attr('title', '<?xjs write(locale.strings.sidebar_node_list.label_send_telegram); ?>'); + $('#nodelist-' + e.node).css('cursor', 'pointer'); + $('#nodelist-' + e.node).click(function () { + sendTelegram(e.user); + }); + } + if (typeof e.node == 'number' && e.user != '') niu++; + ns++; + } + + function _sb_nodelist(evt) { + const data = JSON.parse(evt.data); + $('#sbbs-nodelist').parent().addClass('hidden'); + $('#sbbs-nodelist').addClass('hidden'); + $('#sbbs-nodelist').html( + '<table id="sbbs-nodelist-table" class="table table-condensed table-responsive table-striped">' + + '<thead><tr>' + + '<th>' + nch + '</th>' + + '<th><?xjs write(locale.strings.sidebar_node_list.label_status_column); ?></th>' + + '</tr></thead>' + + '<tbody></tbody>' + + '</table>' + ); + niu = 0; + ns = 0; + if (!anl) { + const nodes = Array(nll); + data.forEach(function (e) { + if (typeof e.node == 'number') { + nodes[e.node] = e; + } else { + nodes.push(e); // Web user + } + }); + for (var n = 0; n < nodes.length; n++) { + if (!nodes[n]) { + _sb_list_node({ node: n, user: '', status :'Waiting for call' }); + } else { + _sb_list_node(nodes[n], n); + } + } + $('#sbbs-nodelist').parent().removeClass('hidden'); + } else { + data.forEach(_sb_list_node); + if (ns) { + $('#sbbs-nodelist').parent().removeClass('hidden'); + $('#sbbs-nodelist').removeClass('hidden'); + } + } + // Spans with these classes are used in the 'system stats' sidebar module. + // Update the nodes in use / available counters there. + $('#sidebar').find('.sb-nodes-in-use').text(niu); + $('#sidebar').find('.sb-nodes-available').text(nll - niu); + } + + registerEventListener('nodelist', _sb_nodelist); + + <?xjs if (settings.nodelist_ibbs) { ?> + function _send_ibbs_telegram(sys, host, user) { + async function send_ibbs_tg(evt) { + if (typeof evt !== 'undefined') evt.preventDefault(); + await v4_post('./api/sbbsimsg.ssjs', { + call: 'send_telegram', + username: user, + host: host, + message: $('#telegram').val() + }); + $('#popUpModal').modal('hide'); + }; + $('#popUpModalTitle').html('Send a telegram to ' + user + '@' + sys); + $('#popUpModalBody').html( + '<form id="ibbs-telegram-form">' + + '<input type="text" class="form-control" placeholder="My message" name="telegram" id="telegram">' + + '<input type="submit" value="submit" class="hidden">' + + '</form>' + ); + $('#popUpModalActionButton').show(); + $('#ibbs-telegram-form').submit(send_ibbs_tg); + $('#popUpModalActionButton').click(send_ibbs_tg); + $('#popUpModal').modal('show'); + } + + registerEventListener('sbbsimsg', function (e) { + const data = JSON.parse(e.data); + var users = 0; + $('#sbbsimsg-nodelist').addClass('hidden'); + $('#sbbsimsg-nodelist').html('<h4>Other Systems</h4>'); + Object.keys(data).forEach(function (e, i) { + if (!data[e].users.length) return; + const id = 'sbbsimsg-nodelist-' + i; + $('#sbbsimsg-nodelist').append( + '<table id="' + id + '" class="table table-condensed table-responsive table-striped">' + + '<tr><td><strong>' + e + '</strong></td></tr>' + + '</table>' + ); + data[e].users.forEach(function (ee, ii) { + const nid = id + '-' + ii; + $('#' + id).append( + '<tr>' + + '<td id="' + nid + '">' + + '<strong>' + ee.name + '</strong> ' + ee.action + + '</td>' + +'</tr>' + ); + if (<?xjs write(user.alias != settings.guest); ?>) { + $('#' + nid).click(function () { + _send_ibbs_telegram(e, data[e].host, ee.name); + }); + $('#' + nid).attr('title', '<?xjs write(locale.strings.sidebar_node_list.label_send_telegram); ?>'); + $('#' + nid).css('cursor', 'pointer'); + } + }); + users += data[e].users.length; + }); + if (users) { + $('#sbbsimsg-nodelist').removeClass('hidden'); + $('#sbbs-nodelist').parent().removeClass('hidden'); + } + }); + <?xjs } ?> + +</script> diff --git a/webv4/sidebar/.examples/002-recent-visitors.xjs b/webv4/sidebar/.examples/002-recent-visitors.xjs new file mode 100644 index 0000000000000000000000000000000000000000..26177f8831a4079973df358b3cdad9deb703c73f --- /dev/null +++ b/webv4/sidebar/.examples/002-recent-visitors.xjs @@ -0,0 +1,27 @@ +<?xjs + const logonlist_lib = load({}, 'logonlist_lib.js'); + const options = load("modopts.js", "logonlist") || {}; + if (options.last_few_callers === undefined) options.last_few_callers = 4; + const ll = logonlist_lib.get(-options.last_few_callers); + if (Array.isArray(ll)) { +?> + + <h4><? locale.write('label_title', 'sidebar_recent_visitors'); ?></h4> + <ul class="list-group"> + <?xjs ll.reverse().forEach(function (e) { ?> + <li class="list-group-item striped"> + <strong><? write(e.user.alias); ?></strong> + <br> + <em><? write(new Date(e.time * 1000).toLocaleString()); ?></em> + <br> + <?xjs if (e.user.location != '') { ?> + <? locale.write('label_location', 'sidebar_recent_visitors'); ?> + <strong><? write(e.user.location); ?></strong> + <?xjs } ?> + <? locale.write('label_connection', 'sidebar_recent_visitors'); ?> + <strong><? write(e.user.connection); ?></strong> + </li> + <?xjs }); ?> + </ul> + +<?xjs } ?> diff --git a/webv4/sidebar/.examples/003-systemStats.xjs b/webv4/sidebar/.examples/003-systemStats.xjs new file mode 100644 index 0000000000000000000000000000000000000000..e7f0b36796719b10754e3904b252410a6b78d27d --- /dev/null +++ b/webv4/sidebar/.examples/003-systemStats.xjs @@ -0,0 +1,102 @@ +<?xjs + var _sb_niu = system.node_list.reduce(function (a, c) { + return (c.status == 3 ? a + 1 : a); + }, 0); + require('file_size.js', 'file_size_str'); +?> + +<h4>System Info</h4> +<table class="table table-condensed table-responsive table-striped"> + <tbody> + + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_sysop); ?></th> + <td><?xjs write(system.operator); ?></td> + </tr> + + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_location); ?></th> + <td><?xjs write(system.location); ?></td> + </tr> + + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_users); ?></th> + <td><?xjs write(locale.group_numbers(system.stats.total_users)); ?></td> + </tr> + + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_nodes); ?></th> + <td> + <?xjs write(system.nodes); ?> + (<span title="In use" class="text-danger sb-nodes-in-use"><?xjs write(_sb_niu); ?></span> + / + <span title="Available" class="text-success sb-nodes-available"><?xjs write(system.nodes - _sb_niu); ?></span>) + </td> + </tr> + + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_uptime); ?></th> + <td><?xjs write(system.secondstr(time() - system.uptime)); ?></td> + </tr> + + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_calls_total); ?></th> + <td><?xjs write(locale.group_numbers(system.stats.total_logons)); ?></td> + </tr> + + <?xjs if (!settings.hide_empty_stats || system.stats.logons_today) { ?> + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_calls_today); ?></th> + <td><?xjs write(locale.group_numbers(system.stats.logons_today)); ?></td> + </tr> + <?xjs } ?> + + <?xjs if (!settings.hide_empty_stats || system.stats.total_files) { ?> + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_files_total); ?></th> + <td><?xjs write(locale.group_numbers(system.stats.total_files)); ?></td> + </tr> + <?xjs } ?> + + <?xjs if (!settings.hide_empty_stats || system.stats.files_uploaded_today) { ?> + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_files_uploaded_today); ?></th> + <td> + <?xjs write(locale.group_numbers(system.stats.files_uploaded_today)); ?> + <?xjs write(locale.strings.sidebar_system_info.stat_suffix_files); ?> + <br> + (<?xjs write(file_size_str(system.stats.bytes_uploaded_today)); ?> + <?xjs write(locale.strings.sidebar_system_info.stat_suffix_bytes); ?>) + </td> + </tr> + <?xjs } ?> + + <?xjs if (!settings.hide_empty_stats || system.stats.files_downloaded_today) { ?> + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_files_downloaded_today); ?></th> + <td> + <?xjs write(locale.group_numbers(system.stats.files_downloaded_today)); ?> + <?xjs write(locale.strings.sidebar_system_info.stat_suffix_files); ?> + <br> + (<?xjs write(file_size_str(system.stats.bytes_downloaded_today)); ?> + <?xjs write(locale.strings.sidebar_system_info.stat_suffix_bytes); ?>) + </td> + </tr> + <?xjs } ?> + + <?xjs if (!settings.hide_empty_stats || system.stats.total_messages) { ?> + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_messages_total); ?></th> + <td><?xjs write(locale.group_numbers(system.stats.total_messages)); ?></td> + </tr> + <?xjs } ?> + + <?xjs if (!settings.hide_empty_stats || system.stats.messages_posted_today) { ?> + <tr> + <th scope="row"><?xjs write(locale.strings.sidebar_system_info.label_messages_posted_today); ?></th> + <td><?xjs write(locale.group_numbers(system.stats.messages_posted_today)); ?></td> + </tr> + <?xjs } ?> + + </tbody> +</table> diff --git a/xtrn/ansiview/install-xtrn.ini b/xtrn/ansiview/install-xtrn.ini index 58eb5d1581619e20b1dcd6f2b06e6e350955d7cc..cf8b88760a2f6a2ecdfdaa015069f891dabc2dee 100644 --- a/xtrn/ansiview/install-xtrn.ini +++ b/xtrn/ansiview/install-xtrn.ini @@ -3,8 +3,14 @@ Desc: Browse and view text files, ANSI & ASCII art By: echicken -at- bbs.electronicchicken.com Cats: Main Subs: ANSI, JavaScript -Inst: $Id: install-xtrn.ini,v 1.2 2020/04/25 02:38:58 rswindell Exp $ +Inst: 2020/09/07 [prog:ANSIVIEW] cmd = ?ansiview settings = XTRN_MULTIUSER +required = true + +[ini:settings.ini:electronic chicken bbs] +prompt = Link online ANSI archive from electronic chicken bbs +keys = description,module,cache,cachettl +values = 'An online archive of ANSI and ASCII artwork','ecbbs.js',true,86400 diff --git a/xtrn/ansiview/settings.ini b/xtrn/ansiview/settings.ini index 9271971dc52e538fe047ba22b2d24073ba9f5a74..d85c03dd3025244d9f2435aa8740db13beeb9bbb 100644 --- a/xtrn/ansiview/settings.ini +++ b/xtrn/ansiview/settings.ini @@ -6,11 +6,11 @@ lbg = BG_CYAN sfg = WHITE sbg = BG_BLUE -[ANSI Gallery] -description = A local archive of ANSI and ASCII artwork -module = local.js -path = /sbbs/xtrn/ansiview/library/ansi -hide = *.exe,*.com +;[ANSI Gallery] +;description = A local archive of ANSI and ASCII artwork +;module = local.js +;path = /sbbs/xtrn/ansiview/library/ansi +;hide = *.exe,*.com ;[electronic chicken bbs] ;description = An online archive of ANSI and ASCII artwork diff --git a/xtrn/bublbogl/install-xtrn.ini b/xtrn/bublbogl/install-xtrn.ini index e045a4a282e3ae269f965e451bbbb52269ce24cf..9367bea405539b483705f6ab70836229bd8e0780 100644 --- a/xtrn/bublbogl/install-xtrn.ini +++ b/xtrn/bublbogl/install-xtrn.ini @@ -3,13 +3,19 @@ Desc: A timed English-word creation game By: mcmlxxix (Matt Johnson) Cats: Games Subs: Puzzle, Multiplayer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 07:26:41 rswindell Exp $ +Inst: 2020/09/14 [prog:BOGGLE] cmd = ?boggle.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with The BRoKEN BUBBLe BBS +keys = host +values = 'bbs.thebrokenbubble.com' +done = true + !include install-json-service.ini [ini:json-service.ini:boggle] diff --git a/xtrn/bullshit/install-xtrn.ini b/xtrn/bullshit/install-xtrn.ini new file mode 100644 index 0000000000000000000000000000000000000000..f13d2e5743bb8551464d693a18fa05d290f596b7 --- /dev/null +++ b/xtrn/bullshit/install-xtrn.ini @@ -0,0 +1,13 @@ +Name: Bullshit +Desc: Lightbar sysop bulletin lister/reader for Synchronet +By: echicken -at- bbs.electronicchicken.com +Cats: Main +Subs: Bulletins, JavaScript +Inst: 2020/09/07 +xtrn-setup: false + +[prog:BULLSHIT] +cmd = ?bullshit.js +settings = XTRN_MULTIUSER +required = true +event = EVENT_LOGON diff --git a/xtrn/chickendelivery/install-xtrn.ini b/xtrn/chickendelivery/install-xtrn.ini index 4a208b21f0941ec1550767bd847d272623285775..a1d07ad5615abb742f58b5a93e933f08abbc6e82 100644 --- a/xtrn/chickendelivery/install-xtrn.ini +++ b/xtrn/chickendelivery/install-xtrn.ini @@ -3,15 +3,21 @@ Desc: You are a chicken on a mission. By: echicken -at- bbs.electronicchicken.com Cats: Games Subs: Platfomer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 07:56:36 rswindell Exp $ +Inst: 2020/09/07 [prog:CHICKEN] cmd = ?chickendelivery.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with electronic chicken bbs +keys = host +values = 'bbs.electronicchicken.com' +done = true + !include install-json-service.ini -[ini:json-service.ini:chicken] -keys=dir -values=startup_dir \ No newline at end of file +[ini:json-service.ini:chickendelivery2] +keys = dir +values = startup_dir \ No newline at end of file diff --git a/xtrn/chickendelivery/server.ini b/xtrn/chickendelivery/server.ini index 6866649958644825df89f80f8d2dc49d35d98a5d..ba4fcce5fb7800ccfe3179c5d78a47e636f9d033 100644 --- a/xtrn/chickendelivery/server.ini +++ b/xtrn/chickendelivery/server.ini @@ -1,3 +1,3 @@ -host=bbs.electronicchicken.com +host=localhost port=10088 autoupdate=true diff --git a/xtrn/dicewarz2/install-xtrn.ini b/xtrn/dicewarz2/install-xtrn.ini index 4627482b304206f6df5c89cf6dabe9232d538e2d..0f4415bf9a93870deb3508c6f5217314d11d2ab1 100644 --- a/xtrn/dicewarz2/install-xtrn.ini +++ b/xtrn/dicewarz2/install-xtrn.ini @@ -3,13 +3,19 @@ Desc: Modeled after "Dice Wars" web strategy game involving dice, like Risk By: mcmlxxix (Matt Johnson) Cats: Games Subs: Puzzle, Multiplayer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.2 2020/04/17 09:19:33 rswindell Exp $ +Inst: 2020/09/14 [prog:DICEWAR2] cmd = ?dice2.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with The BRoKEN BUBBLe BBS +keys = host +values = 'bbs.thebrokenbubble.com' +done = true + !include install-json-service.ini [ini:json-service.ini:dicewarz2] diff --git a/xtrn/dpoker/install-xtrn.ini b/xtrn/dpoker/install-xtrn.ini new file mode 100644 index 0000000000000000000000000000000000000000..fc52169835045e84aa7494dbbf9591d9974cbfe7 --- /dev/null +++ b/xtrn/dpoker/install-xtrn.ini @@ -0,0 +1,13 @@ +Name: Domain Poker +Desc: Real-time 5 card draw poker +By: King Drafus (Allen Christiansen), Domain Entertainment +Cats: Games +Subs: Casino, Cards, Multiplayer, Native +Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 08:41:51 rswindell Exp $ + +[prog:DPOKER] +cmd = dpoker%. /l +clean_cmd = dpoker%. /clean +settings = XTRN_MULTIUSER|XTRN_NATIVE|XTRN_MODUSERDAT +type = XTRN_SBBS +required = true diff --git a/xtrn/druglord/install-xtrn.ini b/xtrn/druglord/install-xtrn.ini index 60a2343b60e221a499937c0a80a3f0eacfe82f23..4bbaac2a7eb2fc35167f30b330e216b40b5c9283 100644 --- a/xtrn/druglord/install-xtrn.ini +++ b/xtrn/druglord/install-xtrn.ini @@ -3,13 +3,20 @@ Desc: Similar to Dope Wars and its derivatives By: art, at fatcatsbbs dot com Cats: Games Subs: Drugs, Simulation, Multiplayer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 09:13:48 rswindell Exp $ +Inst: 2020/09/16 [prog:DRUGLORD] cmd = ?druglord.js settings = XTRN_MULTIUSER +execution_ars = ANSI required = true +[ini:server.ini] +prompt = Share data with romulusbbs.com +keys = host +values = 'romulusbbs.com' +done = true + !include install-json-service.ini [ini:json-service.ini:druglord] diff --git a/xtrn/druglord/server.ini b/xtrn/druglord/server.ini new file mode 100644 index 0000000000000000000000000000000000000000..aa1e15cde4293984215e0925b9bbe3aa76182a8c --- /dev/null +++ b/xtrn/druglord/server.ini @@ -0,0 +1,2 @@ +host=localhost +port=10088 diff --git a/xtrn/fatfish/install-xtrn.ini b/xtrn/fatfish/install-xtrn.ini index b0dd5f123422b5ddc7f47d1dc603fbfebb50b671..41b0ab61012dd9b1116a07f1623c4a06cb046849 100644 --- a/xtrn/fatfish/install-xtrn.ini +++ b/xtrn/fatfish/install-xtrn.ini @@ -3,13 +3,20 @@ Desc: Fishing simulation door game By: art, at fatcatsbbs dot com Cats: Games Subs: Sport, Simulation, Multiplayer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 08:05:27 rswindell Exp $ +Inst: 2020/09/16 [prog:FATFISH] cmd = ?fatfish.js settings = XTRN_MULTIUSER +execution_ars = ANSI required = true +[ini:server.ini] +prompt = Share data with romulusbbs.com +keys = host +values = 'romulusbbs.com' +done = true + !include install-json-service.ini [ini:json-service.ini:fatfish] diff --git a/xtrn/fatfish/server.ini b/xtrn/fatfish/server.ini new file mode 100644 index 0000000000000000000000000000000000000000..aa1e15cde4293984215e0925b9bbe3aa76182a8c --- /dev/null +++ b/xtrn/fatfish/server.ini @@ -0,0 +1,2 @@ +host=localhost +port=10088 diff --git a/xtrn/go-for/install-xtrn.ini b/xtrn/go-for/install-xtrn.ini new file mode 100644 index 0000000000000000000000000000000000000000..9d3c4596260c75f30a3c23b22efe02d9d53cbd75 --- /dev/null +++ b/xtrn/go-for/install-xtrn.ini @@ -0,0 +1,11 @@ +Name: Go-for +Desc: A quickly thrown-together gopher client +By: echicken +Cats: Main, Communications +Subs: Gopher, JavaScript +Inst: 2020/09/08 + +[prog:GO-FOR] +cmd = ?go-for.js +settings = XTRN_MULTIUSER +required = true diff --git a/xtrn/gooble/install-xtrn.ini b/xtrn/gooble/install-xtrn.ini index f5849f4fdb14d1f1e47b5ad1ee5394244768392a..83c69b98bd364f5c89a3797629971c7507378208 100644 --- a/xtrn/gooble/install-xtrn.ini +++ b/xtrn/gooble/install-xtrn.ini @@ -3,15 +3,21 @@ Desc: A Pac-Man knock-off for Synchronet BBS By: echicken -at- bbs.electronicchicken.com Cats: Games Subs: Classic, Clone, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 08:09:04 rswindell Exp $ +Inst: 2020/09/07 [prog:GOOBLE] cmd = ?gooble.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with electronic chicken bbs +keys = host +values = 'bbs.electronicchicken.com' +done = true + !include install-json-service.ini -[ini:json-service.ini:gooble] +[ini:json-service.ini:gooble2] keys=dir values=startup_dir \ No newline at end of file diff --git a/xtrn/gooble/server.ini b/xtrn/gooble/server.ini new file mode 100644 index 0000000000000000000000000000000000000000..aa1e15cde4293984215e0925b9bbe3aa76182a8c --- /dev/null +++ b/xtrn/gooble/server.ini @@ -0,0 +1,2 @@ +host=localhost +port=10088 diff --git a/xtrn/hamtest/install-xtrn.ini b/xtrn/hamtest/install-xtrn.ini index a18af1724bb813c720360a2ae74081285506b108..d72c0ec2f9d7f9fc2965d58a3df09c8e1d5fb312 100644 --- a/xtrn/hamtest/install-xtrn.ini +++ b/xtrn/hamtest/install-xtrn.ini @@ -1,9 +1,9 @@ Name: HAM Test Desc: Amateur radio operator license exam practice tests By: Deuce (Stephen Hurd) -Cats: Tests +Cats: Tests, Main Subs: Radio, HAM, JavaScript -Inst: $Id: install-xtrn.ini,v 1.2 2020/04/17 08:27:36 rswindell Exp $ +Inst: 2020/09/16 [prog:HAMTEST] cmd = ?hamtest.js diff --git a/xtrn/knk/install-xtrn.ini b/xtrn/knk/install-xtrn.ini index 6dbb45b62cc3aaa585ba0552860ad0df5e6d7e79..cf3c508a808e19dd20995664c9bd0fd07a39da0c 100644 --- a/xtrn/knk/install-xtrn.ini +++ b/xtrn/knk/install-xtrn.ini @@ -10,3 +10,4 @@ Inst: $Id: install-xtrn.ini,v 1.2 2020/04/17 09:20:20 rswindell Exp $ [prog:KNK] cmd = ?knk.js settings = XTRN_MULTIUSER +execution_ars = ANSI diff --git a/xtrn/lemons/install-xtrn.ini b/xtrn/lemons/install-xtrn.ini index 403500a10a07e152840768e694e024d23015ed12..b956a548b58c79c41713f48f5e2d9f1ec602fd03 100644 --- a/xtrn/lemons/install-xtrn.ini +++ b/xtrn/lemons/install-xtrn.ini @@ -3,13 +3,19 @@ Desc: <MegaloYeti> someone needs to make a new lemmings game <echicken> claimed By: echicken -at- bbs.electronicchicken.com Cats: Games Subs: Platfomer, Clone, JavaScript -Inst: $Id: install-xtrn.ini,v 1.2 2020/04/17 08:13:20 rswindell Exp $ +Inst: 2020/09/11 [prog:LEMONS] cmd = ?lemons.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with electronic chicken bbs +keys = host +values = 'bbs.electronicchicken.com' +done = true + !include install-json-service.ini [ini:json-service.ini:lemons] diff --git a/xtrn/lemons/server.ini b/xtrn/lemons/server.ini new file mode 100644 index 0000000000000000000000000000000000000000..aa1e15cde4293984215e0925b9bbe3aa76182a8c --- /dev/null +++ b/xtrn/lemons/server.ini @@ -0,0 +1,2 @@ +host=localhost +port=10088 diff --git a/xtrn/lord/grabbag/grabbag.js b/xtrn/lord/grabbag/grabbag.js index 786052fc2684ad404bf677fca78984c4b82de80c..0b81a7f4d270931c584c5830e80a752cd319b0bf 100644 --- a/xtrn/lord/grabbag/grabbag.js +++ b/xtrn/lord/grabbag/grabbag.js @@ -3014,24 +3014,6 @@ function run_maint(b) var bs; load('array.js'); // probably no longer needed var mnum = undefined; -if (player.level === 1) -{ - mnum = random(10); -} -else -{ - if (random(6) !== 2) - { - mnum = ((player.level-1)*11)+random(10); - } - else - { - mnum = (random(player.level) * 11) + random(10); - } -} - -var husband = load_monster(mnum); // sets up monster battle and nymph husband - // end globals function main() @@ -3185,6 +3167,24 @@ if (argc == 1 && argv[0] == 'INSTALL') { exit(0); } else { + if (player.level === 1) + { + mnum = random(10); + } + else + { + if (random(6) !== 2) + { + mnum = ((player.level-1)*11)+random(10); + } + else + { + mnum = (random(player.level) * 11) + random(10); + } + } + + var husband = load_monster(mnum); // sets up monster battle and nymph husband + main(); exit(0); // most routines end with good_bye(); } diff --git a/xtrn/lord/install-xtrn.ini b/xtrn/lord/install-xtrn.ini index 10acf56bebd452a7050ebaabec3c06753033b154..4ff116adfc0e8fbd583b504e6cc97ef7e42c92b7 100644 --- a/xtrn/lord/install-xtrn.ini +++ b/xtrn/lord/install-xtrn.ini @@ -1,4 +1,3 @@ -; $Id: install-xtrn.ini,v 1.4 2020/04/21 04:41:22 rswindell Exp $ ; LORD installer data for install-xtrn.js Name: Legend of the Red Dragon @@ -6,23 +5,23 @@ Desc: The ever-popular multi-player battle game created for Bulletin Board Syste By: Seth Able Robinson, Deuce (Stephen Hurd) Cats: Games Subs: Adventure, Classic, Multiplayer, JavaScript, Port -Inst: $Id: install-xtrn.ini,v 1.4 2020/04/21 04:41:22 rswindell Exp $ +Inst: 2020/09/20 [prog:LORD] cmd = ?lord -ars = NOT GUEST +execution_ars = ANSI AND NOT GUEST settings = XTRN_MULTIUSER required = true [prog:LORD-CFG] name = Legend of the Red Dragon - Configure -note = If you have an "Operator" section, you may want to install this there +cats = Operator cmd = ?editfile %slord.ini ars = SYSOP [prog:LORD-RST] name = Legend of the Red Dragon - Reset -note = If you have an "Operator" section, you may want to install this there +cats = Operator cmd = ?lord RESET ars = SYSOP @@ -36,4 +35,7 @@ prompt = Install LORD IGM: The Grab Bag prompt = Install LORD IGM: Aragorn's Timer [exec:lord.js +IGM oorphans/oorphans.js] -prompt = Install Olodrin's Orphanage +prompt = Install LORD IGM: Olodrin's Orphanage + +[exec:lord.js +IGM pickle/pickle.js] +prompt = Install LORD IGM: Pickle's Magic Garden diff --git a/xtrn/lord/lord.js b/xtrn/lord/lord.js index b0cbbc719be18942bf9aeb03b7bd99fe56790616..d39792bd53347c1d2ba6745066d04bcb28f64b88 100644 --- a/xtrn/lord/lord.js +++ b/xtrn/lord/lord.js @@ -1788,7 +1788,8 @@ function rfmutex(fname) fname += '.lock'; idx = cleanup_files.indexOf(fname); if (idx === -1) { - throw new Error('Removing unknown fmutex '+fname); + // throw new Error('Removing unknown fmutex '+fname); + return; } file_remove(fname); cleanup_files.splice(idx, 1); diff --git a/xtrn/lord/menus/nuktown/readme.exe b/xtrn/lord/menus/nuktown/readme.exe deleted file mode 100644 index 53503b5d70386fb795278d5abcacaef765d7cf74..0000000000000000000000000000000000000000 Binary files a/xtrn/lord/menus/nuktown/readme.exe and /dev/null differ diff --git a/xtrn/lord/pickle/LICENSE b/xtrn/lord/pickle/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f288702d2fa16d3cdf0035b15a9fcbc552cd88e7 --- /dev/null +++ b/xtrn/lord/pickle/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/xtrn/lord/pickle/README.md b/xtrn/lord/pickle/README.md new file mode 100644 index 0000000000000000000000000000000000000000..59462f2d2aae727773b437606c639d90e5e2fbe9 --- /dev/null +++ b/xtrn/lord/pickle/README.md @@ -0,0 +1,13 @@ +# otherplacespickles +Other Places Pickles is an IGM for Lord 5.00 JS by +The Lizard Master + +See LORD 5.00 JS Sysop.doc for installing this and other IGMs + +In this IGM you find the Pickle Goddess and her magic pickle +garden. The magic pickles are stronger the higher you select +from the patch. You gain or lose a percentage of what you +have from a randomly selected trait. The trick to this is +you can keep eating stronger pickles, but the deck is stacked +in a Las Vegas slot machine way. On a long enough time line, +the house will win so as not to upset the balance of the game. diff --git a/xtrn/lord/pickle/garden.ans b/xtrn/lord/pickle/garden.ans new file mode 100644 index 0000000000000000000000000000000000000000..56412e94bcaf823c25cd156badb42055341a40fe --- /dev/null +++ b/xtrn/lord/pickle/garden.ans @@ -0,0 +1,6 @@ +[0;40;37m [32m�������������������������������������������������� +[37m [32m�[5;1;42;36m11111[31m22222[0;5;42;35m33333[31m44444[1;30m55555[0;5;42;34m66666[1;33m777777[0;5;42;30m888888[37m999999[0;32m� +[37m [32m�[5;1;42;36m11111[31m22222[0;5;42;35m33333[31m44444[1;30m55555[0;5;42;34m66666[1;33m777777[0;5;42;30m888888[37m999999[0;32m� +[37m [32m�[5;1;42;36m11111[31m22222[0;5;42;35m33333[31m44444[1;30m55555[0;5;42;34m66666[1;33m777777[0;5;42;30m888888[37m999999[0;32m� +[37m [32m�[5;1;42;36m11111[31m22222[0;5;42;35m33333[31m44444[1;30m55555[0;5;42;34m66666[1;33m777777[0;5;42;30m888888[37m999999[0;32m� +[37m [32m�������������[1;44;37mPICKLE'S MAGIC GARDEN[0;32m���������������� \ No newline at end of file diff --git a/xtrn/lord/pickle/pickle.ans b/xtrn/lord/pickle/pickle.ans new file mode 100644 index 0000000000000000000000000000000000000000..d3e821cd505a3db16e3b0f0f8cafc0cd650134f3 --- /dev/null +++ b/xtrn/lord/pickle/pickle.ans @@ -0,0 +1,20 @@ +[0;40;37m +[16C[1;31m������������[0m [1;31m������� +[0m[15C[1;31m��������۲���[0m [1;31m����۲� +[0m[15C[1;31m�������������[0;32m�[1;31m��۲��۰ +[0m[13C[1;31m�����������[0;32m۲�������[1;31m��۱ +[0m[10C[1;31m��������[0;32m������[1;37m��[0;32m��۲[1;37m��[0;32m�[1;31m��۲ +[0m[8C[1;31m����������[0;32m�����[1;37m�۲�[0;32m��[1;37m���[0;32m�[1;31m���� +[0m[8C[1;31m���������[0;32m������[1;37m��[0;30m��[32m�[1;37m��[0;30m��[32m�[1;31m���� +[0m[8C[1;31m����۲���[0;32m��������������۲[1;31m���� +[0m[13C[32m�������[1m��[0;32m������[1m�[0;32m�۲�[1;31m���� +[0m[12C[32m���������[1m��������[0;32m۱�[37m [1;31m���۰ +[0m[10C[32m����۲�����������۱�[37m [1;31m���۰ +[0m[7C[32m�������۲��������۲[35m��[37m[6C[1;31m���� +[0m[7C[32m������۲�������۱�[37m [35m��۰ +[37m[7C[32m�����۲�����۲��[37m[5C[35m�۲[37m [1;33m�[0m [1;33m� +[0m[7C[32m����۲����۱�[37m[9C[35m�۲�[37m [1;33m��[0m [1;33m� +[0m[8C[32m��۲���۱�[37m[12C[1;33m�[0m[5C[1;33m� +[0m[8C[32m��������[37m[17C[1;33m�[0m [1;33m�[0m [1;33m� +[0m[28C[1;33m�[0m[7C[1;33m��� +[0m[33C[1;33m� \ No newline at end of file diff --git a/xtrn/lord/pickle/pickle.js b/xtrn/lord/pickle/pickle.js new file mode 100644 index 0000000000000000000000000000000000000000..e806a47178453bdc6f985276ea2906617dd0a5af --- /dev/null +++ b/xtrn/lord/pickle/pickle.js @@ -0,0 +1,152 @@ +function menu() { + sclrscr(); + sln(''); + sln(''); + lln(' `5Welcome Other Places Pickles\'s!'); + lln(' `2Home of the Pickle Goddess!'); + sln(''); + display_file(js.exec_dir+'pickle.ans'); + more_nomail(); + var runonce = false; + do { + sclrscr(); + display_file(js.exec_dir+'garden.ans'); + lln(' `5The Pickle Goddess has decided to allow you to'); + lln(' `5pick a Pickle from her garden! But choose wisely,'); + lln(' `5Not all are great choices! The higher you go,'); + lln(' `5The more potent the pickle!'); + if (runonce) { lln('\n`2Must be a choice from 1-9!'); } + lln('\n`2Which row would you like to pick from?'); + sw(' '); + tempnum = parseInt(getstr(0, 0, 10, 0, 7, '', {integer:true}), 10); + runonce = true; + } while (isNaN(tempnum) || tempnum < 1 || tempnum > 10); + sclrscr(); + sln(''); + sln(''); + var randNum = random(100) + 1; + var strType; + var strWhat; + var truncated; + var pctGainLost; + + pctGainLost = '.0' + tempnum; + + if (randNum >= 49) // Vegas slot machine odds, tilting to the house + strType='Bad' + else + strType='Good'; + var randNum = random(10) + 1; + if (randNum == 1) { + strWhat='hit points'; + truncated=parseInt(player.hp * parseFloat(pctGainLost)); + if (strType=='Bad') + player.hp=player.hp-truncated; + else + player.hp=player.hp+truncated; + } + else if (randNum == 2) { + strWhat='max hitpoints'; + truncated=parseInt(player.hp_max * parseFloat(pctGainLost)); + if (strType=='Bad') + player.hp_max=player.hp_max-truncated; + else + player.hp_max=player.hp_max+truncated; + } + else if (randNum == 3) { + strWhat='forest fights'; + truncated=parseInt(player.forest_fights * parseFloat(pctGainLost)); + if (strType=='Bad') + player.forest_fights=player.forest_fights-truncated; + else + player.forest_fights=player.forest_fights+truncated; + } + else if (randNum == 4) { + strWhat='gold'; + truncated=parseInt(player.gold * parseFloat(pctGainLost)); + if (strType=='Bad') + player.gold=player.gold-truncated; + else + player.gold=player.gold+truncated; + } + else if (randNum == 5) { + strWhat='bank gold'; + truncated=parseInt(player.bank * parseFloat(pctGainLost)); + if (strType=='Bad') + player.bank=player.bank-truncated; + else + player.bank=player.bank+truncated; + } + else if (randNum == 6) { + strWhat='defense'; + truncated=parseInt(player.def * parseFloat(pctGainLost)); + if (strType=='Bad') + player.def=player.def-truncated; + else + player.def=player.def+truncated; + } + else if (randNum == 7) { + strWhat='strength'; + truncated=parseInt(player.str * parseFloat(pctGainLost)); + if (strType=='Bad') + player.str=player.str-truncated; + else + player.str=player.str+truncated; + } + else if (randNum == 8) { + strWhat='charm'; + truncated=parseInt(player.cha * parseFloat(pctGainLost)); + if (strType=='Bad') + player.cha=player.cha-truncated; + else + player.cha=player.cha+truncated; + } + else if (randNum == 9) { + strWhat='gems'; + truncated=parseInt(player.gem * parseFloat(pctGainLost)); + if (strType=='Bad') + player.gem=player.gem-truncated; + else + player.gem=player.gem+truncated; + } + else{ + strWhat='des1'; + truncated=1; + } + if (parseFloat(truncated) != 0) { + if (strType=='Good' && strWhat!='des1') { + lln(' `5This pickle is divine! Your '+strWhat+' increased by ' +truncated+'!'); + truncated=parseInt(player.hp * parseFloat(pctGainLost)); + } + else if (strType=='Bad' && strWhat!='des1'){ + lln(' `5This pickle taste like poo! Your '+strWhat+' decreased by ' +truncated+'!'); + truncated=parseInt(player.hp * parseFloat(pctGainLost)); + } + else { + lln(' `5You have been marked by tattoo from the Pickle Goddess!'); + player.des1='I have been tagged pwned by the Pickle Goddess!'; + } + } + else + { + lln(' `5You were about to... '); + if (strType=='Good') + lw(' `5gain '); + else + lw(' `5lose '); + lln('something, but you do not have enough ' + strWhat + '!'); + lln(' `5Come back later when you level up or have more stuff... '); + } + more_nomail(); + exit(0); +} + +if (argc == 1 && argv[0] == 'INSTALL') { + var install = { + desc:'`0T`2ravel `0T`2o Other Places Pickles', + } + exit(0); +} +// possible record changes: hp, hp_max, forest_fights, gold, bank, def, str, cha, gem, des1 + +menu(); diff --git a/xtrn/lord2/install-xtrn.ini b/xtrn/lord2/install-xtrn.ini index e5b6f00648a99d00c7632ef01437bfa5cb4556a7..61c6f83a23a47cb5b6bf7396e658468e2aa6c9d9 100644 --- a/xtrn/lord2/install-xtrn.ini +++ b/xtrn/lord2/install-xtrn.ini @@ -1,4 +1,3 @@ -; $Id: install-xtrn.ini,v 1.3 2020/04/21 04:41:44 rswindell Exp $ ; LORD II installer data for install-xtrn.js Name: LORD II: New World @@ -6,9 +5,10 @@ Desc: Large Zelda-type world that lets players roam about as enemies or friends By: Seth Able Robinson, Deuce (Stephen Hurd) Cats: Games Subs: Adventure, Classic, Multiplayer, JavaScript, Port -Inst: $Id: install-xtrn.ini,v 1.3 2020/04/21 04:41:44 rswindell Exp $ +Inst: 2020/09/07 [prog:LORD2] cmd = ?lord2 settings = XTRN_MULTIUSER +execution_ars = ANSI AND NOT GUEST required = true diff --git a/xtrn/maze/install-xtrn.ini b/xtrn/maze/install-xtrn.ini index 40c313947eda027329aebe5a02e09fc538e2e0df..b93ee6972f0200f6d7767407b0d66a3cc51dc309 100644 --- a/xtrn/maze/install-xtrn.ini +++ b/xtrn/maze/install-xtrn.ini @@ -1,15 +1,21 @@ Name: Maze Race -Desc: +Desc: Race. In a maze. By: mcmlxxix (Matt Johnson) Cats: Games Subs: Race, Multiplayer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/27 02:24:41 rswindell Exp $ +Inst: 2020/09/14 [prog:MAZERACE] cmd = ?maze.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with The BRoKEN BUBBLe BBS +keys = host +values = 'bbs.thebrokenbubble.com' +done = true + !include install-json-service.ini [ini:json-service.ini:mazerace] diff --git a/xtrn/sbj/install-xtrn.ini b/xtrn/sbj/install-xtrn.ini new file mode 100644 index 0000000000000000000000000000000000000000..1147a194c0d7db0362fec48cde295610918fead1 --- /dev/null +++ b/xtrn/sbj/install-xtrn.ini @@ -0,0 +1,13 @@ +Name: Synchronet Blackjack +Desc: Multiplayer 21, the first game written for Synchronet +By: Digital Man (Rob Swindell) +Cats: Games +Subs: Casino, Cards, Multiplayer, Chat, Native +Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 08:41:51 rswindell Exp $ + +[prog:SBJ] +cmd = sbj%. +clean_cmd = sbjclean%. +settings = XTRN_MULTIUSER|XTRN_NATIVE|XTRN_MODUSERDAT +type = XTRN_SBBS +required = true diff --git a/xtrn/sdk/xsdk.c b/xtrn/sdk/xsdk.c index d187cefa81f36a8032cf313848cab2e62951d172..87c06ca157bf1c1a089b4d398a66fb3d25cea789 100644 --- a/xtrn/sdk/xsdk.c +++ b/xtrn/sdk/xsdk.c @@ -2,7 +2,7 @@ /* Synchronet External Program Software Development Kit */ -/* $Id: xsdk.c,v 1.41 2016/08/13 18:57:00 rswindell Exp $ */ +/* $Id: xsdk.c,v 1.41 2020/09/20 18:57:00 rswindell Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * @@ -581,6 +581,7 @@ int keyhit() char inkey(long mode) { static in_ctrl_p; + static ansi_len; uchar ch=0,hour,min,sec; long tleft; int i=0; @@ -621,19 +622,19 @@ char inkey(long mode) i=stdin_getch(); switch(i) { case 0x47: /* Home - Same as Ctrl-B */ - return(2); /* ctrl-b beginning of line */ + return TERM_KEY_HOME; /* ctrl-b beginning of line */ case 0x4b: /* Left Arrow - same as ctrl-] */ - return(0x1d); + return TERM_KEY_LEFT; case 0x4d: /* Right Arrow - same as ctrl-f */ - return(6); + return TERM_KEY_RIGHT; case 0x48: /* Up arrow - same as ctrl-^ */ - return(0x1e); + return TERM_KEY_UP; case 0x50: /* Down arrow - same as CR */ - return(CR); + return TERM_KEY_DOWN; case 0x4f: /* End - same as Ctrl-E */ - return(5); /* ctrl-e - end of line */ + return TERM_KEY_END; case 0x52: /* Insert */ - return(0x1f); /* ctrl-minus - insert mode */ + return TERM_KEY_INSERT; /* ctrl-minus - insert mode */ case 0x53: /* Delete */ return(0x7f); /* ctrl-bkspc - del cur char */ } @@ -641,6 +642,44 @@ char inkey(long mode) ch=i; } + if(ch == ESC) { + ansi_len = !ansi_len; + } + else if(ansi_len == 1) { + if(ch == '[') + ansi_len++; + else + ansi_len = 0; + } + else if(ansi_len == 2) { + ansi_len =0 ; + switch(ch) { + case 'A': + return TERM_KEY_UP; + case 'B': + return TERM_KEY_DOWN; + case 'C': + return TERM_KEY_RIGHT; + case 'D': + return TERM_KEY_LEFT; + case 'H': + return TERM_KEY_HOME; + case 'V': + return TERM_KEY_PAGEUP; + case 'U': + return TERM_KEY_PAGEDN; + case 'F': + case 'K': + return TERM_KEY_END; + case '@': + return TERM_KEY_INSERT; + default: + return 0; + } + } + if(ansi_len) + return 0; + if(ch==0x10 || ch==0x1e) { /* Ctrl-P or Ctrl-^ */ if(in_ctrl_p || !ctrl_dir[0]) /* keep from being recursive */ return(0); @@ -974,7 +1013,7 @@ int getstr(char *strout, size_t maxlen, long mode) } outchar(str1[i++]=1); break; - case 2: /* Ctrl-B Beginning of Line */ + case TERM_KEY_HOME: /* Ctrl-B Beginning of Line */ if(user_misc&ANSI && i) { bprintf("\x1b[%dD",i); i=0; @@ -1005,7 +1044,7 @@ int getstr(char *strout, size_t maxlen, long mode) l-=x-i; /* l=new length */ } break; - case 5: /* Ctrl-E End of line */ + case TERM_KEY_END: /* Ctrl-E End of line */ if(user_misc&ANSI && i<l) { bprintf("\x1b[%dC",l-i); /* move cursor right one */ i=l; @@ -1687,7 +1726,7 @@ int nopen(const char *str, int access) bprintf("\r\nNOPEN COLLISION - File: %s Count: %d\r\n" ,str,count); if(file==-1 && errno==EACCES) - bputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7"); + bprintf("\7\r\nNOPEN: ACCESS DENIED: %s\r\n\7", str); return(file); } diff --git a/xtrn/sdk/xsdkdefs.h b/xtrn/sdk/xsdkdefs.h index 0f64f43591cc92962319654d706061d1bbc80197..f7b91a2109a60a134590b4bdfba1a380c77b758e 100644 --- a/xtrn/sdk/xsdkdefs.h +++ b/xtrn/sdk/xsdkdefs.h @@ -2,13 +2,13 @@ /* Synchronet XSDK constants, macros, and type definitions */ -/* $Id: xsdkdefs.h,v 1.10 2009/01/01 12:45:59 deuce Exp $ */ +/* $Id: xsdkdefs.h,v 1.11 2020/09/20 12:45:59 deuce Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright Rob Swindell - http://www.synchro.net/copyright.html * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public License * @@ -290,6 +290,19 @@ enum { /* Node Action */ #define KEY_BUFSIZE 256 #endif + /* Special terminal key mappings */ +#define TERM_KEY_HOME CTRL_B +#define TERM_KEY_END CTRL_E +#define TERM_KEY_UP CTRL_CARET +#define TERM_KEY_DOWN CTRL_J +#define TERM_KEY_LEFT CTRL_CLOSE_BRACKET +#define TERM_KEY_RIGHT CTRL_F +#define TERM_KEY_INSERT CTRL_V +#define TERM_KEY_DELETE DEL +#define TERM_KEY_ABORT CTRL_C +#define TERM_KEY_PAGEUP CTRL_P +#define TERM_KEY_PAGEDN CTRL_N + #define CRLF { outchar(CR); outchar(LF); } #define SYSOP (user_level>=sysop_level) /* Is current user sysop t/f macro */ diff --git a/xtrn/slyvote/install-xtrn.ini b/xtrn/slyvote/install-xtrn.ini new file mode 100644 index 0000000000000000000000000000000000000000..749a829ad3cdfbe08bfd1b6aced5c6d07c0774ee --- /dev/null +++ b/xtrn/slyvote/install-xtrn.ini @@ -0,0 +1,10 @@ +Name: SlyVote +Desc: Voting booth for Synchronet +By: Nightfox (Eric Oulashin) +Cats: Main +Inst: 2020/09/07 + +[prog:SLYVOTE] +cmd = ?slyvote +settings = XTRN_MULTIUSER +required = true diff --git a/xtrn/starstocks/install-xtrn.ini b/xtrn/starstocks/install-xtrn.ini new file mode 100644 index 0000000000000000000000000000000000000000..32e9f001c71a69034f0862f11a4ca39ff1dcabb2 --- /dev/null +++ b/xtrn/starstocks/install-xtrn.ini @@ -0,0 +1,23 @@ +Name: Star Stocks +Desc: A game of galactic investment +By: mcmlxxix (Matt Johnson) +Cats: Games +Subs: Stocks, Multiplayer, JavaScript +Inst: 2020/09/14 + +[prog:STARSTOX] +cmd = ?stars.js +settings = XTRN_MULTIUSER +required = true + +[ini:server.ini] +prompt = Share data with The BRoKEN BUBBLe BBS +keys = host +values = 'bbs.thebrokenbubble.com' +done = true + +!include install-json-service.ini + +[ini:json-service.ini:starstocks] +keys=dir +values=startup_dir diff --git a/xtrn/startrek/install-xtrn.ini b/xtrn/startrek/install-xtrn.ini index bdecc20f82c4c475e10468607d996eb5f8b5f927..1e01f7a106d8e9b461ec7c190aef8b735166c604 100644 --- a/xtrn/startrek/install-xtrn.ini +++ b/xtrn/startrek/install-xtrn.ini @@ -7,6 +7,13 @@ Inst: $Id: install-xtrn.ini,v 1.2 2020/04/17 09:22:37 rswindell Exp $ [prog:STARTREK] cmd = ?startrek.js settings = XTRN_MULTIUSER +required = true + +[ini:server.ini] +prompt = Share data with electronic chicken bbs +keys = host +values = 'bbs.electronicchicken.com' +done = true !include install-json-service.ini diff --git a/xtrn/synchronetris/install-xtrn.ini b/xtrn/synchronetris/install-xtrn.ini index a179de1cbde96e46f6034ae35d5b8649559d5927..8f371def8c269e8dbb7b77a0854bbf8e32dec48d 100644 --- a/xtrn/synchronetris/install-xtrn.ini +++ b/xtrn/synchronetris/install-xtrn.ini @@ -3,13 +3,19 @@ Desc: TETRIS By: mcmlxxix (Matt Johnson) Cats: Games Subs: Puzzle, Clone, Multiplayer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/25 03:12:03 rswindell Exp $ +Inst: 2020/09/14 [prog:TETRIS] cmd = ?tetris.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with The BRoKEN BUBBLe BBS +keys = host +values = 'bbs.thebrokenbubble.com' +done = true + !include install-json-service.ini [ini:json-service.ini:synchronetris] diff --git a/xtrn/syncwall/install-xtrn.ini b/xtrn/syncwall/install-xtrn.ini index d837c889a5536bb14dd3c6960d397f780073be0d..743239cb48fc42f21fe23c7cec9b928d2ef7ea46 100644 --- a/xtrn/syncwall/install-xtrn.ini +++ b/xtrn/syncwall/install-xtrn.ini @@ -1,16 +1,23 @@ Name: SyncWall Desc: Inter-BBS ANSI graffiti wall for Synchronet BBS By: echicken -Cats: Communication, Messaging +Cats: Main, Communications, Messaging Subs: Wall, Graffiti, InterBBS, JavaScript -Inst: $Id: install-xtrn.ini,v 1.2 2020/04/17 09:27:15 rswindell Exp $ +Inst: 2020/09/07 [prog:SYNCWALL] cmd = ?syncwall.js settings = XTRN_MULTIUSER +required = true + +[ini:server.ini] +prompt = Share data with electronic chicken bbs +keys = host +values = 'bbs.electronicchicken.com' +done = true !include install-json-service.ini -[ini:json-service.ini:syncwall] -keys=dir -values=startup_dir \ No newline at end of file +[ini:json-service.ini:syncwall2] +keys = dir +values = startup_dir \ No newline at end of file diff --git a/xtrn/synkroban/install-xtrn.ini b/xtrn/synkroban/install-xtrn.ini index 88b7c8090d779366f59ed38d871822be7f19295e..dedb5f3e2735408f9764581b1e46b79220db9186 100644 --- a/xtrn/synkroban/install-xtrn.ini +++ b/xtrn/synkroban/install-xtrn.ini @@ -3,13 +3,19 @@ Desc: Sokoban warehouse game, where you move the boxes onto the goals. By: art, at fatcatsbbs dot com Cats: Games Subs: Warehouse, Simulation, Multiplayer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 09:17:37 rswindell Exp $ +Inst: 2020/09/16 [prog:SOKOBAN] cmd = ?synkroban.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with romulusbbs.com +keys = host +values = 'romulusbbs.com' +done = true + !include install-json-service.ini [ini:json-service.ini:synkroban] diff --git a/xtrn/synkroban/server.ini b/xtrn/synkroban/server.ini new file mode 100644 index 0000000000000000000000000000000000000000..aa1e15cde4293984215e0925b9bbe3aa76182a8c --- /dev/null +++ b/xtrn/synkroban/server.ini @@ -0,0 +1,2 @@ +host=localhost +port=10088 diff --git a/xtrn/tbd/install-xtrn.ini b/xtrn/tbd/install-xtrn.ini index 17e0eb124d83a5d5c0c44c82fccfcdaaff10e89b..a56a20310b378ef50ea97c33105ae2f08d6f0a9f 100644 --- a/xtrn/tbd/install-xtrn.ini +++ b/xtrn/tbd/install-xtrn.ini @@ -1,11 +1,24 @@ Name: The Beast's Domain +Desc: Rogue-like, Multi-Player, Interactive, Real-Time, ANSI adventure game By: King Drafus (Allen Christiansen), Domain Entertainment Cats: Games -Subs: Adventure, Native -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 08:41:51 rswindell Exp $ +Subs: Adventure, Multiplayer, Native +Inst: 2020/09/08 [prog:TBD] cmd = tbd%. /times=10 settings = XTRN_MULTIUSER|XTRN_NATIVE|XTRN_MODUSERDAT +execution_ars = ANSI type = XTRN_SBBS required = true + +[event:TBDROLL] +prompt = false +name = TBD Re-roll +cmd = reroll%. +settings = XTRN_NATIVE +days = 127 +mdays = 2 + +[eval:file_touch(system.data_dir + 'tbdroll.now')] +prompt = false diff --git a/xtrn/tbd/tbd.c b/xtrn/tbd/tbd.c index c593308cfa19c60208c844df4a2953f43e407f64..d73e787887fc0e1155a4b37020aa9596a131fffe 100644 --- a/xtrn/tbd/tbd.c +++ b/xtrn/tbd/tbd.c @@ -32,8 +32,8 @@ unsigned _stklen=20000; char redraw_screen; long record_number; -int create_log,chfile,rmfile,weapon_ready,invisible,strong, - tpic,lasthit,clock_tick,clock_tick2,ateof; +int chfile,rmfile,weapon_ready,invisible,strong,tpic,lasthit,ateof; +clock_t clock_tick,clock_tick2; uchar map[LEVELS][SQUARE][SQUARE]; void exitfunc(void) @@ -53,7 +53,7 @@ void exitfunc(void) int main(int argc, char **argv) { FILE *fp; - char str[256],chbuf[8],*buf,*p,name[26]; + char str[256],*buf,*p,name[26]; int file,x,r1,r2,ch,times_played=0,lev,maint_only=0; long lastrun,length,l,exp; uchar uch; @@ -308,7 +308,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) long timeleftmin; time_t strength_timer,invis_timer,now,timeout,health_timer; node_t node; - int tick_offset=0; + clock_t tick_offset=0; clock_tick=invisible=strong=0; clock_tick2=40; printfile("tbd.mnu"); game_commands(0,-1); @@ -336,9 +336,9 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) object[rmobj[(gy*11)+gx].item].name); } } timeout=time(NULL); /* Set timer on entry point */ - tick_offset=(int)(msclock()/(MSCLOCKS_PER_SEC/18.2))%19; + tick_offset=(clock_t)(msclock()/(MSCLOCKS_PER_SEC/18.2))%19; do { - clock_tick=(int)(msclock()/(MSCLOCKS_PER_SEC/18.2))%19-tick_offset; + clock_tick=(clock_t)(msclock()/(MSCLOCKS_PER_SEC/18.2))%19-tick_offset; if(clock_tick<0) clock_tick+=19; ++clock_tick2; @@ -370,6 +370,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) break; case '4': /* Move West */ case 'A': + case TERM_KEY_LEFT: check=inway(x,y,z,gx-1,gy); if(weapon_ready) { tpic=LEFT; if(check) @@ -404,6 +405,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) break; case '6': /* Move East */ case 'D': + case TERM_KEY_RIGHT: check=inway(x,y,z,gx+1,gy); if(weapon_ready) { tpic=RIGHT; if(check) @@ -438,6 +440,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) break; case '2': /* Move South */ case 'X': + case TERM_KEY_DOWN: check=inway(x,y,z,gx,gy+1); if(weapon_ready) { tpic=DOWN; if(check) @@ -474,6 +477,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) break; case '8': /* Move North */ case 'W': + case TERM_KEY_UP: check=inway(x,y,z,gx,gy-1); if(weapon_ready) { tpic=UP; if(check) @@ -512,6 +516,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) break; case '7': /* Move NorthWest */ case 'Q': + case TERM_KEY_HOME: check=inway(x,y,z,gx-1,gy-1); if(weapon_ready) { tpic=UP; if(check) @@ -534,6 +539,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) break; case '9': /* Move NorthEast */ case 'E': + case TERM_KEY_PAGEUP: check=inway(x,y,z,gx+1,gy-1); if(weapon_ready) { tpic=UP; if(check) @@ -556,6 +562,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) break; case '1': /* Move SouthWest */ case 'Z': + case TERM_KEY_END: check=inway(x,y,z,gx-1,gy+1); if(weapon_ready) { tpic=DOWN; if(check) @@ -578,6 +585,7 @@ void movement(int sx,int sy,int sz,int sgx,int sgy) break; case '3': /* Move SouthEast */ case 'C': + case TERM_KEY_PAGEDN: check=inway(x,y,z,gx+1,gy+1); if(weapon_ready) { tpic=DOWN; if(check) diff --git a/xtrn/tbd/tbd.h b/xtrn/tbd/tbd.h index 7bf7a5ad88836a0e5db4b8cd0f5f05aec1602384..fa9d96c510ca9dd9065fc3d79292ba29a2d53ce8 100644 --- a/xtrn/tbd/tbd.h +++ b/xtrn/tbd/tbd.h @@ -122,7 +122,7 @@ extern long cost_per_min,times_per_day,total_cost; extern char redraw_screen; extern long record_number; -extern int create_log,chfile,rmfile,weapon_ready,invisible,strong, - tpic,lasthit,clock_tick,clock_tick2,ateof; +extern int chfile,rmfile,weapon_ready,invisible,strong,tpic,lasthit,ateof; +extern clock_t clock_tick; extern uchar map[LEVELS][SQUARE][SQUARE]; diff --git a/xtrn/thirsty/install-xtrn.ini b/xtrn/thirsty/install-xtrn.ini index 046bef4947be3f613f09e4554ee4c4e55e18978f..891ffc2b680b79c79d59e12afc3c80580c2f553c 100644 --- a/xtrn/thirsty/install-xtrn.ini +++ b/xtrn/thirsty/install-xtrn.ini @@ -1,18 +1,23 @@ -; $Id: install-xtrn.ini,v 1.2 2020/04/17 09:23:05 rswindell Exp $ - Name: Thirstyville Desc: Inspired by the classic door game "Lemonade" By: echicken -at- bbs.electronicchicken.com Cats: Games Subs: Trade, JavaScript -Inst: $Id: install-xtrn.ini,v 1.2 2020/04/17 09:23:05 rswindell Exp $ +Inst: 2020/09/07 [prog:THIRSTY] cmd = ?thirsty.js settings = XTRN_MULTIUSER +required = true + +[ini:game.ini] +prompt = Share data with electronic chicken bbs +keys = server +values = 'bbs.electronicchicken.com' +done = true !include install-json-service.ini [ini:json-service.ini:thirsty] -keys=dir -values=startup_dir +keys = dir +values = startup_dir diff --git a/xtrn/tw2/install-xtrn.ini b/xtrn/tw2/install-xtrn.ini index 350ed7c045c892d340f07241b9cb70d1f7a73b3a..2c62c2e7ed4d75edaa3a850af0c1734b4e9170f9 100644 --- a/xtrn/tw2/install-xtrn.ini +++ b/xtrn/tw2/install-xtrn.ini @@ -1,20 +1,23 @@ -Name: Trade Wars v.ii +Name: Trade Wars 2 - 500 Sectors Desc: A multiplayer game that is a cross between a war game and a space trading game. -By: Chris Sherrick, ported to Sync-JS by Deuce (Stephen Hurd) +By: Chris Sherrick, John Morris, ported to Sync-JS by Deuce (Stephen Hurd) Cats: Games Subs: Space, War, Trade, Classic, Multiplayer, JavaScript, Port -Inst: $Id: install-xtrn.ini,v 1.2 2020/04/21 03:25:59 rswindell Exp $ +Inst: 2020/09/20 [prog:TW2] -cmd = ?tw.js +cmd = ?tw2.js settings = XTRN_MULTIUSER required = true +[prog:TW2-CFG] +name = Trade Wars 2 - Configure / Reset +cats = Operator +cmd = ?twint500.js +ars = SYSOP + !include install-json-service.ini [ini:json-service.ini:tw2] keys=dir values=startup_dir - -[exec:twint500.js] -prompt=Configure and Initialize TW2? \ No newline at end of file diff --git a/xtrn/tw2/tw2.js b/xtrn/tw2/tw2.js index 4f7c39362963dae19a8a40e118ad7878630a12da..bd0aa82409c7231480c43c07496b25e3b5d5b2c4 100644 --- a/xtrn/tw2/tw2.js +++ b/xtrn/tw2/tw2.js @@ -322,6 +322,7 @@ try { console.attributes="R"; console.writeln("The game has not been initialized."); console.writeln("Please notify the SysOp."); + console.pause(); exit(0); } @@ -332,8 +333,10 @@ try { console.attributes="W"; console.writeln("Initializing..."); console.writeln("Searching my records for your name."); - if(!LoadPlayer()) + if(!LoadPlayer()) { + console.pause(); exit(0); + } console.pause(); while(player.KilledBy==0 && exit_tw2==false) { diff --git a/xtrn/tw2/twint500.js b/xtrn/tw2/twint500.js index e337a0c01c281deaf795bf2675c3698188346294..1c064c7d1e86ae16cb358b13946d422246906f37 100644 --- a/xtrn/tw2/twint500.js +++ b/xtrn/tw2/twint500.js @@ -36,7 +36,7 @@ function ConfigureSettings() for(i=0; i<GameSettingProperties.length; i++) list.push(format("%-35s %s",GameSettingProperties[i].name,Settings[GameSettingProperties[i].prop])); - i=uifc.list(WIN_MID|WIN_ORG|WIN_ACT|WIN_ESC, 0, 0, 0, last, last, "Configuration", list); + i=uifc.list(WIN_MID|WIN_ORG|WIN_ACT|WIN_ESC, 0, 0, 0, last, last, "Trade Wars 2 Configuration", list); if(i==-1) { if(uifc.changes) { var q=uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, 0, 0, "Save Changes?", ["Yes", "No"]); @@ -104,7 +104,7 @@ var reset = false; if(this.uifc == undefined) { while(!js.terminated && (!this.console || !console.aborted)) { - print("Configuration:"); + print("Trade Wars 2 Configuration:"); print(); for(var i=0; i< GameSettingProperties.length; i++) print(format("%2d: %-35s = %s", i + 1, GameSettingProperties[i].name, Settings[GameSettingProperties[i].prop])); @@ -149,7 +149,7 @@ if(this.uifc == undefined) { alert("WARNING: Unable to connect to server: " + e); } } else { - uifc.init("TradeWars 2 Initialization", /* ciolibmode: */argv[0]); + uifc.init("Trade Wars 2 Initialization", /* ciolibmode: */argv[0]); ConfigureSettings(); if(js.global.db != undefined) { @@ -158,28 +158,27 @@ if(this.uifc == undefined) { } } -if(!reset) - exit(0); +if(reset) { + print("Resetting game"); + load(fname("ports.js")); + load(fname("planets.js")); + load(fname("teams.js")); + load(fname("sectors.js")); + load(fname("maint.js")); + load(fname("players.js")); + load(fname("messages.js")); + load(fname("computer.js")); + load(fname("input.js")); -print("Resetting game"); -load(fname("ports.js")); -load(fname("planets.js")); -load(fname("teams.js")); -load(fname("sectors.js")); -load(fname("maint.js")); -load(fname("players.js")); -load(fname("messages.js")); -load(fname("computer.js")); -load(fname("input.js")); - -ResetAllPlayers(); -ResetAllPlanets(); -ResetAllMessages(); -InitializeTeams(); -InitializeSectors(); -InitializePorts(); -InitializeCabal(); -db.write(Settings.DB,'twopeng',[],LOCK_WRITE); + ResetAllPlayers(); + ResetAllPlanets(); + ResetAllMessages(); + InitializeTeams(); + InitializeSectors(); + InitializePorts(); + InitializeCabal(); + db.write(Settings.DB,'twopeng',[],LOCK_WRITE); +} if(this.uifc) { uifc.pop(); uifc.bail(); diff --git a/xtrn/uberblox/install-xtrn.ini b/xtrn/uberblox/install-xtrn.ini index b31b29a23226376f376c1f7169fdc5aeb88b8970..d4add3490b48d547953f0b8684cce0ae845c84da 100644 --- a/xtrn/uberblox/install-xtrn.ini +++ b/xtrn/uberblox/install-xtrn.ini @@ -3,13 +3,19 @@ Desc: Puzzle strategy game similar to that of the popular web game "Super Collap By: mcmlxxix (Matt Johnson) at bbs dot thebrokenbubble dot com Cats: Games Subs: Puzzle, Multiplayer, JavaScript -Inst: $Id: install-xtrn.ini,v 1.1 2020/04/17 08:21:38 rswindell Exp $ +Inst: 2020/09/14 [prog:UBERBLOX] cmd = ?blox.js settings = XTRN_MULTIUSER required = true +[ini:server.ini] +prompt = Share data with The BRoKEN BUBBLe BBS +keys = host +values = 'bbs.thebrokenbubble.com' +done = true + !include install-json-service.ini [ini:json-service.ini:uberblox] diff --git a/xtrn/war/install-xtrn.ini b/xtrn/war/install-xtrn.ini new file mode 100644 index 0000000000000000000000000000000000000000..eda488a146d6bc549090e2c49b1b1517b3506043 --- /dev/null +++ b/xtrn/war/install-xtrn.ini @@ -0,0 +1,28 @@ +; LORD installer data for install-xtrn.js + +Name: Solomoriah's WAR! +Desc: WAR Version 4.4 ported to JavaScript +By: Chris Gonnerman, Deuce (Stephen Hurd) +Cats: Games +Subs: Adventure, Classic, Multiplayer, JavaScript, Port +Inst: 2020/09/08 + +[prog:WAR] +name = Solomoriah's WAR! on Earth +cmd = ?war.js worlds/earth +execution_ars = NOT GUEST +settings = XTRN_MULTIUSER +required = true + +[event:WARUPD] +prompt = false +cmd = ?warupd.js worlds/earth +name = WAR Update +days = 127 + +[event:WARPOLL] +prompt = false +cmd = ?warpoll.js worlds/earth +name = WAR Poll +days = 127 +freq = 60 diff --git a/xtrn/wordem/install-xtrn.ini b/xtrn/wordem/install-xtrn.ini new file mode 100644 index 0000000000000000000000000000000000000000..edca857eb6692de68e838661684ac794a95ba35d --- /dev/null +++ b/xtrn/wordem/install-xtrn.ini @@ -0,0 +1,23 @@ +Name: Wordem +Desc: InterBBS Scrabble for Synchronet +By: echicken -at- bbs.electronicchicken.com +Cats: Games +Subs: Classic, Puzzle, Words, Clone, JavaScript +Inst: 2020/09/07 + +[prog:WORDEM] +cmd = ?wordem.js +settings = XTRN_MULTIUSER +required = true + +[ini:server.ini] +prompt = Share data with electronic chicken bbs +keys = host +values = 'bbs.electronicchicken.com' +done = true + +!include install-json-service.ini + +[ini:json-service.ini:wordem] +keys=dir +values=startup_dir \ No newline at end of file