// // 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 bitmap ;import (_ge "encoding/binary";_e "github.com/stretchr/testify/require";_de "github.com/unidoc/unipdf/v4/common";_dc "github.com/unidoc/unipdf/v4/internal/bitwise";_cg "github.com/unidoc/unipdf/v4/internal/imageutil";_db "github.com/unidoc/unipdf/v4/internal/jbig2/basic"; _g "github.com/unidoc/unipdf/v4/internal/jbig2/errors";_b "image";_gf "math";_dd "sort";_d "strings";_f "testing";);func (_cabf *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _fga ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074"; _caec ,_dcac :=_cabf .selectByIndexes (idx );if _dcac !=nil {return nil ,_g .Wrap (_dcac ,_fga ,"");};return _caec ,nil ;};func _bgef ()(_ecdf [256]uint16 ){for _bfe :=0;_bfe < 256;_bfe ++{if _bfe &0x01!=0{_ecdf [_bfe ]|=0x3;};if _bfe &0x02!=0{_ecdf [_bfe ]|=0xc; };if _bfe &0x04!=0{_ecdf [_bfe ]|=0x30;};if _bfe &0x08!=0{_ecdf [_bfe ]|=0xc0;};if _bfe &0x10!=0{_ecdf [_bfe ]|=0x300;};if _bfe &0x20!=0{_ecdf [_bfe ]|=0xc00;};if _bfe &0x40!=0{_ecdf [_bfe ]|=0x3000;};if _bfe &0x80!=0{_ecdf [_bfe ]|=0xc000;};};return _ecdf ; };func _cfca (_cdaae *Bitmap ,_debf *Bitmap ,_dbbaa *Selection ,_daac **Bitmap )(*Bitmap ,error ){const _eceeg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _debf ==nil {return nil ,_g .Error (_eceeg ,"\u004d\u006f\u0072\u0070\u0068\u0041\u0072\u0067\u0073\u0031\u0020'\u0073\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066i\u006e\u0065\u0064"); };if _dbbaa ==nil {return nil ,_g .Error (_eceeg ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_ffff ,_cbcff :=_dbbaa .Height ,_dbbaa .Width ;if _ffff ==0||_cbcff ==0{return nil ,_g .Error (_eceeg ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030"); };if _cdaae ==nil {_cdaae =_debf .createTemplate ();*_daac =_debf ;return _cdaae ,nil ;};_cdaae .Width =_debf .Width ;_cdaae .Height =_debf .Height ;_cdaae .RowStride =_debf .RowStride ;_cdaae .Color =_debf .Color ;_cdaae .Data =make ([]byte ,_debf .RowStride *_debf .Height ); if _cdaae ==_debf {*_daac =_debf .Copy ();}else {*_daac =_debf ;};return _cdaae ,nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _gecd ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_gbea ,_ebcae :=p1 .Width ,p1 .Height ; _fbbd ,_gfdf :=p3 .Width ,p3 .Height ;if _db .Abs (_gbea -_fbbd )> maxDiffW {return false ,nil ;};if _db .Abs (_ebcae -_gfdf )> maxDiffH {return false ,nil ;};_afcd :=int (delX +_db .Sign (delX )*0.5);_gdfd :=int (delY +_db .Sign (delY )*0.5);var _febf error ; _geef :=p1 .CreateTemplate ();if _febf =_geef .RasterOperation (0,0,_gbea ,_ebcae ,PixSrc ,p1 ,0,0);_febf !=nil {return false ,_g .Wrap (_febf ,_gecd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _febf =_geef .RasterOperation (_afcd ,_gdfd ,_gbea ,_ebcae ,PixNotSrcAndDst ,p4 ,0,0); _febf !=nil {return false ,_g .Wrap (_febf ,_gecd ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _geef .Zero (){return false ,nil ;};if _febf =_geef .RasterOperation (_afcd ,_gdfd ,_fbbd ,_gfdf ,PixSrc ,p3 ,0,0);_febf !=nil {return false ,_g .Wrap (_febf ,_gecd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074"); };if _febf =_geef .RasterOperation (0,0,_fbbd ,_gfdf ,PixNotSrcAndDst ,p2 ,0,0);_febf !=nil {return false ,_g .Wrap (_febf ,_gecd ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _geef .Zero (),nil ;};func _dbfb (_caca ...MorphProcess )(_eace error ){const _bbfeb ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073"; var _cegf ,_fddc int ;for _effd ,_eagc :=range _caca {if _eace =_eagc .verify (_effd ,&_cegf ,&_fddc );_eace !=nil {return _g .Wrap (_eace ,_bbfeb ,"");};};if _fddc !=0&&_cegf !=0{return _g .Error (_bbfeb ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030"); };return nil ;};func _fcac (_cdgc ,_aefg ,_ddgbg byte )byte {return (_cdgc &^(_ddgbg ))|(_aefg &_ddgbg )};func _gebg (_bgea *_db .Stack ,_cagf ,_aaea ,_dadb ,_bccd ,_bfgeb int ,_fgefa *_b .Rectangle )(_ggcd error ){const _acec ="\u0070\u0075\u0073\u0068\u0046\u0069\u006c\u006c\u0053\u0065\u0067m\u0065\u006e\u0074\u0042\u006f\u0075\u006e\u0064\u0069\u006eg\u0042\u006f\u0078"; if _bgea ==nil {return _g .Error (_acec ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _fgefa ==nil {return _g .Error (_acec ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065"); };_fgefa .Min .X =_db .Min (_fgefa .Min .X ,_cagf );_fgefa .Max .X =_db .Max (_fgefa .Max .X ,_aaea );_fgefa .Min .Y =_db .Min (_fgefa .Min .Y ,_dadb );_fgefa .Max .Y =_db .Max (_fgefa .Max .Y ,_dadb );if _dadb +_bccd < 0||_dadb +_bccd > _bfgeb {return nil ; };if _bgea .Aux ==nil {return _g .Error (_acec ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _bcce *fillSegment ;_ggadg ,_bebd :=_bgea .Aux .Pop ();if _bebd {if _bcce ,_bebd =_ggadg .(*fillSegment ); !_bebd {return _g .Error (_acec ,"a\u0075\u0078\u0053\u0074\u0061\u0063k\u0020\u0064\u0061\u0074\u0061\u0020i\u0073\u0020\u006e\u006f\u0074\u0020\u0061 \u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065n\u0074");};}else {_bcce =&fillSegment {}; };_bcce ._fgeg =_cagf ;_bcce ._efcee =_aaea ;_bcce ._gdda =_dadb ;_bcce ._gfff =_bccd ;_bgea .Push (_bcce );return nil ;};func Rect (x ,y ,w ,h int )(*_b .Rectangle ,error ){const _fdbad ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074"; if x < 0{w +=x ;x =0;if w <=0{return nil ,_g .Errorf (_fdbad ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_g .Error (_fdbad ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064"); };};_cdee :=_b .Rect (x ,y ,x +w ,y +h );return &_cdee ,nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};type Getter interface{GetBitmap ()*Bitmap ;};func (_dgccc *ClassedPoints )SortByX (){_dgccc ._bdde =_dgccc .xSortFunction (); _dd .Sort (_dgccc )};func _afdf (_edf ,_gbab ,_ddfd *Bitmap )(*Bitmap ,error ){const _dacd ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _gbab ==nil {return nil ,_g .Error (_dacd ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c"); };if _ddfd ==nil {return nil ,_g .Error (_dacd ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _efa error ;switch _edf {case _gbab :if _efa =_edf .RasterOperation (0,0,_gbab .Width ,_gbab .Height ,PixNotSrcAndDst ,_ddfd ,0,0);_efa !=nil {return nil ,_g .Wrap (_efa ,_dacd ,"\u0064 \u003d\u003d\u0020\u0073\u0031"); };case _ddfd :if _efa =_edf .RasterOperation (0,0,_gbab .Width ,_gbab .Height ,PixNotSrcAndDst ,_gbab ,0,0);_efa !=nil {return nil ,_g .Wrap (_efa ,_dacd ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_edf ,_efa =_bgff (_edf ,_gbab );if _efa !=nil {return nil ,_g .Wrap (_efa ,_dacd ,""); };if _efa =_edf .RasterOperation (0,0,_gbab .Width ,_gbab .Height ,PixNotSrcAndDst ,_ddfd ,0,0);_efa !=nil {return nil ,_g .Wrap (_efa ,_dacd ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _edf ,nil ;};func (_fege *ClassedPoints )xSortFunction ()func (_eebc int ,_efcc int )bool {return func (_agbc ,_dcef int )bool {return _fege .XAtIndex (_agbc )< _fege .XAtIndex (_dcef )}; };type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_agc *Bitmap )GetUnpaddedData ()([]byte ,error ){_dec :=uint (_agc .Width &0x07);if _dec ==0{return _agc .Data ,nil ; };_fec :=_agc .Width *_agc .Height ;if _fec %8!=0{_fec >>=3;_fec ++;}else {_fec >>=3;};_bgab :=make ([]byte ,_fec );_cdc :=_dc .NewWriterMSB (_bgab );const _afebb ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _gfc :=0; _gfc < _agc .Height ;_gfc ++{for _eead :=0;_eead < _agc .RowStride ;_eead ++{_beca :=_agc .Data [_gfc *_agc .RowStride +_eead ];if _eead !=_agc .RowStride -1{_bed :=_cdc .WriteByte (_beca );if _bed !=nil {return nil ,_g .Wrap (_bed ,_afebb ,"");};continue ; };for _add :=uint (0);_add < _dec ;_add ++{_cge :=_cdc .WriteBit (int (_beca >>(7-_add )&0x01));if _cge !=nil {return nil ,_g .Wrap (_cge ,_afebb ,"");};};};};return _bgab ,nil ;};func (_gacb *Bitmap )setTwoBytes (_aedg int ,_abbd uint16 )error {if _aedg +1> len (_gacb .Data )-1{return _g .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_aedg ); };_gacb .Data [_aedg ]=byte ((_abbd &0xff00)>>8);_gacb .Data [_aedg +1]=byte (_abbd &0xff);return nil ;};func (_gefbc *ClassedPoints )ySortFunction ()func (_ecac int ,_eddd int )bool {return func (_dddd ,_dgca int )bool {return _gefbc .YAtIndex (_dddd )< _gefbc .YAtIndex (_dgca )}; };func init (){for _ddea :=0;_ddea < 256;_ddea ++{_fee [_ddea ]=uint8 (_ddea &0x1)+(uint8 (_ddea >>1)&0x1)+(uint8 (_ddea >>2)&0x1)+(uint8 (_ddea >>3)&0x1)+(uint8 (_ddea >>4)&0x1)+(uint8 (_ddea >>5)&0x1)+(uint8 (_ddea >>6)&0x1)+(uint8 (_ddea >>7)&0x1);}; };func TstImageBitmapInverseData ()[]byte {_eaad :=_cfdf .Copy ();_eaad .InverseData ();return _eaad .Data ;};const (_geaaa shift =iota ;_fbegg ;);func TstASymbol (t *_f .T )*Bitmap {t .Helper ();_ebbac :=New (6,6);_e .NoError (t ,_ebbac .SetPixel (1,0,1)); _e .NoError (t ,_ebbac .SetPixel (2,0,1));_e .NoError (t ,_ebbac .SetPixel (3,0,1));_e .NoError (t ,_ebbac .SetPixel (4,0,1));_e .NoError (t ,_ebbac .SetPixel (5,1,1));_e .NoError (t ,_ebbac .SetPixel (1,2,1));_e .NoError (t ,_ebbac .SetPixel (2,2,1)); _e .NoError (t ,_ebbac .SetPixel (3,2,1));_e .NoError (t ,_ebbac .SetPixel (4,2,1));_e .NoError (t ,_ebbac .SetPixel (5,2,1));_e .NoError (t ,_ebbac .SetPixel (0,3,1));_e .NoError (t ,_ebbac .SetPixel (5,3,1));_e .NoError (t ,_ebbac .SetPixel (0,4,1)); _e .NoError (t ,_ebbac .SetPixel (5,4,1));_e .NoError (t ,_ebbac .SetPixel (1,5,1));_e .NoError (t ,_ebbac .SetPixel (2,5,1));_e .NoError (t ,_ebbac .SetPixel (3,5,1));_e .NoError (t ,_ebbac .SetPixel (4,5,1));_e .NoError (t ,_ebbac .SetPixel (5,5,1)); return _ebbac ;};func MakePixelSumTab8 ()[]int {return _eadbd ()};type byHeight Bitmaps ;func New (width ,height int )*Bitmap {_efc :=_cff (width ,height );_efc .Data =make ([]byte ,height *_efc .RowStride );return _efc ;};func (_gfba *ClassedPoints )Swap (i ,j int ){_gfba .IntSlice [i ],_gfba .IntSlice [j ]=_gfba .IntSlice [j ],_gfba .IntSlice [i ]; };func _bfae (_edgf ,_edgfe *Bitmap ,_dfac ,_befe ,_bgefc uint ,_defb ,_cfaf int ,_aeea bool ,_fbde ,_cbbd int )error {for _dcee :=_defb ;_dcee < _cfaf ;_dcee ++{if _fbde +1< len (_edgf .Data ){_edd :=_dcee +1==_cfaf ;_ddfg ,_cggd :=_edgf .GetByte (_fbde ); if _cggd !=nil {return _cggd ;};_fbde ++;_ddfg <<=_dfac ;_afbb ,_cggd :=_edgf .GetByte (_fbde );if _cggd !=nil {return _cggd ;};_afbb >>=_befe ;_bgc :=_ddfg |_afbb ;if _edd &&!_aeea {_bgc =_agaf (_bgefc ,_bgc );};_cggd =_edgfe .SetByte (_cbbd ,_bgc );if _cggd !=nil {return _cggd ; };_cbbd ++;if _edd &&_aeea {_acfb ,_gaga :=_edgf .GetByte (_fbde );if _gaga !=nil {return _gaga ;};_acfb <<=_dfac ;_bgc =_agaf (_bgefc ,_acfb );if _gaga =_edgfe .SetByte (_cbbd ,_bgc );_gaga !=nil {return _gaga ;};};continue ;};_ffaf ,_bgdb :=_edgf .GetByte (_fbde ); if _bgdb !=nil {_de .Log .Debug ("G\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0068\u0065\u0020\u0076\u0061l\u0075\u0065\u0020\u0061\u0074\u003a\u0020%\u0064\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020%\u0073",_fbde ,_bgdb );return _bgdb ;}; _ffaf <<=_dfac ;_fbde ++;_bgdb =_edgfe .SetByte (_cbbd ,_ffaf );if _bgdb !=nil {return _bgdb ;};_cbbd ++;};return nil ;};func TstGetScaledSymbol (t *_f .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;}; _ggefa ,_afge :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_e .NoError (t ,_afge );return _ggefa ;};func (_adafe *Points )AddPoint (x ,y float32 ){*_adafe =append (*_adafe ,Point {x ,y })};func _efb (_ceac ,_ebaf *Bitmap ,_ int ,_cce []byte ,_aabb int )(_cfg error ){const _fag ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031"; var (_cd ,_aagb ,_dea ,_cbc ,_eab ,_gfb ,_ag ,_eea int ;_dcg ,_bca uint32 ;_afeb ,_dded byte ;_bac uint16 ;);_cec :=make ([]byte ,4);_faf :=make ([]byte ,4);for _dea =0;_dea < _ceac .Height -1;_dea ,_cbc =_dea +2,_cbc +1{_cd =_dea *_ceac .RowStride ;_aagb =_cbc *_ebaf .RowStride ; for _eab ,_gfb =0,0;_eab < _aabb ;_eab ,_gfb =_eab +4,_gfb +1{for _ag =0;_ag < 4;_ag ++{_eea =_cd +_eab +_ag ;if _eea <=len (_ceac .Data )-1&&_eea < _cd +_ceac .RowStride {_cec [_ag ]=_ceac .Data [_eea ];}else {_cec [_ag ]=0x00;};_eea =_cd +_ceac .RowStride +_eab +_ag ; if _eea <=len (_ceac .Data )-1&&_eea < _cd +(2*_ceac .RowStride ){_faf [_ag ]=_ceac .Data [_eea ];}else {_faf [_ag ]=0x00;};};_dcg =_ge .BigEndian .Uint32 (_cec );_bca =_ge .BigEndian .Uint32 (_faf );_bca |=_dcg ;_bca |=_bca <<1;_bca &=0xaaaaaaaa;_dcg =_bca |(_bca <<7); _afeb =byte (_dcg >>24);_dded =byte ((_dcg >>8)&0xff);_eea =_aagb +_gfb ;if _eea +1==len (_ebaf .Data )-1||_eea +1>=_aagb +_ebaf .RowStride {_ebaf .Data [_eea ]=_cce [_afeb ];}else {_bac =(uint16 (_cce [_afeb ])<<8)|uint16 (_cce [_dded ]);if _cfg =_ebaf .setTwoBytes (_eea ,_bac ); _cfg !=nil {return _g .Wrapf (_cfg ,_fag ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_eea );};_gfb ++;};};}; return nil ;};func (_gdcf Points )GetGeometry (i int )(_acba ,_dcca float32 ,_dcbgf error ){if i > len (_gdcf )-1{return 0,0,_g .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };_ggfa :=_gdcf [i ];return _ggfa .X ,_ggfa .Y ,nil ;};func _gbee (_gbbf *Bitmap ,_gbdafb ,_cbfee ,_cbce ,_fefd int ,_fcdg RasterOperator ,_eagg *Bitmap ,_afda ,_bbab int )error {const _dcbee ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e"; if _gbbf ==nil {return _g .Error (_dcbee ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _fcdg ==PixDst {return nil ;};switch _fcdg {case PixClr ,PixSet ,PixNotDst :_aefd (_gbbf ,_gbdafb ,_cbfee ,_cbce ,_fefd ,_fcdg ); return nil ;};if _eagg ==nil {_de .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064"); return _g .Error (_dcbee ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ggfb :=_acca (_gbbf ,_gbdafb ,_cbfee ,_cbce ,_fefd ,_fcdg ,_eagg ,_afda ,_bbab );_ggfb !=nil {return _g .Wrap (_ggfb ,_dcbee ,""); };return nil ;};func TstFrameBitmapData ()[]byte {return _efdb .Data };const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_cddd *Bitmap )nextOnPixel (_cfd ,_bgfg int )(_ffd _b .Point ,_dbda bool ,_fdgb error ){const _gecg ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c"; _ffd ,_dbda ,_fdgb =_cddd .nextOnPixelLow (_cddd .Width ,_cddd .Height ,_cddd .RowStride ,_cfd ,_bgfg );if _fdgb !=nil {return _ffd ,false ,_g .Wrap (_fdgb ,_gecg ,"");};return _ffd ,_dbda ,nil ;};func (_abbe *Bitmaps )selectByIndexes (_abae []int )(*Bitmaps ,error ){_dcbfa :=&Bitmaps {}; for _ ,_geeef :=range _abae {_gbeec ,_cgbfa :=_abbe .GetBitmap (_geeef );if _cgbfa !=nil {return nil ,_g .Wrap (_cgbfa ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_dcbfa .AddBitmap (_gbeec );};return _dcbfa ,nil ; };func _agaf (_feg uint ,_cdfd byte )byte {return _cdfd >>_feg <<_feg };func _dgdee (_fdcf *_db .Stack )(_fcebf *fillSegment ,_daacf error ){const _gced ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _fdcf ==nil {return nil ,_g .Error (_gced ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064"); };if _fdcf .Aux ==nil {return nil ,_g .Error (_gced ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_fegf ,_bfec :=_fdcf .Pop ();if !_bfec {return nil ,nil ;};_gbdc ,_bfec :=_fegf .(*fillSegment );if !_bfec {return nil ,_g .Error (_gced ,"\u0073\u0074\u0061ck\u0020\u0064\u006f\u0065\u0073\u006e\u0027\u0074\u0020c\u006fn\u0074a\u0069n\u0020\u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074"); };_fcebf =&fillSegment {_gbdc ._fgeg ,_gbdc ._efcee ,_gbdc ._gdda +_gbdc ._gfff ,_gbdc ._gfff };_fdcf .Aux .Push (_gbdc );return _fcebf ,nil ;};func (_effc *Bitmap )InverseData (){_effc .inverseData ()};func (_cabga *byHeight )Len ()int {return len (_cabga .Values )}; func (_agg *Bitmap )GetPixel (x ,y int )bool {_ecb :=_agg .GetByteIndex (x ,y );_cfc :=_agg .GetBitOffset (x );_eef :=uint (7-_cfc );if _ecb > len (_agg .Data )-1{_de .Log .Debug ("\u0054\u0072\u0079\u0069\u006e\u0067\u0020\u0074\u006f\u0020\u0067\u0065\u0074\u0020\u0070\u0069\u0078\u0065\u006c\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0064\u0061\u0074\u0061\u0020\u0072\u0061\u006e\u0067\u0065\u002e \u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0027\u0025\u0064'\u002c\u0020\u0062m\u003a\u0020\u0027\u0025\u0073\u0027",x ,y ,_agg ); return false ;};if (_agg .Data [_ecb ]>>_eef )&0x01>=1{return true ;};return false ;};func _gdef (_dfaf ,_agf int )int {if _dfaf < _agf {return _dfaf ;};return _agf ;};func (_cbaed *BitmapsArray )AddBitmaps (bm *Bitmaps ){_cbaed .Values =append (_cbaed .Values ,bm )}; var (_efdb *Bitmap ;_cfdf *Bitmap ;);func _ebca (_ffgf int )int {if _ffgf < 0{return -_ffgf ;};return _ffgf ;};func (_debe *Bitmap )setBit (_dbbg int ){_debe .Data [(_dbbg >>3)]|=0x80>>uint (_dbbg &7)};func (_gdd *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_fcag *Boxes ,_gbda error ){const _cee ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073"; if _gdd ==nil {return nil ,_g .Error (_cee ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_g .Error (_cee ,"\u0063\u006f\u006ene\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006e\u006f\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038"); };if bms ==nil {if _fcag ,_gbda =_gdd .connComponentsBB (connectivity );_gbda !=nil {return nil ,_g .Wrap (_gbda ,_cee ,"");};}else {if _fcag ,_gbda =_gdd .connComponentsBitmapsBB (bms ,connectivity );_gbda !=nil {return nil ,_g .Wrap (_gbda ,_cee ,""); };};return _fcag ,nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_gdf float64 ,_eacgc error ){const _cfgf ="\u0043\u006f\u0072\u0072el\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0053\u0069\u006d\u0070l\u0065"; if bm1 ==nil ||bm2 ==nil {return _gdf ,_g .Error (_cfgf ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _gdf ,_g .Error (_cfgf ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if area1 ==0||area2 ==0{return _gdf ,_g .Error (_cfgf ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_fbdc ,_eag :=bm1 .Width ,bm1 .Height ;_bcbc ,_dgaf :=bm2 .Width ,bm2 .Height ; if _ebca (_fbdc -_bcbc )> maxDiffW {return 0,nil ;};if _ebca (_eag -_dgaf )> maxDiffH {return 0,nil ;};var _fcfd ,_gagb int ;if delX >=0{_fcfd =int (delX +0.5);}else {_fcfd =int (delX -0.5);};if delY >=0{_gagb =int (delY +0.5);}else {_gagb =int (delY -0.5); };_fac :=bm1 .createTemplate ();if _eacgc =_fac .RasterOperation (_fcfd ,_gagb ,_bcbc ,_dgaf ,PixSrc ,bm2 ,0,0);_eacgc !=nil {return _gdf ,_g .Wrap (_eacgc ,_cfgf ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _eacgc =_fac .RasterOperation (0,0,_fbdc ,_eag ,PixSrcAndDst ,bm1 ,0,0); _eacgc !=nil {return _gdf ,_g .Wrap (_eacgc ,_cfgf ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_bgfb :=_fac .countPixels ();_gdf =float64 (_bgfb )*float64 (_bgfb )/(float64 (area1 )*float64 (area2 ));return _gdf ,nil ;};func _bgff (_geaa ,_afg *Bitmap )(*Bitmap ,error ){if _afg ==nil {return nil ,_g .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _afg ==_geaa {return _geaa ,nil ;};if _geaa ==nil {_geaa =_afg .createTemplate ();copy (_geaa .Data ,_afg .Data );return _geaa ,nil ;};_aeeg :=_geaa .resizeImageData (_afg );if _aeeg !=nil {return nil ,_g .Wrap (_aeeg ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070",""); };_geaa .Text =_afg .Text ;copy (_geaa .Data ,_afg .Data );return _geaa ,nil ;};func (_gfabg *byHeight )Swap (i ,j int ){_gfabg .Values [i ],_gfabg .Values [j ]=_gfabg .Values [j ],_gfabg .Values [i ];if _gfabg .Boxes !=nil {_gfabg .Boxes [i ],_gfabg .Boxes [j ]=_gfabg .Boxes [j ],_gfabg .Boxes [i ]; };};func _aaf (_bec ,_feb *Bitmap ,_dab int ,_ddaf []byte ,_bbd int )(_bdb error ){const _eac ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_ae ,_aad ,_gga ,_gaae ,_bgg ,_dce ,_fdb ,_gb int ; _eee ,_bab ,_eff ,_cbcc uint32 ;_ggc ,_ccg byte ;_ega uint16 ;);_bdg :=make ([]byte ,4);_cae :=make ([]byte ,4);for _gga =0;_gga < _bec .Height -1;_gga ,_gaae =_gga +2,_gaae +1{_ae =_gga *_bec .RowStride ;_aad =_gaae *_feb .RowStride ;for _bgg ,_dce =0,0; _bgg < _bbd ;_bgg ,_dce =_bgg +4,_dce +1{for _fdb =0;_fdb < 4;_fdb ++{_gb =_ae +_bgg +_fdb ;if _gb <=len (_bec .Data )-1&&_gb < _ae +_bec .RowStride {_bdg [_fdb ]=_bec .Data [_gb ];}else {_bdg [_fdb ]=0x00;};_gb =_ae +_bec .RowStride +_bgg +_fdb ;if _gb <=len (_bec .Data )-1&&_gb < _ae +(2*_bec .RowStride ){_cae [_fdb ]=_bec .Data [_gb ]; }else {_cae [_fdb ]=0x00;};};_eee =_ge .BigEndian .Uint32 (_bdg );_bab =_ge .BigEndian .Uint32 (_cae );_eff =_eee &_bab ;_eff |=_eff <<1;_cbcc =_eee |_bab ;_cbcc &=_cbcc <<1;_bab =_eff &_cbcc ;_bab &=0xaaaaaaaa;_eee =_bab |(_bab <<7);_ggc =byte (_eee >>24); _ccg =byte ((_eee >>8)&0xff);_gb =_aad +_dce ;if _gb +1==len (_feb .Data )-1||_gb +1>=_aad +_feb .RowStride {if _bdb =_feb .SetByte (_gb ,_ddaf [_ggc ]);_bdb !=nil {return _g .Wrapf (_bdb ,_eac ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gb );};}else {_ega =(uint16 (_ddaf [_ggc ])<<8)|uint16 (_ddaf [_ccg ]); if _bdb =_feb .setTwoBytes (_gb ,_ega );_bdb !=nil {return _g .Wrapf (_bdb ,_eac ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_gb ); };_dce ++;};};};return nil ;};func (_ceec *Bitmaps )AddBox (box *_b .Rectangle ){_ceec .Boxes =append (_ceec .Boxes ,box )};func (_gcda *Bitmap )Equivalent (s *Bitmap )bool {return _gcda .equivalent (s )};func (_bade *Bitmaps )makeSizeIndicator (_cbde ,_fdgbd int ,_aedfc LocationFilter ,_eafeg SizeComparison )(_egbb *_db .NumSlice ,_caccg error ){const _eaed ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _bade ==nil {return nil ,_g .Error (_eaed ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _aedfc {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_eaed ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",_aedfc ); };switch _eafeg {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_g .Errorf (_eaed ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_eafeg ); };_egbb =&_db .NumSlice {};var (_agddf ,_cbgbe ,_bgfe int ;_abcd *Bitmap ;);for _ ,_abcd =range _bade .Values {_agddf =0;_cbgbe ,_bgfe =_abcd .Width ,_abcd .Height ;switch _aedfc {case LocSelectWidth :if (_eafeg ==SizeSelectIfLT &&_cbgbe < _cbde )||(_eafeg ==SizeSelectIfGT &&_cbgbe > _cbde )||(_eafeg ==SizeSelectIfLTE &&_cbgbe <=_cbde )||(_eafeg ==SizeSelectIfGTE &&_cbgbe >=_cbde )||(_eafeg ==SizeSelectIfEQ &&_cbgbe ==_cbde ){_agddf =1; };case LocSelectHeight :if (_eafeg ==SizeSelectIfLT &&_bgfe < _fdgbd )||(_eafeg ==SizeSelectIfGT &&_bgfe > _fdgbd )||(_eafeg ==SizeSelectIfLTE &&_bgfe <=_fdgbd )||(_eafeg ==SizeSelectIfGTE &&_bgfe >=_fdgbd )||(_eafeg ==SizeSelectIfEQ &&_bgfe ==_fdgbd ){_agddf =1; };case LocSelectIfEither :if (_eafeg ==SizeSelectIfLT &&(_cbgbe < _cbde ||_bgfe < _fdgbd ))||(_eafeg ==SizeSelectIfGT &&(_cbgbe > _cbde ||_bgfe > _fdgbd ))||(_eafeg ==SizeSelectIfLTE &&(_cbgbe <=_cbde ||_bgfe <=_fdgbd ))||(_eafeg ==SizeSelectIfGTE &&(_cbgbe >=_cbde ||_bgfe >=_fdgbd ))||(_eafeg ==SizeSelectIfEQ &&(_cbgbe ==_cbde ||_bgfe ==_fdgbd )){_agddf =1; };case LocSelectIfBoth :if (_eafeg ==SizeSelectIfLT &&(_cbgbe < _cbde &&_bgfe < _fdgbd ))||(_eafeg ==SizeSelectIfGT &&(_cbgbe > _cbde &&_bgfe > _fdgbd ))||(_eafeg ==SizeSelectIfLTE &&(_cbgbe <=_cbde &&_bgfe <=_fdgbd ))||(_eafeg ==SizeSelectIfGTE &&(_cbgbe >=_cbde &&_bgfe >=_fdgbd ))||(_eafeg ==SizeSelectIfEQ &&(_cbgbe ==_cbde &&_bgfe ==_fdgbd )){_agddf =1; };};_egbb .AddInt (_agddf );};return _egbb ,nil ;};var (_bged =_bgef ();_cgab =_dfe ();_aebe =_bcb (););var _daadf =[]byte {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x78,0x27,0xC2,0x27,0x91,0x00,0x22,0x48,0x21,0x03,0x24,0x91,0x00,0x22,0x48,0x21,0x02,0xA4,0x95,0x00,0x22,0x48,0x21,0x02,0x64,0x9B,0x00,0x3C,0x78,0x21,0x02,0x27,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; func (_cbgb *Boxes )Add (box *_b .Rectangle )error {if _cbgb ==nil {return _g .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};*_cbgb =append (*_cbgb ,box ); return nil ;};func (_bfdg *Bitmap )Copy ()*Bitmap {_eggg :=make ([]byte ,len (_bfdg .Data ));copy (_eggg ,_bfdg .Data );return &Bitmap {Width :_bfdg .Width ,Height :_bfdg .Height ,RowStride :_bfdg .RowStride ,Data :_eggg ,Color :_bfdg .Color ,Text :_bfdg .Text ,BitmapNumber :_bfdg .BitmapNumber ,Special :_bfdg .Special }; };type MorphOperation int ;func _eadbd ()[]int {_bead :=make ([]int ,256);for _cdef :=0;_cdef <=0xff;_cdef ++{_ebf :=byte (_cdef );_bead [_ebf ]=int (_ebf &0x1)+(int (_ebf >>1)&0x1)+(int (_ebf >>2)&0x1)+(int (_ebf >>3)&0x1)+(int (_ebf >>4)&0x1)+(int (_ebf >>5)&0x1)+(int (_ebf >>6)&0x1)+(int (_ebf >>7)&0x1); };return _bead ;};const _facgc =5000;func _adg (_dbd *Bitmap ,_gec *Bitmap ,_bb int )(_afe error ){const _fdf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _bb {case 2:_afe =_fc (_dbd ,_gec ); case 4:_afe =_af (_dbd ,_gec );case 8:_afe =_dff (_dbd ,_gec );default:return _g .Error (_fdf ,"\u0065\u0078p\u0061\u006e\u0073\u0069o\u006e\u0020f\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020r\u0061\u006e\u0067\u0065"); };if _afe !=nil {_afe =_g .Wrap (_afe ,_fdf ,"");};return _afe ;};func (_abaf *ClassedPoints )Len ()int {return _abaf .IntSlice .Size ()};type Component int ;func (_gfg *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_cfge *Bitmaps ,_acge *Boxes ,_ade error ){const _ecaa ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073"; if _gfg ==nil {return nil ,nil ,_g .Error (_ecaa ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_g .Error (_ecaa ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074s\u0020\u0070\u0061\u0072\u0061\u006d\u0065t\u0065\u0072"); };if _gfg .Zero (){_acge =&Boxes {};_cfge =&Bitmaps {};return _cfge ,_acge ,nil ;};switch components {case ComponentConn :_cfge =&Bitmaps {};if _acge ,_ade =_gfg .ConnComponents (_cfge ,8);_ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };case ComponentCharacters :_geba ,_bgfgd :=MorphSequence (_gfg ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _bgfgd !=nil {return nil ,nil ,_g .Wrap (_bgfgd ,_ecaa ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };if _de .Log .IsLogLevel (_de .LogLevelTrace ){_de .Log .Trace ("\u0043o\u006d\u0070o\u006e\u0065\u006e\u0074C\u0068\u0061\u0072a\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074ma\u0070\u0020\u0061f\u0074\u0065r\u0020\u0063\u006c\u006f\u0073\u0069n\u0067\u003a \u0025\u0073",_geba .String ()); };_gafb :=&Bitmaps {};_acge ,_bgfgd =_geba .ConnComponents (_gafb ,8);if _bgfgd !=nil {return nil ,nil ,_g .Wrap (_bgfgd ,_ecaa ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };if _de .Log .IsLogLevel (_de .LogLevelTrace ){_de .Log .Trace ("\u0043\u006f\u006d\u0070\u006f\u006ee\u006e\u0074\u0043\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0020a\u0066\u0074\u0065\u0072\u0020\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076i\u0074y\u003a\u0020\u0025\u0073",_gafb .String ()); };if _cfge ,_bgfgd =_gafb .ClipToBitmap (_gfg );_bgfgd !=nil {return nil ,nil ,_g .Wrap (_bgfgd ,_ecaa ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_dad :=1; var _gfaea *Bitmap ;switch {case _gfg .XResolution <=200:_gfaea =_gfg ;case _gfg .XResolution <=400:_dad =2;_gfaea ,_ade =_fgd (_gfg ,1,0,0,0);if _ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030"); };default:_dad =4;_gfaea ,_ade =_fgd (_gfg ,1,1,0,0);if _ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030"); };};_cgd ,_ ,_fcee :=_edfd (_gfaea );if _fcee !=nil {return nil ,nil ,_g .Wrap (_fcee ,_ecaa ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_eebe ,_fcee :=_efbcc (_cgd ,_dad );if _fcee !=nil {return nil ,nil ,_g .Wrap (_fcee ,_ecaa ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073"); };_gbed :=&Bitmaps {};if _acge ,_fcee =_eebe .ConnComponents (_gbed ,4);_fcee !=nil {return nil ,nil ,_g .Wrap (_fcee ,_ecaa ,"\u0077\u006f\u0072\u0064\u0020\u0070r\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u002c\u0020\u0063\u006f\u006en\u0065\u0063\u0074\u0020\u0065\u0078\u0070a\u006e\u0064\u0065\u0064"); };if _cfge ,_fcee =_gbed .ClipToBitmap (_gfg );_fcee !=nil {return nil ,nil ,_g .Wrap (_fcee ,_ecaa ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_cfge ,_ade =_cfge .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE ); if _ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"");};_acge ,_ade =_acge .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"");};return _cfge ,_acge ,nil ;};func ClipBoxToRectangle (box *_b .Rectangle ,wi ,hi int )(_fcae *_b .Rectangle ,_cdcg error ){const _bfed ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065"; if box ==nil {return nil ,_g .Error (_bfed ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_g .Error (_bfed ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065"); };_bedd :=*box ;_fcae =&_bedd ;if _fcae .Min .X < 0{_fcae .Max .X +=_fcae .Min .X ;_fcae .Min .X =0;};if _fcae .Min .Y < 0{_fcae .Max .Y +=_fcae .Min .Y ;_fcae .Min .Y =0;};if _fcae .Max .X > wi {_fcae .Max .X =wi ;};if _fcae .Max .Y > hi {_fcae .Max .Y =hi ; };return _fcae ,nil ;};func (_acdd *Bitmap )inverseData (){if _bcaf :=_acdd .RasterOperation (0,0,_acdd .Width ,_acdd .Height ,PixNotDst ,nil ,0,0);_bcaf !=nil {_de .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_bcaf ); };if _acdd .Color ==Chocolate {_acdd .Color =Vanilla ;}else {_acdd .Color =Chocolate ;};};func TstFrameBitmap ()*Bitmap {return _efdb .Copy ()};func MakePixelCentroidTab8 ()[]int {return _cddb ()};func TstTSymbol (t *_f .T ,scale ...int )*Bitmap {_gbbdd ,_gffcf :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20}); _e .NoError (t ,_gffcf );return TstGetScaledSymbol (t ,_gbbdd ,scale ...);};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _egbe (_aeca *Bitmap ,_egag ,_aafc ,_dfea ,_fdee int ,_befd RasterOperator ,_egbg *Bitmap ,_fcagd ,_fbdd int )error {var (_aggc bool ; _ddgf bool ;_aagec int ;_efgb int ;_cgagd int ;_fcaf bool ;_fgca byte ;_ccec int ;_adac int ;_bbfcg int ;_ccgb ,_dgff int ;);_gegf :=8-(_egag &7);_dgga :=_eebb [_gegf ];_gfec :=_aeca .RowStride *_aafc +(_egag >>3);_gccg :=_egbg .RowStride *_fbdd +(_fcagd >>3); if _dfea < _gegf {_aggc =true ;_dgga &=_gebag [8-_gegf +_dfea ];};if !_aggc {_aagec =(_dfea -_gegf )>>3;if _aagec > 0{_ddgf =true ;_efgb =_gfec +1;_cgagd =_gccg +1;};};_ccec =(_egag +_dfea )&7;if !_aggc &&_ccec !=0{_fcaf =true ;_fgca =_gebag [_ccec ];_adac =_gfec +1+_aagec ; _bbfcg =_gccg +1+_aagec ;};switch _befd {case PixSrc :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;_ccgb < _fdee ; _ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ],_fgca ); _adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotSrc :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^_egbg .Data [_gccg ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0; _ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=^_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^_egbg .Data [_bbfcg ],_fgca ); _adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcOrDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]|_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ; };if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]|=_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]|_aeca .Data [_adac ],_fgca ); _adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcAndDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]&_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ; };if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]&=_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]&_aeca .Data [_adac ],_fgca ); _adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcXorDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]^_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ; };if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]^=_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]^_aeca .Data [_adac ],_fgca ); _adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotSrcOrDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ])|_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ; };if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]|=^(_egbg .Data [_cgagd +_dgff ]);};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ])|_aeca .Data [_adac ],_fgca ); _adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotSrcAndDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ])&_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ; };if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]&=^_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ])&_aeca .Data [_adac ],_fgca ); _adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcOrNotDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]|^(_aeca .Data [_gfec ]),_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ; };if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=_egbg .Data [_cgagd +_dgff ]|^(_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0; _ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]|^(_aeca .Data [_adac ]),_fgca );_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcAndNotDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]&^(_aeca .Data [_gfec ]),_dgga ); _gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=_egbg .Data [_cgagd +_dgff ]&^(_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ; _cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]&^(_aeca .Data [_adac ]),_fgca );_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotPixSrcOrDst :for _ccgb =0; _ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ]|_aeca .Data [_gfec ]),_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ; _dgff ++{_aeca .Data [_efgb +_dgff ]=^(_egbg .Data [_cgagd +_dgff ]|_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ]|_aeca .Data [_adac ]),_fgca ); _adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotPixSrcAndDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ]&_aeca .Data [_gfec ]),_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ; };if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=^(_egbg .Data [_cgagd +_dgff ]&_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0; _ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ]&_aeca .Data [_adac ]),_fgca );_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotPixSrcXorDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ]^_aeca .Data [_gfec ]),_dgga ); _gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=^(_egbg .Data [_cgagd +_dgff ]^_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ; _cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ]^_aeca .Data [_adac ]),_fgca );_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};default:_de .Log .Debug ("I\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070e\u0072\u0061\u0074o\u0072:\u0020\u0025\u0064",_befd ); return _g .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072"); };return nil ;};func (_edbc *byWidth )Len ()int {return len (_edbc .Values )};func (_dfbf *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _dfbf .Copy (),nil ;};_bbfa ,_cffg :=_dfbf .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ); if _cffg !=nil {return nil ,_g .Wrap (_cffg ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _bbfa ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ; );type SelectionValue int ;func _dfe ()(_ddf [256]uint32 ){for _cfe :=0;_cfe < 256;_cfe ++{if _cfe &0x01!=0{_ddf [_cfe ]|=0xf;};if _cfe &0x02!=0{_ddf [_cfe ]|=0xf0;};if _cfe &0x04!=0{_ddf [_cfe ]|=0xf00;};if _cfe &0x08!=0{_ddf [_cfe ]|=0xf000;};if _cfe &0x10!=0{_ddf [_cfe ]|=0xf0000; };if _cfe &0x20!=0{_ddf [_cfe ]|=0xf00000;};if _cfe &0x40!=0{_ddf [_cfe ]|=0xf000000;};if _cfe &0x80!=0{_ddf [_cfe ]|=0xf0000000;};};return _ddf ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _gdc (d ,s ,sel )};type LocationFilter int ; var _edge =[5]int {1,2,3,0,4};func (_fadf *Boxes )makeSizeIndicator (_bdbg ,_cceae int ,_efbc LocationFilter ,_gcadd SizeComparison )*_db .NumSlice {_bfac :=&_db .NumSlice {};var _dacgg ,_fafg ,_gafgf int ;for _ ,_dcbg :=range *_fadf {_dacgg =0;_fafg ,_gafgf =_dcbg .Dx (),_dcbg .Dy (); switch _efbc {case LocSelectWidth :if (_gcadd ==SizeSelectIfLT &&_fafg < _bdbg )||(_gcadd ==SizeSelectIfGT &&_fafg > _bdbg )||(_gcadd ==SizeSelectIfLTE &&_fafg <=_bdbg )||(_gcadd ==SizeSelectIfGTE &&_fafg >=_bdbg ){_dacgg =1;};case LocSelectHeight :if (_gcadd ==SizeSelectIfLT &&_gafgf < _cceae )||(_gcadd ==SizeSelectIfGT &&_gafgf > _cceae )||(_gcadd ==SizeSelectIfLTE &&_gafgf <=_cceae )||(_gcadd ==SizeSelectIfGTE &&_gafgf >=_cceae ){_dacgg =1; };case LocSelectIfEither :if (_gcadd ==SizeSelectIfLT &&(_gafgf < _cceae ||_fafg < _bdbg ))||(_gcadd ==SizeSelectIfGT &&(_gafgf > _cceae ||_fafg > _bdbg ))||(_gcadd ==SizeSelectIfLTE &&(_gafgf <=_cceae ||_fafg <=_bdbg ))||(_gcadd ==SizeSelectIfGTE &&(_gafgf >=_cceae ||_fafg >=_bdbg )){_dacgg =1; };case LocSelectIfBoth :if (_gcadd ==SizeSelectIfLT &&(_gafgf < _cceae &&_fafg < _bdbg ))||(_gcadd ==SizeSelectIfGT &&(_gafgf > _cceae &&_fafg > _bdbg ))||(_gcadd ==SizeSelectIfLTE &&(_gafgf <=_cceae &&_fafg <=_bdbg ))||(_gcadd ==SizeSelectIfGTE &&(_gafgf >=_cceae &&_fafg >=_bdbg )){_dacgg =1; };};_bfac .AddInt (_dacgg );};return _bfac ;};func TstImageBitmap ()*Bitmap {return _cfdf .Copy ()};func _acca (_gccb *Bitmap ,_abde ,_cdag int ,_eafd ,_addf int ,_gfdc RasterOperator ,_fded *Bitmap ,_efaa ,_dbdb int )error {var _ecbdg ,_gdge ,_bcfb ,_fdgag int ; if _abde < 0{_efaa -=_abde ;_eafd +=_abde ;_abde =0;};if _efaa < 0{_abde -=_efaa ;_eafd +=_efaa ;_efaa =0;};_ecbdg =_abde +_eafd -_gccb .Width ;if _ecbdg > 0{_eafd -=_ecbdg ;};_gdge =_efaa +_eafd -_fded .Width ;if _gdge > 0{_eafd -=_gdge ;};if _cdag < 0{_dbdb -=_cdag ; _addf +=_cdag ;_cdag =0;};if _dbdb < 0{_cdag -=_dbdb ;_addf +=_dbdb ;_dbdb =0;};_bcfb =_cdag +_addf -_gccb .Height ;if _bcfb > 0{_addf -=_bcfb ;};_fdgag =_dbdb +_addf -_fded .Height ;if _fdgag > 0{_addf -=_fdgag ;};if _eafd <=0||_addf <=0{return nil ;}; var _cccb error ;switch {case _abde &7==0&&_efaa &7==0:_cccb =_dfdg (_gccb ,_abde ,_cdag ,_eafd ,_addf ,_gfdc ,_fded ,_efaa ,_dbdb );case _abde &7==_efaa &7:_cccb =_egbe (_gccb ,_abde ,_cdag ,_eafd ,_addf ,_gfdc ,_fded ,_efaa ,_dbdb );default:_cccb =_bfabg (_gccb ,_abde ,_cdag ,_eafd ,_addf ,_gfdc ,_fded ,_efaa ,_dbdb ); };if _cccb !=nil {return _g .Wrap (_cccb ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func _bggf ()(_ggd []byte ){_ggd =make ([]byte ,256);for _gcad :=0;_gcad < 256;_gcad ++{_dae :=byte (_gcad );_ggd [_dae ]=(_dae &0x01)|((_dae &0x04)>>1)|((_dae &0x10)>>2)|((_dae &0x40)>>3)|((_dae &0x02)<<3)|((_dae &0x08)<<2)|((_dae &0x20)<<1)|(_dae &0x80); };return _ggd ;};func _bccf (_ecgc ,_befad ,_gacc *Bitmap ,_gbeea int )(*Bitmap ,error ){const _edbac ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _befad ==nil {return nil ,_g .Error (_edbac ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c"); };if _gacc ==nil {return nil ,_g .Error (_edbac ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gbeea !=4&&_gbeea !=8{return nil ,_g .Error (_edbac ,"\u0063\u006f\u006en\u0065\u0063\u0074\u0069v\u0069\u0074\u0079\u0020\u006e\u006f\u0074 \u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0034\u002c\u0038\u007d"); };var _cbceb error ;_ecgc ,_cbceb =_bgff (_ecgc ,_befad );if _cbceb !=nil {return nil ,_g .Wrap (_cbceb ,_edbac ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_gbff :=_befad .createTemplate ();_gacc .setPadBits (0); for _gedb :=0;_gedb < _facgc ;_gedb ++{_gbff ,_cbceb =_bgff (_gbff ,_ecgc );if _cbceb !=nil {return nil ,_g .Wrapf (_cbceb ,_edbac ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gedb );};if _cbceb =_eaac (_ecgc ,_gacc ,_gbeea ); _cbceb !=nil {return nil ,_g .Wrapf (_cbceb ,_edbac ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gedb );};if _gbff .Equals (_ecgc ){break ;};};return _ecgc ,nil ;};func _edfd (_dbfg *Bitmap )(_cccg *Bitmap ,_eege int ,_eedg error ){const _fcf ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn"; if _dbfg ==nil {return nil ,0,_g .Errorf (_fcf ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _dfag ,_gefe *Bitmap ;if _dfag ,_eedg =_bgff (nil ,_dbfg );_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027"); };var (_bbae [13]int ;_bbde ,_aegf int ;);_afea :=12;_geeb :=_db .NewNumSlice (_afea +1);_adb :=_db .NewNumSlice (_afea +1);var _fdfc *Boxes ;for _cecd :=0;_cecd <=_afea ;_cecd ++{if _cecd ==0{if _gefe ,_eedg =_bgff (nil ,_dfag );_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2"); };}else {if _gefe ,_eedg =_ceb (_dfag ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _fdfc ,_eedg =_gefe .connComponentsBB (4); _eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"");};_bbae [_cecd ]=len (*_fdfc );_geeb .AddInt (_bbae [_cecd ]);switch _cecd {case 0:_bbde =_bbae [0];default:_aegf =_bbae [_cecd -1]-_bbae [_cecd ];_adb .AddInt (_aegf );};_dfag =_gefe ;};_agcef :=true ; _edace :=2;var _edeec ,_bcba int ;for _cffd :=1;_cffd < len (*_adb );_cffd ++{if _edeec ,_eedg =_geeb .GetInt (_cffd );_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e"); };if _agcef &&_edeec < int (0.3*float32 (_bbde )){_edace =_cffd +1;_agcef =false ;};if _aegf ,_eedg =_adb .GetInt (_cffd );_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066"); };if _aegf > _bcba {_bcba =_aegf ;};};_bfgfb :=_dbfg .XResolution ;if _bfgfb ==0{_bfgfb =150;};if _bfgfb > 110{_edace ++;};if _edace < 2{_de .Log .Trace ("J\u0042\u0049\u0047\u0032\u0020\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0069\u0042\u0065\u0073\u0074 \u0074\u006f\u0020\u006d\u0069\u006e\u0069\u006d\u0075\u006d a\u006c\u006c\u006fw\u0061b\u006c\u0065"); _edace =2;};_eege =_edace +1;if _cccg ,_eedg =_becd (nil ,_dbfg ,_edace +1,1);_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _cccg ,_eege ,nil ; };func Centroids (bms []*Bitmap )(*Points ,error ){_ddga :=make ([]Point ,len (bms ));_deed :=_cddb ();_fabg :=_eadbd ();var _fecgc error ;for _fefa ,_fafgd :=range bms {_ddga [_fefa ],_fecgc =_fafgd .centroid (_deed ,_fabg );if _fecgc !=nil {return nil ,_fecgc ; };};_cgag :=Points (_ddga );return &_cgag ,nil ;};func _dag (_edba *Bitmap ,_ccca ,_ddce int ,_gaff ,_fgde int ,_dedf RasterOperator ){var (_ffbd int ;_gbcec byte ;_fcagc ,_ebd int ;_dbece int ;);_gabb :=_gaff >>3;_fafb :=_gaff &7;if _fafb > 0{_gbcec =_gebag [_fafb ]; };_ffbd =_edba .RowStride *_ddce +(_ccca >>3);switch _dedf {case PixClr :for _fcagc =0;_fcagc < _fgde ;_fcagc ++{_dbece =_ffbd +_fcagc *_edba .RowStride ;for _ebd =0;_ebd < _gabb ;_ebd ++{_edba .Data [_dbece ]=0x0;_dbece ++;};if _fafb > 0{_edba .Data [_dbece ]=_fcac (_edba .Data [_dbece ],0x0,_gbcec ); };};case PixSet :for _fcagc =0;_fcagc < _fgde ;_fcagc ++{_dbece =_ffbd +_fcagc *_edba .RowStride ;for _ebd =0;_ebd < _gabb ;_ebd ++{_edba .Data [_dbece ]=0xff;_dbece ++;};if _fafb > 0{_edba .Data [_dbece ]=_fcac (_edba .Data [_dbece ],0xff,_gbcec );};}; case PixNotDst :for _fcagc =0;_fcagc < _fgde ;_fcagc ++{_dbece =_ffbd +_fcagc *_edba .RowStride ;for _ebd =0;_ebd < _gabb ;_ebd ++{_edba .Data [_dbece ]=^_edba .Data [_dbece ];_dbece ++;};if _fafb > 0{_edba .Data [_dbece ]=_fcac (_edba .Data [_dbece ],^_edba .Data [_dbece ],_gbcec ); };};};};const (Vanilla Color =iota ;Chocolate ;);func (_fdae *Bitmap )connComponentsBitmapsBB (_cgc *Bitmaps ,_bbge int )(_cgbb *Boxes ,_beed error ){const _dcbe ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042"; if _bbge !=4&&_bbge !=8{return nil ,_g .Error (_dcbe ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _cgc ==nil {return nil ,_g .Error (_dcbe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073"); };if len (_cgc .Values )> 0{return nil ,_g .Error (_dcbe ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u006fn\u002d\u0065\u006d\u0070\u0074\u0079\u0020\u0042\u0069\u0074m\u0061\u0070\u0073");};if _fdae .Zero (){return &Boxes {},nil ;}; var (_fbca ,_bfge ,_gaada ,_ggad *Bitmap ;);_fdae .setPadBits (0);if _fbca ,_beed =_bgff (nil ,_fdae );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0031");};if _bfge ,_beed =_bgff (nil ,_fdae );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0032"); };_dbabb :=&_db .Stack {};_dbabb .Aux =&_db .Stack {};_cgbb =&Boxes {};var (_fecg ,_fba int ;_gfabb _b .Point ;_befc bool ;_fdc *_b .Rectangle ;);for {if _gfabb ,_befc ,_beed =_fbca .nextOnPixel (_fecg ,_fba );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,""); };if !_befc {break ;};if _fdc ,_beed =_adbc (_fbca ,_dbabb ,_gfabb .X ,_gfabb .Y ,_bbge );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"");};if _beed =_cgbb .Add (_fdc );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"");};if _gaada ,_beed =_fbca .clipRectangle (_fdc ,nil ); _beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0033");};if _ggad ,_beed =_bfge .clipRectangle (_fdc ,nil );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0034");};if _ ,_beed =_acaf (_gaada ,_gaada ,_ggad );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4"); };if _beed =_bfge .RasterOperation (_fdc .Min .X ,_fdc .Min .Y ,_fdc .Dx (),_fdc .Dy (),PixSrcXorDst ,_gaada ,0,0);_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_cgc .AddBitmap (_gaada ); _fecg =_gfabb .X ;_fba =_gfabb .Y ;};_cgc .Boxes =*_cgbb ;return _cgbb ,nil ;};func (_dbab *Bitmap )CountPixels ()int {return _dbab .countPixels ()};func (_cbec *Bitmap )thresholdPixelSum (_cbb int )bool {var (_bdae int ;_dbc uint8 ;_ebc byte ;_cgbd int ; );_gcag :=_cbec .RowStride ;_ddeeg :=uint (_cbec .Width &0x07);if _ddeeg !=0{_dbc =uint8 ((0xff<<(8-_ddeeg ))&0xff);_gcag --;};for _cceb :=0;_cceb < _cbec .Height ;_cceb ++{for _cgbd =0;_cgbd < _gcag ;_cgbd ++{_ebc =_cbec .Data [_cceb *_cbec .RowStride +_cgbd ]; _bdae +=int (_fee [_ebc ]);};if _ddeeg !=0{_ebc =_cbec .Data [_cceb *_cbec .RowStride +_cgbd ]&_dbc ;_bdae +=int (_fee [_ebc ]);};if _bdae > _cbb {return true ;};};return false ;};func _efbcc (_adafg *Bitmap ,_eefb int )(*Bitmap ,error ){const _ceacc ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065"; if _adafg ==nil {return nil ,_g .Error (_ceacc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _eefb <=0{return nil ,_g .Error (_ceacc ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030"); };if _eefb ==1{_gggce ,_eedcd :=_bgff (nil ,_adafg );if _eedcd !=nil {return nil ,_g .Wrap (_eedcd ,_ceacc ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _gggce ,nil ;};_ddgc ,_gcc :=_acbb (_adafg ,_eefb ,_eefb );if _gcc !=nil {return nil ,_g .Wrap (_gcc ,_ceacc ,""); };return _ddgc ,nil ;};func _edgg (_fgcgd *Bitmap ,_gffad *_db .Stack ,_fbbc ,_facga int )(_dedd *_b .Rectangle ,_cdbe error ){const _eegc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _fgcgd ==nil {return nil ,_g .Error (_eegc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070"); };if _gffad ==nil {return nil ,_g .Error (_eegc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_gaef ,_eeebf :=_fgcgd .Width ,_fgcgd .Height ;_beddf :=_gaef -1;_fbaef :=_eeebf -1;if _fbbc < 0||_fbbc > _beddf ||_facga < 0||_facga > _fbaef ||!_fgcgd .GetPixel (_fbbc ,_facga ){return nil ,nil ; };var _cgac *_b .Rectangle ;_cgac ,_cdbe =Rect (100000,100000,0,0);if _cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"");};if _cdbe =_gebg (_gffad ,_fbbc ,_fbbc ,_facga ,1,_fbaef ,_cgac );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068"); };if _cdbe =_gebg (_gffad ,_fbbc ,_fbbc ,_facga +1,-1,_fbaef ,_cgac );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_cgac .Min .X ,_cgac .Max .X =_fbbc ,_fbbc ; _cgac .Min .Y ,_cgac .Max .Y =_facga ,_facga ;var (_dffb *fillSegment ;_cfad int ;);for _gffad .Len ()> 0{if _dffb ,_cdbe =_dgdee (_gffad );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"");};_facga =_dffb ._gdda ;for _fbbc =_dffb ._fgeg ;_fbbc >=0&&_fgcgd .GetPixel (_fbbc ,_facga ); _fbbc --{if _cdbe =_fgcgd .SetPixel (_fbbc ,_facga ,0);_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"");};};if _fbbc >=_dffb ._fgeg {for _fbbc ++;_fbbc <=_dffb ._efcee &&_fbbc <=_beddf &&!_fgcgd .GetPixel (_fbbc ,_facga );_fbbc ++{};_cfad =_fbbc ;if _fbbc > _dffb ._efcee ||_fbbc > _beddf {continue ; };}else {_cfad =_fbbc +1;if _cfad < _dffb ._fgeg -1{if _cdbe =_gebg (_gffad ,_cfad ,_dffb ._fgeg -1,_dffb ._gdda ,-_dffb ._gfff ,_fbaef ,_cgac );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065"); };};_fbbc =_dffb ._fgeg +1;};for {for ;_fbbc <=_beddf &&_fgcgd .GetPixel (_fbbc ,_facga );_fbbc ++{if _cdbe =_fgcgd .SetPixel (_fbbc ,_facga ,0);_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cdbe =_gebg (_gffad ,_cfad ,_fbbc -1,_dffb ._gdda ,_dffb ._gfff ,_fbaef ,_cgac ); _cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fbbc > _dffb ._efcee +1{if _cdbe =_gebg (_gffad ,_dffb ._efcee +1,_fbbc -1,_dffb ._gdda ,-_dffb ._gfff ,_fbaef ,_cgac );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};for _fbbc ++;_fbbc <=_dffb ._efcee &&_fbbc <=_beddf &&!_fgcgd .GetPixel (_fbbc ,_facga );_fbbc ++{};_cfad =_fbbc ;if _fbbc > _dffb ._efcee ||_fbbc > _beddf {break ;};};};_cgac .Max .X ++;_cgac .Max .Y ++;return _cgac ,nil ;};func _fda (_ebafb ,_faa *Bitmap ,_ int ,_dga []byte ,_fbd int )(_cdd error ){const _ccf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032"; var (_def ,_fccd ,_cga ,_cdb ,_gag ,_da ,_agb ,_dba int ;_abd ,_aae ,_dda ,_cfa uint32 ;_fgf ,_aca byte ;_ged uint16 ;);_bfd :=make ([]byte ,4);_ece :=make ([]byte ,4);for _cga =0;_cga < _ebafb .Height -1;_cga ,_cdb =_cga +2,_cdb +1{_def =_cga *_ebafb .RowStride ; _fccd =_cdb *_faa .RowStride ;for _gag ,_da =0,0;_gag < _fbd ;_gag ,_da =_gag +4,_da +1{for _agb =0;_agb < 4;_agb ++{_dba =_def +_gag +_agb ;if _dba <=len (_ebafb .Data )-1&&_dba < _def +_ebafb .RowStride {_bfd [_agb ]=_ebafb .Data [_dba ];}else {_bfd [_agb ]=0x00; };_dba =_def +_ebafb .RowStride +_gag +_agb ;if _dba <=len (_ebafb .Data )-1&&_dba < _def +(2*_ebafb .RowStride ){_ece [_agb ]=_ebafb .Data [_dba ];}else {_ece [_agb ]=0x00;};};_abd =_ge .BigEndian .Uint32 (_bfd );_aae =_ge .BigEndian .Uint32 (_ece );_dda =_abd &_aae ; _dda |=_dda <<1;_cfa =_abd |_aae ;_cfa &=_cfa <<1;_aae =_dda |_cfa ;_aae &=0xaaaaaaaa;_abd =_aae |(_aae <<7);_fgf =byte (_abd >>24);_aca =byte ((_abd >>8)&0xff);_dba =_fccd +_da ;if _dba +1==len (_faa .Data )-1||_dba +1>=_fccd +_faa .RowStride {if _cdd =_faa .SetByte (_dba ,_dga [_fgf ]); _cdd !=nil {return _g .Wrapf (_cdd ,_ccf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_dba );};}else {_ged =(uint16 (_dga [_fgf ])<<8)|uint16 (_dga [_aca ]);if _cdd =_faa .setTwoBytes (_dba ,_ged );_cdd !=nil {return _g .Wrapf (_cdd ,_ccf ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_dba ); };_da ++;};};};return nil ;};var _ _dd .Interface =&ClassedPoints {};func (_egbd *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_efcf *Bitmaps ,_ffgd error ){const _eebg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065"; if _egbd ==nil {return nil ,_g .Error (_eebg ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_eebg ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp ); };switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_g .Errorf (_eebg ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation ); };_dccc ,_ffgd :=_egbd .makeSizeIndicator (width ,height ,tp ,relation );if _ffgd !=nil {return nil ,_g .Wrap (_ffgd ,_eebg ,"");};_efcf ,_ffgd =_egbd .selectByIndicator (_dccc );if _ffgd !=nil {return nil ,_g .Wrap (_ffgd ,_eebg ,"");};return _efcf ,nil ; };func _cff (_dbb ,_gfe int )*Bitmap {return &Bitmap {Width :_dbb ,Height :_gfe ,RowStride :(_dbb +7)>>3};};func TstWordBitmap (t *_f .T ,scale ...int )*Bitmap {_acef :=1;if len (scale )> 0{_acef =scale [0];};_afca :=3;_cbeg :=9+7+15+2*_afca ;_bfcae :=5+_afca +5; _ggcde :=New (_cbeg *_acef ,_bfcae *_acef );_beddd :=&Bitmaps {};var _dfbfd *int ;_afca *=_acef ;_gdefb :=0;_dfbfd =&_gdefb ;_bebe :=0;_aagg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstOSymbol (t ,scale ...); TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,_afca );_aagg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,_afca );_aagg =TstNSymbol (t ,scale ...); TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,0);*_dfbfd =0;_bebe =5*_acef +_afca ; _aagg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,_afca );_aagg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef ); _aagg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef ); _aagg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,0);TstWriteSymbols (t ,_beddd ,_ggcde );return _ggcde ;};func _gcee (_ggbf ,_fdfe int )int {if _ggbf > _fdfe {return _ggbf ;};return _fdfe ;};func TstImageBitmapData ()[]byte {return _cfdf .Data }; func (_acd *Bitmap )GetBitOffset (x int )int {return x &0x07};func (_fade Points )YSorter ()func (_cafb ,_egca int )bool {return func (_fdfb ,_egb int )bool {return _fade [_fdfb ].Y < _fade [_egb ].Y };};func _bccb (_gdbf ,_cdcf *Bitmap ,_cdda *Selection )(*Bitmap ,error ){const _ecbd ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070"; var _aafb error ;if _gdbf ,_aafb =_aaa (_gdbf ,_cdcf ,_cdda );_aafb !=nil {return nil ,_aafb ;};_ceea ,_aafb :=_gdc (nil ,_cdcf ,_cdda );if _aafb !=nil {return nil ,_g .Wrap (_aafb ,_ecbd ,"");};if _ ,_aafb =_adbe (_gdbf ,_ceea ,_cdda );_aafb !=nil {return nil ,_g .Wrap (_aafb ,_ecbd ,""); };return _gdbf ,nil ;};func (_gcfac *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _gfbg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _gcfac ==nil {return nil ,_g .Error (_gfbg ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if s ==nil {return nil ,_g .Error (_gfbg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_cgef :=len (_gcfac .Values );_bgdf :=&Bitmaps {Values :make ([]*Bitmap ,_cgef ),Boxes :make ([]*_b .Rectangle ,_cgef )}; var (_ddab ,_ddbg *Bitmap ;_adea *_b .Rectangle ;_facbf error ;);for _dbbf :=0;_dbbf < _cgef ;_dbbf ++{if _ddab ,_facbf =_gcfac .GetBitmap (_dbbf );_facbf !=nil {return nil ,_g .Wrap (_facbf ,_gfbg ,"");};if _adea ,_facbf =_gcfac .GetBox (_dbbf );_facbf !=nil {return nil ,_g .Wrap (_facbf ,_gfbg ,""); };if _ddbg ,_facbf =s .clipRectangle (_adea ,nil );_facbf !=nil {return nil ,_g .Wrap (_facbf ,_gfbg ,"");};if _ddbg ,_facbf =_ddbg .And (_ddab );_facbf !=nil {return nil ,_g .Wrap (_facbf ,_gfbg ,"");};_bgdf .Values [_dbbf ]=_ddbg ;_bgdf .Boxes [_dbbf ]=_adea ; };return _bgdf ,nil ;};func (_aaec *Bitmap )setPadBits (_gcfad int ){_egcd :=8-_aaec .Width %8;if _egcd ==8{return ;};_cfbc :=_aaec .Width /8;_gbgd :=_eebb [_egcd ];if _gcfad ==0{_gbgd ^=_gbgd ;};var _cddg int ;for _cgbee :=0;_cgbee < _aaec .Height ;_cgbee ++{_cddg =_cgbee *_aaec .RowStride +_cfbc ; if _gcfad ==0{_aaec .Data [_cddg ]&=_gbgd ;}else {_aaec .Data [_cddg ]|=_gbgd ;};};};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func _fc (_ef ,_fg *Bitmap )(_ed error ){const _cc ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032"; _ec :=_fg .RowStride ;_fd :=_ef .RowStride ;var (_a byte ;_fgg uint16 ;_ecd ,_aa ,_ac ,_dca ,_gg int ;);for _ac =0;_ac < _fg .Height ;_ac ++{_ecd =_ac *_ec ;_aa =2*_ac *_fd ;for _dca =0;_dca < _ec ;_dca ++{_a =_fg .Data [_ecd +_dca ];_fgg =_bged [_a ]; _gg =_aa +_dca *2;if _ef .RowStride !=_fg .RowStride *2&&(_dca +1)*2> _ef .RowStride {_ed =_ef .SetByte (_gg ,byte (_fgg >>8));}else {_ed =_ef .setTwoBytes (_gg ,_fgg );};if _ed !=nil {return _g .Wrap (_ed ,_cc ,"");};};for _dca =0;_dca < _fd ;_dca ++{_gg =_aa +_fd +_dca ; _a =_ef .Data [_aa +_dca ];if _ed =_ef .SetByte (_gg ,_a );_ed !=nil {return _g .Wrapf (_ed ,_cc ,"c\u006f\u0070\u0079\u0020\u0064\u006fu\u0062\u006c\u0065\u0064\u0020\u006ci\u006e\u0065\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0042\u0079\u0074\u0065\u003a\u0020\u0027\u0025d\u0027",_aa +_dca ,_aa +_fd +_dca ); };};};return nil ;};func (_dddc *Bitmaps )SortByHeight (){_cgfe :=(*byHeight )(_dddc );_dd .Sort (_cgfe )};func (_bdbf *Boxes )Get (i int )(*_b .Rectangle ,error ){const _aabc ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _bdbf ==nil {return nil ,_g .Error (_aabc ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if i > len (*_bdbf )-1{return nil ,_g .Errorf (_aabc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_bdbf )[i ],nil ;};func (_daa *Bitmap )addBorderGeneral (_bcf ,_agce ,_eeee ,_decg int ,_gbeb int )(*Bitmap ,error ){const _acc ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c"; if _bcf < 0||_agce < 0||_eeee < 0||_decg < 0{return nil ,_g .Error (_acc ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_ada ,_aee :=_daa .Width ,_daa .Height ;_ecab :=_ada +_bcf +_agce ;_acbe :=_aee +_eeee +_decg ; _faag :=New (_ecab ,_acbe );_faag .Color =_daa .Color ;_baf :=PixClr ;if _gbeb > 0{_baf =PixSet ;};_gbgg :=_faag .RasterOperation (0,0,_bcf ,_acbe ,_baf ,nil ,0,0);if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u006c\u0065\u0066\u0074");};_gbgg =_faag .RasterOperation (_ecab -_agce ,0,_agce ,_acbe ,_baf ,nil ,0,0); if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u0072\u0069\u0067h\u0074");};_gbgg =_faag .RasterOperation (0,0,_ecab ,_eeee ,_baf ,nil ,0,0);if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u0074\u006f\u0070");};_gbgg =_faag .RasterOperation (0,_acbe -_decg ,_ecab ,_decg ,_baf ,nil ,0,0); if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_gbgg =_faag .RasterOperation (_bcf ,_eeee ,_ada ,_aee ,PixSrc ,_daa ,0,0);if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u0063\u006f\u0070\u0079");};return _faag ,nil ; };var MorphBC BoundaryCondition ;func _becd (_ccgg ,_fcbg *Bitmap ,_aced ,_febc int )(*Bitmap ,error ){const _cafg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _fcbg ==nil {return nil ,_g .Error (_cafg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _aced < 1||_febc < 1{return nil ,_g .Error (_cafg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _aced ==1&&_febc ==1{return _fcbg .Copy (),nil ;};if _aced ==1||_febc ==1{_eabca :=SelCreateBrick (_febc ,_aced ,_febc /2,_aced /2,SelHit ); var _dbfe error ;_ccgg ,_dbfe =_bccb (_ccgg ,_fcbg ,_eabca );if _dbfe !=nil {return nil ,_g .Wrap (_dbfe ,_cafg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");}; return _ccgg ,nil ;};_cafd :=SelCreateBrick (1,_aced ,0,_aced /2,SelHit );_abed :=SelCreateBrick (_febc ,1,_febc /2,0,SelHit );_cbae ,_acde :=_gdc (nil ,_fcbg ,_cafd );if _acde !=nil {return nil ,_g .Wrap (_acde ,_cafg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };if _ccgg ,_acde =_gdc (_ccgg ,_cbae ,_abed );_acde !=nil {return nil ,_g .Wrap (_acde ,_cafg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_acde =_adbe (_cbae ,_ccgg ,_cafd );_acde !=nil {return nil ,_g .Wrap (_acde ,_cafg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };if _ ,_acde =_adbe (_ccgg ,_cbae ,_abed );_acde !=nil {return nil ,_g .Wrap (_acde ,_cafg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ccgg ,nil ;};type Points []Point ;func (_cdf *Bitmap )equivalent (_bbfc *Bitmap )bool {if _cdf ==_bbfc {return true ; };if !_cdf .SizesEqual (_bbfc ){return false ;};_gcfa :=_cfegd (_cdf ,_bbfc ,CmbOpXor );_degd :=_cdf .countPixels ();_caeg :=int (0.25*float32 (_degd ));if _gcfa .thresholdPixelSum (_caeg ){return false ;};var (_fea [9][9]int ;_bbc [18][9]int ;_adaf [9][18]int ; _aff int ;_ggg int ;);_eedaf :=9;_gba :=_cdf .Height /_eedaf ;_fgb :=_cdf .Width /_eedaf ;_cab ,_fcd :=_gba /2,_fgb /2;if _gba < _fgb {_cab =_fgb /2;_fcd =_gba /2;};_ebe :=float64 (_cab )*float64 (_fcd )*_gf .Pi ;_agdbd :=int (float64 (_gba *_fgb /2)*0.9); _gfacc :=int (float64 (_fgb *_gba /2)*0.9);for _caae :=0;_caae < _eedaf ;_caae ++{_fcgd :=_fgb *_caae +_aff ;var _fgcg int ;if _caae ==_eedaf -1{_aff =0;_fgcg =_cdf .Width ;}else {_fgcg =_fcgd +_fgb ;if ((_cdf .Width -_aff )%_eedaf )> 0{_aff ++;_fgcg ++; };};for _gfd :=0;_gfd < _eedaf ;_gfd ++{_fde :=_gba *_gfd +_ggg ;var _cef int ;if _gfd ==_eedaf -1{_ggg =0;_cef =_cdf .Height ;}else {_cef =_fde +_gba ;if (_cdf .Height -_ggg )%_eedaf > 0{_ggg ++;_cef ++;};};var _ffef ,_feca ,_dffg ,_dbfd int ;_ddee :=(_fcgd +_fgcg )/2; _dcaa :=(_fde +_cef )/2;for _cdff :=_fcgd ;_cdff < _fgcg ;_cdff ++{for _cgf :=_fde ;_cgf < _cef ;_cgf ++{if _gcfa .GetPixel (_cdff ,_cgf ){if _cdff < _ddee {_ffef ++;}else {_feca ++;};if _cgf < _dcaa {_dbfd ++;}else {_dffg ++;};};};};_fea [_caae ][_gfd ]=_ffef +_feca ; _bbc [_caae *2][_gfd ]=_ffef ;_bbc [_caae *2+1][_gfd ]=_feca ;_adaf [_caae ][_gfd *2]=_dbfd ;_adaf [_caae ][_gfd *2+1]=_dffg ;};};for _agbf :=0;_agbf < _eedaf *2-1;_agbf ++{for _dgb :=0;_dgb < (_eedaf -1);_dgb ++{var _abc int ;for _ddeg :=0;_ddeg < 2;_ddeg ++{for _dbbc :=0; _dbbc < 2;_dbbc ++{_abc +=_bbc [_agbf +_ddeg ][_dgb +_dbbc ];};};if _abc > _gfacc {return false ;};};};for _affa :=0;_affa < (_eedaf -1);_affa ++{for _bfab :=0;_bfab < ((_eedaf *2)-1);_bfab ++{var _gacf int ;for _bag :=0;_bag < 2;_bag ++{for _bgabg :=0; _bgabg < 2;_bgabg ++{_gacf +=_adaf [_affa +_bag ][_bfab +_bgabg ];};};if _gacf > _agdbd {return false ;};};};for _ddd :=0;_ddd < (_eedaf -2);_ddd ++{for _afd :=0;_afd < (_eedaf -2);_afd ++{var _edec ,_fgcc int ;for _fccg :=0;_fccg < 3;_fccg ++{for _ccd :=0; _ccd < 3;_ccd ++{if _fccg ==_ccd {_edec +=_fea [_ddd +_fccg ][_afd +_ccd ];};if (2-_fccg )==_ccd {_fgcc +=_fea [_ddd +_fccg ][_afd +_ccd ];};};};if _edec > _gfacc ||_fgcc > _gfacc {return false ;};};};for _faac :=0;_faac < (_eedaf -1);_faac ++{for _cbge :=0; _cbge < (_eedaf -1);_cbge ++{var _fcdb int ;for _dbfdf :=0;_dbfdf < 2;_dbfdf ++{for _dabc :=0;_dabc < 2;_dabc ++{_fcdb +=_fea [_faac +_dbfdf ][_cbge +_dabc ];};};if float64 (_fcdb )> _ebe {return false ;};};};return true ;};func TstESymbol (t *_f .T ,scale ...int )*Bitmap {_efbbg ,_bgbdg :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0}); _e .NoError (t ,_bgbdg );return TstGetScaledSymbol (t ,_efbbg ,scale ...);};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_b .Rectangle ;};func TstNSymbol (t *_f .T ,scale ...int )*Bitmap {_bfff ,_abdgd :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90}); _e .NoError (t ,_abdgd );return TstGetScaledSymbol (t ,_bfff ,scale ...);};func (_bdgd *Bitmap )GetByte (index int )(byte ,error ){if index > len (_bdgd .Data )-1||index < 0{return 0,_g .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index ); };return _bdgd .Data [index ],nil ;};var (_gebag =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_eebb =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_dggb *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _aaae ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059"; if _cdac :=_dggb .validateIntSlice ();_cdac !=nil {return nil ,_g .Wrap (_cdac ,_aaae ,"");};if _dggb .IntSlice .Size ()==0{return nil ,_g .Error (_aaae ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064"); };_dggb .SortByY ();var (_ecdg []*ClassedPoints ;_gggg int ;);_degc :=-1;var _acdc *ClassedPoints ;for _fagd :=0;_fagd < len (_dggb .IntSlice );_fagd ++{_gggg =int (_dggb .YAtIndex (_fagd ));if _gggg !=_degc {_acdc =&ClassedPoints {Points :_dggb .Points }; _degc =_gggg ;_ecdg =append (_ecdg ,_acdc );};_acdc .IntSlice =append (_acdc .IntSlice ,_dggb .IntSlice [_fagd ]);};for _ ,_egf :=range _ecdg {_egf .SortByX ();};return _ecdg ,nil ;};type ClassedPoints struct{*Points ;_db .IntSlice ;_bdde func (_dcgba ,_gcfb int )bool ; };type CombinationOperator int ;func (_gfab *Bitmap )GetByteIndex (x ,y int )int {return y *_gfab .RowStride +(x >>3)};func (_edcg *Bitmap )ClipRectangle (box *_b .Rectangle )(_egc *Bitmap ,_dffa *_b .Rectangle ,_ggb error ){const _gfac ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065"; if box ==nil {return nil ,nil ,_g .Error (_gfac ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_gbe ,_fbe :=_edcg .Width ,_edcg .Height ;_fdba :=_b .Rect (0,0,_gbe ,_fbe );if !box .Overlaps (_fdba ){return nil ,nil ,_g .Error (_gfac ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062"); };_bace :=box .Intersect (_fdba );_ddb ,_gcg :=_bace .Min .X ,_bace .Min .Y ;_cac ,_fcgb :=_bace .Dx (),_bace .Dy ();_egc =New (_cac ,_fcgb );_egc .Text =_edcg .Text ;if _ggb =_egc .RasterOperation (0,0,_cac ,_fcgb ,PixSrc ,_edcg ,_ddb ,_gcg );_ggb !=nil {return nil ,nil ,_g .Wrap (_ggb ,_gfac ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064"); };_dffa =&_bace ;return _egc ,_dffa ,nil ;};func _eaac (_ddfb *Bitmap ,_cagb *Bitmap ,_cgdd int )(_fcec error ){const _agfb ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_feec :=_gdef (_ddfb .Height ,_cagb .Height ); _agceg :=_gdef (_ddfb .RowStride ,_cagb .RowStride );switch _cgdd {case 4:_fcec =_bced (_ddfb ,_cagb ,_feec ,_agceg );case 8:_fcec =_gffca (_ddfb ,_cagb ,_feec ,_agceg );default:return _g .Errorf (_agfb ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0034\u0020\u006fr\u0020\u0038\u0020\u002d\u0020i\u0073\u003a \u0027\u0025\u0064\u0027",_cgdd ); };if _fcec !=nil {return _g .Wrap (_fcec ,_agfb ,"");};return nil ;};func TstVSymbol (t *_f .T ,scale ...int )*Bitmap {_afdg ,_bacef :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_e .NoError (t ,_bacef );return TstGetScaledSymbol (t ,_afdg ,scale ...); };func (_cafa *Bitmap )resizeImageData (_efbg *Bitmap )error {if _efbg ==nil {return _g .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _cafa .SizesEqual (_efbg ){return nil ;};_cafa .Data =make ([]byte ,len (_efbg .Data ));_cafa .Width =_efbg .Width ;_cafa .Height =_efbg .Height ;_cafa .RowStride =_efbg .RowStride ;return nil ;};func (_aggge *byWidth )Swap (i ,j int ){_aggge .Values [i ],_aggge .Values [j ]=_aggge .Values [j ],_aggge .Values [i ]; if _aggge .Boxes !=nil {_aggge .Boxes [i ],_aggge .Boxes [j ]=_aggge .Boxes [j ],_aggge .Boxes [i ];};};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _gac ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_ffe :=_cff (width ,height ); _ffe .Data =data ;if len (data )< height *_ffe .RowStride {return nil ,_g .Errorf (_gac ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064\u0061\u0074\u0061\u0020l\u0065\u006e\u0067\u0074\u0068\u003a \u0025\u0064\u0020\u002d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062e\u003a\u0020\u0025\u0064",len (data ),height *_ffe .RowStride ); };return _ffe ,nil ;};func (_acag *Bitmaps )CountPixels ()*_db .NumSlice {_dbag :=&_db .NumSlice {};for _ ,_gaffe :=range _acag .Values {_dbag .AddInt (_gaffe .CountPixels ());};return _dbag ;};func _dfdg (_bcafg *Bitmap ,_abg ,_dbcf ,_facg ,_eeeb int ,_aedfg RasterOperator ,_dcfe *Bitmap ,_agabe ,_dfce int )error {var (_gegg byte ; _bbfae int ;_gfag int ;_efd ,_egcg int ;_gdad ,_cacg int ;);_fafd :=_facg >>3;_eggae :=_facg &7;if _eggae > 0{_gegg =_gebag [_eggae ];};_bbfae =_dcfe .RowStride *_dfce +(_agabe >>3);_gfag =_bcafg .RowStride *_dbcf +(_abg >>3);switch _aedfg {case PixSrc :for _gdad =0; _gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=_dcfe .Data [_efd ];_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ],_gegg ); };};case PixNotSrc :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=^(_dcfe .Data [_efd ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^_dcfe .Data [_efd ],_gegg ); };};case PixSrcOrDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]|=_dcfe .Data [_efd ];_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]|_bcafg .Data [_egcg ],_gegg ); };};case PixSrcAndDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]&=_dcfe .Data [_efd ];_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]&_bcafg .Data [_egcg ],_gegg ); };};case PixSrcXorDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]^=_dcfe .Data [_efd ];_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]^_bcafg .Data [_egcg ],_gegg ); };};case PixNotSrcOrDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]|=^(_dcfe .Data [_efd ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ])|_bcafg .Data [_egcg ],_gegg ); };};case PixNotSrcAndDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]&=^(_dcfe .Data [_efd ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ])&_bcafg .Data [_egcg ],_gegg ); };};case PixSrcOrNotDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=_dcfe .Data [_efd ]|^(_bcafg .Data [_egcg ]);_egcg ++; _efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]|^(_bcafg .Data [_egcg ]),_gegg );};};case PixSrcAndNotDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ; for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=_dcfe .Data [_efd ]&^(_bcafg .Data [_egcg ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]&^(_bcafg .Data [_egcg ]),_gegg );};};case PixNotPixSrcOrDst :for _gdad =0; _gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=^(_dcfe .Data [_efd ]|_bcafg .Data [_egcg ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ]|_bcafg .Data [_egcg ]),_gegg ); };};case PixNotPixSrcAndDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=^(_dcfe .Data [_efd ]&_bcafg .Data [_egcg ]);_egcg ++; _efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ]&_bcafg .Data [_egcg ]),_gegg );};};case PixNotPixSrcXorDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ; for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=^(_dcfe .Data [_efd ]^_bcafg .Data [_egcg ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ]^_bcafg .Data [_egcg ]),_gegg );};};default:_de .Log .Debug ("\u0050\u0072ov\u0069\u0064\u0065d\u0020\u0069\u006e\u0076ali\u0064 r\u0061\u0073\u0074\u0065\u0072\u0020\u006fpe\u0072\u0061\u0074\u006f\u0072\u003a\u0020%\u0076",_aedfg ); return _g .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072"); };return nil ;};func _gdc (_aaedb *Bitmap ,_baabb *Bitmap ,_ababf *Selection )(*Bitmap ,error ){var (_eeba *Bitmap ;_dgdd error ;);_aaedb ,_dgdd =_cfca (_aaedb ,_baabb ,_ababf ,&_eeba );if _dgdd !=nil {return nil ,_dgdd ;};if _dgdd =_aaedb .clearAll (); _dgdd !=nil {return nil ,_dgdd ;};var _agca SelectionValue ;for _gdg :=0;_gdg < _ababf .Height ;_gdg ++{for _gcdf :=0;_gcdf < _ababf .Width ;_gcdf ++{_agca =_ababf .Data [_gdg ][_gcdf ];if _agca ==SelHit {if _dgdd =_aaedb .RasterOperation (_gcdf -_ababf .Cx ,_gdg -_ababf .Cy ,_baabb .Width ,_baabb .Height ,PixSrcOrDst ,_eeba ,0,0); _dgdd !=nil {return nil ,_dgdd ;};};};};return _aaedb ,nil ;};func _ceb (_cfcc *Bitmap ,_bdff ...MorphProcess )(_ecaac *Bitmap ,_gagaf error ){const _fbae ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _cfcc ==nil {return nil ,_g .Error (_fbae ,"\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065 \u0073\u006f\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064"); };if len (_bdff )==0{return nil ,_g .Error (_fbae ,"m\u006f\u0072\u0070\u0068\u0053\u0065q\u0075\u0065\u006e\u0063\u0065\u002c \u0073\u0065\u0071\u0075\u0065\u006e\u0063e\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};if _gagaf =_dbfb (_bdff ...); _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};var _bfcd ,_befa ,_bdd int ;_ecaac =_cfcc .Copy ();for _ ,_dgeba :=range _bdff {switch _dgeba .Operation {case MopDilation :_bfcd ,_befa =_dgeba .getWidthHeight ();_ecaac ,_gagaf =DilateBrick (nil ,_ecaac ,_bfcd ,_befa ); if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};case MopErosion :_bfcd ,_befa =_dgeba .getWidthHeight ();_ecaac ,_gagaf =_ebba (nil ,_ecaac ,_bfcd ,_befa );if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};case MopOpening :_bfcd ,_befa =_dgeba .getWidthHeight (); _ecaac ,_gagaf =_cegb (nil ,_ecaac ,_bfcd ,_befa );if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};case MopClosing :_bfcd ,_befa =_dgeba .getWidthHeight ();_ecaac ,_gagaf =_cddge (nil ,_ecaac ,_bfcd ,_befa );if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,""); };case MopRankBinaryReduction :_ecaac ,_gagaf =_fgd (_ecaac ,_dgeba .Arguments ...);if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};case MopReplicativeBinaryExpansion :_ecaac ,_gagaf =_efbcc (_ecaac ,_dgeba .Arguments [0]);if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,""); };case MopAddBorder :_bdd =_dgeba .Arguments [0];_ecaac ,_gagaf =_ecaac .AddBorder (_bdd ,0);if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};default:return nil ,_g .Error (_fbae ,"i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006d\u006fr\u0070\u0068\u004f\u0070\u0065\u0072\u0061ti\u006f\u006e\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0074\u006f t\u0068\u0065 \u0073\u0065\u0071\u0075\u0065\u006e\u0063\u0065"); };};if _bdd > 0{_ecaac ,_gagaf =_ecaac .RemoveBorder (_bdd );if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _ecaac ,nil ;};func (_ddfe *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_dbf bool ,_gafa error ){const _daf ="\u0042i\u0074\u006d\u0061\u0070\u002e\u0054\u0068\u0072\u0065\u0073\u0068o\u006c\u0064\u0050\u0069\u0078\u0065\u006c\u0053\u0075\u006d"; if tab8 ==nil {tab8 =_eadbd ();};_fafe :=_ddfe .Width >>3;_bgf :=_ddfe .Width &7;_afee :=byte (0xff< thresh {return true ,nil ;};};return _dbf ,nil ;};type Color int ;type fillSegment struct{_fgeg int ;_efcee int ;_gdda int ;_gfff int ;};func (_dcbgg *byHeight )Less (i ,j int )bool {return _dcbgg .Values [i ].Height < _dcbgg .Values [j ].Height }; func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _bgff (d ,s )};func (_gea *Bitmap )SizesEqual (s *Bitmap )bool {if _gea ==s {return true ;};if _gea .Width !=s .Width ||_gea .Height !=s .Height {return false ;};return true ;};func _adbe (_begb ,_bagbb *Bitmap ,_agdd *Selection )(*Bitmap ,error ){const _gefa ="\u0065\u0072\u006fd\u0065"; var (_adgb error ;_ebcb *Bitmap ;);_begb ,_adgb =_cfca (_begb ,_bagbb ,_agdd ,&_ebcb );if _adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"");};if _adgb =_begb .setAll ();_adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"");};var _agfa SelectionValue ; for _cafc :=0;_cafc < _agdd .Height ;_cafc ++{for _accfb :=0;_accfb < _agdd .Width ;_accfb ++{_agfa =_agdd .Data [_cafc ][_accfb ];if _agfa ==SelHit {_adgb =_gbee (_begb ,_agdd .Cx -_accfb ,_agdd .Cy -_cafc ,_bagbb .Width ,_bagbb .Height ,PixSrcAndDst ,_ebcb ,0,0); if _adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"");};};};};if MorphBC ==SymmetricMorphBC {return _begb ,nil ;};_ebgd ,_gbbg ,_fbfbg ,_aecb :=_agdd .findMaxTranslations ();if _ebgd > 0{if _adgb =_begb .RasterOperation (0,0,_ebgd ,_bagbb .Height ,PixClr ,nil ,0,0); _adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _fbfbg > 0{if _adgb =_begb .RasterOperation (_bagbb .Width -_fbfbg ,0,_fbfbg ,_bagbb .Height ,PixClr ,nil ,0,0);_adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"\u0078\u006e\u0020\u003e\u0020\u0030"); };};if _gbbg > 0{if _adgb =_begb .RasterOperation (0,0,_bagbb .Width ,_gbbg ,PixClr ,nil ,0,0);_adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _aecb > 0{if _adgb =_begb .RasterOperation (0,_bagbb .Height -_aecb ,_bagbb .Width ,_aecb ,PixClr ,nil ,0,0); _adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _begb ,nil ;};func (_gdefg *Bitmaps )WidthSorter ()func (_cfff ,_dfgd int )bool {return func (_ccdb ,_adbdb int )bool {return _gdefg .Values [_ccdb ].Width < _gdefg .Values [_adbdb ].Width }; };const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func (_afff *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _bbdgb ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073"; if _afff ==nil {return nil ,_g .Error (_bbdgb ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_afff .Values )-1{return nil ,_g .Errorf (_bbdgb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return _afff .Values [i ],nil ;};func (_dceaf *Bitmap )centroid (_afbg ,_ffcb []int )(Point ,error ){_gefb :=Point {};_dceaf .setPadBits (0);if len (_afbg )==0{_afbg =_cddb ();};if len (_ffcb )==0{_ffcb =_eadbd ();};var _aebg ,_bdab ,_egcf ,_gagad ,_bcc ,_cgfa int ; var _bccg byte ;for _bcc =0;_bcc < _dceaf .Height ;_bcc ++{_dcgb :=_dceaf .RowStride *_bcc ;_gagad =0;for _cgfa =0;_cgfa < _dceaf .RowStride ;_cgfa ++{_bccg =_dceaf .Data [_dcgb +_cgfa ];if _bccg !=0{_gagad +=_ffcb [_bccg ];_aebg +=_afbg [_bccg ]+_cgfa *8*_ffcb [_bccg ]; };};_egcf +=_gagad ;_bdab +=_gagad *_bcc ;};if _egcf !=0{_gefb .X =float32 (_aebg )/float32 (_egcf );_gefb .Y =float32 (_bdab )/float32 (_egcf );};return _gefb ,nil ;};func TstOSymbol (t *_f .T ,scale ...int )*Bitmap {_aaga ,_abac :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0}); _e .NoError (t ,_abac );return TstGetScaledSymbol (t ,_aaga ,scale ...);};func (_dgad *Bitmap )And (s *Bitmap )(_fef *Bitmap ,_aba error ){const _gcd ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _dgad ==nil {return nil ,_g .Error (_gcd ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c"); };if s ==nil {return nil ,_g .Error (_gcd ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_dgad .SizesEqual (s ){_de .Log .Debug ("\u0025\u0073\u0020-\u0020\u0042\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0073\u0069\u007a\u0065 \u0077\u0069\u0074\u0068\u0020\u0027\u0062\u0027",_gcd ); };if _fef ,_aba =_bgff (_fef ,_dgad );_aba !=nil {return nil ,_g .Wrap (_aba ,_gcd ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _aba =_fef .RasterOperation (0,0,_fef .Width ,_fef .Height ,PixSrcAndDst ,s ,0,0); _aba !=nil {return nil ,_g .Wrap (_aba ,_gcd ,"");};return _fef ,nil ;};func _ggdg (_eaa ,_fbbb *Bitmap ,_cbfe ,_gef ,_ggbb ,_ffdc ,_cbcf ,_gecb ,_eeag ,_ffda int ,_gbd CombinationOperator )error {var _fdde int ;_eafgd :=func (){_fdde ++;_ggbb +=_fbbb .RowStride ; _ffdc +=_eaa .RowStride ;_cbcf +=_eaa .RowStride };for _fdde =_cbfe ;_fdde < _gef ;_eafgd (){var _dceg uint16 ;_gfae :=_ggbb ;for _dgcc :=_ffdc ;_dgcc <=_cbcf ;_dgcc ++{_bee ,_abdd :=_fbbb .GetByte (_gfae );if _abdd !=nil {return _abdd ;};_cegd ,_abdd :=_eaa .GetByte (_dgcc ); if _abdd !=nil {return _abdd ;};_dceg =(_dceg |uint16 (_cegd ))<>8);if _dgcc ==_cbcf {_cegd =_agaf (uint (_gecb ),_cegd );};if _abdd =_fbbb .SetByte (_gfae ,_bagb (_bee ,_cegd ,_gbd ));_abdd !=nil {return _abdd ;};_gfae ++; _dceg <<=uint (_eeag );};};return nil ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func _aefd (_fcaea *Bitmap ,_eebf ,_fafc ,_afbbac ,_cabd int ,_fbgf RasterOperator ){if _eebf < 0{_afbbac +=_eebf ; _eebf =0;};_ecgg :=_eebf +_afbbac -_fcaea .Width ;if _ecgg > 0{_afbbac -=_ecgg ;};if _fafc < 0{_cabd +=_fafc ;_fafc =0;};_bdfe :=_fafc +_cabd -_fcaea .Height ;if _bdfe > 0{_cabd -=_bdfe ;};if _afbbac <=0||_cabd <=0{return ;};if (_eebf &7)==0{_dag (_fcaea ,_eebf ,_fafc ,_afbbac ,_cabd ,_fbgf ); }else {_gbcc (_fcaea ,_eebf ,_fafc ,_afbbac ,_cabd ,_fbgf );};};func (_fggc *Bitmap )SetByte (index int ,v byte )error {if index > len (_fggc .Data )-1||index < 0{return _g .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index ); };_fggc .Data [index ]=v ;return nil ;};func (_bdbc *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_bff *Boxes ,_gge error ){const _cbgc ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065"; if _bdbc ==nil {return nil ,_g .Error (_cbgc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_bdbc )==0{return _bdbc ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_cbgc ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp ); };switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_g .Errorf (_cbgc ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp ); };_faacd :=_bdbc .makeSizeIndicator (width ,height ,tp ,relation );_dfbb ,_gge :=_bdbc .selectWithIndicator (_faacd );if _gge !=nil {return nil ,_g .Wrap (_gge ,_cbgc ,"");};return _dfbb ,nil ;};func (_becg *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _bfdd ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073"; if i >=_becg .IntSlice .Size (){return 0,_g .Errorf (_bfdd ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i ); };return int (_becg .XAtIndex (i )),nil ;};func (_aaba Points )GetIntX (i int )(int ,error ){if i >=len (_aaba ){return 0,_g .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return int (_aaba [i ].X ),nil ;};func (_gdb *Bitmap )SetPadBits (value int ){_gdb .setPadBits (value )};func (_badf *byWidth )Less (i ,j int )bool {return _badf .Values [i ].Width < _badf .Values [j ].Width };func _cage (_eecf ,_abfb *Bitmap ,_bfca ,_eaga int )(*Bitmap ,error ){const _ccbcf ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b"; if _abfb ==nil {_de .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");return nil ,_g .Error (_ccbcf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };if _bfca < 1||_eaga < 1{return nil ,_g .Error (_ccbcf ,"\u0068\u0053\u007a\u0069\u0065 \u0061\u006e\u0064\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u0061\u0072\u0065 \u006e\u006f\u0020\u0067\u0072\u0065\u0061\u0074\u0065\u0072\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031"); };if _bfca ==1&&_eaga ==1{_agcc ,_adc :=_bgff (_eecf ,_abfb );if _adc !=nil {return nil ,_g .Wrap (_adc ,_ccbcf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");}; return _agcc ,nil ;};if _bfca ==1||_eaga ==1{_geee :=SelCreateBrick (_eaga ,_bfca ,_eaga /2,_bfca /2,SelHit );_fdea ,_befb :=_gdc (_eecf ,_abfb ,_geee );if _befb !=nil {return nil ,_g .Wrap (_befb ,_ccbcf ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _fdea ,nil ;};_cefda :=SelCreateBrick (1,_bfca ,0,_bfca /2,SelHit );_ddgg :=SelCreateBrick (_eaga ,1,_eaga /2,0,SelHit );_fbcc ,_eae :=_gdc (nil ,_abfb ,_cefda );if _eae !=nil {return nil ,_g .Wrap (_eae ,_ccbcf ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };_eecf ,_eae =_gdc (_eecf ,_fbcc ,_ddgg );if _eae !=nil {return nil ,_g .Wrap (_eae ,_ccbcf ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _eecf ,nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _cage (d ,s ,hSize ,vSize )}; func (_fgff *Bitmaps )Size ()int {return len (_fgff .Values )};func (_dfdb *Bitmaps )HeightSorter ()func (_cbad ,_degb int )bool {return func (_ecaf ,_ffeb int )bool {_daae :=_dfdb .Values [_ecaf ].Height < _dfdb .Values [_ffeb ].Height ;_de .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_dfdb .Values [_ecaf ].Height ,_dfdb .Values [_ffeb ].Height ,_daae ); return _daae ;};};func (_cffb *Bitmap )addPadBits ()(_agge error ){const _ecee ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_gab :=_cffb .Width %8;if _gab ==0{return nil ;};_dcb :=_cffb .Width /8; _gbf :=_dc .NewReader (_cffb .Data );_aed :=make ([]byte ,_cffb .Height *_cffb .RowStride );_dfc :=_dc .NewWriterMSB (_aed );_cfag :=make ([]byte ,_dcb );var (_cbed int ;_gagf uint64 ;);for _cbed =0;_cbed < _cffb .Height ;_cbed ++{if _ ,_agge =_gbf .Read (_cfag ); _agge !=nil {return _g .Wrap (_agge ,_ecee ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_agge =_dfc .Write (_cfag );_agge !=nil {return _g .Wrap (_agge ,_ecee ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _gagf ,_agge =_gbf .ReadBits (byte (_gab )); _agge !=nil {return _g .Wrap (_agge ,_ecee ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _agge =_dfc .WriteByte (byte (_gagf )<>3{_bfef --;};if _bfef >=8{return _eedc .setEightFullBytes (_fbeg ,_gff ); };return _eedc .setEightPartlyBytes (_fbeg ,_bfef ,_gff );};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_aecf :=_ffeeg (h ,w ,"");_aecf .setOrigin (cy ,cx );var _daab ,_cgcd int ;for _daab =0;_daab < h ;_daab ++{for _cgcd =0; _cgcd < w ;_cgcd ++{_aecf .Data [_daab ][_cgcd ]=tp ;};};return _aecf ;};func (_bfaed Points )GetIntY (i int )(int ,error ){if i >=len (_bfaed ){return 0,_g .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return int (_bfaed [i ].Y ),nil ;};func (_gde *Bitmap )setFourBytes (_dacc int ,_ceg uint32 )error {if _dacc +3> len (_gde .Data )-1{return _g .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_dacc ); };_gde .Data [_dacc ]=byte ((_ceg &0xff000000)>>24);_gde .Data [_dacc +1]=byte ((_ceg &0xff0000)>>16);_gde .Data [_dacc +2]=byte ((_ceg &0xff00)>>8);_gde .Data [_dacc +3]=byte (_ceg &0xff);return nil ;};func _af (_eb ,_bd *Bitmap )(_ad error ){const _fce ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034"; _gfa :=_bd .RowStride ;_aag :=_eb .RowStride ;_dde :=_bd .RowStride *4-_eb .RowStride ;var (_bc ,_ba byte ;_be uint32 ;_bg ,_fcc ,_cf ,_ce ,_cb ,_fe ,_df int ;);for _cf =0;_cf < _bd .Height ;_cf ++{_bg =_cf *_gfa ;_fcc =4*_cf *_aag ;for _ce =0;_ce < _gfa ; _ce ++{_bc =_bd .Data [_bg +_ce ];_be =_cgab [_bc ];_fe =_fcc +_ce *4;if _dde !=0&&(_ce +1)*4> _eb .RowStride {for _cb =_dde ;_cb > 0;_cb --{_ba =byte ((_be >>uint (_cb *8))&0xff);_df =_fe +(_dde -_cb );if _ad =_eb .SetByte (_df ,_ba );_ad !=nil {return _g .Wrapf (_ad ,_fce ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_cb ); };};}else if _ad =_eb .setFourBytes (_fe ,_be );_ad !=nil {return _g .Wrap (_ad ,_fce ,"");};if _ad =_eb .setFourBytes (_fcc +_ce *4,_cgab [_bd .Data [_bg +_ce ]]);_ad !=nil {return _g .Wrap (_ad ,_fce ,"");};};for _cb =1;_cb < 4;_cb ++{for _ce =0;_ce < _aag ; _ce ++{if _ad =_eb .SetByte (_fcc +_cb *_aag +_ce ,_eb .Data [_fcc +_ce ]);_ad !=nil {return _g .Wrapf (_ad ,_fce ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0071\u0075\u0061\u0064\u0072\u0061\u0062l\u0065\u0027\u0020\u006c\u0069\u006ee\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0079\u0074\u0065\u003a \u0027\u0025\u0064\u0027",_cb ,_ce ); };};};};return nil ;};type SizeSelection int ;func _gca (_bfg ,_caef *Bitmap ,_aaff int ,_bba []byte ,_egg int )(_fggf error ){const _fgc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034"; var (_aage ,_fbg ,_gfbd ,_acaa ,_aga ,_ecf ,_gbc ,_bfba int ;_cdbc ,_dgd uint32 ;_fcea ,_bbb byte ;_bga uint16 ;);_ede :=make ([]byte ,4);_gbg :=make ([]byte ,4);for _gfbd =0;_gfbd < _bfg .Height -1;_gfbd ,_acaa =_gfbd +2,_acaa +1{_aage =_gfbd *_bfg .RowStride ; _fbg =_acaa *_caef .RowStride ;for _aga ,_ecf =0,0;_aga < _egg ;_aga ,_ecf =_aga +4,_ecf +1{for _gbc =0;_gbc < 4;_gbc ++{_bfba =_aage +_aga +_gbc ;if _bfba <=len (_bfg .Data )-1&&_bfba < _aage +_bfg .RowStride {_ede [_gbc ]=_bfg .Data [_bfba ];}else {_ede [_gbc ]=0x00; };_bfba =_aage +_bfg .RowStride +_aga +_gbc ;if _bfba <=len (_bfg .Data )-1&&_bfba < _aage +(2*_bfg .RowStride ){_gbg [_gbc ]=_bfg .Data [_bfba ];}else {_gbg [_gbc ]=0x00;};};_cdbc =_ge .BigEndian .Uint32 (_ede );_dgd =_ge .BigEndian .Uint32 (_gbg );_dgd &=_cdbc ; _dgd &=_dgd <<1;_dgd &=0xaaaaaaaa;_cdbc =_dgd |(_dgd <<7);_fcea =byte (_cdbc >>24);_bbb =byte ((_cdbc >>8)&0xff);_bfba =_fbg +_ecf ;if _bfba +1==len (_caef .Data )-1||_bfba +1>=_fbg +_caef .RowStride {_caef .Data [_bfba ]=_bba [_fcea ];if _fggf =_caef .SetByte (_bfba ,_bba [_fcea ]); _fggf !=nil {return _g .Wrapf (_fggf ,_fgc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bfba );};}else {_bga =(uint16 (_bba [_fcea ])<<8)|uint16 (_bba [_bbb ]);if _fggf =_caef .setTwoBytes (_bfba ,_bga );_fggf !=nil {return _g .Wrapf (_fggf ,_fgc ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_bfba ); };_ecf ++;};};};return nil ;};var _fee [256]uint8 ;func (_bfgc *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _bfgc .addBorderGeneral (left ,right ,top ,bot ,val );};func _fbf (_edc *Bitmap ,_caa int ,_eaf []byte )(_cba *Bitmap ,_eba error ){const _fgge ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032"; if _edc ==nil {return nil ,_g .Error (_fgge ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _caa < 1||_caa > 4{return nil ,_g .Error (_fgge ,"\u006c\u0065\u0076\u0065\u006c\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0069\u006e\u0020\u0073e\u0074\u0020\u007b\u0031\u002c\u0032\u002c\u0033\u002c\u0034\u007d"); };if _edc .Height <=1{return nil ,_g .Errorf (_fgge ,"\u0073o\u0075\u0072c\u0065\u0020\u0068e\u0069\u0067\u0068\u0074\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0061t\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0027\u0032\u0027\u0020-\u0020\u0069\u0073\u003a\u0020\u0027\u0025\u0064\u0027",_edc .Height ); };_cba =New (_edc .Width /2,_edc .Height /2);if _eaf ==nil {_eaf =_bggf ();};_egd :=_gdef (_edc .RowStride ,2*_cba .RowStride );switch _caa {case 1:_eba =_efb (_edc ,_cba ,_caa ,_eaf ,_egd );case 2:_eba =_fda (_edc ,_cba ,_caa ,_eaf ,_egd );case 3:_eba =_aaf (_edc ,_cba ,_caa ,_eaf ,_egd ); case 4:_eba =_gca (_edc ,_cba ,_caa ,_eaf ,_egd );};if _eba !=nil {return nil ,_eba ;};return _cba ,nil ;};func (_efcd MorphProcess )verify (_ded int ,_egcdf ,_aceg *int )error {const _faeg ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079"; switch _efcd .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_efcd .Arguments )!=2{return _g .Error (_faeg ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0064\u0027\u002c\u0020\u0027\u0065\u0027\u002c \u0027\u006f\u0027\u002c\u0020\u0027\u0063\u0027\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0032\u0020\u0061r\u0067\u0075\u006d\u0065\u006et\u0073"); };_beb ,_dbaa :=_efcd .getWidthHeight ();if _beb <=0||_dbaa <=0{return _g .Error (_faeg ,"O\u0070er\u0061t\u0069o\u006e\u003a\u0020\u0027\u0064'\u002c\u0020\u0027e\u0027\u002c\u0020\u0027\u006f'\u002c\u0020\u0027c\u0027\u0020\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073 \u0062\u006f\u0074h w\u0069\u0064\u0074\u0068\u0020\u0061n\u0064\u0020\u0068\u0065\u0069\u0067\u0068\u0074\u0020\u0074\u006f\u0020b\u0065 \u003e\u003d\u0020\u0030"); };case MopRankBinaryReduction :_ced :=len (_efcd .Arguments );*_egcdf +=_ced ;if _ced < 1||_ced > 4{return _g .Error (_faeg ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0072\u0027\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061s\u0074\u0020\u0031\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020\u006d\u006fs\u0074\u0020\u0034\u0020\u0061\u0072g\u0075\u006d\u0065n\u0074\u0073"); };for _gbdg :=0;_gbdg < _ced ;_gbdg ++{if _efcd .Arguments [_gbdg ]< 1||_efcd .Arguments [_gbdg ]> 4{return _g .Error (_faeg ,"\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0052\u0065\u0064\u0075\u0063\u0074\u0069\u006f\u006e\u0020\u006c\u0065\u0076\u0065\u006c\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 \u00280\u002c\u0020\u0034\u003e"); };};case MopReplicativeBinaryExpansion :if len (_efcd .Arguments )==0{return _g .Error (_faeg ,"\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074i\u0076\u0065\u0042in\u0061\u0072\u0079\u0045\u0078\u0070a\u006e\u0073\u0069\u006f\u006e\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020o\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006de\u006e\u0074"); };_fcb :=_efcd .Arguments [0];if _fcb !=2&&_fcb !=4&&_fcb !=8{return _g .Error (_faeg ,"R\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u0076\u0065\u0042\u0069\u006e\u0061\u0072\u0079\u0045\u0078\u0070\u0061\u006e\u0073\u0069\u006f\u006e\u0020m\u0075s\u0074\u0020\u0062\u0065 \u006f\u0066 \u0066\u0061\u0063\u0074\u006f\u0072\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d"); };*_egcdf -=_edge [_fcb /4];case MopAddBorder :if len (_efcd .Arguments )==0{return _g .Error (_faeg ,"\u0041\u0064\u0064B\u006f\u0072\u0064\u0065r\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006f\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074"); };_abfe :=_efcd .Arguments [0];if _ded > 0{return _g .Error (_faeg ,"\u0041\u0064\u0064\u0042\u006f\u0072\u0064\u0065\u0072\u0020\u006d\u0075\u0073t\u0020\u0062\u0065\u0020\u0061\u0020f\u0069\u0072\u0073\u0074\u0020\u006d\u006f\u0072\u0070\u0068\u0020\u0070\u0072o\u0063\u0065\u0073\u0073"); };if _abfe < 1{return _g .Error (_faeg ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_aceg =_abfe ;};return nil ;};func NewClassedPoints (points *Points ,classes _db .IntSlice )(*ClassedPoints ,error ){const _aedf ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073"; if points ==nil {return nil ,_g .Error (_aedf ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_g .Error (_aedf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073"); };_cega :=&ClassedPoints {Points :points ,IntSlice :classes };if _eegee :=_cega .validateIntSlice ();_eegee !=nil {return nil ,_g .Wrap (_eegee ,_aedf ,"");};return _cega ,nil ;};func _cddb ()[]int {_acac :=make ([]int ,256);_acac [0]=0;_acac [1]=7;var _beaad int ; for _beaad =2;_beaad < 4;_beaad ++{_acac [_beaad ]=_acac [_beaad -2]+6;};for _beaad =4;_beaad < 8;_beaad ++{_acac [_beaad ]=_acac [_beaad -4]+5;};for _beaad =8;_beaad < 16;_beaad ++{_acac [_beaad ]=_acac [_beaad -8]+4;};for _beaad =16;_beaad < 32;_beaad ++{_acac [_beaad ]=_acac [_beaad -16]+3; };for _beaad =32;_beaad < 64;_beaad ++{_acac [_beaad ]=_acac [_beaad -32]+2;};for _beaad =64;_beaad < 128;_beaad ++{_acac [_beaad ]=_acac [_beaad -64]+1;};for _beaad =128;_beaad < 256;_beaad ++{_acac [_beaad ]=_acac [_beaad -128];};return _acac ;};func _bagb (_ggfg ,_dgadd byte ,_efce CombinationOperator )byte {switch _efce {case CmbOpOr :return _dgadd |_ggfg ; case CmbOpAnd :return _dgadd &_ggfg ;case CmbOpXor :return _dgadd ^_ggfg ;case CmbOpXNor :return ^(_dgadd ^_ggfg );case CmbOpNot :return ^(_dgadd );default:return _dgadd ;};};func TstWSymbol (t *_f .T ,scale ...int )*Bitmap {_cegbb ,_gfca :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88}); _e .NoError (t ,_gfca );return TstGetScaledSymbol (t ,_cegbb ,scale ...);};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _decf ,_cdbcf int ;_fgdd :=src .RowStride -1;if x < 0{_cdbcf =-x ;x =0;}else if x +src .Width > dst .Width {_fgdd -=src .Width +x -dst .Width ; };if y < 0{_decf =-y ;y =0;_cdbcf +=src .RowStride ;_fgdd +=src .RowStride ;}else if y +src .Height > dst .Height {_decf =src .Height +y -dst .Height ;};var (_bbfe int ;_dbdge error ;);_cfef :=x &0x07;_dacg :=8-_cfef ;_egggd :=src .Width &0x07;_cfeg :=_dacg -_egggd ; _ccbc :=_dacg &0x07!=0;_dbec :=src .Width <=((_fgdd -_cdbcf )<<3)+_dacg ;_fge :=dst .GetByteIndex (x ,y );_beaa :=_decf +dst .Height ;if src .Height > _beaa {_bbfe =_beaa ;}else {_bbfe =src .Height ;};switch {case !_ccbc :_dbdge =_ccea (src ,dst ,_decf ,_bbfe ,_fge ,_cdbcf ,_fgdd ,op ); case _dbec :_dbdge =_ggdg (src ,dst ,_decf ,_bbfe ,_fge ,_cdbcf ,_fgdd ,_cfeg ,_cfef ,_dacg ,op );default:_dbdge =_ccgc (src ,dst ,_decf ,_bbfe ,_fge ,_cdbcf ,_fgdd ,_cfeg ,_cfef ,_dacg ,op ,_egggd );};return _dbdge ;};func (_gcge *Bitmap )nextOnPixelLow (_acf ,_cde ,_aef ,_bfcf ,_gcgf int )(_deca _b .Point ,_abf bool ,_gafg error ){const _gaad ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077"; var (_abab int ;_abba byte ;);_gcae :=_gcgf *_aef ;_gfeb :=_gcae +(_bfcf /8);if _abba ,_gafg =_gcge .GetByte (_gfeb );_gafg !=nil {return _deca ,false ,_g .Wrap (_gafg ,_gaad ,"\u0078\u0053\u0074\u0061\u0072\u0074\u0020\u0061\u006e\u0064 \u0079\u0053\u0074\u0061\u0072\u0074\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065"); };if _abba !=0{_bgb :=_bfcf -(_bfcf %8)+7;for _abab =_bfcf ;_abab <=_bgb &&_abab < _acf ;_abab ++{if _gcge .GetPixel (_abab ,_gcgf ){_deca .X =_abab ;_deca .Y =_gcgf ;return _deca ,true ,nil ;};};};_cdba :=(_bfcf /8)+1;_abab =8*_cdba ;var _fab int ;for _gfeb =_gcae +_cdba ; _abab < _acf ;_gfeb ,_abab =_gfeb +1,_abab +8{if _abba ,_gafg =_gcge .GetByte (_gfeb );_gafg !=nil {return _deca ,false ,_g .Wrap (_gafg ,_gaad ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");}; if _abba ==0{continue ;};for _fab =0;_fab < 8&&_abab < _acf ;_fab ,_abab =_fab +1,_abab +1{if _gcge .GetPixel (_abab ,_gcgf ){_deca .X =_abab ;_deca .Y =_gcgf ;return _deca ,true ,nil ;};};};for _ecec :=_gcgf +1;_ecec < _cde ;_ecec ++{_gcae =_ecec *_aef ; for _gfeb ,_abab =_gcae ,0;_abab < _acf ;_gfeb ,_abab =_gfeb +1,_abab +8{if _abba ,_gafg =_gcge .GetByte (_gfeb );_gafg !=nil {return _deca ,false ,_g .Wrap (_gafg ,_gaad ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073"); };if _abba ==0{continue ;};for _fab =0;_fab < 8&&_abab < _acf ;_fab ,_abab =_fab +1,_abab +1{if _gcge .GetPixel (_abab ,_ecec ){_deca .X =_abab ;_deca .Y =_ecec ;return _deca ,true ,nil ;};};};};return _deca ,false ,nil ;};func _gffca (_gage ,_cbbbg *Bitmap ,_edbg ,_aabd int )(_efcdd error ){const _bgbd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038"; var (_cecb ,_eddef ,_faege ,_fggd int ;_deffd ,_dcegc ,_gaed ,_edacb ,_dbfc ,_ceffc ,_fgef ,_eceb byte ;);for _cecb =0;_cecb < _edbg ;_cecb ++{_faege =_cecb *_gage .RowStride ;_fggd =_cecb *_cbbbg .RowStride ;for _eddef =0;_eddef < _aabd ;_eddef ++{if _deffd ,_efcdd =_gage .GetByte (_faege +_eddef ); _efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _dcegc ,_efcdd =_cbbbg .GetByte (_fggd +_eddef );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065"); };if _cecb > 0{if _gaed ,_efcdd =_gage .GetByte (_faege -_gage .RowStride +_eddef );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_deffd |=_gaed |(_gaed <<1)|(_gaed >>1);if _eddef > 0{if _eceb ,_efcdd =_gage .GetByte (_faege -_gage .RowStride +_eddef -1); _efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_deffd |=_eceb <<7;};if _eddef < _aabd -1{if _eceb ,_efcdd =_gage .GetByte (_faege -_gage .RowStride +_eddef +1); _efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_deffd |=_eceb >>7;};};if _eddef > 0{if _edacb ,_efcdd =_gage .GetByte (_faege +_eddef -1);_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u006a\u0020\u003e \u0030"); };_deffd |=_edacb <<7;};_deffd &=_dcegc ;if _deffd ==0||^_deffd ==0{if _efcdd =_gage .SetByte (_faege +_eddef ,_deffd );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065"); };};for {_fgef =_deffd ;_deffd =(_deffd |(_deffd >>1)|(_deffd <<1))&_dcegc ;if (_deffd ^_fgef )==0{if _efcdd =_gage .SetByte (_faege +_eddef ,_deffd );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065"); };break ;};};};};for _cecb =_edbg -1;_cecb >=0;_cecb --{_faege =_cecb *_gage .RowStride ;_fggd =_cecb *_cbbbg .RowStride ;for _eddef =_aabd -1;_eddef >=0;_eddef --{if _deffd ,_efcdd =_gage .GetByte (_faege +_eddef );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065"); };if _dcegc ,_efcdd =_cbbbg .GetByte (_fggd +_eddef );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cecb < _edbg -1{if _dbfc ,_efcdd =_gage .GetByte (_faege +_gage .RowStride +_eddef ); _efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_deffd |=_dbfc |(_dbfc <<1)|_dbfc >>1;if _eddef > 0{if _eceb ,_efcdd =_gage .GetByte (_faege +_gage .RowStride +_eddef -1); _efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0069\u0020\u003c h\u002d\u0031\u0020\u0026\u0020\u006a\u0020\u003e\u00200\u0020-\u003e \u0067e\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};_deffd |=_eceb <<7;};if _eddef < _aabd -1{if _eceb ,_efcdd =_gage .GetByte (_faege +_gage .RowStride +_eddef +1); _efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0069\u0020\u003c\u0020\u0068\u002d\u0031\u0020\u0026\u0026\u0020\u006a\u0020\u003c\u0077\u0070\u006c\u002d\u0031\u0020\u002d\u003e\u0020\u0067e\u0074\u0020\u0073\u006f\u0075r\u0063\u0065 \u0062\u0079\u0074\u0065"); };_deffd |=_eceb >>7;};};if _eddef < _aabd -1{if _ceffc ,_efcdd =_gage .GetByte (_faege +_eddef +1);_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u006a\u0020<\u0020\u0077\u0070\u006c\u0020\u002d\u0031\u0020\u002d\u003e\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020by\u0074\u0065"); };_deffd |=_ceffc >>7;};_deffd &=_dcegc ;if _deffd ==0||(^_deffd )==0{if _efcdd =_gage .SetByte (_faege +_eddef ,_deffd );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065"); };};for {_fgef =_deffd ;_deffd =(_deffd |(_deffd >>1)|(_deffd <<1))&_dcegc ;if (_deffd ^_fgef )==0{if _efcdd =_gage .SetByte (_faege +_eddef ,_deffd );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065"); };break ;};};};};return nil ;};func _aaa (_gaaf ,_adbd *Bitmap ,_fcdd *Selection )(*Bitmap ,error ){const _adfe ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _cece ,_fegb int ;if _adbd ==nil {return nil ,_g .Error (_adfe ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c"); };if _fcdd ==nil {return nil ,_g .Error (_adfe ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_cece =_fcdd .Width ;_fegb =_fcdd .Height ;if _cece ==0||_fegb ==0{return nil ,_g .Error (_adfe ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030"); };if _gaaf ==nil {return _adbd .createTemplate (),nil ;};if _degdg :=_gaaf .resizeImageData (_adbd );_degdg !=nil {return nil ,_degdg ;};return _gaaf ,nil ;};func _cfegd (_gcaae ,_gffa *Bitmap ,_abaa CombinationOperator )*Bitmap {_ddad :=New (_gcaae .Width ,_gcaae .Height ); for _dbbd :=0;_dbbd < len (_ddad .Data );_dbbd ++{_ddad .Data [_dbbd ]=_bagb (_gcaae .Data [_dbbd ],_gffa .Data [_dbbd ],_abaa );};return _ddad ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_b .Rectangle ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _fed ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064"; if bm1 ==nil {return false ,_g .Error (_fed ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c"); };if bm2 ==nil {return false ,_g .Error (_fed ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c"); };if area1 <=0||area2 <=0{return false ,_g .Error (_fed ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030"); };if downcount ==nil {return false ,_g .Error (_fed ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_g .Error (_fed ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027"); };_cdg ,_dgcd :=bm1 .Width ,bm1 .Height ;_abcg ,_feeg :=bm2 .Width ,bm2 .Height ;if _db .Abs (_cdg -_abcg )> maxDiffW {return false ,nil ;};if _db .Abs (_dgcd -_feeg )> maxDiffH {return false ,nil ;};_baab :=int (delX +_db .Sign (delX )*0.5);_eadd :=int (delY +_db .Sign (delY )*0.5); _abfg :=int (_gf .Ceil (_gf .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_cffbf :=bm2 .RowStride ;_eage :=_gcee (_eadd ,0);_fbfb :=_gdef (_feeg +_eadd ,_dgcd );_gfad :=bm1 .RowStride *_eage ;_gbb :=bm2 .RowStride *(_eage -_eadd ); var _cbda int ;if _fbfb <=_dgcd {_cbda =downcount [_fbfb -1];};_efeg :=_gcee (_baab ,0);_cbfea :=_gdef (_abcg +_baab ,_cdg );var _cdaa ,_ggag int ;if _baab >=8{_cdaa =_baab >>3;_gfad +=_cdaa ;_efeg -=_cdaa <<3;_cbfea -=_cdaa <<3;_baab &=7;}else if _baab <=-8{_ggag =-((_baab +7)>>3); _gbb +=_ggag ;_cffbf -=_ggag ;_baab +=_ggag <<3;};var (_egga ,_ceaa ,_effg int ;_cafac ,_ebb ,_egae byte ;);if _efeg >=_cbfea ||_eage >=_fbfb {return false ,nil ;};_gcdb :=(_cbfea +7)>>3;switch {case _baab ==0:for _ceaa =_eage ;_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {for _effg =0; _effg < _gcdb ;_effg ++{_cafac =bm1 .Data [_gfad +_effg ]&bm2 .Data [_gbb +_effg ];_egga +=tab [_cafac ];};if _egga >=_abfg {return true ,nil ;};if _gbfd :=_egga +downcount [_ceaa ]-_cbda ;_gbfd < _abfg {return false ,nil ;};};case _baab > 0&&_cffbf < _gcdb :for _ceaa =_eage ; _ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {_ebb =bm1 .Data [_gfad ];_egae =bm2 .Data [_gbb ]>>uint (_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];for _effg =1;_effg < _cffbf ;_effg ++{_ebb =bm1 .Data [_gfad +_effg ]; _egae =bm2 .Data [_gbb +_effg ]>>uint (_baab )|bm2 .Data [_gbb +_effg -1]<=_abfg {return true ,nil ;}else if _egga +downcount [_ceaa ]-_cbda < _abfg {return false ,nil ;};};case _baab > 0&&_cffbf >=_gcdb :for _ceaa =_eage ;_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {_ebb =bm1 .Data [_gfad ]; _egae =bm2 .Data [_gbb ]>>uint (_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];for _effg =1;_effg < _gcdb ;_effg ++{_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg ]>>uint (_baab );_egae |=bm2 .Data [_gbb +_effg -1]<=_abfg {return true ,nil ;}else if _egga +downcount [_ceaa ]-_cbda < _abfg {return false ,nil ;};};case _gcdb < _cffbf :for _ceaa =_eage ;_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {for _effg =0; _effg < _gcdb ;_effg ++{_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg ]<>uint (8+_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];};if _egga >=_abfg {return true ,nil ;}else if _geae :=_egga +downcount [_ceaa ]-_cbda ; _geae < _abfg {return false ,nil ;};};case _cffbf >=_gcdb :for _ceaa =_eage ;_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {for _effg =0;_effg < _gcdb ;_effg ++{_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg ]<>uint (8+_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];};_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg ]<=_abfg {return true ,nil ; }else if _egga +downcount [_ceaa ]-_cbda < _abfg {return false ,nil ;};};};_caag :=float32 (_egga )*float32 (_egga )/(float32 (area1 )*float32 (area2 ));if _caag >=scoreThreshold {_de .Log .Trace ("\u0063\u006f\u0075\u006e\u0074\u003a\u0020\u0025\u0064\u0020\u003c\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0020\u0025\u0064\u0020\u0062\u0075\u0074\u0020\u0073c\u006f\u0072\u0065\u0020\u0025\u0066\u0020\u003e\u003d\u0020\u0073\u0063\u006fr\u0065\u0054\u0068\u0072\u0065\u0073h\u006f\u006c\u0064 \u0025\u0066",_egga ,_abfg ,_caag ,scoreThreshold ); };return false ,nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _ceb (src ,sequence ...);};func TstRSymbol (t *_f .T ,scale ...int )*Bitmap {_cbba ,_bfffg :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90}); _e .NoError (t ,_bfffg );return TstGetScaledSymbol (t ,_cbba ,scale ...);};func (_ddadc *Bitmaps )GetBox (i int )(*_b .Rectangle ,error ){const _dcda ="\u0047\u0065\u0074\u0042\u006f\u0078";if _ddadc ==nil {return nil ,_g .Error (_dcda ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027"); };if i > len (_ddadc .Boxes )-1{return nil ,_g .Errorf (_dcda ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ddadc .Boxes [i ],nil ;};type BoundaryCondition int ; func (_cda *Bitmap )setEightPartlyBytes (_bcff ,_dgde int ,_dcbf uint64 )(_fad error ){var (_ccgf byte ;_fbb int ;);const _fbc ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _gedd :=1;_gedd <=_dgde ; _gedd ++{_fbb =64-_gedd *8;_ccgf =byte (_dcbf >>uint (_fbb )&0xff);_de .Log .Trace ("\u0074\u0065\u006d\u0070\u003a\u0020\u0025\u0030\u0038\u0062\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a %\u0064,\u0020\u0069\u0064\u0078\u003a\u0020\u0025\u0064\u002c\u0020\u0066\u0075l\u006c\u0042\u0079\u0074\u0065\u0073\u004e\u0075\u006d\u0062\u0065\u0072\u003a\u0020\u0025\u0064\u002c \u0073\u0068\u0069\u0066\u0074\u003a\u0020\u0025\u0064",_ccgf ,_bcff ,_bcff +_gedd -1,_dgde ,_fbb ); if _fad =_cda .SetByte (_bcff +_gedd -1,_ccgf );_fad !=nil {return _g .Wrap (_fad ,_fbc ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_adgf :=_cda .RowStride *8-_cda .Width ;if _adgf ==0{return nil ;};_fbb -=8;_ccgf =byte (_dcbf >>uint (_fbb )&0xff)< maxDiffW {return 0,nil ;};_dbba :=_ebca (_cefd -_efbb );if _dbba > maxDiffH {return 0,nil ;};var _adba ,_dabg int ;if delX >=0{_adba =int (delX +0.5);}else {_adba =int (delX -0.5);};if delY >=0{_dabg =int (delY +0.5); }else {_dabg =int (delY -0.5);};_defbg :=_gcee (_dabg ,0);_gggc :=_gdef (_efbb +_dabg ,_cefd );_acff :=bm1 .RowStride *_defbg ;_cceba :=bm2 .RowStride *(_defbg -_dabg );_agab :=_gcee (_adba ,0);_eadg :=_gdef (_gaee +_adba ,_eafee );_dbg :=bm2 .RowStride ; var _fff ,_ebg int ;if _adba >=8{_fff =_adba >>3;_acff +=_fff ;_agab -=_fff <<3;_eadg -=_fff <<3;_adba &=7;}else if _adba <=-8{_ebg =-((_adba +7)>>3);_cceba +=_ebg ;_dbg -=_ebg ;_adba +=_ebg <<3;};if _agab >=_eadg ||_defbg >=_gggc {return 0,nil ;};_ffc :=(_eadg +7)>>3; var (_fbff ,_geag ,_befg byte ;_gbgde ,_dbca ,_ddgb int ;);switch {case _adba ==0:for _ddgb =_defbg ;_ddgb < _gggc ;_ddgb ,_acff ,_cceba =_ddgb +1,_acff +bm1 .RowStride ,_cceba +bm2 .RowStride {for _dbca =0;_dbca < _ffc ;_dbca ++{_befg =bm1 .Data [_acff +_dbca ]&bm2 .Data [_cceba +_dbca ]; _gbgde +=tab [_befg ];};};case _adba > 0:if _dbg < _ffc {for _ddgb =_defbg ;_ddgb < _gggc ;_ddgb ,_acff ,_cceba =_ddgb +1,_acff +bm1 .RowStride ,_cceba +bm2 .RowStride {_fbff ,_geag =bm1 .Data [_acff ],bm2 .Data [_cceba ]>>uint (_adba );_befg =_fbff &_geag ; _gbgde +=tab [_befg ];for _dbca =1;_dbca < _dbg ;_dbca ++{_fbff ,_geag =bm1 .Data [_acff +_dbca ],(bm2 .Data [_cceba +_dbca ]>>uint (_adba ))|(bm2 .Data [_cceba +_dbca -1]<>uint (_adba ); _befg =_fbff &_geag ;_gbgde +=tab [_befg ];for _dbca =1;_dbca < _ffc ;_dbca ++{_fbff =bm1 .Data [_acff +_dbca ];_geag =(bm2 .Data [_cceba +_dbca ]>>uint (_adba ))|(bm2 .Data [_cceba +_dbca -1]<>uint (8+_adba );_befg =_fbff &_geag ;_gbgde +=tab [_befg ];};};}else {for _ddgb =_defbg ;_ddgb < _gggc ;_ddgb ,_acff ,_cceba =_ddgb +1,_acff +bm1 .RowStride ,_cceba +bm2 .RowStride {for _dbca =0;_dbca < _ffc -1;_dbca ++{_fbff =bm1 .Data [_acff +_dbca ]; _geag =bm2 .Data [_cceba +_dbca ]<>uint (8+_adba );_befg =_fbff &_geag ;_gbgde +=tab [_befg ];};_fbff =bm1 .Data [_acff +_dbca ];_geag =bm2 .Data [_cceba +_dbca ]< _efad {_efad =_ccag ;_ffab ++;_gccc .Values =append (_gccc .Values ,&Bitmaps {});};_gccc .Values [_ffab ].AddBitmap (_agdgf .Values [_cacf ]);};return _gccc ,nil ;};func _bfabg (_cbca *Bitmap ,_bdcc ,_facf ,_fbed ,_ebfc int ,_cgdf RasterOperator ,_cegdf *Bitmap ,_adcd ,_afbba int )error {var (_aaca bool ; _decfd bool ;_aefe byte ;_edgfef int ;_eabce int ;_cafe int ;_aecd int ;_cefa bool ;_efff int ;_dacce int ;_ggaf int ;_gafbd bool ;_fefb byte ;_bad int ;_ebac int ;_gdff int ;_ebbd byte ;_fggfb int ;_bfgba int ;_gcagb uint ;_agdbg uint ;_dada byte ;_cfeff shift ; _fdbd bool ;_bcbg bool ;_ceba ,_bdfca int ;);if _adcd &7!=0{_bfgba =8-(_adcd &7);};if _bdcc &7!=0{_eabce =8-(_bdcc &7);};if _bfgba ==0&&_eabce ==0{_dada =_eebb [0];}else {if _eabce > _bfgba {_gcagb =uint (_eabce -_bfgba );}else {_gcagb =uint (8-(_bfgba -_eabce )); };_agdbg =8-_gcagb ;_dada =_eebb [_gcagb ];};if (_bdcc &7)!=0{_aaca =true ;_edgfef =8-(_bdcc &7);_aefe =_eebb [_edgfef ];_cafe =_cbca .RowStride *_facf +(_bdcc >>3);_aecd =_cegdf .RowStride *_afbba +(_adcd >>3);_fggfb =8-(_adcd &7);if _edgfef > _fggfb {_cfeff =_geaaa ; if _fbed >=_bfgba {_fdbd =true ;};}else {_cfeff =_fbegg ;};};if _fbed < _edgfef {_decfd =true ;_aefe &=_gebag [8-_edgfef +_fbed ];};if !_decfd {_efff =(_fbed -_edgfef )>>3;if _efff !=0{_cefa =true ;_dacce =_cbca .RowStride *_facf +((_bdcc +_eabce )>>3); _ggaf =_cegdf .RowStride *_afbba +((_adcd +_eabce )>>3);};};_bad =(_bdcc +_fbed )&7;if !_decfd &&_bad !=0{_gafbd =true ;_fefb =_gebag [_bad ];_ebac =_cbca .RowStride *_facf +((_bdcc +_eabce )>>3)+_efff ;_gdff =_cegdf .RowStride *_afbba +((_adcd +_eabce )>>3)+_efff ; if _bad > int (_agdbg ){_bcbg =true ;};};switch _cgdf {case PixSrc :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ; };_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd ,_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada ); _cbca .Data [_dacce +_bdfca ]=_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada ); };_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd ,_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixNotSrc :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada ); };}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^_ebbd ,_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada ); _cbca .Data [_dacce +_bdfca ]=^_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada ); };_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^_ebbd ,_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixSrcOrDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada ); };}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd |_cbca .Data [_cafe ],_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0; _bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]|=_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ; _ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd |_cbca .Data [_ebac ],_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ; };};case PixSrcAndDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd &_cbca .Data [_cafe ],_aefe ); _cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]&=_ebbd ; };_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd &_cbca .Data [_ebac ],_fefb ); _ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixSrcXorDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada ); };}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd ^_cbca .Data [_cafe ],_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0; _bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]^=_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ; _ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd ^_cbca .Data [_ebac ],_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ; };};case PixNotSrcOrDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^_ebbd |_cbca .Data [_cafe ],_aefe ); _cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]|=^_ebbd ; };_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^_ebbd |_cbca .Data [_ebac ],_fefb ); _ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixNotSrcAndDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada ); };}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^_ebbd &_cbca .Data [_cafe ],_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0; _bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]&=^_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ; _ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^_ebbd &_cbca .Data [_ebac ],_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ; };};case PixSrcOrNotDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd |^_cbca .Data [_cafe ],_aefe ); _cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]=_ebbd |^_cbca .Data [_dacce +_bdfca ]; };_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd |^_cbca .Data [_ebac ],_fefb ); _ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixSrcAndNotDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada ); };}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd &^_cbca .Data [_cafe ],_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0; _bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]=_ebbd &^_cbca .Data [_dacce +_bdfca ];};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ; };};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd &^_cbca .Data [_ebac ],_fefb );_ebac +=_cbca .RowStride ; _gdff +=_cegdf .RowStride ;};};case PixNotPixSrcOrDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ; };_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^(_ebbd |_cbca .Data [_cafe ]),_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada ); _cbca .Data [_dacce +_bdfca ]=^(_ebbd |_cbca .Data [_dacce +_bdfca ]);};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada ); };_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^(_ebbd |_cbca .Data [_ebac ]),_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixNotPixSrcAndDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ; if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^(_ebbd &_cbca .Data [_cafe ]),_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ; };};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]=^(_ebbd &_cbca .Data [_dacce +_bdfca ]); };_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^(_ebbd &_cbca .Data [_ebac ]),_fefb ); _ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixNotPixSrcXorDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada ); };}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^(_ebbd ^_cbca .Data [_cafe ]),_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0; _bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]=^(_ebbd ^_cbca .Data [_dacce +_bdfca ]);};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ; };};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^(_ebbd ^_cbca .Data [_ebac ]),_fefb ); _ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};default:_de .Log .Debug ("\u004f\u0070e\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006e\u006f\u0074\u0020\u0070\u0065\u0072\u006d\u0069tt\u0065\u0064",_cgdf ); return _g .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064"); };return nil ;};func _ffeeg (_fcfb ,_dgdf int ,_daea string )*Selection {_cfcb :=&Selection {Height :_fcfb ,Width :_dgdf ,Name :_daea };_cfcb .Data =make ([][]SelectionValue ,_fcfb );for _dfed :=0;_dfed < _fcfb ;_dfed ++{_cfcb .Data [_dfed ]=make ([]SelectionValue ,_dgdf ); };return _cfcb ;};func TstWriteSymbols (t *_f .T ,bms *Bitmaps ,src *Bitmap ){for _egcad :=0;_egcad < bms .Size ();_egcad ++{_fgegc :=bms .Values [_egcad ];_eafc :=bms .Boxes [_egcad ];_ceead :=src .RasterOperation (_eafc .Min .X ,_eafc .Min .Y ,_fgegc .Width ,_fgegc .Height ,PixSrc ,_fgegc ,0,0); _e .NoError (t ,_ceead );};};func (_dabe *Bitmap )removeBorderGeneral (_ccbg ,_eeeef ,_dcfc ,_bggc int )(*Bitmap ,error ){const _acbf ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _ccbg < 0||_eeeef < 0||_dcfc < 0||_bggc < 0{return nil ,_g .Error (_acbf ,"\u006e\u0065g\u0061\u0074\u0069\u0076\u0065\u0020\u0062\u0072\u006f\u0064\u0065\u0072\u0020\u0072\u0065\u006d\u006f\u0076\u0065\u0020\u0076\u0061lu\u0065\u0073"); };_fca ,_eaba :=_dabe .Width ,_dabe .Height ;_edee :=_fca -_ccbg -_eeeef ;_cfb :=_eaba -_dcfc -_bggc ;if _edee <=0{return nil ,_g .Errorf (_acbf ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_edee ); };if _cfb <=0{return nil ,_g .Errorf (_acbf ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_cfb );};_abdf :=New (_edee ,_cfb );_abdf .Color =_dabe .Color ;_deb :=_abdf .RasterOperation (0,0,_edee ,_cfb ,PixSrc ,_dabe ,_ccbg ,_dcfc ); if _deb !=nil {return nil ,_g .Wrap (_deb ,_acbf ,"");};return _abdf ,nil ;};func (_ggcfa *Bitmap )setAll ()error {_cceg :=_gbee (_ggcfa ,0,0,_ggcfa .Width ,_ggcfa .Height ,PixSet ,nil ,0,0);if _cceg !=nil {return _g .Wrap (_cceg ,"\u0073\u0065\u0074\u0041\u006c\u006c",""); };return nil ;};func (_agd *Bitmap )String ()string {var _becaf ="\u000a";for _bdgc :=0;_bdgc < _agd .Height ;_bdgc ++{var _ccga string ;for _eeg :=0;_eeg < _agd .Width ;_eeg ++{_ecc :=_agd .GetPixel (_eeg ,_bdgc );if _ecc {_ccga +="\u0031";}else {_ccga +="\u0030"; };};_becaf +=_ccga +"\u000a";};return _becaf ;};func _cegb (_ege ,_dgdg *Bitmap ,_ggcfe ,_dedg int )(*Bitmap ,error ){const _dbce ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _dgdg ==nil {return nil ,_g .Error (_dbce ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };if _ggcfe < 1&&_dedg < 1{return nil ,_g .Error (_dbce ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _ggcfe ==1&&_dedg ==1{return _dgdg .Copy (),nil ;};if _ggcfe ==1||_dedg ==1{var _bafd error ; _cfdc :=SelCreateBrick (_dedg ,_ggcfe ,_dedg /2,_ggcfe /2,SelHit );_ege ,_bafd =_fgfd (_ege ,_dgdg ,_cfdc );if _bafd !=nil {return nil ,_g .Wrap (_bafd ,_dbce ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _ege ,nil ;};_adga :=SelCreateBrick (1,_ggcfe ,0,_ggcfe /2,SelHit );_gdab :=SelCreateBrick (_dedg ,1,_dedg /2,0,SelHit );_cca ,_bbce :=_adbe (nil ,_dgdg ,_adga );if _bbce !=nil {return nil ,_g .Wrap (_bbce ,_dbce ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };_ege ,_bbce =_adbe (_ege ,_cca ,_gdab );if _bbce !=nil {return nil ,_g .Wrap (_bbce ,_dbce ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_bbce =_gdc (_cca ,_ege ,_adga );if _bbce !=nil {return nil ,_g .Wrap (_bbce ,_dbce ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };_ ,_bbce =_gdc (_ege ,_cca ,_gdab );if _bbce !=nil {return nil ,_g .Wrap (_bbce ,_dbce ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _ege ,nil ;};func (_aea *Bitmap )clipRectangle (_gad ,_cgge *_b .Rectangle )(_geb *Bitmap ,_ffa error ){const _cad ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065"; if _gad ==nil {return nil ,_g .Error (_cad ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_abb ,_agdb :=_aea .Width ,_aea .Height ;_cbf ,_ffa :=ClipBoxToRectangle (_gad ,_abb ,_agdb );if _ffa !=nil {_de .Log .Warning ("\u0027\u0062ox\u0027\u0020\u0064o\u0065\u0073\u006e\u0027t o\u0076er\u006c\u0061\u0070\u0020\u0062\u0069\u0074ma\u0070\u0020\u0027\u0062\u0027\u003a\u0020%\u0076",_ffa ); return nil ,nil ;};_fcef ,_gce :=_cbf .Min .X ,_cbf .Min .Y ;_cadc ,_adab :=_cbf .Max .X -_cbf .Min .X ,_cbf .Max .Y -_cbf .Min .Y ;_geb =New (_cadc ,_adab );_geb .Text =_aea .Text ;if _ffa =_geb .RasterOperation (0,0,_cadc ,_adab ,PixSrc ,_aea ,_fcef ,_gce ); _ffa !=nil {return nil ,_g .Wrap (_ffa ,_cad ,"");};if _cgge !=nil {*_cgge =*_cbf ;};return _geb ,nil ;};func (_bbbff CombinationOperator )String ()string {var _eefg string ;switch _bbbff {case CmbOpOr :_eefg ="\u004f\u0052";case CmbOpAnd :_eefg ="\u0041\u004e\u0044"; case CmbOpXor :_eefg ="\u0058\u004f\u0052";case CmbOpXNor :_eefg ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_eefg ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_eefg ="\u004e\u004f\u0054";};return _eefg ;};func (_gabf *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_gabf .Width ,Height :_gabf .Height ,RowStride :_gabf .RowStride ,Color :_gabf .Color ,Text :_gabf .Text ,BitmapNumber :_gabf .BitmapNumber ,Special :_gabf .Special ,Data :make ([]byte ,len (_gabf .Data ))}; };func (_febcd *BitmapsArray )GetBox (i int )(*_b .Rectangle ,error ){const _egdf ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _febcd ==nil {return nil ,_g .Error (_egdf ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027"); };if i > len (_febcd .Boxes )-1{return nil ,_g .Errorf (_egdf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _febcd .Boxes [i ],nil ;};func _ccea (_fged ,_ggba *Bitmap ,_ceae ,_ecea ,_ffbcg ,_gda ,_dcea int ,_cbab CombinationOperator )error {var _fgfa int ; _edg :=func (){_fgfa ++;_ffbcg +=_ggba .RowStride ;_gda +=_fged .RowStride ;_dcea +=_fged .RowStride };for _fgfa =_ceae ;_fgfa < _ecea ;_edg (){_addd :=_ffbcg ;for _gcfe :=_gda ;_gcfe <=_dcea ;_gcfe ++{_gacfe ,_ggf :=_ggba .GetByte (_addd );if _ggf !=nil {return _ggf ; };_bfdb ,_ggf :=_fged .GetByte (_gcfe );if _ggf !=nil {return _ggf ;};if _ggf =_ggba .SetByte (_addd ,_bagb (_gacfe ,_bfdb ,_cbab ));_ggf !=nil {return _ggf ;};_addd ++;};};return nil ;};func _ddgd (_ccfaf *Bitmap ,_ccebc *_db .Stack ,_febfc ,_fgead int )(_bddeg *_b .Rectangle ,_bcee error ){const _cddaf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042"; if _ccfaf ==nil {return nil ,_g .Error (_cddaf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ccebc ==nil {return nil ,_g .Error (_cddaf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027"); };_edcc ,_efag :=_ccfaf .Width ,_ccfaf .Height ;_egccd :=_edcc -1;_cbfb :=_efag -1;if _febfc < 0||_febfc > _egccd ||_fgead < 0||_fgead > _cbfb ||!_ccfaf .GetPixel (_febfc ,_fgead ){return nil ,nil ;};_efcdg :=_b .Rect (100000,100000,0,0);if _bcee =_gebg (_ccebc ,_febfc ,_febfc ,_fgead ,1,_cbfb ,&_efcdg ); _bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bcee =_gebg (_ccebc ,_febfc ,_febfc ,_fgead +1,-1,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068"); };_efcdg .Min .X ,_efcdg .Max .X =_febfc ,_febfc ;_efcdg .Min .Y ,_efcdg .Max .Y =_fgead ,_fgead ;var (_agbb *fillSegment ;_bdga int ;);for _ccebc .Len ()> 0{if _agbb ,_bcee =_dgdee (_ccebc );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"");};_fgead =_agbb ._gdda ; for _febfc =_agbb ._fgeg -1;_febfc >=0&&_ccfaf .GetPixel (_febfc ,_fgead );_febfc --{if _bcee =_ccfaf .SetPixel (_febfc ,_fgead ,0);_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _febfc >=_agbb ._fgeg -1{for {for _febfc ++; _febfc <=_agbb ._efcee +1&&_febfc <=_egccd &&!_ccfaf .GetPixel (_febfc ,_fgead );_febfc ++{};_bdga =_febfc ;if _febfc > _agbb ._efcee +1||_febfc > _egccd {break ;};for ;_febfc <=_egccd &&_ccfaf .GetPixel (_febfc ,_fgead );_febfc ++{if _bcee =_ccfaf .SetPixel (_febfc ,_fgead ,0); _bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bcee =_gebg (_ccebc ,_bdga ,_febfc -1,_agbb ._gdda ,_agbb ._gfff ,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068"); };if _febfc > _agbb ._efcee {if _bcee =_gebg (_ccebc ,_agbb ._efcee +1,_febfc -1,_agbb ._gdda ,-_agbb ._gfff ,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};};continue ;};_bdga =_febfc +1;if _bdga < _agbb ._fgeg {if _bcee =_gebg (_ccebc ,_bdga ,_agbb ._fgeg -1,_agbb ._gdda ,-_agbb ._gfff ,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065"); };};_febfc =_agbb ._fgeg ;for {for ;_febfc <=_egccd &&_ccfaf .GetPixel (_febfc ,_fgead );_febfc ++{if _bcee =_ccfaf .SetPixel (_febfc ,_fgead ,0);_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bcee =_gebg (_ccebc ,_bdga ,_febfc -1,_agbb ._gdda ,_agbb ._gfff ,_cbfb ,&_efcdg ); _bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _febfc > _agbb ._efcee {if _bcee =_gebg (_ccebc ,_agbb ._efcee +1,_febfc -1,_agbb ._gdda ,-_agbb ._gfff ,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};for _febfc ++;_febfc <=_agbb ._efcee +1&&_febfc <=_egccd &&!_ccfaf .GetPixel (_febfc ,_fgead );_febfc ++{};_bdga =_febfc ;if _febfc > _agbb ._efcee +1||_febfc > _egccd {break ;};};};_efcdg .Max .X ++;_efcdg .Max .Y ++;return &_efcdg ,nil ;};func (_ceeg *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gbee (_ceeg ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy ); };type Boxes []*_b .Rectangle ;func _fgd (_gaag *Bitmap ,_eg ...int )(_ee *Bitmap ,_eed error ){const _dgg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _gaag ==nil {return nil ,_g .Error (_dgg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };if len (_eg )==0||len (_eg )> 4{return nil ,_g .Error (_dgg ,"t\u0068\u0065\u0072\u0065\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0061\u0074\u0020\u006cea\u0073\u0074\u0020\u006fn\u0065\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020mo\u0073\u0074 \u0034\u0020\u006c\u0065\u0076\u0065\u006c\u0073"); };if _eg [0]<=0{_de .Log .Debug ("\u006c\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030 \u002d\u0020\u006e\u006f\u0020\u0072\u0065\u0064\u0075\u0063t\u0069\u006f\u006e");_ee ,_eed =_bgff (nil ,_gaag );if _eed !=nil {return nil ,_g .Wrap (_eed ,_dgg ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030"); };return _ee ,nil ;};_bfb :=_bggf ();_ee =_gaag ;for _ccbd ,_cbe :=range _eg {if _cbe <=0{break ;};_ee ,_eed =_fbf (_ee ,_cbe ,_bfb );if _eed !=nil {return nil ,_g .Wrapf (_eed ,_dgg ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_ccbd ); };};return _ee ,nil ;};func (_cgfb Points )XSorter ()func (_bbaeb ,_bgbc int )bool {return func (_bcbd ,_dfbe int )bool {return _cgfb [_bcbd ].X < _cgfb [_dfbe ].X };};const (PixSrc RasterOperator =0xc;PixDst RasterOperator =0xa;PixNotSrc RasterOperator =0x3; PixNotDst RasterOperator =0x5;PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;PixSrcAndDst RasterOperator =0x8;PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;PixNotSrcAndDst RasterOperator =0x2; PixSrcOrNotDst RasterOperator =0xd;PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;PixMask =PixSrcAndDst ; );func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gbee (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _adbc (_geaabe *Bitmap ,_ggef *_db .Stack ,_gbgdec ,_dbeb ,_fdfd int )(_dace *_b .Rectangle ,_gdbg error ){const _dfdgg ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042"; if _geaabe ==nil {return nil ,_g .Error (_dfdgg ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ggef ==nil {return nil ,_g .Error (_dfdgg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027"); };switch _fdfd {case 4:if _dace ,_gdbg =_edgg (_geaabe ,_ggef ,_gbgdec ,_dbeb );_gdbg !=nil {return nil ,_g .Wrap (_gdbg ,_dfdgg ,"");};return _dace ,nil ;case 8:if _dace ,_gdbg =_ddgd (_geaabe ,_ggef ,_gbgdec ,_dbeb );_gdbg !=nil {return nil ,_g .Wrap (_gdbg ,_dfdgg ,""); };return _dace ,nil ;default:return nil ,_g .Errorf (_dfdgg ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u0069\u0073 \u006eo\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038\u003a\u0020\u0027\u0025\u0064\u0027",_fdfd ); };};func _ca (_gd *Bitmap ,_gaa int )(*Bitmap ,error ){const _dcc ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gd ==nil {return nil ,_g .Error (_dcc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _gaa ==1{return _bgff (nil ,_gd );};if _gaa !=2&&_gaa !=4&&_gaa !=8{return nil ,_g .Error (_dcc ,"\u0066\u0061\u0063t\u006f\u0072\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069n\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020\u0072\u0061\u006e\u0067\u0065"); };_aab :=_gaa *_gd .Width ;_gae :=_gaa *_gd .Height ;_dg :=New (_aab ,_gae );var _acb error ;switch _gaa {case 2:_acb =_fc (_dg ,_gd );case 4:_acb =_af (_dg ,_gd );case 8:_acb =_dff (_dg ,_gd );};if _acb !=nil {return nil ,_g .Wrap (_acb ,_dcc ,"");};return _dg ,nil ; };func (_cgb *Bitmap )SetDefaultPixel (){for _bfc :=range _cgb .Data {_cgb .Data [_bfc ]=byte (0xff);};};type Point struct{X ,Y float32 ;};func (_baed Points )Get (i int )(Point ,error ){if i > len (_baed )-1{return Point {},_g .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return _baed [i ],nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_gbce bool ,_beaag error ){const _ceaae ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074"; _aaed ,_abdc :=p1 .Width ,p1 .Height ;_dbed ,_efcg :=p3 .Width ,p3 .Height ;if _db .Abs (_aaed -_dbed )> maxDiffW {return false ,nil ;};if _db .Abs (_abdc -_efcg )> maxDiffH {return false ,nil ;};_ggdf :=int (float32 (area1 )*(1.0-rank )+0.5);_fbda :=int (float32 (area3 )*(1.0-rank )+0.5); var _aeb ,_ddbb int ;if delX >=0{_aeb =int (delX +0.5);}else {_aeb =int (delX -0.5);};if delY >=0{_ddbb =int (delY +0.5);}else {_ddbb =int (delY -0.5);};_dcfd :=p1 .CreateTemplate ();if _beaag =_dcfd .RasterOperation (0,0,_aaed ,_abdc ,PixSrc ,p1 ,0,0); _beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _beaag =_dcfd .RasterOperation (_aeb ,_ddbb ,_aaed ,_abdc ,PixNotSrcAndDst ,p4 ,0,0);_beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"\u0074 \u0026\u0020\u0021\u0070\u0034"); };_gbce ,_beaag =_dcfd .ThresholdPixelSum (_ggdf ,tab8 );if _beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _gbce {return false ,nil ;};if _beaag =_dcfd .RasterOperation (_aeb ,_ddbb ,_dbed ,_efcg ,PixSrc ,p3 ,0,0); _beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _beaag =_dcfd .RasterOperation (0,0,_dbed ,_efcg ,PixNotSrcAndDst ,p2 ,0,0);_beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"\u0074 \u0026\u0020\u0021\u0070\u0032"); };_gbce ,_beaag =_dcfd .ThresholdPixelSum (_fbda ,tab8 );if _beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_gbce ,nil ;};func (_agafc *Points )Add (pt *Points )error {const _edb ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064"; if _agafc ==nil {return _g .Error (_edb ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _g .Error (_edb ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064"); };*_agafc =append (*_agafc ,*pt ...);return nil ;};func (_cddga *Bitmap )setEightFullBytes (_afcb int ,_fbbg uint64 )error {if _afcb +7> len (_cddga .Data )-1{return _g .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065"); };_cddga .Data [_afcb ]=byte ((_fbbg &0xff00000000000000)>>56);_cddga .Data [_afcb +1]=byte ((_fbbg &0xff000000000000)>>48);_cddga .Data [_afcb +2]=byte ((_fbbg &0xff0000000000)>>40);_cddga .Data [_afcb +3]=byte ((_fbbg &0xff00000000)>>32);_cddga .Data [_afcb +4]=byte ((_fbbg &0xff000000)>>24); _cddga .Data [_afcb +5]=byte ((_fbbg &0xff0000)>>16);_cddga .Data [_afcb +6]=byte ((_fbbg &0xff00)>>8);_cddga .Data [_afcb +7]=byte (_fbbg &0xff);return nil ;};func TstAddSymbol (t *_f .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym ); _ggeff :=_b .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_ggeff );*x +=sym .Width +space ;};func (_ggfe *ClassedPoints )YAtIndex (i int )float32 {return (*_ggfe .Points )[_ggfe .IntSlice [i ]].Y };func (_gdeb *ClassedPoints )Less (i ,j int )bool {return _gdeb ._bdde (i ,j )}; func (_afb *Bitmap )CreateTemplate ()*Bitmap {return _afb .createTemplate ()};func (_aedd *Selection )findMaxTranslations ()(_dfagc ,_bgffc ,_afec ,_dbfdd int ){for _baca :=0;_baca < _aedd .Height ;_baca ++{for _fece :=0;_fece < _aedd .Width ;_fece ++{if _aedd .Data [_baca ][_fece ]==SelHit {_dfagc =_gcee (_dfagc ,_aedd .Cx -_fece ); _bgffc =_gcee (_bgffc ,_aedd .Cy -_baca );_afec =_gcee (_afec ,_fece -_aedd .Cx );_dbfdd =_gcee (_dbfdd ,_baca -_aedd .Cy );};};};return _dfagc ,_bgffc ,_afec ,_dbfdd ;};func (_fega MorphProcess )getWidthHeight ()(_faec ,_gged int ){return _fega .Arguments [0],_fega .Arguments [1]; };func (_gcagd Points )Size ()int {return len (_gcagd )};func (_dge *Bitmap )SetPixel (x ,y int ,pixel byte )error {_eca :=_dge .GetByteIndex (x ,y );if _eca > len (_dge .Data )-1{return _g .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_eca ); };_gafe :=_dge .GetBitOffset (x );_ddc :=uint (7-_gafe );_eafg :=_dge .Data [_eca ];var _dgeb byte ;if pixel ==1{_dgeb =_eafg |(pixel &0x01<<_ddc );}else {_dgeb =_eafg &^(1<<_ddc );};_dge .Data [_eca ]=_dgeb ;return nil ;};func (_agba *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _agba .removeBorderGeneral (left ,right ,top ,bot ); };func (_ddg *Bitmap )countPixels ()int {var (_bfda int ;_dfcg uint8 ;_daad byte ;_ggcf int ;);_ead :=_ddg .RowStride ;_eacg :=uint (_ddg .Width &0x07);if _eacg !=0{_dfcg =uint8 ((0xff<<(8-_eacg ))&0xff);_ead --;};for _edce :=0;_edce < _ddg .Height ;_edce ++{for _ggcf =0; _ggcf < _ead ;_ggcf ++{_daad =_ddg .Data [_edce *_ddg .RowStride +_ggcf ];_bfda +=int (_fee [_daad ]);};if _eacg !=0{_bfda +=int (_fee [_ddg .Data [_edce *_ddg .RowStride +_ggcf ]&_dfcg ]);};};return _bfda ;};type byWidth Bitmaps ;func (_ggfd *ClassedPoints )validateIntSlice ()error {const _bcab ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065"; for _ ,_abag :=range _ggfd .IntSlice {if _abag >=(_ggfd .Points .Size ()){return _g .Errorf (_bcab ,"c\u006c\u0061\u0073\u0073\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0076\u0061\u006ci\u0064 \u0069\u006e\u0064\u0065x\u0020\u0069n\u0020\u0074\u0068\u0065\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u003a\u0020\u0025\u0064",_abag ,_ggfd .Points .Size ()); };};return nil ;};func (_dbabf *Selection )setOrigin (_eeage ,_abdg int ){_dbabf .Cy ,_dbabf .Cx =_eeage ,_abdg };func (_fdg *Bitmap )clearAll ()error {return _fdg .RasterOperation (0,0,_fdg .Width ,_fdg .Height ,PixClr ,nil ,0,0);};const (_ SizeSelection =iota ; SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _bagb (oldByte ,newByte ,op );};func (_bfgb *Boxes )selectWithIndicator (_dabec *_db .NumSlice )(_fgda *Boxes ,_abe error ){const _eeb ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _bfgb ==nil {return nil ,_g .Error (_eeb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _dabec ==nil {return nil ,_g .Error (_eeb ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if len (*_dabec )!=len (*_bfgb ){return nil ,_g .Error (_eeb ,"\u0062\u006f\u0078\u0065\u0073\u0020\u0027\u0062\u0027\u0020\u0068\u0061\u0073\u0020\u0064\u0069\u0066\u0066\u0065\u0072\u0065\u006e\u0074\u0020s\u0069\u007a\u0065\u0020\u0074h\u0061\u006e \u0027\u006e\u0061\u0027"); };var _ccdd ,_fcgf int ;for _aggg :=0;_aggg < len (*_dabec );_aggg ++{if _ccdd ,_abe =_dabec .GetInt (_aggg );_abe !=nil {return nil ,_g .Wrap (_abe ,_eeb ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _ccdd ==1{_fcgf ++; };};if _fcgf ==len (*_bfgb ){return _bfgb ,nil ;};_ccc :=Boxes {};for _geg :=0;_geg < len (*_dabec );_geg ++{_ccdd =int ((*_dabec )[_geg ]);if _ccdd ==0{continue ;};_ccc =append (_ccc ,(*_bfgb )[_geg ]);};_fgda =&_ccc ;return _fgda ,nil ;};func (_dee *Bitmap )GetChocolateData ()[]byte {if _dee .Color ==Vanilla {_dee .inverseData (); };return _dee .Data ;};func _acaf (_accc ,_bea ,_gebc *Bitmap )(*Bitmap ,error ){const _gbaf ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _bea ==nil {return nil ,_g .Error (_gbaf ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c"); };if _gebc ==nil {return nil ,_g .Error (_gbaf ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _accc ==_gebc {return nil ,_g .Error (_gbaf ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_bea .SizesEqual (_gebc ){_de .Log .Debug ("\u0025s\u0020\u002d \u0042\u0069\u0074\u006da\u0070\u0020\u0027b\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074 e\u0071\u0075\u0061l\u0020\u0073i\u007a\u0065\u0020\u0077\u0069\u0074h\u0020\u0027b\u0032\u0027",_gbaf ); };var _fae error ;if _accc ,_fae =_bgff (_accc ,_bea );_fae !=nil {return nil ,_g .Wrap (_fae ,_gbaf ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _fae =_accc .RasterOperation (0,0,_accc .Width ,_accc .Height ,PixSrcXorDst ,_gebc ,0,0); _fae !=nil {return nil ,_g .Wrap (_fae ,_gbaf ,"");};return _accc ,nil ;};func TstWordBitmapWithSpaces (t *_f .T ,scale ...int )*Bitmap {_afdaa :=1;if len (scale )> 0{_afdaa =scale [0];};_agfac :=3;_gfeba :=9+7+15+2*_agfac +2*_agfac ;_ggca :=5+_agfac +5+2*_agfac ; _adeaf :=New (_gfeba *_afdaa ,_ggca *_afdaa );_eaaf :=&Bitmaps {};var _bccec *int ;_agfac *=_afdaa ;_eecfd :=_agfac ;_bccec =&_eecfd ;_aege :=_agfac ;_fabc :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstOSymbol (t ,scale ...); TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,_agfac );_fabc =TstISymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,_agfac );_fabc =TstNSymbol (t ,scale ...); TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,0);*_bccec =_agfac ;_aege =5*_afdaa +_agfac ; _fabc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,_agfac );_fabc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa ); _fabc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa ); _fabc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,0);TstWriteSymbols (t ,_eaaf ,_adeaf );return _adeaf ;};func (_acee *Bitmaps )SortByWidth (){_gcccb :=(*byWidth )(_acee );_dd .Sort (_gcccb )};func _gbcc (_ecda *Bitmap ,_gcb ,_ccbga int ,_egbf ,_afa int ,_fgce RasterOperator ){var (_edcb bool ; _fadfg bool ;_gfage int ;_deff int ;_gbbd int ;_afgb int ;_bega bool ;_cbbg byte ;);_ageg :=8-(_gcb &7);_bgbg :=_eebb [_ageg ];_facb :=_ecda .RowStride *_ccbga +(_gcb >>3);if _egbf < _ageg {_edcb =true ;_bgbg &=_gebag [8-_ageg +_egbf ];};if !_edcb {_gfage =(_egbf -_ageg )>>3; if _gfage !=0{_fadfg =true ;_deff =_facb +1;};};_gbbd =(_gcb +_egbf )&7;if !_edcb &&_gbbd !=0{_bega =true ;_cbbg =_gebag [_gbbd ];_afgb =_facb +1+_gfage ;};var _egbga ,_afcbb int ;switch _fgce {case PixClr :for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_facb ]=_fcac (_ecda .Data [_facb ],0x0,_bgbg ); _facb +=_ecda .RowStride ;};if _fadfg {for _egbga =0;_egbga < _afa ;_egbga ++{for _afcbb =0;_afcbb < _gfage ;_afcbb ++{_ecda .Data [_deff +_afcbb ]=0x0;};_deff +=_ecda .RowStride ;};};if _bega {for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_afgb ]=_fcac (_ecda .Data [_afgb ],0x0,_cbbg ); _afgb +=_ecda .RowStride ;};};case PixSet :for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_facb ]=_fcac (_ecda .Data [_facb ],0xff,_bgbg );_facb +=_ecda .RowStride ;};if _fadfg {for _egbga =0;_egbga < _afa ;_egbga ++{for _afcbb =0;_afcbb < _gfage ; _afcbb ++{_ecda .Data [_deff +_afcbb ]=0xff;};_deff +=_ecda .RowStride ;};};if _bega {for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_afgb ]=_fcac (_ecda .Data [_afgb ],0xff,_cbbg );_afgb +=_ecda .RowStride ;};};case PixNotDst :for _egbga =0;_egbga < _afa ; _egbga ++{_ecda .Data [_facb ]=_fcac (_ecda .Data [_facb ],^_ecda .Data [_facb ],_bgbg );_facb +=_ecda .RowStride ;};if _fadfg {for _egbga =0;_egbga < _afa ;_egbga ++{for _afcbb =0;_afcbb < _gfage ;_afcbb ++{_ecda .Data [_deff +_afcbb ]=^(_ecda .Data [_deff +_afcbb ]); };_deff +=_ecda .RowStride ;};};if _bega {for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_afgb ]=_fcac (_ecda .Data [_afgb ],^_ecda .Data [_afgb ],_cbbg );_afgb +=_ecda .RowStride ;};};};};func (_eec *Bitmap )connComponentsBB (_cabg int )(_gbdaf *Boxes ,_dbac error ){const _ceff ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042"; if _cabg !=4&&_cabg !=8{return nil ,_g .Error (_ceff ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _eec .Zero (){return &Boxes {},nil ; };_eec .setPadBits (0);_edeef ,_dbac :=_bgff (nil ,_eec );if _dbac !=nil {return nil ,_g .Wrap (_dbac ,_ceff ,"\u0062\u006d\u0031");};_ceef :=&_db .Stack {};_ceef .Aux =&_db .Stack {};_gbdaf =&Boxes {};var (_ddef ,_ddbe int ;_affb _b .Point ;_bbg bool ; _edeb *_b .Rectangle ;);for {if _affb ,_bbg ,_dbac =_edeef .nextOnPixel (_ddbe ,_ddef );_dbac !=nil {return nil ,_g .Wrap (_dbac ,_ceff ,"");};if !_bbg {break ;};if _edeb ,_dbac =_adbc (_edeef ,_ceef ,_affb .X ,_affb .Y ,_cabg );_dbac !=nil {return nil ,_g .Wrap (_dbac ,_ceff ,""); };if _dbac =_gbdaf .Add (_edeb );_dbac !=nil {return nil ,_g .Wrap (_dbac ,_ceff ,"");};_ddbe =_affb .X ;_ddef =_affb .Y ;};return _gbdaf ,nil ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};type shift int ;func _fgfd (_face ,_aega *Bitmap ,_gecgb *Selection )(*Bitmap ,error ){const _ffca ="\u006f\u0070\u0065\u006e"; var _ddbbg error ;_face ,_ddbbg =_aaa (_face ,_aega ,_gecgb );if _ddbbg !=nil {return nil ,_g .Wrap (_ddbbg ,_ffca ,"");};_ecfa ,_ddbbg :=_adbe (nil ,_aega ,_gecgb );if _ddbbg !=nil {return nil ,_g .Wrap (_ddbbg ,_ffca ,"");};_ ,_ddbbg =_gdc (_face ,_ecfa ,_gecgb ); if _ddbbg !=nil {return nil ,_g .Wrap (_ddbbg ,_ffca ,"");};return _face ,nil ;};func TstCSymbol (t *_f .T )*Bitmap {t .Helper ();_eadf :=New (6,6);_e .NoError (t ,_eadf .SetPixel (1,0,1));_e .NoError (t ,_eadf .SetPixel (2,0,1));_e .NoError (t ,_eadf .SetPixel (3,0,1)); _e .NoError (t ,_eadf .SetPixel (4,0,1));_e .NoError (t ,_eadf .SetPixel (0,1,1));_e .NoError (t ,_eadf .SetPixel (5,1,1));_e .NoError (t ,_eadf .SetPixel (0,2,1));_e .NoError (t ,_eadf .SetPixel (0,3,1));_e .NoError (t ,_eadf .SetPixel (0,4,1));_e .NoError (t ,_eadf .SetPixel (5,4,1)); _e .NoError (t ,_eadf .SetPixel (1,5,1));_e .NoError (t ,_eadf .SetPixel (2,5,1));_e .NoError (t ,_eadf .SetPixel (3,5,1));_e .NoError (t ,_eadf .SetPixel (4,5,1));return _eadf ;};func _cddge (_fdca ,_ecff *Bitmap ,_dfg ,_cecde int )(*Bitmap ,error ){const _cegc ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b"; if _ecff ==nil {return nil ,_g .Error (_cegc ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dfg < 1||_cecde < 1{return nil ,_g .Error (_cegc ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031"); };if _dfg ==1&&_cecde ==1{return _bgff (_fdca ,_ecff );};if MorphBC ==SymmetricMorphBC {_efab ,_degf :=_becd (_fdca ,_ecff ,_dfg ,_cecde );if _degf !=nil {return nil ,_g .Wrap (_degf ,_cegc ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043"); };return _efab ,nil ;};_agac :=_gcee (_dfg /2,_cecde /2);_bcca :=8*((_agac +7)/8);_edfg ,_fgea :=_ecff .AddBorder (_bcca ,0);if _fgea !=nil {return nil ,_g .Wrapf (_fgea ,_cegc ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_bcca ); };var _dcgc ,_bae *Bitmap ;if _dfg ==1||_cecde ==1{_gagca :=SelCreateBrick (_cecde ,_dfg ,_cecde /2,_dfg /2,SelHit );_dcgc ,_fgea =_bccb (nil ,_edfg ,_gagca );if _fgea !=nil {return nil ,_g .Wrap (_fgea ,_cegc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };}else {_eabb :=SelCreateBrick (1,_dfg ,0,_dfg /2,SelHit );_accf ,_gfdfb :=_gdc (nil ,_edfg ,_eabb );if _gfdfb !=nil {return nil ,_g .Wrap (_gfdfb ,_cegc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065"); };_gcaf :=SelCreateBrick (_cecde ,1,_cecde /2,0,SelHit );_dcgc ,_gfdfb =_gdc (nil ,_accf ,_gcaf );if _gfdfb !=nil {return nil ,_g .Wrap (_gfdfb ,_cegc ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };if _ ,_gfdfb =_adbe (_accf ,_dcgc ,_eabb );_gfdfb !=nil {return nil ,_g .Wrap (_gfdfb ,_cegc ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_gfdfb =_adbe (_dcgc ,_accf ,_gcaf );_gfdfb !=nil {return nil ,_g .Wrap (_gfdfb ,_cegc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065"); };};if _bae ,_fgea =_dcgc .RemoveBorder (_bcca );_fgea !=nil {return nil ,_g .Wrap (_fgea ,_cegc ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _fdca ==nil {return _bae ,nil ;};if _ ,_fgea =_bgff (_fdca ,_bae );_fgea !=nil {return nil ,_fgea ;};return _fdca ,nil ; };func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _dac ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_eda :=_cff (width ,height );_eda .Data =data ;if _aeg :=((width *height )+7)>>3; len (data )< _aeg {return nil ,_g .Errorf (_dac ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064a\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a\u0020\u0027\u0025\u0064\u0027\u002e\u0020\u0054\u0068\u0065\u0020\u0064\u0061t\u0061\u0020s\u0068\u006fu\u006c\u0064\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0061\u0074 l\u0065\u0061\u0073\u0074\u003a\u0020\u0027\u0025\u0064'\u0020\u0062\u0079\u0074\u0065\u0073",len (data ),_aeg ); };if _daca :=_eda .addPadBits ();_daca !=nil {return nil ,_g .Wrap (_daca ,_dac ,"");};return _eda ,nil ;};func TstDSymbol (t *_f .T ,scale ...int )*Bitmap {_agbae ,_fagde :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_e .NoError (t ,_fagde );return TstGetScaledSymbol (t ,_agbae ,scale ...); };func (_aec *Bitmap )Equals (s *Bitmap )bool {if len (_aec .Data )!=len (s .Data )||_aec .Width !=s .Width ||_aec .Height !=s .Height {return false ;};for _fdfg :=0;_fdfg < _aec .Height ;_fdfg ++{_bfga :=_fdfg *_aec .RowStride ;for _bbaa :=0;_bbaa < _aec .RowStride ; _bbaa ++{if _aec .Data [_bfga +_bbaa ]!=s .Data [_bfga +_bbaa ]{return false ;};};};return true ;};func TstISymbol (t *_f .T ,scale ...int )*Bitmap {_bgec ,_gdcc :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_e .NoError (t ,_gdcc );return TstGetScaledSymbol (t ,_bgec ,scale ...); };func (_fcaa *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _bded ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";if i >=_fcaa .IntSlice .Size (){return 0,_g .Errorf (_bded ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i ); };return int (_fcaa .YAtIndex (i )),nil ;};func (_gfbf *Bitmap )Zero ()bool {_cgbf :=_gfbf .Width /8;_cfaa :=_gfbf .Width &7;var _deea byte ;if _cfaa !=0{_deea =byte (0xff< 0{if _gfbf .Data [_cgg ]&_deea !=0{return false ;};};};return true ;};func init (){const _ffcg ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e"; _efdb =New (50,40);var _ebfa error ;_efdb ,_ebfa =_efdb .AddBorder (2,1);if _ebfa !=nil {panic (_g .Wrap (_ebfa ,_ffcg ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_cfdf ,_ebfa =NewWithData (50,22,_daadf );if _ebfa !=nil {panic (_g .Wrap (_ebfa ,_ffcg ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070")); };};func Extract (roi _b .Rectangle ,src *Bitmap )(*Bitmap ,error ){_cfgc :=New (roi .Dx (),roi .Dy ());_bfbe :=roi .Min .X &0x07;_edece :=8-_bfbe ;_acfd :=uint (8-_cfgc .Width &0x07);_dcd :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_bgdd :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y ); _fcgdg :=_cfgc .RowStride ==_bgdd +1-_dcd ;var _adf int ;for _beg :=roi .Min .Y ;_beg < roi .Max .Y ;_beg ++{_ceag :=_dcd ;_age :=_adf ;switch {case _dcd ==_bgdd :_efba ,_bdbd :=src .GetByte (_ceag );if _bdbd !=nil {return nil ,_bdbd ;};_efba <<=uint (_bfbe ); _bdbd =_cfgc .SetByte (_age ,_agaf (_acfd ,_efba ));if _bdbd !=nil {return nil ,_bdbd ;};case _bfbe ==0:for _ecdff :=_dcd ;_ecdff <=_bgdd ;_ecdff ++{_affd ,_daed :=src .GetByte (_ceag );if _daed !=nil {return nil ,_daed ;};_ceag ++;if _ecdff ==_bgdd &&_fcgdg {_affd =_agaf (_acfd ,_affd ); };_daed =_cfgc .SetByte (_age ,_affd );if _daed !=nil {return nil ,_daed ;};_age ++;};default:_gffc :=_bfae (src ,_cfgc ,uint (_bfbe ),uint (_edece ),_acfd ,_dcd ,_bgdd ,_fcgdg ,_ceag ,_age );if _gffc !=nil {return nil ,_gffc ;};};_dcd +=src .RowStride ; _bgdd +=src .RowStride ;_adf +=_cfgc .RowStride ;};return _cfgc ,nil ;};func (_baec *Bitmaps )String ()string {_eaab :=_d .Builder {};for _ ,_cdbef :=range _baec .Values {_eaab .WriteString (_cdbef .String ());_eaab .WriteRune ('\n');};return _eaab .String (); };func _bced (_gdgf ,_ggede *Bitmap ,_fadc ,_eccf int )(_cffa error ){const _babd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_ggea ,_edde ,_dcdb ,_degg int ;_decaa ,_aged ,_adda ,_fcfe ,_bdgf ,_eabe ,_gebf byte ; );for _ggea =0;_ggea < _fadc ;_ggea ++{_dcdb =_ggea *_gdgf .RowStride ;_degg =_ggea *_ggede .RowStride ;for _edde =0;_edde < _eccf ;_edde ++{_decaa ,_cffa =_gdgf .GetByte (_dcdb +_edde );if _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t"); };_aged ,_cffa =_ggede .GetByte (_degg +_edde );if _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _ggea > 0{_adda ,_cffa =_gdgf .GetByte (_dcdb -_gdgf .RowStride +_edde );if _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0069\u0020\u003e \u0030"); };_decaa |=_adda ;};if _edde > 0{_fcfe ,_cffa =_gdgf .GetByte (_dcdb +_edde -1);if _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u006a\u0020\u003e \u0030");};_decaa |=_fcfe <<7;};_decaa &=_aged ;if _decaa ==0||(^_decaa )==0{if _cffa =_gdgf .SetByte (_dcdb +_edde ,_decaa ); _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_gebf =_decaa ;_decaa =(_decaa |(_decaa >>1)|(_decaa <<1))&_aged ;if (_decaa ^_gebf )==0{if _cffa =_gdgf .SetByte (_dcdb +_edde ,_decaa ); _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _ggea =_fadc -1;_ggea >=0;_ggea --{_dcdb =_ggea *_gdgf .RowStride ;_degg =_ggea *_ggede .RowStride ; for _edde =_eccf -1;_edde >=0;_edde --{if _decaa ,_cffa =_gdgf .GetByte (_dcdb +_edde );_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _aged ,_cffa =_ggede .GetByte (_degg +_edde ); _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _ggea < _fadc -1{if _bdgf ,_cffa =_gdgf .GetByte (_dcdb +_gdgf .RowStride +_edde );_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031"); };_decaa |=_bdgf ;};if _edde < _eccf -1{if _eabe ,_cffa =_gdgf .GetByte (_dcdb +_edde +1);_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_decaa |=_eabe >>7; };_decaa &=_aged ;if _decaa ==0||(^_decaa )==0{if _cffa =_gdgf .SetByte (_dcdb +_edde ,_decaa );_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006d\u0061\u0073k\u0065\u0064\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061i\u006c\u0065\u0064"); };continue ;};for {_gebf =_decaa ;_decaa =(_decaa |(_decaa >>1)|(_decaa <<1))&_aged ;if (_decaa ^_gebf )==0{if _cffa =_gdgf .SetByte (_dcdb +_edde ,_decaa );_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e"); };break ;};};};};return nil ;};func (_bcdg *BitmapsArray )AddBox (box *_b .Rectangle ){_bcdg .Boxes =append (_bcdg .Boxes ,box )};func _ebba (_cead ,_dega *Bitmap ,_cbbb ,_fdga int )(*Bitmap ,error ){const _acbfa ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b"; if _dega ==nil {return nil ,_g .Error (_acbfa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cbbb < 1||_fdga < 1{return nil ,_g .Error (_acbfa ,"\u0068\u0073\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069\u007a\u0065\u0020\u0061\u0072e\u0020\u006e\u006f\u0074\u0020\u0067\u0072e\u0061\u0074\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u006fr\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031"); };if _cbbb ==1&&_fdga ==1{_agdg ,_cacc :=_bgff (_cead ,_dega );if _cacc !=nil {return nil ,_g .Wrap (_cacc ,_acbfa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _agdg ,nil ;};if _cbbb ==1||_fdga ==1{_fbbdf :=SelCreateBrick (_fdga ,_cbbb ,_fdga /2,_cbbb /2,SelHit );_gbbb ,_cfga :=_adbe (_cead ,_dega ,_fbbdf );if _cfga !=nil {return nil ,_g .Wrap (_cfga ,_acbfa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _gbbb ,nil ;};_bffc :=SelCreateBrick (1,_cbbb ,0,_cbbb /2,SelHit );_dafe :=SelCreateBrick (_fdga ,1,_fdga /2,0,SelHit );_afbe ,_ffee :=_adbe (nil ,_dega ,_bffc );if _ffee !=nil {return nil ,_g .Wrap (_ffee ,_acbfa ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };_cead ,_ffee =_adbe (_cead ,_afbe ,_dafe );if _ffee !=nil {return nil ,_g .Wrap (_ffee ,_acbfa ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _cead ,nil ;};func (_deg *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _deg .Copy (),nil ; };_eafe ,_efe :=_deg .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _efe !=nil {return nil ,_g .Wrap (_efe ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _eafe ,nil ;};type SizeComparison int ;type RasterOperator int ; func (_aedc *Bitmaps )AddBitmap (bm *Bitmap ){_aedc .Values =append (_aedc .Values ,bm )};func _acbb (_ffb *Bitmap ,_fcg ,_dgc int )(*Bitmap ,error ){const _bf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065"; if _ffb ==nil {return nil ,_g .Error (_bf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fcg <=0||_dgc <=0{return nil ,_g .Error (_bf ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0073\u0063\u0061l\u0065\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u003a\u0020<\u003d\u0020\u0030"); };if _fcg ==_dgc {if _fcg ==1{_ab ,_bbf :=_bgff (nil ,_ffb );if _bbf !=nil {return nil ,_g .Wrap (_bbf ,_bf ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _ab ,nil ;};if _fcg ==2||_fcg ==4||_fcg ==8{_cbg ,_gcf :=_ca (_ffb ,_fcg ); if _gcf !=nil {return nil ,_g .Wrap (_gcf ,_bf ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _cbg ,nil ;};};_fccb :=_fcg *_ffb .Width ;_cea :=_dgc *_ffb .Height ;_dfa :=New (_fccb ,_cea );_bfa :=_dfa .RowStride ; var (_afc ,_fa ,_cag ,_bdf ,_bdfc int ;_gaf byte ;_afcg error ;);for _fa =0;_fa < _ffb .Height ;_fa ++{_afc =_dgc *_fa *_bfa ;for _cag =0;_cag < _ffb .Width ;_cag ++{if _cbd :=_ffb .GetPixel (_cag ,_fa );_cbd {_bdfc =_fcg *_cag ;for _bdf =0;_bdf < _fcg ; _bdf ++{_dfa .setBit (_afc *8+_bdfc +_bdf );};};};for _bdf =1;_bdf < _dgc ;_bdf ++{_caf :=_afc +_bdf *_bfa ;for _ecg :=0;_ecg < _bfa ;_ecg ++{if _gaf ,_afcg =_dfa .GetByte (_afc +_ecg );_afcg !=nil {return nil ,_g .Wrapf (_afcg ,_bf ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_bdf ); };if _afcg =_dfa .SetByte (_caf +_ecg ,_gaf );_afcg !=nil {return nil ,_g .Wrap (_afcg ,_bf ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _dfa ,nil ;};func (_dbdg *Bitmap )GetVanillaData ()[]byte {if _dbdg .Color ==Chocolate {_dbdg .inverseData (); };return _dbdg .Data ;};func (_gaac *Bitmaps )selectByIndicator (_ccfb *_db .NumSlice )(_ddeed *Bitmaps ,_beae error ){const _edcbe ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _gaac ==nil {return nil ,_g .Error (_edcbe ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _ccfb ==nil {return nil ,_g .Error (_edcbe ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064"); };if len (_gaac .Values )==0{return _gaac ,nil ;};if len (*_ccfb )!=len (_gaac .Values ){return nil ,_g .Errorf (_edcbe ,"\u006ea\u0020\u006ce\u006e\u0067\u0074\u0068:\u0020\u0025\u0064,\u0020\u0069\u0073\u0020\u0064\u0069\u0066\u0066\u0065re\u006e\u0074\u0020t\u0068\u0061n\u0020\u0062\u0069\u0074\u006d\u0061p\u0073\u003a \u0025\u0064",len (*_ccfb ),len (_gaac .Values )); };var _fdcg ,_ebdg ,_ccab int ;for _ebdg =0;_ebdg < len (*_ccfb );_ebdg ++{if _fdcg ,_beae =_ccfb .GetInt (_ebdg );_beae !=nil {return nil ,_g .Wrap (_beae ,_edcbe ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _fdcg ==1{_ccab ++; };};if _ccab ==len (_gaac .Values ){return _gaac ,nil ;};_ddeed =&Bitmaps {};_egfee :=len (_gaac .Values )==len (_gaac .Boxes );for _ebdg =0;_ebdg < len (*_ccfb );_ebdg ++{if _fdcg =int ((*_ccfb )[_ebdg ]);_fdcg ==0{continue ;};_ddeed .Values =append (_ddeed .Values ,_gaac .Values [_ebdg ]); if _egfee {_ddeed .Boxes =append (_ddeed .Boxes ,_gaac .Boxes [_ebdg ]);};};return _ddeed ,nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func TstPSymbol (t *_f .T )*Bitmap {t .Helper ();_adeae :=New (5,8);_e .NoError (t ,_adeae .SetPixel (0,0,1)); _e .NoError (t ,_adeae .SetPixel (1,0,1));_e .NoError (t ,_adeae .SetPixel (2,0,1));_e .NoError (t ,_adeae .SetPixel (3,0,1));_e .NoError (t ,_adeae .SetPixel (4,1,1));_e .NoError (t ,_adeae .SetPixel (0,1,1));_e .NoError (t ,_adeae .SetPixel (4,2,1)); _e .NoError (t ,_adeae .SetPixel (0,2,1));_e .NoError (t ,_adeae .SetPixel (4,3,1));_e .NoError (t ,_adeae .SetPixel (0,3,1));_e .NoError (t ,_adeae .SetPixel (0,4,1));_e .NoError (t ,_adeae .SetPixel (1,4,1));_e .NoError (t ,_adeae .SetPixel (2,4,1)); _e .NoError (t ,_adeae .SetPixel (3,4,1));_e .NoError (t ,_adeae .SetPixel (0,5,1));_e .NoError (t ,_adeae .SetPixel (0,6,1));_e .NoError (t ,_adeae .SetPixel (0,7,1));return _adeae ;};func _dff (_ff ,_ccb *Bitmap )(_dfb error ){const _fdd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038"; _ga :=_ccb .RowStride ;_efg :=_ff .RowStride ;var _fb ,_gee ,_gc ,_bge ,_ea int ;for _gc =0;_gc < _ccb .Height ;_gc ++{_fb =_gc *_ga ;_gee =8*_gc *_efg ;for _bge =0;_bge < _ga ;_bge ++{if _dfb =_ff .setEightBytes (_gee +_bge *8,_aebe [_ccb .Data [_fb +_bge ]]); _dfb !=nil {return _g .Wrap (_dfb ,_fdd ,"");};};for _ea =1;_ea < 8;_ea ++{for _bge =0;_bge < _efg ;_bge ++{if _dfb =_ff .SetByte (_gee +_ea *_efg +_bge ,_ff .Data [_gee +_bge ]);_dfb !=nil {return _g .Wrap (_dfb ,_fdd ,"");};};};};return nil ;};const (_ LocationFilter =iota ; LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func _ccgc (_eabc ,_bef *Bitmap ,_bcfe ,_bde ,_bbbf ,_egcc ,_bbcb ,_ggbfc ,_bbdf ,_ccfa int ,_gcaa CombinationOperator ,_gaea int )error {var _geaab int ; _gecf :=func (){_geaab ++;_bbbf +=_bef .RowStride ;_egcc +=_eabc .RowStride ;_bbcb +=_eabc .RowStride };for _geaab =_bcfe ;_geaab < _bde ;_gecf (){var _fccc uint16 ;_edac :=_bbbf ;for _bgd :=_egcc ;_bgd <=_bbcb ;_bgd ++{_dgdeg ,_fgec :=_bef .GetByte (_edac ); if _fgec !=nil {return _fgec ;};_gbebb ,_fgec :=_eabc .GetByte (_bgd );if _fgec !=nil {return _fgec ;};_fccc =(_fccc |(uint16 (_gbebb )&0xff))<>8);if _fgec =_bef .SetByte (_edac ,_bagb (_dgdeg ,_gbebb ,_gcaa ));_fgec !=nil {return _fgec ; };_edac ++;_fccc <<=uint (_bbdf );if _bgd ==_bbcb {_gbebb =byte (_fccc >>(8-uint8 (_ccfa )));if _gaea !=0{_gbebb =_agaf (uint (8+_ggbfc ),_gbebb );};_dgdeg ,_fgec =_bef .GetByte (_edac );if _fgec !=nil {return _fgec ;};if _fgec =_bef .SetByte (_edac ,_bagb (_dgdeg ,_gbebb ,_gcaa )); _fgec !=nil {return _fgec ;};};};};return nil ;};func (_ccfg *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _fecd ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _ccfg ==nil {return nil ,_g .Error (_fecd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073"); };if i > len (_ccfg .Values )-1{return nil ,_g .Errorf (_fecd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ccfg .Values [i ],nil ;};func (_egab *ClassedPoints )SortByY (){_egab ._bdde =_egab .ySortFunction (); _dd .Sort (_egab )};func (_ffbc *Bitmap )ToImage ()_b .Image {_dfff ,_ffg :=_cg .NewImage (_ffbc .Width ,_ffbc .Height ,1,1,_ffbc .Data ,nil ,nil );if _ffg !=nil {_de .Log .Error ("\u0043\u006f\u006e\u0076\u0065\u0072\u0074\u0069\u006e\u0067\u0020j\u0062\u0069\u0067\u0032\u002e\u0042\u0069\u0074m\u0061p\u0020\u0074\u006f\u0020\u0069\u006d\u0061\u0067\u0065\u0075\u0074\u0069\u006c\u002e\u0049\u006d\u0061\u0067e\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_ffg ); };return _dfff ;};func _bcb ()(_dfd [256]uint64 ){for _baa :=0;_baa < 256;_baa ++{if _baa &0x01!=0{_dfd [_baa ]|=0xff;};if _baa &0x02!=0{_dfd [_baa ]|=0xff00;};if _baa &0x04!=0{_dfd [_baa ]|=0xff0000;};if _baa &0x08!=0{_dfd [_baa ]|=0xff000000;};if _baa &0x10!=0{_dfd [_baa ]|=0xff00000000; };if _baa &0x20!=0{_dfd [_baa ]|=0xff0000000000;};if _baa &0x40!=0{_dfd [_baa ]|=0xff000000000000;};if _baa &0x80!=0{_dfd [_baa ]|=0xff00000000000000;};};return _dfd ;};func (_daga *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _eagab ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068"; if len (_daga .Values )==0{return nil ,_g .Error (_eagab ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_egfe :=&BitmapsArray {};_daga .SortByWidth ();_dged :=-1;_bfee :=-1;for _ccega :=0;_ccega < len (_daga .Values ); _ccega ++{_deeb :=_daga .Values [_ccega ].Width ;if _deeb > _dged {_dged =_deeb ;_bfee ++;_egfe .Values =append (_egfe .Values ,&Bitmaps {});};_egfe .Values [_bfee ].AddBitmap (_daga .Values [_ccega ]);};return _egfe ,nil ;};