blog.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. {% load static %}{% load day_util %}
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8"/>
  6. <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
  7. <meta
  8. name="viewport"
  9. content="width=device-width, initial-scale=1, maximum-scale=2, user-scalable=no"
  10. />
  11. <meta name="apple-mobile-web-app-capable" content="yes"/>
  12. <meta name="robots" content="index,follow"/>
  13. <meta
  14. name="description"
  15. content="{{ article.intro }}"
  16. />
  17. <meta name="keywords" content="{{ article.title }}"/>
  18. <meta name="author" content="CyberSicko"/>
  19. <meta name="theme-color" content="#ffffff"/>
  20. <title>{{ article.title }}-CyberSicko.net</title>
  21. <link rel="preconnect" href="https://fonts.googleapis.com">
  22. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  23. <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@200;300;400;500;600;700;900&display=swap"
  24. rel="stylesheet">
  25. <link
  26. rel="stylesheet"
  27. href="{% static 'semantic.min.css' %}"
  28. type="text/css"
  29. />
  30. <link
  31. rel="stylesheet"
  32. href="{% static 'photoswipe/photoswipe.css' %}"
  33. type="text/css"
  34. />
  35. <link rel="stylesheet" href="{% static 'highlightjs/styles/androidstudio.min.css' %}">
  36. <link rel="stylesheet" href="{% static 'css/fonts.css' %}">
  37. <link rel="shortcut icon" href="{% static 'favicon.ico' %}">
  38. <style>
  39. :root {
  40. --primary: #000000;
  41. --bg-light: #f8f8f8;
  42. --text: #333;
  43. --gray: #666;
  44. --line-height: 1.8;
  45. --max-width: 900px;
  46. --sidebar-width: 300px;
  47. }
  48. body {
  49. color: var(--text);
  50. background: whitesmoke;
  51. line-height: var(--line-height);
  52. }
  53. a {
  54. color: var(--primary);
  55. transition: color .2s;
  56. }
  57. a:hover {
  58. color: darken(var(--primary), 10%);
  59. }
  60. /* 主容器:限制最大宽度并居中 */
  61. .ui.grid.stackable.container {
  62. max-width: var(--max-width);
  63. margin: 1rem auto;
  64. padding: 0 1rem;
  65. }
  66. /* 段落与标题留白 */
  67. p {
  68. margin-bottom: 1rem;
  69. }
  70. h2.ui.header {
  71. margin-top: 2rem;
  72. margin-bottom: 1rem;
  73. }
  74. /* 卡片式内容区 */
  75. .eleven.wide.column {
  76. background: #fff;
  77. padding: 2rem;
  78. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
  79. border-radius: 4px;
  80. }
  81. /* 代码块滚动与样式 */
  82. .pre {
  83. overflow-x: auto;
  84. padding: 1rem;
  85. background: #fafafa;
  86. border-left: 3px solid var(--primary);
  87. margin: 1.5rem 0;
  88. }
  89. /* 顶部菜单去掉死板的灰色,增加一点阴影 */
  90. .ui.top.fixed.menu {
  91. background: #fff;
  92. box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
  93. }
  94. /* 菜单项内边距更舒适 */
  95. .ui.menu .item {
  96. padding: 0.8rem 1.2rem;
  97. font-size: 1.2rem;
  98. }
  99. /* 移动端:展开动画更顺滑 */
  100. .ui.vertical.menu {
  101. transition: max-height .3s ease-out;
  102. overflow: hidden;
  103. }
  104. .ui.vertical.menu.collapsed {
  105. max-height: 0 !important;
  106. }
  107. .ui.vertical.menu.expanded {
  108. max-height: 500px !important;
  109. }
  110. /* 右侧 Archiv/Top 区域在大屏下保持粘性 */
  111. .four.wide.right.floated.column {
  112. position: sticky;
  113. top: 80px; /* 根据你的导航高度微调 */
  114. max-width: var(--sidebar-width);
  115. margin-left: 2rem;
  116. }
  117. /* 调整归档和标签列表间距 */
  118. .ui.list .item {
  119. padding: .5rem 0;
  120. }
  121. </style>
  122. <style type="text/css">
  123. p > a > img {
  124. width: 100%;
  125. height: 100%;
  126. }
  127. blockquote {
  128. margin: 0;
  129. }
  130. blockquote {
  131. padding: 15px;
  132. background: #eee;
  133. }
  134. blockquote ::before {
  135. content: '\201C';
  136. }
  137. blockquote ::after {
  138. content: '\201D';
  139. }
  140. p > a {
  141. color: #4183c4;
  142. }
  143. span > code {
  144. background: #eee;
  145. border-radius: 3px;
  146. padding-left: 5px;
  147. padding-right: 5px;
  148. color: crimson;
  149. }
  150. body {
  151. padding-top: 54px;
  152. -webkit-font-smoothing: antialiased;
  153. -moz-font-smoothing: grayscale;
  154. }
  155. .ui.borderless.menu {
  156. background-color: #f8f8f8;
  157. {#box-shadow: none;#} flex-wrap: wrap;
  158. border: none;
  159. padding-left: 0;
  160. padding-right: 0;
  161. }
  162. .ui.borderless.menu .header.item {
  163. font-size: 1.2rem;
  164. font-weight: 500;
  165. }
  166. .ui.mobile.only.grid .ui.menu .ui.vertical.menu {
  167. display: none;
  168. }
  169. .ui.mobile.only.grid .ui.vertical.menu .dropdown.icon {
  170. float: unset;
  171. }
  172. .ui.mobile.only.grid .ui.vertical.menu .dropdown.icon:before {
  173. content: "\f0d7";
  174. }
  175. .ui.mobile.only.grid .ui.vertical.menu .ui.dropdown.item .menu {
  176. position: static;
  177. width: 100%;
  178. background-color: unset;
  179. border: none;
  180. box-shadow: none;
  181. }
  182. .ui.mobile.only.grid .ui.vertical.menu .ui.dropdown.item .menu {
  183. margin-top: 6px;
  184. }
  185. .ui.container > .ui.message {
  186. background-color: rga(238, 238, 238);
  187. box-shadow: none;
  188. padding: 5rem 4rem;
  189. margin-top: 1rem;
  190. }
  191. .ui.message h1.ui.header {
  192. font-size: 4.5rem;
  193. }
  194. .ui.message p.lead {
  195. font-size: 1.3rem;
  196. color: #333333;
  197. line-height: 1.4;
  198. font-weight: 300;
  199. }
  200. /* 让编辑器生成的表格始终填满可用宽度 */
  201. #article table {
  202. /* 覆盖 inline style */
  203. width: 100% !important;
  204. max-width: 100% !important;
  205. margin: 1rem 0; /* 上下留白,左右不需要居中 */
  206. border-collapse: collapse;
  207. }
  208. /* 去掉默认 cell 间距 */
  209. #article table {
  210. border-spacing: 0;
  211. }
  212. #article_content {
  213. margin-top: 2rem;
  214. }
  215. /* 头部和单元格:更小的内边距和字体 */
  216. #article table th,
  217. #article table td {
  218. padding: 0.4em 0.5em; /* 紧缩内填充 */
  219. font-size: 0.88rem; /* 略微小一点的文字 */
  220. line-height: 1.3; /* 行高也缩小 */
  221. border: 1px solid #ddd; /* 细线框 */
  222. text-align: left;
  223. vertical-align: middle;
  224. }
  225. /* 表头背景:灰黑主题色 */
  226. #article table th {
  227. background-color: #f5f2f0;
  228. font-weight: 600;
  229. }
  230. /* 斑马条纹 */
  231. #article table tr:nth-child(even) td {
  232. background-color: #f7f7f7;
  233. }
  234. /* 悬停高亮 */
  235. #article table tr:hover td {
  236. background-color: #ececec;
  237. }
  238. /* 更紧凑的响应式调整 */
  239. @media (max-width: 600px) {
  240. #article table th,
  241. #article table td {
  242. padding: 0.25em 0.4em;
  243. font-size: 0.8rem;
  244. }
  245. }
  246. .pre {
  247. background-color: antiquewhite;
  248. border-radius: 4px;
  249. }
  250. /* 保证每个图都有左右和上下间隙 */
  251. #article a[data-pswp-width] {
  252. display: inline-block; /* 让 margin 生效 */
  253. }
  254. /* 如果有 img 没包 <a> 的,也同样 */
  255. #article_content img {
  256. display: inline-block;
  257. margin: 0.5rem;
  258. max-width: 100%;
  259. height: auto;
  260. }
  261. /* 去除一切过渡,避免闪动 */
  262. #article_content img,
  263. #article a img {
  264. transition: none !important;
  265. }
  266. #article_content {
  267. font-weight: 500;
  268. }
  269. </style>
  270. </head>
  271. <body id="root">
  272. {% if is_login %}
  273. {% csrf_token %}
  274. {% endif %}
  275. <div class="ui tablet computer only padded grid">
  276. <div class="ui top fixed borderless fluid huge menu">
  277. <div class="ui container">
  278. <a href="/" class="header item ">CyberSicko.net</a>
  279. <a href="/" class="item">主页</a>
  280. {% for item in category %}
  281. {# <li class="category_li"><a href="/category/{{ item.name }}?page=1">{{ item.name }}</a></li>#}
  282. <a class="{% if current_category != None and current_category == item.name %}
  283. active
  284. {% else %}
  285. {% endif %} item" href="/category/{{ item.name }}?page=1">{{ item.name }}</a>
  286. {% endfor %}
  287. <div class="right menu">
  288. <a href="/login" class="item"> <i class="icon share square"></i>
  289. Sign in</a>
  290. </div>
  291. </div>
  292. </div>
  293. </div>
  294. <div class="ui mobile only padded grid">
  295. <div class="ui top fixed borderless huge fluid menu">
  296. <a href="/" class="header item ">CyberSicko.net</a>
  297. <div class="right menu">
  298. <div class="item">
  299. <button class="ui icon toggle basic button">
  300. <i class="content icon"></i>
  301. </button>
  302. </div>
  303. </div>
  304. <div class="ui vertical borderless fluid menu">
  305. <a href="/" class="item">主页</a>
  306. {% for item in category %}
  307. {# <li class="category_li"><a href="/category/{{ item.name }}?page=1">{{ item.name }}</a></li>#}
  308. <a class="{% if current_category != None and current_category == item.name %}
  309. active
  310. {% else %}
  311. {% endif %} item" href="/category/{{ item.name }}?page=1">{{ item.name }}</a>
  312. {% endfor %}
  313. <a href="/login" class="item"> <i class="icon share square"></i>
  314. Sign in</a>
  315. </div>
  316. </div>
  317. </div>
  318. <div class="ui grid stackable container">
  319. <div class="row" id="article">
  320. <div style="padding-left: 3rem;padding-right: 3rem" class="eleven wide column">
  321. <h1 class="ui large header">
  322. <div class="content">{{ article.title }}</div>
  323. </h1>
  324. <div class="ui comments" style="margin-top: 0">
  325. <div class="comment">
  326. <a class="avatar">
  327. <img src="/user_avatar/{{ article.user_id }}">
  328. </a>
  329. <div class="content">
  330. <a class="author">{{ article.user__first_name }}{{ article.user__last_name }}</a>
  331. <div class="metadata">
  332. <div class="date">发布于: {{ article.created_time|days_until }}</div> {% if is_login %}
  333. <a style="font-style: italic; color: #0d6678" target="_blank"
  334. href="/management/article/to_edit/{{ article.id }}">编辑</a>
  335. {% endif %}
  336. </div>
  337. <div class="text">hava a nice day.</div>
  338. </div>
  339. </div>
  340. </div>
  341. <div id="article_content">
  342. {% autoescape off %}
  343. {{ article.html_text }}
  344. {% endautoescape %}
  345. </div>
  346. <h3 class="ui dividing header" style="margin-top: 10vh">评论</h3>
  347. <div class="ui comments">
  348. {% if comments|length <= 0 %}
  349. <p style="text-align: center;font-style: italic">还没有评论</p>
  350. {% endif %}
  351. {% for comment in comments %}
  352. <div class="comment">
  353. <a class="avatar">
  354. <img src="{{ comment.avatar | get_avatar }}">
  355. </a>
  356. <div class="content">
  357. <a target="_blank" href="{{ comment.website }}" class="author">{{ comment.nick_name }}</a>
  358. <div class="text">{{ comment.comment }}</div>
  359. <div class="actions">
  360. <a href="mailto:{{ comment.email }}"> <i class="mail icon"></i>联系他</a>
  361. <a>
  362. <i class="time icon"></i>
  363. {{ comment.created_time | days_until }}
  364. </a>
  365. </div>
  366. </div>
  367. </div>
  368. {% endfor %}
  369. </div>
  370. <form method="post" action="/comment/add" id="comment_form" style="margin-top: 10px"
  371. class="ui form">
  372. {% csrf_token %}
  373. <input hidden="hidden" name="article_id" value="{{ article.id }}">
  374. <input hidden="hidden" name="article_title" value="{{ article.title }}">
  375. <h4 class="ui dividing header">发表评论</h4>
  376. <input id="veryCode" type="text" name="veryCode" hidden="hidden">
  377. <div class="field">
  378. <div class="two fields">
  379. <div class="field">
  380. <label>昵称<span style="color: red">*</span></label>
  381. <input id="nick_name" type="text" name="nick_name" placeholder="昵称">
  382. </div>
  383. <div class="field">
  384. <label>Email<span style="color: red">*</span></label>
  385. <input id="email" type="email" name="email" placeholder="Email">
  386. </div>
  387. </div>
  388. </div>
  389. <div class="field">
  390. <div class="two fields">
  391. <div class="twelve wide field">
  392. <label>网站(可不填)</label>
  393. <input id="website" type="url" name="website" placeholder="网站">
  394. </div>
  395. <div class="four wide field">
  396. <label>头像<span style="color: red">*</span></label>
  397. <div class="ui fluid selection dropdown">
  398. <input value="jenny" type="hidden" name="avatar">
  399. <i class="dropdown icon"></i>
  400. <div class="default text">
  401. Jenny Hess
  402. </div>
  403. <div class="menu">
  404. <div class="item" data-value="jenny">
  405. <img class="ui mini avatar image"
  406. src="https://semantic-ui.com/images/avatar/small/jenny.jpg">
  407. Jenny Hess
  408. </div>
  409. <div class="item" data-value="elliot">
  410. <img class="ui mini avatar image"
  411. src="https://semantic-ui.com/images/avatar/small/elliot.jpg">
  412. Elliot Fu
  413. </div>
  414. <div class="item" data-value="stevie">
  415. <img class="ui mini avatar image"
  416. src="https://semantic-ui.com/images/avatar/small/stevie.jpg">
  417. Stevie Feliciano
  418. </div>
  419. <div class="item" data-value="christian">
  420. <img class="ui mini avatar image"
  421. src="https://semantic-ui.com/images/avatar/small/christian.jpg">
  422. Christian
  423. </div>
  424. <div class="item" data-value="matt">
  425. <img class="ui mini avatar image"
  426. src="https://semantic-ui.com/images/avatar/small/matt.jpg">
  427. Matt
  428. </div>
  429. <div class="item" data-value="justen">
  430. <img class="ui mini avatar image"
  431. src="https://semantic-ui.com/images/avatar/small/justen.jpg">
  432. Justen Kitsune
  433. </div>
  434. </div>
  435. </div>
  436. </div>
  437. </div>
  438. </div>
  439. <div class="field">
  440. <textarea name="comment" placeholder="评论"></textarea>
  441. </div>
  442. <div style="color: red">{{ msg }}</div>
  443. <button class="ui blue labeled submit icon button">
  444. <i class="icon edit"></i> 提交
  445. </button>
  446. </form>
  447. <div class="ui hidden divider"></div>
  448. </div>
  449. <div class="four wide right floated column">
  450. <h4 class="ui header">搜索</h4>
  451. <div id="search" class="ui category search">
  452. <div class="ui icon input">
  453. <input class="prompt" type="text" placeholder="搜索">
  454. <i class="search icon"></i>
  455. </div>
  456. </div>
  457. <h4 class="ui header">归档</h4>
  458. <div class="ui list">
  459. {% for record in records %}
  460. <a class="item" href="/date/{{ record.datetime }}?page=1">{{ record.datetime }}
  461. ({{ record.count }})</a>
  462. {% endfor %}
  463. </div>
  464. <h4 class="ui header">Top</h4>
  465. <div class="ui list">
  466. {% for tag in tags %}
  467. <a class="item" href="/tag/{{ tag.name }}?page=1">{{ tag.name }} ({{ tag.count }})</a>
  468. {% endfor %}
  469. </div>
  470. </div>
  471. </div>
  472. </div>
  473. <div class="ui mini test modal">
  474. <div class="header">
  475. 请输入验证码
  476. </div>
  477. <div class="content">
  478. <p id="veryCodeSet"></p>
  479. <div class="ui input">
  480. <input id="veryCodeInput" type="text" placeholder="请输入验证码">
  481. </div>
  482. </div>
  483. <div class="actions">
  484. <a onclick="submitComment()" id="confirmBtn" class="ui positive right labeled icon button">
  485. 确认
  486. <i class="checkmark icon"></i>
  487. </a>
  488. </div>
  489. </div>
  490. <footer style="margin-top: 50px" class="ui secondary segment">
  491. <div class="ui two column stackable grid">
  492. <div class="ten wide column">
  493. <img style="width: 8rem" src="{% static '/img.png' %}">
  494. <p> © 2023 - 2023 cybersicko.net - All Rights Reserved.</p>
  495. </div>
  496. <div class="six wide column">
  497. <div class="ui left aligned container" style="margin-top:10px">
  498. <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=50019002503732"
  499. style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"><img
  500. src="{% static '/备案图标.png' %}" style="float:left;"/>
  501. <p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;"> 渝公网安备
  502. 50019002503732号</p></a>
  503. <a rel="nofollow"
  504. href="http://beian.miit.gov.cn/publish/query/indexFirst.action"
  505. target="_blank"><p>皖ICP备2023011943号</p></a>
  506. </div>
  507. </div>
  508. </div>
  509. </footer>
  510. <script type="application/javascript" src="{% static 'js/jquery.min.js' %}"></script>
  511. <script type="application/javascript" src="{% static 'semantic.js' %}"></script>
  512. <script src="{% static 'highlightjs/highlight.min.js' %}"></script>
  513. <script type="application/javascript" src="{% static 'photoswipe/photoswipe.umd.min.js' %}"></script>
  514. <script type="application/javascript" src="{% static 'photoswipe/photoswipe-lightbox.umd.min.js' %}"></script>
  515. <script>
  516. restoreComment()
  517. function restoreComment() {
  518. if (localStorage.getItem('nick_name') !== undefined && localStorage.getItem('nick_name') !== '') {
  519. $("#nick_name").val(localStorage.getItem('nick_name'))
  520. }
  521. if (localStorage.getItem('email') !== undefined && localStorage.getItem('email') !== '') {
  522. $("#email").val(localStorage.getItem('email'))
  523. }
  524. if (localStorage.getItem('website') !== undefined && localStorage.getItem('website') !== '') {
  525. $("#website").val(localStorage.getItem('website'))
  526. }
  527. }
  528. function submitComment() {
  529. var veryCodeInput = $("#veryCodeInput").val()
  530. $("#veryCode").attr("value", veryCodeInput)
  531. document.getElementById("comment_form").submit()
  532. }
  533. document.getElementById("comment_form").addEventListener("submit", function (event) {
  534. event.preventDefault(); // 阻止表单提交
  535. // 表单验证逻辑
  536. var veryCode = $('#veryCode').val()
  537. if (veryCode === undefined || veryCode === '') {
  538. getVeryCode()
  539. return
  540. }
  541. var data = $('#comment_form').serializeArray();
  542. localStorage.setItem('nick_name', $('#nick_name').val())
  543. localStorage.setItem('email', $('#email').val())
  544. localStorage.setItem('website', $('#website').val())
  545. return true
  546. // 其他处理逻辑
  547. });
  548. </script>
  549. <script>
  550. function getVeryCode() {
  551. $.ajax('/comment/getVeryCode', {
  552. method: 'get',
  553. contentType: false,
  554. processData: false,
  555. success: function (res) {
  556. $('.mini.modal').modal('show')
  557. $("#veryCodeSet").html("请输入数字: " + res.data)
  558. },
  559. error: function (err) {
  560. }
  561. })
  562. }
  563. $(document).ready(function () {
  564. $(".ui.toggle.button").click(function () {
  565. $(".mobile.only.grid .ui.vertical.menu").toggle(100);
  566. });
  567. $(".ui.dropdown").dropdown();
  568. });
  569. function getClass(width) {
  570. if (width > 35 && width < 150) {
  571. return 'ui small rounded image'
  572. } else if (width > 150 && width < 800) {
  573. return 'ui medium rounded image'
  574. } else if (width > 800) {
  575. return 'ui fluid rounded image'
  576. }
  577. }
  578. $(function () {
  579. // 选中你文章区里的所有图片
  580. $('#article_content img').each(function () {
  581. const $img = $(this);
  582. const src = $img.attr('src');
  583. const alt = $img.attr('alt') || '';
  584. // 如果 alt 是 “宽,高” 格式
  585. let w, h;
  586. if (/,/.test(alt)) {
  587. [w, h] = alt.split(',').map(x => x.trim());
  588. // 在 img 外包一层 <a>
  589. $img.wrap(`
  590. <a
  591. href="${src}"
  592. data-pswp-width="${w}"
  593. data-pswp-height="${h}"
  594. ></a>
  595. `);
  596. // 再给 img 补属性
  597. $img
  598. .css('display', 'inline-block')
  599. .addClass(getClass(w)) // 你原来的那段 class 逻辑
  600. .attr({
  601. width: w,
  602. height: h,
  603. 'data-magnify': 'gallery',
  604. 'data-src': src,
  605. 'data-href': src
  606. });
  607. } else {
  608. // 没有 alt,就只加个样式,不包 a
  609. $img
  610. .css('display', 'inline-block')
  611. .addClass('ui fluid rounded image');
  612. }
  613. });
  614. // 然后初始化 PhotoSwipeLightbox,gallery 指向包了 a 的容器
  615. const lightbox = new PhotoSwipeLightbox({
  616. gallery: '#article', // 或者 'p' 也行,但 #article 更保险
  617. children: 'a[data-pswp-width]',// 只选那些有宽高 data 的 a
  618. pswpModule: PhotoSwipe
  619. });
  620. lightbox.init();
  621. });
  622. </script>
  623. <script>
  624. hljs.initHighlightingOnLoad();
  625. </script>
  626. </body>
  627. </html>