package Ġcom . ba ul supp . ok url . util Ċ Ċ import Ġcom . ba ul supp . sch output . Usage Exception Ċ import Ġcom . ba ul supp . ok url . util . File Util . expected File Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ Ċ // ĠTODO Ġhandle Ġduplicate Ġheader Ġkeys Ċ object ĠHeader Util Ġ{ ĊĠ Ġfun Ġheader Map ( headers : ĠList < String >? ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġheader Map Ġ= Ġmutable Map Of < String , ĠString >() ĊĊĠĠĠ Ġheaders ?. forEach Ġ{ ĊĠĠĠĠĠ Ġif Ġ( it . startsWith ("@ ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġheader Map . put All ( header File Map ( it )) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġit . split (" :" . to Regex (), Ġ 2 ). to Typed Array () ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġconsider Ġbetter Ġstrategy Ġthan Ġsimple Ġtrim ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġparts [ 0 ]. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġstring Value ( parts [ 1 ]. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}) ĊĠĠĠĠĠĠĠ Ġheader Map [ name ] Ġ= Ġvalue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġheader Map . toMap () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġheader File Map ( input : ĠString ): ĠMap < out ĠString , ĠString > Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġheader Map ( inputFile ( input ). read Lines ()) ĊĠĠĠ Ġ} Ġcatch Ġ( io e : ĠIOException ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠUsage Exception (" failed Ġto Ġread Ġheader Ġfile ", Ġio e ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġstring Value ( source : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( source . startsWith ("@ ")) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġinput File ( source ). read Text () ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUsage Exception ( e . toString ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġsource ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġinput File ( path : ĠString ): ĠFile Ġ{ ĊĠĠĠ Ġreturn Ġexpected File ( path . substring ( 1 )) ĊĠ Ġ} Ċ } Ċ