package Ġorg . k ent unc . bit tr ader . common . domain . model . c andle Ċ Ċ class ĠC andle List Ġprivate Ġconstructor ( c andle s : ĠList < C andle >) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct Codes Ġ= Ġc andle s . map Ġ{ Ġit . id . product Code Ġ}. toSet () ĊĠĠĠĠĠĠĠ Ġrequire ( product Codes . size Ġ<= Ġ 1 ) Ġ{ Ġ" multiple Ġproduct Ġcodes Ġare Ġfound . Ġgot =$ product Codes " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdur ations Ġ= Ġc andle s . map Ġ{ Ġit . id . duration Ġ}. toSet () ĊĠĠĠĠĠĠĠ Ġrequire ( dur ations . size Ġ<= Ġ 1 ) Ġ{ Ġ" multiple Ġdur ations Ġare Ġfound . Ġgot =$ dur ations " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġduplicate Ġ= Ġc andle s . grouping By Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. each Count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . value Ġ> Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( duplicate . isEmpty ()) Ġ{ Ġ" duplicate Ġc andle s Ġare Ġfound . Ġgot =${ duplicate . keys }" Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsorted Ġ= Ġc andle s . sorted By Ġ{ Ġit . id . dateTime Ġ} ĊĊĠĠĠ Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsorted . size ĊĊĠĠĠ Ġval ĠisEmpty : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsorted . isEmpty () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġof ( c andle s : ĠList < C andle >) Ġ= ĠC andle List ( c andle s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlatest OrNull (): ĠC andle ? Ġ= Ġsorted . last OrNull () ĊĊĠĠĠ Ġfun Ġto List () Ġ= Ġsorted . toList () Ċ } Ċ