// // Copyright 2020 FoxyUtils ehf. All rights reserved. // // This is a commercial product and requires a license to operate. // A trial license can be obtained at https://unidoc.io // // DO NOT EDIT: generated by unitwist Go source code obfuscator. // // Use of this source code is governed by the UniDoc End User License Agreement // terms that can be accessed at https://unidoc.io/eula/ package huffman ;import (_gc "errors";_g "fmt";_aa "github.com/unidoc/unipdf/v3/internal/bitwise";_aab "github.com/unidoc/unipdf/v3/internal/jbig2/internal";_f "math";_d "strings";);type BasicTabler interface{HtHigh ()int32 ;HtLow ()int32 ;StreamReader ()_aa .StreamReader ; HtPS ()int32 ;HtRS ()int32 ;HtOOB ()int32 ;};func NewFixedSizeTable (codeTable []*Code )(*FixedSizeTable ,error ){_fce :=&FixedSizeTable {_eb :&InternalNode {}};if _fff :=_fce .InitTree (codeTable );_fff !=nil {return nil ,_fff ;};return _fce ,nil ;};func (_gg *EncodedTable )String ()string {return _gg ._gb .String ()+"\u000a"}; func _eba (_ecg ,_gba int32 )string {var _dgf int32 ;_gd :=make ([]rune ,_gba );for _cg :=int32 (1);_cg <=_gba ;_cg ++{_dgf =_ecg >>uint (_gba -_cg )&1;if _dgf !=0{_gd [_cg -1]='1';}else {_gd [_cg -1]='0';};};return string (_gd );};var _ Node =&OutOfBandNode {}; func (_dg *EncodedTable )parseTable ()error {var (_ac []*Code ;_bf ,_fe ,_ee int32 ;_ff uint64 ;_gcg error ;);_ga :=_dg .StreamReader ();_dc :=_dg .HtLow ();for _dc < _dg .HtHigh (){_ff ,_gcg =_ga .ReadBits (byte (_dg .HtPS ()));if _gcg !=nil {return _gcg ; };_bf =int32 (_ff );_ff ,_gcg =_ga .ReadBits (byte (_dg .HtRS ()));if _gcg !=nil {return _gcg ;};_fe =int32 (_ff );_ac =append (_ac ,NewCode (_bf ,_fe ,_ee ,false ));_dc +=1< 3{_acc =true ; };_gbd =append (_gbd ,NewCode (_eeg ,_cbb ,_ba ,_acc ));};_dbb :=&StandardTable {_dfg :_fd (0)};if _eaf :=_dbb .InitTree (_gbd );_eaf !=nil {return nil ,_eaf ;};return _dbb ,nil ;};func GetStandardTable (number int )(Tabler ,error ){if number <=0||number > len (_afg ){return nil ,_gc .New ("\u0049n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065"); };_bdb :=_afg [number -1];if _bdb ==nil {var _ebb error ;_bdb ,_ebb =_dde (_ede [number -1]);if _ebb !=nil {return nil ,_ebb ;};_afg [number -1]=_bdb ;};return _bdb ,nil ;};func _cfd (_fbb []*Code ){var _aae int32 ;for _ ,_fdf :=range _fbb {_aae =_efc (_aae ,_fdf ._bbb ); };_geg :=make ([]int32 ,_aae +1);for _ ,_cbd :=range _fbb {_geg [_cbd ._bbb ]++;};var _gab int32 ;_fbe :=make ([]int32 ,len (_geg )+1);_geg [0]=0;for _ddb :=int32 (1);_ddb <=int32 (len (_geg ));_ddb ++{_fbe [_ddb ]=(_fbe [_ddb -1]+(_geg [_ddb -1]))<<1; _gab =_fbe [_ddb ];for _ ,_fg :=range _fbb {if _fg ._bbb ==_ddb {_fg ._da =_gab ;_gab ++;};};};};func (_gf *InternalNode )Decode (r _aa .StreamReader )(int64 ,error ){_eda ,_eee :=r .ReadBit ();if _eee !=nil {return 0,_eee ;};if _eda ==0{return _gf ._cd .Decode (r ); };return _gf ._bde .Decode (r );};func (_c *FixedSizeTable )String ()string {return _c ._eb .String ()+"\u000a"};func (_aef *StandardTable )InitTree (codeTable []*Code )error {_cfd (codeTable );for _ ,_bdee :=range codeTable {if _ec :=_aef ._dfg .append (_bdee ); _ec !=nil {return _ec ;};};return nil ;};var _afg =make ([]Tabler ,len (_ede ));func NewCode (prefixLength ,rangeLength ,rangeLow int32 ,isLowerRange bool )*Code {return &Code {_bbb :prefixLength ,_aee :rangeLength ,_dfac :rangeLow ,_afc :isLowerRange ,_da :-1}; };func (_bb *EncodedTable )RootNode ()*InternalNode {return _bb ._gb };func (_ge *OutOfBandNode )Decode (r _aa .StreamReader )(int64 ,error ){return 0,_aab .ErrOOB };type InternalNode struct{_gag int32 ;_cd Node ;_bde Node ;};type Code struct{_bbb int32 ; _aee int32 ;_dfac int32 ;_afc bool ;_da int32 ;};func (_cc *OutOfBandNode )String ()string {return _g .Sprintf ("\u0025\u0030\u00364\u0062",int64 (_f .MaxInt64 ));};func (_ef *StandardTable )String ()string {return _ef ._dfg .String ()+"\u000a"};type EncodedTable struct{BasicTabler ; _gb *InternalNode ;};func NewEncodedTable (table BasicTabler )(*EncodedTable ,error ){_b :=&EncodedTable {_gb :&InternalNode {},BasicTabler :table };if _dd :=_b .parseTable ();_dd !=nil {return nil ,_dd ;};return _b ,nil ;};func (_edb *InternalNode )append (_db *Code )(_de error ){if _db ._bbb ==0{return nil ; };_acb :=_db ._bbb -1-_edb ._gag ;if _acb < 0{return _gc .New ("\u004e\u0065\u0067\u0061\u0074\u0069\u0076\u0065\u0020\u0073\u0068\u0069\u0066\u0074\u0069n\u0067 \u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u006c\u006c\u006f\u0077\u0065\u0064");};_dcf :=(_db ._da >>uint (_acb ))&0x1; if _acb ==0{if _db ._aee ==-1{if _dcf ==1{if _edb ._bde !=nil {return _g .Errorf ("O\u004f\u0042\u0020\u0061\u006c\u0072e\u0061\u0064\u0079\u0020\u0073\u0065\u0074\u0020\u0066o\u0072\u0020\u0063o\u0064e\u0020\u0025\u0073",_db );};_edb ._bde =_bdd (_db ); }else {if _edb ._cd !=nil {return _g .Errorf ("O\u004f\u0042\u0020\u0061\u006c\u0072e\u0061\u0064\u0079\u0020\u0073\u0065\u0074\u0020\u0066o\u0072\u0020\u0063o\u0064e\u0020\u0025\u0073",_db );};_edb ._cd =_bdd (_db );};}else {if _dcf ==1{if _edb ._bde !=nil {return _g .Errorf ("\u0056\u0061\u006cue\u0020\u004e\u006f\u0064\u0065\u0020\u0061\u006c\u0072e\u0061d\u0079 \u0073e\u0074\u0020\u0066\u006f\u0072\u0020\u0063\u006f\u0064\u0065\u0020\u0025\u0073",_db ); };_edb ._bde =_edcg (_db );}else {if _edb ._cd !=nil {return _g .Errorf ("\u0056\u0061\u006cue\u0020\u004e\u006f\u0064\u0065\u0020\u0061\u006c\u0072e\u0061d\u0079 \u0073e\u0074\u0020\u0066\u006f\u0072\u0020\u0063\u006f\u0064\u0065\u0020\u0025\u0073",_db ); };_edb ._cd =_edcg (_db );};};}else {if _dcf ==1{if _edb ._bde ==nil {_edb ._bde =_fd (_edb ._gag +1);};if _de =_edb ._bde .(*InternalNode ).append (_db );_de !=nil {return _de ;};}else {if _edb ._cd ==nil {_edb ._cd =_fd (_edb ._gag +1);};if _de =_edb ._cd .(*InternalNode ).append (_db ); _de !=nil {return _de ;};};};return nil ;};func _edcg (_eea *Code )*ValueNode {return &ValueNode {_af :_eea ._aee ,_cf :_eea ._dfac ,_cb :_eea ._afc }};func _efc (_fca ,_dea int32 )int32 {if _fca > _dea {return _fca ;};return _dea ;};func (_ae *EncodedTable )InitTree (codeTable []*Code )error {_cfd (codeTable ); for _ ,_eg :=range codeTable {if _ag :=_ae ._gb .append (_eg );_ag !=nil {return _ag ;};};return nil ;};var _ Node =&InternalNode {};