package Ġy ami . model Ċ Ċ import Ġjava . time . DayOfWeek Ċ import Ġjava . time . Duration Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Local Time Ċ import Ġjava . util . stream . Collectors Ċ Ċ class ĠCount ( private Ġval Ġcontext : ĠContext , Ġprivate Ġval Ġcallback : Ġ( Int , ĠString ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfun Ġcount ( data : ĠList < Raw Tick >, Ġpeople : ĠList < Raw Staff >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback ( 3 0 , Ġ" ç»Łè®¡ æķ°æį® ") ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠList < Raw Person > Ġ= Ġdata . groupBy Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠArrayList < Raw Person >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġpeople . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . key Ġ== Ġpeople [ i ]. name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġticks Ġ= Ġit . value . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted Ġ{ Ġa , Ġb Ġ-> Ġa . tick . compareTo ( b . tick ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= ĠRaw Person ( it . key , Ġpeople [ i ]. id , Ġpeople [ i ]. project , Ġticks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Person ( person ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġarray ListOf ( person ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sorted (). toList () ĊĠĠĠĠĠĠĠ Ġcallback ( 7 0 , Ġ" ç»Łè®¡ æķ°æį® å®ĮæĪĲ ") ĊĠĠĠĠĠĠĠ Ġcallback ( 8 0 , Ġ" åĨĻåħ¥ èĢĥ åĭ ¤ è®¡ç®Ĺ ç»ĵæŀľ æĸĩä»¶ ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! context . output Dir . exists ()) Ġcontext . output Dir . mkdir s () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Thread . inter rupted () Ġ&& ĠWriter ( context , Ġcallback ). out Detail X ls ( result )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( 9 0 , Ġ" åĨĻåħ¥ èĢĥ åĭ ¤ è®¡ç®Ĺ ç»ĵæŀľ æĸĩä»¶ æĪĲåĬŁ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( 9 0 , Ġ" åĨĻåħ¥ èĢĥ åĭ ¤ å·¥ æĹ¶ æķ°æį® è®¡ç®Ĺ ç»ĵæŀľ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Thread . inter rupted ()) ĠWriter ( context , Ġcallback ). out Month X ls ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcallback ( 9 0 , Ġ" åıĸæ¶Ī æĪĲåĬŁ ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġcallback ( 8 0 , Ġ" åıĸæ¶Ī æĪĲåĬŁ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcount Person ( person : ĠRaw Person ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlast Tick Ġ= ĠLocalDateTime . MIN ĊĠĠĠĠĠĠĠ Ġvar Ġlast Type Ġ= ĠPass . OUT ĊĠĠĠĠĠĠĠ Ġperson . data . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Duration . between ( last Tick , Ġit . tick ). to Hours () Ġ< Ġ 2 Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( last Type Ġ== ĠPass . IN Ġ&& Ġit . type Ġ== ĠPass . OUT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠDuration . between ( last Tick , Ġit . tick ). to Hours () Ġ< Ġ 2 0 ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( person . work Days . isNotEmpty () Ġ&& Ġperson . work Days . last (). date Ġ== Ġit . tick . to LocalDate ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperson . work Days . last (). list . add ( Pure Tick ( it . tick , Ġit . type )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperson . work Days . add ( Raw Day ( it . tick . to LocalDate (), Ġarray ListOf ( Pure Tick ( it . tick , Ġit . type )))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Tick Ġ= Ġit . tick ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Type Ġ= Ġit . type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġperson . work Days . forEach Ġ{ Ġday Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtick List Ġ= ĠArrayList < Pure Tick >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick List . addAll ( day . list ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( day . date . day OfMonth Ġ== Ġ 1 Ġ&& Ġday . list . first (). type Ġ== ĠPass . OUT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick List . add ( 0 , ĠPure Tick ( day . date . at Start OfDay (), ĠPass . IN )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( day . date . day OfMonth Ġ== Ġday . date . month . length ( day . date . is Le ap Year ) Ġ&& Ġday . list . last (). type Ġ== ĠPass . IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick List . add ( Pure Tick ( day . date . at Time ( 2 3 , Ġ 5 9 , Ġ 5 9 ), ĠPass . OUT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwithout Repeat Ġ= ĠArrayList < Pure Tick >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmatch Ġ= ĠPass . IN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmatch Next Ġ= ĠPass . OUT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tick List . size Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġtick List . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġtick List [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Next Ġ= Ġtick List [ index Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type Ġ== Ġmatch Ġ&& Ġitem Next . type Ġ== Ġmatch Next ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwithout Repeat . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġtick List . size Ġ- Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġmatch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Ġ= Ġmatch Next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Next Ġ= Ġtemp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġwithout Repeat . add ( item Next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( tick List [ index ]. type Ġ== Ġmatch Ġ&& Ġtick List [ index Ġ+ Ġ 1 ]. type Ġ== Ġmatch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠDuration . between ( item . tick , Ġitem Next . tick ). to Minutes () Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġtick List . size Ġ- Ġ 2 ) Ġwithout Repeat . add ( item Next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġerror Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! error Ġ&& Ġwithout Repeat . size Ġ> Ġ 1 Ġ&& Ġwithout Repeat . size Ġ% Ġ 2 Ġ== Ġ 0 Ġ&& Ġwithout Repeat [ 0 ]. type Ġ== ĠPass . IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( person . project . toUpperCase (). contains (" T 1 ") Ġ|| Ġday . date . day OfWeek Ġ== ĠDay OfWeek . S ATUR DAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġday . date . day OfWeek Ġ== ĠDay OfWeek . S UND AY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġinclude Ġl unch Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwork Time Ġ= ĠDuration . ZERO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġwithout Repeat . size Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork Time Ġ= Ġwork Time . plus ( Duration . between ( without Repeat [ i Ġ* Ġ 2 ]. tick , Ġwithout Repeat [ i Ġ* Ġ 2 Ġ+ Ġ 1 ]. tick )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . work Time Ġ= Ġwork Time . to Minutes (). toDouble () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġout Duration Ġ= ĠDuration . ZERO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( without Repeat . size Ġ> Ġ 3 ) Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġwithout Repeat . size Ġ/ Ġ 2 Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= ĠTick Duration ( without Repeat [ i Ġ* Ġ 2 Ġ+ Ġ 1 ]. tick , Ġwithout Repeat [ i Ġ* Ġ 2 Ġ+ Ġ 2 ]. tick ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . out During . add ( duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Duration Ġ= Ġout Duration . plus ( duration . between ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . out Duration Ġ= Ġout Duration . to Minutes (). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . out Times Ġ= Ġif Ġ(! person . project . toUpperCase (). contains (" T 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . out During . filter Ġ{ Ġit . between (). seconds Ġ> Ġ 6 0 0 Ġ}. size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġday . out During . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġl unch Ġtime Ġis Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount L unch ( day , Ġwithout Repeat ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġday . work Time Ġ= Ġ- 1 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( person . project . toUpperCase (). contains (" T 1 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( without Repeat . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( without Repeat . first (). tick . to Local Time () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Before ( Local Time . of ( 1 2 , Ġ 0 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . type Ġ= ĠWork Type . DAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( without Repeat . first (). tick . to LocalDate () Ġ!= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwithout Repeat . last (). tick . to LocalDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . type Ġ= ĠWork Type . N IGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcount L unch ( day : ĠRaw Day , Ġdata : ĠArrayList < Pure Tick >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġæķ°æį® ä¸ºç©º ï¼Į æĪĸèĢħ è·¨ ä¸¤ä¸ª åįĪ é¤ Ĳ æĹ¶éĹ´ ï¼Į è§Ĩ ä¸º å¼Ĥå¸¸ ĊĠĠĠĠĠĠĠ Ġassert ( data . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġassert ( data . size Ġ/ Ġ 2 Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġassert ( data . size Ġ% Ġ 2 Ġ== Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġl unch During Ġ= ĠTime Duration ( context . l unch Start , Ġcontext . l unch End ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwork List Ġ= ĠArrayList < Tick Duration >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdata . size Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork List . add ( Tick Duration ( data [ i Ġ* Ġ 2 ]. tick , Ġdata [ i Ġ* Ġ 2 Ġ+ Ġ 1 ]. tick )) ĊĠĠĠĠĠĠĠ Ġday . work Time Ġ= Ġwork List . flatMap Ġ{ Ġit . filter ( l unch During ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . between () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġacc , Ġduration Ġ-> Ġacc . plus ( duration ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Minutes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toDouble () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( data . size Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Tick Duration >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġdata . size Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Tick Duration ( data [ i Ġ* Ġ 2 Ġ- Ġ 1 ]. tick , Ġdata [ i Ġ* Ġ 2 ]. tick )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout List Ġ= Ġlist . flatMap Ġ{ Ġit . filter ( l unch During ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday . out During . addAll ( out List . filter Ġ{ Ġit . between (). seconds Ġ> Ġ 6 0 0 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( out List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . out Times Ġ= Ġout List . filter Ġ{ Ġit . between (). seconds Ġ> Ġ 6 0 0 Ġ}. size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . out Duration Ġ= Ġout List . map Ġ{ Ġit . between () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġacc , Ġduration Ġ-> Ġacc . plus ( duration ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Minutes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġprintln (" empty Ġ${ day . date }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }