package Ġorg . star coin . si ri us . chain Ċ Ċ import Ġorg . star coin . si ri us . chain . fallback . Default Chain Strategy Ċ import Ġorg . star coin . si ri us . core . Si ri us Object Ċ import Ġorg . star coin . si ri us . protocol . Contract Function Ċ import Ġorg . star coin . si ri us . protocol . Function Signature Ċ import Ġjava . util .* Ċ import Ġkotlin . reflect . K Class Ċ Ċ interface ĠChain Strategy Ġ{ ĊĊĠĠĠ Ġfun Ġ< S Ġ: ĠSi ri us Object > Ġencode ( obj : ĠS ): ĠByteArray ĊĊĠĠĠ Ġfun Ġ< S Ġ: ĠSi ri us Object > Ġdecode ( bytes : ĠByteArray , Ġclazz : ĠK Class < S >): ĠS ĊĊĠĠĠ Ġfun Ġsignature ( function : ĠContract Function < *> ): ĠFunction Signature ĊĊĠĠĠ Ġfun Ġ< S Ġ: ĠSi ri us Object > Ġencode ( function : ĠContract Function < S >, Ġinput : ĠS ): ĠByteArray ĊĊĠĠĠ Ġfun Ġ< S Ġ: ĠSi ri us Object > Ġdecode ( function : ĠContract Function < S >, Ġbytes : ĠByteArray ): ĠS ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠChain Strategy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠChain Strategy Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġload ers Ġ= ĠService Loader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( Chain Strategy Provider :: class . java ). iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loaders . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload ers . next (). create Chain Strategy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġcan Ġnot Ġfind , Ġuse Ġfallback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Chain Strategy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< S Ġ: ĠSi ri us Object > Ġencode ( obj : ĠS ) Ġ= Ġinstance . encode ( obj ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< S Ġ: ĠSi ri us Object > Ġdecode ( bytes : ĠByteArray , Ġclazz : ĠK Class < S >) Ġ= Ġinstance . decode ( bytes , Ġclazz ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsignature ( function : ĠContract Function <* >) Ġ= Ġinstance . signature ( function ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< S Ġ: ĠSi ri us Object > Ġencode ( function : ĠContract Function < S >, Ġinput : ĠS ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . encode ( function , Ġinput ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< S Ġ: ĠSi ri us Object > Ġdecode ( function : ĠContract Function < S >, Ġbytes : ĠByteArray ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . decode ( function , Ġbytes ) ĊĠĠĠ Ġ} Ċ } Ċ