package Ġapp . soft work . routing compose Ċ Ċ public Ġdata Ġclass ĠParameters ( val Ġraw : ĠString , Ġval Ġmap : ĠMap < String , ĠList < String >>) Ġ{ ĊĠĠĠ Ġpublic Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġreserved Characters Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" +" Ġto Ġ" Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 0 " Ġto Ġ" Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 1 " Ġto Ġ" !", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 2 " Ġto Ġ"\" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 3 " Ġto Ġ"# ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 4 " Ġto Ġ"$ ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 5 " Ġto Ġ"% ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 6 " Ġto Ġ"& ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 7 " Ġto Ġ"'", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 8 " Ġto Ġ" (", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 9 " Ġto Ġ" )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 A " Ġto Ġ"*", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 B " Ġto Ġ"+", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 C " Ġto Ġ",", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 D " Ġto Ġ"-", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 E " Ġto Ġ".", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 F " Ġto Ġ"/", ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 3 A " Ġto Ġ" :", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 3 B " Ġto Ġ"; ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 3 C " Ġto Ġ"< ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 3 D " Ġto Ġ"=", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 3 E " Ġto Ġ"> ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 3 F " Ġto Ġ" ?", ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 4 0 " Ġto Ġ"@ ", ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 5 B " Ġto Ġ"[", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 5 C " Ġto Ġ"\\ ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 5 D " Ġto Ġ" ]", ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġfrom ( raw Parameters : ĠString ): ĠParameters Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġraw Parameters . split ("& ", Ġ"; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey ed : ĠMap < String , ĠList < String >> Ġ= Ġparameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . split (" =") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy ({ Ġit . first () Ġ}) Ġ{ Ġit . last () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Values Ġ{ Ġ(_, Ġvalues ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . map Ġ{ Ġit . percent Encode () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. filter Ġ{ Ġit . value . isNotEmpty () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠParameters ( raw Parameters , Ġkey ed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠString . percent Encode (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġencoded Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( re placed , Ġvalue ) Ġin Ġreserved Characters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoded Ġ= Ġencoded . replace ( re placed , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġencoded ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ