2020-11-23 22:15:56 +00:00

12 lines
13 KiB
Go

//
// 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 mmr ;import (_f "errors";_be "fmt";_a "github.com/unidoc/unipdf/v3/common";_e "github.com/unidoc/unipdf/v3/internal/bitwise";_c "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_bc "io";);func (_adb *Decoder )detectAndSkipEOL ()error {for {_ead ,_bege :=_adb ._cca .uncompressGetCode (_adb ._dca );if _bege !=nil {return _bege ;};if _ead !=nil &&_ead ._cc ==EOL {_adb ._cca ._ddf +=_ead ._ae ;}else {return nil ;};};};const (_gb int =1024<<7;_dabd int =3;_fec uint =24;);func New (r _e .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_cdd :=&Decoder {_cb :width ,_bb :height };_bac ,_ac :=_e .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _ac !=nil {return nil ,_ac ;};_cde ,_ac :=_dga (_bac );if _ac !=nil {return nil ,_ac ;};_cdd ._cca =_cde ;if _ge :=_cdd .initTables ();_ge !=nil {return nil ,_ge ;};return _cdd ,nil ;};func (_aac *Decoder )uncompress2d (_acb *runData ,_fc []int ,_aec int ,_dda []int ,_ccg int )(int ,error ){var (_adf int ;_dcc int ;_efd int ;_bgb =true ;_gaa error ;_ega *code ;);_fc [_aec ]=_ccg ;_fc [_aec +1]=_ccg ;_fc [_aec +2]=_ccg +1;_fc [_aec +3]=_ccg +1;_fbd :for _efd < _ccg {_ega ,_gaa =_acb .uncompressGetCode (_aac ._dca );if _gaa !=nil {return EOL ,nil ;};if _ega ==nil {_acb ._ddf ++;break _fbd ;};_acb ._ddf +=_ega ._ae ;switch mmrCode (_ega ._cc ){case _af :_efd =_fc [_adf ];case _fb :_efd =_fc [_adf ]+1;case _ea :_efd =_fc [_adf ]-1;case _ad :for {var _aff []*code ;if _bgb {_aff =_aac ._dg ;}else {_aff =_aac ._db ;};_ega ,_gaa =_acb .uncompressGetCode (_aff );if _gaa !=nil {return 0,_gaa ;};if _ega ==nil {break _fbd ;};_acb ._ddf +=_ega ._ae ;if _ega ._cc < 64{if _ega ._cc < 0{_dda [_dcc ]=_efd ;_dcc ++;_ega =nil ;break _fbd ;};_efd +=_ega ._cc ;_dda [_dcc ]=_efd ;_dcc ++;break ;};_efd +=_ega ._cc ;};_aacf :=_efd ;_ecg :for {var _ddag []*code ;if !_bgb {_ddag =_aac ._dg ;}else {_ddag =_aac ._db ;};_ega ,_gaa =_acb .uncompressGetCode (_ddag );if _gaa !=nil {return 0,_gaa ;};if _ega ==nil {break _fbd ;};_acb ._ddf +=_ega ._ae ;if _ega ._cc < 64{if _ega ._cc < 0{_dda [_dcc ]=_efd ;_dcc ++;break _fbd ;};_efd +=_ega ._cc ;if _efd < _ccg ||_efd !=_aacf {_dda [_dcc ]=_efd ;_dcc ++;};break _ecg ;};_efd +=_ega ._cc ;};for _efd < _ccg &&_fc [_adf ]<=_efd {_adf +=2;};continue _fbd ;case _bec :_adf ++;_efd =_fc [_adf ];_adf ++;continue _fbd ;case _eg :_efd =_fc [_adf ]+2;case _fd :_efd =_fc [_adf ]-2;case _dc :_efd =_fc [_adf ]+3;case _bf :_efd =_fc [_adf ]-3;default:if _acb ._ddf ==12&&_ega ._cc ==EOL {_acb ._ddf =0;if _ ,_gaa =_aac .uncompress1d (_acb ,_fc ,_ccg );_gaa !=nil {return 0,_gaa ;};_acb ._ddf ++;if _ ,_gaa =_aac .uncompress1d (_acb ,_dda ,_ccg );_gaa !=nil {return 0,_gaa ;};_bae ,_gaf :=_aac .uncompress1d (_acb ,_fc ,_ccg );if _gaf !=nil {return EOF ,_gaf ;};_acb ._ddf ++;return _bae ,nil ;};_efd =_ccg ;continue _fbd ;};if _efd <=_ccg {_bgb =!_bgb ;_dda [_dcc ]=_efd ;_dcc ++;if _adf > 0{_adf --;}else {_adf ++;};for _efd < _ccg &&_fc [_adf ]<=_efd {_adf +=2;};};};if _dda [_dcc ]!=_ccg {_dda [_dcc ]=_ccg ;};if _ega ==nil {return EOL ,nil ;};return _dcc ,nil ;};func (_gcc *runData )uncompressGetCode (_aca []*code )(*code ,error ){return _gcc .uncompressGetCodeLittleEndian (_aca );};var (_ag =[][3]int {{4,0x1,int (_bec )},{3,0x1,int (_ad )},{1,0x1,int (_af )},{3,0x3,int (_fb )},{6,0x3,int (_eg )},{7,0x3,int (_dc )},{3,0x2,int (_ea )},{6,0x2,int (_fd )},{7,0x2,int (_bf )},{10,0xf,int (_fg )},{12,0xf,int (_bfb )},{12,0x1,int (EOL )}};_beg =[][3]int {{4,0x07,2},{4,0x08,3},{4,0x0B,4},{4,0x0C,5},{4,0x0E,6},{4,0x0F,7},{5,0x12,128},{5,0x13,8},{5,0x14,9},{5,0x1B,64},{5,0x07,10},{5,0x08,11},{6,0x17,192},{6,0x18,1664},{6,0x2A,16},{6,0x2B,17},{6,0x03,13},{6,0x34,14},{6,0x35,15},{6,0x07,1},{6,0x08,12},{7,0x13,26},{7,0x17,21},{7,0x18,28},{7,0x24,27},{7,0x27,18},{7,0x28,24},{7,0x2B,25},{7,0x03,22},{7,0x37,256},{7,0x04,23},{7,0x08,20},{7,0xC,19},{8,0x12,33},{8,0x13,34},{8,0x14,35},{8,0x15,36},{8,0x16,37},{8,0x17,38},{8,0x1A,31},{8,0x1B,32},{8,0x02,29},{8,0x24,53},{8,0x25,54},{8,0x28,39},{8,0x29,40},{8,0x2A,41},{8,0x2B,42},{8,0x2C,43},{8,0x2D,44},{8,0x03,30},{8,0x32,61},{8,0x33,62},{8,0x34,63},{8,0x35,0},{8,0x36,320},{8,0x37,384},{8,0x04,45},{8,0x4A,59},{8,0x4B,60},{8,0x5,46},{8,0x52,49},{8,0x53,50},{8,0x54,51},{8,0x55,52},{8,0x58,55},{8,0x59,56},{8,0x5A,57},{8,0x5B,58},{8,0x64,448},{8,0x65,512},{8,0x67,640},{8,0x68,576},{8,0x0A,47},{8,0x0B,48},{9,0x01,_ff },{9,0x98,1472},{9,0x99,1536},{9,0x9A,1600},{9,0x9B,1728},{9,0xCC,704},{9,0xCD,768},{9,0xD2,832},{9,0xD3,896},{9,0xD4,960},{9,0xD5,1024},{9,0xD6,1088},{9,0xD7,1152},{9,0xD8,1216},{9,0xD9,1280},{9,0xDA,1344},{9,0xDB,1408},{10,0x01,_ff },{11,0x01,_ff },{11,0x08,1792},{11,0x0C,1856},{11,0x0D,1920},{12,0x00,EOF },{12,0x01,EOL },{12,0x12,1984},{12,0x13,2048},{12,0x14,2112},{12,0x15,2176},{12,0x16,2240},{12,0x17,2304},{12,0x1C,2368},{12,0x1D,2432},{12,0x1E,2496},{12,0x1F,2560}};_cf =[][3]int {{2,0x02,3},{2,0x03,2},{3,0x02,1},{3,0x03,4},{4,0x02,6},{4,0x03,5},{5,0x03,7},{6,0x04,9},{6,0x05,8},{7,0x04,10},{7,0x05,11},{7,0x07,12},{8,0x04,13},{8,0x07,14},{9,0x01,_ff },{9,0x18,15},{10,0x01,_ff },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_ff },{11,0x17,24},{11,0x18,25},{11,0x28,23},{11,0x37,22},{11,0x67,19},{11,0x68,20},{11,0x6C,21},{11,0x08,1792},{11,0x0C,1856},{11,0x0D,1920},{12,0x00,EOF },{12,0x01,EOL },{12,0x12,1984},{12,0x13,2048},{12,0x14,2112},{12,0x15,2176},{12,0x16,2240},{12,0x17,2304},{12,0x1C,2368},{12,0x1D,2432},{12,0x1E,2496},{12,0x1F,2560},{12,0x24,52},{12,0x27,55},{12,0x28,56},{12,0x2B,59},{12,0x2C,60},{12,0x33,320},{12,0x34,384},{12,0x35,448},{12,0x37,53},{12,0x38,54},{12,0x52,50},{12,0x53,51},{12,0x54,44},{12,0x55,45},{12,0x56,46},{12,0x57,47},{12,0x58,57},{12,0x59,58},{12,0x5A,61},{12,0x5B,256},{12,0x64,48},{12,0x65,49},{12,0x66,62},{12,0x67,63},{12,0x68,30},{12,0x69,31},{12,0x6A,32},{12,0x6B,33},{12,0x6C,40},{12,0x6D,41},{12,0xC8,128},{12,0xC9,192},{12,0xCA,26},{12,0xCB,27},{12,0xCC,28},{12,0xCD,29},{12,0xD2,34},{12,0xD3,35},{12,0xD4,36},{12,0xD5,37},{12,0xD6,38},{12,0xD7,39},{12,0xDA,42},{12,0xDB,43},{13,0x4A,640},{13,0x4B,704},{13,0x4C,768},{13,0x4D,832},{13,0x52,1280},{13,0x53,1344},{13,0x54,1408},{13,0x55,1472},{13,0x5A,1536},{13,0x5B,1600},{13,0x64,1664},{13,0x65,1728},{13,0x6C,512},{13,0x6D,576},{13,0x72,896},{13,0x73,960},{13,0x74,1024},{13,0x75,1088},{13,0x76,1152},{13,0x77,1216}};);func (_acc *Decoder )UncompressMMR ()(_agg *_c .Bitmap ,_fad error ){_agg =_c .New (_acc ._cb ,_acc ._bb );_bfba :=make ([]int ,_agg .Width +5);_fe :=make ([]int ,_agg .Width +5);_fe [0]=_agg .Width ;_gc :=1;var _dbg int ;for _cfg :=0;_cfg < _agg .Height ;_cfg ++{_dbg ,_fad =_acc .uncompress2d (_acc ._cca ,_fe ,_gc ,_bfba ,_agg .Width );if _fad !=nil {return nil ,_fad ;};if _dbg ==EOF {break ;};if _dbg > 0{_fad =_acc .fillBitmap (_agg ,_cfg ,_bfba ,_dbg );if _fad !=nil {return nil ,_fad ;};};_fe ,_bfba =_bfba ,_fe ;_gc =_dbg ;};if _fad =_acc .detectAndSkipEOL ();_fad !=nil {return nil ,_fad ;};_acc ._cca .align ();return _agg ,nil ;};func (_bbg *Decoder )fillBitmap (_gdf *_c .Bitmap ,_fae int ,_bfe []int ,_dgc int )error {var _cfb byte ;_fgb :=0;_egf :=_gdf .GetByteIndex (_fgb ,_fae );for _cfe :=0;_cfe < _dgc ;_cfe ++{_ca :=byte (1);_aeb :=_bfe [_cfe ];if (_cfe &1)==0{_ca =0;};for _fgb < _aeb {_cfb =(_cfb <<1)|_ca ;_fgb ++;if (_fgb &7)==0{if _bcd :=_gdf .SetByte (_egf ,_cfb );_bcd !=nil {return _bcd ;};_egf ++;_cfb =0;};};};if (_fgb &7)!=0{_cfb <<=uint (8-(_fgb &7));if _ace :=_gdf .SetByte (_egf ,_cfb );_ace !=nil {return _ace ;};};return nil ;};func _cd (_eb ,_gf int )int {if _eb > _gf {return _gf ;};return _eb ;};func _ccb (_g [3]int )*code {return &code {_ae :_g [0],_aa :_g [1],_cc :_g [2]}};const (_bec mmrCode =iota ;_ad ;_af ;_fb ;_eg ;_dc ;_ea ;_fd ;_bf ;_fg ;_bfb ;);const (EOF =-3;_ff =-2;EOL =-1;_gd =8;_aad =(1<<_gd )-1;_fac =5;_dab =(1<<_fac )-1;);func (_cfge *runData )align (){_cfge ._ddf =((_cfge ._ddf +7)>>3)<<3};func (_da *code )String ()string {return _be .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_da ._ae ,_da ._aa ,_da ._cc );};func (_cgb *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_fgbf :=_cgb ._ddf -_cgb ._fba ;if _fgbf < 0||_fgbf > 24{_add :=(_cgb ._ddf >>3)-_cgb ._gce ;if _add >=_cgb ._acg {_add +=_cgb ._gce ;if _agf :=_cgb .fillBuffer (_add );_agf !=nil {return 0,_agf ;};_add -=_cgb ._gce ;};_ccaf :=(uint32 (_cgb ._ecf [_add ]&0xFF)<<16)|(uint32 (_cgb ._ecf [_add +1]&0xFF)<<8)|(uint32 (_cgb ._ecf [_add +2]&0xFF));_ebd :=uint32 (_cgb ._ddf &7);_ccaf <<=_ebd ;_cgb ._cfd =int (_ccaf );}else {_bd :=_cgb ._fba &7;_cdb :=7-_bd ;if _fgbf <=_cdb {_cgb ._cfd <<=uint (_fgbf );}else {_abc :=(_cgb ._fba >>3)+3-_cgb ._gce ;if _abc >=_cgb ._acg {_abc +=_cgb ._gce ;if _dcag :=_cgb .fillBuffer (_abc );_dcag !=nil {return 0,_dcag ;};_abc -=_cgb ._gce ;};_bd =8-_bd ;for {_cgb ._cfd <<=uint (_bd );_cgb ._cfd |=int (uint (_cgb ._ecf [_abc ])&0xFF);_fgbf -=_bd ;_abc ++;_bd =8;if !(_fgbf >=8){break ;};};_cgb ._cfd <<=uint (_fgbf );};};_cgb ._fba =_cgb ._ddf ;return _cgb ._cfd ,nil ;};func (_df *Decoder )createLittleEndianTable (_gg [][3]int )([]*code ,error ){_cdg :=make ([]*code ,_aad +1);for _feg :=0;_feg < len (_gg );_feg ++{_fbc :=_ccb (_gg [_feg ]);if _fbc ._ae <=_gd {_bacb :=_gd -_fbc ._ae ;_cg :=_fbc ._aa <<uint (_bacb );for _ef :=(1<<uint (_bacb ))-1;_ef >=0;_ef --{_ffg :=_cg |_ef ;_cdg [_ffg ]=_fbc ;};}else {_abf :=_fbc ._aa >>uint (_fbc ._ae -_gd );if _cdg [_abf ]==nil {var _dff =_ccb ([3]int {});_dff ._ab =make ([]*code ,_dab +1);_cdg [_abf ]=_dff ;};if _fbc ._ae <=_gd +_fac {_cgf :=_gd +_fac -_fbc ._ae ;_ed :=(_fbc ._aa <<uint (_cgf ))&_dab ;_cdg [_abf ]._d =true ;for _bg :=(1<<uint (_cgf ))-1;_bg >=0;_bg --{_cdg [_abf ]._ab [_ed |_bg ]=_fbc ;};}else {return nil ,_f .New ("\u0043\u006f\u0064\u0065\u0020\u0074a\u0062\u006c\u0065\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077\u0020i\u006e\u0020\u004d\u004d\u0052\u0044\u0065c\u006f\u0064\u0065\u0072");};};};return _cdg ,nil ;};func _dga (_daf *_e .SubstreamReader )(*runData ,error ){_ebc :=&runData {_aee :_daf ,_ddf :0,_fba :1};_fbde :=_cd (_fa (_dabd ,int (_daf .Length ())),_gb );_ebc ._ecf =make ([]byte ,_fbde );if _dafc :=_ebc .fillBuffer (0);_dafc !=nil {if _dafc ==_bc .EOF {_ebc ._ecf =make ([]byte ,10);_a .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_dafc );}else {return nil ,_dafc ;};};return _ebc ,nil ;};type mmrCode int ;func (_bcg *Decoder )initTables ()(_gfe error ){if _bcg ._dg ==nil {_bcg ._dg ,_gfe =_bcg .createLittleEndianTable (_beg );if _gfe !=nil {return ;};_bcg ._db ,_gfe =_bcg .createLittleEndianTable (_cf );if _gfe !=nil {return ;};_bcg ._dca ,_gfe =_bcg .createLittleEndianTable (_ag );if _gfe !=nil {return ;};};return nil ;};func _fa (_ba ,_ce int )int {if _ba < _ce {return _ce ;};return _ba ;};func (_cga *Decoder )uncompress1d (_fegc *runData ,_de []int ,_bgd int )(int ,error ){var (_cbd =true ;_adbg int ;_ec *code ;_dd int ;_fbcb error ;);_ga :for _adbg < _bgd {_gcd :for {if _cbd {_ec ,_fbcb =_fegc .uncompressGetCode (_cga ._dg );if _fbcb !=nil {return 0,_fbcb ;};}else {_ec ,_fbcb =_fegc .uncompressGetCode (_cga ._db );if _fbcb !=nil {return 0,_fbcb ;};};_fegc ._ddf +=_ec ._ae ;if _ec ._cc < 0{break _ga ;};_adbg +=_ec ._cc ;if _ec ._cc < 64{_cbd =!_cbd ;_de [_dd ]=_adbg ;_dd ++;break _gcd ;};};};if _de [_dd ]!=_bgd {_de [_dd ]=_bgd ;};_cda :=EOL ;if _ec !=nil &&_ec ._cc !=EOL {_cda =_dd ;};return _cda ,nil ;};type Decoder struct{_cb ,_bb int ;_cca *runData ;_dg []*code ;_db []*code ;_dca []*code ;};type runData struct{_aee *_e .SubstreamReader ;_ddf int ;_fba int ;_cfd int ;_ecf []byte ;_gce int ;_acg int ;};func (_eca *runData )uncompressGetCodeLittleEndian (_ggf []*code )(*code ,error ){_fce ,_bce :=_eca .uncompressGetNextCodeLittleEndian ();if _bce !=nil {_a .Log .Debug ("\u0055n\u0063\u006fm\u0070\u0072\u0065\u0073s\u0047\u0065\u0074N\u0065\u0078\u0074\u0043\u006f\u0064\u0065\u004c\u0069tt\u006c\u0065\u0045n\u0064\u0069a\u006e\u0020\u0066\u0061\u0069\u006ce\u0064\u003a \u0025\u0076",_bce );return nil ,_bce ;};_fce &=0xffffff;_cab :=_fce >>(_fec -_gd );_def :=_ggf [_cab ];if _def !=nil &&_def ._d {_cab =(_fce >>(_fec -_gd -_fac ))&_dab ;_def =_def ._ab [_cab ];};return _def ,nil ;};type code struct{_ae int ;_aa int ;_cc int ;_ab []*code ;_d bool ;};func (_age *runData )fillBuffer (_bfg int )error {_age ._gce =_bfg ;_ ,_ecc :=_age ._aee .Seek (int64 (_bfg ),_bc .SeekStart );if _ecc !=nil {if _ecc ==_bc .EOF {_a .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_age ._acg =-1;}else {return _ecc ;};};if _ecc ==nil {_age ._acg ,_ecc =_age ._aee .Read (_age ._ecf );if _ecc !=nil {if _ecc ==_bc .EOF {_a .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_age ._acg =-1;}else {return _ecc ;};};};if _age ._acg > -1&&_age ._acg < 3{for _age ._acg < 3{_dgg ,_bdg :=_age ._aee .ReadByte ();if _bdg !=nil {if _bdg ==_bc .EOF {_age ._ecf [_age ._acg ]=0;}else {return _bdg ;};}else {_age ._ecf [_age ._acg ]=_dgg &0xFF;};_age ._acg ++;};};_age ._acg -=3;if _age ._acg < 0{_age ._ecf =make ([]byte ,len (_age ._ecf ));_age ._acg =len (_age ._ecf )-3;};return nil ;};