package Ġcom . so ble mp rol ved . interface o fo u rown . converters Ċ Ċ import Ġcom . so ble mp rol ved . interface o fo u rown . model .* Ċ import Ġcom . so ble mp rol ved . interface o fo u rown . model . Cs rf Ċ import Ġorg . js oup . nodes . Document Ċ import Ġorg . js oup . nodes . Element Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ class ĠJ soup Helper Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Cs rf From J soup Doc ( doc : ĠDocument ): ĠC s rf Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠC s rf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . select First (" meta [ name = csrf - token ]") !!. attr (" content ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecode Tag ( encoded Tag : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġencoded Tag . replace ("* s *", Ġ"/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("* a *", Ġ"& ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("* d *", Ġ". ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("* q *", Ġ"? ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("* h *", Ġ"# ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġtop - level Ġtags Ġof Ġthe Ġhtml Ġsnippet Ġmust Ġmatch Ġone Ġof Ġthe Ġfollowing Ġpatterns : ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 1 . Ġ`< li Ġid =" work _$ ID " Ġclass =" work Ġbl urb Ġgroup Ġ..." Ġrole =" article "> ` ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 2 . Ġ`< li Ġid =" bookmark _$ ID " Ġclass =" bookmark Ġbl urb Ġgroup " Ġrole =" article "> ` ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse Work Blur b Element ( work Blur b Element : ĠElement ): ĠWork Blur b Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheading Ġ= Ġwork Blur b Element . select First (" div . header . module Ġ> Ġh 4 . heading ") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf andom Elements Ġ= Ġwork Blur b Element . select (" h 5 . f andom s . heading "). select (" a . tag ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequired Tags Ġ= Ġwork Blur b Element . select (" ul . required - tags "). select (" span . text ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Tags Ġ= Ġwork Blur b Element . select (" ul . tags . comm as ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Ġ= Ġwork Blur b Element . select (" dl . stats ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchapter Info Ġ= Ġstats . select (" dd . chapter s "). text (). split ("/") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġactual Ġwork Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġheading . select First (" h 4 . heading Ġ> Ġa [ href ]") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix ("/ works /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġheading . select First (" h 4 . heading Ġ> Ġa [ href ]") !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthors Ġ= Ġheading . select (" a [ rel = author ]"). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheading . own Text () ĠĠ Ġ// Ġ" by ĠAn onymous Ġfor " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĠĠ Ġ// Ġremove Ġleading Ġand Ġtrailing Ġwhitespace Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix (" by ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Suffix (" for ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġname Ġ-> ĠUser Reference . from ( name , Ġhas Url Ġ= Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ Ġelement Ġ-> ĠUser Reference . from ( element . text (), Ġhas Url Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgif te es Ġ= Ġheading . select (" h 4 . heading Ġ> Ġa [ href $ =/ gif ts ]") ĠĠ Ġ// Ġending Ġwith Ġ/ gif ts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠUser Reference . from ( it . text (), Ġhas Url Ġ= Ġtrue ) Ġ} ĠĠ Ġ// Ġp seud s Ġcan Ġbe Ġparsed Ġbased Ġon Ġnames Ġalone ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatetime Ġ= Ġwork Blur b Element . select First (" li . blur b . group Ġ> Ġdiv . header Ġ> Ġp . datetime ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Formatter . of Pattern (" dd ĠM MM Ġy yyy ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf andom s Ġ= Ġf andom Elements . map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrating Ġ= Ġrequired Tags [ 0 ]. text (). let Ġ{ ĠRating . from Name ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= Ġrequired Tags [ 2 ]. text (). split (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĠCategory . from Name ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwarnings Ġ= Ġuser Tags . select (" li . warnings "). map Ġ{ ĠWarning . from Name ( it . text ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelationships Ġ= Ġuser Tags . select (" li . relationships "). map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacters Ġ= Ġuser Tags . select (" li . characters "). map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfree forms Ġ= Ġuser Tags . select (" li . free forms "). map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= Ġwork Blur b Element . select (" blockquote . user stuff . summary "). text (). let Ġ{ ĠHtml ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage Ġ= Ġstats . select (" dd . language "). text (). let Ġ{ ĠLanguage . from Name ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġstats . select (" dd . words ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (", "," ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( it . isBlank ()) Ġ 0 Ġelse Ġit . toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Chapter Count Ġ= Ġchapter Info [ 0 ]. replace (", ","" ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Chapter Count Ġ= Ġchapter Info [ 1 ]. toInt OrNull () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomments Ġ= Ġstats . select (" dd . comments "). text (). toInt OrNull () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk ud os Ġ= Ġstats . select (" dd . k ud os "). text (). toInt OrNull () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook marks Ġ= Ġstats . select (" dd . bookmarks "). text (). toInt OrNull () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhits Ġ= Ġstats . select (" dd . hits "). text (). toInt OrNull () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWork Blur b ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= Ġauthors , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgif te es Ġ= Ġgif te es , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Updated Date Ġ= Ġdatetime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf andom s Ġ= Ġf andom s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrating Ġ= Ġrating , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarnings Ġ= Ġwarnings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories Ġ= Ġcategories , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters Ġ= Ġcharacters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelationships Ġ= Ġrelationships , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfree forms Ġ= Ġfree forms , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġsummary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġ= Ġlanguage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Count Ġ= Ġwords , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter Count Ġ= Ġcurrent Chapter Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Chapter Count Ġ= Ġmax Chapter Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Count Ġ= Ġcomments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ud os Count Ġ= Ġk ud os , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark Count Ġ= Ġbook marks , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhit Count Ġ= Ġhits , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse External Work Blur b Element ( external Work Blur b Element : ĠElement ): ĠExternal Work Blur b Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheading Ġ= Ġexternal Work Blur b Element . select First (" div . header . module Ġ> Ġh 4 . heading ") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf andom Elements Ġ= Ġexternal Work Blur b Element . select (" h 5 . f andom s . heading ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a . tag ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequired Tags Ġ= Ġexternal Work Blur b Element . select (" ul . required - tags ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" span . text ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Tags Ġ= Ġexternal Work Blur b Element . select (" ul . tags . comm as ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Ġ= Ġexternal Work Blur b Element . select (" dl . stats ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġthe Ġbelow Ġsection Ġof Ġcode Ġis Ġsame Ġas Ġwork Ġparsing Ġcode */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġheading . select First (" h 4 . heading Ġ> Ġa [ href ]") !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthors Ġ= Ġheading . select (" a [ rel = author ]"). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheading . own Text () ĠĠ Ġ// Ġ" by ĠAn onymous Ġfor " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĠĠ Ġ// Ġremove Ġleading Ġand Ġtrailing Ġwhitespace Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix (" by ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Suffix (" for ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġname Ġ-> ĠUser Reference . from ( name , Ġhas Url Ġ= Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ Ġelement Ġ-> ĠUser Reference . from ( element . text (), Ġhas Url Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatetime Ġ= Ġexternal Work Blur b Element . select First (" li . blur b . group Ġ> Ġdiv . header Ġ> Ġp . datetime ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Formatter . of Pattern (" dd ĠM MM Ġy yyy ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf andom s Ġ= Ġf andom Elements . map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrating Ġ= Ġrequired Tags [ 0 ]. text (). let Ġ{ ĠRating . from Name ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= Ġrequired Tags [ 2 ]. text (). split (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĠCategory . from Name ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelationships Ġ= Ġuser Tags . select (" li . relationships "). map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacters Ġ= Ġuser Tags . select (" li . characters "). map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfree forms Ġ= Ġuser Tags . select (" li . free forms "). map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= Ġexternal Work Blur b Element . select (" blockquote . user stuff . summary ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠHtml ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCode Ġunique Ġto Ġexternal Ġwork Ġparsing Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġheading . select First (" h 4 . heading Ġ> Ġa [ href ]") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix ("/ external _ works /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Long () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook marks Ġ= Ġstats ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" dd Ġ> Ġa [ href ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit . attr (" href "). endsWith ("/ bookmarks ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (",", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠExternal Work Blur b ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= Ġauthors , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Updated Date Ġ= Ġdatetime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf andom s Ġ= Ġf andom s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrating Ġ= Ġrating , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories Ġ= Ġcategories , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters Ġ= Ġcharacters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelationships Ġ= Ġrelationships , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfree forms Ġ= Ġfree forms , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġsummary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark Count Ġ= Ġbook marks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Series Blur b Element ( series Blur b Element : ĠElement ): ĠSeries Blur b Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheading Ġ= Ġseries Blur b Element . select First (" div . header . module Ġ> Ġh 4 . heading ") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf andom Elements Ġ= Ġseries Blur b Element . select (" h 5 . f andom s . heading "). select (" a . tag ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequired Tags Ġ= Ġseries Blur b Element . select (" ul . required - tags "). select (" span . text ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Tags Ġ= Ġseries Blur b Element . select (" ul . tags . comm as ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Ġ= Ġseries Blur b Element . select (" dl . stats ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġthe Ġbelow Ġsection Ġof Ġcode Ġis Ġsame Ġas Ġwork Ġparsing Ġcode */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġheading . select First (" h 4 . heading Ġ> Ġa [ href ]") !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthors Ġ= Ġheading . select (" a [ rel = author ]"). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheading . own Text () ĠĠ Ġ// Ġ" by ĠAn onymous Ġfor " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĠĠ Ġ// Ġremove Ġleading Ġand Ġtrailing Ġwhitespace Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix (" by ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Suffix (" for ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġname Ġ-> ĠUser Reference . from ( name , Ġhas Url Ġ= Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ Ġelement Ġ-> ĠUser Reference . from ( element . text (), Ġhas Url Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatetime Ġ= Ġseries Blur b Element . select First (" li . blur b . group Ġ> Ġdiv . header Ġ> Ġp . datetime ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Formatter . of Pattern (" dd ĠM MM Ġy yyy ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf andom s Ġ= Ġf andom Elements . map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= Ġrequired Tags [ 2 ]. text (). split (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĠCategory . from Name ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwarnings Ġ= Ġuser Tags . select (" li . warnings "). map Ġ{ ĠWarning . from Name ( it . text ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelationships Ġ= Ġuser Tags . select (" li . relationships "). map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacters Ġ= Ġuser Tags . select (" li . characters "). map Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfree forms Ġ= Ġuser Tags . select (" li . free forms "). map Ġ{ Ġit . text () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCode Ġbelow Ġis Ġunique Ġto Ġseries Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġheading . select First (" h 4 . heading Ġ> Ġa [ href ]") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix ("/ series /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġratings Ġ= Ġrequired Tags [ 0 ]. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠRating . from Name ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= Ġseries Blur b Element . select First (" blockquote . user stuff . summary ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠHtml ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠHtml ("") ĠĠ Ġ// ĠSeries Ġmight Ġnot Ġhave Ġsummar ies ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Numbers Ġ= Ġstats . select (" dd "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (", "," ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġorder Ġis Ġalways Ġwords Ġ- Ġwork count Ġ- Ġbook marks Ġ( optional ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġstats Numbers [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwork Count Ġ= Ġstats Numbers [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook marks Ġ= Ġstats Numbers . getOrElse ( 2 ) Ġ{ Ġ 0 Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSeries Blur b ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= Ġauthors , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Updated Date Ġ= Ġdatetime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf andom s Ġ= Ġf andom s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġratings Ġ= Ġratings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarnings Ġ= Ġwarnings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories Ġ= Ġcategories , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters Ġ= Ġcharacters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelationships Ġ= Ġrelationships , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfree forms Ġ= Ġfree forms , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġsummary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Count Ġ= Ġwords , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork Count Ġ= Ġwork Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark Count Ġ= Ġbook marks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġtop - level Ġtags Ġof Ġthe Ġhtml Ġsnippet Ġmust Ġmatch Ġone Ġof Ġthe Ġfollowing Ġpatterns : ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 1 . Ġ`< li Ġclass =" collection Ġpicture Ġbl urb Ġgroup " Ġrole =" article "> ` ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse Collection Blur b Element ( collection Blur b Element : ĠElement ): ĠCollection Blur b Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheading Ġ= Ġcollection Blur b Element . select First (" li . collection . blur b Ġ> Ġdiv . header Ġ> Ġh 4 . heading ") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġheading . select First (" h 4 . heading Ġ> Ġa [ href ]") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġheading . select First (" h 4 . heading Ġ> Ġspan . name ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix (" (" ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Suffix (" )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġheading . select (" h 4 . heading Ġ> Ġa [ href ^ =/ users / ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠUser Reference . from ( it . text (), Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġcollection Blur b Element . select First (" li . collection . blur b Ġ> Ġdiv . header Ġ> Ġp . datetime ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Formatter . of Pattern (" dd ĠM MM Ġy yyy ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= Ġcollection Blur b Element . select First (" li . collection . blur b Ġ> Ġblock quote . user stuff . summary ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠHtml ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= Ġcollection Blur b Element . select First (" li . collection . blur b Ġ> Ġp . type ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix (" (" ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Suffix (" )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (", Ġ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisOpen Ġ= Ġtypes [ 0 ] Ġ== Ġ" Open " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Mod erated Ġ= Ġtypes [ 1 ] Ġ== Ġ" Mod erated " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Un re ve aled Ġ= Ġtypes . contains (" Un re ve aled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Anonymous Ġ= Ġtypes . contains (" Anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchallenge Type Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtypes . contains (" Gift ĠExchange ĠChallenge ") Ġ-> ĠChallenge Type . G IFT _ EX CHANGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtypes . contains (" Prompt ĠMe me ĠChallenge ") Ġ-> ĠChallenge Type . PROMPT _ ME ME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠChallenge Type . NO _ CH ALL EN GE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCollection Blur b ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Created Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisOpen Ġ= ĠisOpen , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mod erated Ġ= Ġis Mod erated , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Re ve aled Ġ= Ġ! is Un re ve aled , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Anonymous Ġ= Ġis Anonymous , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchallenge Ġ= Ġchallenge Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġsummary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaintainers Ġ= Ġusers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Comment Element ( comment Element : ĠElement ): ĠComment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Bookmark Element ( bookmark Element : ĠElement ): ĠBook mark Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġbookmark Element . select (" div . header Ġ> Ġh 5 . by line Ġ> Ġa [ href ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠdisplayName Ġ-> ĠUser Reference . from ( displayName , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbookmark Date Ġ= Ġbookmark Element . select First (" div . header Ġ> Ġp . datetime ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠLocalDate . parse ( it , ĠDateTime Formatter . of Pattern (" dd ĠM MM Ġy yyy ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġbookmark Element . select First (" div . header Ġ> Ġp . status Ġ> Ġa Ġ> Ġspan ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. className () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠclassName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( className ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" public " Ġ-> ĠBook mark Type . PUBLIC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" rec " Ġ-> ĠBook mark Type . RE COMM END ATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException () ĠĠ Ġ// Ġfail Ġfast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbookmark Notes Ġ= Ġbookmark Element . select First (" blockquote . user stuff . summary ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠHtml ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠHtml ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcollections Ġ= Ġbookmark Element . select (" ul . meta . comm as : not (. tags ) Ġ> Ġli Ġ> Ġa [ href ]") ĠĠ Ġ// Ġexclude Ġtags ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġit . attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġurl . remove Prefix ("/ collections /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollection Reference ( id Ġ= Ġid , Ġname Ġ= Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġbookmark Element . select (" ul . meta . tags . comm as Ġ> Ġli Ġ> Ġa ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . text () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBook mark ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Reference Ġ= Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollections Ġ= Ġcollections , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġbookmark Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes Ġ= Ġbookmark Notes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark Type Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ