package Ġcom . ale yn . mv vm . network . interceptor Ċ Ċ import Ġcom . blank j . util code . util . Json Utils Ċ import Ġokhttp 3 . Form Body Ċ import Ġokhttp 3 . Request Ċ import Ġok io . Buffer Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* Ġ åĢ Ł é ī ´ åħ¶ä»ĸ Demo éĩĮ çļĦ æĹ¥å¿Ĺ æīĵåį° Ġ ç±» Ċ Ġ* Ġå½ĵ æĹ¥å¿Ĺ æ¯Ķè¾ĥ å¤ļ æĹ¶ ï¼Į æľī æĹ¶åĢĻ ä¼ļ åĩºçİ° è¾ĵåĩº ä¸į åħ¨ çļĦ æĥħåĨµ Ċ Ġ*/ Ċ object ĠPrinter Ġ{ ĊĠĠĠ Ġprivate Ġval ĠLINE _ SEPARATOR Ġ= ĠSystem . getProperty (" line . separator ") Ġ?: Ġ"\ n " ĊĠĠĠ Ġprivate Ġval ĠDOUBLE _ SEPARATOR Ġ= ĠLINE _ SEPARATOR Ġ+ ĠLINE _ SEPARATOR ĊĊĠĠĠ Ġprivate Ġval ĠO MIT TED _ RESPONSE Ġ= ĠarrayOf ( LINE _ SEPARATOR , Ġ" O mitted Ġresponse Ġbody ") ĊĠĠĠ Ġprivate Ġval ĠO MIT TED _ REQUEST Ġ= ĠarrayOf ( LINE _ SEPARATOR , Ġ" O mitted Ġrequest Ġbody ") ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠN Ġ= Ġ"\ n " ĊĠĠĠ Ġprivate Ġconst Ġval ĠT Ġ= Ġ"\ t " ĊĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ UP _ LINE Ġ= ĊĠĠĠĠĠĠĠ Ġ" âĶ Į âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ ĠRequest Ġ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ " ĊĠĠĠ Ġprivate Ġconst Ġval ĠEND _ LINE Ġ= ĊĠĠĠĠĠĠĠ Ġ" âĶĶ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢ " ĊĠĠĠ Ġprivate Ġconst Ġval ĠRESP ONSE _ UP _ LINE Ġ= ĊĠĠĠĠĠĠĠ Ġ" âĶ Į âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ ĠResponse Ġ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢâĶĢâĶĢâĶĢâĶĢâĶĢ âĶĢ " ĊĠĠĠ Ġprivate Ġconst Ġval ĠB ODY _ TAG Ġ= Ġ" Body :" ĊĠĠĠ Ġprivate Ġconst Ġval ĠURL _ TAG Ġ= Ġ" URL : Ġ" ĊĠĠĠ Ġprivate Ġconst Ġval ĠMETHOD _ TAG Ġ= Ġ" Method : Ġ@" ĊĠĠĠ Ġprivate Ġconst Ġval ĠHEAD ERS _ TAG Ġ= Ġ" Headers :" ĊĠĠĠ Ġprivate Ġconst Ġval ĠSTATUS _ CODE _ TAG Ġ= Ġ" Status ĠCode : Ġ" ĊĠĠĠ Ġprivate Ġconst Ġval ĠRE CE IVED _ TAG Ġ= Ġ" Received Ġin : Ġ" ĊĠĠĠ Ġprivate Ġconst Ġval ĠCOR NER _ UP Ġ= Ġ" âĶ Į Ġ" ĊĠĠĠ Ġprivate Ġconst Ġval ĠCOR NER _ BOTTOM Ġ= Ġ" âĶĶ Ġ" ĊĠĠĠ Ġprivate Ġconst Ġval ĠC ENTER _ LINE Ġ= Ġ" âĶ ľ Ġ" ĊĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ LINE Ġ= Ġ" âĶĤ Ġ" ĊĊĠĠĠ Ġprivate Ġfun ĠisEmpty ( line : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġline . isEmpty () Ġ|| ĠN Ġ== Ġline Ġ|| ĠT Ġ== Ġline Ġ|| Ġline . trim (). isEmpty () ĊĊĠĠĠ Ġinternal Ġfun Ġprint Json Request ( builder : ĠLogging Interceptor , Ġrequest : ĠRequest ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠLINE _ SEPARATOR Ġ+ ĠB ODY _ TAG Ġ+ ĠLINE _ SEPARATOR Ġ+ Ġbody ToString ( request ) ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġbuilder . request Tag ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( builder . type , Ġtag , ĠREQUEST _ UP _ LINE ) ĊĠĠĠĠĠĠĠ Ġlog Lines ( builder . type , Ġtag , ĠarrayOf ( URL _ TAG Ġ+ Ġrequest . url ()), Ġbuilder . logger , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġlog Lines ( builder . type , Ġtag , Ġget Request ( request , Ġbuilder . level ), Ġbuilder . logger , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request . body () Ġis ĠForm Body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Body Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġrequest . body () Ġas ĠForm Body ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Ġ!= Ġnull Ġ&& Ġbody . size () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġbody . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body . append ( body . encoded Name ( i ) Ġ+ Ġ"=" Ġ+ Ġbody . encoded Value ( i ) Ġ+ Ġ"& ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body . delete ( form Body . length Ġ- Ġ 1 , Ġform Body . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Lines ( builder . type , Ġtag , ĠarrayOf ( form Body . toString ()), Ġbuilder . logger , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . level Ġ== ĠLevel . BASIC Ġ|| Ġbuilder . level Ġ== ĠLevel . BODY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Lines ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body . split ( LINE _ SEPARATOR . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . logger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( builder . type , Ġtag , ĠEND _ LINE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġprint JsonResponse ( ĊĠĠĠĠĠĠĠ Ġbuilder : ĠLogging Interceptor , Ġchain Ms : ĠLong , Ġis Successful : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcode : ĠInt , Ġheaders : ĠString , Ġbody String : ĠString , Ġsegments : ĠList < String > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ SEPARATOR !! Ġ+ ĠB ODY _ TAG Ġ+ ĠLINE _ SEPARATOR Ġ+ ĠJson Utils . format Json ( body String ) ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġbuilder . response Tag ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( builder . type , Ġtag , ĠRESP ONSE _ UP _ LINE ) ĊĊĠĠĠĠĠĠĠ Ġlog Lines ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . type , Ġtag , Ġget Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders , Ġchain Ms , Ġcode , Ġis Successful , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . level , Ġsegments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġbuilder . logger , Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . level Ġ== ĠLevel . BASIC Ġ|| Ġbuilder . level Ġ== ĠLevel . BODY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Lines ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Body . split ( LINE _ SEPARATOR . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . logger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( builder . type , Ġtag , ĠEND _ LINE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġprint File Request ( builder : ĠLogging Interceptor , Ġrequest : ĠRequest ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġbuilder . response Tag ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( builder . type , Ġtag , ĠREQUEST _ UP _ LINE ) ĊĠĠĠĠĠĠĠ Ġlog Lines ( builder . type , Ġtag , ĠarrayOf ( URL _ TAG Ġ+ Ġrequest . url ()), Ġbuilder . logger , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġlog Lines ( builder . type , Ġtag , Ġget Request ( request , Ġbuilder . level ), Ġbuilder . logger , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request . body () Ġis ĠForm Body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Body Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġrequest . body () Ġas ĠForm Body ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Ġ!= Ġnull Ġ&& Ġbody . size () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġbody . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body . append ( body . encoded Name ( i ) Ġ+ Ġ"=" Ġ+ Ġbody . encoded Value ( i ) Ġ+ Ġ"& ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body . delete ( form Body . length Ġ- Ġ 1 , Ġform Body . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Lines ( builder . type , Ġtag , ĠarrayOf ( form Body . toString ()), Ġbuilder . logger , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . level Ġ== ĠLevel . BASIC Ġ|| Ġbuilder . level Ġ== ĠLevel . BODY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Lines ( builder . type , Ġtag , ĠO MIT TED _ REQUEST , Ġbuilder . logger , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( builder . type , Ġtag , ĠEND _ LINE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġprint File Response ( ĊĠĠĠĠĠĠĠ Ġbuilder : ĠLogging Interceptor , Ġchain Ms : ĠLong , Ġis Successful : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcode : ĠInt , Ġheaders : ĠString , Ġsegments : ĠList < String > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġbuilder . response Tag ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( builder . type , Ġtag , ĠRESP ONSE _ UP _ LINE ) ĊĊĠĠĠĠĠĠĠ Ġlog Lines ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . type , Ġtag , Ġget Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders , Ġchain Ms , Ġcode , Ġis Successful , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . level , Ġsegments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġbuilder . logger , Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlog Lines ( builder . type , Ġtag , ĠO MIT TED _ RESPONSE , Ġbuilder . logger , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( builder . logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( builder . type , Ġtag , ĠEND _ LINE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Request ( request : ĠRequest , Ġlevel : ĠLevel ): ĠArray < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġrequest . headers (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġlog gable Header Ġ= Ġlevel Ġ== ĠLevel . HEADERS Ġ|| Ġlevel Ġ== ĠLevel . BASIC ĊĠĠĠĠĠĠĠ Ġmessage Ġ= ĠMETHOD _ TAG Ġ+ Ġrequest . method () Ġ+ ĠDOUBLE _ SEPARATOR Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog gable Header Ġ-> Ġ"${ HEADERS _ TAG }${ LINE _ SEPARATOR }${ dot Headers ( header )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage . split ( LINE _ SEPARATOR !!. to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Response ( ĊĠĠĠĠĠĠĠ Ġheader : ĠString , Ġtook Ms : ĠLong , Ġcode : ĠInt , Ġis Successful : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġlevel : ĠLevel , Ġsegments : ĠList < String > ĊĠĠĠ Ġ): ĠArray < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġlog gable Header Ġ= Ġlevel Ġ== ĠLevel . HEADERS Ġ|| Ġlevel Ġ== ĠLevel . BASIC ĊĠĠĠĠĠĠĠ Ġval Ġsegment String Ġ= Ġslash Segments ( segments ) ĊĠĠĠĠĠĠĠ Ġmessage Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ if Ġ( segment String . isNotEmpty ()) Ġ"$ segment String Ġ- Ġ" Ġelse Ġ"" } is Ġsuccess Ġ: Ġ$ is Successful Ġ- Ġ$ RECE IVED _ TAG $ to ok Ms Ġms Ġ$ DOUBLE _ SEPARATOR Ġ$ STATUS _ CODE _ TAG Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ code Ġ$ DOUBLE _ SEPARATOR Ġ${ if Ġ( log gable Header ) ĠHEAD ERS _ TAG Ġ+ ĠLINE _ SEPARATOR Ġ+ Ġdot Headers ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse Ġ"" }" ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage . split ( LINE _ SEPARATOR . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġslash Segments ( segments : ĠList < String >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsegment String Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( segment Ġin Ġsegments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsegment String . append ("/ "). append ( segment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsegment String . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdot Headers ( header : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty ( header )) Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . split ( LINE _ SEPARATOR !!. to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġtag Ġ= Ġ" âĶĢ Ġ" ĊĠĠĠĠĠĠĠ Ġif Ġ( headers . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġheaders . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġwhen Ġ( i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠCOR NER _ UP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders . size Ġ- Ġ 1 Ġ-> ĠCOR NER _ BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠC ENTER _ LINE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( tag ). append ( headers [ i ]). append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġheaders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( tag ). append ( item ). append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog Lines ( ĊĠĠĠĠĠĠĠ Ġtype : ĠInt , ĊĠĠĠĠĠĠĠ Ġtag : ĠString , ĊĠĠĠĠĠĠĠ Ġlines : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġlogger : ĠLogging Interceptor . Logger ?, ĊĠĠĠĠĠĠĠ Ġwith Line Size : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Length Ġ= Ġline . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxSize Ġ= Ġif Ġ( with Line Size ) Ġ 1 1 0 Ġelse Ġline Length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. line Length Ġ/ ĠmaxSize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġi Ġ* ĠmaxSize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend Ġ= Ġ( i Ġ+ Ġ 1 ) Ġ* ĠmaxSize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġif Ġ( end Ġ> Ġline . length ) Ġline . length Ġelse Ġend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( type , Ġtag , ĠDEFAULT _ LINE Ġ+ Ġline . substring ( start , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log ( type , Ġtag , Ġline . substring ( start , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbody ToString ( request : ĠRequest ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= Ġrequest . newBuilder (). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠBuffer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( copy . body () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy . body () !!. writeTo ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJson Utils . format Json ( buffer . read Utf 8 ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"{\" err \": Ġ\" ${ e . message }\" }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog ( type : ĠInt , Ġtag : ĠString , Ġmsg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogging Interceptor . Logger . DEFAULT . log ( type , Ġtag , Ġmsg ) ĊĠĠĠ Ġ} Ċ } Ċ