unipdf/internal/ccittfax/ccittfax.go
2020-08-27 21:45:09 +00:00

12 lines
29 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 ccittfax ;import (_e "errors";_d "math";);func _gab (_ddf []byte ,_afe int )(bool ,int ,error ){_bba :=_afe ;var _dge bool ;_dge ,_afe =_bfg (_ddf ,_afe );if _dge {_dge ,_afe =_bfg (_ddf ,_afe );if _dge {return true ,_afe ,nil ;}else {return false ,_bba ,_bb ;};};return false ,_bba ,nil ;};func _ceg (_bbf [][]byte ,_gdec []byte ,_cfb bool ,_ebc int )([]byte ,int ){_fde :=_egd (_gdec ,_bbf [len (_bbf )-1],_ebc ,_cfb );_cfe :=_acb (_bbf [len (_bbf )-1],_fde );if _ebc ==-1{_gdec =_dec (_gdec ,_cfb ,_cfe -_ebc -1);}else {_gdec =_dec (_gdec ,_cfb ,_cfe -_ebc );};_ebc =_cfe ;return _gdec ,_ebc ;};func init (){_g =make (map[int ]code );_g [0]=code {Code :13<<8|3<<6,BitsWritten :10};_g [1]=code {Code :2<<(5+8),BitsWritten :3};_g [2]=code {Code :3<<(6+8),BitsWritten :2};_g [3]=code {Code :2<<(6+8),BitsWritten :2};_g [4]=code {Code :3<<(5+8),BitsWritten :3};_g [5]=code {Code :3<<(4+8),BitsWritten :4};_g [6]=code {Code :2<<(4+8),BitsWritten :4};_g [7]=code {Code :3<<(3+8),BitsWritten :5};_g [8]=code {Code :5<<(2+8),BitsWritten :6};_g [9]=code {Code :4<<(2+8),BitsWritten :6};_g [10]=code {Code :4<<(1+8),BitsWritten :7};_g [11]=code {Code :5<<(1+8),BitsWritten :7};_g [12]=code {Code :7<<(1+8),BitsWritten :7};_g [13]=code {Code :4<<8,BitsWritten :8};_g [14]=code {Code :7<<8,BitsWritten :8};_g [15]=code {Code :12<<8,BitsWritten :9};_g [16]=code {Code :5<<8|3<<6,BitsWritten :10};_g [17]=code {Code :6<<8,BitsWritten :10};_g [18]=code {Code :2<<8,BitsWritten :10};_g [19]=code {Code :12<<8|7<<5,BitsWritten :11};_g [20]=code {Code :13<<8,BitsWritten :11};_g [21]=code {Code :13<<8|4<<5,BitsWritten :11};_g [22]=code {Code :6<<8|7<<5,BitsWritten :11};_g [23]=code {Code :5<<8,BitsWritten :11};_g [24]=code {Code :2<<8|7<<5,BitsWritten :11};_g [25]=code {Code :3<<8,BitsWritten :11};_g [26]=code {Code :12<<8|10<<4,BitsWritten :12};_g [27]=code {Code :12<<8|11<<4,BitsWritten :12};_g [28]=code {Code :12<<8|12<<4,BitsWritten :12};_g [29]=code {Code :12<<8|13<<4,BitsWritten :12};_g [30]=code {Code :6<<8|8<<4,BitsWritten :12};_g [31]=code {Code :6<<8|9<<4,BitsWritten :12};_g [32]=code {Code :6<<8|10<<4,BitsWritten :12};_g [33]=code {Code :6<<8|11<<4,BitsWritten :12};_g [34]=code {Code :13<<8|2<<4,BitsWritten :12};_g [35]=code {Code :13<<8|3<<4,BitsWritten :12};_g [36]=code {Code :13<<8|4<<4,BitsWritten :12};_g [37]=code {Code :13<<8|5<<4,BitsWritten :12};_g [38]=code {Code :13<<8|6<<4,BitsWritten :12};_g [39]=code {Code :13<<8|7<<4,BitsWritten :12};_g [40]=code {Code :6<<8|12<<4,BitsWritten :12};_g [41]=code {Code :6<<8|13<<4,BitsWritten :12};_g [42]=code {Code :13<<8|10<<4,BitsWritten :12};_g [43]=code {Code :13<<8|11<<4,BitsWritten :12};_g [44]=code {Code :5<<8|4<<4,BitsWritten :12};_g [45]=code {Code :5<<8|5<<4,BitsWritten :12};_g [46]=code {Code :5<<8|6<<4,BitsWritten :12};_g [47]=code {Code :5<<8|7<<4,BitsWritten :12};_g [48]=code {Code :6<<8|4<<4,BitsWritten :12};_g [49]=code {Code :6<<8|5<<4,BitsWritten :12};_g [50]=code {Code :5<<8|2<<4,BitsWritten :12};_g [51]=code {Code :5<<8|3<<4,BitsWritten :12};_g [52]=code {Code :2<<8|4<<4,BitsWritten :12};_g [53]=code {Code :3<<8|7<<4,BitsWritten :12};_g [54]=code {Code :3<<8|8<<4,BitsWritten :12};_g [55]=code {Code :2<<8|7<<4,BitsWritten :12};_g [56]=code {Code :2<<8|8<<4,BitsWritten :12};_g [57]=code {Code :5<<8|8<<4,BitsWritten :12};_g [58]=code {Code :5<<8|9<<4,BitsWritten :12};_g [59]=code {Code :2<<8|11<<4,BitsWritten :12};_g [60]=code {Code :2<<8|12<<4,BitsWritten :12};_g [61]=code {Code :5<<8|10<<4,BitsWritten :12};_g [62]=code {Code :6<<8|6<<4,BitsWritten :12};_g [63]=code {Code :6<<8|7<<4,BitsWritten :12};_bd =make (map[int ]code );_bd [0]=code {Code :53<<8,BitsWritten :8};_bd [1]=code {Code :7<<(2+8),BitsWritten :6};_bd [2]=code {Code :7<<(4+8),BitsWritten :4};_bd [3]=code {Code :8<<(4+8),BitsWritten :4};_bd [4]=code {Code :11<<(4+8),BitsWritten :4};_bd [5]=code {Code :12<<(4+8),BitsWritten :4};_bd [6]=code {Code :14<<(4+8),BitsWritten :4};_bd [7]=code {Code :15<<(4+8),BitsWritten :4};_bd [8]=code {Code :19<<(3+8),BitsWritten :5};_bd [9]=code {Code :20<<(3+8),BitsWritten :5};_bd [10]=code {Code :7<<(3+8),BitsWritten :5};_bd [11]=code {Code :8<<(3+8),BitsWritten :5};_bd [12]=code {Code :8<<(2+8),BitsWritten :6};_bd [13]=code {Code :3<<(2+8),BitsWritten :6};_bd [14]=code {Code :52<<(2+8),BitsWritten :6};_bd [15]=code {Code :53<<(2+8),BitsWritten :6};_bd [16]=code {Code :42<<(2+8),BitsWritten :6};_bd [17]=code {Code :43<<(2+8),BitsWritten :6};_bd [18]=code {Code :39<<(1+8),BitsWritten :7};_bd [19]=code {Code :12<<(1+8),BitsWritten :7};_bd [20]=code {Code :8<<(1+8),BitsWritten :7};_bd [21]=code {Code :23<<(1+8),BitsWritten :7};_bd [22]=code {Code :3<<(1+8),BitsWritten :7};_bd [23]=code {Code :4<<(1+8),BitsWritten :7};_bd [24]=code {Code :40<<(1+8),BitsWritten :7};_bd [25]=code {Code :43<<(1+8),BitsWritten :7};_bd [26]=code {Code :19<<(1+8),BitsWritten :7};_bd [27]=code {Code :36<<(1+8),BitsWritten :7};_bd [28]=code {Code :24<<(1+8),BitsWritten :7};_bd [29]=code {Code :2<<8,BitsWritten :8};_bd [30]=code {Code :3<<8,BitsWritten :8};_bd [31]=code {Code :26<<8,BitsWritten :8};_bd [32]=code {Code :27<<8,BitsWritten :8};_bd [33]=code {Code :18<<8,BitsWritten :8};_bd [34]=code {Code :19<<8,BitsWritten :8};_bd [35]=code {Code :20<<8,BitsWritten :8};_bd [36]=code {Code :21<<8,BitsWritten :8};_bd [37]=code {Code :22<<8,BitsWritten :8};_bd [38]=code {Code :23<<8,BitsWritten :8};_bd [39]=code {Code :40<<8,BitsWritten :8};_bd [40]=code {Code :41<<8,BitsWritten :8};_bd [41]=code {Code :42<<8,BitsWritten :8};_bd [42]=code {Code :43<<8,BitsWritten :8};_bd [43]=code {Code :44<<8,BitsWritten :8};_bd [44]=code {Code :45<<8,BitsWritten :8};_bd [45]=code {Code :4<<8,BitsWritten :8};_bd [46]=code {Code :5<<8,BitsWritten :8};_bd [47]=code {Code :10<<8,BitsWritten :8};_bd [48]=code {Code :11<<8,BitsWritten :8};_bd [49]=code {Code :82<<8,BitsWritten :8};_bd [50]=code {Code :83<<8,BitsWritten :8};_bd [51]=code {Code :84<<8,BitsWritten :8};_bd [52]=code {Code :85<<8,BitsWritten :8};_bd [53]=code {Code :36<<8,BitsWritten :8};_bd [54]=code {Code :37<<8,BitsWritten :8};_bd [55]=code {Code :88<<8,BitsWritten :8};_bd [56]=code {Code :89<<8,BitsWritten :8};_bd [57]=code {Code :90<<8,BitsWritten :8};_bd [58]=code {Code :91<<8,BitsWritten :8};_bd [59]=code {Code :74<<8,BitsWritten :8};_bd [60]=code {Code :75<<8,BitsWritten :8};_bd [61]=code {Code :50<<8,BitsWritten :8};_bd [62]=code {Code :51<<8,BitsWritten :8};_bd [63]=code {Code :52<<8,BitsWritten :8};_f =make (map[int ]code );_f [64]=code {Code :3<<8|3<<6,BitsWritten :10};_f [128]=code {Code :12<<8|8<<4,BitsWritten :12};_f [192]=code {Code :12<<8|9<<4,BitsWritten :12};_f [256]=code {Code :5<<8|11<<4,BitsWritten :12};_f [320]=code {Code :3<<8|3<<4,BitsWritten :12};_f [384]=code {Code :3<<8|4<<4,BitsWritten :12};_f [448]=code {Code :3<<8|5<<4,BitsWritten :12};_f [512]=code {Code :3<<8|12<<3,BitsWritten :13};_f [576]=code {Code :3<<8|13<<3,BitsWritten :13};_f [640]=code {Code :2<<8|10<<3,BitsWritten :13};_f [704]=code {Code :2<<8|11<<3,BitsWritten :13};_f [768]=code {Code :2<<8|12<<3,BitsWritten :13};_f [832]=code {Code :2<<8|13<<3,BitsWritten :13};_f [896]=code {Code :3<<8|18<<3,BitsWritten :13};_f [960]=code {Code :3<<8|19<<3,BitsWritten :13};_f [1024]=code {Code :3<<8|20<<3,BitsWritten :13};_f [1088]=code {Code :3<<8|21<<3,BitsWritten :13};_f [1152]=code {Code :3<<8|22<<3,BitsWritten :13};_f [1216]=code {Code :119<<3,BitsWritten :13};_f [1280]=code {Code :2<<8|18<<3,BitsWritten :13};_f [1344]=code {Code :2<<8|19<<3,BitsWritten :13};_f [1408]=code {Code :2<<8|20<<3,BitsWritten :13};_f [1472]=code {Code :2<<8|21<<3,BitsWritten :13};_f [1536]=code {Code :2<<8|26<<3,BitsWritten :13};_f [1600]=code {Code :2<<8|27<<3,BitsWritten :13};_f [1664]=code {Code :3<<8|4<<3,BitsWritten :13};_f [1728]=code {Code :3<<8|5<<3,BitsWritten :13};_dc =make (map[int ]code );_dc [64]=code {Code :27<<(3+8),BitsWritten :5};_dc [128]=code {Code :18<<(3+8),BitsWritten :5};_dc [192]=code {Code :23<<(2+8),BitsWritten :6};_dc [256]=code {Code :55<<(1+8),BitsWritten :7};_dc [320]=code {Code :54<<8,BitsWritten :8};_dc [384]=code {Code :55<<8,BitsWritten :8};_dc [448]=code {Code :100<<8,BitsWritten :8};_dc [512]=code {Code :101<<8,BitsWritten :8};_dc [576]=code {Code :104<<8,BitsWritten :8};_dc [640]=code {Code :103<<8,BitsWritten :8};_dc [704]=code {Code :102<<8,BitsWritten :9};_dc [768]=code {Code :102<<8|1<<7,BitsWritten :9};_dc [832]=code {Code :105<<8,BitsWritten :9};_dc [896]=code {Code :105<<8|1<<7,BitsWritten :9};_dc [960]=code {Code :106<<8,BitsWritten :9};_dc [1024]=code {Code :106<<8|1<<7,BitsWritten :9};_dc [1088]=code {Code :107<<8,BitsWritten :9};_dc [1152]=code {Code :107<<8|1<<7,BitsWritten :9};_dc [1216]=code {Code :108<<8,BitsWritten :9};_dc [1280]=code {Code :108<<8|1<<7,BitsWritten :9};_dc [1344]=code {Code :109<<8,BitsWritten :9};_dc [1408]=code {Code :109<<8|1<<7,BitsWritten :9};_dc [1472]=code {Code :76<<8,BitsWritten :9};_dc [1536]=code {Code :76<<8|1<<7,BitsWritten :9};_dc [1600]=code {Code :77<<8,BitsWritten :9};_dc [1664]=code {Code :24<<(2+8),BitsWritten :6};_dc [1728]=code {Code :77<<8|1<<7,BitsWritten :9};_fb =make (map[int ]code );_fb [1792]=code {Code :1<<8,BitsWritten :11};_fb [1856]=code {Code :1<<8|4<<5,BitsWritten :11};_fb [1920]=code {Code :1<<8|5<<5,BitsWritten :11};_fb [1984]=code {Code :1<<8|2<<4,BitsWritten :12};_fb [2048]=code {Code :1<<8|3<<4,BitsWritten :12};_fb [2112]=code {Code :1<<8|4<<4,BitsWritten :12};_fb [2176]=code {Code :1<<8|5<<4,BitsWritten :12};_fb [2240]=code {Code :1<<8|6<<4,BitsWritten :12};_fb [2304]=code {Code :1<<8|7<<4,BitsWritten :12};_fb [2368]=code {Code :1<<8|12<<4,BitsWritten :12};_fb [2432]=code {Code :1<<8|13<<4,BitsWritten :12};_fb [2496]=code {Code :1<<8|14<<4,BitsWritten :12};_fb [2560]=code {Code :1<<8|15<<4,BitsWritten :12};_df =make (map[int ]byte );_df [0]=0xFF;_df [1]=0xFE;_df [2]=0xFC;_df [3]=0xF8;_df [4]=0xF0;_df [5]=0xE0;_df [6]=0xC0;_df [7]=0x80;_df [8]=0x00;};func (_fga *Encoder )decodeRow1D (_bda []byte ,_dgf int )([]byte ,int ){var _bfa []byte ;_cbg :=true ;var _gfg int ;_gfg ,_dgf =_egb (_bda ,_dgf ,_cbg );for _gfg !=-1{_bfa =_dec (_bfa ,_cbg ,_gfg );if _gfg < 64{if len (_bfa )>=_fga .Columns {break ;};_cbg =!_cbg ;};_gfg ,_dgf =_egb (_bda ,_dgf ,_cbg );};return _bfa ,_dgf ;};func _eadd (_fg uint16 ,_ccg int ,_fbb bool )(int ,code ){var _fdeg *int ;var _ccd *code ;if _fbb {_fdeg ,_ccd =_gag (_ee ,_fg ,_ccg );}else {_fdeg ,_ccd =_gag (_ae ,_fg ,_ccg );};if _fdeg ==nil {return -1,code {};};return *_fdeg ,*_ccd ;};func init (){for _gc ,_bdg :=range _bd {_cfc (_ee ,_bdg ,0,_gc );};for _gde ,_ge :=range _dc {_cfc (_ee ,_ge ,0,_gde );};for _dd ,_ed :=range _g {_cfc (_ae ,_ed ,0,_dd );};for _ba ,_bgb :=range _f {_cfc (_ae ,_bgb ,0,_ba );};for _ce ,_cef :=range _fb {_cfc (_ee ,_cef ,0,_ce );_cfc (_ae ,_cef ,0,_ce );};_cfc (_gd ,_c ,0,0);_cfc (_gd ,_de ,0,0);_cfc (_gd ,_bg ,0,0);_cfc (_gd ,_be ,0,0);_cfc (_gd ,_ca ,0,0);_cfc (_gd ,_bc ,0,0);_cfc (_gd ,_bgg ,0,0);_cfc (_gd ,_gb ,0,0);_cfc (_gd ,_ff ,0,0);};func _aeaf (_agd []byte ,_gefc ,_cca ,_bcfb int )([]byte ,int ){_acbd :=_ebb (_cca ,_bcfb );_agd ,_gefc =_faf (_agd ,_gefc ,_acbd );return _agd ,_gefc ;};type Encoder struct{K int ;EndOfLine bool ;EncodedByteAlign bool ;Columns int ;Rows int ;EndOfBlock bool ;BlackIs1 bool ;DamagedRowsBeforeError int ;};var (_g map[int ]code ;_bd map[int ]code ;_f map[int ]code ;_dc map[int ]code ;_fb map[int ]code ;_df map[int ]byte ;_a =code {Code :1<<4,BitsWritten :12};_eg =code {Code :3<<3,BitsWritten :13};_bdd =code {Code :2<<3,BitsWritten :13};_c =code {Code :1<<12,BitsWritten :4};_de =code {Code :1<<13,BitsWritten :3};_bg =code {Code :1<<15,BitsWritten :1};_be =code {Code :3<<13,BitsWritten :3};_ca =code {Code :3<<10,BitsWritten :6};_bc =code {Code :3<<9,BitsWritten :7};_bgg =code {Code :2<<13,BitsWritten :3};_gb =code {Code :2<<10,BitsWritten :6};_ff =code {Code :2<<9,BitsWritten :7};);func _eca (_gfga int )([]byte ,int ){var _dcg []byte ;for _gcec :=0;_gcec < 6;_gcec ++{_dcg ,_gfga =_faf (_dcg ,_gfga ,_eg );};return _dcg ,_gfga %8;};func _bcc (_eba ,_ebg []byte ,_cb int ,_cdb bool )([]byte ,int ,error ){_eaa :=_cb ;var _edf int ;for _edf ,_cb =_egb (_eba ,_cb ,_cdb );_edf !=-1;_edf ,_cb =_egb (_eba ,_cb ,_cdb ){_ebg =_dec (_ebg ,_cdb ,_edf );if _edf < 64{break ;};};if _edf ==-1{return _ebg ,_eaa ,_deed ;};return _ebg ,_cb ,nil ;};func _gag (_bge *decodingTreeNode ,_deeb uint16 ,_ade int )(*int ,*code ){if _bge ==nil {return nil ,nil ;};if _ade ==16{return _bge .RunLen ,_bge .Code ;};_ggb :=_agc (_deeb ,_ade );_ade ++;var _dfa *int ;var _dff *code ;if _ggb ==1{_dfa ,_dff =_gag (_bge .Right ,_deeb ,_ade );}else {_dfa ,_dff =_gag (_bge .Left ,_deeb ,_ade );};if _dfa ==nil {_dfa =_bge .RunLen ;_dff =_bge .Code ;};return _dfa ,_dff ;};func _eabb (_fdac ,_bccf []byte ,_ebaf int )int {_eeb :=_acb (_bccf ,_ebaf );if _eeb < len (_bccf )&&(_ebaf ==-1&&_bccf [_eeb ]==_cgb ||_ebaf >=0&&_ebaf < len (_fdac )&&_fdac [_ebaf ]==_bccf [_eeb ]||_ebaf >=len (_fdac )&&_fdac [_ebaf -1]!=_bccf [_eeb ]){_eeb =_acb (_bccf ,_eeb );};return _eeb ;};func (_gcee *Encoder )encodeG4 (_bgd [][]byte )[]byte {_ebcd :=make ([][]byte ,len (_bgd ));copy (_ebcd ,_bgd );_ebcd =_ede (_ebcd );var _gba []byte ;var _fbee int ;for _fbbf :=1;_fbbf < len (_ebcd );_fbbf ++{if _gcee .Rows > 0&&!_gcee .EndOfBlock &&_fbbf ==(_gcee .Rows +1){break ;};var _bbc []byte ;var _fab ,_bacg ,_bgc int ;_ege :=_fbee ;_ebgd :=-1;for _ebgd < len (_ebcd [_fbbf ]){_fab =_acb (_ebcd [_fbbf ],_ebgd );_bacg =_eabb (_ebcd [_fbbf ],_ebcd [_fbbf -1],_ebgd );_bgc =_acb (_ebcd [_fbbf -1],_bacg );if _bgc < _fab {_bbc ,_ege =_faf (_bbc ,_ege ,_c );_ebgd =_bgc ;}else {if _d .Abs (float64 (_bacg -_fab ))> 3{_bbc ,_ege ,_ebgd =_fbf (_ebcd [_fbbf ],_bbc ,_ege ,_ebgd ,_fab );}else {_bbc ,_ege =_aeaf (_bbc ,_ege ,_fab ,_bacg );_ebgd =_fab ;};};};_gba =_gcee .appendEncodedRow (_gba ,_bbc ,_fbee );if _gcee .EncodedByteAlign {_ege =0;};_fbee =_ege %8;};if _gcee .EndOfBlock {_ecb ,_ :=_cfec (_fbee );_gba =_gcee .appendEncodedRow (_gba ,_ecb ,_fbee );};return _gba ;};func _cfec (_bdb int )([]byte ,int ){var _eae []byte ;for _dfc :=0;_dfc < 2;_dfc ++{_eae ,_bdb =_faf (_eae ,_bdb ,_a );};return _eae ,_bdb %8;};func _cbf (_def []byte ,_aed int ,_aab int ,_eac bool )([]byte ,int ){var (_fgd code ;_bab bool ;);for !_bab {_fgd ,_aab ,_bab =_gbad (_aab ,_eac );_def ,_aed =_faf (_def ,_aed ,_fgd );};return _def ,_aed ;};func _ede (_egef [][]byte )[][]byte {_cda :=make ([]byte ,len (_egef [0]));for _fdde :=range _cda {_cda [_fdde ]=_cgb ;};_egef =append (_egef ,[]byte {});for _caa :=len (_egef )-1;_caa > 0;_caa --{_egef [_caa ]=_egef [_caa -1];};_egef [0]=_cda ;return _egef ;};func (_gaf *Encoder )encodeG31D (_add [][]byte )[]byte {var _afde []byte ;_ded :=0;for _fge :=range _add {if _gaf .Rows > 0&&!_gaf .EndOfBlock &&_fge ==_gaf .Rows {break ;};_adga ,_ebaa :=_ecgf (_add [_fge ],_ded ,_a );_afde =_gaf .appendEncodedRow (_afde ,_adga ,_ded );if _gaf .EncodedByteAlign {_ebaa =0;};_ded =_ebaa ;};if _gaf .EndOfBlock {_dbf ,_ :=_bgfe (_ded );_afde =_gaf .appendEncodedRow (_afde ,_dbf ,_ded );};return _afde ;};func _fcb (_edc [][]byte ,_fcf []byte ,_dca bool ,_gee ,_ad int )([]byte ,int ){_gg :=_egd (_fcf ,_edc [len (_edc )-1],_gee ,_dca );_ga :=_gg +_ad ;if _gee ==-1{_fcf =_dec (_fcf ,_dca ,_ga -_gee -1);}else {_fcf =_dec (_fcf ,_dca ,_ga -_gee );};_gee =_ga ;return _fcf ,_gee ;};var (_bb =_e .New ("\u0045\u004f\u0046\u0042 c\u006f\u0064\u0065\u0020\u0069\u0073\u0020\u0063\u006f\u0072\u0072\u0075\u0070\u0074e\u0064");_ac =_e .New ("R\u0054\u0043\u0020\u0063od\u0065 \u0069\u0073\u0020\u0063\u006fr\u0072\u0075\u0070\u0074\u0065\u0064");_deed =_e .New ("\u0077\u0072o\u006e\u0067\u0020\u0063\u006f\u0064\u0065\u0020\u0069\u006e\u0020\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c\u0020mo\u0064\u0065");_fa =_e .New ("\u006e\u006f\u0020\u0045\u004f\u004c\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0077\u0068\u0069\u006c\u0065 \u0074\u0068\u0065\u0020\u0045\u006e\u0064O\u0066\u004c\u0069\u006e\u0065\u0020\u0070\u0061\u0072\u0061\u006de\u0074\u0065\u0072\u0020\u0069\u0073\u0020\u0074\u0072\u0075\u0065");_acc =_e .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0045\u004f\u004c");_ffd =_e .New ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u0032\u0044\u0020\u0063\u006f\u0064\u0065"););func _agbc (_bcef ,_fdae []byte ,_fcfb int ,_abc bool ,_fcbe int )([]byte ,int ,int ,error ){_dcag :=_fcfb ;var _dbd error ;_fdae ,_fcfb ,_dbd =_bcc (_bcef ,_fdae ,_fcfb ,_abc );if _dbd !=nil {return _fdae ,_dcag ,_fcbe ,_dbd ;};_abc =!_abc ;_fdae ,_fcfb ,_dbd =_bcc (_bcef ,_fdae ,_fcfb ,_abc );if _dbd !=nil {return _fdae ,_dcag ,_fcbe ,_dbd ;};_fcbe =len (_fdae );return _fdae ,_fcfb ,_fcbe ,nil ;};type code struct{Code uint16 ;BitsWritten int ;};func _fbf (_daa ,_dbb []byte ,_fgf ,_geee ,_efc int )([]byte ,int ,int ){_fdbc :=_acb (_daa ,_efc );_baeb :=_geee >=0&&_daa [_geee ]==_cgb ||_geee ==-1;_dbb ,_fgf =_faf (_dbb ,_fgf ,_de );var _ddfc int ;if _geee > -1{_ddfc =_efc -_geee ;}else {_ddfc =_efc -_geee -1;};_dbb ,_fgf =_cbf (_dbb ,_fgf ,_ddfc ,_baeb );_baeb =!_baeb ;_bgbb :=_fdbc -_efc ;_dbb ,_fgf =_cbf (_dbb ,_fgf ,_bgbb ,_baeb );_geee =_fdbc ;return _dbb ,_fgf ,_geee ;};type decodingTreeNode struct{Val byte ;RunLen *int ;Code *code ;Left *decodingTreeNode ;Right *decodingTreeNode ;};func _bgfe (_eee int )([]byte ,int ){var _bcb []byte ;for _aac :=0;_aac < 6;_aac ++{_bcb ,_eee =_faf (_bcb ,_eee ,_a );};return _bcb ,_eee %8;};func _ebb (_bced ,_dfaa int )code {var _bcfa code ;switch _dfaa -_bced {case -1:_bcfa =_be ;case -2:_bcfa =_ca ;case -3:_bcfa =_bc ;case 0:_bcfa =_bg ;case 1:_bcfa =_bgg ;case 2:_bcfa =_gb ;case 3:_bcfa =_ff ;};return _bcfa ;};func _ecgf (_ffgd []byte ,_ggda int ,_fbd code )([]byte ,int ){_eaae :=true ;var _fgeb []byte ;_fgeb ,_ggda =_faf (nil ,_ggda ,_fbd );_aea :=0;var _gef int ;for _aea < len (_ffgd ){_gef ,_aea =_bbce (_ffgd ,_eaae ,_aea );_fgeb ,_ggda =_cbf (_fgeb ,_ggda ,_gef ,_eaae );_eaae =!_eaae ;};return _fgeb ,_ggda %8;};func _faf (_cbad []byte ,_eeea int ,_bae code )([]byte ,int ){_ecgg :=0;for _ecgg < _bae .BitsWritten {_cff :=_eeea /8;_dda :=_eeea %8;if _cff >=len (_cbad ){_cbad =append (_cbad ,0);};_cac :=8-_dda ;_dedg :=_bae .BitsWritten -_ecgg ;if _cac > _dedg {_cac =_dedg ;};if _ecgg < 8{_cbad [_cff ]=_cbad [_cff ]|byte (_bae .Code >>uint (8+_dda -_ecgg ))&_df [8-_cac -_dda ];}else {_cbad [_cff ]=_cbad [_cff ]|(byte (_bae .Code <<uint (_ecgg -8))&_df [8-_cac ])>>uint (_dda );};_eeea +=_cac ;_ecgg +=_cac ;};return _cbad ,_eeea ;};func _acb (_gae []byte ,_cbac int )int {if _cbac >=len (_gae ){return _cbac ;};if _cbac < -1{_cbac =-1;};var _eaee byte ;if _cbac > -1{_eaee =_gae [_cbac ];}else {_eaee =_cgb ;};_gfgb :=_cbac +1;for _gfgb < len (_gae ){if _gae [_gfgb ]!=_eaee {break ;};_gfgb ++;};return _gfgb ;};func (_fbad *Encoder )appendEncodedRow (_abb ,_aead []byte ,_dcc int )[]byte {if len (_abb )> 0&&_dcc !=0&&!_fbad .EncodedByteAlign {_abb [len (_abb )-1]=_abb [len (_abb )-1]|_aead [0];_abb =append (_abb ,_aead [1:]...);}else {_abb =append (_abb ,_aead ...);};return _abb ;};func _bfg (_gdg []byte ,_ef int )(bool ,int ){_adf :=_ef ;var (_ec uint16 ;_fefg int ;);_ec ,_fefg ,_ef =_fgg (_gdg ,_ef );if _fefg > 4{return false ,_adf ;};_ec >>=uint (4-_fefg );_ec <<=4;if _ec !=_a .Code {return false ,_adf ;}else {return true ,_ef -4+_fefg ;};};func _fdd (_dege []byte ,_cfbb int )(bool ,int ){return _ccb (_dege ,_cfbb ,_bdd )};func (_cfca *Encoder )Encode (pixels [][]byte )[]byte {if _cfca .BlackIs1 {_cgb =0;_gga =1;}else {_cgb =1;_gga =0;};if _cfca .K ==0{return _cfca .encodeG31D (pixels );};if _cfca .K > 0{return _cfca .encodeG32D (pixels );};if _cfca .K < 0{return _cfca .encodeG4 (pixels );};return nil ;};func _acg (_daf uint16 ,_bebd int )(code ,bool ){_ ,_eag :=_gag (_gd ,_daf ,_bebd );if _eag ==nil {return code {},false ;};return *_eag ,true ;};func _bfb (_bbfa []byte ,_adb int )(code ,int ,bool ){var (_gac uint16 ;_edb int ;_fef int ;);_fef =_adb ;_gac ,_edb ,_adb =_fgg (_bbfa ,_adb );_fea ,_eab :=_acg (_gac ,_edb );if !_eab {return code {},_fef ,false ;};return _fea ,_fef +_fea .BitsWritten ,true ;};func _ccb (_ecg []byte ,_abg int ,_faa code )(bool ,int ){_gacc :=_abg ;var (_ccc uint16 ;_cab int ;);_ccc ,_cab ,_abg =_fgg (_ecg ,_abg );if _cab > 3{return false ,_gacc ;};_ccc >>=uint (3-_cab );_ccc <<=3;if _ccc !=_faa .Code {return false ,_gacc ;}else {return true ,_abg -3+_cab ;};};var (_ee =&decodingTreeNode {Val :255};_ae =&decodingTreeNode {Val :255};_gd =&decodingTreeNode {Val :255};);func _bbce (_fefge []byte ,_bea bool ,_adef int )(int ,int ){_gaff :=0;for _adef < len (_fefge ){if _bea {if _fefge [_adef ]!=_cgb {break ;};}else {if _fefge [_adef ]!=_gga {break ;};};_gaff ++;_adef ++;};return _gaff ,_adef ;};func _agc (_gf uint16 ,_baf int )byte {if _baf < 8{_gf >>=8;};_baf %=8;_cee :=byte (0x01<<(7-uint (_baf )));return (byte (_gf )&_cee )>>(7-uint (_baf ));};func _dec (_aag []byte ,_cgc bool ,_fdb int )[]byte {if _fdb < 0{return _aag ;};_ffg :=make ([]byte ,_fdb );if _cgc {for _bad :=0;_bad < len (_ffg );_bad ++{_ffg [_bad ]=_cgb ;};}else {for _bec :=0;_bec < len (_ffg );_bec ++{_ffg [_bec ]=_gga ;};};_aag =append (_aag ,_ffg ...);return _aag ;};func _fgg (_gfe []byte ,_aga int )(uint16 ,int ,int ){_adg :=_aga ;_eeaf :=_aga /8;_aga %=8;if _eeaf >=len (_gfe ){return 0,16,_adg ;};_fbe :=byte (0xFF>>uint (_aga ));_age :=uint16 ((_gfe [_eeaf ]&_fbe )<<uint (_aga ))<<8;_ace :=8-_aga ;_eeaf ++;_aga =0;if _eeaf >=len (_gfe ){return _age >>(16-uint (_ace )),16-_ace ,_adg +_ace ;};_age |=uint16 (_gfe [_eeaf ])<<(8-uint (_ace ));_ace +=8;_eeaf ++;_aga =0;if _eeaf >=len (_gfe ){return _age >>(16-uint (_ace )),16-_ace ,_adg +_ace ;};if _ace ==16{return _age ,0,_adg +_ace ;};_fdfb :=16-_ace ;_age |=uint16 (_gfe [_eeaf ]>>(8-uint (_fdfb )));return _age ,0,_adg +16;};func _egb (_eea []byte ,_ggd int ,_bbb bool )(int ,int ){var (_egc uint16 ;_bgf int ;_eeg int ;);_eeg =_ggd ;_egc ,_bgf ,_ggd =_fgg (_eea ,_ggd );_cfa ,_fce :=_eadd (_egc ,_bgf ,_bbb );if _cfa ==-1{return -1,_eeg ;};return _cfa ,_eeg +_fce .BitsWritten ;};func _egd (_cggd ,_bga []byte ,_deef int ,_eeeg bool )int {_feae :=_acb (_bga ,_deef );if _feae < len (_bga )&&(_deef ==-1&&_bga [_feae ]==_cgb ||_deef >=0&&_deef < len (_cggd )&&_cggd [_deef ]==_bga [_feae ]||_deef >=len (_cggd )&&_eeeg &&_bga [_feae ]==_cgb ||_deef >=len (_cggd )&&!_eeeg &&_bga [_feae ]==_gga ){_feae =_acb (_bga ,_feae );};return _feae ;};var (_cgb byte =1;_gga byte =0;);func _gbad (_bgbe int ,_aceg bool )(code ,int ,bool ){if _bgbe < 64{if _aceg {return _bd [_bgbe ],0,true ;}else {return _g [_bgbe ],0,true ;};}else {_acf :=_bgbe /64;if _acf > 40{return _fb [2560],_bgbe -2560,false ;};if _acf > 27{return _fb [_acf *64],_bgbe -_acf *64,false ;};if _aceg {return _dc [_acf *64],_bgbe -_acf *64,false ;}else {return _f [_acf *64],_bgbe -_acf *64,false ;};};};func (_gbbe *Encoder )encodeG32D (_cce [][]byte )[]byte {var _feg []byte ;var _ccbd int ;for _faea :=0;_faea < len (_cce );_faea +=_gbbe .K {if _gbbe .Rows > 0&&!_gbbe .EndOfBlock &&_faea ==_gbbe .Rows {break ;};_agg ,_ggbf :=_ecgf (_cce [_faea ],_ccbd ,_eg );_feg =_gbbe .appendEncodedRow (_feg ,_agg ,_ccbd );if _gbbe .EncodedByteAlign {_ggbf =0;};_ccbd =_ggbf ;for _egfc :=_faea +1;_egfc < (_faea +_gbbe .K )&&_egfc < len (_cce );_egfc ++{if _gbbe .Rows > 0&&!_gbbe .EndOfBlock &&_egfc ==_gbbe .Rows {break ;};_dbdb ,_dfdc :=_faf (nil ,_ccbd ,_bdd );var _gff ,_gfgf ,_cae int ;_beca :=-1;for _beca < len (_cce [_egfc ]){_gff =_acb (_cce [_egfc ],_beca );_gfgf =_eabb (_cce [_egfc ],_cce [_egfc -1],_beca );_cae =_acb (_cce [_egfc -1],_gfgf );if _cae < _gff {_dbdb ,_dfdc =_cccc (_dbdb ,_dfdc );_beca =_cae ;}else {if _d .Abs (float64 (_gfgf -_gff ))> 3{_dbdb ,_dfdc ,_beca =_fbf (_cce [_egfc ],_dbdb ,_dfdc ,_beca ,_gff );}else {_dbdb ,_dfdc =_aeaf (_dbdb ,_dfdc ,_gff ,_gfgf );_beca =_gff ;};};};_feg =_gbbe .appendEncodedRow (_feg ,_dbdb ,_ccbd );if _gbbe .EncodedByteAlign {_dfdc =0;};_ccbd =_dfdc %8;};};if _gbbe .EndOfBlock {_fac ,_ :=_eca (_ccbd );_feg =_gbbe .appendEncodedRow (_feg ,_fac ,_ccbd );};return _feg ;};func (_cd *Encoder )Decode (encoded []byte )([][]byte ,error ){if _cd .BlackIs1 {_cgb =0;_gga =1;}else {_cgb =1;_gga =0;};if _cd .K ==0{return _cd .decodeG31D (encoded );};if _cd .K > 0{return _cd .decodeG32D (encoded );};if _cd .K < 4{return _cd .decodeG4 (encoded );};return nil ,nil ;};func _cfc (_cea *decodingTreeNode ,_cgf code ,_dfd int ,_cbaa int ){_aeb :=_agc (_cgf .Code ,_dfd );_dfd ++;if _aeb ==1{if _cea .Right ==nil {_cea .Right =&decodingTreeNode {Val :_aeb };};if _dfd ==_cgf .BitsWritten {_cea .Right .RunLen =&_cbaa ;_cea .Right .Code =&_cgf ;}else {_cfc (_cea .Right ,_cgf ,_dfd ,_cbaa );};}else {if _cea .Left ==nil {_cea .Left =&decodingTreeNode {Val :_aeb };};if _dfd ==_cgf .BitsWritten {_cea .Left .RunLen =&_cbaa ;_cea .Left .Code =&_cgf ;}else {_cfc (_cea .Left ,_cgf ,_dfd ,_cbaa );};};};func _cccc (_befc []byte ,_agce int )([]byte ,int ){return _faf (_befc ,_agce ,_c )};func (_db *Encoder )decodeG4 (_cgd []byte )([][]byte ,error ){_ag :=make ([]byte ,_db .Columns );for _bef :=range _ag {_ag [_bef ]=_cgb ;};_fda :=make ([][]byte ,1);_fda [0]=_ag ;var (_egf bool ;_agb error ;_fdf int ;);for (_fdf /8)< len (_cgd ){_egf ,_fdf ,_agb =_gab (_cgd ,_fdf );if _agb !=nil {return nil ,_agb ;};if _egf {break ;};var (_fae code ;_bf bool ;);_fc :=true ;var _ab []byte ;_fe :=-1;for _fe < _db .Columns {_fae ,_fdf ,_bf =_bfb (_cgd ,_fdf );if !_bf {return nil ,_ffd ;};switch _fae {case _c :_ab ,_fe =_ceg (_fda ,_ab ,_fc ,_fe );case _de :_ab ,_fdf ,_fe ,_agb =_agbc (_cgd ,_ab ,_fdf ,_fc ,_fe );if _agb !=nil {return nil ,_agb ;};case _bg :_ab ,_fe =_fcb (_fda ,_ab ,_fc ,_fe ,0);_fc =!_fc ;case _be :_ab ,_fe =_fcb (_fda ,_ab ,_fc ,_fe ,1);_fc =!_fc ;case _ca :_ab ,_fe =_fcb (_fda ,_ab ,_fc ,_fe ,2);_fc =!_fc ;case _bc :_ab ,_fe =_fcb (_fda ,_ab ,_fc ,_fe ,3);_fc =!_fc ;case _bgg :_ab ,_fe =_fcb (_fda ,_ab ,_fc ,_fe ,-1);_fc =!_fc ;case _gb :_ab ,_fe =_fcb (_fda ,_ab ,_fc ,_fe ,-2);_fc =!_fc ;case _ff :_ab ,_fe =_fcb (_fda ,_ab ,_fc ,_fe ,-3);_fc =!_fc ;};if len (_ab )>=_db .Columns {break ;};};if _db .EncodedByteAlign &&_fdf %8!=0{_fdf +=8-_fdf %8;};_fda =append (_fda ,_ab );if _db .Rows > 0&&!_db .EndOfBlock &&len (_fda )>=(_db .Rows +1){break ;};};_fda =_fda [1:];return _fda ,nil ;};func _fdc (_cfef []byte ,_ddfa int )(bool ,int ){return _ccb (_cfef ,_ddfa ,_eg )};func _cba (_bee []byte ,_cfd int )(bool ,int ,error ){_dac :=_cfd ;var _afd =false ;for _dcd :=0;_dcd < 6;_dcd ++{_afd ,_cfd =_fdc (_bee ,_cfd );if !_afd {if _dcd > 1{return false ,_dac ,_ac ;}else {_cfd =_dac ;break ;};};};return _afd ,_cfd ,nil ;};func (_gce *Encoder )decodeG32D (_da []byte )([][]byte ,error ){var (_beb [][]byte ;_cc int ;_bce error ;);_ea :for (_cc /8)< len (_da ){var _gbb bool ;_gbb ,_cc ,_bce =_cba (_da ,_cc );if _bce !=nil {return nil ,_bce ;};if _gbb {break ;};_gbb ,_cc =_fdc (_da ,_cc );if !_gbb {if _gce .EndOfLine {return nil ,_fa ;};};var _gdb []byte ;_gdb ,_cc =_gce .decodeRow1D (_da ,_cc );if _gce .EncodedByteAlign &&_cc %8!=0{_cc +=8-_cc %8;};if _gdb !=nil {_beb =append (_beb ,_gdb );};if _gce .Rows > 0&&!_gce .EndOfBlock &&len (_beb )>=_gce .Rows {break ;};for _cg :=1;_cg < _gce .K &&(_cc /8)< len (_da );_cg ++{_gbb ,_cc =_fdd (_da ,_cc );if !_gbb {_gbb ,_cc ,_bce =_cba (_da ,_cc );if _bce !=nil {return nil ,_bce ;};if _gbb {break _ea ;}else {if _gce .EndOfLine {return nil ,_fa ;};};};var (_cf code ;_fba bool ;);_fd :=true ;var _ead []byte ;_deg :=-1;for _cf ,_cc ,_fba =_bfb (_da ,_cc );_fba ;_cf ,_cc ,_fba =_bfb (_da ,_cc ){switch _cf {case _c :_ead ,_deg =_ceg (_beb ,_ead ,_fd ,_deg );case _de :_ead ,_cc ,_deg ,_bce =_agbc (_da ,_ead ,_cc ,_fd ,_deg );if _bce !=nil {return nil ,_bce ;};case _bg :_ead ,_deg =_fcb (_beb ,_ead ,_fd ,_deg ,0);_fd =!_fd ;case _be :_ead ,_deg =_fcb (_beb ,_ead ,_fd ,_deg ,1);_fd =!_fd ;case _ca :_ead ,_deg =_fcb (_beb ,_ead ,_fd ,_deg ,2);_fd =!_fd ;case _bc :_ead ,_deg =_fcb (_beb ,_ead ,_fd ,_deg ,3);_fd =!_fd ;case _bgg :_ead ,_deg =_fcb (_beb ,_ead ,_fd ,_deg ,-1);_fd =!_fd ;case _gb :_ead ,_deg =_fcb (_beb ,_ead ,_fd ,_deg ,-2);_fd =!_fd ;case _ff :_ead ,_deg =_fcb (_beb ,_ead ,_fd ,_deg ,-3);_fd =!_fd ;};if len (_ead )>=_gce .Columns {break ;};};if _gce .EncodedByteAlign &&_cc %8!=0{_cc +=8-_cc %8;};if _ead !=nil {_beb =append (_beb ,_ead );};if _gce .Rows > 0&&!_gce .EndOfBlock &&len (_beb )>=_gce .Rows {break _ea ;};};};return _beb ,nil ;};func (_dg *Encoder )decodeG31D (_eb []byte )([][]byte ,error ){var _aa [][]byte ;var _bac int ;for (_bac /8)< len (_eb ){var _deeg bool ;_deeg ,_bac =_bfg (_eb ,_bac );if !_deeg {if _dg .EndOfLine {return nil ,_fa ;};}else {for _af :=0;_af < 5;_af ++{_deeg ,_bac =_bfg (_eb ,_bac );if !_deeg {if _af ==0{break ;};return nil ,_acc ;};};if _deeg {break ;};};var _ebd []byte ;_ebd ,_bac =_dg .decodeRow1D (_eb ,_bac );if _dg .EncodedByteAlign &&_bac %8!=0{_bac +=8-_bac %8;};_aa =append (_aa ,_ebd );if _dg .Rows > 0&&!_dg .EndOfBlock &&len (_aa )>=_dg .Rows {break ;};};return _aa ,nil ;};