2021-01-26 01:31:56 +00:00

12 lines
195 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package bitmap ;import (_fa "encoding/binary";_e "github.com/stretchr/testify/require";_ab "github.com/unidoc/unipdf/v3/common";_de "github.com/unidoc/unipdf/v3/internal/bitwise";_b "github.com/unidoc/unipdf/v3/internal/imageutil";_dc "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_f "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ad "image";_c "math";_a "sort";_d "strings";_gg "testing";);func (_bae *Bitmap )Zero ()bool {_bbd :=_bae .Width /8;_bfa :=_bae .Width &7;var _eee byte ;if _bfa !=0{_eee =byte (0xff<<uint (8-_bfa ));};var _cef ,_daa ,_eac int ;for _daa =0;_daa < _bae .Height ;_daa ++{_cef =_bae .RowStride *_daa ;for _eac =0;_eac < _bbd ;_eac ,_cef =_eac +1,_cef +1{if _bae .Data [_cef ]!=0{return false ;};};if _bfa > 0{if _bae .Data [_cef ]&_eee !=0{return false ;};};};return true ;};func (_gccb *ClassedPoints )Less (i ,j int )bool {return _gccb ._beca (i ,j )};func _ae (_fgb *Bitmap ,_aa ...int )(_ebe *Bitmap ,_fb error ){const _aca ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _fgb ==nil {return nil ,_f .Error (_aca ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_aa )==0||len (_aa )> 4{return nil ,_f .Error (_aca ,"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 _aa [0]<=0{_ab .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");_ebe ,_fb =_baec (nil ,_fgb );if _fb !=nil {return nil ,_f .Wrap (_fb ,_aca ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");};return _ebe ,nil ;};_fdc :=_cea ();_ebe =_fgb ;for _ced ,_bdb :=range _aa {if _bdb <=0{break ;};_ebe ,_fb =_daf (_ebe ,_bdb ,_fdc );if _fb !=nil {return nil ,_f .Wrapf (_fb ,_aca ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_ced );};};return _ebe ,nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _adgd (d ,s ,hSize ,vSize )};func (_gcc *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_gcc .Width ,Height :_gcc .Height ,RowStride :_gcc .RowStride ,Color :_gcc .Color ,Text :_gcc .Text ,BitmapNumber :_gcc .BitmapNumber ,Special :_gcc .Special ,Data :make ([]byte ,len (_gcc .Data ))};};func (_cacf *Bitmap )CountPixels ()int {return _cacf .countPixels ()};func (_dbad *byWidth )Len ()int {return len (_dbad .Values )};func (_dggd *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _gfega ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _aefd :=_dggd .validateIntSlice ();_aefd !=nil {return nil ,_f .Wrap (_aefd ,_gfega ,"");};if _dggd .IntSlice .Size ()==0{return nil ,_f .Error (_gfega ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_dggd .SortByY ();var (_gacd []*ClassedPoints ;_beea int ;);_aaga :=-1;var _eaec *ClassedPoints ;for _gfec :=0;_gfec < len (_dggd .IntSlice );_gfec ++{_beea =int (_dggd .YAtIndex (_gfec ));if _beea !=_aaga {_eaec =&ClassedPoints {Points :_dggd .Points };_aaga =_beea ;_gacd =append (_gacd ,_eaec );};_eaec .IntSlice =append (_eaec .IntSlice ,_dggd .IntSlice [_gfec ]);};for _ ,_deddg :=range _gacd {_deddg .SortByX ();};return _gacd ,nil ;};func MakePixelCentroidTab8 ()[]int {return _agg ()};func (_edd *Bitmap )setPadBits (_bbeg int ){_edf :=8-_edd .Width %8;if _edf ==8{return ;};_ffg :=_edd .Width /8;_cfe :=_acdf [_edf ];if _bbeg ==0{_cfe ^=_cfe ;};var _bec int ;for _cdf :=0;_cdf < _edd .Height ;_cdf ++{_bec =_cdf *_edd .RowStride +_ffg ;if _bbeg ==0{_edd .Data [_bec ]&=_cfe ;}else {_edd .Data [_bec ]|=_cfe ;};};};func (_begc *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_bbfc *Boxes ,_ecbb error ){const _dgab ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _begc ==nil {return nil ,_f .Error (_dgab ,"\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 ,_f .Error (_dgab ,"\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 _bbfc ,_ecbb =_begc .connComponentsBB (connectivity );_ecbb !=nil {return nil ,_f .Wrap (_ecbb ,_dgab ,"");};}else {if _bbfc ,_ecbb =_begc .connComponentsBitmapsBB (bms ,connectivity );_ecbb !=nil {return nil ,_f .Wrap (_ecbb ,_dgab ,"");};};return _bbfc ,nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _eagff ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_edaa ,_afea :=p1 .Width ,p1 .Height ;_ecab ,_bfda :=p3 .Width ,p3 .Height ;if _dc .Abs (_edaa -_ecab )> maxDiffW {return false ,nil ;};if _dc .Abs (_afea -_bfda )> maxDiffH {return false ,nil ;};_feeg :=int (delX +_dc .Sign (delX )*0.5);_fdbb :=int (delY +_dc .Sign (delY )*0.5);var _ccd error ;_ffee :=p1 .CreateTemplate ();if _ccd =_ffee .RasterOperation (0,0,_edaa ,_afea ,PixSrc ,p1 ,0,0);_ccd !=nil {return false ,_f .Wrap (_ccd ,_eagff ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ccd =_ffee .RasterOperation (_feeg ,_fdbb ,_edaa ,_afea ,PixNotSrcAndDst ,p4 ,0,0);_ccd !=nil {return false ,_f .Wrap (_ccd ,_eagff ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _ffee .Zero (){return false ,nil ;};if _ccd =_ffee .RasterOperation (_feeg ,_fdbb ,_ecab ,_bfda ,PixSrc ,p3 ,0,0);_ccd !=nil {return false ,_f .Wrap (_ccd ,_eagff ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ccd =_ffee .RasterOperation (0,0,_ecab ,_bfda ,PixNotSrcAndDst ,p2 ,0,0);_ccd !=nil {return false ,_f .Wrap (_ccd ,_eagff ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _ffee .Zero (),nil ;};func (_dba *Bitmap )SizesEqual (s *Bitmap )bool {if _dba ==s {return true ;};if _dba .Width !=s .Width ||_dba .Height !=s .Height {return false ;};return true ;};func (_bddc *Bitmap )setEightBytes (_ddbe int ,_aafa uint64 )error {_ebbc :=_bddc .RowStride -(_ddbe %_bddc .RowStride );if _bddc .RowStride !=_bddc .Width >>3{_ebbc --;};if _ebbc >=8{return _bddc .setEightFullBytes (_ddbe ,_aafa );};return _bddc .setEightPartlyBytes (_ddbe ,_ebbc ,_aafa );};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_cgg *Bitmap )And (s *Bitmap )(_dbd *Bitmap ,_acfb error ){const _ccc ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _cgg ==nil {return nil ,_f .Error (_ccc ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_f .Error (_ccc ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_cgg .SizesEqual (s ){_ab .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",_ccc );};if _dbd ,_acfb =_baec (_dbd ,_cgg );_acfb !=nil {return nil ,_f .Wrap (_acfb ,_ccc ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _acfb =_dbd .RasterOperation (0,0,_dbd .Width ,_dbd .Height ,PixSrcAndDst ,s ,0,0);_acfb !=nil {return nil ,_f .Wrap (_acfb ,_ccc ,"");};return _dbd ,nil ;};func _afa (_bb ,_bf *Bitmap )(_add error ){const _bbg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_dd :=_bf .RowStride ;_bag :=_bb .RowStride ;_bfb :=_bf .RowStride *4-_bb .RowStride ;var (_gce ,_eg byte ;_egc uint32 ;_afb ,_fg ,_dg ,_bd ,_gf ,_bfbe ,_ac int ;);for _dg =0;_dg < _bf .Height ;_dg ++{_afb =_dg *_dd ;_fg =4*_dg *_bag ;for _bd =0;_bd < _dd ;_bd ++{_gce =_bf .Data [_afb +_bd ];_egc =_ggegg [_gce ];_bfbe =_fg +_bd *4;if _bfb !=0&&(_bd +1)*4> _bb .RowStride {for _gf =_bfb ;_gf > 0;_gf --{_eg =byte ((_egc >>uint (_gf *8))&0xff);_ac =_bfbe +(_bfb -_gf );if _add =_bb .SetByte (_ac ,_eg );_add !=nil {return _f .Wrapf (_add ,_bbg ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_gf );};};}else if _add =_bb .setFourBytes (_bfbe ,_egc );_add !=nil {return _f .Wrap (_add ,_bbg ,"");};if _add =_bb .setFourBytes (_fg +_bd *4,_ggegg [_bf .Data [_afb +_bd ]]);_add !=nil {return _f .Wrap (_add ,_bbg ,"");};};for _gf =1;_gf < 4;_gf ++{for _bd =0;_bd < _bag ;_bd ++{if _add =_bb .SetByte (_fg +_gf *_bag +_bd ,_bb .Data [_fg +_bd ]);_add !=nil {return _f .Wrapf (_add ,_bbg ,"\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",_gf ,_bd );};};};};return nil ;};func init (){for _egb :=0;_egb < 256;_egb ++{_fed [_egb ]=uint8 (_egb &0x1)+(uint8 (_egb >>1)&0x1)+(uint8 (_egb >>2)&0x1)+(uint8 (_egb >>3)&0x1)+(uint8 (_egb >>4)&0x1)+(uint8 (_egb >>5)&0x1)+(uint8 (_egb >>6)&0x1)+(uint8 (_egb >>7)&0x1);};};func (_gdad *Bitmap )setFourBytes (_aeff int ,_bggd uint32 )error {if _aeff +3> len (_gdad .Data )-1{return _f .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",_aeff );};_gdad .Data [_aeff ]=byte ((_bggd &0xff000000)>>24);_gdad .Data [_aeff +1]=byte ((_bggd &0xff0000)>>16);_gdad .Data [_aeff +2]=byte ((_bggd &0xff00)>>8);_gdad .Data [_aeff +3]=byte (_bggd &0xff);return nil ;};func (_dadc *ClassedPoints )SortByX (){_dadc ._beca =_dadc .xSortFunction ();_a .Sort (_dadc )};const (Vanilla Color =iota ;Chocolate ;);const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);var (_bcfe =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_acdf =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func _dge (_adgab ,_dbdga int )int {if _adgab > _dbdga {return _adgab ;};return _dbdga ;};func (_fcbg *Bitmap )nextOnPixel (_bbb ,_edc int )(_eeg _ad .Point ,_adga bool ,_dfa error ){const _fgeg ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_eeg ,_adga ,_dfa =_fcbg .nextOnPixelLow (_fcbg .Width ,_fcbg .Height ,_fcbg .RowStride ,_bbb ,_edc );if _dfa !=nil {return _eeg ,false ,_f .Wrap (_dfa ,_fgeg ,"");};return _eeg ,_adga ,nil ;};func _cabc (_dec ,_cedg int )*Bitmap {return &Bitmap {Width :_dec ,Height :_cedg ,RowStride :(_dec +7)>>3};};func (_beefb *ClassedPoints )ySortFunction ()func (_eeea int ,_edbe int )bool {return func (_dcacb ,_cgga int )bool {return _beefb .YAtIndex (_dcacb )< _beefb .YAtIndex (_cgga )};};func (_dde *Bitmap )SetPixel (x ,y int ,pixel byte )error {_aed :=_dde .GetByteIndex (x ,y );if _aed > len (_dde .Data )-1{return _f .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",_aed );};_cda :=_dde .GetBitOffset (x );_ada :=uint (7-_cda );_cdac :=_dde .Data [_aed ];var _baaa byte ;if pixel ==1{_baaa =_cdac |(pixel &0x01<<_ada );}else {_baaa =_cdac &^(1<<_ada );};_dde .Data [_aed ]=_baaa ;return nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _afeb ="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 ,_f .Error (_afeb ,"\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 ,_f .Error (_afeb ,"\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 ,_f .Error (_afeb ,"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 ,_f .Error (_afeb ,"\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 ,_f .Error (_afeb ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");};_befe ,_gcfd :=bm1 .Width ,bm1 .Height ;_aacc ,_fbad :=bm2 .Width ,bm2 .Height ;if _dc .Abs (_befe -_aacc )> maxDiffW {return false ,nil ;};if _dc .Abs (_gcfd -_fbad )> maxDiffH {return false ,nil ;};_aafc :=int (delX +_dc .Sign (delX )*0.5);_dgdd :=int (delY +_dc .Sign (delY )*0.5);_aagc :=int (_c .Ceil (_c .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_bccb :=bm2 .RowStride ;_gdgbe :=_dge (_dgdd ,0);_ddgc :=_bgba (_fbad +_dgdd ,_gcfd );_baba :=bm1 .RowStride *_gdgbe ;_caa :=bm2 .RowStride *(_gdgbe -_dgdd );var _fbef int ;if _ddgc <=_gcfd {_fbef =downcount [_ddgc -1];};_gfce :=_dge (_aafc ,0);_edec :=_bgba (_aacc +_aafc ,_befe );var _ccae ,_gde int ;if _aafc >=8{_ccae =_aafc >>3;_baba +=_ccae ;_gfce -=_ccae <<3;_edec -=_ccae <<3;_aafc &=7;}else if _aafc <=-8{_gde =-((_aafc +7)>>3);_caa +=_gde ;_bccb -=_gde ;_aafc +=_gde <<3;};var (_dggc ,_aeab ,_fbed int ;_dagb ,_bdcd ,_cfde byte ;);if _gfce >=_edec ||_gdgbe >=_ddgc {return false ,nil ;};_eccg :=(_edec +7)>>3;switch {case _aafc ==0:for _aeab =_gdgbe ;_aeab < _ddgc ;_aeab ,_baba ,_caa =_aeab +1,_baba +bm1 .RowStride ,_caa +bm2 .RowStride {for _fbed =0;_fbed < _eccg ;_fbed ++{_dagb =bm1 .Data [_baba +_fbed ]&bm2 .Data [_caa +_fbed ];_dggc +=tab [_dagb ];};if _dggc >=_aagc {return true ,nil ;};if _babf :=_dggc +downcount [_aeab ]-_fbef ;_babf < _aagc {return false ,nil ;};};case _aafc > 0&&_bccb < _eccg :for _aeab =_gdgbe ;_aeab < _ddgc ;_aeab ,_baba ,_caa =_aeab +1,_baba +bm1 .RowStride ,_caa +bm2 .RowStride {_bdcd =bm1 .Data [_baba ];_cfde =bm2 .Data [_caa ]>>uint (_aafc );_dagb =_bdcd &_cfde ;_dggc +=tab [_dagb ];for _fbed =1;_fbed < _bccb ;_fbed ++{_bdcd =bm1 .Data [_baba +_fbed ];_cfde =bm2 .Data [_caa +_fbed ]>>uint (_aafc )|bm2 .Data [_caa +_fbed -1]<<uint (8-_aafc );_dagb =_bdcd &_cfde ;_dggc +=tab [_dagb ];};_bdcd =bm1 .Data [_baba +_fbed ];_cfde =bm2 .Data [_caa +_fbed -1]<<uint (8-_aafc );_dagb =_bdcd &_cfde ;_dggc +=tab [_dagb ];if _dggc >=_aagc {return true ,nil ;}else if _dggc +downcount [_aeab ]-_fbef < _aagc {return false ,nil ;};};case _aafc > 0&&_bccb >=_eccg :for _aeab =_gdgbe ;_aeab < _ddgc ;_aeab ,_baba ,_caa =_aeab +1,_baba +bm1 .RowStride ,_caa +bm2 .RowStride {_bdcd =bm1 .Data [_baba ];_cfde =bm2 .Data [_caa ]>>uint (_aafc );_dagb =_bdcd &_cfde ;_dggc +=tab [_dagb ];for _fbed =1;_fbed < _eccg ;_fbed ++{_bdcd =bm1 .Data [_baba +_fbed ];_cfde =bm2 .Data [_caa +_fbed ]>>uint (_aafc );_cfde |=bm2 .Data [_caa +_fbed -1]<<uint (8-_aafc );_dagb =_bdcd &_cfde ;_dggc +=tab [_dagb ];};if _dggc >=_aagc {return true ,nil ;}else if _dggc +downcount [_aeab ]-_fbef < _aagc {return false ,nil ;};};case _eccg < _bccb :for _aeab =_gdgbe ;_aeab < _ddgc ;_aeab ,_baba ,_caa =_aeab +1,_baba +bm1 .RowStride ,_caa +bm2 .RowStride {for _fbed =0;_fbed < _eccg ;_fbed ++{_bdcd =bm1 .Data [_baba +_fbed ];_cfde =bm2 .Data [_caa +_fbed ]<<uint (-_aafc );_cfde |=bm2 .Data [_caa +_fbed +1]>>uint (8+_aafc );_dagb =_bdcd &_cfde ;_dggc +=tab [_dagb ];};if _dggc >=_aagc {return true ,nil ;}else if _egeg :=_dggc +downcount [_aeab ]-_fbef ;_egeg < _aagc {return false ,nil ;};};case _bccb >=_eccg :for _aeab =_gdgbe ;_aeab < _ddgc ;_aeab ,_baba ,_caa =_aeab +1,_baba +bm1 .RowStride ,_caa +bm2 .RowStride {for _fbed =0;_fbed < _eccg ;_fbed ++{_bdcd =bm1 .Data [_baba +_fbed ];_cfde =bm2 .Data [_caa +_fbed ]<<uint (-_aafc );_cfde |=bm2 .Data [_caa +_fbed +1]>>uint (8+_aafc );_dagb =_bdcd &_cfde ;_dggc +=tab [_dagb ];};_bdcd =bm1 .Data [_baba +_fbed ];_cfde =bm2 .Data [_caa +_fbed ]<<uint (-_aafc );_dagb =_bdcd &_cfde ;_dggc +=tab [_dagb ];if _dggc >=_aagc {return true ,nil ;}else if _dggc +downcount [_aeab ]-_fbef < _aagc {return false ,nil ;};};};_aeba :=float32 (_dggc )*float32 (_dggc )/(float32 (area1 )*float32 (area2 ));if _aeba >=scoreThreshold {_ab .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",_dggc ,_aagc ,_aeba ,scoreThreshold );};return false ,nil ;};func (_dbdg *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_adde bool ,_cfg error ){const _gcge ="\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 =_fabea ();};_aaef :=_dbdg .Width >>3;_afba :=_dbdg .Width &7;_dgf :=byte (0xff<<uint (8-_afba ));var (_ecc ,_cbbg ,_gac ,_egcd int ;_gfbc byte ;);for _ecc =0;_ecc < _dbdg .Height ;_ecc ++{_gac =_dbdg .RowStride *_ecc ;for _cbbg =0;_cbbg < _aaef ;_cbbg ++{_gfbc ,_cfg =_dbdg .GetByte (_gac +_cbbg );if _cfg !=nil {return false ,_f .Wrap (_cfg ,_gcge ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_egcd +=tab8 [_gfbc ];};if _afba !=0{_gfbc ,_cfg =_dbdg .GetByte (_gac +_cbbg );if _cfg !=nil {return false ,_f .Wrap (_cfg ,_gcge ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_gfbc &=_dgf ;_egcd +=tab8 [_gfbc ];};if _egcd > thresh {return true ,nil ;};};return _adde ,nil ;};func _acfg (_addbb ,_fage ,_dbed *Bitmap ,_gee int )(*Bitmap ,error ){const _gbgd ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _fage ==nil {return nil ,_f .Error (_gbgd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _dbed ==nil {return nil ,_f .Error (_gbgd ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gee !=4&&_gee !=8{return nil ,_f .Error (_gbgd ,"\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 _bggf error ;_addbb ,_bggf =_baec (_addbb ,_fage );if _bggf !=nil {return nil ,_f .Wrap (_bggf ,_gbgd ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_eefa :=_fage .createTemplate ();_dbed .setPadBits (0);for _gdfef :=0;_gdfef < _fffd ;_gdfef ++{_eefa ,_bggf =_baec (_eefa ,_addbb );if _bggf !=nil {return nil ,_f .Wrapf (_bggf ,_gbgd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gdfef );};if _bggf =_fbagf (_addbb ,_dbed ,_gee );_bggf !=nil {return nil ,_f .Wrapf (_bggf ,_gbgd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gdfef );};if _eefa .Equals (_addbb ){break ;};};return _addbb ,nil ;};func (_gdcf *Bitmap )setTwoBytes (_ebf int ,_gfdf uint16 )error {if _ebf +1> len (_gdcf .Data )-1{return _f .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",_ebf );};_gdcf .Data [_ebf ]=byte ((_gfdf &0xff00)>>8);_gdcf .Data [_ebf +1]=byte (_gfdf &0xff);return nil ;};func _bca (_cbfa ,_efbe *Bitmap ,_bfgb CombinationOperator )*Bitmap {_ffa :=New (_cbfa .Width ,_cbfa .Height );for _bfdd :=0;_bfdd < len (_ffa .Data );_bfdd ++{_ffa .Data [_bfdd ]=_debb (_cbfa .Data [_bfdd ],_efbe .Data [_bfdd ],_bfgb );};return _ffa ;};func (_cdff *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _gaca ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_cdff .Values )==0{return nil ,_f .Error (_gaca ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_efge :=&BitmapsArray {};_cdff .SortByWidth ();_ebbag :=-1;_fcabd :=-1;for _daed :=0;_daed < len (_cdff .Values );_daed ++{_gegaa :=_cdff .Values [_daed ].Width ;if _gegaa > _ebbag {_ebbag =_gegaa ;_fcabd ++;_efge .Values =append (_efge .Values ,&Bitmaps {});};_efge .Values [_fcabd ].AddBitmap (_cdff .Values [_daed ]);};return _efge ,nil ;};func _afge (_ebbg *Bitmap )(_gedee *Bitmap ,_bgbe int ,_gcfb error ){const _dgg ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _ebbg ==nil {return nil ,0,_f .Errorf (_dgg ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _eagf ,_egdaaf *Bitmap ;if _eagf ,_gcfb =_baec (nil ,_ebbg );_gcfb !=nil {return nil ,0,_f .Wrap (_gcfb ,_dgg ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_abbg [13]int ;_gcgee ,_adag int ;);_gccc :=12;_fbae :=_dc .NewNumSlice (_gccc +1);_eab :=_dc .NewNumSlice (_gccc +1);var _decg *Boxes ;for _cfc :=0;_cfc <=_gccc ;_cfc ++{if _cfc ==0{if _egdaaf ,_gcfb =_baec (nil ,_eagf );_gcfb !=nil {return nil ,0,_f .Wrap (_gcfb ,_dgg ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _egdaaf ,_gcfb =_ceac (_eagf ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_gcfb !=nil {return nil ,0,_f .Wrap (_gcfb ,_dgg ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _decg ,_gcfb =_egdaaf .connComponentsBB (4);_gcfb !=nil {return nil ,0,_f .Wrap (_gcfb ,_dgg ,"");};_abbg [_cfc ]=len (*_decg );_fbae .AddInt (_abbg [_cfc ]);switch _cfc {case 0:_gcgee =_abbg [0];default:_adag =_abbg [_cfc -1]-_abbg [_cfc ];_eab .AddInt (_adag );};_eagf =_egdaaf ;};_cece :=true ;_fbdd :=2;var _efd ,_efca int ;for _bda :=1;_bda < len (*_eab );_bda ++{if _efd ,_gcfb =_fbae .GetInt (_bda );_gcfb !=nil {return nil ,0,_f .Wrap (_gcfb ,_dgg ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _cece &&_efd < int (0.3*float32 (_gcgee )){_fbdd =_bda +1;_cece =false ;};if _adag ,_gcfb =_eab .GetInt (_bda );_gcfb !=nil {return nil ,0,_f .Wrap (_gcfb ,_dgg ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _adag > _efca {_efca =_adag ;};};_abac :=_ebbg .XResolution ;if _abac ==0{_abac =150;};if _abac > 110{_fbdd ++;};if _fbdd < 2{_ab .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");_fbdd =2;};_bgbe =_fbdd +1;if _gedee ,_gcfb =_fedgb (nil ,_ebbg ,_fbdd +1,1);_gcfb !=nil {return nil ,0,_f .Wrap (_gcfb ,_dgg ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _gedee ,_bgbe ,nil ;};func (_egcg CombinationOperator )String ()string {var _gdge string ;switch _egcg {case CmbOpOr :_gdge ="\u004f\u0052";case CmbOpAnd :_gdge ="\u0041\u004e\u0044";case CmbOpXor :_gdge ="\u0058\u004f\u0052";case CmbOpXNor :_gdge ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_gdge ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_gdge ="\u004e\u004f\u0054";};return _gdge ;};func (_cbe *Bitmap )inverseData (){if _gaga :=_cbe .RasterOperation (0,0,_cbe .Width ,_cbe .Height ,PixNotDst ,nil ,0,0);_gaga !=nil {_ab .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_gaga );};if _cbe .Color ==Chocolate {_cbe .Color =Vanilla ;}else {_cbe .Color =Chocolate ;};};func _faac (_cgf ,_cfdc ,_eegg *Bitmap )(*Bitmap ,error ){const _eedf ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _cfdc ==nil {return nil ,_f .Error (_eedf ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _eegg ==nil {return nil ,_f .Error (_eedf ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _acdd error ;switch {case _cgf ==_cfdc :if _acdd =_cgf .RasterOperation (0,0,_cfdc .Width ,_cfdc .Height ,PixNotSrcAndDst ,_eegg ,0,0);_acdd !=nil {return nil ,_f .Wrap (_acdd ,_eedf ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _cgf ==_eegg :if _acdd =_cgf .RasterOperation (0,0,_cfdc .Width ,_cfdc .Height ,PixNotSrcAndDst ,_cfdc ,0,0);_acdd !=nil {return nil ,_f .Wrap (_acdd ,_eedf ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_cgf ,_acdd =_baec (_cgf ,_cfdc );if _acdd !=nil {return nil ,_f .Wrap (_acdd ,_eedf ,"");};if _acdd =_cgf .RasterOperation (0,0,_cfdc .Width ,_cfdc .Height ,PixNotSrcAndDst ,_eegg ,0,0);_acdd !=nil {return nil ,_f .Wrap (_acdd ,_eedf ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _cgf ,nil ;};type Color int ;var MorphBC BoundaryCondition ;func TstTSymbol (t *_gg .T ,scale ...int )*Bitmap {_ffaa ,_fffa :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_e .NoError (t ,_fffa );return TstGetScaledSymbol (t ,_ffaa ,scale ...);};func (_gfc *Bitmap )clipRectangle (_abga ,_fgeac *_ad .Rectangle )(_cdga *Bitmap ,_dga error ){const _gede ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _abga ==nil {return nil ,_f .Error (_gede ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_aff ,_gdf :=_gfc .Width ,_gfc .Height ;_aea ,_dga :=ClipBoxToRectangle (_abga ,_aff ,_gdf );if _dga !=nil {_ab .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",_dga );return nil ,nil ;};_cccgd ,_aba :=_aea .Min .X ,_aea .Min .Y ;_gedc ,_baed :=_aea .Max .X -_aea .Min .X ,_aea .Max .Y -_aea .Min .Y ;_cdga =New (_gedc ,_baed );_cdga .Text =_gfc .Text ;if _dga =_cdga .RasterOperation (0,0,_gedc ,_baed ,PixSrc ,_gfc ,_cccgd ,_aba );_dga !=nil {return nil ,_f .Wrap (_dga ,_gede ,"");};if _fgeac !=nil {*_fgeac =*_aea ;};return _cdga ,nil ;};type CombinationOperator int ;func (_age *Bitmap )GetPixel (x ,y int )bool {_egda :=_age .GetByteIndex (x ,y );_cccg :=_age .GetBitOffset (x );_efc :=uint (7-_cccg );if _egda > len (_age .Data )-1{_ab .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 ,_age );return false ;};if (_age .Data [_egda ]>>_efc )&0x01>=1{return true ;};return false ;};func (_agbd *Bitmaps )SortByHeight (){_fcdf :=(*byHeight )(_agbd );_a .Sort (_fcdf )};func (_fdbab *Bitmaps )AddBitmap (bm *Bitmap ){_fdbab .Values =append (_fdbab .Values ,bm )};type fillSegment struct{_babfd int ;_ddgce int ;_adda int ;_abgd int ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func _gaf (_efag ,_deef *Bitmap ,_ead *Selection )(*Bitmap ,error ){const _dgefd ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _gga ,_abed int ;if _deef ==nil {return nil ,_f .Error (_dgefd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _ead ==nil {return nil ,_f .Error (_dgefd ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_gga =_ead .Width ;_abed =_ead .Height ;if _gga ==0||_abed ==0{return nil ,_f .Error (_dgefd ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _efag ==nil {return _deef .createTemplate (),nil ;};if _edea :=_efag .resizeImageData (_deef );_edea !=nil {return nil ,_edea ;};return _efag ,nil ;};type SizeComparison int ;func TstImageBitmap ()*Bitmap {return _edcbf .Copy ()};func (_bcdad *Bitmap )GetChocolateData ()[]byte {if _bcdad .Color ==Vanilla {_bcdad .inverseData ();};return _bcdad .Data ;};func Extract (roi _ad .Rectangle ,src *Bitmap )(*Bitmap ,error ){_gaad :=New (roi .Dx (),roi .Dy ());_eeb :=roi .Min .X &0x07;_fbbed :=8-_eeb ;_ccad :=uint (8-_gaad .Width &0x07);_baae :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_aeaf :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_adfe :=_gaad .RowStride ==_aeaf +1-_baae ;var _edda int ;for _afgbe :=roi .Min .Y ;_afgbe < roi .Max .Y ;_afgbe ++{_feba :=_baae ;_gdaf :=_edda ;switch {case _baae ==_aeaf :_fcde ,_gge :=src .GetByte (_feba );if _gge !=nil {return nil ,_gge ;};_fcde <<=uint (_eeb );_gge =_gaad .SetByte (_gdaf ,_bgac (_ccad ,_fcde ));if _gge !=nil {return nil ,_gge ;};case _eeb ==0:for _bdbfd :=_baae ;_bdbfd <=_aeaf ;_bdbfd ++{_bgcd ,_cbfc :=src .GetByte (_feba );if _cbfc !=nil {return nil ,_cbfc ;};_feba ++;if _bdbfd ==_aeaf &&_adfe {_bgcd =_bgac (_ccad ,_bgcd );};_cbfc =_gaad .SetByte (_gdaf ,_bgcd );if _cbfc !=nil {return nil ,_cbfc ;};_gdaf ++;};default:_ggeg :=_acgg (src ,_gaad ,uint (_eeb ),uint (_fbbed ),_ccad ,_baae ,_aeaf ,_adfe ,_feba ,_gdaf );if _ggeg !=nil {return nil ,_ggeg ;};};_baae +=src .RowStride ;_aeaf +=src .RowStride ;_edda +=_gaad .RowStride ;};return _gaad ,nil ;};func (_ddgg *Bitmaps )HeightSorter ()func (_cfac ,_bgce int )bool {return func (_fbbbb ,_adbfe int )bool {_gcgdf :=_ddgg .Values [_fbbbb ].Height < _ddgg .Values [_adbfe ].Height ;_ab .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_ddgg .Values [_fbbbb ].Height ,_ddgg .Values [_adbfe ].Height ,_gcgdf );return _gcgdf ;};};func _debb (_adac ,_bcdaf byte ,_cfgf CombinationOperator )byte {switch _cfgf {case CmbOpOr :return _bcdaf |_adac ;case CmbOpAnd :return _bcdaf &_adac ;case CmbOpXor :return _bcdaf ^_adac ;case CmbOpXNor :return ^(_bcdaf ^_adac );case CmbOpNot :return ^(_bcdaf );default:return _bcdaf ;};};func TstImageBitmapData ()[]byte {return _edcbf .Data };func Rect (x ,y ,w ,h int )(*_ad .Rectangle ,error ){const _ffeg ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_f .Errorf (_ffeg ,"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 ,_f .Error (_ffeg ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_bagf :=_ad .Rect (x ,y ,x +w ,y +h );return &_bagf ,nil ;};func _edfg (_bcab *_dc .Stack )(_aced *fillSegment ,_ebba error ){const _cfdda ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _bcab ==nil {return nil ,_f .Error (_cfdda ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _bcab .Aux ==nil {return nil ,_f .Error (_cfdda ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_feee ,_ebdb :=_bcab .Pop ();if !_ebdb {return nil ,nil ;};_bddd ,_ebdb :=_feee .(*fillSegment );if !_ebdb {return nil ,_f .Error (_cfdda ,"\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");};_aced =&fillSegment {_bddd ._babfd ,_bddd ._ddgce ,_bddd ._adda +_bddd ._abgd ,_bddd ._abgd };_bcab .Aux .Push (_bddd );return _aced ,nil ;};func (_debc *Bitmap )GetByteIndex (x ,y int )int {return y *_debc .RowStride +(x >>3)};type byWidth Bitmaps ;func (_aeac *ClassedPoints )validateIntSlice ()error {const _dgdc ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_eeaa :=range _aeac .IntSlice {if _eeaa >=(_aeac .Points .Size ()){return _f .Errorf (_dgdc ,"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",_eeaa ,_aeac .Points .Size ());};};return nil ;};func _agfd (_gdba ,_defafg ,_dced *Bitmap )(*Bitmap ,error ){const _aeffc ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _defafg ==nil {return nil ,_f .Error (_aeffc ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dced ==nil {return nil ,_f .Error (_aeffc ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _gdba ==_dced {return nil ,_f .Error (_aeffc ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_defafg .SizesEqual (_dced ){_ab .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",_aeffc );};var _efcf error ;if _gdba ,_efcf =_baec (_gdba ,_defafg );_efcf !=nil {return nil ,_f .Wrap (_efcf ,_aeffc ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _efcf =_gdba .RasterOperation (0,0,_gdba .Width ,_gdba .Height ,PixSrcXorDst ,_dced ,0,0);_efcf !=nil {return nil ,_f .Wrap (_efcf ,_aeffc ,"");};return _gdba ,nil ;};func (_agc *Bitmap )setAll ()error {_fef :=_feea (_agc ,0,0,_agc .Width ,_agc .Height ,PixSet ,nil ,0,0);if _fef !=nil {return _f .Wrap (_fef ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func TstWordBitmapWithSpaces (t *_gg .T ,scale ...int )*Bitmap {_bgdc :=1;if len (scale )> 0{_bgdc =scale [0];};_ecfg :=3;_cfdbb :=9+7+15+2*_ecfg +2*_ecfg ;_efff :=5+_ecfg +5+2*_ecfg ;_dgbe :=New (_cfdbb *_bgdc ,_efff *_bgdc );_bddcc :=&Bitmaps {};var _caeg *int ;_ecfg *=_bgdc ;_cefce :=_ecfg ;_caeg =&_cefce ;_daag :=_ecfg ;_bgde :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,_ecfg );_bgde =TstISymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,_ecfg );_bgde =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,0);*_caeg =_ecfg ;_daag =5*_bgdc +_ecfg ;_bgde =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,_ecfg );_bgde =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,1*_bgdc );_bgde =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bddcc ,_bgde ,_caeg ,_daag ,0);TstWriteSymbols (t ,_bddcc ,_dgbe );return _dgbe ;};func (_ecfd *byWidth )Swap (i ,j int ){_ecfd .Values [i ],_ecfd .Values [j ]=_ecfd .Values [j ],_ecfd .Values [i ];if _ecfd .Boxes !=nil {_ecfd .Boxes [i ],_ecfd .Boxes [j ]=_ecfd .Boxes [j ],_ecfd .Boxes [i ];};};func _feea (_fegd *Bitmap ,_gfcc ,_fgce ,_fbaa ,_eeed int ,_cabfb RasterOperator ,_fdbg *Bitmap ,_gfbe ,_dbccc int )error {const _dcdg ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _fegd ==nil {return _f .Error (_dcdg ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _cabfb ==PixDst {return nil ;};switch _cabfb {case PixClr ,PixSet ,PixNotDst :_efdf (_fegd ,_gfcc ,_fgce ,_fbaa ,_eeed ,_cabfb );return nil ;};if _fdbg ==nil {_ab .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 _f .Error (_dcdg ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _afebd :=_ffdd (_fegd ,_gfcc ,_fgce ,_fbaa ,_eeed ,_cabfb ,_fdbg ,_gfbe ,_dbccc );_afebd !=nil {return _f .Wrap (_afebd ,_dcdg ,"");};return nil ;};func (_ggg *Bitmap )resizeImageData (_ddcg *Bitmap )error {if _ddcg ==nil {return _f .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 _ggg .SizesEqual (_ddcg ){return nil ;};_ggg .Data =make ([]byte ,len (_ddcg .Data ));_ggg .Width =_ddcg .Width ;_ggg .Height =_ddcg .Height ;_ggg .RowStride =_ddcg .RowStride ;return nil ;};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 (_fab *Bitmap )SetPadBits (value int ){_fab .setPadBits (value )};type RasterOperator int ;func (_aab *Boxes )selectWithIndicator (_eggce *_dc .NumSlice )(_daeea *Boxes ,_cbaf error ){const _bgacf ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _aab ==nil {return nil ,_f .Error (_bgacf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _eggce ==nil {return nil ,_f .Error (_bgacf ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_eggce )!=len (*_aab ){return nil ,_f .Error (_bgacf ,"\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 _gffb ,_dcbe int ;for _afbc :=0;_afbc < len (*_eggce );_afbc ++{if _gffb ,_cbaf =_eggce .GetInt (_afbc );_cbaf !=nil {return nil ,_f .Wrap (_cbaf ,_bgacf ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _gffb ==1{_dcbe ++;};};if _dcbe ==len (*_aab ){return _aab ,nil ;};_eaab :=Boxes {};for _deaa :=0;_deaa < len (*_eggce );_deaa ++{_gffb =int ((*_eggce )[_deaa ]);if _gffb ==0{continue ;};_eaab =append (_eaab ,(*_aab )[_deaa ]);};_daeea =&_eaab ;return _daeea ,nil ;};func _ec (_dee ,_eb *Bitmap )(_adg error ){const _gb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_ga :=_eb .RowStride ;_dcb :=_dee .RowStride ;var (_gc byte ;_gba uint16 ;_ag ,_cb ,_ba ,_af ,_abc int ;);for _ba =0;_ba < _eb .Height ;_ba ++{_ag =_ba *_ga ;_cb =2*_ba *_dcb ;for _af =0;_af < _ga ;_af ++{_gc =_eb .Data [_ag +_af ];_gba =_addb [_gc ];_abc =_cb +_af *2;if _dee .RowStride !=_eb .RowStride *2&&(_af +1)*2> _dee .RowStride {_adg =_dee .SetByte (_abc ,byte (_gba >>8));}else {_adg =_dee .setTwoBytes (_abc ,_gba );};if _adg !=nil {return _f .Wrap (_adg ,_gb ,"");};};for _af =0;_af < _dcb ;_af ++{_abc =_cb +_dcb +_af ;_gc =_dee .Data [_cb +_af ];if _adg =_dee .SetByte (_abc ,_gc );_adg !=nil {return _f .Wrapf (_adg ,_gb ,"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",_cb +_af ,_cb +_dcb +_af );};};};return nil ;};func _deb (_db ,_afe *Bitmap )(_ca error ){const _bfg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_bc :=_afe .RowStride ;_bfe :=_db .RowStride ;var _cg ,_cbd ,_cd ,_df ,_dgd int ;for _cd =0;_cd < _afe .Height ;_cd ++{_cg =_cd *_bc ;_cbd =8*_cd *_bfe ;for _df =0;_df < _bc ;_df ++{if _ca =_db .setEightBytes (_cbd +_df *8,_abfae [_afe .Data [_cg +_df ]]);_ca !=nil {return _f .Wrap (_ca ,_bfg ,"");};};for _dgd =1;_dgd < 8;_dgd ++{for _df =0;_df < _bfe ;_df ++{if _ca =_db .SetByte (_cbd +_dgd *_bfe +_df ,_db .Data [_cbd +_df ]);_ca !=nil {return _f .Wrap (_ca ,_bfg ,"");};};};};return nil ;};func (_dafa *Bitmap )CreateTemplate ()*Bitmap {return _dafa .createTemplate ()};func TstVSymbol (t *_gg .T ,scale ...int )*Bitmap {_febe ,_cage :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_e .NoError (t ,_cage );return TstGetScaledSymbol (t ,_febe ,scale ...);};func TstASymbol (t *_gg .T )*Bitmap {t .Helper ();_ggfc :=New (6,6);_e .NoError (t ,_ggfc .SetPixel (1,0,1));_e .NoError (t ,_ggfc .SetPixel (2,0,1));_e .NoError (t ,_ggfc .SetPixel (3,0,1));_e .NoError (t ,_ggfc .SetPixel (4,0,1));_e .NoError (t ,_ggfc .SetPixel (5,1,1));_e .NoError (t ,_ggfc .SetPixel (1,2,1));_e .NoError (t ,_ggfc .SetPixel (2,2,1));_e .NoError (t ,_ggfc .SetPixel (3,2,1));_e .NoError (t ,_ggfc .SetPixel (4,2,1));_e .NoError (t ,_ggfc .SetPixel (5,2,1));_e .NoError (t ,_ggfc .SetPixel (0,3,1));_e .NoError (t ,_ggfc .SetPixel (5,3,1));_e .NoError (t ,_ggfc .SetPixel (0,4,1));_e .NoError (t ,_ggfc .SetPixel (5,4,1));_e .NoError (t ,_ggfc .SetPixel (1,5,1));_e .NoError (t ,_ggfc .SetPixel (2,5,1));_e .NoError (t ,_ggfc .SetPixel (3,5,1));_e .NoError (t ,_ggfc .SetPixel (4,5,1));_e .NoError (t ,_ggfc .SetPixel (5,5,1));return _ggfc ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_daec :=_faecb (h ,w ,"");_daec .setOrigin (cy ,cx );var _feacc ,_bfdg int ;for _feacc =0;_feacc < h ;_feacc ++{for _bfdg =0;_bfdg < w ;_bfdg ++{_daec .Data [_feacc ][_bfdg ]=tp ;};};return _daec ;};func (_cgbdf *Bitmaps )GetBox (i int )(*_ad .Rectangle ,error ){const _cegb ="\u0047\u0065\u0074\u0042\u006f\u0078";if _cgbdf ==nil {return nil ,_f .Error (_cegb ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_cgbdf .Boxes )-1{return nil ,_f .Errorf (_cegb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _cgbdf .Boxes [i ],nil ;};func (_agac *Bitmaps )WidthSorter ()func (_efgca ,_eeeab int )bool {return func (_defe ,_ccgb int )bool {return _agac .Values [_defe ].Width < _agac .Values [_ccgb ].Width };};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_dccd *Bitmap )clearAll ()error {return _dccd .RasterOperation (0,0,_dccd .Width ,_dccd .Height ,PixClr ,nil ,0,0);};func (_eecb *BitmapsArray )AddBox (box *_ad .Rectangle ){_eecb .Boxes =append (_eecb .Boxes ,box )};func (_gedd *Bitmap )GetVanillaData ()[]byte {if _gedd .Color ==Chocolate {_gedd .inverseData ();};return _gedd .Data ;};func ClipBoxToRectangle (box *_ad .Rectangle ,wi ,hi int )(_bgfg *_ad .Rectangle ,_cfba error ){const _bfc ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_f .Error (_bfc ,"\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 ,_f .Error (_bfc ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_begf :=*box ;_bgfg =&_begf ;if _bgfg .Min .X < 0{_bgfg .Max .X +=_bgfg .Min .X ;_bgfg .Min .X =0;};if _bgfg .Min .Y < 0{_bgfg .Max .Y +=_bgfg .Min .Y ;_bgfg .Min .Y =0;};if _bgfg .Max .X > wi {_bgfg .Max .X =wi ;};if _bgfg .Max .Y > hi {_bgfg .Max .Y =hi ;};return _bgfg ,nil ;};func (_fgac *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_cbcf *Boxes ,_dcdcg error ){const _bgae ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _fgac ==nil {return nil ,_f .Error (_bgae ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_fgac )==0{return _fgac ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_bgae ,"\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 ,_f .Errorf (_bgae ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );};_fabeb :=_fgac .makeSizeIndicator (width ,height ,tp ,relation );_dcgca ,_dcdcg :=_fgac .selectWithIndicator (_fabeb );if _dcdcg !=nil {return nil ,_f .Wrap (_dcdcg ,_bgae ,"");};return _dcgca ,nil ;};func _abag (_aegdf *Bitmap ,_feac ,_agdd ,_cdgg ,_fbbb int ,_dbgb RasterOperator ,_fcfef *Bitmap ,_bggad ,_adegeg int )error {var (_ggfaa bool ;_bdfd bool ;_afgbf byte ;_feab int ;_bcbcb int ;_gbfcb int ;_aabg int ;_cdaee bool ;_daeg int ;_bddad int ;_dcbf int ;_afca bool ;_daae byte ;_ecdf int ;_dfb int ;_ffegf int ;_gbda byte ;_gagab int ;_abdea int ;_cagg uint ;_ffcdb uint ;_acda byte ;_ecdd shift ;_bba bool ;_caad bool ;_edcb ,_ebebg int ;);if _bggad &7!=0{_abdea =8-(_bggad &7);};if _feac &7!=0{_bcbcb =8-(_feac &7);};if _abdea ==0&&_bcbcb ==0{_acda =_acdf [0];}else {if _bcbcb > _abdea {_cagg =uint (_bcbcb -_abdea );}else {_cagg =uint (8-(_abdea -_bcbcb ));};_ffcdb =8-_cagg ;_acda =_acdf [_cagg ];};if (_feac &7)!=0{_ggfaa =true ;_feab =8-(_feac &7);_afgbf =_acdf [_feab ];_gbfcb =_aegdf .RowStride *_agdd +(_feac >>3);_aabg =_fcfef .RowStride *_adegeg +(_bggad >>3);_gagab =8-(_bggad &7);if _feab > _gagab {_ecdd =_gcaf ;if _cdgg >=_abdea {_bba =true ;};}else {_ecdd =_bgcc ;};};if _cdgg < _feab {_bdfd =true ;_afgbf &=_bcfe [8-_feab +_cdgg ];};if !_bdfd {_daeg =(_cdgg -_feab )>>3;if _daeg !=0{_cdaee =true ;_bddad =_aegdf .RowStride *_agdd +((_feac +_bcbcb )>>3);_dcbf =_fcfef .RowStride *_adegeg +((_bggad +_bcbcb )>>3);};};_ecdf =(_feac +_cdgg )&7;if !(_bdfd ||_ecdf ==0){_afca =true ;_daae =_bcfe [_ecdf ];_dfb =_aegdf .RowStride *_agdd +((_feac +_bcbcb )>>3)+_daeg ;_ffegf =_fcfef .RowStride *_adegeg +((_bggad +_bcbcb )>>3)+_daeg ;if _ecdf > int (_ffcdb ){_caad =true ;};};switch _dbgb {case PixSrc :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],_gbda ,_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]=_gbda ;};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],_gbda ,_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixNotSrc :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],^_gbda ,_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]=^_gbda ;};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],^_gbda ,_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixSrcOrDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],_gbda |_aegdf .Data [_gbfcb ],_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]|=_gbda ;};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],_gbda |_aegdf .Data [_dfb ],_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixSrcAndDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],_gbda &_aegdf .Data [_gbfcb ],_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]&=_gbda ;};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],_gbda &_aegdf .Data [_dfb ],_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixSrcXorDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],_gbda ^_aegdf .Data [_gbfcb ],_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]^=_gbda ;};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],_gbda ^_aegdf .Data [_dfb ],_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixNotSrcOrDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],^_gbda |_aegdf .Data [_gbfcb ],_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]|=^_gbda ;};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],^_gbda |_aegdf .Data [_dfb ],_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixNotSrcAndDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],^_gbda &_aegdf .Data [_gbfcb ],_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]&=^_gbda ;};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],^_gbda &_aegdf .Data [_dfb ],_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixSrcOrNotDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],_gbda |^_aegdf .Data [_gbfcb ],_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]=_gbda |^_aegdf .Data [_bddad +_ebebg ];};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],_gbda |^_aegdf .Data [_dfb ],_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixSrcAndNotDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],_gbda &^_aegdf .Data [_gbfcb ],_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]=_gbda &^_aegdf .Data [_bddad +_ebebg ];};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],_gbda &^_aegdf .Data [_dfb ],_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixNotPixSrcOrDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],^(_gbda |_aegdf .Data [_gbfcb ]),_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]=^(_gbda |_aegdf .Data [_bddad +_ebebg ]);};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],^(_gbda |_aegdf .Data [_dfb ]),_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixNotPixSrcAndDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],^(_gbda &_aegdf .Data [_gbfcb ]),_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]=^(_gbda &_aegdf .Data [_bddad +_ebebg ]);};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],^(_gbda &_aegdf .Data [_dfb ]),_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};case PixNotPixSrcXorDst :if _ggfaa {for _edcb =0;_edcb < _fbbb ;_edcb ++{if _ecdd ==_gcaf {_gbda =_fcfef .Data [_aabg ]<<_cagg ;if _bba {_gbda =_gbfge (_gbda ,_fcfef .Data [_aabg +1]>>_ffcdb ,_acda );};}else {_gbda =_fcfef .Data [_aabg ]>>_ffcdb ;};_aegdf .Data [_gbfcb ]=_gbfge (_aegdf .Data [_gbfcb ],^(_gbda ^_aegdf .Data [_gbfcb ]),_afgbf );_gbfcb +=_aegdf .RowStride ;_aabg +=_fcfef .RowStride ;};};if _cdaee {for _edcb =0;_edcb < _fbbb ;_edcb ++{for _ebebg =0;_ebebg < _daeg ;_ebebg ++{_gbda =_gbfge (_fcfef .Data [_dcbf +_ebebg ]<<_cagg ,_fcfef .Data [_dcbf +_ebebg +1]>>_ffcdb ,_acda );_aegdf .Data [_bddad +_ebebg ]=^(_gbda ^_aegdf .Data [_bddad +_ebebg ]);};_bddad +=_aegdf .RowStride ;_dcbf +=_fcfef .RowStride ;};};if _afca {for _edcb =0;_edcb < _fbbb ;_edcb ++{_gbda =_fcfef .Data [_ffegf ]<<_cagg ;if _caad {_gbda =_gbfge (_gbda ,_fcfef .Data [_ffegf +1]>>_ffcdb ,_acda );};_aegdf .Data [_dfb ]=_gbfge (_aegdf .Data [_dfb ],^(_gbda ^_aegdf .Data [_dfb ]),_daae );_dfb +=_aegdf .RowStride ;_ffegf +=_fcfef .RowStride ;};};default:_ab .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",_dbgb );return _f .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 (_ceb *Bitmap )ClipRectangle (box *_ad .Rectangle )(_agfg *Bitmap ,_adc *_ad .Rectangle ,_dcf error ){const _fcad ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_f .Error (_fcad ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_bdc ,_gfd :=_ceb .Width ,_ceb .Height ;_egf :=_ad .Rect (0,0,_bdc ,_gfd );if !box .Overlaps (_egf ){return nil ,nil ,_f .Error (_fcad ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_gbfc :=box .Intersect (_egf );_eaf ,_abg :=_gbfc .Min .X ,_gbfc .Min .Y ;_ged ,_aafe :=_gbfc .Dx (),_gbfc .Dy ();_agfg =New (_ged ,_aafe );_agfg .Text =_ceb .Text ;if _dcf =_agfg .RasterOperation (0,0,_ged ,_aafe ,PixSrc ,_ceb ,_eaf ,_abg );_dcf !=nil {return nil ,nil ,_f .Wrap (_dcf ,_fcad ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");};_adc =&_gbfc ;return _agfg ,_adc ,nil ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);type Getter interface{GetBitmap ()*Bitmap ;};func _ddfa (_gbgg *Bitmap ,_ggcfa ,_gebb ,_ccea ,_bgag int ,_bbdeb RasterOperator ,_gdbb *Bitmap ,_gebf ,_dedf int )error {var (_fdged bool ;_fccb bool ;_ffgd int ;_cbfg int ;_fgg int ;_dggdc bool ;_cacg byte ;_ggaf int ;_gcba int ;_fddb int ;_babc ,_dddd int ;);_adab :=8-(_ggcfa &7);_eacb :=_acdf [_adab ];_ggegc :=_gbgg .RowStride *_gebb +(_ggcfa >>3);_afcd :=_gdbb .RowStride *_dedf +(_gebf >>3);if _ccea < _adab {_fdged =true ;_eacb &=_bcfe [8-_adab +_ccea ];};if !_fdged {_ffgd =(_ccea -_adab )>>3;if _ffgd > 0{_fccb =true ;_cbfg =_ggegc +1;_fgg =_afcd +1;};};_ggaf =(_ggcfa +_ccea )&7;if !(_fdged ||_ggaf ==0){_dggdc =true ;_cacg =_bcfe [_ggaf ];_gcba =_ggegc +1+_ffgd ;_fddb =_afcd +1+_ffgd ;};switch _bbdeb {case PixSrc :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],_gdbb .Data [_afcd ],_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]=_gdbb .Data [_fgg +_dddd ];};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],_gdbb .Data [_fddb ],_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixNotSrc :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],^_gdbb .Data [_afcd ],_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]=^_gdbb .Data [_fgg +_dddd ];};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],^_gdbb .Data [_fddb ],_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixSrcOrDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],_gdbb .Data [_afcd ]|_gbgg .Data [_ggegc ],_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]|=_gdbb .Data [_fgg +_dddd ];};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],_gdbb .Data [_fddb ]|_gbgg .Data [_gcba ],_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixSrcAndDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],_gdbb .Data [_afcd ]&_gbgg .Data [_ggegc ],_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]&=_gdbb .Data [_fgg +_dddd ];};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],_gdbb .Data [_fddb ]&_gbgg .Data [_gcba ],_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixSrcXorDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],_gdbb .Data [_afcd ]^_gbgg .Data [_ggegc ],_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]^=_gdbb .Data [_fgg +_dddd ];};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],_gdbb .Data [_fddb ]^_gbgg .Data [_gcba ],_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixNotSrcOrDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],^(_gdbb .Data [_afcd ])|_gbgg .Data [_ggegc ],_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]|=^(_gdbb .Data [_fgg +_dddd ]);};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],^(_gdbb .Data [_fddb ])|_gbgg .Data [_gcba ],_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixNotSrcAndDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],^(_gdbb .Data [_afcd ])&_gbgg .Data [_ggegc ],_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]&=^_gdbb .Data [_fgg +_dddd ];};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],^(_gdbb .Data [_fddb ])&_gbgg .Data [_gcba ],_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixSrcOrNotDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],_gdbb .Data [_afcd ]|^(_gbgg .Data [_ggegc ]),_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]=_gdbb .Data [_fgg +_dddd ]|^(_gbgg .Data [_cbfg +_dddd ]);};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],_gdbb .Data [_fddb ]|^(_gbgg .Data [_gcba ]),_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixSrcAndNotDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],_gdbb .Data [_afcd ]&^(_gbgg .Data [_ggegc ]),_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]=_gdbb .Data [_fgg +_dddd ]&^(_gbgg .Data [_cbfg +_dddd ]);};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],_gdbb .Data [_fddb ]&^(_gbgg .Data [_gcba ]),_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixNotPixSrcOrDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],^(_gdbb .Data [_afcd ]|_gbgg .Data [_ggegc ]),_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]=^(_gdbb .Data [_fgg +_dddd ]|_gbgg .Data [_cbfg +_dddd ]);};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],^(_gdbb .Data [_fddb ]|_gbgg .Data [_gcba ]),_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixNotPixSrcAndDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],^(_gdbb .Data [_afcd ]&_gbgg .Data [_ggegc ]),_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]=^(_gdbb .Data [_fgg +_dddd ]&_gbgg .Data [_cbfg +_dddd ]);};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],^(_gdbb .Data [_fddb ]&_gbgg .Data [_gcba ]),_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};case PixNotPixSrcXorDst :for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_ggegc ]=_gbfge (_gbgg .Data [_ggegc ],^(_gdbb .Data [_afcd ]^_gbgg .Data [_ggegc ]),_eacb );_ggegc +=_gbgg .RowStride ;_afcd +=_gdbb .RowStride ;};if _fccb {for _babc =0;_babc < _bgag ;_babc ++{for _dddd =0;_dddd < _ffgd ;_dddd ++{_gbgg .Data [_cbfg +_dddd ]=^(_gdbb .Data [_fgg +_dddd ]^_gbgg .Data [_cbfg +_dddd ]);};_cbfg +=_gbgg .RowStride ;_fgg +=_gdbb .RowStride ;};};if _dggdc {for _babc =0;_babc < _bgag ;_babc ++{_gbgg .Data [_gcba ]=_gbfge (_gbgg .Data [_gcba ],^(_gdbb .Data [_fddb ]^_gbgg .Data [_gcba ]),_cacg );_gcba +=_gbgg .RowStride ;_fddb +=_gdbb .RowStride ;};};default:_ab .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",_bbdeb );return _f .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 _acf (_gcb ,_efg *Bitmap ,_bga int ,_dbe []byte ,_adb int )(_eed error ){const _cc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_dgdg ,_fae ,_aad ,_gagg ,_dae ,_bddf ,_cfd ,_cac int ;_cce ,_ecb uint32 ;_cdcg ,_fbf byte ;_fea uint16 ;);_bab :=make ([]byte ,4);_fcc :=make ([]byte ,4);for _aad =0;_aad < _gcb .Height -1;_aad ,_gagg =_aad +2,_gagg +1{_dgdg =_aad *_gcb .RowStride ;_fae =_gagg *_efg .RowStride ;for _dae ,_bddf =0,0;_dae < _adb ;_dae ,_bddf =_dae +4,_bddf +1{for _cfd =0;_cfd < 4;_cfd ++{_cac =_dgdg +_dae +_cfd ;if _cac <=len (_gcb .Data )-1&&_cac < _dgdg +_gcb .RowStride {_bab [_cfd ]=_gcb .Data [_cac ];}else {_bab [_cfd ]=0x00;};_cac =_dgdg +_gcb .RowStride +_dae +_cfd ;if _cac <=len (_gcb .Data )-1&&_cac < _dgdg +(2*_gcb .RowStride ){_fcc [_cfd ]=_gcb .Data [_cac ];}else {_fcc [_cfd ]=0x00;};};_cce =_fa .BigEndian .Uint32 (_bab );_ecb =_fa .BigEndian .Uint32 (_fcc );_ecb |=_cce ;_ecb |=_ecb <<1;_ecb &=0xaaaaaaaa;_cce =_ecb |(_ecb <<7);_cdcg =byte (_cce >>24);_fbf =byte ((_cce >>8)&0xff);_cac =_fae +_bddf ;if _cac +1==len (_efg .Data )-1||_cac +1>=_fae +_efg .RowStride {_efg .Data [_cac ]=_dbe [_cdcg ];}else {_fea =(uint16 (_dbe [_cdcg ])<<8)|uint16 (_dbe [_fbf ]);if _eed =_efg .setTwoBytes (_cac ,_fea );_eed !=nil {return _f .Wrapf (_eed ,_cc ,"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",_cac );};_bddf ++;};};};return nil ;};func (_abeb *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _facbg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _abeb ==nil {return nil ,_f .Error (_facbg ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_f .Error (_facbg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_gbgdg :=len (_abeb .Values );_fdgc :=&Bitmaps {Values :make ([]*Bitmap ,_gbgdg ),Boxes :make ([]*_ad .Rectangle ,_gbgdg )};var (_fbge ,_ceff *Bitmap ;_adff *_ad .Rectangle ;_decf error ;);for _eafa :=0;_eafa < _gbgdg ;_eafa ++{if _fbge ,_decf =_abeb .GetBitmap (_eafa );_decf !=nil {return nil ,_f .Wrap (_decf ,_facbg ,"");};if _adff ,_decf =_abeb .GetBox (_eafa );_decf !=nil {return nil ,_f .Wrap (_decf ,_facbg ,"");};if _ceff ,_decf =s .clipRectangle (_adff ,nil );_decf !=nil {return nil ,_f .Wrap (_decf ,_facbg ,"");};if _ceff ,_decf =_ceff .And (_fbge );_decf !=nil {return nil ,_f .Wrap (_decf ,_facbg ,"");};_fdgc .Values [_eafa ]=_ceff ;_fdgc .Boxes [_eafa ]=_adff ;};return _fdgc ,nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_ad .Rectangle ;};func (_gfeff *ClassedPoints )xSortFunction ()func (_ccgd int ,_dgac int )bool {return func (_gbgf ,_cedd int )bool {return _gfeff .XAtIndex (_gbgf )< _gfeff .XAtIndex (_cedd )};};func _gbfge (_ecgg ,_dedg ,_fadf byte )byte {return (_ecgg &^(_fadf ))|(_dedg &_fadf )};func _fbfg (_cgfd ,_ccdb *Bitmap ,_dfgc *Selection )(*Bitmap ,error ){const _faec ="\u0065\u0072\u006fd\u0065";var (_gegc error ;_cfecb *Bitmap ;);_cgfd ,_gegc =_ccg (_cgfd ,_ccdb ,_dfgc ,&_cfecb );if _gegc !=nil {return nil ,_f .Wrap (_gegc ,_faec ,"");};if _gegc =_cgfd .setAll ();_gegc !=nil {return nil ,_f .Wrap (_gegc ,_faec ,"");};var _fbcbg SelectionValue ;for _dbac :=0;_dbac < _dfgc .Height ;_dbac ++{for _ccbe :=0;_ccbe < _dfgc .Width ;_ccbe ++{_fbcbg =_dfgc .Data [_dbac ][_ccbe ];if _fbcbg ==SelHit {_gegc =_feea (_cgfd ,_dfgc .Cx -_ccbe ,_dfgc .Cy -_dbac ,_ccdb .Width ,_ccdb .Height ,PixSrcAndDst ,_cfecb ,0,0);if _gegc !=nil {return nil ,_f .Wrap (_gegc ,_faec ,"");};};};};if MorphBC ==SymmetricMorphBC {return _cgfd ,nil ;};_cccd ,_fbgfd ,_bbbe ,_gea :=_dfgc .findMaxTranslations ();if _cccd > 0{if _gegc =_cgfd .RasterOperation (0,0,_cccd ,_ccdb .Height ,PixClr ,nil ,0,0);_gegc !=nil {return nil ,_f .Wrap (_gegc ,_faec ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _bbbe > 0{if _gegc =_cgfd .RasterOperation (_ccdb .Width -_bbbe ,0,_bbbe ,_ccdb .Height ,PixClr ,nil ,0,0);_gegc !=nil {return nil ,_f .Wrap (_gegc ,_faec ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _fbgfd > 0{if _gegc =_cgfd .RasterOperation (0,0,_ccdb .Width ,_fbgfd ,PixClr ,nil ,0,0);_gegc !=nil {return nil ,_f .Wrap (_gegc ,_faec ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _gea > 0{if _gegc =_cgfd .RasterOperation (0,_ccdb .Height -_gea ,_ccdb .Width ,_gea ,PixClr ,nil ,0,0);_gegc !=nil {return nil ,_f .Wrap (_gegc ,_faec ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _cgfd ,nil ;};func (_dbcf *Bitmap )equivalent (_dfcc *Bitmap )bool {if _dbcf ==_dfcc {return true ;};if !_dbcf .SizesEqual (_dfcc ){return false ;};_egge :=_bca (_dbcf ,_dfcc ,CmbOpXor );_gceg :=_dbcf .countPixels ();_cca :=int (0.25*float32 (_gceg ));if _egge .thresholdPixelSum (_cca ){return false ;};var (_fabe [9][9]int ;_fbe [18][9]int ;_eag [9][18]int ;_eaae int ;_dbdc int ;);_ffec :=9;_aefe :=_dbcf .Height /_ffec ;_egdc :=_dbcf .Width /_ffec ;_dedb ,_fcce :=_aefe /2,_egdc /2;if _aefe < _egdc {_dedb =_egdc /2;_fcce =_aefe /2;};_ddba :=float64 (_dedb )*float64 (_fcce )*_c .Pi ;_eggc :=int (float64 (_aefe *_egdc /2)*0.9);_cabe :=int (float64 (_egdc *_aefe /2)*0.9);for _ccf :=0;_ccf < _ffec ;_ccf ++{_aga :=_egdc *_ccf +_eaae ;var _adgg int ;if _ccf ==_ffec -1{_eaae =0;_adgg =_dbcf .Width ;}else {_adgg =_aga +_egdc ;if ((_dbcf .Width -_eaae )%_ffec )> 0{_eaae ++;_adgg ++;};};for _fddc :=0;_fddc < _ffec ;_fddc ++{_agd :=_aefe *_fddc +_dbdc ;var _ggbf int ;if _fddc ==_ffec -1{_dbdc =0;_ggbf =_dbcf .Height ;}else {_ggbf =_agd +_aefe ;if (_dbcf .Height -_dbdc )%_ffec > 0{_dbdc ++;_ggbf ++;};};var _fcd ,_eba ,_fcab ,_adf int ;_fbbe :=(_aga +_adgg )/2;_bfgg :=(_agd +_ggbf )/2;for _fadc :=_aga ;_fadc < _adgg ;_fadc ++{for _bdg :=_agd ;_bdg < _ggbf ;_bdg ++{if _egge .GetPixel (_fadc ,_bdg ){if _fadc < _fbbe {_fcd ++;}else {_eba ++;};if _bdg < _bfgg {_adf ++;}else {_fcab ++;};};};};_fabe [_ccf ][_fddc ]=_fcd +_eba ;_fbe [_ccf *2][_fddc ]=_fcd ;_fbe [_ccf *2+1][_fddc ]=_eba ;_eag [_ccf ][_fddc *2]=_adf ;_eag [_ccf ][_fddc *2+1]=_fcab ;};};for _ecf :=0;_ecf < _ffec *2-1;_ecf ++{for _cbgc :=0;_cbgc < (_ffec -1);_cbgc ++{var _dab int ;for _fbbg :=0;_fbbg < 2;_fbbg ++{for _gffc :=0;_gffc < 2;_gffc ++{_dab +=_fbe [_ecf +_fbbg ][_cbgc +_gffc ];};};if _dab > _cabe {return false ;};};};for _dfcf :=0;_dfcf < (_ffec -1);_dfcf ++{for _bcc :=0;_bcc < ((_ffec *2)-1);_bcc ++{var _fedb int ;for _gbcf :=0;_gbcf < 2;_gbcf ++{for _dcffd :=0;_dcffd < 2;_dcffd ++{_fedb +=_eag [_dfcf +_gbcf ][_bcc +_dcffd ];};};if _fedb > _eggc {return false ;};};};for _afeea :=0;_afeea < (_ffec -2);_afeea ++{for _feec :=0;_feec < (_ffec -2);_feec ++{var _bbcf ,_cbbc int ;for _cfdd :=0;_cfdd < 3;_cfdd ++{for _efgc :=0;_efgc < 3;_efgc ++{if _cfdd ==_efgc {_bbcf +=_fabe [_afeea +_cfdd ][_feec +_efgc ];};if (2-_cfdd )==_efgc {_cbbc +=_fabe [_afeea +_cfdd ][_feec +_efgc ];};};};if _bbcf > _cabe ||_cbbc > _cabe {return false ;};};};for _ddcf :=0;_ddcf < (_ffec -1);_ddcf ++{for _cbf :=0;_cbf < (_ffec -1);_cbf ++{var _dce int ;for _ddd :=0;_ddd < 2;_ddd ++{for _dgde :=0;_dgde < 2;_dgde ++{_dce +=_fabe [_ddcf +_ddd ][_cbf +_dgde ];};};if float64 (_dce )> _ddba {return false ;};};};return true ;};func (_dcbde *Bitmaps )Size ()int {return len (_dcbde .Values )};func _ceac (_bbde *Bitmap ,_abcd ...MorphProcess )(_bdae *Bitmap ,_cgb error ){const _eaee ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _bbde ==nil {return nil ,_f .Error (_eaee ,"\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 (_abcd )==0{return nil ,_f .Error (_eaee ,"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 _cgb =_gaade (_abcd ...);_cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"");};var _egacf ,_dadfg ,_eedga int ;_bdae =_bbde .Copy ();for _ ,_baag :=range _abcd {switch _baag .Operation {case MopDilation :_egacf ,_dadfg =_baag .getWidthHeight ();_bdae ,_cgb =DilateBrick (nil ,_bdae ,_egacf ,_dadfg );if _cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"");};case MopErosion :_egacf ,_dadfg =_baag .getWidthHeight ();_bdae ,_cgb =_bdfe (nil ,_bdae ,_egacf ,_dadfg );if _cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"");};case MopOpening :_egacf ,_dadfg =_baag .getWidthHeight ();_bdae ,_cgb =_bbfgd (nil ,_bdae ,_egacf ,_dadfg );if _cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"");};case MopClosing :_egacf ,_dadfg =_baag .getWidthHeight ();_bdae ,_cgb =_bgcf (nil ,_bdae ,_egacf ,_dadfg );if _cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"");};case MopRankBinaryReduction :_bdae ,_cgb =_ae (_bdae ,_baag .Arguments ...);if _cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"");};case MopReplicativeBinaryExpansion :_bdae ,_cgb =_eeag (_bdae ,_baag .Arguments [0]);if _cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"");};case MopAddBorder :_eedga =_baag .Arguments [0];_bdae ,_cgb =_bdae .AddBorder (_eedga ,0);if _cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"");};default:return nil ,_f .Error (_eaee ,"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 _eedga > 0{_bdae ,_cgb =_bdae .RemoveBorder (_eedga );if _cgb !=nil {return nil ,_f .Wrap (_cgb ,_eaee ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _bdae ,nil ;};func (_dddf *Boxes )Add (box *_ad .Rectangle )error {if _dddf ==nil {return _f .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");};*_dddf =append (*_dddf ,box );return nil ;};func (_abbd *Bitmap )removeBorderGeneral (_aac ,_bee ,_dcdc ,_gfge int )(*Bitmap ,error ){const _dgfa ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _aac < 0||_bee < 0||_dcdc < 0||_gfge < 0{return nil ,_f .Error (_dgfa ,"\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");};_afac ,_ddca :=_abbd .Width ,_abbd .Height ;_gccf :=_afac -_aac -_bee ;_cddd :=_ddca -_dcdc -_gfge ;if _gccf <=0{return nil ,_f .Errorf (_dgfa ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_gccf );};if _cddd <=0{return nil ,_f .Errorf (_dgfa ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_cddd );};_dcaa :=New (_gccf ,_cddd );_dcaa .Color =_abbd .Color ;_cbdd :=_dcaa .RasterOperation (0,0,_gccf ,_cddd ,PixSrc ,_abbd ,_aac ,_dcdc );if _cbdd !=nil {return nil ,_f .Wrap (_cbdd ,_dgfa ,"");};return _dcaa ,nil ;};func (_eae *Bitmap )InverseData (){_eae .inverseData ()};func (_gecb *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _feea (_gecb ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _bdfe (_bcgf ,_gae *Bitmap ,_gcgc ,_dac int )(*Bitmap ,error ){const _fgde ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _gae ==nil {return nil ,_f .Error (_fgde ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gcgc < 1||_dac < 1{return nil ,_f .Error (_fgde ,"\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 _gcgc ==1&&_dac ==1{_ebfb ,_gad :=_baec (_bcgf ,_gae );if _gad !=nil {return nil ,_f .Wrap (_gad ,_fgde ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _ebfb ,nil ;};if _gcgc ==1||_dac ==1{_cedf :=SelCreateBrick (_dac ,_gcgc ,_dac /2,_gcgc /2,SelHit );_eabe ,_faeg :=_fbfg (_bcgf ,_gae ,_cedf );if _faeg !=nil {return nil ,_f .Wrap (_faeg ,_fgde ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _eabe ,nil ;};_dfffe :=SelCreateBrick (1,_gcgc ,0,_gcgc /2,SelHit );_dfae :=SelCreateBrick (_dac ,1,_dac /2,0,SelHit );_ffea ,_cfcg :=_fbfg (nil ,_gae ,_dfffe );if _cfcg !=nil {return nil ,_f .Wrap (_cfcg ,_fgde ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_bcgf ,_cfcg =_fbfg (_bcgf ,_ffea ,_dfae );if _cfcg !=nil {return nil ,_f .Wrap (_cfcg ,_fgde ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _bcgf ,nil ;};func (_bgef *ClassedPoints )Swap (i ,j int ){_bgef .IntSlice [i ],_bgef .IntSlice [j ]=_bgef .IntSlice [j ],_bgef .IntSlice [i ];};func (_eeef *Bitmap )thresholdPixelSum (_cfdb int )bool {var (_eefd int ;_aacf uint8 ;_ceef byte ;_aedg int ;);_gggf :=_eeef .RowStride ;_egag :=uint (_eeef .Width &0x07);if _egag !=0{_aacf =uint8 ((0xff<<(8-_egag ))&0xff);_gggf --;};for _fcfe :=0;_fcfe < _eeef .Height ;_fcfe ++{for _aedg =0;_aedg < _gggf ;_aedg ++{_ceef =_eeef .Data [_fcfe *_eeef .RowStride +_aedg ];_eefd +=int (_fed [_ceef ]);};if _egag !=0{_ceef =_eeef .Data [_fcfe *_eeef .RowStride +_aedg ]&_aacf ;_eefd +=int (_fed [_ceef ]);};if _eefd > _cfdb {return true ;};};return false ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _cff ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_bea :=_cabc (width ,height );_bea .Data =data ;if len (data )< height *_bea .RowStride {return nil ,_f .Errorf (_cff ,"\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 *_bea .RowStride );};return _bea ,nil ;};func (_gfdeb *Bitmaps )makeSizeIndicator (_ebee ,_aebaa int ,_faed LocationFilter ,_dbde SizeComparison )(_ebae *_dc .NumSlice ,_dbfa error ){const _caaa ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _gfdeb ==nil {return nil ,_f .Error (_caaa ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _faed {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_caaa ,"\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",_faed );};switch _dbde {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_f .Errorf (_caaa ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_dbde );};_ebae =&_dc .NumSlice {};var (_ebfa ,_cdacb ,_ggag int ;_adcce *Bitmap ;);for _ ,_adcce =range _gfdeb .Values {_ebfa =0;_cdacb ,_ggag =_adcce .Width ,_adcce .Height ;switch _faed {case LocSelectWidth :if (_dbde ==SizeSelectIfLT &&_cdacb < _ebee )||(_dbde ==SizeSelectIfGT &&_cdacb > _ebee )||(_dbde ==SizeSelectIfLTE &&_cdacb <=_ebee )||(_dbde ==SizeSelectIfGTE &&_cdacb >=_ebee )||(_dbde ==SizeSelectIfEQ &&_cdacb ==_ebee ){_ebfa =1;};case LocSelectHeight :if (_dbde ==SizeSelectIfLT &&_ggag < _aebaa )||(_dbde ==SizeSelectIfGT &&_ggag > _aebaa )||(_dbde ==SizeSelectIfLTE &&_ggag <=_aebaa )||(_dbde ==SizeSelectIfGTE &&_ggag >=_aebaa )||(_dbde ==SizeSelectIfEQ &&_ggag ==_aebaa ){_ebfa =1;};case LocSelectIfEither :if (_dbde ==SizeSelectIfLT &&(_cdacb < _ebee ||_ggag < _aebaa ))||(_dbde ==SizeSelectIfGT &&(_cdacb > _ebee ||_ggag > _aebaa ))||(_dbde ==SizeSelectIfLTE &&(_cdacb <=_ebee ||_ggag <=_aebaa ))||(_dbde ==SizeSelectIfGTE &&(_cdacb >=_ebee ||_ggag >=_aebaa ))||(_dbde ==SizeSelectIfEQ &&(_cdacb ==_ebee ||_ggag ==_aebaa )){_ebfa =1;};case LocSelectIfBoth :if (_dbde ==SizeSelectIfLT &&(_cdacb < _ebee &&_ggag < _aebaa ))||(_dbde ==SizeSelectIfGT &&(_cdacb > _ebee &&_ggag > _aebaa ))||(_dbde ==SizeSelectIfLTE &&(_cdacb <=_ebee &&_ggag <=_aebaa ))||(_dbde ==SizeSelectIfGTE &&(_cdacb >=_ebee &&_ggag >=_aebaa ))||(_dbde ==SizeSelectIfEQ &&(_cdacb ==_ebee &&_ggag ==_aebaa )){_ebfa =1;};};_ebae .AddInt (_ebfa );};return _ebae ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_fgbg float64 ,_afbd error ){const _acc ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_f .Error (_acc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_f .Error (_acc ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_f .Error (_acc ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_fbg ,_eead :=bm1 .Width ,bm1 .Height ;_cfbcb ,_cecd :=bm2 .Width ,bm2 .Height ;_fdda :=_bcga (_fbg -_cfbcb );if _fdda > maxDiffW {return 0,nil ;};_ecec :=_bcga (_eead -_cecd );if _ecec > maxDiffH {return 0,nil ;};var _fbcd ,_aefc int ;if delX >=0{_fbcd =int (delX +0.5);}else {_fbcd =int (delX -0.5);};if delY >=0{_aefc =int (delY +0.5);}else {_aefc =int (delY -0.5);};_gfef :=_dge (_aefc ,0);_edg :=_bgba (_cecd +_aefc ,_eead );_egdf :=bm1 .RowStride *_gfef ;_eaeb :=bm2 .RowStride *(_gfef -_aefc );_fda :=_dge (_fbcd ,0);_gdgda :=_bgba (_cfbcb +_fbcd ,_fbg );_bgacg :=bm2 .RowStride ;var _dgge ,_cdgf int ;if _fbcd >=8{_dgge =_fbcd >>3;_egdf +=_dgge ;_fda -=_dgge <<3;_gdgda -=_dgge <<3;_fbcd &=7;}else if _fbcd <=-8{_cdgf =-((_fbcd +7)>>3);_eaeb +=_cdgf ;_bgacg -=_cdgf ;_fbcd +=_cdgf <<3;};if _fda >=_gdgda ||_gfef >=_edg {return 0,nil ;};_fccee :=(_gdgda +7)>>3;var (_faaca ,_aefcf ,_eca byte ;_cgcc ,_cfec ,_gfaf int ;);switch {case _fbcd ==0:for _gfaf =_gfef ;_gfaf < _edg ;_gfaf ,_egdf ,_eaeb =_gfaf +1,_egdf +bm1 .RowStride ,_eaeb +bm2 .RowStride {for _cfec =0;_cfec < _fccee ;_cfec ++{_eca =bm1 .Data [_egdf +_cfec ]&bm2 .Data [_eaeb +_cfec ];_cgcc +=tab [_eca ];};};case _fbcd > 0:if _bgacg < _fccee {for _gfaf =_gfef ;_gfaf < _edg ;_gfaf ,_egdf ,_eaeb =_gfaf +1,_egdf +bm1 .RowStride ,_eaeb +bm2 .RowStride {_faaca ,_aefcf =bm1 .Data [_egdf ],bm2 .Data [_eaeb ]>>uint (_fbcd );_eca =_faaca &_aefcf ;_cgcc +=tab [_eca ];for _cfec =1;_cfec < _bgacg ;_cfec ++{_faaca ,_aefcf =bm1 .Data [_egdf +_cfec ],(bm2 .Data [_eaeb +_cfec ]>>uint (_fbcd ))|(bm2 .Data [_eaeb +_cfec -1]<<uint (8-_fbcd ));_eca =_faaca &_aefcf ;_cgcc +=tab [_eca ];};_faaca =bm1 .Data [_egdf +_cfec ];_aefcf =bm2 .Data [_eaeb +_cfec -1]<<uint (8-_fbcd );_eca =_faaca &_aefcf ;_cgcc +=tab [_eca ];};}else {for _gfaf =_gfef ;_gfaf < _edg ;_gfaf ,_egdf ,_eaeb =_gfaf +1,_egdf +bm1 .RowStride ,_eaeb +bm2 .RowStride {_faaca ,_aefcf =bm1 .Data [_egdf ],bm2 .Data [_eaeb ]>>uint (_fbcd );_eca =_faaca &_aefcf ;_cgcc +=tab [_eca ];for _cfec =1;_cfec < _fccee ;_cfec ++{_faaca =bm1 .Data [_egdf +_cfec ];_aefcf =(bm2 .Data [_eaeb +_cfec ]>>uint (_fbcd ))|(bm2 .Data [_eaeb +_cfec -1]<<uint (8-_fbcd ));_eca =_faaca &_aefcf ;_cgcc +=tab [_eca ];};};};default:if _fccee < _bgacg {for _gfaf =_gfef ;_gfaf < _edg ;_gfaf ,_egdf ,_eaeb =_gfaf +1,_egdf +bm1 .RowStride ,_eaeb +bm2 .RowStride {for _cfec =0;_cfec < _fccee ;_cfec ++{_faaca =bm1 .Data [_egdf +_cfec ];_aefcf =bm2 .Data [_eaeb +_cfec ]<<uint (-_fbcd );_aefcf |=bm2 .Data [_eaeb +_cfec +1]>>uint (8+_fbcd );_eca =_faaca &_aefcf ;_cgcc +=tab [_eca ];};};}else {for _gfaf =_gfef ;_gfaf < _edg ;_gfaf ,_egdf ,_eaeb =_gfaf +1,_egdf +bm1 .RowStride ,_eaeb +bm2 .RowStride {for _cfec =0;_cfec < _fccee -1;_cfec ++{_faaca =bm1 .Data [_egdf +_cfec ];_aefcf =bm2 .Data [_eaeb +_cfec ]<<uint (-_fbcd );_aefcf |=bm2 .Data [_eaeb +_cfec +1]>>uint (8+_fbcd );_eca =_faaca &_aefcf ;_cgcc +=tab [_eca ];};_faaca =bm1 .Data [_egdf +_cfec ];_aefcf =bm2 .Data [_eaeb +_cfec ]<<uint (-_fbcd );_eca =_faaca &_aefcf ;_cgcc +=tab [_eca ];};};};_fgbg =float64 (_cgcc )*float64 (_cgcc )/(float64 (area1 )*float64 (area2 ));return _fgbg ,nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_bagd bool ,_ffb error ){const _eafe ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_bffe ,_eaabc :=p1 .Width ,p1 .Height ;_eeaeb ,_ggfg :=p3 .Width ,p3 .Height ;if _dc .Abs (_bffe -_eeaeb )> maxDiffW {return false ,nil ;};if _dc .Abs (_eaabc -_ggfg )> maxDiffH {return false ,nil ;};_gfeg :=int (float32 (area1 )*(1.0-rank )+0.5);_bfgcd :=int (float32 (area3 )*(1.0-rank )+0.5);var _afgf ,_gbg int ;if delX >=0{_afgf =int (delX +0.5);}else {_afgf =int (delX -0.5);};if delY >=0{_gbg =int (delY +0.5);}else {_gbg =int (delY -0.5);};_gged :=p1 .CreateTemplate ();if _ffb =_gged .RasterOperation (0,0,_bffe ,_eaabc ,PixSrc ,p1 ,0,0);_ffb !=nil {return false ,_f .Wrap (_ffb ,_eafe ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ffb =_gged .RasterOperation (_afgf ,_gbg ,_bffe ,_eaabc ,PixNotSrcAndDst ,p4 ,0,0);_ffb !=nil {return false ,_f .Wrap (_ffb ,_eafe ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_bagd ,_ffb =_gged .ThresholdPixelSum (_gfeg ,tab8 );if _ffb !=nil {return false ,_f .Wrap (_ffb ,_eafe ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _bagd {return false ,nil ;};if _ffb =_gged .RasterOperation (_afgf ,_gbg ,_eeaeb ,_ggfg ,PixSrc ,p3 ,0,0);_ffb !=nil {return false ,_f .Wrap (_ffb ,_eafe ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ffb =_gged .RasterOperation (0,0,_eeaeb ,_ggfg ,PixNotSrcAndDst ,p2 ,0,0);_ffb !=nil {return false ,_f .Wrap (_ffb ,_eafe ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_bagd ,_ffb =_gged .ThresholdPixelSum (_bfgcd ,tab8 );if _ffb !=nil {return false ,_f .Wrap (_ffb ,_eafe ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_bagd ,nil ;};type Points []Point ;func (_cacd MorphProcess )verify (_dcfd int ,_agda ,_gca *int )error {const _fbgb ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _cacd .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_cacd .Arguments )!=2{return _f .Error (_fbgb ,"\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");};_baee ,_gdab :=_cacd .getWidthHeight ();if _baee <=0||_gdab <=0{return _f .Error (_fbgb ,"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 :_cafc :=len (_cacd .Arguments );*_agda +=_cafc ;if _cafc < 1||_cafc > 4{return _f .Error (_fbgb ,"\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 _bcdg :=0;_bcdg < _cafc ;_bcdg ++{if _cacd .Arguments [_bcdg ]< 1||_cacd .Arguments [_bcdg ]> 4{return _f .Error (_fbgb ,"\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 (_cacd .Arguments )==0{return _f .Error (_fbgb ,"\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");};_cbefa :=_cacd .Arguments [0];if _cbefa !=2&&_cbefa !=4&&_cbefa !=8{return _f .Error (_fbgb ,"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");};*_agda -=_adee [_cbefa /4];case MopAddBorder :if len (_cacd .Arguments )==0{return _f .Error (_fbgb ,"\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");};_gbb :=_cacd .Arguments [0];if _dcfd > 0{return _f .Error (_fbgb ,"\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 _gbb < 1{return _f .Error (_fbgb ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_gca =_gbb ;};return nil ;};func _dfaa (_bdccg ,_cgcb *Bitmap ,_dfbb ,_gdfbf int )(_cbac error ){const _dcggg ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_dgcca ,_efgb ,_ddfc ,_dcace int ;_geac ,_addeab ,_geddef ,_ecce ,_bedf ,_fbea ,_fggd ,_fdba byte ;);for _dgcca =0;_dgcca < _dfbb ;_dgcca ++{_ddfc =_dgcca *_bdccg .RowStride ;_dcace =_dgcca *_cgcb .RowStride ;for _efgb =0;_efgb < _gdfbf ;_efgb ++{if _geac ,_cbac =_bdccg .GetByte (_ddfc +_efgb );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _addeab ,_cbac =_cgcb .GetByte (_dcace +_efgb );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _dgcca > 0{if _geddef ,_cbac =_bdccg .GetByte (_ddfc -_bdccg .RowStride +_efgb );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_geac |=_geddef |(_geddef <<1)|(_geddef >>1);if _efgb > 0{if _fdba ,_cbac =_bdccg .GetByte (_ddfc -_bdccg .RowStride +_efgb -1);_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_geac |=_fdba <<7;};if _efgb < _gdfbf -1{if _fdba ,_cbac =_bdccg .GetByte (_ddfc -_bdccg .RowStride +_efgb +1);_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_geac |=_fdba >>7;};};if _efgb > 0{if _ecce ,_cbac =_bdccg .GetByte (_ddfc +_efgb -1);_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u006a\u0020\u003e \u0030");};_geac |=_ecce <<7;};_geac &=_addeab ;if _geac ==0||^_geac ==0{if _cbac =_bdccg .SetByte (_ddfc +_efgb ,_geac );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_fggd =_geac ;_geac =(_geac |(_geac >>1)|(_geac <<1))&_addeab ;if (_geac ^_fggd )==0{if _cbac =_bdccg .SetByte (_ddfc +_efgb ,_geac );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _dgcca =_dfbb -1;_dgcca >=0;_dgcca --{_ddfc =_dgcca *_bdccg .RowStride ;_dcace =_dgcca *_cgcb .RowStride ;for _efgb =_gdfbf -1;_efgb >=0;_efgb --{if _geac ,_cbac =_bdccg .GetByte (_ddfc +_efgb );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _addeab ,_cbac =_cgcb .GetByte (_dcace +_efgb );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _dgcca < _dfbb -1{if _bedf ,_cbac =_bdccg .GetByte (_ddfc +_bdccg .RowStride +_efgb );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_geac |=_bedf |(_bedf <<1)|_bedf >>1;if _efgb > 0{if _fdba ,_cbac =_bdccg .GetByte (_ddfc +_bdccg .RowStride +_efgb -1);_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\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");};_geac |=_fdba <<7;};if _efgb < _gdfbf -1{if _fdba ,_cbac =_bdccg .GetByte (_ddfc +_bdccg .RowStride +_efgb +1);_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\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");};_geac |=_fdba >>7;};};if _efgb < _gdfbf -1{if _fbea ,_cbac =_bdccg .GetByte (_ddfc +_efgb +1);_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\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");};_geac |=_fbea >>7;};_geac &=_addeab ;if _geac ==0||(^_geac )==0{if _cbac =_bdccg .SetByte (_ddfc +_efgb ,_geac );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_fggd =_geac ;_geac =(_geac |(_geac >>1)|(_geac <<1))&_addeab ;if (_geac ^_fggd )==0{if _cbac =_bdccg .SetByte (_ddfc +_efgb ,_geac );_cbac !=nil {return _f .Wrap (_cbac ,_dcggg ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");};break ;};};};};return nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_ad .Rectangle ;};func _bcdc (_eeggb ,_dagf *Bitmap ,_fafc *Selection )(*Bitmap ,error ){const _dcbd ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _ccfg error ;if _eeggb ,_ccfg =_gaf (_eeggb ,_dagf ,_fafc );_ccfg !=nil {return nil ,_ccfg ;};_egac ,_ccfg :=_ecfb (nil ,_dagf ,_fafc );if _ccfg !=nil {return nil ,_f .Wrap (_ccfg ,_dcbd ,"");};if _ ,_ccfg =_fbfg (_eeggb ,_egac ,_fafc );_ccfg !=nil {return nil ,_f .Wrap (_ccfg ,_dcbd ,"");};return _eeggb ,nil ;};func (_dcff *Bitmap )SetDefaultPixel (){for _bfba :=range _dcff .Data {_dcff .Data [_bfba ]=byte (0xff);};};type BoundaryCondition int ;func _bcga (_bdcc int )int {if _bdcc < 0{return -_bdcc ;};return _bdcc ;};func _cea ()(_abeg []byte ){_abeg =make ([]byte ,256);for _fbc :=0;_fbc < 256;_fbc ++{_deee :=byte (_fbc );_abeg [_deee ]=(_deee &0x01)|((_deee &0x04)>>1)|((_deee &0x10)>>2)|((_deee &0x40)>>3)|((_deee &0x02)<<3)|((_deee &0x08)<<2)|((_deee &0x20)<<1)|(_deee &0x80);};return _abeg ;};func _ddc (_cee ,_cacc *Bitmap ,_dad int ,_ece []byte ,_acg int )(_dbge error ){const _bfd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_dcc ,_aaa ,_cede ,_ffc ,_fac ,_bgf ,_ebb ,_cedee int ;_bcda ,_gdag ,_dgdgb ,_gfa uint32 ;_ggba ,_fge byte ;_cec uint16 ;);_fff :=make ([]byte ,4);_fca :=make ([]byte ,4);for _cede =0;_cede < _cee .Height -1;_cede ,_ffc =_cede +2,_ffc +1{_dcc =_cede *_cee .RowStride ;_aaa =_ffc *_cacc .RowStride ;for _fac ,_bgf =0,0;_fac < _acg ;_fac ,_bgf =_fac +4,_bgf +1{for _ebb =0;_ebb < 4;_ebb ++{_cedee =_dcc +_fac +_ebb ;if _cedee <=len (_cee .Data )-1&&_cedee < _dcc +_cee .RowStride {_fff [_ebb ]=_cee .Data [_cedee ];}else {_fff [_ebb ]=0x00;};_cedee =_dcc +_cee .RowStride +_fac +_ebb ;if _cedee <=len (_cee .Data )-1&&_cedee < _dcc +(2*_cee .RowStride ){_fca [_ebb ]=_cee .Data [_cedee ];}else {_fca [_ebb ]=0x00;};};_bcda =_fa .BigEndian .Uint32 (_fff );_gdag =_fa .BigEndian .Uint32 (_fca );_dgdgb =_bcda &_gdag ;_dgdgb |=_dgdgb <<1;_gfa =_bcda |_gdag ;_gfa &=_gfa <<1;_gdag =_dgdgb &_gfa ;_gdag &=0xaaaaaaaa;_bcda =_gdag |(_gdag <<7);_ggba =byte (_bcda >>24);_fge =byte ((_bcda >>8)&0xff);_cedee =_aaa +_bgf ;if _cedee +1==len (_cacc .Data )-1||_cedee +1>=_aaa +_cacc .RowStride {if _dbge =_cacc .SetByte (_cedee ,_ece [_ggba ]);_dbge !=nil {return _f .Wrapf (_dbge ,_bfd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cedee );};}else {_cec =(uint16 (_ece [_ggba ])<<8)|uint16 (_ece [_fge ]);if _dbge =_cacc .setTwoBytes (_cedee ,_cec );_dbge !=nil {return _f .Wrapf (_dbge ,_bfd ,"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",_cedee );};_bgf ++;};};};return nil ;};func (_gdgd *Bitmap )Equals (s *Bitmap )bool {if len (_gdgd .Data )!=len (s .Data )||_gdgd .Width !=s .Width ||_gdgd .Height !=s .Height {return false ;};for _fedg :=0;_fedg < _gdgd .Height ;_fedg ++{_ddb :=_fedg *_gdgd .RowStride ;for _acb :=0;_acb < _gdgd .RowStride ;_acb ++{if _gdgd .Data [_ddb +_acb ]!=s .Data [_ddb +_acb ]{return false ;};};};return true ;};func _faecb (_dbgf ,_ecddb int ,_bdbc string )*Selection {_eccga :=&Selection {Height :_dbgf ,Width :_ecddb ,Name :_bdbc };_eccga .Data =make ([][]SelectionValue ,_dbgf );for _dfbf :=0;_dfbf < _dbgf ;_dfbf ++{_eccga .Data [_dfbf ]=make ([]SelectionValue ,_ecddb );};return _eccga ;};func (_fcda *Boxes )makeSizeIndicator (_egdd ,_bff int ,_beef LocationFilter ,_dbdb SizeComparison )*_dc .NumSlice {_abfe :=&_dc .NumSlice {};var _ecd ,_bbdd ,_fgag int ;for _ ,_dcga :=range *_fcda {_ecd =0;_bbdd ,_fgag =_dcga .Dx (),_dcga .Dy ();switch _beef {case LocSelectWidth :if (_dbdb ==SizeSelectIfLT &&_bbdd < _egdd )||(_dbdb ==SizeSelectIfGT &&_bbdd > _egdd )||(_dbdb ==SizeSelectIfLTE &&_bbdd <=_egdd )||(_dbdb ==SizeSelectIfGTE &&_bbdd >=_egdd ){_ecd =1;};case LocSelectHeight :if (_dbdb ==SizeSelectIfLT &&_fgag < _bff )||(_dbdb ==SizeSelectIfGT &&_fgag > _bff )||(_dbdb ==SizeSelectIfLTE &&_fgag <=_bff )||(_dbdb ==SizeSelectIfGTE &&_fgag >=_bff ){_ecd =1;};case LocSelectIfEither :if (_dbdb ==SizeSelectIfLT &&(_fgag < _bff ||_bbdd < _egdd ))||(_dbdb ==SizeSelectIfGT &&(_fgag > _bff ||_bbdd > _egdd ))||(_dbdb ==SizeSelectIfLTE &&(_fgag <=_bff ||_bbdd <=_egdd ))||(_dbdb ==SizeSelectIfGTE &&(_fgag >=_bff ||_bbdd >=_egdd )){_ecd =1;};case LocSelectIfBoth :if (_dbdb ==SizeSelectIfLT &&(_fgag < _bff &&_bbdd < _egdd ))||(_dbdb ==SizeSelectIfGT &&(_fgag > _bff &&_bbdd > _egdd ))||(_dbdb ==SizeSelectIfLTE &&(_fgag <=_bff &&_bbdd <=_egdd ))||(_dbdb ==SizeSelectIfGTE &&(_fgag >=_bff &&_bbdd >=_egdd )){_ecd =1;};};_abfe .AddInt (_ecd );};return _abfe ;};func (_bgg *Bitmap )addBorderGeneral (_ceaf ,_cfa ,_fgbf ,_adbe int ,_ffe int )(*Bitmap ,error ){const _gdbc ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _ceaf < 0||_cfa < 0||_fgbf < 0||_adbe < 0{return nil ,_f .Error (_gdbc ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_eeae ,_bdde :=_bgg .Width ,_bgg .Height ;_deg :=_eeae +_ceaf +_cfa ;_bgec :=_bdde +_fgbf +_adbe ;_eec :=New (_deg ,_bgec );_eec .Color =_bgg .Color ;_cae :=PixClr ;if _ffe > 0{_cae =PixSet ;};_ebg :=_eec .RasterOperation (0,0,_ceaf ,_bgec ,_cae ,nil ,0,0);if _ebg !=nil {return nil ,_f .Wrap (_ebg ,_gdbc ,"\u006c\u0065\u0066\u0074");};_ebg =_eec .RasterOperation (_deg -_cfa ,0,_cfa ,_bgec ,_cae ,nil ,0,0);if _ebg !=nil {return nil ,_f .Wrap (_ebg ,_gdbc ,"\u0072\u0069\u0067h\u0074");};_ebg =_eec .RasterOperation (0,0,_deg ,_fgbf ,_cae ,nil ,0,0);if _ebg !=nil {return nil ,_f .Wrap (_ebg ,_gdbc ,"\u0074\u006f\u0070");};_ebg =_eec .RasterOperation (0,_bgec -_adbe ,_deg ,_adbe ,_cae ,nil ,0,0);if _ebg !=nil {return nil ,_f .Wrap (_ebg ,_gdbc ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_ebg =_eec .RasterOperation (_ceaf ,_fgbf ,_eeae ,_bdde ,PixSrc ,_bgg ,0,0);if _ebg !=nil {return nil ,_f .Wrap (_ebg ,_gdbc ,"\u0063\u006f\u0070\u0079");};return _eec ,nil ;};func _bfeb (_cbbd *Bitmap ,_dffa *_dc .Stack ,_fadg ,_gfbf int )(_fggc *_ad .Rectangle ,_aeeb error ){const _ggac ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _cbbd ==nil {return nil ,_f .Error (_ggac ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _dffa ==nil {return nil ,_f .Error (_ggac ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_gead ,_dcea :=_cbbd .Width ,_cbbd .Height ;_bfebg :=_gead -1;_ebgg :=_dcea -1;if _fadg < 0||_fadg > _bfebg ||_gfbf < 0||_gfbf > _ebgg ||!_cbbd .GetPixel (_fadg ,_gfbf ){return nil ,nil ;};_edba :=_ad .Rect (100000,100000,0,0);if _aeeb =_dgbd (_dffa ,_fadg ,_fadg ,_gfbf ,1,_ebgg ,&_edba );_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _aeeb =_dgbd (_dffa ,_fadg ,_fadg ,_gfbf +1,-1,_ebgg ,&_edba );_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_edba .Min .X ,_edba .Max .X =_fadg ,_fadg ;_edba .Min .Y ,_edba .Max .Y =_gfbf ,_gfbf ;var (_cabeg *fillSegment ;_cfaa int ;);for _dffa .Len ()> 0{if _cabeg ,_aeeb =_edfg (_dffa );_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"");};_gfbf =_cabeg ._adda ;for _fadg =_cabeg ._babfd -1;_fadg >=0&&_cbbd .GetPixel (_fadg ,_gfbf );_fadg --{if _aeeb =_cbbd .SetPixel (_fadg ,_gfbf ,0);_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _fadg >=_cabeg ._babfd -1{for {for _fadg ++;_fadg <=_cabeg ._ddgce +1&&_fadg <=_bfebg &&!_cbbd .GetPixel (_fadg ,_gfbf );_fadg ++{};_cfaa =_fadg ;if !(_fadg <=_cabeg ._ddgce +1&&_fadg <=_bfebg ){break ;};for ;_fadg <=_bfebg &&_cbbd .GetPixel (_fadg ,_gfbf );_fadg ++{if _aeeb =_cbbd .SetPixel (_fadg ,_gfbf ,0);_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _aeeb =_dgbd (_dffa ,_cfaa ,_fadg -1,_cabeg ._adda ,_cabeg ._abgd ,_ebgg ,&_edba );_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fadg > _cabeg ._ddgce {if _aeeb =_dgbd (_dffa ,_cabeg ._ddgce +1,_fadg -1,_cabeg ._adda ,-_cabeg ._abgd ,_ebgg ,&_edba );_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_cfaa =_fadg +1;if _cfaa < _cabeg ._babfd {if _aeeb =_dgbd (_dffa ,_cfaa ,_cabeg ._babfd -1,_cabeg ._adda ,-_cabeg ._abgd ,_ebgg ,&_edba );_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_fadg =_cabeg ._babfd ;for {for ;_fadg <=_bfebg &&_cbbd .GetPixel (_fadg ,_gfbf );_fadg ++{if _aeeb =_cbbd .SetPixel (_fadg ,_gfbf ,0);_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _aeeb =_dgbd (_dffa ,_cfaa ,_fadg -1,_cabeg ._adda ,_cabeg ._abgd ,_ebgg ,&_edba );_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fadg > _cabeg ._ddgce {if _aeeb =_dgbd (_dffa ,_cabeg ._ddgce +1,_fadg -1,_cabeg ._adda ,-_cabeg ._abgd ,_ebgg ,&_edba );_aeeb !=nil {return nil ,_f .Wrap (_aeeb ,_ggac ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _fadg ++;_fadg <=_cabeg ._ddgce +1&&_fadg <=_bfebg &&!_cbbd .GetPixel (_fadg ,_gfbf );_fadg ++{};_cfaa =_fadg ;if !(_fadg <=_cabeg ._ddgce +1&&_fadg <=_bfebg ){break ;};};};_edba .Max .X ++;_edba .Max .Y ++;return &_edba ,nil ;};var (_addb =_cba ();_ggegg =_cga ();_abfae =_fga (););func (_aagg *ClassedPoints )SortByY (){_aagg ._beca =_aagg .ySortFunction ();_a .Sort (_aagg )};func _cga ()(_bgd [256]uint32 ){for _gd :=0;_gd < 256;_gd ++{if _gd &0x01!=0{_bgd [_gd ]|=0xf;};if _gd &0x02!=0{_bgd [_gd ]|=0xf0;};if _gd &0x04!=0{_bgd [_gd ]|=0xf00;};if _gd &0x08!=0{_bgd [_gd ]|=0xf000;};if _gd &0x10!=0{_bgd [_gd ]|=0xf0000;};if _gd &0x20!=0{_bgd [_gd ]|=0xf00000;};if _gd &0x40!=0{_bgd [_gd ]|=0xf000000;};if _gd &0x80!=0{_bgd [_gd ]|=0xf0000000;};};return _bgd ;};func (_afefe *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _bebg ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_afefe .Values )==0{return nil ,_f .Error (_bebg ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_aegab :=&BitmapsArray {};_afefe .SortByHeight ();_geab :=-1;_eafb :=-1;for _agdf :=0;_agdf < len (_afefe .Values );_agdf ++{_ceca :=_afefe .Values [_agdf ].Height ;if _ceca > _geab {_geab =_ceca ;_eafb ++;_aegab .Values =append (_aegab .Values ,&Bitmaps {});};_aegab .Values [_eafb ].AddBitmap (_afefe .Values [_agdf ]);};return _aegab ,nil ;};func _bgcf (_cbdfe ,_gcag *Bitmap ,_bbef ,_cedea int )(*Bitmap ,error ){const _egfac ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _gcag ==nil {return nil ,_f .Error (_egfac ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bbef < 1||_cedea < 1{return nil ,_f .Error (_egfac ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _bbef ==1&&_cedea ==1{return _baec (_cbdfe ,_gcag );};if MorphBC ==SymmetricMorphBC {_gbeg ,_gbbd :=_fedgb (_cbdfe ,_gcag ,_bbef ,_cedea );if _gbbd !=nil {return nil ,_f .Wrap (_gbbd ,_egfac ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _gbeg ,nil ;};_ebeb :=_dge (_bbef /2,_cedea /2);_gfegf :=8*((_ebeb +7)/8);_dcaf ,_cecf :=_gcag .AddBorder (_gfegf ,0);if _cecf !=nil {return nil ,_f .Wrapf (_cecf ,_egfac ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_gfegf );};var _bfcf ,_cbbf *Bitmap ;if _bbef ==1||_cedea ==1{_egba :=SelCreateBrick (_cedea ,_bbef ,_cedea /2,_bbef /2,SelHit );_bfcf ,_cecf =_bcdc (nil ,_dcaf ,_egba );if _cecf !=nil {return nil ,_f .Wrap (_cecf ,_egfac ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_agcd :=SelCreateBrick (1,_bbef ,0,_bbef /2,SelHit );_cabd ,_ddda :=_ecfb (nil ,_dcaf ,_agcd );if _ddda !=nil {return nil ,_f .Wrap (_ddda ,_egfac ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_gbbb :=SelCreateBrick (_cedea ,1,_cedea /2,0,SelHit );_bfcf ,_ddda =_ecfb (nil ,_cabd ,_gbbb );if _ddda !=nil {return nil ,_f .Wrap (_ddda ,_egfac ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_ddda =_fbfg (_cabd ,_bfcf ,_agcd );_ddda !=nil {return nil ,_f .Wrap (_ddda ,_egfac ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_ddda =_fbfg (_bfcf ,_cabd ,_gbbb );_ddda !=nil {return nil ,_f .Wrap (_ddda ,_egfac ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");};};if _cbbf ,_cecf =_bfcf .RemoveBorder (_gfegf );_cecf !=nil {return nil ,_f .Wrap (_cecf ,_egfac ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _cbdfe ==nil {return _cbbf ,nil ;};if _ ,_cecf =_baec (_cbdfe ,_cbbf );_cecf !=nil {return nil ,_cecf ;};return _cbdfe ,nil ;};func _agec (_abdc *Bitmap ,_fgcg ,_edeg int ,_gfcd ,_gedce int ,_bdeg RasterOperator ){var (_eeafd bool ;_gbge bool ;_fbgbd int ;_gcgea int ;_edga int ;_edbfa int ;_baefd bool ;_cgef byte ;);_dcad :=8-(_fgcg &7);_egdff :=_acdf [_dcad ];_cefc :=_abdc .RowStride *_edeg +(_fgcg >>3);if _gfcd < _dcad {_eeafd =true ;_egdff &=_bcfe [8-_dcad +_gfcd ];};if !_eeafd {_fbgbd =(_gfcd -_dcad )>>3;if _fbgbd !=0{_gbge =true ;_gcgea =_cefc +1;};};_edga =(_fgcg +_gfcd )&7;if !(_eeafd ||_edga ==0){_baefd =true ;_cgef =_bcfe [_edga ];_edbfa =_cefc +1+_fbgbd ;};var _bacaa ,_fabd int ;switch _bdeg {case PixClr :for _bacaa =0;_bacaa < _gedce ;_bacaa ++{_abdc .Data [_cefc ]=_gbfge (_abdc .Data [_cefc ],0x0,_egdff );_cefc +=_abdc .RowStride ;};if _gbge {for _bacaa =0;_bacaa < _gedce ;_bacaa ++{for _fabd =0;_fabd < _fbgbd ;_fabd ++{_abdc .Data [_gcgea +_fabd ]=0x0;};_gcgea +=_abdc .RowStride ;};};if _baefd {for _bacaa =0;_bacaa < _gedce ;_bacaa ++{_abdc .Data [_edbfa ]=_gbfge (_abdc .Data [_edbfa ],0x0,_cgef );_edbfa +=_abdc .RowStride ;};};case PixSet :for _bacaa =0;_bacaa < _gedce ;_bacaa ++{_abdc .Data [_cefc ]=_gbfge (_abdc .Data [_cefc ],0xff,_egdff );_cefc +=_abdc .RowStride ;};if _gbge {for _bacaa =0;_bacaa < _gedce ;_bacaa ++{for _fabd =0;_fabd < _fbgbd ;_fabd ++{_abdc .Data [_gcgea +_fabd ]=0xff;};_gcgea +=_abdc .RowStride ;};};if _baefd {for _bacaa =0;_bacaa < _gedce ;_bacaa ++{_abdc .Data [_edbfa ]=_gbfge (_abdc .Data [_edbfa ],0xff,_cgef );_edbfa +=_abdc .RowStride ;};};case PixNotDst :for _bacaa =0;_bacaa < _gedce ;_bacaa ++{_abdc .Data [_cefc ]=_gbfge (_abdc .Data [_cefc ],^_abdc .Data [_cefc ],_egdff );_cefc +=_abdc .RowStride ;};if _gbge {for _bacaa =0;_bacaa < _gedce ;_bacaa ++{for _fabd =0;_fabd < _fbgbd ;_fabd ++{_abdc .Data [_gcgea +_fabd ]=^(_abdc .Data [_gcgea +_fabd ]);};_gcgea +=_abdc .RowStride ;};};if _baefd {for _bacaa =0;_bacaa < _gedce ;_bacaa ++{_abdc .Data [_edbfa ]=_gbfge (_abdc .Data [_edbfa ],^_abdc .Data [_edbfa ],_cgef );_edbfa +=_abdc .RowStride ;};};};};func _acgg (_ddaa ,_ceg *Bitmap ,_dag ,_edac ,_fefc uint ,_debbg ,_gdbf int ,_gfgc bool ,_abdeb ,_cgec int )error {for _afaf :=_debbg ;_afaf < _gdbf ;_afaf ++{if _abdeb +1< len (_ddaa .Data ){_gdfb :=_afaf +1==_gdbf ;_eceb ,_fde :=_ddaa .GetByte (_abdeb );if _fde !=nil {return _fde ;};_abdeb ++;_eceb <<=_dag ;_cfdbc ,_fde :=_ddaa .GetByte (_abdeb );if _fde !=nil {return _fde ;};_cfdbc >>=_edac ;_dedbf :=_eceb |_cfdbc ;if _gdfb &&!_gfgc {_dedbf =_bgac (_fefc ,_dedbf );};_fde =_ceg .SetByte (_cgec ,_dedbf );if _fde !=nil {return _fde ;};_cgec ++;if _gdfb &&_gfgc {_cgc ,_ddec :=_ddaa .GetByte (_abdeb );if _ddec !=nil {return _ddec ;};_cgc <<=_dag ;_dedbf =_bgac (_fefc ,_cgc );if _ddec =_ceg .SetByte (_cgec ,_dedbf );_ddec !=nil {return _ddec ;};};continue ;};_eedg ,_ggfa :=_ddaa .GetByte (_abdeb );if _ggfa !=nil {_ab .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",_abdeb ,_ggfa );return _ggfa ;};_eedg <<=_dag ;_abdeb ++;_ggfa =_ceg .SetByte (_cgec ,_eedg );if _ggfa !=nil {return _ggfa ;};_cgec ++;};return nil ;};func _baec (_aaeb ,_bddee *Bitmap )(*Bitmap ,error ){if _bddee ==nil {return nil ,_f .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 _bddee ==_aaeb {return _aaeb ,nil ;};if _aaeb ==nil {_aaeb =_bddee .createTemplate ();copy (_aaeb .Data ,_bddee .Data );return _aaeb ,nil ;};_fagc :=_aaeb .resizeImageData (_bddee );if _fagc !=nil {return nil ,_f .Wrap (_fagc ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");};_aaeb .Text =_bddee .Text ;copy (_aaeb .Data ,_bddee .Data );return _aaeb ,nil ;};func _faa (_gbab *Bitmap ,_fc int )(*Bitmap ,error ){const _ed ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gbab ==nil {return nil ,_f .Error (_ed ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fc ==1{return _baec (nil ,_gbab );};if _fc !=2&&_fc !=4&&_fc !=8{return nil ,_f .Error (_ed ,"\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");};_ef :=_fc *_gbab .Width ;_fd :=_fc *_gbab .Height ;_cdc :=New (_ef ,_fd );var _cbg error ;switch _fc {case 2:_cbg =_ec (_cdc ,_gbab );case 4:_cbg =_afa (_cdc ,_gbab );case 8:_cbg =_deb (_cdc ,_gbab );};if _cbg !=nil {return nil ,_f .Wrap (_cbg ,_ed ,"");};return _cdc ,nil ;};func _bbfgd (_cfdbf ,_addf *Bitmap ,_fbaf ,_deec int )(*Bitmap ,error ){const _bcdd ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _addf ==nil {return nil ,_f .Error (_bcdd ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _fbaf < 1&&_deec < 1{return nil ,_f .Error (_bcdd ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _fbaf ==1&&_deec ==1{return _addf .Copy (),nil ;};if _fbaf ==1||_deec ==1{var _dcfg error ;_ccfac :=SelCreateBrick (_deec ,_fbaf ,_deec /2,_fbaf /2,SelHit );_cfdbf ,_dcfg =_dcbdc (_cfdbf ,_addf ,_ccfac );if _dcfg !=nil {return nil ,_f .Wrap (_dcfg ,_bcdd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _cfdbf ,nil ;};_faae :=SelCreateBrick (1,_fbaf ,0,_fbaf /2,SelHit );_egfc :=SelCreateBrick (_deec ,1,_deec /2,0,SelHit );_aede ,_adgge :=_fbfg (nil ,_addf ,_faae );if _adgge !=nil {return nil ,_f .Wrap (_adgge ,_bcdd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_cfdbf ,_adgge =_fbfg (_cfdbf ,_aede ,_egfc );if _adgge !=nil {return nil ,_f .Wrap (_adgge ,_bcdd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_adgge =_ecfb (_aede ,_cfdbf ,_faae );if _adgge !=nil {return nil ,_f .Wrap (_adgge ,_bcdd ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_ ,_adgge =_ecfb (_cfdbf ,_aede ,_egfc );if _adgge !=nil {return nil ,_f .Wrap (_adgge ,_bcdd ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _cfdbf ,nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_edef Points )Size ()int {return len (_edef )};func _adgd (_bcaa ,_dafb *Bitmap ,_gcce ,_dbcc int )(*Bitmap ,error ){const _cbga ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _dafb ==nil {_ab .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 ,_f .Error (_cbga ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gcce < 1||_dbcc < 1{return nil ,_f .Error (_cbga ,"\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 _gcce ==1&&_dbcc ==1{_fbgf ,_aega :=_baec (_bcaa ,_dafb );if _aega !=nil {return nil ,_f .Wrap (_aega ,_cbga ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fbgf ,nil ;};if _gcce ==1||_dbcc ==1{_ddf :=SelCreateBrick (_dbcc ,_gcce ,_dbcc /2,_gcce /2,SelHit );_fbcg ,_eefe :=_ecfb (_bcaa ,_dafb ,_ddf );if _eefe !=nil {return nil ,_f .Wrap (_eefe ,_cbga ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fbcg ,nil ;};_dfff :=SelCreateBrick (1,_gcce ,0,_gcce /2,SelHit );_adec :=SelCreateBrick (_dbcc ,1,_dbcc /2,0,SelHit );_eedc ,_efccc :=_ecfb (nil ,_dafb ,_dfff );if _efccc !=nil {return nil ,_f .Wrap (_efccc ,_cbga ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_bcaa ,_efccc =_ecfb (_bcaa ,_eedc ,_adec );if _efccc !=nil {return nil ,_f .Wrap (_efccc ,_cbga ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _bcaa ,nil ;};func TstDSymbol (t *_gg .T ,scale ...int )*Bitmap {_gefc ,_adgc :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_e .NoError (t ,_adgc );return TstGetScaledSymbol (t ,_gefc ,scale ...);};func (_efcc *Bitmap )GetUnpaddedData ()([]byte ,error ){_afee :=uint (_efcc .Width &0x07);if _afee ==0{return _efcc .Data ,nil ;};_eea :=_efcc .Width *_efcc .Height ;if _eea %8!=0{_eea >>=3;_eea ++;}else {_eea >>=3;};_dgcc :=make ([]byte ,_eea );_gdbd :=_de .NewWriterMSB (_dgcc );const _fcg ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _ded :=0;_ded < _efcc .Height ;_ded ++{for _fbff :=0;_fbff < _efcc .RowStride ;_fbff ++{_cdg :=_efcc .Data [_ded *_efcc .RowStride +_fbff ];if _fbff !=_efcc .RowStride -1{_beg :=_gdbd .WriteByte (_cdg );if _beg !=nil {return nil ,_f .Wrap (_beg ,_fcg ,"");};continue ;};for _fbb :=uint (0);_fbb < _afee ;_fbb ++{_fbfc :=_gdbd .WriteBit (int (_cdg >>(7-_fbb )&0x01));if _fbfc !=nil {return nil ,_f .Wrap (_fbfc ,_fcg ,"");};};};};return _dgcc ,nil ;};type shift int ;func _fgega (_dgce ,_eff *Bitmap ,_ffge ,_bad ,_dadf ,_eggd ,_dea ,_ffcd ,_gedcg ,_fedc int ,_cagf CombinationOperator ,_cdge int )error {var _cecb int ;_gdae :=func (){_cecb ++;_dadf +=_eff .RowStride ;_eggd +=_dgce .RowStride ;_dea +=_dgce .RowStride };for _cecb =_ffge ;_cecb < _bad ;_gdae (){var _caeb uint16 ;_ffcg :=_dadf ;for _agff :=_eggd ;_agff <=_dea ;_agff ++{_ffgg ,_gdce :=_eff .GetByte (_ffcg );if _gdce !=nil {return _gdce ;};_cfbc ,_gdce :=_dgce .GetByte (_agff );if _gdce !=nil {return _gdce ;};_caeb =(_caeb |(uint16 (_cfbc )&0xff))<<uint (_fedc );_cfbc =byte (_caeb >>8);if _gdce =_eff .SetByte (_ffcg ,_debb (_ffgg ,_cfbc ,_cagf ));_gdce !=nil {return _gdce ;};_ffcg ++;_caeb <<=uint (_gedcg );if _agff ==_dea {_cfbc =byte (_caeb >>(8-uint8 (_fedc )));if _cdge !=0{_cfbc =_bgac (uint (8+_ffcd ),_cfbc );};_ffgg ,_gdce =_eff .GetByte (_ffcg );if _gdce !=nil {return _gdce ;};if _gdce =_eff .SetByte (_ffcg ,_debb (_ffgg ,_cfbc ,_cagf ));_gdce !=nil {return _gdce ;};};};};return nil ;};func _cffg (_fcca ,_dbdgb *Bitmap ,_dddb ,_gedde ,_befg ,_efb ,_dgb ,_abec ,_bcce ,_bcea int ,_afff CombinationOperator )error {var _fdde int ;_fbag :=func (){_fdde ++;_befg +=_dbdgb .RowStride ;_efb +=_fcca .RowStride ;_dgb +=_fcca .RowStride };for _fdde =_dddb ;_fdde < _gedde ;_fbag (){var _cefd uint16 ;_defd :=_befg ;for _eacg :=_efb ;_eacg <=_dgb ;_eacg ++{_bfga ,_gebc :=_dbdgb .GetByte (_defd );if _gebc !=nil {return _gebc ;};_cdae ,_gebc :=_fcca .GetByte (_eacg );if _gebc !=nil {return _gebc ;};_cefd =(_cefd |uint16 (_cdae ))<<uint (_bcea );_cdae =byte (_cefd >>8);if _eacg ==_dgb {_cdae =_bgac (uint (_abec ),_cdae );};if _gebc =_dbdgb .SetByte (_defd ,_debb (_bfga ,_cdae ,_afff ));_gebc !=nil {return _gebc ;};_defd ++;_cefd <<=uint (_bcce );};};return nil ;};func _ccg (_dddba *Bitmap ,_cdgd *Bitmap ,_baad *Selection ,_gdfa **Bitmap )(*Bitmap ,error ){const _cgd ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _cdgd ==nil {return nil ,_f .Error (_cgd ,"\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 _baad ==nil {return nil ,_f .Error (_cgd ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_dagd ,_adef :=_baad .Height ,_baad .Width ;if _dagd ==0||_adef ==0{return nil ,_f .Error (_cgd ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _dddba ==nil {_dddba =_cdgd .createTemplate ();*_gdfa =_cdgd ;return _dddba ,nil ;};_dddba .Width =_cdgd .Width ;_dddba .Height =_cdgd .Height ;_dddba .RowStride =_cdgd .RowStride ;_dddba .Color =_cdgd .Color ;_dddba .Data =make ([]byte ,_cdgd .RowStride *_cdgd .Height );if _dddba ==_cdgd {*_gdfa =_cdgd .Copy ();}else {*_gdfa =_cdgd ;};return _dddba ,nil ;};func TstWriteSymbols (t *_gg .T ,bms *Bitmaps ,src *Bitmap ){for _gbgfe :=0;_gbgfe < bms .Size ();_gbgfe ++{_fdbabe :=bms .Values [_gbgfe ];_daef :=bms .Boxes [_gbgfe ];_gbbf :=src .RasterOperation (_daef .Min .X ,_daef .Min .Y ,_fdbabe .Width ,_fdbabe .Height ,PixSrc ,_fdbabe ,0,0);_e .NoError (t ,_gbbf );};};func _agg ()[]int {_ggec :=make ([]int ,256);_ggec [0]=0;_ggec [1]=7;var _bdda int ;for _bdda =2;_bdda < 4;_bdda ++{_ggec [_bdda ]=_ggec [_bdda -2]+6;};for _bdda =4;_bdda < 8;_bdda ++{_ggec [_bdda ]=_ggec [_bdda -4]+5;};for _bdda =8;_bdda < 16;_bdda ++{_ggec [_bdda ]=_ggec [_bdda -8]+4;};for _bdda =16;_bdda < 32;_bdda ++{_ggec [_bdda ]=_ggec [_bdda -16]+3;};for _bdda =32;_bdda < 64;_bdda ++{_ggec [_bdda ]=_ggec [_bdda -32]+2;};for _bdda =64;_bdda < 128;_bdda ++{_ggec [_bdda ]=_ggec [_bdda -64]+1;};for _bdda =128;_bdda < 256;_bdda ++{_ggec [_bdda ]=_ggec [_bdda -128];};return _ggec ;};func _fbagf (_bbcfc *Bitmap ,_fgdc *Bitmap ,_fbcda int )(_bgafd error ){const _fgeca ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_aegdfc :=_bgba (_bbcfc .Height ,_fgdc .Height );_gdbcb :=_bgba (_bbcfc .RowStride ,_fgdc .RowStride );switch _fbcda {case 4:_bgafd =_bfcd (_bbcfc ,_fgdc ,_aegdfc ,_gdbcb );case 8:_bgafd =_dfaa (_bbcfc ,_fgdc ,_aegdfc ,_gdbcb );default:return _f .Errorf (_fgeca ,"\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",_fbcda );};if _bgafd !=nil {return _f .Wrap (_bgafd ,_fgeca ,"");};return nil ;};func (_gdgg *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _ggbe ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _gdgg ==nil {return nil ,_f .Error (_ggbe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_gdgg .Values )-1{return nil ,_f .Errorf (_ggbe ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gdgg .Values [i ],nil ;};func (_ecfdc *BitmapsArray )AddBitmaps (bm *Bitmaps ){_ecfdc .Values =append (_ecfdc .Values ,bm )};func (_decfc *byWidth )Less (i ,j int )bool {return _decfc .Values [i ].Width < _decfc .Values [j ].Width };func _ffdd (_bdea *Bitmap ,_dfgg ,_ffeb int ,_efab ,_defge int ,_bedd RasterOperator ,_caga *Bitmap ,_cddf ,_ceeb int )error {var _fccf ,_geae ,_bbee ,_fdce int ;if _dfgg < 0{_cddf -=_dfgg ;_efab +=_dfgg ;_dfgg =0;};if _cddf < 0{_dfgg -=_cddf ;_efab +=_cddf ;_cddf =0;};_fccf =_dfgg +_efab -_bdea .Width ;if _fccf > 0{_efab -=_fccf ;};_geae =_cddf +_efab -_caga .Width ;if _geae > 0{_efab -=_geae ;};if _ffeb < 0{_ceeb -=_ffeb ;_defge +=_ffeb ;_ffeb =0;};if _ceeb < 0{_ffeb -=_ceeb ;_defge +=_ceeb ;_ceeb =0;};_bbee =_ffeb +_defge -_bdea .Height ;if _bbee > 0{_defge -=_bbee ;};_fdce =_ceeb +_defge -_caga .Height ;if _fdce > 0{_defge -=_fdce ;};if _efab <=0||_defge <=0{return nil ;};var _baca error ;switch {case _dfgg &7==0&&_cddf &7==0:_baca =_fded (_bdea ,_dfgg ,_ffeb ,_efab ,_defge ,_bedd ,_caga ,_cddf ,_ceeb );case _dfgg &7==_cddf &7:_baca =_ddfa (_bdea ,_dfgg ,_ffeb ,_efab ,_defge ,_bedd ,_caga ,_cddf ,_ceeb );default:_baca =_abag (_bdea ,_dfgg ,_ffeb ,_efab ,_defge ,_bedd ,_caga ,_cddf ,_ceeb );};if _baca !=nil {return _f .Wrap (_baca ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func TstFrameBitmap ()*Bitmap {return _adaf .Copy ()};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func (_begd *ClassedPoints )Len ()int {return _begd .IntSlice .Size ()};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _ceac (src ,sequence ...);};func (_gfb *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _gfb .addBorderGeneral (left ,right ,top ,bot ,val );};func _efdf (_agea *Bitmap ,_cfgag ,_gcgf ,_cfff ,_bdad int ,_adcca RasterOperator ){if _cfgag < 0{_cfff +=_cfgag ;_cfgag =0;};_ecgd :=_cfgag +_cfff -_agea .Width ;if _ecgd > 0{_cfff -=_ecgd ;};if _gcgf < 0{_bdad +=_gcgf ;_gcgf =0;};_deddb :=_gcgf +_bdad -_agea .Height ;if _deddb > 0{_bdad -=_deddb ;};if _cfff <=0||_bdad <=0{return ;};if (_cfgag &7)==0{_gbee (_agea ,_cfgag ,_gcgf ,_cfff ,_bdad ,_adcca );}else {_agec (_agea ,_cfgag ,_gcgf ,_cfff ,_bdad ,_adcca );};};func TstPSymbol (t *_gg .T )*Bitmap {t .Helper ();_agbe :=New (5,8);_e .NoError (t ,_agbe .SetPixel (0,0,1));_e .NoError (t ,_agbe .SetPixel (1,0,1));_e .NoError (t ,_agbe .SetPixel (2,0,1));_e .NoError (t ,_agbe .SetPixel (3,0,1));_e .NoError (t ,_agbe .SetPixel (4,1,1));_e .NoError (t ,_agbe .SetPixel (0,1,1));_e .NoError (t ,_agbe .SetPixel (4,2,1));_e .NoError (t ,_agbe .SetPixel (0,2,1));_e .NoError (t ,_agbe .SetPixel (4,3,1));_e .NoError (t ,_agbe .SetPixel (0,3,1));_e .NoError (t ,_agbe .SetPixel (0,4,1));_e .NoError (t ,_agbe .SetPixel (1,4,1));_e .NoError (t ,_agbe .SetPixel (2,4,1));_e .NoError (t ,_agbe .SetPixel (3,4,1));_e .NoError (t ,_agbe .SetPixel (0,5,1));_e .NoError (t ,_agbe .SetPixel (0,6,1));_e .NoError (t ,_agbe .SetPixel (0,7,1));return _agbe ;};func (_bgb *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _bgb .Copy (),nil ;};_adbd ,_bde :=_bgb .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _bde !=nil {return nil ,_f .Wrap (_bde ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _adbd ,nil ;};func (_gff *Bitmap )Equivalent (s *Bitmap )bool {return _gff .equivalent (s )};func _gaade (_dceb ...MorphProcess )(_cabf error ){const _ffca ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _ddbb ,_cfga int ;for _bbgfc ,_cbefae :=range _dceb {if _cabf =_cbefae .verify (_bbgfc ,&_ddbb ,&_cfga );_cabf !=nil {return _f .Wrap (_cabf ,_ffca ,"");};};if _cfga !=0&&_ddbb !=0{return _f .Error (_ffca ,"\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 ;};type Boxes []*_ad .Rectangle ;func (_ebggc *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_edacg *Bitmaps ,_gef error ){const _ggef ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _ebggc ==nil {return nil ,_f .Error (_ggef ,"\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 ,_f .Errorf (_ggef ,"\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 ,_f .Errorf (_ggef ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );};_dabg ,_gef :=_ebggc .makeSizeIndicator (width ,height ,tp ,relation );if _gef !=nil {return nil ,_f .Wrap (_gef ,_ggef ,"");};_edacg ,_gef =_ebggc .selectByIndicator (_dabg );if _gef !=nil {return nil ,_f .Wrap (_gef ,_ggef ,"");};return _edacg ,nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _ggf ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_ge :=_cabc (width ,height );_ge .Data =data ;if _dgcb :=((width *height )+7)>>3;len (data )< _dgcb {return nil ,_f .Errorf (_ggf ,"\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 ),_dgcb );};if _dcac :=_ge .addPadBits ();_dcac !=nil {return nil ,_f .Wrap (_dcac ,_ggf ,"");};return _ge ,nil ;};func (_deece *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _dfgba ="\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 >=_deece .IntSlice .Size (){return 0,_f .Errorf (_dfgba ,"\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 (_deece .XAtIndex (i )),nil ;};func (_ggd Points )XSorter ()func (_aaeg ,_faafe int )bool {return func (_bbfge ,_aeag int )bool {return _ggd [_bbfge ].X < _ggd [_aeag ].X };};func _gbee (_gfab *Bitmap ,_bgbg ,_dggcd int ,_addg ,_cgecg int ,_dgdb RasterOperator ){var (_feegc int ;_bbced byte ;_aefb ,_ddfe int ;_cad int ;);_fcdd :=_addg >>3;_gffe :=_addg &7;if _gffe > 0{_bbced =_bcfe [_gffe ];};_feegc =_gfab .RowStride *_dggcd +(_bgbg >>3);switch _dgdb {case PixClr :for _aefb =0;_aefb < _cgecg ;_aefb ++{_cad =_feegc +_aefb *_gfab .RowStride ;for _ddfe =0;_ddfe < _fcdd ;_ddfe ++{_gfab .Data [_cad ]=0x0;_cad ++;};if _gffe > 0{_gfab .Data [_cad ]=_gbfge (_gfab .Data [_cad ],0x0,_bbced );};};case PixSet :for _aefb =0;_aefb < _cgecg ;_aefb ++{_cad =_feegc +_aefb *_gfab .RowStride ;for _ddfe =0;_ddfe < _fcdd ;_ddfe ++{_gfab .Data [_cad ]=0xff;_cad ++;};if _gffe > 0{_gfab .Data [_cad ]=_gbfge (_gfab .Data [_cad ],0xff,_bbced );};};case PixNotDst :for _aefb =0;_aefb < _cgecg ;_aefb ++{_cad =_feegc +_aefb *_gfab .RowStride ;for _ddfe =0;_ddfe < _fcdd ;_ddfe ++{_gfab .Data [_cad ]=^_gfab .Data [_cad ];_cad ++;};if _gffe > 0{_gfab .Data [_cad ]=_gbfge (_gfab .Data [_cad ],^_gfab .Data [_cad ],_bbced );};};};};func _eeag (_debd *Bitmap ,_ccde int )(*Bitmap ,error ){const _abge ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _debd ==nil {return nil ,_f .Error (_abge ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ccde <=0{return nil ,_f .Error (_abge ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _ccde ==1{_acaad ,_becf :=_baec (nil ,_debd );if _becf !=nil {return nil ,_f .Wrap (_becf ,_abge ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _acaad ,nil ;};_edbf ,_aaac :=_ede (_debd ,_ccde ,_ccde );if _aaac !=nil {return nil ,_f .Wrap (_aaac ,_abge ,"");};return _edbf ,nil ;};func (_fede *Selection )findMaxTranslations ()(_eafed ,_aadb ,_fbcf ,_gcgcg int ){for _ggcd :=0;_ggcd < _fede .Height ;_ggcd ++{for _acga :=0;_acga < _fede .Width ;_acga ++{if _fede .Data [_ggcd ][_acga ]==SelHit {_eafed =_dge (_eafed ,_fede .Cx -_acga );_aadb =_dge (_aadb ,_fede .Cy -_ggcd );_fbcf =_dge (_fbcf ,_acga -_fede .Cx );_gcgcg =_dge (_gcgcg ,_ggcd -_fede .Cy );};};};return _eafed ,_aadb ,_fbcf ,_gcgcg ;};const _fffd =5000;func (_dcbb *Bitmap )setBit (_ege int ){_dcbb .Data [(_ege >>3)]|=0x80>>uint (_ege &7)};func (_cbec *Bitmap )setEightFullBytes (_gfba int ,_cecg uint64 )error {if _gfba +7> len (_cbec .Data )-1{return _f .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");};_cbec .Data [_gfba ]=byte ((_cecg &0xff00000000000000)>>56);_cbec .Data [_gfba +1]=byte ((_cecg &0xff000000000000)>>48);_cbec .Data [_gfba +2]=byte ((_cecg &0xff0000000000)>>40);_cbec .Data [_gfba +3]=byte ((_cecg &0xff00000000)>>32);_cbec .Data [_gfba +4]=byte ((_cecg &0xff000000)>>24);_cbec .Data [_gfba +5]=byte ((_cecg &0xff0000)>>16);_cbec .Data [_gfba +6]=byte ((_cecg &0xff00)>>8);_cbec .Data [_gfba +7]=byte (_cecg &0xff);return nil ;};type Component int ;func (_gbcfg *Boxes )Get (i int )(*_ad .Rectangle ,error ){const _gbae ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _gbcfg ==nil {return nil ,_f .Error (_gbae ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_gbcfg )-1{return nil ,_f .Errorf (_gbae ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_gbcfg )[i ],nil ;};func NewClassedPoints (points *Points ,classes _dc .IntSlice )(*ClassedPoints ,error ){const _aaab ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_f .Error (_aaab ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_f .Error (_aaab ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_ddfd :=&ClassedPoints {Points :points ,IntSlice :classes };if _aadad :=_ddfd .validateIntSlice ();_aadad !=nil {return nil ,_f .Wrap (_aadad ,_aaab ,"");};return _ddfd ,nil ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func _fga ()(_da [256]uint64 ){for _def :=0;_def < 256;_def ++{if _def &0x01!=0{_da [_def ]|=0xff;};if _def &0x02!=0{_da [_def ]|=0xff00;};if _def &0x04!=0{_da [_def ]|=0xff0000;};if _def &0x08!=0{_da [_def ]|=0xff000000;};if _def &0x10!=0{_da [_def ]|=0xff00000000;};if _def &0x20!=0{_da [_def ]|=0xff0000000000;};if _def &0x40!=0{_da [_def ]|=0xff000000000000;};if _def &0x80!=0{_da [_def ]|=0xff00000000000000;};};return _da ;};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func _bfcd (_bcag ,_edff *Bitmap ,_aaae ,_gcgb int )(_begcc error ){const _afcae ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_gaab ,_aee ,_bgdd ,_ggbcd int ;_ace ,_ccfb ,_fgege ,_fddfc ,_fdae ,_dbf ,_dgdgg byte ;);for _gaab =0;_gaab < _aaae ;_gaab ++{_bgdd =_gaab *_bcag .RowStride ;_ggbcd =_gaab *_edff .RowStride ;for _aee =0;_aee < _gcgb ;_aee ++{_ace ,_begcc =_bcag .GetByte (_bgdd +_aee );if _begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_ccfb ,_begcc =_edff .GetByte (_ggbcd +_aee );if _begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _gaab > 0{_fgege ,_begcc =_bcag .GetByte (_bgdd -_bcag .RowStride +_aee );if _begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u0069\u0020\u003e \u0030");};_ace |=_fgege ;};if _aee > 0{_fddfc ,_begcc =_bcag .GetByte (_bgdd +_aee -1);if _begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u006a\u0020\u003e \u0030");};_ace |=_fddfc <<7;};_ace &=_ccfb ;if _ace ==0||(^_ace )==0{if _begcc =_bcag .SetByte (_bgdd +_aee ,_ace );_begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_dgdgg =_ace ;_ace =(_ace |(_ace >>1)|(_ace <<1))&_ccfb ;if (_ace ^_dgdgg )==0{if _begcc =_bcag .SetByte (_bgdd +_aee ,_ace );_begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _gaab =_aaae -1;_gaab >=0;_gaab --{_bgdd =_gaab *_bcag .RowStride ;_ggbcd =_gaab *_edff .RowStride ;for _aee =_gcgb -1;_aee >=0;_aee --{if _ace ,_begcc =_bcag .GetByte (_bgdd +_aee );_begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _ccfb ,_begcc =_edff .GetByte (_ggbcd +_aee );_begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _gaab < _aaae -1{if _fdae ,_begcc =_bcag .GetByte (_bgdd +_bcag .RowStride +_aee );_begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_ace |=_fdae ;};if _aee < _gcgb -1{if _dbf ,_begcc =_bcag .GetByte (_bgdd +_aee +1);_begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_ace |=_dbf >>7;};_ace &=_ccfb ;if _ace ==0||(^_ace )==0{if _begcc =_bcag .SetByte (_bgdd +_aee ,_ace );_begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\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 {_dgdgg =_ace ;_ace =(_ace |(_ace >>1)|(_ace <<1))&_ccfb ;if (_ace ^_dgdgg )==0{if _begcc =_bcag .SetByte (_bgdd +_aee ,_ace );_begcc !=nil {return _f .Wrap (_begcc ,_afcae ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");};break ;};};};};return nil ;};func (_abcb *Bitmap )String ()string {var _cbc ="\u000a";for _dfg :=0;_dfg < _abcb .Height ;_dfg ++{var _cbb string ;for _eda :=0;_eda < _abcb .Width ;_eda ++{_fgea :=_abcb .GetPixel (_eda ,_dfg );if _fgea {_cbb +="\u0031";}else {_cbb +="\u0030";};};_cbc +=_cbb +"\u000a";};return _cbc ;};func (_fcfa *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _fcfa .removeBorderGeneral (left ,right ,top ,bot );};func TstWSymbol (t *_gg .T ,scale ...int )*Bitmap {_bdcdc ,_fgdg :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_e .NoError (t ,_fgdg );return TstGetScaledSymbol (t ,_bdcdc ,scale ...);};func (_bgga MorphProcess )getWidthHeight ()(_dbbc ,_fafd int ){return _bgga .Arguments [0],_bgga .Arguments [1];};func _fabea ()[]int {_bgda :=make ([]int ,256);for _afaa :=0;_afaa <=0xff;_afaa ++{_cafd :=byte (_afaa );_bgda [_cafd ]=int (_cafd &0x1)+(int (_cafd >>1)&0x1)+(int (_cafd >>2)&0x1)+(int (_cafd >>3)&0x1)+(int (_cafd >>4)&0x1)+(int (_cafd >>5)&0x1)+(int (_cafd >>6)&0x1)+(int (_cafd >>7)&0x1);};return _bgda ;};func (_acad *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _acbg ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _acad ==nil {return nil ,_f .Error (_acbg ,"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 (_acad .Values )-1{return nil ,_f .Errorf (_acbg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _acad .Values [i ],nil ;};func (_fgbd *Bitmap )countPixels ()int {var (_bgc int ;_gfbcb uint8 ;_egfa byte ;_eccd int ;);_abb :=_fgbd .RowStride ;_fgec :=uint (_fgbd .Width &0x07);if _fgec !=0{_gfbcb =uint8 ((0xff<<(8-_fgec ))&0xff);_abb --;};for _cge :=0;_cge < _fgbd .Height ;_cge ++{for _eccd =0;_eccd < _abb ;_eccd ++{_egfa =_fgbd .Data [_cge *_fgbd .RowStride +_eccd ];_bgc +=int (_fed [_egfa ]);};if _fgec !=0{_bgc +=int (_fed [_fgbd .Data [_cge *_fgbd .RowStride +_eccd ]&_gfbcb ]);};};return _bgc ;};func (_adae *Bitmap )ToImage ()_ad .Image {_fcb ,_egdaa :=_b .NewImage (_adae .Width ,_adae .Height ,1,1,_adae .Data ,nil ,nil );if _egdaa !=nil {_ab .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",_egdaa );};return _fcb ;};func (_dafe *Bitmap )connComponentsBB (_gcdd int )(_egfaf *Boxes ,_dcefg error ){const _fgbdb ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _gcdd !=4&&_gcdd !=8{return nil ,_f .Error (_fgbdb ,"\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 _dafe .Zero (){return &Boxes {},nil ;};_dafe .setPadBits (0);_bceb ,_dcefg :=_baec (nil ,_dafe );if _dcefg !=nil {return nil ,_f .Wrap (_dcefg ,_fgbdb ,"\u0062\u006d\u0031");};_fbcb :=&_dc .Stack {};_fbcb .Aux =&_dc .Stack {};_egfaf =&Boxes {};var (_ceec ,_cgcg int ;_bfbf _ad .Point ;_dedd bool ;_bfgcc *_ad .Rectangle ;);for {if _bfbf ,_dedd ,_dcefg =_bceb .nextOnPixel (_cgcg ,_ceec );_dcefg !=nil {return nil ,_f .Wrap (_dcefg ,_fgbdb ,"");};if !_dedd {break ;};if _bfgcc ,_dcefg =_ebab (_bceb ,_fbcb ,_bfbf .X ,_bfbf .Y ,_gcdd );_dcefg !=nil {return nil ,_f .Wrap (_dcefg ,_fgbdb ,"");};if _dcefg =_egfaf .Add (_bfgcc );_dcefg !=nil {return nil ,_f .Wrap (_dcefg ,_fgbdb ,"");};_cgcg =_bfbf .X ;_ceec =_bfbf .Y ;};return _egfaf ,nil ;};func (_efac *Selection )setOrigin (_fagg ,_eedgc int ){_efac .Cy ,_efac .Cx =_fagg ,_eedgc };func _edbca (_acbf *Bitmap ,_edag *_dc .Stack ,_eeeaa ,_caca int )(_fagea *_ad .Rectangle ,_aceb error ){const _fdgg ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _acbf ==nil {return nil ,_f .Error (_fdgg ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _edag ==nil {return nil ,_f .Error (_fdgg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_abbb ,_dgbc :=_acbf .Width ,_acbf .Height ;_egbb :=_abbb -1;_caed :=_dgbc -1;if _eeeaa < 0||_eeeaa > _egbb ||_caca < 0||_caca > _caed ||!_acbf .GetPixel (_eeeaa ,_caca ){return nil ,nil ;};var _afef *_ad .Rectangle ;_afef ,_aceb =Rect (100000,100000,0,0);if _aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"");};if _aceb =_dgbd (_edag ,_eeeaa ,_eeeaa ,_caca ,1,_caed ,_afef );_aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _aceb =_dgbd (_edag ,_eeeaa ,_eeeaa ,_caca +1,-1,_caed ,_afef );_aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_afef .Min .X ,_afef .Max .X =_eeeaa ,_eeeaa ;_afef .Min .Y ,_afef .Max .Y =_caca ,_caca ;var (_aebc *fillSegment ;_dbbb int ;);for _edag .Len ()> 0{if _aebc ,_aceb =_edfg (_edag );_aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"");};_caca =_aebc ._adda ;for _eeeaa =_aebc ._babfd ;_eeeaa >=0&&_acbf .GetPixel (_eeeaa ,_caca );_eeeaa --{if _aceb =_acbf .SetPixel (_eeeaa ,_caca ,0);_aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"");};};if _eeeaa >=_aebc ._babfd {for _eeeaa ++;_eeeaa <=_aebc ._ddgce &&_eeeaa <=_egbb &&!_acbf .GetPixel (_eeeaa ,_caca );_eeeaa ++{};_dbbb =_eeeaa ;if !(_eeeaa <=_aebc ._ddgce &&_eeeaa <=_egbb ){continue ;};}else {_dbbb =_eeeaa +1;if _dbbb < _aebc ._babfd -1{if _aceb =_dgbd (_edag ,_dbbb ,_aebc ._babfd -1,_aebc ._adda ,-_aebc ._abgd ,_caed ,_afef );_aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_eeeaa =_aebc ._babfd +1;};for {for ;_eeeaa <=_egbb &&_acbf .GetPixel (_eeeaa ,_caca );_eeeaa ++{if _aceb =_acbf .SetPixel (_eeeaa ,_caca ,0);_aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _aceb =_dgbd (_edag ,_dbbb ,_eeeaa -1,_aebc ._adda ,_aebc ._abgd ,_caed ,_afef );_aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _eeeaa > _aebc ._ddgce +1{if _aceb =_dgbd (_edag ,_aebc ._ddgce +1,_eeeaa -1,_aebc ._adda ,-_aebc ._abgd ,_caed ,_afef );_aceb !=nil {return nil ,_f .Wrap (_aceb ,_fdgg ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _eeeaa ++;_eeeaa <=_aebc ._ddgce &&_eeeaa <=_egbb &&!_acbf .GetPixel (_eeeaa ,_caca );_eeeaa ++{};_dbbb =_eeeaa ;if !(_eeeaa <=_aebc ._ddgce &&_eeeaa <=_egbb ){break ;};};};_afef .Max .X ++;_afef .Max .Y ++;return _afef ,nil ;};func New (width ,height int )*Bitmap {_adeg :=_cabc (width ,height );_adeg .Data =make ([]byte ,height *_adeg .RowStride );return _adeg ;};func _ebab (_bcdf *Bitmap ,_cacde *_dc .Stack ,_bdgg ,_gabee ,_cceg int )(_fddfa *_ad .Rectangle ,_gbed error ){const _cbbb ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _bcdf ==nil {return nil ,_f .Error (_cbbb ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cacde ==nil {return nil ,_f .Error (_cbbb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _cceg {case 4:if _fddfa ,_gbed =_edbca (_bcdf ,_cacde ,_bdgg ,_gabee );_gbed !=nil {return nil ,_f .Wrap (_gbed ,_cbbb ,"");};return _fddfa ,nil ;case 8:if _fddfa ,_gbed =_bfeb (_bcdf ,_cacde ,_bdgg ,_gabee );_gbed !=nil {return nil ,_f .Wrap (_gbed ,_cbbb ,"");};return _fddfa ,nil ;default:return nil ,_f .Errorf (_cbbb ,"\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",_cceg );};};var _ _a .Interface =&ClassedPoints {};func (_bedb *ClassedPoints )XAtIndex (i int )float32 {return (*_bedb .Points )[_bedb .IntSlice [i ]].X };func MakePixelSumTab8 ()[]int {return _fabea ()};func TstWordBitmap (t *_gg .T ,scale ...int )*Bitmap {_gbfb :=1;if len (scale )> 0{_gbfb =scale [0];};_ccbd :=3;_efe :=9+7+15+2*_ccbd ;_acedc :=5+_ccbd +5;_eccdd :=New (_efe *_gbfb ,_acedc *_gbfb );_adfa :=&Bitmaps {};var _geda *int ;_ccbd *=_gbfb ;_daaed :=0;_geda =&_daaed ;_dcaac :=0;_begda :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,_ccbd );_begda =TstISymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,_ccbd );_begda =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,0);*_geda =0;_dcaac =5*_gbfb +_ccbd ;_begda =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,_ccbd );_begda =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstESymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstESymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,1*_gbfb );_begda =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_adfa ,_begda ,_geda ,_dcaac ,0);TstWriteSymbols (t ,_adfa ,_eccdd );return _eccdd ;};func _ecg (_fcf *Bitmap ,_dbg *Bitmap ,_abf int )(_fe error ){const _cab ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _abf {case 2:_fe =_ec (_fcf ,_dbg );case 4:_fe =_afa (_fcf ,_dbg );case 8:_fe =_deb (_fcf ,_dbg );default:return _f .Error (_cab ,"\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 _fe !=nil {_fe =_f .Wrap (_fe ,_cab ,"");};return _fe ;};func (_fbac *Bitmaps )AddBox (box *_ad .Rectangle ){_fbac .Boxes =append (_fbac .Boxes ,box )};func (_ggdd *ClassedPoints )YAtIndex (i int )float32 {return (*_ggdd .Points )[_ggdd .IntSlice [i ]].Y };func (_adggef *Bitmaps )selectByIndicator (_fcbgc *_dc .NumSlice )(_gbgda *Bitmaps ,_gbfd error ){const _aaggg ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _adggef ==nil {return nil ,_f .Error (_aaggg ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _fcbgc ==nil {return nil ,_f .Error (_aaggg ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_adggef .Values )==0{return _adggef ,nil ;};if len (*_fcbgc )!=len (_adggef .Values ){return nil ,_f .Errorf (_aaggg ,"\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 (*_fcbgc ),len (_adggef .Values ));};var _cffb ,_gcea ,_gbba int ;for _gcea =0;_gcea < len (*_fcbgc );_gcea ++{if _cffb ,_gbfd =_fcbgc .GetInt (_gcea );_gbfd !=nil {return nil ,_f .Wrap (_gbfd ,_aaggg ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _cffb ==1{_gbba ++;};};if _gbba ==len (_adggef .Values ){return _adggef ,nil ;};_gbgda =&Bitmaps {};_fbbd :=len (_adggef .Values )==len (_adggef .Boxes );for _gcea =0;_gcea < len (*_fcbgc );_gcea ++{if _cffb =int ((*_fcbgc )[_gcea ]);_cffb ==0{continue ;};_gbgda .Values =append (_gbgda .Values ,_adggef .Values [_gcea ]);if _fbbd {_gbgda .Boxes =append (_gbgda .Boxes ,_adggef .Boxes [_gcea ]);};};return _gbgda ,nil ;};func _ede (_ega *Bitmap ,_faaf ,_dfc int )(*Bitmap ,error ){const _bg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _ega ==nil {return nil ,_f .Error (_bg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _faaf <=0||_dfc <=0{return nil ,_f .Error (_bg ,"\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 _faaf ==_dfc {if _faaf ==1{_bdd ,_afg :=_baec (nil ,_ega );if _afg !=nil {return nil ,_f .Wrap (_afg ,_bg ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _bdd ,nil ;};if _faaf ==2||_faaf ==4||_faaf ==8{_deba ,_ggb :=_faa (_ega ,_faaf );if _ggb !=nil {return nil ,_f .Wrap (_ggb ,_bg ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _deba ,nil ;};};_bbgd :=_faaf *_ega .Width ;_ff :=_dfc *_ega .Height ;_gfg :=New (_bbgd ,_ff );_abe :=_gfg .RowStride ;var (_gag ,_cf ,_edb ,_gcf ,_bbe int ;_dcg byte ;_baf error ;);for _cf =0;_cf < _ega .Height ;_cf ++{_gag =_dfc *_cf *_abe ;for _edb =0;_edb < _ega .Width ;_edb ++{if _dbb :=_ega .GetPixel (_edb ,_cf );_dbb {_bbe =_faaf *_edb ;for _gcf =0;_gcf < _faaf ;_gcf ++{_gfg .setBit (_gag *8+_bbe +_gcf );};};};for _gcf =1;_gcf < _dfc ;_gcf ++{_gcd :=_gag +_gcf *_abe ;for _ce :=0;_ce < _abe ;_ce ++{if _dcg ,_baf =_gfg .GetByte (_gag +_ce );_baf !=nil {return nil ,_f .Wrapf (_baf ,_bg ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_gcf );};if _baf =_gfg .SetByte (_gcd +_ce ,_dcg );_baf !=nil {return nil ,_f .Wrap (_baf ,_bg ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _gfg ,nil ;};type byHeight Bitmaps ;func _bddg (_gdc ,_ade *Bitmap ,_be int ,_aag []byte ,_dca int )(_ddg error ){const _fgc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_bge ,_febg ,_egg ,_bdbf ,_gdg ,_gdb ,_agf ,_afc int ;_fead ,_bed ,_aef ,_bged uint32 ;_fdd ,_abd byte ;_cdd uint16 ;);_ea :=make ([]byte ,4);_dda :=make ([]byte ,4);for _egg =0;_egg < _gdc .Height -1;_egg ,_bdbf =_egg +2,_bdbf +1{_bge =_egg *_gdc .RowStride ;_febg =_bdbf *_ade .RowStride ;for _gdg ,_gdb =0,0;_gdg < _dca ;_gdg ,_gdb =_gdg +4,_gdb +1{for _agf =0;_agf < 4;_agf ++{_afc =_bge +_gdg +_agf ;if _afc <=len (_gdc .Data )-1&&_afc < _bge +_gdc .RowStride {_ea [_agf ]=_gdc .Data [_afc ];}else {_ea [_agf ]=0x00;};_afc =_bge +_gdc .RowStride +_gdg +_agf ;if _afc <=len (_gdc .Data )-1&&_afc < _bge +(2*_gdc .RowStride ){_dda [_agf ]=_gdc .Data [_afc ];}else {_dda [_agf ]=0x00;};};_fead =_fa .BigEndian .Uint32 (_ea );_bed =_fa .BigEndian .Uint32 (_dda );_aef =_fead &_bed ;_aef |=_aef <<1;_bged =_fead |_bed ;_bged &=_bged <<1;_bed =_aef |_bged ;_bed &=0xaaaaaaaa;_fead =_bed |(_bed <<7);_fdd =byte (_fead >>24);_abd =byte ((_fead >>8)&0xff);_afc =_febg +_gdb ;if _afc +1==len (_ade .Data )-1||_afc +1>=_febg +_ade .RowStride {if _ddg =_ade .SetByte (_afc ,_aag [_fdd ]);_ddg !=nil {return _f .Wrapf (_ddg ,_fgc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_afc );};}else {_cdd =(uint16 (_aag [_fdd ])<<8)|uint16 (_aag [_abd ]);if _ddg =_ade .setTwoBytes (_afc ,_cdd );_ddg !=nil {return _f .Wrapf (_ddg ,_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",_afc );};_gdb ++;};};};return nil ;};type SizeSelection int ;func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _abdeg ,_gdfe int ;_geb :=src .RowStride -1;if x < 0{_gdfe =-x ;x =0;}else if x +src .Width > dst .Width {_geb -=src .Width +x -dst .Width ;};if y < 0{_abdeg =-y ;y =0;_gdfe +=src .RowStride ;_geb +=src .RowStride ;}else if y +src .Height > dst .Height {_abdeg =src .Height +y -dst .Height ;};var (_deeg int ;_ccfa error ;);_feaf :=x &0x07;_daee :=8-_feaf ;_bfbc :=src .Width &0x07;_gaa :=_daee -_bfbc ;_fdcd :=_daee &0x07!=0;_acdb :=src .Width <=((_geb -_gdfe )<<3)+_daee ;_cfb :=dst .GetByteIndex (x ,y );_geg :=_abdeg +dst .Height ;if src .Height > _geg {_deeg =_geg ;}else {_deeg =src .Height ;};switch {case !_fdcd :_ccfa =_bef (src ,dst ,_abdeg ,_deeg ,_cfb ,_gdfe ,_geb ,op );case _acdb :_ccfa =_cffg (src ,dst ,_abdeg ,_deeg ,_cfb ,_gdfe ,_geb ,_gaa ,_feaf ,_daee ,op );default:_ccfa =_fgega (src ,dst ,_abdeg ,_deeg ,_cfb ,_gdfe ,_geb ,_gaa ,_feaf ,_daee ,op ,_bfbc );};return _ccfa ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func _fedgb (_gdagb ,_ebgc *Bitmap ,_dbef ,_gcgd int )(*Bitmap ,error ){const _aefg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _ebgc ==nil {return nil ,_f .Error (_aefg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dbef < 1||_gcgd < 1{return nil ,_f .Error (_aefg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _dbef ==1&&_gcgd ==1{return _ebgc .Copy (),nil ;};if _dbef ==1||_gcgd ==1{_aebf :=SelCreateBrick (_gcgd ,_dbef ,_gcgd /2,_dbef /2,SelHit );var _bceaf error ;_gdagb ,_bceaf =_bcdc (_gdagb ,_ebgc ,_aebf );if _bceaf !=nil {return nil ,_f .Wrap (_bceaf ,_aefg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _gdagb ,nil ;};_fbce :=SelCreateBrick (1,_dbef ,0,_dbef /2,SelHit );_bbfg :=SelCreateBrick (_gcgd ,1,_gcgd /2,0,SelHit );_cfab ,_fgecc :=_ecfb (nil ,_ebgc ,_fbce );if _fgecc !=nil {return nil ,_f .Wrap (_fgecc ,_aefg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _gdagb ,_fgecc =_ecfb (_gdagb ,_cfab ,_bbfg );_fgecc !=nil {return nil ,_f .Wrap (_fgecc ,_aefg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_fgecc =_fbfg (_cfab ,_gdagb ,_fbce );_fgecc !=nil {return nil ,_f .Wrap (_fgecc ,_aefg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};if _ ,_fgecc =_fbfg (_gdagb ,_cfab ,_bbfg );_fgecc !=nil {return nil ,_f .Wrap (_fgecc ,_aefg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _gdagb ,nil ;};func (_beee *Bitmaps )selectByIndexes (_egegd []int )(*Bitmaps ,error ){_dbefc :=&Bitmaps {};for _ ,_fgdcb :=range _egegd {_bdfb ,_fgga :=_beee .GetBitmap (_fgdcb );if _fgga !=nil {return nil ,_f .Wrap (_fgga ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_dbefc .AddBitmap (_bdfb );};return _dbefc ,nil ;};func (_bbce *Bitmap )setEightPartlyBytes (_ddbd ,_facb int ,_cdb uint64 )(_afbg error ){var (_defaf byte ;_dfd int ;);const _fdb ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _baef :=1;_baef <=_facb ;_baef ++{_dfd =64-_baef *8;_defaf =byte (_cdb >>uint (_dfd )&0xff);_ab .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",_defaf ,_ddbd ,_ddbd +_baef -1,_facb ,_dfd );if _afbg =_bbce .SetByte (_ddbd +_baef -1,_defaf );_afbg !=nil {return _f .Wrap (_afbg ,_fdb ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_ggc :=_bbce .RowStride *8-_bbce .Width ;if _ggc ==0{return nil ;};_dfd -=8;_defaf =byte (_cdb >>uint (_dfd )&0xff)<<uint (_ggc );if _afbg =_bbce .SetByte (_ddbd +_facb ,_defaf );_afbg !=nil {return _f .Wrap (_afbg ,_fdb ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _feea (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _fded (_bcfc *Bitmap ,_faba ,_ddff ,_agee ,_fdf int ,_afbgf RasterOperator ,_cebc *Bitmap ,_cbbfg ,_dfe int )error {var (_adege byte ;_ebgd int ;_gegad int ;_edbc ,_gggfa int ;_afgfb ,_abcg int ;);_dcgb :=_agee >>3;_bcbc :=_agee &7;if _bcbc > 0{_adege =_bcfe [_bcbc ];};_ebgd =_cebc .RowStride *_dfe +(_cbbfg >>3);_gegad =_bcfc .RowStride *_ddff +(_faba >>3);switch _afbgf {case PixSrc :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]=_cebc .Data [_edbc ];_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],_cebc .Data [_edbc ],_adege );};};case PixNotSrc :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]=^(_cebc .Data [_edbc ]);_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],^_cebc .Data [_edbc ],_adege );};};case PixSrcOrDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]|=_cebc .Data [_edbc ];_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],_cebc .Data [_edbc ]|_bcfc .Data [_gggfa ],_adege );};};case PixSrcAndDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]&=_cebc .Data [_edbc ];_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],_cebc .Data [_edbc ]&_bcfc .Data [_gggfa ],_adege );};};case PixSrcXorDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]^=_cebc .Data [_edbc ];_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],_cebc .Data [_edbc ]^_bcfc .Data [_gggfa ],_adege );};};case PixNotSrcOrDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]|=^(_cebc .Data [_edbc ]);_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],^(_cebc .Data [_edbc ])|_bcfc .Data [_gggfa ],_adege );};};case PixNotSrcAndDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]&=^(_cebc .Data [_edbc ]);_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],^(_cebc .Data [_edbc ])&_bcfc .Data [_gggfa ],_adege );};};case PixSrcOrNotDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]=_cebc .Data [_edbc ]|^(_bcfc .Data [_gggfa ]);_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],_cebc .Data [_edbc ]|^(_bcfc .Data [_gggfa ]),_adege );};};case PixSrcAndNotDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]=_cebc .Data [_edbc ]&^(_bcfc .Data [_gggfa ]);_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],_cebc .Data [_edbc ]&^(_bcfc .Data [_gggfa ]),_adege );};};case PixNotPixSrcOrDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]=^(_cebc .Data [_edbc ]|_bcfc .Data [_gggfa ]);_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],^(_cebc .Data [_edbc ]|_bcfc .Data [_gggfa ]),_adege );};};case PixNotPixSrcAndDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]=^(_cebc .Data [_edbc ]&_bcfc .Data [_gggfa ]);_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],^(_cebc .Data [_edbc ]&_bcfc .Data [_gggfa ]),_adege );};};case PixNotPixSrcXorDst :for _afgfb =0;_afgfb < _fdf ;_afgfb ++{_edbc =_ebgd +_afgfb *_cebc .RowStride ;_gggfa =_gegad +_afgfb *_bcfc .RowStride ;for _abcg =0;_abcg < _dcgb ;_abcg ++{_bcfc .Data [_gggfa ]=^(_cebc .Data [_edbc ]^_bcfc .Data [_gggfa ]);_gggfa ++;_edbc ++;};if _bcbc > 0{_bcfc .Data [_gggfa ]=_gbfge (_bcfc .Data [_gggfa ],^(_cebc .Data [_edbc ]^_bcfc .Data [_gggfa ]),_adege );};};default:_ab .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",_afbgf );return _f .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 (_ddbdb Points )GetGeometry (i int )(_fabc ,_cfbfd float32 ,_dfag error ){if i > len (_ddbdb )-1{return 0,0,_f .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 );};_gfde :=_ddbdb [i ];return _gfde .X ,_gfde .Y ,nil ;};func (_cfea *Bitmaps )String ()string {_dddg :=_d .Builder {};for _ ,_bgcec :=range _cfea .Values {_dddg .WriteString (_bgcec .String ());_dddg .WriteRune ('\n');};return _dddg .String ();};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func (_cafa *byHeight )Less (i ,j int )bool {return _cafa .Values [i ].Height < _cafa .Values [j ].Height };func _dgbd (_dabc *_dc .Stack ,_fecc ,_dbag ,_abfd ,_acea ,_cfgae int ,_bbbgb *_ad .Rectangle )(_ebebge error ){const _ecac ="\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 _dabc ==nil {return _f .Error (_ecac ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _bbbgb ==nil {return _f .Error (_ecac ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");};_bbbgb .Min .X =_dc .Min (_bbbgb .Min .X ,_fecc );_bbbgb .Max .X =_dc .Max (_bbbgb .Max .X ,_dbag );_bbbgb .Min .Y =_dc .Min (_bbbgb .Min .Y ,_abfd );_bbbgb .Max .Y =_dc .Max (_bbbgb .Max .Y ,_abfd );if !(_abfd +_acea >=0&&_abfd +_acea <=_cfgae ){return nil ;};if _dabc .Aux ==nil {return _f .Error (_ecac ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _efgf *fillSegment ;_cgaf ,_bafc :=_dabc .Aux .Pop ();if _bafc {if _efgf ,_bafc =_cgaf .(*fillSegment );!_bafc {return _f .Error (_ecac ,"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 {_efgf =&fillSegment {};};_efgf ._babfd =_fecc ;_efgf ._ddgce =_dbag ;_efgf ._adda =_abfd ;_efgf ._abgd =_acea ;_dabc .Push (_efgf );return nil ;};var _cdffc =[]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 (_agfb *byHeight )Len ()int {return len (_agfb .Values )};func (_fcadb *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _fcadb .Copy (),nil ;};_ffd ,_beag :=_fcadb .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _beag !=nil {return nil ,_f .Wrap (_beag ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _ffd ,nil ;};func TstISymbol (t *_gg .T ,scale ...int )*Bitmap {_bgedg ,_cfgcc :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_e .NoError (t ,_cfgcc );return TstGetScaledSymbol (t ,_bgedg ,scale ...);};func (_ccgbc *BitmapsArray )GetBox (i int )(*_ad .Rectangle ,error ){const _cfgc ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _ccgbc ==nil {return nil ,_f .Error (_cfgc ,"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 (_ccgbc .Boxes )-1{return nil ,_f .Errorf (_cfgc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ccgbc .Boxes [i ],nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_adbf :=make ([]Point ,len (bms ));_ebc :=_agg ();_gfbg :=_fabea ();var _afd error ;for _agfe ,_bcb :=range bms {_adbf [_agfe ],_afd =_bcb .centroid (_ebc ,_gfbg );if _afd !=nil {return nil ,_afd ;};};_dadg :=Points (_adbf );return &_dadg ,nil ;};func (_cacfd *Bitmap )GetBitOffset (x int )int {return x &0x07};func (_fdaba Points )Get (i int )(Point ,error ){if i > len (_fdaba )-1{return Point {},_f .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 _fdaba [i ],nil ;};func (_cfda *Bitmap )GetByte (index int )(byte ,error ){if index > len (_cfda .Data )-1||index < 0{return 0,_f .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 _cfda .Data [index ],nil ;};func (_feg Points )YSorter ()func (_bfag ,_fbbf int )bool {return func (_cagd ,_edgg int )bool {return _feg [_cagd ].Y < _feg [_edgg ].Y };};func _cba ()(_feb [256]uint16 ){for _cag :=0;_cag < 256;_cag ++{if _cag &0x01!=0{_feb [_cag ]|=0x3;};if _cag &0x02!=0{_feb [_cag ]|=0xc;};if _cag &0x04!=0{_feb [_cag ]|=0x30;};if _cag &0x08!=0{_feb [_cag ]|=0xc0;};if _cag &0x10!=0{_feb [_cag ]|=0x300;};if _cag &0x20!=0{_feb [_cag ]|=0xc00;};if _cag &0x40!=0{_feb [_cag ]|=0x3000;};if _cag &0x80!=0{_feb [_cag ]|=0xc000;};};return _feb ;};const (_gcaf shift =iota ;_bgcc ;);func (_cefe Points )GetIntY (i int )(int ,error ){if i >=len (_cefe ){return 0,_f .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 (_cefe [i ].Y ),nil ;};type MorphOperation int ;var (_adaf *Bitmap ;_edcbf *Bitmap ;);func TstESymbol (t *_gg .T ,scale ...int )*Bitmap {_eecc ,_eadb :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_e .NoError (t ,_eadb );return TstGetScaledSymbol (t ,_eecc ,scale ...);};func (_aaebf *Points )Add (pt *Points )error {const _abaee ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _aaebf ==nil {return _f .Error (_abaee ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _f .Error (_abaee ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_aaebf =append (*_aaebf ,*pt ...);return nil ;};func TstFrameBitmapData ()[]byte {return _adaf .Data };func TstCSymbol (t *_gg .T )*Bitmap {t .Helper ();_cfae :=New (6,6);_e .NoError (t ,_cfae .SetPixel (1,0,1));_e .NoError (t ,_cfae .SetPixel (2,0,1));_e .NoError (t ,_cfae .SetPixel (3,0,1));_e .NoError (t ,_cfae .SetPixel (4,0,1));_e .NoError (t ,_cfae .SetPixel (0,1,1));_e .NoError (t ,_cfae .SetPixel (5,1,1));_e .NoError (t ,_cfae .SetPixel (0,2,1));_e .NoError (t ,_cfae .SetPixel (0,3,1));_e .NoError (t ,_cfae .SetPixel (0,4,1));_e .NoError (t ,_cfae .SetPixel (5,4,1));_e .NoError (t ,_cfae .SetPixel (1,5,1));_e .NoError (t ,_cfae .SetPixel (2,5,1));_e .NoError (t ,_cfae .SetPixel (3,5,1));_e .NoError (t ,_cfae .SetPixel (4,5,1));return _cfae ;};func (_bbdc *byHeight )Swap (i ,j int ){_bbdc .Values [i ],_bbdc .Values [j ]=_bbdc .Values [j ],_bbdc .Values [i ];if _bbdc .Boxes !=nil {_bbdc .Boxes [i ],_bbdc .Boxes [j ]=_bbdc .Boxes [j ],_bbdc .Boxes [i ];};};func _bef (_bdf ,_daac *Bitmap ,_fedbe ,_fdca ,_adcc ,_bbbd ,_fba int ,_agbc CombinationOperator )error {var _gebg int ;_gega :=func (){_gebg ++;_adcc +=_daac .RowStride ;_bbbd +=_bdf .RowStride ;_fba +=_bdf .RowStride };for _gebg =_fedbe ;_gebg < _fdca ;_gega (){_efa :=_adcc ;for _ccb :=_bbbd ;_ccb <=_fba ;_ccb ++{_fbeg ,_fgfc :=_daac .GetByte (_efa );if _fgfc !=nil {return _fgfc ;};_gfbad ,_fgfc :=_bdf .GetByte (_ccb );if _fgfc !=nil {return _fgfc ;};if _fgfc =_daac .SetByte (_efa ,_debb (_fbeg ,_gfbad ,_agbc ));_fgfc !=nil {return _fgfc ;};_efa ++;};};return nil ;};var _adee =[5]int {1,2,3,0,4};func (_acgc *Bitmap )Copy ()*Bitmap {_acaa :=make ([]byte ,len (_acgc .Data ));copy (_acaa ,_acgc .Data );return &Bitmap {Width :_acgc .Width ,Height :_acgc .Height ,RowStride :_acgc .RowStride ,Data :_acaa ,Color :_acgc .Color ,Text :_acgc .Text ,BitmapNumber :_acgc .BitmapNumber ,Special :_acgc .Special };};func TstGetScaledSymbol (t *_gg .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_fadcd ,_ffgga :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_e .NoError (t ,_ffgga );return _fadcd ;};func (_bcbg *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _fdfd ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_gbggg ,_febad :=_bcbg .selectByIndexes (idx );if _febad !=nil {return nil ,_f .Wrap (_febad ,_fdfd ,"");};return _gbggg ,nil ;};var _fed [256]uint8 ;func _bgac (_bbf uint ,_dfgb byte )byte {return _dfgb >>_bbf <<_bbf };func (_ccaeb *Bitmap )centroid (_dded ,_gbfg []int )(Point ,error ){_fgegc :=Point {};_ccaeb .setPadBits (0);if len (_dded )==0{_dded =_agg ();};if len (_gbfg )==0{_gbfg =_fabea ();};var _ggbc ,_dcbba ,_fddcc ,_eccgb ,_agef ,_gfbd int ;var _abae byte ;for _agef =0;_agef < _ccaeb .Height ;_agef ++{_gbbc :=_ccaeb .RowStride *_agef ;_eccgb =0;for _gfbd =0;_gfbd < _ccaeb .RowStride ;_gfbd ++{_abae =_ccaeb .Data [_gbbc +_gfbd ];if _abae !=0{_eccgb +=_gbfg [_abae ];_ggbc +=_dded [_abae ]+_gfbd *8*_gbfg [_abae ];};};_fddcc +=_eccgb ;_dcbba +=_eccgb *_agef ;};if _fddcc !=0{_fgegc .X =float32 (_ggbc )/float32 (_fddcc );_fgegc .Y =float32 (_dcbba )/float32 (_fddcc );};return _fgegc ,nil ;};func _bgba (_ggcf ,_dff int )int {if _ggcf < _dff {return _ggcf ;};return _dff ;};func (_gfac *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_dcef *Bitmaps ,_fddf *Boxes ,_ebgee error ){const _addea ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _gfac ==nil {return nil ,nil ,_f .Error (_addea ,"\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 ,_f .Error (_addea ,"\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 _gfac .Zero (){_fddf =&Boxes {};_dcef =&Bitmaps {};return _dcef ,_fddf ,nil ;};switch components {case ComponentConn :_dcef =&Bitmaps {};if _fddf ,_ebgee =_gfac .ConnComponents (_dcef ,8);_ebgee !=nil {return nil ,nil ,_f .Wrap (_ebgee ,_addea ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentCharacters :_ecgc ,_dfdg :=MorphSequence (_gfac ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _dfdg !=nil {return nil ,nil ,_f .Wrap (_dfdg ,_addea ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _ab .Log .IsLogLevel (_ab .LogLevelTrace ){_ab .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",_ecgc .String ());};_bcf :=&Bitmaps {};_fddf ,_dfdg =_ecgc .ConnComponents (_bcf ,8);if _dfdg !=nil {return nil ,nil ,_f .Wrap (_dfdg ,_addea ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _ab .Log .IsLogLevel (_ab .LogLevelTrace ){_ab .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",_bcf .String ());};if _dcef ,_dfdg =_bcf .ClipToBitmap (_gfac );_dfdg !=nil {return nil ,nil ,_f .Wrap (_dfdg ,_addea ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_faf :=1;var _adea *Bitmap ;switch {case _gfac .XResolution <=200:_adea =_gfac ;case _gfac .XResolution <=400:_faf =2;_adea ,_ebgee =_ae (_gfac ,1,0,0,0);if _ebgee !=nil {return nil ,nil ,_f .Wrap (_ebgee ,_addea ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");};default:_faf =4;_adea ,_ebgee =_ae (_gfac ,1,1,0,0);if _ebgee !=nil {return nil ,nil ,_f .Wrap (_ebgee ,_addea ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");};};_cbad ,_ ,_baeca :=_afge (_adea );if _baeca !=nil {return nil ,nil ,_f .Wrap (_baeca ,_addea ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_adgae ,_baeca :=_eeag (_cbad ,_faf );if _baeca !=nil {return nil ,nil ,_f .Wrap (_baeca ,_addea ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_dcfc :=&Bitmaps {};if _fddf ,_baeca =_adgae .ConnComponents (_dcfc ,4);_baeca !=nil {return nil ,nil ,_f .Wrap (_baeca ,_addea ,"\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 _dcef ,_baeca =_dcfc .ClipToBitmap (_gfac );_baeca !=nil {return nil ,nil ,_f .Wrap (_baeca ,_addea ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_dcef ,_ebgee =_dcef .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _ebgee !=nil {return nil ,nil ,_f .Wrap (_ebgee ,_addea ,"");};_fddf ,_ebgee =_fddf .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _ebgee !=nil {return nil ,nil ,_f .Wrap (_ebgee ,_addea ,"");};return _dcef ,_fddf ,nil ;};type Point struct{X ,Y float32 ;};func TstAddSymbol (t *_gg .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_ebde :=_ad .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_ebde );*x +=sym .Width +space ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _ecfb (d ,s ,sel )};func (_cbdf *Bitmap )connComponentsBitmapsBB (_aegd *Bitmaps ,_cfbf int )(_gaae *Boxes ,_bggdc error ){const _dceg ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _cfbf !=4&&_cfbf !=8{return nil ,_f .Error (_dceg ,"\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 _aegd ==nil {return nil ,_f .Error (_dceg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_aegd .Values )> 0{return nil ,_f .Error (_dceg ,"\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 _cbdf .Zero (){return &Boxes {},nil ;};var (_daab ,_degd ,_cabb ,_fada *Bitmap ;);_cbdf .setPadBits (0);if _daab ,_bggdc =_baec (nil ,_cbdf );_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"\u0062\u006d\u0031");};if _degd ,_bggdc =_baec (nil ,_cbdf );_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"\u0062\u006d\u0032");};_dffe :=&_dc .Stack {};_dffe .Aux =&_dc .Stack {};_gaae =&Boxes {};var (_bbdf ,_bgaf int ;_defg _ad .Point ;_adgf bool ;_dbcb *_ad .Rectangle ;);for {if _defg ,_adgf ,_bggdc =_daab .nextOnPixel (_bbdf ,_bgaf );_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"");};if !_adgf {break ;};if _dbcb ,_bggdc =_ebab (_daab ,_dffe ,_defg .X ,_defg .Y ,_cfbf );_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"");};if _bggdc =_gaae .Add (_dbcb );_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"");};if _cabb ,_bggdc =_daab .clipRectangle (_dbcb ,nil );_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"\u0062\u006d\u0033");};if _fada ,_bggdc =_degd .clipRectangle (_dbcb ,nil );_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"\u0062\u006d\u0034");};if _ ,_bggdc =_agfd (_cabb ,_cabb ,_fada );_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _bggdc =_degd .RasterOperation (_dbcb .Min .X ,_dbcb .Min .Y ,_dbcb .Dx (),_dbcb .Dy (),PixSrcXorDst ,_cabb ,0,0);_bggdc !=nil {return nil ,_f .Wrap (_bggdc ,_dceg ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_aegd .AddBitmap (_cabb );_bbdf =_defg .X ;_bgaf =_defg .Y ;};_aegd .Boxes =*_gaae ;return _gaae ,nil ;};func TstNSymbol (t *_gg .T ,scale ...int )*Bitmap {_ceed ,_bagfc :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_e .NoError (t ,_bagfc );return TstGetScaledSymbol (t ,_ceed ,scale ...);};func init (){const _ggbcf ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_adaf =New (50,40);var _fdgd error ;_adaf ,_fdgd =_adaf .AddBorder (2,1);if _fdgd !=nil {panic (_f .Wrap (_fdgd ,_ggbcf ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_edcbf ,_fdgd =NewWithData (50,22,_cdffc );if _fdgd !=nil {panic (_f .Wrap (_fdgd ,_ggbcf ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};type LocationFilter int ;func (_cccdd *Bitmaps )SortByWidth (){_aec :=(*byWidth )(_cccdd );_a .Sort (_aec )};func TstOSymbol (t *_gg .T ,scale ...int )*Bitmap {_bdcdf ,_fce :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_e .NoError (t ,_fce );return TstGetScaledSymbol (t ,_bdcdf ,scale ...);};func _fdg (_aaf ,_fgd *Bitmap ,_caf int ,_gdgb []byte ,_fgbe int )(_gbc error ){const _baa ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_gcg ,_abca ,_fbd ,_ebef ,_aada ,_gbf ,_eaa ,_aeg int ;_bce ,_fec uint32 ;_aae ,_dgc byte ;_fdge uint16 ;);_fag :=make ([]byte ,4);_bbgf :=make ([]byte ,4);for _fbd =0;_fbd < _aaf .Height -1;_fbd ,_ebef =_fbd +2,_ebef +1{_gcg =_fbd *_aaf .RowStride ;_abca =_ebef *_fgd .RowStride ;for _aada ,_gbf =0,0;_aada < _fgbe ;_aada ,_gbf =_aada +4,_gbf +1{for _eaa =0;_eaa < 4;_eaa ++{_aeg =_gcg +_aada +_eaa ;if _aeg <=len (_aaf .Data )-1&&_aeg < _gcg +_aaf .RowStride {_fag [_eaa ]=_aaf .Data [_aeg ];}else {_fag [_eaa ]=0x00;};_aeg =_gcg +_aaf .RowStride +_aada +_eaa ;if _aeg <=len (_aaf .Data )-1&&_aeg < _gcg +(2*_aaf .RowStride ){_bbgf [_eaa ]=_aaf .Data [_aeg ];}else {_bbgf [_eaa ]=0x00;};};_bce =_fa .BigEndian .Uint32 (_fag );_fec =_fa .BigEndian .Uint32 (_bbgf );_fec &=_bce ;_fec &=_fec <<1;_fec &=0xaaaaaaaa;_bce =_fec |(_fec <<7);_aae =byte (_bce >>24);_dgc =byte ((_bce >>8)&0xff);_aeg =_abca +_gbf ;if _aeg +1==len (_fgd .Data )-1||_aeg +1>=_abca +_fgd .RowStride {_fgd .Data [_aeg ]=_gdgb [_aae ];if _gbc =_fgd .SetByte (_aeg ,_gdgb [_aae ]);_gbc !=nil {return _f .Wrapf (_gbc ,_baa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_aeg );};}else {_fdge =(uint16 (_gdgb [_aae ])<<8)|uint16 (_gdgb [_dgc ]);if _gbc =_fgd .setTwoBytes (_aeg ,_fdge );_gbc !=nil {return _f .Wrapf (_gbc ,_baa ,"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",_aeg );};_gbf ++;};};};return nil ;};func (_ccaf *Points )AddPoint (x ,y float32 ){*_ccaf =append (*_ccaf ,Point {x ,y })};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_abgb float64 ,_dfgf error ){const _dcda ="\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 _abgb ,_f .Error (_dcda ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _abgb ,_f .Error (_dcda ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if area1 ==0||area2 ==0{return _abgb ,_f .Error (_dcda ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_dgad ,_cbef :=bm1 .Width ,bm1 .Height ;_cegf ,_ggcb :=bm2 .Width ,bm2 .Height ;if _bcga (_dgad -_cegf )> maxDiffW {return 0,nil ;};if _bcga (_cbef -_ggcb )> maxDiffH {return 0,nil ;};var _bedg ,_gbd int ;if delX >=0{_bedg =int (delX +0.5);}else {_bedg =int (delX -0.5);};if delY >=0{_gbd =int (delY +0.5);}else {_gbd =int (delY -0.5);};_aeb :=bm1 .createTemplate ();if _dfgf =_aeb .RasterOperation (_bedg ,_gbd ,_cegf ,_ggcb ,PixSrc ,bm2 ,0,0);_dfgf !=nil {return _abgb ,_f .Wrap (_dfgf ,_dcda ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _dfgf =_aeb .RasterOperation (0,0,_dgad ,_cbef ,PixSrcAndDst ,bm1 ,0,0);_dfgf !=nil {return _abgb ,_f .Wrap (_dfgf ,_dcda ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_beed :=_aeb .countPixels ();_abgb =float64 (_beed )*float64 (_beed )/(float64 (area1 )*float64 (area2 ));return _abgb ,nil ;};func _dcbdc (_bded ,_cdbc *Bitmap ,_dgef *Selection )(*Bitmap ,error ){const _ecdg ="\u006f\u0070\u0065\u006e";var _gabe error ;_bded ,_gabe =_gaf (_bded ,_cdbc ,_dgef );if _gabe !=nil {return nil ,_f .Wrap (_gabe ,_ecdg ,"");};_bdba ,_gabe :=_fbfg (nil ,_cdbc ,_dgef );if _gabe !=nil {return nil ,_f .Wrap (_gabe ,_ecdg ,"");};_ ,_gabe =_ecfb (_bded ,_bdba ,_dgef );if _gabe !=nil {return nil ,_f .Wrap (_gabe ,_ecdg ,"");};return _bded ,nil ;};func (_abde *Bitmap )nextOnPixelLow (_afeg ,_defa ,_dcd ,_eef ,_gbe int )(_fadcc _ad .Point ,_bac bool ,_ebefd error ){const _acd ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_bfgc int ;_cdad byte ;);_fgf :=_gbe *_dcd ;_ecba :=_fgf +(_eef /8);if _cdad ,_ebefd =_abde .GetByte (_ecba );_ebefd !=nil {return _fadcc ,false ,_f .Wrap (_ebefd ,_acd ,"\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 _cdad !=0{_dcgc :=_eef -(_eef %8)+7;for _bfgc =_eef ;_bfgc <=_dcgc &&_bfgc < _afeg ;_bfgc ++{if _abde .GetPixel (_bfgc ,_gbe ){_fadcc .X =_bfgc ;_fadcc .Y =_gbe ;return _fadcc ,true ,nil ;};};};_agb :=(_eef /8)+1;_bfgc =8*_agb ;var _abab int ;for _ecba =_fgf +_agb ;_bfgc < _afeg ;_ecba ,_bfgc =_ecba +1,_bfgc +8{if _cdad ,_ebefd =_abde .GetByte (_ecba );_ebefd !=nil {return _fadcc ,false ,_f .Wrap (_ebefd ,_acd ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _cdad ==0{continue ;};for _abab =0;_abab < 8&&_bfgc < _afeg ;_abab ,_bfgc =_abab +1,_bfgc +1{if _abde .GetPixel (_bfgc ,_gbe ){_fadcc .X =_bfgc ;_fadcc .Y =_gbe ;return _fadcc ,true ,nil ;};};};for _gcgg :=_gbe +1;_gcgg < _defa ;_gcgg ++{_fgf =_gcgg *_dcd ;for _ecba ,_bfgc =_fgf ,0;_bfgc < _afeg ;_ecba ,_bfgc =_ecba +1,_bfgc +8{if _cdad ,_ebefd =_abde .GetByte (_ecba );_ebefd !=nil {return _fadcc ,false ,_f .Wrap (_ebefd ,_acd ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _cdad ==0{continue ;};for _abab =0;_abab < 8&&_bfgc < _afeg ;_abab ,_bfgc =_abab +1,_bfgc +1{if _abde .GetPixel (_bfgc ,_gcgg ){_fadcc .X =_bfgc ;_fadcc .Y =_gcgg ;return _fadcc ,true ,nil ;};};};};return _fadcc ,false ,nil ;};func (_gbga Points )GetIntX (i int )(int ,error ){if i >=len (_gbga ){return 0,_f .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 (_gbga [i ].X ),nil ;};func _daf (_abfa *Bitmap ,_egd int ,_gda []byte )(_dbc *Bitmap ,_ee error ){const _bbc ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _abfa ==nil {return nil ,_f .Error (_bbc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _egd < 1||_egd > 4{return nil ,_f .Error (_bbc ,"\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 _abfa .Height <=1{return nil ,_f .Errorf (_bbc ,"\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",_abfa .Height );};_dbc =New (_abfa .Width /2,_abfa .Height /2);if _gda ==nil {_gda =_cea ();};_bcd :=_bgba (_abfa .RowStride ,2*_dbc .RowStride );switch _egd {case 1:_ee =_acf (_abfa ,_dbc ,_egd ,_gda ,_bcd );case 2:_ee =_bddg (_abfa ,_dbc ,_egd ,_gda ,_bcd );case 3:_ee =_ddc (_abfa ,_dbc ,_egd ,_gda ,_bcd );case 4:_ee =_fdg (_abfa ,_dbc ,_egd ,_gda ,_bcd );};if _ee !=nil {return nil ,_ee ;};return _dbc ,nil ;};func (_adcd *Bitmap )SetByte (index int ,v byte )error {if index > len (_adcd .Data )-1||index < 0{return _f .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 );};_adcd .Data [index ]=v ;return nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _debb (oldByte ,newByte ,op );};func TstRSymbol (t *_gg .T ,scale ...int )*Bitmap {_gdaa ,_ddcc :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_e .NoError (t ,_ddcc );return TstGetScaledSymbol (t ,_gdaa ,scale ...);};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _baec (d ,s )};func (_cgbd *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _dcec ="\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 >=_cgbd .IntSlice .Size (){return 0,_f .Errorf (_dcec ,"\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 (_cgbd .YAtIndex (i )),nil ;};func (_dace *Bitmaps )CountPixels ()*_dc .NumSlice {_effd :=&_dc .NumSlice {};for _ ,_befd :=range _dace .Values {_effd .AddInt (_befd .CountPixels ());};return _effd ;};type SelectionValue int ;func _ecfb (_gegg *Bitmap ,_afbab *Bitmap ,_bddcb *Selection )(*Bitmap ,error ){var (_bbbg *Bitmap ;_egbg error ;);_gegg ,_egbg =_ccg (_gegg ,_afbab ,_bddcb ,&_bbbg );if _egbg !=nil {return nil ,_egbg ;};if _egbg =_gegg .clearAll ();_egbg !=nil {return nil ,_egbg ;};var _fcba SelectionValue ;for _fdcaf :=0;_fdcaf < _bddcb .Height ;_fdcaf ++{for _fdab :=0;_fdab < _bddcb .Width ;_fdab ++{_fcba =_bddcb .Data [_fdcaf ][_fdab ];if _fcba ==SelHit {if _egbg =_gegg .RasterOperation (_fdab -_bddcb .Cx ,_fdcaf -_bddcb .Cy ,_afbab .Width ,_afbab .Height ,PixSrcOrDst ,_bbbg ,0,0);_egbg !=nil {return nil ,_egbg ;};};};};return _gegg ,nil ;};type ClassedPoints struct{*Points ;_dc .IntSlice ;_beca func (_beb ,_afbf int )bool ;};func (_ecgf *Bitmap )addPadBits ()(_bcg error ){const _ebge ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_afgb :=_ecgf .Width %8;if _afgb ==0{return nil ;};_gfe :=_ecgf .Width /8;_fee :=_de .NewReader (_ecgf .Data );_dfca :=make ([]byte ,_ecgf .Height *_ecgf .RowStride );_gcga :=_de .NewWriterMSB (_dfca );_baff :=make ([]byte ,_gfe );var (_fad int ;_aegb uint64 ;);for _fad =0;_fad < _ecgf .Height ;_fad ++{if _ ,_bcg =_fee .Read (_baff );_bcg !=nil {return _f .Wrap (_bcg ,_ebge ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_bcg =_gcga .Write (_baff );_bcg !=nil {return _f .Wrap (_bcg ,_ebge ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _aegb ,_bcg =_fee .ReadBits (byte (_afgb ));_bcg !=nil {return _f .Wrap (_bcg ,_ebge ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _bcg =_gcga .WriteByte (byte (_aegb )<<uint (8-_afgb ));_bcg !=nil {return _f .Wrap (_bcg ,_ebge ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_ecgf .Data =_gcga .Data ();return nil ;};