mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
12 lines
195 KiB
Go
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 (_gg "encoding/binary";_d "github.com/stretchr/testify/require";_db "github.com/unidoc/unipdf/v3/common";_ba "github.com/unidoc/unipdf/v3/internal/bitwise";_g "github.com/unidoc/unipdf/v3/internal/imageutil";_b "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_a "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_bac "image";_cbf "math";_cb "sort";_ec "strings";_e "testing";);func (_deaae *Bitmaps )String ()string {_edgf :=_ec .Builder {};for _ ,_deedd :=range _deaae .Values {_edgf .WriteString (_deedd .String ());_edgf .WriteRune ('\n');};return _edgf .String ();};func TstVSymbol (t *_e .T ,scale ...int )*Bitmap {_feag ,_fdcc :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_d .NoError (t ,_fdcc );return TstGetScaledSymbol (t ,_feag ,scale ...);};func TstGetScaledSymbol (t *_e .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_cefd ,_bdbd :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_d .NoError (t ,_bdbd );return _cefd ;};func (_egde *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _aada ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _egde ==nil {return nil ,_a .Error (_aada ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_egde .Values )-1{return nil ,_a .Errorf (_aada ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _egde .Values [i ],nil ;};func (_gafg *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_gafg .Width ,Height :_gafg .Height ,RowStride :_gafg .RowStride ,Color :_gafg .Color ,Text :_gafg .Text ,BitmapNumber :_gafg .BitmapNumber ,Special :_gafg .Special ,Data :make ([]byte ,len (_gafg .Data ))};};var _badbe =[]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 _dbgc (_cgdb ,_bfcda int ,_becb string )*Selection {_adcb :=&Selection {Height :_cgdb ,Width :_bfcda ,Name :_becb };_adcb .Data =make ([][]SelectionValue ,_cgdb );for _bgbe :=0;_bgbe < _cgdb ;_bgbe ++{_adcb .Data [_bgbe ]=make ([]SelectionValue ,_bfcda );};return _adcb ;};func (_gea *Bitmap )GetChocolateData ()[]byte {if _gea .Color ==Vanilla {_gea .inverseData ();};return _gea .Data ;};func (_fbad *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_ggfb *Boxes ,_gadgf error ){const _dedb ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _fbad ==nil {return nil ,_a .Error (_dedb ,"\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 ,_a .Error (_dedb ,"\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 _ggfb ,_gadgf =_fbad .connComponentsBB (connectivity );_gadgf !=nil {return nil ,_a .Wrap (_gadgf ,_dedb ,"");};}else {if _ggfb ,_gadgf =_fbad .connComponentsBitmapsBB (bms ,connectivity );_gadgf !=nil {return nil ,_a .Wrap (_gadgf ,_dedb ,"");};};return _ggfb ,nil ;};func MakePixelSumTab8 ()[]int {return _abcdf ()};func (_gabe *Bitmap )SizesEqual (s *Bitmap )bool {if _gabe ==s {return true ;};if _gabe .Width !=s .Width ||_gabe .Height !=s .Height {return false ;};return true ;};func (_dfd *Bitmap )GetByteIndex (x ,y int )int {return y *_dfd .RowStride +(x >>3)};func TstImageBitmap ()*Bitmap {return _eabf .Copy ()};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func (_aebe *Bitmaps )WidthSorter ()func (_gaafg ,_acadd int )bool {return func (_gfabce ,_bgdb int )bool {return _aebe .Values [_gfabce ].Width < _aebe .Values [_bgdb ].Width };};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _dgce ="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 ,_a .Error (_dgce ,"\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 ,_a .Error (_dgce ,"\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 ,_a .Error (_dgce ,"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 ,_a .Error (_dgce ,"\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 ,_a .Error (_dgce ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");};_eggg ,_faca :=bm1 .Width ,bm1 .Height ;_dbfb ,_aeac :=bm2 .Width ,bm2 .Height ;if _b .Abs (_eggg -_dbfb )> maxDiffW {return false ,nil ;};if _b .Abs (_faca -_aeac )> maxDiffH {return false ,nil ;};_dcgg :=int (delX +_b .Sign (delX )*0.5);_bdcfc :=int (delY +_b .Sign (delY )*0.5);_ggfbc :=int (_cbf .Ceil (_cbf .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_dcdb :=bm2 .RowStride ;_fbgce :=_bbga (_bdcfc ,0);_cgd :=_gefb (_aeac +_bdcfc ,_faca );_egfa :=bm1 .RowStride *_fbgce ;_dfdb :=bm2 .RowStride *(_fbgce -_bdcfc );var _edece int ;if _cgd <=_faca {_edece =downcount [_cgd -1];};_eeda :=_bbga (_dcgg ,0);_eefb :=_gefb (_dbfb +_dcgg ,_eggg );var _dcba ,_febc int ;if _dcgg >=8{_dcba =_dcgg >>3;_egfa +=_dcba ;_eeda -=_dcba <<3;_eefb -=_dcba <<3;_dcgg &=7;}else if _dcgg <=-8{_febc =-((_dcgg +7)>>3);_dfdb +=_febc ;_dcdb -=_febc ;_dcgg +=_febc <<3;};var (_gaaf ,_gbce ,_cbc int ;_bdg ,_cbfeg ,_ceda byte ;);if _eeda >=_eefb ||_fbgce >=_cgd {return false ,nil ;};_fdcfe :=(_eefb +7)>>3;switch {case _dcgg ==0:for _gbce =_fbgce ;_gbce < _cgd ;_gbce ,_egfa ,_dfdb =_gbce +1,_egfa +bm1 .RowStride ,_dfdb +bm2 .RowStride {for _cbc =0;_cbc < _fdcfe ;_cbc ++{_bdg =bm1 .Data [_egfa +_cbc ]&bm2 .Data [_dfdb +_cbc ];_gaaf +=tab [_bdg ];};if _gaaf >=_ggfbc {return true ,nil ;};if _dgcc :=_gaaf +downcount [_gbce ]-_edece ;_dgcc < _ggfbc {return false ,nil ;};};case _dcgg > 0&&_dcdb < _fdcfe :for _gbce =_fbgce ;_gbce < _cgd ;_gbce ,_egfa ,_dfdb =_gbce +1,_egfa +bm1 .RowStride ,_dfdb +bm2 .RowStride {_cbfeg =bm1 .Data [_egfa ];_ceda =bm2 .Data [_dfdb ]>>uint (_dcgg );_bdg =_cbfeg &_ceda ;_gaaf +=tab [_bdg ];for _cbc =1;_cbc < _dcdb ;_cbc ++{_cbfeg =bm1 .Data [_egfa +_cbc ];_ceda =bm2 .Data [_dfdb +_cbc ]>>uint (_dcgg )|bm2 .Data [_dfdb +_cbc -1]<<uint (8-_dcgg );_bdg =_cbfeg &_ceda ;_gaaf +=tab [_bdg ];};_cbfeg =bm1 .Data [_egfa +_cbc ];_ceda =bm2 .Data [_dfdb +_cbc -1]<<uint (8-_dcgg );_bdg =_cbfeg &_ceda ;_gaaf +=tab [_bdg ];if _gaaf >=_ggfbc {return true ,nil ;}else if _gaaf +downcount [_gbce ]-_edece < _ggfbc {return false ,nil ;};};case _dcgg > 0&&_dcdb >=_fdcfe :for _gbce =_fbgce ;_gbce < _cgd ;_gbce ,_egfa ,_dfdb =_gbce +1,_egfa +bm1 .RowStride ,_dfdb +bm2 .RowStride {_cbfeg =bm1 .Data [_egfa ];_ceda =bm2 .Data [_dfdb ]>>uint (_dcgg );_bdg =_cbfeg &_ceda ;_gaaf +=tab [_bdg ];for _cbc =1;_cbc < _fdcfe ;_cbc ++{_cbfeg =bm1 .Data [_egfa +_cbc ];_ceda =bm2 .Data [_dfdb +_cbc ]>>uint (_dcgg );_ceda |=bm2 .Data [_dfdb +_cbc -1]<<uint (8-_dcgg );_bdg =_cbfeg &_ceda ;_gaaf +=tab [_bdg ];};if _gaaf >=_ggfbc {return true ,nil ;}else if _gaaf +downcount [_gbce ]-_edece < _ggfbc {return false ,nil ;};};case _fdcfe < _dcdb :for _gbce =_fbgce ;_gbce < _cgd ;_gbce ,_egfa ,_dfdb =_gbce +1,_egfa +bm1 .RowStride ,_dfdb +bm2 .RowStride {for _cbc =0;_cbc < _fdcfe ;_cbc ++{_cbfeg =bm1 .Data [_egfa +_cbc ];_ceda =bm2 .Data [_dfdb +_cbc ]<<uint (-_dcgg );_ceda |=bm2 .Data [_dfdb +_cbc +1]>>uint (8+_dcgg );_bdg =_cbfeg &_ceda ;_gaaf +=tab [_bdg ];};if _gaaf >=_ggfbc {return true ,nil ;}else if _fggbg :=_gaaf +downcount [_gbce ]-_edece ;_fggbg < _ggfbc {return false ,nil ;};};case _dcdb >=_fdcfe :for _gbce =_fbgce ;_gbce < _cgd ;_gbce ,_egfa ,_dfdb =_gbce +1,_egfa +bm1 .RowStride ,_dfdb +bm2 .RowStride {for _cbc =0;_cbc < _fdcfe ;_cbc ++{_cbfeg =bm1 .Data [_egfa +_cbc ];_ceda =bm2 .Data [_dfdb +_cbc ]<<uint (-_dcgg );_ceda |=bm2 .Data [_dfdb +_cbc +1]>>uint (8+_dcgg );_bdg =_cbfeg &_ceda ;_gaaf +=tab [_bdg ];};_cbfeg =bm1 .Data [_egfa +_cbc ];_ceda =bm2 .Data [_dfdb +_cbc ]<<uint (-_dcgg );_bdg =_cbfeg &_ceda ;_gaaf +=tab [_bdg ];if _gaaf >=_ggfbc {return true ,nil ;}else if _gaaf +downcount [_gbce ]-_edece < _ggfbc {return false ,nil ;};};};_cggb :=float32 (_gaaf )*float32 (_gaaf )/(float32 (area1 )*float32 (area2 ));if _cggb >=scoreThreshold {_db .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",_gaaf ,_ggfbc ,_cggb ,scoreThreshold );};return false ,nil ;};func _cbg (_bc ,_aae *Bitmap )(_aga error ){const _ggd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_dfb :=_aae .RowStride ;_fbd :=_bc .RowStride ;var _gge ,_gb ,_ad ,_aba ,_fde int ;for _ad =0;_ad < _aae .Height ;_ad ++{_gge =_ad *_dfb ;_gb =8*_ad *_fbd ;for _aba =0;_aba < _dfb ;_aba ++{if _aga =_bc .setEightBytes (_gb +_aba *8,_ggbc [_aae .Data [_gge +_aba ]]);_aga !=nil {return _a .Wrap (_aga ,_ggd ,"");};};for _fde =1;_fde < 8;_fde ++{for _aba =0;_aba < _fbd ;_aba ++{if _aga =_bc .SetByte (_gb +_fde *_fbd +_aba ,_bc .Data [_gb +_aba ]);_aga !=nil {return _a .Wrap (_aga ,_ggd ,"");};};};};return nil ;};func init (){for _ede :=0;_ede < 256;_ede ++{_fgc [_ede ]=uint8 (_ede &0x1)+(uint8 (_ede >>1)&0x1)+(uint8 (_ede >>2)&0x1)+(uint8 (_ede >>3)&0x1)+(uint8 (_ede >>4)&0x1)+(uint8 (_ede >>5)&0x1)+(uint8 (_ede >>6)&0x1)+(uint8 (_ede >>7)&0x1);};};func _fdab (_degg ,_cfc *Bitmap ,_bbae ,_aeccd int )(*Bitmap ,error ){const _cgbc ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _cfc ==nil {return nil ,_a .Error (_cgbc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bbae < 1||_aeccd < 1{return nil ,_a .Error (_cgbc ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _bbae ==1&&_aeccd ==1{return _cfc .Copy (),nil ;};if _bbae ==1||_aeccd ==1{_baec :=SelCreateBrick (_aeccd ,_bbae ,_aeccd /2,_bbae /2,SelHit );var _ddgf error ;_degg ,_ddgf =_cfbe (_degg ,_cfc ,_baec );if _ddgf !=nil {return nil ,_a .Wrap (_ddgf ,_cgbc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _degg ,nil ;};_dgcgc :=SelCreateBrick (1,_bbae ,0,_bbae /2,SelHit );_dgda :=SelCreateBrick (_aeccd ,1,_aeccd /2,0,SelHit );_dec ,_cfcb :=_gegb (nil ,_cfc ,_dgcgc );if _cfcb !=nil {return nil ,_a .Wrap (_cfcb ,_cgbc ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _degg ,_cfcb =_gegb (_degg ,_dec ,_dgda );_cfcb !=nil {return nil ,_a .Wrap (_cfcb ,_cgbc ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_cfcb =_gcdf (_dec ,_degg ,_dgcgc );_cfcb !=nil {return nil ,_a .Wrap (_cfcb ,_cgbc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};if _ ,_cfcb =_gcdf (_degg ,_dec ,_dgda );_cfcb !=nil {return nil ,_a .Wrap (_cfcb ,_cgbc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _degg ,nil ;};func (_gede *Bitmap )nextOnPixelLow (_dacb ,_bfbb ,_bfdb ,_egbe ,_cegd int )(_dcg _bac .Point ,_ebeg bool ,_aacd error ){const _ecfg ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_bgfe int ;_gaec byte ;);_ggcf :=_cegd *_bfdb ;_gad :=_ggcf +(_egbe /8);if _gaec ,_aacd =_gede .GetByte (_gad );_aacd !=nil {return _dcg ,false ,_a .Wrap (_aacd ,_ecfg ,"\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 _gaec !=0{_bbd :=_egbe -(_egbe %8)+7;for _bgfe =_egbe ;_bgfe <=_bbd &&_bgfe < _dacb ;_bgfe ++{if _gede .GetPixel (_bgfe ,_cegd ){_dcg .X =_bgfe ;_dcg .Y =_cegd ;return _dcg ,true ,nil ;};};};_effa :=(_egbe /8)+1;_bgfe =8*_effa ;var _eba int ;for _gad =_ggcf +_effa ;_bgfe < _dacb ;_gad ,_bgfe =_gad +1,_bgfe +8{if _gaec ,_aacd =_gede .GetByte (_gad );_aacd !=nil {return _dcg ,false ,_a .Wrap (_aacd ,_ecfg ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _gaec ==0{continue ;};for _eba =0;_eba < 8&&_bgfe < _dacb ;_eba ,_bgfe =_eba +1,_bgfe +1{if _gede .GetPixel (_bgfe ,_cegd ){_dcg .X =_bgfe ;_dcg .Y =_cegd ;return _dcg ,true ,nil ;};};};for _deaa :=_cegd +1;_deaa < _bfbb ;_deaa ++{_ggcf =_deaa *_bfdb ;for _gad ,_bgfe =_ggcf ,0;_bgfe < _dacb ;_gad ,_bgfe =_gad +1,_bgfe +8{if _gaec ,_aacd =_gede .GetByte (_gad );_aacd !=nil {return _dcg ,false ,_a .Wrap (_aacd ,_ecfg ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _gaec ==0{continue ;};for _eba =0;_eba < 8&&_bgfe < _dacb ;_eba ,_bgfe =_eba +1,_bgfe +1{if _gede .GetPixel (_bgfe ,_deaa ){_dcg .X =_bgfe ;_dcg .Y =_deaa ;return _dcg ,true ,nil ;};};};};return _dcg ,false ,nil ;};func NewClassedPoints (points *Points ,classes _b .IntSlice )(*ClassedPoints ,error ){const _ddfe ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_a .Error (_ddfe ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_a .Error (_ddfe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_gcea :=&ClassedPoints {Points :points ,IntSlice :classes };if _agea :=_gcea .validateIntSlice ();_agea !=nil {return nil ,_a .Wrap (_agea ,_ddfe ,"");};return _gcea ,nil ;};func _eaga (_gbgdd *_b .Stack )(_ddbea *fillSegment ,_debc error ){const _feegf ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _gbgdd ==nil {return nil ,_a .Error (_feegf ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _gbgdd .Aux ==nil {return nil ,_a .Error (_feegf ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_ddeg ,_bacb :=_gbgdd .Pop ();if !_bacb {return nil ,nil ;};_cbdd ,_bacb :=_ddeg .(*fillSegment );if !_bacb {return nil ,_a .Error (_feegf ,"\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");};_ddbea =&fillSegment {_cbdd ._fggd ,_cbdd ._gccf ,_cbdd ._accf +_cbdd ._ffcc ,_cbdd ._ffcc };_gbgdd .Aux .Push (_cbdd );return _ddbea ,nil ;};func (_cbbb *Bitmaps )AddBox (box *_bac .Rectangle ){_cbbb .Boxes =append (_cbbb .Boxes ,box )};func (_cadc *BitmapsArray )AddBox (box *_bac .Rectangle ){_cadc .Boxes =append (_cadc .Boxes ,box )};type Boxes []*_bac .Rectangle ;func _fgfb (_ffe ,_fgdg *Bitmap ,_ceab ,_dbc ,_fed ,_faeb ,_bgbc int ,_bcda CombinationOperator )error {var _gaeg int ;_gdbd :=func (){_gaeg ++;_fed +=_fgdg .RowStride ;_faeb +=_ffe .RowStride ;_bgbc +=_ffe .RowStride };for _gaeg =_ceab ;_gaeg < _dbc ;_gdbd (){_aebg :=_fed ;for _fegd :=_faeb ;_fegd <=_bgbc ;_fegd ++{_cdgf ,_edec :=_fgdg .GetByte (_aebg );if _edec !=nil {return _edec ;};_agbd ,_edec :=_ffe .GetByte (_fegd );if _edec !=nil {return _edec ;};if _edec =_fgdg .SetByte (_aebg ,_fecb (_cdgf ,_agbd ,_bcda ));_edec !=nil {return _edec ;};_aebg ++;};};return nil ;};func _dcec (_gca *Bitmap ,_gfe ,_fag int )(*Bitmap ,error ){const _aac ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _gca ==nil {return nil ,_a .Error (_aac ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gfe <=0||_fag <=0{return nil ,_a .Error (_aac ,"\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 _gfe ==_fag {if _gfe ==1{_gaf ,_cd :=_gda (nil ,_gca );if _cd !=nil {return nil ,_a .Wrap (_cd ,_aac ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _gaf ,nil ;};if _gfe ==2||_gfe ==4||_gfe ==8{_age ,_ggde :=_adg (_gca ,_gfe );if _ggde !=nil {return nil ,_a .Wrap (_ggde ,_aac ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _age ,nil ;};};_cag :=_gfe *_gca .Width ;_gfed :=_fag *_gca .Height ;_gcag :=New (_cag ,_gfed );_bbc :=_gcag .RowStride ;var (_ced ,_bdf ,_cac ,_fdd ,_dac int ;_eg byte ;_deb error ;);for _bdf =0;_bdf < _gca .Height ;_bdf ++{_ced =_fag *_bdf *_bbc ;for _cac =0;_cac < _gca .Width ;_cac ++{if _bf :=_gca .GetPixel (_cac ,_bdf );_bf {_dac =_gfe *_cac ;for _fdd =0;_fdd < _gfe ;_fdd ++{_gcag .setBit (_ced *8+_dac +_fdd );};};};for _fdd =1;_fdd < _fag ;_fdd ++{_dcf :=_ced +_fdd *_bbc ;for _fcg :=0;_fcg < _bbc ;_fcg ++{if _eg ,_deb =_gcag .GetByte (_ced +_fcg );_deb !=nil {return nil ,_a .Wrapf (_deb ,_aac ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_fdd );};if _deb =_gcag .SetByte (_dcf +_fcg ,_eg );_deb !=nil {return nil ,_a .Wrap (_deb ,_aac ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _gcag ,nil ;};func (_aded *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_aeaf *Bitmaps ,_egcd *Boxes ,_baad error ){const _ggdea ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _aded ==nil {return nil ,nil ,_a .Error (_ggdea ,"\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 ,_a .Error (_ggdea ,"\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 _aded .Zero (){_egcd =&Boxes {};_aeaf =&Bitmaps {};return _aeaf ,_egcd ,nil ;};switch components {case ComponentConn :_aeaf =&Bitmaps {};if _egcd ,_baad =_aded .ConnComponents (_aeaf ,8);_baad !=nil {return nil ,nil ,_a .Wrap (_baad ,_ggdea ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentCharacters :_gcf ,_bbfg :=MorphSequence (_aded ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _bbfg !=nil {return nil ,nil ,_a .Wrap (_bbfg ,_ggdea ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _db .Log .IsLogLevel (_db .LogLevelTrace ){_db .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",_gcf .String ());};_gcfb :=&Bitmaps {};_egcd ,_bbfg =_gcf .ConnComponents (_gcfb ,8);if _bbfg !=nil {return nil ,nil ,_a .Wrap (_bbfg ,_ggdea ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _db .Log .IsLogLevel (_db .LogLevelTrace ){_db .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",_gcfb .String ());};if _aeaf ,_bbfg =_gcfb .ClipToBitmap (_aded );_bbfg !=nil {return nil ,nil ,_a .Wrap (_bbfg ,_ggdea ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_ddbe :=1;var _bece *Bitmap ;switch {case _aded .XResolution <=200:_bece =_aded ;case _aded .XResolution <=400:_ddbe =2;_bece ,_baad =_ecd (_aded ,1,0,0,0);if _baad !=nil {return nil ,nil ,_a .Wrap (_baad ,_ggdea ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");};default:_ddbe =4;_bece ,_baad =_ecd (_aded ,1,1,0,0);if _baad !=nil {return nil ,nil ,_a .Wrap (_baad ,_ggdea ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");};};_fbccb ,_ ,_affac :=_abf (_bece );if _affac !=nil {return nil ,nil ,_a .Wrap (_affac ,_ggdea ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_dafg ,_affac :=_fdbed (_fbccb ,_ddbe );if _affac !=nil {return nil ,nil ,_a .Wrap (_affac ,_ggdea ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_ddbge :=&Bitmaps {};if _egcd ,_affac =_dafg .ConnComponents (_ddbge ,4);_affac !=nil {return nil ,nil ,_a .Wrap (_affac ,_ggdea ,"\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 _aeaf ,_affac =_ddbge .ClipToBitmap (_aded );_affac !=nil {return nil ,nil ,_a .Wrap (_affac ,_ggdea ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_aeaf ,_baad =_aeaf .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _baad !=nil {return nil ,nil ,_a .Wrap (_baad ,_ggdea ,"");};_egcd ,_baad =_egcd .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _baad !=nil {return nil ,nil ,_a .Wrap (_baad ,_ggdea ,"");};return _aeaf ,_egcd ,nil ;};func _gbfg (_cce ,_ecdc *Bitmap ,_dcfc *Selection )(*Bitmap ,error ){const _cabfb ="\u006f\u0070\u0065\u006e";var _bddfd error ;_cce ,_bddfd =_gdac (_cce ,_ecdc ,_dcfc );if _bddfd !=nil {return nil ,_a .Wrap (_bddfd ,_cabfb ,"");};_aecd ,_bddfd :=_gcdf (nil ,_ecdc ,_dcfc );if _bddfd !=nil {return nil ,_a .Wrap (_bddfd ,_cabfb ,"");};_ ,_bddfd =_gegb (_cce ,_aecd ,_dcfc );if _bddfd !=nil {return nil ,_a .Wrap (_bddfd ,_cabfb ,"");};return _cce ,nil ;};func _gabb ()(_fba [256]uint64 ){for _fgg :=0;_fgg < 256;_fgg ++{if _fgg &0x01!=0{_fba [_fgg ]|=0xff;};if _fgg &0x02!=0{_fba [_fgg ]|=0xff00;};if _fgg &0x04!=0{_fba [_fgg ]|=0xff0000;};if _fgg &0x08!=0{_fba [_fgg ]|=0xff000000;};if _fgg &0x10!=0{_fba [_fgg ]|=0xff00000000;};if _fgg &0x20!=0{_fba [_fgg ]|=0xff0000000000;};if _fgg &0x40!=0{_fba [_fgg ]|=0xff000000000000;};if _fgg &0x80!=0{_fba [_fgg ]|=0xff00000000000000;};};return _fba ;};func (_dbd *Bitmap )removeBorderGeneral (_ggce ,_deg ,_gfad ,_egcb int )(*Bitmap ,error ){const _gccc ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _ggce < 0||_deg < 0||_gfad < 0||_egcb < 0{return nil ,_a .Error (_gccc ,"\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");};_dbf ,_dafa :=_dbd .Width ,_dbd .Height ;_cbef :=_dbf -_ggce -_deg ;_bfda :=_dafa -_gfad -_egcb ;if _cbef <=0{return nil ,_a .Errorf (_gccc ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_cbef );};if _bfda <=0{return nil ,_a .Errorf (_gccc ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_bfda );};_ffgd :=New (_cbef ,_bfda );_ffgd .Color =_dbd .Color ;_gfaa :=_ffgd .RasterOperation (0,0,_cbef ,_bfda ,PixSrc ,_dbd ,_ggce ,_gfad );if _gfaa !=nil {return nil ,_a .Wrap (_gfaa ,_gccc ,"");};return _ffgd ,nil ;};func (_dfee *Bitmaps )selectByIndicator (_fgef *_b .NumSlice )(_bebfd *Bitmaps ,_dbef error ){const _efbag ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _dfee ==nil {return nil ,_a .Error (_efbag ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _fgef ==nil {return nil ,_a .Error (_efbag ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_dfee .Values )==0{return _dfee ,nil ;};if len (*_fgef )!=len (_dfee .Values ){return nil ,_a .Errorf (_efbag ,"\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 (*_fgef ),len (_dfee .Values ));};var _gdge ,_ffgb ,_cdbce int ;for _ffgb =0;_ffgb < len (*_fgef );_ffgb ++{if _gdge ,_dbef =_fgef .GetInt (_ffgb );_dbef !=nil {return nil ,_a .Wrap (_dbef ,_efbag ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _gdge ==1{_cdbce ++;};};if _cdbce ==len (_dfee .Values ){return _dfee ,nil ;};_bebfd =&Bitmaps {};_deedg :=len (_dfee .Values )==len (_dfee .Boxes );for _ffgb =0;_ffgb < len (*_fgef );_ffgb ++{if _gdge =int ((*_fgef )[_ffgb ]);_gdge ==0{continue ;};_bebfd .Values =append (_bebfd .Values ,_dfee .Values [_ffgb ]);if _deedg {_bebfd .Boxes =append (_bebfd .Boxes ,_dfee .Boxes [_ffgb ]);};};return _bebfd ,nil ;};func (_bgba *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _defgd ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_bgba .Values )==0{return nil ,_a .Error (_defgd ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_afac :=&BitmapsArray {};_bgba .SortByHeight ();_cfga :=-1;_badad :=-1;for _aceb :=0;_aceb < len (_bgba .Values );_aceb ++{_aaef :=_bgba .Values [_aceb ].Height ;if _aaef > _cfga {_cfga =_aaef ;_badad ++;_afac .Values =append (_afac .Values ,&Bitmaps {});};_afac .Values [_badad ].AddBitmap (_bgba .Values [_aceb ]);};return _afac ,nil ;};const (Vanilla Color =iota ;Chocolate ;);func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _ebba (src ,sequence ...);};func (_aeddc *Selection )findMaxTranslations ()(_gfcbd ,_fccd ,_edfc ,_bfce int ){for _acaa :=0;_acaa < _aeddc .Height ;_acaa ++{for _eeedd :=0;_eeedd < _aeddc .Width ;_eeedd ++{if _aeddc .Data [_acaa ][_eeedd ]==SelHit {_gfcbd =_bbga (_gfcbd ,_aeddc .Cx -_eeedd );_fccd =_bbga (_fccd ,_aeddc .Cy -_acaa );_edfc =_bbga (_edfc ,_eeedd -_aeddc .Cx );_bfce =_bbga (_bfce ,_acaa -_aeddc .Cy );};};};return _gfcbd ,_fccd ,_edfc ,_bfce ;};func (_ecgd MorphProcess )verify (_gcace int ,_ffdb ,_fgdf *int )error {const _ebda ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _ecgd .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_ecgd .Arguments )!=2{return _a .Error (_ebda ,"\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");};_bcddd ,_gddf :=_ecgd .getWidthHeight ();if _bcddd <=0||_gddf <=0{return _a .Error (_ebda ,"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 :_dgae :=len (_ecgd .Arguments );*_ffdb +=_dgae ;if _dgae < 1||_dgae > 4{return _a .Error (_ebda ,"\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 _gfec :=0;_gfec < _dgae ;_gfec ++{if _ecgd .Arguments [_gfec ]< 1||_ecgd .Arguments [_gfec ]> 4{return _a .Error (_ebda ,"\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 (_ecgd .Arguments )==0{return _a .Error (_ebda ,"\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");};_dbg :=_ecgd .Arguments [0];if _dbg !=2&&_dbg !=4&&_dbg !=8{return _a .Error (_ebda ,"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");};*_ffdb -=_dfa [_dbg /4];case MopAddBorder :if len (_ecgd .Arguments )==0{return _a .Error (_ebda ,"\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");};_dabc :=_ecgd .Arguments [0];if _gcace > 0{return _a .Error (_ebda ,"\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 _dabc < 1{return _a .Error (_ebda ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_fgdf =_dabc ;};return nil ;};func (_ebge *Bitmaps )AddBitmap (bm *Bitmap ){_ebge .Values =append (_ebge .Values ,bm )};func (_ebce *Bitmap )GetPixel (x ,y int )bool {_eaf :=_ebce .GetByteIndex (x ,y );_cgaf :=_ebce .GetBitOffset (x );_adgbd :=uint (7-_cgaf );if _eaf > len (_ebce .Data )-1{_db .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 ,_ebce );return false ;};if (_ebce .Data [_eaf ]>>_adgbd )&0x01>=1{return true ;};return false ;};func (_faf *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_bba bool ,_ddc error ){const _bea ="\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 =_abcdf ();};_fee :=_faf .Width >>3;_cff :=_faf .Width &7;_ecba :=byte (0xff<<uint (8-_cff ));var (_fgf ,_deag ,_adde ,_ceg int ;_eab byte ;);for _fgf =0;_fgf < _faf .Height ;_fgf ++{_adde =_faf .RowStride *_fgf ;for _deag =0;_deag < _fee ;_deag ++{_eab ,_ddc =_faf .GetByte (_adde +_deag );if _ddc !=nil {return false ,_a .Wrap (_ddc ,_bea ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_ceg +=tab8 [_eab ];};if _cff !=0{_eab ,_ddc =_faf .GetByte (_adde +_deag );if _ddc !=nil {return false ,_a .Wrap (_ddc ,_bea ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_eab &=_ecba ;_ceg +=tab8 [_eab ];};if _ceg > thresh {return true ,nil ;};};return _bba ,nil ;};func TstPSymbol (t *_e .T )*Bitmap {t .Helper ();_fddeb :=New (5,8);_d .NoError (t ,_fddeb .SetPixel (0,0,1));_d .NoError (t ,_fddeb .SetPixel (1,0,1));_d .NoError (t ,_fddeb .SetPixel (2,0,1));_d .NoError (t ,_fddeb .SetPixel (3,0,1));_d .NoError (t ,_fddeb .SetPixel (4,1,1));_d .NoError (t ,_fddeb .SetPixel (0,1,1));_d .NoError (t ,_fddeb .SetPixel (4,2,1));_d .NoError (t ,_fddeb .SetPixel (0,2,1));_d .NoError (t ,_fddeb .SetPixel (4,3,1));_d .NoError (t ,_fddeb .SetPixel (0,3,1));_d .NoError (t ,_fddeb .SetPixel (0,4,1));_d .NoError (t ,_fddeb .SetPixel (1,4,1));_d .NoError (t ,_fddeb .SetPixel (2,4,1));_d .NoError (t ,_fddeb .SetPixel (3,4,1));_d .NoError (t ,_fddeb .SetPixel (0,5,1));_d .NoError (t ,_fddeb .SetPixel (0,6,1));_d .NoError (t ,_fddeb .SetPixel (0,7,1));return _fddeb ;};type Component int ;type SizeComparison int ;var _dfa =[5]int {1,2,3,0,4};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func _abf (_agee *Bitmap )(_cedf *Bitmap ,_edacf int ,_eafa error ){const _bebe ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _agee ==nil {return nil ,0,_a .Errorf (_bebe ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _dbfe ,_fdbd *Bitmap ;if _dbfe ,_eafa =_gda (nil ,_agee );_eafa !=nil {return nil ,0,_a .Wrap (_eafa ,_bebe ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_abbc [13]int ;_gagf ,_dgdc int ;);_gabeg :=12;_eddc :=_b .NewNumSlice (_gabeg +1);_fgde :=_b .NewNumSlice (_gabeg +1);var _abee *Boxes ;for _fgcgf :=0;_fgcgf <=_gabeg ;_fgcgf ++{if _fgcgf ==0{if _fdbd ,_eafa =_gda (nil ,_dbfe );_eafa !=nil {return nil ,0,_a .Wrap (_eafa ,_bebe ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _fdbd ,_eafa =_ebba (_dbfe ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_eafa !=nil {return nil ,0,_a .Wrap (_eafa ,_bebe ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _abee ,_eafa =_fdbd .connComponentsBB (4);_eafa !=nil {return nil ,0,_a .Wrap (_eafa ,_bebe ,"");};_abbc [_fgcgf ]=len (*_abee );_eddc .AddInt (_abbc [_fgcgf ]);switch _fgcgf {case 0:_gagf =_abbc [0];default:_dgdc =_abbc [_fgcgf -1]-_abbc [_fgcgf ];_fgde .AddInt (_dgdc );};_dbfe =_fdbd ;};_gfea :=true ;_dgdd :=2;var _beaba ,_ddfb int ;for _dgea :=1;_dgea < len (*_fgde );_dgea ++{if _beaba ,_eafa =_eddc .GetInt (_dgea );_eafa !=nil {return nil ,0,_a .Wrap (_eafa ,_bebe ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _gfea &&_beaba < int (0.3*float32 (_gagf )){_dgdd =_dgea +1;_gfea =false ;};if _dgdc ,_eafa =_fgde .GetInt (_dgea );_eafa !=nil {return nil ,0,_a .Wrap (_eafa ,_bebe ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _dgdc > _ddfb {_ddfb =_dgdc ;};};_ccbc :=_agee .XResolution ;if _ccbc ==0{_ccbc =150;};if _ccbc > 110{_dgdd ++;};if _dgdd < 2{_db .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");_dgdd =2;};_edacf =_dgdd +1;if _cedf ,_eafa =_fdab (nil ,_agee ,_dgdd +1,1);_eafa !=nil {return nil ,0,_a .Wrap (_eafa ,_bebe ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _cedf ,_edacf ,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 _cbeff ()[]int {_fcbcf :=make ([]int ,256);_fcbcf [0]=0;_fcbcf [1]=7;var _aaab int ;for _aaab =2;_aaab < 4;_aaab ++{_fcbcf [_aaab ]=_fcbcf [_aaab -2]+6;};for _aaab =4;_aaab < 8;_aaab ++{_fcbcf [_aaab ]=_fcbcf [_aaab -4]+5;};for _aaab =8;_aaab < 16;_aaab ++{_fcbcf [_aaab ]=_fcbcf [_aaab -8]+4;};for _aaab =16;_aaab < 32;_aaab ++{_fcbcf [_aaab ]=_fcbcf [_aaab -16]+3;};for _aaab =32;_aaab < 64;_aaab ++{_fcbcf [_aaab ]=_fcbcf [_aaab -32]+2;};for _aaab =64;_aaab < 128;_aaab ++{_fcbcf [_aaab ]=_fcbcf [_aaab -64]+1;};for _aaab =128;_aaab < 256;_aaab ++{_fcbcf [_aaab ]=_fcbcf [_aaab -128];};return _fcbcf ;};func (_gbacb *byHeight )Less (i ,j int )bool {return _gbacb .Values [i ].Height < _gbacb .Values [j ].Height };func (_bfdf *Bitmap )setBit (_dfgf int ){_bfdf .Data [(_dfgf >>3)]|=0x80>>uint (_dfgf &7)};func (_bcc *Bitmap )countPixels ()int {var (_bed int ;_ged uint8 ;_bgfc byte ;_ddf int ;);_adf :=_bcc .RowStride ;_gfba :=uint (_bcc .Width &0x07);if _gfba !=0{_ged =uint8 ((0xff<<(8-_gfba ))&0xff);_adf --;};for _dbb :=0;_dbb < _bcc .Height ;_dbb ++{for _ddf =0;_ddf < _adf ;_ddf ++{_bgfc =_bcc .Data [_dbb *_bcc .RowStride +_ddf ];_bed +=int (_fgc [_bgfc ]);};if _gfba !=0{_bed +=int (_fgc [_bcc .Data [_dbb *_bcc .RowStride +_ddf ]&_ged ]);};};return _bed ;};func (_ggag MorphProcess )getWidthHeight ()(_eafc ,_ecbae int ){return _ggag .Arguments [0],_ggag .Arguments [1];};func _caad (_bbfb *Bitmap ,_gaecg ,_fdag ,_bebf ,_abadc int ,_adac RasterOperator ,_ecdaf *Bitmap ,_bcddde ,_gfda int )error {var (_efdad byte ;_bfee int ;_fgbg int ;_abde ,_dcea int ;_afge ,_dgfa int ;);_cffa :=_bebf >>3;_fcgc :=_bebf &7;if _fcgc > 0{_efdad =_gffg [_fcgc ];};_bfee =_ecdaf .RowStride *_gfda +(_bcddde >>3);_fgbg =_bbfb .RowStride *_fdag +(_gaecg >>3);switch _adac {case PixSrc :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]=_ecdaf .Data [_abde ];_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],_ecdaf .Data [_abde ],_efdad );};};case PixNotSrc :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]=^(_ecdaf .Data [_abde ]);_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],^_ecdaf .Data [_abde ],_efdad );};};case PixSrcOrDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]|=_ecdaf .Data [_abde ];_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],_ecdaf .Data [_abde ]|_bbfb .Data [_dcea ],_efdad );};};case PixSrcAndDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]&=_ecdaf .Data [_abde ];_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],_ecdaf .Data [_abde ]&_bbfb .Data [_dcea ],_efdad );};};case PixSrcXorDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]^=_ecdaf .Data [_abde ];_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],_ecdaf .Data [_abde ]^_bbfb .Data [_dcea ],_efdad );};};case PixNotSrcOrDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]|=^(_ecdaf .Data [_abde ]);_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],^(_ecdaf .Data [_abde ])|_bbfb .Data [_dcea ],_efdad );};};case PixNotSrcAndDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]&=^(_ecdaf .Data [_abde ]);_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],^(_ecdaf .Data [_abde ])&_bbfb .Data [_dcea ],_efdad );};};case PixSrcOrNotDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]=_ecdaf .Data [_abde ]|^(_bbfb .Data [_dcea ]);_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],_ecdaf .Data [_abde ]|^(_bbfb .Data [_dcea ]),_efdad );};};case PixSrcAndNotDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]=_ecdaf .Data [_abde ]&^(_bbfb .Data [_dcea ]);_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],_ecdaf .Data [_abde ]&^(_bbfb .Data [_dcea ]),_efdad );};};case PixNotPixSrcOrDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]=^(_ecdaf .Data [_abde ]|_bbfb .Data [_dcea ]);_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],^(_ecdaf .Data [_abde ]|_bbfb .Data [_dcea ]),_efdad );};};case PixNotPixSrcAndDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]=^(_ecdaf .Data [_abde ]&_bbfb .Data [_dcea ]);_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],^(_ecdaf .Data [_abde ]&_bbfb .Data [_dcea ]),_efdad );};};case PixNotPixSrcXorDst :for _afge =0;_afge < _abadc ;_afge ++{_abde =_bfee +_afge *_ecdaf .RowStride ;_dcea =_fgbg +_afge *_bbfb .RowStride ;for _dgfa =0;_dgfa < _cffa ;_dgfa ++{_bbfb .Data [_dcea ]=^(_ecdaf .Data [_abde ]^_bbfb .Data [_dcea ]);_dcea ++;_abde ++;};if _fcgc > 0{_bbfb .Data [_dcea ]=_ccgc (_bbfb .Data [_dcea ],^(_ecdaf .Data [_abde ]^_bbfb .Data [_dcea ]),_efdad );};};default:_db .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",_adac );return _a .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 TstAddSymbol (t *_e .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_dbec :=_bac .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_dbec );*x +=sym .Width +space ;};func (_baef Points )YSorter ()func (_gbced ,_eeca int )bool {return func (_dbge ,_egcg int )bool {return _baef [_dbge ].Y < _baef [_egcg ].Y };};func (_dggd *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dccd (_dggd ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func ClipBoxToRectangle (box *_bac .Rectangle ,wi ,hi int )(_ddbg *_bac .Rectangle ,_fab error ){const _cbab ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_a .Error (_cbab ,"\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 ,_a .Error (_cbab ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_adfb :=*box ;_ddbg =&_adfb ;if _ddbg .Min .X < 0{_ddbg .Max .X +=_ddbg .Min .X ;_ddbg .Min .X =0;};if _ddbg .Min .Y < 0{_ddbg .Max .Y +=_ddbg .Min .Y ;_ddbg .Min .Y =0;};if _ddbg .Max .X > wi {_ddbg .Max .X =wi ;};if _ddbg .Max .Y > hi {_ddbg .Max .Y =hi ;};return _ddbg ,nil ;};func (_fdeaf *Selection )setOrigin (_eefc ,_cbfec int ){_fdeaf .Cy ,_fdeaf .Cx =_eefc ,_cbfec };type Color int ;func _edac (_affa uint ,_addb byte )byte {return _addb >>_affa <<_affa };func (_dgg *Bitmap )ToImage ()_bac .Image {_acg ,_dgbb :=_g .NewImage (_dgg .Width ,_dgg .Height ,1,1,_dgg .Data ,nil ,nil );if _dgbb !=nil {_db .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",_dgbb );};return _acg ;};func (_fedg *ClassedPoints )Less (i ,j int )bool {return _fedg ._fage (i ,j )};func (_cada *ClassedPoints )validateIntSlice ()error {const _eegc ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_agdge :=range _cada .IntSlice {if _agdge >=(_cada .Points .Size ()){return _a .Errorf (_eegc ,"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",_agdge ,_cada .Points .Size ());};};return nil ;};func (_gfab *Bitmap )addBorderGeneral (_gfeec ,_dfde ,_ddgc ,_bbbf int ,_eff int )(*Bitmap ,error ){const _dda ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _gfeec < 0||_dfde < 0||_ddgc < 0||_bbbf < 0{return nil ,_a .Error (_dda ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_gddb ,_dcfa :=_gfab .Width ,_gfab .Height ;_bbf :=_gddb +_gfeec +_dfde ;_acf :=_dcfa +_ddgc +_bbbf ;_cea :=New (_bbf ,_acf );_cea .Color =_gfab .Color ;_caca :=PixClr ;if _eff > 0{_caca =PixSet ;};_fdc :=_cea .RasterOperation (0,0,_gfeec ,_acf ,_caca ,nil ,0,0);if _fdc !=nil {return nil ,_a .Wrap (_fdc ,_dda ,"\u006c\u0065\u0066\u0074");};_fdc =_cea .RasterOperation (_bbf -_dfde ,0,_dfde ,_acf ,_caca ,nil ,0,0);if _fdc !=nil {return nil ,_a .Wrap (_fdc ,_dda ,"\u0072\u0069\u0067h\u0074");};_fdc =_cea .RasterOperation (0,0,_bbf ,_ddgc ,_caca ,nil ,0,0);if _fdc !=nil {return nil ,_a .Wrap (_fdc ,_dda ,"\u0074\u006f\u0070");};_fdc =_cea .RasterOperation (0,_acf -_bbbf ,_bbf ,_bbbf ,_caca ,nil ,0,0);if _fdc !=nil {return nil ,_a .Wrap (_fdc ,_dda ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_fdc =_cea .RasterOperation (_gfeec ,_ddgc ,_gddb ,_dcfa ,PixSrc ,_gfab ,0,0);if _fdc !=nil {return nil ,_a .Wrap (_fdc ,_dda ,"\u0063\u006f\u0070\u0079");};return _cea ,nil ;};func _bbga (_dced ,_dbbg int )int {if _dced > _dbbg {return _dced ;};return _dbbg ;};func Centroids (bms []*Bitmap )(*Points ,error ){_gaae :=make ([]Point ,len (bms ));_cbbg :=_cbeff ();_dbde :=_abcdf ();var _bgde error ;for _ddea ,_efba :=range bms {_gaae [_ddea ],_bgde =_efba .centroid (_cbbg ,_dbde );if _bgde !=nil {return nil ,_bgde ;};};_fbff :=Points (_gaae );return &_fbff ,nil ;};type MorphOperation int ;func (_dbad *Points )AddPoint (x ,y float32 ){*_dbad =append (*_dbad ,Point {x ,y })};func (_dfbg *Bitmaps )makeSizeIndicator (_fgcgb ,_gacab int ,_cegc LocationFilter ,_edcea SizeComparison )(_cgdcf *_b .NumSlice ,_befed error ){const _cdgbd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _dfbg ==nil {return nil ,_a .Error (_cdgbd ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _cegc {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_cdgbd ,"\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",_cegc );};switch _edcea {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_a .Errorf (_cdgbd ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_edcea );};_cgdcf =&_b .NumSlice {};var (_adfd ,_ggad ,_ffegd int ;_febg *Bitmap ;);for _ ,_febg =range _dfbg .Values {_adfd =0;_ggad ,_ffegd =_febg .Width ,_febg .Height ;switch _cegc {case LocSelectWidth :if (_edcea ==SizeSelectIfLT &&_ggad < _fgcgb )||(_edcea ==SizeSelectIfGT &&_ggad > _fgcgb )||(_edcea ==SizeSelectIfLTE &&_ggad <=_fgcgb )||(_edcea ==SizeSelectIfGTE &&_ggad >=_fgcgb )||(_edcea ==SizeSelectIfEQ &&_ggad ==_fgcgb ){_adfd =1;};case LocSelectHeight :if (_edcea ==SizeSelectIfLT &&_ffegd < _gacab )||(_edcea ==SizeSelectIfGT &&_ffegd > _gacab )||(_edcea ==SizeSelectIfLTE &&_ffegd <=_gacab )||(_edcea ==SizeSelectIfGTE &&_ffegd >=_gacab )||(_edcea ==SizeSelectIfEQ &&_ffegd ==_gacab ){_adfd =1;};case LocSelectIfEither :if (_edcea ==SizeSelectIfLT &&(_ggad < _fgcgb ||_ffegd < _gacab ))||(_edcea ==SizeSelectIfGT &&(_ggad > _fgcgb ||_ffegd > _gacab ))||(_edcea ==SizeSelectIfLTE &&(_ggad <=_fgcgb ||_ffegd <=_gacab ))||(_edcea ==SizeSelectIfGTE &&(_ggad >=_fgcgb ||_ffegd >=_gacab ))||(_edcea ==SizeSelectIfEQ &&(_ggad ==_fgcgb ||_ffegd ==_gacab )){_adfd =1;};case LocSelectIfBoth :if (_edcea ==SizeSelectIfLT &&(_ggad < _fgcgb &&_ffegd < _gacab ))||(_edcea ==SizeSelectIfGT &&(_ggad > _fgcgb &&_ffegd > _gacab ))||(_edcea ==SizeSelectIfLTE &&(_ggad <=_fgcgb &&_ffegd <=_gacab ))||(_edcea ==SizeSelectIfGTE &&(_ggad >=_fgcgb &&_ffegd >=_gacab ))||(_edcea ==SizeSelectIfEQ &&(_ggad ==_fgcgb &&_ffegd ==_gacab )){_adfd =1;};};_cgdcf .AddInt (_adfd );};return _cgdcf ,nil ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func _dagcg (_abdgda *Bitmap ,_fagec *_b .Stack ,_effb ,_abfg ,_bcaa int )(_defgb *_bac .Rectangle ,_gege error ){const _dcbaf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _abdgda ==nil {return nil ,_a .Error (_dcbaf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _fagec ==nil {return nil ,_a .Error (_dcbaf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _bcaa {case 4:if _defgb ,_gege =_ffgf (_abdgda ,_fagec ,_effb ,_abfg );_gege !=nil {return nil ,_a .Wrap (_gege ,_dcbaf ,"");};return _defgb ,nil ;case 8:if _defgb ,_gege =_affg (_abdgda ,_fagec ,_effb ,_abfg );_gege !=nil {return nil ,_a .Wrap (_gege ,_dcbaf ,"");};return _defgb ,nil ;default:return nil ,_a .Errorf (_dcbaf ,"\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",_bcaa );};};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _abb ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_bdc :=_ffag (width ,height );_bdc .Data =data ;if len (data )< height *_bdc .RowStride {return nil ,_a .Errorf (_abb ,"\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 *_bdc .RowStride );};return _bdc ,nil ;};type CombinationOperator int ;func (_bacd *Bitmap )setPadBits (_deed int ){_bfcdf :=8-_bacd .Width %8;if _bfcdf ==8{return ;};_dca :=_bacd .Width /8;_gedea :=_fgdcb [_bfcdf ];if _deed ==0{_gedea ^=_gedea ;};var _geg int ;for _gdb :=0;_gdb < _bacd .Height ;_gdb ++{_geg =_gdb *_bacd .RowStride +_dca ;if _deed ==0{_bacd .Data [_geg ]&=_gedea ;}else {_bacd .Data [_geg ]|=_gedea ;};};};func (_bggd Points )Size ()int {return len (_bggd )};var (_gaeda =_bg ();_bbce =_gga ();_ggbc =_gabb (););func (_dbdc *byHeight )Swap (i ,j int ){_dbdc .Values [i ],_dbdc .Values [j ]=_dbdc .Values [j ],_dbdc .Values [i ];if _dbdc .Boxes !=nil {_dbdc .Boxes [i ],_dbdc .Boxes [j ]=_dbdc .Boxes [j ],_dbdc .Boxes [i ];};};func (_aecb *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_ccgg *Boxes ,_cacb error ){const _acb ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _aecb ==nil {return nil ,_a .Error (_acb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_aecb )==0{return _aecb ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_acb ,"\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 ,_a .Errorf (_acb ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );};_aefd :=_aecb .makeSizeIndicator (width ,height ,tp ,relation );_dgge ,_cacb :=_aecb .selectWithIndicator (_aefd );if _cacb !=nil {return nil ,_a .Wrap (_cacb ,_acb ,"");};return _dgge ,nil ;};func _dge (_faed ,_beeg *Bitmap ,_adga ,_acfb ,_bda ,_dcbec ,_aaa ,_ffaf ,_beee ,_abdg int ,_eddg CombinationOperator )error {var _fefc int ;_bcbb :=func (){_fefc ++;_bda +=_beeg .RowStride ;_dcbec +=_faed .RowStride ;_aaa +=_faed .RowStride };for _fefc =_adga ;_fefc < _acfb ;_bcbb (){var _aged uint16 ;_bccd :=_bda ;for _dfca :=_dcbec ;_dfca <=_aaa ;_dfca ++{_gbg ,_dfe :=_beeg .GetByte (_bccd );if _dfe !=nil {return _dfe ;};_cbgc ,_dfe :=_faed .GetByte (_dfca );if _dfe !=nil {return _dfe ;};_aged =(_aged |uint16 (_cbgc ))<<uint (_abdg );_cbgc =byte (_aged >>8);if _dfca ==_aaa {_cbgc =_edac (uint (_ffaf ),_cbgc );};if _dfe =_beeg .SetByte (_bccd ,_fecb (_gbg ,_cbgc ,_eddg ));_dfe !=nil {return _dfe ;};_bccd ++;_aged <<=uint (_beee );};};return nil ;};func _affg (_egce *Bitmap ,_fbffc *_b .Stack ,_dacbf ,_egecf int )(_gggf *_bac .Rectangle ,_fcag error ){const _bgdg ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _egce ==nil {return nil ,_a .Error (_bgdg ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _fbffc ==nil {return nil ,_a .Error (_bgdg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_beca ,_cdgg :=_egce .Width ,_egce .Height ;_ddbd :=_beca -1;_caff :=_cdgg -1;if _dacbf < 0||_dacbf > _ddbd ||_egecf < 0||_egecf > _caff ||!_egce .GetPixel (_dacbf ,_egecf ){return nil ,nil ;};_aeadd :=_bac .Rect (100000,100000,0,0);if _fcag =_bbge (_fbffc ,_dacbf ,_dacbf ,_egecf ,1,_caff ,&_aeadd );_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fcag =_bbge (_fbffc ,_dacbf ,_dacbf ,_egecf +1,-1,_caff ,&_aeadd );_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_aeadd .Min .X ,_aeadd .Max .X =_dacbf ,_dacbf ;_aeadd .Min .Y ,_aeadd .Max .Y =_egecf ,_egecf ;var (_dbab *fillSegment ;_gcga int ;);for _fbffc .Len ()> 0{if _dbab ,_fcag =_eaga (_fbffc );_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"");};_egecf =_dbab ._accf ;for _dacbf =_dbab ._fggd -1;_dacbf >=0&&_egce .GetPixel (_dacbf ,_egecf );_dacbf --{if _fcag =_egce .SetPixel (_dacbf ,_egecf ,0);_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _dacbf >=_dbab ._fggd -1{for {for _dacbf ++;_dacbf <=_dbab ._gccf +1&&_dacbf <=_ddbd &&!_egce .GetPixel (_dacbf ,_egecf );_dacbf ++{};_gcga =_dacbf ;if !(_dacbf <=_dbab ._gccf +1&&_dacbf <=_ddbd ){break ;};for ;_dacbf <=_ddbd &&_egce .GetPixel (_dacbf ,_egecf );_dacbf ++{if _fcag =_egce .SetPixel (_dacbf ,_egecf ,0);_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fcag =_bbge (_fbffc ,_gcga ,_dacbf -1,_dbab ._accf ,_dbab ._ffcc ,_caff ,&_aeadd );_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dacbf > _dbab ._gccf {if _fcag =_bbge (_fbffc ,_dbab ._gccf +1,_dacbf -1,_dbab ._accf ,-_dbab ._ffcc ,_caff ,&_aeadd );_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_gcga =_dacbf +1;if _gcga < _dbab ._fggd {if _fcag =_bbge (_fbffc ,_gcga ,_dbab ._fggd -1,_dbab ._accf ,-_dbab ._ffcc ,_caff ,&_aeadd );_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_dacbf =_dbab ._fggd ;for {for ;_dacbf <=_ddbd &&_egce .GetPixel (_dacbf ,_egecf );_dacbf ++{if _fcag =_egce .SetPixel (_dacbf ,_egecf ,0);_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fcag =_bbge (_fbffc ,_gcga ,_dacbf -1,_dbab ._accf ,_dbab ._ffcc ,_caff ,&_aeadd );_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dacbf > _dbab ._gccf {if _fcag =_bbge (_fbffc ,_dbab ._gccf +1,_dacbf -1,_dbab ._accf ,-_dbab ._ffcc ,_caff ,&_aeadd );_fcag !=nil {return nil ,_a .Wrap (_fcag ,_bgdg ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _dacbf ++;_dacbf <=_dbab ._gccf +1&&_dacbf <=_ddbd &&!_egce .GetPixel (_dacbf ,_egecf );_dacbf ++{};_gcga =_dacbf ;if !(_dacbf <=_dbab ._gccf +1&&_dacbf <=_ddbd ){break ;};};};_aeadd .Max .X ++;_aeadd .Max .Y ++;return &_aeadd ,nil ;};func (_bdcf *Bitmap )thresholdPixelSum (_aeef int )bool {var (_adec int ;_dffg uint8 ;_fgd byte ;_gdea int ;);_aea :=_bdcf .RowStride ;_dab :=uint (_bdcf .Width &0x07);if _dab !=0{_dffg =uint8 ((0xff<<(8-_dab ))&0xff);_aea --;};for _agfe :=0;_agfe < _bdcf .Height ;_agfe ++{for _gdea =0;_gdea < _aea ;_gdea ++{_fgd =_bdcf .Data [_agfe *_bdcf .RowStride +_gdea ];_adec +=int (_fgc [_fgd ]);};if _dab !=0{_fgd =_bdcf .Data [_agfe *_bdcf .RowStride +_gdea ]&_dffg ;_adec +=int (_fgc [_fgd ]);};if _adec > _aeef {return true ;};};return false ;};func (_baead *Bitmap )GetVanillaData ()[]byte {if _baead .Color ==Chocolate {_baead .inverseData ();};return _baead .Data ;};func (_beafc *ClassedPoints )YAtIndex (i int )float32 {return (*_beafc .Points )[_beafc .IntSlice [i ]].Y };func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _bbbc ,_fggb int ;_addc :=src .RowStride -1;if x < 0{_fggb =-x ;x =0;}else if x +src .Width > dst .Width {_addc -=src .Width +x -dst .Width ;};if y < 0{_bbbc =-y ;y =0;_fggb +=src .RowStride ;_addc +=src .RowStride ;}else if y +src .Height > dst .Height {_bbbc =src .Height +y -dst .Height ;};var (_gbdg int ;_ecc error ;);_ebad :=x &0x07;_adcg :=8-_ebad ;_edbe :=src .Width &0x07;_eaaf :=_adcg -_edbe ;_eaae :=_adcg &0x07!=0;_cede :=src .Width <=((_addc -_fggb )<<3)+_adcg ;_agda :=dst .GetByteIndex (x ,y );_beag :=_bbbc +dst .Height ;if src .Height > _beag {_gbdg =_beag ;}else {_gbdg =src .Height ;};switch {case !_eaae :_ecc =_fgfb (src ,dst ,_bbbc ,_gbdg ,_agda ,_fggb ,_addc ,op );case _cede :_ecc =_dge (src ,dst ,_bbbc ,_gbdg ,_agda ,_fggb ,_addc ,_eaaf ,_ebad ,_adcg ,op );default:_ecc =_bdbc (src ,dst ,_bbbc ,_gbdg ,_agda ,_fggb ,_addc ,_eaaf ,_ebad ,_adcg ,op ,_edbe );};return _ecc ;};func (_bef *Bitmap )SetPadBits (value int ){_bef .setPadBits (value )};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_bace *Bitmap )centroid (_gbaef ,_eccf []int )(Point ,error ){_fdea :=Point {};_bace .setPadBits (0);if len (_gbaef )==0{_gbaef =_cbeff ();};if len (_eccf )==0{_eccf =_abcdf ();};var _cdf ,_afee ,_gaaa ,_bdge ,_adbbg ,_cefe int ;var _affe byte ;for _adbbg =0;_adbbg < _bace .Height ;_adbbg ++{_ebbb :=_bace .RowStride *_adbbg ;_bdge =0;for _cefe =0;_cefe < _bace .RowStride ;_cefe ++{_affe =_bace .Data [_ebbb +_cefe ];if _affe !=0{_bdge +=_eccf [_affe ];_cdf +=_gbaef [_affe ]+_cefe *8*_eccf [_affe ];};};_gaaa +=_bdge ;_afee +=_bdge *_adbbg ;};if _gaaa !=0{_fdea .X =float32 (_cdf )/float32 (_gaaa );_fdea .Y =float32 (_afee )/float32 (_gaaa );};return _fdea ,nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _fecb (oldByte ,newByte ,op );};func (_gagga *ClassedPoints )Len ()int {return _gagga .IntSlice .Size ()};func (_beb *Bitmap )setEightFullBytes (_efee int ,_eeg uint64 )error {if _efee +7> len (_beb .Data )-1{return _a .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");};_beb .Data [_efee ]=byte ((_eeg &0xff00000000000000)>>56);_beb .Data [_efee +1]=byte ((_eeg &0xff000000000000)>>48);_beb .Data [_efee +2]=byte ((_eeg &0xff0000000000)>>40);_beb .Data [_efee +3]=byte ((_eeg &0xff00000000)>>32);_beb .Data [_efee +4]=byte ((_eeg &0xff000000)>>24);_beb .Data [_efee +5]=byte ((_eeg &0xff0000)>>16);_beb .Data [_efee +6]=byte ((_eeg &0xff00)>>8);_beb .Data [_efee +7]=byte (_eeg &0xff);return nil ;};func (_cccb *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _beg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _cccb ==nil {return nil ,_a .Error (_beg ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_a .Error (_beg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_bgaa :=len (_cccb .Values );_fbbc :=&Bitmaps {Values :make ([]*Bitmap ,_bgaa ),Boxes :make ([]*_bac .Rectangle ,_bgaa )};var (_edggf ,_bgbb *Bitmap ;_eccd *_bac .Rectangle ;_ffeb error ;);for _caed :=0;_caed < _bgaa ;_caed ++{if _edggf ,_ffeb =_cccb .GetBitmap (_caed );_ffeb !=nil {return nil ,_a .Wrap (_ffeb ,_beg ,"");};if _eccd ,_ffeb =_cccb .GetBox (_caed );_ffeb !=nil {return nil ,_a .Wrap (_ffeb ,_beg ,"");};if _bgbb ,_ffeb =s .clipRectangle (_eccd ,nil );_ffeb !=nil {return nil ,_a .Wrap (_ffeb ,_beg ,"");};if _bgbb ,_ffeb =_bgbb .And (_edggf );_ffeb !=nil {return nil ,_a .Wrap (_ffeb ,_beg ,"");};_fbbc .Values [_caed ]=_bgbb ;_fbbc .Boxes [_caed ]=_eccd ;};return _fbbc ,nil ;};func _dccd (_egd *Bitmap ,_dacbd ,_agbb ,_abga ,_dag int ,_fdbb RasterOperator ,_bccee *Bitmap ,_abfa ,_bbdb int )error {const _ggge ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _egd ==nil {return _a .Error (_ggge ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _fdbb ==PixDst {return nil ;};switch _fdbb {case PixClr ,PixSet ,PixNotDst :_gaea (_egd ,_dacbd ,_agbb ,_abga ,_dag ,_fdbb );return nil ;};if _bccee ==nil {_db .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 _a .Error (_ggge ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bedd :=_fcca (_egd ,_dacbd ,_agbb ,_abga ,_dag ,_fdbb ,_bccee ,_abfa ,_bbdb );_bedd !=nil {return _a .Wrap (_bedd ,_ggge ,"");};return nil ;};func _gcdf (_aeed ,_efbaa *Bitmap ,_bgaf *Selection )(*Bitmap ,error ){const _bbfe ="\u0065\u0072\u006fd\u0065";var (_cgfc error ;_bbde *Bitmap ;);_aeed ,_cgfc =_gfafg (_aeed ,_efbaa ,_bgaf ,&_bbde );if _cgfc !=nil {return nil ,_a .Wrap (_cgfc ,_bbfe ,"");};if _cgfc =_aeed .setAll ();_cgfc !=nil {return nil ,_a .Wrap (_cgfc ,_bbfe ,"");};var _ggfg SelectionValue ;for _fdgga :=0;_fdgga < _bgaf .Height ;_fdgga ++{for _aeff :=0;_aeff < _bgaf .Width ;_aeff ++{_ggfg =_bgaf .Data [_fdgga ][_aeff ];if _ggfg ==SelHit {_cgfc =_dccd (_aeed ,_bgaf .Cx -_aeff ,_bgaf .Cy -_fdgga ,_efbaa .Width ,_efbaa .Height ,PixSrcAndDst ,_bbde ,0,0);if _cgfc !=nil {return nil ,_a .Wrap (_cgfc ,_bbfe ,"");};};};};if MorphBC ==SymmetricMorphBC {return _aeed ,nil ;};_efcc ,_adfbd ,_gbdc ,_dffgc :=_bgaf .findMaxTranslations ();if _efcc > 0{if _cgfc =_aeed .RasterOperation (0,0,_efcc ,_efbaa .Height ,PixClr ,nil ,0,0);_cgfc !=nil {return nil ,_a .Wrap (_cgfc ,_bbfe ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _gbdc > 0{if _cgfc =_aeed .RasterOperation (_efbaa .Width -_gbdc ,0,_gbdc ,_efbaa .Height ,PixClr ,nil ,0,0);_cgfc !=nil {return nil ,_a .Wrap (_cgfc ,_bbfe ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _adfbd > 0{if _cgfc =_aeed .RasterOperation (0,0,_efbaa .Width ,_adfbd ,PixClr ,nil ,0,0);_cgfc !=nil {return nil ,_a .Wrap (_cgfc ,_bbfe ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _dffgc > 0{if _cgfc =_aeed .RasterOperation (0,_efbaa .Height -_dffgc ,_efbaa .Width ,_dffgc ,PixClr ,nil ,0,0);_cgfc !=nil {return nil ,_a .Wrap (_cgfc ,_bbfe ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _aeed ,nil ;};func TstNSymbol (t *_e .T ,scale ...int )*Bitmap {_gggec ,_feee :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_d .NoError (t ,_feee );return TstGetScaledSymbol (t ,_gggec ,scale ...);};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func _dc (_f ,_gf *Bitmap )(_ab error ){const _ga ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_cg :=_gf .RowStride ;_ee :=_f .RowStride ;var (_gc byte ;_cgf uint16 ;_ac ,_de ,_eb ,_cbd ,_df int ;);for _eb =0;_eb < _gf .Height ;_eb ++{_ac =_eb *_cg ;_de =2*_eb *_ee ;for _cbd =0;_cbd < _cg ;_cbd ++{_gc =_gf .Data [_ac +_cbd ];_cgf =_gaeda [_gc ];_df =_de +_cbd *2;if _f .RowStride !=_gf .RowStride *2&&(_cbd +1)*2> _f .RowStride {_ab =_f .SetByte (_df ,byte (_cgf >>8));}else {_ab =_f .setTwoBytes (_df ,_cgf );};if _ab !=nil {return _a .Wrap (_ab ,_ga ,"");};};for _cbd =0;_cbd < _ee ;_cbd ++{_df =_de +_ee +_cbd ;_gc =_f .Data [_de +_cbd ];if _ab =_f .SetByte (_df ,_gc );_ab !=nil {return _a .Wrapf (_ab ,_ga ,"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",_de +_cbd ,_de +_ee +_cbd );};};};return nil ;};func (_bcd *Bitmap )And (s *Bitmap )(_cdb *Bitmap ,_ccb error ){const _fac ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _bcd ==nil {return nil ,_a .Error (_fac ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_a .Error (_fac ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_bcd .SizesEqual (s ){_db .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",_fac );};if _cdb ,_ccb =_gda (_cdb ,_bcd );_ccb !=nil {return nil ,_a .Wrap (_ccb ,_fac ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ccb =_cdb .RasterOperation (0,0,_cdb .Width ,_cdb .Height ,PixSrcAndDst ,s ,0,0);_ccb !=nil {return nil ,_a .Wrap (_ccb ,_fac ,"");};return _cdb ,nil ;};func (_gfgg *Bitmap )InverseData (){_gfgg .inverseData ()};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_faeg bool ,_efbea error ){const _eeea ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_ccdc ,_beaf :=p1 .Width ,p1 .Height ;_ageb ,_bdba :=p3 .Width ,p3 .Height ;if _b .Abs (_ccdc -_ageb )> maxDiffW {return false ,nil ;};if _b .Abs (_beaf -_bdba )> maxDiffH {return false ,nil ;};_ebdee :=int (float32 (area1 )*(1.0-rank )+0.5);_afde :=int (float32 (area3 )*(1.0-rank )+0.5);var _bfbe ,_eebc int ;if delX >=0{_bfbe =int (delX +0.5);}else {_bfbe =int (delX -0.5);};if delY >=0{_eebc =int (delY +0.5);}else {_eebc =int (delY -0.5);};_daba :=p1 .CreateTemplate ();if _efbea =_daba .RasterOperation (0,0,_ccdc ,_beaf ,PixSrc ,p1 ,0,0);_efbea !=nil {return false ,_a .Wrap (_efbea ,_eeea ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _efbea =_daba .RasterOperation (_bfbe ,_eebc ,_ccdc ,_beaf ,PixNotSrcAndDst ,p4 ,0,0);_efbea !=nil {return false ,_a .Wrap (_efbea ,_eeea ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_faeg ,_efbea =_daba .ThresholdPixelSum (_ebdee ,tab8 );if _efbea !=nil {return false ,_a .Wrap (_efbea ,_eeea ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _faeg {return false ,nil ;};if _efbea =_daba .RasterOperation (_bfbe ,_eebc ,_ageb ,_bdba ,PixSrc ,p3 ,0,0);_efbea !=nil {return false ,_a .Wrap (_efbea ,_eeea ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _efbea =_daba .RasterOperation (0,0,_ageb ,_bdba ,PixNotSrcAndDst ,p2 ,0,0);_efbea !=nil {return false ,_a .Wrap (_efbea ,_eeea ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_faeg ,_efbea =_daba .ThresholdPixelSum (_afde ,tab8 );if _efbea !=nil {return false ,_a .Wrap (_efbea ,_eeea ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_faeg ,nil ;};func (_gebe *Boxes )selectWithIndicator (_dcbg *_b .NumSlice )(_fegg *Boxes ,_edff error ){const _bad ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _gebe ==nil {return nil ,_a .Error (_bad ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _dcbg ==nil {return nil ,_a .Error (_bad ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_dcbg )!=len (*_gebe ){return nil ,_a .Error (_bad ,"\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 _bedf ,_eega int ;for _adb :=0;_adb < len (*_dcbg );_adb ++{if _bedf ,_edff =_dcbg .GetInt (_adb );_edff !=nil {return nil ,_a .Wrap (_edff ,_bad ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _bedf ==1{_eega ++;};};if _eega ==len (*_gebe ){return _gebe ,nil ;};_efbe :=Boxes {};for _befb :=0;_befb < len (*_dcbg );_befb ++{_bedf =int ((*_dcbg )[_befb ]);if _bedf ==0{continue ;};_efbe =append (_efbe ,(*_gebe )[_befb ]);};_fegg =&_efbe ;return _fegg ,nil ;};func (_gfb *Bitmap )clearAll ()error {return _gfb .RasterOperation (0,0,_gfb .Width ,_gfb .Height ,PixClr ,nil ,0,0);};func (_bdcb *Bitmap )ClipRectangle (box *_bac .Rectangle )(_bce *Bitmap ,_gcac *_bac .Rectangle ,_bfcd error ){const _bbb ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_a .Error (_bbb ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_bgfd ,_ddb :=_bdcb .Width ,_bdcb .Height ;_gee :=_bac .Rect (0,0,_bgfd ,_ddb );if !box .Overlaps (_gee ){return nil ,nil ,_a .Error (_bbb ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_edeg :=box .Intersect (_gee );_cge ,_dafe :=_edeg .Min .X ,_edeg .Min .Y ;_edf ,_egb :=_edeg .Dx (),_edeg .Dy ();_bce =New (_edf ,_egb );_bce .Text =_bdcb .Text ;if _bfcd =_bce .RasterOperation (0,0,_edf ,_egb ,PixSrc ,_bdcb ,_cge ,_dafe );_bfcd !=nil {return nil ,nil ,_a .Wrap (_bfcd ,_bbb ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");};_gcac =&_edeg ;return _bce ,_gcac ,nil ;};func (_bcec *BitmapsArray )AddBitmaps (bm *Bitmaps ){_bcec .Values =append (_bcec .Values ,bm )};func TstWordBitmap (t *_e .T ,scale ...int )*Bitmap {_gfgf :=1;if len (scale )> 0{_gfgf =scale [0];};_dfaf :=3;_afec :=9+7+15+2*_dfaf ;_cbee :=5+_dfaf +5;_eacc :=New (_afec *_gfgf ,_cbee *_gfgf );_bfdbe :=&Bitmaps {};var _dggg *int ;_dfaf *=_gfgf ;_edbg :=0;_dggg =&_edbg ;_gfcbf :=0;_eadeb :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,_dfaf );_eadeb =TstISymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,_dfaf );_eadeb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,0);*_dggg =0;_gfcbf =5*_gfgf +_dfaf ;_eadeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,_dfaf );_eadeb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,1*_gfgf );_eadeb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bfdbe ,_eadeb ,_dggg ,_gfcbf ,0);TstWriteSymbols (t ,_bfdbe ,_eacc );return _eacc ;};func _ggc (_fbgc ,_dcd *Bitmap ,_aaf int ,_dfg []byte ,_dga int )(_ega error ){const _ef ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_bab ,_gfee ,_gcgd ,_eef ,_fea ,_agd ,_gd ,_gfg int ;_dad ,_edg uint32 ;_bbe ,_agaf byte ;_gfc uint16 ;);_add :=make ([]byte ,4);_fga :=make ([]byte ,4);for _gcgd =0;_gcgd < _fbgc .Height -1;_gcgd ,_eef =_gcgd +2,_eef +1{_bab =_gcgd *_fbgc .RowStride ;_gfee =_eef *_dcd .RowStride ;for _fea ,_agd =0,0;_fea < _dga ;_fea ,_agd =_fea +4,_agd +1{for _gd =0;_gd < 4;_gd ++{_gfg =_bab +_fea +_gd ;if _gfg <=len (_fbgc .Data )-1&&_gfg < _bab +_fbgc .RowStride {_add [_gd ]=_fbgc .Data [_gfg ];}else {_add [_gd ]=0x00;};_gfg =_bab +_fbgc .RowStride +_fea +_gd ;if _gfg <=len (_fbgc .Data )-1&&_gfg < _bab +(2*_fbgc .RowStride ){_fga [_gd ]=_fbgc .Data [_gfg ];}else {_fga [_gd ]=0x00;};};_dad =_gg .BigEndian .Uint32 (_add );_edg =_gg .BigEndian .Uint32 (_fga );_edg |=_dad ;_edg |=_edg <<1;_edg &=0xaaaaaaaa;_dad =_edg |(_edg <<7);_bbe =byte (_dad >>24);_agaf =byte ((_dad >>8)&0xff);_gfg =_gfee +_agd ;if _gfg +1==len (_dcd .Data )-1||_gfg +1>=_gfee +_dcd .RowStride {_dcd .Data [_gfg ]=_dfg [_bbe ];}else {_gfc =(uint16 (_dfg [_bbe ])<<8)|uint16 (_dfg [_agaf ]);if _ega =_dcd .setTwoBytes (_gfg ,_gfc );_ega !=nil {return _a .Wrapf (_ega ,_ef ,"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",_gfg );};_agd ++;};};};return nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_bac .Rectangle ;};func (_defg *ClassedPoints )XAtIndex (i int )float32 {return (*_defg .Points )[_defg .IntSlice [i ]].X };func (_beagc *ClassedPoints )SortByX (){_beagc ._fage =_beagc .xSortFunction ();_cb .Sort (_beagc )};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_adge *Bitmap )GetUnpaddedData ()([]byte ,error ){_ebdd :=uint (_adge .Width &0x07);if _ebdd ==0{return _adge .Data ,nil ;};_bdec :=_adge .Width *_adge .Height ;if _bdec %8!=0{_bdec >>=3;_bdec ++;}else {_bdec >>=3;};_ecbb :=make ([]byte ,_bdec );_ccc :=_ba .NewWriterMSB (_ecbb );const _adc ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _gcgf :=0;_gcgf < _adge .Height ;_gcgf ++{for _gbd :=0;_gbd < _adge .RowStride ;_gbd ++{_baea :=_adge .Data [_gcgf *_adge .RowStride +_gbd ];if _gbd !=_adge .RowStride -1{_dba :=_ccc .WriteByte (_baea );if _dba !=nil {return nil ,_a .Wrap (_dba ,_adc ,"");};continue ;};for _ecdb :=uint (0);_ecdb < _ebdd ;_ecdb ++{_gdfe :=_ccc .WriteBit (int (_baea >>(7-_ecdb )&0x01));if _gdfe !=nil {return nil ,_a .Wrap (_gdfe ,_adc ,"");};};};};return _ecbb ,nil ;};func _ffdc (_cbag *Bitmap ,_dfdba ,_ccbac int ,_gegc ,_fada int ,_aabd RasterOperator ){var (_ebdeec bool ;_efae bool ;_addbe int ;_gadf int ;_bcba int ;_ebed int ;_egfdf bool ;_gffdg byte ;);_fgac :=8-(_dfdba &7);_dfcd :=_fgdcb [_fgac ];_aabc :=_cbag .RowStride *_ccbac +(_dfdba >>3);if _gegc < _fgac {_ebdeec =true ;_dfcd &=_gffg [8-_fgac +_gegc ];};if !_ebdeec {_addbe =(_gegc -_fgac )>>3;if _addbe !=0{_efae =true ;_gadf =_aabc +1;};};_bcba =(_dfdba +_gegc )&7;if !(_ebdeec ||_bcba ==0){_egfdf =true ;_gffdg =_gffg [_bcba ];_ebed =_aabc +1+_addbe ;};var _bge ,_cgffd int ;switch _aabd {case PixClr :for _bge =0;_bge < _fada ;_bge ++{_cbag .Data [_aabc ]=_ccgc (_cbag .Data [_aabc ],0x0,_dfcd );_aabc +=_cbag .RowStride ;};if _efae {for _bge =0;_bge < _fada ;_bge ++{for _cgffd =0;_cgffd < _addbe ;_cgffd ++{_cbag .Data [_gadf +_cgffd ]=0x0;};_gadf +=_cbag .RowStride ;};};if _egfdf {for _bge =0;_bge < _fada ;_bge ++{_cbag .Data [_ebed ]=_ccgc (_cbag .Data [_ebed ],0x0,_gffdg );_ebed +=_cbag .RowStride ;};};case PixSet :for _bge =0;_bge < _fada ;_bge ++{_cbag .Data [_aabc ]=_ccgc (_cbag .Data [_aabc ],0xff,_dfcd );_aabc +=_cbag .RowStride ;};if _efae {for _bge =0;_bge < _fada ;_bge ++{for _cgffd =0;_cgffd < _addbe ;_cgffd ++{_cbag .Data [_gadf +_cgffd ]=0xff;};_gadf +=_cbag .RowStride ;};};if _egfdf {for _bge =0;_bge < _fada ;_bge ++{_cbag .Data [_ebed ]=_ccgc (_cbag .Data [_ebed ],0xff,_gffdg );_ebed +=_cbag .RowStride ;};};case PixNotDst :for _bge =0;_bge < _fada ;_bge ++{_cbag .Data [_aabc ]=_ccgc (_cbag .Data [_aabc ],^_cbag .Data [_aabc ],_dfcd );_aabc +=_cbag .RowStride ;};if _efae {for _bge =0;_bge < _fada ;_bge ++{for _cgffd =0;_cgffd < _addbe ;_cgffd ++{_cbag .Data [_gadf +_cgffd ]=^(_cbag .Data [_gadf +_cgffd ]);};_gadf +=_cbag .RowStride ;};};if _egfdf {for _bge =0;_bge < _fada ;_bge ++{_cbag .Data [_ebed ]=_ccgc (_cbag .Data [_ebed ],^_cbag .Data [_ebed ],_gffdg );_ebed +=_cbag .RowStride ;};};};};func Extract (roi _bac .Rectangle ,src *Bitmap )(*Bitmap ,error ){_cfa :=New (roi .Dx (),roi .Dy ());_dgcb :=roi .Min .X &0x07;_adbd :=8-_dgcb ;_cdbf :=uint (8-_cfa .Width &0x07);_bbgge :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_gfeb :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_fefe :=_cfa .RowStride ==_gfeb +1-_bbgge ;var _ccd int ;for _gcage :=roi .Min .Y ;_gcage < roi .Max .Y ;_gcage ++{_beabg :=_bbgge ;_gagg :=_ccd ;switch {case _bbgge ==_gfeb :_badb ,_bbdf :=src .GetByte (_beabg );if _bbdf !=nil {return nil ,_bbdf ;};_badb <<=uint (_dgcb );_bbdf =_cfa .SetByte (_gagg ,_edac (_cdbf ,_badb ));if _bbdf !=nil {return nil ,_bbdf ;};case _dgcb ==0:for _cad :=_bbgge ;_cad <=_gfeb ;_cad ++{_deaaa ,_eeeb :=src .GetByte (_beabg );if _eeeb !=nil {return nil ,_eeeb ;};_beabg ++;if _cad ==_gfeb &&_fefe {_deaaa =_edac (_cdbf ,_deaaa );};_eeeb =_cfa .SetByte (_gagg ,_deaaa );if _eeeb !=nil {return nil ,_eeeb ;};_gagg ++;};default:_ffd :=_dffa (src ,_cfa ,uint (_dgcb ),uint (_adbd ),_cdbf ,_bbgge ,_gfeb ,_fefe ,_beabg ,_gagg );if _ffd !=nil {return nil ,_ffd ;};};_bbgge +=src .RowStride ;_gfeb +=src .RowStride ;_ccd +=_cfa .RowStride ;};return _cfa ,nil ;};func _gaea (_aade *Bitmap ,_eeag ,_caf ,_dfbd ,_abcf int ,_dccba RasterOperator ){if _eeag < 0{_dfbd +=_eeag ;_eeag =0;};_effg :=_eeag +_dfbd -_aade .Width ;if _effg > 0{_dfbd -=_effg ;};if _caf < 0{_abcf +=_caf ;_caf =0;};_ddbgf :=_caf +_abcf -_aade .Height ;if _ddbgf > 0{_abcf -=_ddbgf ;};if _dfbd <=0||_abcf <=0{return ;};if (_eeag &7)==0{_gfac (_aade ,_eeag ,_caf ,_dfbd ,_abcf ,_dccba );}else {_ffdc (_aade ,_eeag ,_caf ,_dfbd ,_abcf ,_dccba );};};func (_bcbe *Bitmap )connComponentsBB (_adbg int )(_fdgg *Boxes ,_befd error ){const _adef ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _adbg !=4&&_adbg !=8{return nil ,_a .Error (_adef ,"\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 _bcbe .Zero (){return &Boxes {},nil ;};_bcbe .setPadBits (0);_gbae ,_befd :=_gda (nil ,_bcbe );if _befd !=nil {return nil ,_a .Wrap (_befd ,_adef ,"\u0062\u006d\u0031");};_adgeg :=&_b .Stack {};_adgeg .Aux =&_b .Stack {};_fdgg =&Boxes {};var (_eeae ,_cegdb int ;_geff _bac .Point ;_egcdc bool ;_aebgg *_bac .Rectangle ;);for {if _geff ,_egcdc ,_befd =_gbae .nextOnPixel (_cegdb ,_eeae );_befd !=nil {return nil ,_a .Wrap (_befd ,_adef ,"");};if !_egcdc {break ;};if _aebgg ,_befd =_dagcg (_gbae ,_adgeg ,_geff .X ,_geff .Y ,_adbg );_befd !=nil {return nil ,_a .Wrap (_befd ,_adef ,"");};if _befd =_fdgg .Add (_aebgg );_befd !=nil {return nil ,_a .Wrap (_befd ,_adef ,"");};_cegdb =_geff .X ;_eeae =_geff .Y ;};return _fdgg ,nil ;};func (_gedfd *Bitmaps )SortByWidth (){_fefa :=(*byWidth )(_gedfd );_cb .Sort (_fefa )};func TstFrameBitmap ()*Bitmap {return _gcabe .Copy ()};func _ffgf (_dedc *Bitmap ,_cccd *_b .Stack ,_gfdg ,_gcab int )(_edaf *_bac .Rectangle ,_caafd error ){const _eac ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _dedc ==nil {return nil ,_a .Error (_eac ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cccd ==nil {return nil ,_a .Error (_eac ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_gfbae ,_gddd :=_dedc .Width ,_dedc .Height ;_fcdec :=_gfbae -1;_edddd :=_gddd -1;if _gfdg < 0||_gfdg > _fcdec ||_gcab < 0||_gcab > _edddd ||!_dedc .GetPixel (_gfdg ,_gcab ){return nil ,nil ;};var _dceag *_bac .Rectangle ;_dceag ,_caafd =Rect (100000,100000,0,0);if _caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"");};if _caafd =_bbge (_cccd ,_gfdg ,_gfdg ,_gcab ,1,_edddd ,_dceag );_caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _caafd =_bbge (_cccd ,_gfdg ,_gfdg ,_gcab +1,-1,_edddd ,_dceag );_caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_dceag .Min .X ,_dceag .Max .X =_gfdg ,_gfdg ;_dceag .Min .Y ,_dceag .Max .Y =_gcab ,_gcab ;var (_cfaf *fillSegment ;_dbaag int ;);for _cccd .Len ()> 0{if _cfaf ,_caafd =_eaga (_cccd );_caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"");};_gcab =_cfaf ._accf ;for _gfdg =_cfaf ._fggd ;_gfdg >=0&&_dedc .GetPixel (_gfdg ,_gcab );_gfdg --{if _caafd =_dedc .SetPixel (_gfdg ,_gcab ,0);_caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"");};};if _gfdg >=_cfaf ._fggd {for _gfdg ++;_gfdg <=_cfaf ._gccf &&_gfdg <=_fcdec &&!_dedc .GetPixel (_gfdg ,_gcab );_gfdg ++{};_dbaag =_gfdg ;if !(_gfdg <=_cfaf ._gccf &&_gfdg <=_fcdec ){continue ;};}else {_dbaag =_gfdg +1;if _dbaag < _cfaf ._fggd -1{if _caafd =_bbge (_cccd ,_dbaag ,_cfaf ._fggd -1,_cfaf ._accf ,-_cfaf ._ffcc ,_edddd ,_dceag );_caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_gfdg =_cfaf ._fggd +1;};for {for ;_gfdg <=_fcdec &&_dedc .GetPixel (_gfdg ,_gcab );_gfdg ++{if _caafd =_dedc .SetPixel (_gfdg ,_gcab ,0);_caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _caafd =_bbge (_cccd ,_dbaag ,_gfdg -1,_cfaf ._accf ,_cfaf ._ffcc ,_edddd ,_dceag );_caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gfdg > _cfaf ._gccf +1{if _caafd =_bbge (_cccd ,_cfaf ._gccf +1,_gfdg -1,_cfaf ._accf ,-_cfaf ._ffcc ,_edddd ,_dceag );_caafd !=nil {return nil ,_a .Wrap (_caafd ,_eac ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _gfdg ++;_gfdg <=_cfaf ._gccf &&_gfdg <=_fcdec &&!_dedc .GetPixel (_gfdg ,_gcab );_gfdg ++{};_dbaag =_gfdg ;if !(_gfdg <=_cfaf ._gccf &&_gfdg <=_fcdec ){break ;};};};_dceag .Max .X ++;_dceag .Max .Y ++;return _dceag ,nil ;};func _gfac (_acbe *Bitmap ,_egec ,_cgc int ,_abedb ,_gbgf int ,_dgaef RasterOperator ){var (_fcgg int ;_abfb byte ;_cfad ,_aeabf int ;_dfdf int ;);_ddaf :=_abedb >>3;_edce :=_abedb &7;if _edce > 0{_abfb =_gffg [_edce ];};_fcgg =_acbe .RowStride *_cgc +(_egec >>3);switch _dgaef {case PixClr :for _cfad =0;_cfad < _gbgf ;_cfad ++{_dfdf =_fcgg +_cfad *_acbe .RowStride ;for _aeabf =0;_aeabf < _ddaf ;_aeabf ++{_acbe .Data [_dfdf ]=0x0;_dfdf ++;};if _edce > 0{_acbe .Data [_dfdf ]=_ccgc (_acbe .Data [_dfdf ],0x0,_abfb );};};case PixSet :for _cfad =0;_cfad < _gbgf ;_cfad ++{_dfdf =_fcgg +_cfad *_acbe .RowStride ;for _aeabf =0;_aeabf < _ddaf ;_aeabf ++{_acbe .Data [_dfdf ]=0xff;_dfdf ++;};if _edce > 0{_acbe .Data [_dfdf ]=_ccgc (_acbe .Data [_dfdf ],0xff,_abfb );};};case PixNotDst :for _cfad =0;_cfad < _gbgf ;_cfad ++{_dfdf =_fcgg +_cfad *_acbe .RowStride ;for _aeabf =0;_aeabf < _ddaf ;_aeabf ++{_acbe .Data [_dfdf ]=^_acbe .Data [_dfdf ];_dfdf ++;};if _edce > 0{_acbe .Data [_dfdf ]=_ccgc (_acbe .Data [_dfdf ],^_acbe .Data [_dfdf ],_abfb );};};};};func TstWriteSymbols (t *_e .T ,bms *Bitmaps ,src *Bitmap ){for _daab :=0;_daab < bms .Size ();_daab ++{_abfaf :=bms .Values [_daab ];_cecd :=bms .Boxes [_daab ];_acea :=src .RasterOperation (_cecd .Min .X ,_cecd .Min .Y ,_abfaf .Width ,_abfaf .Height ,PixSrc ,_abfaf ,0,0);_d .NoError (t ,_acea );};};func TstFrameBitmapData ()[]byte {return _gcabe .Data };func (_fdad *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _agef ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _ceee :=_fdad .validateIntSlice ();_ceee !=nil {return nil ,_a .Wrap (_ceee ,_agef ,"");};if _fdad .IntSlice .Size ()==0{return nil ,_a .Error (_agef ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_fdad .SortByY ();var (_gbef []*ClassedPoints ;_fgdc int ;);_daeg :=-1;var _cdbd *ClassedPoints ;for _cddgf :=0;_cddgf < len (_fdad .IntSlice );_cddgf ++{_fgdc =int (_fdad .YAtIndex (_cddgf ));if _fgdc !=_daeg {_cdbd =&ClassedPoints {Points :_fdad .Points };_daeg =_fgdc ;_gbef =append (_gbef ,_cdbd );};_cdbd .IntSlice =append (_cdbd .IntSlice ,_fdad .IntSlice [_cddgf ]);};for _ ,_bfcf :=range _gbef {_bfcf .SortByX ();};return _gbef ,nil ;};func New (width ,height int )*Bitmap {_fda :=_ffag (width ,height );_fda .Data =make ([]byte ,height *_fda .RowStride );return _fda ;};func _dbead (_abca *Bitmap ,_ceec *Bitmap ,_cdeaf int )(_eade error ){const _adfbc ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_dgddc :=_gefb (_abca .Height ,_ceec .Height );_aaag :=_gefb (_abca .RowStride ,_ceec .RowStride );switch _cdeaf {case 4:_eade =_edefc (_abca ,_ceec ,_dgddc ,_aaag );case 8:_eade =_ddfd (_abca ,_ceec ,_dgddc ,_aaag );default:return _a .Errorf (_adfbc ,"\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",_cdeaf );};if _eade !=nil {return _a .Wrap (_eade ,_adfbc ,"");};return nil ;};func _agbf (_fcff ,_adbe *Bitmap ,_gbbc ,_egfd int )(*Bitmap ,error ){const _adcf ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _adbe ==nil {return nil ,_a .Error (_adcf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gbbc < 1&&_egfd < 1{return nil ,_a .Error (_adcf ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _gbbc ==1&&_egfd ==1{return _adbe .Copy (),nil ;};if _gbbc ==1||_egfd ==1{var _fbfg error ;_cbcf :=SelCreateBrick (_egfd ,_gbbc ,_egfd /2,_gbbc /2,SelHit );_fcff ,_fbfg =_gbfg (_fcff ,_adbe ,_cbcf );if _fbfg !=nil {return nil ,_a .Wrap (_fbfg ,_adcf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fcff ,nil ;};_agca :=SelCreateBrick (1,_gbbc ,0,_gbbc /2,SelHit );_gggc :=SelCreateBrick (_egfd ,1,_egfd /2,0,SelHit );_cedd ,_fdbg :=_gcdf (nil ,_adbe ,_agca );if _fdbg !=nil {return nil ,_a .Wrap (_fdbg ,_adcf ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_fcff ,_fdbg =_gcdf (_fcff ,_cedd ,_gggc );if _fdbg !=nil {return nil ,_a .Wrap (_fdbg ,_adcf ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_fdbg =_gegb (_cedd ,_fcff ,_agca );if _fdbg !=nil {return nil ,_a .Wrap (_fdbg ,_adcf ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_ ,_fdbg =_gegb (_fcff ,_cedd ,_gggc );if _fdbg !=nil {return nil ,_a .Wrap (_fdbg ,_adcf ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _fcff ,nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _dgc ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_egfe :=_ffag (width ,height );_egfe .Data =data ;if _cc :=((width *height )+7)>>3;len (data )< _cc {return nil ,_a .Errorf (_dgc ,"\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 ),_cc );};if _ecb :=_egfe .addPadBits ();_ecb !=nil {return nil ,_a .Wrap (_ecb ,_dgc ,"");};return _egfe ,nil ;};func (_febb *byWidth )Swap (i ,j int ){_febb .Values [i ],_febb .Values [j ]=_febb .Values [j ],_febb .Values [i ];if _febb .Boxes !=nil {_febb .Boxes [i ],_febb .Boxes [j ]=_febb .Boxes [j ],_febb .Boxes [i ];};};func _gec (_deedf *Bitmap ,_abed ,_fcaf ,_dedbe ,_bfcb int ,_fdba RasterOperator ,_ecea *Bitmap ,_gbca ,_gbba int )error {var (_ddccg bool ;_eegag bool ;_gbdcd byte ;_ebaf int ;_caba int ;_feda int ;_fadg int ;_ecbad bool ;_egge int ;_bag int ;_gece int ;_cdfa bool ;_dcac byte ;_acag int ;_dgga int ;_ffgg int ;_acgf byte ;_deede int ;_agae int ;_aafd uint ;_ddga uint ;_cggca byte ;_cbacg shift ;_eeac bool ;_bbcaa bool ;_fbdc ,_ebeee int ;);if _gbca &7!=0{_agae =8-(_gbca &7);};if _abed &7!=0{_caba =8-(_abed &7);};if _agae ==0&&_caba ==0{_cggca =_fgdcb [0];}else {if _caba > _agae {_aafd =uint (_caba -_agae );}else {_aafd =uint (8-(_agae -_caba ));};_ddga =8-_aafd ;_cggca =_fgdcb [_aafd ];};if (_abed &7)!=0{_ddccg =true ;_ebaf =8-(_abed &7);_gbdcd =_fgdcb [_ebaf ];_feda =_deedf .RowStride *_fcaf +(_abed >>3);_fadg =_ecea .RowStride *_gbba +(_gbca >>3);_deede =8-(_gbca &7);if _ebaf > _deede {_cbacg =_cbfd ;if _dedbe >=_agae {_eeac =true ;};}else {_cbacg =_dagg ;};};if _dedbe < _ebaf {_eegag =true ;_gbdcd &=_gffg [8-_ebaf +_dedbe ];};if !_eegag {_egge =(_dedbe -_ebaf )>>3;if _egge !=0{_ecbad =true ;_bag =_deedf .RowStride *_fcaf +((_abed +_caba )>>3);_gece =_ecea .RowStride *_gbba +((_gbca +_caba )>>3);};};_acag =(_abed +_dedbe )&7;if !(_eegag ||_acag ==0){_cdfa =true ;_dcac =_gffg [_acag ];_dgga =_deedf .RowStride *_fcaf +((_abed +_caba )>>3)+_egge ;_ffgg =_ecea .RowStride *_gbba +((_gbca +_caba )>>3)+_egge ;if _acag > int (_ddga ){_bbcaa =true ;};};switch _fdba {case PixSrc :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],_acgf ,_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]=_acgf ;};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],_acgf ,_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixNotSrc :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],^_acgf ,_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]=^_acgf ;};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],^_acgf ,_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixSrcOrDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],_acgf |_deedf .Data [_feda ],_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]|=_acgf ;};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],_acgf |_deedf .Data [_dgga ],_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixSrcAndDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],_acgf &_deedf .Data [_feda ],_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]&=_acgf ;};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],_acgf &_deedf .Data [_dgga ],_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixSrcXorDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],_acgf ^_deedf .Data [_feda ],_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]^=_acgf ;};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],_acgf ^_deedf .Data [_dgga ],_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixNotSrcOrDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],^_acgf |_deedf .Data [_feda ],_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]|=^_acgf ;};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],^_acgf |_deedf .Data [_dgga ],_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixNotSrcAndDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],^_acgf &_deedf .Data [_feda ],_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]&=^_acgf ;};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],^_acgf &_deedf .Data [_dgga ],_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixSrcOrNotDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],_acgf |^_deedf .Data [_feda ],_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]=_acgf |^_deedf .Data [_bag +_ebeee ];};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],_acgf |^_deedf .Data [_dgga ],_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixSrcAndNotDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],_acgf &^_deedf .Data [_feda ],_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]=_acgf &^_deedf .Data [_bag +_ebeee ];};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],_acgf &^_deedf .Data [_dgga ],_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixNotPixSrcOrDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],^(_acgf |_deedf .Data [_feda ]),_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]=^(_acgf |_deedf .Data [_bag +_ebeee ]);};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],^(_acgf |_deedf .Data [_dgga ]),_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixNotPixSrcAndDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],^(_acgf &_deedf .Data [_feda ]),_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]=^(_acgf &_deedf .Data [_bag +_ebeee ]);};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],^(_acgf &_deedf .Data [_dgga ]),_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};case PixNotPixSrcXorDst :if _ddccg {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{if _cbacg ==_cbfd {_acgf =_ecea .Data [_fadg ]<<_aafd ;if _eeac {_acgf =_ccgc (_acgf ,_ecea .Data [_fadg +1]>>_ddga ,_cggca );};}else {_acgf =_ecea .Data [_fadg ]>>_ddga ;};_deedf .Data [_feda ]=_ccgc (_deedf .Data [_feda ],^(_acgf ^_deedf .Data [_feda ]),_gbdcd );_feda +=_deedf .RowStride ;_fadg +=_ecea .RowStride ;};};if _ecbad {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{for _ebeee =0;_ebeee < _egge ;_ebeee ++{_acgf =_ccgc (_ecea .Data [_gece +_ebeee ]<<_aafd ,_ecea .Data [_gece +_ebeee +1]>>_ddga ,_cggca );_deedf .Data [_bag +_ebeee ]=^(_acgf ^_deedf .Data [_bag +_ebeee ]);};_bag +=_deedf .RowStride ;_gece +=_ecea .RowStride ;};};if _cdfa {for _fbdc =0;_fbdc < _bfcb ;_fbdc ++{_acgf =_ecea .Data [_ffgg ]<<_aafd ;if _bbcaa {_acgf =_ccgc (_acgf ,_ecea .Data [_ffgg +1]>>_ddga ,_cggca );};_deedf .Data [_dgga ]=_ccgc (_deedf .Data [_dgga ],^(_acgf ^_deedf .Data [_dgga ]),_dcac );_dgga +=_deedf .RowStride ;_ffgg +=_ecea .RowStride ;};};default:_db .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",_fdba );return _a .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 ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_dgfe *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_affd *Bitmaps ,_bagd error ){const _ddd ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _dgfe ==nil {return nil ,_a .Error (_ddd ,"\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 ,_a .Errorf (_ddd ,"\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 ,_a .Errorf (_ddd ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );};_edda ,_bagd :=_dgfe .makeSizeIndicator (width ,height ,tp ,relation );if _bagd !=nil {return nil ,_a .Wrap (_bagd ,_ddd ,"");};_affd ,_bagd =_dgfe .selectByIndicator (_edda );if _bagd !=nil {return nil ,_a .Wrap (_bagd ,_ddd ,"");};return _affd ,nil ;};func (_fgcg *Bitmap )nextOnPixel (_dcbe ,_ecgc int )(_acfe _bac .Point ,_cbe bool ,_cbfe error ){const _gaa ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_acfe ,_cbe ,_cbfe =_fgcg .nextOnPixelLow (_fgcg .Width ,_fgcg .Height ,_fgcg .RowStride ,_dcbe ,_ecgc );if _cbfe !=nil {return _acfe ,false ,_a .Wrap (_cbfe ,_gaa ,"");};return _acfe ,_cbe ,nil ;};var MorphBC BoundaryCondition ;func (_cdad *Bitmap )CountPixels ()int {return _cdad .countPixels ()};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_cdbc :=_dbgc (h ,w ,"");_cdbc .setOrigin (cy ,cx );var _facaf ,_bagg int ;for _facaf =0;_facaf < h ;_facaf ++{for _bagg =0;_bagg < w ;_bagg ++{_cdbc .Data [_facaf ][_bagg ]=tp ;};};return _cdbc ;};func (_ead *Bitmap )Equals (s *Bitmap )bool {if len (_ead .Data )!=len (s .Data )||_ead .Width !=s .Width ||_ead .Height !=s .Height {return false ;};for _fbdg :=0;_fbdg < _ead .Height ;_fbdg ++{_fdda :=_fbdg *_ead .RowStride ;for _bae :=0;_bae < _ead .RowStride ;_bae ++{if _ead .Data [_fdda +_bae ]!=s .Data [_fdda +_bae ]{return false ;};};};return true ;};func (_gba *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _gba .Copy (),nil ;};_cee ,_gccg :=_gba .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _gccg !=nil {return nil ,_a .Wrap (_gccg ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _cee ,nil ;};func (_bebg *Bitmaps )Size ()int {return len (_bebg .Values )};func _adg (_da *Bitmap ,_fa int )(*Bitmap ,error ){const _cgb ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _da ==nil {return nil ,_a .Error (_cgb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fa ==1{return _gda (nil ,_da );};if _fa !=2&&_fa !=4&&_fa !=8{return nil ,_a .Error (_cgb ,"\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");};_agg :=_fa *_da .Width ;_gbf :=_fa *_da .Height ;_fbc :=New (_agg ,_gbf );var _fg error ;switch _fa {case 2:_fg =_dc (_fbc ,_da );case 4:_fg =_ca (_fbc ,_da );case 8:_fg =_cbg (_fbc ,_da );};if _fg !=nil {return nil ,_a .Wrap (_fg ,_cgb ,"");};return _fbc ,nil ;};func _ddfd (_aebb ,_ddeca *Bitmap ,_bdgc ,_dbaf int )(_gbac error ){const _gfae ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_ceff ,_feeg ,_ffdfb ,_fbeed int ;_eceab ,_dgbcd ,_ggdb ,_cgga ,_fdef ,_afeeg ,_adab ,_babca byte ;);for _ceff =0;_ceff < _bdgc ;_ceff ++{_ffdfb =_ceff *_aebb .RowStride ;_fbeed =_ceff *_ddeca .RowStride ;for _feeg =0;_feeg < _dbaf ;_feeg ++{if _eceab ,_gbac =_aebb .GetByte (_ffdfb +_feeg );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _dgbcd ,_gbac =_ddeca .GetByte (_fbeed +_feeg );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _ceff > 0{if _ggdb ,_gbac =_aebb .GetByte (_ffdfb -_aebb .RowStride +_feeg );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_eceab |=_ggdb |(_ggdb <<1)|(_ggdb >>1);if _feeg > 0{if _babca ,_gbac =_aebb .GetByte (_ffdfb -_aebb .RowStride +_feeg -1);_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_eceab |=_babca <<7;};if _feeg < _dbaf -1{if _babca ,_gbac =_aebb .GetByte (_ffdfb -_aebb .RowStride +_feeg +1);_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_eceab |=_babca >>7;};};if _feeg > 0{if _cgga ,_gbac =_aebb .GetByte (_ffdfb +_feeg -1);_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u006a\u0020\u003e \u0030");};_eceab |=_cgga <<7;};_eceab &=_dgbcd ;if _eceab ==0||^_eceab ==0{if _gbac =_aebb .SetByte (_ffdfb +_feeg ,_eceab );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_adab =_eceab ;_eceab =(_eceab |(_eceab >>1)|(_eceab <<1))&_dgbcd ;if (_eceab ^_adab )==0{if _gbac =_aebb .SetByte (_ffdfb +_feeg ,_eceab );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _ceff =_bdgc -1;_ceff >=0;_ceff --{_ffdfb =_ceff *_aebb .RowStride ;_fbeed =_ceff *_ddeca .RowStride ;for _feeg =_dbaf -1;_feeg >=0;_feeg --{if _eceab ,_gbac =_aebb .GetByte (_ffdfb +_feeg );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _dgbcd ,_gbac =_ddeca .GetByte (_fbeed +_feeg );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _ceff < _bdgc -1{if _fdef ,_gbac =_aebb .GetByte (_ffdfb +_aebb .RowStride +_feeg );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_eceab |=_fdef |(_fdef <<1)|_fdef >>1;if _feeg > 0{if _babca ,_gbac =_aebb .GetByte (_ffdfb +_aebb .RowStride +_feeg -1);_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\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");};_eceab |=_babca <<7;};if _feeg < _dbaf -1{if _babca ,_gbac =_aebb .GetByte (_ffdfb +_aebb .RowStride +_feeg +1);_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\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");};_eceab |=_babca >>7;};};if _feeg < _dbaf -1{if _afeeg ,_gbac =_aebb .GetByte (_ffdfb +_feeg +1);_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\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");};_eceab |=_afeeg >>7;};_eceab &=_dgbcd ;if _eceab ==0||(^_eceab )==0{if _gbac =_aebb .SetByte (_ffdfb +_feeg ,_eceab );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_adab =_eceab ;_eceab =(_eceab |(_eceab >>1)|(_eceab <<1))&_dgbcd ;if (_eceab ^_adab )==0{if _gbac =_aebb .SetByte (_ffdfb +_feeg ,_eceab );_gbac !=nil {return _a .Wrap (_gbac ,_gfae ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");};break ;};};};};return nil ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_ffga *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _fcbf ="\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 >=_ffga .IntSlice .Size (){return 0,_a .Errorf (_fcbf ,"\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 (_ffga .XAtIndex (i )),nil ;};func _gfafg (_cabg *Bitmap ,_ecfbd *Bitmap ,_bcg *Selection ,_deage **Bitmap )(*Bitmap ,error ){const _dbfeb ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _ecfbd ==nil {return nil ,_a .Error (_dbfeb ,"\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 _bcg ==nil {return nil ,_a .Error (_dbfeb ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_befa ,_fbbe :=_bcg .Height ,_bcg .Width ;if _befa ==0||_fbbe ==0{return nil ,_a .Error (_dbfeb ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _cabg ==nil {_cabg =_ecfbd .createTemplate ();*_deage =_ecfbd ;return _cabg ,nil ;};_cabg .Width =_ecfbd .Width ;_cabg .Height =_ecfbd .Height ;_cabg .RowStride =_ecfbd .RowStride ;_cabg .Color =_ecfbd .Color ;_cabg .Data =make ([]byte ,_ecfbd .RowStride *_ecfbd .Height );if _cabg ==_ecfbd {*_deage =_ecfbd .Copy ();}else {*_deage =_ecfbd ;};return _cabg ,nil ;};func (_edb *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _edb .removeBorderGeneral (left ,right ,top ,bot );};func _ca (_dg ,_fc *Bitmap )(_dee error ){const _cga ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_ag :=_fc .RowStride ;_eca :=_dg .RowStride ;_ff :=_fc .RowStride *4-_dg .RowStride ;var (_dcb ,_baf byte ;_bd uint32 ;_gac ,_dce ,_fd ,_gae ,_aa ,_fb ,_ce int ;);for _fd =0;_fd < _fc .Height ;_fd ++{_gac =_fd *_ag ;_dce =4*_fd *_eca ;for _gae =0;_gae < _ag ;_gae ++{_dcb =_fc .Data [_gac +_gae ];_bd =_bbce [_dcb ];_fb =_dce +_gae *4;if _ff !=0&&(_gae +1)*4> _dg .RowStride {for _aa =_ff ;_aa > 0;_aa --{_baf =byte ((_bd >>uint (_aa *8))&0xff);_ce =_fb +(_ff -_aa );if _dee =_dg .SetByte (_ce ,_baf );_dee !=nil {return _a .Wrapf (_dee ,_cga ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_aa );};};}else if _dee =_dg .setFourBytes (_fb ,_bd );_dee !=nil {return _a .Wrap (_dee ,_cga ,"");};if _dee =_dg .setFourBytes (_dce +_gae *4,_bbce [_fc .Data [_gac +_gae ]]);_dee !=nil {return _a .Wrap (_dee ,_cga ,"");};};for _aa =1;_aa < 4;_aa ++{for _gae =0;_gae < _eca ;_gae ++{if _dee =_dg .SetByte (_dce +_aa *_eca +_gae ,_dg .Data [_dce +_gae ]);_dee !=nil {return _a .Wrapf (_dee ,_cga ,"\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",_aa ,_gae );};};};};return nil ;};type byWidth Bitmaps ;func _ecd (_dae *Bitmap ,_cbdb ...int )(_fdeg *Bitmap ,_gff error ){const _af ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _dae ==nil {return nil ,_a .Error (_af ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_cbdb )==0||len (_cbdb )> 4{return nil ,_a .Error (_af ,"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 _cbdb [0]<=0{_db .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");_fdeg ,_gff =_gda (nil ,_dae );if _gff !=nil {return nil ,_a .Wrap (_gff ,_af ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");};return _fdeg ,nil ;};_eed :=_gdga ();_fdeg =_dae ;for _ggf ,_fdb :=range _cbdb {if _fdb <=0{break ;};_fdeg ,_gff =_afg (_fdeg ,_fdb ,_eed );if _gff !=nil {return nil ,_a .Wrapf (_gff ,_af ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_ggf );};};return _fdeg ,nil ;};type byHeight Bitmaps ;type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _dabad (_efgd ,_geeda *Bitmap ,_edea ,_gbee int )(*Bitmap ,error ){const _acfeg ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _geeda ==nil {_db .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 ,_a .Error (_acfeg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _edea < 1||_gbee < 1{return nil ,_a .Error (_acfeg ,"\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 _edea ==1&&_gbee ==1{_adede ,_ccbeb :=_gda (_efgd ,_geeda );if _ccbeb !=nil {return nil ,_a .Wrap (_ccbeb ,_acfeg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _adede ,nil ;};if _edea ==1||_gbee ==1{_dgf :=SelCreateBrick (_gbee ,_edea ,_gbee /2,_edea /2,SelHit );_abag ,_aaad :=_gegb (_efgd ,_geeda ,_dgf );if _aaad !=nil {return nil ,_a .Wrap (_aaad ,_acfeg ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _abag ,nil ;};_fbdd :=SelCreateBrick (1,_edea ,0,_edea /2,SelHit );_fdga :=SelCreateBrick (_gbee ,1,_gbee /2,0,SelHit );_bgfcf ,_dfdeg :=_gegb (nil ,_geeda ,_fbdd );if _dfdeg !=nil {return nil ,_a .Wrap (_dfdeg ,_acfeg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_efgd ,_dfdeg =_gegb (_efgd ,_bgfcf ,_fdga );if _dfdeg !=nil {return nil ,_a .Wrap (_dfdeg ,_acfeg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _efgd ,nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dccd (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_ggccc *Bitmap )resizeImageData (_gef *Bitmap )error {if _gef ==nil {return _a .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 _ggccc .SizesEqual (_gef ){return nil ;};_ggccc .Data =make ([]byte ,len (_gef .Data ));_ggccc .Width =_gef .Width ;_ggccc .Height =_gef .Height ;_ggccc .RowStride =_gef .RowStride ;return nil ;};func (_gcef *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _fdbf ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_ggbd ,_gggd :=_gcef .selectByIndexes (idx );if _gggd !=nil {return nil ,_a .Wrap (_gggd ,_fdbf ,"");};return _ggbd ,nil ;};type SizeSelection int ;func (_cef *Bitmap )String ()string {var _bbedc ="\u000a";for _gdd :=0;_gdd < _cef .Height ;_gdd ++{var _ffba string ;for _dbea :=0;_dbea < _cef .Width ;_dbea ++{_abdd :=_cef .GetPixel (_dbea ,_gdd );if _abdd {_ffba +="\u0031";}else {_ffba +="\u0030";};};_bbedc +=_ffba +"\u000a";};return _bbedc ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_bac .Rectangle ;};func _gegb (_bcfa *Bitmap ,_agc *Bitmap ,_cgdc *Selection )(*Bitmap ,error ){var (_fddae *Bitmap ;_edgb error ;);_bcfa ,_edgb =_gfafg (_bcfa ,_agc ,_cgdc ,&_fddae );if _edgb !=nil {return nil ,_edgb ;};if _edgb =_bcfa .clearAll ();_edgb !=nil {return nil ,_edgb ;};var _edee SelectionValue ;for _bcbca :=0;_bcbca < _cgdc .Height ;_bcbca ++{for _cfce :=0;_cfce < _cgdc .Width ;_cfce ++{_edee =_cgdc .Data [_bcbca ][_cfce ];if _edee ==SelHit {if _edgb =_bcfa .RasterOperation (_cfce -_cgdc .Cx ,_bcbca -_cgdc .Cy ,_agc .Width ,_agc .Height ,PixSrcOrDst ,_fddae ,0,0);_edgb !=nil {return nil ,_edgb ;};};};};return _bcfa ,nil ;};func (_efda Points )XSorter ()func (_fce ,_ecee int )bool {return func (_ace ,_abce int )bool {return _efda [_ace ].X < _efda [_abce ].X };};const (_cbfd shift =iota ;_dagg ;);type SelectionValue int ;type fillSegment struct{_fggd int ;_gccf int ;_accf int ;_ffcc int ;};func (_faea *Bitmap )Zero ()bool {_fcc :=_faea .Width /8;_bga :=_faea .Width &7;var _ccf byte ;if _bga !=0{_ccf =byte (0xff<<uint (8-_bga ));};var _edc ,_bddc ,_befe int ;for _bddc =0;_bddc < _faea .Height ;_bddc ++{_edc =_faea .RowStride *_bddc ;for _befe =0;_befe < _fcc ;_befe ,_edc =_befe +1,_edc +1{if _faea .Data [_edc ]!=0{return false ;};};if _bga > 0{if _faea .Data [_edc ]&_ccf !=0{return false ;};};};return true ;};func (_egac *Bitmap )inverseData (){if _cdec :=_egac .RasterOperation (0,0,_egac .Width ,_egac .Height ,PixNotDst ,nil ,0,0);_cdec !=nil {_db .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_cdec );};if _egac .Color ==Chocolate {_egac .Color =Vanilla ;}else {_egac .Color =Chocolate ;};};func (_aaadc *ClassedPoints )SortByY (){_aaadc ._fage =_aaadc .ySortFunction ();_cb .Sort (_aaadc )};func _gga ()(_fbg [256]uint32 ){for _ed :=0;_ed < 256;_ed ++{if _ed &0x01!=0{_fbg [_ed ]|=0xf;};if _ed &0x02!=0{_fbg [_ed ]|=0xf0;};if _ed &0x04!=0{_fbg [_ed ]|=0xf00;};if _ed &0x08!=0{_fbg [_ed ]|=0xf000;};if _ed &0x10!=0{_fbg [_ed ]|=0xf0000;};if _ed &0x20!=0{_fbg [_ed ]|=0xf00000;};if _ed &0x40!=0{_fbg [_ed ]|=0xf000000;};if _ed &0x80!=0{_fbg [_ed ]|=0xf0000000;};};return _fbg ;};func (_daeb *byWidth )Less (i ,j int )bool {return _daeb .Values [i ].Width < _daeb .Values [j ].Width };func _aced (_gaac ,_gaege ,_bbfa *Bitmap ,_fecdb int )(*Bitmap ,error ){const _bcdda ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _gaege ==nil {return nil ,_a .Error (_bcdda ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _bbfa ==nil {return nil ,_a .Error (_bcdda ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _fecdb !=4&&_fecdb !=8{return nil ,_a .Error (_bcdda ,"\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 _cbafb error ;_gaac ,_cbafb =_gda (_gaac ,_gaege );if _cbafb !=nil {return nil ,_a .Wrap (_cbafb ,_bcdda ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_egfc :=_gaege .createTemplate ();_bbfa .setPadBits (0);for _gefd :=0;_gefd < _gade ;_gefd ++{_egfc ,_cbafb =_gda (_egfc ,_gaac );if _cbafb !=nil {return nil ,_a .Wrapf (_cbafb ,_bcdda ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gefd );};if _cbafb =_dbead (_gaac ,_bbfa ,_fecdb );_cbafb !=nil {return nil ,_a .Wrapf (_cbafb ,_bcdda ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gefd );};if _egfc .Equals (_gaac ){break ;};};return _gaac ,nil ;};func _fef (_edef ,_cgff ,_acgb *Bitmap )(*Bitmap ,error ){const _bcdd ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _cgff ==nil {return nil ,_a .Error (_bcdd ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _acgb ==nil {return nil ,_a .Error (_bcdd ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _gdda error ;switch {case _edef ==_cgff :if _gdda =_edef .RasterOperation (0,0,_cgff .Width ,_cgff .Height ,PixNotSrcAndDst ,_acgb ,0,0);_gdda !=nil {return nil ,_a .Wrap (_gdda ,_bcdd ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _edef ==_acgb :if _gdda =_edef .RasterOperation (0,0,_cgff .Width ,_cgff .Height ,PixNotSrcAndDst ,_cgff ,0,0);_gdda !=nil {return nil ,_a .Wrap (_gdda ,_bcdd ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_edef ,_gdda =_gda (_edef ,_cgff );if _gdda !=nil {return nil ,_a .Wrap (_gdda ,_bcdd ,"");};if _gdda =_edef .RasterOperation (0,0,_cgff .Width ,_cgff .Height ,PixNotSrcAndDst ,_acgb ,0,0);_gdda !=nil {return nil ,_a .Wrap (_gdda ,_bcdd ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _edef ,nil ;};func (_fddc *byWidth )Len ()int {return len (_fddc .Values )};func _fdbed (_fged *Bitmap ,_aedd int )(*Bitmap ,error ){const _efdb ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _fged ==nil {return nil ,_a .Error (_efdb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _aedd <=0{return nil ,_a .Error (_efdb ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _aedd ==1{_edbf ,_cgae :=_gda (nil ,_fged );if _cgae !=nil {return nil ,_a .Wrap (_cgae ,_efdb ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _edbf ,nil ;};_aebc ,_fegge :=_dcec (_fged ,_aedd ,_aedd );if _fegge !=nil {return nil ,_a .Wrap (_fegge ,_efdb ,"");};return _aebc ,nil ;};func (_acgd *Bitmap )setFourBytes (_efea int ,_bafg uint32 )error {if _efea +3> len (_acgd .Data )-1{return _a .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",_efea );};_acgd .Data [_efea ]=byte ((_bafg &0xff000000)>>24);_acgd .Data [_efea +1]=byte ((_bafg &0xff0000)>>16);_acgd .Data [_efea +2]=byte ((_bafg &0xff00)>>8);_acgd .Data [_efea +3]=byte (_bafg &0xff);return nil ;};type BoundaryCondition int ;func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_aead float64 ,_ggbb error ){const _ffef ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_a .Error (_ffef ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_a .Error (_ffef ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_a .Error (_ffef ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_gfd ,_faeag :=bm1 .Width ,bm1 .Height ;_bbgd ,_dfga :=bm2 .Width ,bm2 .Height ;_adbb :=_face (_gfd -_bbgd );if _adbb > maxDiffW {return 0,nil ;};_gfedf :=_face (_faeag -_dfga );if _gfedf > maxDiffH {return 0,nil ;};var _gbgd ,_aaed int ;if delX >=0{_gbgd =int (delX +0.5);}else {_gbgd =int (delX -0.5);};if delY >=0{_aaed =int (delY +0.5);}else {_aaed =int (delY -0.5);};_gdfa :=_bbga (_aaed ,0);_badc :=_gefb (_dfga +_aaed ,_faeag );_dcc :=bm1 .RowStride *_gdfa ;_bbgb :=bm2 .RowStride *(_gdfa -_aaed );_fegc :=_bbga (_gbgd ,0);_ageec :=_gefb (_bbgd +_gbgd ,_gfd );_cade :=bm2 .RowStride ;var _cec ,_fbfb int ;if _gbgd >=8{_cec =_gbgd >>3;_dcc +=_cec ;_fegc -=_cec <<3;_ageec -=_cec <<3;_gbgd &=7;}else if _gbgd <=-8{_fbfb =-((_gbgd +7)>>3);_bbgb +=_fbfb ;_cade -=_fbfb ;_gbgd +=_fbfb <<3;};if _fegc >=_ageec ||_gdfa >=_badc {return 0,nil ;};_dfba :=(_ageec +7)>>3;var (_cgeeg ,_cae ,_cbec byte ;_ggbf ,_eeb ,_befda int ;);switch {case _gbgd ==0:for _befda =_gdfa ;_befda < _badc ;_befda ,_dcc ,_bbgb =_befda +1,_dcc +bm1 .RowStride ,_bbgb +bm2 .RowStride {for _eeb =0;_eeb < _dfba ;_eeb ++{_cbec =bm1 .Data [_dcc +_eeb ]&bm2 .Data [_bbgb +_eeb ];_ggbf +=tab [_cbec ];};};case _gbgd > 0:if _cade < _dfba {for _befda =_gdfa ;_befda < _badc ;_befda ,_dcc ,_bbgb =_befda +1,_dcc +bm1 .RowStride ,_bbgb +bm2 .RowStride {_cgeeg ,_cae =bm1 .Data [_dcc ],bm2 .Data [_bbgb ]>>uint (_gbgd );_cbec =_cgeeg &_cae ;_ggbf +=tab [_cbec ];for _eeb =1;_eeb < _cade ;_eeb ++{_cgeeg ,_cae =bm1 .Data [_dcc +_eeb ],(bm2 .Data [_bbgb +_eeb ]>>uint (_gbgd ))|(bm2 .Data [_bbgb +_eeb -1]<<uint (8-_gbgd ));_cbec =_cgeeg &_cae ;_ggbf +=tab [_cbec ];};_cgeeg =bm1 .Data [_dcc +_eeb ];_cae =bm2 .Data [_bbgb +_eeb -1]<<uint (8-_gbgd );_cbec =_cgeeg &_cae ;_ggbf +=tab [_cbec ];};}else {for _befda =_gdfa ;_befda < _badc ;_befda ,_dcc ,_bbgb =_befda +1,_dcc +bm1 .RowStride ,_bbgb +bm2 .RowStride {_cgeeg ,_cae =bm1 .Data [_dcc ],bm2 .Data [_bbgb ]>>uint (_gbgd );_cbec =_cgeeg &_cae ;_ggbf +=tab [_cbec ];for _eeb =1;_eeb < _dfba ;_eeb ++{_cgeeg =bm1 .Data [_dcc +_eeb ];_cae =(bm2 .Data [_bbgb +_eeb ]>>uint (_gbgd ))|(bm2 .Data [_bbgb +_eeb -1]<<uint (8-_gbgd ));_cbec =_cgeeg &_cae ;_ggbf +=tab [_cbec ];};};};default:if _dfba < _cade {for _befda =_gdfa ;_befda < _badc ;_befda ,_dcc ,_bbgb =_befda +1,_dcc +bm1 .RowStride ,_bbgb +bm2 .RowStride {for _eeb =0;_eeb < _dfba ;_eeb ++{_cgeeg =bm1 .Data [_dcc +_eeb ];_cae =bm2 .Data [_bbgb +_eeb ]<<uint (-_gbgd );_cae |=bm2 .Data [_bbgb +_eeb +1]>>uint (8+_gbgd );_cbec =_cgeeg &_cae ;_ggbf +=tab [_cbec ];};};}else {for _befda =_gdfa ;_befda < _badc ;_befda ,_dcc ,_bbgb =_befda +1,_dcc +bm1 .RowStride ,_bbgb +bm2 .RowStride {for _eeb =0;_eeb < _dfba -1;_eeb ++{_cgeeg =bm1 .Data [_dcc +_eeb ];_cae =bm2 .Data [_bbgb +_eeb ]<<uint (-_gbgd );_cae |=bm2 .Data [_bbgb +_eeb +1]>>uint (8+_gbgd );_cbec =_cgeeg &_cae ;_ggbf +=tab [_cbec ];};_cgeeg =bm1 .Data [_dcc +_eeb ];_cae =bm2 .Data [_bbgb +_eeb ]<<uint (-_gbgd );_cbec =_cgeeg &_cae ;_ggbf +=tab [_cbec ];};};};_aead =float64 (_ggbf )*float64 (_ggbf )/(float64 (area1 )*float64 (area2 ));return _aead ,nil ;};func (_eabg *Bitmap )setEightBytes (_fadb int ,_cffd uint64 )error {_cbb :=_eabg .RowStride -(_fadb %_eabg .RowStride );if _eabg .RowStride !=_eabg .Width >>3{_cbb --;};if _cbb >=8{return _eabg .setEightFullBytes (_fadb ,_cffd );};return _eabg .setEightPartlyBytes (_fadb ,_cbb ,_cffd );};var _ _cb .Interface =&ClassedPoints {};func _fecb (_deaga ,_bgfa byte ,_gfgbb CombinationOperator )byte {switch _gfgbb {case CmbOpOr :return _bgfa |_deaga ;case CmbOpAnd :return _bgfa &_deaga ;case CmbOpXor :return _bgfa ^_deaga ;case CmbOpXNor :return ^(_bgfa ^_deaga );case CmbOpNot :return ^(_bgfa );default:return _bgfa ;};};func (_fdce *ClassedPoints )ySortFunction ()func (_fgfbb int ,_acdab int )bool {return func (_bdde ,_acad int )bool {return _fdce .YAtIndex (_bdde )< _fdce .YAtIndex (_acad )};};func _gdga ()(_aeg []byte ){_aeg =make ([]byte ,256);for _bfc :=0;_bfc < 256;_bfc ++{_ebc :=byte (_bfc );_aeg [_ebc ]=(_ebc &0x01)|((_ebc &0x04)>>1)|((_ebc &0x10)>>2)|((_ebc &0x40)>>3)|((_ebc &0x02)<<3)|((_ebc &0x08)<<2)|((_ebc &0x20)<<1)|(_ebc &0x80);};return _aeg ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);var _fgc [256]uint8 ;func (_fca CombinationOperator )String ()string {var _aecf string ;switch _fca {case CmbOpOr :_aecf ="\u004f\u0052";case CmbOpAnd :_aecf ="\u0041\u004e\u0044";case CmbOpXor :_aecf ="\u0058\u004f\u0052";case CmbOpXNor :_aecf ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_aecf ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_aecf ="\u004e\u004f\u0054";};return _aecf ;};var (_gffg =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_fgdcb =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func MakePixelCentroidTab8 ()[]int {return _cbeff ()};func (_gbfe *Bitmap )setEightPartlyBytes (_dbdb ,_gfcf int ,_dcde uint64 )(_eafe error ){var (_cbaf byte ;_eda int ;);const _cgee ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _abad :=1;_abad <=_gfcf ;_abad ++{_eda =64-_abad *8;_cbaf =byte (_dcde >>uint (_eda )&0xff);_db .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",_cbaf ,_dbdb ,_dbdb +_abad -1,_gfcf ,_eda );if _eafe =_gbfe .SetByte (_dbdb +_abad -1,_cbaf );_eafe !=nil {return _a .Wrap (_eafe ,_cgee ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_dcbef :=_gbfe .RowStride *8-_gbfe .Width ;if _dcbef ==0{return nil ;};_eda -=8;_cbaf =byte (_dcde >>uint (_eda )&0xff)<<uint (_dcbef );if _eafe =_gbfe .SetByte (_dbdb +_gfcf ,_cbaf );_eafe !=nil {return _a .Wrap (_eafe ,_cgee ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func _ebba (_bebd *Bitmap ,_agbe ...MorphProcess )(_bcdc *Bitmap ,_dgbc error ){const _afc ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _bebd ==nil {return nil ,_a .Error (_afc ,"\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 (_agbe )==0{return nil ,_a .Error (_afc ,"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 _dgbc =_aeccg (_agbe ...);_dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"");};var _aacea ,_dabf ,_acgbc int ;_bcdc =_bebd .Copy ();for _ ,_gebc :=range _agbe {switch _gebc .Operation {case MopDilation :_aacea ,_dabf =_gebc .getWidthHeight ();_bcdc ,_dgbc =DilateBrick (nil ,_bcdc ,_aacea ,_dabf );if _dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"");};case MopErosion :_aacea ,_dabf =_gebc .getWidthHeight ();_bcdc ,_dgbc =_fcba (nil ,_bcdc ,_aacea ,_dabf );if _dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"");};case MopOpening :_aacea ,_dabf =_gebc .getWidthHeight ();_bcdc ,_dgbc =_agbf (nil ,_bcdc ,_aacea ,_dabf );if _dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"");};case MopClosing :_aacea ,_dabf =_gebc .getWidthHeight ();_bcdc ,_dgbc =_egfeg (nil ,_bcdc ,_aacea ,_dabf );if _dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"");};case MopRankBinaryReduction :_bcdc ,_dgbc =_ecd (_bcdc ,_gebc .Arguments ...);if _dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"");};case MopReplicativeBinaryExpansion :_bcdc ,_dgbc =_fdbed (_bcdc ,_gebc .Arguments [0]);if _dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"");};case MopAddBorder :_acgbc =_gebc .Arguments [0];_bcdc ,_dgbc =_bcdc .AddBorder (_acgbc ,0);if _dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"");};default:return nil ,_a .Error (_afc ,"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 _acgbc > 0{_bcdc ,_dgbc =_bcdc .RemoveBorder (_acgbc );if _dgbc !=nil {return nil ,_a .Wrap (_dgbc ,_afc ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _bcdc ,nil ;};func _fcba (_gega ,_gdba *Bitmap ,_dadc ,_gaad int )(*Bitmap ,error ){const _acc ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _gdba ==nil {return nil ,_a .Error (_acc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dadc < 1||_gaad < 1{return nil ,_a .Error (_acc ,"\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 _dadc ==1&&_gaad ==1{_agdfg ,_feba :=_gda (_gega ,_gdba );if _feba !=nil {return nil ,_a .Wrap (_feba ,_acc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _agdfg ,nil ;};if _dadc ==1||_gaad ==1{_acca :=SelCreateBrick (_gaad ,_dadc ,_gaad /2,_dadc /2,SelHit );_dgde ,_eec :=_gcdf (_gega ,_gdba ,_acca );if _eec !=nil {return nil ,_a .Wrap (_eec ,_acc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _dgde ,nil ;};_cca :=SelCreateBrick (1,_dadc ,0,_dadc /2,SelHit );_bafcg :=SelCreateBrick (_gaad ,1,_gaad /2,0,SelHit );_cfcd ,_cabf :=_gcdf (nil ,_gdba ,_cca );if _cabf !=nil {return nil ,_a .Wrap (_cabf ,_acc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_gega ,_cabf =_gcdf (_gega ,_cfcd ,_bafcg );if _cabf !=nil {return nil ,_a .Wrap (_cabf ,_acc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _gega ,nil ;};func (_fdbgg *Bitmaps )GetBox (i int )(*_bac .Rectangle ,error ){const _gedef ="\u0047\u0065\u0074\u0042\u006f\u0078";if _fdbgg ==nil {return nil ,_a .Error (_gedef ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_fdbgg .Boxes )-1{return nil ,_a .Errorf (_gedef ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _fdbgg .Boxes [i ],nil ;};func _caa (_gfef ,_dff *Bitmap ,_bgg int ,_eeeg []byte ,_adgb int )(_ebg error ){const _bbed ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_eea ,_aeb ,_ecf ,_gdf ,_efc ,_bddf ,_gaed ,_feg int ;_bbedd ,_fcdf ,_eaa ,_be uint32 ;_ggg ,_cdc byte ;_edd uint16 ;);_egc :=make ([]byte ,4);_agb :=make ([]byte ,4);for _ecf =0;_ecf < _gfef .Height -1;_ecf ,_gdf =_ecf +2,_gdf +1{_eea =_ecf *_gfef .RowStride ;_aeb =_gdf *_dff .RowStride ;for _efc ,_bddf =0,0;_efc < _adgb ;_efc ,_bddf =_efc +4,_bddf +1{for _gaed =0;_gaed < 4;_gaed ++{_feg =_eea +_efc +_gaed ;if _feg <=len (_gfef .Data )-1&&_feg < _eea +_gfef .RowStride {_egc [_gaed ]=_gfef .Data [_feg ];}else {_egc [_gaed ]=0x00;};_feg =_eea +_gfef .RowStride +_efc +_gaed ;if _feg <=len (_gfef .Data )-1&&_feg < _eea +(2*_gfef .RowStride ){_agb [_gaed ]=_gfef .Data [_feg ];}else {_agb [_gaed ]=0x00;};};_bbedd =_gg .BigEndian .Uint32 (_egc );_fcdf =_gg .BigEndian .Uint32 (_agb );_eaa =_bbedd &_fcdf ;_eaa |=_eaa <<1;_be =_bbedd |_fcdf ;_be &=_be <<1;_fcdf =_eaa &_be ;_fcdf &=0xaaaaaaaa;_bbedd =_fcdf |(_fcdf <<7);_ggg =byte (_bbedd >>24);_cdc =byte ((_bbedd >>8)&0xff);_feg =_aeb +_bddf ;if _feg +1==len (_dff .Data )-1||_feg +1>=_aeb +_dff .RowStride {if _ebg =_dff .SetByte (_feg ,_eeeg [_ggg ]);_ebg !=nil {return _a .Wrapf (_ebg ,_bbed ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_feg );};}else {_edd =(uint16 (_eeeg [_ggg ])<<8)|uint16 (_eeeg [_cdc ]);if _ebg =_dff .setTwoBytes (_feg ,_edd );_ebg !=nil {return _a .Wrapf (_ebg ,_bbed ,"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",_feg );};_bddf ++;};};};return nil ;};func (_ece *Boxes )Add (box *_bac .Rectangle )error {if _ece ==nil {return _a .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");};*_ece =append (*_ece ,box );return nil ;};func (_abe *Boxes )makeSizeIndicator (_abea ,_addf int ,_ccbe LocationFilter ,_bdbg SizeComparison )*_b .NumSlice {_babf :=&_b .NumSlice {};var _ddbb ,_cdgc ,_afe int ;for _ ,_aabf :=range *_abe {_ddbb =0;_cdgc ,_afe =_aabf .Dx (),_aabf .Dy ();switch _ccbe {case LocSelectWidth :if (_bdbg ==SizeSelectIfLT &&_cdgc < _abea )||(_bdbg ==SizeSelectIfGT &&_cdgc > _abea )||(_bdbg ==SizeSelectIfLTE &&_cdgc <=_abea )||(_bdbg ==SizeSelectIfGTE &&_cdgc >=_abea ){_ddbb =1;};case LocSelectHeight :if (_bdbg ==SizeSelectIfLT &&_afe < _addf )||(_bdbg ==SizeSelectIfGT &&_afe > _addf )||(_bdbg ==SizeSelectIfLTE &&_afe <=_addf )||(_bdbg ==SizeSelectIfGTE &&_afe >=_addf ){_ddbb =1;};case LocSelectIfEither :if (_bdbg ==SizeSelectIfLT &&(_afe < _addf ||_cdgc < _abea ))||(_bdbg ==SizeSelectIfGT &&(_afe > _addf ||_cdgc > _abea ))||(_bdbg ==SizeSelectIfLTE &&(_afe <=_addf ||_cdgc <=_abea ))||(_bdbg ==SizeSelectIfGTE &&(_afe >=_addf ||_cdgc >=_abea )){_ddbb =1;};case LocSelectIfBoth :if (_bdbg ==SizeSelectIfLT &&(_afe < _addf &&_cdgc < _abea ))||(_bdbg ==SizeSelectIfGT &&(_afe > _addf &&_cdgc > _abea ))||(_bdbg ==SizeSelectIfLTE &&(_afe <=_addf &&_cdgc <=_abea ))||(_bdbg ==SizeSelectIfGTE &&(_afe >=_addf &&_cdgc >=_abea )){_ddbb =1;};};_babf .AddInt (_ddbb );};return _babf ;};func (_gag *Bitmap )SetByte (index int ,v byte )error {if index > len (_gag .Data )-1||index < 0{return _a .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 );};_gag .Data [index ]=v ;return nil ;};func (_adff *ClassedPoints )Swap (i ,j int ){_adff .IntSlice [i ],_adff .IntSlice [j ]=_adff .IntSlice [j ],_adff .IntSlice [i ];};func (_fae *Bitmap )SetPixel (x ,y int ,pixel byte )error {_fcf :=_fae .GetByteIndex (x ,y );if _fcf > len (_fae .Data )-1{return _a .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",_fcf );};_gafe :=_fae .GetBitOffset (x );_gce :=uint (7-_gafe );_daea :=_fae .Data [_fcf ];var _dbe byte ;if pixel ==1{_dbe =_daea |(pixel &0x01<<_gce );}else {_dbe =_daea &^(1<<_gce );};_fae .Data [_fcf ]=_dbe ;return nil ;};func _edefc (_cbeb ,_bcac *Bitmap ,_fdde ,_dcdc int )(_fgaf error ){const _ggea ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_ccce ,_agce ,_fcfe ,_bbbac int ;_bbfae ,_dgefb ,_gacd ,_cdfd ,_baeg ,_deee ,_cdbda byte ;);for _ccce =0;_ccce < _fdde ;_ccce ++{_fcfe =_ccce *_cbeb .RowStride ;_bbbac =_ccce *_bcac .RowStride ;for _agce =0;_agce < _dcdc ;_agce ++{_bbfae ,_fgaf =_cbeb .GetByte (_fcfe +_agce );if _fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_dgefb ,_fgaf =_bcac .GetByte (_bbbac +_agce );if _fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _ccce > 0{_gacd ,_fgaf =_cbeb .GetByte (_fcfe -_cbeb .RowStride +_agce );if _fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u0069\u0020\u003e \u0030");};_bbfae |=_gacd ;};if _agce > 0{_cdfd ,_fgaf =_cbeb .GetByte (_fcfe +_agce -1);if _fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u006a\u0020\u003e \u0030");};_bbfae |=_cdfd <<7;};_bbfae &=_dgefb ;if _bbfae ==0||(^_bbfae )==0{if _fgaf =_cbeb .SetByte (_fcfe +_agce ,_bbfae );_fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_cdbda =_bbfae ;_bbfae =(_bbfae |(_bbfae >>1)|(_bbfae <<1))&_dgefb ;if (_bbfae ^_cdbda )==0{if _fgaf =_cbeb .SetByte (_fcfe +_agce ,_bbfae );_fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _ccce =_fdde -1;_ccce >=0;_ccce --{_fcfe =_ccce *_cbeb .RowStride ;_bbbac =_ccce *_bcac .RowStride ;for _agce =_dcdc -1;_agce >=0;_agce --{if _bbfae ,_fgaf =_cbeb .GetByte (_fcfe +_agce );_fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _dgefb ,_fgaf =_bcac .GetByte (_bbbac +_agce );_fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _ccce < _fdde -1{if _baeg ,_fgaf =_cbeb .GetByte (_fcfe +_cbeb .RowStride +_agce );_fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_bbfae |=_baeg ;};if _agce < _dcdc -1{if _deee ,_fgaf =_cbeb .GetByte (_fcfe +_agce +1);_fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_bbfae |=_deee >>7;};_bbfae &=_dgefb ;if _bbfae ==0||(^_bbfae )==0{if _fgaf =_cbeb .SetByte (_fcfe +_agce ,_bbfae );_fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\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 {_cdbda =_bbfae ;_bbfae =(_bbfae |(_bbfae >>1)|(_bbfae <<1))&_dgefb ;if (_bbfae ^_cdbda )==0{if _fgaf =_cbeb .SetByte (_fcfe +_agce ,_bbfae );_fgaf !=nil {return _a .Wrap (_fgaf ,_ggea ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");};break ;};};};};return nil ;};func TstDSymbol (t *_e .T ,scale ...int )*Bitmap {_cegfb ,_bbege :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_d .NoError (t ,_bbege );return TstGetScaledSymbol (t ,_cegfb ,scale ...);};func (_gcc *Bitmap )GetBitOffset (x int )int {return x &0x07};func _afg (_fbgd *Bitmap ,_ea int ,_fec []byte )(_aff *Bitmap ,_ade error ){const _gfa ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _fbgd ==nil {return nil ,_a .Error (_gfa ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _ea < 1||_ea > 4{return nil ,_a .Error (_gfa ,"\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 _fbgd .Height <=1{return nil ,_a .Errorf (_gfa ,"\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",_fbgd .Height );};_aff =New (_fbgd .Width /2,_fbgd .Height /2);if _fec ==nil {_fec =_gdga ();};_dd :=_gefb (_fbgd .RowStride ,2*_aff .RowStride );switch _ea {case 1:_ade =_ggc (_fbgd ,_aff ,_ea ,_fec ,_dd );case 2:_ade =_bde (_fbgd ,_aff ,_ea ,_fec ,_dd );case 3:_ade =_caa (_fbgd ,_aff ,_ea ,_fec ,_dd );case 4:_ade =_bee (_fbgd ,_aff ,_ea ,_fec ,_dd );};if _ade !=nil {return nil ,_ade ;};return _aff ,nil ;};func TstOSymbol (t *_e .T ,scale ...int )*Bitmap {_aaage ,_bbac :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_d .NoError (t ,_bbac );return TstGetScaledSymbol (t ,_aaage ,scale ...);};func TstASymbol (t *_e .T )*Bitmap {t .Helper ();_egbf :=New (6,6);_d .NoError (t ,_egbf .SetPixel (1,0,1));_d .NoError (t ,_egbf .SetPixel (2,0,1));_d .NoError (t ,_egbf .SetPixel (3,0,1));_d .NoError (t ,_egbf .SetPixel (4,0,1));_d .NoError (t ,_egbf .SetPixel (5,1,1));_d .NoError (t ,_egbf .SetPixel (1,2,1));_d .NoError (t ,_egbf .SetPixel (2,2,1));_d .NoError (t ,_egbf .SetPixel (3,2,1));_d .NoError (t ,_egbf .SetPixel (4,2,1));_d .NoError (t ,_egbf .SetPixel (5,2,1));_d .NoError (t ,_egbf .SetPixel (0,3,1));_d .NoError (t ,_egbf .SetPixel (5,3,1));_d .NoError (t ,_egbf .SetPixel (0,4,1));_d .NoError (t ,_egbf .SetPixel (5,4,1));_d .NoError (t ,_egbf .SetPixel (1,5,1));_d .NoError (t ,_egbf .SetPixel (2,5,1));_d .NoError (t ,_egbf .SetPixel (3,5,1));_d .NoError (t ,_egbf .SetPixel (4,5,1));_d .NoError (t ,_egbf .SetPixel (5,5,1));return _egbf ;};const _gade =5000;func _bbge (_dbfeg *_b .Stack ,_gfeeb ,_ffcb ,_ccad ,_fbdf ,_aeee int ,_aegc *_bac .Rectangle )(_fcggd error ){const _acga ="\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 _dbfeg ==nil {return _a .Error (_acga ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _aegc ==nil {return _a .Error (_acga ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");};_aegc .Min .X =_b .Min (_aegc .Min .X ,_gfeeb );_aegc .Max .X =_b .Max (_aegc .Max .X ,_ffcb );_aegc .Min .Y =_b .Min (_aegc .Min .Y ,_ccad );_aegc .Max .Y =_b .Max (_aegc .Max .Y ,_ccad );if !(_ccad +_fbdf >=0&&_ccad +_fbdf <=_aeee ){return nil ;};if _dbfeg .Aux ==nil {return _a .Error (_acga ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _gdef *fillSegment ;_bbbg ,_ecef :=_dbfeg .Aux .Pop ();if _ecef {if _gdef ,_ecef =_bbbg .(*fillSegment );!_ecef {return _a .Error (_acga ,"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 {_gdef =&fillSegment {};};_gdef ._fggd =_gfeeb ;_gdef ._gccf =_ffcb ;_gdef ._accf =_ccad ;_gdef ._ffcc =_fbdf ;_dbfeg .Push (_gdef );return nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _dabad (d ,s ,hSize ,vSize )};func _deafg (_bgbf ,_ccgbb *Bitmap ,_cadg CombinationOperator )*Bitmap {_babc :=New (_bgbf .Width ,_bgbf .Height );for _eged :=0;_eged < len (_babc .Data );_eged ++{_babc .Data [_eged ]=_fecb (_bgbf .Data [_eged ],_ccgbb .Data [_eged ],_cadg );};return _babc ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _gegb (d ,s ,sel )};func (_def *Bitmap )connComponentsBitmapsBB (_gcd *Bitmaps ,_cddg int )(_fcgde *Boxes ,_bddd error ){const _deeg ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _cddg !=4&&_cddg !=8{return nil ,_a .Error (_deeg ,"\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 _gcd ==nil {return nil ,_a .Error (_deeg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_gcd .Values )> 0{return nil ,_a .Error (_deeg ,"\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 _def .Zero (){return &Boxes {},nil ;};var (_egga ,_eefe ,_efg ,_dcgf *Bitmap ;);_def .setPadBits (0);if _egga ,_bddd =_gda (nil ,_def );_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"\u0062\u006d\u0031");};if _eefe ,_bddd =_gda (nil ,_def );_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"\u0062\u006d\u0032");};_ecfa :=&_b .Stack {};_ecfa .Aux =&_b .Stack {};_fcgde =&Boxes {};var (_cgeea ,_dded int ;_becf _bac .Point ;_dbfc bool ;_fcbc *_bac .Rectangle ;);for {if _becf ,_dbfc ,_bddd =_egga .nextOnPixel (_cgeea ,_dded );_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"");};if !_dbfc {break ;};if _fcbc ,_bddd =_dagcg (_egga ,_ecfa ,_becf .X ,_becf .Y ,_cddg );_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"");};if _bddd =_fcgde .Add (_fcbc );_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"");};if _efg ,_bddd =_egga .clipRectangle (_fcbc ,nil );_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"\u0062\u006d\u0033");};if _dcgf ,_bddd =_eefe .clipRectangle (_fcbc ,nil );_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"\u0062\u006d\u0034");};if _ ,_bddd =_bbedde (_efg ,_efg ,_dcgf );_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _bddd =_eefe .RasterOperation (_fcbc .Min .X ,_fcbc .Min .Y ,_fcbc .Dx (),_fcbc .Dy (),PixSrcXorDst ,_efg ,0,0);_bddd !=nil {return nil ,_a .Wrap (_bddd ,_deeg ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_gcd .AddBitmap (_efg );_cgeea =_becf .X ;_dded =_becf .Y ;};_gcd .Boxes =*_fcgde ;return _fcgde ,nil ;};func (_dcee *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _dcee .addBorderGeneral (left ,right ,top ,bot ,val );};func _fcca (_ebgc *Bitmap ,_fggf ,_bcdddd int ,_aacb ,_cdab int ,_cgdd RasterOperator ,_aegd *Bitmap ,_fade ,_ebag int )error {var _fagc ,_acdc ,_gdacf ,_gbdbd int ;if _fggf < 0{_fade -=_fggf ;_aacb +=_fggf ;_fggf =0;};if _fade < 0{_fggf -=_fade ;_aacb +=_fade ;_fade =0;};_fagc =_fggf +_aacb -_ebgc .Width ;if _fagc > 0{_aacb -=_fagc ;};_acdc =_fade +_aacb -_aegd .Width ;if _acdc > 0{_aacb -=_acdc ;};if _bcdddd < 0{_ebag -=_bcdddd ;_cdab +=_bcdddd ;_bcdddd =0;};if _ebag < 0{_bcdddd -=_ebag ;_cdab +=_ebag ;_ebag =0;};_gdacf =_bcdddd +_cdab -_ebgc .Height ;if _gdacf > 0{_cdab -=_gdacf ;};_gbdbd =_ebag +_cdab -_aegd .Height ;if _gbdbd > 0{_cdab -=_gbdbd ;};if _aacb <=0||_cdab <=0{return nil ;};var _ffdf error ;switch {case _fggf &7==0&&_fade &7==0:_ffdf =_caad (_ebgc ,_fggf ,_bcdddd ,_aacb ,_cdab ,_cgdd ,_aegd ,_fade ,_ebag );case _fggf &7==_fade &7:_ffdf =_ebbc (_ebgc ,_fggf ,_bcdddd ,_aacb ,_cdab ,_cgdd ,_aegd ,_fade ,_ebag );default:_ffdf =_gec (_ebgc ,_fggf ,_bcdddd ,_aacb ,_cdab ,_cgdd ,_aegd ,_fade ,_ebag );};if _ffdf !=nil {return _a .Wrap (_ffdf ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func _dffa (_abg ,_bgab *Bitmap ,_afbg ,_becg ,_cdae uint ,_fgb ,_gedf int ,_fcbg bool ,_agec ,_eae int )error {for _eegd :=_fgb ;_eegd < _gedf ;_eegd ++{if _agec +1< len (_abg .Data ){_ddec :=_eegd +1==_gedf ;_acda ,_fafg :=_abg .GetByte (_agec );if _fafg !=nil {return _fafg ;};_agec ++;_acda <<=_afbg ;_cgge ,_fafg :=_abg .GetByte (_agec );if _fafg !=nil {return _fafg ;};_cgge >>=_becg ;_cfgc :=_acda |_cgge ;if _ddec &&!_fcbg {_cfgc =_edac (_cdae ,_cfgc );};_fafg =_bgab .SetByte (_eae ,_cfgc );if _fafg !=nil {return _fafg ;};_eae ++;if _ddec &&_fcbg {_bffc ,_fgce :=_abg .GetByte (_agec );if _fgce !=nil {return _fgce ;};_bffc <<=_afbg ;_cfgc =_edac (_cdae ,_bffc );if _fgce =_bgab .SetByte (_eae ,_cfgc );_fgce !=nil {return _fgce ;};};continue ;};_beeeg ,_gbdf :=_abg .GetByte (_agec );if _gbdf !=nil {_db .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",_agec ,_gbdf );return _gbdf ;};_beeeg <<=_afbg ;_agec ++;_gbdf =_bgab .SetByte (_eae ,_beeeg );if _gbdf !=nil {return _gbdf ;};_eae ++;};return nil ;};func _bee (_geb ,_ebd *Bitmap ,_ffb int ,_bgge []byte ,_aee int )(_fege error ){const _bgf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_cde ,_gfgb ,_gcgde ,_gdg ,_cf ,_cdea ,_bff ,_fbgb int ;_cba ,_fdegb uint32 ;_bgd ,_bfg byte ;_bafc uint16 ;);_aec :=make ([]byte ,4);_aecc :=make ([]byte ,4);for _gcgde =0;_gcgde < _geb .Height -1;_gcgde ,_gdg =_gcgde +2,_gdg +1{_cde =_gcgde *_geb .RowStride ;_gfgb =_gdg *_ebd .RowStride ;for _cf ,_cdea =0,0;_cf < _aee ;_cf ,_cdea =_cf +4,_cdea +1{for _bff =0;_bff < 4;_bff ++{_fbgb =_cde +_cf +_bff ;if _fbgb <=len (_geb .Data )-1&&_fbgb < _cde +_geb .RowStride {_aec [_bff ]=_geb .Data [_fbgb ];}else {_aec [_bff ]=0x00;};_fbgb =_cde +_geb .RowStride +_cf +_bff ;if _fbgb <=len (_geb .Data )-1&&_fbgb < _cde +(2*_geb .RowStride ){_aecc [_bff ]=_geb .Data [_fbgb ];}else {_aecc [_bff ]=0x00;};};_cba =_gg .BigEndian .Uint32 (_aec );_fdegb =_gg .BigEndian .Uint32 (_aecc );_fdegb &=_cba ;_fdegb &=_fdegb <<1;_fdegb &=0xaaaaaaaa;_cba =_fdegb |(_fdegb <<7);_bgd =byte (_cba >>24);_bfg =byte ((_cba >>8)&0xff);_fbgb =_gfgb +_cdea ;if _fbgb +1==len (_ebd .Data )-1||_fbgb +1>=_gfgb +_ebd .RowStride {_ebd .Data [_fbgb ]=_bgge [_bgd ];if _fege =_ebd .SetByte (_fbgb ,_bgge [_bgd ]);_fege !=nil {return _a .Wrapf (_fege ,_bgf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fbgb );};}else {_bafc =(uint16 (_bgge [_bgd ])<<8)|uint16 (_bgge [_bfg ]);if _fege =_ebd .setTwoBytes (_fbgb ,_bafc );_fege !=nil {return _a .Wrapf (_fege ,_bgf ,"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",_fbgb );};_cdea ++;};};};return nil ;};type ClassedPoints struct{*Points ;_b .IntSlice ;_fage func (_gace ,_eafg int )bool ;};func (_aad *Bitmap )equivalent (_fbbf *Bitmap )bool {if _aad ==_fbbf {return true ;};if !_aad .SizesEqual (_fbbf ){return false ;};_bbca :=_deafg (_aad ,_fbbf ,CmbOpXor );_fdg :=_aad .countPixels ();_dcbd :=int (0.25*float32 (_fdg ));if _bbca .thresholdPixelSum (_dcbd ){return false ;};var (_ddgb [9][9]int ;_bcb [18][9]int ;_cegf [9][18]int ;_fcde int ;_abcd int ;);_dgd :=9;_bffa :=_aad .Height /_dgd ;_bfd :=_aad .Width /_dgd ;_caaf ,_eeaf :=_bffa /2,_bfd /2;if _bffa < _bfd {_caaf =_bfd /2;_eeaf =_bffa /2;};_agf :=float64 (_caaf )*float64 (_eeaf )*_cbf .Pi ;_acd :=int (float64 (_bffa *_bfd /2)*0.9);_agdg :=int (float64 (_bfd *_bffa /2)*0.9);for _gbbb :=0;_gbbb < _dgd ;_gbbb ++{_ebe :=_bfd *_gbbb +_fcde ;var _dde int ;if _gbbb ==_dgd -1{_fcde =0;_dde =_aad .Width ;}else {_dde =_ebe +_bfd ;if ((_aad .Width -_fcde )%_dgd )> 0{_fcde ++;_dde ++;};};for _cfd :=0;_cfd < _dgd ;_cfd ++{_daae :=_bffa *_cfd +_abcd ;var _dgcg int ;if _cfd ==_dgd -1{_abcd =0;_dgcg =_aad .Height ;}else {_dgcg =_daae +_bffa ;if (_aad .Height -_abcd )%_dgd > 0{_abcd ++;_dgcg ++;};};var _gcec ,_aace ,_edgg ,_ffbf int ;_gdc :=(_ebe +_dde )/2;_dfgd :=(_daae +_dgcg )/2;for _ege :=_ebe ;_ege < _dde ;_ege ++{for _ggef :=_daae ;_ggef < _dgcg ;_ggef ++{if _bbca .GetPixel (_ege ,_ggef ){if _ege < _gdc {_gcec ++;}else {_aace ++;};if _ggef < _dfgd {_ffbf ++;}else {_edgg ++;};};};};_ddgb [_gbbb ][_cfd ]=_gcec +_aace ;_bcb [_gbbb *2][_cfd ]=_gcec ;_bcb [_gbbb *2+1][_cfd ]=_aace ;_cegf [_gbbb ][_cfd *2]=_ffbf ;_cegf [_gbbb ][_cfd *2+1]=_edgg ;};};for _dafc :=0;_dafc < _dgd *2-1;_dafc ++{for _ggcc :=0;_ggcc < (_dgd -1);_ggcc ++{var _bfa int ;for _bgdc :=0;_bgdc < 2;_bgdc ++{for _bbba :=0;_bbba < 2;_bbba ++{_bfa +=_bcb [_dafc +_bgdc ][_ggcc +_bbba ];};};if _bfa > _agdg {return false ;};};};for _ecfb :=0;_ecfb < (_dgd -1);_ecfb ++{for _eabb :=0;_eabb < ((_dgd *2)-1);_eabb ++{var _fcgd int ;for _bbee :=0;_bbee < 2;_bbee ++{for _ebee :=0;_ebee < 2;_ebee ++{_fcgd +=_cegf [_ecfb +_bbee ][_eabb +_ebee ];};};if _fcgd > _acd {return false ;};};};for _aege :=0;_aege < (_dgd -2);_aege ++{for _aag :=0;_aag < (_dgd -2);_aag ++{var _agga ,_beab int ;for _babe :=0;_babe < 3;_babe ++{for _ddff :=0;_ddff < 3;_ddff ++{if _babe ==_ddff {_agga +=_ddgb [_aege +_babe ][_aag +_ddff ];};if (2-_babe )==_ddff {_beab +=_ddgb [_aege +_babe ][_aag +_ddff ];};};};if _agga > _agdg ||_beab > _agdg {return false ;};};};for _agfb :=0;_agfb < (_dgd -1);_agfb ++{for _cdd :=0;_cdd < (_dgd -1);_cdd ++{var _agdf int ;for _afdb :=0;_afdb < 2;_afdb ++{for _eddd :=0;_eddd < 2;_eddd ++{_agdf +=_ddgb [_agfb +_afdb ][_cdd +_eddd ];};};if float64 (_agdf )> _agf {return false ;};};};return true ;};func (_eafcg *Bitmaps )HeightSorter ()func (_gdcf ,_bfcbd int )bool {return func (_bebfc ,_eagb int )bool {_aaaba :=_eafcg .Values [_bebfc ].Height < _eafcg .Values [_eagb ].Height ;_db .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_eafcg .Values [_bebfc ].Height ,_eafcg .Values [_eagb ].Height ,_aaaba );return _aaaba ;};};type LocationFilter int ;func (_aagg *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _cgaea ="\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 >=_aagg .IntSlice .Size (){return 0,_a .Errorf (_cgaea ,"\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 (_aagg .YAtIndex (i )),nil ;};func _gefb (_feec ,_acfa int )int {if _feec < _acfa {return _feec ;};return _acfa ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func TstESymbol (t *_e .T ,scale ...int )*Bitmap {_gbbf ,_fccb :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_d .NoError (t ,_fccb );return TstGetScaledSymbol (t ,_gbbf ,scale ...);};func Rect (x ,y ,w ,h int )(*_bac .Rectangle ,error ){const _ccgb ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_a .Errorf (_ccgb ,"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 ,_a .Error (_ccgb ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_aggb :=_bac .Rect (x ,y ,x +w ,y +h );return &_aggb ,nil ;};func TstRSymbol (t *_e .T ,scale ...int )*Bitmap {_dbcc ,_ggcec :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_d .NoError (t ,_ggcec );return TstGetScaledSymbol (t ,_dbcc ,scale ...);};func _ffag (_dgb ,_gde int )*Bitmap {return &Bitmap {Width :_dgb ,Height :_gde ,RowStride :(_dgb +7)>>3};};var (_gcabe *Bitmap ;_eabf *Bitmap ;);func TstTSymbol (t *_e .T ,scale ...int )*Bitmap {_ccac ,_bgee :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_d .NoError (t ,_bgee );return TstGetScaledSymbol (t ,_ccac ,scale ...);};type RasterOperator int ;func (_fcgge *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _bged ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _fcgge ==nil {return nil ,_a .Error (_bged ,"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 (_fcgge .Values )-1{return nil ,_a .Errorf (_bged ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _fcgge .Values [i ],nil ;};func (_eaegd Points )GetIntY (i int )(int ,error ){if i >=len (_eaegd ){return 0,_a .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 (_eaegd [i ].Y ),nil ;};func (_aagf Points )GetGeometry (i int )(_gfecb ,_cfbde float32 ,_cggd error ){if i > len (_aagf )-1{return 0,0,_a .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 );};_feggef :=_aagf [i ];return _feggef .X ,_feggef .Y ,nil ;};func (_fegda *Bitmaps )CountPixels ()*_b .NumSlice {_gbcga :=&_b .NumSlice {};for _ ,_ccee :=range _fegda .Values {_gbcga .AddInt (_ccee .CountPixels ());};return _gbcga ;};func _abcdf ()[]int {_acfg :=make ([]int ,256);for _ffc :=0;_ffc <=0xff;_ffc ++{_ggbbe :=byte (_ffc );_acfg [_ggbbe ]=int (_ggbbe &0x1)+(int (_ggbbe >>1)&0x1)+(int (_ggbbe >>2)&0x1)+(int (_ggbbe >>3)&0x1)+(int (_ggbbe >>4)&0x1)+(int (_ggbbe >>5)&0x1)+(int (_ggbbe >>6)&0x1)+(int (_ggbbe >>7)&0x1);};return _acfg ;};func (_ddg *Bitmap )Copy ()*Bitmap {_ecg :=make ([]byte ,len (_ddg .Data ));copy (_ecg ,_ddg .Data );return &Bitmap {Width :_ddg .Width ,Height :_ddg .Height ,RowStride :_ddg .RowStride ,Data :_ecg ,Color :_ddg .Color ,Text :_ddg .Text ,BitmapNumber :_ddg .BitmapNumber ,Special :_ddg .Special };};func (_ebcb Points )GetIntX (i int )(int ,error ){if i >=len (_ebcb ){return 0,_a .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 (_ebcb [i ].X ),nil ;};func TstISymbol (t *_e .T ,scale ...int )*Bitmap {_dcdg ,_eafed :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_d .NoError (t ,_eafed );return TstGetScaledSymbol (t ,_dcdg ,scale ...);};func (_fecd *Boxes )Get (i int )(*_bac .Rectangle ,error ){const _ffeg ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _fecd ==nil {return nil ,_a .Error (_ffeg ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_fecd )-1{return nil ,_a .Errorf (_ffeg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_fecd )[i ],nil ;};func (_dbed *Bitmap )setAll ()error {_beea :=_dccd (_dbed ,0,0,_dbed .Width ,_dbed .Height ,PixSet ,nil ,0,0);if _beea !=nil {return _a .Wrap (_beea ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func (_fbeg *BitmapsArray )GetBox (i int )(*_bac .Rectangle ,error ){const _dcdea ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _fbeg ==nil {return nil ,_a .Error (_dcdea ,"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 (_fbeg .Boxes )-1{return nil ,_a .Errorf (_dcdea ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _fbeg .Boxes [i ],nil ;};func (_bgfg *Bitmap )clipRectangle (_fge ,_aed *_bac .Rectangle )(_deaf *Bitmap ,_fcb error ){const _efa ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _fge ==nil {return nil ,_a .Error (_efa ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_fbb ,_cgbe :=_bgfg .Width ,_bgfg .Height ;_bec ,_fcb :=ClipBoxToRectangle (_fge ,_fbb ,_cgbe );if _fcb !=nil {_db .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",_fcb );return nil ,nil ;};_cged ,_gddba :=_bec .Min .X ,_bec .Min .Y ;_fdcf ,_gfaf :=_bec .Max .X -_bec .Min .X ,_bec .Max .Y -_bec .Min .Y ;_deaf =New (_fdcf ,_gfaf );_deaf .Text =_bgfg .Text ;if _fcb =_deaf .RasterOperation (0,0,_fdcf ,_gfaf ,PixSrc ,_bgfg ,_cged ,_gddba );_fcb !=nil {return nil ,_a .Wrap (_fcb ,_efa ,"");};if _aed !=nil {*_aed =*_bec ;};return _deaf ,nil ;};func (_fbcb *Bitmap )SetDefaultPixel (){for _efb :=range _fbcb .Data {_fbcb .Data [_efb ]=byte (0xff);};};func TstWSymbol (t *_e .T ,scale ...int )*Bitmap {_caac ,_cdgcb :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_d .NoError (t ,_cdgcb );return TstGetScaledSymbol (t ,_caac ,scale ...);};func (_efe *Bitmap )Equivalent (s *Bitmap )bool {return _efe .equivalent (s )};func (_cbac *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _cbac .Copy (),nil ;};_bbgg ,_daa :=_cbac .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _daa !=nil {return nil ,_a .Wrap (_daa ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _bbgg ,nil ;};func _ccgc (_badce ,_eecaa ,_adee byte )byte {return (_badce &^(_adee ))|(_eecaa &_adee )};func _egfeg (_gebea ,_bacg *Bitmap ,_cbdea ,_geed int )(*Bitmap ,error ){const _cab ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _bacg ==nil {return nil ,_a .Error (_cab ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _cbdea < 1||_geed < 1{return nil ,_a .Error (_cab ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _cbdea ==1&&_geed ==1{return _gda (_gebea ,_bacg );};if MorphBC ==SymmetricMorphBC {_bca ,_cacc :=_fdab (_gebea ,_bacg ,_cbdea ,_geed );if _cacc !=nil {return nil ,_a .Wrap (_cacc ,_cab ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _bca ,nil ;};_efd :=_bbga (_cbdea /2,_geed /2);_bfed :=8*((_efd +7)/8);_bgdd ,_dccbf :=_bacg .AddBorder (_bfed ,0);if _dccbf !=nil {return nil ,_a .Wrapf (_dccbf ,_cab ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_bfed );};var _eaeg ,_beaa *Bitmap ;if _cbdea ==1||_geed ==1{_ddcc :=SelCreateBrick (_geed ,_cbdea ,_geed /2,_cbdea /2,SelHit );_eaeg ,_dccbf =_cfbe (nil ,_bgdd ,_ddcc );if _dccbf !=nil {return nil ,_a .Wrap (_dccbf ,_cab ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_ccba :=SelCreateBrick (1,_cbdea ,0,_cbdea /2,SelHit );_feef ,_bgbce :=_gegb (nil ,_bgdd ,_ccba );if _bgbce !=nil {return nil ,_a .Wrap (_bgbce ,_cab ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_bcce :=SelCreateBrick (_geed ,1,_geed /2,0,SelHit );_eaeg ,_bgbce =_gegb (nil ,_feef ,_bcce );if _bgbce !=nil {return nil ,_a .Wrap (_bgbce ,_cab ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_bgbce =_gcdf (_feef ,_eaeg ,_ccba );_bgbce !=nil {return nil ,_a .Wrap (_bgbce ,_cab ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_bgbce =_gcdf (_eaeg ,_feef ,_bcce );_bgbce !=nil {return nil ,_a .Wrap (_bgbce ,_cab ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");};};if _beaa ,_dccbf =_eaeg .RemoveBorder (_bfed );_dccbf !=nil {return nil ,_a .Wrap (_dccbf ,_cab ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _gebea ==nil {return _beaa ,nil ;};if _ ,_dccbf =_gda (_gebea ,_beaa );_dccbf !=nil {return nil ,_dccbf ;};return _gebea ,nil ;};func _face (_gddc int )int {if _gddc < 0{return -_gddc ;};return _gddc ;};func TstImageBitmapData ()[]byte {return _eabf .Data };func (_aef *Bitmap )setTwoBytes (_cgg int ,_gbdb uint16 )error {if _cgg +1> len (_aef .Data )-1{return _a .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",_cgg );};_aef .Data [_cgg ]=byte ((_gbdb &0xff00)>>8);_aef .Data [_cgg +1]=byte (_gbdb &0xff);return nil ;};func _bbedde (_ccg ,_afb ,_gadg *Bitmap )(*Bitmap ,error ){const _fdgd ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _afb ==nil {return nil ,_a .Error (_fdgd ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _gadg ==nil {return nil ,_a .Error (_fdgd ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ccg ==_gadg {return nil ,_a .Error (_fdgd ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_afb .SizesEqual (_gadg ){_db .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",_fdgd );};var _agfd error ;if _ccg ,_agfd =_gda (_ccg ,_afb );_agfd !=nil {return nil ,_a .Wrap (_agfd ,_fdgd ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _agfd =_ccg .RasterOperation (0,0,_ccg .Width ,_ccg .Height ,PixSrcXorDst ,_gadg ,0,0);_agfd !=nil {return nil ,_a .Wrap (_agfd ,_fdgd ,"");};return _ccg ,nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _eadb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_deec ,_cfb :=p1 .Width ,p1 .Height ;_gcda ,_affc :=p3 .Width ,p3 .Height ;if _b .Abs (_deec -_gcda )> maxDiffW {return false ,nil ;};if _b .Abs (_cfb -_affc )> maxDiffH {return false ,nil ;};_abbf :=int (delX +_b .Sign (delX )*0.5);_aabb :=int (delY +_b .Sign (delY )*0.5);var _bcf error ;_ceaa :=p1 .CreateTemplate ();if _bcf =_ceaa .RasterOperation (0,0,_deec ,_cfb ,PixSrc ,p1 ,0,0);_bcf !=nil {return false ,_a .Wrap (_bcf ,_eadb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bcf =_ceaa .RasterOperation (_abbf ,_aabb ,_deec ,_cfb ,PixNotSrcAndDst ,p4 ,0,0);_bcf !=nil {return false ,_a .Wrap (_bcf ,_eadb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _ceaa .Zero (){return false ,nil ;};if _bcf =_ceaa .RasterOperation (_abbf ,_aabb ,_gcda ,_affc ,PixSrc ,p3 ,0,0);_bcf !=nil {return false ,_a .Wrap (_bcf ,_eadb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bcf =_ceaa .RasterOperation (0,0,_gcda ,_affc ,PixNotSrcAndDst ,p2 ,0,0);_bcf !=nil {return false ,_a .Wrap (_bcf ,_eadb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _ceaa .Zero (),nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_bcca float64 ,_befg error ){const _fbe ="\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 _bcca ,_a .Error (_fbe ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _bcca ,_a .Error (_fbe ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if area1 ==0||area2 ==0{return _bcca ,_a .Error (_fbe ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_gbc ,_egae :=bm1 .Width ,bm1 .Height ;_ggcfc ,_dcfe :=bm2 .Width ,bm2 .Height ;if _face (_gbc -_ggcfc )> maxDiffW {return 0,nil ;};if _face (_egae -_dcfe )> maxDiffH {return 0,nil ;};var _geag ,_gdfd int ;if delX >=0{_geag =int (delX +0.5);}else {_geag =int (delX -0.5);};if delY >=0{_gdfd =int (delY +0.5);}else {_gdfd =int (delY -0.5);};_cbde :=bm1 .createTemplate ();if _befg =_cbde .RasterOperation (_geag ,_gdfd ,_ggcfc ,_dcfe ,PixSrc ,bm2 ,0,0);_befg !=nil {return _bcca ,_a .Wrap (_befg ,_fbe ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _befg =_cbde .RasterOperation (0,0,_gbc ,_egae ,PixSrcAndDst ,bm1 ,0,0);_befg !=nil {return _bcca ,_a .Wrap (_befg ,_fbe ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_bbeg :=_cbde .countPixels ();_bcca =float64 (_bbeg )*float64 (_bbeg )/(float64 (area1 )*float64 (area2 ));return _bcca ,nil ;};func TstWordBitmapWithSpaces (t *_e .T ,scale ...int )*Bitmap {_bbdfg :=1;if len (scale )> 0{_bbdfg =scale [0];};_cabc :=3;_cbcg :=9+7+15+2*_cabc +2*_cabc ;_dbac :=5+_cabc +5+2*_cabc ;_begd :=New (_cbcg *_bbdfg ,_dbac *_bbdfg );_gdbc :=&Bitmaps {};var _decg *int ;_cabc *=_bbdfg ;_dcgc :=_cabc ;_decg =&_dcgc ;_cfbdg :=_cabc ;_cdcd :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,_cabc );_cdcd =TstISymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,_cabc );_cdcd =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,0);*_decg =_cabc ;_cfbdg =5*_bbdfg +_cabc ;_cdcd =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,_cabc );_cdcd =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,1*_bbdfg );_cdcd =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gdbc ,_cdcd ,_decg ,_cfbdg ,0);TstWriteSymbols (t ,_gdbc ,_begd );return _begd ;};func _bde (_eedb ,_ffg *Bitmap ,_ffa int ,_gbe []byte ,_bdb int )(_cda error ){const _fad ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_aggg ,_aca ,_bfe ,_agde ,_daf ,_bfb ,_bgb ,_gcagf int ;_eede ,_fcdd ,_bdd ,_dea uint32 ;_eee ,_ge byte ;_egf uint16 ;);_gbb :=make ([]byte ,4);_aafa :=make ([]byte ,4);for _bfe =0;_bfe < _eedb .Height -1;_bfe ,_agde =_bfe +2,_agde +1{_aggg =_bfe *_eedb .RowStride ;_aca =_agde *_ffg .RowStride ;for _daf ,_bfb =0,0;_daf < _bdb ;_daf ,_bfb =_daf +4,_bfb +1{for _bgb =0;_bgb < 4;_bgb ++{_gcagf =_aggg +_daf +_bgb ;if _gcagf <=len (_eedb .Data )-1&&_gcagf < _aggg +_eedb .RowStride {_gbb [_bgb ]=_eedb .Data [_gcagf ];}else {_gbb [_bgb ]=0x00;};_gcagf =_aggg +_eedb .RowStride +_daf +_bgb ;if _gcagf <=len (_eedb .Data )-1&&_gcagf < _aggg +(2*_eedb .RowStride ){_aafa [_bgb ]=_eedb .Data [_gcagf ];}else {_aafa [_bgb ]=0x00;};};_eede =_gg .BigEndian .Uint32 (_gbb );_fcdd =_gg .BigEndian .Uint32 (_aafa );_bdd =_eede &_fcdd ;_bdd |=_bdd <<1;_dea =_eede |_fcdd ;_dea &=_dea <<1;_fcdd =_bdd |_dea ;_fcdd &=0xaaaaaaaa;_eede =_fcdd |(_fcdd <<7);_eee =byte (_eede >>24);_ge =byte ((_eede >>8)&0xff);_gcagf =_aca +_bfb ;if _gcagf +1==len (_ffg .Data )-1||_gcagf +1>=_aca +_ffg .RowStride {if _cda =_ffg .SetByte (_gcagf ,_gbe [_eee ]);_cda !=nil {return _a .Wrapf (_cda ,_fad ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gcagf );};}else {_egf =(uint16 (_gbe [_eee ])<<8)|uint16 (_gbe [_ge ]);if _cda =_ffg .setTwoBytes (_gcagf ,_egf );_cda !=nil {return _a .Wrapf (_cda ,_fad ,"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",_gcagf );};_bfb ++;};};};return nil ;};func (_ffad *Points )Add (pt *Points )error {const _afgb ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _ffad ==nil {return _a .Error (_afgb ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _a .Error (_afgb ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_ffad =append (*_ffad ,*pt ...);return nil ;};type Points []Point ;func _bg ()(_baa [256]uint16 ){for _gcg :=0;_gcg < 256;_gcg ++{if _gcg &0x01!=0{_baa [_gcg ]|=0x3;};if _gcg &0x02!=0{_baa [_gcg ]|=0xc;};if _gcg &0x04!=0{_baa [_gcg ]|=0x30;};if _gcg &0x08!=0{_baa [_gcg ]|=0xc0;};if _gcg &0x10!=0{_baa [_gcg ]|=0x300;};if _gcg &0x20!=0{_baa [_gcg ]|=0xc00;};if _gcg &0x40!=0{_baa [_gcg ]|=0x3000;};if _gcg &0x80!=0{_baa [_gcg ]|=0xc000;};};return _baa ;};func _cfbe (_bdbf ,_gbcg *Bitmap ,_dccb *Selection )(*Bitmap ,error ){const _eag ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _abdgdf error ;if _bdbf ,_abdgdf =_gdac (_bdbf ,_gbcg ,_dccb );_abdgdf !=nil {return nil ,_abdgdf ;};_cgec ,_abdgdf :=_gegb (nil ,_gbcg ,_dccb );if _abdgdf !=nil {return nil ,_a .Wrap (_abdgdf ,_eag ,"");};if _ ,_abdgdf =_gcdf (_bdbf ,_cgec ,_dccb );_abdgdf !=nil {return nil ,_a .Wrap (_abdgdf ,_eag ,"");};return _bdbf ,nil ;};func init (){const _fdge ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_gcabe =New (50,40);var _cgfa error ;_gcabe ,_cgfa =_gcabe .AddBorder (2,1);if _cgfa !=nil {panic (_a .Wrap (_cgfa ,_fdge ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_eabf ,_cgfa =NewWithData (50,22,_badbe );if _cgfa !=nil {panic (_a .Wrap (_cgfa ,_fdge ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func _aeccg (_cegb ...MorphProcess )(_aega error ){const _cfbd ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _fbee ,_facd int ;for _ebaa ,_dbgg :=range _cegb {if _aega =_dbgg .verify (_ebaa ,&_fbee ,&_facd );_aega !=nil {return _a .Wrap (_aega ,_cfbd ,"");};};if _facd !=0&&_fbee !=0{return _a .Error (_cfbd ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030");};return nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _gda (d ,s )};func (_abd *Bitmap )CreateTemplate ()*Bitmap {return _abd .createTemplate ()};type Getter interface{GetBitmap ()*Bitmap ;};func _bdbc (_bdece ,_egfef *Bitmap ,_bcbc ,_feb ,_geec ,_cbfg ,_deea ,_bdbe ,_cgab ,_gfabc int ,_edgge CombinationOperator ,_fdbe int )error {var _dcbde int ;_ada :=func (){_dcbde ++;_geec +=_egfef .RowStride ;_cbfg +=_bdece .RowStride ;_deea +=_bdece .RowStride };for _dcbde =_bcbc ;_dcbde < _feb ;_ada (){var _gaca uint16 ;_bfca :=_geec ;for _cfg :=_cbfg ;_cfg <=_deea ;_cfg ++{_ecgcg ,_cfe :=_egfef .GetByte (_bfca );if _cfe !=nil {return _cfe ;};_eeec ,_cfe :=_bdece .GetByte (_cfg );if _cfe !=nil {return _cfe ;};_gaca =(_gaca |(uint16 (_eeec )&0xff))<<uint (_gfabc );_eeec =byte (_gaca >>8);if _cfe =_egfef .SetByte (_bfca ,_fecb (_ecgcg ,_eeec ,_edgge ));_cfe !=nil {return _cfe ;};_bfca ++;_gaca <<=uint (_cgab );if _cfg ==_deea {_eeec =byte (_gaca >>(8-uint8 (_gfabc )));if _fdbe !=0{_eeec =_edac (uint (8+_bdbe ),_eeec );};_ecgcg ,_cfe =_egfef .GetByte (_bfca );if _cfe !=nil {return _cfe ;};if _cfe =_egfef .SetByte (_bfca ,_fecb (_ecgcg ,_eeec ,_edgge ));_cfe !=nil {return _cfe ;};};};};return nil ;};func (_gbbd *ClassedPoints )xSortFunction ()func (_dece int ,_dfac int )bool {return func (_bafa ,_bdbcg int )bool {return _gbbd .XAtIndex (_bafa )< _gbbd .XAtIndex (_bdbcg )};};func (_ebb *Bitmap )addPadBits ()(_ded error ){const _gfcb ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_afd :=_ebb .Width %8;if _afd ==0{return nil ;};_ebde :=_ebb .Width /8;_afa :=_ba .NewReader (_ebb .Data );_dfc :=make ([]byte ,_ebb .Height *_ebb .RowStride );_fbcc :=_ba .NewWriterMSB (_dfc );_ggb :=make ([]byte ,_ebde );var (_abc int ;_aeccb uint64 ;);for _abc =0;_abc < _ebb .Height ;_abc ++{if _ ,_ded =_afa .Read (_ggb );_ded !=nil {return _a .Wrap (_ded ,_gfcb ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_ded =_fbcc .Write (_ggb );_ded !=nil {return _a .Wrap (_ded ,_gfcb ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _aeccb ,_ded =_afa .ReadBits (byte (_afd ));_ded !=nil {return _a .Wrap (_ded ,_gfcb ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _ded =_fbcc .WriteByte (byte (_aeccb )<<uint (8-_afd ));_ded !=nil {return _a .Wrap (_ded ,_gfcb ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_ebb .Data =_fbcc .Data ();return nil ;};func _ebbc (_geef *Bitmap ,_agfa ,_gfggb ,_aggab ,_ccbg int ,_afca RasterOperator ,_cfcf *Bitmap ,_dagc ,_bfbc int )error {var (_ecaf bool ;_ffgda bool ;_agfbf int ;_eeed int ;_cggc int ;_fafa bool ;_ddcf byte ;_ggcg int ;_cfda int ;_dgef int ;_gbfd ,_dbcg int ;);_bggg :=8-(_agfa &7);_aeab :=_fgdcb [_bggg ];_daee :=_geef .RowStride *_gfggb +(_agfa >>3);_daca :=_cfcf .RowStride *_bfbc +(_dagc >>3);if _aggab < _bggg {_ecaf =true ;_aeab &=_gffg [8-_bggg +_aggab ];};if !_ecaf {_agfbf =(_aggab -_bggg )>>3;if _agfbf > 0{_ffgda =true ;_eeed =_daee +1;_cggc =_daca +1;};};_ggcg =(_agfa +_aggab )&7;if !(_ecaf ||_ggcg ==0){_fafa =true ;_ddcf =_gffg [_ggcg ];_cfda =_daee +1+_agfbf ;_dgef =_daca +1+_agfbf ;};switch _afca {case PixSrc :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],_cfcf .Data [_daca ],_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]=_cfcf .Data [_cggc +_dbcg ];};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],_cfcf .Data [_dgef ],_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixNotSrc :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],^_cfcf .Data [_daca ],_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]=^_cfcf .Data [_cggc +_dbcg ];};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],^_cfcf .Data [_dgef ],_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixSrcOrDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],_cfcf .Data [_daca ]|_geef .Data [_daee ],_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]|=_cfcf .Data [_cggc +_dbcg ];};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],_cfcf .Data [_dgef ]|_geef .Data [_cfda ],_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixSrcAndDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],_cfcf .Data [_daca ]&_geef .Data [_daee ],_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]&=_cfcf .Data [_cggc +_dbcg ];};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],_cfcf .Data [_dgef ]&_geef .Data [_cfda ],_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixSrcXorDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],_cfcf .Data [_daca ]^_geef .Data [_daee ],_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]^=_cfcf .Data [_cggc +_dbcg ];};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],_cfcf .Data [_dgef ]^_geef .Data [_cfda ],_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixNotSrcOrDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],^(_cfcf .Data [_daca ])|_geef .Data [_daee ],_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]|=^(_cfcf .Data [_cggc +_dbcg ]);};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],^(_cfcf .Data [_dgef ])|_geef .Data [_cfda ],_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixNotSrcAndDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],^(_cfcf .Data [_daca ])&_geef .Data [_daee ],_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]&=^_cfcf .Data [_cggc +_dbcg ];};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],^(_cfcf .Data [_dgef ])&_geef .Data [_cfda ],_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixSrcOrNotDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],_cfcf .Data [_daca ]|^(_geef .Data [_daee ]),_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]=_cfcf .Data [_cggc +_dbcg ]|^(_geef .Data [_eeed +_dbcg ]);};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],_cfcf .Data [_dgef ]|^(_geef .Data [_cfda ]),_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixSrcAndNotDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],_cfcf .Data [_daca ]&^(_geef .Data [_daee ]),_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]=_cfcf .Data [_cggc +_dbcg ]&^(_geef .Data [_eeed +_dbcg ]);};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],_cfcf .Data [_dgef ]&^(_geef .Data [_cfda ]),_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixNotPixSrcOrDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],^(_cfcf .Data [_daca ]|_geef .Data [_daee ]),_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]=^(_cfcf .Data [_cggc +_dbcg ]|_geef .Data [_eeed +_dbcg ]);};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],^(_cfcf .Data [_dgef ]|_geef .Data [_cfda ]),_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixNotPixSrcAndDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],^(_cfcf .Data [_daca ]&_geef .Data [_daee ]),_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]=^(_cfcf .Data [_cggc +_dbcg ]&_geef .Data [_eeed +_dbcg ]);};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],^(_cfcf .Data [_dgef ]&_geef .Data [_cfda ]),_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};case PixNotPixSrcXorDst :for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_daee ]=_ccgc (_geef .Data [_daee ],^(_cfcf .Data [_daca ]^_geef .Data [_daee ]),_aeab );_daee +=_geef .RowStride ;_daca +=_cfcf .RowStride ;};if _ffgda {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{for _dbcg =0;_dbcg < _agfbf ;_dbcg ++{_geef .Data [_eeed +_dbcg ]=^(_cfcf .Data [_cggc +_dbcg ]^_geef .Data [_eeed +_dbcg ]);};_eeed +=_geef .RowStride ;_cggc +=_cfcf .RowStride ;};};if _fafa {for _gbfd =0;_gbfd < _ccbg ;_gbfd ++{_geef .Data [_cfda ]=_ccgc (_geef .Data [_cfda ],^(_cfcf .Data [_dgef ]^_geef .Data [_cfda ]),_ddcf );_cfda +=_geef .RowStride ;_dgef +=_cfcf .RowStride ;};};default:_db .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",_afca );return _a .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 TstCSymbol (t *_e .T )*Bitmap {t .Helper ();_fadaa :=New (6,6);_d .NoError (t ,_fadaa .SetPixel (1,0,1));_d .NoError (t ,_fadaa .SetPixel (2,0,1));_d .NoError (t ,_fadaa .SetPixel (3,0,1));_d .NoError (t ,_fadaa .SetPixel (4,0,1));_d .NoError (t ,_fadaa .SetPixel (0,1,1));_d .NoError (t ,_fadaa .SetPixel (5,1,1));_d .NoError (t ,_fadaa .SetPixel (0,2,1));_d .NoError (t ,_fadaa .SetPixel (0,3,1));_d .NoError (t ,_fadaa .SetPixel (0,4,1));_d .NoError (t ,_fadaa .SetPixel (5,4,1));_d .NoError (t ,_fadaa .SetPixel (1,5,1));_d .NoError (t ,_fadaa .SetPixel (2,5,1));_d .NoError (t ,_fadaa .SetPixel (3,5,1));_d .NoError (t ,_fadaa .SetPixel (4,5,1));return _fadaa ;};func (_ceabg *Bitmaps )SortByHeight (){_bgdbe :=(*byHeight )(_ceabg );_cb .Sort (_bgdbe )};func _gab (_fe *Bitmap ,_bb *Bitmap ,_fcd int )(_ae error ){const _bbg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _fcd {case 2:_ae =_dc (_fe ,_bb );case 4:_ae =_ca (_fe ,_bb );case 8:_ae =_cbg (_fe ,_bb );default:return _a .Error (_bbg ,"\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 _ae !=nil {_ae =_a .Wrap (_ae ,_bbg ,"");};return _ae ;};func (_fff *Bitmap )GetByte (index int )(byte ,error ){if index > len (_fff .Data )-1||index < 0{return 0,_a .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 _fff .Data [index ],nil ;};type Point struct{X ,Y float32 ;};func _gda (_gcgfg ,_cdg *Bitmap )(*Bitmap ,error ){if _cdg ==nil {return nil ,_a .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 _cdg ==_gcgfg {return _gcgfg ,nil ;};if _gcgfg ==nil {_gcgfg =_cdg .createTemplate ();copy (_gcgfg .Data ,_cdg .Data );return _gcgfg ,nil ;};_eabc :=_gcgfg .resizeImageData (_cdg );if _eabc !=nil {return nil ,_a .Wrap (_eabc ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");};_gcgfg .Text =_cdg .Text ;copy (_gcgfg .Data ,_cdg .Data );return _gcgfg ,nil ;};func (_efag *byHeight )Len ()int {return len (_efag .Values )};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);type shift int ;func (_ecdba *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _gdcc ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_ecdba .Values )==0{return nil ,_a .Error (_gdcc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_fbcbf :=&BitmapsArray {};_ecdba .SortByWidth ();_gbga :=-1;_fdaf :=-1;for _ceaaf :=0;_ceaaf < len (_ecdba .Values );_ceaaf ++{_beef :=_ecdba .Values [_ceaaf ].Width ;if _beef > _gbga {_gbga =_beef ;_fdaf ++;_fbcbf .Values =append (_fbcbf .Values ,&Bitmaps {});};_fbcbf .Values [_fdaf ].AddBitmap (_ecdba .Values [_ceaaf ]);};return _fbcbf ,nil ;};func _gdac (_aaff ,_gffd *Bitmap ,_gafa *Selection )(*Bitmap ,error ){const _ecda ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _eefbb ,_gbbe int ;if _gffd ==nil {return nil ,_a .Error (_ecda ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gafa ==nil {return nil ,_a .Error (_ecda ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_eefbb =_gafa .Width ;_gbbe =_gafa .Height ;if _eefbb ==0||_gbbe ==0{return nil ,_a .Error (_ecda ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _aaff ==nil {return _gffd .createTemplate (),nil ;};if _faff :=_aaff .resizeImageData (_gffd );_faff !=nil {return nil ,_faff ;};return _aaff ,nil ;};func (_cecf Points )Get (i int )(Point ,error ){if i > len (_cecf )-1{return Point {},_a .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 _cecf [i ],nil ;};func (_gaadg *Bitmaps )selectByIndexes (_gcgfb []int )(*Bitmaps ,error ){_efeed :=&Bitmaps {};for _ ,_ffegb :=range _gcgfb {_bgc ,_cabd :=_gaadg .GetBitmap (_ffegb );if _cabd !=nil {return nil ,_a .Wrap (_cabd ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_efeed .AddBitmap (_bgc );};return _efeed ,nil ;}; |