/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġ ĠST Micro electron ics ĠâĢĵ ĠAll Ġrights Ġreserved Ċ Ġ* ĠThe ĠST Micro electron ics Ġcorpor ate Ġlogo Ġis Ġa Ġtrade mark Ġof ĠST Micro electron ics Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ġmodification , Ċ Ġ* Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ- ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ċ Ġ* ĠĠĠ Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ- ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ċ Ġ* ĠĠĠ Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ċ Ġ* ĠĠĠ Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ- ĠNeither Ġthe Ġname Ġnor Ġtrade marks Ġof ĠST Micro electron ics ĠInternational ĠN . V . Ġnor Ġany Ġother Ċ Ġ* ĠĠĠ ĠST Micro electron ics Ġcompany Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ċ Ġ* ĠĠĠ Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* Ġ- ĠAll Ġof Ġthe Ġicons , Ġpictures , Ġlog os Ġand Ġother Ġimages Ġthat Ġare Ġprovided Ġwith Ġthe Ġsource Ġcode Ċ Ġ* ĠĠĠ Ġin Ġa Ġdirectory Ġwhose Ġtitle Ġbegins Ġwith Ġst _ images Ġmay Ġonly Ġbe Ġused Ġfor Ġinternal Ġpurposes Ġand Ċ Ġ* ĠĠĠ Ġshall Ġnot Ġbe Ġre distributed Ġto Ġany Ġthird Ġparty Ġor Ġmodified Ġin Ġany Ġway . Ċ Ġ* Ċ Ġ* Ġ- ĠAny Ġre distributions Ġin Ġbinary Ġform Ġshall Ġnot Ġinclude Ġthe Ġcapability Ġto Ġdisplay Ġany Ġof Ġthe Ċ Ġ* ĠĠĠ Ġicons , Ġpictures , Ġlog os Ġand Ġother Ġimages Ġthat Ġare Ġprovided Ġwith Ġthe Ġsource Ġcode Ġin Ġa Ġdirectory Ċ Ġ* ĠĠĠ Ġwhose Ġtitle Ġbegins Ġwith Ġst _ images . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY Ċ Ġ* ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER Ċ Ġ* ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR Ċ Ġ* ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY Ċ Ġ* ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR Ċ Ġ* ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY Ċ Ġ* ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġcom . st . smart ag lib Ċ Ċ import Ġcom . st . smart ag lib . util . extract BE UInt From Ċ import Ġkotlin . experimental . and Ċ Ċ data Ġclass ĠN Def Record Header ( val Ġt nf : ĠByte , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Length : Byte , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Length : ĠByte , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpayload Length : ĠLong ){ ĊĊĠĠĠ Ġ// tag Ġtype Ġis Ġthe Ġlast Ġ 3 Ġbit ĊĠĠĠ Ġval Ġtype : Byte ĊĠĠĠ Ġget () Ġ= Ġt nf . and ( 0 x 0 7 ) ĊĊĠĠĠ Ġval Ġis Short Record : Boolean ĊĠĠĠ Ġget () Ġ= Ġis Short Record ( tn f ) ĊĊĠĠĠ Ġval Ġhas Id Length : Boolean ĊĠĠĠ Ġget () Ġ= Ġhas Id Length ( tn f ) ĊĊĠĠĠ Ġval Ġlength : Short ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( if ( is Short Record ) Ġ 3 Ġelse Ġ 6 Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( has Id Length ) ĠĠĠ 1 Ġelse Ġ 0 ). to Short () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġis Last Record : Boolean ĊĠĠĠ Ġget () Ġ= Ġ( tn f Ġand Ġ 0 x 4 0 ) Ġ!= Ġ 0 . to Byte () Ċ } Ċ Ċ fun ĠS mar Tag IO . readString From Byte Offset ( byte Offset : Short , Ġlength : Short ): String { ĊĠĠĠ Ġ// we Ġcan Ġread Ġ 4 Ġbyte Ġat Ġthe Ġtime ĊĠĠĠ Ġval Ġstart Cell Offset Ġ= Ġbyte Offset . rem ( 4 ) ĊĠĠĠ Ġval Ġstart Read Ġ= Ġ(( byte Offset - start Cell Offset )/ 4 ). to Short () ĊĠĠĠ Ġval Ġend Read Ġ= Ġ( start Read Ġ+ Ġlength . div ( 4 ) Ġ+ Ġ 1 ). to Short () Ġ// Ġ+ 1 Ġif Ġthe Ġvalue Ġis Ġnot Ġmultiple Ġof Ġ 4 ĊĊĠĠĠ Ġval Ġfinal String Ġ= ĠStringBuffer () ĊĊĠĠĠ Ġ( start Read .. end Read ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġbyte String Ġ= Ġread ( i . to Short ()) ĊĠĠĠĠĠĠĠ Ġbyte String . forEach Ġ{ Ġfinal String . append ( it . to Char ()) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfinal String . substring ( start Cell Offset , start Cell Offset + length ) Ċ Ċ } Ċ Ċ private Ġfun Ġis Short Record ( tn f : Byte ): Boolean Ġ= Ġt nf . and ( 0 x 1 0 ) Ġ!= Ġ 0 . to Byte () Ċ private Ġfun Ġhas Id Length ( tn f : Byte ): Boolean Ġ= Ġt nf . and ( 0 x 0 8 ) Ġ!= Ġ 0 . to Byte () Ċ Ċ fun ĠS mar Tag IO . getN Def Record From Offset ( offset : Short ): ĠN Def Record Header Ġ{ ĊĠĠĠ Ġval Ġheader Part 1 Ġ= Ġread ( offset ) ĊĠĠĠ Ġval Ġheader Part 2 Ġ= Ġread ( offset . inc ()) ĊĠĠĠ Ġval Ġheader Ġ= Ġheader Part 1 + header Part 2 ĊĊĠĠĠ Ġval Ġpayload Length : Long Ġ= Ġif Ġ( is Short Record ( header [ 0 ])) { ĊĠĠĠĠĠĠĠ Ġheader [ 2 ]. to Long () ĊĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠ Ġheader . extract BE UInt From ( 2 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġpayload Length Size = Ġif Ġ( is Short Record ( header [ 0 ])) { ĊĠĠĠĠĠĠĠĠ 1 ĊĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠ 4 ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġid Length : Byte Ġ= Ġif Ġ( has Id Length ( header [ 0 ])) { ĊĠĠĠĠĠĠĠ Ġheader [ 2 + payload Length Size ] ĊĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠ 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠN Def Record Header ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt nf Ġ= Ġheader [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Length Ġ= Ġid Length , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Length Ġ= Ġheader [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Length Ġ= Ġpayload Length ĊĠĠĠ Ġ) ĊĊ Ċ } ĊĊ