='V*Bjf[[}ɳ$޿ekfEk~ɸCm֔bSV$c7ǈAKi^;<+^8Ku֙='JƢ-uJȑƼiAQꬅc6ʒ/ϊs9_J}Dw}엽EJACssa]Nyl9֖/۞,mpL-3Qp/~i,^'-AF}Τp uùm>-u`q.g鮱];9F*Cګ=8FrׅΠW׾Kw.sV)HIO±o8Zڛzp,u8cqgs{Go^L[8Jr[J4pv5*P2Z|lPY7&:ҷ{"-4K޳^ȣP˘drL"b}-/%[8h%ȓcO,h,0u]^\   0#A%pQu5ѵa(?[d.o'7ʰCP8W׬Q+K (/GWTd='7wUwoRۅz)H<peHčȳ4RH0{ju?-Zw94<[&5Nҳp7JaP\QZtnfYb>f)t_=Α>Eq!mfoY8
ǶdZ9dk9Fp垵pQZ
Ǻ
ǘG
R
BL;}>#T.*Bscg\8ZppΣpR&56Gs~ci8P8F9Zcs8,p$c2*AN8±s#4[,Ʈ&j5;2GY8k`qfɻ3\n5#9N~S=I۹@udȲnn$Y2Qk9LG*3ύ:Y#WfW1K&B`"&]9Z\`    rix;JpP8ȟgmŽ(gZ~$@m#yRFKӯ]gˈX5}(u9>
Q>M +D(dG`"q#
y}/2nfkeIy/E}K                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                @$_80&εei=c^KW{yyzK,z|C^)ԖXpa(w)I)D@](KK$N|#]ẅ́ڌ3CƱՌ̨gP7WJ83Q8Wq]pw^pWKyk}`-ʲ_j7MDzP7WQ(?TX
g{̨Z8_󸾏3P(#۽1އ):NiNn
)LD&^{\                      n{;Mw;o66?Ï}>^zmqʲտ|{m        \#q_L~T1]=c97Uޗ~_"ʹ޽sMQxszCUrZ'+GK}]}Z+6['Z*_[-/埬7BX_WD^lf_x,@g	vF=ժuQrn_qNu_mApcē(RrNYߊrD/P	/EVTA#yuqqős2̜|<UzUI?'Sɿ9O_E9C=ǋn(gSQxrQf}gϹcQ9rƓ0ݠsyYAN_]*(g94rZFNd|lwr'/.N{.Ujp항Zӥx#z*}9(1\+N \ὥ6׬kU&DATFTFA`j4*GT&^7fq7{N3|,˥X˿\Z:[zA}£\{ึZwfN*|.RXbx5[vVԃLdiѫxSyӼAͩ{Mq\g7.}爟+ʉO9:ɋʆ'
8B/`ܜꮜOrZRvnw=YLy,'G'xc|י8^KQfˉFs-	Ԝ뎜b/O#{p .Dc)KYiyOڧ[_{;wjl8~}](==hXz5¹6+kG7[-y3)osJJ>\2's:eODs+xO~rJ3s8sݜT9_V                                                              )_fI|nնr<kN~c)٭MS~)9rV(gm6]-4[
1=<؟.礛9ir3O9T9ϫ9t9{Q7uyz߾&)54.O>Jy)f  ޻};oz?y'?ɽ~\Cݟ|_DIo\?wݏޫ~v_ܻOoW?:՗                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            INDX( 	             (                                                  -G., 7ڞ+J4'                     # c h a r a c t e r - e n c o d i n g - t e s t - s t r i n g s . i n c      p \          hK., x	+e[' P      E               d o c u m e n t . h t m l          p Z          UU., A+ZL'       G               d o c u m e n t . o d t            p Z          Sb., 0+A' `      E_              d o c u m e n t . p d f            h V          xm., _N+n' P      I              
 d o c u m e n t . z         j          tt.,  O+E'                      e s c p o s - p h p - s m a l l . p n g            p ^          >., T+h'                       e s c p o s - p h p . p n g        p \          ړ., T+ّ'       N               r a w b t l o g o . p n g          h V         ,c., o+'      3             
 t u l i p s . p n g        ` P          /, 95+}B'        N               t u x . p n g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 PNG

   IHDR   F   7   Yk   gAMA  a    cHRM  z&         u0  `  :  pQ<   bKGD  #2   	pHYs       vIDATX{P^Xv ĵE-Kib	/iT)u&4SmINcMت1B&i0\l@k@Ad,bb)̞=  0w/S7-&؛0(_4q(\eqEEOE ؠ[%2	tm쏨?x1 f@TLM0N؊=ݹ9d q^?PBO)>HOf<NbxxWB
y_1|2A=OQb-py,! ,2o\lUyNqULf$d[F>U],s5m[d;4O=66YMEF3'9ur|'/	|h!:Hb!G9E:{>v!b8X^V04a2dIgA?q& Zm'sUІ^@,దQL
La-pVf_s26c-~^sE1_tޣY|8  AkycbrbX0sc)lϑDI	F2'`;($%-_dC>Xoi33-X0Ս`/kRDF5Ahi(k;oiV(gm܏(}L'!UD56V	ӸE~`@L_f`2W r\]\dREgM%qv
'i.1\p5qM-I$/긓KTE!*$Ϝ|]QR5IEJR4]\(W5xTuDw)YGM)r5aP*wu@ң*EimZWLi긫t$n?L1	X{HhǴjX,v['Qg;hfȟft%|v4>Wx@̀DJ=
POY2v؉%Uz[/1V;Xxp%;^!n'IM<&OȝZ73h1\4*p2JSHdur6"è:9C
H"MeD%CAiTZHe̤[Tk7=bhbl\`7- 2~][8lmeMZ%]$*9cY/iިr+_-2M]E.1@uJ5NzMb4Mg$LyK*TFϒCHI:IM
*WZ͗[InhNxu-_u-TLQF[(_Ś%(n|Zەb7]Z!g~MelV󳍣*҃2Vp1q-^e(#2A+JK,ϻڣx79/ΒC+bIag 'mEYxXl LގQ<-)f
@ 2K8 Xj+Of+9 8Xo@*YGl^! /?c g+s p_?SYSFwr̰Gl n	<   tEXtComment Created with GIMPW   %tEXtdate:create 2015-03-14T22:51:53+11:00"BE   %tEXtdate:modify 2015-03-14T20:25:40+11:00    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PNG

   IHDR  ,      dS   gAMA  a    cHRM  z&         u0  `  :  pQ<   bKGD  #2   	pHYs       IDATxyչa6ag%"AŸ%ĈQ{F&ݸ%(Q}T0
Ⱦlǜ>sj9>ANz]5}@QEQEQEQEQEQEQEQEQ#GLhUv00ٹ*2.Cē\ٹ:)nPv@jMαpK{$%5uI[,EioJoeKTuۥ41o2My5RX[49%y}},sK񄊥xARb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xARb)^P/XT,*q_|dgqgz5usTifq,fz<W4usTiJtMS7&/XT,*KOY̫f`A#c#oļۅГ,5e. f(-RB*dLirB3QF߱wYh>tE:t!h- 9Q*&+FȾ<W,52%jb"y"VΗ=]X:(*1ZHm|t?4򘌒Ʒ4yFqd3EdhUk9\	xAFKieR.}d(5K̖Oʥ.Q(pI2<e[Ert[r-3U
:*$\R+HzT{"F~/}m''-{nĚ$ׯy}Vm+6AW"2~)HIltR9w|''I2%kقr%\!C5rN܊C1G˿kOL}^q6L{y4ІZ\K2mЩڤbM.NJ6rTm2#3x T?-\D9ձYׁ'ZɃ(rJ:ʛy3oeH+urjMUϒSOlXǚy,68ch|U p)pÍ pd0 x'XB~oӯ(a؎wwpųo:ЙݵJf$m"gǾ`i:sm5&,d ˸Gh}y;hF/҂L/X=lZ3TNi3(IQ:P+|evnyg#Zjb9Ζ\|ؾJf˟R'=*DDdLq.Dm՘ 沷HsBiѶZ.s-r[ˤ9$_=6oXH\!IߙAދXY fi͊XHZNR)""sǁL؎hbMqEot0mu[ZմB
)g{HgG7w࠯3y"Iw McrmٶlTh+QUeLN	|Dt]mLS>2Y!G"y4AAcŪKmTJ[/yW]2ٴe˷%PsW-=4.k#bȸPcl綔wM.=Jևӗjo`{E>.o>w=9}OW\Xbs \+V<ZϋGkIj/HNw2ӯLS>g0߲Ζt|wj]ut9g*w2Ҷt[LIDEYgW]d+>,׬uCm>h/쑵v/pbPI?鍦-4R}#VKlW:mc3 U<3t2>(T{%ґ]{gmގu1m&3X̗v~RľLfRH2;y`0ӏ>9l[F>"nʇf>2C*95cicD~4X[02*7|~ Ə-exbZs9[WN5JAJ;uɔ˘kZ7fG?yةk>y"Z85UroG=I1%ZEd+uD;w	{ݲ ~iR,Y
3՜?C󷲌x;89ʖ|G%̿,iO17B`
So5]Z6[-Co&cO:Gfb%.nbpCw4RG֜fHyW&&h\kul?$9TmO'.>%^g#Ccҟ}}ͨ˕jE;{l˯OX:3,Yv'E]nڐU0[^6Ԕ,ruͭXz3v+2}HfP	GR)Ym>f8 htFk'vgb}HўITyQx)VK-qv`Z&1Aȣ%]%yN/Czߚ̈|Ҭ5bsZ;ыb6Or?/iK!7dT0S9'tssf칭*۬IȞhI4]ޤO`n%ḘKX@ ;5Ws#E',;Xm8#25$NkmKq O;;gNwa@`++d Uٰ|c:_{d:6bGJf:'ke.yOqu'p3;M}~|w2wo8s)"|AZͽ,޸]ogCϹ bGp8Gp]Y]Enx<F2W:6~H^2959)}YLέi3[iN\<M5T#N$Ef:
Yil?]lknӝ!SBnusj.ϙ)BoivOc~K)~Y,':[_f}/N.5Y/8ȭ1oW凤Y<dN4p7Z&~ ah[r2-m~(2f4=f2>ygT3Ax9uL`݆p>`cMϬG͜Q8JXŅL(ZǓ1֖L1[)<n؃5z4AJsENι>RwBzKo-;}@DdrMqnN0­ӟ~f+vvANPϝRrtLh@#c-&<&ytwWx.@f9-2?T]*b/cui+<$ta䩇JEu|VK򀴎oV/E2yX*&zZa#.u2F>HΐޑiS^cJC#O~BTcEdD˓	O/?S]~">1y%DC|źSjex¿)-3U$e^/XyUFz]-edڲmb5Nc$0LkOfo~ޓY,3a/9y|Pp0Y[U@^7}`P
~Y|׶UJvN#"fW"p s?	)~p`wp2Gj>ƁLes7s_Jm}%/9&T㬣1Xwl~̇pjz(cK4|6uG^񂊥xARb)^Pv vemSMansyzMj"ϕĳvzvԓ<n6m-b3`:oǃÿhK񂊥xARb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xARb)^P/XT,^OS9č_]&蟪JZs-[ehH	9SE;ir3
.ge xF"-@1ךq_ rR@Hq1CcVd (@s sMh$1fy\FכHdR !PК`O Gp  fC-f\\JC+	Cce _q5[>qxEn/TffPM<ǒ@NC;3BU9Tk:7CR~cyf*dk Lb#ЃߚZۉ߄<Ds)Ҕ3齃e2_|94%Kx"s9O%OPc>Vg8b~"lv&՚ShҡLDH3[Km,m+=X72"=1{	ʲ=d.yWb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xX<:GM5CmdNV-y}M̺k#k!qڄe2SZsZ;U̜,{x "Ё tJCQj)1sJض}r:iJ"m+[nz(͝9@;
DP##`02SڼO>TKfNvt
)J؞4}7tоk[;Jֲ"4ϫ=uTМV mh:3=`FIՈ 0	]hCXf',fu
oea(Gt0t3`M BV P@7sB6S2ղ2-h,d+>=@R]~af?Ҥ8/ChJPa*ii3`)*M5]B9!(29iCPIiG²i'nO7vLxARb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xARb)^P/XT,*K񂊥xa;zXOWYg[*:0(*g9lCК!YH"Z2fDvj'тc~q!Z>a.	}r|M1CB?#%_QȐߍ's187܍AHu3_N2IK{DKnϥ(k_&gJkIKVVJΕrWj_+cTA~%$-erTYNrl#~\']$-%rl#J($-rl#Zn"9O_#IoIKUN4ia}FkeKdlNɏm|JܴrR}?derLt'Z<IrkN6ķ2G&RL|\+[rokɕ)G|,M|38Zr4i9O刯{=^gj;ǫXVuvAV\6YkY@+$%eZ+e
AZPk+N|Y6ȅV+)fMr
Ae|֬UK_$WdUJn0Zr9rnSFց?ڞŚ'#$nZX:29)IF*UNε*ʖ6Eyf̫DIZ[JZnW+fnbr*b͏ѪNcU&kN*.>)k*[ZVYXևU}ֺ1VMryDL֊SkK([իuyZrc [Y+Q-lZ^ĺM$hQ+i2IݦZ6rԆdUkCVuY릈Z
)L/Z[XPt+Hr
gj%ܬje}u\Y-ke7-ɨ)95VF
ķdF	kZ7k%VL
ćVLZKָZ[d\XuT'glU-	gT]#w?Stn,Ba^RZj"zP-fgKIjh2Cy:dVsKhNPtrf<>b8wժo^?HU(۬p47Xb.1]YrZ5rw8[-dǫKnPu"P?AgoT"LN?G7Wp2jh5
SkMV<T.kl5݁r
uTF,,Zsw\֊Vq P-A."R)7!@Z̗?1jGŌgK4k]*qNLM4XF+ѬY4[&OXly͞Ѭy\<pE4k}.&S4kJ
]PRQVeM|	:N-ZEpL|)7ZVs9Y/x/b=B;'j@0k5>Q_e'aMT+%}z :j)ZMZ/V3VDVSt˂"9(>[ed.\pKZ$Y,7[eT+hU>%ȏV5%@OeyP
[(]Pk{Cj^Q+
jPT+
jP̸`<ZЪN)z82HTkbd,:^O67z9D
f
f5A`W>hQ*6>@snHP+UF-96&>.k5X	Z睼S՘g'/ONY+2tdB*EUxfFUx>倄Yk6CKcՊ
ƨ V+|^S+ &kqgG$kMI
z#6[eȄH-K|Tl!V|PƟCYl!,Ѭ@q;Ă;Z=U+gǳj;ɪZAXU`z9j}Q+9[eh/zGY(jGZA8kg;: 6PV yhtN zBZta9͡7kPAEХ5w|5[e(j}xt)Ӟsjuĺn<#Am{sTWŻ<(Bg(]9]"2әQΧL`q^{%ca^~|ͣ+5#<ۼ[1,f߂K9Q>+1j<eAC(((((((((((((J"We   tEXtComment Created with GIMPW   %tEXtdate:create 2015-03-14T16:57:21+11:00b   %tEXtdate:modify 2015-03-14T16:57:21+11:00R    IENDB`                                                                                                                                                                                                                                                                                                                                 PNG

   IHDR  @      Gm'   PLTE   ٟ   bKGD H   	pHYs        tIME	,cl4  IDATX;& #	
,!̯x)<Hex+̸6-3n(
SHNE}}Wq@k. ';p-!0\]D-Bqeh#:jgFDcrPI*FpDNK4J%~k KLmq؆>o6`#AY*VQ bVM5a폶H8G[ )P!Qe.MO}@&"h^lXzдEvD>JƏP_pe\ڞr-<Ծ6p5~;A׷wCq| sT!IRKVe@W}jniʐ-1==Kn61؅]yhCǌN5Ns4W|HN
x`p
1B@YR{327ߘ	GVL t}r![u4Ф?2La8*3;RwDL[3<aOZamU;}C4;<4\@Rf@	5+TɬPC.gP\4jTeKh}Eb^B秡?v`g(o|W^5|Oj=ehz"Ip{p*Ò3ss3p3n <؅9x_dix*@3=ppCWk(APux#,pn%9	OT? mJuySr#6R
a<7['1:%C~t,q/Nua'; 'OGq$"9BwEĬ 'f@AS==rL,}[G> intLowHigh(strlen($data) + 2, 2);
        $this -> connector -> write(self::GS . "(L" . $header . $m . $fn . $data);
    }
    
    /**
     * Convert widths and heights to characters. Used before sending graphics to set the size.
     *
     * @param array $inputs
     * @param boolean $long True to use 4 bytes, false to use 2
     * @return string
     */
    protected static function dataHeader(array $inputs, $long = true)
    {
        $outp = array();
        foreach ($inputs as $input) {
            if ($long) {
                $outp[] = Printer::intLowHigh($input, 2);
            } else {
                self::validateInteger($input, 0, 255, __FUNCTION__);
                $outp[] = chr($input);
            }
        }
        return implode("", $outp);
    }
    
    /**
     * Generate two characters for a number: In lower and higher parts, or more parts as needed.
     *
     * @param int $input Input number
     * @param int $length The number of bytes to output (1 - 4).
     */
    protected static function intLowHigh($input, $length)
    {
        $maxInput = (256 << ($length * 8) - 1);
        self::validateInteger($length, 1, 4, __FUNCTION__);
        self::validateInteger($input, 0, $maxInput, __FUNCTION__);
        $outp = "";
        for ($i = 0; $i < $length; $i++) {
            $outp .= chr($input % 256);
            $input = (int)($input / 256);
        }
        return $outp;
    }
    
    /**
     * Throw an exception if the argument given is not a boolean
     *
     * @param boolean $test the input to test
     * @param string $source the name of the function calling this
     */
    protected static function validateBoolean($test, $source)
    {
        if (!($test === true || $test === false)) {
            throw new InvalidArgumentException("Argument to $source must be a boolean");
        }
    }

    /**
     * Throw an exception if the argument given is not a float within the specified range
     *
     * @param float $test the input to test
     * @param float $min the minimum allowable value (inclusive)
     * @param float $max the maximum allowable value (inclusive)
     * @param string $source the name of the function calling this
     * @param string $argument the name of the invalid parameter
     */
    protected static function validateFloat($test, $min, $max, $source, $argument = "Argument")
    {
        if (!is_numeric($test)) {
            throw new InvalidArgumentException("$argument given to $source must be a float, but '$test' was given.");
        }
        if ($test < $min || $test > $max) {
            throw new InvalidArgumentException("$argument given to $source must be in range $min to $max, but $test was given.");
        }
    }

    /**
     * Throw an exception if the argument given is not an integer within the specified range
     *
     * @param int $test the input to test
     * @param int $min the minimum allowable value (inclusive)
     * @param int $max the maximum allowable value (inclusive)
     * @param string $source the name of the function calling this
     * @param string $argument the name of the invalid parameter
     */
    protected static function validateInteger($test, $min, $max, $source, $argument = "Argument")
    {
        self::validateIntegerMulti($test, array(array($min, $max)), $source, $argument);
    }
    
    /**
     * Throw an exception if the argument given is not an integer within one of the specified ranges
     *
     * @param int $test the input to test
     * @param arrray $ranges array of two-item min/max ranges.
     * @param string $source the name of the function calling this
     * @param string $source the name of the function calling this
     * @param string $argument the name of the invalid parameter
     */
    protected static function validateIntegerMulti($test, array $ranges, $source, $argument = "Argument")
    {
        if (!is_integer($test)) {
            throw new InvalidArgumentException("$argument given to $source must be a number, but '$test' was given.");
        }
        $match = false;
        foreach ($ranges as $range) {
            $match |= $test >= $range[0] && $test <= $range[1];
        }
        if (!$match) {
            // Put together a good error "range 1-2 or 4-6"
            $rangeStr = "range ";
            for ($i = 0; $i < count($ranges); $i++) {
                $rangeStr .= $ranges[$i][0] . "-" . $ranges[$i][1];
                if ($i == count($ranges) - 1) {
                    continue;
                } elseif ($i == count($ranges) - 2) {
                    $rangeStr .= " or ";
                } else {
                    $rangeStr .= ", ";
                }
            }
            throw new InvalidArgumentException("$argument given to $source must be in $rangeStr, but $test was given.");
        }
    }

    /**
     * Throw an exception if the argument given can't be cast to a string
     *
     * @param string $test the input to test
     * @param string $source the name of the function calling this
     * @param string $argument the name of the parameter being validated
     * @throws InvalidArgumentException Where the argument is not valid
     */
    protected static function validateString($test, $source, $argument = "Argument")
    {
        if (is_object($test) && !method_exists($test, '__toString')) {
            throw new InvalidArgumentException("$argument to $source must be a string");
        }
    }
    
    /**
     * Throw an exception if the argument doesn't match the given regex.
     *
     * @param string $test the input to test
     * @param string $source the name of the function calling this
     * @param string $regex valid values for this attribute, as a regex
     * @param string $argument the name of the parameter being validated
     * @throws InvalidArgumentException Where the argument is not valid
     */
    protected static function validateStringRegex($test, $source, $regex, $argument = "Argument")
    {
        if (preg_match($regex, $test) === 0) {
            throw new InvalidArgumentException("$argument given to $source is invalid. It should match regex '$regex', but '$test' was given.");
        }
    }
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    INDX( 	 +            (                                       z          ^d/, E sV#+b>'x      r               D e f a u l t C a p a b i l i t y P r o f i l e . p h p             z          s /, E sVv+'x      s               E p o s T e p C a p a b i l i t y P r o f i l e . p h p             v          f,/, E sV+'p      n               P 8 2 2 D C a p a b i l i t y P r o f i l e . p h p         x          L/, E sVО+'p      p               S i m p l e C a p a b i l i t y P r o f i l e . p h p       t          /, E sV +'p      n               S t a r C a p a b i l i t y P r o f i l e . p h p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <?php
namespace Mike42\Escpos\Devices;

use Mike42\Escpos\Printer;

/**
 * A class for sending ESC/POS-like code to an Aures customer display.
 * The display has some features that printers do not, such as an ability to "clear" the screen.
 */
class AuresCustomerDisplay extends Printer
{

    /**
     * Indicates that the text should wrap and type over
     * existing text on the screen, rather than scroll.
     */
    const TEXT_OVERWRITE = 1;

    /**
     * Indicates that overflowing text should cause the
     * display to scroll vertically, like a computer terminal.
     */
    const TEXT_VERTICAL_SCROLL = 2;

    /**
     * Indicates that overflowing text should cause the
     * display to scroll horizontally, like a news ticker.
     */
    const TEXT_HORIZONTAL_SCROLL = 3;

    /**
     *
     * {@inheritdoc}
     *
     * @see \Mike42\Escpos\Printer::initialize()
     */
    public function initialize()
    {
        // Select ESC/POS mode first
        $this->selectEscposMode();
        parent::initialize();
        // ESC @ does not reset character table on this printer
        $this->selectCharacterTable(0);
        // Default to horizontal scroll mode. Behaves most like a printer.
        $this->selectTextScrollMode(AuresCustomerDisplay::TEXT_VERTICAL_SCROLL);
    }

    /**
     * Selects ESC/POS mode.
     *
     * This device supports other modes, which are not used.
     */
    protected function selectEscposMode()
    {
        $this->connector->write("\x02\x05\x43\x31\x03");
    }

    /**
     *
     * @param int $mode
     *            The text scroll mode to use. One of
     *            AuresCustomerDisplay::TEXT_OVERWRITE,
     *            AuresCustomerDisplay::TEXT_VERTICAL_SCROLL or
     *            AuresCustomerDisplay::TEXT_HORIZONTAL_SCROLL
     */
    public function selectTextScrollMode($mode = AuresCustomerDisplay::TEXT_VERTICAL_SCROLL)
    {
        self::validateInteger($mode, 1, 3, __FUNCTION__);
        $this->connector->write("\x1F" . chr($mode));
    }

    /**
     * Clear the display.
     */
    public function clear()
    {
        $this->connector->write("\x0c");
    }

    /**
     * Instruct the display to show the firmware version.
     */
    public function showFirmwareVersion()
    {
        $this->connector->write("\x02\x05\x56\x01\x03");
    }

    /**
     * Instruct the display to begin a self-test/demo sequence.
     */
    public function selfTest()
    {
        $this->connector->write("\x02\x05\x44\x08\x03");
    }

    /**
     * Instruct the display to show a pre-loaded logo.
     *
     * Note that this driver is not capable of uploading a
     * logo, but that the vendor supplies software
     * which has this function.
     */
    public function showLogo()
    {
        $this->connector->write("\x02\xFC\x55\xAA\x55\xAA");
    }

    /**
     *
     * {@inheritdoc}
     *
     * @see \Mike42\Escpos\Printer::text()
     */
    public function text($str = "")
    {
        self::validateString($str, __FUNCTION__);
        // Need to intercept line-feeds, since "\n" is insufficient on this device.
        foreach (explode("\n", $str) as $id => $line) {
            if ($id > 0) {
                $this->feed();
            }
            parent::text($line);
        }
    }

    /**
     *
     * {@inheritdoc}
     *
     * @see \Mike42\Escpos\Printer::feed()
     */
    public function feed($lines = 1)
    {
        self::validateInteger($lines, 1, 255, __FUNCTION__);
        for ($i = 0; $i < $lines; $i ++) {
            $this->connector->write("\r\n");
        }
    }
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     xysǙ>J(~'q\#U[r%Q%Ѻx(R};D&Jb粓%e9 AKgz~lnٺＺ]=U9uwzmol}m;7vvn	\.#Ǖ:Q:VE^_Vr+o>ʛ7Hr7;Y'kzn^b+ër>Mg'Yo$X5st9@\A=׮ջVk)ϱ1IJ{{lY˾Z6vsږM:ѱ){>mSSfwt'Ƅekvnb##RݷI_V	I<wݽrpZ`/nћZL_YLM.ݱU66ݫÓV8RTusk۪7[X/9'gO7
;*ְ:rG5enLP:w+߭uG4KZVuS<6wx{ȹӿcnWa?<HK|1#Gڧڧ'9BىVg۰ڰڰ'۰}mXGWk UgZUgNn^n^hml^k^l%O6Ovlq%opK:c_Vz퇚ÃWсBFۧj_[r׾hMx?v59BLJC-xܴtO7H?ߊVЊ6U}˭齵iu&8݄//upd]MI bߒ{	^g'sn[naZ81%Ghfu֞;vΘx*\=twfD7Z奄sLzCj?-;]g`Ǵk-x0\|uu6ڶ0jYHłl{.r.ޫ5rN5Yږ|X}\D3>n~/%ClW_3~o-Cmw3}CXg}0~Ci}Ck}0~!C?lC>l#>jG3~O)C?mgR5O/^:H?H?H;ˑ*?HHqG	G#}m[o^^#91+)5;[Qr*=iŊGǖ>t6D޶fql|v5"O'|#Ǜw⎥ӧkͱwd`+j5%mp]3lqcgJliG^#}~\3/6hi[q[<H̩e;׽`%Ty밪sc:QXTKlNPӓ+~ɗh9Kc>zۑxc35wfܫ2qaIܷ+,ULq$ic˭W1Ew[ӎ'I=uNh,0@9 c}5WĖu8h	3N_МX?k_9IXfz>I?ހ{Վe(;p#)ʎ({$E٣)KQx'R=eO({&Eٳ)ʞKQv,E)ʎ(;e/({)E)^IQjReo({+E)IQnRe(;l>E٩e)>JQqOR}e(=E)(3E])NQv E=)MQv_)ʾe۴wowhE~-D/>4;5$<(g9?2ݑ<F\W¨
\W8
\Wqpu}+t]au3+pd(֢;;ΊiOߨY$jE:_hE4vVjgC~Ї}G}ЏQC?f4S~YC?gc~}/ECdJct6kXB-#]
V##ajo%X	#V±	A)+᜕0zU1C?on炡_4K~w}zsVB޸@Ja%촞{Ub	CV+|jтF=$HU+ẕpJk%Xk2QSO:Clsi*iuY=`5yjV&/X-[Z`llV	j`en^m'kh 4׬[V+᠕`͈˶X	֔Xh4	{Lj+ð+È+è+Wc]N2te8pڕ+YWs].2uexЕaҕ!0Ppexؕ+SGm]v2vepezk]nu+2ʰϕa\\mQrEC\2\]*Cc(gSҽ/)"u>ho5֋&نGo82xw\v(EꈫV7]7puy
iQ ԲHqd5U;yߺ2VPfleVPfxeO.In%V.+a0`%Z	A++apJ8h%[	CV°0b%Z	GV1+ḕpJ8i%N[	gV9+aJ8o%[	V+ᢕpJl%\Z	׬V+ᦕpJm%ܱZ	V+ᡕ0i%䭄)+ᩑ,۞l{޲y˶-۞l{޲y˶-۞l{޲y˶-۞l{޲y˶-۞l{޲y˶-۞l{޲y˶-۞l{ް/>'ݜM\;[ѓn%[>ݼVIck1CkM6?u>:X/iaPpޕ+UWîCc]2<re(b+Cb'tm~߾jϣϖ۲{Ay+bVGr(lGЏp6v"L.J( \=Ba/P؇p#ag(@
.!]p^(!<a;0PQ|(Ax
GFCP8
Ӵ	pf8U7X,o3\(E
T(G
BaE^%>x0T.澂8"й!tv7hwߒK-e(ToR6PF}))RFBeR
B	SH
]챔DOA+<2*oJa%½fJQ
>Cm)gB)C])=)0g`>³(*IaIR	e)ԏK9*K~"~)tާz\Pz@H
?P꿤~,VI8JZC9Sr0 ~FsP9/W_#i~@?-O7@n;P߫}j;a$N s)\ϼ뇡]v+
S'WBY_lÞBLTנKk󈓑LF2d$d2HH&WYέ@xI_[BO A}Q
)ƫR0 פ0^ܐ
ݔB+ݒB-7~G
S])t{R;JI) O^
s