@ file : Suppress (" NOTH ING _ TO _ INLINE ") Ċ Ċ package Ġio . v ith or . d ome http Ċ Ċ import Ġkotlinx . coroutines . suspend C ancellable Coroutine Ċ import Ġplatform . Foundation .* Ċ import Ġplatform . darwin . NSObject Ċ Ċ class ĠNS Url Session Engine Ġprivate Ġconstructor () Ġ: ĠHttp Engine Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke (): ĠHttp Engine Factory Ġ= Ġobject Ġ: ĠHttp Engine Factory Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfig ( config : ĠD ome Client . Config ): ĠHttp Engine Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild (): ĠHttp Engine Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNS Url Session Engine () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġ< R Ġ: ĠAny > Ġrequest ( raw : ĠD ome Client . Request < R >): ĠD ome Client . Raw Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuspend C ancellable Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Payload ( raw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With ( Result . failure ( HTTPError ( exception ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ suspend C ancellable Coroutine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocessed Request : ĠD ome Client . Request < R > Ġ= Ġintercept ( raw ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelegate Ġ= Ġobject Ġ: ĠNSObject (), ĠNSURL Session Data Delegate Protocol Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Data Ġ= ĠNSMutable Data () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠURL Session ( session : ĠNSURL Session , Ġdid Be come Invalid WithError : ĠN SError ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session Ġdid Be come Invalid WithError ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠURL Session ( session : ĠNSURL Session , Ġdata Task : ĠNSURL Session Data Task , Ġdid Receive Data : ĠNS Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session Ġdid Receive Data ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Data . append Data ( did Receive Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠURL Session ( session : ĠNSURL Session , Ġtask : ĠNSURL Session Task , Ġdid Complete WithError : ĠN SError ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session Ġdid Complete ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest InProgress Ġ= Ġfalse Ġ// ĠOnly Ġmain Ġthread Ġaccesses Ġthe Ġfetch er , Ġso Ġit 's Ġsafe Ġto Ġclear Ġthe Ġflag Ġhere . ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtask . response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġ== Ġnull Ġ|| Ġ( response Ġas ĠNS HTTP URL Response ). statusCode . toInt () Ġ! in Ġ 2 0 0 .. 2 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session Ġerror Ġresponse ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠhttpResponse Ġ= Ġ( response Ġas ĠNS HTTP URL Response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Obj Ġ= Ġprocess Http ErrorResponse ( processed Request , Ġreceived Data , ĠhttpResponse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Obj ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( did Complete WithError Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session Ġcompleted Ġwith Ġerror ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Error . with ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Complete WithError . to Throwable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session ĠAl most Ġthere ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session ĠAl most Ġsuccess ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Obj Ġ= Ġprocess Response ( processed Request , Ġreceived Data , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With ( Result . success ( response Obj )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session Ġsuccess ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" URL Session Ġmapping Ġfailure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With ( Result . failure ( Request Error . with ( received Data , Ġe ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Ġ= ĠNSURL Session . session With Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNSURL Session Configuration . default Session Configuration (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Queue Ġ= ĠN SO peration Queue . main Queue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . invoke On Cancellation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . invalidate And Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġbuild Url ( processed Request . url , Ġprocessed Request . payload ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠNSMutable URL Request . request With URL ( url . URL !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . set HTTP Method ( processed Request . method . methodName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess RequestBody ( processed Request , Ġrequest ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Request Headers ( processed Request , Ġrequest ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . data Task With Request ( request ). resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHTTP Error ( cause Ġ= Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< R Ġ: ĠAny > Ġprocess Http ErrorResponse ( ĊĠĠĠĠĠĠĠ Ġprocessed Request : ĠD ome Client . Request < R >, ĊĠĠĠĠĠĠĠ Ġreceived Data : ĠNSMutable Data , ĊĠĠĠĠĠĠĠ Ġresponse : ĠNS HTTP URL Response ĊĠĠĠ Ġ): ĠD ome Client . Raw Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠD ome Client . Raw Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Request , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode Ġ= Ġresponse . statusCode . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠD ome Client . Result . Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRaw Data . of ( received Data ), ĠHTTP Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode Ġ= Ġresponse . statusCode . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Ġ= Ġmutable Map Of < String , ĠList < String ?> ?> (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġresponse . all Header Fields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ key . toString ()] Ġ= ĠlistOf ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse AsString Ġ= Ġreceived Data . string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< R Ġ: ĠAny > Ġprocess Response ( ĊĠĠĠĠĠĠĠ Ġprocessed Request : ĠD ome Client . Request < R >, ĊĠĠĠĠĠĠĠ Ġreceived Data : ĠNSMutable Data , ĊĠĠĠĠĠĠĠ Ġresponse : ĠNS HTTP URL Response ĊĠĠĠ Ġ): ĠD ome Client . Raw Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse String Ġ= Ġreceived Data . string () !! ĊĠĠĠĠĠĠĠ Ġprintln (" Received : Ġ$ response String ") ĊĠĠĠĠĠĠĠ Ġval Ġraw Data Ġ= ĠRaw Data . of ( received Data ) ĊĠĠĠĠĠĠĠ Ġval ĠstatusCode Ġ= Ġresponse . statusCode . toInt () ĊĠĠĠĠĠĠĠ Ġreturn ĠD ome Client . Raw Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Request , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD ome Client . Result . Success ( raw Data ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< R Ġ: ĠAny > Ġprocess Request Headers ( ĊĠĠĠĠĠĠĠ Ġprocessed Request : ĠD ome Client . Request < R >, ĊĠĠĠĠĠĠĠ Ġrequest : ĠNSMutable URL Request ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( processed Request . payload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠD ome Client . Request . Payload . Form Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . add Value (" application / x - www - form - urlencoded ", Ġ" Content - Type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠD ome Client . Request . Payload . Json Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . add Value (" application / json ", Ġ" Content - Type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequest . add Value (" application / json ", Ġ" Accept ") ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġprocessed Request . headers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . add Value ( value , Ġkey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< R Ġ: ĠAny > Ġprocess RequestBody ( ĊĠĠĠĠĠĠĠ Ġprocessed Request : ĠD ome Client . Request < R >, ĊĠĠĠĠĠĠĠ Ġrequest : ĠNSMutable URL Request ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( processed Request . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHTTP Method . Patch , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHTTP Method . Post , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHTTP Method . Put , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHTTP Method . Delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . HTTP Body Ġ= Ġprocessed Request . payload ?. to Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġbuild Url ( url : ĠString , Ġpayload : ĠD ome Client . Request . Payload ?): ĠNSURL Components Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNSURL Components ( url ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( payload Ġis ĠD ome Client . Request . Payload . Query ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Items Ġ= Ġpayload . params . map Ġ{ Ġ( name , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNSURL Query Item ( name , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun ĠD ome Client . Request . Payload ?. to Data (): ĠNS Data ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠD ome Client . Request . Payload . Form Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields . map Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ key =${ percent Escape String ( value )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join ToString ("& "). to NS Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠD ome Client . Request . Payload . Json Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠNS JSON Serialization . data With JSONObject ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNS JSON Serialization . JSONObject WithData ( this . body Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln (" Sending : Ġ$ it ") Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to NS Data () !! , ĠNS JSON Reading Allow Fragments , Ġnull ) !! , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNS JSON Reading Allow Fragments , Ġnull Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . body . also Ġ{ Ġprintln (" Sending : Ġ$ it ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to NS Data () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠD ome Client . Request . Payload . Empty , Ġnull Ġ-> ĠNSMutable Data () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Payload Ġis Ġinvalid Ġ$ this ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠRequest Error . Companion . with ( received Data : ĠNSMutable Data ?, Ġe : ĠThrowable ): ĠRequest Error Ġ{ ĊĠĠĠ Ġprintln (" With Ġerror : Ġ") ĊĠĠĠ Ġprintln ( received Data ?. string ()) ĊĠĠĠ Ġprintln ( e ) ĊĠĠĠ Ġreturn ĠRequest Error ( ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" received Data " Ġto Ġreceived Data ĊĠĠĠĠĠĠĠ Ġ), Ġe ĊĠĠĠ Ġ) Ċ }