summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/generic/pst-barcode/Changes3
-rw-r--r--Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdfbin278101 -> 274754 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex23
-rw-r--r--Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro26771
-rw-r--r--Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex4
-rw-r--r--Master/texmf-dist/tex/latex/pst-barcode/pst-barcode.sty2
6 files changed, 20488 insertions, 6315 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-barcode/Changes b/Master/texmf-dist/doc/generic/pst-barcode/Changes
index 39729819828..fd32f16f588 100644
--- a/Master/texmf-dist/doc/generic/pst-barcode/Changes
+++ b/Master/texmf-dist/doc/generic/pst-barcode/Changes
@@ -1,4 +1,5 @@
----- pst-barcode.tex
+0.13 2015-05-11 - updated documentation, new pro file
0.12 2013-10-26 - added option file for including an external file
0.11 2013-10-06 - added more options for data matrix
0.10 2012-08-25 - using another code for loading the ps code
@@ -18,6 +19,8 @@
----- pst-barcode.pro
+
+2015-05-11 - several fixes for the code
2013-10-06 - the Data Matrix encoder now supports C40, Text and
ANSI X12 encoding modes as well as the FNC1, PROG,
05 Macro and 06 Macro prefixes
diff --git a/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdf b/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdf
index 55b731ce2a3..12e7e21ff11 100644
--- a/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdf
+++ b/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex b/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex
index 72c33bffcff..edaf38f00ef 100644
--- a/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex
+++ b/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex
@@ -396,11 +396,18 @@ funtion symbols, starting with the approriate start character
for the initial character set. UCC/EAN-128s must have a manditory
\texttt{FNC 1} symbol immediately following the start character.
\item[Options]~\\
- \begin{tabular}{l|l}
+ \begin{tabularx}{\linewidth}{@{} l|X @{}}
Option & Feature\\ \hline
\texttt{includetext} & Enable human readable text\\
- \texttt{includecheckintext} & Make check digit visible in text\\
- \end{tabular}
+% \texttt{includecheckintext} & Make check digit visible in text\\
+ \texttt{parse} & Any instances of \verb|^NNN| in the data field are replaced with their
+ equivalent ASCII value, useful for specifying unprintable characters, e.\,g. \verb|^029| for GS, etc.\\
+ \texttt{parsefnc} & Non-data function characters like \verb|^FNC1|.
+ The special pseudo characters \verb|^LNKA| and \verb|^LNKC| at the end of the symbol
+ indicate that a GS1-128 symbol includes a CC-A/B or CC-C GS1 composite 2D component.\\
+ \texttt{raw} & The data field provides the input as pre-encoded codewords in
+ \verb|^NNN| format, suitable for direct low-level encoding.
+ \end{tabularx}
\item[Notes] Any non-printable character can be entered via its escaped
ordinal value, for example \texttt{\^{}070} for \texttt{ACK}
and \texttt{\^{}102} for \texttt{FNC 1}. Since a caret symbol
@@ -414,6 +421,12 @@ for the initial character set. UCC/EAN-128s must have a manditory
\end{pspicture}
\end{LTXexample}
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(5,1in)
+\psbarcode{^FNC3L09}{parsefnc includetext}{code128}
+\end{pspicture}
+\end{LTXexample}
+
\subsection{Rationalized Codabar}
\begin{description}
@@ -435,7 +448,6 @@ for the initial character set. UCC/EAN-128s must have a manditory
\end{LTXexample}
-\newpage
\subsection{Interleaved 2 of 5 and ITF-14}
\begin{description}
@@ -478,7 +490,6 @@ for the initial character set. UCC/EAN-128s must have a manditory
\end{LTXexample}
-\clearpage
\subsection{Postnet}
@@ -496,7 +507,7 @@ for the initial character set. UCC/EAN-128s must have a manditory
\begin{LTXexample}[width=.6\linewidth]
\begin{pspicture}(7,0.3in)
-\psbarcode{01234}{includetext textpos=-10 textfont=Arial textsize=10}{postnet}
+\psbarcode{01234}{includetext textpos=-10 textfont=Helvetica textsize=10}{postnet}
\end{pspicture}
\end{LTXexample}
diff --git a/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro b/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro
index 487e75a1be6..efdca8a3bb0 100644
--- a/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro
+++ b/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro
@@ -1,9 +1,9 @@
%!PS
-% Barcode Writer in Pure PostScript - Version 2013-06-03
-% http://www.terryburton.co.uk/barcodewriter/
+% Barcode Writer in Pure PostScript - Version 2015-05-09
+% http://bwipp.terryburton.co.uk
%
-% Copyright (c) 2004-2013 Terry Burton
+% Copyright (c) 2004-2014 Terry Burton
%
% Permission is hereby granted, free of charge, to any
% person obtaining a copy of this software and associated
@@ -28,168 +28,445 @@
% CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
% IN THE SOFTWARE.
-
+%
% --BEGIN TEMPLATE--
-
+%
% --BEGIN RESOURCE preamble--
-%%BeginResource: Category uk.co.terryburton.bwipp 0.0 0 0 0
-%%BeginData: 7 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-P1OerF_-`n01TSk ATDKp 010/i AS5q% H' 6mE 30Ia,! KmJH23J
-i?3%mj@F*(i.@qA VbE +L\DA TVm"@ r# drB 9Ki QP'&
-Es@:O(aA79M!@<l s?E+O HE 04AmA @<ls ?E +OH \<K_S [F_ `U>D_ ?-CE
-cQG7F`MSBDD#CBB lJ$S4 tf9 3FC f*'E d8 d<A S,XoAT D@ 'Dfp)1 AWh
-2!hZ~>
-% Category/uk.co.terryburton.bwipp 0.0 0
+%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2015050900 31191 34576
+%%BeginData: 6 ASCII Lines
+currentglobal
+true setglobal
+/Generic /Category findresource dup length 1 add dict copy dup
+/InstanceType /setpacking where {pop /packedarraytype} {/arraytype} ifelse put
+/uk.co.terryburton.bwipp exch /Category defineresource pop
+setglobal
%%EndData
%%EndResource
% --END RESOURCE preamble--
-
+%
% --BEGIN RESOURCE raiseerror--
-%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 0 0 0
-%%BeginData: 9 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3JD%E a`['A S# n&D fU1 I,\;
-":DfV")04f0EDfT Q0AoE hr P'A6` EcQ) =P !1O 1EcQ) =DI IBnP! 5%R,
-\;":DfRL@Df'?"D IeoMP 'A6 `Ec Q)=0 5b ?FA TDg0EZ fI EF_-_\ BOP
-dhCh70uEc5t@EHP u;I?G )'1 G<c W Bld isE cQ) =OuSV8 06 M%_@rE uAA
-TDg:@Wc^5Df.1:G A2#8+ Co% qBl 7L &A TMd 4Ea r[DFcn a< F(KH4@ :O(
-eDJ,-DH]iMmATVm "@r# drB 75 qB ~>
-% uk.co.terryburton.bwipp/raiseerror 0.0 0
+% --REQUIRES preamble--
+%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2015050900 44890 44440
+%%BeginData: 13 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+begin
+/raiseerror {
+ $error exch /errorinfo exch put
+ $error exch /errorname exch put
+ $error /command null put
+ $error /newerror true put
+ handleerror quit
+} bind def
+/raiseerror dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END RESOURCE raiseerror--
% --BEGIN RENDERER renlinear--
-%%BeginResource: uk.co.terryburton.bwipp renlinear 0.0 0 0 0
-%%BeginData: 72 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D Ops 'bASu <uD Im6sH \`B!
-23JD%@<-"%P!5$b 06:TD +Bo soO u"b# BQ G;# +C1-d0 4J C3+Bos oOu
-"b5G]Y'4+C1-d04 J@1@r H1% EfL < GDK BB2 Ou" b*DI[L *A 7]joG] Y'?
-@;L!rOu"b5AU&<, Des?4 NWj QCF (K HV 1G< i]G ]\1=Ch [O "NWjQC F(K
-HV1G<i]G]\4>Ch[ O"NW jQC F( KH V1G <i] G][ P9DK
-LmD6Z7*fBk;=J1G <i]G ] \" @H =_m >Ou "b5A U&<AD
-e<U&ATW_.Ou"b5A U&<BDe <U& A TW_ .O u"b5 AU& <0@;p:D!0T ,k@;L%-AU&<
-W!0T,k@W-9tATD: !Ci=?S "a+ ^ (ATX (k04 J@" CM.[+F`(`" Des?4NWjQCF
-(KHV1G<H[CNFH8A RT,,4r KcW Ou"b 8Bk2 =!L ]ESo04J@1E aa'(DhnFW1G
-<fg@:Nkh@<?4%L] NYp06 :fFG @GK2A 7]d( Amo LsAWei&@W- 9tATDTuAorh
-9Ou"b#DfTB"EcPl ,BQT% ;Ou"b #DfTB "Ec c5=L]NYp04 Jj?A7]djDfg
-)>D284U1G<3UEb& a%GA1T0 BSo"S! !&0<0 5#E 9Eb'B-Blmp -E+*6f+D,%u
-F(LLj05#E9Eb&utAor!1F,0gZ1G<B`@<,mpAS-%0E,TfR!0T,kB6@X'A9)BsBQS33F,0gZ1G<B
-`@<,n!BkM+$H#R\CL]ESo05#E9Eb'B.A9;L@#*LbqB6@X'A8#OgB4uCC#EglOEbBH?Ou%NL8T/
-QiH]g15P"@<9@<,jrCi=>:@UX:eDes?4OtDhQ06CcMFCT6*DfQtBAU&<,Des?4OtDhQ06CcMFE
-h51BkM<+FCf]=G[YE&B5WkaOu"b5AU&<B@;KXjDBO%4G]\4>Ch[O"OtDhQ06CcMFCoH/F<G[:G
-][P9DKM$nOu"b5AU&<<BmO>5FCf]=F(or3OtVtS06CcMFEh_9AohO*+EV1>FEh_9AohO*OtVtS
-06CcMFEqe:AohO*+EV1>FEqe:AohO*OtVtS06CcMFD#$$F!,R9G][S,E-%0qOu"b"Cijc1G]Y'
-:Cijc1G]]*#Ou"b#DfTB"Eas$(DfQt0DfTB"Eas$(DfV!mOu"b#@:O(cEc6)<A7KOoDfQt0@:O
-(cEc6)<A7KOoDfV!mOu"b*DJO<4Eb/Zi+DG_/F)Z/2@:YNSOu"b8Bk2=!+EqO1FD-gjOu"b#@<
--BsFD5Y9@UX:t@<?4%OtVtS06;)@@qB[hFD5Y9F)YPtATD4$BlB.fOu"b#DfTB"Ebo<!F<G%2E
-b&a%Ch74#OtVtS04Jj?A7]e%BkM+$+C]80A7]e%BkM+$OtVtS04Jj?A7]e'Df?h.DfTB"Ecc5=
-OtVtS04Jj?A7]djDfg)>D'3;+Eb&a%@W-@1Df(XjOu"b#DfTB"Ed)5.FD)e+DfTB"Ed)5.FD-g
-jOu"b(F^]<$Ch74#E,Te?B6@X'A8GghFDu/>OtVtS05#E9Eb&utAor<;Df[%6F^]<$Ch74#H#R
-\COtVtS05#E9Eb'3)B4uC+Df[%6F^]<$EbT0"FDu/>OtVtS05#E9Eb'3)B4uC4E,Te?B6@X'A9
-)BsBQSN=Df_'pOu"b(F^]<$GA1T0BHUr1@<,n&Bk2=!OtVtS05#E9Eb&ipBkM+$+D5h*Eb&ipB
-kM+$OtVtS04J@1F!,O5F-:!g!KmJ>!g6HE$'I(tG_uJ$!!&0<05Y-BBSZYO1Pc$e!HV^kP%'4J
-Oo^@?P#@);P&,pUP,Wd]Bp(ZC1MMXHP%odQP!+.FA0>r&F!,1[94D=MEaa'(Dj"pG@<-BsFD5Z
-VWJCS<!Ko6[@WNZ+P"UT2P&5P!BHUbtF!,1Q!g6HE98H-%Cm$S-@j#<<!g5HdOo^_%06n[L@WN
-Z+L]W`;P"UU%P&-:;06\OL+DG_/F)Z/2@:YP#Ou$QUEcW@;L]W`;>9IT%@j$%>G9C1SG\A4FOo
-]E.G\E7:HS95EG\A45+F0+NOu%NL<.0+&@<-E3BnuhR;Mb@9G^Y`TI=!VX+EM"5+DI!3F)YPtA
-TD4$BlB/NF)YPtATD4$BlB06L]NY>Ou%NL<A/S>GT^O[!Ko6eP":a2OslKqGA1T0BSZYOD0pJ@
-A9;L@8<Re6OuA*sP)FaO<%i<(FCB'4@rH1%EdKHJDL#`1Ci=?W5*@^1DL#`1Ci=?W@Yb5O4aW1
-p4<Pah+<VdjL^90?Or9EBL]Lq%H"1c/DfV"dOtr1bH\MP#Ou@`O8WoWmP#Pk-H"1c/DfV"ML^9
-/,H]AFq+<VdL+<VdL5)9Q/V32^Z3/@TDDL#`1Ci=?WH'0qG5C8+bs,o9gP"Ch#I?IQXOq*X2P&
-FfJEb&a%Ch74#P&=`IEb&a%@W-@1Df(YTP&#:b@W-9tATDTuAos1:@W-9tATDg*B4uCM!Jg`=K
-no_G@<cH.@W-9tATD6uFEDG<Oo]$1Eb&a%FDl,]!Kr.]+C]80A7]dtAS-%I!FftfA7]e%BkM+$
-Oo^_`L]ETlL]D:#G\A4/DfTB"Eais/FDl#Z!FftfA7]e'DfCj?P&?G:OqqM8@r#^tDfor.@rH1
- %EfL<GDKBB2P&5Q/:1@XACM.[+F`(`"Des?4+EM+9@;^@#Des?4P!Y=+I?IQNBQ&*(DfTB"Ed
-NsE@W-9tATD:!Ci=?S"a+^(ATX)PHX^o6A7]dkDes?4+EM+9@;^@#Des?4I?IQ=DfTB"Ed)5.F
-D-i,P,FI;I?IQm:5An5R:9TF@rH1%EfL<GDKBB2P&5PT@<,jrCi=>:F(KH%DL#`1Ci=?BP#Pn!
-EcZSj3/ITtD0qEIP')q+P+.VML]ET%P(f'sI=%-"I?ITYP"Cg2FCf]=@rH1%EfL<GDKBB2P&5P
-fAU&<,Des?4+EM+9@;^@#Des?4I?IQDDI[L*A7]joG]\9TFCf]=G[YE&B5W_5F`)83FHSe/AU&
-<B@;KXjDN4mCDKBB2P!+s2@;L%-AU&<W!0TL."FDeCL]ESo04o*^!0T-[G]\:ZI?I0X!g4FBP&
-6@GAo<cKP&bo*!g4ESF-8_M1G<?XP!5$bP!5$rP!5%fP*LHBP')q1I?ITnCQb?=P"C(KFCf]=A
-oDR/P!a>&G]\"@H=`7uP*KHlFED)=FH-?a4aSi(G]Y'4+EVjMH\_Zb97))M8UZan?'6usFE;PE
-+EVjMP%'TNOu%moL]MUBFHU*h!KsF/OuRQ.FHShN96>5sEejgR!Kr5$G^Y`GI=!VhF*)FF@;L%
--AU&<[1OYEdFE;PEP%'4IP!+/J!.B3W:6KOO!/LW<CQ8ELAmoLsAWdXgF,0sT!Kr5$Fcpm1Fco
-I^+>6Q"Bl8#lH#R>X@!e%Z02Q(kDKJj'E+P2*L]W`&I=#R7Cia09P#[Yf02lt5DeiocBk2=!P$
-jFUH]fL);fm%uCLpR]A9;LJ98EY42M_?r5*@$A7W30d9jr-aBm>e6OuJO`P&-:FOuSV@Oo]WDE
-cdHFI?IQXP#X/WAU&<*F(8d!FHShN1G<i]G]\.DA9;K-FE;PEP,=CbFE;PEP%'4JP,WP7G][S,
-E-%1YOo^_%06CcMFEhbCF!,R9G]\1KAnH*qF<GfNFCf]=GA1T0BTf?N!g5I)!Ko6\AU&<A@;KX
-jDN4j9AS-%I4aSi(AU&<AE,Te?FCf]=G].2+F(KHV1OYEcFCf]=G[YE&B5W_5EbT0"FHSe606C
-cMFEhbCF!,]MFCf]=G].2+F(KHVWH;]rFE_G0FD-i:Ou%NL<-2\rFEh51BkM=D#B+3dCh74#P!
-+.FFCf]=G]7SB+EV1>FE_G0FD)e=AU&<ADe<U&ATX(9P&?F=I?IQOAU&<A@;KXjDN5!@AnH'tB
-4uCM4aSi(AU&<AE,Te?GT_*>G]\1KAnH*qFHQZf1OYEcFCf]=G[YE&B5W_7C3=T>BkDXR4`k7[
-FE_G0FD)eAP%Kj[HS9JPG]\1LDf^^7Ou"b5AU&<0@;p91GT_*>G]\.DA9;LJWH<3'Efsmf!KsF
-F2NfkEP#O)VAU&<BE,Te?FCf]=H#I;,F(KG9FCf]=@<5piDKM$BL]NY>P&?F=FCf]=H!tN'B5W
-_5@:F.uAWf3'06CcMFEqhDF!,R9G]\4LAnH*qF<GF/G\E6@L]NY>Ou%NL<-2\rFEq;2BkM=D#%
-M4^FCfKU4aSi(AU&<BE,Te?FCf]=H#I;,F(KG9D..[&+EV1>FCB6#ASuUQWJCV=2Ne*(1OYEcF
-Cf]=G]7SB+EV1>FEqhDF-:<\AU&<0@;p:D!-E:(EfpcXP#Zpn<+g>^Eb'B-Blmp-E+*6fH\t$Q
-!!&1OB6@X'A8GghFDu/>L]ETTH]i;[F^]<$Ch74#E,Tf\DJ+*#Eb'B.A9;LJ!G?O`Eb&utAor<
-;Df[%6F^]<$GA1T0BSZ_Q2Ne*(CM.cuEb'B.A9;LJDJ+*#Eb&ipBkM+$M#NPqP(dOk@<,n&Bk2
-=!+D5h*Eb&ipBkM+$M#NPqP(f'sI?IQBF^]<$EbT0"FDu/>L]ETTH]i;[F^]<$EbT0"FDu/>+F
-'%MB6@X'A9V`uFD-i:B6@X'A9)BsBQSN=Df[%6F^]<$BOtmjBQT%3OuAI(P&"]Q@<,n&Bk2=!+
-D5h*Eb&ipBkM+$M#NPqP(dOk@<,n&Bk2=!P&=oT@<,mlASGdjFGTpZ2NicWVgX_-I?IQm9p.Mb
-Oq*X2061WACh[cu@<.MjP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2
-!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/renlinear 0.0 0
+% --REQUIRES preamble raiseerror--
+%%BeginResource: uk.co.terryburton.bwipp renlinear 0.0 2015050900 76908 76502
+%%BeginData: 237 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+begin
+/renlinear {
+%
+ 20 dict begin % Confine variables to local scope
+%
+ /args exch def % We are given some arguments
+%
+ % Default options
+ /sbs [] def
+ /bhs [] def
+ /bbs [] def
+ /txt [] def
+ /barcolor (unset) def
+ /includetext false def
+ /textcolor (unset) def
+ /textxalign (unset) def
+ /textyalign (unset) def
+ /textfont (Courier) def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset 0 def
+ /textgaps 0 def
+ /alttext () def
+ /bordercolor (unset) def
+ /backgroundcolor (unset) def
+ /inkspread 0.15 def
+ /width 0 def
+ /barratio 1 def
+ /spaceratio 1 def
+ /showborder false def
+ /borderleft 10 def
+ /borderright 10 def
+ /bordertop 1 def
+ /borderbottom 1 def
+ /borderwidth 0.5 def
+ /guardwhitespace false def
+ /guardleftpos 0 def
+ /guardleftypos 0 def
+ /guardrightpos 0 def
+ /guardrightypos 0 def
+ /guardwidth 6 def
+ /guardheight 7 def
+%
+ % Apply the renderer options and the user options
+ args {def} forall
+ opt {def} forall
+%
+ /barcolor barcolor cvlit def
+ /textcolor textcolor cvlit def
+ /textxalign textxalign cvlit def
+ /textyalign textyalign cvlit def
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /textgaps textgaps cvr def
+ /alttext alttext cvlit def
+ /bordercolor bordercolor cvlit def
+ /backgroundcolor backgroundcolor cvlit def
+ /inkspread inkspread cvr def
+ /width width cvr def
+ /barratio barratio cvr def
+ /spaceratio spaceratio cvr def
+ /borderleft borderleft cvr def
+ /borderright borderright cvr def
+ /bordertop bordertop cvr def
+ /borderbottom borderbottom cvr def
+ /borderwidth borderwidth cvr def
+ /guardleftpos guardleftpos cvr def
+ /guardleftypos guardleftypos cvr def
+ /guardrightpos guardrightpos cvr def
+ /guardrightypos guardrightypos cvr def
+ /guardwidth guardwidth cvr def
+ /guardheight guardheight cvr def
+%
+ % Create bar elements and put them into the bars array
+ /bars sbs length 1 add 2 idiv array def
+ /x 0.00 def /maxh 0 def
+ 0 1 sbs length 1 add 2 idiv 2 mul 2 sub {
+ /i exch def
+ i 2 mod 0 eq { % i is even
+ /d sbs i get barratio mul barratio sub 1 add def % d=digit*r-r+1
+ sbs i get 0 ne {
+ /h bhs i 2 idiv get 72 mul def % Height from bhs
+ /c d 2 div x add def % Centre of the bar = x + d/2
+ /y bbs i 2 idiv get 72 mul def % Baseline from bbs
+ /w d inkspread sub def % bar width = digit - inkspread
+ bars i 2 idiv [h c y w] put % Add the bar entry
+ h y add maxh gt {/maxh h y add def} if
+ } {
+ bars i 2 idiv -1 put % Dummy entry
+ } ifelse
+ } {
+ /d sbs i get spaceratio mul spaceratio sub 1 add def % d=digit*r-r+1
+ } ifelse
+ /x x d add def % x+=d
+ } for
+
+ gsave
+
+ currentpoint translate
+
+ % Force symbol to given width
+ width 0 ne {
+ width 72 mul x div 1 scale
+ } if
+
+ % Set RGB or CMYK color depending on length of given hex string
+ /setanycolor {
+ /anycolor exch def
+ anycolor length 6 eq {
+ (< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor
+ } if
+ anycolor length 8 eq {
+ (< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
+ } if
+ } bind def
+
+ % Display the border and background
+ newpath
+ borderleft neg borderbottom neg moveto
+ x borderleft add borderright add 0 rlineto
+ 0 maxh borderbottom add bordertop add rlineto
+ x borderleft add borderright add neg 0 rlineto
+ 0 maxh borderbottom add bordertop add neg rlineto
+ closepath
+ backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
+ showborder {
+ gsave
+ bordercolor (unset) ne { bordercolor setanycolor } if
+ borderwidth setlinewidth stroke
+ grestore
+ } if
+
+ % Display the bars for elements in the bars array
+ gsave
+ 0 setlinecap
+ barcolor (unset) ne { barcolor setanycolor } if
+ bars {
+ dup -1 ne {
+ aload pop newpath setlinewidth moveto 0 exch rlineto stroke
+ } {
+ pop
+ } ifelse
+ } forall
+ grestore
+
+ % Display the text for elements in the text array
+ textcolor (unset) ne { textcolor setanycolor } if
+ includetext {
+ textxalign (unset) eq textyalign (unset) eq and alttext () eq and {
+ /s 0 def /fn () def
+ txt {
+ {} forall
+ 2 copy s ne exch fn ne or {
+ 2 copy /s exch def /fn exch def
+ exch findfont exch scalefont setfont
+ } {
+ pop pop
+ } ifelse
+ moveto show
+ } forall
+ } {
+ textfont findfont textsize scalefont setfont
+ alttext () eq {
+ /txt [ txt { 0 get {} forall } forall ] def
+ /tstr txt length string def
+ 0 1 txt length 1 sub { dup txt exch get tstr 3 1 roll put } for
+ } {
+ /tstr alttext def
+ } ifelse
+
+ % Find true ascent of font
+ tstr length 0 eq {
+ 0
+ } {
+ gsave
+ newpath 0 0 moveto (0) false charpath pathbbox
+ 4 1 roll pop pop pop
+ grestore
+ currentfont /PaintType known {currentfont /PaintType get 2 eq} {false} ifelse
+ currentfont /StrokeWidth known and {
+ currentfont /StrokeWidth get 2 div 0 exch
+ currentfont /FontMatrix get dtransform
+ dup mul exch dup mul add sqrt
+ add
+ } if
+ } ifelse
+ /textascent exch def
+ /textwidth tstr stringwidth pop tstr length 1 sub textgaps mul add def
+
+ /textxpos textxoffset x textwidth sub 2 div add def
+ textxalign (left) eq { /textxpos textxoffset def } if
+ textxalign (right) eq { /textxpos x textxoffset sub textwidth sub def } if
+ textxalign (offleft) eq { /textxpos textwidth textxoffset add neg def } if
+ textxalign (offright) eq { /textxpos x textxoffset add def } if
+ textxalign (justify) eq textwidth x lt and {
+ /textxpos 0 def
+ /textgaps x textwidth sub tstr length 1 sub div def
+ } if
+ /textypos textyoffset textascent add 1 add neg def
+ textyalign (above) eq { /textypos textyoffset maxh add 1 add def } if
+ textyalign (center) eq { /textypos textyoffset maxh textascent sub 2 div add def } if
+ textxpos textypos moveto textgaps 0 tstr ashow
+ } ifelse
+ } if
+
+ % Display the guard elements
+ guardwhitespace {
+ 0.75 setlinewidth
+ guardleftpos 0 ne {
+ newpath
+ guardleftpos neg guardwidth add guardleftypos guardwidth 2 div add moveto
+ guardwidth neg guardheight -2 div rlineto
+ guardwidth guardheight -2 div rlineto
+ stroke
+ } if
+ guardrightpos 0 ne {
+ newpath
+ guardrightpos x add guardwidth sub guardrightypos guardheight 2 div add moveto
+ guardwidth guardheight -2 div rlineto
+ guardwidth neg guardheight -2 div rlineto
+ stroke
+ } if
+ } if
+
+ grestore
+
+ end
+
+} bind def
+/renlinear dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END RENDERER renlinear--
% --BEGIN RENDERER renmatrix--
-%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 0 0 0
-%%BeginData: 24 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D Ops 'bASu ?nF E2)?H \`B!
-23JD%@<-"%P!5$b 06_,@ FD- I2O u"b) AS Gdj FGKs\1 G< 6VCi=? S"a
-+^(ATX(k04J@"CM .[+F` (`" Des ? 4NW jQC F(K HV1LY< :F *j'+I? I0?
-E--Gi1OYEX06_,@ FD)e@ Bk2 =!O tV tS 05+ p2B 4uB0BO tm jBQTCj Ou"
-b$Des?4+Cf>+DfV !mOu "b# @: O( cEc 6)< A7K OoDf
-Qt0@:O(cEc6)<A7 KOoD f V! mO u"b 1Bm =k^+ E2%>G
-_cWg2NeW7/;ORpC m$S-E+ sQ< 3 $;E JE +sQA 3$< 0SG^5HgH\_ ZMP(R&'1Pc$
-e!H;atH&)KaWI$: 4P!5$b E+s Q <3$< 0SG^ )1j Bp*:OBm=\A E+sQA+DI!TE
-+sQAP"_$aI?I,SE +sQ<+E 2%> F#]= =055 99F *)FFE+sQ<P %'4QP#@I>Ou
- %moL]MI/G]T$WL ]N[<H S9)r 5*@^9 D.dp 3EZ f(P#a/)A!g 4Fa98EY*#AJ
-u"P%p/ZAU&0W/9# <JF!, 1[99O +S!Kq \UP "76IATV?uH "1c/DfU1X@;
-^@#Des?4P!5$b@; ^@#Des? 4P%'4O P!+/P #Ws 4P+<VdL5)9 K-V32^Z3/@T
-DDL#`1Ci=?WH'0qG5C8+bs,o9gP"Ch-I?IQ<DL#`1Ci=?W@Yb;Q4aW1r4<Pah+<VdL+?kSgP,4
-<ZOuS6u@;^@#Des?4P'N3GP!=;J!<83?I?I0bPC8TnI?G)'1QkLr.$C]g89\cYFD-hRLe)2jBk
-M+$P&-;>ME'"m(Q(3"[hk3CMEcUdEf)j([hk3;MEcUdEf*)2q/VX.ME'"m(Q(G,q/VX.OqqM8@
-r#^tDfor.@rH1%EfL<GDKBB2P&5Q/:1@XACM.[+F`(`"Des?4+EM+9@;^@#Des?4P!Y=+I?IQ>
-Des?4NWjQCF(KHVD0oc2Ci=>:F(KH%DL#`1Ci=?BP#QC7G^(?MBm=nGFE2M8+Bot-Bm=lY!/LV
-oBm=odDMS:3Bm=nG?$d].D.dp3Eda*PP"h*"I?G)'1G<c[DJ`g(EbTc]30If*F_`U>D_?-CEcQ
-G7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?
-IP~>
-% uk.co.terryburton.bwipp/renmatrix 0.0 0
+% --REQUIRES preamble raiseerror--
+%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2015050900 54074 54076
+%%BeginData: 66 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+begin
+/renmatrix {
+
+ 20 dict begin
+
+ /args exch def
+
+ % Default options
+ /width 1 def
+ /height 1 def
+ /barcolor (unset) def
+ /backgroundcolor (unset) def
+
+ % Apply the renderer options and the user options
+ args {def} forall
+ opt {def} forall
+
+ /width width cvr def
+ /height height cvr def
+ /barcolor barcolor cvlit def
+ /backgroundcolor backgroundcolor cvlit def
+
+ % Set RGB or CMYK color depending on length of given hex string
+ /setanycolor {
+ /anycolor exch def
+ anycolor length 6 eq {
+ (< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor
+ } if
+ anycolor length 8 eq {
+ (< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
+ } if
+ } bind def
+
+ % Draw the image
+ gsave
+ currentpoint translate
+ width pixx div 72 mul height pixy div 72 mul scale
+ 0 0 moveto pixx 0 lineto pixx pixy lineto 0 pixy lineto closepath
+ backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
+ barcolor (unset) ne { barcolor setanycolor } if
+ /xyget {pixx mul add get} bind def
+ newpath
+ 0 1 pixs length 1 sub {
+ dup pixx mod /x exch def
+ pixx idiv /y exch def
+ pixs x y xyget 1 eq {
+ x pixy y sub 1 sub moveto
+ 0 1 rlineto
+ 1 0 rlineto
+ 0 -1 rlineto
+ -1 0 rlineto
+ closepath
+ } if
+ } for
+ fill
+ grestore
+
+ end
+
+} bind def
+/renmatrix dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END RENDERER renmatrix--
% --BEGIN RENDERER renmaximatrix--
-%%BeginResource: uk.co.terryburton.bwipp renmaximatrix 0.0 0 0 0
-%%BeginData: 16 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D Ops 'bASu ?nG \M#'F E2)?
-H\`B!23JD%@<-"% P!5$b @<- "%H ]g15 P" BS2 FF00,I ?I 0b:6I# gXb
-o@cV;m^uP)G2^!! !"V58 2Cl P-& \ ;G] S4p 3%o N>5):8 CC 6CA+H' 1@I
-*g0Ea1O4cXP%odQ P!+/: I=! )]M E_ (@ !0R A2P #[;\H' 5. a5@(e2 P&-
-:sL]E;s'@;/jL5N _G!! %nj PL +` @Kn o_d ^D" tBP(
-ecX!!!"V^6?olP( ecX! ! !" V5 *O? AP( e\lM E_d$I
-?K;A^An66ME[6NI ?K;I(6 V"4 P "Cg TL ^o;. ?+@ M(582ClL]E /1BT`O^(5NH
-X6!_"4MEe-?`J+D ,L]ESB Oqs 3 IP&H -dME tOX ]8AiX`GLD2 L&ktN"d0XW%
-Z3PX\@[V`2c<V0! GI8hOp 7'b P!Y= ML^o ;.? +@M(5\Jo?L ]E/1BT`O^(5
-NHX6!_"4MEm+WDM A1*L] ESBO qs3IP "h*" I?G )'1G<c[DJ` g,Bl.:#EbTc
-]30If*F_`U>D_?- CEcQG 7F`MS BDD#C BBl J#6A7]@eDI mj"F)Q2A@qC
-gGOuY1:ATVm"@r# drB9KiQ P'(hWF DtYuC M@[ !I?IP~>
-% uk.co.terryburton.bwipp/renmaximatrix 0.0 0
+% --REQUIRES preamble raiseerror--
+%%BeginResource: uk.co.terryburton.bwipp renmaximatrix 0.0 2015050900 55426 55272
+%%BeginData: 79 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+begin
+/renmaximatrix {
+
+ 20 dict begin
+
+ /args exch def % We are given some arguments
+
+ % Default options
+ /barcolor (unset) def
+ /backgroundcolor (unset) def
+
+ % Apply the renderer options and the user options
+ args {def} forall
+ opt {def} forall
+
+ /barcolor barcolor cvlit def
+ /backgroundcolor backgroundcolor cvlit def
+
+ % Set RGB or CMYK color depending on length of given hex string
+ /setanycolor {
+ /anycolor exch def
+ anycolor length 6 eq {
+ (< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor
+ } if
+ anycolor length 8 eq {
+ (< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
+ } if
+ } bind def
+
+ gsave
+
+ currentpoint translate
+
+ 2.4945 dup scale % from 1pt to 1.88mm
+
+ 0 0 moveto 30 0 lineto 30 29 lineto 0 29 lineto closepath
+ backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
+ barcolor (unset) ne { barcolor setanycolor } if
+
+ 0.5 0.5774 translate
+
+ newpath
+ pixs {
+ dup
+ /x exch 30 mod def
+ /y exch 30 idiv def
+ y 2 mod 0 eq {x} {x 0.5 add} ifelse
+ 32 y sub 0.8661 mul
+ moveto
+ 0 0.5774 rmoveto
+ -0.5 -0.2887 rlineto
+ 0 -0.5774 rlineto
+ 0.5 -0.2887 rlineto
+ 0.5 0.2887 rlineto
+ 0 0.5774 rlineto
+ -0.5 0.2887 rlineto
+ closepath
+ } forall
+ fill
+
+ % Plot the locator symbol
+ newpath 14 13.8576 0.5774 0 360 arc closepath
+ 14 13.8576 1.3359 360 0 arcn closepath fill
+ newpath 14 13.8576 2.1058 0 360 arc closepath
+ 14 13.8576 2.8644 360 0 arcn closepath fill
+ newpath 14 13.8576 3.6229 0 360 arc closepath
+ 14 13.8576 4.3814 360 0 arcn closepath fill
+
+ grestore
+
+ end
+
+} bind def
+/renmaximatrix dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END RENDERER renmaximatrix--
@@ -200,46 +477,143 @@ gGOuY1:ATVm"@r# drB9KiQ P'(hWF DtYuC M@[ !I?IP~>
% --EXAM: 90200
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean5 0.0 0 0 0
-%%BeginData: 38 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04eR02 1( ,nOu8C 305
-kfOBl@m1P!5$b04 J@1@r Gmh P!5 $ b04 ]!= FC] E#G9CL +C ia0N1G <H[
-@r-9uATVL.F<G1( Cia0N 1G< i]G ][ P9 DKM #aO u"b5AU &< <BmO?H %$E
-D"FCf]=G].2+F(K HL!0 T,k FC f] =H# I;, F(K HR"a
-+^(ATX(k05+p2B4 uCE5 ; P) OO u%# qFD 5Z2F -<^[F
-*)G:DJ+':E+P1qH \_]c23 JDe E -,f 4D KC/f X(G dVF(LLtH]g XBP#RT(P%'T
-NOthst4d(eHEckr V4aW>D P!5 % OP!5 $bI= %,/ FE2M8Ou%NL <IL$AOrfcH0
-5kfOBl@m1P!5$bI ?IQJE- ,f4 DKC/ f1OY EX0 6CcMFCoH/F <G[:G][P9DK
-M$nOu"b5AU&<<Bm O>5FC f]=F (or3O tVtS 05+ p2B4uB0BOt mjBQTCjOu"b
-5AU&<ADe<U&ATT& :AU&< ADe<U &ATX( gOu %2kG]\4LAn H*qFH-NIDKB
-B2P!+.FFCf]=H#I ;,F(KG9 BOtmjB QT&$P &,p TOo^_%I=!V hAU&<BDe<U&
-ATT&:AU&<BDe<U&ATX(gOu%NL<FTBW@rGmhP%'4NP&5P!@WuO*E%Y^1DDbm3A5$QPB67gI*CW7
-h/N"YZA7R91DBNe=F*&O6AKWiQA8,[jFE9)gEa`['AS#n&DfV"*I?IQ=@<,jrA7^+N3/B8OAs,
-?63Kd4%EdKHKGA2#8/nJI/2.C!)6YKnK@:OCjEfMG75u'!h+CSek/T5MLD09oA+Cf>-FCAm$+E
-).6Gp$X3B5)I/0/%?SBldisEcQ)=P!=AX<.0p$04f$2F!+\I">_ef0ocAl1,:SE">V\e16)Jl1
-bg_F">MVe16)Jl1,CYF">MVc1l_\n1GLYF">MYd1QDSo0ekGD"#2McNWLpi?'6us@UX:eBOPq&
-NX@Hp1,CaE2E*TUOu"b.Bl\64Ec#6(F!+\I"Yh_c0JJLj0eb=90TH;k0JG48NWh-k0JG5A"Y_Y
-c0JJLj0JG490TH;j0JG49NWh*k0JP8A"Y_Yb0JSRk0JG480jTqu04S[,@r$..D281T1Pc$e!Jg
-l*056S5Ou"b#@<,jk@<*K"@<,jrA7ZltP"UTbP,XU#BnuhRC5;kQ4aShlBOt[hF*2=B@UX:eBO
-Pq;"-RJ1BOt[hF*2>_!Ko6eHS8lBARfLsF_r71@<,jk@<./1P&+WAARfLsF`!9BOu%NL<IL$$0
-4S[,@r$..D'3>%ARfLsF_upAP%p.905YEDEc5u8@;m?+Bl\64Ec#6(F!+t+ARfLsF`!:7Ou"b4
-@WR>IP,4<t06DG\L]rqJOu%moL]N;7HS9)r5*@^9L]ET$HZNY;L]D"(@rmG5P"Us`I=$$EF!,1
-Q!KsF<#*NeY#Ef+!DI[aD$^+/GH$tiU@UX:eDe*E%BnueQ9O_FN@q]:kF-8_MNKSFI@P;G5A9a
-8$Ou&8DP'&EhDIXf#DI[`1Bl7I+P"UroD/"$2DfT]'E$/kX98G<c4aShnDI[KoDBNM.A!1;a1G
-<c[G%GQ$+D#G#Ch7LIV33Wj!/LYeDI[KoDMS=VWI$:5P!5$b04S[(EZeq2@j#NL99M)OAThX&@
-j#?#@r,^o+DR(=L]N[<@q]:kP'DD<82"Ol@j#f'G%GQ$Ou%NL<-)Mi+DHW9P&,pVOo]-3A!2+Z
-G]Y'B+Bost@<,jrA7ZltL]NZ4BnueQWJCkDCkrO`!H_mtFEh_9AohO*Oo]Z9G]\4LAnH*qF<G[
-:G][P9DKI"CAU&<<BmO>5?'9G\P"7\t061WA0/%?WDJX$)ARTU4F(025>9IurF*i]sP,Wkm8R3
-uYBQG;#L_+oHASGdjFFB=)>q]YrF!+\C&:935I?K4g+DG_'Cis9"FCf]=HS9JcF<G[MFFB<O05
-kfO+E)4@Bl@m105#E9Eb'3)B4uC+Df^^A05#E9Eb'3)B4uC4E,Te?FCf]=H#I;,F(KHL"Hid=@
-W-9tATDm2E/4ib4s4BSDKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X204eR023Kq^A1r(@/n8fP
-FCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(
-eDJ+B\;u~>
-% uk.co.terryburton.bwipp/ean5 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp ean5 0.0 2015050900 62897 62576
+%%BeginData: 135 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/ean5 {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textxoffset 0 def
+ /textyoffset (unset) def
+ /height 0.7 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /height height cvr def
+ /textxoffset textxoffset cvr def
+ textyoffset (unset) eq {
+ /textyoffset height 72 mul 1 add def
+ } {
+ /textyoffset textyoffset cvr def
+ } ifelse
+
+ % Validate input
+ barcode length 5 ne {
+ /bwipp.ean5badLength (EAN-5 add-on must be 5 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.ean5badCharacter (EAN-5 add-on must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (112) (11)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ % Determine the mirror map based on mod 10 checksum
+ /mirrormaps
+ [ (11000) (10100) (10010) (10001) (01100)
+ (00110) (00011) (01010) (01001) (00101)
+ ] def
+ /checksum 0 def
+ 0 1 4 {
+ /i exch def
+ /barchar barcode i get 48 sub def
+ i 2 mod 0 eq {
+ /checksum barchar 3 mul checksum add def
+ } {
+ /checksum barchar 9 mul checksum add def
+ } ifelse
+ } for
+ /checksum checksum 10 mod def
+ /mirrormap mirrormaps checksum get def
+
+ /sbs 31 string def
+ /txt 5 array def
+
+ 0 1 4 {
+ /i exch def
+
+ % Prefix with either a start character or separator character
+ i 0 eq {
+ sbs 0 encs 10 get putinterval
+ } {
+ sbs i 1 sub 6 mul 7 add encs 11 get putinterval
+ } ifelse
+
+ % Lookup the encoding for the barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ mirrormap i get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ /enclen enc length def
+ /revenc enclen string def
+ 0 1 enclen 1 sub {
+ /j exch def
+ /char enc j get def
+ revenc enclen j sub 1 sub char put
+ } for
+ /enc revenc def
+ } if
+ sbs i 6 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 9 mul 13 add textxoffset add textyoffset textfont textsize] put
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [16{height}repeat]
+ /bbs [16{0}repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ /guardrightpos 10
+ /guardrightypos textyoffset 4 add
+ /bordertop 10
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/ean5 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean5--
@@ -250,42 +624,128 @@ eDJ+B\;u~>
% --EXAM: 05
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean2 0.0 0 0 0
-%%BeginData: 34 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04eR01 4+ fkOu8C 305
-kfOBl@m1P!5$b04 J@1@r Gmh P!5 $ b04 ]!= FC] E#G9CL +C ia0N1G <H[
-@r-9uATVL.F<G1( Cia0N 1G< i]G ][ P9 DKM #aO u"b5AU &< <BmO?H %$E
-D"FCf]=G].2+F(K HL!0 T,k FC f] =H# I;, F(K HR"a
-+^(ATX(k05+p2B4 uCE5 ; P) OO u%# qFD 5Z2F -<^[F
-*)G:DJ+':E+P1qH \_]c23 JDe E -,f 4D KC/f X(G dVF(LLtH]g XBP#RT(P%'T
-NOthst4d(eHEckr V4aW>D P!5 % OP!5 $bI= %,/ FE2M8Ou%NL <IL$AOrfcH0
-5kfOBl@m1P!5$bI ?IQJE- ,f4 DKC/ f1OY EX0 6CcMFCoH/F <G[:G][P9DK
-M$nOu"b5AU&<<Bm O>5FC f]=F (or3O tVtS 05+ p2B4uB0BOt mjBQTCjOu"b
-5AU&<ADe<U&ATT& :AU&< ADe<U &ATX( gOu %2kG]\4LAn H*qFH-NIDKB
-B2P!+.FFCf]=H#I ;,F(KG9 BOtmjB QT&$P &,p TOo^_%I=!V hAU&<BDe<U&
-ATT&:AU&<BDe<U&ATX(gOu%NL<FTBW@rGmhP%'4KP&5P!@WuO*E%Y^1DDG[0A5$QPB67gI*CW7
-h/M\GWA7R91DBNe=F*&O6AKW`NA8,[jFE9)gEa`['AS#n&DfV"*I?IQ=@<,jrA7^+N3/B8OAs,
-?63Kd4%EdKHKGA2#8/nJI/11F[&6YKnK@:OCjEfMG75u'!e+CSek/T5MLD09oA+Cf>-FCAm$+E
-).6Gp$X3B5)I/0/%?SBldisEcQ)=P!=AX<.0p$04f$2F!+\I">_ef0ocAl1,:SE">V\e16)Jl1
-bg_F">MVe16)Jl1,CYF">MVc1l_\n1GLYF">MYd1QDSo0ekGD"#2McNWLpi?'6us@UX:eBOPq&
-NX@Hp1,CaE2E*TUOu"b.Bl\64Ec#6(+Bsj-0JJLg0JSRh0eeUh0elrV@UX:eDe*F8!/L]>9Tgr
-_"HmM_99M(aF(03H%?dQN1G<ipFGL!]$'I*#!/LZ3!IHJ6P!5$bBnubP4aV6ZF,0g-DI[aD$Be
-&FH$t$\@WNZ+L]N[<L^'#YL^0(DASu"!L^TA=P'MJ=<FTBW@rGmh+DHW4P"]=nEarckEc[C-P)
-YWIP%$(YDIe!T5*@^bFcpl#ASu!#ASu"!+DG_(G`k^_1MpiHEc5u8@;m?'P"UTcP!+.FASu!oA
-SrW%DI\i=Ou"b3AThX&@j#?#@r,^oP,4<tL]E53ASu!oAT!;)P,Wd]C6CcD1G<6O@<*K%DIXf(
-P"UroEb0E*DIXf#DI[KoDBN\WWJCS<WFKUMEftZqP"76;DIXf0AThX&A!/WrP#QL3F!,1Q#*Ne
-Y"-N[rDI\iTFEhmMBcpV&@UX:eDe*E%BnueQ9PK:`P,X6DP&,p`Oo]Z9G]\1KAnH*qFHQZHAU&
-<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?I,`4>1_dDD*Y`ASu<uDIm6s06:TD+Bot0@W
-QmP0TrD`P"Aq4@VBg*>DN]7BOtmjBQSZcK3^->@WNYrL^\Wd!.C#_>p*j!@r-9uATVL.FF,Z_G
-]Y'MG]\@s<%i0/F<GL@FD5Z2F"_0K@<,n!BkM+$E,TfR$86%7@<,n!BkM+$H#R\C+EV1>FEqe:
-AohO*L]ikA04Jj?A7]e'DfCL>5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<<JDDIA
-7P%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H
-"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/ean2 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp ean2 0.0 2015050900 61678 61382
+%%BeginData: 120 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/ean2 {
+
+ 20 dict begin
+
+ /options exch def % We are given an options string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textxoffset 0 def
+ /textyoffset (unset) def
+ /height 0.7 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /height height cvr def
+ /textxoffset textxoffset cvr def
+ textyoffset (unset) eq {
+ /textyoffset height 72 mul 1 add def
+ } {
+ /textyoffset textyoffset cvr def
+ } ifelse
+
+ % Validate input
+ barcode length 2 ne {
+ /bwipp.ean2badLength (EAN-2 add-on must be 2 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.ean2badCharacter (EAN-2 add-on must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (112) (11)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ % Determine the mirror map based on mod 4 checksum
+ /mirrormap [(00) (01) (10) (11)] barcode 0 2 getinterval cvi 4 mod get def
+
+ /sbs 13 string def
+ /txt 2 array def
+
+ 0 1 1 {
+ /i exch def
+
+ % Prefix with either a start character or separator character
+ i 0 eq {
+ sbs 0 encs 10 get putinterval
+ } {
+ sbs i 1 sub 6 mul 7 add encs 11 get putinterval
+ } ifelse
+
+ % Lookup the encoding for the barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ mirrormap i get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ /enclen enc length def
+ /revenc enclen string def
+ 0 1 enclen 1 sub {
+ /j exch def
+ /char enc j get def
+ revenc enclen j sub 1 sub char put
+ } for
+ /enc revenc def
+ } if
+ sbs i 6 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 9 mul 13 add textxoffset add textyoffset textfont textsize] put
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [12{height}repeat]
+ /bbs [12{0}repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ /guardrightpos 10
+ /guardrightypos textyoffset 4 add
+ /bordertop 10
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/ean2 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean2--
@@ -293,80 +753,226 @@ AohO*L]ikA04Jj?A7]e'DfCL>5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<<JDDIA
% --BEGIN ENCODER ean13--
% --REQUIRES preamble raiseerror renlinear ean5 ean2--
% --DESC: EAN-13
-% --EXAM: 2071473968010
+% --EXAM: 2112345678900
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean13 0.0 0 0 0
-%%BeginData: 69 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04eR01 6O UMF_`U >D_
-?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% niO DDd S:06M% _@ rEuAAT Dg:
-@Wc^5Df.1:GA2#8 P1l(D Ops 'U@ ;[ eU H\` B!2 3JD%Df Bf 4Df0WZ 5*@
-]T@UX:eDe*FB5*@ ]TA8 c@- A9 )+ &+D ,%u F(L Lj05
-5<6Cis9"FCf]=+D ,%uF ( LL j0 6Cc MFC oH/F HOb01
-G<i]G]\"@H=_m@O u"b5AU &<A D e<U &A TWb% Ou" b5AU&<BDe< U&ATWb+Ou"b
-)ASGdjFGKs\1G<0 IA8c?u @;q # 2Ou" b"A7 TUr FCf]=AoDR/ NWjQCF(KHV1
-G<0IA8c@-AU&<<B mO?N"a +^( ATX( k04A C%D f0Z.G]\1KA nH*qFH-NIDK
-BB2Ou"b"A7TUrFC f]=H# I;,F (KHR" a+^( ATX (kDfBf4Df0 WZY:js=EbTE
-(FEqh:P!+/J!Ko= '%<$3 -Bl@m 1H]kF A@; L!rP!+/T5^ eepOuSV6P,4
-<rNWD;+NHB2`AWf 3'OtDh\ P')pOO u%N5O tCc rF_-^lI?IT YP%BdtOuY16
-E-,f4DKCt)Ou%NL<,Z_tBl@m1H]g15P"@<KAU&</Df0Y>FCf]=AoDR/OtDhQ06CcMFE;/BAKZ)
-+G]\"@H=`6mOu"b5AU&<ADe<U&ATT&:AU&<ADe<U&ATX(gOu"b5AU&<BDe<U&ATT&:AU&<BDe<
-U&ATX(gOu"b)ASGdjF<G7.BkM+$OtVtS04AC%Df02rE$/S"A8c?u@;qA_Ou$NWA8c@-AU&</Df
-0ZW"a+^(ATX)PHS8f<A8c@-AU&</Df0Y>@:WneDKKH7FCoH/FHS5=1OYEc@:WneDKKH7FE;/BA
-W?q:DKBB2P&5P!@:WneDKKH7FE;/BAKYDlA8c@-AU&<<BmO?R09S,>P#Pk#A8c@-AU&<ADe<U&
-ATWq9F`)83FHUKf04AC%Df0Z.G]\1KAnH*qF<G"&A8c@-AU&<ADe<U&ATX(gOu%NL<+0<JDf0Z
-.G]\4LAnH*qFH-NIDKBB2P&5P!@:WneDKKH7FEqe:AohO*+CSekDf0Z.G]\4LAnH*qFHS;?1OY
-Ec@UX:eDe*F>!?dPbHS8i:Eas#uAWf6?1Qll6@:WneDN[2H1OXV5FY@06A8c@G!0T-dP#Yt"Ea
-s#uAWgMY%$GI:@<,jrA7^p5L^fMaOp$+b@WuO*E%Y^1DD<qV@:W&CDJ+')NZLVT:+\1V+Dl7BF
-<G%(+>GVoDfQsT1E^4BB5)I/0/%?SBldisEcQ)=P!=AX<+99V@rGmhH]g@E0Tp%25);4^:m,jG
-04K->E,[F@@;[eU@UWe7BOPpi@ru:&NZU\U:+\1V+Dl7BF<G(3DKK<$DBNk8Cj@.6BkM.%F"]1
-e@;0doATDg0EfrY8P#Qjm8RZ.?Df1_IL]ETT@:WneDN\Ib!g7D`"CYhODf1_IL]rrYOp$+b@Wu
-O*E%Y^1DD<qV@:VZ7A5@):ASu.&BT=H+A7R91DBNP0EZde::+\1V+Dl7BF<G%(+>P'XEZd4^A8
-,[jFE9)gEa`['AS#n&DfV"*I?IP_E+*:5%?dQN1G<6OARfLsF_up7Ou%moL]N;>HS9)r5*@]T@
-UX:eBOPp(@UX:eDe*E%Bp),F0TrDu1MMXHP%odQP!+.F@q]F`CNFW8+C\c"@q]:k+Cf(r@r$..
-D3=p_1OXU'@q]F`CNFW8+C\c"@q]:kL]`fV@q]F`CNFW8Oo^_%I?ITYP"769BOt[hF*2>U$=da
-\@r$..D28O^C6GQP$Bf.e1Lad5@rGmhP%'4VP!+/$@<,jrA7^Q*P"T:uARfLsF_upgOo^__HS8
-iPBlJ#DARTI21Lad'6YL%@CIDlLBlo@]8T&$VEcP`$F<F"<:+\1V+Cf(r@r!2tBkM.%+E2@>G%
-kJuA1oTV@;0doATDg0EfrY8P#Qjm<,c8VL]CmmEas#uAWh=X@:Y0&@q]F`CNFW8LbOtmP'AWh@
-<,jrA7Zm&@:YNW04f$2F!+\I">_ef0ocAl1,:SE">V\e16)Jl1bg_F">MVe16)Jl1,CYF">MVc
-1l_\n1GLYF">MYd1QDSo0ekGD"#2MbNWh-l0ekDC"#2Mb?'6us@UX:eBOPq&NX@Hp1,CaE2E*T
-UOu"b.Bl\64Ec#6(F!+\I"u%_b0JG2@"u%_c0JP;B"u%_c0eb>B"u%_c0ekAB"u%bc0JP;B"u%
-bd0JG5A"u%bd0eb;A"u%bc0eb>B"u%bc0ekAB"u%bd0JP7eOu"b4@WR>eP,4<t06DG\L^fLROu
- %/gF,0g-DI[aD$Be&FGqX#KEcQ)=D..B+D/"$2DfT]'E-!.2@<,jrA7^PsP"UTbP,XU;Ou%3)
-FGKp$+C\c"@rGmhL]E53P"]t/G]\1KAnH*qF<G[:G]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>
-5?'9Gg!Jgc4#(&";P!5$b@UX:eDe*E%BnueQ9O_FN@q]:kF-8_MNKSFI@P;G5A9a8$Ou&8DP'&
-EhDIXf#DI[`1Bl7I+P"UroD/"$2DfT]'E$/kN!KsFF98G<c4aShnDI[KoDBNM.A!1;a1G<c[G%
-GQ$+D#G#Ch7LIV33Wj!/LYeDI[KoDMS=VWI$:5P!5$b04S[(EZeq2@j#NL99M)OAThX&@j#?#@
-r,^o+DR(=L]N[<@q]:kP'DD<82"Ol@j#f'G%GQ$Ou%NL<-)Mi+DHW4P,X6?P&,pVOo]-3A!2+Z
-G]Y'B+Bost@<,jrA7ZltL]NZ4BnueQWJCeBCkrRa!H_mtFEh_9AohO*Oo]Z9G]\4LAnH*qF<G[
-:G][P9DKI"CAU&<<BmO>5?'9G\P"9Y'F,1'W!KsF<"HmSW"-N[rDI[aD$^+/GH&)]]!Jh/2056
-S5Ou$QUEas#uAKY]C!Kp,c@<,jk@<-FP5*CngFcp2eBl7I+P!5$bP')q104f$2+D#G#F!,17A9
-a81Ou%/gF!,1Q!KsF<"HmSW#a,4"DI\iTFEhmMBcpV&@UX:eDe*E%BnueQ9PK:`P,X6BP&,peO
-o]Z9G]\1KAnH*qFHQZHAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?I-B@WR>bASu"!
-L^]G>P'J^%@WNYr+EM"5H\aA=WI9q$?'7!XDI[L*A7]joG]\9c@VBg*>9ITjBkM+$+D>>#B4uC
-C%!uZ!BkM+$MERAqRZaXuP(RFZBkM+$+D>>#B4uCC%!uZ!BkM+$MERAqRZaXuP(RFZBkM+$+D>
->#B4uB0?'6us@UaC$>DN98!/M&1MERAqRXL?OL]E52L^\Wf4dh_,I?K5=!/LV\Ou%N504JU9+B
-sXCHY?u)B4uC8P(R&'1G<3HF!+\C*d`\CI?K4gOu"b5G]Y'4+C1-dI?IS`B6@X'A9)BsBQSN=D
-f^^7Ou$NWA8c@G!0V2G04AC%DfBf>+?Vb>A8c@-A9)+&+EVXHAM7b8@r-9uATVL.F<G[GF_*4>
-ASGdjF<G7.BkM+$MEVoGRZaX'FCf]=G].2+F(KG9@:WneDKKH7FEh_9AohO*NWjQCF(KHVD0o]
- %A8c@-AU&<ADe<U&ATW?ILgOS$A8c?u@;qA1I?IT=A7TUrFCf]=H#I;,F(KHR"a+^(ATX)PHS
-9JPG]\4LAnH*qF<G"&A8c@-AU&<BDe<U&ATW?`<%i?)G]\"@H=\4-A7TUrFCf]=F(or3NWjQCF
-(KHVD0o]%A8c@-AU&<<BmO?=HQ[EAG]\"@H=_Mf<A/H*G][P9DKI"0A7TUrFCf]=AoDR/NWjQC
-F(KHVD0o]%A8c@-AU&</Df0ZFHQ[EAG][P9DKL;i<B`U01LXg)Df1_IL]W`&HXUGqDf-\+A7TU
-tFE9)gARTI3P!=AX<+0<JDf1_IL]rr)HXUGqDf-\+A7TUtFE9)gARTI6P!=AX<%hZjA7KOgAWf
-6?1G<fYF!+[0F(03R!g7\7A7TUrB45a%@:WnYDe*F>"*7pmP"Ur>P'(&n1G<3NF!+[0@VBhG!g
-7\7A7T1gA7^c'@VBhG97)OZR@0M,WI9q$?'6us@UaC$>9IBaF-6TfF^\fk@rGmhNWWa"F-91CM
-ERAqRZ[]"P"ArB1G<ipF<Fd1FEhnj!g7\7A7T1gA7^c'FEhnj99K@>F^:.d05#E9Eb'3)B4uC4
-E,Te?BOtmjBQT&$P&,pYP,XU#I?IPl4>1_dDD*Y`ASu<uDIm6s06:TD+EM"504JU9+C]#*04JC
-3+C\f$06DG\+EVjM05kfO+E)4@Bl@m105#E9Eb'3)B4uC+Df^^A05#E9Eb'3)B4uC4E,Te?B6@
-X'A9)BsBQSN=Df[R@DfTB"Eais/FDl#P"[5*mA8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou
-"b&@;[eUOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@
-:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/ean13 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp ean13 0.0 2015050900 84460 87603
+%%BeginData: 215 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /ean2 dup /uk.co.terryburton.bwipp findresource put
+dup /ean5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/ean13 {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textxoffset -10 def
+ /textyoffset -4 def
+ /height 1 def
+ /addongap 12 def
+ /addontextfont (unset) def
+ /addontextsize (unset) def
+ /addontextxoffset (unset) def
+ /addontextyoffset (unset) def
+
+ % Parse the input options, either a string or a dict
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+ /addongap addongap cvr def
+ addontextfont (unset) ne {/addontextfont addontextfont cvlit def} if
+ addontextsize (unset) ne {/addontextsize addontextsize cvr def} if
+ addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
+ addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
+
+ % Split off the addon
+ barcode ( ) search {
+ /barcode exch def
+ pop
+ /addon exch def
+ } {
+ pop
+ /addon () def
+ } ifelse
+
+ % Validate the input
+ barcode length 12 ne barcode length 13 ne and {
+ /bwipp.ean13badLength (EAN-13 must be 12 or 13 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.ean13badCharacter (EAN-13 must contain only digits) //raiseerror exec
+ } if
+ } forall
+ addon length 0 ne addon length 2 ne and addon length 5 ne and {
+ /bwipp.ean13badAddOnLength (Add-on for EAN-13 must be 2 or 5 digits) //raiseerror exec
+ } if
+
+ % Add checksum digit
+ /pad 13 string def
+ /checksum 0 def
+ 0 1 11 {
+ /i exch def
+ /barchar barcode i get 48 sub def
+ i 2 mod 0 eq {
+ /checksum barchar checksum add def
+ } {
+ /checksum barchar 3 mul checksum add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 13 eq {
+ barcode 12 get checksum 48 add ne {
+ /bwipp.ean13badCheckDigit (Incorrect EAN-13 check digit provided) //raiseerror exec
+ } if
+ } if
+ pad 0 barcode putinterval % Add barcode to the start of the pad
+ pad 12 checksum 48 add put % Put ascii for checksum at end of pad
+ /barcode pad def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (111) (11111) (111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ % Digits to mirror on left side
+ /mirrormaps
+ [ (000000) (001011) (001101) (001110) (010011)
+ (011001) (011100) (010101) (010110) (011010)
+ ] def
+
+ /sbs 59 string def
+ /txt 13 array def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ % First digit - determine mirrormap by this and show before guard bars
+ /mirrormap mirrormaps barcode 0 get 48 sub get def
+ txt 0 [barcode 0 1 getinterval textxoffset textyoffset textfont textsize] put
+
+ % Left side - performs mirroring
+ 1 1 6 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ /enclen enc length def
+ /revenc enclen string def
+ 0 1 enclen 1 sub {
+ /j exch def
+ /char enc j get def
+ revenc enclen j sub 1 sub char put
+ } for
+ /enc revenc def
+ } if
+ sbs i 1 sub 4 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 7 mul 14 add textxoffset add textyoffset textfont textsize] put
+ } for
+
+ % Put the middle character
+ sbs 7 1 sub 4 mul 3 add encs 11 get putinterval
+
+ % Right side
+ 7 1 12 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 1 sub 4 mul 8 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 7 mul 18 add textxoffset add textyoffset textfont textsize] put
+ } for
+
+ % Put the end character
+ sbs 56 encs 12 get putinterval
+
+ /sbs [sbs {48 sub} forall] def
+ includetext {
+ /bhs [height height 12{height .075 sub}repeat height height 12{height .075 sub}repeat height height] def
+ /bbs [0 0 12{.075}repeat 0 0 12{.075}repeat 0 0] def
+ } {
+ /bhs [30{height}repeat] def
+ /bbs [30{0}repeat] def
+ /txt [] def
+ } ifelse
+ /guardrightypos 0 def
+
+ % Append the addon
+ addon () ne {
+ /addopts <<
+ /dontdraw true
+ /includetext true
+ /height height 0.15 sub
+ /textxoffset addontextxoffset (unset) ne {addontextxoffset} {95 addongap add} ifelse
+ addontextyoffset (unset) ne {/textyoffset addontextyoffset} if
+ /textsize addontextsize (unset) ne {addontextsize} {textsize} ifelse
+ /textfont addontextfont (unset) ne {addontextfont} {textfont} ifelse
+ >> def
+ addon length 2 eq {addon addopts //ean2 exec} if
+ addon length 5 eq {addon addopts //ean5 exec} if
+ /addcode exch def
+ /sbs [sbs aload pop addongap addcode (sbs) get aload pop] def
+ /bhs [bhs aload pop addcode (bhs) get {.075 sub} forall] def
+ /bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def
+ /txt [txt aload pop addcode (txt) get aload pop] def
+ /guardrightypos height 72 mul 6 sub def
+ } if
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs bhs
+ /bbs bbs
+ /txt txt
+ /opt options
+ /guardrightpos 10
+ /guardrightypos guardrightypos
+ /borderbottom 5
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/ean13 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean13--
@@ -374,74 +980,207 @@ X'A9)BsBQSN=Df[R@DfTB"Eais/FDl#P"[5*mA8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou
% --BEGIN ENCODER ean8--
% --REQUIRES preamble raiseerror renlinear ean5 ean2--
% --DESC: EAN-8
-% --EXAM: 01335583
-% --EXOP: includetext guardwhitespace height=0.5
+% --EXAM: 02345673
+% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean8 0.0 0 0 0
-%%BeginData: 63 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04eR01 6O UMF_`U >D_
-?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% niO DDd S:06M% _@ rEuAAT Dg:
-@Wc^5Df.1:GA2#8 P1l(D Ops 'U@ ;\ &O L_Q "0O ps'_E- ,f 4DKCt) Ou"
-b#@<,jrA7^ofOu" b%Df 0Z- Ea a/ 7Am oLs AWe i&Bl
-7EsF_#'*AU&;>Am oLsA W ei &F Cf] =Ao DR/O irnD0
-6CcMFE;/BAV^bX1 G<i]G] \1K A nH* qF GL'_ 1G< i]G]\4LAnH *qFGTjX1G<E
-QBkM+$L]NYp04AC %Df02r E/4 p c1G< 0IA8 c@- AU&</Df0ZW "a+^(ATX(k0
-4AC%Df0Z.G]\"@H =`*?F` )83 FHSF 5@:W neD KKH7FEh_9A ohO*NWjQCF(
-KHV1G<0IA8c@-AU &<BDe <U&A TWq9F `)83 FHS FuE-,f4DKC uE06;5UBl7R
-*H#R>X4aVtcOu8C 3DfBf 4Df0W CP,i2 'Ci a0N4aW>WI? IQm30Ia6V33
-Qn!BlU*FE2M8P!+ /T/Wr;\ FcnqO1 OXV5/ Tc# UAWeitP#Zp nAWe*t3A5;i
-FD5Z2F-8_M1OYEcDfBf4Df0WCOu%NL8M>0sG][P9DKI"CAU&</Df0Z[/WqnCFCf]=F(or3+EV1
->FE;/BAWe^01G<i]G]\1KAnH*qF<G[:G]\1KAnH*qFHS;?1G<i]G]\4LAnH*qF<G[:G]\4LAnH
-*qFHS;?1G<EQBkM+$+D>>#B4uCM09S+E@:WneDJ*Bs+CSekDf02rE0;l;1LXg)Df0Z.G][P9DK
-LmBF`)83FHUKf04AC%Df0Z.G][P9DKI"0A7TUrFCf]=AoDR/OtDhQI?IQ<A7TUrFCf]=F(or3N
-WjQCF(KHVD0mpEA7TUrFCf]=F(or3+CSekDf0Z.G]\"@H=`6mOu%NL<+0<JDf0Z.G]\1KAnH*q
-FH-NIDKBB2P&5P!@:WneDKKH7FEh_9AohO*+CSekDf0Z.G]\1KAnH*qFHS;?1OYEc@:WneDKKH
-7FEqe:AohO*NWjQCF(KHVD0mpEA7TUrFCf]=H#I;,F(KG9@:WneDKKH7FEqe:AohO*OtVtSI?I
-Q=@<,jrA7^c%+Hh_204J@1@rGmhP!5$bP'&EdA7TUrP!5$bI=%-"04AC%Df1R8Ou%NL<FTBW@r
-GmhP%'4PP&4Z:Eas#uAWgMY#a0%f"FDe2GA2#8/nJI/3+?<,9P&*SFD-[R76s[#3$<'\F*&O6A
-KWoSDfQs[+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\o@UX:eDe*F+OuS7OP%Kk@LcLVpP&bn&@WuO*
-E%Y^1DE)*6A4($=Ea`I"ATEeP76s[#3$<'\F*&O7Df0Z*Bl5&3DJXS@A8,[jFE9)gEa`['AS#n
-&DfV"*I?IQXP"B(mA8c@K@Yb#ID.-scDf1_IL]W`VOp#3(A8c@K@Yb2ND3>$K04K->E,[F@@;\
-&6@:VZ7A5@):ASu.&BT=E*A7R91DBNP0EZde::+\FJD09oA+C\n)1*CLU+>k9PBkM.%F"]1e@;
-0doATDg0EfrY8P#O)R@:Y0"P,4<t04S[,@r$..D281T1Pc$e!Jgr,056S5Ou"b#@<,jk@<*K"@
-<,jrA7ZltP"UTbP,XU#BnuhRC5;kQD0mpGBOt[hF*2=B@UX:eBOPp(@q]F`CNFW8Oo^_%I=!VW
-BOt[hF*2=B@UX:eBOPq;"-RJ1BOt[hF*2>_!Ko6eP#Zpn82"IdARfLsF_upA@q]F`CNFW8L^K;
-[P,X6EP%p.9@UX:eDe*FB@Yb;Q4aUXHEas#uAV^SS94MXH@r$..D29m/!Kq;H04K->E,[F@@;\
-&6@:V`=ARfLDBkM.%N[.26@rHC.ARfg)76s[#3$;^EARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS
-#n&DfV"*I?IQXP#QC/A;C4p@<,jrA7^pLE+*:5#@hFY@r$..D29m/!Kq[\@UX:eDe*E%E+*:?1
-G<<W@ribsNW_-n0en[k1,:U>NW_*l1,=jm0f1U>NW_'k1GXsn0etO>NW_'k0f4mn0f(O>NW_'l
-0f+gm1GLU>NWV!j0ocDl0ekC;NWV!j0jTqu04J@1@q]:kF,gS]0etOA2)[BQ3Kc0OF(03H/!?`
-l1G<ipFGL3c$'I)c@WR>*ASu"!L^K;<P'Mi`L]N;6HS9)r5*@^2@<,jrA7ZltL]NZ4@UX:eBOP
-q&P!5%gP')ps055<7G`k7R1QlmDFY@<D@j#?#@ric,DIe!T99M)P@WNZ+L]ilWL]`e@ASu"@H$
-":Q+DDs&+C\c"@rGmh+DHW4P"]SG#EinFAU&<ADe<U&ATX(9FCf]=H#I;,F(KG9FCf]=AoDR/+
-EV1>FE;/BAKY9AG^Y`GF(03H"Gd2DCkr1V!G-.YF,13e99ORV"Gd)7#CA+<P!5$b@UX:eDe*E%
-BnueQ9O_FN@q]:kF-8_MNKSFI@P;G5A9a8$Ou&8DP'&EhDIXf#DI[`1Bl7I+P"UroF(025Bnun
-TCkr@[!G-.YP'M.oF<G9?>9IB`Eas#uAKY]C!Kp,jL^0)ZFCf]=G].2+F(KHV!JglA!H_mtFEq
-e:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD<8986]LaZhP@rmG7P"Us`06:TD+Bot0@WQmP0T
-rD`P"ArB1ML`:Cis9"FCf]=HS8iAF!+[0BOtmjBQPA1ASGdjFGL3LBOtmjBQT+pR@0M,WI9q^B
-OtmjBQPA1ASGdjFGL3LBOtmjBQT+pR@0M,WI9q^BOtmjBQPA1ASGdjF<FkP1G<3HF!+\C!/LW2
-#^_FlR@0LlP(SPjL]E5:H\stSR@8PeK89M`!*taDI=!VVBQG;#L_b>NASGdjFFB=)?'6us@UaC
-$>DO&AL]DjdK3aWr06DG\+BosoOu%NL<A/!-@<,n!BkM+$H#R\CL]ESo@:WneDN4^[D0mpEA7T
-UtFE8Qe4>15`DKKE0@<Wi9EckqHBl7EsF_#'*AU&;>FE2M805+p2B4uB0BOtmjBQT+q)4?qVW@
-r@)G]\1KAnH*qF<G"&A8c@-AU&<ADe<U&ATWq9F`)83FHUKf@:WneDKKH7FEh_9AohO*I=$c;@
-:WneDJ*BsOo]uo<FKEKDf0Z.G]\4LAnH*qFH-NIDKBB2P&5P!FCf]=H#I;,F(KG9@:WneDKKH7
-FEqe:AohO*I?IP_FCf]=F(or3+CSekDf0Z.G]\"@H=`*?F`)83FHUKf@:WneDKKH7FE;/BAUSn
-JFCf]=F(or3I?IS`FCf]=AoDR/+CSekDf0Z.G][P9DKLmBF`)83FHUKf@:WneDKKH7FCoH/FFA
-KYFCf]=AoDR/I?ISo5*@^1A7TUrP%'4KP!+/#A7TUr+CSekDfBf>0/$mFDDIA>I?IQ<A7TUrP%
-'4NP!+/#A7TUr+CSekDfBf>0/$mFDDdSAI?IP_@:WnYDe*FB5*@]TF(025>9IurF-6TfF^\fkD
-f02rE$/S"A7KOgAW?k6@WR]*Oogeh?'6us@VBg*>9IBgF-6TfF^\fk@rGmhNWWa(F-91CMERAq
-RZaXuP"ArB1G<3HF!+[0@UaDA!g7\7A7T1gA7^c'@UaDA97)OZR@0M,!I^,&?'6usFEhmM>9J$
-4FHQ]gF^\fk@rGmhNWXBJFHT:[!g7\3Ou"b(F^]<$EbT0"FEqhDF!,.-BkM+$Le*\FL^'$AOu%
-NL<'38rEb0,A061WACh[cu@<+#B@WNZ5@WO23BQG;*BQGh9@WNZ$@WO2EG]Y'MG]YTWE-*4@E-
-,f4DK@IDF^]<$Ch74#E,TfR$86%7@<,n!BkM+$E,TfR$86%7@<,n!BkM+$H#R\C+D5h*Eb'3)B
-4uC4E,TeN@W-9tATD6uFEDG<L]ot++CoD.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$ARTI9
-OuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-
-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/ean8 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp ean8 0.0 2015050900 81954 85278
+%%BeginData: 196 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /ean2 dup /uk.co.terryburton.bwipp findresource put
+dup /ean5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/ean8 {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textxoffset 4 def
+ /textyoffset -4 def
+ /height 1 def
+ /addongap 12 def
+ /addontextfont (unset) def
+ /addontextsize (unset) def
+ /addontextxoffset (unset) def
+ /addontextyoffset (unset) def
+
+ % Parse the input options, either a string or a dict
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+ /addongap addongap cvr def
+ addontextfont (unset) ne {/addontextfont addontextfont cvlit def} if
+ addontextsize (unset) ne {/addontextsize addontextsize cvr def} if
+ addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
+ addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
+
+ % Split off the addon
+ barcode ( ) search {
+ /barcode exch def
+ pop
+ /addon exch def
+ } {
+ pop
+ /addon () def
+ } ifelse
+
+ % Validate the input
+ barcode length 7 ne barcode length 8 ne and {
+ /bwipp.ean8badLength (EAN-8 must be 7 or 8 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.ean8badCharacter (EAN-8 must contain only digits) //raiseerror exec
+ } if
+ } forall
+ addon length 0 ne addon length 2 ne and addon length 5 ne and {
+ /bwipp.ean8badAddOnLength (Add-on for EAN-8 must be 2 or 5 digits) //raiseerror exec
+ } if
+
+ % Add checksum digit
+ /pad 8 string def
+ /checksum 0 def
+ 0 1 6 {
+ /i exch def
+ /barchar barcode i get 48 sub def
+ i 2 mod 0 ne {
+ /checksum barchar checksum add def
+ } {
+ /checksum barchar 3 mul checksum add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 8 eq {
+ barcode 7 get checksum 48 add ne {
+ /bwipp.ean8badCheckDigit (Incorrect EAN-8 check digit provided) //raiseerror exec
+ } if
+ } if
+ pad 0 barcode putinterval % Add barcode to the start of the pad
+ pad 7 checksum 48 add put % Put ascii for checksum at end of pad
+ /barcode pad def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (111) (11111) (111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /sbs 43 string def
+ /txt 8 array def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ % Left side
+ 0 1 3 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 7 mul textxoffset add textyoffset textfont textsize] put
+ } for
+
+ % Put the middle character
+ sbs 4 4 mul 3 add encs 11 get putinterval
+
+ % Right side
+ 4 1 7 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul 8 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 7 mul textxoffset add 4 add textyoffset textfont textsize] put
+ } for
+
+ % Put the end character
+ sbs 40 encs 12 get putinterval
+
+ /sbs [sbs {48 sub} forall] def
+ includetext {
+ /bhs [height height 8{height .075 sub}repeat height height 8{height .075 sub}repeat height height] def
+ /bbs [0 0 8{.075}repeat 0 0 8{.075}repeat 0 0] def
+ } {
+ /bhs [22{height}repeat] def
+ /bbs [22{0}repeat] def
+ /txt [] def
+ } ifelse
+ /guardrightypos 0 def
+
+ % Append the addon
+ addon () ne {
+ /addopts <<
+ /dontdraw true
+ /includetext true
+ /height height 0.15 sub
+ /textxoffset addontextxoffset (unset) ne {addontextxoffset} {67 addongap add} ifelse
+ addontextyoffset (unset) ne {/textyoffset addontextyoffset} if
+ /textsize addontextsize (unset) ne {addontextsize} {textsize} ifelse
+ /textfont addontextfont (unset) ne {addontextfont} {textfont} ifelse
+ >> def
+ addon length 2 eq {addon addopts //ean2 exec} if
+ addon length 5 eq {addon addopts //ean5 exec} if
+ /addcode exch def
+ /sbs [sbs aload pop addongap addcode (sbs) get aload pop] def
+ /bhs [bhs aload pop addcode (bhs) get {.075 sub} forall] def
+ /bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def
+ /txt [txt aload pop addcode (txt) get aload pop] def
+ /guardrightypos height 72 mul 6 sub def
+ } if
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs bhs
+ /bbs bbs
+ /txt txt
+ /opt options
+ /guardleftpos 10
+ /guardrightpos 10
+ /guardrightypos guardrightypos
+ /borderbottom 5
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/ean8 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean8--
@@ -449,76 +1188,259 @@ DH]iMmATVm"@r#drB75qB~>
% --BEGIN ENCODER upca--
% --REQUIRES preamble raiseerror renlinear ean5 ean2--
% --DESC: UPC-A
-% --EXAM: 488581014973
+% --EXAM: 416000336108
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp upca 0.0 0 0 0
-%%BeginData: 65 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04eR01 6O UMF_`U >D_
-?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% niO DDd S:06M% _@ rEuAAT Dg:
-@Wc^5Df.1:GA2#8 P1l(D Ops 'eE +< =' L_Q "0O ps'_E- ,f 4DKCt) Ou"
-b#@<,jrA7^ofOu" b%Df 0Z- Ea a/ 7Am oLs AWe i&Bl
-7EsF_#'*AU&;>Am oLsA W ei &F Cf] =Ao DR/O irnD0
-6CcMFE;/BAV^bX1 G<i]G] \1K A nH* qF GTaU 1G< i]G]\4LAnH *qFGTjX1G<E
-QBkM+$L]NYp04AC %Df02r E/4 p c1G< 0IA8 c@- AU&</Df0ZW "a+^(ATX(k0
-4AC%Df0Z.G]\"@H =`*?F` )83 FHSF 5@:W neD KKH7FEh_9A ohO*NWjQCF(
-KHV1G<0IA8c@-AU &<BDe <U&A TWq9F `)83 FHS FuE-,f4DKC uE06;5UBl7R
-*H#R>X4aVtcOu8C 3DfBf 4Df0W CP,i2 'Ci a0N4aW>WI? IQm30Ia6V33
-Qn!BlU*FE2M8P!+ /T/Wr;\ FcnqO1 OXV5/ Tc# UAWeitP#Zp nAWe*t3A5;i
-FD5Z2F-8_M1OYEcDfBf4Df0WCOu%NL8M>0sG][P9DKI"CAU&</Df0Z[/WqnCFCf]=F(or3+EV1
->FE;/BAWe^01G<i]G]\1KAnH*qF<G[:G]\1KAnH*qFHS;?1G<i]G]\4LAnH*qF<G[:G]\4LAnH
-*qFHS;?1G<EQBkM+$+D>>#B4uCM09S+E@:WneDJ*Bs+CSekDf02rE0;l;1LXg)Df0Z.G][P9DK
-LmBF`)83FHUKf04AC%Df0Z.G][P9DKI"0A7TUrFCf]=AoDR/OtDhQI?IQ<A7TUrFCf]=F(or3N
-WjQCF(KHVD0mpEA7TUrFCf]=F(or3+CSekDf0Z.G]\"@H=`6mOu%NL<+0<JDf0Z.G]\1KAnH*q
-FH-NIDKBB2P&5P!@:WneDKKH7FEh_9AohO*+CSekDf0Z.G]\1KAnH*qFHS;?1OYEc@:WneDKKH
-7FEqe:AohO*NWjQCF(KHVD0mpEA7TUrFCf]=H#I;,F(KG9@:WneDKKH7FEqe:AohO*OtVtSI?I
-Q=@<,jrA7^c%+Hh_204J@1@rGmhP!5$bP'&EdA7TUrP!5$bI=%-"04AC%Df1R8Ou%NL<FTBW@r
-GmhP%'4TP&4Z:Eas#uAWgMY%$GIj"FDe2GA2#8/p2,C6"4859P&*SFD-[T<DZ%75p1#eF*&O6A
-KW]^+E)9C0esk^BkM.%F"]1e@;0doATDg0EfrY8P#Pn!Eas#uAUBS"LbP!(P!4[^P#.<^HS8iP
-BlJ#DF`:hV@UWe7BOPpi@ru:&NZM1s6S1SHD09oA+Cf>-FCAm$+E).6Gp$X3B5)I/0/%?SBldi
-sEcQ)=P!=AX<.0p$@:WneDN\Ib!0V2-A7TUrP%'4KP&6?b@:WneDN\Ib"d3_c"FDe2GA2#8/p2
-,C6"4856"FM%DG4VZB67gI-:)0Q/T5MLAoD]4<DZ%75p1#eF*&O6AKW`NDfQsX+Co2!BlnDL06
-1K8F(Jp'Ec5u]5CJ\o05t?1L^]HCOu"b$BOt[hF*2>U!0T-o!/LZ3$@=F?P!5$b04J@1@q]:k+
-C\c"@rGmh+DI!3LbP!kOu$g.!g7;S!0V2G04S[,@r$..D'3>%ARfLsF_r71@<,jk@<.M3Ou%N5
-04S[,@r$..D'3>%ARfLsF_r71@<,jk@<./+P&-9^Ou%NL<IL$$04S[,@r$..D28O/BOt[hF*2>
-U$Bf.eWJCnEC6CA^@<,jrA7^p5L^]G0HX^E(@rGmhL^TA=@q]F`CNFW8LbOtmP&5P!@WuO*E%Z
-9P@mOR4A4($A@r"JHB5)IJ,Y;l`DfTl0@rrhn:dZg#+Cf(r@r!2tBkM.%+E2@>G%kJuA1oTV@;
-0doATDg0EfrY8P#Qjm<,c8VL]CmmEas#uAWh=X@:Y0%@q]F`CNFW8LbOtmP'AWh@<,jrA7Zm&@
-:YNW04f$2F!+\I">_ef0ocAl1,:SE">V\e16)Jl1bg_F">MVe16)Jl1,CYF">MVc1l_\n1GLYF
-">MYd1QDSo0ekGD"#2MbNWh-l0ekDC"#2Mb?'6us@UX:eBOPq&NX@Hp1,CaE2E*TUOu"b4@WR>
-eP,4<t06DG\L^]FQOu%/gF,0g-DI[aD$Be&FH&)HV!Jgo+056S5Ou$QUEas#uAKY]C!Kp,c@<,
-jk@<-FP5*CngFcp2eBl7I+P!5$bP')q104f$2+D#G#F!,17A9a81Ou%/gF!,1Q"HmSW"-N[rDI
-\iTBnubP4aV9qFGKp$+C\c"@rGmhL]E53P"]t/G]\1KAnH*qF<G[:G]\4LAnH*qF<G[:G][P9D
-KI"CAU&<<BmO?H!g9NgP'DD%FEhmMBcpV&@UX:eDe*E%BnueQ9PK:fP&,p^Oo]Z9G]\1KAnH*q
-FHQZHAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?ITYP"9Y'F,1$V"HmSW"-N[rDI[a
-D$^+/GH&)Z\!Jh,1056S5Ou$QUEas#uAKY]C!Kp,c@<,jk@<-FP5*CngFcp2eBl7I+P!5$bP')
-q104f$2+D#G#F!,17A9a81Ou%/gF!,1Q"HmSW#a,4"DI\iTBo!.[4aV9qFGL</+C\c"@rGmhL^
-T">P"]t/G]\1KAnH*qFGORm!H_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=_m6P,V`MG^Xp\G
-]Y'B+Bost@<,jrA7ZltL]NZ4Bo!"WCij65FEh_9AohO*Oo^@LOo]Z9G]\4LAnH*qF<G[:G][P9
-DKI"CAU&<<BmO>5?'9G\P#Zpn8986]LcAs`@rmG7P"Us`06:TD+Bot0@WQmP0TrD`P"ArB1ML`
-:Cis9"FCf]=HS8iAF!+\C"FFfnBkM+$I?K5=$@?GtBkM+$MERAqRZaXuP(RFZBkM+$+D>>#B4u
-CC$@?GtBkM+$MERAqRZaXuP(SPnHY?u)B4uC8P(R&'1G<3HF!+\C!/LW2!/LW2$@@XnR@0LlP(
-SPjL]E5<H\stSR@8PeK89M`!/LW2!*taDI=!VVBQG;#L`UnVASGdjFFB=)?'6us@UaC$>DO>IL
-]DjdK3aWr06DG\+BosoOu%NL<A/!-@<,n!BkM+$H#R\CL]ESo@:WneDN4^[D0mpEA7TUtFE8Qe
-4>15`DKKE0@<Wi9EckqHBl7EsF_#'*AU&;>FE2M805+p2B4uB0BOtmjBQT+q)4?qVW@r@)G]\1
-KAnH*qF<G"&A8c@-AU&<ADe<U&ATWq9F`)83FHUKf@:WneDKKH7FEh_9AohO*I=$cW@:WneDJ*
-BsOo]uo<FKEKDf0Z.G]\4LAnH*qFH-NIDKBB2P&5P!FCf]=H#I;,F(KG9@:WneDKKH7FEqe:Ao
-hO*I?IP_FCf]=F(or3+CSekDf0Z.G]\"@H=`*?F`)83FHUKf@:WneDKKH7FE;/BAUSnJFCf]=F
-(or3I?IS`FCf]=AoDR/+CSekDf0Z.G][P9DKLmBF`)83FHUKf@:WneDKKH7FCoH/FFAKYFCf]=
-AoDR/I?ISo5*@^1A7TUrP%'4KP!+/#A7TUr+CSekDfBf>0/$mFDDIA>I?IQ<A7TUrP%'4NP!+/
-#A7TUr+CSekDfBf>0/$mFDDdSAI?IP_@:WnYDe*FB5*@]TF(025>9IurF-6TfF^\fkDf02rE$/
-S"A7KOgAW?k6@WR]*Oogeh?'6us@VBg*>9IBgF-6TfF^\fk@rGmhNWWa(F-91CMERAqRZaXuP"
-ArB1G<3HF!+[0@UaDA!g7\7A7T1gA7^c'@UaDA97)OZR@0M,!I^,&?'6usFEhmM>9J$4FHQ]gF
-^\fk@rGmhNWXBJFHT:[!g7\3Ou"b(F^]<$EbT0"FEqhDF!,.-BkM+$Le*\FL^'$AOu%NL<'38r
-Eb0,A061WACh[cu@<+#B@WNZ5@WO23BQG;*BQGh9@WNZ$@WO2EG]Y'MG]YTWE-*4@E-,f4DK@I
-DF^]<$EbT0"FDu/>L^GeJF^]<$EbT0"FEqhDF!,+<@<,n!BkM+$H#R\C04Jj?A7]djDfg)>D28
-?Z4s4BSDKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X206M5D@?NU5A1r(@/n8fPFCfK5H"(o:FD
-l%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/upca 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp upca 0.0 2015050900 89013 91922
+%%BeginData: 248 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /ean2 dup /uk.co.terryburton.bwipp findresource put
+dup /ean5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/upca {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textxoffset -7 def
+ /textyoffset -4 def
+ /height 1 def
+ /addongap 12 def
+ /addontextfont (unset) def
+ /addontextsize (unset) def
+ /addontextxoffset (unset) def
+ /addontextyoffset (unset) def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+ /addongap addongap cvr def
+ addontextfont (unset) ne {/addontextfont addontextfont cvlit def} if
+ addontextsize (unset) ne {/addontextsize addontextsize cvr def} if
+ addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
+ addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
+
+ % Split off the addon
+ barcode ( ) search {
+ /barcode exch def
+ pop
+ /addon exch def
+ } {
+ pop
+ /addon () def
+ } ifelse
+
+ % Expand a given UPC-E
+ barcode length 7 eq barcode length 8 eq or {
+ % Validate the input
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.upcAupcEbadCharacter (UPC-E must contain only digits) //raiseerror exec
+ } if
+ } forall
+ barcode 0 get dup 48 ne exch 49 ne and {
+ /bwipp.upcAupcEbadNumberSystem (UPC-E must have number system 0 or 1) //raiseerror exec
+ } if
+ 1 { % Common exit
+ /upcacode barcode length 8 eq {12} {11} ifelse string def
+ barcode 6 get 48 sub 2 le {
+ upcacode 0 barcode 0 3 getinterval putinterval
+ upcacode 3 barcode 6 1 getinterval putinterval
+ upcacode 4 (0000) putinterval
+ upcacode 8 barcode 3 3 getinterval putinterval
+ exit
+ } if
+ barcode 6 get 48 sub 3 eq {
+ upcacode 0 barcode 0 4 getinterval putinterval
+ upcacode 4 (00000) putinterval
+ upcacode 9 barcode 4 2 getinterval putinterval
+ exit
+ } if
+ barcode 6 get 48 sub 4 eq {
+ upcacode 0 barcode 0 5 getinterval putinterval
+ upcacode 5 (00000) putinterval
+ upcacode 10 barcode 5 1 getinterval putinterval
+ exit
+ } if
+ barcode 6 get 48 sub 5 ge {
+ upcacode 0 barcode 0 6 getinterval putinterval
+ upcacode 6 (0000) putinterval
+ upcacode 10 barcode 6 1 getinterval putinterval
+ exit
+ } if
+ } repeat
+ barcode length 8 eq {
+ upcacode 11 barcode 7 1 getinterval putinterval
+ } if
+ /barcode upcacode def
+ } if
+
+ % Validate the input
+ barcode length 11 ne barcode length 12 ne and {
+ /bwipp.upcAbadLength (UPC-A must be 11 or 12 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.upcAbadCharacter (UPC-A must contain only digits) //raiseerror exec
+ } if
+ } forall
+ addon length 0 ne addon length 2 ne and addon length 5 ne and {
+ /bwipp.upcAbadAddOnLength (Add-on for UPC-A must be 2 or 5 digits) //raiseerror exec
+ } if
+
+ % Add checksum digit to barcode
+ /pad 12 string def % Create pad one bigger than barcode
+ /checksum 0 def
+ 0 1 10 {
+ /i exch def
+ /barchar barcode i get 48 sub def
+ i 2 mod 0 ne {
+ /checksum checksum barchar add def
+ } {
+ /checksum checksum barchar 3 mul add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 12 eq {
+ barcode 11 get checksum 48 add ne {
+ /bwipp.upcAbadCheckDigit (Incorrect UPC check digit provided) //raiseerror exec
+ } if
+ } if
+ pad 0 barcode putinterval % Add barcode to the start of the pad
+ pad 11 checksum 48 add put % Put ascii for checksum at end of pad
+ /barcode pad def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (111) (11111) (111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /sbs 59 string def
+ /txt 12 array def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ % Left side
+ 0 1 5 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul 3 add enc putinterval % Put encoded digit into sbs
+ i 0 eq { % First digit is before the guard bars
+ txt 0 [barcode 0 1 getinterval textxoffset textyoffset textfont textsize 2 sub] put
+ } {
+ txt i [barcode i 1 getinterval i 7 mul 11 add textxoffset add textyoffset textfont textsize] put
+ } ifelse
+ } for
+
+ % Put the middle character
+ sbs 6 4 mul 3 add encs 11 get putinterval
+
+ % Right side
+ 6 1 11 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul 8 add enc putinterval % Put encoded digit into sbs
+ i 11 eq { % Last digit is after guard bars
+ txt 11 [barcode 11 1 getinterval textxoffset 103 add textyoffset textfont textsize 2 sub] put
+ } {
+ txt i [barcode i 1 getinterval i 7 mul textxoffset add 15 add textyoffset textfont textsize] put
+ } ifelse
+ } for
+
+ % Put the end character
+ sbs 56 encs 12 get putinterval
+
+ /sbs [sbs {48 sub} forall] def
+ includetext {
+ /bhs [4{height}repeat 10{height .075 sub}repeat height height 10{height .075 sub}repeat 4{height}repeat] def
+ /bbs [0 0 0 0 10{.075}repeat 0 0 10{.075}repeat 0 0 0 0] def
+ } {
+ /bhs [30{height}repeat] def
+ /bbs [30{0}repeat] def
+ /txt [] def
+ } ifelse
+ /guardrightypos 0 def
+
+ % Append the addon
+ addon () ne {
+ /addopts <<
+ /dontdraw true
+ /includetext true
+ /height height 0.15 sub
+ /textxoffset addontextxoffset (unset) ne {addontextxoffset} {95 addongap add} ifelse
+ addontextyoffset (unset) ne {/textyoffset addontextyoffset} if
+ /textsize addontextsize (unset) ne {addontextsize} {textsize} ifelse
+ /textfont addontextfont (unset) ne {addontextfont} {textfont} ifelse
+ >> def
+ addon length 2 eq {addon addopts //ean2 exec} if
+ addon length 5 eq {addon addopts //ean5 exec} if
+ /addcode exch def
+ /sbs [sbs aload pop addongap addcode (sbs) get aload pop] def
+ /bhs [bhs aload pop addcode (bhs) get {.075 sub} forall] def
+ /bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def
+ /txt [txt aload pop addcode (txt) get aload pop] def
+ /guardrightypos height 72 mul 6 sub def
+ } if
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs bhs
+ /bbs bbs
+ /txt txt
+ /opt options
+ /guardrightpos 10
+ /guardrightypos guardrightypos
+ /borderbottom 5
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/upca dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER upca--
@@ -527,86 +1449,297 @@ l%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --REQUIRES preamble raiseerror renlinear ean5 ean2--
% --DESC: UPC-E
% --EXAM: 00123457
-% --EXOP: includetext height=0.4
+% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp upce 0.0 0 0 0
-%%BeginData: 76 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04eR01 6O UMF_`U >D_
-?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% niO DDd S:06M% _@ rEuAAT Dg:
-@Wc^5Df.1:GA2#8 P1l(D Ops 'eE +< I+ L_Q "0O ps'_E- ,f 4DKCt) Ou"
-b#@<,jrA7^ofOu" b%Df 0Z- Ea a/ 7Am oLs AWe i&Bl
-7EsF_#'*AU&;>Am oLsA W ei &F Cf] =Ao DR/O irnD0
-6CcMFE;/BAV^bX1 G<i]G] \1K A nH* qF GTaU 1G< i]G]\4LAnH *qFGTjX1G<E
-QBkM+$L]NYp04AC %Df02r E/4 p c1G< 0IA8 c@- AU&</Df0ZW "a+^(ATX(k0
-4AC%Df0Z.G]\"@H =`*?F` )83 FHSF 5@:W neD KKH7FEh_9A ohO*NWjQCF(
-KHV1G<0IA8c@-AU &<BDe <U&A TWq9F `)83 FHS FuE-,f4DKC uE06;5UBl7R
-*H#R>X4aVtcOu8C 3DfBf 4Df0W CP,i2 'Ci a0N4aW>WI? IQm30Ia6V33
-Qn!BlU*FE2M8P!+ /T/Wr;\ FcnqO1 OXV5/ Tc# UAWeitP#Zp nAWe*t3A5;i
-FD5Z2F-8_M1OYEcDfBf4Df0WCOu%NL8M>0sG][P9DKI"CAU&</Df0Z[/WqnCFCf]=F(or3+EV1
->FE;/BAWe^01G<i]G]\1KAnH*qF<G[:G]\1KAnH*qFHS;?1G<i]G]\4LAnH*qF<G[:G]\4LAnH
-*qFHS;?1G<EQBkM+$+D>>#B4uCM09S+E@:WneDJ*Bs+CSekDf02rE0;l;1LXg)Df0Z.G][P9DK
-LmBF`)83FHUKf04AC%Df0Z.G][P9DKI"0A7TUrFCf]=AoDR/OtDhQI?IQ<A7TUrFCf]=F(or3N
-WjQCF(KHVD0mpEA7TUrFCf]=F(or3+CSekDf0Z.G]\"@H=`6mOu%NL<+0<JDf0Z.G]\1KAnH*q
-FH-NIDKBB2P&5P!@:WneDKKH7FEh_9AohO*+CSekDf0Z.G]\1KAnH*qFHS;?1OYEc@:WneDKKH
-7FEqe:AohO*NWjQCF(KHVD0mpEA7TUrFCf]=H#I;,F(KG9@:WneDKKH7FEqe:AohO*OtVtSI?I
-Q=@<,jrA7^c%+Hh_204J@1@rGmhP!5$bP'&EdA7TUrP!5$bI=%-"04AC%Df1R8Ou%NL<FTBW@r
-GmhP%'4PP&4Z:Eas#uAWgMY#a0%f"FDe2GA2#8/p2,C7:K\99P&*SFD-[R<DZ%773HGiF*&O6A
-KWoSDfQs[+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\o@UX:eDe*F+OuS7OP%Kk@LcLVpP&bn&@WuO*
-E%Z9P@msj8A4($=Ea`I"ATEeP<DZ%773HGiF*&O7Df0Z*Bl5&3DJXS@A8,[jFE9)gEa`['AS#n
-&DfV"*I?IQXP"B(mA8c@K@Yb#ID.-scDf1_IL]W`VOp#3(A8c@K@Yb2ND3>$K04K->E,[FPE+;
-=G@:VZ7A5@):ASu.&BT=E*A7R91DBNP0EZe@Y6S1_LD09oA+C\n)1*CLU+>k9PBkM.%F"]1e@;
-0doATDg0EfrY8P#Pn!Eas#uAV^>L99M8j0Tp:95):qVD3>$K04K->E,[FPE+;=G@:W,UD.7's;
-gEG+ASmGQ<DZ%773HGiF*&O<@<Q3)DKTf*ATAo7H#n(=D'1MTDfQsT0/%?SBldisEcQ)=P!=AX
-<%hg#@ribsNW_-n0en[k1,:U>NW_*l1,=jm0f1U>NW_'k1GXsn0etO>NW_'k0f4mn0f(O>NW_'
-l0f+gm1GLU>NWV!j0ocGm0ekC;0jTqu04J@1@q]:kF,gS]0etOA2)[BQ3Kc0OD/"$2DfT]'E-!
-.+NWq0k0JP::NWq0k0eb=:NWq0k0ek@:NWq0k0ekC:NWq0l0JG49NWq0l0eb:9NWq0l0ek@9NW
-q0l0JP79NWq0l0JP:9NWq0l0eb=9?'6usF`:i!@rGmhNXINp0JG170JG170Sg+"V32^Z1NdYH@
-:O4dAV^=q@<,jrA7^PsP"Us_@UX:eDe*F8#*MW80TrDk!g6u=F`:i!@rGmhL]LsnEas#uAV^AC
-!g66?H$+(9@:O4dAV^Ft@<,jrA7^Q$L]NZ4P'M1h@prkcA7^Q&@UX:eDe*F8",I&B9Tj[LP#Pn
-!Eas#uAV^PR98G9bWJCY>4aV<j@prkcA7^Pt@UX:eDe*F8!Jgi@9Tj[DE+<<dDe*F8$"@=`@rG
-mhL]iM8P"_$aI?IQ=@<,jrA7^Q$P"UTbP,X6?P!+/7E+<<dDe*F8!FfJX@rGmhL]N;7P"_$aF`
-:i!@rGmhL^IU"Eas#uAV^MG!Kp->H$tiT@UX:eDe*F8#*MW80TrDk"d2K)F`:i!@rGmhL]LsnE
-as#uAV^AC"d2QBH$+(9@:O4dAV^\&@<,jrA7^Q$L]NZ4P'MJ=<%h`pARfLsF_up7Ou%moL]N;=
-HS9)r5*@]T@UX:eBOPp(F`:i!@rGmh+DI!3LbP!kOu$g.!g7;S!0V2G04S[,@r$..D'3>%ARfL
-sF_r71@<,jk@<.M3Ou%N504S[,@r$..D'3>%ARfLsF_r71@<,jk@<./+P&-9^Ou%NL<IL$$04S
-[,@r$..D28O/BOt[hF*2>U$Bf.eWJCnEC6CA^@<,jrA7^p5L^9/,HX^E(@rGmhL^0)9@q]F`CN
-FW8LbOtmP&5P!@WuO*E%Z9P@msj8A4($A@r"JHB5)IJ,Y;l`DfTl0@rrhn:dZg'+Cf(r@r!2tB
-kM.%+E2@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm<%i3!A;CMSV33WR@:Y/o@UX:eDe*FBH#R2&
-L^.F'ARfLsF_upgOo^_j04J@1@rGmh+E1b"Ou"b5G]\`IOpR:-FEhn`!*^RT@<,jrA7^PsL]NZ
-4FCf]=G].2+F(KG9FCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAV^DNWEk[305YEDEc5u8@;m
-?+Bl\64Ec#6(F!+t+ARfLsF`!:7Ou$QUEas#uAV^>L98G9b4aShrDK^+ED/"$2DfT]'E0=[nV3
-3Wj!/LYmBl\64Ec#6(P%'4JP,Wd]Bp(ZC1MpiHEc5u8@;m?'P"UTbP!+/+DK^+EBo"L,G^XpQD
-K^+EBo"I+G^Y`TI?I,SD/"$2DfT]'E$/k4G'&m'I?IP_F(03H+d/[b1NR#HL]D"(@rmG5P"Us`
-L]N;4L^&2ZBp(ZC1Lad5@rGmh+DHW4P"]=nEarckEc[C-P)YWIP%$(YDIe!T5*@^bFcpl#ASu!
-#ASu"!+DG_(G`k^_1MpiHEc5u8@;m?'L]N[<P"UTcP!+.FASu!oASrW%DI\i=Ou"b3AThX&@j#
-?#@r,^oP,4<tL]E53ASu!oAT!;)P,Wd]C6CcD1G<6O@<*K%DIXf(P"UroEb0E*DIXf#DI[KoDB
-N\WWJCS<WFKUMEftZqP"76;DIXf0AThX&A!/WrP#QL3F!,1Q!KsF<"HmSW"-N[rDI\iTFEhmMB
-cpV&@UX:eDe*E%BnueQ9PK:`P,X6BP&,p^Oo]Z9G]\1KAnH*qFHQZHAU&<BDe<U&ATT&:AU&</
-Df0Y>FCf]=F(or3+C1.TI?I-CG]\`H>9IB`Eas#uAV^SI!Kp-4#)EMICkr^e!H_mtFEh_9AohO
-*Oo]Z9G]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO?H!g9NgP'D%WF,1cHDI[aD$^+/GGqX5JF!+
-[0F(03;LbP!kI?I0-Ou$fi@r-9uATVL.FF,ZMBQG;#+D>>#B4uB0BOtmjBQT%=HY?u)B4uCE4d
-h_,P,WkmK4nh1B4uB0BOtmjBQPA1ASGdjF<FkP1G<3HF!+\C!/LW2%"!jpR@0LlP(SPjL]E52?
-'7!lHS8iAF!+\C&US2&BkM+$I?K4gOu"b#@WNYrL_4ui!.C#_?'6usFEhmM>9I471OYEd05#E9
-Eb'3)B4uC4E,TfR!0T-HA7TUrNW>5ZHS8f<A8cF/F!*S-04]!=FC]E#G9D!JF_*4?DI[L*A7]j
-oG]Y'MEckqHBOtmjBQPA1ASGdjFG`7"R@9;<06CcMFEh_9AohO*+CSekDf0Z.G]\1KAnH*qFH-
-NIDKBB2P&5PSA7TUrFCf]=G].2+F(KHAH\aIdA7TUrB45bB!I^,2@:WneDKKH7FEqe:AohO*NW
-jQCF(KHVD0mpXAU&<BDe<U&ATT&'A7TUrFCf]=H#I;,F(KHAP#O)VAU&<<BmO>5@:WneDKKH7F
-E;/BAW?q:DKBB2P&5PSA7TUrFCf]=F(or3I=!)YAU&<<BmO?=P#X/WAU&</Df0Y>@:WneDKKH7
-FCoH/FH-NIDKBB2P&5PSA7TUrFCf]=AoDR/I=!)YAU&</Df0ZFP#X\0Ou$NWA8c@K@Yb)K4aUU
-JA8c?.@:WneE--.S04eR016OkMP#Pk#A8c@K@Yb2N4aUUJA8c?.@:WneE--.S04eR023L1PP#O
-)CA7T1gA7^ofOu"b4@WNYr+EM"5Oogeh@:WneDJ*Bs+CSek@rGmhNWX?3F-91Z!g7\3Ou"b#BQ
-G;#+C]#*Oogeh@:WnYDe*F>"(GqbP"U.Z4dh_,P,Wkm8R7K804JC3+Bost@WR\6P'(2DA7KOgA
-W?k%@WR]*H\stSR@99>I?I0-Ou"b5G]Y'4+EVjMOogeh@:WnYDe*F>"*Ad0P"Ur>P'(&n1G<B`
-@<,n!BkM+$H#R\C+D>>#B4uCC8<ReF#*PsK1OYEc4?P9;ASs.SEb0-)Bl7KjE\DKCF!,O5F"_!
-9F!+q*F"_!3F!+q$F"_W[F<G[MF>%QOF<GL@FD5Z2F"_0K@<,n!BkM+$E,TfR$86%7@<,n!BkM
-+$H#R\C+D5h*Eb'3)B4uC4E,TeN@W-9tATD6uFEDG<L]ot++CoD.FC]E#GEQnu061WACh[cu@<
-.N1Ou[rR%[&V$F`:i%OuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DF
-cna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/upce 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp upce 0.0 2015050900 92938 99490
+%%BeginData: 287 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /ean2 dup /uk.co.terryburton.bwipp findresource put
+dup /ean5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/upce {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textxoffset -7 def
+ /textyoffset -4 def
+ /height 1 def
+ /addongap 12 def
+ /addontextfont (unset) def
+ /addontextsize (unset) def
+ /addontextxoffset (unset) def
+ /addontextyoffset (unset) def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+ /addongap addongap cvr def
+ addontextfont (unset) ne {/addontextfont addontextfont cvlit def} if
+ addontextsize (unset) ne {/addontextsize addontextsize cvr def} if
+ addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
+ addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
+
+ % Split off the addon
+ barcode ( ) search {
+ /barcode exch def
+ pop
+ /addon exch def
+ } {
+ pop
+ /addon () def
+ } ifelse
+
+ % Compress a given UPC-A
+ barcode length 11 eq barcode length 12 eq or {
+ % Validate the input
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.upcEupcAbadCharacter (UPC-A must contain only digits) //raiseerror exec
+ } if
+ } forall
+ 1 { % Common exit
+ /upcecode barcode length 12 eq {8} {7} ifelse string def
+ barcode 3 get 48 sub 2 le barcode 4 4 getinterval (0000) eq and {
+ upcecode 0 barcode 0 3 getinterval putinterval
+ upcecode 3 barcode 8 3 getinterval putinterval
+ upcecode 6 barcode 3 1 getinterval putinterval
+ exit
+ } if
+ barcode 4 5 getinterval (00000) eq {
+ upcecode 0 barcode 0 4 getinterval putinterval
+ upcecode 4 barcode 9 2 getinterval putinterval
+ upcecode 6 (3) putinterval
+ exit
+ } if
+ barcode 5 5 getinterval (00000) eq {
+ upcecode 0 barcode 0 5 getinterval putinterval
+ upcecode 5 barcode 10 1 getinterval putinterval
+ upcecode 6 (4) putinterval
+ exit
+ } if
+ barcode 10 get 48 sub 5 ge barcode 6 4 getinterval (0000) eq and {
+ upcecode 0 barcode 0 6 getinterval putinterval
+ upcecode 6 barcode 10 1 getinterval putinterval
+ exit
+ } if
+ /bwipp.upcEupcAnotCompressible (UPC-A cannot be converted to a UPC-E) //raiseerror exec
+ } repeat
+ barcode length 12 eq {
+ upcecode 7 barcode 11 1 getinterval putinterval
+ } if
+ /barcode upcecode def
+ } if
+
+ % Validate the input
+ barcode length 7 ne barcode length 8 ne and {
+ /bwipp.upcEbadLength (UPC-E must be 7 or 8 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.upcEbadCharacter (UPC-E must contain only digits) //raiseerror exec
+ } if
+ } forall
+ addon length 0 ne addon length 2 ne and addon length 5 ne and {
+ /bwipp.upcEbadAddOnLength (Add-on for UPC-E must be 2 or 5 digits) //raiseerror exec
+ } if
+
+ % Ensure 0 or 1 number systems
+ barcode 0 get dup 48 ne exch 49 ne and {
+ /bwipp.upcEbadNumberSystem (UPC-E must have number system 0 or 1) //raiseerror exec
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (111) (111111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /mirrormaps
+ [ (000111) (001011) (001101) (001110) (010011)
+ (011001) (011100) (010101) (010110) (011010)
+ ] def
+
+ % Derive the equivalent UPC-A for its checksum
+ 1 { % Common exit
+ /upcacode 11 string def
+ barcode 6 get 48 sub 2 le {
+ upcacode 0 barcode 0 3 getinterval putinterval
+ upcacode 3 barcode 6 1 getinterval putinterval
+ upcacode 4 (0000) putinterval
+ upcacode 8 barcode 3 3 getinterval putinterval
+ exit
+ } if
+ barcode 6 get 48 sub 3 eq {
+ upcacode 0 barcode 0 4 getinterval putinterval
+ upcacode 4 (00000) putinterval
+ upcacode 9 barcode 4 2 getinterval putinterval
+ exit
+ } if
+ barcode 6 get 48 sub 4 eq {
+ upcacode 0 barcode 0 5 getinterval putinterval
+ upcacode 5 (00000) putinterval
+ upcacode 10 barcode 5 1 getinterval putinterval
+ exit
+ } if
+ barcode 6 get 48 sub 5 ge {
+ upcacode 0 barcode 0 6 getinterval putinterval
+ upcacode 6 (0000) putinterval
+ upcacode 10 barcode 6 1 getinterval putinterval
+ exit
+ } if
+ } repeat
+ /checksum 0 def
+ 0 1 10 {
+ /i exch def
+ /barchar upcacode i get 48 sub def
+ i 2 mod 0 ne {
+ /checksum checksum barchar add def
+ } {
+ /checksum checksum barchar 3 mul add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 8 eq {
+ barcode 7 get checksum 48 add ne {
+ /bwipp.upcEbadCheckDigit (Incorrect UPC check digit provided) //raiseerror exec
+ } if
+ } if
+ /pad 8 string def
+ pad 0 barcode putinterval % Add barcode to the start of the pad
+ pad 7 checksum 48 add put % Put ascii for checksum at end of pad
+ /barcode pad def
+ /txt 8 array def
+ txt 0 [barcode 0 1 getinterval textxoffset textyoffset textfont textsize 2 sub] put
+
+ % Determine the mirror map based on checksum
+ /mirrormap mirrormaps checksum get def
+
+ % Invert the mirrormap if we are using a non-zero number system
+ barcode 0 get 48 eq {
+ /invt mirrormap length string def
+ 0 1 mirrormap length 1 sub {
+ /i exch def
+ mirrormap i get 48 eq {
+ invt i 49 put
+ } {
+ invt i 48 put
+ } ifelse
+ } for
+ /mirrormap invt def
+ } if
+
+ /sbs 33 string def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ 1 1 6 {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ /enclen enc length def
+ /revenc enclen string def
+ 0 1 enclen 1 sub {
+ /j exch def
+ /char enc j get def
+ revenc enclen j sub 1 sub char put
+ } for
+ /enc revenc def
+ } if
+ sbs i 1 sub 4 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 7 mul 11 add textxoffset add textyoffset textfont textsize] put
+ } for
+
+ txt 7 [barcode 7 1 getinterval 6 7 mul 18 add textxoffset add textyoffset textfont textsize 2 sub] put
+
+ % Put the end character
+ sbs 27 encs 11 get putinterval
+
+ /sbs [sbs {48 sub} forall] def
+ includetext {
+ /bhs [height height 12{height .075 sub}repeat height height height] def
+ /bbs [0 0 12{.075}repeat 0 0 0] def
+ } {
+ /bhs [17{height}repeat] def
+ /bbs [17{0}repeat] def
+ /txt [] def
+ } ifelse
+ /guardrightypos 0 def
+
+ % Append the addon
+ addon () ne {
+ /addopts <<
+ /dontdraw true
+ /includetext true
+ /height height 0.15 sub
+ /textxoffset addontextxoffset (unset) ne {addontextxoffset} {51 addongap add} ifelse
+ addontextyoffset (unset) ne {/textyoffset addontextyoffset} if
+ /textsize addontextsize (unset) ne {addontextsize} {textsize} ifelse
+ /textfont addontextfont (unset) ne {addontextfont} {textfont} ifelse
+ >> def
+ addon length 2 eq {addon addopts //ean2 exec} if
+ addon length 5 eq {addon addopts //ean5 exec} if
+ /addcode exch def
+ /sbs [sbs aload pop addongap addcode (sbs) get aload pop] def
+ /bhs [bhs aload pop addcode (bhs) get {.075 sub} forall] def
+ /bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def
+ /txt [txt aload pop addcode (txt) get aload pop] def
+ /guardrightypos height 72 mul 6 sub def
+ } if
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs bhs
+ /bbs bbs
+ /txt txt
+ /opt options
+ /guardrightpos 10
+ /guardrightypos guardrightypos
+ /borderbottom 5
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/upce dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER upce--
@@ -614,55 +1747,263 @@ cna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
% --BEGIN ENCODER isbn--
% --REQUIRES preamble raiseerror renlinear ean5 ean2 ean13--
% --DESC: ISBN
-% --EXAM: 978-1-56592-479-6 54495
+% --EXAM: 978-1-56581-231-4 52250
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp isbn 0.0 0 0 0
-%%BeginData: 44 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04eR00 f+ tP06M% _@r
-EuAATDg:@Wc^5Df .1:GA 2#8 P1l ( DOp s'Y F(0 $6L_Q" 0O ps'_E- ,f4
-DKCt)Ou"b*F(0$/ G]]*4 Ou" b%D f0 Z- Eaa /7A moLsAW ei &Bl7Es F_#
-'*AU&;>AmoLsAWe i&Bl da$ FC f] =Ao DR/ OiN V@05
-5K:DKKH7FE;/BAV ^YU1 G <H `@ W$: !G] \1KA nH*qF
-H-NIDKBB2Ou"b*F (0$/AU &<B D e<U &A TWq9 F`) 83FHSF5BOt mjBQT%2Ou"b
-"A7TUrB45b8%$ED "Ch76f @sK 2 /@;L !rOu %#q FD5Z2F-<^[ F*)G:DJ+':E
-+P1qH\_]c23JDeE -,f4DK C/f X(Gd VF(L LtH ]gXBP#RT(P %'TNOthst4d
-(eHEckrV4aW>DP! 5%OP! 5$bI =%,/F E2M8 Ou% NL<IL$AOrf cH05kfOBl@m
-1P!5$bI?IQJE-,f 4DKC/ f1OYE X055K :DK KH7FCoH/F< G:=@W$:!G][
-P9DKM$nOu"b*F(0 $/AU&<< BmO>5B lda$F Cf] =F(or3OtVt SBlda$FCf]=
-G].2+F(KHR"a+^(ATX)PHS9)S@W$:!G]\1KAnH*qF<G:=@W$:!G]\1KAnH*qFHS;?1OYEcBlda
-$FCf]=H#I;,F(KHR"a+^(ATX)PHS9)S@W$:!G]\4LAnH*qF<G:=@W$:!G]\4LAnH*qFHS;?1OY
-Ec05+p2B4uB0BOtmjBQTCjOu"b"A7TUrB45a%@:WneDJ*BsOtVtSBlda$FEhnf!?dPbHS9)S@W
-$:4FHShN1Qll6@:WneDN[2H1OXV5FY@06A8c@G!0T-dP#Z=0B45:qP&P,V@W$:4FHU*h%?b._"
-FDe@@:UKpF(0$/G]]*XL]ikAP,4<tE+*:5!0.1B2`NCPH#R2&L]hF5@W$:4FHUo&Blda$FEhmM
-E+*:?1OYEc055K:DMSabV33Vf@q]F`CNFW80eeC`Ou"b$BOt[hF*2=S1Pc$o1G<Hu!0T,kDMS:
-U1OCchF(0#sBOPp(Blda$FEhmMBp),F0TrDu1MLo>DI[?gEes[WD0ou<@W!<++DGn+DI[?gEel
-E4!Kq\FL^B5VHS8lBARfLsF_rie+Cf(r@r$..D)!`#$>u$+Blda$@q]:kP&-9^Ou%NL<,RL#P%
-K&YL]W`SL]ET$HS8lBARfLsF_rih+DGn+DI[?gEZek*ARfLsF_rihOo^_%I=!VWBOt[hF*2=S1
-E^CQ@W#[h@<./+P&+WAARfLsF_rihOo^_%I?ITYP#O)P+Duu9Oo^_%I?IP_Bcq,G!KmJH1MItG
-F(0$/G]]*XP!+/T5^eepI?J/ZL^B5-DMSX_4d'i404S[,@r$..D28R0BOt[hF*2=S0Sg+"C6GQ
-P$^,7f1G<H`@W!<&F(0$C!/LrE9Th1bE+*:5&sB)S1OXU'@q]F`CNFW8L^IX*ARfLsF_rihL^K
-;[P,X6EP%p.9055K:DBNY7@W$u%L^]G?Ou"b1@:Y00P,4<tI?ITL@:Y/oNWi!Q6;AYdH#R2&L]
-qL6@W$:4FHUog@:UL"@:YO1L]Wa=Lb4d7@q]F`CNFW8L^K;.HZ3D(+E1b"P%'4JP,Vr)ARfLsF
-_uq0Oo^_jI=#pAA0>i"A<LDX!KsElBOt[hF*2>U0TlI"G^Y`T055K:DKL,F+E1b"Ou"b#@<,jr
-A7^Q*P,4<tBlda$P%'4RP!+/$@<,jrA7^PsNWV:#30JPr@<,jrA7^Q!Blda$P'MJ&@UX:eDe*F
-8!,6L`DN]9nP#Yq$A8c@G!0V2GL^[^&A8c@K@ZgbJ!KmJHV33fo!+KAW@rGmhP'N3ML^]:E+Hh
-#53/A#PA7TUrP'J]i@<,jrA7^ofOu%NL<,Z_tBl@m1NX006DKKE0@<Zg6F_-_\DfBf4Df0WV#[
-q7SDf02rE+*9fDf02rE0>H!@<-"%+C\c"@rGmh+E)4@Bl@m10/$mFDD<r15E[g:DI[L*A7]joG
-]\9TBlda$FCf]=G].2+F(KHR"a+^(ATX(uHS9)S@W$:!G]\1KAnH*qF<G:=@W%?<L^B5-H\h]M
-H\h<BP#[Z$I?IQDF(0$/AU&<BDe<U&ATWq9F`)83FHSe6055K:DKKH7FEqe:AohO*+D>>#B4uC
-C8<ReF"-N\J1OYEc@<-"%NWXBJFHU$Y06DG\+CT;'F,g?EG]]*AOu"b/ATr6@F<G[MFHU*h!Km
-JH$'I)^ATr6@FGKp=G]]*oDIn$6G]Y'GATr6@FHU*h!KsEd+DGn+DKL,F+DGn+DKKH7FEh_9Ao
-hO*+DGn+DKKH7FEqe:AohO*+DGn+DKKH7FCoH/F<G:=@W$:!G]\"@H=\4)P'CDUB60(8FEhnFA
-Tr6@FHUlsHXUr-F,g?EG][.4>9IX$@W$:4F<G:=@W$:!G]\1KAnH*qF<G:=@W$:!G]\4LAnH*q
-F<G:=@W$:!G][P9DKI"8F(0$/AU&<<BmO>5>p*F9G^Y`TI?IQ<EbBHR")i.#DfBf4Df0WZG[YW
-*F!,"3DKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X2055K:DNZuBA1r(@/n8fPFCfK5H"(o:FDl
- %L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/isbn 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp isbn 0.0 2015050900 97266 100181
+%%BeginData: 252 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /ean13 dup /uk.co.terryburton.bwipp findresource put
+begin
+/isbn {
+
+ 20 dict begin
+
+ /options exch def % We are given an options string
+ /barcode exch def % We are given the isbn text with dashes
+
+ /dontdraw false def
+ /includetext false def % Enable/disable ISBN text
+ /isbntextfont /Courier def
+ /isbntextsize 9 def
+ /isbntextxoffset (unset) def
+ /isbntextyoffset (unset) def
+ /height 1 def
+ /addongap 12 def
+ /legacy false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /isbntextfont isbntextfont cvlit def
+ /isbntextsize isbntextsize cvr def
+ isbntextxoffset (unset) ne {/isbntextxoffset isbntextxoffset cvr def} if
+ isbntextyoffset (unset) ne {/isbntextyoffset isbntextyoffset cvr def} if
+ /height height cvr def
+ /addongap addongap cvr def
+
+ % Split off the addon
+ barcode ( ) search {
+ /barcode exch def
+ pop
+ /addon exch def
+ } {
+ pop
+ /addon () def
+ } ifelse
+
+ % Validate the input
+ barcode length 15 ne barcode length 17 ne and
+ barcode length 11 ne barcode length 13 ne and and {
+ /bwipp.isbnBadLength (ISBN-13 must be 15 or 17 characters including dashes. ISBN-10 must be 11 or 13 characters including dashes) //raiseerror exec
+ } if
+ addon length 0 ne addon length 2 ne and addon length 5 ne and {
+ /bwipp.isbnBadAddOnLength (Add-on for ISBN must be 2 or 5 digits) //raiseerror exec
+ } if
+ barcode length 15 ge { % ISBN-13
+ barcode 0 4 getinterval dup (978-) ne exch (979-) ne and {
+ /bwipp.isbn13badPrefix (ISBN-13 prefix must be 978- or 979-) //raiseerror exec
+ } if
+ /wasdash false def /numdash 0 def /numdigit 0 def
+ barcode 5 9 getinterval {
+ dup
+ 45 eq {
+ wasdash {
+ /bwipp.isbn13adjacentDashes (ISBN-13 does not permit adjacent dashes) //raiseerror exec
+ } if
+ /wasdash true def
+ /numdash numdash 1 add def
+ } if
+ dup 48 ge exch 57 le and {
+ /wasdash false def
+ /numdigit numdigit 1 add def
+ } if
+ } forall
+ numdash 2 ne numdigit 7 ne or {
+ /bwipp.isbn13numDashesDigits (Incorrect number of dashes and digits for ISBN-13) //raiseerror exec
+ } if
+ barcode 14 get dup 48 lt exch 57 gt or {
+ /bwipp.isbn13character15 (ISBN-13 character 15 must be a digit) //raiseerror exec
+ } if
+ barcode length 17 eq {
+ barcode 15 1 getinterval (-) ne {
+ /bwipp.isbn13character16 (ISBN-13 penultimate character must be a dash) //raiseerror exec
+ } if
+ barcode 16 get dup 48 lt exch 57 gt or {
+ /bwipp.isbn13character17 (ISBN-13 final character must be a digit) //raiseerror exec
+ } if
+ } if
+ } { % ISBN-10
+ barcode 0 get dup 48 lt exch 57 gt or {
+ /bwipp.isbn10FirstDigit (ISBN-10 first character must be a digit) //raiseerror exec
+ } if
+ /wasdash false def /numdash 0 def /numdigit 0 def
+ barcode 1 9 getinterval {
+ dup
+ 45 eq {
+ wasdash {
+ /bwipp.isbn10adjacentDashes (ISBN-10 does not permit adjacent dashes) //raiseerror exec
+ } if
+ /wasdash true def
+ /numdash numdash 1 add def
+ } if
+ dup 48 ge exch 57 le and {
+ /wasdash false def
+ /numdigit numdigit 1 add def
+ } if
+ } forall
+ numdash 2 ne numdigit 7 ne or {
+ /bwipp.isbn10numDashesDigits (Incorrect number of dashes and digits for ISBN-10) //raiseerror exec
+ } if
+ barcode 10 get dup 48 lt exch 57 gt or {
+ /bwipp.isbn10character11 (ISBN-10 character 11 must be a digit) //raiseerror exec
+ } if
+ barcode length 13 eq {
+ barcode 11 1 getinterval (-) ne {
+ /bwipp.isbn10character12 (ISBN-10 penultimate character must be a dash) //raiseerror exec
+ } if
+ barcode 12 get dup dup 48 lt exch 57 gt or exch 88 ne and {
+ /bwipp.isbn10character13 (ISBN-10 final character must be a digit or X) //raiseerror exec
+ } if
+ } if
+ } ifelse
+
+ /isbntxt barcode def
+
+ % Read the digits from isbntxt and validate checksum for ISBN-10
+ isbntxt length 13 le {
+ /isbn 10 string def
+ /checksum 0 def
+ /i 0 def /n 0 def
+ { % loop
+ /isbnchar isbntxt i get 48 sub def
+ isbnchar -3 ne { % Ignore dashes
+ isbn n isbnchar 48 add put
+ n 9 lt {
+ /checksum checksum 10 n sub isbnchar mul add def
+ } if
+ /n n 1 add def
+ } if
+ /i i 1 add def
+ i isbntxt length eq {exit} if
+ } loop
+ /checksum 11 checksum 11 mod sub 11 mod dup 10 eq {pop 40} if 48 add def
+ /isbn isbn 0 9 getinterval def
+ isbntxt length 13 eq {
+ isbntxt 12 get checksum ne {
+ /bwipp.isbn10badCheckDigit (Incorrect ISBN-10 check digit provided) //raiseerror exec
+ } if
+ } if
+ } if
+
+ legacy not isbntxt length 15 ge or {
+
+ % Convert ISBN-10 to ISBN-13
+ isbntxt length 13 le {
+ /pad 15 string def
+ pad 0 (978-) putinterval
+ pad 4 isbntxt 0 11 getinterval putinterval
+ /isbntxt pad def
+ } if
+
+ % Read the digits from isbntxt and validate checksum for ISBN-13
+ /isbn 13 string def
+ /checksum 0 def
+ /i 0 def /n 0 def
+ { % loop
+ /isbnchar isbntxt i get 48 sub def
+ isbnchar -3 ne { % Ignore dashes
+ isbn n isbnchar 48 add put
+ n 12 lt {
+ /checksum isbnchar n 2 mod 0 ne {3 mul} if checksum add def
+ } if
+ /n n 1 add def
+ } if
+ /i i 1 add def
+ i isbntxt length eq {exit} if
+ } loop
+ /checksum 10 checksum 10 mod sub 10 mod 48 add def
+ /isbn isbn 0 12 getinterval def
+ isbntxt length 17 eq {
+ isbntxt 16 get checksum ne {
+ /bwipp.isbn13badCheckDigit (Incorrect ISBN-13 check digit provided) //raiseerror exec
+ } if
+ } if
+
+ } if
+
+ % Add the ISBN header to the isbntxt
+ /pad isbn length 12 eq {22} {18} ifelse string def
+ pad 0 (ISBN ) putinterval
+ pad 5 isbntxt putinterval
+ pad pad length 2 sub 45 put
+ pad pad length 1 sub checksum put
+ /isbntxt pad def
+
+ % Convert ISBN digits to EAN-13
+ /barcode 12 string def
+ isbn length 9 eq {
+ barcode 0 (978) putinterval
+ barcode 3 isbn putinterval
+ } {
+ barcode 0 isbn putinterval
+ } ifelse
+
+ % Append the addon
+ addon () ne {
+ 12 addon length add 1 add string
+ dup 0 barcode putinterval
+ dup 12 ( ) putinterval
+ dup 13 addon putinterval
+ /barcode exch def
+ } if
+
+ % Get the result of encoding with ean13
+ options (dontdraw) true put
+ options (addongap) addongap put
+ /args barcode options //ean13 exec def
+
+ % Add the ISBN text
+ includetext {
+ isbntextxoffset (unset) eq {
+ /isbntextxoffset isbn length 9 eq {-1} {-12} ifelse def
+ } if
+ isbntextyoffset (unset) eq {
+ /isbntextyoffset height 72 mul 3 add def
+ } if
+ args (txt) known {
+ /txt args (txt) get def
+ /newtxt txt length 1 add array def
+ newtxt 0 txt putinterval
+ newtxt newtxt length 1 sub [isbntxt isbntextxoffset isbntextyoffset isbntextfont isbntextsize] put
+ args (txt) newtxt put
+ } {
+ args (txt) [ [isbntxt isbntextxoffset isbntextyoffset isbntextfont isbntextsize] ] put
+ } ifelse
+ } if
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/isbn dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER isbn--
@@ -670,53 +2011,242 @@ F<G:=@W$:!G][P9DKI"8F(0$/AU&<<BmO>5>p*F9G^Y`TI?IQ<EbBHR")i.#DfBf4Df0WZG[YW
% --BEGIN ENCODER ismn--
% --REQUIRES preamble raiseerror renlinear ean5 ean2 ean13--
% --DESC: ISMN
-% --EXAM: 979-0-2600-0043
+% --EXAM: 979-0-2605-3211-3
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ismn 0.0 0 0 0
-%%BeginData: 42 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04eR00 f+ tP06M% _@r
-EuAATDg:@Wc^5Df .1:GA 2#8 P1l ( DOp s'Y F)> fAL_Q" 0O ps'_E- ,f4
-DKCt)Ou"b*F)>f: G]]*4 Ou" b%D f0 Z- Eaa /7A moLsAW ei &Bl7Es F_#
-'*AU&;>AmoLsAWe i&Bl e-/ FC f] =Ao DR/ OiN V@05
-5KEDKKH7FE;/BAV ^YU1 G <H `D /OH ,G] \1KA nH*qF
-H-NIDKBB2Ou"b*F )>f:AU &<B D e<U &A TWq9 F`) 83FHSF5BOt mjBQT%2Ou"b
-"A7TUrB45b8%$ED "Ch76f @sK 2 /@;L !rOu %#q FD5Z2F-<^[ F*)G:DJ+':E
-+P1qH\_]c23JDeE -,f4DK C/f X(Gd VF(L LtH ]gXBP#RT(P %'TNOthst4d
-(eHEckrV4aW>DP! 5%OP! 5$bI =%,/F E2M8 Ou% NL<IL$AOrf cH05kfOBl@m
-1P!5$bI?IQJE-,f 4DKC/ f1OYE X055K EDK KH7FCoH/F< G:=D/OH,G][
-P9DKM$nOu"b*F)> f:AU&<< BmO>5B le-/F Cf] =F(or3OtVt SBle-/FCf]=
-G].2+F(KHR"a+^(ATX)PHS9)SD/OH,G]\1KAnH*qF<G:=D/OH,G]\1KAnH*qFHS;?1OYEcBle-
-/FCf]=H#I;,F(KHR"a+^(ATX)PHS9)SD/OH,G]\4LAnH*qF<G:=D/OH,G]\4LAnH*qFHS;?1OY
-Ec05+p2B4uB0BOtmjBQTCjOu"b"A7TUrB45a%@:WneDJ*BsOtVtSBle-/FEhnf!?dPbHS9)SD/
-OH?FHShN1Qll6@:WneDN[2H1OXV5FY@06A8c@G!0T-dP#X/OAS5F]H$":QNW>4uBle-/FEhn`!
-/LZ=9TB-JP!*N#D/OH?FHU*h%?b._"FDe<AS5F]H$":Q+DGn6DKL,FOu"b1@:UKpF)>f:G]]*X
-L]ikAP,4<tE+*:5!0.7D2`WHD/WtBu@:Y/uBle-/FEhn`!bl^mDKL,FP%'4KP,XU<P'J]pF)>f
-:G]Y'I@:YNWI?IP_Ble-/L^fNDOu"b$BOt[hF*2>U!0T,kBnubP1G<X%!0T-b055KEDI[?gEZf
-(;D/OH?F<G:\98G9bWKK&OF)>f)BOPq;rK;#EBle-/+Dr<9F)>f)BOPq;0TlI"G]&<GP%K&YL]
-W`SL]ET$HS8lBARfLsF_r78F)>f)BOPp(@q]F`CNFW8Oo^_%I=!VWBOt[hF*2=BBle-/@q]:kL
-]`fV@q]F`CNFW8Oo^_%I?ITYP#O)P+Duu9Oo^_%I?IP_Bcq,G!KmJH1MItGF)>f:G]]*XP!+/T
-5^eepI?J.p@q]F`CNFW8L^IX*ARfLsF_upAP%p/ZL^K;[Ou$ocB45:q+DbV%@:OS)G]\rGP&6?
-bHS9)SD/OH?F<GC2B45:qFEhnj1G<]UA;Ck]V33W_HS9>HA;D"aV33W_P#ZI0A;C5G"\DWe:*>
-^FE+*:5"_i$pDKL,FP'M"TA0>i"A<LDX!g9O=/Wt?t@:UL"@:YO1L]N[<@q]F`CNFW8LbOtmP'
-AWoF)>f:G]Y'I@:YNW04J@1@rGmh+DGn6DMS:K%$F;I1LXg)Df1R8P&5Q%$t3[WDf1_IOo^@>O
-o^`BOuS6t@UX:eDe*FBH'1.C%#t?2P'N3ML^dd'A8c@KGqWW8Eas#uAWf6?1OYEcDfBf4Df0WV
-#\7jkFC]E#GB@kJAWh:VE-,f4DKCgD@:WneDJ*Bs@:WneDJ*BsP'AWgEbBG9@UX:eDe*E%DfBf
-4Df0VL04eR00f+tWOu$fi@r-9uATVL.FF,-EF)>f:AU&<ADe<U&ATWq9F`)83FHSe6055KEDKK
-H7FEh_9AohO*+DGn6DKL,FP%'4[P!+/Js*]6MoR2m&Ou%NL<,$DjDKKH7FEqe:AohO*NWjQCF(
-KHV4aShrF)>f:AU&<BDe<U&ATT&.ASGdjFGNJNCkr1V!Ko6eP#Pk1B60(8FEhnj@!aPKG]Y':E
-bBHR"*Ad0P"Uro05b?FFEhmMFEhnj@Yb&J!KmbP1N$cJFEhn`!-EI-P'LqVGBA(O+Dtb7FEhnj
-@Yb&JWEUKZF)>f:G]Y'BF)>f:AU&<ADe<U&ATT&/F)>f:AU&<BDe<U&ATT&/F)>f:AU&</Df0Y
->Ble-/FCf]=F(or3+C1.T@<-"%NWXBJFDbZ6FEhnjG^XpIEbBHR"*Ad0>9I,mBle-/FEhmMBle
--/FCf]=G].2+F(KG9Ble-/FCf]=H#I;,F(KG9Ble-/FCf]=AoDR/+DGn6DKKH7FE;/BAKY8$?'
-9G\P#Zpn<+0f[F,g?@E--#;FD5Z2F-:cVEbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#O
-u"b*F)>fX30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"
-@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/ismn 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp ismn 0.0 2015050900 94206 93526
+%%BeginData: 231 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /ean13 dup /uk.co.terryburton.bwipp findresource put
+begin
+/ismn {
+
+ 20 dict begin
+
+ /options exch def % We are given an options string
+ /barcode exch def % We are given the ismn text with dashes
+
+ /dontdraw false def
+ /includetext false def % Enable/disable ISMN text
+ /ismntextfont /Courier def
+ /ismntextsize 9 def
+ /ismntextxoffset (unset) def
+ /ismntextyoffset (unset) def
+ /height 1 def
+ /addongap 12 def
+ /legacy false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /ismntextfont ismntextfont cvlit def
+ /ismntextsize ismntextsize cvr def
+ ismntextxoffset (unset) ne {/ismntextxoffset ismntextxoffset cvr def} if
+ ismntextyoffset (unset) ne {/ismntextyoffset ismntextyoffset cvr def} if
+ /height height cvr def
+ /addongap addongap cvr def
+
+ % Split off the addon
+ barcode ( ) search {
+ /barcode exch def
+ pop
+ /addon exch def
+ } {
+ pop
+ /addon () def
+ } ifelse
+
+ % Validate the input
+ barcode length 15 ne barcode length 17 ne and
+ barcode length 11 ne barcode length 13 ne and and {
+ /bwipp.ismnBadLength (ISMN-13 must be 15 or 17 characters including dashes. ISMN-10 must be 11 or 13 characters including dashes) //raiseerror exec
+ } if
+ addon length 0 ne addon length 2 ne and addon length 5 ne and {
+ /bwipp.ismnBadAddOnLength (Add-on for ISMN must be 2 or 5 digits) //raiseerror exec
+ } if
+ barcode length 15 ge { % ISMN-13
+ barcode 0 4 getinterval (979-) ne {
+ /bwipp.ismn13badPrefix (ISMN-13 prefix must be 979-) //raiseerror exec
+ } if
+ /wasdash false def /numdash 0 def /numdigit 0 def
+ barcode 5 9 getinterval {
+ dup
+ 45 eq {
+ wasdash {
+ /bwipp.ismn13adjacentDashes (ISMN-13 does not permit adjacent dashes) //raiseerror exec
+ } if
+ /wasdash true def
+ /numdash numdash 1 add def
+ } if
+ dup 48 ge exch 57 le and {
+ /wasdash false def
+ /numdigit numdigit 1 add def
+ } if
+ } forall
+ numdash 2 ne numdigit 7 ne or {
+ /bwipp.ismn13numDashesDigits (Incorrect number of dashes and digits for ISMN-13) //raiseerror exec
+ } if
+ barcode 14 get dup 48 lt exch 57 gt or {
+ /bwipp.ismn13character15 (ISMN-13 character 15 must be a digit) //raiseerror exec
+ } if
+ barcode length 17 eq {
+ barcode 15 1 getinterval (-) ne {
+ /bwipp.ismn13character16 (ISMN-13 penultimate character must be a dash) //raiseerror exec
+ } if
+ barcode 16 get dup 48 lt exch 57 gt or {
+ /bwipp.ismn13character17 (ISMN-13 final character must be a digit) //raiseerror exec
+ } if
+ } if
+ } { % ISMN-10
+ barcode 0 2 getinterval (M-) ne {
+ /bwipp.ismn10badPrefix (ISMN-10 prefix must be M-) //raiseerror exec
+ } if
+ barcode 2 get dup 48 lt exch 57 gt or {
+ /bwipp.ismn10character3 (ISMN-10 character 3 must be a digit) //raiseerror exec
+ } if
+ /wasdash false def /numdash 0 def /numdigit 0 def
+ barcode 3 7 getinterval {
+ dup
+ 45 eq {
+ wasdash {
+ /bwipp.ismn10adjacentDashes (ISMN-10 does not permit adjacent dashes) //raiseerror exec
+ } if
+ /wasdash true def
+ /numdash numdash 1 add def
+ } if
+ dup 48 ge exch 57 le and {
+ /wasdash false def
+ /numdigit numdigit 1 add def
+ } if
+ } forall
+ numdash 1 ne numdigit 6 ne or {
+ /bwipp.ismn10numDashesDigits (Incorrect number of dashes and digits for ISMN-10) //raiseerror exec
+ } if
+ barcode 10 get dup 48 lt exch 57 gt or {
+ /bwipp.ismn10character11 (ISMN-10 character 11 must be a digit) //raiseerror exec
+ } if
+ barcode length 13 eq {
+ barcode 11 1 getinterval (-) ne {
+ /bwipp.ismn10character12 (ISMN-10 penultimate character must be a dash) //raiseerror exec
+ } if
+ barcode 12 get dup dup 48 lt exch 57 gt or exch 88 ne and {
+ /bwipp.ismn10character13 (ISMN-10 final character must be a digit or X) //raiseerror exec
+ } if
+ } if
+ } ifelse
+
+ /ismntxt barcode def
+
+ % Convert old ISMN to ISMN-13
+ /legacytxt () def
+ ismntxt length 13 le {
+ /legacytxt ismntxt def
+ /pad ismntxt length 4 add string def
+ pad 0 (979-0-) putinterval
+ pad 6 ismntxt 2 ismntxt length 2 sub getinterval putinterval
+ /ismntxt pad def
+ } if
+
+ % Read the digits from ismntxt and calculate checksums
+ /ismn 13 string def
+ /checksum 0 def
+ /i 0 def /n 0 def
+ { % loop
+ /ismnchar ismntxt i get 48 sub def
+ ismnchar -3 ne { % Ignore dashes
+ ismn n ismnchar 48 add put
+ n 12 lt {
+ n 2 mod 0 eq {
+ /checksum ismnchar checksum add def
+ } {
+ /checksum ismnchar 3 mul checksum add def
+ } ifelse
+ } if
+ /n n 1 add def
+ } if
+ /i i 1 add def
+ i ismntxt length eq {exit} if
+ } loop
+ /checksum 10 checksum 10 mod sub 10 mod 48 add def
+
+ % Validate the checksum
+ barcode length 13 eq barcode length 17 eq or {
+ barcode dup length 1 sub get checksum ne {
+ /bwipp.ismnBadCheckDigit (Incorrect ISMN check digit provided) //raiseerror exec
+ } if
+ } if
+
+ % Add the ISMN header and checksum to the ismntxt
+ legacy legacytxt () ne and {
+ /ismntxt legacytxt def
+ /pad 18 string def
+ } {
+ /pad 22 string def
+ } ifelse
+ pad 0 (ISMN ) putinterval
+ pad 5 ismntxt putinterval
+ pad pad length 2 sub 45 put
+ pad pad length 1 sub checksum put
+ /ismntxt pad def
+
+ % Convert ISMN digits to EAN-13
+ /barcode ismn 0 12 getinterval def
+
+ % Append the addon
+ addon () ne {
+ 12 addon length add 1 add string
+ dup 0 barcode putinterval
+ dup 12 ( ) putinterval
+ dup 13 addon putinterval
+ /barcode exch def
+ } if
+
+ % Get the result of encoding with ean13
+ options (dontdraw) true put
+ options (addongap) addongap put
+ /args barcode options //ean13 exec def
+
+ % Add the ISMN text
+ includetext {
+ ismntextxoffset (unset) eq {
+ /ismntextxoffset ismntxt length 18 eq {-1} {-12} ifelse def
+ } if
+ ismntextyoffset (unset) eq {
+ /ismntextyoffset height 72 mul 3 add def
+ } if
+ args (txt) known {
+ /txt args (txt) get def
+ /newtxt txt length 1 add array def
+ newtxt 0 txt putinterval
+ newtxt newtxt length 1 sub [ismntxt ismntextxoffset ismntextyoffset ismntextfont ismntextsize] put
+ args (txt) newtxt put
+ } {
+ args (txt) [ [ismntxt ismntextxoffset ismntextyoffset ismntextfont ismntextsize] ] put
+ } ifelse
+ } if
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/ismn dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ismn--
@@ -724,50 +2254,188 @@ u"b*F)>fX30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"
% --BEGIN ENCODER issn--
% --REQUIRES preamble raiseerror renlinear ean2 ean5 ean13--
% --DESC: ISSN
-% --EXAM: 0317-8471 00 05
+% --EXAM: 0311-175X 00 17
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp issn 0.0 0 0 0
-%%BeginData: 39 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04eR00 f+ tP06M% _@r
-EuAATDg:@Wc^5Df .1:GA 2#8 P1l ( DOp s'Y F)u 5GL_Q" 0O ps'_E- ,f4
-DKCt)Ou"b*F)u5@ G]]*4 Ou" b%D f0 Z- Eaa /7A moLsAW ei &Bl7Es F_#
-'*AU&;>AmoLsAWe i&Bl e?5 FC f] =Ao DR/ OiN V@05
-5KKDKKH7FE;/BAV ^YU1 G <H `F )H) 2G] \1KA nH*qF
-H-NIDKBB2Ou"b*F )u5@AU &<B D e<U &A TWq9 F`) 83FHSF5BOt mjBQT%2Ou"b
-"A7TUrB45b8%$ED bE-,f4 DKC u E06; 5UBl 7R* H#R>X4aVtc Ou8C3DfBf4D
-f0WCP,i2'Cia0N4 aW>WI? IQm 30Ia 6V33 Qn! BlU*FE2M8P !+/T/Wr;\Fc
-nqO1OXV5/Tc#UAW eitP# ZpnA We*t3 A5;i FD5 Z2F-8_M1OY EcDfBf4Df0W
-COu%NL8M=e!F)H) 2G][P 9DKI" 8F)u5 @AU &</Df0Z[/W qnCBle?5FCf
-]=F(or3+DGn<DKK H7FE;/B AWe^01 MLoOD KKH 7FEh_9AohO *NWjQCF(KHV
-D0mpMF)u5@AU&<ADe<U&ATT&/F)u5@AU&<ADe<U&ATX(gOu%NL<,$DpDKKH7FEqe:AohO*NWjQ
-CF(KHVD0mpMF)u5@AU&<BDe<U&ATT&/F)u5@AU&<BDe<U&ATX(gOu%NL<%horBkM+$+D>>#B4u
-CM09S+E@:WneDJ*Bs+CSekDf02rE0;l;1MLoODKL,FNWC8cNI*<mF)u5@G]]*4Ou&8D06:]EG%
-#ES5*@^MP#QL6EHYc2NWC8cNI*="AT;m%EfrVL1Qll6@:WneDN[2H1OXV5FY@06A8c@G!0T-dP
-#X/LF)u5T#a2$I1G<6OARfLsF_up7Ou"b*L]ESo05cRGOu%G<Ble?5@q]:k+DGn<DKL,F+DI!3
-LbP!kOu$fnF)GK$@<.2&P&5P[F)u4ADBNY7F)GK$@<./XOo^_jDMSO\ApZ1@BOt[hF*2=B@q]F
-`CNFW8+DGn<DI[?gEek!=P,XU\Oo^_%I?IP_DBNhQ!KmJH1OYEc052PCL]NY>Ou$epBle?5FEh
-nj@Zim$P!FGY<.0p@04S[,@r$..D28R0BOt[hF*2>U$^,7fWJCqFC6CA+E+*:5%[*ZO1N6c5L]
-EG=8Q/P_+Hh"h@:Y/tBle?5FEhnjH#R2&L^dj-ARfLsF_upgOo^_*LcU\^H]iN-=FH?3P'AWoF
-)u5@G]Y'I@:YNW04J@1@rGmh+DGn<DMS:K#EhcD1G<3GEas#uAV^bXV33WD@<,jrA7^PsNWV:#
-2j/Gq@<,jrA7^Q!Ble?5P'LMFEas#uAV^\7AT;m%Eft]VA7TUrNW>5ZH\`)=A7TUrP%'RTL]NY
->P,4=$L]CmmEas#uAWh>%3/A!'!?dPNOuS7,@:WneDN]8u@UX:eDe*FB5*@^MP#Q@=FD5Z2F,g
-N:Df0Z-Eaa06EckrVG].PCBl@m1NX0'(A8c?u@;oXcA8c?u@;qBS04Am6F!+q#Eas#uAKYo1FD
-5Z2F"]1X@;[eUP!>*cBl7EsF_#'*AU&<D+DGn<DKKH7FEh_9AohO*NWjQCF(KHV4aShrF)u5@A
-U&<ADe<U&ATW_8Ou%NL<,$DpDKKH7FEqe:AohO*NWjQCF(KHV4aShrF)u5@AU&<BDe<U&ATT&.
-ASGdjFGNJNCkr1V!Ko6eP#Pk1B60(8FEhnj@!aPKG]Y':EbBHR"*Ad0P"Uro05b?FFEhmMFEhn
-j@Yb&J!KmbP1N$cJFEhn`!-EI-P'LqVGBA(O+Dtb7FEhnj@Yb&JWEUKZF)u5@G]Y'BF)u5@AU&
-<ADe<U&ATT&/F)u5@AU&<BDe<U&ATT&/F)u5@AU&</Df0Y>Ble?5FCf]=F(or3+C1.T@<-"%NW
-XBJFDbZ6FEhnjG^XpIEbBHR"*Ad0>9I,mBle?5FEhmMBle?5FCf]=G].2+F(KG9Ble?5FCf]=H
-#I;,F(KG9Ble?5FCf]=AoDR/+DGn<DKKH7FE;/BAKY8$?'9G\P#Zpn<+0f[F,g?@E--#;FD5Z2
-F-:cVEbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b*F)u5^30If*F_`U>D_?-CEcQG
-7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?I
-P~>
-% uk.co.terryburton.bwipp/issn 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp issn 0.0 2015050900 85135 81376
+%%BeginData: 177 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /ean13 dup /uk.co.terryburton.bwipp findresource put
+begin
+/issn {
+
+ 20 dict begin
+
+ /options exch def % We are given an options string
+ /issntxt exch def % We are given the issn text with dashes
+
+ /dontdraw false def
+ /includetext false def % Enable/disable ISSN text
+ /issntextfont /Courier def
+ /issntextsize 9 def
+ /issntextxoffset (unset) def
+ /issntextyoffset (unset) def
+ /height 1 def
+ /addongap 12 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /issntextfont issntextfont cvlit def
+ /issntextsize issntextsize cvr def
+ issntextxoffset (unset) ne {/issntextxoffset issntextxoffset cvr def} if
+ issntextyoffset (unset) ne {/issntextyoffset issntextyoffset cvr def} if
+ /height height cvr def
+ /addongap addongap cvr def
+
+ % Split off the ISSN
+ issntxt ( ) search {
+ /issntxt exch def
+ pop
+ /seqvar exch def
+ } {
+ pop
+ /seqvar () def
+ } ifelse
+
+ % Split off the sequence variant and addon
+ seqvar ( ) search {
+ /seqvar exch def
+ pop
+ /addon exch def
+ } {
+ pop
+ /addon seqvar def
+ /seqvar (00) def
+ } ifelse
+
+ % Validate the input
+ issntxt length 8 ne issntxt length 9 ne and {
+ /bwipp.issnBadLength (ISSN must be 8 or 9 characters including dash) //raiseerror exec
+ } if
+ issntxt 0 4 getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.issnBadFormat (ISSN must have the format XXXX-XXXX) //raiseerror exec
+ } if
+ } forall
+ issntxt 4 1 getinterval (-) ne {
+ /bwipp.issnBadFormat (ISSN must have the format XXXX-XXXX) //raiseerror exec
+ } if
+ issntxt 5 3 getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.issnBadFormat (ISSN must have the format XXXX-XXXX) //raiseerror exec
+ } if
+ } forall
+ issntxt length 9 eq {
+ issntxt 8 get dup dup 48 lt exch 57 gt or exch 88 ne and { % Digits or X
+ /bwipp.issnBadFormat (ISSN must have the format XXXX-XXXX) //raiseerror exec
+ } if
+ } if
+ seqvar length 2 ne {
+ /bwipp.issnBadSequenceVariantLength (Sequence variant for ISSN must be 2 digits) //raiseerror exec
+ } if
+ seqvar {
+ dup 48 lt exch 57 gt or {
+ /bwipp.issnSequenceVariantBadCharacter (Sequence variant for ISSN must contain only digits) //raiseerror exec
+ } if
+ } forall
+ addon length 0 ne addon length 2 ne and addon length 5 ne and {
+ /bwipp.issnBadAddOnLength (Add-on for ISSN must be 2 or 5 digits) //raiseerror exec
+ } if
+
+ % Read the digits from issntxt and calculate checksums
+ /issn 8 string def
+ /checksum 0 def
+ /i 0 def /n 0 def
+ { % loop
+ /issnchar issntxt i get 48 sub def
+ issnchar -3 ne { % Ignore dashes
+ issn n issnchar 48 add put
+ n 7 lt {
+ /checksum checksum issnchar 8 n sub mul add def
+ } if
+ /n n 1 add def
+ } if
+ /i i 1 add def
+ i issntxt length eq {exit} if
+ } loop
+ /checksum 11 checksum 11 mod sub 11 mod def
+ /checksum checksum 48 add dup 58 eq {pop 88} if def
+ issntxt length 9 eq {
+ issntxt 8 get checksum ne {
+ /bwipp.issnBadCheckDigit (Incorrect ISSN check digit provided) //raiseerror exec
+ } if
+ } if
+
+ % Add the ISSN header and checksum to the issntxt
+ /pad 14 string def
+ pad 0 (ISSN ) putinterval
+ pad 5 issntxt putinterval % Add issntxt to the pad
+ pad 13 checksum put
+ /issntxt pad def
+
+ % Convert ISSN digits to EAN-13
+ /barcode issn 0 7 getinterval def
+
+ % Append the sequence variant
+ /barcode 12 string def
+ barcode 0 (977) putinterval
+ barcode 3 issn putinterval
+ barcode 10 seqvar putinterval
+
+ % Append the addon
+ addon () ne {
+ 12 addon length add 1 add string
+ dup 0 barcode putinterval
+ dup 12 ( ) putinterval
+ dup 13 addon putinterval
+ /barcode exch def
+ } if
+
+ % Get the result of encoding with ean13
+ options (dontdraw) true put
+ options (addongap) addongap put
+ /args barcode options //ean13 exec def
+
+ % Add the ISSN text
+ includetext {
+ issntextxoffset (unset) eq {/issntextxoffset 10 def} if
+ issntextyoffset (unset) eq {
+ /issntextyoffset height 72 mul 3 add def
+ } if
+ args (txt) known {
+ /txt args (txt) get def
+ /newtxt txt length 1 add array def
+ newtxt 0 txt putinterval
+ newtxt newtxt length 1 sub [issntxt issntextxoffset issntextyoffset issntextfont issntextsize] put
+ args (txt) newtxt put
+ } {
+ args (txt) [ [issntxt issntextxoffset issntextyoffset issntextfont issntextsize] ] put
+ } ifelse
+ } if
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/issn dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER issn--
@@ -778,121 +2446,429 @@ P~>
% --EXAM: Count01234567^FNC2!
% --EXOP: includetext parsefnc
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code128 0.0 0 0 0
-%%BeginData: 113 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2A MG r"H\`B !23
-JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj
-055<6Cis9"FCf]= +D,%u F(L Lj0 6C cM FCo H/F HOV,1G <i ]G]\"@ H=_
-m>Ou"b5AU&<ADe< U&AT W_. Ou "b 5AU &<B De< U&AT
-Wb(Ou"b)ASGdjFG Ks\1 G << W@ rGm lDJ +t4@ <H[1O
-u"b3@<Wi+@;L!rO u"b1@< -F# + D,% uF (LLj 05t ??F(Js$@j# AlCia0N1N.5
-SBl@m1P-6N[FE2) 5B68E< AWf 3 'L]N YrOp u>K FD5Z2F*j(N AmoLsAWf3'P
-!FGY<0B5(@ZmRN0 oc8tP) XR( F_-_ !H]f tD5 *C&O5*@^MH ]ft&EckrV1O
-YEdI?J0)*g/N:Df Bf4Df 0WZ5 *@^MP #Q@= FD5 Z2F*j'+I?I /TFCf]=AoDR
-/+EV1>FCoH/FHS5 =1G<i ]G]\" @H=\4 @AU &<<BmO?R09 S+EFCf]=G].
-2+F(KG9FCf]=G]. 2+F(KHV 09S+EF Cf]=H #I; ,F(KG9FCf] =H#I;,F(KHV
-09S+EBOtmjBQPA1ASGdjFHS;?1N6cCF(K\OD0'>4@UX:eDe*FB@ZmRN1G<L!!0T-I@<,jrA7^+
-J!FCqKH]g@*F(^Y"C6CcDH'2WOOo^@>Oo[4NP!5$bP')pIL]E55P"_#iD0'?Q5&,lSP,XU.P'E
--LP%'4LP,X6>P!5%&I=%,:D0'?Q5&-6EP'N4"C6ATNC6CcD1G<3GEas#uAKYi2B8?P&P"_#pP!
-FGY<IL$AI?IP_@UX:nASrW"@<,jrA7^p5Ou"b4FCC"*Ou"b4FCL(*Ou"b4FCU.*Ou"b4G@?=*O
-u"b4G@HC*Ou"b4G@QI*Ou"b'DD?tCOu"b'DDI%COu"b'DDR+COu"b'DD[1COu"b4Aork%Ou"b4
-FE!'.Ou"b-CLN%jOu"b-CL`1kOu"b$BOPpu@;p91>9I.++G_/#!\c<6+Bsj,+cZRHNWLmh>p*@
-3!@!O),)u^Y10l#,NWCAb!@*U+0JcuW>E/_0NWCDc!\cH:+Bsj,-&r!PNWLml>p*@3!@Eg--B8
--]2I.G0NWCMf!@Nm/0K38[>DO\`.#n?_3*dY2Lae-/NWLmp>p*@3!@j*1.ZOQb0O5f*NWCYj!@
-s030elrV>E/_8NWC\k!\lH9+Bsj,/WKi`NWLpk>p*@3!A9B5/rfuf1gM5.NWCen!ABH70f<5Z>
-E/_<NWCho!\lT=+Bsj,0oc8hNWLpo>p*@3!A]Z916)Dj3*dY2NWCqr!Af`;0f`M^>E/_@NWCts
-!\uH8+Bsj,23%\pNWLsj>p*@3!B,r=2N@ho10l#,NWD)!!B6#?1,E2Y>E/_DNWD,"!\uT<+Bsj
-,3K=,#NWLsn>p*@3!BQ5A3fX7s2I.G0NWD5%!BZ;C1,iJ]>E/_HNWD8&!\u`@+Bsj,4cTP+NWL
-sr>p*@3!BuME5)o\#0O5f*NWDA)!C)SG1GN/X>E/_LNWDD*!])T;+Bsj,6&kt3NWM!m>p*@3!C
-DeI6B2+'1gM5.NWDM-!CMkK1GrG\>E/_PNWDP.!])`?+Bsj,7?.C;NWM!q>p*@3!Ci(M7ZIO+3
-*dY2NWDY1!Cr.O1HA_`>E/_TNWD\2!]2T:+Bsj,8WEgCNWM$l>p*@3!D8@Q8r`s010l#,NWDe5
-!DAFS1c&D[>E/_XNWDh6!]2`>+Bsj,9o]6KNWM$p>p*@3!D\XU:6#B42I.G0NWDq9!De^W1cJ\
-_>E/_\NWDt:!]2lB+Bsj,;2tZSNWM$t>p*@3!E+pY;N:f90O5f*NWE(=!E5![2)/AZ>E/_`NWE
-+>!];`=+Bsj,<K7)[NWM'o>p*@3!EP3]<fR5=1gM5.NWE4A!EY9_2)SY^>E/_dNWE7B!];lA+B
-sj,=cNMcNWM's>p*@3!EtKa>)iYA3*dY2NWE@E!F(Qc2*"qb>DQO?>`JkD0O5f*NWEFG!F:]e2
-DJJ[>E/_jNWEIH!]Df>+Bsj,?]G.oNWM*p>p*@-!0.(fNWM*q>p*@-!KI1hNWM*r>p*@-!fd:j
-NWM*s>p*@-"-*ClNWM*t>p*@-"HELnNWM*u>p*@-"c`UpNWM+!>p*@-#*&^rNWM-n>p*@-#EAg
-tNWM-o>p*@-#`\q!NWM-p>p*@-$'#%#NWM-q>p*@-$B>.%NWM-r>p*@-$]Y7'NWM-s>p*@-%#t
-@)NWM-t>p*@-%?:I+NWM-u>p*@-%ZUR-NWM.!>p*@-%up[/NWM.">p*@-&<6d1NWM0o>p*@-&W
-Qm3NWM0p>p*@-&rm!5NWM0q>p*@-'93*7NWM0r>p*@-'TN39NWM0s>p*@-'oi<;NWM0t>p*@-(
-6/E=NWM0u>p*@-(QJN?NWM1!>p*@-(leWANWM1">p*@-)3+`CNWM1#>p*@-)NFiENWM3p>p*@-
-)iarGNWM3q>p*@-*0(&INWM3r>p*@-*KC/KNWM3s>p*@-*f^8MNWM3t>p*@-+,GE,!]`,D+Bot
-#DDNDIDDR:S3At.c>9INq1*C1H16)Dr2dIP1+EM.:+EM.:NWM4#>p*>oF*D+:F*D,S!]`8H+Bo
-t0G@D\,DDWJWG@D\#+Bot#DDWJWG@;V8G@;V"+Bot#DD<8GDD<8GDD<8>+Bot0FC?;5FC?;5FC
-?:t+Bot0FCHA6FCHA6FCH@u+Bot0FCQG7FCQG7FCQG!+Bot0FDr@DFDr@DFDr@.+C1-d04S[(E
-ctl-F!+\CD3?c4D3?c4D3?b^Ou%moL]M"!@<-3nE-%1OL]N[<HS9)r5*@]TASu"!+Cf(nEc#6(
-F!,1[99M)e!/LZ3!dcS8P!5$bASu"!+DR'4OuSW.06;5UBl7R*H#R>X4aVtbP"U4d<+BTMEctl
--F!,4\99MJQP'DD<8:?Xl06:]H@3B&n@<-O"CibC4P"Uro06:]H@N]/o@<-O"CibC5P"Uro06:
-]H@j#8p@<-O"CibC6P"UroF(KH%+Dbh%+EM+9@3BW8@ZjBIG]RG<@3BB%@j#i(FC?;5G@Qe/P'
-D%ZFCHA/CLJ?,ATVB(F*D,W99OO@ATVB(ChmN'F(KH&+EMa8P"Us_F(KH'+Dbh%+EM+9@j#i:@
-?O9HG]RG<@j#T'@j#i(FCQG7G@H_.P'D"UGC(uSDI[TqBl7RD"*.goOu%NL<+TrWDe*R"B9!(7
-@<[ktHS8lQF!+q#Ebo<)OpR:-0564BOu"b+L]ESoHYFU3@<-0qDN[/0P!FGY<%ha*+C\c"@rGm
-h+DHW4Oo^@@P"_#iOu$TlF!,3?@s=)\052PCL]ikAOu"b++DQ]5Oo^_%I?J.p@s;u:@s<!M!,@
-ZjOu"b5AU&<W!0T-dP#Q"1@rGmlDJ+t4@<H[1P!+.FAo;+%@;L!-4?SW,7SZ<*Ao9>`"@c-R11
-kDZNW_gH6Si=l1QDT-:.$jMDD[@V9MS5HChmI>"ADQ`6YpOJ+?huP1G<TdB-:YlEbo<)OpR:-0
-6CcMF<G%$Ebo<)P,4<t0564BOu"b+L]ESoHYFU3@<-0qDN[/0P!FGY<%h`p@<*K"@<,jrA7Zlt
-P"UroFCf]=+DN$/BOPqEG]7)3F(Js$@j#8p@<.01P!+s2BcpknEbo<)L]im?P%Kj[HX^E(@rGm
-h+DHW4Oo^_=LgH6]HS8lB@<*K&DI[iuCi^_.@<,jrA7ZltL]NY>L]il7P"UroFCf]=+DQo;+Hh
-"'Bcq,G"HieK1OXU'Bcq,G!KmJH1OYEdI?IQHF(ZV1+Cf(nEftZ#Bcq,G!KmJH1G<JcC5;nR!K
-o6eP%?:`F(ZV4F(^:/C6D8R1G<TdB5D-s+Dl14P%'S106CcMF<G[:G]\`AC6D8R1G<WgD0'c.E
-dKHWL]ESo06;pLOu"b1P!5$bHZ1*EF(]<#DN[V=P!FGY<,H\h+E3K:OuRMoFCUItP$jGlH]iN7
-5^eepAo9>d4aV7+!g7;S!0TKl0687WL]NY>Ou%N5P!FGY<IL$005_nML]NY>Ou"b4+EN>>Oo^_
- %05r%QL]NY>Ou%NLASrW3I?G)'1G<<W@ps^,F(KH%P!5%%@s<!W5&-6EP'AWp+DQ]5Oo^_%I?
-G)'1G<<W@q'd-F(KH&P!5%%@s<!W5&-6EP'AWp+DQ]5Oo^_%I?G)'1G<<W@q0kK30LHu@<-BsH
-$"=NAWgnWF(KH'P!5%%I=%+YP')R7P,XU.LbP!kL^K;]Oo]uo<F^5oP!3WD5*C.DC*78I!KmJH
-1OYDrOu"b"DJsW+H]g@0ATV@D5*B<:5'(:W@Zip<@$5Jl"FZFCOu"b#DJsW*H]g@0ATVCE5*B<
-:5'(:W@?Ng;@$5Jl"FZFCOu"b/AU&<*DJsW++Bot*F(^YFH\_ZMP(SK:%pb>S05b?GFCK-+FC?
-:r+Dl14P%&co!.C#_L*mL;Ou$rrB9H_[!KsF<s+gZ%056S5Ou$rrB-:oO94;^VFCKS>DIn'7@;
-^"*@N]B@!0VSTHZ!D>FCB'*FCHA,+Dtb8FCB'*FCHA,L]NY>P"UT3Oo^_jI?ITIF(ZV0P"T8%D
-ffE7+Dtb8FCK-+FC?;+L]ET_I=#jCG][D4DffD1Bcq;)G][D4DffD1BnueQ!Kp*3!KmJHG^Y`T
-I?I,S@:Ee[DfTDuH]g@+AU&<*DJsW+P!5%%P!3bpG][D4DffEN5*AR%ApogPOu"b#@V'.iEb/[
-+OuR>jG][D4DffEN5*AR%5&OqVFCB'*FCLCsP"UsMI?G)'1G<6^F!+q#Eas#uAWgMY!g7AU"-N
-\J$'I(tC5;kQ1Mq2GCh7L?!0U0*L]D=8D0'c.Ed`:js+p]'P#X/QF_u2_5*@]TDI[?gEc[C-Ou
- %H%F(]<#DMS:U4aV6l@N]6"@pq$#F(KHR"ES-r@ZiO15^eepD0'?+AT!;*P!*]*D0(L7P!+s2
-HZO:=+D#G#@4u,3ATWq8F(KH'Ou&7dI?IQIF_u2U"HlB(F*(n7ASu!d04T'7FH-KFATVFF1Qk"
-OP#R5;@:Ee[DfTDuHQ[BO@3B-!@pq$#F(KHR"ES-r@?NF05^eepF*(k6ASu!d04T'7FH-KFATV
-CE1Qk"OP%?:\L]ESoHYFU>F(]<#DN[/0P!FGY<,!ImF_u2@@ra5?F_u2_5*@]TDI[?gEc[C-Ou
- %GpF(KHR"ES-r@?Nc`F(KHR"ES-r@Zim;Ec-#:F,0s^8s0<oF(ZV0P"TD)0p6C:"FG$/D0(L7
-P%odQP!+/5G@Mb*F(KHR"ES-r@?Nd#ASu!dI=!)JDI[.(P#X/FF(KHR"ES-rA!/X25^durF(ZV
-0P"T;+ATWq8F(KH%P!+/'DI[+'HQZm;@q'kL<A/&/BnueQ!Ko6[G@Mb*F(KHR"ES-r@?Nd#ASu
-!dI=!)JDI[.(P#X/FF(KHR"ES-rA!/X25^eeqI?IQ>F(KHR"ES-r@ZilkF(ZV0P"T5$DffHO"F
-Fi*D0'?+AT!;)P,XUVHYJ9:Oo]$$AS,k$ARTp.F(TM:ASu!e+Dl14+DI!3ASu!d052PCL]NY>O
-u&7dI?IQXP#QLH@3B-!@q%*$F(KHR"ES-r@?NF05^eep@rl4'NWaE7FCC=qD0'>4Bp)+uDJsW*
-Op$,G+Dl14Ch7L?!KsFFAp\6J!KmIl@V'.iEb/^,+EM.:+D#G#@3BE.B-:oO94`!N@P;F<Bnue
-Q!Ko7%5^eepI?IQNG@D\+DI[*.@rl4'NWaE7FCLChP!FGY<+Bu\FH-KFATVFF4`5CZF,0m\As*
-:DBcphnAS,k$AR^!/F*D%8ASu!f04T'7FH-KFATV@D1Qk"OP#QLH@N]6"@q.0%F(KHR"ES-r@Z
-iO15^eep@rl4'NWaE7FCC=qHYmh:+DI!3ASu!d052PCL]NY>Ou&7dI?IQ>F(KHR"ES-r@Zim$D
-0'>4Bp),#DI[-/Bcq,G!KmJH1Qk"OP#Pq4ATWq8F(KH'P!+//F(ZV0P"TD)0p4\HAo9=GASu!f
-052PCL]NY>Ou%N5D0'>4BnuhR9P&*O@kVO=BnuhR!Ko6eP#[Z1I?IQm5^ef,I?J.p@s;u:@s<!
-M!,@ZjOu%NL<%ha*F!,4R!g3SI$'I9(!+U4oP'N3H04T'GD'3>4F,0gZ99M)e!JgbkL]N[<HS9
-)r5*@]T@rld0+CfJ8D'3>4F!,1[950Q*Oo^_%I?I,S@rld0+CfJ8D2;hfC6CA_GB4mA+CfJ8D3
-B-RGB4mAL]NY>F(KH%+EMXDP"Us_04f$2F!+\I"u7ng1,:VF"u7qh0etME"u7qh1,:SE"u.kf1
-,:YG"u.kf1GU_G"u.ng1,:VF"u.kg1,1SF"u.kg1GLYF"u.nh1,1PE"u7qg1,1SF"u7qg1GLYF
-"u7th1,1PE"u.hf1,C\G"u.kg0f(SF"u.kg1,CYF"u.hg1,:VF"u.kh0etME"u.kh1,:SE"u7q
-i1,1MD"u7qg0f(SF"u7qg1,CYF"u7nh1,1PE"u7qi0ekGD"u@th0f(PE"u@tg1,:VF"uA"h0et
-ME"uA"h1,:SE"u@th1,1PE"uA"i0ekGD"uA"i1,1MD"u7ng0etPF"u7ng1GU\F"u7ti0etJD"u
-.he1GUbH"u.ng0etPF"u.ng1GU\F"u.hf1GL\G"u.nh0ekJE"u.nh1GLVE"u7nf1GL\G"u7th0
-ekJE"u7th1GLVE"u.hf0f(VG"u.hf1G^bG"u.nh0f(PE"u.hg0etPF"u.hg1GU\F"u.ni0etJD
-"u@ti0etJD"u7nf1G^bG"u7th0f(PE"u7nh0ekJE"u7nh1GLVE"u7nh0f(PE"u@tg0etPF"u@t
-g1GU\F"uA%i0etJD"u@th0ekJE"u@th1GLVE"uA%j0ekDC"u@tj0ekDC"u7qg1bg_F"uJ+j0ek
-DC"u.he1,:\H"u.he1bphH"u.kf0etSG"u.kf1bpeG"u.qh0etME"u.qh1,:SE"u.hf1,1VG"u
-.hf1bgbG"u.kg0ekMF"u.kg1bg_F"u.qi0ekGD"u.qi1,1MD"u8"i1,1MD"u7qg0ekMF"uJ%j0
-ekDC"u8"i0ekGD"u.nj0ekDC"u.he1,LbH"u.kf0f1YG"u.kf1,L_G"u.hh1,1PE"u.ki0ekGD
-"u.ki1,1MD"uJ%h1,1PE"uJ(i0ekGD"uJ(i1,1MD"u7ng0f1VF"u7ni0etJD"uJ%i0etJD"u.h
-e0f1\H"u.he1GghH"u.ng0f1VF"u.hh0ekJE"u.hh1GLVE"uJ%h0ekJE"uJ%h1GLVE"u.hg0f1
-VF"u.hh0f(PE"u@tg0f1VF"uJ%h0f(PE"u7nf1bgbG"u7nf1,1VG"u7nf1,C\G#;S(k0ekC<?'
-6usF(025@s<!W@Yb5OCkr+T!Ks:B1Pc$e!Fp=pP%'4JP,Wd]Bp(ZC1NR#H+DHW9P&+]I@ric&G
-B4m@P"Us2P'MJ=83B!fEb0,A061WACh[cu@<+#B@WNYr+EM"5H\aA=WI9q$>q]Z#F!+[0F(03R
-@Yb&J!Jgf?;L<(gBkM+$I?K4g04JC3+Bot0@WR]AL]NY>L]W`;H\_ZMP(R$nFEhmM>9I,mFCf]
-=+EV1>FEh_9AohO*+EV1>FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)+C-XBAU&<A@;KXjDN4
-p2ASuU$E\D?MF<GL@FD5Z2F!*Y1+CoD.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$@rGmh0e
-t_O30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB
-9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/code128 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code128 0.0 2015050900 112448 118940
+%%BeginData: 421 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/code128 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+ /encoding (auto) def
+ /raw false def
+ /parse false def
+ /parsefnc false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Special function characters
+ /sta -1 def /stb -2 def /stc -3 def
+ /swa -4 def /swb -5 def /swc -6 def
+ /fn1 -7 def /fn2 -8 def /fn3 -9 def
+ /fn4 -10 def /sft -11 def /stp -12 def
+ /lka -13 def /lkc -14 def % CC-A/B and CC-C linkage
+
+ % Character maps for each state
+ /charmaps [
+ % A B C A B C A B C
+ [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
+ [ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5
+ [ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8
+ [ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11
+ [ (,) (,) (12) ] [ (-) (-) (13) ] [ (.) (.) (14) ] % 12-14
+ [ (/) (/) (15) ] [ (0) (0) (16) ] [ (1) (1) (17) ] % 15-17
+ [ (2) (2) (18) ] [ (3) (3) (19) ] [ (4) (4) (20) ] % 18-20
+ [ (5) (5) (21) ] [ (6) (6) (22) ] [ (7) (7) (23) ] % 21-23
+ [ (8) (8) (24) ] [ (9) (9) (25) ] [ (:) (:) (26) ] % 24-26
+ [ (;) (;) (27) ] [ (<) (<) (28) ] [ (=) (=) (29) ] % 27-29
+ [ (>) (>) (30) ] [ (?) (?) (31) ] [ (@) (@) (32) ] % 30-32
+ [ (A) (A) (33) ] [ (B) (B) (34) ] [ (C) (C) (35) ] % 33-35
+ [ (D) (D) (36) ] [ (E) (E) (37) ] [ (F) (F) (38) ] % 36-38
+ [ (G) (G) (39) ] [ (H) (H) (40) ] [ (I) (I) (41) ] % 39-41
+ [ (J) (J) (42) ] [ (K) (K) (43) ] [ (L) (L) (44) ] % 42-44
+ [ (M) (M) (45) ] [ (N) (N) (46) ] [ (O) (O) (47) ] % 45-47
+ [ (P) (P) (48) ] [ (Q) (Q) (49) ] [ (R) (R) (50) ] % 48-50
+ [ (S) (S) (51) ] [ (T) (T) (52) ] [ (U) (U) (53) ] % 51-53
+ [ (V) (V) (54) ] [ (W) (W) (55) ] [ (X) (X) (56) ] % 54-56
+ [ (Y) (Y) (57) ] [ (Z) (Z) (58) ] [ ([) ([) (59) ] % 57-59
+ [ 92 92 (60) ] [ (]) (]) (61) ] [ (^) (^) (62) ] % 60-62
+ [ (_) (_) (63) ] [ 0 (`) (64) ] [ 1 (a) (65) ] % 63-65
+ [ 2 (b) (66) ] [ 3 (c) (67) ] [ 4 (d) (68) ] % 66-68
+ [ 5 (e) (69) ] [ 6 (f) (70) ] [ 7 (g) (71) ] % 69-71
+ [ 8 (h) (72) ] [ 9 (i) (73) ] [ 10 (j) (74) ] % 72-74
+ [ 11 (k) (75) ] [ 12 (l) (76) ] [ 13 (m) (77) ] % 75-77
+ [ 14 (n) (78) ] [ 15 (o) (79) ] [ 16 (p) (80) ] % 78-80
+ [ 17 (q) (81) ] [ 18 (r) (82) ] [ 19 (s) (83) ] % 81-83
+ [ 20 (t) (84) ] [ 21 (u) (85) ] [ 22 (v) (86) ] % 84-86
+ [ 23 (w) (87) ] [ 24 (x) (88) ] [ 25 (y) (89) ] % 87-89
+ [ 26 (z) (90) ] [ 27 ({) (91) ] [ 28 (|) (92) ] % 90-92
+ [ 29 (}) (93) ] [ 30 (~) (94) ] [ 31 127 (95) ] % 93-95
+ [ fn3 fn3 (96) ] [ fn2 fn2 (97) ] [ sft sft (98) ] % 96-98
+ [ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101
+ [ fn1 fn1 fn1 ] [ sta sta sta ] [ stb stb stb ] % 102-104
+ [ stc stc stc ] [ stp stp stp ] % 105-106
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 109 dict 109 dict 109 dict ] def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 2 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals j get exch i put
+ } for
+ } for
+ /seta charvals 0 get def
+ /setb charvals 1 get def
+ /setc charvals 2 get def
+
+ % Include pseudo characters for GS1-128 Composite linkage identifiers
+ seta lka seta swb get put seta lkc seta swc get put
+ setb lka setb swc get put setb lkc setb swa get put
+ setc lka setc swa get put setc lkc setc swb get put
+
+ raw {/encoding (raw) def} if
+
+ encoding (raw) eq {
+ /cws barlen array def
+ /i 0 def /j 0 def
+ { % loop
+ i barlen eq {exit} if
+ /cw barcode i 1 add 3 getinterval cvi def
+ cws j cw put
+ /i i 4 add def
+ /j j 1 add def
+ } loop
+ /cws cws 0 j getinterval def
+ /text () def
+ } if
+
+ encoding (auto) eq {
+
+ /fncvals <<
+ (FNC1) fn1
+ (FNC2) fn2
+ (FNC3) fn3
+ (FNC4) fn4
+ (LNKA) lka
+ (LNKC) lkc
+ >> def
+
+ % Convert input into bytes accounting for FNC and LNK characters
+ /msg barlen array def
+ /text barlen string def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ text j char put
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ text j ( ) putinterval
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+ /text text 0 j getinterval def
+
+ % Determine digit runlength and characters from given position
+ /numsscr {
+ /n 0 def /s 0 def
+ /p exch def {
+ p msglen ge {exit} if
+ msg p get
+ dup setc exch known not {pop exit} if
+ fn1 eq {
+ % FNC1 in odd position of run like two digits
+ s 2 mod 0 eq {/s s 1 add def} {exit} ifelse
+ } if
+ /n n 1 add def
+ /s s 1 add def
+ /p p 1 add def
+ } loop
+ n s
+ } bind def
+
+ % Encoding for each alphabet
+ /enca {
+ seta exch get cws exch j exch put
+ /j j 1 add def
+ } bind def
+ /encb {
+ setb exch get cws exch j exch put
+ /j j 1 add def
+ } bind def
+ /encc {
+ dup type /arraytype ne {
+ setc exch get
+ } {
+ aload pop 48 sub exch 48 sub 10 mul add
+ } ifelse
+ cws exch j exch put
+ /j j 1 add def
+ } bind def
+
+ % Character exclusively in either alphabet A or B
+ /anotb {dup seta exch known exch setb exch known not and} bind def
+ /bnota {dup setb exch known exch seta exch known not and} bind def
+
+ % Pre-compute relative position of next anotb and next bnota characters
+ /nextanotb [ msg length {0} repeat 9999 ] def
+ /nextbnota [ msg length {0} repeat 9999 ] def
+ msg length 1 sub -1 0 {
+ /i exch def
+ msg i get anotb {
+ nextanotb i 0 put
+ } {
+ nextanotb i nextanotb i 1 add get 1 add put
+ } ifelse
+ msg i get bnota {
+ nextbnota i 0 put
+ } {
+ nextbnota i nextbnota i 1 add get 1 add put
+ } ifelse
+ } for
+
+ % Does a-only come before b-only after given position and vice versa
+ /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def
+ /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def
+
+ /cws barcode length 2 mul 3 add array def
+
+ % Select start character
+ /j 0 def
+ msglen 0 gt {0 numsscr} {-1 -1} ifelse /nums exch def /nchars exch def
+ { % common exit
+ msglen 0 eq {
+ stb enca
+ /cset (setb) def
+ exit
+ } if
+ msglen 2 eq nums 2 eq and {
+ stc enca
+ /cset (setc) def
+ exit
+ } if
+ nums 4 ge {
+ stc enca
+ /cset (setc) def
+ exit
+ } if
+ 0 abeforeb {
+ sta enca
+ /cset (seta) def
+ exit
+ } if
+ stb enca
+ /cset (setb) def
+ exit
+ } loop
+
+ % Main encoding loop
+ /i 0 def {
+ i msglen eq {exit} if
+
+ i numsscr /nums exch def /nchars exch def
+
+ % Determine switches and shifts
+ { % common exit
+ cset (seta) eq cset (setb) eq or nums 4 ge and
+ msg i get fn1 ne and {
+ nums 2 mod 0 eq {
+ swc cset (seta) eq {enca} {encb} ifelse
+ /cset (setc) def
+ exit
+ } {
+ msg i get cset (seta) eq {enca} {encb} ifelse
+ /i i 1 add def
+ swc cset (seta) eq {enca} {encb} ifelse
+ /cset (setc) def
+ exit
+ } ifelse
+ } if
+ cset (setb) eq msg i get anotb and {
+ i msglen 1 sub lt {
+ i 1 add bbeforea {
+ sft encb
+ msg i get enca
+ /i i 1 add def
+ exit
+ } if
+ } if
+ swa encb
+ /cset (seta) def
+ exit
+ } if
+ cset (seta) eq msg i get bnota and {
+ i msglen 1 sub lt {
+ i 1 add abeforeb {
+ sft enca
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+ } if
+ swb enca
+ /cset (setb) def
+ exit
+ } if
+ cset (setc) eq nums 2 lt and {
+ i abeforeb {
+ swa encc
+ /cset (seta) def
+ exit
+ } if
+ swb encc
+ /cset (setb) def
+ exit
+ } if
+
+ % No switches or latches so encode
+ cset (seta) eq {
+ msg i get enca
+ /i i 1 add def
+ exit
+ } if
+ cset (setb) eq {
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+ cset (setc) eq {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ exit
+ } if
+
+ exit
+ } loop
+
+ } loop
+ /cws cws 0 j getinterval def
+ } if % auto encoding
+
+ % Derive checksum and place stop character
+ /cws j 2 add array dup 0 cws putinterval def
+ /csum cws 0 get def
+ 1 1 j 1 sub {
+ /i exch def
+ /csum csum cws i get i mul add def
+ } for
+ /csum csum 103 mod def
+ cws j csum put
+ cws j 1 add seta stp get put
+
+ % Create an array containing the character mappings
+ /encs
+ [ (212222) (222122) (222221) (121223) (121322) (131222) (122213)
+ (122312) (132212) (221213) (221312) (231212) (112232) (122132)
+ (122231) (113222) (123122) (123221) (223211) (221132) (221231)
+ (213212) (223112) (312131) (311222) (321122) (321221) (312212)
+ (322112) (322211) (212123) (212321) (232121) (111323) (131123)
+ (131321) (112313) (132113) (132311) (211313) (231113) (231311)
+ (112133) (112331) (132131) (113123) (113321) (133121) (313121)
+ (211331) (231131) (213113) (213311) (213131) (311123) (311321)
+ (331121) (312113) (312311) (332111) (314111) (221411) (431111)
+ (111224) (111422) (121124) (121421) (141122) (141221) (112214)
+ (112412) (122114) (122411) (142112) (142211) (241211) (221114)
+ (413111) (241112) (134111) (111242) (121142) (121241) (114212)
+ (124112) (124211) (411212) (421112) (421211) (212141) (214121)
+ (412121) (111143) (111341) (131141) (114113) (114311) (411113)
+ (411311) (113141) (114131) (311141) (411131) (211412) (211214)
+ (211232) (2331112)
+ ] def
+
+ % Derive space bar succession
+ /sbs cws length 6 mul 1 add string def
+ 0 1 cws length 1 sub {
+ /i exch def
+ sbs i 6 mul encs cws i get get putinterval
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ /txt [ [text textxoffset textyoffset textfont textsize] ]
+ /textxalign (center)
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/code128 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code128--
@@ -903,47 +2879,165 @@ t_O30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp gs1-128 0.0 0 0 0
-%%BeginData: 39 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A MG r"OuP+ ;CG
-'+8/p(ZFEd;,:Ec c5;/n 0$= E,^ u oP' E-! 05# >\/MT" ?H \`B!23 JD%
-DfBf4Df0WZ5*@]T @UX:e De* FB5 *@ ]T A8c @-A 9)+&+D ,% uF(LLj 055
-<6Cis9"FCf]=+D, %uF( LLj 06 Cc MFC oH/ FHO V,1G
-<i]G]\"@H=_m>Ou "b5A U &< AD e<U &AT W_.O u"b5A
-U&<BDe<U&ATWb(O u"b)AS Gdj F G`9 _! !&0< 05P ??CLLje@3B /jCia0N1G<Q
-YDJNZnARcip@;L! rOu%#q FD5 Z 2F-< ^[F* )G: DJ+':E+P1q H\_]c23JDeE
--,f4DKC/fX(GdVF (LLtH] gXB P#RT (P%' TNO thst4d(eHE ckrV4aW>DP!
-5%OP!5$bI=%,/FE 2M8Ou %NL< IL$AO rfcH 05k fOBl@m1P!5 $bI?IQJE-,f
-4DKC/f1OYEX06Cc MFCoH /F<G[ :G][P 9DK M$nOu"b5AU &<<BmO>5FCf
-]=F(or3OtVtS06C cMFEh_9 AohO*+ EV1>F Eh_ 9AohO*OtVt S06CcMFEqe:
-AohO*+EV1>FEqe:AohO*OtVtS05+p2B4uB0BOtmjBQTCjOu"b5AU&;>@UX:eDe*FB1G<<aE+*W
-pHS9)NP!5$b05kuT+DG_V@ZmRN1G<L!!0T-PDL7BE?BU:pOuRB&FHSh&P!5%SP%&0h!Jgc>!AA
-2N5*@^bFcn_?!/L`?9TgrFF``d1C5;nRWKKH.G`k%L@Yb,LWJCY>5*ATfH]g@,F``d1C6CcDH'
-2WOOo[4NP!5$bDfp/X!,@ZjP!FGY<IL$AI?G)'1G<0NF!+[0?'6us@;0mnCkr.U23Kb)@<,jrA
-7^o`P%'4JP,X6<P!5%&H]g@K!0TKlP!FGY</pu.P)YWIP!5%OP!4m,.$BR:P!5%OP!4[(L]NZo
-I=$tSL]`G6P)"IK<EgSSBlfF=P')p,L]W_?P#u!C@;0eG5*@^1Bm*p$L]`G6P)!UnE+*WpP'DD
-<AWh0h@;0=fG\(EA(QpY=1L#Y8L]N;7H[V&J?$hS50JJ:aP,4<ZOuSUaL]N;8M#WWnLbOtmP'C
-DLAncL$A;C>D!Kr5$G^Y`H>DNZC!JhG:I?I-W(Pj/h!Ji"JI?I-W.:%:V$A\bHV33Nq3+6N5Bm
-=3"L]`G6P)#3FI?I/TAo;*5M#WVo04Q^l3$;EJAo;*5+C1-dL]E53@;0eG@Yb&JWI$:4P!5$b0
-4AQ;@;0d*Bp),P1G<o[C`m/#G%#20@;1ltOu$T&1,tG+@;1m6Oo]`7Cm&7j!KmbP3/@QE0et_O
-H'1-s0et_O@UWsn>EV0sI?I0-P'N3M@kf_uP%%j6P%'RTG%#20>EV0sI?I0-P'J]j0et_O5*@^
-9+CSu*P%'4JP,XU]@;0=fG\(D.@;1MtL]W`5P$jGlOp$,A0et_O@Yb&J!KmbP3/@QE0et_OH'1
--s0et_O@V0Lf0p6c7@kf_uP!5$bI?IQXP"768@<,jrA7Zln0et_O@Yb&J!JgoBCm(WX1G<Hu!0
-T,kC5;kQ1OEgY@kf_uP%'S;H]gXBP#PpG1,pCjP"UrtAo;*5P!+/TF^ed"@rGmh+DQo??:I[W0
-p6f8C*78I"HieK1OXUZ@<,jrA7^ofC6CcDG^Y`T052PCL]NY>Ou"b++DQ]5Oo^_%I?J/XBl7]p
-B4YKoCh[d&@:s.]P&bnY@<,jrA7Zlu+Dbb0CLLje@=+"<?;+*e6%+*?"^Xkt91+,j<K_V\C*78
-I"d/nL1OYEc04J@1@rGmh+C\c"@rGmhL]D1Q9Th2ME-,f4DKCgBBOtmjBQRp!BkM+$P'CnaFD5
-Z2F,gN:Df0Z-Eaa06EckrVG].PCBl@m1NX0T4EcYf(DI[d/F_-_\04Am6F!+q#Eas#uAKYo1FD
-5Z2F"]1VDe*E61,tF]Ou$NeB60(8FEhn3+Bot1AU&;>FCf]=G].2+F(KG9FCf]=H#I;,F(KG9F
-Cf]=AoDR/+EV1>FE;/BAKY8$?'9G@EbBHR$?Tj(FEh51BkM=D#%M4^FCfKUG[YW*F,g?@E--#;
-FD5Z2F-:cVEbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b(F"o7$1,tFVP%64gCG'+
-8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*
-6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/gs1-128 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp gs1-128 0.0 2015050900 77611 77161
+%%BeginData: 157 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code128 dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1-128 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 0.5 def
+ /linkagea false def
+ /linkagec false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ /text barcode def
+
+ % Expand ordinals of the form ^NNN to ASCII
+ /expand {
+ /in exch def
+ /out in length string def
+ /j 0 def
+ in
+ { % loop
+ (^) search {
+ dup out exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi out exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup out exch j exch putinterval
+ length j add /j exch def
+ out 0 j getinterval exit
+ } ifelse
+ } loop
+ } bind def
+
+ % Parse out AIs
+ /ais [] def
+ /aival 2 dict def
+ barcode dup length 1 sub 1 exch getinterval
+ { % loop
+ dup () eq {exit} if
+ (\)) search pop
+ exch pop
+ exch (\() search {
+ exch pop exch 3 1 roll
+ } {
+ () 3 1 roll
+ } ifelse
+ [ ais aload pop counttomark 2 add index ] /ais exch def
+ aival 3 1 roll expand put
+ } loop
+ pop
+
+ % Pre-defined fixed length data field AIs
+ % any AI whose prefix is not included in this table must be
+ % terminated with "FNC1", even if it's fixed length
+ /aifixed 23 dict def
+ [
+ 0 1 4 {} for
+ ] {
+ (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
+ } forall
+ [
+ 11 1 20 {} for
+ 23
+ 31 1 36 {} for
+ 41
+ ] {
+ 10 2 string cvrs dup aifixed 3 1 roll put
+ } forall
+
+ % Create the code128 data
+ /fnc1 -1 def
+ /c128 [ fnc1 ] def
+ 0 1 ais length 1 sub {
+ /i exch def
+ /ai ais i get def
+ /val aival ai get def
+ c128 length ai length add val length add array
+ dup 0 c128 putinterval
+ dup c128 length ai [ exch {} forall ] putinterval
+ dup c128 length ai length add val [ exch {} forall ] putinterval
+ /c128 exch def
+ i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ c128 length 1 add array
+ dup 0 c128 putinterval
+ dup c128 length fnc1 put
+ /c128 exch def
+ } if
+ } for
+
+ % Compose input to code128
+ /barcode c128 length 1 add 5 mul string def
+ /i 0 def /j 0 def {
+ i c128 length eq {exit} if
+ c128 i get dup fnc1 eq {
+ pop barcode j (^FNC1) putinterval
+ /j j 4 add def
+ } {
+ barcode exch j exch put
+ } ifelse
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ linkagea linkagec or {
+ barcode j linkagea {(^LNKA)} {(^LNKC)} ifelse putinterval
+ /j j 5 add def
+ } if
+ /barcode barcode 0 j getinterval def
+
+ % Get the result of encoding with code128
+ options (height) height put
+ options (dontdraw) true put
+ options (parsefnc) true put
+ /args barcode options //code128 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/gs1-128 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1-128--
@@ -951,44 +3045,116 @@ FD5Z2F-:cVEbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b(F"o7$1,tFVP%64gCG'+
% --BEGIN ENCODER ean14--
% --REQUIRES preamble raiseerror renlinear code128--
% --DESC: GS1-14
-% --EXAM: (01)04601234567893
+% --EXAM: (01) 0 46 01234 56789 3
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean14 0.0 0 0 0
-%%BeginData: 33 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A MG r"OuP+ ;CG
-'+8/p(ZFEd;,:Ec c5;/n 0$= E,^ u oP' E-! 04e R00f46 5' Tt>:%5 2X=
-FD5Z2F-8_M1G<3G Eas#u AWf 6?1 G< 9W DKK E0@ <Wi+@; L! rOu"b* DI[
-L*A7]joG]Y'?@;L !rOu "b5 AU &< /Df 0ZZ a-& 53FC
-f]=F(or3L^K;$06 CcMF E h_ 9A ohO *L] ESo0 6CcMF
-Eqe:AohO*M#!2i0 5+p2B4 uCC ! Ko6 WE -,f4 DKC uE06;5UBl7 R*H#R>X4aVt
-cOu8C3DfBf4Df0W CP,i2' Cia 0 N4aW >WI? IQm 30Ia6V33Qn !BlU*FE2M8P
-!+/T/Wr;\FcnqO1 OXV5/T c#U AWei tP#Z pnA We*t3A5;iF D5Z2F-8_M1O
-YEcDfBf4Df0WCOu %NL8M >0sG ][P9D KI"C AU& </Df0Z[/Wq nCFCf]=F(or
-3+EV1>FE;/BAWe^ 01G<i ]G]\1 KAnH* qF< G[:G]\1KAn H*qFHS;?1G<
-i]G]\4LAnH*qF<G [:G]\4L AnH*qF HS;?1 G<E QBkM+$+D>> #B4uCM09S,#
-@<,jrA7^PsL]il7NW^aa0e&9&HS8iPBlJ#DARTI21h'm(5tR(l7oM,o0f1"iF`VXI@V'1dDBO.
-;FD)dF0JP"!@;p1%Bk(RnBl@l3Bk1dmFD5?$ATBFWEa`['AS#n&DfV"*I?IQ=@<,jrA7^p5L_5
-ee@UX:eDe*FB@YbY[D3>$K04K->E,[F@@;[eV@UWe@ASu.&BT=-(;_]jY1a$XXF*&O6AKW]`+E
-)9C0f1"`BkM.%F"]1e@;0doATDg0EfrY8P#Pn!Eas#uAV^Iu@<,jrA7^p5L]im?P"^4c3/B8OA
-s,?63Kd4%EdKHKGA2#8/nJI/0f3?JA4($=Ea`I"ATEeQ7oM,o0f1"iF`VXI@rH7,@;0U%Df0B:
-+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfL
-sF_r72BOt[hF*2=B@UX:eDe*E%BnunT!Kp*30TrDLL]W`SL]ET$H\_ceCjhIGOo^_%I?I,S@q]
-F`CNFW8L^IX*ARfLsF_upAP%p/ZL^K;[Ou$QUEas#uAWgMY&s>D)@UX:eDe*F8&X#dsBOt[hF*
-2>U0TlI"D0mpFGA2#8/nJI/0f3?JA4($A@r"JHB5)IJ,tVuaDfTl0@rrh`;_]jY1a$:AARfKuA
-8,[jF<GOCDg#i*ARmGIEa`['AS#n&DfV"*I?IQXP#R5MP,4=$L]CmmEas#uAWh>%3/A/VBOt[h
-F*2>U0TlI"GV<N7Eas#uAWf6?1G<B_Bl5&&@<,jrA7^Q"L^oSAOu"b5AU&;>@UX:eDe*FB1G<3
-GEas#uAV_(aV33WD@<,jrA7^PsNX&l[:.$`i0p6fk@<,jrA7^Q%B67j*P'LtbFD5Z2F,gN:Df0
-Z-Eaa06EckrVG].PCBl@m1NX0T4EcYf(DI[d/F_-_\04Am6F!+q#Eas#uAKYo1FD5Z2F"]1VDe
-*E61,tF]Ou$NeB60(8FEhn3+Bot1AU&;>FCf]=G].2+F(KG9FCf]=H#I;,F(KG9FCf]=AoDR/+
-EV1>FE;/BAKY8$?'9G@EbBHR$?Tj(FEh51BkM=D#%M4^FCfKUG[YW*F,g?@E--#;FD5Z2F-:cV
-EbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b&@;[eVOuSV806M%_@rEuAATDg:@Wc^
-5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/ean14 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp ean14 0.0 2015050900 69977 69481
+%%BeginData: 105 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code128 dup /uk.co.terryburton.bwipp findresource put
+begin
+/ean14 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Strip spaces from the given data
+ /text barcode def
+ barcode dup length string exch 0 exch
+ {dup 32 ne {3 copy put pop 1 add} {pop} ifelse} forall
+ 0 exch getinterval /barcode exch def
+ /hasspace text length barcode length ne def
+
+ % Validate the input
+ barcode 0 4 getinterval (\(01\)) ne {
+ /bwipp.ean14badAI (GS1-14 must begin with (01) application identifier) //raiseerror exec
+ } if
+ barcode length 17 ne barcode length 18 ne and {
+ /bwipp.ean14badLength (GS1-14 must be 13 or 14 digits) //raiseerror exec
+ } if
+ barcode 4 barcode length 4 sub getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.ean14badCharacter (GS1-14 must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 12 {
+ /i exch def
+ /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 18 eq {
+ barcode 17 get checksum 48 add ne {
+ /bwipp.ean14badCheckDigit (Incorrect GS1-14 check digit provided) //raiseerror exec
+ } if
+ } {
+ 18 string
+ dup 0 barcode putinterval
+ dup 17 checksum 48 add put
+ /barcode exch def
+ text length hasspace {2} {1} ifelse add string
+ dup dup length 2 sub ( ) putinterval
+ dup dup length 1 sub checksum 48 add put
+ dup 0 text putinterval
+ /text exch def
+ } ifelse
+ /gtin barcode 4 14 getinterval def
+
+ % Compose input to code128
+ /barcode 21 string def
+ barcode 0 (^FNC101) putinterval
+ barcode 7 gtin putinterval
+
+ % Get the result of encoding with code128
+ options (dontdraw) true put
+ options (parsefnc) true put
+ /args barcode options //code128 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/ean14 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean14--
@@ -996,45 +3162,116 @@ EbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b&@;[eVOuSV806M%_@rEuAATDg:@Wc^
% --BEGIN ENCODER sscc18--
% --REQUIRES preamble raiseerror renlinear code128--
% --DESC: SSCC-18
-% --EXAM: (00)006141411234567890
+% --EXAM: (00) 0 0614141 123456789 0
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp sscc18 0.0 0 0 0
-%%BeginData: 34 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A MG r"OuP+ ;CG
-'+8/p(ZFEd;,:Ec c5;/n 0$= E,^ u oP' E-! 06; 2E@kfr iL _Q"0Op s'_
-E-,f4DKCt)Ou"b# @<,jr A7^ ofO u" b% Df0 Z-E aa/7Am oL sAWei& Bl7
-EsF_#'*AU&;>Amo LsAW ei& FC f] =Ao DR/ OiN V@06
-CcMFE;/BAV^\V1G <i]G ] \1 KA nH* qFG Kp[1 G<i]G
-]\4LAnH*qFGTaU1 G<EQBk M+$ L ]NY pD fBf4 Df0 WZY:js=EbT E(FEqh:P!+/
-J!Ko='%<$3-Bl@m 1H]kFA @;L ! rP!+ /T5^ eep OuSV6P,4<r NWD;+NHB2`A
-Wf3'OtDh\P')pOO u%N5Ot Ccr F_-^ lI?I TYP %BdtOuY16E -,f4DKCt)Ou
- %NL<,Z_tBl@m1H ]g15P "@<K AU&</ Df0Y >FC f]=AoDR/Ot DhQ06CcMFE;
-/BAKZ)+G]\"@H=` 6mOu" b5AU& <ADe< U&A TT&:AU&<AD e<U&ATX(gOu
-"b5AU&<BDe<U&AT T&:AU&< BDe<U& ATX(g Ou" b)ASGdjF<G 7.BkM+$OtVt
-S@UX:eDe*F8!/Lc@9TB6(0JFr=D0mpFGA2#8/ou)D@kfrP@:VYqN\aU46UNF[3$<'\F*&O6AS5
-^p+EqOABHS]W0I\,QE,]W-@psInDf-\3A7]Y#BkD'jE\B(d@;0doATDg0EfrY8P#Pn!Eas#uAW
-gMY'p<EC@<,jrA7^p5L_c.jOp$+b@WuO*E%Z3Q@q.5Q@UWe@ASu.&BT=05;aWo(0fU:mF`VXI@
-V$Z:2^!$Z+>GhuA8,[jFE9)gEa`['AS#n&DfV"*I?IQ=@<,jrA7^Q"@UX:eDe*FB@Yb/MWKKr%
-OuS7OP%Kk@LcLVpP&bn&@WuO*E%Z3Q@q.5Q@UWe7BOPpi@ru:&NZ_8!6UNF[3$<'\F*&O7Df0Z
-*Bl5&3DJXS@A8,[jFE9)gEa`['AS#n&DfV"*I?IQXP"@<:BOt[hF*2>U!0T-o!/LZ3&:6'EP!5
-$b04S[,@r$..D'3>%ARfLsF_r71@<,jrA7ZltL]ikAP"UTbP,W/O!g7;S!0TKlL]`fVI?IQm!K
-o6eP"769BOt[hF*2>U$=da\@r$..D28O^C6GQP$Bf.e1Lad5@rGmhP%'4_P!+/$@<,jrA7^Q3P
-"T:uARfLsF_upgOo^__HS8iPBlJ#DF)ti$0fWWNA4($A@r"JHB5)IJ-:r)bDfTl0@rrhl;aWo(
-0fU:cBOt[h+Co2!BlkJ:Ec6,8A7]:)061K8F(Jp'Ec5u]5CJ\oI?IQc(6YMW3/@QD@<,jrA7^p
-LOuS74@q]F`CNFW8LbOtmP'AWh@<,jrA7^ofOu"b4F(8]&@UX:eDe*F8"Gd\R9Th1bFCf]=+C\
-c"@rGmhOu"b#@<,jrA7^Q7P,4<t@UX:eDe*F8!0.:j7SZ<*0JJZ8@UX:eDe*F8#BOrrA!2+UE-
-,f4DKCgDA8c@-A9)+&FE2M8P'CnaFD5Z2F,gNF@<-F#Ao;+#EckrVGV<KGB6,2)@<,jrA7Zm%E
--,f4DK@Ha@rGmh0et_O5E[g2EbBHR"*Ad0>9I,mFCf]=+EV1>FEh_9AohO*+EV1>FEqe:AohO*
-+EV1>FCoH/F<G[:G]\"@H=\4)+C1.T@<-"%NXBl>G]\1=Ch[O"NWs!)DKKH1P'CDUB60(8DfBf
-:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$F)ti$0fY=UP%64gCG'
-+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+
-*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/sscc18 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp sscc18 0.0 2015050900 69989 69488
+%%BeginData: 105 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code128 dup /uk.co.terryburton.bwipp findresource put
+begin
+/sscc18 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Strip spaces from the given data
+ /text barcode def
+ barcode dup length string exch 0 exch
+ {dup 32 ne {3 copy put pop 1 add} {pop} ifelse} forall
+ 0 exch getinterval /barcode exch def
+ /hasspace text length barcode length ne def
+
+ % Validate the input
+ barcode 0 4 getinterval (\(00\)) ne {
+ /bwipp.sscc18badAI (SSCC-18 must begin with (00) application identifier) //raiseerror exec
+ } if
+ barcode length 21 ne barcode length 22 ne and {
+ /bwipp.sscc18badLength (SSCC-18 must be 17 or 18 digits) //raiseerror exec
+ } if
+ barcode 4 barcode length 4 sub getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.sscc18badCharacter (SSCC-18 must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 16 {
+ /i exch def
+ /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 22 eq {
+ barcode 21 get checksum 48 add ne {
+ /bwipp.sscc18badCheckDigit (Incorrect SSCC-18 check digit provided) //raiseerror exec
+ } if
+ } {
+ 22 string
+ dup 0 barcode putinterval
+ dup 21 checksum 48 add put
+ /barcode exch def
+ text length hasspace {2} {1} ifelse add string
+ dup dup length 2 sub ( ) putinterval
+ dup dup length 1 sub checksum 48 add put
+ dup 0 text putinterval
+ /text exch def
+ } ifelse
+ /sscc barcode 4 18 getinterval def
+
+ % Compose input to code128
+ /barcode 25 string def
+ barcode 0 (^FNC100) putinterval
+ barcode 7 sscc putinterval
+
+ % Get the result of encoding with code128
+ options (dontdraw) true put
+ options (parsefnc) true put
+ /args barcode options //code128 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/sscc18 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER sscc18--
@@ -1045,64 +3282,149 @@ c"@rGmhOu"b#@<,jrA7^Q7P,4<t@UX:eDe*F8!0.:j7SZ<*0JJZ8@UX:eDe*F8#BOrrA!2+UE-
% --EXAM: THIS IS CODE 39
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code39 0.0 0 0 0
-%%BeginData: 56 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2A MZ >nL_Q" 0Op
-s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW ei&
-Bl7EsF_#&nBOt[h +D,%u F(L Lj0 6U c? Bk1 XoA RfCb@r !3 !@;L!r Ou"
-b*DI[L*A7]joG]Y '?@; L!r Ou "b *DI [L* A7] 7aAR
-fLiDKKH7F<G1(Ci a0N1 G <E UA 7]h (@< -E3A moLsA
-Wei&FCf]=AoDR/O iNV@06 CcM F E;/ BA V^\V 1G< i]G]\4LAnH *qFGTaU1G<E
-QBkM+$L]NYpDfBf 4Df0WZ Y:j s =EbT E(FE qh: P!+/J!Ko=' %<$3-Bl@m1H
-]kFA@;L!rP!+/T5 ^eepOu SV6 P,4< rNWD ;+N HB2`AWf3'O tDh\P')pOOu
- %N5OtCcrF_-^lI ?ITYP %Bdt OuY16 E-,f 4DK Ct)Ou%NL<, Z_tBl@m1H]g
-15P"@<KAU&</Df0 Y>FCf ]=AoD R/OtD hQ0 6CcMFE;/BA KZ)+G]\"@H=
-`6mOu"b5AU&<BDe <U&ATT& :AU&<B De<U& ATX (gOu"b)ASG djF<G7.BkM+
-$OtVtS04J@1@q]:kF,hb)0etOA2)[BQ3C,u!6q'R884cEH9MJ8X:f1+h<)lt#=BSfZ/g)Dm.j^
-?704S[(Ectl-F,2?023KbO!/LZ3.XPZ=@<-O"Cibb'OuQoZEarckEc[C-L]NZ4P!5%RI?I-W!/
-LYb@<,jrA7^p5L]N[<HX^E(@rGmhP!4[&P"]A!@<-O"Cibb'P$jGlHS8iPBlJ#D@rGmh1HAoQA
-4($=Ea`I"ATEf-6Z6LH+>Z##D09oA+Cf>-FCAm$+E).6Gp$X3B5)I//0JG2E+sE&C`mP*FED)7
-F"AGTE+*6fF!+n/A0>u-AKZ&>D.7F"F!*%e,VLYo0/%?SBldisEcQ)=P!=AX<.0p#04J@1Ch7K
-,@UX:eDe*FB@Wl0rBk1XoARfCb@r$FI!KsF1P#RT#04S[,@r$..D281T1Pc$e!FfJXCh7L?!Ks
-F/@UX:eDe*FB5)96&9OhaEEctl-F-8_M94MXH@r$..D3=oQ@q]F`CNFW8P!5$bI?I,S@q]F`CN
-FW8+Cf(r@r$..D29^*C6CAr@;KXg@<?'jBOt[hHQZd+Eas#uAKYGjEbo<)P"T7mEarckEcW@5B
-Ot[hF*2>_99O.=04K->E,[F>De*E83FZE-6YL%@CIDlLBlo@^8T&$VEcP`$F<EqhA7Zl>3?VgF
-ARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS#n&DfV"*I?IP_@UX:eDe*E%@UX:eDe*F8!+KAWCh7L
-I9Th1bBl7EsF_#&nBOt[h+EVXHAWeitP#O)GDI[`1>E0%F0ekI?0f(O=0ocSs0ekI=0ekC=0oc
-Sq0f(U?0ekC=0ocSs0f(U?0ekC;0ocSq0ekI?0ekC=0ocSs0ekI?0ekC;0ocSq0f(UA0ekC;0o
-cSq0ekI=0f(O?0ocSs0ekI=0f(O=0ocSq0f(U?0f(O=0ocSs0ekC;1GLU?0ocSq0f(O=1GLU?0
-ocSs0f(O=1GLU=0ocSq0ekC=1GLU?0ocSs0ekC=1GLU=0ocSq0f(O?1GLU=0ocSq0ekC;1G^aA
-0ocSs0ekC;1G^a?0ocSq0f(O=1G^a?0ocSq0ekC=1G^a?0ocSs0ekC;0ekI?0ocSq0f(O=0ekI
-?0ocSs0f(O=0ekI=0ocSq0ekC=0ekI?0ocSs0ekC=0ekI=0ocSq0f(O?0ekI=0ocSq0ekC;0f(
-UA0ocSs0ekC;0f(U?0ocSq0f(O=0f(U?0ocSq0ekC=0f(U?0ocSs1GLU=0ekC=0ocSq1G^a?0e
-kC=0ocSs1G^a?0ekC;0ocSq1GLU?0ekC=0ocSs1GLU?0ekC;0ocSq1G^aA0ekC;0ocSq1GLU=0
-f(O?0ocSs1GLU=0f(O=0ocSq1G^a?0f(O=0ocSq1GL[?1GLU=0ocSq1GL[?0ekI=0ocSq1GLU=
-1GL[?0ocSq0ekI=1GL[?0ocSq1GLU?0f(O=0jTqu06:TD+C\c"Ch7K,Bl7EsF_#&nBOt[hH\_c
-PH\_`OP#[YGL^K;]P,4<t06DG\+C\c"Ch7K,Bl7EsF_#&nBOt[hH\_cPH\_`OP#[YGOpR:-F(0
-3H!+g%XF,2?099OR6Bk1drFCB32P&PbiG]\`A>E/_6L]DO.G]\4LAnH*qF<G[:G][P9DKI"CAU
-&<<BmO>5?'9G\HZXLSL]CY>!/LVsAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?ITd!
-/LYb@<-0qDMS=VWI$:4P!5$b055<7GT^L0@<-O"Ci^_.@<,jrA7ZltL]NZ4P"UroF(025Bo!+Z
-CkrF]!G-.YF!,17A9a81P'M.oF<G:R!KmIf+C\c"@rGmh+DHW4P"]SG!KmJ>&<^jOAU&<BDe<U
-&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?I-8DI[L*A7]7aARfM&+EM"5+C\c"Ch7L?$Bf4]$Bb
-F$DI[`1@q]F`CNFW8P"Us`Bl7EsF_#&nBOt[hBl8$(G]\9TFEhmM@UX:nAT!;)Oo\c0@UX:eBO
-Pq&+Cf(r@r$..D284U9O_FNCh7L?!KmJ>&<^jOAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+
-C1.TI=$'\F<G%$Ebo<)L]NY>>E/\m@<-0qDMS=V!Jh;MCij65FEqe:AohO*+EV1>FCoH/F<G[:
-G]\"@H=\4)P'DD<<HDVj+C\c"Ch7L?$Bf4]'TrK.DI[aD/!<PgH"^o&ATMs%Ec[C_HZXLS+C\c
-"Ch7L?!g3RgNWCV=@<-0qDMS@W!Jh;MCij65FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'D
-D%FEhmM@UX:nAT!;*Oo\dI!+KAWCh7L?!g3S?&<^jOAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(
-or3+C1.TI?ITYHZNY;+C\c"Ch7L?$Bf4]$BbF$DI[aD/!<PgH"^o&ATMs%Ec[C_HZXLS+C\c"C
-h7L?!KmIfNWCV=@<-0qDMS=V!Jh;MCij65FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD%
-FEhmM@UX:nAT!;)Oo\dI!+KAWCh7L?!KmJ>&<^jOAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or
-3+C1.TI?ITYP#XV,061WA0/%?WDJX$)ARTU4F(025>9IurF*i]sP,Wkm8R3uYBQG;#+EM"5P%'
-4JOo^@?P#?X?ASGdjFFB=)>q]YrF!+[0F(03R@Yb&J!Jgf?;L=3"I?K4g+DG_'Cis9"FCf]=HS
-9JcF<G[MFFB<O05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b$D
-e*E83Kc@bA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6l
-Bl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/code39 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code39 0.0 2015050900 67013 66837
+%%BeginData: 141 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/code39 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includecheck false def
+ /validatecheck false def
+ /includetext false def
+ /includecheckintext false def
+ /hidestars false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+ /charvals 43 dict def
+ 0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.code39badCharacter (Code 39 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 43 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.code39badCheckDigit (Incorrect Code 39 check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ /includecheck true def
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (1113313111) (3113111131) (1133111131) (3133111111) (1113311131)
+ (3113311111) (1133311111) (1113113131) (3113113111) (1133113111)
+ (3111131131) (1131131131) (3131131111) (1111331131) (3111331111)
+ (1131331111) (1111133131) (3111133111) (1131133111) (1111333111)
+ (3111111331) (1131111331) (3131111311) (1111311331) (3111311311)
+ (1131311311) (1111113331) (3111113311) (1131113311) (1111313311)
+ (3311111131) (1331111131) (3331111111) (1311311131) (3311311111)
+ (1331311111) (1311113131) (3311113111) (1331113111) (1313131111)
+ (1313111311) (1311131311) (1113131311) (1311313111)
+ ] def
+
+ /sbs barlen includecheck {3} {2} ifelse add 10 mul string def
+ /txt barlen includecheck {3} {2} ifelse add array def
+
+ % Put the start character
+ sbs 0 encs 43 get putinterval
+ hidestars not {
+ txt 0 [(*) 0 textyoffset textfont textsize] put
+ } {
+ txt 0 [() 0 textyoffset textfont textsize] put
+ } ifelse
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ sbs i 10 mul 10 add encs indx get putinterval
+ txt i 1 add [barcode i 1 getinterval i 1 add 16 mul textyoffset textfont textsize] put
+ } for
+
+ % Put the checksum and end characters
+ includecheck {
+ sbs barlen 10 mul 10 add encs checksum get putinterval
+ includecheckintext {
+ txt barlen 1 add [barchars checksum 1 getinterval barlen 1 add 16 mul textyoffset textfont textsize] put
+ } {
+ txt barlen 1 add [() barlen 1 add 16 mul textyoffset textfont textsize] put
+ } ifelse
+ sbs barlen 10 mul 20 add encs 43 get putinterval
+ hidestars not {
+ txt barlen 2 add [(*) barlen 2 add 16 mul textyoffset textfont textsize] put
+ } {
+ txt barlen 2 add [() barlen 2 add 16 mul textyoffset textfont textsize] put
+ } ifelse
+ } {
+ sbs barlen 10 mul 10 add encs 43 get putinterval
+ hidestars not {
+ txt barlen 1 add [(*) barlen 1 add 16 mul textyoffset textfont textsize] put
+ } {
+ txt barlen 1 add [() barlen 1 add 16 mul textyoffset textfont textsize] put
+ } ifelse
+ } ifelse
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/code39 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code39--
@@ -1113,45 +3435,118 @@ Bl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: Code39 Ext!
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code39ext 0.0 0 0 0
-%%BeginData: 37 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A MZ ?03%oD i/n
-8fPFCfK5H"(o:FD l%L@W uO* E0A q <G` iLh @rG mh1HB# kF F/fXOu 8C3
-05kfOBl@m1P!5$b 04J@1 @rG mhP !5 $b 04] !=F C]E#G9 CL +Cia0N 1G<
-H[@r-9uATVL.F<G 1(Ci a0N 1G <] UEc Ye7 Amo LsAW
-eifE-,f4DKCuE06 ;5UB l 7R *H #R> X4a VtcO u8C3D
-fBf4Df0WCP,i2'C ia0N4a W>W I ?IQ m3 0Ia6 V33 Qn!BlU*FE2 M8P!+/T/Wr;
-\FcnqO1OXV5/Tc# UAWeit P#Z p nAWe *t3A 5;i FD5Z2F-8_M 1OYEcDfBf4D
-f0WCOu%NL8T8*YF (K\OD0 '>4 @UX: eDe* FB@ ZmRN1G<L!! 0T-I@<,jrA7
-^+J!FCqKH]g@*F( ^Y"C6 CcDH '2WOO o^@> Oo[ 4NP!5$bP') pIL]E55P"_#
-iD0'?Q5&,lSP,XU .P'E- LP%'4 LP,X6 >P! 5%&I=%,:D0 '?Q5&-6EP'N
-4"C6ATNC6CcD1G< 3GEas#u AKYi2B 8?P&P "_# pP!FGY<IL$ AI?IQ=@<,jr
-A7^Q"@UX:eDe*FB@Yb/MWKKr%L&cae8p`4#GA2#8/n8g1AMZ>XG]Z8\A4($=Ea`I"ATEee6Z6L
-H+>Z##7<iocDId<h+Dl7BF<G(3DKK<$DBNk8Cj@-h;aX,J+Cf(nEa`I"ATDiF061K8F(Jp'Ec5
-u]5CJ\oI?I/T@UX:nASrW"@<,jrA7^p5Ou"b&G][M7@ribsNWLM,NWLIlNWLImNWLInNWLIoNW
-LIpNWLIqNWLIrNWLIsNWLItNWLIuNWLJ!NWLJ"NWLJ#NWLJ$NWLJ%NWLJ&NWLJ'NWLJ(NWLJ)N
-WLJ*NWLJ+NWLJ,NWLJ-NWLJ.NWLJ/NWLJ0NWLLmNWLLnNWLLoNWLLpNWLLqNWC8_!\Zj"!\Zm#
-!\Zp$!\Zs%!\[!&!\[$'!\['(!\[*)!\[-*!\[0+!\[3,!\[6-!A0<4/rfud:Q>H0NWCkp!A]Z
-91QDJmNWD"t!B,r=2i[nuNWD/#!\[`;![U<r![U?s![UBt![UEu![UI!![Um-!C;_H6B2(6NWD
-P.!C`"L7ZIL>NWD\2!D/:P8r`pFNWDh6!DSRT:6#?NNWDt:!E"jX;N:cVNWE+>!EG-\<fR2^NW
-E7B!EkE`>)iY199''"9TB0#9o]9$:6#B%:Q>K&=,m>46&l!s6B2*t6]M3u7#h=!7?.F"7ZIO#7
-udX$8<*a%8WEj&8r`s'99''(9TB0)9o]9*:6#B+:Q>K,:lYT-;2t].;N:f/;iUo0</q#1<K7,2
-<fR53=,m>4=H3G5=cNP6>)iY1:lYT';2t](;N:f);iUo*<*bYC05b?F@rGmh+C\c"Ch7L?!g7A
-_V33VfDIn$6AU&;>@UX:nAT!;*P&-;XOu"b+L]ESoL]E53@UX:nAT!;)P,Wd]Bp(ZC1G<<aFCS
-umEZeq<FCf?"F!+q#Eas#uAKY]M99Mr21N$cJ@rGmh+DN$1G][G/@<.NVDIn$6AU&;>C*6toEa
-s#uAKY]M99OO2G][G/@<.N?L]NZUHZ!D=FCf]=+DQ]5Oo^RD+Hh"uP#O)L+DN$1G][G/@<.N?O
-o^_%I?I,SDIn$%De*E%DIn$%De*F8!,@ZjOu"b/ATr6-G]Y'GATr6-G]\`AC6D8R1N.5SBl@m1
-NX006DKKE0@<Zg6F_-_\04Am6F!,@3G@PQ%AKYo1FD5Z2F"]1VDe*E83KcUi1ML`:Cis9"FCf]
-=HS9JcF<G"4B60(8FEhnj99M)e!/LYnATr6-G]]*XL]N[<HS9)r5*@]TFEhn=DKKoE+EVjM+DH
-W4Oo^_=Ou%3)FCf?3Ed<H@DIn$6AU&;>BnueQ9TjXBG]Y'BL]NY>FEhn=DKKoEP'DD<87?OOF,
-g?EG]\%PFHUlsP#Pk1B60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WACh[cu@<.N1O
-u[rR%[&V$@rGmh1HB#kFHSVHA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'
-P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/code39ext 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code39ext 0.0 2015050900 65652 65486
+%%BeginData: 110 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code39 dup /uk.co.terryburton.bwipp findresource put
+begin
+/code39ext {
+
+ 20 dict begin
+
+ /options exch def % We are given an options string
+ /barcode exch def % We are given the code39extended text
+
+ /dontdraw false def
+ /includetext false def
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ % Validate the input
+ barcode 4 barcode length 4 sub getinterval {
+ 128 ge {
+ /bwipp.code39extBadCharacter (Code 39 Extended must contain only ASCII characters) //raiseerror exec
+ } if
+ } forall
+
+ /barlen barcode length def
+
+ % Extended alphabet to non-extended alphabet
+ /extencs
+ [ (%U) ($A) ($B) ($C) ($D) ($E) ($F) ($G) ($H) ($I) ($J) ($K) ($L) ($M) ($N) ($O)
+ ($P) ($Q) ($R) ($S) ($T) ($U) ($V) ($W) ($X) ($Y) ($Z) (%A) (%B) (%C) (%D) (%E)
+ ( ) (/A) (/B) (/C) (/D) (/E) (/F) (/G) (/H) (/I) (/J) (/K) (/L) (-) (.) (/O)
+ (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (/Z) (%F) (%G) (%H) (%I) (%J)
+ (%V) (A) (B) (C) (D) (E) (F) (G) (H) (I) (J) (K) (L) (M) (N) (O)
+ (P) (Q) (R) (S) (T) (U) (V) (W) (X) (Y) (Z) (%K) (%L) (%M) (%N) (%O)
+ (%W) (+A) (+B) (+C) (+D) (+E) (+F) (+G) (+H) (+I) (+J) (+K) (+L) (+M) (+N) (+O)
+ (+P) (+Q) (+R) (+S) (+T) (+U) (+V) (+W) (+X) (+Y) (+Z) (%P) (%Q) (%R) (%S) (%T)
+ ] def
+
+ /newcode barlen 2 mul string def
+ /newtext barlen 2 mul string def
+ /j 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /extchar extencs barcode i get get def
+ newcode j extchar putinterval
+ newtext j barcode i get put
+ extchar length 1 ne {newtext j 1 add ( ) putinterval} if
+ /j j extchar length add def
+ } for
+ /newcode newcode 0 j getinterval def
+ /newtext newtext 0 j getinterval def
+
+ % Get the result of encoding with code39
+ options (dontdraw) true put
+ /args newcode options //code39 exec def
+
+ % Replace chars in /txt with chars in newtext
+ includetext {
+ /txt args (txt) get def
+ 0 1 newtext length 1 sub {
+ /i exch def
+ /txtentry txt i 1 add get def
+ txtentry 0 newtext i 1 getinterval put
+ txt i 1 add txtentry put
+ } for
+ args (txt) txt put
+ } if
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/code39ext dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code39ext--
@@ -1162,41 +3557,107 @@ P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: 01234567
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code32 0.0 0 0 0
-%%BeginData: 33 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A MZ ?03%oD i/n
-8fPFCfK5H"(o:FD l%L@W uO* E0A q <G` iLh @rG mh1GX< 5' Tt>:%5 2X=
-FD5Z2F-8_M1G<3G Eas#u AWf 6?1 G< 9W DKK E0@ <Wi+@; L! rOu"b* DI[
-L*A7]joG]Y'?@;L !rOu "b5 AU &< /Df 0ZZ a-& 53FC
-f]=F(or3L^K;$06 CcMF E qe :A ohO *M# !2i0 6CcMF
-Eh_9AohO*L]ESo0 5+p2B4 uCC ! Ko6 WE -,f4 DKC uE06;5UBl7 R*H#R>X4aVt
-cOu8C3DfBf4Df0W CP,i2' Cia 0 N4aW >WI? IQm 30Ia6V33Qn !BlU*FE2M8P
-!+/T/Wr;\FcnqO1 OXV5/T c#U AWei tP#Z pnA We*t3A5;iF D5Z2F-8_M1O
-YEcDfBf4Df0WCOu %NL8M >0sG ][P9D KI"C AU& </Df0Z[/Wq nCFCf]=F(or
-3+EV1>FE;/BAWe^ 01G<i ]G]\4 LAnH* qF< G[:G]\4LAn H*qFHS;?1G<
-EQBkM+$+D>>#B4u CM09S,# @<,jrA 7^p5L ^9/ \@UX:eDe*F B@Yb>RD3>$K
-04K->E,[F>De*E811F[&9P&*SFD-[_8T\BWBjkm%:hX9XD.-pmA7Zm#F`VXI@V$ZA+E)9C3?Vj
-HB5)I/0/%?SBldisEcQ)=P!=AX<+99V@rGmhH]g@E0Tp%25);4^:m,jG04K->E,[F>De*E811F
-[&6YKnK@:OCjEfMYAFCB!"@;[2aBOPpu@:O4dAKYi4F*&O7Df0Z*Bl5&3DJXS@A8,[jFE9)gEa
-`['AS#n&DfV"*I?IQXP"@<:BOt[hF*2>U!0T-o!/LZ3#CA+<P!5$b@UX:eDe*E%Bp),F0TrDLL
-]W`SL]ETTH\_`dCjhIGOuS7(P#-L]$'M99P#Pq)ARfLsF`!9B04S[,@r$..D3@)G1OYEW04S[,
-@r$..D'3>%ARfLsF_upAP%p.9@UX:eDe*FB@Yb>R4aUXHEas#uAV^VT94MXH@r$..D29m/!Kq;
-H04K->E,[F>De*E811F[&6YL%@CIDlLBlo@i8T&$VEcP`$F<F.s@;KXdDBMbh@<-3n@rGmh+Cf
-(r@r!2tBkM.%+E2@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm</:mEV33fo!+KAW@rGmhP'N3ML^
-7L(ARfLsF_upgOo^_j06CcMFHShN1G<o[C`mh2G]]*"L`g/8Eas#uAWea11G<3GEas#uAV^PRV
-33Wj!/LZ3"aa]eEas#uAWf650Tp[/P"9%jEas#uAV^P6@;M*9P,WV5Cm'("!/LZ3"acCl@UX:e
-De*FB5*AR%30",-77g:%P"L(W!KmJ3P#RT(I?I0bF^ed"@rGmhL]`G6P)#3FI?I-CAU&<Q!H_m
-tFGKpQ$'IuFH$!VBFGKpQ6'?J2E-,f4DKCgDA8c@-A9)+&FE2M8P'AWgEbBG9@UX:eDe*E%DfB
-f4Df0VL04Sp2AMZ?05E[g2EbBHR"*Ad0>9I,mFCf]=+EV1>FEh_9AohO*+EV1>FEqe:AohO*+E
-V1>FCoH/F<G[:G]\"@H=\4)+C1.T@<-"%NXBl>G]\1=Ch[O"NWs!)DKKH1P'CDUB60(8DfBf:E
--,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$@rGmh1GY+QP%64gCG'+8
-/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6
-lBl7R3P#M~>
-% uk.co.terryburton.bwipp/code32 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code32 0.0 2015050900 63549 63380
+%%BeginData: 99 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code39 dup /uk.co.terryburton.bwipp findresource put
+begin
+/code32 {
+
+ 20 dict begin
+
+ /options exch def % We are given an options string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable code32 text
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /textxoffset 0 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Validate the input
+ barcode length 8 ne barcode length 9 ne and {
+ /bwipp.code32badLength (Italian Pharmacode must be 8 or 9 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.code32badCharacter (Italian Pharmacode must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate check digit
+ /checksum 0 def
+ 0 1 7 {
+ /i exch def
+ barcode i get 48 sub i 2 mod 0 ne {2 mul} if dup 9 gt {9 sub} if
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 10 mod def
+ barcode length 9 eq {
+ barcode 8 get checksum 48 add ne {
+ /bwipp.code32badCheckDigit (Incorrect Italian Pharmacode check digit provided) //raiseerror exec
+ } if
+ } if
+ 10 string
+ dup 0 barcode putinterval
+ dup 8 checksum 48 add put
+ /text exch def
+
+ % convert number from base10 to base32
+ /val text cvi 32 barcode cvrs def
+ /barcode 6 string def
+ 0 1 5 {barcode exch 48 put} for
+ barcode 6 val length sub val putinterval
+
+ % convert base32 number to specified character set
+ 0 1 5 {
+ dup barcode exch get
+ dup (AEIO) {ge {1 add} if dup} forall pop
+ barcode 3 1 roll put
+ } for
+
+ % format HRI
+ text 1 text 0 9 getinterval putinterval
+ text 0 65 put
+
+ % Get the result of encoding with code39
+ options (dontdraw) true put
+ /args barcode options //code39 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/code32 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code32--
@@ -1207,43 +3668,108 @@ lBl7R3P#M~>
% --EXAM: 123456
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp pzn 0.0 0 0 0
-%%BeginData: 35 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A MZ ?03%oD i/n
-8fPFCfK5H"(o:FD l%L@W uO* E0A q <G` iLh E-c DKL_Q" 0O ps'_E- ,f4
-DKCt)Ou"b#@<,jr A7^of Ou" b%D f0 Z- Eaa /7A moLsAW ei &Bl7Es F_#
-'*AU&;>AmoLsAWe i&FC f]= Ao DR /Oi NV@ 06C cMFE
-;/BAV^\V1G<i]G] \4LA n H* qF GTa U1G <i]G ]\1KA
-nH*qFGKp[1G<EQB kM+$L] NYp 0 5u5 T3 $;gA Cia 0N1N.5SBl@ m1P-6N[FE2)
-5B68E<AWf3'L]NY rOpu>K FD5 Z 2F*j (NAm oLs AWf3'P!FGY <0B5(@ZmRN0
-oc8tP)XR(F_-_!H ]ftD5* C&O 5*@^ MH]f t&E ckrV1OYEdI ?J0)*g/N:Df
-Bf4Df0WZ5*@^MP# Q@=FD 5Z2F *j'+I ?I/T FCf ]=AoDR/+EV 1>FCoH/FHS5
-=1G<i]G]\"@H=\4 @AU&< <BmO? R09S+ EFC f]=H#I;,F( KG9FCf]=H#I
-;,F(KHV09S+EFCf ]=G].2+ F(KG9F Cf]=G ].2 +F(KHV09S+ EBOtmjBQPA1
-ASGdjFHS;?1N7YX3-ucW@<,jrA7^p5L^0)[@UX:eDe*FB@Yb;QD3>$K04K->E,[FKH>Y]O@:W&
-CDJ+')NZ(_t:,jA5F`VXI@V$Z@+E)9C3$;aGB5)I/0/%?SBldisEcQ)=P!=AX<.0+&@<,jrA7^
-p5L^'#Z@UX:eDe*FB@Yb8PD3>$K04K->E,[FKH>YZN@:W&CDJ+')NZ(_t:,a;4F`VXI@V$Z?+E
-)9C2]uXFB5)I/0/%?SBldisEcQ)=P!=AX<.0p0@UX:eDe*F+OuS7OP%Kk@LcLVpP&bn&@WuO*E
- %Z*UDF.cB6YKnK@:OCjEfM,9>#$2WF`VXI@rH7,@;0U%Df0B:+Co2!BlnDL061K8F(Jp'Ec5u
-]5CJ\oI?I/TD0'?+ASrW0H>Y]hL^AKVL^8El<K]-k@q]F`CNFW8L]ESoL]E53D0'?+AT!;+P,W
-d]Bp(ZC1Lad5@rGmh+DI!3LbP!kBcqA@DE*!!!I]<N!e$53Oo^_^@q]F`CNFW8Oo[4GBOt[hF*
-2>_5*@^MP"769BOt[hF*2=B@q]F`CNFW8L^TA\Ou$T]ARfLsF_upAP!+.F@WuO*E%Z*UDF.cB8
-T&KiFAlajF_,H#AWA'.DI[U*Eb/a&+Ac6:+DG_4F`\aIAT;j(DI[6#E,ol?Bk1dc0/%?SBldis
-EcQ)=P!=AX<+99V@rGmhP%&9LB5D-sL]N[<P!+/$@<,jrA7Zm#F(]<#DMS@WWKKnaBOt[hF*2>
-U0TlI"D0mpFGA2#8/oZ,S6=FClBOt[h6tp:JFH.P:DI[U*Eb/a&+Ac6:+Cf(r@r!2tBkM.%+E2
-@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm<,H\hCh7LIV33fo!/N4iG`k%B!FfJX@rGmhP'N3MD0
-'?+AT!;)P,Vr)ARfLsF_upgOo^_j05YcCP!5$bDfBf4Df0WV#\7jkFC]E#GB@kJAWh9k@<-"%+
-Dl14+E)4@Bl@m10/$gRA7[PWP!>*c06CcMF<GFAB5D-sL]rqBP,4<tFCf]=L]EG>:g-U:/Kg4%
-FCf]=L^%^;B8?S*F(]<#DMS=VWKKr<H!t`+F,g?EG][.4>9J$!G]Y'MAU&<ADe<U&ATT&:AU&<
-BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C-*qP'CDUB60(?FCf]=G[YE&B5W_6@qBP"ATErY@<-
-"%NWX3=FDl,?Bl@m1P'CDUB6,2+Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<]nDNZuBA1
-r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F
-(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/pzn 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp pzn 0.0 2015050900 63596 63384
+%%BeginData: 100 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code39 dup /uk.co.terryburton.bwipp findresource put
+begin
+/pzn {
+
+ 20 dict begin
+
+ /options exch def % We are given an options string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable code32 text
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /textxoffset 0 def
+ /height 1 def
+ /pzn8 false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /textxoffset textxoffset cvr def
+ /height height cvr def
+
+ % Validate the input
+ pzn8 {
+ barcode length 7 ne barcode length 8 ne and {
+ /bwipp.pzn8badLength (PZN8 must be 7 or 8 digits) //raiseerror exec
+ } if
+ } {
+ barcode length 6 ne barcode length 7 ne and {
+ /bwipp.pzn7badLength (PZN7 must be 6 or 7 digits) //raiseerror exec
+ } if
+ } ifelse
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.pznBadCharacter (PZN must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate check digit
+ /msglen pzn8 {9} {8} ifelse def
+ /checksum 0 def
+ 0 1 msglen 3 sub {
+ /i exch def
+ barcode i get 48 sub i pzn8 {1} {2} ifelse add mul
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 11 mod def
+ checksum 10 eq {
+ /bwipp.pznBadInputSequence (Incorrect PZN input sequence provided) //raiseerror exec
+ } if
+ barcode length msglen 1 sub eq {
+ barcode msglen 2 sub get checksum 48 add ne {
+ /bwipp.pznBadCheckDigit (Incorrect PZN check digit provided) //raiseerror exec
+ } if
+ } if
+ msglen string
+ dup 0 45 put
+ dup 1 barcode putinterval
+ dup msglen 1 sub checksum 48 add put
+ /msg exch def
+
+ % Get the result of encoding with code39
+ options (dontdraw) true put
+ /args msg options //code39 exec def
+
+ % format HRI
+ /text msglen 5 add string def
+ text 0 (PZN - ) putinterval
+ text 6 msg 1 msglen 1 sub getinterval putinterval
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/pzn dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER pzn--
@@ -1254,53 +3780,156 @@ r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F
% --EXAM: THIS IS CODE 93
% --EXOP: includetext includecheck
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code93 0.0 0 0 0
-%%BeginData: 45 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2A N; PnL_Q" 0Op
-s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW ei&
-Bl7EsF_#&nBOt[h +D,%u F(L Lj0 55 <6 Cis 9"F Cf]=+D ,% uF(LLj 06C
-cMFCoH/FHOV,1G< i]G] \"@ H= _m >Ou "b5 AU& <BDe
-<U&ATWb(Ou"b)AS GdjF G Ks \1 G<] UEc Yf(D IXf$@
-;L!rOu%#qFD5Z2F -<^[F* )G: D J+' :E +P1q H\_ ]c23JDeE-, f4DKC/fX(Gd
-VF(LLtH]gXBP#RT (P%'TN Oth s t4d( eHEc krV 4aW>DP!5%O P!5$bI=%,/F
-E2M8Ou%NL<IL$AO rfcH05 kfO Bl@m 1P!5 $bI ?IQJE-,f4D KC/f1OYEX06
-CcMFCoH/F<G[:G] [P9DK M$nO u"b5A U&<< BmO >5FCf]=F(o r3OtVtS06Cc
-MFEqe:AohO*+EV1 >FEqe :AohO *OtVt S05 +p2B4uB0BO tmjBQTCjOu"
-b&DI[`1>E/nB1GL U=16)Pn 0ekF<1 QDYo0 ekI =16)Pn0ekL >0ocGm1,1L<
-1QDYo1,1O=16)Pn1,1R>0ocGm0ekC;1l_bp1GLX>0ocGm1bg^>0ocGn0ekC;1QDYp0ekF<16)P
-o0ekI=0ocGn1,1L<16)Po1,1O=0ocGn1GLU=0ocGm0etI<1QDYo0etL=16)Pn0etO>0ocGm1,:
-R=16)Pn1GU[>0ocGm0ekC<1QDYo0ekF=16)Pn0ekI>0ocGm1,1L=16)Pn1GLU>0ocGn0etI<16
-)Po0etL=0ocGn0ekC<16)Po0ekF=0ocGn1,1L=0ocGn1,:R=0ocGm0etI=16)Pn0etL>0ocGm1
-,:R>0ocGm1,CX>0ocGm1,1L>0ocGo0ekC;16)Pp0ekF<0ocGo1,1L<0ocGm0etI>0ocGm0f(O>
-0ocGn0ekC=0ocGm1,1O>0ocGo0etI<0ocGo0ekC<0ocGm1,:U>0ocGm0ekC>0ocJn0ekC>0els
-s1G<3GEarckEc[6k0JP==1c70M3&s8k6UX@47n?3D92&&T:Jand;cHat='/U//M8.k0.S?31G<
-3GEbo<)+C\c"@rGmhP%'S106:`I0o5jm1G<f]F>A[OOu"b4AoohbrK8riF(TMNM#<Dl04o*3G%
-#3.+?VcH"B.ch,]dR>0ocB87T:[TAooeg"B.ch06:`I1QDT:7T:mZAoojP5!G,c05YcC+C\c"C
-h7LI$'I(tBnubP1G<L!!0T-bBcpknEbo<)P!+/T5^eep04S[(EZeh"Eas#uAKY]M99M)M@<-F#
-Ao;*$@q]:kLgH6-Op#JA@UX:nAT!;,P,XUVOp$,@@<,jrA7ZltL]NY>P"UU;P&5P!@q]:k+D,M
-$G%#3.+C\c"@rGmh+DHW4Oo^@AP"_$3Ou"b*+DHW7Oo^_%I=!V]+DHW4Oo^_%I?ITYP#Q:>B-:
-q3@q]:kP'AWo+DHW4Oo^_%05;VEL]NY>Ou%NLAM7nAB-;&4B8?P&P"_#p05YcCCh7K,D0'?Q@Z
-iN]DI[L*A7]7aARfM&06:TD+Dl14Ch7L?#*NeY)3P#`V33W_HS9GLF!,=@B5D-sL^'#YL^fLJP
-,4<tI?IS`FEhmMD0'?+AT!Y;Ou%/gF,0g-DI[aD09StkGqWZ@ARfLsF_rjh!0T,k@q]F`CNFW8
-15Gpn1Pc$e!GumjCh7L?!KsF/056S5Ou$rrB-:oO99M8j!0Ur@LanQOP,U*KDIe!T5*@]T@q]:
-kNWC8c1OXV+!Ks:B3/@Qj"Gm)@LQZm8@q]:kP!5$b@UX:eBOPq&+Cf(nEfuEFFcp2eBl7I+P!5
-$bP')q1I?IS`ASu!#ASu"!+DG_(G`k^_1NR#H+DHW9P&,pYOo]-3A!2+ZG]Y'B+BosuBOPp(Bo
-!(YCkrC\!H_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'AWiBOt[hF*2=S+Cf(r@r$..D
-)!/MF(]<#DBNYVWJCS<WJD7OC5;nR!GQF^G`lm+!Ko5l@q]F`CNFW81*C(?ARfLsF_rlVD0'?+
-ASrW)P,X6JP%odROo]97A9a8ROo^_%I?I-8DI[L*A7]7aARfM&04S[,@r$..D)!/CBOt[hF*2=
-SLbFp+Ou"b$BOt[hF*2=T+Cf(r@r$..D)*5DBOt[hF*2=SOo^@lP%p.9F(025D0'?+AT!;.P&,
-pYOo]-3@ric&BOt[hF*2=SP"Us`F(025D0'?+AT!;.P&,p_Oo]-3@ric&BOt[hF*2=TP"Us`F(
-025D0'?+AT!;.P&,peOo]-3@rmG[P"Us`I=$$EF!,=@B5D-sL^'#YL^'"CASu"!LbOubP'MJ=<
-BNAsEb0,A061WACh[cu@<+#B@WNYr+EM"5H\aA=WI9q$>q]Z#F!+[0F(03R@Yb&J!Jgf?;L<(g
-BkM+$I?K4g04JC3+Bot0@WR]AL]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU&<D06DG\+EVjMI?IP
-_DfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<6VA7[bWOuSV806M
- %_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmA
-TVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/code93 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code93 0.0 2015050900 65852 65716
+%%BeginData: 148 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/code93 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includecheck false def % Enable/disable checkdigit
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+ /parsefnc false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ /encs
+ [ (131112) (111213) (111312) (111411) (121113)
+ (121212) (121311) (111114) (131211) (141111)
+ (211113) (211212) (211311) (221112) (221211)
+ (231111) (112113) (112212) (112311) (122112)
+ (132111) (111123) (111222) (111321) (121122)
+ (131121) (212112) (212211) (211122) (211221)
+ (221121) (222111) (112122) (112221) (122121)
+ (123111) (121131) (311112) (311211) (321111)
+ (112131) (113121) (211131) (121221) (312111)
+ (311121) (122211) (111141) (1111411)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+
+ /barlen barcode length def
+
+ % Special function characters
+ /sft1 -1 def /sft2 -2 def /sft3 -3 def /sft4 -4 def
+ /fncvals <<
+ (SFT$) sft1
+ (SFT%) sft2
+ (SFT/) sft3
+ (SFT+) sft4
+ >> def
+
+ % Convert input into bytes accounting for shift characters
+ /msg barlen array def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+
+ includecheck {
+ /sbs msglen 6 mul 25 add string def
+ } {
+ /sbs msglen 6 mul 13 add string def
+ } ifelse
+ /txt msglen array def
+
+ % Put the start character
+ sbs 0 encs 47 get putinterval
+
+ /checksum1 0 def /checksum2 0 def
+ 0 1 msglen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ msg i get dup 0 lt {
+ 42 exch sub /indx exch def
+ /char ( ) def
+ } {
+ 1 string dup 0 4 -1 roll put /char exch def
+ barchars char search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ } ifelse
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 6 mul 6 add enc putinterval % Put encoded digit into sbs
+ txt i [char i 9 mul 9 add textyoffset textfont textsize] put
+ /checksum1 checksum1 msglen i sub 1 sub 20 mod 1 add indx mul add def
+ /checksum2 checksum2 msglen i sub 15 mod 1 add indx mul add def
+ } for
+
+ includecheck {
+ % Put the first checksum character
+ /checksum1 checksum1 47 mod def
+ /checksum2 checksum2 checksum1 add 47 mod def
+ sbs msglen 6 mul 6 add encs checksum1 get putinterval
+ sbs msglen 6 mul 12 add encs checksum2 get putinterval
+ % Put the end character
+ sbs msglen 6 mul 18 add encs 48 get putinterval
+ } {
+ % Put the end character
+ sbs msglen 6 mul 6 add encs 48 get putinterval
+ } ifelse
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/code93 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code93--
@@ -1311,50 +3940,122 @@ TVm"@r#drB75qB~>
% --EXAM: Code93 Ext!
% --EXOP: includetext includecheck
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code93ext 0.0 0 0 0
-%%BeginData: 42 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A N; Q03%oD i/n
-8fPFCfK5H"(o:FD l%L@W uO* E0A q <G` iLh @rG mh3AY5 kF F/fXOu 8C3
-05kfOBl@m1P!5$b 04J@1 @rG mhP !5 $b 04] !=F C]E#G9 CL +Cia0N 1G<
-H[@r-9uATVL.F<G 1(Ci a0N 1G <] UEc Ye7 Amo LsAW
-eifE-,f4DKCuE06 ;5UB l 7R *H #R> X4a VtcO u8C3D
-fBf4Df0WCP,i2'C ia0N4a W>W I ?IQ m3 0Ia6 V33 Qn!BlU*FE2 M8P!+/T/Wr;
-\FcnqO1OXV5/Tc# UAWeit P#Z p nAWe *t3A 5;i FD5Z2F-8_M 1OYEcDfBf4D
-f0WCOu%NL8T8*YF (K\OD0 '>4 @UX: eDe* FB@ ZmRN1G<L!! 0T-I@<,jrA7
-^+J!FCqKH]g@*F( ^Y"C6 CcDH '2WOO o^@> Oo[ 4NP!5$bP') pIL]E55P"_#
-iD0'?Q5&,lSP,XU .P'E- LP%'4 LP,X6 >P! 5%&I=%,:D0 '?Q5&-6EP'N
-4"C6ATNC6CcD1G< 3GEas#u AKYi2B 8?P&P "_# pP!FGY<IL$ AI?IP_@UX:n
-ASrW"@<,jrA7^p5Ou"b&G][M7@ribsNWrfg7T:[6NWrfg7T:X!NWrfg7T:X"NWrfg7T:X#NWrf
-g7T:X$NWrfg7T:X%NWrfg7T:X&NWrfg7T:X'NWrfg7T:X(NWrfg7T:X)NWrfg7T:X*NWrfg7T:
-X+NWrfg7T:X,NWrfg7T:X-NWrfg7T:X.NWrfg7T:X/NWrfg7T:X0NWrfg7T:X1NWrfg7T:X2NW
-rfg7T:X3NWrfg7T:X4NWrfg7T:X5NWrfg7T:X6NWrfg7T:X7NWrfg7T:X8NWrfg7T:X9NWrfg7
-T:X:NWrfg7T:["NWrfg7T:[#NWrfg7T:[$NWrfg7T:[%NWrfg7T:[&NWC8_#$t4t<%gOt#$t4t
-<%gRu#$t4t<%gV!#$t4t<%gY"#$t4t<%g\##$t4t<%g_$#$t4t<%gb%#$t4t<%ge&#$t4t<%gh
-'#$t4t<%gk(#$t4t<%gn)#$t4t<%gq*!A0<4/rg-B;as_>:Q>H0NWCkp!A]Z91QDJmNWD"t!B,
-r=2i[nuNWD/##$t4t<%hF8#$t4t<$b"o#$t4t<$b%p#$t4t<$b(q#$t4t<$b+r#$t4t<$b.s#$
-t4t<$bS*!C;_H6B2(6NWDP.!C`"L7ZIL>NWD\2!D/:P8r`pFNWDh6!DSRT:6#?NNWDt:!E"jX;
-N:cVNWE+>!EG-\<fR2^NWE7B!EkE`>)ien;as_499'3_;as_49TB<`;as_49o]Ea;as_4:6#Nb
-;as_4:Q>Wc;as_4=,mJk;as_:6&l.U;as_:6B27V;as_:6]M@W;as_:7#hIX;as_:7?.RY;as_
-:7ZI[Z;as_:7udd[;as_:8<*m\;as_:8WF!];as_:8ra*^;as_:99'3_;as_:9TB<`;as_:9o]
-Ea;as_::6#Nb;as_::Q>Wc;as_::lY`d;as_:;2tie;as_:;N:rf;as_:;iV&g;as_:</q/h;a
-s_:<K78i;as_:<fRAj;as_:=,mJk;as_:=H3Sl;as_:=cN\m;as_:>)ien;as_4:lY`d;as_4;
-2tie;as_4;N:rf;as_4;iV&g;as_4<*bYC05b?F@rGmh+C\c"Ch7L?#*NecV33VfDIn$6AU&;>
-@UX:nAT!;.P&-;XOu"b+L]ESo05H@DOu%moL]LsnEbo<)L]N[<HS9)r5*@]TAU&<,BOPp(AU&<
-.DI[`1@UX:eDe*E%Bp),P99M(aAU&<5ASrW%G][G/@<.N?Ou$ueG@PQ%AKY_1AU&<,BOPqEH#@
-2;FCf]=+DW*/@<,jrA7ZltP"Us_AU&<5AT!;)P&5P`ATr6-G]Y'DL]NY>NWC8cH$tiT05;VE+D
-#e>Ch7LI!Ko5lCERC8AU&<5AT!;)P!+/J!I]<N!e$53Oo^_%I?I,SDIn$%De*E%DIn$%De*F8!
-,@ZjOu"b/ATr6-G]Y'GATr6-G]\`ACQ_AS1N.5SBl@m1NX006DKKE0@<Zg6F_-_\DfBf4Df0WV
-#]O3mF(Js$@rua6AWh9k@<-"%+Dtb7@rGmh+E)4@Bl@m10/$gRA7[bWP!>*cBl7EsF_#'*AU&<
-D06DG\+CT;'F,g?EG]]*AOu%moL]MC)GB@D@FHU*h!KsF/056S5Ou"b5G][M7FE2XLFEhmMBp)
-,P1N[k`ASuU1H&)H<ATr6-G]Y'BL]NZ4P'D(nF<G9?FEhn=DKKoEP'DD<87?OOF,g?EG]\%PFH
-UlsP#Pk1B60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$@
-rGmh3AY5kFHSVHA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]H
-E+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/code93ext 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code93ext 0.0 2015050900 65941 65711
+%%BeginData: 114 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code93 dup /uk.co.terryburton.bwipp findresource put
+begin
+/code93ext {
+
+ 20 dict begin
+
+ /options exch def % We are given an options string
+ /barcode exch def % We are given the code39extended text
+
+ /dontdraw false def
+ /includetext false def
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Extended alphabet to non-extended alphabet
+ /extencs
+ [ (^SFT%U) (^SFT$A) (^SFT$B) (^SFT$C) (^SFT$D) (^SFT$E) (^SFT$F) (^SFT$G)
+ (^SFT$H) (^SFT$I) (^SFT$J) (^SFT$K) (^SFT$L) (^SFT$M) (^SFT$N) (^SFT$O)
+ (^SFT$P) (^SFT$Q) (^SFT$R) (^SFT$S) (^SFT$T) (^SFT$U) (^SFT$V) (^SFT$W)
+ (^SFT$X) (^SFT$Y) (^SFT$Z) (^SFT%A) (^SFT%B) (^SFT%C) (^SFT%D) (^SFT%E)
+ ( ) (^SFT/A) (^SFT/B) (^SFT/C) (^SFT/D) (^SFT/E) (^SFT/F) (^SFT/G)
+ (^SFT/H) (^SFT/I) (^SFT/J) (^SFT/K) (^SFT/L) (-) (.) (^SFT/O)
+ (0) (1) (2) (3) (4) (5) (6) (7)
+ (8) (9) (^SFT/Z) (^SFT%F) (^SFT%G) (^SFT%H) (^SFT%I) (^SFT%J)
+ (^SFT%V) (A) (B) (C) (D) (E) (F) (G)
+ (H) (I) (J) (K) (L) (M) (N) (O)
+ (P) (Q) (R) (S) (T) (U) (V) (W)
+ (X) (Y) (Z) (^SFT%K) (^SFT%L) (^SFT%M) (^SFT%N) (^SFT%O)
+ (^SFT%W) (^SFT+A) (^SFT+B) (^SFT+C) (^SFT+D) (^SFT+E) (^SFT+F) (^SFT+G)
+ (^SFT+H) (^SFT+I) (^SFT+J) (^SFT+K) (^SFT+L) (^SFT+M) (^SFT+N) (^SFT+O)
+ (^SFT+P) (^SFT+Q) (^SFT+R) (^SFT+S) (^SFT+T) (^SFT+U) (^SFT+V) (^SFT+W)
+ (^SFT+X) (^SFT+Y) (^SFT+Z) (^SFT%P) (^SFT%Q) (^SFT%R) (^SFT%S) (^SFT%T)
+ ] def
+
+ /newcode barlen 6 mul string def
+ /newtext barlen 6 mul string def
+ /j 0 def /k 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /extchar extencs barcode i get get def
+ /extlen extchar length def
+ newcode j extchar putinterval
+ newtext k barcode i get put
+ extlen 1 ne {newtext k 1 add ( ) putinterval} if
+ /j j extlen add def
+ /k k extlen 1 eq {1} {2} ifelse add def
+ } for
+ /newcode newcode 0 j getinterval def
+ /newtext newtext 0 k getinterval def
+
+ % Get the result of encoding with code93
+ options (dontdraw) true put
+ options (parsefnc) true put
+ /args newcode options //code93 exec def
+
+ % Replace chars in /txt with chars in newtext
+ includetext {
+ /txt args (txt) get def
+ 0 1 newtext length 1 sub {
+ /i exch def
+ /txtentry txt i get def
+ txtentry 0 newtext i 1 getinterval put
+ txt i txtentry put
+ } for
+ args (txt) txt put
+ } if
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/code93ext dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code93ext--
@@ -1365,51 +4066,158 @@ E+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: 2401234567
% --EXOP: height=0.5 includecheck includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp interleaved2of5 0.0 0 0 0
-%%BeginData: 43 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 055<GA TD Tu@<Q3 m12
-gb^H\`B!23JD%Df Bf4Df 0WZ 5*@ ] T@U X:e De* FB5*@] TA 8c@-A9 )+&
-+D,%uF(LLj055<6 Cis9" @q] F`C ER 4t Cia 0N1 G<H[@r -9 uATVL. F<G
-1(Cia0N1G<H[@r- 9uAR fCb @r #d rFC f]= +D, %uF(
-LLj06CcMFCoH/FH OV,1 G <i ]G ]\" @H= _m>O u"b5A
-U&<BDe<U&ATWb(O u"b)AS Gdj F GKs \1 N.5S Bl@ m1P-6N[FE2 )5B68E<AWf3
-'L]NYrOpu>KFD5Z 2F*j(N Amo L sAWf 3'P! FGY <0B5(@ZmRN 0oc8tP)XR(F
-_-_!H]ftD5*C&O5 *@^MH] ft& Eckr V1OY EdI ?J0)*g/N:D fBf4Df0WZ5*
-@^MP#Q@=FD5Z2F* j'+I? I/TF Cf]=A oDR/ +EV 1>FCoH/FHS 5=1G<i]G]\"
-@H=\4@AU&<<BmO? R09S+ EFCf] =H#I; ,F( KG9FCf]=H# I;,F(KHV09S
-+EBOtmjBQPA1ASG djFHS;? 1Lad5@ rGmhH ]g@ E0Tp%25);4 ^:m,jG04K->
-E,[FDDKKH1Ch7$uARmQ7Ai4%+A4($=Ea`I"ATEe]8T&W]Ebo;qG%G2,1*CLI+>k9YF`VXI@rH7
-,@;0U%Df0B:+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\oI?I/T@UX:nASrW"@<,jrA7^p5Ou$QUEbo
-<)L]W`SL]ET$Bl7EsF_#&nBOt[hOp#6&Ebo<)L]W`SL]ETTBl7EsF_#&nBOt[hP&QQeP&bn&E+
-*9"@UX:nAT!;)Oo^`BOu%&cA;C5A0Tp["@:Y/p@UX:eDe*FBGqWW8Eas#uAKYr#A<J`%@UX:nA
-SrW"@<-0qDMS=V!Ko6eP#Q.5@r-9uARfCb@r$EE@q]F`CNFW8L]ESoL]E53@UX:nAT!;)P,Wd]
-Bp(ZC1MMXHP%odQP!+.F@q]F`CNFW8+Cf(r@r$..D'3:rEas#uAKY]M98G9bWJCY>Cm"g^1OXU
-'@q]F`CNFW8+Cf(r@r$..D'3:rEas#uAKY]M98G9bWKI:F1OYEdI?I,S@q]F`CNFW8L^IX*ARf
-LsF_upAP%p/ZL^K;[Ou"b1@:UKi@<-0qDMS=V!Ks:B1N6c5L]CmmEas#uAWh=X@:UKi@<-0qDB
-NG&ARfLsF_upgOo^_j04J@1@rGmh+E1b"Ou"b#@<-0qDBNCsEbo<)L]NY>Ou%NL<%hg#@ribsN
-Wh-l1,:SE"Yqee0f"am0etI<16)Mn1,1L<NWh-l1,1PE"Yqef0en[l0etL=0ocDl0ekF=NWh0m
-0etJD"Yhbe1,4dl0ekC;NW_*l0elss1G<3GEarckEc[6J0JP==1c70M3'!-X06:TD+C\c"Ch7L
-?"d3\X#a,4OV33VfFEhmM@UX:nAT!Y;Ou%/gF,0g-DI[aD$Be&FH&)HV!b,SYCh7L?!KsF/056
-S5Ou$QUEas#uAKY]C!Kp,c@<,jk@<-FP5*CngFcp2eBl7I+P!5$bP')q104f$2@3B-!@ric,DI
-e!T99M)?@<,jrA7ZltL]NY>L]NZ4@UX:eBOPq&P!5%gP')ps055<7G`k7R1QlmDFY@<D@q$QlD
-I[`1Bl7I+P"Uro055<GC`m;,@ptO0L]W`UP,4<tL]E53ASu!dP%'4JP,Wd]C6CcD1G<0HBOPp(
-ASu!d+DR'4Ou"b#@q]:k+D#G#@N]EK99M)FDKK\;C5;qSCggge@<.NUBl8$/+DQ]6P&,pTOo]$
- %BOPqEG^Y`GF(025BnuqUCkr4W!GQFnCm''cG]Y'B+Bost@<,jrA7ZltL]NZ4Bo!(YCkr4W!H
-_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'C\Y@r-9uARfCb@r!3$DI[L*A7]7aARfLiD
-KKH7FHUU+"Cbe[Ch7L?!g9NsP!+s2HZXLS+DHW4Oo\dI!?c*4!KmJ>$'K+\"Hie-AU&<BDe<U&
-ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI=$'\F<G:R!KmIf+C\c"@rGmh+DHW4Oo^@>P"]SG!KmJ
->$'K+\"Hie-AU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?ITYP"9Y'F!+q#Ebo<)L]r
-rXL]ikAASu"!L^TA=P'K/P061WA0/%?WDJX$)ARTU4F(025>9IurF*i]sP,Wkm8R3uYBQG;#+E
-M"5P%'4JOo^@?P#?X?ASGdjFFB=)>q]YrF!+[0F(03R@Yb&J!Jgf?;L=3"I?K4g+DG_'Cis9"F
-Cf]=HS9JcF<G[MFFB<O04J@1Eaa'(DhnHJF)YPtATD4$BlAe/05kfO+E)4@Bl@m1+?ht3A8c@-
-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b*DKKH1Ch7$uARmQ7Ai5`2P%64gCG'+8/p(ZFEd;,
-:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M
-~>
-% uk.co.terryburton.bwipp/interleaved2of5 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp interleaved2of5 0.0 2015050900 65832 65492
+%%BeginData: 150 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/interleaved2of5 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includecheck false def % Enable/disable checkdigit
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Validate the input
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.interleaved2of5badCharacter (Interleaved 2 of 5 must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ /barlen barcode length def % Length of the code
+
+ % Prefix 0 to barcode if length is even and including checkdigit
+ % or length is odd and not including checkdigit
+ barlen 2 mod 0 eq includecheck and % even & includecheck
+ barlen 2 mod 0 ne includecheck not and or { % odd & !includecheck
+ /pad barlen 1 add string def % Create pad one bigger than barcode
+ pad 0 48 put % Put ascii 0 at start of pad
+ pad 1 barcode putinterval % Add barcode to the end of pad
+ /barcode pad def % barcode=pad
+ /barlen barlen 1 add def % barlen++
+ } if
+
+ % Add checksum to end of barcode
+ includecheck {
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ i 2 mod 0 eq {
+ /checksum checksum barcode i get 48 sub 3 mul add def
+ } {
+ /checksum checksum barcode i get 48 sub add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ /pad barlen 1 add string def % Create pad one bigger than barcode
+ pad 0 barcode putinterval % Add barcode to the start of pad
+ pad barlen checksum 48 add put % Add checksum to end of pad
+ /barcode pad def % barcode=pad
+ /barlen barlen 1 add def % barlen++
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (11221) (21112) (12112) (22111) (11212)
+ (21211) (12211) (11122) (21121) (12121)
+ (1111) (2111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+ /sbs barlen 5 mul 8 add string def
+ /txt barlen array def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ 0 2 barlen 1 sub {
+ /i exch def
+ % Lookup the encodings for two consecutive barcode characters
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enca encs indx get def % Get the indxth encoding
+
+ barcode i 1 add 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /encb encs indx get def % Get the indxth encoding
+
+ % Interleave the two character encodings
+ /intl enca length 2 mul string def
+ 0 1 enca length 1 sub {
+ /j exch def
+ /achar enca j get def
+ /bchar encb j get def
+ intl j 2 mul achar put
+ intl j 2 mul 1 add bchar put
+ } for
+
+ sbs i 5 mul 4 add intl putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 9 mul 4 add textyoffset textfont textsize] put
+ includecheck includecheckintext not and barlen 2 sub i eq and {
+ txt i 1 add [( ) i 1 add 9 mul 4 add textyoffset textfont textsize] put
+ } {
+ txt i 1 add [barcode i 1 add 1 getinterval i 1 add 9 mul 4 add textyoffset textfont textsize] put
+ } ifelse
+ } for
+
+ % Put the end character
+ sbs barlen 5 mul 4 add encs 11 get putinterval
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /barratio 2
+ /spaceratio 2
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/interleaved2of5 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER interleaved2of5--
@@ -1417,42 +4225,120 @@ A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b*DKKH1Ch7$uARmQ7Ai5`2P%64gCG'+8/p(ZFEd;,
% --BEGIN ENCODER itf14--
% --REQUIRES preamble raiseerror renlinear interleaved2of5--
% --DESC: ITF-14
-% --EXAM: 04601234567893
+% --EXAM: 0 46 01234 56789 3
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp itf14 0.0 0 0 0
-%%BeginData: 31 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 055<GA TD Tu@<Q3 m12
-gb^OuP+;CG'+8/p (ZFEd ;,: Ecc 5 ;/n 0$= E,^ uoP'E- !0 55N?0f 465
-'Tt>:%52X=FD5Z2 F-8_M 1G< 3GE as #u AWf 6?1 G<9WDK KE 0@<Wi+ @;L
-!rOu"b*DI[L*A7] joG] Y'? @; L! rOu "b5 AU& </Df
-0ZZa-&53FCf]=F( or3L ^ K; $0 6Cc MFE h_9A ohO*L
-]ESo06CcMFEqe:A ohO*M# !2i 0 5+p 2B 4uCC !Ko 6WE-,f4DKC uE06;5UBl7R
-*H#R>X4aVtcOu8C 3DfBf4 Df0 W CP,i 2'Ci a0N 4aW>WI?IQm 30Ia6V33Qn!
-BlU*FE2M8P!+/T/ Wr;\Fc nqO 1OXV 5/Tc #UA WeitP#ZpnA We*t3A5;iFD
-5Z2F-8_M1OYEcDf Bf4Df 0WCO u%NL8 M>0s G][ P9DKI"CAU& </Df0Z[/Wqn
-CFCf]=F(or3+EV1 >FE;/ BAWe^ 01G<i ]G] \1KAnH*qF< G[:G]\1KAnH
-*qFHS;?1G<i]G]\ 4LAnH*q F<G[:G ]\4LA nH* qFHS;?1G<E QBkM+$+D>>#
-B4uCM09S,#@<,jrA7^p5L^fMa@UX:eDe*FB@YbMWD3>$K04K->E,[FDFCm6a@UWe@ASu.&BT=-
-*<(8Go1a$XXF*&O6AKW]`+E)9C0f1"`BkM.%F"]1e@;0doATDg0EfrY8P#Pn!Eas#uAUBS"LbP
-!(P!4[^P#.<^HS8iPBlJ#DBlmrA1h'm(6YKnK@:OCjEfM55<(8Go1a$XXF*&O7Df0Z*Bl5&3DJ
-XS@A8,[jFE9)gEa`['AS#n&DfV"*I?IQXP"@<:BOt[hF*2>U!0T-o!/LZ3%!sXAP!5$b04S[,@
-r$..D'3>%ARfLsF_r71@<,jrA7ZltP"UTbP,W/O!g7;S!0TKlL]`fVI?IQm!Ko6eP"769BOt[h
-F*2>U$=da\@r$..D28O^C6GQP$Bf.e1Lad5@rGmhP%'4WP!+/$@<,jrA7^Q+P"T:uARfLsF_up
-gOo^__HS8iPBlJ#DBlmrA1h'm(6YL%@CIDlLBlo@]8T&$VEcP`$F<F.S7P->O+Cf(r@r!2tBkM
-.%+E2@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm</;$IV33fo!+KAW@rGmhP'N3ML^dj-ARfLsF_
-upgOo^_j04J@1@rGmhP!5$bDfBf4Df0WV#\7jkFC]E#GB@kJAWh:VE-,f4DKCgFF(fK9@W-9tA
-TDm5F_-_\DfBf4Df0WV$Y"$pA7]e*Bk2=!L]ilcDfBf4Df0WV$=[poA7]dtAS-%?&!D0UE-,f4
-DKCgG@W-9tATDg*B4uCC&!D0UE-,f4DKCgBBOtmjBQT+r!!!"^G].PCBl@m1NY6&D@r-9uARfC
-b@r#drFCf]=FE2M8P'CnaFD5Z2F,gWMAU&<BDe<U&ATWb%P'AWgEbBG9@UX:eDe*E%DfBf4Df0
-VL055<GATDTu@<Q3m12gb^P!>*c@<-"%NWX3=FDl,?Bl@m1P'CDUB6,2+Df0Z-Eaa0TE%`kbAS
-u<uDIm6sP#RT)I?G)'1G<HaAhc-*30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F
-)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/itf14 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp itf14 0.0 2015050900 65819 65737
+%%BeginData: 109 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/itf14 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def
+ /includecheckintext true def
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset 3 def
+ /height 0.5 def
+ /showborder true def
+ /borderwidth 4 def
+ /borderleft 15 def
+ /borderright 15 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+ /borderwidth borderwidth cvr def
+ /borderleft borderleft cvr def
+ /borderright borderright cvr def
+
+ % Strip spaces from the given data
+ /text barcode def
+ barcode dup length string exch 0 exch
+ {dup 32 ne {3 copy put pop 1 add} {pop} ifelse} forall
+ 0 exch getinterval /barcode exch def
+ /hasspace text length barcode length ne def
+
+ % Validate the input
+ barcode length 13 ne barcode length 14 ne and {
+ /bwipp.itf14badLength (ITF-14 must be 13 or 14 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.itf14badCharacter (ITF-14 must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate ITF checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 12 {
+ /i exch def
+ /checksum checksum barcode i get 48 sub i 2 mod 0 eq {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 14 eq {
+ barcode 13 get checksum 48 add ne {
+ /bwipp.itf14badCheckDigit (Incorrect ITF-14 check digit provided) //raiseerror exec
+ } if
+ } {
+ 14 string
+ dup 0 barcode putinterval
+ dup 13 checksum 48 add put
+ /barcode exch def
+ text length hasspace {2} {1} ifelse add string
+ dup dup length 2 sub ( ) putinterval
+ dup dup length 1 sub checksum 48 add put
+ dup 0 text putinterval
+ /text exch def
+ } ifelse
+
+ % Get the result of encoding with interleaved2of5
+ options (dontdraw) true put
+ options (showborder) showborder put
+ options (borderwidth) borderwidth put
+ options (borderleft) borderleft put
+ options (borderright) borderright put
+ options (height) height put
+ options (textyoffset) textyoffset put
+ /args barcode options //interleaved2of5 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/itf14 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER itf14--
@@ -1463,42 +4349,99 @@ u<uDIm6sP#RT)I?G)'1G<HaAhc-*30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F
% --EXAM: 563102430313
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp identcode 0.0 0 0 0
-%%BeginData: 34 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 055<GA TD Tu@<Q3 m12
-gb^OuP+;CG'+8/p (ZFEd ;,: Ecc 5 ;/n 0$= E,^ uoP'E- !0 54s.DK KB,
-A7^+D'Tt>:%52X= FD5Z2 F-8 _M1 G< 3G Eas #uA Wf6?1G <9 WDKKE0 @<W
-i+@;L!rOu"b*DI[ L*A7 ]jo G] Y' ?@; L!r Ou" b5AU
-&</Df0ZZa-&53FC f]=F ( or 3L ^K; $06 CcMF Eh_9A
-ohO*L]ESo06CcMF Eqe:Ao hO* M #!2 i0 5+p2 B4u CC!Ko6WE-, f4DKCuE06;5
-UBl7R*H#R>X4aVt cOu8C3 DfB f 4Df0 WCP, i2' Cia0N4aW>W I?IQm30Ia6V
-33Qn!BlU*FE2M8P !+/T/W r;\ Fcnq O1OX V5/ Tc#UAWeitP #ZpnAWe*t3A
-5;iFD5Z2F-8_M1O YEcDf Bf4D f0WCO u%NL 8M> 0sG][P9DKI "CAU&</Df0Z
-[/WqnCFCf]=F(or 3+EV1 >FE;/ BAWe^ 01G <i]G]\1KAn H*qF<G[:G]\
-1KAnH*qFHS;?1G< i]G]\4L AnH*qF <G[:G ]\4 LAnH*qFHS; ?1G<EQBkM+$
-+D>>#B4uCM09S,#@<,jrA7^p5L^TA_@UX:eDe*FB@YbGUD3>$K04K->E,[FDA7]Y#@rGmh6=FC
-uASu.&BT=`6AT`*9@q]Er:iCDs+A$*TDKKB,A7Zm#F`VXI@V$Z:0d(CT+>GVoA8,[jFE9)gEa`
-['AS#n&DfV"*I?IQ=@<,jrA7^+N3/B8OAs,?63Kd4%EdKHKGA2#8/nnj-DKKB,A7\)9A4($=Ea
-`I"ATEeb6tLL_F(8lp+AcutF<F.cASuU"De*E%D09oA+Cf>-FCAm$+E).6Gp$X3B5)I/0/%?SB
-ldisEcQ)=P!=AX<.0p$04S[,@r$..D281T1Pc$e!Jh)0056S5Ou"b$BOt[hF*2=B@q]F`CNFW8
-+C\c"@rGmh+DI!3LbP!kBnuhRC5;kQ4aVtfP&,PnL^B5\I?ITn!Ko6eP"769BOt[hF*2>U$=da
-\@r$..D28O^C6GQP$Bf.e1Lad5@rGmhP%'4UP!+/$@<,jrA7^Q)P"T:uARfLsF_upgOo^__HS8
-iPBlJ#DBk1dmFCT6"AO9g96YL%@CIDlLBlo@n8T&$VEcP`$F<Et_F`_\7BOr;_Df^"C8RuCMFC
-T6"AKYJrARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS#n&DfV"*I?IQXP#R5GP,4=$L]CmmEas#uA
-Wh>%3/@rPBOt[hF*2>U0TlI"GV<N7Eas#uAWf6?1G<i]G]\rW+<W9Z+<VdL+<W9Z+<VdLL_,`G
-Or9E=FCf]=L]CmmEas#uAV^>B!g66?H$!VBFGL$.@<,jrA7^PuL]`f6P'M.\G]\`H@UX:eDe*F
-8"c*8D9Tj[CAU&<Q$Y!Ob@rGmhL^8e=P"_$aFCf]=L_!s'Eas#uAV^_M!Kp->H#IYDBl@m1NX0
-06DKKE0@<Zg6F_-_\DfBf4Df0WV$u'ThCis9"@q]F`CM%!kF(LMZ04Am6F!+q#Eas#uAKYo1FD
-5Z2F"]1\DKKH1Ch7$uARmQ7Ai5`9Ou$NeB60(8FEhn3+Bot1AU&;>FCf]=G].2+F(KG9FCf]=H
-#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY8$?'9G@EbBHR$?Tj(FEh51BkM=D#%M4^FCfKUG[YW*
-F,g?@E--#;FD5Z2F-:cVEbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b*A7]Y#@rGm
-hOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,
--DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/identcode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp identcode 0.0 2015050900 62754 62576
+%%BeginData: 91 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/identcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Validate the input
+ barcode length 11 ne barcode length 12 ne and {
+ /bwipp.identcodeBadLength (Deutsche Post Identcode must be 11 or 12 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.identcodeBadCharacter (Deutsche Post Identcode must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 10 {
+ /i exch def
+ /checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 12 eq {
+ barcode 11 get checksum 48 add ne {
+ /bwipp.identcodeBadCheckDigit (Incorrect Deutsche Post Identcode check digit provided) //raiseerror exec
+ } if
+ } if
+ 12 string
+ dup 0 barcode putinterval
+ dup 11 checksum 48 add put
+ /barcode exch def
+
+ % Compose the human readable text
+ /text ( . . ) 16 string copy def
+ text 0 barcode 0 2 getinterval putinterval
+ text 3 barcode 2 3 getinterval putinterval
+ text 7 barcode 5 3 getinterval putinterval
+ text 11 barcode 8 3 getinterval putinterval
+ text 15 barcode 11 1 getinterval putinterval
+
+ % Get the result of encoding with interleaved2of5
+ options (dontdraw) true put
+ options (includecheck) false put
+ /args barcode options //interleaved2of5 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/identcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER identcode--
@@ -1509,42 +4452,99 @@ hOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,
% --EXAM: 21348075016401
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp leitcode 0.0 0 0 0
-%%BeginData: 34 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 055<GA TD Tu@<Q3 m12
-gb^OuP+;CG'+8/p (ZFEd ;,: Ecc 5 ;/n 0$= E,^ uoP'E- !0 5P36FC T6"
-AUB4IOu8C305kfO Bl@m1 P!5 $b0 4J @1 @rG mhP !5$b04 ]! =FC]E# G9C
-L+Cia0N1G<H[@r- 9uAT VL. F< G1 (Ci a0N 1G< i]G]
-[P9DKM#]Ou"b5AU &<<B m O? H$ Bd1 uFC f]=G ].2+F
-(KHL!0T,kFCf]=H #I;,F( KHL q 3!N eB Otmj BQT %2Ou%#qFD5 Z2F-<^[F*)G
-:DJ+':E+P1qH\_] c23JDe E-, f 4DKC /fX( GdV F(LLtH]gXB P#RT(P%'TNO
-thst4d(eHEckrV4 aW>DP! 5%O P!5$ bI=% ,/F E2M8Ou%NL< IL$AOrfcH05
-kfOBl@m1P!5$bI? IQJE- ,f4D KC/f1 OYEX 06C cMFCoH/F<G [:G][P9DKM$
-nOu"b5AU&<<BmO> 5FCf] =F(or 3OtVt S06 CcMFEh_9Ao hO*+EV1>FEh
-_9AohO*OtVtS06C cMFEqe: AohO*+ EV1>F Eqe :AohO*OtVt S05+p2B4uB0
-BOtmjBQTCjOu$QUEas#uAWgMY%?bR;@<,jrA7^p5L^oSbOp$+b@WuO*E%Ys<Blmj'A7\)9A5$Q
-PB67gI/js8nFE:r*AKXffF*&NuASH6rDe*E%D09oA+C\n)0f'qjEZd(n+Co2!BlnDL061K8F(J
-p'Ec5u]5CJ\o@UX:eDe*F+OuS7OP%Kk@LcLVpP&bn&@WuO*E%Ys<Blmj'A7\)9A4($=Ea`I"AT
-Eea6tLL_F(8lp+AcutF<F7gBlmj'A7Zm#F`VXI@rH7,@;0U%Df0B:+Co2!BlnDL061K8F(Jp'E
-c5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfLsF_r72BOt[hF*2=B@UX:e
-De*E%Bp),F0TrDLL]W`SL]ET$H\_ffCjgYd$'K+QP#[YGOu%NL82"IdARfLsF_upA@q]F`CNFW
-8L^K;[P,X6EP%p.9@UX:eDe*FB@YbMW4aUXHEas#uAV^eY94MXH@r$..D29m/!Kq;H04K->E,[
-FGASH6rDe*EG@:V`=ARfLDBkM.%N\sCG@rHC.ARfg)6tLL_F(8lp+AcutF<F7gBlmj'A7ZlnBO
-t[h+Co2!BlkJ:Ec6,8A7]:)061K8F(Jp'Ec5u]5CJ\oI?IQc%[*ZO3/@QD@<,jrA7^pLOuS7,@
-q]F`CNFW8LbOtmP'AWh@<,jrA7^ofOu"b5AU&<W&g/;>+<W9Z+<W9Z+<W9Z+<Ve_&sB)S)3Qdt
-AU&<Q!+KAW@rGmhL]E57P"_$aFCf]=L^%<sEas#uAV^MG"-Q?@H$!VBFGL95@<,jrA7^Q&L]`f
-6P'M.\G]\`O@UX:eDe*F8$]"kI9Tj[CAU&<Q&Ro0h@rGmhL^f.@P"_$aDfBf4Df0WV#\7jkFC]
-E#GB@kJAWh:VE-,f4DKCgHBl7EsF_#&nBOt[hAmoLsAWh9k@<-"%+C\c"@rGmh+E)4@Bl@m10/
- %$WFCfK/ARTanA28(823L1e1LY<:F,g?EG][.4>9J$!G]Y'MAU&<ADe<U&ATT&:AU&<BDe<U&
-ATT&:AU&</Df0Y>FCf]=F(or3+C-*qP'CDUB60(?FCf]=G[YE&B5W_6@qBP"ATErY@<-"%NWX3
-=FDl,?Bl@m1P'CDUB6,2+Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<QUBlmj'A7^o`P%6
-4gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`
-V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/leitcode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp leitcode 0.0 2015050900 62746 62572
+%%BeginData: 91 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/leitcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Validate the input
+ barcode length 13 ne barcode length 14 ne and {
+ /bwipp.leitcodeBadLength (Deutsche Post Leitcode must be 13 or 14 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.leitcodeBadCharacter (Deutsche Post Leitcode must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 12 {
+ /i exch def
+ /checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 14 eq {
+ barcode 13 get checksum 48 add ne {
+ /bwipp.leitcodeBadCheckDigit (Incorrect Deutsche Post Leitcode check digit provided) //raiseerror exec
+ } if
+ } if
+ 14 string
+ dup 0 barcode putinterval
+ dup 13 checksum 48 add put
+ /barcode exch def
+
+ % Compose the human readable text
+ /text ( . . . ) 18 string copy def
+ text 0 barcode 0 5 getinterval putinterval
+ text 6 barcode 5 3 getinterval putinterval
+ text 10 barcode 8 3 getinterval putinterval
+ text 14 barcode 11 2 getinterval putinterval
+ text 17 barcode 13 1 getinterval putinterval
+
+ % Get the result of encoding with interleaved2of5
+ options (dontdraw) true put
+ options (includecheck) false put
+ /args barcode options //interleaved2of5 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/leitcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER leitcode--
@@ -1555,111 +4555,426 @@ V,9E+*6lBl7R3P#M~>
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databaromni 0.0 0 0 0
-%%BeginData: 103 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 061WAD .. O,Bm>e #06
-M%_@rEuAATDg:@W c^5Df .1: GA2 # 8P1 l(D Ops 'T@<>p e@ <-:'DJ =HR
-'Tt>:%52X=FD5Z2 F-8_M 1G< 3GE as #u AWf 6?1 G<9WDK KE 0@<Wi+ @;L
-!rOu"b)ASGdjFGM )r8< Plo 1G <Q YDJ NZn AKY SnCi
-a0N1G<?YEc#6,NW a9;D J >7 iD fBf 4Df 0WZY :js=E
-bTE(FEqh:P!+/J! Ko='%< $3- B l@m 1H ]kFA @;L !rP!+/T5^e epOuSV6P,4<
-rNWD;+NHB2`AWf3 'OtDh\ P') p OOu% N5Ot Ccr F_-^lI?ITY P%BdtOuY16E
--,f4DKCt)Ou%NL< ,Z_tBl @m1 H]g1 5P"B 8(E c#6,NX9fJF `(\tFCf!G4a
-ShqASGdjFGLB^8< Plo1O YEc0 5+p2B 4uB0 BOt mjBQTCjOu$ QUEas#uAV^>
-B"HlH="=PrY.?\O p04K- >E,[F ?@<>p e@< -:'DJ;FGA3 ieI7n6K4+@K
-X[@7"CC+AZilBk1 puARfgr Df0!"+ Dl7BF <G% (B5)6+GA2/ 4+=Jou.3N&<
-E,95u@<?4%DBNY(ASuU(Anbgs0/%?SBldisEcQ)=P!=AX<+99V@rGmhP%'4ZP&4Z:Eas#uAWgM
-Y&s@*p"FDe2GA2#8/nAC4@:EYcDf'B+6=FCuASu.&BT=l=;_]C_@<>pE@<*JdD/O&uBl[cpFD5
-Z2@;I''F`VXI@V$Z:1E^UV+>G\qA8,[jFE9)gEa`['AS#n&DfV"*I?IQ=@<,jrA7^Q"@UX:eDe
-*FB@Yb/MWKKr%OuS7OP%Kk@LcLVpP&bn&@WuO*E%Y[0FCAWeEc5f4BgQ6=6YKnK@:OCjEfMtH;
-_]C_@<>pE@<*JdD/O&uBl[cpFD5Z2@;I''F`VXI@rH7,@;0U%Df0B:+Co2!BlnDL061K8F(Jp'
-Ec5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfLsF_r72BOt[hF*2=B@UX:
-eDe*E%BnunT!Kp*30TrDLL]W`SL]ET$H\_ceCjhIGOo^_%I?I,S@q]F`CNFW8L^IX*ARfLsF_u
-pAP%p/ZL^K;[Ou$QUEas#uAWgMY&s>D)@UX:eDe*F8&X#dsBOt[hF*2>U0TlI"D0mpFGA2#8/n
-AC4@:EYcDf'B+6=FClBOt[h6tp:JFH/CRDI[U*Eb/a&+@f?b+@KX[@7"CC+AZilBk1puARfgrD
-f0!"+Cf(r@r!2tBkM.%+E2@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm</;0MV33fo!+KAW@rGmh
-P'N3ML_4-1ARfLsF_upgOo^_j04J@1@rGmhP!5$b06DG\+C\c"@rGmhP%'R\Ou%moL]LsnEas#
-uAWgMY!KsF/056S5Ou%3)F<G9?>9IB`Eas#uAKY]C!Kp-4!/LW8!/LV\P'DD<82"jjEdNTDOr9
-F^L]W_WP%K'(5(/SnL]N;4L]rS:P)"hoOo^C=P!45UCkr+T=GR'B=H[*>L]NZ@P#@H,L]NY>P!
-4;W<.0p#H\_]c=GR'B=HZL-P!FGY</:R<=HZRF5)96&!KoWpP%Be?P')pOP')29%[&V$B4Z0_;
-c@mSA9;L+HS9;KP!5$b04es_5*@]TD0M.,Ou"b/D3@)G1G<o[Cm$uF1G<ZhF<G.2OpR:-05Y-=
-CPVtR1Pc$e!G-)'!g9O004J@1P!5$b04f?`!Ko5lD..L$+DkP.CPW"#@<.MAP&c^AHS9G`@;I'
-(D'3D6P,X6<P,W#/+C\c"P,X6=P,W>/Efr4sAKYhuF)-R3P!+s2DJ^M-GESq:Ckr.UCm(c,@<.
-/*P&-9^M#NQ0Op$+bF*:u.+EM^7C`mV4+D#b[WF]n/WFB:VOo]-1+C\c"P,X6=P,W>/Eg!Db1O
-YEcAS`Ju@<.O1L]W`9HS92Y@;L`"Ou$um+D#b[WF]n/WFB:VOo^@?Oo^C=D0Ld:Oo]oID3@)GW
-F^::WJCS<WF]lg@UX;?WJCY>WGZ3d05Pf?Cm$tuG%#3M!Ko6eP"76IG%#20F*:u.+Dc40C`m;*
-+C\c"P,X6<P,XU\P,XU#I=#jK+D#b[WGQjB:jXj:G%#20F*:u.L]N[<Ou%NL<.0p006Uc?+Eh1
-0+EM^7Cm(c\1Nm2CL]ETMH]gXBP#O)GG9CI@L]NY>Ou"b.@<63,D..L$L]LsnEfprrE0:?e1OY
-Et06Uc?+Eh10+EM^7Cm"g^1G<W_+Du$=ATs<:Ou%$!F<G%$EZeq;P'DD<88iWm+D#AF!KsF"D3
-B-^F``%p%[&V$@VK_'@;I&j+Dbb0CLLjeH\_]NH\_ZMP#Yt"Eas#uAV^JF%?aD3LbP!kI?I0-O
-u%moL]N;?HS9)r5*@^2Bl8*&C`mGJ!KmJ>!g4Fa94DUQG%#20Bp),B!(AsAP%od[P&-9^P'CGM
-DK]H)+DDs-Bl8*&C`mGT98!:63q\Y6P'DD<82#!tB4uB0@VK_'@;L`/P"UH.76:+)C6CA^Bl8*
-&CkrOV!g4Fa98!:63q\Y6P'AWrAS-%?!0T,kBcqM<F_-^lL]E53L^e\aC6CcD1Lb'9G%#20C6D
-5Q3/@Qt4_^&^H]iN"HS9(UAmoLsAWei&Ch74#+DbV$FGL$Ts,r.n$A].+P,W#;E0;c8Cm"g^1O
-YEdI?I,SA2,3CAS-%=#!J,IOu"b%1*CCEAorb34d'QC1G<8p+ED1/BQSt54d&^+1G<8q+ED1/B
-QSt54d'QC1G<iY@PKbt+BsR#TSNT(%#>%B#`&M9!252LL',5G!252UL^&Y>L]`H0L^JkAhM)-K
-L^8eBL]iM;L`_EsL'jB(#N(=AL^Jq?L^&YBLdm+,(krBeL]iMBL]N;;L]N<\?'6usFCAW52)HF
-[L&k)+!/Lf7$A\b>#D`M=</(M`L&k,,#D`YA"Gd5;'Smug"m^mG%#>4G#)EJ>",JXe$AJaIL'?
-q"$]"qA#`&M;;2>6YOu"b*L]ESoHXniRFCAW52DcOjP"UsHHZW\*0fCj2BnueQ!JguD9RD2N8M
-=U/FCgV!Ou"b%0m%>s5*@]TA2.qFAWf6?1G<8nD0Ko]5*@]TA2.Y3AWf6?1G<8nASc:J5*@]TA
-2._<P!5$bP!FGY<%hr.Bo!%X!Ko6eP%?:\L]ESoHXnlSFCAW52)HFiP"UsHHZW\*0f:d1BnueQ
-!JguD9RD2N8M=U0FCgV!Ou"b%13@Gt5*@]TA28"GAWf6?1G<8oD0Ko]5*@]TA27_4AWf6?1G<8
-oASc:J5*@]TA27e=P!5$bP!FGY<%hr.Bo!%X!Ko6eP%?:\L]ESoHXnoTFCAW52DcOjP"UsHHZW
-\*0fCj2BnueQ!JguD9RD2N8M=U1FCgV!Ou"b%1N[Pu5*@]TA2A(HAWf6?1G<8pD0Ko]5*@]TA2
-@e5AWf6?1G<8pASc:J5*@]TA2@k>P!5$bP!FGY<%hr.Bo!%X!Ko6eP%?:\L]ESoHXnrUFCAW52
-)HFiP"UsHHZW\*0f:d1BnueQ!JguD9RD2N8M=U2FCgV!Ou"b%1j!Z!5*@]TA2J.IAWf6?1G<8q
-D0Ko]5*@]TA2Ik6AWf6?1G<8qASc:J5*@]TA2Iq?P!5$bP!FGY<%hr.Bo!%X!Ko6eP%?:W0m@O
-YA2,3;0kYQjWFR`*AWfr%0kG0>+Cm3DGAi9?AmoLsAKYVsFAc%9GA1T0BQK=m04Ze]AKYM<+Cm
-3>F-<M50m$uiC1K&1Ch4`"0l;,GL]hg?F_)\.ATUgK;g2qdFD,`Y1G<8oGAeU71*C*_B6068A2
-87FP%nM_ASc9-A28"GDhnO<Eckq9B4Z0_;c@mSA9;L+Ou"b%13[:PA259<11tZkWFRc+Dj""/1
-1b95+Cm6EG@cR5AmoLsAKYVsFAc%9GA1T0BQK=m04Zk_D]iRH+Cm9@F-<M51N[2k;IhRpCi:G,
-1Mq>SL]h<uCia/1B4Z0_;c@mSA9;L+Ou"b%1O!CQA2>?=1M:clWFRf,AWge=1M(B6+Cm9FG@cR
-5FE2M8+D58-;H$M<Bk2=!F-8=4A2JLK+Cm;OA2Iq?P,VtKFDm=WA2Ik6D]iRID0KoS"E\[,AKY
-VsFAc%9GA1T0BQK=m04Zn`AKYM?+Cm<AF-<M51j!Z!;IhUqCh4`"1i7GJL]h<uCia/1B4Z0_;c
-@mSA9;L+Ou"b%0mAEZOpR:-L]E53L]_uWBp(ZC1Lr4a+DHW5P&+Y`GAeU<P"Us_A2/9NBnuhRC
-kr+T!G!p/AKY]M99OOJP"76:13\N[OpR:-L]E53L]_uWBp(ZC1Lr7bL^.XM!g7A_WFRc.D]ibW
-99OO113\NYBnuhRCm(c.13[:PBp),PG^Y`G04Zk_L^9.MOu%moL]N;6HS9)r5*@^41O"W[Bnuh
-RCm(c.1O!a[Bp),PG[rUSL^%RL!g7A_WFRf/AKY]M99OOJP"76:1j=`]OpR:-L]E53L]_uWBp(
-ZC1Lr=d+DHW5P&+YcGAeU<P"Us_A2JKQBnuhRCkr+T!G"$2AKY]M99OOJP"76MBk2=!F!+[0A2
-/:TI?I0413\(nP"B1?GC+b$8RsZ%H[V&K?'6us@q]F`CNj?(B4uC.+BsX&L]`G>L`;-OL^&YJL
-c1&MLe*==L^8eWLa7cbL]iN+Lbji!L`hL"Ld?hNL_,A-La%WkLdd+SLd[%OLc\n*1G<6OARfM"
-Bk2=!F!+\C",I5=!f-l5!Jgi6"c*><!Jgc4",I&8#D`D:!Jgi6!Jh&<!Jgc4!f.);"Gd)7!Jgf
-5"c*A=!Jgc4!f-r7#`&M;!Jgc4"c*D>!Jgc4!Jgi6$&AV<!F:jE04S[,@r$..D281T1Pc$e!Jh
-hE056S5Ou"b$BOt[hF*2=B@q]F`CNFW8+EqO1FD,_<Bp),!BOt[hG@bK$BQS;<Bp),PCm"g^1O
-YEW04S[,@r$..D'3>%ARfLsF_uq1P%p.9@q]F`CNFW8L^9/9HS8lBARfLsF_r72BOt[hF*2>U!
-KmJH1OYEc@q]F`CNFW8Le*\$HS8lBARfLsF_r72BOt[hF*2>U!KmJH1OYEc04S[,@r#n&+Cf(r
-@r$:&A9;L++Cf(r@r$..D28L];MYL>Ckr7X9Th1b@q]F`CN=N;ATf2+BOt[hGA1T0BQG;+BOt[
-hF*2>U$'K%Z"d3\X"d2QB1G<6OARfLrFGL*`$'I*#!/LZ3"FDe9P!5$b@q]F`CN=M>Bcpo!ARf
-LrFE1r9L]hFTWKKo;G^Y`GAoD^,@<@M4Df'B+P!*DqEc#6,NX9fJF`(\tFCf!G4d'i406:TD+B
-sX&A2/:TI?I03BOt[hCik#PP"B1>GC+b$8RsZ%H[V&K@q]F`CN=NDI?I041O"1oP"CH1L]LeE1
-H[cQEb0,A061WACh[cu@<+#B@WNZ5@WO23BQG;#+EM"5P%'4JOo^@?P#?X?ASGdjFFB=)>q]Yr
-F!+[0F(03R@Yb&J!Jgf?;L=3"I?K4g06DG\+EVjM06CcMFEh51BkM=D#%M4^FCfJGDfBe@DfBf
-4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#QjV06D,O+BsX&L]M$@GC+b$8RlFF@r#n&H[V
-&KA28@UI?I0X!Jgc4!*taD04JjA+BsX&L]M$CGC+b$8RlFF@r$+,H[V&KA2AFVI?I0X!Jgc4!*
-taDL]E54L_tIlBp(ZC1N[PS+DI!3H\_ZMP(RjpE$/kN!KmJH97)HqI?K52P":BaOpR9Z06D,OP
-!5$bL]E54L_tIlBp(ZC1Lb9E+DI!3H\_]NP(R4^F<G:R!KmJH97)HpI?K52P":BaOpR9Z04JjA
-P!5$bAoD^,@<@M7F*(i#CLq%>4aSi'AT/brLba=5!.C#_?'7"""Gd)7/UK-bP!5$bFDl+@Bp)+
-uDfd+9P"Us$HZNb;+DHW4FDl+@Bp),PWKMLSHZNb;+DHW4F(K;5BnueQWKKo;WKMLSP#Zpn82"
-prG]P!3L]r-IDfCj@P')29K6(UCOogehL^/99Dfh-DP')29K3aWr05tWMGp%'?G]T$WLbb,kOu
- %NL<+^&hD..OH$ZgDu@r#XdDf'B+P!+.FF(K;F+Bot1DfC&Z!KoX0WI9q$?'7!bAT0A[!*b6Z
-L]E52L]C_DH#mP90o.GdL]E52L]E52?'9Jh&r6RE*d]PSP!5$bFDl+@Bp),F!0TKlFDl+@Bnue
-QWKKo1!KoTmL]MpNF(K;F+DHW4P,XU;L]ET$H\_]NH\_ZMP#Zpn<IK4M!.C#1F(K;FP!3TC5*C
-/=P"76IAT0CI>DN98!/LW2!/MA:L]E53I?K5=!/LW2!/LV\Ou"b4AT0FJ>9IBnFF/fEP!5&.I?
-I0-Ou%/jE&3:M>DN98!/LW2!*tb5F(K;HLb;nf!/LW2!/LV\P'MisL]N;RHS9)r5*@^2Dfd+9P
-"UT2P!+/$Dfd+9L]N[<P"UT3P!+/J!I]<9AT0FJBnueQWKKo1!0TKlL]MpNL]Djd<IL$1I=$bM
-I?ITOAT0Gg5&$0DP'DD<82"R2+BsX&L]N;4L]N;4L]N;4L]N;4L]E53L]N;4?'7!cEckrL!/LZ
-3%""-s@W-@O5)9l8!Kp*=5%ZU65*AR%4d#qrP"9q@AT0G]'3g7mL]E52L]E52L]E52L]E52L]E
-53L]E52?'9J]P#O)RBm=\A>DOGLFDl,]!g7\SP(RgeE&!LWP'(hWE&*RXP'(hWE&3XYP')R(HX
-^o8OogehI?K4gOu"b1Bm=nGE+sQ<P%'5&P#@H!I?IPl4>1_dDD*Y`ASu?nFE2)?05tWMF!,F9G
-]PNWBm=lY1,!T\G^1ENBm=nVBOtmjBQPA9Bm=oZ8<PkaGA1T0BS\F"8<PkaDfBe@DfBf4Df0V=
-5!C*"Df0Z-Eaa0TE%`kbASu?nFE2)?P#Qjm<K]@jOq*X204\L5@:EYcDf'B+OuSV806M%_@rEu
-AATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#
-drB75qB~>
-% uk.co.terryburton.bwipp/databaromni 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databaromni 0.0 2015050900 112081 118257
+%%BeginData: 418 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databaromni {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /height 33 72 div def
+ /linkage false def
+ /format (omni) def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ format (truncated) eq {/height 13 72 div def} if
+ /height height cvr def
+
+ % Validate the input
+ barcode 0 4 getinterval (\(01\)) ne {
+ /bwipp.databaromniBadAI (GS1 DataBar Omnidirectional must begin with (01) application identifier) //raiseerror exec
+ } if
+ barcode length 17 ne barcode length 18 ne and {
+ /bwipp.databaromniBadLength (GS1 DataBar Omnidirectional must be 13 or 14 digits) //raiseerror exec
+ } if
+ barcode 4 barcode length 4 sub getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.databaromniBadCharacter (GS1 DataBar Omnidirectional must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 12 {
+ /i exch def
+ /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 18 eq {
+ barcode 17 get checksum 48 add ne {
+ /bwipp.databaromniBadCheckDigit (Incorrect GS1 DataBar Omnidirectional check digit provided) //raiseerror exec
+ } if
+ } if
+ 18 string
+ dup 0 barcode putinterval
+ dup 17 checksum 48 add put
+ /barcode exch def
+
+ % Create the human readable text
+ /txt barcode length array def
+ 0 1 barcode length 1 sub {
+ /i exch def
+ txt i [barcode i 1 getinterval 0 0 () 0] put
+ } for
+
+ /ncr { % n r
+ 2 copy sub 2 copy lt {exch} if % n r maxd mind
+ 1 1 5 3 roll % mind j=1 v=1 n maxd
+ 1 add -1 exch { % mind j v n -1 maxd+1
+ mul % mind j v*i
+ 1 index 3 index le {
+ 1 index idiv exch 1 add exch
+ } if
+ } for
+ { % mind j v
+ 1 index 3 index gt {exit} if
+ 1 index idiv exch 1 add exch
+ } loop
+ exch pop exch pop
+ } bind def
+
+ /getRSSwidths {
+ /oe exch def
+ /el exch def
+ /mw exch def
+ /nm exch def
+ /val exch def
+ /out el array def
+ /mask 0 def
+ 0 1 el 2 sub {
+ /bar exch def
+ /ew 1 def
+ /mask mask 1 bar bitshift or def {
+ /sval nm ew sub 1 sub el bar sub 2 sub ncr def
+ oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and {
+ /sval sval nm ew sub el sub bar add el bar sub 2 sub ncr sub def
+ } if
+ el bar sub 2 gt {
+ /lval 0 def
+ nm ew sub el sub bar add 2 add -1 mw 1 add {
+ nm exch sub ew sub 1 sub el bar sub 3 sub ncr
+ /lval exch lval add def
+ } for
+ /sval sval lval el bar sub 1 sub mul sub def
+ } {
+ nm ew sub mw gt {/sval sval 1 sub def} if
+ } ifelse
+ /val val sval sub def
+ val 0 lt {exit} if
+ /ew ew 1 add def
+ /mask mask 1 bar bitshift not and def
+ } loop
+ /val val sval add def
+ /nm nm ew sub def
+ out bar ew put
+ } for
+ out el 1 sub nm put
+ out
+ } bind def
+
+ /binval [
+ linkage {1} {0} ifelse
+ barcode 4 13 getinterval {48 sub} forall
+ ] def
+
+ 0 1 12 {
+ /i exch def
+ binval i 1 add 2 copy get binval i get 4537077 mod 10 mul add put
+ binval i binval i get 4537077 idiv put
+ } for
+ /right binval 13 get 4537077 mod def
+ binval 13 2 copy get 4537077 idiv put
+
+ /left 0 def
+ /i true def
+ 0 1 13 {
+ /j exch def
+ binval j get
+ dup 0 eq i and {
+ pop
+ } {
+ /i false def
+ /left left 3 -1 roll 10 13 j sub exp cvi mul add def
+ } ifelse
+ } for
+
+ /d1 left 1597 idiv def
+ /d2 left 1597 mod def
+ /d3 right 1597 idiv def
+ /d4 right 1597 mod def
+
+ /tab164 [
+ 160 0 12 4 8 1 161 1
+ 960 161 10 6 6 3 80 10
+ 2014 961 8 8 4 5 31 34
+ 2714 2015 6 10 3 6 10 70
+ 2840 2715 4 12 1 8 1 126
+ ] def
+
+ /tab154 [
+ 335 0 5 10 2 7 4 84
+ 1035 336 7 8 4 5 20 35
+ 1515 1036 9 6 6 3 48 10
+ 1596 1516 11 4 8 1 81 1
+ ] def
+
+ /i 0 def {
+ d1 tab164 i get le {
+ tab164 i 1 add 7 getinterval {} forall
+ /d1te exch def /d1to exch def
+ /d1mwe exch def /d1mwo exch def
+ /d1ele exch def /d1elo exch def
+ /d1gs exch def
+ exit
+ } if
+ /i i 8 add def
+ } loop
+
+ /i 0 def {
+ d2 tab154 i get le {
+ tab154 i 1 add 7 getinterval {} forall
+ /d2te exch def /d2to exch def
+ /d2mwe exch def /d2mwo exch def
+ /d2ele exch def /d2elo exch def
+ /d2gs exch def
+ exit
+ } if
+ /i i 8 add def
+ } loop
+
+ /i 0 def {
+ d3 tab164 i get le {
+ tab164 i 1 add 7 getinterval {} forall
+ /d3te exch def /d3to exch def
+ /d3mwe exch def /d3mwo exch def
+ /d3ele exch def /d3elo exch def
+ /d3gs exch def
+ exit
+ } if
+ /i i 8 add def
+ } loop
+
+ /i 0 def {
+ d4 tab154 i get le {
+ tab154 i 1 add 7 getinterval {} forall
+ /d4te exch def /d4to exch def
+ /d4mwe exch def /d4mwo exch def
+ /d4ele exch def /d4elo exch def
+ /d4gs exch def
+ exit
+ } if
+ /i i 8 add def
+ } loop
+
+ /d1wo d1 d1gs sub d1te idiv d1elo d1mwo 4 false getRSSwidths def
+ /d1we d1 d1gs sub d1te mod d1ele d1mwe 4 true getRSSwidths def
+ /d2wo d2 d2gs sub d2to mod d2elo d2mwo 4 true getRSSwidths def
+ /d2we d2 d2gs sub d2to idiv d2ele d2mwe 4 false getRSSwidths def
+ /d3wo d3 d3gs sub d3te idiv d3elo d3mwo 4 false getRSSwidths def
+ /d3we d3 d3gs sub d3te mod d3ele d3mwe 4 true getRSSwidths def
+ /d4wo d4 d4gs sub d4to mod d4elo d4mwo 4 true getRSSwidths def
+ /d4we d4 d4gs sub d4to idiv d4ele d4mwe 4 false getRSSwidths def
+
+ /d1w 8 array def
+ 0 1 3 {
+ /i exch def
+ d1w i 2 mul d1wo i get put
+ d1w i 2 mul 1 add d1we i get put
+ } for
+
+ /d2w 8 array def
+ 0 1 3 {
+ /i exch def
+ d2w 7 i 2 mul sub d2wo i get put
+ d2w 6 i 2 mul sub d2we i get put
+ } for
+
+ /d3w 8 array def
+ 0 1 3 {
+ /i exch def
+ d3w 7 i 2 mul sub d3wo i get put
+ d3w 6 i 2 mul sub d3we i get put
+ } for
+
+ /d4w 8 array def
+ 0 1 3 {
+ /i exch def
+ d4w i 2 mul d4wo i get put
+ d4w i 2 mul 1 add d4we i get put
+ } for
+
+ /widths [
+ d1w {} forall
+ d2w {} forall
+ d3w {} forall
+ d4w {} forall
+ ] def
+
+ /checkweights [
+ 1 3 9 27 2 6 18 54
+ 58 72 24 8 29 36 12 4
+ 74 51 17 32 37 65 48 16
+ 64 34 23 69 49 68 46 59
+ ] def
+
+ /checkwidths [
+ 3 8 2 1 1 3 5 5 1 1 3 3 7 1 1
+ 3 1 9 1 1 2 7 4 1 1 2 5 6 1 1
+ 2 3 8 1 1 1 5 7 1 1 1 3 9 1 1
+ ] def
+
+ /checksum 0 def
+ 0 1 31 {
+ /i exch def
+ /checksum checksum widths i get checkweights i get mul add def
+ } for
+ /checksum checksum 79 mod def
+ checksum 8 ge {/checksum checksum 1 add def} if
+ checksum 72 ge {/checksum checksum 1 add def} if
+ /checklt checkwidths checksum 9 idiv 5 mul 5 getinterval def
+ /checkrtrev checkwidths checksum 9 mod 5 mul 5 getinterval def
+ /checkrt 5 array def
+ 0 1 4 {
+ /i exch def
+ checkrt i checkrtrev 4 i sub get put
+ } for
+
+ % Stacked format
+ format (omni) eq format (truncated) eq or { % linear
+
+ /sbs [
+ 1 d1w {} forall checklt {} forall d2w {} forall
+ d4w {} forall checkrt {} forall d3w {} forall 1 1
+ ] def
+
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ /txt txt
+ /textxalign (center)
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ } { % 2D - stacked or stackedomni
+
+ /top [ 1 1 d1w {} forall checklt {} forall d2w {} forall 1 1 0 ] def
+ /bot [ 1 1 d4w {} forall checkrt {} forall d3w {} forall 1 1 0 ] def
+ 0 2 24 {
+ /i exch def
+ top i get {0} repeat
+ top i 1 add get {1} repeat
+ } for
+ 50 array astore /top exch def
+ 0 2 24 {
+ /i exch def
+ bot i get {1} repeat
+ bot i 1 add get {0} repeat
+ } for
+ 50 array astore /bot exch def
+
+ % Stacked
+ format (stacked) eq {
+ /sep [ 50 {0} repeat ] def
+ 4 1 45 {
+ /i exch def
+ top i get bot i get eq {
+ sep i 1 top i get sub put
+ } {
+ sep i 1 sep i 1 sub get sub put
+ } ifelse
+ } for
+ /pixs [
+ 5 {top aload pop} repeat
+ sep aload pop
+ 7 {bot aload pop} repeat
+ ] def
+ /pixy pixs length 50 idiv def
+ } if
+
+ % Stacked omnidirectional
+ format (stackedomni) eq {
+ /sep1 [ top {1 exch sub} forall ] def
+ sep1 0 [ 0 0 0 0 ] putinterval
+ sep1 46 [ 0 0 0 0 ] putinterval
+ 18 1 30 {
+ /i exch def
+ top i get 0 eq {
+ top i 1 sub get 1 eq {
+ 1
+ } {
+ sep1 i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep1 exch i exch put
+ } for
+ /sep2 [ 0 0 0 0 21 { 0 1 } repeat 0 0 0 0 ] def
+ /sep3 [ bot {1 exch sub} forall ] def
+ sep3 0 [ 0 0 0 0 ] putinterval
+ sep3 46 [ 0 0 0 0 ] putinterval
+ 19 1 31 {
+ /i exch def
+ bot i get 0 eq {
+ bot i 1 sub get 1 eq {
+ 1
+ } {
+ sep3 i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep3 exch i exch put
+ } for
+ /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def
+ true 0 1 12 {dup bot exch 19 add get exch f3 exch get eq and} for {
+ % Right shifted module for value 3 finder
+ sep3 19 [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
+ } if
+ /pixs [
+ 33 {top aload pop} repeat
+ sep1 aload pop
+ sep2 aload pop
+ sep3 aload pop
+ 33 {bot aload pop} repeat
+ ] def
+ /pixy pixs length 50 idiv def
+ } if
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx 50
+ /pixy pixy
+ /height pixy 72 div
+ /width 50 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ } ifelse
+
+ end
+
+} bind def
+/databaromni dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databaromni--
@@ -1670,37 +4985,81 @@ drB75qB~>
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarstacked 0.0 0 0 0
-%%BeginData: 29 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04\L5@ :E YcDf'B +Ou
-P+;CG'+8/p(ZFEd ;,:Ec c5; /n0 $ =E, ^uo P'E -!04\L 5@ :EYcF* (i#
-CLq%'L_Q"0Ops'_ E-,f4 DKC t)O u" b# @<, jrA 7^ofOu "b %Df0Z- Eaa
-/7AmoLsAWeifE-, f4DK CuE 06 ;5 UBl 7R* H#R >X4a
-VtcOu8C3DfBf4Df 0WCP , i2 'C ia0 N4a W>WI ?IQm3
-0Ia6V33Qn!BlU*F E2M8P! +/T / Wr; \F cnqO 1OX V5/Tc#UAWe itP#ZpnAWe*
-t3A5;iFD5Z2F-8_ M1OYEc DfB f 4Df0 WCOu %NL 8Rc+K@rGmh L]E56P"^l=-
-nmA)P&5P!@WuO*E %Y[0FC AWe EcZ> 2@r# Xd6 =FCj8WH#*; _]C_@<>pE@<
-*JhFCAZpARlp#F` VXI@V '1dD BO.;F D)dF 0JP "!@;p1%Bk( RnBl@l3Bk1d
-mFD5?$ATBFWEa`[ 'AS#n &DfV" *I?IQ =@< ,jrA7^p5L_ 5ee@UX:eDe*
-FB@YbY[D3>$K04K ->E,[F? @<>pe@ <-F2@ :O( aA3s^89P&* SFD-[b7oM,b
-6t(1G6=FmW;flGXCLq$!D09oA+C\n)0f'qjEZd(n+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\o@UX:
-eDe*F8"Cbe[@rGmhP%'4MP,XU<H]g@E0Tp%25);4^:m,jG04K->E,[F?@<>pe@<-F2@:O(aA3s
-^86YKnK@:OCjEfM\@;_]C_@<>pE@<*JhFCAZpARlp#F`VXI@rH7,@;0U%Df0B:+Co2!BlnDL06
-1K8F(Jp'Ec5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfLsF_r72BOt[hF
-*2=B@UX:eDe*E%BnunT!Kp*30TrDLL]W`SL]ET$H\_ceCjhIGOo^_%I?I,S@q]F`CNFW8L^IX*
-ARfLsF_upAP%p/ZL^K;[Ou$QUEas#uAWgMY&s>D)@UX:eDe*F8&X#dsBOt[hF*2>U0TlI"D0mp
-FGA2#8/nAC4@:EYcF*(i#CLq$C@:V`=ARfLDBkM.%N\X1D@rHC.ARfg)7oM,b6t(1G6=FmW;fl
-GXCLq$!@q]F`CER/%B5)H1E,ol?Bk1dc0/%?SBldisEcQ)=P!=AX<.0p/L_>lIOuS6t@UX:eDe
-*FBH'1.C&S#Kc@r$..D29m/!Kq[\@UX:eDe*FB5*@^?E-,f4DKCgDA8c@-A9)+&FE2M8P'CnaF
-D5Z2F,gH:DfT]'FH-TIFCAZpARpsK04Am6F!+q#Eas#uAKYo1FD5Z2F"]1W@<>pe@<-:'DJ>7u
-Ou$NeB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WAD..O,Bm>e?Ou[rR%[&V$A79R
-g@UX:uFCAZpARpr`P%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5
-GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/databarstacked 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarstacked 0.0 2015050900 67872 71029
+%%BeginData: 73 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /databaromni dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarstacked {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Validate the input
+ barcode 0 4 getinterval (\(01\)) ne {
+ /bwipp.databarstackedBadAI (GS1 DataBar Stacked must begin with (01) application identifier) //raiseerror exec
+ } if
+ barcode length 17 ne barcode length 18 ne and {
+ /bwipp.databarstackedBadLength (GS1 DataBar Stacked must be 13 or 14 digits) //raiseerror exec
+ } if
+ barcode 4 barcode length 4 sub getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.databarstackedBadCharacter (GS1 DataBar Stacked must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 12 {
+ /i exch def
+ /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 18 eq {
+ barcode 17 get checksum 48 add ne {
+ /bwipp.databarstackedBadCheckDigit (Incorrect GS1 DataBar Stacked check digit provided) //raiseerror exec
+ } if
+ } if
+ 18 string
+ dup 0 barcode putinterval
+ dup 17 checksum 48 add put
+ /barcode exch def
+
+ % Get the result of encoding with databaromni with format=stacked
+ options (dontdraw) true put
+ options (format) (stacked) put
+
+ /args barcode options //databaromni exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/databarstacked dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarstacked--
@@ -1711,39 +5070,81 @@ GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarstackedomni 0.0 0 0 0
-%%BeginData: 31 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04\L5@ :E YcDf'B +Ou
-P+;CG'+8/p(ZFEd ;,:Ec c5; /n0 $ =E, ^uo P'E -!04\L 5@ :EYcF* (i#
-CLq$pD/O'7L_Q"0 Ops'_ E-, f4D KC t) Ou" b#@ <,jrA7 ^o fOu"b% Df0
-Z-Eaa/7AmoLsAWe ifE- ,f4 DK Cu E06 ;5U Bl7 R*H#
-R>X4aVtcOu8C3Df Bf4D f 0W CP ,i2 'Ci a0N4 aW>WI
-?IQm30Ia6V33Qn! BlU*FE 2M8 P !+/ T/ Wr;\ Fcn qO1OXV5/Tc #UAWeitP#Zp
-nAWe*t3A5;iFD5Z 2F-8_M 1OY E cDfB f4Df 0WC Ou%NL8Rc+K @rGmhL]E56P
-"^l=-nmA)P&5P!@ WuO*E% Y[0 FCAW eEcZ >2@ r#XdDf'B+6 =FCj8WHS:;_
-]C_@<>pE@<*JhFC AZpAR loZD /O&uB l[cp FD5 Z2@;I''F`V XI@V'1dDBO.
-;FD)dF0JP"!@;p1 %Bk(R nBl@l 3Bk1d mFD 5?$ATBFWEa `['AS#n&DfV
-"*I?IQ=@<,jrA7^ p5L_5ee @UX:eD e*FB@ YbY [D3>$K04K- >E,[F?@<>pe
-@<-F2@:O(aA8c=&BgQ6=9P&*SFD-[r7oM,b6t(1G6=FmW;flGXCLq$!:Mju`A8-'q@ruF'DII?
-(D09oA+C\n)0f'qjEZd(n+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\o@UX:eDe*F8"Cbe[@rGmhP%'
-4MP,XU<H]g@E0Tp%25);4^:m,jG04K->E,[F?@<>pe@<-F2@:O(aA8c=&BgQ6=6YKnK@:OCjEf
-N7P;_]C_@<>pE@<*JhFCAZpARloZD/O&uBl[cpFD5Z2@;I''F`VXI@rH7,@;0U%Df0B:+Co2!B
-lnDL061K8F(Jp'Ec5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfLsF_r72
-BOt[hF*2=B@UX:eDe*E%BnunT!Kp*30TrDLL]W`SL]ET$H\_ceCjhIGOo^_%I?I,S@q]F`CNFW
-8L^IX*ARfLsF_upAP%p/ZL^K;[Ou$QUEas#uAWgMY&s>D)@UX:eDe*F8&X#dsBOt[hF*2>U0Tl
-I"D0mpFGA2#8/nAC4@:EYcF*(i#CLq$pD/O&S@:V`=ARfLDBkM.%N^?<T@rHC.ARfg)7oM,b6t
-(1G6=FmW;flGXCLq$!:Mju`A8-'q@ruF'DII?(@q]F`CER/%B5)H1E,ol?Bk1dc0/%?SBldisE
-cQ)=P!=AX<.0p/L_>lIOuS6t@UX:eDe*FBH'1.C&S#Kc@r$..D29m/!Kq[\@UX:eDe*FB5*@^?
-E-,f4DKCgDA8c@-A9)+&FE2M8P'CnaFD5Z2F,gH:DfT]'FH-`MFCAZpARo^rDJ>8Y04Am6F!+q
-#Eas#uAKYo1FD5Z2F"]1W@<>pe@<-:'DJ>7uOu$NeB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]
-E#GEQnu061WAD..O,Bm>e?Ou[rR%[&V$A79Rg@UX:uFCAZpARo^rDJ>7nP%64gCG'+8/p(ZFEd
-;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P
-#M~>
-% uk.co.terryburton.bwipp/databarstackedomni 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarstackedomni 0.0 2015050900 67972 71109
+%%BeginData: 73 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /databaromni dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarstackedomni {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Validate the input
+ barcode 0 4 getinterval (\(01\)) ne {
+ /bwipp.databarstackedomniBadAI (GS1 DataBar Stacked Omnidirectional must begin with (01) application identifier) //raiseerror exec
+ } if
+ barcode length 17 ne barcode length 18 ne and {
+ /bwipp.databarstackedomniBadLength (GS1 DataBar Stacked Omnidirectional must be 13 or 14 digits) //raiseerror exec
+ } if
+ barcode 4 barcode length 4 sub getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.databarstackedomniBadCharacter (GS1 DataBar Stacked Omnidirectional must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 12 {
+ /i exch def
+ /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 18 eq {
+ barcode 17 get checksum 48 add ne {
+ /bwipp.databarstackedomniBadCheckDigit (Incorrect GS1 DataBar Stacked Omnidirectional check digit provided) //raiseerror exec
+ } if
+ } if
+ 18 string
+ dup 0 barcode putinterval
+ dup 17 checksum 48 add put
+ /barcode exch def
+
+ % Get the result of encoding with databaromni with format=stackedomni
+ options (dontdraw) true put
+ options (format) (stackedomni) put
+
+ /args barcode options //databaromni exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/databarstackedomni dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarstackedomni--
@@ -1754,37 +5155,81 @@ E#GEQnu061WAD..O,Bm>e?Ou[rR%[&V$A79Rg@UX:uFCAZpARo^rDJ>7nP%64gCG'+8/p(ZFEd
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databartruncated 0.0 0 0 0
-%%BeginData: 29 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04\L5@ :E YcDf'B +Ou
-P+;CG'+8/p(ZFEd ;,:Ec c5; /n0 $ =E, ^uo P'E -!04\L 5@ :EYcFE 2MA
-@psIjA:'+HOu8C3 05kfO Bl@ m1P !5 $b 04J @1@ rGmhP! 5$ b04]!= FC]
-E#G9CL+Cia0N1N. 5SBl @m1 P- 6N [FE 2)5 B68 E<AW
-f3'L]NYrOpu>KFD 5Z2F * j( NA moL sAW f3'P !FGY<
-0B5(@ZmRN0oc8tP )XR(F_ -_! H ]ft D5 *C&O 5*@ ^MH]ft&Eck rV1OYEdI?J0
-)*g/N:DfBf4Df0W Z5*@^M P#Q @ =FD5 Z2F* j'+ I?I02@<,jr A7^PsL]il7N
-W^aa0e&9&HS8iPB lJ#DA7 9Rg @UX; !Ecl 80@ <?'k6=FCj8 WH),;_]C_@<
->pE@<*JiEcl80@< ?'k+D l7BF <G%(B 5)6+ GA2 /4+=Jou.3N &<E,95u@<?4
- %DBNY(ASuU(Anb gs0/% ?SBld isEcQ )=P !=AX<+99V@ rGmhP%'4ZP&
-4Z:Eas#uAWgMY&s @*p"FDe 2GA2#8 /nAC4 @:E YcFE2MA@ps IjA3s^89P&*
-SFD-[d7oM,b6t(1G6=FmW<-!,!@psIjA0>`3F*&O6AKW]`+E)9C0f1"`BkM.%F"]1e@;0doATD
-g0EfrY8P#Pn!Eas#uAV^Iu@<,jrA7^p5L]im?P"^4c3/B8OAs,?63Kd4%EdKHKGA2#8/nAC4@:
-EYcFE2MA@psIjA3s^86YKnK@:OCjEfMbB;_]C_@<>pE@<*JiEcl80@<?'k+Dl7BF<G(3DKK<$D
-BNk8Cj@.6BkM.%F"]1e@;0doATDg0EfrY8P#Qjm8M=ReARfLsF_up7Ou%moL]N;?HS9)r5*@]T
-@q]F`CNFW8+Cf(r@r$..D'3:rEas#uAKY]C"HieK98G9bWG..iP%odQP!+/J"-RJKP#RSFOu%N
-L82"IdARfLsF_upA@q]F`CNFW8L^K;[P,X6EP%p.9@UX:eDe*FB@YbY[4aUXHEas#uAV^q]94M
-XH@r$..D29m/!Kq;H04K->E,[F?@<>pe@<-I1F`(\tFCeuL@:V`=ARfLDBkM.%N\j=F@rHC.AR
-fg)7oM,b6t(1G6=FmW<-!,!@psIjA0>AqARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS#n&DfV"*I
-?IQXP#R5MP,4=$L]CmmEas#uAWh>%3/A/VBOt[hF*2>U0TlI"GV<N7Eas#uAWf6?1N.5SBl@m1
-NX006DKKE0@<Zg6F_-_\DfBf4Df0WV#%hdoD..OH$$:31DI[*sARpsK04Am6F!+q#Eas#uAKYo
-1FD5Z2F"]1W@<>pe@<-:'DJ>7uOu$NeB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061
-WACh[cu@<.N1Ou[rR%[&V$A79Rg@UX;!Ecl80@<?'kOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA
-2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/databartruncated 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databartruncated 0.0 2015050900 67898 71045
+%%BeginData: 73 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /databaromni dup /uk.co.terryburton.bwipp findresource put
+begin
+/databartruncated {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Validate the input
+ barcode 0 4 getinterval (\(01\)) ne {
+ /bwipp.databartruncatedBadAI (GS1 DataBar Truncated must begin with (01) application identifier) //raiseerror exec
+ } if
+ barcode length 17 ne barcode length 18 ne and {
+ /bwipp.databartruncatedBadLength (GS1 DataBar Truncated must be 13 or 14 digits) //raiseerror exec
+ } if
+ barcode 4 barcode length 4 sub getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.databartruncatedBadCharacter (GS1 DataBar Truncated must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 12 {
+ /i exch def
+ /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 18 eq {
+ barcode 17 get checksum 48 add ne {
+ /bwipp.databartruncatedBadCheckDigit (Incorrect GS1 DataBar Truncated check digit provided) //raiseerror exec
+ } if
+ } if
+ 18 string
+ dup 0 barcode putinterval
+ dup 17 checksum 48 add put
+ /barcode exch def
+
+ % Get the result of encoding with databaromni with format=truncated
+ options (dontdraw) true put
+ options (format) (truncated) put
+
+ /args barcode options //databaromni exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/databartruncated dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databartruncated--
@@ -1795,82 +5240,284 @@ WACh[cu@<.N1Ou[rR%[&V$A79Rg@UX;!Ecl80@<?'kOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA
% --EXAM: (01)15012345678907
% --EXOP:
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp databarlimited 0.0 0 0 0
-%%BeginData: 74 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04\L5@ :E YcCh[a #FC
-f!0L_Q"0Ops'_E- ,f4DK Ct) Ou" b #@< ,jr A7^ ofOu"b %D f0Z-Ea a/7
-AmoLsAWei&BOtmj BQT%; Le* [eO u" b- Bl7 ]pB 4W2t@; L! rOu%#q FD5
-Z2F-<^[F*)G:DJ+ ':E+ P1q H\ _] c23 JDe E-, f4DK
-C/fX(GdVF(LLtH] gXBP # RT (P %'T NOt hst4 d(eHE
-ckrV4aW>DP!5%OP !5$bI= %,/ F E2M 8O u%NL <IL $AOrfcH05k fOBl@m1P!5$
-bI?IQJE-,f4DKC/ f1OYEX 05+ p 2B4u B0BO tmj BQTCjOu$QU Eas#uAV^>B"
-HlH="=PrY.?\Op0 4K->E, [F? @<>p e@<- 0uD /"*'A3s^85 tR)$7oM,b6t
-(1G6=FmW9PJ?XFC eu*D0 9oA+ C\npB l5&; Bln #2-nmA)+CT 5.Ch[BfFD5Z
-2+DG@tDKKT)Bk;< <061K 8F(Jp 'Ec5u ]5C J\o@UX:eDe *FB@YbVZD.6
-po@rGmhP%'4[P&6 ?bHS8iP BlJ#DA 79Rg@ UX: nBl.R+ARn, 9A5$QPB67gI
-.n<Mm+@KX[@7"CC+A?KdBlmos+Dl7BF<G%(+>GYpDfQsT1a$=CB5)I/0/%?SBldisEcQ)=P!=A
-X<+99V@rGmhL]il6OuS7OP%Kk@LbY&hP&bn&@WuO*E%Y[0FCAWeEboH,Blmos6=FD'FCB336tp
-:JFH.h@;_]C_@<>pE@<*JaBl.R+ARlp#F`VXI@V'1dDBO.;FD)dN+E)9C0eY2#@;0doATDg0Ef
-rY8P#Pn!Eas#uAV^M!@<,jrA7^p5L]rs@P"^4c3/B8OAs,?63Kd4%EdKHKGA2#8/nAC4@:EYcC
-h[a#FCeuL@:V`=@<,ddFCfKQ/4WVn+@KX[@7"CC+A?KdBlmos+Dl7BF<G(3DKK<$DBNk8Cj@.6
-BkM.%F"]1e@;0doATDg0EfrY8P#Qjm8M=ReARfLsF_up7Ou%moL]N;?HS9)r5*@]T@q]F`CNFW
-8+Cf(r@r$..D'3:rEas#uAKY]C"HieK98G9bWG..iP%odQP!+/J"-RJKP#RSFOu%NL82"IdARf
-LsF_upA@q]F`CNFW8L^K;[P,X6EP%p.9@UX:eDe*FB@YbY[4aUXHEas#uAV^q]94MXH@r$..D2
-9m/!Kq;H04K->E,[F?@<>pe@<-:'DJ;FGA4($A@r"JHB5)IJ1.c@nDfTl0@rrh`;_]C_@<>pE@
-<*JaBl.R+ARlonBOt[h+Co2!BlkJ:Ec6,8A7]:)061K8F(Jp'Ec5u]5CJ\oI?IQc&sB)S3/@QD
-@<,jrA7^pLOuS70@q]F`CNFW8LbOtmP'AWh@<,jrA7^ofOu"b#Bl8*&C`lq)@UX:eDe*F8"GdM
-M9RDRLP,Wkm8R7K8Ch[d&@:s.u05P??CNa-&+BsX'L]E53L]rS8L]`G8L]rS:L]N;3L^AkA?'7
-""!/LYbBl8*&Cm&7`!KsF/056S5Ou$Q]DK]H)+DDs-Bl8*&C`mGT95J<[CNa-&+DI!3Oo^_jI?
-I-LP#O)VG]Y';@<,jrA7^p5OpR:-L]E53@UX:eDe*FB@Yb&JWI$:4P!5$bFEhmMBcpV&@UX:eD
-e*E%BnueQ9S`\)!0.&8!*tb4I?I,SDI[^6L]W_WP,X6=Or9EpH]gR@P#R5<L]N;8L]`fqL]NY>
-M#WW%H]i3$!KpQ@"-QcL@=*e2P$!lFP!4[&Oo^_0I?IQXP"9qU!KpQ@"-QcL:j\?jI?IQc!KpQ
-J;Na5"!KmJH5(/T*P!5%OP!5%OI?G)'1G<BPFAc%9GA1T0BQJMRDe5(qOu"b&Cm$uF1G<ThP!5
-$b05bWi5*@]TG%#3M5*@]TDfp.EASdM9Ou"b.@<64?!0T-o!/LYeCkr.UWI$:-@<.MpOu"b&GD
-H9_1G<TRF))n8@<64?!FfJXOq3^rOu%G<F*:u.+Du$=ATs<:L]N[<AS`Ju@<.O1L]Wa=DI[^M1
-N-hID..L$L]ET$Op#Z>+D#b[WF]n%!g7A_WFB:VL]W`UOo^C<P"Ll?HS9G`@;I'-G%#20DJ^M-
-GESq:Cm(c,@<.M3AS`Ju@<.O1L]Wa=DI[^MWKK&cP#Q"/+C\c"P,X6=P#-KYCj'6'L]ESoDJ^M
--GESq:Cm(c,@<.M3L]W_?M#V=9L]NY>HZ!\`5*DmVGESq]!KsEnC`m1qEg!DX"-TX$@ra5=G%#
-3M5&>CNCm"g^1OYEW06;;FC`meB@;I'&G%#20AS`Ju@<.O1L]N[<P&-;\Ou%N5DJ^M-GESqBGE
-PdL06;;FC`meB@;L`#P,XU#I?IQXP#X/Y@;I'0@;I'-G%#3MWKK&\@;L`"P%K'(5^eep04f>MA
-Trq2Oo^_%05Y-=CERJ&F)-R4@UX;?&!Cmp"HkQhP%?:i@;I'0@;I'-G%#3M!Ko5lDJ^M6D'3D6
-P,XU#Dfp.E@UX:"ATs;^I?I->F`\a;Ckr+TWGZR9G]._HI?G)'1Pc$e!Jh,1056S5Ou$Q]DK]H
-)+DHW4Oo^@?Or9EU@VK_'@;I'#P"UH.*k?odC5<4[Cm"g^G[bB)G%#20Bcpl!DK]H)+DI!3KE*
-((K9B,qG^Y`G04Zg\@VK_'@;L`.P"UH.*k?odC6CA^Bl8*&CkrLU!g4Fa98!9d\V$&CP'AWj0o
-,gm1G<GbFE2M8Ou%moL]N;?HS9,s5*@^2Bl8*&C`mJU99M8j!0TKZOp$,pFa\TiBcq"rCia0N1
-G<8n+Cm3_",Qu?LPQ:n$u1s)AU&0W/<Xh4!Ko6eP#Zpn82#'n@PTi#+BsL!!m;C9!/M5C$&AeA
-",7\NL`D'J%"ho?!!:=\L^f.LL]rS;L')4G!n`/+%n0!A!"=KfL^AkLL]`G;L`D-e2M;&G^eBC
-]%n0$F%u:UL"c*;9$#bOubCfj:28k.J(;NY#$]#=L"Gd59!6^*'BS6@,G`%.S*]:om'8QmL#`&
-M96H4f^KE*((JqO+FG`.@_L_GRFL^8e;L-YN>Ou"b*L]ESoHXniRFCAW62E)amP"UsHHZW\*1,
-_'6BnueQ!JguD9RD2N8M=U/FCgV!Ou"b%0m%>s5*@]TA2.qFAWf6?1G<8nD0Ko]5*@]TA2.Y3A
-Wf6?1G<8nASc:J5*@]TA2._<P!5$bP!FGY<%hr.Bo!%X!Ko6eP%?:\L]ESoHXnlSFCAW62E)am
-P"UsHHZW\*1,_'6BnueQ!JguD9RD2N8M=U0FCgV!Ou"b%13@Gt5*@]TA28"GAWf6?1G<8oD0Ko
-]5*@]TA27_4AWf6?1G<8oASc:J5*@]TA27e=P!5$bP!FGY<%hr.Bo!%X!Ko6eP%?:W0m@OYA2,
-3;0kYQjWFR`*AWfr%0kG0>+Cm3DGAi9BAmoLsAKYVsFAc%9GA1T0BQK=m04Ze]AKYM<+Cm3>F-
-<M50m$uiC1K&1Ch4`"0l;,GL^/$BF_)\.ATUgK;g2qdFD,`Y1G<8oGAeU71*C*_B6068A287<P
-#>gGASc9-A28"GDhnX1@;L!r+D58-;H$M<Bk2=!F-8=4A28@?+Cm5MA27e=P,VtIFCgVMA27_4
-AKYM=D0KQI#BY!/AKYVsFAc%9GA1T0BQK=m04Ze]L^oRSOu%moL]N;9HS9)r5*@^40m=aSL]W`
-UA2/:H+DI!3P'CLlG9CUU!g7AU!KmIo0m@1OBp),PG^Y`G04Zh^L^oRSOu%moL]N;9HS9)r5*@
-^413XjTL]W`UA28@I+DI!3P'CLmG9CUU!g7AU!KmIo13[:PBp),PG^Y`G06_,@FD,_<>9IH2GC
-+b$8RsT#H[V&K?'6us@q]F`CNj?(B4uC.+BsX&L]`G>L`;.ILd?h/LbjiPL^o4jLa@imLdHn3L
-cgIpL^&YJLc1&\Lae-(L^f.fL`D4MLe:s91G<6OARfLsAT8hsL]E53Lb!h#P":B\LbsoJLd-[r
-LdHH:P":C#L]N<-H[V&JLf0%XL]N51JpVp/8;7+tL&d3h!JUT;H[V&JL&fYX!JUU-H[V&JL&g"
-`!Bc/=L&jPdI?I-U!CDMA6\YV2L&k.WOu"b$BOt[hF*2>U!0T-o!/LZ3)ga5PP!5$b04S[,@r$
-..D'3>%ARfLsF_r7FBk2=!F!,1[94MXH@r$:"BkM+$F!,1[99O+S!Ko6eP"769BOt[hF*2=B@q
-]F`CNFW8LfomUOu"b4AT8i&BOt[hF(K>6@q]F`CNFW8P"Uro06;>OA9;L++EM+6L_Z(NL^8e=L
-^%I"Cia/1B4Z0_;c@mSA9;L+Ou"b#GA1T0BQG;;AT<M@P%odYL]`G;AmoLsAKYVsFAc%9GA1T0
-BQK=m04S[,@r$:&A9;L++BsX%L]E52L]E52L]E52L]E52L]E52L]E53L]LeE1Pc$e!Jgo+056S
-5Ou$T]ARfM"Bk2=!F!,1Q!g7A@GA1T0BQG;1P"Us_@q]F`CNjK'FD,_<BnuhRCkr+T!Fg7eA9;
-L++DI!3P'DD<82#$nF!+\C!G!p/H[V&K@q]F`CNjK'FD,`BI?I0413\(nP"CH1L]LeE1H[cQEb
-0,A061WACh[cu@<+#B@WNZ5@WO23BQG;#+EM"5P%'4JOo^@?P#?X?ASGdjFFB=)>q]YrF!+[0F
-(03R@Yb&J!Jgf?;L=3"I?K4g06DG\+EVjM06CcMFEh51BkM=D#%M4^FCfJGDfBe@DfBf4Df0V=
-5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<9IFCAWeEboH,BlmosOuSV806M%_@rEu
-AATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#
-drB75qB~>
-% uk.co.terryburton.bwipp/databarlimited 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarlimited 0.0 2015050900 83260 86093
+%%BeginData: 276 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarlimited {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /height 10 72 div def
+ /linkage false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /height height cvr def
+
+ % Validate the input
+ barcode 0 4 getinterval (\(01\)) ne {
+ /bwipp.databarlimitedBadAI (GS1 DataBar Limited must begin with (01) application identifier) //raiseerror exec
+ } if
+ barcode length 17 ne barcode length 18 ne and {
+ /bwipp.databarlimitedBadLength (GS1 DataBar Limited must be 13 or 14 digits) //raiseerror exec
+ } if
+ barcode 4 get dup 48 lt exch 49 gt or {
+ /bwipp.databarlimitedBadStartDigit (GS1 DataBar Limited must begin with 0 or 1) //raiseerror exec
+ } if
+ barcode 5 barcode length 5 sub getinterval {
+ dup 48 lt exch 57 gt or {
+ /bwipp.databarlimitedBadCharacter (GS1 DataBar Limited must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Calculate checksum and add to end of barcode
+ /checksum 0 def
+ 0 1 12 {
+ /i exch def
+ /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ barcode length 18 eq {
+ barcode 17 get checksum 48 add ne {
+ /bwipp.databaromniBadCheckDigit (Incorrect GS1 DataBar Limited check digit provided) //raiseerror exec
+ } if
+ } if
+ 18 string
+ dup 0 barcode putinterval
+ dup 17 checksum 48 add put
+ /barcode exch def
+
+ % Strip the AI and optional check digit
+ /binval [
+ barcode 4 13 getinterval {48 sub} forall
+ ] def
+ linkage {
+ /linkval [ 2 0 1 5 1 3 3 5 3 1 0 9 6 ] def
+ 0 1 binval length 1 sub {
+ /i exch def
+ binval i binval i get linkval i get add put
+ } for
+ } if
+
+ % Create the human readable text
+ /txt barcode length array def
+ 0 1 barcode length 1 sub {
+ /i exch def
+ txt i [barcode i 1 getinterval 0 0 () 0] put
+ } for
+
+ /ncr { % n r
+ 2 copy sub 2 copy lt {exch} if % n r maxd mind
+ 1 1 5 3 roll % mind j=1 v=1 n maxd
+ 1 add -1 exch { % mind j v n -1 maxd+1
+ mul % mind j v*i
+ 1 index 3 index le {
+ 1 index idiv exch 1 add exch
+ } if
+ } for
+ { % mind j v
+ 1 index 3 index gt {exit} if
+ 1 index idiv exch 1 add exch
+ } loop
+ exch pop exch pop
+ } bind def
+
+ /getRSSwidths {
+ /oe exch def
+ /el exch def
+ /mw exch def
+ /nm exch def
+ /val exch def
+ /out el array def
+ /mask 0 def
+ 0 1 el 2 sub {
+ /bar exch def
+ /ew 1 def
+ /mask mask 1 bar bitshift or def {
+ /sval nm ew sub 1 sub el bar sub 2 sub ncr def
+ oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and {
+ /sval sval nm ew sub el sub bar add el bar sub 2 sub ncr sub def
+ } if
+ el bar sub 2 gt {
+ /lval 0 def
+ nm ew sub el sub bar add 2 add -1 mw 1 add {
+ nm exch sub ew sub 1 sub el bar sub 3 sub ncr
+ /lval exch lval add def
+ } for
+ /sval sval lval el bar sub 1 sub mul sub def
+ } {
+ nm ew sub mw gt {/sval sval 1 sub def} if
+ } ifelse
+ /val val sval sub def
+ val 0 lt {exit} if
+ /ew ew 1 add def
+ /mask mask 1 bar bitshift not and def
+ } loop
+ /val val sval add def
+ /nm nm ew sub def
+ out bar ew put
+ } for
+ out el 1 sub nm put
+ out
+ } bind def
+
+ 0 1 11 {
+ /i exch def
+ binval i 1 add 2 copy get binval i get 2013571 mod 10 mul add put
+ binval i binval i get 2013571 idiv put
+ } for
+ /d2 binval 12 get 2013571 mod def
+ binval 12 2 copy get 2013571 idiv put
+
+ /d1 0 def
+ /i true def
+ 0 1 12 {
+ /j exch def
+ binval j get
+ dup 0 eq i and {
+ pop
+ } {
+ /i false def
+ /d1 d1 3 -1 roll 10 12 j sub exp cvi mul add def
+ } ifelse
+ } for
+
+ /tab267 [
+ 183063 0 17 9 6 3 6538 28
+ 820063 183064 13 13 5 4 875 728
+ 1000775 820064 9 17 3 6 28 6454
+ 1491020 1000776 15 11 5 4 2415 203
+ 1979844 1491021 11 15 4 5 203 2408
+ 1996938 1979845 19 7 8 1 17094 1
+ 2013570 1996939 7 19 1 8 1 16632
+ ] def
+
+ /i 0 def {
+ d1 tab267 i get le {
+ tab267 i 1 add 7 getinterval {} forall
+ /d1te exch def /d1to exch def
+ /d1mwe exch def /d1mwo exch def
+ /d1ele exch def /d1elo exch def
+ /d1gs exch def
+ exit
+ } if
+ /i i 8 add def
+ } loop
+
+ /i 0 def {
+ d2 tab267 i get le {
+ tab267 i 1 add 7 getinterval {} forall
+ /d2te exch def /d2to exch def
+ /d2mwe exch def /d2mwo exch def
+ /d2ele exch def /d2elo exch def
+ /d2gs exch def
+ exit
+ } if
+ /i i 8 add def
+ } loop
+
+ /d1wo d1 d1gs sub d1te idiv d1elo d1mwo 7 false getRSSwidths def
+ /d1we d1 d1gs sub d1te mod d1ele d1mwe 7 true getRSSwidths def
+ /d2wo d2 d2gs sub d2te idiv d2elo d2mwo 7 false getRSSwidths def
+ /d2we d2 d2gs sub d2te mod d2ele d2mwe 7 true getRSSwidths def
+
+ /d1w 14 array def
+ 0 1 6 {
+ /i exch def
+ d1w i 2 mul d1wo i get put
+ d1w i 2 mul 1 add d1we i get put
+ } for
+
+ /d2w 14 array def
+ 0 1 6 {
+ /i exch def
+ d2w i 2 mul d2wo i get put
+ d2w i 2 mul 1 add d2we i get put
+ } for
+
+ /widths [
+ d1w {} forall
+ d2w {} forall
+ ] def
+
+ /checkweights [
+ 1 3 9 27 81 65 17 51 64 14 42 37 22 66
+ 20 60 2 6 18 54 73 41 34 13 39 28 84 74
+ ] def
+
+ /checkseq [
+ 0 1 43 {} for
+ 45 52 57
+ 63 1 66 {} for
+ 73 1 79 {} for
+ 82
+ 126 1 130 {} for
+ 132
+ 141 1 146 {} for
+ 210 1 217 {} for
+ 220
+ 316 1 320 {} for
+ 322 323
+ 326 337
+ ] def
+
+ /checksum 0 def
+ 0 1 27 {
+ /i exch def
+ /checksum checksum widths i get checkweights i get mul add def
+ } for
+ /checksum checksum 89 mod def
+ /seq checkseq checksum get def
+ /swidths seq 21 idiv 8 3 6 false getRSSwidths def
+ /bwidths seq 21 mod 8 3 6 false getRSSwidths def
+
+ /checkwidths [0 0 0 0 0 0 0 0 0 0 0 0 1 1] def
+ 0 1 5 {
+ /i exch def
+ checkwidths i 2 mul swidths i get put
+ checkwidths i 2 mul 1 add bwidths i get put
+ } for
+
+ /sbs [
+ 1 d1w {} forall checkwidths {} forall d2w {} forall 1 1
+ ] def
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ /txt txt
+ /textxalign (center)
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/databarlimited dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarlimited--
@@ -1881,212 +5528,879 @@ drB75qB~>
% --EXAM: (01)95012345678903(3103)000123
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 0 0 0
-%%BeginData: 204 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 061WAD .. O,Bm>e #06
-M%_@rEuAATDg:@W c^5Df .1: GA2 # 8P1 l(D Ops 'T@<>p e@ <,q(E+ *Wp
-ARp.D'Tt>:%52X= FD5Z2 F-8 _M1 G< 3G Eas #uA Wf6?1G <9 WDKKE0 @<W
-i+@;L!rOu"b)ASG djFG M,s 8< Pl o1G <?Y Ec# 6,NX
-03@E+*WpARpr[06 :];D . RU ,F ,9j Z1G <QYD JNZnA
-KYSnCia0N1N.5SB l@m1P- 6N[ F E2) 5B 68E< AWf 3'L]NYrOpu >KFD5Z2F*j(
-NAmoLsAWf3'P!FG Y<0B5( @Zm R N0oc 8tP) XR( F_-_!H]ftD 5*C&O5*@^MH
-]ft&EckrV1OYEdI ?J0)*g /N: DfBf 4Df0 WZ5 *@^MP#Q@=F D5Z2F*j'+I?
-I/TBOtmjBQPA1AS GdjFH S;?1 G<f\B 5M3t FE8 RGAS5jkDKK r_/<Vf1AS5j
-kDKKrUs,oNl06:] ;D.RU ,F!,( 5Ec#6 ,NX o]GE+*WpAR ok(@:O(aA<K
-*&L]i-QL_bE%<K] .dP#O)G G]7)/A :#tDD N[2 H1G<ZhF<G: 8P%'TNOu"b+
-L]ESoBl89X!FCqKH]g@,F``d1C6CcDH'2WOOo^@>Oo[4NP!5$bP')pIL]E55P"_#iDfp/b5&,l
-SP,XU.P'E-LP%'4LP,X6>P!5%&I=%,:Dfp/b5&-6EP'N4"C6ATNC6CcD1N.DXL]D1Q9ThYhP#Z
-pnAUT^OOu"b"BlbD$+C1-d04AR<@;L`$Ou8CY@UX:eDe*FB30Ia,!KsF<!KoX09RDp^NW>5*H]
-gXBP#RGB.?][RFcnqOFcnqK!@X+jH]gRUFcnqE",Hu@LOFN0!/L`5!Kr4dP#Y^/@;0eG!g7\h)
-i+QY!KpPj04AR9P!5$b@;0mnCkr1L!Kr4LG]7)/A<M1cP%Bf!HXUW0P%'4KP!+/#Blf(1P"Uf:
-0JS_R@;0e=!Kp*9">_bd1Qjna"FFQkG%#3I!\c?l98ES(!Kp-:!BH<+@;0mnClSWS0ebDH99Li
-\J,b[?Op$,l">DPa0P4a0F(LM"I?IQXP#Qjm<+0K^P%'4KP!+/#Blf(1P"Uf:0JS_R@;0e=!Kp
-*9">_ee16Oe`"FFQkG%#3I!\c?l98ES(!Kp-:!BH<+@;0mnClSWS1,(JH99Li\-P)AKOp$,l">
-DPa0kOj1F(LM"I?IQXP#Qjm<+0K^P%'4KP!+/#Blf(1P"Uf:0JS_R@;0e=!Kp*9">_ee1Qjna"
-FFQkG%#3I!\c?l98ES(!Kp-:!BH<+@;0mnClSWS1,(MI99Li\=RVD]Op$,l">DPa0kOj1F(LM"
-I?IQXP#Qjm<+0K^P%'S6L]W`&P!4[(P!+tKHS8fA1GLS.+D,%uF(L(7*/FWM$mg7V$A\hJV33N
-@Blf(2P"Us$P&bu68<Pb^@;.MQ0R+^P@;L!rL(&Tg!JV#>H\`#b"HoUE0O\[:L]NZ3P!+tKI?I
--a1LY!=P%'4LP!+.F@;01ZA0>u7F_)\"NWLpiNWLpkNWLpmNWLpo?$d]&Blf(3P"UsTOp$2r8W
-klXHS8fA@UWdiAmoLsAWeitP#Yq)F,0gZ99''-0p4\.BeqItGT^F/1GUY/P&c]g@;01ZA<Lnp"
-FFQkF-:!g"-Pfo@;0mnClSQN0p51c!/LZ=9TB-6P!*5fG%#20@;0e=!Kp*=99LiZ!!.hHP$sLV
-@;0mnC`m/#F,0m\99Mr2/;+!669gWAOp$,?BeqItGT^F/F,0m\99''.0p4\_"FH.60JP::0JG1
-m@;L!rP!FGY<+0Js1,*qq@;0e=!g63:!\lEm4d#qpNX%6m0ek@90kOj1F(LM"I?IQ<BeqItGT^
-F/F,0m\99''.1Qjna"FH.60JP::0JP7n@;L!rP!FGY<+0Js1,*qq@;0e=!g63:!\lKo4d#qpNX
- %6m0ek@:0kOj1F(LM"I?IQ<BeqItGT^F/F,0m\99''.23L+c"FH.60JP::0eb:n@;L!rP!FGY
-<+0Js1,*qq@;0e=!g63:!\lQq4d#qpNX%6m0ekC:0kOj1F(LM"I?IQ<BeqItGT^F/F,0m\99''
-.2j-=e"FH.60JP::0ek@o@;L!rP!FGY<+0Js1,*qq@;0e=!g63:!\lWs4d#qpNX%6m0ekC;0kO
-j1F(LM"I?IQXP#QjV@;0mnClSQN0p51c!/LZ=9TB-6P!*5fG%#20@;0e=!Kp*=99LiZ!!.hHP$
-sLVHXUVE0edj!NX%6m0ek@90P4a0F(LM"I?IQ<BeqLuG^GGU0JP::0JG4n@;L!rP!FGY<.0p/I
-?ITYP#Qjm<+0K^P%'4KP"L'S@;.MX13apR@;L!rL(@+:!JV+`H\`#b"HoUE0O\[:L]NZ3P!+tK
-I?I-a1LY!=L]ET2NWLmhP!*5f1H@48Op$,?Bm*p$NWLmhP"UT2L]NZ4NWD/'4aW1m0JP:90Q_>
-XAWf<,P#Qjm<.0p/@;0eG@Yb)K8p`4"Beqb*GT^U,Cia0B%pFbiL(@R:L^Jq@P,4<q@;0e=!Kp
-*=4d'i6P":`l@;0e=!0U!8!\c?l4^i%\3AYoC"FFQkG%#3I!\c?l98ES(!Kp-:!BH<+H]A7`0e
-k@:FE2M8P!FGY<.0p/I?IQ<Blf(1P"Uf:0JS_RH]A+]FE2M8P!FGY</q#60Q_>XAWf<,P%?:ZE
-+WNpCi=N\5*@]TD.Rg&De,"pOu"b$Df0_Q13@Fk0RJg.0JG170JG170JG170JG170JG170JG17
-0JG170JG170JG170JG17La\F_Or9&WOr9&UL^K;=P!4[%L]`f6Ot;CjL^K<AOt`%YP%'4SP!5&
-.P!5%SL]W_WL^JqFP"_$&L]`G8P"_#iL]WA>P,4<qOuSV6L^K;/P,XU.P'MibOr9&iL^K;=P!4
-[+L]`f6Ot;CjL^K<AOt`%YP%'4SP!5&.P!5%SL]W_WL`V?ZP"_$&L^Ak>P"_#iL]WA>P,4<qOu
-SV6L^K;/P,XU.P'N3SP')29%[&V$@rH7.0f*oi1c0Q>/2/b30JG170JG170JG170JG170JG170
-JG170JG170JG170JG170JG170Sh9CV32^P!g4FW!/Lc@9ThSq!/LZ=9Tgr_!f-uBV33Nq30Ia,
-"Hks3WKKH.H'1.C",Qu?LPPte%$F:oDf0_Q13@Fk0Sfjp5*C2>Oq*X206D,ABl89\V33g$@Yb&
-JWJCP;5)96&5'r(dP$!l2LbP!:I?I-a3/@Zms,r.n!f-o@=H[-VV33Nq30Ia,!g6ZK@Zip<WKK
-H.H$thcOu$rdFD,T'NWLmgP!+.F@q90o>9I471G<B[Aft;#?'7!lP#Q:0FD,T'NWCkt4aShlA7
-crmBm*p$NWLmhP"UT2L^fM@@rH7.0f*oi1c1@O04SO)+BosuA7g1E0TrD`P"ArB1G<B[Aft;#?
-'6us@;0d*@;0e=!F]\`P%'4JP,XU<Ou%NL<,H2gBQ%FA">DPa0TnSG04SO)Lc:KnOu$TYAr$Fq
-Bm*p$NWLmhP"UT3L^]G?@rH7.0f!ih1bb)<@q92--t-h5@;Lr,1GLR>P"UrhL_"TG@VK_CGqWZ
-<Aft;#@q91uLbP!kI?I0-Ou"b(E+U4s+C1-d04AR9+BosoOu%NL<,H2gBQ%FA">DPa0p4\H04S
-O)Lc:KnOu$TYAr$FqBm*p$NWLmhP"UT3L^]G?@rH7.0f!ih1bb)<@;0e=!Kp*9">_ee16OeI@;
-0mnClSWS1,(JH99Li^%s2`!Bl8?G+CSu-@;Lr,1GUX?P"UrhL*mOq!Jh8.DdmEuI?IT?A7gugL
-a\EMP'J]jA7crg+CeqoH\aA=WI9q$?'6usB5hH*>9I471G<0NF!+[0?'7!lP#Q:0FD,T'P%'4P
-P!+.F@q92-9Tl681Ljs-L]CjtG%#3I!\c?l98EV)%$F:oDf0_Q13@Fk0Tp^;#*PgG3/@QCBlf(
-2P"UT5L]NZ4P'N3M@;0mnC`m/#F,0j[99Mr(!JgoB9S`_45*C2S/;P!^DdmEu+CeqoP!4[MP!5
- %S@;0eG@Yb,L4aUUOG%#20@;0e=!g63>99M8j!/L]>9Tgr]!J$>LP!5$gL]WA6P"_#iL]N[<L
-`hjsP!4[)L]W`5Ot;asOo]uXKE)"<!.C#1L_+ZH@VK^&@q9275);=a5*C1E@q90o>9IEdAp]=f
-P,Wkm8R7K805#69+BosoOu"b"BlbD$+C1-dI?IQHATVU(A<$gI0ek@9P!+.F@q92-.[$Wk1Ljs
--L]CjtG%#3I!\c?l98EV)%$F:oDf0_Q13@Fk0Tp]kA7gWG@;0e=!Kp*3",Hu@9Tgr_!d&?iBl9
-)Z04SO)+BosuA7g1E0TrD`P"ArB1G<B[Aft;#@;0mnC`m/#F,0j[99MqpI?I0-Ou"b"BlbD*Bl
-f(3@;0eG@Yb)KWKKr<1OYEcD.Rg&De+k30JP:90p4\H04SO)Lbt9kOu$TYAr$FqBm*p$NWLmhP
-"UT3L^]G?@rH7.0f!ih1bb)<@q92--t-h2L]NZ3L]`G6P"_#iL]V[:@VK_CH"1AsLalhIG%#20
-@;0e=!Kp*=98ES("-Q?@/;OXTDdmEuP'J]jA7crg+CeqoH\aA=WI9q$?'6usB5hH*>9I?gG%#2
-0@;0e=!Kp*=99M8t@Yb,LWJCY>5*ATdI?I0-Ou"b"BlbD*Blf(3@;0eG@Yb)KWKKr<1OYEcB5h
-HkCi"$6HS9PYAr$MO$'I)mHS9PYAft;#?'7!lP#X/DBkD((ARpT5Ou8CY>DN98!Jgl*I?I-,H]
-A.]0SfdnV32^Z30H7W!Jgo8s,r.n0TlI"G[Y;uBm=3"L]`G6P)#3FI?I0+L^T">L_P2aP":BFL
-`_ERLa7=qP":BX?$hA7L]Wa9Ot`%Y@;0=fG\(EA",Hu@LQZn1P"@<=DIYDWs,o/kCi4B4ATDKp
-M#NPn05P'5E+iZtF_t]1Bk)ttOu"b-Ble2N1cC0fOu"b/F_t]1Bk&8J4GWun!JkrHOuSI'0JJ:
-aP,4<ZOuS7"M#WWnL^T"?P,4<qOuSV6L]W`'P,XU.P'N3ML]ET2Ld@1eH]g@E!/OsEG^Y`SOuS
-6uP"UTsP!+/T3/@Tk?BTP]P#RT.L^9.ENX%6l0JG170SfssV32^Z3/@Zms,r.n!f.)EV33Nq30
-Ia,#Eh96WKKH.H$tiHCgh.!BOPe$D.Ra%@u^[G0JG1E5*@]T@;Kmr@;^4)ATDKp+?VcB0Sfac3
-I?oKLb"XfL]qm=@VK_.P"92&@kiuI0JP::0o/,O!Jjp+OuS7@P,X6AFDkW&DLI[=LanDh0ekC:
-0eeD7L]N;bH]g@E&!?sL#'=cmBl8?^88N0dD.Ra%@u^XF0JI<WF)Nrn2N@qp0JP785!G,c055K
-G2Dd<74?SERL]N;lH]g@E/!?lf"a"ZlBl8?^87laL0ocDk0ekC;Ld?gtLg#.g3/@TuWJCe$Ddm
-EuI?I-W@>Fr?H@(f7L^0*BL^/$?@VK_.P":BPNX.?o0eb=90JJ;,NX.?o0eb=90JSA0L]N;bH]
-g@C!6(*%L^8*@@VK_.P":BiL]N;rH]g@C!5"BpL^8*@@VK_.P":C9NX.?o0ekC:0enJ,NX.?o0
-ekC;0JI<\F_t]1Bk*/*0JG1s@;Kmr@;^4)ATDKpNWh*j0eb:F5*@^X!/LYaBlfGHL]N[<HS9)r
-5*@]T@;-imBlbD2P"Uro06Uc?+CSu-@;I&pBp),P1M:Z=P%%j6P%'RTG%#3M@ZgbT$'I9(!,$7
-_P'N3MB5hIG@UWsn>EV0sI?I0-P'N3MB5hIG@UWu6@Zgb8@;I&jP!45@P"ArBGqWfLAs,?@1MI
-t?BlfGHL]N[<P&4WAAncL$A0>;pL]E54P"_$HP&QQeHY7;0P%'4JOo^^POuS6tB5hIGH'1."E+
-Y8BAo;*5P'AWmE+Y7sOu%NL<.0p#061W@@VKq*H]g@E%$EN3&<\T#%$GF_0Sfdn)3STYP!4;W<
-0DBe3/A!+;Na"\AS5jkDKKr_C5;nR4aVtcOo^@IP&-:FP')2"P')29<K]P/WI9p>Ou"b&DI[Tq
-AUBS"061KFP&5Q/5*AQeH]iN"P#Y_L5'r)>P,Wkm8R7K=P%'S<B5hHoDI\hnC6CcDGqWoq5&-5
-]Ou%NL%[&V$DKTf-EbT$(F`)7C>9IQtAs-VML]DjdK89M`s':dD04A[9BOPe$D.Ra%@rc^0F!+
-[0B5hIG@XEn2I?K5=!*taD05b?GFD5f72Dd=1DJXS@>9IQtAs-VML]DjdK8(`a?'7!VE+Y8BL]
-N[<M#W82HS9)r5*@^7E+U5,P"Uf:0JJ:aP,4<ZOuS6tB5hH*Bp),P3+d&<0p4\HP')ReI?IQmG
-\J:5E+Y8BL]N[<P%K'(3/@TJE+U5,L]NY>P"UrtAo;*5P!+/TFbj@PP#RThI?IQIF_t]1Bk*;i
-P$iWSF_t]1Bk)1+DK?q7+Du==ATDKpEcl8@+DHW5Oo^_=L]W_?P'DD%DKTf-EbT$(F`)7CBnub
-PG^Y`TOuQldE+iZtF_t]1Bk*;iP$iWFCiF&rDKTf-EbT$(F`)7CBcpi#E+iZtF_t]1Bk)1+DK?
-q7L]NY>P"UT3Oo^_jI=#C=E+iZtF_t]1Bk)1+DK?q7L]ET_I?ITn3,*GP2Dd=T5*B<:5%/8HBO
-Pe$D.Ra%A!0$=@$5Jl"FG#tG][Y@D`0F1Df0B:+DHW3P'DD%DIn'7Ble2N1cB8iCj@.;+Dtb8F
-D5f72Dd=1DJXS@BnueQ!Kp*3!KmJHG^Y`TI?I,SB5hHoDI\D$r/qAL1G<Hu!0T,kC5;kQ1G<T`
-A7^c+DKTf-EbT$H1OEgYB5hIG@Zim$P!FGY<-rJ#A7^c+DKTf-EbT$H4aUlcB5hIG@Yb)KWKL\
-:L]Wa9OuS6tB5hH*Bp),P3+d&<0p4\HP')ReI?IQmG`k%B!G?@`+DHW4Oo^_=OuR&k@kj-0H]i
-N-?@@u9P'E-LDKTf-EbT$H5*B<#DKTf-EbT#+ASu!rA7[E.+DHW5Oo^_%P!FGY<0DB?@;Kmr@;
-^4)ATDKp+Du==ATDKp+D#G#De*E4D/WrrNXT?4E+iZtF_t]1Bk*;^P!FGBB5hH*Bp),P3/B8OA
-s,?63Kd4%EdMV2CiF&rDKTf-EbT#+DKTf-EbT#+ASu!rA7[E2De*F>$t3skBOPe$D.Ra%A!/X2
-5^eep061W@L^](?Oo]E2FD,T'P%'RTG&1cR@Zgb%A7h!6Oo]<\!HMag@VKq*Ou%,iD28=X8oeK
-[L^'#NOp$,l"u%_b0JG2:#*PgG)2J95ASmT(OuR)nAftfN98G6aWJCV3"HoUE0TnDY@Yb/M5*D
-n.5*C1EEaa/7ASu!rA7[E.+DHW4Oo^_%P!FGBL]Wa9OuS6tB5hH*Bp),PG`k%B!Jk'FG]%Y@AT
-DKp+D#G#De*E4Bcq,G!KmJH1Qk"OP#Zpn<IL$0D/WrrNXT?4E+iZtF_t]1Bk*;hHY7;0+DI!3A
-o;*5P!+/(DIYCD@;Kmr@;^4)ATDKp+D#G#De*E4D/WrrNX'HED.Ra%A!/W$Bcq,G!KmJH1Qk"O
-P#Q(5AftfN99M8KF)Nrn2Ng7e@$3]^CiF&rDKTf-EbT$H5*B<:E0:?NCh[s/2Dd<7@;Kmr@;^4
-)ATDKp+D#G#De*E4D/WrrNWs3=D`0F1Ou&7dI?IQIF_t]1Bk)1+DK?q7P"UT8P"L(;DKTf-EbT
-#+@;Kmr@;^4)ATDKp+D#G#De*E4D/WrrNX'HED.Ra%A!/X25^eepDKTf-EbT$(F`)7CBp),P3/
-@^#8s2APOo]37As-Vd4d#qpCi4B4ATDKp+CT)*BOPe$D.Ra%@j#?#@rGmh05YW<AW@"5F_t]1B
-k*;^P!FGY<+g/^+DI!3@;Kmr@;^4)ATDKp+D#G#De*E4Bcq,G!KmJH1Qk"OP#Q::A7^c*Ble2N
-1cCL[HY7;0+DI!3Ao;*5P!+/(DIYCDBle2N1c?IfDI[TqAM7n=A7^c+DKTf-EbT$H1G<GbBnue
-Q!Ko7%5^eepDKTf-EbT$(F`)7CBp),F"HlApAU&<2F)Nrn2K*JLGp$ga98Eq<8s0=(Ci4B4ATD
-Kp+DGn82Dd<7ASu!rA7[E2De*F>#B"[$ATDKpOu&7dI?IQ<CiF&rDKTf-EbT$(F`)7CBp),F"d
-2JqAU&<2F)Nrn2K*JLGp$ga98Eq<8s0=(Cgh.!BOPe$D.Ra%@j#K,D`0F1+D#G#De*E4D/WrrN
-XT?4E+iZtF_t]1Bk*;^P!FGY<+g/^+DI!3Ble2N1c?IfDI[TqAM7a?BnueQ!Ko7%5^eepI?J/i
-P%?:ZE+U5*E+W[!@u(,"P"_#pL]N;?Oo]E2FD,T'P%'RTG&1cR@Zgb%A7h!6Oo]37As-Vd!KoE
-_ASkmjFE<U)OpNd\@:YNbOu%8tAs-VZ!0V2GOo^@IP#@H&L]W`SG&1cR5)93%5*C/H%[(7IL]D
-jML]Mpe<H`1jP!4[&P!5%RI=%-"P')29<H)AWP%'4IP#-L]!/Let@:YO1L]N[<HS9)r5*@^@@:
-UKp+BsX%L]E53L]E52?&/K"@:YO1Bp,HO"c*5C)3RgCP!4;W<0DBe9Tj[LP"9G.A7^c+DKTf-E
-bT$H4aSi$@:UKbL]E52L]E52E+*:?!g7\3L]DC&A<LDb9Th2[P#Qjm<%h]pDK]H)+Bot)Bl7]p
-B4ZFG!I]<N!.C#1D.Rg&De+3N0TrD`P"Bh5As*4YF^nroOogehB5hIG!g7\F@:YN&P'(&n1G<9
-IFCAusDBND&DK]H)P%'4UP#@H!05b9?H\_`d)3UtT!g4FaAp]\)I?IQc!Jgc4"c*8DLPPto!Jp
-c=5'rH/L]NZ@L]`fBP$r]n!KpQJ;Na5"!KmJH5(/SnI?I-JL]NZ@L]`fBP#-Lg5^eepL]NZ@P#
-@H,L]NY>P!4;WAWf6?FcnqOFa]D_Ou"b(ATUgK;g2qdFD,`B05kEb5*@]TASdMnOu"b.GEP.Q1
-G<W_P!5$b06Uc?P!5$b05kuT+D#AP$'I(tD..L$L]ESoL]E53ASd/(P,Wd]@UX;?5*@]TATrq2
-Ou"b.@<63,D..L$L]LsnEfprrEfr5*06;;FC`mV4+D#b[WJCS<WF]lg@UX;?WJCV=WGZ3dOu%#
-f+DkP.CPVtR4d#qcD'3D6P,W#/L]W`UP,Vo!Eejd[Cm"gTrfTm:"FDeCG%#20F*:u.+Du$=ATs
-<:ASdO/@UX;?!G-'i@UX;?WJCV=WGZ3dP,XU#I?IQ@C`m1qEg!DX!g6B,05Pf?Ckr(S1N%%PAT
-s<:ASdO/@UX;?!Jgf?!JpbmGDH9_!IJ^$P!5&.ATs<:L]N[<AS`Ju@<.O1L]`g>DI[]?Cj'6'P
-!3]*@;M)-Ou%NL82#%-@;I'-G%#20Cj'6'+D#@3@UX;?WJCS<WKM(\WKK&cHZ![CATs<:D0M.>
-HS9G`@;I'-G%#3C!KsFF1OYEcI?IS`G%#20G%#20F*:u.P,XU#G%#3C!0Ur@P!FGY<%hg,+D#b
-Q!KmJH1G<TRF))n8@<64?!FfJXOq3^pOp$q(I?J.pG%#20G%#20F*:u.Oo^_%05bVLDJ^M-GES
-qg1N.DX+C\c"+D#b[G^Y`GDfp.EASd/'P,W>9P'CnfFFB;^Ou"b5@:CrM1a$"W!F(?[L^](CL^
-/_;Lf]B8L';@I!F1EfL^/_>L]iMjL_PROK8'PGL^8eCL]iM;L`V@/L(BK&$\X<?L^T"@L^&YBL
-hMMS?\T)UL]iMCL]N;;L]N51b[$Af04]<O+Cno&@;KLmOpR:-L]E53A79RgCh7L?!KsF/06iXD
-Ou"b%+C]&&G%#20G_cckCkrL_9Th1bA;C5A!/LZ3$[XOAP!5$bL]WA?C6GQ-G]8fsA0>WM99O+
-S!I^,%Ou"b+L]ESoHXn7@@:CrM1a$Or99N_1FCAW52`)XlL]NY>L^0):H[V&K04]09P!5$b04]
-0CP!5$b04\pDAWf6?1G<9UGAiX.Ou"b%ASbq@5*@]TA7]RqP!5$b04\^:P!5$bP!FGY<%hu/C5
-<.Y!Ko6eP%?:WGAeU7+Co,+P,Vu6AWfr%ASc9-A8QO/L]hg?F_)\.ATUgK;g2qdFD,`Y1G<9_A
-KYM+A7otHWFU*^P%nN=Ch4`"D0KQI"D2(YF(HJ,ATUgK;g2qdFD,`Y1G<9_L^9.MOu%?=!g7;S
-!0TKlL]E53L]_uWC6CcD1Lt]c#AT%rP&-;\A9Vr7C6D5QG[u#S#&8qqP&-;\A9VT-C6D5QG^Y`
-GI=$bML]N;6HS9,s5*@^4G9CXV!g7A1GAeU=P"Us_A9T/2L]W`UL]NY>A9VT-C6D5QG^Y`GI?I
-T@G]t9T+Co\ZG^Y`G04np9A7]e*Bk2=!F!+\C!Jh#;"Gd)7!Jgc4!Jgl7#`&M;",I/;"Gd)7!J
-gc4!Jgl7#)EA;",I)9#)E;9!Jgc4!Jgr9"Gd/9",I#7#`&M;!Jgc4!Jh#;!f-r7!f.&:"c*28!
-Jgc4!Jgo8#)E>:!f-o6$&AV<!Jgc4!Jh&<!f-n`Ou"b'Bl7HmEcYf3+BosmL]E53>p*@-!/L`5
-!aQpQL]E57L]WA;>p*@-!/Lr;!f.);"C3-SL]E5;L]WA;L^&YC>p*@-!/Lr;!f.);#`&kE$=+c
-YL]E53L]WA7L]iM;L^&Y?>p*@-!/LZ3!f-r7"Gd5;#)ESA#[JQWL]E53L]WA7L]iM;L^&YAL^J
-qG>p*@-!/LZ3!f-r7"Gd;=#)ESA#`&kE$=+c[Ou"b4AT8i)Bl7HmEcYf3+Cno&@;KLmL]Wa=L]
-W`;P"Uro04oHQ+E M+6P% 'R\Ou %moL] MR .EK Xde!Ks F/06iXD
-Ou$]pG9D,QAnc-n ATE !/A9; L++EM +6 +F' &BL ]rrX
-L]rr8P'DD<82"Id ARfM" AS GdjFE 8R/M #W ;2M #W;2M #W; 2M#W; 2LeW
-\5L`hLNL`;-VL]` G6L_P Y-L &eT :G(p !X L^/ _NLd-U oc %Z5GL& d0g
-FbhE$%>FkFL&eoA !5XBi SVT "T! 0 `3P LcL 1iX ,'u7!/ -. ZLfK00 WJ1
-DlL&d$a!4mtML&e c=!/6 .-] S6E HL ]i MBL a7d mLbacf L` M:JLgc #<X
-bHh+LiJ.LQA?N:< /;uZ H\M Nl Lb shd S;% $@L &f/H
-!7$<!MhV5DL&fDO !/cR b Le NU :Lb jbc R></ FDhr^
-o!1S]CP)+=<DMW( aC5)_m L&c d \.u 4a m0ST RhL ^JqZLg#TrL &eK5!2PF!Li
-A(KZA&A#L&d'dFG Odi7YU okL & fST! 6U#r \:t !8L&eQ9F+s \/L&fGR7#5-
-)+,0c^L&euC!/?4 .P_^*2 6A> K[L& e<2? AM+ -!f/7Z!1JW B^kb71!2>9-
-L_>LJLj4XSQ&$<6 98F(6 .YrP .!2kP OYD* %tL &fPU7>Mb9: 5BgE:P`Y>@Y
-ds=-AZ\s!/$"+[Y T<c!2 #')Lf fB3We c.Z !4RbIL&dp' 2hh=/Le3C.L
-_tq=L]rSFLfoOEL &eB43ed X-L&f) F!/H@ ^?' 6us@q]F`CN j?(B4uC.AT8
-hs+EM+6H\`5rCh%-i@r$:"BkM+$F-8_C&<]_M!g7\SP"ArB30Ia,#a20C#a.B79Th1bGA1T0BQ
-G;#+Co_@H[C1(8UZan?'6us@q]F`CNFW8L]ESoL]E53GA1T0BQK>GL]N[<HS9)r5*@]T@q]F`C
-NFW8+Cf(r@r$..D'4%:A9;L++DI!3@q]F`CNj?(B4uC.AT8i,P"UsSOo^_%I?I,S@q]F`CNFW8
-+Cf(r@r$..D2&&>P%nN9FCAusDMSCXWJ1E%P&-9^Ou"b*L]ESoHXg`#@r$..D'3q/@PKeu+DI!
-3P$r]Z@:CrM1a$Lg!KmJ>#Ehc-I?I/T@ru:F5*@]T@ruXP5*@]T@r6F$P!5$b04SjCDj!;I1G<
-6LCh8bnOu"b$ASc:J5*@]T@qTkG5*@^b5^eep052PCL^9.EOu%NLAM7P;D]iP'ARfLsF_r72B6
-068@ru:F;Ia9SD]iP,GAi9?FE2M8+D58-;H$M<Bk2=!F-8=4@s;K,@q]F`CNFW8+Cf&*P,Vr5A
-Wge<ASbp#@r6F$L]h<uCia/1B4Z0_;c@mSA9;L+Ou"b$GDHNf$'I*#!/LZ3"+)\8P!5$b@s9&0
-L]W`U@s;i6Bp),PG[kq?BnuhRCkr+T!Fp=b+DI!3P'DD<8;J%E$'I923/@QEGER3,!G$G!P'Mi
-`A79RgCh7L?!KmJH9J9q$GEP.Q1G<9IFCAusDBNJ7GEQEu1G<ceGB4m;@<>poASrW3AS5jkDKK
-r_2NeW7/<U=&1G<WgD/sQ=F!,LAGB8pVOu%moL]MC9D/sQ=F,0j[WI$:=P!5$bD..I#+EM+,D.
-RU,F,0s^C5;kQD/tF6P%odRP!+s2H\_ZMP#R5<L]N;3L]MR.B5M3tFE<6=P,Wd]E,Tf\5&qceA
-S5jkDKKr_Cm"g^1N78R+Cno&@;KLmP%K&OG]t9LDf_(7H[V&KE,TfR!g7;S!0TKlApAMBE,TfR
-!g6HE97))M8UZb$I?IQXP":B0L]NYXOpR9ZEc6/CP!3oL5*C/RFa]EDAoD^,@<@M?AU&0&DId<
-hF*(i#CLq%>D0mpW@WNZ4Dg-8Y!0U!<30Ia,!KsF<!KoX09Th1bF(025>DN<9!/LYd@<>poAT!
-;)P,Wd]Bp(ZC1Lt`S+DI!3H[V&KBnuhRC5;kQ4aUdcG9CUU!g6HE97))M8UZb$I?I-W!Jgb^Ou
-#3_061WA0/%?WDJX$)ARTU4F(025F(02D@VBg*>9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3^->@
-WNYr+EM"5P%'4JOo^@?P#?X_!.C#_>q^,8F<GL@FD5Z2F!*Y1+CoD.FC]E#GEQnu061WACh[cu
-@<.N1I=!VgAT2]5DKTf:Dg-8c$'I*#!/LYnF_u/;GB8Q@P,Wd]EfrVL1G<ceG9CpEGB4mIP"Ur
-oD..I#L]E54Ec6/b@Yb&JWI$:4P!5$bEc6.EBp),9L]DjdK4uHKDg.@RL]N[<P%K&]Dg*=<L]N
-Y>P"U.X!I^,`I?IQXP":`TOpR9Z061uTP!5$bP'&F!AT/br+EDCEH\_]c5*DmnP"ArB1NR,HL]
-CY8!/LW2!/LV\P'M+[E$01>GEQEk"Ho`gL]E52L]E52?'9IdAnc-nATDa.F!+\C'8U+<Dg.@RL
-^fNHH[V&JLd[&.Ec6/b@YbJVWI'&V86qB7Anc-nATDa.F*j'0L^oRKL]NZ&HS9)r5*@^BDg*=<
-P"UT2P!+/4Dg*=<L]N[<P"UT3P!+/J!I]<9AT/c+L]N[<P"UT2P!+/J!I]<N!.C#1I?ITYH\_Z
-MP#ZR7E0<D!P!5%RI?I-LP"B_+B5M3tFE<6@P%odQP!*iA!g7;S!KoU/"FG0-GB4mIP"UsIEc6
-/CL]ET2P%'SkAnc-nATDa.F-:!g!g7;S!KoU/"FDeBDg*=.L]DI6GEN#jF^:.d06:]D+BsX%F(
-K<R!g7\3Ou%N5Ec6/b@Yb&JWJLS1!./a)GEP.Q97;soEc6/b$^,XRAT3fAL]N[<M#W82HZNb;P
-!5%%I?I-BAT3e?P')29<IL$0Ec6/C+EATFDg.@hF(K<3+EATGAT3fWI?I,SE+sQA+EDCEF,0gZ
-99NbI1Ktu@Bm=lLL]DjdK3aX"L]DI6GB4mEF_u/;GB8Q@P,XU;P'M(dGB8p2DKTf:Dg-8Y!KsF
-F5*C.p+E2%>G^G5HI?K4gOuS6tF(K<3+Du==Ec6/CL]N[<P"Us`F(K<3P!3c+D/sQ=F,0j[WKK
-H.GV=,LE$/@-E+sQAL]W`;L]NY>H\_ZX!I^,`?&/K"Bm=lc9Th2QAT3G*>DN98!/LW2!*tb5F(
-K;5E+sQAL]im?>DN98!/LW2!*tb505tWMF!+\C!/LYnF_u/;GB8Q@P,Wd]EfrVL1NJ9OP&5PeA
-T2]5Efs(Y!g7\SP#R5]HZF%KF!,Ld99K@>Fa]F*EZf7BD/sQ=F,0j[WKM+FF(K<3+EEW<Oogeh
-F(K<R!g7\SP#Qjm86qB74?P9;ASs.SEb0-*@<?O(GV=#MG]P!HBm=\PE+sQA+E2%>GV=#MG^1E
-NBm=]^@W6%+G`krXBOtmjBQPA9Bm=]^@W6%+G`ks\8<PkaGA1T0BHV8.G^,$8Ou=t3E-*4@E-,
-f4DK?pa4s4BSDKKE0@<[lR0/%?WDJ`g(EbTc]<.0p0Ou[rR%[&V$A79Rg@UX:gG]7)/A7];730
-If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP
-'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/databarexpanded 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 2015050900 197224 210202
+%%BeginData: 871 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarexpanded {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /height 34 72 div def
+ /format (expanded) def
+ /segments -1 def
+ /linkage false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /height height cvr def
+ /segments segments cvi def
+
+ segments -1 eq {
+ /segments format (expandedstacked) eq {4} {22} ifelse def
+ } if
+
+ % Expand ordinals of the form ^NNN to ASCII
+ /expand {
+ /in exch def
+ /out in length string def
+ /j 0 def
+ in
+ { % loop
+ (^) search {
+ dup out exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi out exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup out exch j exch putinterval
+ length j add /j exch def
+ out 0 j getinterval exit
+ } ifelse
+ } loop
+ } bind def
+
+ % Parse out AIs
+ /ais [] def
+ /aival 2 dict def
+ barcode dup length 1 sub 1 exch getinterval
+ { % loop
+ dup () eq {exit} if
+ (\)) search pop
+ exch pop
+ exch (\() search {
+ exch pop exch 3 1 roll
+ } {
+ () 3 1 roll
+ } ifelse
+ [ ais aload pop counttomark 2 add index ] /ais exch def
+ aival 3 1 roll expand put
+ } loop
+ pop
+
+ % Method selection
+ { % common exit
+
+ % (01)9...(3103)...
+ ais length 2 eq {
+ ais 0 get (01) eq ais 1 get (3103) eq and {
+ aival (01) get 0 1 getinterval (9) eq aival (3103) get cvi 32767 le and {
+ (0100) false exit
+ } if
+ } if
+ } if
+
+ % (01)9...(3202)...
+ ais length 2 eq {
+ ais 0 get (01) eq ais 1 get (3202) eq and {
+ aival (01) get 0 1 getinterval (9) eq aival (3202) get cvi 9999 le and {
+ (0101) false exit
+ } if
+ } if
+ } if
+
+ % (01)9...(3203)...
+ ais length 2 eq {
+ ais 0 get (01) eq ais 1 get (3203) eq and {
+ aival (01) get 0 1 getinterval (9) eq aival (3203) get cvi 22767 le and {
+ (0101) false exit
+ } if
+ } if
+ } if
+
+ % (01)9...(310x/320x)...[(11/13/15/17)...]
+ ais length dup 2 eq exch 3 eq or {
+ /ai310x false 3100 1 3109 {10 4 string cvrs ais 1 get eq or} for def
+ /ai320x false 3200 1 3209 {10 4 string cvrs ais 1 get eq or} for def
+ ais length 3 eq {
+ /aibad true [ (11) (13) (15) (17) ] {ais 2 get ne and} forall def
+ } {
+ /aibad false def
+ } ifelse
+ ais 0 get (01) eq ai310x ai320x or and aibad not and {
+ ais length 3 eq {
+ aival (01) get 0 1 getinterval (9) eq
+ aival ais 1 get get cvi 99999 le and
+ aival ais 2 get get cvi 999999 le and {
+ ai310x ais 2 get (11) eq and { (0111000) false exit } if
+ ai320x ais 2 get (11) eq and { (0111001) false exit } if
+ ai310x ais 2 get (13) eq and { (0111010) false exit } if
+ ai320x ais 2 get (13) eq and { (0111011) false exit } if
+ ai310x ais 2 get (15) eq and { (0111100) false exit } if
+ ai320x ais 2 get (15) eq and { (0111101) false exit } if
+ ai310x ais 2 get (17) eq and { (0111110) false exit } if
+ ai320x ais 2 get (17) eq and { (0111111) false exit } if
+ } if
+ } {
+ aival (01) get 0 1 getinterval (9) eq
+ aival ais 1 get get cvi 99999 le and {
+ ai310x { (0111000) false exit } if
+ ai320x { (0111001) false exit } if
+ } if
+ } ifelse
+ } if
+ } if
+
+ % (01)9...(392x)...
+ ais length 2 ge {
+ /ai392x false 3920 1 3923 {10 4 string cvrs ais 1 get eq or} for def
+ ais 0 get (01) eq ai392x and {
+ aival (01) get 0 1 getinterval (9) eq { (01100) true exit } if
+ } if
+ } if
+
+ % (01)9...(393x)...
+ ais length 2 ge {
+ /ai393x false 3930 1 3933 {10 4 string cvrs ais 1 get eq or} for def
+ ais 0 get (01) eq ai393x and {
+ aival (01) get 0 1 getinterval (9) eq { (01101) true exit } if
+ } if
+ } if
+
+ % (01)...
+ ais 0 get (01) eq { (1) true exit } if
+
+ % Freeform
+ (00) true exit
+
+ } loop
+ /gpfallow exch def
+ /method exch def
+
+ /conv12to40 {
+ (0000000000000000000000000000000000000000) 40 string copy
+ 2 copy 0 10 getinterval exch 0 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval
+ 2 copy 10 10 getinterval exch 3 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval
+ 2 copy 20 10 getinterval exch 6 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval
+ 2 copy 30 10 getinterval exch 9 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval
+ exch pop
+ } bind def
+
+ /conv13to44 {
+ (00000000000000000000000000000000000000000000) 44 string copy
+ 2 copy 0 4 getinterval exch 0 1 getinterval cvi 2 4 string cvrs dup length 4 exch sub exch putinterval
+ dup 3 -1 roll 1 12 getinterval conv12to40 4 exch putinterval
+ } bind def
+
+ /tobin {
+ string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } bind def
+
+ method (00) eq {
+ /cdf [] def
+ /gpf [] def
+ } if
+
+ method (1) eq {
+ /cdf aival (01) get 0 13 getinterval conv13to44 def
+ /cdf [ cdf {48 sub} forall ] def
+ /gpf [] def
+ /ais ais 1 ais length 1 sub getinterval def
+ } if
+
+ method (0100) eq {
+ /cdf 55 string def
+ cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval
+ cdf 40 aival (3103) get cvi 15 tobin putinterval
+ /cdf [ cdf {48 sub} forall ] def
+ /gpf [] def
+ /ais [] def
+ } if
+
+ method (0101) eq {
+ /cdf 55 string def
+ cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval
+ ais 1 get (3202) eq {
+ aival (3202) get cvi 15 tobin
+ } {
+ aival (3203) get cvi 10000 add 15 tobin
+ } ifelse
+ cdf exch 40 exch putinterval
+ /cdf [ cdf {48 sub} forall ] def
+ /gpf [] def
+ /ais [] def
+ } if
+
+ method length 7 eq {
+ /cdf 76 string def
+ cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval
+ 6 string dup 0 ais 1 get 3 1 getinterval putinterval
+ dup aival ais 1 get get 1 5 getinterval 1 exch putinterval cvi 20 tobin
+ cdf exch 40 exch putinterval
+ ais length 3 eq {
+ aival ais 2 get get
+ dup 0 2 getinterval cvi 384 mul exch
+ dup 2 2 getinterval cvi 1 sub 32 mul exch
+ 4 2 getinterval cvi add add
+ } {
+ 38400
+ } ifelse
+ 16 tobin cdf exch 60 exch putinterval
+ /cdf [ cdf {48 sub} forall ] def
+ /gpf [] def
+ /ais [] def
+ } if
+
+ method (01100) eq {
+ /cdf 42 string def
+ cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval
+ cdf 40 ais 1 get 3 1 getinterval cvi 2 tobin putinterval
+ /cdf [ cdf {48 sub} forall ] def
+ /gpf [ aival ais 1 get get {} forall ] def
+ /ais ais 2 ais length 2 sub getinterval def
+ } if
+
+ method (01101) eq {
+ /cdf 52 string def
+ cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval
+ cdf 40 ais 1 get 3 1 getinterval cvi 2 tobin putinterval
+ cdf 42 aival ais 1 get get 0 3 getinterval cvi 10 tobin putinterval
+ /cdf [ cdf {48 sub} forall ] def
+ /gpf [ aival ais 1 get get dup length 3 sub 3 exch getinterval {} forall ] def
+ /ais ais 2 ais length 2 sub getinterval def
+ } if
+
+ % Variable length symbol field
+ gpfallow {
+ /vlf 2 array def
+ } {
+ /vlf [] def
+ } ifelse
+
+ % Pre-defined fixed length data field AIs
+ % any AI whose prefix is not included in this table must be
+ % terminated with "FNC1", even if it's fixed length
+ /aifixed 23 dict def
+ [
+ 0 1 4 {} for
+ ] {
+ (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
+ } forall
+ [
+ 11 1 20 {} for
+ 23
+ 31 1 36 {} for
+ 41
+ ] {
+ 10 2 string cvrs dup aifixed 3 1 roll put
+ } forall
+
+ /fnc1 -1 def /lnumeric -2 def /lalphanumeric -3 def /liso646 -4 def
+
+ /numeric <<
+ 0 1 119 {
+ dup (00) 2 string copy dup 3 -1 roll 11 2 string cvrs
+ dup length 2 exch sub exch putinterval
+ dup 0 get 65 eq {dup 0 94 put} if
+ dup 1 get 65 eq {dup 1 94 put} if
+ exch 8 add
+ (0000000) 7 string copy dup 3 -1 roll 2 7 string cvrs
+ dup length 7 exch sub exch putinterval
+ } for
+ lalphanumeric (0000)
+ >> def
+
+ /alphanumeric <<
+ 48 1 57 {dup 43 sub 5 tobin} for
+ fnc1 (01111)
+ 65 1 90 {dup 33 sub 6 tobin} for
+ 42 (111010)
+ 44 1 47 {dup 15 add 6 tobin} for
+ lnumeric (000)
+ liso646 (00100)
+ >> def
+
+ /iso646 <<
+ 48 1 57 {dup 43 sub 5 tobin} for
+ fnc1 (01111)
+ 65 1 90 {dup 1 sub 7 tobin} for
+ 97 1 122 {dup 7 sub 7 tobin} for
+ 33 (11101000)
+ 34 (11101001)
+ 37 1 47 {dup 197 add 8 tobin} for
+ 58 1 63 {dup 187 add 8 tobin} for
+ 95 (11111011)
+ 32 (11111100)
+ lnumeric (000)
+ lalphanumeric (00100)
+ >> def
+
+ % Append the remaining AI data
+ 0 1 ais length 1 sub {
+ /i exch def
+ /ai ais i get def
+ /val aival ai get def
+ gpf length ai length add val length add array
+ dup 0 gpf putinterval
+ dup gpf length ai [ exch {} forall ] putinterval
+ dup gpf length ai length add val [ exch {} forall ] putinterval
+ /gpf exch def
+ i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ gpf length 1 add array
+ dup 0 gpf putinterval
+ dup gpf length fnc1 put
+ /gpf exch def
+ } if
+ } for
+
+ % Calculate the number of bits remaining to the next valid symbol size
+ /rembits {
+ dup
+ 12 div ceiling cvi 12 mul % Round up to multiple of 12
+ 48 2 copy lt {exch} if pop % At least 4 symbols
+ dup 12 idiv dup segments mod 1 eq { % At least 2 symbols on last row of stacked symbol
+ 1 add 12 mul exch pop
+ } {
+ pop
+ } ifelse
+ exch sub
+ } bind def
+
+ /encode {
+ dup /raw ne {exch get} {pop} ifelse
+ [ exch {48 sub} forall ]
+ dup length exch
+ gpfenc exch j exch putinterval
+ /j exch j add def
+ } bind def
+
+ % Pre-compute alphanumeric and numeric runlengths and position of next ISO646-only characters
+ /numericruns [ gpf length {0} repeat 0 -1 ] def
+ /alphanumericruns [ gpf length {0} repeat 0 ] def
+ /nextiso646only [ gpf length {0} repeat 9999 ] def
+ gpf length 1 sub -1 0 {
+ /i exch def
+ gpf i get
+ (00) 2 string copy
+ dup 0 gpf i get dup fnc1 eq {pop 94} if put
+ i gpf length 1 sub lt {dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put} if
+ numeric exch known {
+ numericruns i numericruns i 2 add get 2 add put
+ } {
+ numericruns i 0 put
+ } ifelse
+ dup alphanumeric exch known {
+ alphanumericruns i alphanumericruns i 1 add get 1 add put
+ } {
+ alphanumericruns i 0 put
+ } ifelse
+ dup iso646 exch known exch alphanumeric exch known not and {
+ nextiso646only i 0 put
+ } {
+ nextiso646only i nextiso646only i 1 add get 1 add put
+ } ifelse
+ } for
+
+ % Encode the general purpose field
+ /gpfenc 252 array def
+ /i 0 def /j 0 def /mode (numeric) def
+ { % loop
+ i gpf length eq {exit} if
+ { % not a loop but common exit point
+
+ mode (numeric) eq {
+ i gpf length 2 sub le {
+ 2 string
+ dup 0 gpf i get dup fnc1 eq {pop 94} if put
+ dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put
+ dup numeric exch known {
+ numeric encode
+ /i i 2 add def
+ exit
+ } if
+ pop
+ lalphanumeric numeric encode
+ /mode (alphanumeric) def
+ exit
+ } {
+ gpf i get dup 48 lt exch 57 gt or {
+ lalphanumeric numeric encode
+ /mode (alphanumeric) def
+ exit
+ } if
+ /rem 12 1 add method length add vlf length add cdf length add j add rembits def
+ rem 4 ge rem 6 le and { % C1 + 1 into 4 to 6 bits
+ (000000) 6 string copy 0 rem getinterval
+ dup gpf i get 47 sub 2 4 string cvrs
+ dup length 4 exch sub exch putinterval /raw encode
+ /i i 1 add def
+ exit
+ } { % C1.FNC1
+ 2 string dup 0 gpf i get put dup 1 94 put numeric encode
+ /i i 1 add def
+ exit
+ } ifelse
+ } ifelse
+ } if
+
+ mode (alphanumeric) eq {
+ gpf i get fnc1 eq {
+ fnc1 alphanumeric encode
+ /mode (numeric) def
+ /i i 1 add def
+ exit
+ } if
+ gpf i get dup iso646 exch known exch alphanumeric exch known not and {
+ liso646 alphanumeric encode
+ /mode (iso646) def
+ exit
+ } if
+ numericruns i get 6 ge {
+ lnumeric alphanumeric encode
+ /mode (numeric) def
+ exit
+ } if
+ numericruns i get dup 4 ge exch i add gpf length eq and {
+ lnumeric alphanumeric encode
+ /mode (numeric) def
+ exit
+ } if
+ gpf i get alphanumeric encode
+ /i i 1 add def
+ exit
+ } if
+
+ mode (iso646) eq {
+ gpf i get fnc1 eq {
+ fnc1 iso646 encode
+ /mode (numeric) def
+ /i i 1 add def
+ exit
+ } if
+ numericruns i get 4 ge nextiso646only i get 10 ge and {
+ lnumeric iso646 encode
+ /mode (numeric) def
+ exit
+ } if
+ alphanumericruns i get 5 ge nextiso646only i get 10 ge and {
+ lalphanumeric iso646 encode
+ /mode (alphanumeric) def
+ exit
+ } if
+ gpf i get iso646 encode
+ /i i 1 add def
+ exit
+ } if
+
+ } loop
+ } loop
+ /gpf gpfenc 0 j getinterval def
+
+ % Complete the variable length field and create pad
+ 1 12 add method length add vlf length add cdf length add gpf length add
+ dup rembits dup array /pad exch def
+ vlf length 0 ne {
+ add 12 idiv
+ dup 2 mod vlf exch 0 exch put
+ 14 le {0} {1} ifelse vlf exch 1 exch put
+ } {
+ pop pop
+ } ifelse
+ pad length 0 gt {
+ 0 5 pad length 1 sub { % Fill with 00100
+ /i exch def
+ pad i [ 0 0 1 0 0 ] 0 pad length i sub 5 2 copy gt {exch} if pop getinterval putinterval
+ } for
+ mode (numeric) eq { % Prefix shift from numeric to ASCII
+ /pad [ 0 0 0 0 pad aload pop ] 0 pad length getinterval def
+ } if
+ } if
+
+ % Concatinate fields
+ /binval [
+ linkage {1} {0} ifelse
+ method {48 sub} forall
+ vlf aload pop
+ cdf aload pop
+ gpf aload pop
+ pad aload pop
+ ] def
+ /datalen binval length 12 idiv def
+
+ /ncr { % n r
+ 2 copy sub 2 copy lt {exch} if % n r maxd mind
+ 1 1 5 3 roll % mind j=1 v=1 n maxd
+ 1 add -1 exch { % mind j v n -1 maxd+1
+ mul % mind j v*i
+ 1 index 3 index le {
+ 1 index idiv exch 1 add exch
+ } if
+ } for
+ { % mind j v
+ 1 index 3 index gt {exit} if
+ 1 index idiv exch 1 add exch
+ } loop
+ exch pop exch pop
+ } bind def
+
+ /getRSSwidths {
+ /oe exch def
+ /el exch def
+ /mw exch def
+ /nm exch def
+ /val exch def
+ /out el array def
+ /mask 0 def
+ 0 1 el 2 sub {
+ /bar exch def
+ /ew 1 def
+ /mask mask 1 bar bitshift or def {
+ /sval nm ew sub 1 sub el bar sub 2 sub ncr def
+ oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and {
+ /sval sval nm ew sub el sub bar add el bar sub 2 sub ncr sub def
+ } if
+ el bar sub 2 gt {
+ /lval 0 def
+ nm ew sub el sub bar add 2 add -1 mw 1 add {
+ nm exch sub ew sub 1 sub el bar sub 3 sub ncr
+ /lval exch lval add def
+ } for
+ /sval sval lval el bar sub 1 sub mul sub def
+ } {
+ nm ew sub mw gt {/sval sval 1 sub def} if
+ } ifelse
+ /val val sval sub def
+ val 0 lt {exit} if
+ /ew ew 1 add def
+ /mask mask 1 bar bitshift not and def
+ } loop
+ /val val sval add def
+ /nm nm ew sub def
+ out bar ew put
+ } for
+ out el 1 sub nm put
+ out
+ } bind def
+
+ /tab174 [
+ 347 0 12 5 7 2 87 4
+ 1387 348 10 7 5 4 52 20
+ 2947 1388 8 9 4 5 30 52
+ 3987 2948 6 11 3 6 10 104
+ 4191 3988 4 13 1 8 1 204
+ ] def
+
+ /dxw datalen array def
+
+ 0 1 datalen 1 sub {
+
+ /x exch def
+
+ /d binval x 12 mul 12 getinterval def
+ /d 0 0 1 11 {/j exch def 2 11 j sub exp cvi d j get mul add} for def
+
+ /j 0 def {
+ d tab174 j get le {
+ tab174 j 1 add 7 getinterval {} forall
+ /dte exch def /dto exch def
+ /dmwe exch def /dmwo exch def
+ /dele exch def /delo exch def
+ /dgs exch def
+ exit
+ } if
+ /j j 8 add def
+ } loop
+
+ /dwo d dgs sub dte idiv delo dmwo 4 true getRSSwidths def
+ /dwe d dgs sub dte mod dele dmwe 4 false getRSSwidths def
+
+ /dw 8 array def
+ x 2 mod 0 eq {
+ 0 1 3 {
+ /j exch def
+ dw 7 j 2 mul sub dwo j get put
+ dw 6 j 2 mul sub dwe j get put
+ } for
+ } {
+ 0 1 3 {
+ /j exch def
+ dw j 2 mul dwo j get put
+ dw j 2 mul 1 add dwe j get put
+ } for
+ } ifelse
+
+ dxw x dw put
+
+ } for
+
+ /finderwidths [
+ 1 8 4 1 1 1 1 4 8 1
+ 3 6 4 1 1 1 1 4 6 3
+ 3 4 6 1 1 1 1 6 4 3
+ 3 2 8 1 1 1 1 8 2 3
+ 2 6 5 1 1 1 1 5 6 2
+ 2 2 9 1 1 1 1 9 2 2
+ ] def
+
+ /finderseq [
+ [0 1]
+ [0 3 2]
+ [0 5 2 7]
+ [0 9 2 7 4]
+ [0 9 2 7 6 11]
+ [0 9 2 7 8 11 10]
+ [0 1 2 3 4 5 6 7]
+ [0 1 2 3 4 5 6 9 8]
+ [0 1 2 3 4 5 6 9 10 11]
+ [0 1 2 3 4 7 6 9 8 11 10]
+ ] def
+
+ /seq finderseq datalen 2 sub 2 idiv get def
+ /fxw seq length array def
+ 0 1 seq length 1 sub {
+ /x exch def
+ fxw x finderwidths seq x get 5 mul 5 getinterval put
+ } for
+
+ /checkweights [
+ -1 -1 -1 -1 -1 -1 -1 -1 % A1L
+ 77 96 32 81 27 9 3 1 % A1R
+ 20 60 180 118 143 7 21 63 % A2L
+ 205 209 140 117 39 13 145 189 % A2R
+ 193 157 49 147 19 57 171 91 % B1L
+ 132 44 85 169 197 136 186 62 % B1R
+ 185 133 188 142 4 12 36 108 % B2L
+ 50 87 29 80 97 173 128 113 % B2R
+ 150 28 84 41 123 158 52 156 % C1L
+ 166 196 206 139 187 203 138 46 % C1R
+ 76 17 51 153 37 111 122 155 % C2L
+ 146 119 110 107 106 176 129 43 % C2R
+ 16 48 144 10 30 90 59 177 % D1L
+ 164 125 112 178 200 137 116 109 % D1R
+ 70 210 208 202 184 130 179 115 % D2L
+ 190 204 68 93 31 151 191 134 % D2R
+ 148 22 66 198 172 94 71 2 % E1L
+ 40 154 192 64 162 54 18 6 % E1R
+ 120 149 25 75 14 42 126 167 % E2L
+ 175 199 207 69 23 78 26 79 % E2R
+ 103 98 83 38 114 131 182 124 % F1L
+ 159 53 88 170 127 183 61 161 % F1R
+ 55 165 73 8 24 72 5 15 % F2L
+ 89 100 174 58 160 194 135 45 % F2R
+ ] def
+
+ /checkweightseq [
+ seq {16 mul checkweights exch 16 getinterval aload pop} forall
+ ] dup length 8 sub 8 exch getinterval def
+
+ /widths [
+ dxw {{} forall} forall
+ ] def
+
+ /checksum 0 def
+ 0 1 widths length 1 sub {
+ /i exch def
+ /checksum checksum widths i get checkweightseq i get mul add def
+ } for
+ /checksum checksum 211 mod datalen 3 sub 211 mul add def
+
+ /i 0 def {
+ checksum tab174 i get le {
+ tab174 i 1 add 7 getinterval {} forall
+ /cte exch def /cto exch def
+ /cmwe exch def /cmwo exch def
+ /cele exch def /celo exch def
+ /cgs exch def
+ exit
+ } if
+ /i i 8 add def
+ } loop
+
+ /cwo checksum cgs sub cte idiv celo cmwo 4 true getRSSwidths def
+ /cwe checksum cgs sub cte mod cele cmwe 4 false getRSSwidths def
+
+ /cw 8 array def
+ 0 1 3 {
+ /i exch def
+ cw i 2 mul cwo i get put
+ cw i 2 mul 1 add cwe i get put
+ } for
+
+ 22 array dup dup
+ 0 cw put 1 dxw putinterval 0 datalen 1 add getinterval
+ /dxw exch def
+ /datalen dxw length def
+
+ % Encode row runlengths
+ /rows datalen segments div ceiling cvi array def
+ /numrows rows length def
+ 0 1 numrows 1 sub {
+ /r exch def
+ mark
+ segments 4 mod 0 ne r 2 mod 1 eq and {0} if
+ 1 1
+ 0 1 segments 1 sub {
+ /pos exch r segments mul add def
+ pos datalen lt {
+ dxw pos get {} forall
+ pos 2 mod 0 eq {fxw pos 2 idiv get {} forall} if
+ } if
+ } for
+ 1 1
+ counttomark array astore rows exch r exch put pop
+ } for
+
+ format (expandedstacked) ne { % Linear
+
+ % Remove leading space
+ /sbs rows 0 get dup length 1 sub 1 exch getinterval def
+
+ /sbs [
+ 1
+ 0 1 datalen 1 sub {
+ /i exch def
+ dxw i get {} forall
+ i 2 mod 0 eq {fxw i 2 idiv get {} forall} if
+ } for
+ 1 1
+ ] def
+
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ } { % expandedstacked
+
+ /seps numrows array def
+ 0 1 numrows 1 sub {
+
+ /r exch def
+ /row rows r get def
+
+ % Sample runlengths into bitmap
+ mark
+ 0 2 row length 1 sub {
+ /i exch def
+ row i get {0} repeat
+ i row length 1 sub lt {row i 1 add get {1} repeat} if
+ } for
+ counttomark array astore /row exch def pop
+
+ % Derive the separator pattern
+ /sep [ row {1 exch sub} forall ] def
+ sep 0 [ 0 0 0 0 ] putinterval
+ sep row length 4 sub [ 0 0 0 0 ] putinterval
+ /finderpos [ % Finder pattern module positions
+ 19 98 row length 13 sub {} for
+ 68 98 row length 13 sub {} for
+ ] def
+ finderpos {
+ dup 14 add 1 exch {
+ /i exch def
+ row i get 0 eq {
+ row i 1 sub get 1 eq {
+ 1
+ } {
+ sep i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep exch i exch put
+ } for
+ } forall
+
+ % For even segment-pair symbols reverse alternate rows
+ segments 4 mod 0 eq r 2 mod 1 eq and {
+ rows r get length rows 0 get length ne % Except partial width last row
+ finderpos length 2 mod 1 eq and { % with odd finders
+ /row [ 0 row aload pop ] def
+ /sep [ 0 sep aload pop ] def
+ } {
+ row length 1 sub -1 0 {row exch get} for
+ row astore pop
+ sep length 1 sub -1 0 {sep exch get} for
+ sep astore pop
+ } ifelse
+ } if
+
+ rows r row put
+ seps r sep put
+
+ } for
+
+ % Extend last row and separator to fill width of symbol
+ /pixx rows 0 get length def
+ [ pixx {0} repeat ] dup 0 rows numrows 1 sub get putinterval
+ rows exch numrows 1 sub exch put
+ [ pixx {0} repeat ] dup 0 seps numrows 1 sub get putinterval
+ seps exch numrows 1 sub exch put
+
+ % Middle separator pattern
+ /sep [ pixx 2 idiv 1 add { 0 1 } repeat ] 0 pixx getinterval def
+ sep 0 [0 0 0 0] putinterval
+ sep pixx 4 sub [0 0 0 0] putinterval
+
+ % Compose the symbol
+ /pixs [
+ 0 1 numrows 1 sub {
+ /r exch def
+ r 0 ne {
+ seps r get aload pop
+ } if
+ 34 {rows r get aload pop} repeat
+ r numrows 1 sub ne {
+ seps r get aload pop
+ sep aload pop
+ } if
+ } for
+ ] def
+
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx pixx
+ /pixy pixs length pixx idiv
+ /height pixs length pixx idiv 72 div
+ /width pixx 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ } ifelse
+
+ end
+
+} bind def
+/databarexpanded dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarexpanded--
@@ -2097,26 +6411,51 @@ If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: segments=4
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarexpandedstacked 0.0 0 0 0
-%%BeginData: 18 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04\L5@ :E YcAU&0 &DI
-d<hOuP+;CG'+8/p (ZFEd ;,: Ecc 5 ;/n 0$= E,^ uoP'E- !0 4\L5@: EYc
-AU&0&DId<hF*(i# CLq%' L_Q "0O ps '_ E-, f4D KCt)Ou "b #@<,jr A7^
-ofOu"b%Df0Z-Eaa /7Am oLs AW ei fE- ,f4 DKC uE06
-;5UBl7R*H#R>X4a VtcO u 8C 3D fBf 4Df 0WCP ,i2'C
-ia0N4aW>WI?IQm3 0Ia6V3 3Qn ! BlU *F E2M8 P!+ /T/Wr;\Fcn qO1OXV5/Tc#
-UAWeitP#ZpnAWe* t3A5;i FD5 Z 2F-8 _M1O YEc DfBf4Df0WC Ou%NL8T/QiB
-l@m1NX006DKKE0@ <Zg6F_ -_\ DfBf 4Df0 WV# %hdoD..OH% qU!)@;]UeA9
-2j$@r#XdP'AWgEb BG9@U X:eD e*E%D fBf4 Df0 VL04\L5@:E YcAU&0&DId<
-hP!>*c@<-"%NWX3 =FDl, ?Bl@m 1P'CD UB6 ,2+Df0Z-Ea a0TE%`kbASu
-?nFE2)?P#RT)I?G )'1G<9I FCAWeE b0K7@ ;]U eA92j$@r#X dOuSV806M%_
-@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm
-"@r#drB75qB~>
-% uk.co.terryburton.bwipp/databarexpandedstacked 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarexpandedstacked 0.0 2015050900 63589 66857
+%%BeginData: 43 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /databarexpanded dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarexpandedstacked {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Get the result of encoding with databarexpanded with format=expandedstacked
+ options (dontdraw) true put
+ options (format) (expandedstacked) put
+
+ /args barcode options //databarexpanded exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/databarexpandedstacked dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarexpandedstacked--
@@ -2127,38 +6466,99 @@ hP!>*c@<-"%NWX3 =FDl, ?Bl@m 1P'CD UB6 ,2+Df0Z-Ea a0TE%`kbASu
% --EXAM: 117480
% --EXOP: showborder
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp pharmacode 0.0 0 0 0
-%%BeginData: 30 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05tT5E c# 5pDe*F +L_
-Q"0Ops'_E-,f4DK Ct)Ou "b# @<, j rA7 ^of Ou" b%Df0Z -E aa/7Am oLs
-AWei&BOtmjBQT%9 MEj%< Ulo PM8 <P lo 1G< WiB k2=!ME _( @!/a$! E28
-Y5Ou"b8GA1T0BSo $i!! %mA 2/ o@ SCm $S- F*D >/FD
--OrJ,fS,5W*MVP& -:;D f Bf 4D f0W ZY: js=E bTE(F
-Eqh:P!+/J!Ko='% <$3-Bl @m1 H ]kF A@ ;L!r P!+ /T5^eepOuS V6P,4<rNWD;
-+NHB2`AWf3'OtDh \P')pO Ou% N 5OtC crF_ -^l I?ITYP%Bdt OuY16E-,f4D
-KCt)Ou%NL<,Z_tB l@m1H] g15 P"@< ?ASG djF <G7.BkM+$O tVtS05buJA9
-;K-DKff*FD-gjOu "b8GA 1T0B HVMCB k2=! OtV tS06;>OA9; K-F*D>/FD-g
-jOu$QUEas#uAWgM Y!Kq& (@<,j rA7^p 5L^ '#=P&bn&@W uO*E%Z*C@<-
-3n@rGmh6=FCuASu .&BT=33 BOPpu@ :O4dA KYi 4F*&O6AKW] MFDi9[+Co2!
-BlnDL061K8F(Jp'Ec5u]5CJ\o@UX:eDe*F+OuS7OP%Kk@LcLVpP&bn&@WuO*E%Z*C@<-3n@rGm
-h6=FClBOPpi@ru:&N[%A6@<-3n@rGmh+Dl7BF<G(3DKK<$DBNk8Cj@.6BkM.%F"]1e@;0doATD
-g0EfrY8P#Qjm8Rc+K@rGmhOt;bUL]`fPP!4O!!WW.^:m,jG04K->E,[FKBOPpu@:O4dAO9g9<a
-ffeAWA?=BOPpu@:O4dAKZ/)Cis;3D09oA+C\n)@V'Y*AS#a%1E^+DA0<T_0ebO?0/%?SBldisE
-cQ)=P!=AX<%i?<F<G%$Eas#uAWgMc$'I*#!/LYb@<,jrA7^p5L]N[<HS9)r5*@^DG]Y'B+Bost
-@<,jrA7ZltL]NZ4L]E52NW=k8?'9G\P"768@<,jrA7Zlm@<,jrA7^oTL]NY>L]WAEP,4<qOu"b
-#@<,jrA7Zlm@<,jrA7^Pt@UX:eDe*FB@Yb&JWKKr<1G<3GEbo<)+C\c"@rGmhP%'S106:TD+C\
-c"Ch7L?!g7A_$'I*#!/LYb@<-0qDMS=VWI$:4P!5$b04f$2+C\c"@rGmh+DHW4P"_#pASu"<!A
-K["HZNY;+DHW5P&,#[Bk2=!P'DD%F(025BnuhRCj1);A9;LJG^Y`TF(025BnuhRCkr+T!HWI!A
-9;LJG^Y`G4?P9;ASs.SEb0-)Bl7KjE\DKCF!,O5F"_!9F!+[0F(03R@Yb&J!Jgf?;L<(gBkM+$
-I?K4g04JC3+Bot0@WR]AL]NY>L]W`;H\_ZMP(R$nFEhmMFEhm\FCf]=G[YE&B5W_6@qBP"ATBG
-BE-*4@E-,f4DK?pa4s4BSDKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X205tT5Ec#5pDe*FB30I
-f*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'
-(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/pharmacode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp pharmacode 0.0 2015050900 60269 60124
+%%BeginData: 91 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/pharmacode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /height 8 2.835 mul 72 div def
+ /nwidth 0.5 2.835 mul def
+ /wwidth 1.5 2.835 mul def
+ /swidth 1.0 2.835 mul def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /height height cvr def
+ /nwidth nwidth cvr def
+ /wwidth wwidth cvr def
+ /swidth swidth cvr def
+
+ % Validate the input
+ barcode length 1 lt barcode length 6 gt or {
+ /bwipp.pharmacodeBadLength (Pharmacode must be 1 to 6 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.pharmacodeBadCharacter (Pharmacode must contain only digits) //raiseerror exec
+ } if
+ } forall
+ barcode cvi dup 3 lt exch 131070 gt or {
+ /bwipp.pharmacodeBadValue (Pharmacode value must be between 3 and 131070) //raiseerror exec
+ } if
+
+ % Create the human readable text
+ /txt barcode length array def
+ 0 1 barcode length 1 sub {
+ /i exch def
+ txt i [barcode i 1 getinterval 0 0 () 0] put
+ } for
+
+ % Convert the integer into the paramacode string
+ /barcode barcode cvi 1 add 2 17 string cvrs def
+ /barcode barcode 1 barcode length 1 sub getinterval def
+
+ /barlen barcode length def % Length of the code
+ /sbs barlen 2 mul array def
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ /enc barcode i 1 getinterval def
+ enc (0) eq {
+ sbs i 2 mul nwidth put
+ } {
+ sbs i 2 mul wwidth put
+ } ifelse
+ sbs i 2 mul 1 add swidth put
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ /txt txt
+ /textxalign (center)
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/pharmacode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER pharmacode--
@@ -2169,38 +6569,104 @@ f*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'
% --EXAM: 117480
% --EXOP: includetext showborder
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp pharmacode2 0.0 0 0 0
-%%BeginData: 30 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05tT5E c# 5pDe*E 7H\
-`B!23JD%DfBf4Df 0WZ5* @]T @UX : eDe *FB 5*@ ]TA8c@ -A 9)+&+D ,%u
-F(LLj055<6Cis9" FCf]= +D, %uF (L Lj 05+ p2B 4uCC"H kQ ZE-,f4 DKC
-uE06;5UBl7R*H#R >X4a Vtc Ou 8C 3Df Bf4 Df0 WCP,
-i2'Cia0N4aW>WI? IQm3 0 Ia 6V 33Q n!B lU*F E2M8P
-!+/T/Wr;\FcnqO1 OXV5/T c#U A Wei tP #Zpn AWe *t3A5;iFD5 Z2F-8_M1OYE
-cDfBf4Df0WCOu%N L8M=ag BkM + $+D> >#B4 uCM 09S,#@<,jr A7^p5L]NZN@
-UX:eDe*FB@Yb;Q: m,jG04 K-> E,[F KBOP pu@ :O4dAMQS\A 5$QPB67gI.T
-CV1/Tc#A@r!2`BO Ppu@: O4dA KYi4F *&O6 AKW ]MFDi9[+Co 2!BlnDL061K
-8F(Jp'Ec5u]5CJ\ o@UX: eDe*F +OuS7 OP% Kk@LcLVpP& bn&@WuO*E%Z
-*C@<-3n@rGmh11F [&6YKnK @:OCjE fM_NG Af' TEa`Hn+Ac` [Ec#5pDe*E%
-D09oA+Cf>-FCAm$+E).6Gp$X3B5)I/0/%?SBldisEcQ)=P!=AX<.0p$@UX:eDe*FB/<VuK"HmA
-[5(j$k6K"#'P&bn&@WuO*E%Z*C@<-3n@rGmh11F[&<affeAWAcMGAf'TEa`Hn+Ac`[Ec#5pDe*
-E%G%#30AKYi4F*&O6AKYGnFE_;-DBLbY@;]Tu2Dd9M0JGI?0/%?SBldisEcQ)=P!=AX<%i?<F<
-G%$Eas#uAWgMc$'I*#!/LYb@<,jrA7^p5L]N[<HS9)r5*@^DG]Y'B+Bost@<,jrA7ZltL]NZ4L
-]E52NW=k8?'9G\P"76;DI[a0Eek9iV33Vf@VBh=&<[?_1G<3HF,1Bj$'I(tF(03H+Hd%o1G<3G
-EejaR6-D&?Ou?ubBkM+$P&-:;06;)BL]NB!b;1r;2ManeCm$S-Bo!:_1G<o[C`m1qEas#uAWeU
--1OF:RCkr(S4aW>WI?IQQ@;L`%P%p.>>DNB;!Jge_P!5%%G%#3M5*Dn$"-QP8G%#3M5*@^5DI[
-a0EZf'=>DN?:!/LY]L]iP6P)#2nP'AWo+DHW4P,XU#I?J.pASu"!FE/L8DI[a0EZf(P!KmJ>%r
- %3+P"_#pL]E53ASu"!FE3ORL]N[<HS9)r5*@^5DI[a0EZf(Z99M8DBQG;1+C\c"+BsX&L]N;5
-?&/Z?s,r/#99O+SG[b-'+DDs&L]CmmEej^$L]iP6P)#2nP'DD<83B!fEb0,A061WACh[cu@<+#
-1BQG;*BQGh9@WNZ$@WO2D@WNYr+D#G#F*)Gc@Yb)KCjU5B@ssMm>q^;EF<G[MF>%`IG]\1=Ch[
-O"NWs!)DKKH106CcMFEqe:AohO*L]fALE-*4@E-,f4DK?pa4s4BSDKKE0@<[lR0/%?WDJX$)AR
-TVB<0B7iOq*X205tT5Ec#5pDe*E7OuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&A
-TMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/pharmacode2 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp pharmacode2 0.0 2015050900 60956 60646
+%%BeginData: 96 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/pharmacode2 {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /height 4 def % Height of short bars in millimetres
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /height height cvr def
+
+ % Validate the input
+ barcode length 1 lt barcode length 8 gt or {
+ /bwipp.pharmacode2BadLength (Two-track Pharmacode must be 1 to 6 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.pharmacode2badCharacter (Two-track Pharmacode must contain only digits) //raiseerror exec
+ } if
+ } forall
+ barcode cvi dup 4 lt exch 64570080 gt or {
+ /bwipp.pharmacode2badValue (Two-track Pharmacode value must be between 4 and 64570080) //raiseerror exec
+ } if
+
+ % Create the human readable text
+ /txt barcode length array def
+ 0 1 barcode length 1 sub {
+ /i exch def
+ txt i [barcode i 1 getinterval 0 0 () 0] put
+ } for
+
+ /encstr 16 string def
+ /bhs 16 array def
+ /bbs 16 array def
+ /sbs 32 array def
+ /bar 1 25.4 div height mul def % bar height (mm)
+ /spc 1 25.4 div 72 mul def % bar width & spacing (1mm)
+
+ % Convert number into a base3 representation
+ /i 15 def
+ /val barcode cvi def
+ { % loop
+ val 0 eq {exit} if
+ val 3 mod dup
+ [3 1 2] exch get val exch sub 3 idiv /val exch def
+ encstr i [2 0 1] 4 -1 roll get put
+ /i i 1 sub def
+ } loop
+ /encstr encstr i 1 add 15 i sub getinterval def
+
+ % Generate the bar pattern
+ 0 1 encstr length 1 sub {
+ /i exch def
+ encstr i get dup
+ bhs i bar [1 1 2] 5 -1 roll get mul put
+ bbs i [0 bar 0] 4 -1 roll get put
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bhs bhs
+ /bbs bbs
+ /sbs [encstr length 2 mul {spc} repeat]
+ /txt txt
+ /textxalign (center)
+ /textyoffset 4
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/pharmacode2 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER pharmacode2--
@@ -2209,131 +6675,665 @@ TMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Code 25
% --EXAM: 01234567
-% --EXOP: version=iata includetext includecheck includecheckintext
+% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code2of5 0.0 0 0 0
-%%BeginData: 52 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2A MS 1921(, nOu
-8C305kfOBl@m1P! 5$b04 J@1 @rG m hP! 5$b 04] !=FC]E #G 9CL+Ci a0N
-1G<H[@r-9uARfCb @r!3! @;L !rO u" b7 @;K Xg@ <?'jBO t[ h+D,%u F(L
-Lj055<6Cis9"FCf ]=+D ,%u F( LL j05 5<6 Cis 9"@q
-]F`CM@[.AU&;>Am oLsA W ei &F Cf] =Ao DR/O iNV@0
-6CcMFE;/BAV^\V1 G<i]G] \4L A nH* qF GTaU 1G< EQBkM+$L]N Yp06UoIF(oQ
-1NXBK<A9Ds8EbSr uOu%#q FD5 Z 2F-< ^[F* )G: DJ+':E+P1q H\_]c23JDeE
--,f4DKC/fX(GdVF (LLtH] gXB P#RT (P%' TNO thst4d(eHE ckrV4aW>DP!
-5%OP!5$bI=%,/FE 2M8Ou %NL< IL$AO rfcH 05k fOBl@m1P!5 $bI?IQJE-,f
-4DKC/f1OYEX06Cc MFCoH /F<G[ :G][P 9DK M$nOu"b5AU &<<BmO>5FCf
-]=F(or3OtVtS06C cMFEqe: AohO*+ EV1>F Eqe :AohO*OtVt S05+p2B4uB0
-BOtmjBQTCjOu$QUEas#uAUBS"LbP!(P!4[^P#.<^HS8iPBlJ#D@rGmh12gb^@UWe7BOPpi@ru:
-&NZ^]-A7Zl=2'?aYF*&O7Df0Z*Bl5&3DJXS@A8,[jFE9)gEa`['AS#n&DfV"*I?IQXP"@<9@<-
-0qDBNCsEas#uAWgMG@;KXg@<?'jBOt[hH\_]cWI9q/Ou"b$BOt[hF*2>U!0T-o!/LYb@<-0qDM
-S=VWI$:4P!5$b04S[,@r$..D'3>%ARfLsF_r71@<,jrA7ZltP"UTbP,Vo!Ebo<)+DI"<L]W`SL
-]ETTH\_ceCjhIGOo^_%I?I,S@q]F`CNFW8L^IX*ARfLsF_upAP%p/ZL^K;[Ou%8iCh[EgFCerq
-ARfM&+C\c"@rGmh+C\c"Ch7LI94MXH@r$..D29m/!Kq;H04K->E,[F>De*E7De:k9@:V`=ARfL
-DBkM.%N[@>8@rHC.ARfg)6Z6LH+>Pes@q]F`CER/%B5)H1E,ol?Bk1dc0/%?SBldisEcQ)=P!=
-AX<%h]hEas#uAKYGjEas#uAV^=q@<-0qDN[\V1G<H[@r-9uARfCb@r!3/EckrV1OYEc06UoIF(
-oQ1F!*S-055<7F`VYFBjkg#>E0%F0ekC=0f(O=0ocSs0ekC;0ekC=0ocSq0f(O=0ekC=0ocSs0
-f(O=0ekC;0ocSq0ekC=0ekC=0ocSs0ekC=0ekC;0ocSq0f(O?0ekC;0ocSq0ekC;0f(O?0ocSs
-0ekC;0f(O=0ocSq0f(O=0f(O=0ocGo0f(O=0ocDn0ekC=>q]o#FC?:rNX@Kq0ekI=1GLU=NX@Q
-s0ekC;0ekI=NX@Kq1GLU=0ekI=NX@Qs1GLU=0ekC;NX@Kq0ekI=0ekI=NX@Qs0ekI=0ekC;NX@
-Kq1GL[?0ekC;NX@Kq0ekC;1GL[?NX@Qs0ekC;1GLU=NX@Kq1GLU=1GLU=NW_'k0en[j1GLUiO_
-@sZ"u.hg1GLVE"u@tg0f(PE"u.ng0f(PE"uA%i0ekDC"u.hg0f(PE"u@ti0ekDC"u.ni0ekDC"
-u.he1G^bG"u@tg1GLVE"u.ng1GLVE"u@tg0ekDC"Z%kf0elre@rH:)+Bsj11G^a?0en[m0ekC=
-1GOmo0ekI=1GOmo0ekI?0en[m0f(O=1GOmo0f(O?0en[m0f(U?0en[m1GLU=1GOmo1GLU?0en[
-m1GL[?0en[k1GL[?NWV!l1L2YE@<>poDeEco+Bsj10ekI?0en[m1GLU=1GOmo0f(O=1GOmo1G^
-a?0en[m0ekI=1GOmo1GL[?0en[m0f(U?0en[m0ekC=1GOmo1GLU?0en[m0f(O?0en[k0ekC;NW
-V'l0jPnc5*@^FATDj+Df0V=G%G]8Bl@mP@$5JU04K->E,[F>De*E7De:k9@:WDMEcYr5DN5]:D
-K9;uDeEs%F(Jl)6Z6LH+>PesG%G]8Bl@lB061K8F(Jp'Ec5u]5CJ\o04f$2F!,X;EcYr5DK?qD
-ATDj+Df1_2Ou"b$F!,%3@rmG+P"UsIOu"b$GDH61DI[aD!0U!%LbP!kOo]uo8Wkk_F)rI8DI[a
-N30Ia,!g9OG99NbI1G<fnL]D"(@rmemP%'4KP,XU;H\aA=WKI:1P"Cfm04J@1@q]:kF,gS]0et
-OA2)[BQ3Kc0OF(025@UX:nASrW)DI[L*A7]7aARfM&L]NY>I?IQ>F-:?\F-6QFF-6QeV33VfFE
-hmM@UX:nASrW)DI[L*A7]7aARfM&L]NY>I?IQm$'I)c@WR>*ASu"!L^K;<P'Mi`L]LsnEbo<)L
-]N[<HS9)r5*@^2@<,jrA7ZltL]NZ4@UX:eBOPq&P!5%gP')ps055<7G`k7R1QlmDFY@<D@j#?#
-@ric,DIe!T99M)P@WNZ++CfJUCiaZ\!G-.YP'M.oF<G9?>9IB`Eas#uAKY]C!Kp,j+CfVYCiaf
-`!H_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD<882sOCis9"@q]F`CO71F@WNZ$@<-
-0qDBNG1P&,2\Oo]-3@ric&BOt[hF*2>_99ORA@WNZ$@<-0qDBNG1P&+WLOo]WFOo]-3@rmG6P"
-Us`Bl7EsF_#&nBOt[hBl8$(G]\9TFEhmM@UX:nASrVp+C\c"@q]:kF!+t+ARfLsF_up8P"]=nE
-bo<)+CfVYCiaf`!H_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD%FEhmM@UX:nASrVp
-NWC83@<-0qDBNG5P&,2`Oo]Z9G]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>5?'9G\P#ZpWF(02
-5@UX:nASrW#F-:?\F-6Q8DI[aD$^+/GH$tiU4?P9;ASs.SEb0-)Bl7KjE\DKCF!+[0F(03;LbP
-!kI?I0-04JU9+Bot0@WR]AL]NY>L]W`;HY?u)B4uC8P(R$n@UaC$>9IurF-:!g!KmJ>!g6H.L]
-DjdK3]U6DI[L*A7]joG]\9cFEhmMFEhnUP#O)QE-*4@E-,f4DK?pa4s4BSDKKE0@<[lR0/%?WD
-JX$)ARTVB<0B7iOq*X204Sp2AMS1923Kq^A1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-o
-Eb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/code2of5 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code2of5 0.0 2015050900 67430 67109
+%%BeginData: 150 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/code2of5 {
+
+ 20 dict begin % Confine variable to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includecheck false def
+ /validatecheck false def
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+ /version (industrial) def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Validate input
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.code2of5badCharacter (Code 25 must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /checksum checksum barcode i get 48 sub barlen i sub 2 mod 0 ne {3 mul} if add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ validatecheck {
+ barcode barlen get checksum 48 add ne {
+ /bwipp.code2of5badCheckDigit (Incorrect Code 25 check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ /includecheck true def
+ } if
+
+ % Create an array containing the character mappings
+ /versions <<
+ /industrial
+ [ (1111313111) (3111111131) (1131111131) (3131111111)
+ (1111311131) (3111311111) (1131311111) (1111113131)
+ (3111113111) (1131113111) (313111) (31113)
+ ]
+ /iata
+ [ (1111313111) (3111111131) (1131111131) (3131111111)
+ (1111311131) (3111311111) (1131311111) (1111113131)
+ (3111113111) (1131113111) (1111) (311)
+ ]
+ /matrix
+ [ (113311) (311131) (131131) (331111) (113131) (313111)
+ (133111) (111331) (311311) (131311) (311111) (31111)
+ ]
+ /coop
+ [ (331111) (111331) (113131) (113311) (131131) (131311)
+ (133111) (311131) (311311) (313111) (3131) (133)
+ ]
+ /datalogic
+ [ (113311) (311131) (131131) (331111) (113131) (313111)
+ (133111) (111331) (311311) (131311) (1111) (311)
+ ]
+ >> def
+ versions version known not {
+ /bwipp.code2of5badVersion (Unrecognised Code 25 version) //raiseerror exec
+ } if
+ /encs versions version get def
+
+ /cs encs 0 get length def
+ /cw 0 encs 0 get {48 sub add} forall def
+ /ss encs dup length 2 sub get length def
+ /sw 0 encs dup length 2 sub get {48 sub add} forall def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /sbs barlen includecheck {1 add} if cs mul ss add ss add string def
+ /txt barlen includecheck {1 add} if array def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i cs mul ss add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i cw mul sw add textyoffset textfont textsize] put
+ } for
+
+ % Put the checksum and end characters
+ includecheck {
+ sbs barlen cs mul ss add encs checksum get putinterval
+ sbs barlen cs mul cs add ss add encs 11 get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen cw mul sw add textyoffset textfont textsize] put
+ } {
+ txt barlen [( ) barlen cw mul sw add textyoffset textfont textsize] put
+ } ifelse
+ } {
+ sbs barlen cs mul ss add encs 11 get putinterval
+ } ifelse
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/code2of5 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code2of5--
+% --BEGIN ENCODER industrial2of5--
+% --REQUIRES preamble raiseerror renlinear code2of5--
+% --DESC: Industrial 2 of 5
+% --EXAM: 01234567
+% --EXOP: includetext includecheck includecheckintext
+% --RNDR: renlinear
+%%BeginResource: uk.co.terryburton.bwipp industrial2of5 0.0 2015050900 57882 57606
+%%BeginData: 55 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/industrial2of5 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Get the result of encoding with code2of5 with version=industrial
+ options (dontdraw) true put
+ options (version) (industrial) put
+
+ /args barcode options //code2of5 exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/industrial2of5 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER industrial2of5--
+
+% --BEGIN ENCODER iata2of5--
+% --REQUIRES preamble raiseerror renlinear code2of5--
+% --DESC: IATA 2 of 5
+% --EXAM: 01234567
+% --EXOP: includetext includecheck includecheckintext
+% --RNDR: renlinear
+%%BeginResource: uk.co.terryburton.bwipp iata2of5 0.0 2015050900 57852 57582
+%%BeginData: 55 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/iata2of5 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Get the result of encoding with code2of5 with version=iata
+ options (dontdraw) true put
+ options (version) (iata) put
+
+ /args barcode options //code2of5 exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/iata2of5 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER iata2of5--
+
+% --BEGIN ENCODER matrix2of5--
+% --REQUIRES preamble raiseerror renlinear code2of5--
+% --DESC: Matrix 2 of 5
+% --EXAM: 01234567
+% --EXOP: includetext includecheck includecheckintext
+% --RNDR: renlinear
+%%BeginResource: uk.co.terryburton.bwipp matrix2of5 0.0 2015050900 57862 57590
+%%BeginData: 55 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/matrix2of5 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Get the result of encoding with code2of5 with version=matrix
+ options (dontdraw) true put
+ options (version) (matrix) put
+
+ /args barcode options //code2of5 exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/matrix2of5 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER matrix2of5--
+
+% --BEGIN ENCODER coop2of5--
+% --REQUIRES preamble raiseerror renlinear code2of5--
+% --DESC: COOP 2 of 5
+% --EXAM: 01234567
+% --EXOP: includetext includecheck includecheckintext
+% --RNDR: renlinear
+%%BeginResource: uk.co.terryburton.bwipp coop2of5 0.0 2015050900 57852 57582
+%%BeginData: 55 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/coop2of5 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Get the result of encoding with code2of5 with version=coop
+ options (dontdraw) true put
+ options (version) (coop) put
+
+ /args barcode options //code2of5 exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/coop2of5 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER coop2of5--
+
+% --BEGIN ENCODER datalogic2of5--
+% --REQUIRES preamble raiseerror renlinear code2of5--
+% --DESC: Datalogic 2 of 5
+% --EXAM: 01234567
+% --EXOP: includetext includecheck includecheckintext
+% --RNDR: renlinear
+%%BeginResource: uk.co.terryburton.bwipp datalogic2of5 0.0 2015050900 57877 57602
+%%BeginData: 55 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
+begin
+/datalogic2of5 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Get the result of encoding with code2of5 with version=datalogic
+ options (dontdraw) true put
+ options (version) (datalogic) put
+
+ /args barcode options //code2of5 exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/datalogic2of5 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER datalogic2of5--
+
% --BEGIN ENCODER code11--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Code 11
% --EXAM: 0123456789
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code11 0.0 0 0 0
-%%BeginData: 57 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2A MG odL_Q" 0Op
-s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW ei&
-Bl7EsF_#&nBOt[h +D,%u F(L Lj0 6U c? Bk1 XoA RfCb@r !3 !@;L!r Ou"
-b*DI[L*A7]joG]Y '?@; L!r Ou "b *DI [L* A7] 7aAR
-fLiDKKH7F<G1(Ci a0N1 G <i ]G ][P 9DK M#]O u"b5A
-U&<<BmO?H$Bd1uF Cf]=H# I;, F (KH Lq 3!Ne BOt mjBQT%2Ou% #qFD5Z2F-<^
-[F*)G:DJ+':E+P1 qH\_]c 23J D eE-, f4DK C/f X(GdVF(LLt H]gXBP#RT(P
- %'TNOthst4d(eH EckrV4 aW> DP!5 %OP! 5$b I=%,/FE2M8 Ou%NL<IL$AO
-rfcH05kfOBl@m1P !5$bI ?IQJ E-,f4 DKC/ f1O YEX06CcMFC oH/F<G[:G][
-P9DKM$nOu"b5AU& <<BmO >5FCf ]=F(o r3O tVtS06CcMF Eqe:AohO*+E
-V1>FEqe:AohO*Ot VtS05+p 2B4uB0 BOtmj BQT CjOu"b&DI[ `1>E/nB0ekC
-=0ocGo0ekC=0ocGm1GLU?0ocGo1GLU=0ocGm0f(O?0ocGo0f(O=0ocGm1G^a?0ocGm0ekI?0oc
-Go0ekI=0ocGo0ekC;0ocGm0f(O=0ocGm0f(U?0jTqu04J@1@q]:kF,gV^0etOA2)[BQ3A$CM04
-S[(Ectl-F,13e23KbO!/LZ3$@?8r@<-O"Cibb'OuQoZEarckEc[C-L]NZ4P!5%RI?I-W!/LYb@
-<,jrA7^p5L]N[<HX^E(@rGmhP!4[&P"]A!@<-O"Cibb'P$jGlHS8iPBlJ#D@rGmh0em-GA4($=
-Ea`I"ATEe]6Z6LH+>GSnD09oA+Cf>-FCAm$+E).6Gp$X3B5)I/+CT.u+Cno%BOu6<061K8F(Jp
-'Ec5u]5CJ\oI?I,S@UX:nASrW"@<,jrA7^p5Ou%8iCh[EgFCerqARfM&+C\c"Ch7L?$^*Z"04K
-->E,[F>De*E60k+R%9P&*SFD-[i6Z6LH+>GSn@ps7mDfd+2AKW]^+Cf(nEa`I"ATDi7F`V87B-
-:\tARfKuA8,[jFE9)gEa`['AS#n&DfV"*I?IP_@UX:nASrW"@<-0qDBNCsEbo<)L^K;RH\_]NH
-\_`OP#[[EOu%NL<%i-3D.@6j@r$-.Bl7EsF_#&nBOt[h+Eh10Bk1XoARfCb@r%6JHX^E(Ch7L?
-$Be#.L]W!OL]Mpe<IK4M!.C#1Ou"b$BOt[hF*2=SL]ESo04S[,@r$..D)-nIOu%moL]LsnEbo<
-)L]N[<HS9)r5*@]TBl7I++Cf(nEctl-F!+q#Eas#uAKY]C!Kp->99M(a@q]F`CNFW80d't>ARf
-LsF_riU@UX:nASrW)P,X6<P,X6EP%odROo]97A9a8ROo^_%04S[,@r$..D)*5DBOt[hF*2=T+C
-\c"Ch7K,Bp,HO$'K%Z!KmItDIe!TCm"g^1OYEW04S[,@r$..D)!/CBOt[hF*2=SL^TA\Ou"b$B
-Ot[hF*2=T+Cf(r@r$..D)*5DBOt[hF*2=SOo^@HP%p.9G%#3$A79Rk@q]F`CO71AF_tW%ARfLs
-L]NZ%HX^E(@rGmh+C\c"Ch7LI94D=M@q]:kF!+t+ARfLsF_rjr99O.=04K->E,[F>De*E60k+R
- %6YL%@CIDlLBlo@^8T&$VEcP`$F<EqhA7Zl<0d't>ARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS
-#n&DfV"*I?IQXHX^E(@rGmh+C\c"Ch7LI94D=M@q]:kF!+t+ARfLsF_rjr99O.$@<,jrA7Zlm@
-<-0qDMS=V!Kp)b@<,jk@<-E3@q]F`CNFW816P:nD3Apd04K->E,[F>De*E60k+R%6YL%@CIDlL
-BlnEV-V82cDfTl0@rrh\De*E%0eje\BOt[h+Co2!BlnD=E,ol?Bk1dc0/%?SBldisEcQ)=P!=A
-X<.0p004J@1@rGmh+C\c"@rGmhL]CmmEbo<)P"_#p055<6Cis9"@q]F`CER_>F_-^lI?IP_F(0
-25@UX:nASrW.F_tW%ARfLsOo^@CP&,p_Oo^`BOu"b5G]Y';@<-0qDBNh>D.@6j@r$.K!KmbP1N
-R#HL]D"(@rmG6P"Us`06hGSF,1*b1Pc$e!FfJXCh7L?!KsF/056S5Ou"b*DIdu7@q]:kG%#3.+
-C\c"@rGmh+DHW4P"_$3Ou"b&DIXf#DI[`1Bl7I+P"UroF(025BnutVCkr:Y!G-.YP'M.oF<G9?
->9IB`Eas#uAKY]C!Kp-$E,Te?FCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY9AG_c?U!Jgo
-+06hGSF-8^uDI\hnP"UTbP,W\FDf_'BOu%NL8:?XlBl7EsF_#&nBOt[hHQZd+Ebo<)L^K;;HZN
-Y;+C\c"Ch7L?#*NeY#*K!uDI[`1@q]F`CNFW80p51mH#mG9+C\c"Ch7L?#*NeY%$CX&DI[`1@q
-]F`CNFW816P:nH"h/+Cis9"@q]F`CM@[.AU&<D+EVjM+C\c"Ch7K,>9IB`EarckEcW@5BOt[hF
-*2=SL]NZ4G]7SB+EV1>FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'AWkDIXf#DI[`1@q]F`
-CNFW80p51m1Pc$e!Jgo+06hGSF-8^uDI\hnP"UTbP,W\FDf_'BOu%NL89B)u+C\c"Ch7L?!KmI
-f+C\c"@q]:kF!+t+ARfLsF_rmi!Kp-$E,Te?FCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY
-9AG^Xp\G]Y';@<-0qDBN/D!-iI$F!,R9G]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>5?'9GSG]
-Y';@<-0qDMS=V!F(QaG]7SB+EV1>FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD<<HDVj+
-C\c"Ch7L?#*NeY&s<9,DI[aD$^+/GH$t$\@WNZ$@<-0qDMSL[Ckr:Y!G-.YF!+t+ARfLsF_rjr
-99OR7DI[L*A7]7aARfLiDKKH7FF,-PG]Y';@<-0qDBN.+@UX:eBOPq&+Cf(r@r$..D)$hIP"^+
->Df[%CAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI=$'\F<G%$Ebo<)+Bsj+G]7SB+EV
-1>FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD<<HDVj+C\c"Ch7L?#*NeY%$CX&DI[aD$^
-+/GH$tiUI=$$EF!+q#Ebo<)L^'#YL^'"CASu"!L^TA=P'MJ=<BNAsEb0,A061WACh[cu@<+#B@
-WNYr+EM"5H\aA=WI9q$>q]Z#F!+[0F(03R@Yb&J!Jgf?;L<(gBkM+$I?K4g04JC3+Bot0@WR]A
-L]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU&<D06DG\+EVjMI?IP_DfBe@DfBf4Df0V=5!C*"Df0Z
--Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<6VA7[JMOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2
-#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/code11 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code11 0.0 2015050900 69086 68582
+%%BeginData: 158 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/code11 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includecheck false def
+ /validatecheck false def
+ /includetext false def
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (111131) (311131) (131131) (331111) (113131)
+ (313111) (133111) (111331) (311311) (311111)
+ (113111) (113311)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789-) def
+ /charvals 11 dict def
+ 0 1 10 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.code11badCharacter (Code 11 must contain only digits and dashes) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length def
+ validatecheck {
+ barlen 11 eq {
+ /bwipp.code11badLength (Code 11 cannot be 11 characters using check digits) //raiseerror exec
+ } if
+ /barlen barlen barlen 10 le {1} {2} ifelse sub def
+ } if
+
+ /numchecks includecheck validatecheck or {barlen 10 ge {2} {1} ifelse} {0} ifelse def
+ /checksum1 0 def /checksum2 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ /checksum1 checksum1 barlen i sub 1 sub 10 mod 1 add indx mul add def
+ /checksum2 checksum2 barlen i sub 9 mod 1 add indx mul add def
+ } for
+ /checksum1 checksum1 11 mod def
+ /checksum2 checksum2 checksum1 add 11 mod def
+ validatecheck {
+ numchecks 1 eq {
+ barcode barlen get barchars checksum1 get ne {
+ /bwipp.code11badCheckDigit (Incorrect Code 11 check digit provided) //raiseerror exec
+ } if
+ } {
+ barcode barlen get barchars checksum1 get ne
+ barcode barlen 1 add get barchars checksum2 get ne or {
+ /bwipp.code11badCheckDigits (Incorrect Code 11 check digits provided) //raiseerror exec
+ } if
+ } ifelse
+ /barcode barcode 0 barlen getinterval def
+ /includecheck true def
+ } if
+
+ /sbs barlen numchecks add 6 mul 12 add string def
+ /txt barlen numchecks add array def
+
+ % Put the start character
+ sbs 0 encs 11 get putinterval
+
+ /xpos 8 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ /enc encs indx get def
+ sbs i 6 mul 6 add enc putinterval
+ txt i [barcode i 1 getinterval xpos textyoffset textfont textsize] put
+ 0 1 5 { % xpos+=width of the character
+ /xpos exch enc exch get 48 sub xpos add def
+ } for
+ } for
+
+ % Put the checksum and end characters
+ includecheck {
+ barlen 10 ge {
+ sbs barlen 6 mul 6 add encs checksum1 get putinterval
+ sbs barlen 6 mul 12 add encs checksum2 get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum1 1 getinterval xpos textyoffset textfont textsize] put
+ /enc encs checksum1 get def
+ 0 1 5 { % xpos+=width of the character
+ /xpos exch enc exch get 48 sub xpos add def
+ } for
+ txt barlen 1 add [barchars checksum2 1 getinterval xpos textyoffset textfont textsize] put
+ } {
+ txt barlen [() xpos textyoffset textfont textsize] put
+ txt barlen 1 add [() xpos textyoffset textfont textsize] put
+ } ifelse
+ sbs barlen 6 mul 18 add encs 11 get putinterval
+ } {
+ sbs barlen 6 mul 6 add encs checksum1 get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum1 1 getinterval xpos textyoffset textfont textsize] put
+ } {
+ txt barlen [() xpos textyoffset textfont textsize] put
+ } ifelse
+ sbs barlen 6 mul 12 add encs 11 get putinterval
+ } ifelse
+ } {
+ sbs barlen 6 mul 6 add encs 11 get putinterval
+ } ifelse
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/code11 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code11--
@@ -2344,56 +7344,156 @@ L]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU&<D06DG\+EVjMI?IP_DfBe@DfBf4Df0V=5!C*"Df0Z
% --EXAM: BC412
% --EXOP: semi includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp bc412 0.0 0 0 0
-%%BeginData: 48 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04JEJ0 f" *3'Tt> :%5
-2X=FD5Z2F-8_M1G <3GEa s#u AWf 6 ?1G <9W DKK E0@<Wi +@ ;L!rOu "b*
-DI[L*A7]7aARfKu AmoLs AWe i&G %# 3$ A79 Rk@ q]F`CE R4 tCia0N 1G<
-H[@r-9uATVL.F<G 1(Ci a0N 1G <H [@r -9u ARf Cb@r
-#drFCf]=+D,%uF( LLj0 5 5< 6C is9 "F* (i2F E;PBE
-$/b$Cia0N1G<f\D .t,)@; L!r O u"b 5A U&</ Df0 ZZa-&53FCf ]=F(or3L^K;
-$06CcMFEqe:AohO *M#!2i 05+ p 2B4u CC!K o6W E-,f4DKCuE 06;5UBl7R*H
-#R>X4aVtcOu8C3D fBf4Df 0WC P,i2 'Cia 0N4 aW>WI?IQm3 0Ia6V33Qn!B
-lU*FE2M8P!+/T/W r;\Fc nqO1 OXV5/ Tc#U AWe itP#ZpnAWe *t3A5;iFD5Z
-2F-8_M1OYEcDfBf 4Df0W COu%N L8M>0 sG] [P9DKI"CAU &</Df0Z[/Wq
-nCFCf]=F(or3+EV 1>FE;/B AWe^01 G<i]G ]\4 LAnH*qF<G[ :G]\4LAnH*q
-FHS;?1G<EQBkM+$+D>>#B4uCM09S,4ASl..055<6Cis9"@q]F`CER_>F_-^l055<6Cis9"F*(i
-2FE;PBE$07CF_-^lI?IP_@UX:eBOPq&N[$5U3CcbD83o4(=u8uR;_^m";)Ud#6s3/L<Cp:K7TW
-DD9p.:c@q]:kG%#3.La/'?Ou%moL]N;UHXg_tEctl-F-8_M3+?<:@q]:kF-8_C!Kp->5*C/=P"
-:B/L]LsnEas#uAWgMY!KsF/@UX:eDe*FB5)96&9OhaEEctl-F-8_M@$5JU04K->E,[F=@l,nq@
-UWe7BOPpi@ru:&N]TQp1bga.D09oA+Cf>-FCAm$+E).6Gp$X3B5)I/+CT.u+Cei!Blmd"+DbV2
-FCfK6+D#e-AT2`6:G4AA@;0doATDg0EfrY8P#Qjm82"F\Ebo<)+C\c"@rGmhP%&TCCh[EgFCer
-qARfM&L]N[<I?IQm1G<6OARfLsF_up7Ou%moL]LsnEbo<)L]N[<HX^E(@rGmhP!4[&P"]A!@<-
-O"Cibb'P"T:uARfLsF`!9B04S[,@r$..D3@)G1OYEW04S[,@r$..D'3>%ARfLsF_upZP%p.9G%
-#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"UsTHS8iPBlJ#D@
-Uh5L11F[&6YL%@CIDlLBlo@\8T&$VEcP`$F<En;1bga.@q]F`CER/%B5)H1E,ol?Bk1dc0/%?S
-BldisEcQ)=P!=AX<%h]hEas#uAKYGjEas#uAV^=q@<-0qDN[\V1G<H[@r-9uARfCb@r!3/Eckr
-V1OYEc04f$2F!+\I#Ve%g0ekC;23%qs1GLU=1,1PE#Ve%g1GLU=1QD_q1,1L<1,1SF#Ve(h1,1
-R>0ocMo1GL[?0ekDC#Ve(h0ekI=16)Vp0ekI=1,1PE#Ve%g1,1U?0ocMo0ekO?0ekDC#Ve1k0e
-kC;0ocMo0ekC;2)-hG#Ve(h1GLX>0ocMo1GLX>0ekGD#Ve+i0ekF<16)Vp0ekC;1,1VG#Ve(h1
-,1L<1QD_q0ekC;1GL\G#Ve+i0ekC;1QD_q0ekF<1,1SF#Ve%g1bg^>16)Vp0ekF<1GLYF#Ve%g
-1bga?0ocMo1bga?0ekDC#Ve(h1,1O=16)Vp0ekI=1GLVE#Ve+i1,1O=0ocMo1,1L<1bg_F#Ve.
-j0ekF<0ocMo0ekC;1bgbG#Ve(h0ekC;1l_hr1bg^>0ekGD#Ve(h1bg^>0ocMo0ekF<0ekMF#Ve
-(h1GLU=16)Dj16)Gk0elss1G<fYF!+q#Ebo<)L]NY>L^9/[L]rqBP,4<tBl7EsF_#&nBOt[hHS
-9JcF<G%$Ebo<)L]NY>OpR:-I=!VhG]Y';@<-0qDNY<h1OYEdBl7EsF_#')FCB33F*)>>HQ[B=F
-,0g-DI[aD,Eb]_GqX,TF,0m\1G<ipFDu/>L]`erI=!VdDf^^7Ou"b5G][nCF,0gZ1OYEdL]E53
-@UX:nAT!;)P,Wd]Bp(ZC1G<H[A9]5,BOPq)@;L!-@UX:eDe*E%BnueQ9Ti&31NR#H+E27?+D#G
-#F!,17A9a81P'M.oF<G9?>9IB`Eas#uAKY]C!Kp,jL^]G_FEhnHDf_'BFCf]=H#I;,F(KG9FCf
-]=AoDR/+EV1>FE;/BAKY9AGV=#SF!,F?F,1*b!Ko6eP"9;)@r-9uARfCb@r$E6F(025E,Te?AS
-u"!+Cf(r@r$..D3@PTH"h/+Cis9"@q]F`CM@[.AU&<D+EVjM+C\c"Ch7K,>9IB`EarckEcW@5B
-Ot[hF*2>U!Kp,c@<-0qDMS^aCijoDE,Tf\!H_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)
-P'DD%FEhmM@UX:nASrVpNW<NsEbo<)L^]G_FEhnHDf_'BFCf]=H#I;,F(KG9FCf]=AoDR/+EV1
->FE;/BAKY9AG^Y`T05tiN+E27?L^9.EOu%NL<,$5[Cis9"F*(i2FE;PBE-i^K@WNZ2Df[%4DI[
-aD,a(f`GqX,TF!,F?F,0m\!Ko6eP#O)U@WNZ5@WR>*E,Tf\9Th1o4>1_dDD*Y`ASu<uDIm6s06
-:TD+Bot0@WQmP0TrD`P"Aq4@VBg*>9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3^->@WNYr+EM"5P
- %'4JOo^@?P#?X_!.C#_>p*j!@r-9uATVL.FF,Z_G]Y'MG]\@s<%i0/F<GL@FD5Z2F!*Y1+CoD
-.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$@Uh5L16OV[A1r(@/n8fPFCfK5H"(o:FDl%L@Wu
-O*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/bc412 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp bc412 0.0 2015050900 64995 64541
+%%BeginData: 148 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/bc412 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includecheck false def
+ /validatecheck false def
+ /includetext false def
+ /includecheckintext false def
+ /includestartstop false def
+ /semi false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ semi {
+ /includecheck true def
+ /includestartstop true def
+ } if
+
+ % Create a string of the available characters
+ /barchars (0R9GLVHA8EZ4NTS1J2Q6C7DYKBUIX3FWP5M) def
+ /charvals 35 dict def
+ 0 1 34 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.bc412badCharacter (BC412 must contain only digits and capital letters except O) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 35 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.bc412badCheckDigit (Incorrect BC412 check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ /includecheck true def
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (11111115) (13111212) (11131113) (12111213) (12121311)
+ (13131111) (12111312) (11131212) (11121411) (11151111)
+ (15111111) (11111511) (12131211) (13121112) (13111212)
+ (11111214) (12121113) (11111313) (13111113) (11121213)
+ (11141112) (11121312) (11141211) (14121111) (12121212)
+ (11131311) (13121211) (12111411) (14111211) (11111412)
+ (12111114) (14111112) (12141111) (11121114) (12131112)
+ (12) (111)
+ ] def
+
+ /sbs barlen 1 add 8 mul 5 add string def
+ includecheck {
+ /txt barlen 1 add array def
+ } {
+ /txt barlen array def
+ } ifelse
+
+ % Put the start character
+ includestartstop {
+ sbs 0 encs 35 get putinterval
+ /pos 2 def
+ /txtpos 3 def
+ } {
+ /pos 0 def
+ /txtpos 0 def
+ } ifelse
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ sbs pos encs indx get putinterval
+ txt i [barcode i 1 getinterval i 12 mul txtpos add textyoffset textfont textsize] put
+ /pos pos 8 add def
+ } for
+
+ % Put the checksum
+ includecheck {
+ sbs pos encs checksum get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen 12 mul txtpos add textyoffset textfont textsize] put
+ } {
+ txt barlen [() barlen 12 mul txtpos add textyoffset textfont textsize] put
+ } ifelse
+ /pos pos 8 add def
+ } if
+
+ % Put the stop character
+ includestartstop {
+ sbs pos encs 36 get putinterval
+ /pos pos 2 add def
+ } if
+
+ % Return the arguments
+ /sbs sbs 0 pos getinterval def
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/bc412 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER bc412--
@@ -2404,67 +7504,164 @@ O*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: A0123456789B
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp rationalizedCodabar 0.0 0 0 0
-%%BeginData: 59 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 061KCB l@ ltCh\3 ,A4
-(9G@:EYcH\`B!23 JD%Df Bf4 Df0 W Z5* @]T @UX :eDe*F B5 *@]TA8 c@-
-A9)+&+D,%uF(LLj 04A[= F*( i2F E; PB E$/ b$C ia0N1G <H [@r-9u ARf
-Cb@r!3!@;L!rOu" b7@; KXg @< ?' jBO t[h +D, %uF(
-LLj055<6Cis9"FC f]=+ D ,% uF (LL j05 5<6C is9"@
-q]F`CM@[.AU&;>A moLsAW ei& F Cf] =A oDR/ OiN V@06CcMFE; /BAV^\V1G<i
-]G]\4LAnH*qFGTa U1G<EQ BkM + $L]N YpDf Bf4 Df0WZY:js= EbTE(FEqh:P
-!+/J!Ko='%<$3-B l@m1H] kFA @;L! rP!+ /T5 ^eepOuSV6P ,4<rNWD;+NH
-B2`AWf3'OtDh\P' )pOOu %N5O tCcrF _-^l I?I TYP%BdtOuY 16E-,f4DKCt
-)Ou%NL<,Z_tBl@m 1H]g1 5P"@< KAU&< /Df 0Y>FCf]=Ao DR/OtDhQ06C
-cMFE;/BAKZ)+G]\ "@H=`6m Ou"b5A U&<BD e<U &ATT&:AU&< BDe<U&ATX(g
-Ou"b)ASGdjF<G7.BkM+$OtVtS04f$2F!+\I#Ve%g0ekI?0ocMo0ekC=1GLVE#Ve%g1GLU?0ocM
-q1GLU=0ekDC#Ve%i0ekI=0ocMq0ekC;1GLVE#Ve+i0ekC=0ocMo1GLU?0ekDC#Ve+k0ekC;0oc
-Mq0ekI=0ekDC#Ve%g1G^a?0ocMo0f(U?0ekDC#W"1i0f(O?0ocMq0f(O=0f(PE#W"1k0f(O=0o
-cMo0f(O?0f(PE#Ve%i1GL[?0ocMo1GL[?0f(PE#Ve%g1GL[A0ocMo0ekI?1GLUiOu$N_FE;P4E
-ccAEDfC%V@UX:eBOPq&NYF0%1,CaE2E*TU/L3A1/h9mr.RfLVI=!VV@<,jk@<-FL'JM6s1GgsI
-2`NfL,W[S2.mZKh7$9?SP#X/FBOPq)@;L"@'Tt>:1Pc$e!JhD9@q]:kG%#3.P!5$g@UX:eBOPq
-&P!4[&P"_$&P'DD<82"FjA9i?,CibCDOu8CYL]E53L_"iADe+-:@;L"J5*@m7@<,jk@<-FP5)9
-6&9ThT&G^Y`G06;2X@;L"@"HkX*1PcTu!JhD9F)uM5Cibb'OuQoZEarckEc[C-L]NZ4P!5%RI?
-I-1@<,jrA7^PsL]NZ4F)uM5Cibb'P$jGl@UX:eDe*E%@UX:eDe*FB@Yb&JWJCS<9QP8u@;L"J5
-*B<:E0>6g@;L%,FCB33F*)>>HS8iPBlJ#DEaa'(Df0!"BmO?$6Z6LD@UX:D@:VZ?FAm9iEcb6%
-DfC^u6Z6LD@UX:"F*(i2F<G"0A0>r8Df?h/BOPpi@ru:&F!,=BF*&O6AKYo/AKYo'+@RDJ+B0J
- %EZchb061K8F(Jp'Ec5u]5CIl3@WuO*E%Z0>FD5Z2@;KY(ARn/HA78qUE^F2F;flGgFAm:"E/
-m"IDe*9c@<*K3FCB33+CT.u+EMXCE$/Y(@<,ddFCfK6+Dl7BF<G%(+E)./+E(j75p/K:6Qg;f+
-@Ik9Ea`['AS#n&DfV"*I?ITYP#R5<L]LsnEas#uAWgMY!g9O0@UX:eDe*FB5)96&9O_pNH$3V4
-F-8_M@$5JU04K->E,[FM@<?4%DII?qH=^VSDe*9c@<+\CA4($=Ea`I"ATEeo6Z6LD@UX:"@W,e
-&+Dl7BF<G(3DKK<$DBNk8Cj@.6BkM.%F!+n/A0>r=D.7F"F!*%W,To,j0-Dki.k`Pr@;0doATD
-g0EfrY8P#Qjm82"F\Ebo<)+C\c"@rGmhP%&TCCh[EgFCerqARfM&L]N[<I?IQm1G<6OARfLsF_
-up7Ou%moL]LsnEbo<)L]Wa=HX^E(@rGmhP!4[&P"]A!@<-O"Cibb'P"T:uARfLsF`!9B04S[,@
-r$..D3@)G1OYEW@UX:eDe*E%@UX:eDe*FB@Yb&JWJCS<9OhaEEctl-F-8_M94MXH@r$..D3=oQ
-@q]F`CNFW8P!5$b04S[,@r$..D28a5BOt[hF*2>U&<^dkWJD+KC6CAr@;KXg@<?'jBOt[hHQZd
-+Eas#uAKYGjEbo<)L]N[<P"T7mEarckEcW@5BOt[hF*2>_99O.=04K->E,[FM@<?4%DII?qH=^
-VSDe*9c@<+\CA4($A@r"JHB5)IJ-:r)bDfTl0@rrh\De*9c@<*K#BOt[h+Co2!BlkJ:Ec6,8A7
-]:)061K8F(Jp'Ec5u]5CJ\o@UX:nAT![-OuS6t@UX:eDe*F8!+KAWCh7L?!KsFF9Tj[a3+?<:C
-h7L?!KsEk@<,jrA7Zlm@<-0qDMS=V9TjZS@UX:eDe*FB5*@]TBl7EsF_#&nBOt[h+EVXHAWeit
-P#O)U@WNZ$@<-0qDBNY2@r-9uARfCb@r$FI!KmJ3P#R5CP&-;XOu"b5G]Y';@<-0qDBNY2@r-9
-uARfCb@r$FI!KmJ3P#RSNOu"b9E,TfR!0T-o!/LYb@<-0qDMS@WWI$:4P!5$b055<7GT^L0@<-
-O"Ci^_.@<,jrA7ZltL]NZ4P"Uro04f$2+D#G#F!,17A9a81Ou%/gF!,1Q#a0"8DI\iTFEhmMBc
-pV&@UX:eDe*E%BnueQ9R(MpF!,R9G]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>5?'9Gg!/LZ3#
-CA+KE,Tf\5%SVAP!5%%LbP!kG]7SBOo^_%I?I-LP"9;)@r-9uARfCb@r$E6F(025@UX:nAT!;0
-P&,p[P,W#1@ric&BOt[hF*2>_99OR7DI[L*A7]7aARfLiDKKH7FF,-PG]Y';@<-0qDMS=VWEUK
-S@<,jk@<-E3@q]F`CNFW8L]NZ4G]7SB+EV1>FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'D
-D%FEhmM@UX:nAT!;)P,VZG!?cW+Df[%CAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?
-ITd!/LZ3#CA+KE,Tf\5%SVAF!+t+ARfLsF`!:7P!5%%LbP!kG]7SBOo^_%I?I,SBl7I++Cf(nE
-ctl-F!+q#Eas#uAKYGjEbo<)L]N[<L]NZ4P"Uro04f$2+D#G#F!,17A9a81Ou%/gF!+q#Ebo<)
-L^9/[ASu"@H$":Q+C\c"Ch7K,>9IB`Eas#uAKYGjEbo<)L]N[<L]NZ4G]7SB+EV1>FEqe:AohO
-*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD%055<7GT^L0@<-O"Ci^_.@<,jrA7Zlm@<-0qDMS=VWJC
-S<9Ti&31G<<W@j#?#@ric,DIe!T99M)P@WNZ$@<-0qDMSR]Ckr@[WF]sWP'M.oF<G%$Ebo<)L]
-N[<>9IB`Eas#uAKYGjEbo<)L]N[<L]NZ4G]7SB+EV1>FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H
-=\4)P'DD<<BNAsEb0,A061WACh[cu@<+#B@WNYr+EM"5H\aA=WI9q$>q]Z#F!+[0F(03R@Yb&J
-!Jgf?;L<(gBkM+$I?K4g04JC3+Bot0@WR]AL]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU&<D06DG
-\+EVjMI?IP_DfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<cWFD5
-Z2@;KY(ARn/HA78qUEfrDFA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P'
-)pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/rationalizedCodabar 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp rationalizedCodabar 0.0 2015050900 69398 68906
+%%BeginData: 156 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/rationalizedCodabar {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /altstartstop false def
+ /includecheck false def % Enable/disable checkdigit
+ /validatecheck false def
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (11111331) (11113311) (11131131) (33111111) (11311311)
+ (31111311) (13111131) (13113111) (13311111) (31131111)
+ (11133111) (11331111) (31113131) (31311131) (31313111)
+ (11313131) (11331311) (13131131) (11131331) (11133311)
+ ] def
+
+ % Create a string of the available characters
+ altstartstop {
+ /barchars (0123456789-$:/.+TN*E) def
+ } {
+ /barchars (0123456789-$:/.+ABCD) def
+ } ifelse
+ /charvals 20 dict def
+ 0 1 19 {charvals exch dup barchars exch 1 getinterval exch put} for
+ /bodyvals 16 dict def
+ 0 1 15 {bodyvals exch dup barchars exch 1 getinterval exch put} for
+ /ssvals 4 dict def
+ 16 1 19 {ssvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ barcode 0 1 getinterval ssvals exch known not
+ barcode barcode length 1 sub 1 getinterval ssvals exch known not or {
+ altstartstop {
+ /bwipp.rationalizedCodabarBadAltStartStop (Codabar start and stop characters must be one of E N T or *) //raiseerror exec
+ } {
+ /bwipp.rationalizedCodabarBadStartStop (Codabar start and stop characters must be one of A B C or D) //raiseerror exec
+ } ifelse
+ } if
+ 1 1 barcode length 2 sub {
+ barcode exch 1 getinterval bodyvals exch known not {
+ /bwipp.rationalizedCodabarBadCharacter (Codabar body must contain only digits and symbols - $ : / . +) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 0 def
+ 0 1 barlen 2 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ barcode barcode length 1 sub 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ /checksum 16 checksum 16 mod sub 16 mod def
+ validatecheck {
+ barcode barlen 1 sub get barchars checksum get ne {
+ /bwipp.rationalizedCodabarBadCheckDigit (Incorrect Codabar check digit provided) //raiseerror exec
+ } if
+ barlen string
+ dup 0 barcode 0 barlen 1 sub getinterval putinterval
+ dup barlen 1 sub barcode barlen 1 getinterval putinterval
+ /barcode exch def
+ /includecheck true def
+ } if
+
+ /sbs barlen includecheck {1 add} if 8 mul string def
+ /txt barlen includecheck {1 add} if array def
+
+ /xpos 0 def
+ 0 1 barlen 2 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ /enc encs indx get def
+ sbs i 8 mul enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval xpos textyoffset textfont textsize] put
+ 0 1 7 { % xpos+=width of the character
+ /xpos exch enc exch get 48 sub xpos add def
+ } for
+ } for
+
+ % Put the checksum character and stop character
+ includecheck {
+ % Put the checksum character
+ sbs barlen 8 mul 8 sub encs checksum get putinterval
+ includecheckintext {
+ txt barlen 1 sub [barchars checksum 1 getinterval xpos textyoffset textfont textsize] put
+ } {
+ txt barlen 1 sub [( ) xpos textyoffset textfont textsize] put
+ } ifelse
+ 0 1 7 { % xpos+=width of the character
+ /xpos exch encs checksum get exch get 48 sub xpos add def
+ } for
+ % Put the end character
+ /indx charvals barcode barlen 1 sub 1 getinterval get def
+ /enc encs indx get def % Get the indxth encoding
+ sbs barlen 8 mul enc putinterval % Put encoded digit into sbs
+ txt barlen [barcode barlen 1 sub 1 getinterval xpos textyoffset textfont textsize] put
+ } {
+ % Put the end character
+ /indx charvals barcode barlen 1 sub 1 getinterval get def
+ /enc encs indx get def % Get the indxth encoding
+ sbs barlen 8 mul 8 sub enc putinterval % Put encoded digit into sbs
+ txt barlen 1 sub [barcode barlen 1 sub 1 getinterval xpos textyoffset textfont textsize] put
+ } ifelse
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/rationalizedCodabar dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER rationalizedCodabar--
@@ -2475,141 +7672,343 @@ Z2@;KY(ARn/HA78qUEfrDFA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P'
% --EXAM: 0123456709498765432101234567891
% --EXOP: barcolor=FF0000
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp onecode 0.0 0 0 0
-%%BeginData: 133 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05k`>@ rG mhH\`B !23
-JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj
-05+p2B4uCE4rKcW Ou%#q FD5 Z2F -< ^[ F*) G:D J+':E+ P1 qH\_]c 23J
-DeE-,f4DKC/fX(G dVF( LLt H] gX BP# RT( P%' TNOt
-hst4d(eHEckrV4a W>DP ! 5% OP !5$ bI= %,/F E2M8O
-u%NL<IL$AOrfcH0 5kfOBl @m1 P !5$ bI ?IQJ E-, f4DKC/f1OY EX05+p2B4uB
-0BOtmjBQTCjOu"b #@<-0q DBN C sEas #uAW gMc 1G<ipFC])q F<E\.L]W`!L
-]rr$@UX:eDe*F8" c*2B9T B-6 P!+/ J%Xi \[$ [n1<OuS73O uS78OuS7<Ou
-PWhOu"b5G]Y';@< -0qDM SL[! KmbP1 G<fg @:N kYDKL[7Ou% moL]LsnEbo<
-)L]N[<HS9)r5*@^ DG][J 1@rri -P$iW YG] Y'B+EML1@q B.fFHQZ/NWC
-8Y!/LW8!/LV\P'A X$E+*6f @r?B2F )YPtA RfV "L]NY>Ou%N L<-3A,+DDs>
-E+*6f@r?CO!F$[U@<,jrA7ZltL]NZ4L]E52NW=k8?'9G\P"76JG]Y'MG]\`A@UX:eDe*FB@WQK
-s@qB.fFHQZf9Th1bDJsQ4@;KY(AU?(>@<6"C5*@]TDKTfZ5*@^>F`!:NL]N[<M#W83HS9)r5*@
-^>F_r78L]N[<L]W_WP"T\8D'3PU94D=NAWfrS!Kq\FF_r78+Du==+DI!3@UX=hP%p/)I?I-JDK
-TfP!0Tua@<6"CAp]\+I?IP_DKTe=>DN8sF_uJRP"ArB1N%>PL]D=8D281T95\lhL]NZ3@UX=hP
-#@GDP'CkeD2841F_up8P"T7mF(LMLP'DD<AM7qDD'3%9BcqM<F_-^lDKTfCOuS6tP!*NB"FH;S
-I=!V]+D,%uF(LLjI?ITYP"ArB1N%>PP%'4IP!+.FDKTe=>DN8bOu%NL<,QhqI?G)'1G<3OB45=
-]H\_`d)3SHl5*BB2!g4FaWKI67De<U&ATX)!Ou&85H]gR@P#O)CP!5$b04L).Ou%moL]LtJ@Yb
-&JWI'df@?NfmAnH*qFHQZ\!g4Fa94E\\M#WWnP"Ur=P'DD<87?q0%[&VW@<-0qDMT!i4aUCh!*
-t#9<+99VCh7L?)3R.0>DN;cI?IQ=@<-0qDMT<r4aUCh!Jg`3!/LW2!/LY]I?IQ=@<-0qDMTBt4
-aUCh!Jg`3!/LW2!Jg`3!/LW2!/LY]I?IP_@VK_'@;M)j>9IB`Eas#uAV_%0@<-0qDMT!iWKKr%
-LbP!kI?I0-+C]%t@:Wo31G<3ODK]H)+BostBl8*&CjUSn8Rc+K@rGmhL]ET2LbP!k?'6us@VK_
-'@;I&j+C]&&G%#36L]rrXI?I0-+Bost@<,jrA7^PtP"UTbP,V_0@VKI`A7UK'DJsQ4@;KY(AWe
-i&@VK_'@;I&j+C]&&G%#36I?I02@<,jrA7^PuL_>kEH\aA=WI9q$?'6us@X3',F,19g$'I(t@V
-K_%D/^V%+C]&&G%#36I?I0-Ou%n&M#W82HS9)r5*@^X!/LYbBl8$0E0=[d!g9O005?Y6Ou$Q]D
-KK`7+DQ]5Oo^@?Or9EU@VK_%D/^V4P"UN1!0V)Q$Bf4g!Kq\:Bl8$0E$/m<@VK_%D/^V4P"UN1
-!0U6CG^Y`G@X3',F!,0>@VK_%D/^V,Bl8$0E0=[d!KsFF983HIP%p/)@VK_%D/^V,Bl8$0E0=[
-d!KsF<!g4Fa983HIP#@HfI?I,SAn,n:#QKrC04\L5+C]V<ATNY-P"UT7Oq3^3L^&3<@ric'@<@
-[KL'.L>"Gd&@D0mpJ@ric)@rmG,Oq39X23Pe=1OXU'An,m)An,n<!KmtV1OYEd04n^8+D,,)L'
-RaA"HkPoA79R&A79S9!KmtV1OYF=L]N;4L^\W>H$!V=P!5%%L]`eN04\L5P!5$bL^8?>@ric'@
-<@[KL'.L>"Gd&@D0mpJ@ric)@rmG,Oq39X23Pe=1OXU'An,m)An,n<!KmtV1OYEd04n^8+D,,)
-L'RaA"HkPoA79R&A79S9!KmtV1OYF=I?I,S@rGmhGAhM4F,10d$'I*#$&JV;!.-A5P!5$bBo!(
-Y4aShkL&uac1OXU'@YP%dOu%NL<JUX2!Ffb\G%#3M@Yb)KWI$:5P!5$b@VK_'@;I'$L]NY>L]W
-_WP"T7uDK]H)+DR'4@ZkJ^$Bf4g!Kq\:Bl8*&C`mI8@VK_'@;I'$P"T8I;Nc9QP"9)$A7]t'Eb
-'56Bcpl!DK]H)+C]&&G%#3M@Yb&JWKKn`P%p/)@VK_'@;I&qBl8*&Cm&7`!KsF<!g4Fa94F&^P
-'DD<87QRKATr'5A93P5@rGmhGAhM4F,1-c98EY4Cm'$T@rmA-!0RJ@!0V2G@rGmhGAhM4F,0g+
-De*F'DfTB0L]ET2L'!R%!Kq\UP#O)V@:D)K1E]nX+,1j;LbFK(J;?.=*Irr-L)YZ!4bac'Ld$P
-(J;@!U*^GN_L)iO8>D=(^Lg>`O5_ra$%mYq`L)e!bCPEbCLi%k^^kcl_%`!mAL)Id_FbUXHLj"
-L^^kd8j'>TEML'teQI"hmAL&d9h*[$1;Q\HM'L&d]t)^'k8SV@q'L&dg"%j6T,VhQ1aL&e9/)P
-DfbXbIUaL&eB2%\SOVZ\B?jL&eW9'qg9][Y>6aL&ec=';1'[\qUTcL&el@#G?eOa+bRAL&fDO)
-IS:"c%[!AL&fMR%Ub"kdtS`JL&fbY'juareqOWAL&fn]'4?Opg4fuCL&g"`#@N8dj+\E/L&g=i
-']=]Gk(X<&L&gIm'&\KEl@oZ(L&gRp#2k49nV.Y6L&ge!$/gO<oS*P-L&h"'"5nn7%u),:L&i*
-F*>!r+)ho:CL&i<L(D)<%*ek1:L&iZV*0>mU.u"t(L&il\(6F7O/qsjtL&j)b)3BRR222j-L&j
-2e%?Q;F3JJ3/L&j>i$]p)D4GF*&L&jf!*)M@j984?]L&k#'(/T_d:506TL&k5-),Q%g<JD5bL&
-k>0%8_c[=b[SdL&kJ4$W)QY>_WJ[L&ke=(sn!<AVLoGL&kn@%+'_0Bnd8IL&l%D$IFM.Ck`/@L
-&l:K&^Z75EeXnIL&lCN"jhu)G_Q=IL&m'a*&**JMhW-(L&m9g(,1IDNeS#tL&mKm))-dGQ%g#-
-L&mTp%5<M;R>)A/L&m`t$S[;9S;%8&L&n'((pJ_qV1o\gL&n0+%'YHeWJ2%iL&n</$F#6cXG-q
-`L&nQ6&[6ujZA&[iL&nZ9"gE^^\:t*iL&o2H(iY31`J,(GL&o;K$ugq%abCFIL&oGO$?1_#b_?
-=@L&o\V&TEI*dY8'IL&oeY"`T1sfS0KIL&p7f&FbDTie@a.L&p@i"Rq-Hk_90.L&qm?*XIK%(P
-Wq9L&r<K)[M0"*JP@9L&rEN%g[mk-\`UsL&rl[)Mj+L/VY$sL&ru^%Z#i@1PQd'L&s5e'o7SG2
-MMZsL&sAi'8VAE3ee#uL&sJl#De*97tr!SL&t#&)G#Sa9njESL&t,)%S2<U;hc/\L&tA0'hF&\
-<e_&SL&tM4'1diZ>)!DUL&tV7#=sRN@tkiAL&tq@'Zc"1Aqg`8L&u(D'$,e/C5*):L&u1G#0;N
-#EJ>(HL&uCM$-7i&FG9t?L&uUS"3?2uLP?csL'!9f)CU=ANJ82sL'!Bi%Od&5PD0r'L'!Wp'e"
-e<QA,hsL'!ct'.AS:RYD1uL'!m"#:P<.UP9VaL'"3+'W?`fVM5MXL'"?/&u^NdWeLkZL'"H2#,
-m7XZ%`jhL'"Z8$)iR[["\a_L'"l>"/pqU_hK"AL'#>K'PN4&`eFn8L'#JO&nm"$b(^7:L'#SR#
-&&_md=r6HL'#eX$##%pe:n-?L'$"^")*DjiJ%p-L'$@h#j@!EjG!g$L'%[8*#OD4$\fQ:L'%m>
-()Vc.%YbH1L'&*D)&S)1'o!G?L'&3G%2ag%)28eAL'&?K$Q+U#*/4\8L'&ZT(mp$[-&*,$L'&c
-W%%)bO.>AJ&L'&o[$CHPM/;=@rL''/b&X\:T156+&L''8e"dk#H3/.O&L''et(g)Lp7>;LYL''
-o"$s85d8VRj[L'(&&$<W#b9SNaRL'(;-&Qjbi;MGK[L'(D0"^$K]@>5?GL'(n>#hXk6A;16>L'
-*'_(c[6PKn^:$L'*0b$oitDM1uX&L'*<f$93bBN.qNrL'*Qm&NGLIP(j9&L'*Zp"ZV5=TnX,gL
-'+0)#e5TkUkT#^L',8H&9rp3_M/>@L',AK"F,Y(%u),.L'/<I*<_*")ho:7L'/NO(BfHq*ek1.
-L'/lY*/'%L.u"sqL'0)_(5.DF/qsjhL'0;e)2*_I222j!L'0Dh%>9H=3JJ3#L'0Pl$\X6;4GF)
-oL'1#$*(5Ma984?QL'15*(.<l[:506HL'1G0)+92^<JD5VL'1P3%7GpR=b[SXL'1\7$Uf^P>_W
-JOL'2"@(rV.3AVLo;L'2+C%)dl'Bnd8=L'27G$H.Z%Ck`/4L'2LN&]BD,EeXn=L'2UQ"iQ,uLP
-?coL'3Eh)C1%?NJ82oL'3Nk%O?c3PD0r#L'3cr'dSM:QA,hoL'3p!'-r;8RYD1qL'4$$#:,$,U
-P9V]L'4?-'VpHdVM5MTL'4K1&u:6bWeLkVL'4T4#,HtVZ%`jdL'4f:$)E:Y["\a[L'5DK(hA@(
-`J,(;L'5MN$tP(qabCF=L'5YR$=nkob_?=4L'5nY&S-V!dY8'=L'6"\"_<>jiJ%p)L'6Lj#ip^
-D#DO34L'7s>)AIo0%>GW4L'8'A%MXX$'8@A=L'8<H'blB+(5<84L'8HL',60))MSV6L'8QO#8D
-mr,DI&"L'8lX'U4=U-ADqnL'9#\&sS+S.Y\:pL'9,_#*aiG0np:)L'9>e$'^/J1kl0uL'9r!(f
-Z4n7>;LUL':&$$rhrb8VRjWL':2($<2``9SNaNL':G/&QFJg;MGKWL';"?&CcF<@YP0<L'<3a(
-c6sNKn^9uL'<<d$oE\BM1uX"L'<Hh$8dJ@N.qNnL'<]o&N#4GP(j9"L'=9*&@@/qU4rr\L'>DJ
-&9NX1_M/><L'@m;*"7Q+$\fQ.L'A*A((>p%%YbH%L'A<G)%;6('o!G3L'AEJ%1Isq)28e5L'AQ
-N$Ohao*/4\,L'AlW(lX1R-&*+mL'AuZ%#foF.>AIoL'B,^$B0]D/;=@fL'BAe&WDGK156*oL'C
-#"(efYg7>;LML'C,%$quB[8VRjOL'C8)$;?0Y;2,ZVL'CP1#u$'X@>5?;L'D+A#gA#-K8(3oL'
-E?d'J+tCL5$*fL'EKh&hJbAMM;HhL'Ecp&M/Y@P(j8oL'F?+&?LTjU4rrTL'GJK&8[(*_M/>4L
-'Ig8(`\88"bm^2L'Ip;$lk!,$&0'4L'J'?$64d*&V^l;L'J?G#on[)+bgPuL'JoW#b6VS6&#qU
-L'L&"#[E)hJVF^uL'N<b#X!hI%u),,L'STM*<Ls$)ho:5L'SfS(BT<s*ek1,L'T/]*.inN.u"s
-oL'TAc(4q8H/qsjfL'TSi)1mSK222itL'T\l%>'<?3JJ3!L'Thp$\F*=7tr!ML'UG,)FB/a9nj
-EML'UP/%RPmU;hc/VL'Ue6'gdW\<e_&ML'Uq:'1.EZ>)!DOL'V:D(rD"5AVLo9L'VCG%)R`)Bn
-d8;L'VOK$GqN'EJ>(BL'VgS$,VE&LP?cmL'W]l)BsnANJ82mL'Wfo%O-W5PD0r!L'X'!'dAA<Q
-A,hmL'X3%'-`/:RYD1oL'XQ/(nu`jV1o\YL'XZ2%&/I^WJ2%[L'Xf6$DN7\Z%`jbL'Y)>$)3.[
-_hK";L'YbQ'Ole&`eFn2L'YnU&n6S$b(^74L'Z1]&RpJ#dY8';L'Zam&E8EN#DO32L'\6B)A7c
-2%>GW2L'\?E%MFL&'8@A;L'\TL'bZ6-(5<82L'\`P',$$+)MSV4L'])Z(m9U[-&*+sL']2]%$H
->O.>AIuL']>a$Bg,M0np:'L']Vi$'L#L6\ZFUL'^;''N0Yl7YV=LL'^G+&lOGj8qm[NL'^_3&Q
-4>i@>5?AL'`Ke(c$gPKn^9sL'`Th$o3PDM1uWuL'``l$8R>BObOH'L'aQ.&@.#s_1iMAL'e0?*
-"%E-$\fQ,L'eBE((,d'%YbH#L'eTK)%)**'o!G1L'e]N%17gs)28e3L'eiR$OVUq,DI%mL'f5]
-'T.VP-ADqdL'fAa&rMDN.Y\:fL'fYi&W2;M6\ZFML'gA('M=)e7YV=DL'gM,&k[lc;2,ZTL'h@
-D&B]_7K8(3mL'iWh'InhEL5$*dL'icl&h8VCObOGtL'jW/&?:Hl_1iM9L'n*<(`J,:"bm^0L'n
-3?$lXj.$&0'2L'nTJ&K6B3+bgPsL'p;%&6aerJVF^sL("<A*!V-+$\fQ(L("NG(']L%%YbGtL(
-"`M)$Yg('o!G-L("iP%0hOq)28e/L(#;](l!bR-&*+gL(#D`%#0KF.>AIiL(#ek&Vc#K6\ZFIL
-($M*'Lmfc8VRjIL($q6&OqK`@>5?5L(&]h(aatGKn^9gL(&on&gi>AObOGpL('c1&>k0j_1iM5
-L(+6>(`%i8"bm^,L(+HD&f-32&V^l5L(,;\&=/%[6&#qOL(/]g&2o7Q",7X&L(4BA'Foj-$&0'
-&L(4fM&IsO*+bgPgL(6M(&5IriJVF^gL(=<>&0?Q;%u),+L(G/U*<Cm+)ho:4L(GA[(BK7%-\`
-UlL(Gki)M*VS/VY$lL(H.q)1dMR222isL(HA"'7klL7tr!LL(I"4)F9)h9njELL(I:<)*rug<J
-D5SL(ILB'1%?a@tki:L(IpN'Z#M8Bnd8:L(J?Z&]'25LP?clL(K8t)BjhHNJ82lL(KQ')'O_GQ
- %g"sL(Kc-'-W)AUP9VZL(L29'VU6mWJ2%ZL(LVE&YXpj_hK":L(M=Y'Oc_-abCF:L(Mae&RgD
-+#DO31L(OfJ)A.]9%>GW1L(P)R)%hT8'o!G8L(P;X'+os2,DI%tL(P_d'Tn+^.>AItL(Q.p&Wq
-e[6\ZFTL(Qk/'N'Ss8VRjTL(T&m(bpaWKn^9rL(T8s&i#+R#DO3)L(XlK)@;-2%>GW)L(Y/S)$
-u$1'o!G0L(YAY'+'C+,DI%lL(Yee'T%PW.>AIlL(Zk.(eKGp7>;LJL(],n(b(1PKn^9jL(aZD(
-`A&A"bm^/L(jlI*!M'2$\fQ'L(k)O('TF,'8@A.L(kAW'a9=+,DI%hL(kqg'SV8U6\ZFHL(o8p
-(aXnO",7X-L)'lG(_)3:#DO3#L):;Q)?Y^2'8@A,L);.i(k[P[6\Z:DL([(4&Q+8oiJ%b1L'gP
--#uZK`ie@Y2L':P2"QY:>=G?n@L&pdLOu"b5@:CuH1E]nX",7WmL]rMI!/Li6$il(iL(XKB$AJ
-lfL^]"B!/M5A&HIV"L'[j9'SZbkL_tjK!/MeQ&:fQ\L'W<c,_cGPLa[uZJ;>n6!J#tlL(HV+6A
->b2LdZt#5_qsc!^MQ<L&jPq@"nZsL&cdZ&0Q]-JqaORL&cm]"<`F!LkYsRL&d<i!?d*t!JV-sL
-&h@1#S;^k"GR$jL&hR7!YC(f!JV-kL&qF2#RH.d"GR$bL'.O3&-R^j!eps`L'Rg7&-@Rt!JUj]
-L'.X6!XOM]&;C1X?'6us@q]:kF,10d$'I*#!/LZ3$%"=>P!5$b@rGmhGAhM4F!,1[99M8h"U:,
-uHZW\*2)-nM5*AQeHZW\*1,1SJ5)'4GP,XU;I?IT?BOPq&+DHW6M#WWnP'DD<8;IS.s+gZ%056
-S5Ou%mqBcpu3E0;ba@rme9L]ETTHXg_tEcW@;+Cf(nEcW@;P"UNOs,t3]G^Y`SI?I,S@UX:o@;
-m>nL^/_;L]iM9L]N;=L]E52L^AkGL]WA<L]rS<L^&YCL^8eCL]`G6L]E53L]rSCL]WA9L]N;;L
-]iM:L^AkFL^&Y;L^8eDL]`G>L^/_?L]rSBL]N;7L^8e?L]WA@L^AkEL]E54L^/_:L^&Y?L]`G;
-L]iM?L]E55L^8e@L^&Y<L]WA;L]N;4L^AkDL^/_CL]rS9L]iM6L]`G=L^&Y:L]E56L^8eEL]N;
-3L^AkCL]`GAL]WA:L^/_@L]rS8L]iM@L]N;?L^&YAL^/_<L^8e:L]rS?L^AkBL]iM<L]WA>L]`
-G9L]E57L^8e>L]rS>L^/_DL]N;<L^&Y8L^AkAL]E58L]iM>L]WA5L]`G7L]rS@L^8eFL]iMAL^
-&Y9L^Ak@L^/_=L]`G8L]N;5L]E59L]WA4L]N;6L]iM7L^&YBL]`G:L^8eAL^Ak?L]WA?L]rS=L
-]E5:L^/_EL]iM8L^8e;L]rSAL]`G5L^Ak>L]E5;L^&Y=L]WA8L^/_AL]N;:L]rS7L]iM;L]WA7
-L]E5<L^&YDL^Ak=L]`G@L]N;9L^8eBL^/_BL]rS;L]E5=L]N;8L]WA6L^Ak<L]iMBL^8e=L^&Y
->L^/_9L]`G<L]iM=L^/_>L]E5>L]N;>L]WA=L^Ak;L^&Y@L]rS:L]`G?L^8e<?'6us@UaD76';
-P;1G<3NF,3,F$'I*#!/LZ35^P.uP!5$b04\X(+Cf(nEcW@4@<-3nE$/kN"HmSa99Mr(!b,SYD.
-.B+BnunTCkr+T!Kp)eG]8fsOp$R@P&6@<04Ap3+Cf(nEcW@4@<-3nE$/kN"HmSW!g3SI99Mr(!
-b,SYD..B+BnunTCkr1V!Kp)eG]8fsOp$R@P&6@<A7]86E+*ftP&QQeHX^H*+DHW6BOtmjBQTDR
-L^9/%P'CGLF!,1Q!bc.ZB4uCMCkr@[2Ni<5P#Pt'A!1e>F(:@9HX^H*+DHW6BOtmjBQTDRL^9/
- %P'CGLF!,1Q"__I]B4uCMCkr@[2Ni<5P#Pt'@j#3$A!1eo"FFTeF!,1Q!,,qXB4uCMCkr@[2N
-i;oBQG;1L]qI'BkM+$P&,p[OuAJJI?IQ?ARcikF(:@9HX^H*+DHW3BOtmjBQTDRL^9/%P'CGLF
-!,1Q#\[d`B4uCMCkr@[2Ni<5P#Qjm83B!fEb0,A061WACh[cu@<+#1@WNZ$@WO23BQG;*BQGhJ
-@WNYr+C]#*P%'4JP,Wec5IaSWMEgR#Z@.mgMEeUJls28dG]Y'MG]YT\AU&<A@;KXjDN4j9AS-$
-;FCf]=AoDR/OioD"AU&<BDe<U&ATW_/06CcMFEh_9AohO*MS>LHRP/SuF<GL@FD5Z2F!*Y1+Co
-D.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$Df0,rDe*FB30If*F_`U>D_?-CEcQG7F`MSBDD
-#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/onecode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp onecode 0.0 2015050900 101896 104906
+%%BeginData: 335 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/onecode {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /height 0.15 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /height height cvr def
+
+ /barlen barcode length def
+
+ % Create the human readable text
+ /txtdict <<
+ 2 dup
+ 5 dup
+ barcode 5 1 getinterval (9) eq {14} {11} ifelse dup
+ 20 dup
+ 25 dup
+ 29 dup
+ >> def
+ /txt barlen 6 add array def
+ /spacecnt 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ txtdict i known {
+ txt i spacecnt add [( ) 0 0 () 0] put
+ /spacecnt spacecnt 1 add def
+ } if
+ txt i spacecnt add [barcode i 1 getinterval 0 0 () 0] put
+ } for
+ /txt txt 0 barcode length spacecnt add getinterval def
+
+ /normalize {
+ /base exch def
+ /num exch def
+ num length 1 sub -1 1 {
+ /i exch def
+ num i 1 sub 2 copy get num i get base idiv add put
+ num i num i get base mod put
+ } for
+ { %loop - extend input as necessary
+ num 0 get base lt {exit} if
+ /num [0 num {} forall] def
+ num 0 num 0 get num 1 get base idiv add put
+ num 1 num 1 get base mod put
+ } loop
+ % Trim leading zeros
+ /num [/i true def num {dup 0 eq i and {pop} {/i false def} ifelse} forall] def
+ num length 0 eq {/num [0] def} if
+ num
+ } bind def
+
+ /bigadd {
+ 2 copy length exch length
+ 2 copy sub abs /offset exch def
+ lt {exch} if
+ /a exch def /b exch def
+ 0 1 b length 1 sub {
+ dup a exch offset add 2 copy get b 5 -1 roll get add put
+ } for
+ a
+ } bind def
+
+ % Conversion of data fields into binary data
+ barlen 20 eq {[0]} if
+ barlen 25 eq {[1]} if
+ barlen 29 eq {[1 0 0 0 0 1]} if
+ barlen 31 eq {[1 0 0 0 1 0 0 0 0 1]} if
+ /binval exch [barcode 20 barlen 20 sub getinterval {48 sub} forall] bigadd def
+ /binval [binval {} forall barcode 0 get 48 sub] def
+ /binval [binval {5 mul} forall] [barcode 1 get 48 sub] bigadd 10 normalize def
+ /binval [binval {} forall barcode 2 18 getinterval {48 sub} forall] def
+
+ % Conversion of binary data into byte array
+ /bytes 13 array def
+ /bintmp [binval {} forall] def
+ 12 -1 0 {
+ /i exch def
+ 0 1 bintmp length 2 sub {
+ /j exch def
+ bintmp j 1 add 2 copy get bintmp j get 256 mod 10 mul add put
+ bintmp j bintmp j get 256 idiv put
+ } for
+ bytes i bintmp bintmp length 1 sub get 256 mod put
+ bintmp bintmp length 1 sub 2 copy get 256 idiv put
+ } for
+
+ % Generation of 11-bit CRC on byte array
+ /fcs 2047 def
+ /dat bytes 0 get 5 bitshift def
+ 6 {
+ fcs dat xor 1024 and 0 ne {
+ /fcs fcs 1 bitshift 3893 xor def
+ } {
+ /fcs fcs 1 bitshift def
+ } ifelse
+ /fcs fcs 2047 and def
+ /dat dat 1 bitshift def
+ } repeat
+ 1 1 12 {
+ bytes exch get 3 bitshift /dat exch def
+ 8 {
+ fcs dat xor 1024 and 0 ne {
+ /fcs fcs 1 bitshift 3893 xor def
+ } {
+ /fcs fcs 1 bitshift def
+ } ifelse
+ /fcs fcs 2047 and def
+ /dat dat 1 bitshift def
+ } repeat
+ } for
+
+ % Conversion from binary data to codewords
+ /codewords 10 array def
+ 9 -1 0 {
+ /i exch def
+ i 9 eq {
+ /b 636 def
+ } {
+ /b 1365 def
+ } ifelse
+ 0 1 binval length 2 sub {
+ /j exch def
+ binval j 1 add 2 copy get binval j get b mod 10 mul add put
+ binval j binval j get b idiv put
+ } for
+ codewords i binval binval length 1 sub get b mod put
+ binval binval length 1 sub 2 copy get b idiv put
+ } for
+
+ % Inserting additional information into codewords
+ codewords 9 codewords 9 get 2 mul put
+ fcs 1024 and 0 ne {
+ codewords 0 codewords 0 get 659 add put
+ } if
+
+ % Conversion from codewords to characters
+ /tab513 [
+ 31 7936 47 7808 55 7552 59 7040 61 6016 62 3968 79 7744 87
+ 7488 91 6976 93 5952 94 3904 103 7360 107 6848 109 5824 110 3776
+ 115 6592 117 5568 118 3520 121 5056 122 3008 124 1984 143 7712 151
+ 7456 155 6944 157 5920 158 3872 167 7328 171 6816 173 5792 174 3744
+ 179 6560 181 5536 182 3488 185 5024 186 2976 188 1952 199 7264 203
+ 6752 205 5728 206 3680 211 6496 213 5472 214 3424 217 4960 218 2912
+ 220 1888 227 6368 229 5344 230 3296 233 4832 234 2784 236 1760 241
+ 4576 242 2528 244 1504 248 992 271 7696 279 7440 283 6928 285 5904
+ 286 3856 295 7312 299 6800 301 5776 302 3728 307 6544 309 5520 310
+ 3472 313 5008 314 2960 316 1936 327 7248 331 6736 333 5712 334 3664
+ 339 6480 341 5456 342 3408 345 4944 346 2896 348 1872 355 6352 357
+ 5328 358 3280 361 4816 362 2768 364 1744 369 4560 370 2512 372 1488
+ 376 976 391 7216 395 6704 397 5680 398 3632 403 6448 405 5424 406
+ 3376 409 4912 410 2864 412 1840 419 6320 421 5296 422 3248 425 4784
+ 426 2736 428 1712 433 4528 434 2480 436 1456 440 944 451 6256 453
+ 5232 454 3184 457 4720 458 2672 460 1648 465 4464 466 2416 468 1392
+ 472 880 481 4336 482 2288 484 1264 488 752 527 7688 535 7432 539
+ 6920 541 5896 542 3848 551 7304 555 6792 557 5768 558 3720 563 6536
+ 565 5512 566 3464 569 5000 570 2952 572 1928 583 7240 587 6728 589
+ 5704 590 3656 595 6472 597 5448 598 3400 601 4936 602 2888 604 1864
+ 611 6344 613 5320 614 3272 617 4808 618 2760 620 1736 625 4552 626
+ 2504 628 1480 632 968 647 7208 651 6696 653 5672 654 3624 659 6440
+ 661 5416 662 3368 665 4904 666 2856 668 1832 675 6312 677 5288 678
+ 3240 681 4776 682 2728 684 1704 689 4520 690 2472 692 1448 696 936
+ 707 6248 709 5224 710 3176 713 4712 714 2664 716 1640 721 4456 722
+ 2408 724 1384 728 872 737 4328 738 2280 740 1256 775 7192 779 6680
+ 781 5656 782 3608 787 6424 789 5400 790 3352 793 4888 794 2840 796
+ 1816 803 6296 805 5272 806 3224 809 4760 810 2712 812 1688 817 4504
+ 818 2456 820 1432 824 920 835 6232 837 5208 838 3160 841 4696 842
+ 2648 844 1624 849 4440 850 2392 852 1368 865 4312 866 2264 868 1240
+ 899 6200 901 5176 902 3128 905 4664 906 2616 908 1592 913 4408 914
+ 2360 916 1336 929 4280 930 2232 932 1208 961 4216 962 2168 964 1144
+ 1039 7684 1047 7428 1051 6916 1053 5892 1054 3844 1063 7300 1067 6788 1069
+ 5764 1070 3716 1075 6532 1077 5508 1078 3460 1081 4996 1082 2948 1084 1924
+ 1095 7236 1099 6724 1101 5700 1102 3652 1107 6468 1109 5444 1110 3396 1113
+ 4932 1114 2884 1116 1860 1123 6340 1125 5316 1126 3268 1129 4804 1130 2756
+ 1132 1732 1137 4548 1138 2500 1140 1476 1159 7204 1163 6692 1165 5668 1166
+ 3620 1171 6436 1173 5412 1174 3364 1177 4900 1178 2852 1180 1828 1187 6308
+ 1189 5284 1190 3236 1193 4772 1194 2724 1196 1700 1201 4516 1202 2468 1204
+ 1444 1219 6244 1221 5220 1222 3172 1225 4708 1226 2660 1228 1636 1233 4452
+ 1234 2404 1236 1380 1249 4324 1250 2276 1287 7188 1291 6676 1293 5652 1294
+ 3604 1299 6420 1301 5396 1302 3348 1305 4884 1306 2836 1308 1812 1315 6292
+ 1317 5268 1318 3220 1321 4756 1322 2708 1324 1684 1329 4500 1330 2452 1332
+ 1428 1347 6228 1349 5204 1350 3156 1353 4692 1354 2644 1356 1620 1361 4436
+ 1362 2388 1377 4308 1378 2260 1411 6196 1413 5172 1414 3124 1417 4660 1418
+ 2612 1420 1588 1425 4404 1426 2356 1441 4276 1442 2228 1473 4212 1474 2164
+ 1543 7180 1547 6668 1549 5644 1550 3596 1555 6412 1557 5388 1558 3340 1561
+ 4876 1562 2828 1564 1804 1571 6284 1573 5260 1574 3212 1577 4748 1578 2700
+ 1580 1676 1585 4492 1586 2444 1603 6220 1605 5196 1606 3148 1609 4684 1610
+ 2636 1617 4428 1618 2380 1633 4300 1634 2252 1667 6188 1669 5164 1670 3116
+ 1673 4652 1674 2604 1681 4396 1682 2348 1697 4268 1698 2220 1729 4204 1730
+ 2156 1795 6172 1797 5148 1798 3100 1801 4636 1802 2588 1809 4380 1810 2332
+ 1825 4252 1826 2204 1857 4188 1858 2140 1921 4156 1922 2108 2063 7682 2071
+ 7426 2075 6914 2077 5890 2078 3842 2087 7298 2091 6786 2093 5762 2094 3714
+ 2099 6530 2101 5506 2102 3458 2105 4994 2106 2946 2119 7234 2123 6722 2125
+ 5698 2126 3650 2131 6466 2133 5442 2134 3394 2137 4930 2138 2882 2147 6338
+ 2149 5314 2150 3266 2153 4802 2154 2754 2161 4546 2162 2498 2183 7202 2187
+ 6690 2189 5666 2190 3618 2195 6434 2197 5410 2198 3362 2201 4898 2202 2850
+ 2211 6306 2213 5282 2214 3234 2217 4770 2218 2722 2225 4514 2226 2466 2243
+ 6242 2245 5218 2246 3170 2249 4706 2250 2658 2257 4450 2258 2402 2273 4322
+ 2311 7186 2315 6674 2317 5650 2318 3602 2323 6418 2325 5394 2326 3346 2329
+ 4882 2330 2834 2339 6290 2341 5266 2342 3218 2345 4754 2346 2706 2353 4498
+ 2354 2450 2371 6226 2373 5202 2374 3154 2377 4690 2378 2642 2385 4434 2401
+ 4306 2435 6194 2437 5170 2438 3122 2441 4658 2442 2610 2449 4402 2465 4274
+ 2497 4210 2567 7178 2571 6666 2573 5642 2574 3594 2579 6410 2581 5386 2582
+ 3338 2585 4874 2586 2826 2595 6282 2597 5258 2598 3210 2601 4746 2602 2698
+ 2609 4490 2627 6218 2629 5194 2630 3146 2633 4682 2641 4426 2657 4298 2691
+ 6186 2693 5162 2694 3114 2697 4650 2705 4394 2721 4266 2753 4202 2819 6170
+ 2821 5146 2822 3098 2825 4634 2833 4378 2849 4250 2881 4186 2945 4154 3079
+ 7174 3083 6662 3085 5638 3086 3590 3091 6406 3093 5382 3094 3334 3097 4870
+ 3107 6278 3109 5254 3110 3206 3113 4742 3121 4486 3139 6214 3141 5190 3145
+ 4678 3153 4422 3169 4294 3203 6182 3205 5158 3209 4646 3217 4390 3233 4262
+ 3265 4198 3331 6166 3333 5142 3337 4630 3345 4374 3361 4246 3393 4182 3457
+ 4150 3587 6158 3589 5134 3593 4622 3601 4366 3617 4238 3649 4174 3713 4142
+ 3841 4126 4111 7681 4119 7425 4123 6913 4125 5889 4135 7297 4139 6785 4141
+ 5761 4147 6529 4149 5505 4153 4993 4167 7233 4171 6721 4173 5697 4179 6465
+ 4181 5441 4185 4929 4195 6337 4197 5313 4201 4801 4209 4545 4231 7201 4235
+ 6689 4237 5665 4243 6433 4245 5409 4249 4897 4259 6305 4261 5281 4265 4769
+ 4273 4513 4291 6241 4293 5217 4297 4705 4305 4449 4359 7185 4363 6673 4365
+ 5649 4371 6417 4373 5393 4377 4881 4387 6289 4389 5265 4393 4753 4401 4497
+ 4419 6225 4421 5201 4425 4689 4483 6193 4485 5169 4489 4657 4615 7177 4619
+ 6665 4621 5641 4627 6409 4629 5385 4633 4873 4643 6281 4645 5257 4649 4745
+ 4675 6217 4677 5193 4739 6185 4741 5161 4867 6169 4869 5145 5127 7173 5131
+ 6661 5133 5637 5139 6405 5141 5381 5155 6277 5157 5253 5187 6213 5251 6181
+ 5379 6165 5635 6157 6151 7171 6155 6659 6163 6403 6179 6275 6211 5189 4681
+ 4433 4321 3142 2634 2386 2274 1612 1364 1252 856 744 496
+ ] def
+
+ /tab213 [
+ 3 6144 5 5120 6 3072 9 4608 10 2560 12 1536 17 4352 18
+ 2304 20 1280 24 768 33 4224 34 2176 36 1152 40 640 48 384
+ 65 4160 66 2112 68 1088 72 576 80 320 96 192 129 4128 130
+ 2080 132 1056 136 544 144 288 257 4112 258 2064 260 1040 264 528
+ 513 4104 514 2056 516 1032 1025 4100 1026 2052 2049 4098 4097 2050 1028
+ 520 272 160
+ ] def
+
+ /chars 10 array def
+ 0 1 9 {
+ /i exch def
+ codewords i get dup 1286 le {
+ tab513 exch get
+ } {
+ tab213 exch 1287 sub get
+ } ifelse
+ chars i 3 -1 roll put
+ } for
+
+ 9 -1 0 {
+ /i exch def
+ 2 i exp cvi fcs and 0 ne {
+ chars i chars i get 8191 xor put
+ } if
+ } for
+
+ % Conversion from characters to the OneCode encoding
+ /barmap [
+ 7 2 4 3 1 10 0 0 9 12 2 8 5 5 6 11 8 9 3 1
+ 0 1 5 12 2 5 1 8 4 4 9 11 6 3 8 10 3 9 7 6
+ 5 11 1 4 8 5 2 12 9 10 0 2 7 1 6 7 3 6 4 9
+ 0 3 8 6 6 4 2 7 1 1 9 9 7 10 5 2 4 0 3 8
+ 6 2 0 4 8 11 1 0 9 8 3 12 2 6 7 7 5 1 4 10
+ 1 12 6 9 7 3 8 0 5 8 9 7 4 6 2 10 3 4 0 5
+ 8 4 5 7 7 11 1 9 6 0 9 6 0 6 4 8 2 1 3 2
+ 5 9 8 12 4 11 6 1 9 5 7 4 3 3 1 2 0 7 2 0
+ 1 3 4 1 6 10 3 5 8 7 9 4 2 11 5 6 0 8 7 12
+ 4 2 8 1 5 10 3 0 9 3 0 9 6 5 2 4 7 8 1 7
+ 5 0 4 5 2 3 0 10 6 12 9 2 3 11 1 6 8 8 7 9
+ 5 4 0 11 1 5 2 2 9 1 4 12 8 3 6 6 7 0 3 7
+ 4 7 7 5 0 12 1 11 2 9 9 0 6 8 5 3 3 10 8 2
+ ] def
+
+ /bbs 65 array def
+ /bhs 65 array def
+ 0 1 64 {
+ /i exch def
+ /dec chars barmap i 4 mul get get 2 barmap i 4 mul 1 add get exp cvi and 0 ne def
+ /asc chars barmap i 4 mul 2 add get get 2 barmap i 4 mul 3 add get exp cvi and 0 ne def
+ dec not asc not and {
+ bbs i 3 height mul 8 div put
+ bhs i 2 height mul 8 div put
+ } if
+ dec not asc and {
+ bbs i 3 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ dec asc not and {
+ bbs i 0 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ dec asc and {
+ bbs i 0 height mul 8 div put
+ bhs i 8 height mul 8 div put
+ } if
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bbs bbs
+ /bhs bhs
+ /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
+ /txt txt
+ /textxalign (left)
+ /textfont /Helvetica
+ /textyoffset 1
+ /textxoffset -0.3
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/onecode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER onecode--
@@ -2620,53 +8019,148 @@ D.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$Df0,rDe*FB30If*F_`U>D_?-CEcQG7F`MSBDD
% --EXAM: 01234
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp postnet 0.0 0 0 0
-%%BeginData: 45 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05tiNF Db Z3H\`B !23
-JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj
-055<6Cis9"FCf]= +D,%u F(L Lj0 6U c? Bk1 XoA RfCb@r !3 !@;L!r Ou"
-b*DI[L*A7]7aARf LiDK KH7 F< G1 (Ci a0N 1G< i]G]
-[P9DKM#]Ou"b5AU &<<B m O? H$ Bd1 uFC f]=H #I;,F
-(KHLq3!NeBOtmjB QT+q!! !"^ 1 N.5 SB l@m1 P-6 N[FE2)5B68 E<AWf3'L]NY
-rOpu>KFD5Z2F*j( NAmoLs AWf 3 'P!F GY<0 B5( @ZmRN0oc8t P)XR(F_-_!H
-]ftD5*C&O5*@^MH ]ft&Ec krV 1OYE dI?J 0)* g/N:DfBf4D f0WZ5*@^MP#
-Q@=FD5Z2F*j'+I? I/TFC f]=A oDR/+ EV1> FCo H/FHS5=1G< i]G]\"@H=\4
-@AU&<<BmO?R09S+ EFCf] =H#I; ,F(KG 9FC f]=H#I;,F( KHV09S+EBOt
-mjBQPA1ASGdjFHS ;?1G<3G Ebo<)+ C\c"@ rGm hP%&TCCh[E gFCerqARfM&
-L]N[<I?IQm1Lad5Ch7L?"d3_3@<-0qDMSU^D3>$2@<-0qDMS[`D3>$K04K->E,[FKDf^#<ATU7
-IA5$QPB67gI4B5<V;]nn4;cHL\<$6%#F*&O6AKWi]+?:Q_EZd(k+Co2!BlnD=AU%^$F_#3(B-:
-\tARfKuA8,[jF>#:f@;0doATDg0EfrY8P#Pn!Eas#uAUBS"LbP!(P!4[^P#.<^HS8iPBlJ#DE,
-Tf>DImoV@:V`=@<,ddFCfKQ,uml?;]nn4;cHL\<$6%#F*&O7Df0Z*Bl5&3DJXS@A8,[jFE9)gE
-a`['AS#n&DfV"*I?IQXP"@<9@<,jk@<-FL$8=1i1GgsI2`Ng\1G<6OARfLsF_up7Ou%moL]Lsn
-Ebo<)L]N[<HS9)r5*@]T@q]F`CNFW8+Cf(r@r$..D'3:rEas#uAKY]M98G9bWKI:F1OYEW04S[
-,@r$..D28O/BOt[hF*2>U$Bf.eWJCnEC6CAr@;KXg@<?'jBOt[hHQZd+Eas#uAKYGjEbo<)P"T
-7mEarckEcW@5BOt[hF*2>_99O.=04K->E,[FKDf^#<ATU7IA4($A@r"JHB5)IJ.nOVgDfTl0@r
-rhn;c$C8:et"h:.8,)@q]F`CER/%B5)H1E,ol?Bk1dc0/%?SBldisEcQ)=P!=AX<%h]hEas#uA
-KYGjEas#uAV^=q@<-0qDN[\V1OYEc04f$2F!+\I"Z8.m1,=jn1,:UB23%hq1,UgENWh0n2)R.L
-"Yqqj1,Y'q1,UgE16)Mn2)R-ENWh9q1,:_I"Z8%j2):0q2)7$E16)AmNWD"COu"b#BQG;*@<-0
-qDMSIZCkr=Z!KmbP1G<ipF<G%$Ebo<)L]NY>OpR:-04f$2+D#G#F,10d99M(aBOtmjBQS;<ASu
-"@@Zh%\1Pc$e!G-.YP%'4JP,Wd]C6CcD1MC?6B4uC.+DN$1DIXf(L]NZ4Ot:9XBkM+$P&,pXOu
-AJJI?I-1BQJt0BOtmjBQS<YH&)HV!FfJXCh7L?!KsF/056S5Ou"b&DIXf#DI[`1@UX:eDe*E%B
-p),F0TrDu99M(aBOtmjBQS;<ASu"@@Zh%\1Pc$e!G-.YP%'4JP,Wd]C6CcD1MC?6B4uC.+DN$1
-DIXf(L]NZ4Ot:9XBkM+$P&,pXOuAJJI?I-1BQG;1L]rrXL]NY>BOtmjBQS<YH$":Q+DDs&+C\c
-"@rGmh+DHW4P"]SG"d3\X!KmJ@5Z@F'P&,5OG]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>5?'9
-G\P"76;DIXf#DI[`1@q]F`CNFW8P"Uro05+p2B4uC.+D#G#P%'R\Ou%moL]M()A!1;W!KsF/05
-?Y6Ou$c_BkM+$F!,3?ASu!#C5;nR9Tgr?ASGdjFHUHr"d1d,G^Y`G@VBg*@UX:nAT!;-P&,pTO
-o]6-BkM+$F-:f_DI[L*A7]7aARfLiDKKH7FF,-PG]Y';@<-0qDBN.+@UX:eBOPq&+Cf(r@r$..
-D284U9O_FNCh7L?"d3\X!KmJ@5Z@F'P&,5OG]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>5?'9G
-\HZXLS+C\c"Ch7K,>E/_,@UX:nAT!;-P&,pTOo^A0P&,plOu@DnG]\4LAnH*qF<G[:G][P9DKI
-"CAU&<<BmO>5?'9G\P#X/HDIXf#DI[aD$^+/G1G<EQBkM+$F!,%3A!1;a$'I*#!/LYeDI\i=L]
-N[<HS9,s5*@^8ASGdjFE8R>+D#G#+DQ]5P"_#iBOtmjBQTDRL]rr"P'DD<87H7R+C\c"Ch7L?"
-d3\X#*K"#ASGdjFE<Uj4?P9;ASs.SEb0-)Bl7KjE\Cm8F!+q*F"_!3F!+[0@VBhG@XEn2I?K4g
-06:TD+BostBQK>GL]N[<H\t%t;='0)n"$b4P(SWV\5DTu+DG_'Cis9"FCf]=HS9JcF<G[MFFB<
-O05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b1Df^#<ATX(pP%6
-4gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`
-V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/postnet 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp postnet 0.0 2015050900 65689 65439
+%%BeginData: 140 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/postnet {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /validatecheck false def
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 0.125 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ % Validate the input
+ barlen 5 ne barlen 9 ne and barlen 11 ne and {
+ /bwipp.postnetBadLength (USPS POSTNET must be 5, 9 or 11 digits excluding check digit) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.postnetBadCharacter (USPS POSTNET must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /checksum checksum barcode i get 48 sub add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.postnetBadCheckDigit (Incorrect USPS POSTNET check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (55222) (22255) (22525) (22552) (25225)
+ (25252) (25522) (52225) (52252) (52522)
+ (5) (5)
+ ] def
+
+ /bhs barlen 5 mul 7 add array def
+ /txt barlen 1 add array def
+
+ % Put start character
+ /enc encs 10 get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs 0 heights putinterval % Put encoded digit into sbs
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ /enc encs barcode i get 48 sub get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs i 5 mul 1 add heights putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 5 mul 1 add 3.312 mul textyoffset textfont textsize] put
+ } for
+
+ % Put the checksum character
+ /enc encs checksum get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs barlen 5 mul 1 add heights putinterval
+
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen 5 mul 1 add 3.312 mul textyoffset textfont textsize] put
+ } {
+ txt barlen [( ) barlen 5 mul 1 add 72 mul 25 div textyoffset textfont textsize] put
+ } ifelse
+
+ % Put end character
+ /enc encs 11 get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs barlen 5 mul 6 add heights putinterval
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bhs bhs
+ /bbs [bhs length {0} repeat]
+ /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/postnet dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER postnet--
@@ -2677,52 +8171,149 @@ V,9E+*6lBl7R3P#M~>
% --EXAM: 01234567890
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp planet 0.0 0 0 0
-%%BeginData: 44 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05t`9D Im p:L_Q" 0Op
-s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW ei&
-Bl7EsF_#'*AU&;> AmoLs AWe i&G %# 3$ A79 Rk@ q]F`CE R4 tCia0N 1G<
-H[@r-9uARfCb@r# drFC f]= +D ,% uF( LLj 06C cMFC
-oH/FHOV,1G<i]G] \"@H = _m >O u"b 5AU &<BD e<U&A
-TWb(Ou"b)ASGdjF G`6^!! &0< D fBf 4D f0WZ Y:j s=EbTE(FEq h:P!+/J!Ko=
-'%<$3-Bl@m1H]kF A@;L!r P!+ / T5^e epOu SV6 P,4<rNWD;+ NHB2`AWf3'O
-tDh\P')pOOu%N5O tCcrF_ -^l I?IT YP%B dtO uY16E-,f4D KCt)Ou%NL<,
-Z_tBl@m1H]g15P" @<KAU &</D f0Y>F Cf]= AoD R/OtDhQ06C cMFE;/BAKZ)
-+G]\"@H=`6mOu"b 5AU&< BDe<U &ATT& :AU &<BDe<U&AT X(gOu"b)ASG
-djF<G7.BkM+$OtV tS04J@1 Ch7K,@ UX:eD e*F B@Wl0rBk1X oARfCb@r$FI
-!KsF1P#RT#@UX:nAT!;3P&4Z:Ebo<)L^fMaOp$+b@WuO*E%Z*G@;]Xu6=FCuASu.&BT>)Q;c$C
-8:eX/M78tCHF`VXI@V$Z:0d(CT+>GYpA8,[jFE8R9G[kQ4A8,po+Cf(r@r!2tBkM.%0/%?SBld
-isEcQ)=P!=AX<+99V@rGmhH]g@E0Tp%25);4^:m,jG04K->E,[FKCgh3mF@'DH6YKnK@:OCjEf
-MDF;c$C8:eX/M78tCHF`VXI@rH7,@;0U%Df0B:+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\oI?I/T@
-UX:eBOPq&NX@Hp1,CaE2E*TUOu"b$BOt[hF*2>U!0T-o!/LYb@<-0qDMS=VWI$:4P!5$b04S[,
-@r$..D'3>%ARfLsF_r71@<,jrA7ZltP"UTbP,XTFOu%NL82"IdARfLsF_upA@q]F`CNFW8L^K;
-[P,X6EP%p.9G%#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"U
-sTHS8iPBlJ#DE,8s#ATU7IA4($A@r"JHB5)IJ.S4MfDfTl0@rrhn;c$C8:eX/M78tC>BOt[h+C
-o2!BlkJ:Ec6,8A7]:)061K8F(Jp'Ec5u]5CJ\o04J@1@rGmh+C\c"@rGmhL]CmmEbo<)P"_#pI
-?IP_ASu"!+Bsj01,:^E23%ht2)R-ENWh9t1,UhI"Z8.m1,Y'q2)7$H16)Mq1,UgENWh9q1,UqL
-"Yqqm2):0q1,UpE23%hq2)7$HNWD"t!B"/G1G<3NF!+q#Ebo<)L]rrXL^0(DOpR:-06DG\+C\c
-"Ch7L?!KmJH$'I(tASu!#ASu"!L^K;<Ou"b)ASGdjFE8R9DI\i=OpR:-L]E53ASu"@@Yb&JWI$
-:5P!5$bBOtmjBQS;<C*7)*@j#NB!Kp->/8/U/B4uCMCkr7X2Ni<5P"9%qF,0g0ASGdjFE<UjL]
-E53@UX:nAT!;)P,Wd]Bp(ZC1G<<W@j#?#@ric%@<,jrA7ZltP"UTbP,XU;Ou"b)ASGdjFE8R9D
-I\i=OpR:-L]E53ASu"@@Yb&JWI$:5P!5$bBOtmjBQS;<C*7)*@j#NB!Kp->/8/U/B4uCMCkr7X
-2Ni<5P"9%qF!,1Q"d3\X!KmIsASGdjFE<UjFEhmMBcpV&@UX:eDe*E%BnueQ9PK:dP&,pTOo^G
-*;tnV$Cij65FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD<82"Ol@j#?#@ric&BOt[hF*2
->_99M(aBOtmjBQS;<ASu"@@Zh%\1Pc$e!G-.YP%'4JP,Wd]C6CcD1MC?6B4uC.+DN$1DIXf(L]
-NZ4Ot:9XBkM+$P&,pXOuAJJI?I-1BQG;*@<-0qDMSIZCkr+T!GH%YB4uC.P'LbZ@r-9uARfCb@
-r#drFCf]=HQ[ETF<G%$Ebo<)+Bost@<,jk@<-E3@q]F`CNFW8L]NZ4@UX:nAT!;-P&,pTOo^G*
-;tnV$Cij65FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD%FEhmM@UX:nASrVpNWC83@<-0
-qDMSIZCkr+T!Jj:0Ckrsl2KWMTFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD<<A.p$@j#
-?#@rmG6P"Uro05+p2B4uC.+D#G#P%'R\Ou%moL]M()A!1;W!KsF/05?Y6Ou$c_BkM+$F!,3?AS
-u!#C5;nR9Tgr?ASGdjFHUHr"d1d,G^Y`G@VBg*@UX:nAT!;-P&,pYOo]6-BkM+$F-:f24>1_dD
-D*Y`ASu<uDIm6s04JU9+C]#*04JC3+BostBQK>GH\_ZMP(R$nF(025>9IBgF-:!g!KsF/MEeUJ
-m#"$rS[*[,K8Mn';=%R2Bl7EsF_#'*AU&<D06DG\+EVjMI?IP_DfBe@DfBf4Df0V=5!C*"Df0Z
--Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<]`@;]XuOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2
-#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/planet 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp planet 0.0 2015050900 65565 65215
+%%BeginData: 141 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/planet {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /validatecheck false def
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 0.125 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ % Validate the input
+ barlen 11 ne barlen 13 ne and {
+ /bwipp.planetBadLength (USPS PLANET must be 11 or 13 digits excluding check digit) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.planetBadCharacter (USPS PLANET must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ % Calculate the checksum
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /checksum checksum barcode i get 48 sub add def
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.planetBadCheckDigit (Incorrect USPS PLANET check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (22555) (55522) (55252) (55225) (52552)
+ (52525) (52255) (25552) (25525) (25255)
+ (5) (5)
+ ] def
+
+ /bhs barlen 5 mul 7 add array def
+ /txt barlen 1 add array def
+
+ % Put start character
+ /enc encs 10 get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs 0 heights putinterval % Put encoded digit into sbs
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ /enc encs barcode i get 48 sub get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs i 5 mul 1 add heights putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 5 mul 1 add 3.312 mul textyoffset textfont textsize] put
+ } for
+
+ % Put the checksum character
+ /enc encs checksum get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs barlen 5 mul 1 add heights putinterval
+
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen 5 mul 1 add 3.312 mul textyoffset textfont textsize] put
+ } {
+ txt barlen [( ) barlen 5 mul 1 add 72 mul 25 div textyoffset textfont textsize] put
+ } ifelse
+
+ % Put end character
+ /enc encs 11 get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs barlen 5 mul 6 add heights putinterval
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bhs bhs
+ /bbs [bhs length {0} repeat]
+ /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/planet dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER planet--
@@ -2733,56 +8324,153 @@ m#"$rS[*[,K8Mn';=%R2Bl7EsF_#'*AU&<D06DG\+EVjMI?IP_DfBe@DfBf4Df0V=5!C*"Df0Z
% --EXAM: LE28HS9Z
% --EXOP: includetext barcolor=FF0000
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp royalmail 0.0 0 0 0
-%%BeginData: 48 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 061uV@ ;K dhBl&- P'T
-t>:%52X=FD5Z2F- 8_M1G <3G Eas # uAW f6? 1G< 9WDKKE 0@ <Wi+@; L!r
-Ou"b*DI[L*A7]jo G]Y'? @;L !rO u" b7 @;K Xg@ <?'jBO t[ h+D,%u F(L
-Lj055<6Cis9"@q] F`CM @[. AU &; >Am oLs AWe i&FC
-f]=AoDR/OiNV@06 CcMF E ;/ BA V^\ V1G <i]G ]\4LA
-nH*qFGTaU1G<EQB kM+$ME WgP 1 QjP 4E -,f4 DKC uE06;5UBl7 R*H#R>X4aVt
-cOu8C3DfBf4Df0W CP,i2' Cia 0 N4aW >WI? IQm 30Ia6V33Qn !BlU*FE2M8P
-!+/T/Wr;\FcnqO1 OXV5/T c#U AWei tP#Z pnA We*t3A5;iF D5Z2F-8_M1O
-YEcDfBf4Df0WCOu %NL8M >0sG ][P9D KI"C AU& </Df0Z[/Wq nCFCf]=F(or
-3+EV1>FE;/BAWe^ 01G<i ]G]\4 LAnH* qF< G[:G]\4LAn H*qFHS;?1G<
-EQBkM+$+D>>#B4u CM09S+E @UX:eB OPq&N [.e .<``C+2)$a ?1GhEV2`Nf`
-84,d67Rp3F8kViP<)6=f;H&`704S[(Ectl-F,2*)23KbO!/LZ3,C<p6@<-O"Cibb'OuQoZEarc
-kEc[C-L]NZ4P!5%RI?I-W!/LYb@<,jrA7^p5L]N[<HX^E(@rGmhP!4[&P"]A!@<-O"Cibb'P$j
-GlHS8iPBlJ#DEc653Ci*TpCdMQ@6YKnK@:OCjEfMqR9f,d96Qg5gF*&O7Df0Z*Bl5&3DJXS@@p
-s=jFCAu.Ch7^1ATDi7@;]TuA8,[jFE9)gEa`['AS#n&DfV"*I?IQXP"768@<-0qDBNCsEas#uA
-WgMG@;KXg@<?'jBOt[hH\_]cWI9q/Ou"b$BOt[hF*2>?Dg.!;Ou"b$BOt[hF*2>0Det40Ou%mo
-L]LsnEbo<)L]N[<HS9)r5*@]TBl7I++Cf(nEctl-F!+q#Eas#uAKY]C!Kp->99M(a@q]F`CNFW
-8Ec6.E@q]F`CNFW8Ec6.EBl7I+L^'#?Oo^_%04S[,@r$..D.@L#+Cf(r@r$..D.@L#+DG_(G_c
-QeC6AU\1OYEW04S[,@r$..D'3>%ARfLsF_u/;GDHHdC5<(WCh%-i@r$..D.@L#L^'#WOo^_%G%
-#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"UsTHS8iPBlJ#DE
-c653Ci*TpCdMQ@6YL%@CIDlLBlo@]8T&$VEcP`$F<FIU1fHb/+Cf(r@r!2tBkM.%+E2@>G%kJu
-A1oTV@;0doATDg0EfrY8P#O)D@<,jrA7Zlm@<,jrA7^Ps@UX:nAT!Z)Ou%NL<%hg#@ribsNW_-
-o0JJLi1,:R=NW_*n0JSRj1,CX=NW_-n0JSRj1GU[=NW_'k1,=jm0JG:=NW_$j1,Fpn0JP@=NW_
-'j1,Fpn0ebC=NW_'m0J\Xk0JY@=NW_$l0Je^l0JbF=NW_'l0Je^l0etI=NW_'m1,+^k0JYF=NW
-_$l1,4dl0JbL=NW_'l1,4dl0etO=NW_-m0J\Xk1,(F=NW_*l0Je^l1,1L=NW_-l0Je^l1GCO=N
-W_-m1,+^k1,(L=NW_*l1,4dl1,1R=NW_-l1,4dl1GCU=NWCnq!Ae#E1G<<W@rla4+C\c"Ch7L?
-"HmSW#*K"MV33VfFEhmM@UX:nAT!;)Oo^^POu$Ze@rla4L]D"(@rmGOP"Us`L]E53@UX:nAT!;
-)P,Wd]Bp(ZC1G<H[A9]5,BOPq)@;L!-@UX:eDe*E%BnueQ9Ti&31M(H6F*)FFBnunTCkr+T!G-
-.YF!,17A9a81P'M.oF<G9?>9IB`Eas#uAKY]C!Kp,jL]ilWL]NY>MEk,7c]W*dAU&<BDe<U&AT
-T&:AU&</Df0Y>FCf]=F(or3+C1.TI?I-4DI[a0EZeh"Ebo<)L]ilWL]NY>ASu"!+Cf(r@r$..D
-3@PTH"h/+Cis9"@q]F`CM@[.AU&<D+EVjM+C\c"Ch7K,>9IB`EarckEcW@5BOt[hF*2>U!Kp,c
-@<-0qDMSFYCkr+T!K'-@pWo"=FCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY9AG^Xp\G]Y'
-;@<-0qDBN/D!?bi[Ebo<)L]ilWL]NY>MEk,7c]W*dAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(o
-r3+C1.TI?ITADI[a0EZeh"Ebo<)L]ilWL]rqBASu"!LaA3WP'J]i@WNZ'DI[a0Efsmp$'I(t@V
-Bg*ASu"!FE3OROpR:-L]E53ASu"!FE3ORL]N[<HS9)r5*@]TASu!#ASu"!FE/L<L]NZ4Ou$Ze@
-u^RDP!+/$@WNZ+L]_=%BkM+$P&,p[OuAJJ@VBg*Bnuh(ASGdjFHUHr#a.*/G^Y`SASu"<!ATa#
-HX^H*+DHW3BOtmjBQTDRL^9/%P'CGLF!,1Q"__I]B4uCMCkr@[2Ni<5P#Q"1@u^RFP!+/$@WNZ
-+L]_=%BkM+$P&,p[OuAJJ@VBg*Bnuq+ASGdjFHUHr#a.*/G^Y`SASu"<!Afm%HX^H*+DHW3BOt
-mjBQTDRL^9/%P'CGLF!,1Q#\[d`B4uCMCkr@[2Ni<5P#Qjm83B!fEb0,A061WACh[cu@<+#1@W
-NZ$@WO23BQG;*BQGhJ@WNYr+C]#*P%'4JP,Wec5IaSWMEgR#Z@.mgMEeUJls1`JDI[L*A7]joG
-]\9cFEhmMFEhnUP#O)QE-*4@E-,f4DK?pa4s4BSDKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X2
-061uV@;KdhBl&qlP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5G
-bFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/royalmail 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp royalmail 0.0 2015050900 66136 65853
+%%BeginData: 145 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/royalmail {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /validatecheck false def
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 0.175 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create a string of the available characters
+ /barchars (ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS) def
+ /charvals 36 dict def
+ 0 1 35 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.royalmailBadCharacter (RM4SCC must contain only capital letters and digits) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksumrow 0 def
+ /checksumcol 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ /checksumrow checksumrow indx 6 idiv add def
+ /checksumcol checksumcol indx 6 mod add def
+ } for
+ /checksum checksumrow 6 mod 6 mul checksumcol 6 mod add def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.royalmailBadCheckDigit (Incorrect RM4SCC check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3300) (2211) (2301) (2310) (3201) (3210)
+ (1122) (0033) (0123) (0132) (1023) (1032)
+ (1302) (0213) (0303) (0312) (1203) (1212)
+ (1320) (0231) (0321) (0330) (1221) (1230)
+ (3102) (2013) (2103) (2112) (3003) (3012)
+ (3120) (2031) (2121) (2130) (3021) (3030)
+ (2) (3)
+ ] def
+
+ /encstr barlen 4 mul 6 add string def
+ /txt barlen 1 add array def
+
+ % Put start character
+ encstr 0 encs 36 get putinterval
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ encstr i 4 mul 1 add encs indx get putinterval
+ txt i [barcode i 1 getinterval i 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
+ } for
+
+ % Put the checksum character
+ encstr barlen 4 mul 1 add encs checksum get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
+ } {
+ txt barlen [( ) barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
+ } ifelse
+
+ % Put end character
+ encstr barlen 4 mul 5 add encs 37 get putinterval
+
+ /bbs encstr length array def
+ /bhs encstr length array def
+ 0 1 encstr length 1 sub {
+ /i exch def
+ /enc encstr i 1 getinterval def
+ enc (0) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 2 height mul 8 div put
+ } if
+ enc (1) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (2) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (3) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 8 height mul 8 div put
+ } if
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bbs bbs
+ /bhs bhs
+ /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/royalmail dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER royalmail--
@@ -2793,67 +8481,210 @@ bFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
% --EXAM: 5956439111ABA 9
% --EXOP: includetext custinfoenc=character
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp auspost 0.0 0 0 0
-%%BeginData: 59 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04B!EE ,T f>H\`B !23
-JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj
-055<6Cis9"FCf]= +D,%u F(L Lj0 6C cM FCo H/F HOV,1G <i ]G]\"@ H=_
-m>Ou"b5AU&<BDe< U&AT Wb( Ou "b )AS Gdj FG` 7<1G
-b1M04T-GFD5W)De 3frN X 93 /@ <,d dFC fKU1 N.5SB
-l@m1P-6N[FE2)5B 68E<AW f3' L ]NY rO pu>K FD5 Z2F*j(NAmo LsAWf3'P!FG
-Y<0B5(@ZmRN0oc8 tP)XR( F_- _ !H]f tD5* C&O 5*@^MH]ft& EckrV1OYEdI
-?J0)*g/N:DfBf4D f0WZ5* @^M P#Q@ =FD5 Z2F *j'+I?I/TF Cf]=AoDR/+E
-V1>FCoH/FHS5=1G <i]G] \"@H =\4@A U&<< BmO ?R09S+EFCf ]=H#I;,F(KG
-9FCf]=H#I;,F(KH V09S+ EBOtm jBQPA 1AS GdjFHS;?1G <<W@ribsNWU
-sh0TH5h0JSRi0JG 8B"#)G` NWUsi0 oc>i0 f"a k0JY>B"#)J bNWUsj16)Gk
-0JJLh0eb>B"#2JbNWV!j0TH5i0en[j0ekGD"#2PbNWV!k0oc>j1,=jl1,(DB"#;PbNWV$j16)G
-l0eeUi1,1MD"#;SdNWV$l0TH5j1,4dk1,:VF"#DVbNWV'k0oc>l0J\Xj1GLSD"#DYdNWV'l16)
-Gm1,+^j1GU\F"#D\fNWUsj1QDPk1GFgk0JbGD"#)MdNWUsk1QDPl0Je^k0ekJE"#2PeNWV!l0T
-H5i1GOml0f(SF"#2SfNWV$j1QDPm0f+gl1,:YG"#;YdNWV$m0oc>k1GXsm1,C_H"#DVeNWV'l1
-QDPn1,Fpm1G^_F"#D_fNWV'n16)Gm1Gb$n0JG;C"#)GcNWLmgNWLmhNWLmiNWLphNWLpiNWLpj
-NWLsiNWLsjNWLskNWM!jNWLpkNWCqAOu"b#@<,jk@<-FL5X@_(6q'R884cEH9MJ8X:f1+h<)lt
-#=BSf]0etOA2)[BQ3FQB,A7]@cBPD3sCi+'.E,fo>FEMbNG^4TX,Eai9@UX:nASrW"@<,jrA7^
-p5Ou$QUEas#uAV^>B!g66;!\lEm4aVu2I?IQ=@<,jrA7^PsL]W`5NWM$pP!+/J-%1qU@UX:eDe
-*F8!/L]>9TB033KcOPLbsOC<+99V@rGmhL]E54P"^l;2DUFYH\b%;P#O)GDI[a0EfrVLV33VfF
-EhmM@UX:nAT!;*P,XTNOu$Ze@rla4L]D"(@rmGuP"Us`L]E53L]MiUBp(ZC1M(H6F!+q#Eas#u
-AKY]C!Kp->/;QQS!Kp)eDI[a0EZf(P!g7AU!g3S?",I#ALQZq2P":B1L]N;<HS9)r5*@^5DI[`
-1@UX:eDe*E%BnueQ9Tgr_5`u/294`!NF*)FFBnuhRCkr.U!Jgi6!g8>%H$":Q+DHW5P,VY.@UX
-:eDe*E%BnueQ9PK:aP,X6=P&,pYOo^G*;tnV$Cij65FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=
-\4)P'DD<87Qd`FD5W)De3frNX'HED.Ra%A!0!%L]E53@UX:nAT!;3P,Wd]Bp(ZC1M(H6F!+q#E
-as#uAKY]C$BbFG!Kp->/;QQS!Kp)eDI[a0EZf(P!g7AU(6S]S",I#ALQZq)G]Y'BL^9.E>9IB`
-Eas#uAKY]C$BbFG!Kp,jL]W`UL_c-SMEk,7c]W*dAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or
-3+C1.TI?I,S@qfOkASrW"@<-0qDMSX_WJCV=Cm$T&H\_ZX!FfJXCh7L?$^.K9056S5Ou$QUEas
-#uAKY]C$BbFG!Kp,c@<,jk@<-FP5*CngFcp2eBl7I+P!5$bP')q104f$2+D#G#F!,17A9a81Ou
-$Ze@rla4+DHW6P&,piOo]-3A!2+ZG]Y'BL^9.E>9IB`Eas#uAKY]C$BbFG!Kp,jL]`fVL_c-SM
-Ek,7c]W*dAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?I,S@qfOkASrW"@<-0qDMSX_
-WJCY>Cm$T&P#[;R@qfOkAT!Y3L]M()@rla4P%'4WP,We>DI[a0EfrUtDI[aD99Mr2H$tiH062,
-U@:F%aLd6b]P&-9fOu%-"FCAWpAV^=jLd6<C!.C#_?'9JRF*(i"Ch8Df>DN98!JiseI?I-,P'J
-^"Eb0EM!Ko6p5^P/%AU&;>E,oN5L]NYLOu$ueG]\a,Op$R@P&5P!DIn'7+Dtb8FGN;I_3-U&P#
-R5;L]N;rHS9,s5*@]TDIn'7@qBImHQ[?MFCAWpAV`ThAU&<[Chf+6I?HC(AU&<,ASc0*EcZ>2@
-VfV35]CaTG*6ZVOo^_=L]NYLP'CkUG][G,Ci#8-Ld7++L]ETTHZ!D>FCSluC`mV,G][G,Ci#8-
-LdR?AP'DD<<.0p#05trCFs([6G]]*)I?K49EcY`/A7]g)ASu"!FE3ORL_,`KL]`f<L]ikAOpR:
--EcY`/A7]h<!*b6^H\_ZMP(R&'H&)NX"(c@[F*)Gc@YbSYWI$:4P!5$bEcY`/A7]g)EcY`/A7]
-hF@VLW"P,X6>P#@IBL]N[<ASu"!FE/L<L]NZ4Ot;D#P&+]I@rla4+DHW4Oo^@>P"_#iL]ilWOo
-]-3@rla4+DHW5Oo^@>P"_#iOo^_jI?I-AF(9-!ATO#DL]rs@M#W82HS9)r5*@^X!/LZ3"FDe:P
-!5$bEcY`/A7]g)Bcq/R!HN6kDe*F#+DDs5Oo^_=EcZ>2@VfV35[0$uL_5F`L`V?Q>p*mF99O+3
-F(9-!ATJu.L]ikAP"Ur=P"UtSP'DD<8:?Xl04S[,@r#RmA7^c00JG170JG170JG17L^]HCOr9E
-=L]E53L]_uWBp(ZC1G<<W@j#f5@rGmhF,0p4P,XU;L]iM9P,4<qOu$T]ARfLcDe*E%BnukSCkr
-1)DI\i=P,XTFASu"@H$tiHASu"!FE/L8DI[a0Efsmf%[*f$BOt[h@rGmhP'LVV@rla4+D#G#F*
-)Gc@Yb)KWF]sWF,3GO99OQR@UaC$ASu"!FE3OROpR:-04JU9+D#G#F*)Gc@Zh%\1Pc$e!G-.YF
-*)Gc@Yb&JWI$:4P!5$b04f$2+D#G#F*)FFBnueQ9Th2CDI\\-0TnSG@UaC$Bnub&ASGdjFHUHr
-#a.*/G[b?-+DHW;BOtmjBQTDRL^9/%P'DD<<+TrWNWCkt4aUXIF!,1Q"))7[B4uCMCkr@[2Ni;
-oBQG;1L]qI'BkM+$P&,p[OuAJJI?IQ@DI\\-16OeI@UaC$Bnub&ASGdjFHUHr#a.*/G[b?-+DH
-W8BOtmjBQTDRL^9/%P'DD<<+TrWNWCr!4aUXIF!,1Q"))7[B4uCMCkr@[2Ni;oBQG;1L]V7$Bk
-M+$P&,p[OuAJJI?IQXP"7\t061WA0/%?WDJX$)ARTU4@UaC$@UaC3@VBg*@VBg9F(025>9IBgF
--:!g!KsF/MEeUJm#"$rS[*[,K8Mn';=%R2Bl7EsF_#'*AU&<D06DG\+EVjMI?IP_DfBe@DfBf4
-Df0V=5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<0ZF)Z&=FHSVHA1r(@/n8fPFCfK
-5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+
-B\;u~>
-% uk.co.terryburton.bwipp/auspost 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp auspost 0.0 2015050900 75628 75331
+%%BeginData: 202 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/auspost {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 0.175 def
+ /custinfoenc (character) def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (000) (001) (002) (010) (011) (012) (020) (021)
+ (022) (100) (101) (102) (110) (111) (112) (120)
+ (121) (122) (200) (201) (202) (210) (211) (212)
+ (220) (221) (222) (300) (301) (302) (310) (311)
+ (312) (320) (321) (322) (023) (030) (031) (032)
+ (033) (103) (113) (123) (130) (131) (132) (133)
+ (203) (213) (223) (230) (231) (232) (233) (303)
+ (313) (323) (330) (331) (332) (333) (003) (013)
+ (00) (01) (02) (10) (11) (12) (20) (21) (22) (30)
+ (13) (3)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz #) def
+
+ /barlen barcode length def
+ barcode 0 2 getinterval (11) eq {37} if
+ barcode 0 2 getinterval (45) eq {37} if
+ barcode 0 2 getinterval (59) eq {52} if
+ barcode 0 2 getinterval (62) eq {67} if
+ /encstr exch string def
+ /txt barlen 2 sub array def
+
+ % Put start character
+ encstr 0 encs 74 get putinterval
+
+ % Encode the FCC
+ 0 1 1 {
+ /i exch def
+ encs barcode i 1 getinterval cvi 64 add get
+ encstr i 2 mul 2 add 3 2 roll putinterval
+ } for
+
+ % Encode the DPID
+ 2 1 9 {
+ /i exch def
+ encs barcode i 1 getinterval cvi 64 add get
+ encstr i 2 mul 2 add 3 2 roll putinterval
+ txt i 2 sub [barcode i 1 getinterval i 2 sub 2 mul 6 add 3.312 mul textyoffset textfont textsize] put
+ } for
+
+ % Encode the customer information
+ custinfoenc (numeric) eq {
+ 0 1 barlen 11 sub {
+ /i exch def
+ encs barcode i 10 add 1 getinterval cvi 64 add get
+ encstr i 2 mul 22 add 3 2 roll putinterval
+ txt i 8 add [barcode i 10 add 1 getinterval i 2 mul 22 add 3.312 mul textyoffset textfont textsize] put
+ } for
+ /ciflen barlen 10 sub 2 mul def
+ } {
+ 0 1 barlen 11 sub {
+ /i exch def
+ barcode i 10 add 1 getinterval barchars exch search
+ pop
+ length /indx exch def
+ pop pop
+ /enc encs indx get def
+ encstr i 3 mul 22 add enc putinterval
+ txt i 8 add [barcode i 10 add 1 getinterval i 3 mul 22 add 3.312 mul textyoffset textfont textsize] put
+ } for
+ /ciflen barlen 10 sub 3 mul def
+ } ifelse
+
+ % Add any filler characters
+ 22 ciflen add 1 encstr length 14 sub {
+ encstr exch encs 75 get putinterval
+ } for
+
+ % Create the 64x64 Reed-Solomon table
+ /rstable 64 64 mul array def
+ rstable 0 [ 64 {0} repeat ] putinterval
+ rstable 64 [ 0 1 63 {} for ] putinterval
+ /prev 1 def
+ 64 {
+ /next prev 1 bitshift def
+ next 64 and 0 ne {
+ /next next 67 xor def
+ } if
+ 0 1 63 {
+ /j exch def
+ /nextcell {rstable 64 next mul j add} def
+ nextcell rstable 64 prev mul j add get 1 bitshift put
+ nextcell get 64 and 0 ne {
+ nextcell nextcell get 67 xor put
+ } if
+ } for
+ /prev next def
+ } repeat
+
+ % Calculate the Reed-Solomon codes for triples
+ /rscodes encstr length 16 sub 3 idiv 4 add array def
+ rscodes 0 [ 4 {0} repeat ] putinterval
+ 2 3 encstr length 16 sub {
+ /i exch def
+ rscodes rscodes length i 2 sub 3 idiv sub 1 sub
+ encstr i 1 getinterval cvi 16 mul
+ encstr i 1 add 1 getinterval cvi 4 mul add
+ encstr i 2 add 1 getinterval cvi add
+ put
+ } for
+ rscodes length 5 sub -1 0 {
+ /i exch def
+ 0 1 4 {
+ /j exch def
+ rscodes i j add rscodes i j add get
+ rstable 64 [48 17 29 30 1] j get mul rscodes i 4 add get add get
+ xor put
+ } for
+ } for
+ /checkcode (000000000000) 12 string copy def
+ 0 1 3 {
+ /i exch def
+ /enc rscodes 3 i sub get 4 3 string cvrs def
+ checkcode i 3 mul 3 enc length sub add enc putinterval
+ } for
+
+ % Put checkcode and end characters
+ encstr encstr length 14 sub checkcode putinterval
+ encstr encstr length 2 sub encs 74 get putinterval
+
+ /bbs encstr length array def
+ /bhs encstr length array def
+ 0 1 encstr length 1 sub {
+ /i exch def
+ /enc encstr i 1 getinterval def
+ enc (0) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 8 height mul 8 div put
+ } if
+ enc (1) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (2) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (3) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 2 height mul 8 div put
+ } if
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bbs bbs
+ /bhs bhs
+ /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/auspost dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER auspost--
@@ -2864,43 +8695,119 @@ B\;u~>
% --EXAM: 1231FZ13XHS
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp kix 0.0 0 0 0
-%%BeginData: 35 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05G9HH \` B!23JD %Df
-Bf4Df0WZ5*@]T@U X:eDe *FB 5*@ ] TA8 c@- A9) +&+D,% uF (LLj05 5<6
-Cis9"FCf]=+D,%u F(LLj 06C cMF Co H/ FHO V,1 G<i]G] \" @H=_m> Ou"
-b5AU&<BDe<U&ATW b(Ou "b) AS Gd jFG `7< 1Gb 1MDf
-Bf4Df0WZY:js=Eb TE(F E qh :P !+/ J!K o='% <$3-B
-l@m1H]kFA@;L!rP !+/T5^ eep O uSV 6P ,4<r NWD ;+NHB2`AWf 3'OtDh\P')p
-OOu%N5OtCcrF_-^ lI?ITY P%B d tOuY 16E- ,f4 DKCt)Ou%NL <,Z_tBl@m1H
-]g15P"@<KAU&</D f0Y>FC f]= AoDR /OtD hQ0 6CcMFE;/BA KZ)+G]\"@H=
-`6mOu"b5AU&<BDe <U&AT T&:A U&<BD e<U& ATX (gOu"b)ASG djF<G7.BkM+
-$OtVtS04f$2F!+\ I">DM c1QDS l0etP F"> DPd16)Jl0J YGE">MSd16)
-Jl0etME">DSc1QD Sl1GCVF ">DVd1 6)Jl1 ,(M E">MYd16)J l1GCSE">DSe
-0ocAj1GU\F">DVf0TH8j1,:SE">MYf0TH8j1GUYE">VYc1QDSn0ebDD">V\d16)Jn0JG;C">__
-d16)Jn0ebAC">VYe0ocAl0etJD">V\f0TH8l0JYAC">__f0TH8l0etGC">V_e0ocAl1GCPD">V
-bf0TH8l1,(GC">_ef0TH8l1GCLgOu"b#@<,jk@<-FL,VUr.1GgsI2`Nf`6:4.07Rp!@8kViP:/
-=\`;H$Op<``C+>*:Zp@q]:kG%#3.La8-@Ou%moL]N;VHXg_tEctl-F-8_M3+?<:@q]:kF-8_C!
-Kp->5*C/=P":B/L]LsnEas#uAWgMY!KsF/@UX:eDe*FB5)96&9OhaEEctl-F-8_M@$5JU04K->
-E,[FFBm;sQA4($=Ea`I"ATEeb91`5.D09oA+Cf>-FCAm$+E).6Gp$U*E+sE&C`mP*FED)7F!+n
-/A0>DsB5)I/0/%?SBldisEcQ)=P!=AX<.0p#04J@1Ch7K,@UX:eDe*FB@ZiN#ASu"!FE/L5@<-
-0qDMSFYCm(WX1G<ipF<G%$Ebo<)OpR:-L]E53@UX:nAT!;)P,Wd]Bp(ZC1G<H[A9]5,BOPq)@;
-L!-@UX:eDe*E%BnueQ9Ti&31M(H6F*)FFBnunTCh7KoF!,17A9a81P'M.oF<G9?>9IB`Eas#uA
-KY]C!Kp,jL]ilWMEk,7c]W*dAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?I,S@UaC$
-ASu"!FE3OROpR:-04JU9+D#G#F*)Gc@Zh%\1Pc$e!G-.YF*)Gc@Yb&JWI$:4P!5$b04f$2+D#G
-#F*)FFBnueQ9Th2CDI\\-0TnSG@UaC$Bnuk)ASGdjFHUHr#a.*/G[b?-+DHW5BOtmjBQTDRL^9
-/%P'DD<<+TrWNWCkt4aUXIF!,1Q!,,qXB4uCMCkr@[2Ni;oBQG;1L]qI'BkM+$P&,p[OuAJJI?
-IQ@DI\\-16OeI@UaC$Bnuk)ASGdjFHUHr#a.*/G[b?-+DHW8BOtmjBQTDRL^9/%P'DD<<+TrWN
-WCr!4aUXIF!,1Q!,,qXB4uCMCkr@[2Ni;oBQG;1L^7[*BkM+$P&,p[OuAJJI?IQXP"7\t061WA
-0/%?WDJX$)ARTU4@UaC$@UaC3@VBg*@VBg9F(025>9IBgF-:!g!KsF/MEeUJm#"$rS[*[,K8Mn
-';=%R2Bl7EsF_#'*AU&<D06DG\+EVjMI?IP_DfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu
-<uDIm6sP#RT)I?G)'1G<NXG`k%LA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`
-Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/kix 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp kix 0.0 2015050900 61942 61672
+%%BeginData: 111 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/kix {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 0.175 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (0033) (0123) (0132) (1023) (1032) (1122)
+ (0213) (0303) (0312) (1203) (1212) (1302)
+ (0231) (0321) (0330) (1221) (1230) (1320)
+ (2013) (2103) (2112) (3003) (3012) (3102)
+ (2031) (2121) (2130) (3021) (3030) (3120)
+ (2211) (2301) (2310) (3201) (3210) (3300)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) def
+ /charvals 36 dict def
+ 0 1 35 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.kixBadCharacter (KIX must contain only capital letters and digits) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length def
+ /encstr barlen 4 mul string def
+ /txt barlen array def
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ encstr i 4 mul encs indx get putinterval
+ txt i [barcode i 1 getinterval i 4 mul 3.312 mul textyoffset textfont textsize] put
+ } for
+
+ /bbs encstr length array def
+ /bhs encstr length array def
+ 0 1 encstr length 1 sub {
+ /i exch def
+ /enc encstr i 1 getinterval def
+ enc (0) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 2 height mul 8 div put
+ } if
+ enc (1) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (2) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (3) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 8 height mul 8 div put
+ } if
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bbs bbs
+ /bhs bhs
+ /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/kix dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER kix--
@@ -2911,51 +8818,170 @@ Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: 6540123789-A-K-Z
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp japanpost 0.0 0 0 0
-%%BeginData: 43 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05=p7@ ;^ %&F*)b b'T
-t>:%52X=FD5Z2F- 8_M1G <3G Eas # uAW f6? 1G< 9WDKKE 0@ <Wi+@; L!r
-Ou"b*DI[L*A7]jo G]Y'? @;L !rO u" b* DI[ L*A 7]7aAR fL iDKKH7 F<G
-1(Cia0N1G<i]G][ P9DK M#] Ou "b 5AU &<< BmO ?H$B
-d1uFCf]=H#I;,F( KHLq 3 !N eB Otm jBQ T+q1 G^hM1
-N.5SBl@m1P-6N[F E2)5B6 8E< A Wf3 'L ]NYr Opu >KFD5Z2F*j (NAmoLsAWf3
-'P!FGY<0B5(@ZmR N0oc8t P)X R (F_- _!H] ftD 5*C&O5*@^M H]ft&EckrV1
-OYEdI?J0)*g/N:D fBf4Df 0WZ 5*@^ MP#Q @=F D5Z2F*j'+I ?I/TFCf]=Ao
-DR/+EV1>FCoH/FH S5=1G <i]G ]\"@H =\4@ AU& <<BmO?R09S +EFCf]=H#I;
-,F(KG9FCf]=H#I; ,F(KH V09S+ EBOtm jBQ PA1ASGdjFH S;?1G<<W@ri
-bsNWV'k0TH5k1GF gk1GLYF "#2SeN WV'm0 oc> l0Je^k0etP F"#;YeNWV$k
-1QDPk1Gb$n0JbDC"#2PbNWV!i16)Gl0eeUi0JP>C"#;PbNWUsj0oc>i0Je^k1G^hI!])Qk!\lK
-:Ou"b#@<,jk@<-FL,qq&/1GgsI2`NfL5sdq,77Kd<8P2WL9hnJ\;,U=l<E<1'=^$tE04J@1Ch7
-K,@UX:eDe*FB@ZiN#ASu"!FE30OL]NY>L]`fVL]ikAP,4<t04\d0BlnEP'Trcc1G<ipF<G%$Eb
-o<)L]NY>OpR:-ASu"!FE30;ASu"!L_GqEP'J]jBOt[hF*2>U!0T,kC5;kQ1G<Hu!0T-o!/LYb@
-<-0qDMS=VWI$:4P!5$b@UX:eDe*E%BnueQ9O_FN@q]:kF-8_MNKSFI@P;G5A9a8$Ou&8DP'(JV
-A9`n<P"KG+A9`nVP%Kj[HYS?LP#-Lg5^eep04\d0BlkJ3DIe!J!KsF<$Be;C$BbFQ1M(H6F*)F
-FC5;tTCkr.U!G-.YF!,"-B5)IN99OQR@q]F`CNFW8+Cf(r@r$..D'3A'B5)IN!Ko6LBkM.%F!,
-3?A8,[jFHUl%C*78I!KmJH1OYEcC5<Od:j\?jI?IP_A8,[jFGKp[1ML`;G_dZ/4aShmBkM.%L^
-oS(I?IQDDIe!J$^++rDIe!J-'Dl'"FDe4BkM.%+DG_(G_cB`WJCnEC6CB$P#Q.5A9`n<P%K%oA
-8,[jF<G:8A9a7nI?IQ@DI[a0EZf+Q"-RJV!g3RqDI[`1A8,[jFHT:[GqWZ@ARfLsF_r72BOt[h
-F*2=BA8,[jFHQZf1Lt34BlnD=C*7&$B5)ING]\1P+DDs&+C\c"@rGmh+DHW4P"]VH"-RJV!g3S
-A5Z@F'P&,5OG]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>5?'9FcC*78I!KmJH1OYEWC5;nH'Sl
-dQWI$:6P!5$bASu"!FE/L>L]`fVL]W_?ASu"!L^oS@P'J]jBOt[hF*2=B@q]F`CNFW8L^oRKOu
-$W_B5)I/+DZcCP'DD<82"IdARfLsF_r72BOt[hF*2>U'9[*d'9YPBWKK&KDI[a0EejdQ'SljSC
-m"g1DI[`1@q]F`CNFW8P"Us`ASu"!FE30=L_Y^JP&-9^ASu"!L_Q"FP'J]jBOt[hA8,[jFH-AE
-Ou$fi@r-9uARfCb@r#drFCf]=HS8lBARfLdBkM.%+C\c"@q]:kF!+t+ARfLsF_up8P"_#pI?IQ
-OG]Y'BL]NY>>9IEhARfLdBkM.%L_PXIP&,pUOo^G*;tnV$Cij65FEqe:AohO*+EV1>FCoH/F<G
-[:G]\"@H=\4)P'CPU@rla4L_PXGOo^@@P&,pUOo]-3@rmG?P"Us`04JC3L_Y^JP&,pWOo^^POu
-"b#BQG;*@WR]AOpR:-L]E53@UaDA@Yb&JWI$:4P!5$b04f$2+D#G#F*)FFBnueQ9Th1b@WcR&F
-GKp[1G<EaDJ=3K!0T-LDI\\-0TnSG04K'ABlo.5Ou"b)F`(o8L]W_qI?IQ@DI\\-0p4\H04K'A
-Blo.2Ou"b)F`(o8L]rqtI?IQ@DI\\-16OeI04K'ABlo.5Ou"b)F`(o8L]rqtI?IQ@DI\\-1Qjn
-J04K'ABlo.2Ou"b)F`(o8L^9/"I?IQ=@WNZ++C]J2BlkJ2ASGdjFHUHr#a.*/G[b?-+DDs3F`(
-o8+D>>#B4uCMCkr@[2Ni<5P"7\t061WA0/%?WDJX$)ARTU4@UaC$@UaC3@VBg*@VBg9F(025>9
-IBgF-:!g!KsF/MEeUJm#"$rS[*[,K8Mn';=%R2Bl7EsF_#'*AU&<D06DG\+EVjMI?IP_DfBe@D
-fBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<KOE+*X'Df^#`30If*F_`U>
-D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtY
-uCM@[!I?IP~>
-% uk.co.terryburton.bwipp/japanpost 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp japanpost 0.0 2015050900 66345 66129
+%%BeginData: 162 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/japanpost {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 0.175 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ % 0123456789- C1C2C3C4C5C6C7C8 ST EN
+ /encs
+ [ (300) (330) (312) (132) (321) (303) (123) (231) (213) (033) (030)
+ (120) (102) (210) (012) (201) (021) (003) (333)
+ (31) (13)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ) def
+ /barlen barcode length def
+
+ /encstr 20 1 add 3 mul 4 add string def
+ /digits 20 array def
+ /txt barlen 1 add array def
+
+ % Put start character
+ encstr 0 encs 19 get putinterval
+
+ /checksum 0 def
+ /j 0 def /i 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard match and post
+ indx 11 ge indx 37 lt and { % Insert escape
+ j 18 gt {exit} if % Should fit in 20 chars
+ % 11-20: C1 (11)
+ % 21-30: C2 (12)
+ % 31-36: C3 (13)
+ /digit indx 1 sub 10 idiv 10 add def
+ encstr j 3 mul 2 add encs digit get putinterval
+ /checksum checksum digit add def
+ digits j digit put
+ /j j 1 add def
+ } if
+ j 19 gt {exit} if % Should fit in 20 chars
+ /digit 0 def
+ indx 37 eq {
+ /digit 14 def % space (C14)
+ } if
+ indx 11 ge indx 37 lt and {
+ /digit indx 1 sub 10 mod def
+ } if
+ indx 11 lt {
+ /digit indx def
+ } if
+ encstr j 3 mul 2 add encs digit get putinterval % space
+ /checksum checksum digit add def
+ digits j digit put
+ txt i [barcode i 1 getinterval j 3 mul 2 add 3.312 mul textyoffset textfont textsize] put
+ /j j 1 add def
+ } for
+
+ % Fill spaces (c14) at right end
+ j 1 20 1 sub {
+ /k exch def
+ encstr k 3 mul 2 add encs 14 get putinterval
+ /checksum checksum 14 add def
+ digits k 14 put
+ } for
+
+ % Put the checksum character
+ /checksum checksum 19 mod 19 exch sub def
+ encstr 2 20 3 mul add encs checksum get putinterval
+
+ % Put end character
+ encstr 2 21 3 mul add encs 20 get putinterval
+ /checkdigit ( ) def
+ includecheckintext {
+ /checkdigit barchars checksum 1 getinterval def
+ } if
+ txt i 1 add [ checkdigit 20 3 mul 2 add 3.312 mul textyoffset textfont textsize] put
+
+ % Put end character
+ encstr 20 1 add 3 mul 2 add encs 20 get putinterval
+
+ /bbs 21 3 mul 4 add array def
+ /bhs bbs length array def
+ 0 1 bbs length 1 sub {
+ /i exch def
+ /enc encstr i 1 getinterval def
+ /bunit 0 def
+ /hunit 0 def
+ enc (0) eq {
+ /bunit 3 def
+ /hunit 2 def
+ } if
+ enc (1) eq {
+ /bunit 0 def
+ /hunit 5 def
+ } if
+ enc (2) eq {
+ /bunit 3 def
+ /hunit 5 def
+ } if
+ enc (3) eq {
+ /bunit 0 def
+ /hunit 8 def
+ } if
+ bbs i bunit height mul 8 div put
+ bhs i hunit height mul 8 div put
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bbs bbs
+ /bhs bhs
+ /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/japanpost dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER japanpost--
@@ -2966,51 +8992,147 @@ uCM@[!I?IP~>
% --EXAM: 0123456789
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp msi 0.0 0 0 0
-%%BeginData: 43 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05YcEH \` B!23JD %Df
-Bf4Df0WZ5*@]T@U X:eDe *FB 5*@ ] TA8 c@- A9) +&+D,% uF (LLj05 5<6
-Cis9"@q]F`CER4t Cia0N 1G< H[@ r- 9u ATV L.F <G1(Ci a0 N1G<H[ @r-
-9uARfCb@r#drFCf ]=+D ,%u F( LL j04 S[, @r$ 13E+
-P%5D/Wr>0Tn4F@U WeaD e (R W+ D,% uF( LLj0 6CcMF
-CoH/FHOV,1G<i]G ]\"@H= _m> O u"b 5A U&<B De< U&ATWb(Ou" b)ASGdjFGKs
-\1N.5SBl@m1P-6N [FE2)5 B68 E <AWf 3'L] NYr Opu>KFD5Z2 F*j(NAmoLsA
-Wf3'P!FGY<0B5(@ ZmRN0o c8t P)XR (F_- _!H ]ftD5*C&O5 *@^MH]ft&Ec
-krV1OYEdI?J0)*g /N:Df Bf4D f0WZ5 *@^M P#Q @=FD5Z2F*j '+I?I/TFCf]
-=AoDR/+EV1>FCoH /FHS5 =1G<i ]G]\" @H= \4@AU&<<Bm O?R09S+EFCf
-]=H#I;,F(KG9FCf ]=H#I;, F(KHV0 9S+EB Otm jBQPA1ASGd jFHS;?1G<<W
-@ribsNX.?p0etI=0f"ap0etI=0etL=NX.?p0etL=0f"ap0etI=1,1O=NX.?p1,1L=0f"ap0etL
-=0etL=NX.?p1,1O=0f"ap0etL=1,1O=NX.Bp0etI=0f"ap1,1L=0etL=NWLsjNWV!k0jTqu04J
-@1@q]:kF,gS]0etOA2)[BQ3Kc0O@UX:nASrW"@<,jrA7^p5Ou"b5G][b5DBNCsEbo<)Ou"b.De
-(RVHS8lIA7^ofOu%moL]Cq'A7^+D0TrDu5)9Q/Cm"g^5(/ScP')Q^P&,pSH\_]c=GR<IC6AU\5
-)9Q/;Na"q!0TKlP')pQI?IQm5(/T*L]E52@rGmhH\aA=WKI:F5(/ScP!5%OOo^@GP%od[P!5&.
-L^K;[@rGmhP%'4JOo^`BOuS6t@rGmhP'N3M@rGmhP%'4MM#WWnLbOtmP'DD<%[&V$D/Wr>0mbQ
-`De*FB5*@^3De*FB@Yb&JWFKjWAUB4eP,XU.OuS6uP,XU.L^'#WL]W_?P!4;W8Wn4P!+TqXAWg
-MLL]`G6P)#3:Oo]uoK89nuC5<7\5*Dn$$^,7f3/@p)4^qi1D/Wr>0p2ZdP'(8QA7^p5L]W_?P,
-4=$L]Cq'A7^pLOuQriA7^p5NWLphP'MJ&@rGmhP%'4JOo^`BOuS6t@rGmhP'N3M@rGmhP%'4MM
-#WWnLbOtmP'DD<<IL#?Ou"b/@rcF)A2,fc04Sp2AWf6?1Lk?6AWgMY!KsElDe*F+LbP!kP!5$g
-L]N[<P!4[-P%odSOo^_0I?I0bFbg$-De*FB@XEn5L]NZoP&-9^I?K5=$^,7\$^*]:WJCqFC6CQ
-4$BdP]@:X4nA2,g%"FH;S@rGmhP%'4KOo^`BOuS6t@rGmhP'N3M@rGmhP%'FQ0eec9I=#IBA7^
-p5L]NY>P,4=$L]Cq'A7^pLOuQriA7^p5L]iP6P)"iIOo^_jI?ITYOq*X2Bl7EsF_#&nBOt[hHQ
-Zg3ARfLtH#R>T"`80g0eebRHX^E(@rGmh+Dl%-0ee$=<+BTQ@r$13E+P%7D/Wr>0JP8E4aUXHE
-as#uAKYi.A2,b\D/Wr>0R]*`@q]F`CNOi@AW?q2De(RWP!+/$@<,jrA7Zm#De(RWI?IQ>BOt[h
-FEqh:NX0N4Ec#`*0enhSHX^E(@rGmh+Dt\0D/Wr>0n#3a@q]F`CNOi@AW@"4De(RW0eebRHX^E
-(@rGmh+Dl%-0ejefDe(RVI?IQ>BOt[hFEqh:NXBZ6Ec#`*0ekC:P!+/$@<,jrA7Zm$@rcF)A2,
-e]D/Wr>0R]*`04J@1@rGmhP!5$b04J@1Ch7K,@UX:eDe*FB@ZiN]DI[L*A7]7aARfLiDKKH7FF
-,Z_G][b5DBNCsEbo<)Ou%NL<.0p/06:TD+C\c"Ch7L?#a0"["d/nLV33VfFEhmM@UX:nAT!Y;O
-u%/gF,0g-DI[aD$Be&FH&)HV!FfJXCh7L?!KsF/056S5Ou$QUEas#uAKY]C!Kp,c@<,jk@<-FP
-5*CngFcp2eBl7I+P!5$bP')q104f$2+D#G#F!,17A9a81Ou%/gF!,1Q#a0"[!g3RqDI\iTFEhm
-MBcpV&@UX:eDe*E%BnueQ9PK:kP&,pVOo]Z9G]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>5?'9
-G\P"9Y'F!+q#Ebo<)L^9/[L]W_?ASu"!L^TA=P'K/P061WA0/%?WDJX$)ARTU4F(025>9IurF*
-i]sP,Wkm8R3uYBQG;#+EM"5P%'4JOo^@?P#?X?ASGdjFFB=)>q]YrF!+[0F(03R@Yb&J!Jgf?;
-L=3"I?K4g+DG_'Cis9"FCf]=HS9JcF<G[MFGKp=G][b5DN[\AP#O)QE-*4@E-,f4DK?pa4s4BS
-DKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X205YcEOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#
-8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/msi 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp msi 0.0 2015050900 71052 70834
+%%BeginData: 139 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/msi {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includecheck false def % Enable/disable checkdigit
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /checktype (mod10) def
+ /badmod11 false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (12121212) (12121221) (12122112) (12122121) (12211212)
+ (12211221) (12212112) (12212121) (21121212) (21121221)
+ (21) (121)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /barlen barcode length def % Length of the code
+ /txtlen barlen def
+
+ /mod10 {
+ /code exch def
+ 0 0 code {48 sub exch 10 mul add exch} forall pop 2 mul
+ 0 {1 index 10 mod add exch 10 idiv dup 0 eq {pop exit} if exch} loop
+ 0 0 code {48 sub add exch} forall exch pop add
+ 10 mod 10 exch sub 10 mod
+ code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put
+ } bind def
+
+ /mod11 {
+ /code exch def
+ code length 1 sub code {48 sub exch dup 1 sub exch 6 mod 2 add exch} forall pop
+ 0 code length {3 1 roll mul add} repeat
+ 11 mod 11 exch sub 11 mod
+ dup 10 eq badmod11 and {
+ pop code length 2 add string dup 0 code putinterval dup code length (10) putinterval
+ } {
+ code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put
+ } ifelse
+ } bind def
+
+ /ncrmod11 {
+ /code exch def
+ code length 1 sub code {48 sub exch dup 1 sub exch 8 mod 2 add exch} forall pop
+ 0 code length {3 1 roll mul add} repeat
+ 11 mod 11 exch sub 11 mod
+ dup 10 eq badmod11 and {
+ pop code length 2 add string dup 0 code putinterval dup code length (10) putinterval
+ } {
+ code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put
+ } ifelse
+ } bind def
+
+ % Calculate checksum
+ includecheck {
+ checktype (mod10) eq {barcode mod10} if
+ checktype (mod1010) eq {barcode mod10 mod10} if
+ checktype (mod11) eq {barcode mod11} if
+ checktype (ncrmod11) eq {barcode ncrmod11} if
+ checktype (mod1110) eq {barcode mod11 mod10} if
+ checktype (ncrmod1110) eq {barcode ncrmod11 mod10} if
+ /barcode exch def
+ /barlen barcode length def
+ includecheckintext {/txtlen barlen def} if
+ } if
+
+ /sbs barlen 8 mul 5 add string def
+ /txt barlen array def
+
+ % Put start character
+ sbs 0 encs 10 get putinterval
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 8 mul 2 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 12 mul 3 add textyoffset textfont textsize] put
+ } for
+
+ % Put the end character
+ sbs barlen 8 mul 2 add encs 11 get putinterval
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt 0 txtlen getinterval
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/msi dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER msi--
@@ -3021,59 +9143,154 @@ DKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X205YcEOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#
% --EXAM: 01234ABCD
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp plessey 0.0 0 0 0
-%%BeginData: 51 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05t`=F )t o<H\`B !23
-JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj
-055<6Cis9"FCf]= +D,%u F(L Lj0 6U c? Bk1 XoA RfCb@r !3 !@;L!r Ou"
-b*DI[L*A7]7aARf LiDK KH7 F< G1 (Ci a0N 1G< lgBk
-1puARfgrDf0!"+D ,%uF ( LL j0 6Cc MFC oH/F HOV,1
-G<i]G]\"@H=_m>O u"b5AU &<B D e<U &A TWb( Ou" b)ASGdjFGK s\1N.5SBl@m
-1P-6N[FE2)5B68E <AWf3' L]N Y rOpu >KFD 5Z2 F*j(NAmoLs AWf3'P!FGY<
-0B5(@ZmRN0oc8tP )XR(F_ -_! H]ft D5*C &O5 *@^MH]ft&E ckrV1OYEdI?
-J0)*g/N:DfBf4Df 0WZ5* @^MP #Q@=F D5Z2 F*j '+I?I/TFCf ]=AoDR/+EV1
->FCoH/FHS5=1G<i ]G]\" @H=\4 @AU&< <Bm O?R09S+EFC f]=H#I;,F(K
-G9FCf]=H#I;,F(K HV09S+E BOtmjB QPA1A SGd jFHS;?1G<3 GEarckEc[6P
-0JP==1c70M3&s8k6UX@4Ou"b$BOPq)@;L"@&<\o61Pc$e!Jh85@q]:kG%#3.P!5$g@UX:eBOPq
-&P!4[&P"_$&P'DD<8;I8%!FfJX@rGmhP%'4JP,We;@<,jrA7^ofL]NZ4@q]:kG%#3.P!5%:P&P
-b$@WuO*E%Z*GATMp(GsYqM6YKnK@:OCjEfN+UCh7[/AU,D8F`VXI@rH7,@;0U%Df0B:+Co2!Bl
-nD=@;]TuCh7^1ATDi75p/K:6Qec>73G&Q061K8F(Jp'Ec5u]5CJ\oI?I,S@UX:nASrW"@<,jrA
-7^p5G%#3$A79Rk@q]F`CO:j=P,Wkm<0B$j@q]F`CLV""F!+q#Ebo<)L]ilWL^9.EOpR:-@q]F`
-CLV""F!+q#Ebo<)L]ilW>DN98!/LW2!/LW2!/LW2!*tb5L]E53@UX:nAT!;)P,Wd]Bp(ZC1G<H
-[A9]5,BOPq)@;L!-@UX:eDe*E%BnueQ9Ti&31Lk*0@r#OfFE8R=L]ilW>9IWtA9`n2Op#K:A9`
-q1Oq3?LOp#K:A9`q0Oq3?LOp#K:A9`q/Oq1i]H$tiH04S[,@r$-oCige(L]N;4L]N;4L]E53L]
-E52L]LeE1Pc$e!FfJXCh7L?"HmSW!KsF/056S5Ou$T]ARfLbBlnD=Bp),F!KoTmL]E53L^8>\C
-6CcD1Lk*0@r#OfFE8R=+DR&?@q]F`CLV""F!,0>C6AU\94MXH@r$-oCige7P"UtSP'DD<8:?Y#
-I?I,S@q]F`CNa-&L]ESoL]E53L^/8[Bp(ZC1G<6OARfM!@;I&rBOt[hG%#3C!bicgG]8fs@q]F
-`CLV""F!+q#Ebo<)L]ilWBp&L[99O+S!Ko6eP"769BOt[hF*2=S+Cf(r@r$6rCkrUb"HkPo@q]
-F`CNFW81*C(?ARfM!@;LbtOq3^3G%#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<
--E3@q]F`CNFW80p51mD.6po@rGmh+C\c"Ch7L?!KmJH94D=M@q]:kF!+t+ARfLsF_rms99O.TE
-dKHKGA2#8/oYW<F)to<6=FClBOt[h6tp:JFE<Hi8T&$VEcP`$F<FCrATMp(Gp$U1ARfKuA8,[j
-FE8RDEc6,8A7]:)061K8F(Jp'Ec5u]5CJ\o04J@1@rGmh+C\c"@rGmhL]CmmEbo<)P"_#pI?IP
-_ASu"!+Bsj30f1UA0f1UANX.Er0f1UA0f4mr0f1[A0f1UANX.Er1GU[A0f4mr0f1UA1GU[ANX.
-Er0f1[A0f4mr0f1[A1GU[ANX.Er1GUaA0f4mr0f1UA0f1[ANX.Er0f1UA1GXsr0f1[A0f1[ANX
-.Er1GU[A1GXsr0f1UA1GUaANX.Er0f1[A1GXsr0f1[A1GUaANX.Er1GUaA1GXsr1GUaA0f1[AN
-X7R"0f1U?1GUbH"#D\g?'6usF(025@UX:nAT!;0P&,8YBk1puARfgrDf0!"H\`VhH\`hnP#[YG
-P,4<t06DG\+C\c"Ch7L?!g3SI$'I)c@WR>*ASu"!L_,_BP'Mi`L]LsnEbo<)L]N[<HS9)r5*@]
-TBl7I++Cf(nEctl-F!+q#Eas#uAKY]C!Kp->99M)P@WNZ+L^9/[L^9.EASu"!+DG_(G`k^_H$"
-:Q+DDs&+C\c"@rGmh+DHW4P"]SG'U!9g'TrK=AU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C
-1.TI?I-B@WNZ$@<-0qDMSR]Ckr@[!G-.YF!+t+ARfLsF_rjr99ORA@WNZ$@<-0qDMSR]CkrXc!
-G-.YF!+t+ARfLsF_rms99OR7DI[L*A7]7aARfLiDKKH7FF,-PG]Y';@<-0qDBN.+@UX:eBOPq&
-+Cf(r@r$..D)$hIP"]=nEbo<)L_Q"gL_Q!QFCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY9
-AG]\1P+C\c"Ch7L?!KmIf+C\c"@q]:kF!+t+ARfLsF_rmi!Kp,c@<-0qDMS=V!JhGQCkrdg!H_
-mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD%FEhmM@UX:nASrVpNWC83@<-0qDMT!iCk
-rdg!H_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'D(nF<G%$Ebo<)L]NY>>E/_,@UX:nA
-T!;)Oo^@QP&,pgOo]Z9G]\4LAnH*qF<G[:G][P9DKI"CAU&<<BmO>5?'9G\P#ZR4F!+q#Ebo<)
-L^9/[L_u9UASu"!+E_R9A8-'q@ruF'DII@.L_>,_L_5&u<K^"<Gs"2BEb0,A061WACh[cu@<+#
-B@WNYr+EM"5H\aA=WI9q$>q]Z#F!+[0F(03R@Yb&J!Jgf?;L<(gBkM+$I?K4g04JC3+Bot0@WR
-]AL]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU&<D06DG\+EVjMI?IP_DfBe@DfBf4Df0V=5!C*"Df
-0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<]`ATMp(H'1.MA1r(@/n8fPFCfK5H"(o:FDl%L@
-WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/plessey 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp plessey 0.0 2015050900 67754 67457
+%%BeginData: 146 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/plessey {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /validatecheck false def
+ /includecheckintext false def
+ /unidirectional false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEF) def
+ /charvals 16 dict def
+ 0 1 15 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.plesseyBadCharacter (Plessey must contain only digits and letters A B C D E F) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {2 sub} if def
+
+ % Calculate the checksums
+ /checkbits barlen 4 mul 8 add array def
+ checkbits barlen 4 mul [ 0 0 0 0 0 0 0 0 ] putinterval
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ checkbits i 4 mul [
+ indx 1 and
+ indx -1 bitshift 1 and
+ indx -2 bitshift 1 and
+ indx -3 bitshift
+ ] putinterval
+ } for
+ /checksalt [ 1 1 1 1 0 1 0 0 1 ] def
+ 0 1 barlen 4 mul 1 sub {
+ /i exch def
+ checkbits i get 1 eq {
+ 0 1 8 {
+ /j exch def
+ checkbits i j add checkbits i j add get checksalt j get xor put
+ } for
+ } if
+ } for
+ /checkval 0 def
+ 0 1 7 {
+ /i exch def
+ /checkval checkval 2 i exp cvi checkbits barlen 4 mul i add get mul add def
+ } for
+ /checksum1 checkval 15 and def
+ /checksum2 checkval -4 bitshift def
+ validatecheck {
+ barcode barlen get barchars checksum1 get ne
+ barcode barlen 1 add get barchars checksum2 get ne or {
+ /bwipp.plesseyBadCheckDigits (Incorrect Plessey check digits provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (14141414) (32141414) (14321414) (32321414)
+ (14143214) (32143214) (14323214) (32323214)
+ (14141432) (32141432) (14321432) (32321432)
+ (14143232) (32143232) (14323232) (32323232)
+ (32321432) (541412323) (323)
+ ] def
+
+ /sbs barlen 8 mul unidirectional {27} {33} ifelse add string def
+ /txt barlen 2 add array def
+
+ % Put start character
+ sbs 0 encs 16 get putinterval
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ /indx charvals barcode i 1 getinterval get def
+ sbs i 8 mul 8 add encs indx get putinterval
+ txt i [barcode i 1 getinterval i 20 mul 20 add textyoffset textfont textsize] put
+ } for
+
+ % Put the checksum characters
+ sbs barlen 8 mul 8 add encs checksum1 get putinterval
+ sbs barlen 8 mul 16 add encs checksum2 get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum1 1 getinterval barlen 20 mul 20 add textyoffset textfont textsize] put
+ txt barlen 1 add [barchars checksum2 1 getinterval barlen 1 add 20 mul 20 add textyoffset textfont textsize] put
+ } {
+ txt barlen [( ) barlen 20 mul 20 add textyoffset textfont textsize] put
+ txt barlen 1 add [( ) barlen 1 add 20 mul 20 add textyoffset textfont textsize] put
+ } ifelse
+
+ % Put end character
+ sbs barlen 8 mul 24 add encs unidirectional {18} {17} ifelse get putinterval
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/plessey dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER plessey--
@@ -3081,191 +9298,652 @@ WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --BEGIN ENCODER telepen--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Telepen
-% --EXAM: 123456
-% --EXOP: numeric includetext
+% --EXAM: ABCDEF
+% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp telepen 0.0 0 0 0
-%%BeginData: 63 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 06CcAA T2 3uH\`B !23
-JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T DKT f-EbT# +A moLsAW ei&
-A8c@-A9)+&+D,%u F(LLj 055 <6C is 9" FCf ]=+ D,%uF( LL j06CcM FCo
-H/FHOV,1G<i]G]\ "@H= _m> Ou "b 5AU &<B De< U&AT
-Wb(Ou"b)ASGdjFG Ks\1 G <] UE cYe 7Am oLsA WeifE
--,f4DKCuE06;5UB l7R*H# R>X 4 aVt cO u8C3 DfB f4Df0WCP,i 2'Cia0N4aW>
-WI?IQm30Ia6V33Q n!BlU* FE2 M 8P!+ /T/W r;\ FcnqO1OXV5 /Tc#UAWeitP
-#ZpnAWe*t3A5;iF D5Z2F- 8_M 1OYE cDfB f4D f0WCOu%NL8 M>0sG][P9DK
-I"CAU&</Df0Z[/W qnCFC f]=F (or3+ EV1> FE; /BAWe^01G< i]G]\4LAnH*
-qF<G[:G]\4LAnH* qFHS; ?1G<E QBkM+ $+D >>#B4uCM09 S,1@<-F#HS9
-5WB-:YlEas#uAWg McV33Vf C5;kQ1 Lad5@ rGm hH]A,5P)Xg O3,N_LP!3WD
-5*C2S@VV&,L]NY>05?Y6Ou&8DOuS6tL]`f6Ot:HkB9GGnL]N[<P!5%ROuSV6L]`g>L]`f(P"^:
-NOuR<"B9GGnP!5%SP%&0h!AA2N5*@]T@UX:eDe*E%D0'?G!,@ZjOu&7dI?ITYP%B')<%hg#@ri
-bsNX.Eq1GL[?1GOms0ekI=1GL[?0en[o1G^gA1GLU=NX@Kq0ekI=1GL[?NX@Qs0ekI=1GLU=NX
-.?o1G^gA1GOmq0f(O?1GL[?NXRWs0ekC;1GL[?0en[o1GL[A1GLU=NX@Kq1GLU=1GL[?NX.Es0
-ekI=1GOms0ekC;1G^gA0en[q1GLU=0ekI=1GOms0ekC=0f(U?0en[q0f(O=0f(U?0en[s0ekC;
-0ekC;1GL[?NX@Qs1GLU=1GLU=NX.?o1GL[A1GOmo1G^gC1GOmu0ekC;1GLU=1GLU=NX.Eq0ekI
-?1GOms0ekI?0ekI=0en[q0f(O?0ekI=0en[q0ekC;0ekI?1GOmq1GLU?0f(U?NXRWs1GLU=0ek
-I=0en[q1G^a?0ekI=0en[q0ekC;0f(O?1GOmu1GLU=0ekC;1GLU=NX@Kq0f(O=0f(U?NX@Ks0e
-kC;0f(U?NXdcu0ekC;0ekC;1GLU=NX.Eq1GL[A0en[q0ekI=1GLU=1GOmq1G^gA0ekI=NX@Kq0
-ekI=1G^a?NX@Qs0ekI=0ekI=NX.?o1G^gC0en[o0f(O?1G^a?NXRWs0ekC;1GLU=1GOmq1GL[A
-0ekI=NX@Kq1GLU=1G^a?NX.Es0ekI?0en[q0ekC;1G^a?1GOms1GLU=0ekI?0en[q0ekC=0f(O
-=1GOms0f(O=0f(O=1GOmu0ekC;0ekC;1G^a?NX@Qs1GLU=0ekI=NX@Kq1GLU?0f(O=NX.Es0f(
-O?0en[s0ekC;1GLU=0ekI=NX@Qs0ekC=0f(O=NX@Kq1G^a?0ekI=NX@Ks0f(O=0ekI=NXRWs0e
-kC;0f(O?0en[q1GLU?0ekC=0en[s0ekI=0ekC;0ekI=NX@Qu0ekC;0ekI=NXRWs0ekC=0ekC=0
-en[s1GLU=0ekC;0ekI=NXRWs0f(O=0ekC=0en[s0f(O=0ekC;0f(O=NXdcu0ekC;0ekC;0ekI=
-NX@Qs1GL[?0ekC;NX.?o1GL[?1Gb$q1G^gA1Gb%"0ekC;1GL[?0ekC;NX.Eq0ekI=1Gb$u0ekI
-?1GLU=0en[q0f(O?1GLU=0en[q0ekC;0ekI=1Gb$q1GL[A1Gb%"0ekI=0ekI=0ekC;NX@Qu0ek
-I=0ekC;NX.?o0ekI?1Gb%"1GLU=0ekI=0ekC;NX.?o0f(O?1Gb$s0f(O=0f(UANXdcu0ekC;0e
-kI=0ekC;NX.Eq1GLU=1Gb$u0ekI=1G^a?0en[o1G^gC0ekC;NX@Kq0ekI=0ekI?NX@Qs0ekI?0
-ekC;NX.?o1G^a?1Gb$s0f(O?0ekI?NXRWs0ekC;1G^a?0en[q1GLU?0f(O=0en[q0ekI=0ekC;
-1Gb$s1G^a?0ekI?NXRWs0ekC=0f(O=0en[q1GLU=0ekC;1Gb%"0ekC=0ekC=0ekC;NXRWu0ekC
-;0f(O=0en[s0ekC;0ekC;0ekI?NX.Eq1GLU?0f+gu0ekI=1GLU=0ekC;NX@Qu1GLU=0ekC;NX@
-Kq0ekI=0f(O?NXR]u0ekI=0ekC;0en[o0ekI?0f(O?NX.?q0f(O?0f+h"0ekC;0ekI=0ekC;0e
-n[q1GL[A0ekC;0en[q0ekI=0ekC=0f+gq1G^a?0f(O?NXRWs0ekI?0ekC;0en[q1GLU=0ekC=0
-f+gu0ekC=0f(O=0ekC;NXRWu0ekC=0ekC;0en[s0ekC;0ekC;0f(O?NXR]u1GLU=0ekC;0en[q
-0ekI=0f(O=0f+gq1G^aA0ekC=NXdcu0ekI=0ekC;0ekC;NX@Qs0ekC=0ekC=NXRWs1G^a?0ekC
-;0en[s0f(O?0ekC;0ekC;NXRWs0ekC;0f(O=0f+gs1GLU?0ekC;0f+h"0ekI=0ekC;0ekC;0en
-[s1G^a?0ekC;0ekC;NXRWs0ekC=0ekC;0f+h"1GLU=0ekC;0ekC;0en[s0ekC=0ekC;0ekC=NX
-RWu0ekC;0ekC;0f+h$0ekC;0ekC;0ekC;0ekC;?'6us@UX:nASrW"@<,jrA7^p5Ou"b4@WNZ$@
-<-0qDMSjeCksd.!Ks:B1G<ipF<G%$Ebo<)OpR:-04f$2+D#G#F,41d99M)P@WR>*ASu"@GqWtV
-ASu"@@ZiN#@q]F`CNFW8L]ESo0564BOu"b+L]ESoHYFU3@<-0qDN[/0P!FGY<,QhqATDKpHQZd
-+Eas#uAKY]M98F.B:jXj5E$/UuEas#uAKY]C!g66?1N%/f!Jgc>9TB-UP!+.FBl7I++Du.S!/L
-Z=9Tgr_&X!0X1OXU'Bl7I++Du.]/;P7.!Ko6eP#ZUKF<G<@>9Ig&+DQ]DP&,pcOo]Z9G]\4LAn
-H*qF<G[:G][P9DKI"CAU&<<BmO>5?'9FcBcq,G!g3SI1OXU'Bl7I++C\c"@rGmh+DI!3Ou%3)F
-<G<@>E/_,C5<FaCkrXc!H_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'AWo+DHW4Oo^_%
-I?ITYHS9)NA9]5+@<,jrA7ZltP"UroBl7I+L`hjQBl7I+LjkLqOp$,RG]Y'C+Bost@<,jrA7Zl
-tL]NZ4C5<FaCkrXc!H_mtFEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)P'DD%FEhmMC*6`@!?c
--5&<^jc&<['9AU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?IS`Bcq,G!KmJH1OYEd04
-S[,@r$..D'3>%ARfLsF_r78DIe!T!Ko5lASu!#ASu"!+DG_(G`k^_1NR#H+D`03DI\iT05MbI+
-D#G#P%'RTOu"b++DQ]5Oo^_%I?J.p@q]F`CNFW8LjroJARfLsF_uqaP%p/ZLjtS&Ou"b&DIXf#
-DI[`1@q]F`CNFW8P"UroF(025C`m;,A!2*jC`mO:ASu"@@ZgbT1G<<W@j#?#@rmHPP"UroF(02
-5C`m;,A!2*jC`mO:ASu"@@ZgbT1G<fYF!,O5F,0g4P"_#p06DG\+EVjML]D1Q9Th1o4>1_dDD*
-Y`ASu<uDIm6s06:TD+Bot0@WQmP0TrD`P"Aq4@VBg*>9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3
-^->@WNYr+EM"5P%'4JOo^@?P#?X_!.C#_>p*j!@r-9uATVL.FF,Z_G]Y'MG]\@s<%i0/F<GL@F
-D5Z2F!*Y1+CoD.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$FCf9"E+NpM30If*F_`U>D_?-C
-EcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[
-!I?IP~>
-% uk.co.terryburton.bwipp/telepen 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp telepen 0.0 2015050900 68624 68368
+%%BeginData: 173 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/telepen {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /numeric false def
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 1 def
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (31313131) (1131313111) (33313111) (1111313131)
+ (3111313111) (11333131) (13133131) (111111313111)
+ (31333111) (1131113131) (33113131) (1111333111)
+ (3111113131) (1113133111) (1311133111) (111111113131)
+ (3131113111) (11313331) (333331) (111131113111)
+ (31113331) (1133113111) (1313113111) (1111113331)
+ (31131331) (113111113111) (3311113111) (1111131331)
+ (311111113111) (1113111331) (1311111331) (11111111113111)
+ (31313311) (1131311131) (33311131) (1111313311)
+ (3111311131) (11333311) (13133311) (111111311131)
+ (31331131) (1131113311) (33113311) (1111331131)
+ (3111113311) (1113131131) (1311131131) (111111113311)
+ (3131111131) (1131131311) (33131311) (111131111131)
+ (3111131311) (1133111131) (1313111131) (111111131311)
+ (3113111311) (113111111131) (3311111131) (111113111311)
+ (311111111131) (111311111311) (131111111311) (11111111111131)
+ (3131311111) (11313133) (333133) (111131311111)
+ (31113133) (1133311111) (1313311111) (1111113133)
+ (313333) (113111311111) (3311311111) (11113333)
+ (311111311111) (11131333) (13111333) (11111111311111)
+ (31311133) (1131331111) (33331111) (1111311133)
+ (3111331111) (11331133) (13131133) (111111331111)
+ (3113131111) (1131111133) (33111133) (111113131111)
+ (3111111133) (111311131111) (131111131111) (111111111133)
+ (31311313) (113131111111) (3331111111) (1111311313)
+ (311131111111) (11331313) (13131313) (11111131111111)
+ (3133111111) (1131111313) (33111313) (111133111111)
+ (3111111313) (111313111111) (131113111111) (111111111313)
+ (313111111111) (1131131113) (33131113) (11113111111111)
+ (3111131113) (113311111111) (131311111111) (111111131113)
+ (3113111113) (11311111111111) (331111111111) (111113111113)
+ (31111111111111) (111311111113) (131111111113) (1111111111111111)
+ ] def
+
+ /barlen barcode length def % Length of the code
+ /sbs barlen 16 mul 48 add string def
+ /txt barlen array def
+
+ % Put the start character ASCII 95
+ /enc encs 95 get def
+ sbs 0 enc putinterval
+ /l enc length def
+
+ /checksum 0 def
+ /i 0 def /j 0 def
+ { % loop
+ i barlen eq {exit} if
+ numeric { % numeric mode: 00-99 & 0X-9X
+ barcode i get 16 gt {
+ /np barcode i 2 getinterval def
+ np 1 1 getinterval (X) eq { % X in even position amongst digits
+ /indx np 0 1 getinterval cvi 17 add def
+ } {
+ /indx np cvi 27 add def
+ } ifelse
+ txt j [np j 16 mul 16 add textyoffset textfont textsize] put
+ /i i 2 add def
+ } {
+ /indx barcode i get def
+ txt j [( ) j 16 mul 16 add textyoffset textfont textsize] put
+ /i i 1 add def
+ } ifelse
+ } { % ASCII mode
+ /indx barcode i get def
+ indx 32 ge indx 126 le and {
+ txt j [barcode i 1 getinterval j 16 mul 16 add textyoffset textfont textsize] put
+ } {
+ txt j [( ) j 16 mul 16 add textyoffset textfont textsize] put
+ } ifelse
+ /i i 1 add def
+ } ifelse
+ /checksum checksum indx add def
+ /enc encs indx get def
+ sbs l enc putinterval % Put encoded digit into sbs
+ /l l enc length add def
+ /j j 1 add def
+ } loop
+
+ % Put the checksum character
+ /checksum 127 checksum 127 mod sub 127 mod def
+ /enc encs checksum get def
+ sbs l enc putinterval
+ /l l enc length add def
+
+ % Put the end character ASCII 122
+ /enc encs 122 get def
+ sbs l enc putinterval
+ /l l enc length add def
+
+ % Shrink sbs and txt to fit exactly
+ /sbs sbs 0 l getinterval def
+ /txt txt 0 j getinterval def
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ includetext {
+ /txt txt
+ } if
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/telepen dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER telepen--
+% --BEGIN ENCODER telepennumeric--
+% --REQUIRES preamble raiseerror renlinear telepen--
+% --DESC: Telepen Numeric
+% --EXAM: 01234567
+% --EXOP: includetext
+% --RNDR: renlinear
+%%BeginResource: uk.co.terryburton.bwipp telepennumeric 0.0 2015050900 57870 57594
+%%BeginData: 55 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /telepen dup /uk.co.terryburton.bwipp findresource put
+begin
+/telepennumeric {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Get the result of encoding with code2of5 with version=industrial
+ options (dontdraw) true put
+ options (numeric) true put
+
+ /args barcode options //telepen exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/telepennumeric dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER telepennumeric--
+
% --BEGIN ENCODER posicode--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: PosiCode
% --EXAM: ABC123
% --EXOP: version=b inkspread=-0.5 parsefnc includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp posicode 0.0 0 0 0
-%%BeginData: 105 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05tiNB k) 'lAUB4 IOu
-8C305kfOBl@m1P! 5$b04 J@1 @rG m hP! 5$b 04] !=FC]E #G 9CL+Ci a0N
-1G<H[@r-9uATVL. F<G1( Cia 0N1 G< i] G][ P9D KM#]Ou "b 5AU&<< BmO
-?H$Bd1uFCf]=G]. 2+F( KHL !0 T, kFC f]= H#I ;,F(
-KHLq3!NeBOtmjBQ T%2O u "b &D I[T qBl 7RD" CZFpD
-iun0G%G]8Bl@mL! F_-I04 S[, @ r$! pA ohO* L]E So061KF+D, %uF(LLj05t?
-?F(HJ+@;L!rOu"b 1@<-F# Ao; * $Amo LsAW eif E-,f4DKCuE 06;5UBl7R*H
-#R>X4aVtcOu8C3D fBf4Df 0WC P,i2 'Cia 0N4 aW>WI?IQm3 0Ia6V33Qn!B
-lU*FE2M8P!+/T/W r;\Fc nqO1 OXV5/ Tc#U AWe itP#ZpnAWe *t3A5;iFD5Z
-2F-8_M1OYEcDfBf 4Df0W COu%N L8M>0 sG] [P9DKI"CAU &</Df0Z[/Wq
-nCFCf]=F(or3+EV 1>FE;/B AWe^01 G<i]G ]\1 KAnH*qF<G[ :G]\1KAnH*q
-FHS;?1G<i]G]\4LAnH*qF<G[:G]\4LAnH*qFHS;?1G<<W@rGmlDJ()'DI[TqBl7RH/WqnCG%G]
-8Bl@l3G%G]8Bl@mP/WqnC@q]F`CN!fsF(KG9@q]F`CN!fsF(KHV/<VeBBOtmjBQPA1ASGdjFHS
-;?1N6cCF(K\OD0'>4@UX:eDe*FB@ZmRN1G<L!!0T-I@<,jrA7^+J!FCqKH]g@*F(^Y"C6CcDH'
-2WOOo^@>Oo[4NP!5$bP')pIL]E55P"_#iD0'?Q5&,lSP,XU.P'E-LP%'4LP,X6>P!5%&I=%,:D
-0'?Q5&-6EP'N4"C6ATNC6CcD1G<3GEas#uAKYi2B8?P&P"_#pP!FGY<IL$AI?IP_@UX:nASrW"
-@<,jrA7^p5Ou"b-@5*N;Ou"b-@53T;Ou"b-@5<Z;Ou"b4Ah]&=Ou"b4Ahf,=Ou"b4Aho2=Ou"b
-'DD?tCOu"b'DDI%COu"b'DDR+COu"b'DD[1COu#3_05b]KD..6'>9I.1!AKN7?B,%6>p*@3!AT
-T84,=h]+Bsj,16)AtL`B\C>E/_?NWD;!*F0dlNWCts!Bu;\>p*@3!B#l<5DUCe+Bsj,2N@f'NW
-C;/+Bsj,2i[oCNWC>0+Bsj,3/Ch"!@(km>E/_ENWEFG!@D(p>E/_MNWERE!F6gPNWDJ,!Fgid>
-p*@3!CMkJ@u(4m+Bsj,7#h:YL]h!+>E/_QNWE^I"^N6TNWDV0!G7,l>p*@3!Cr.NB8?du+Bsj,
-8<*^aL^79/>E/_UNWEjM$!eZXNWDb4!G[Dt>p*@3!DAFRCPW@(+Bsj,9TB-iL^[Q3>E/_YNWF!
-Q%:()\NWDn8!H*]'>p*@3!De^VDhnp0+Bsj,:lYQqL_*i7>E/_]NWF-U&R?M`NWE%<!HNu/>p*
-@3!E5!ZF,1K8+Bsj,</q!$L_O,;>E/_aNWF9Y'jVqdNWE1@!Hs87>p*@3!EY9^GDI&@+Bsj,=H
-3E,L_sD?>E/_eNWFE])-n@hNWE=D!IBP?>p*@3!A0<4?\g+9+Bsj,/rfs?LacUP>E/_,Ljt3\>
-p*@3!@3[+H]A+V>p*@3!ABH6I#\4Y>p*@3!@s02I?"=h>p*@3!@<a,IV*IP+C-*o+DbI@+DbI?
-+D,LH+C-*o+EM-L+EM-K+D,LI+C-*o+EM-M+EM-M+D,LJ+C-*q05P?>Blmos+BosmNWChiSqrt
-D+Bsj,0o2EWSm<ICNWCnkSqrtD+Bsj,1PhWYSm<ICNWCtmSqrtD+Bsj,22Ii[Sm<ICNWD%oSqr
-tD+Bsj,2i+&]Sm<ICNWD+qSqrtD+Bsj,3Ja8_Sm<ICNWDG%SqrtD+Bsj,6AV4hSm<ICNWDM'Sq
-rtD+Bsj,7#7FjSm<ICNWDS)SqrtD+Bsj,7YmXlSm<ICNWDY+SqrtD+Bsj,8;NjnSm<ICNWD_-S
-qrtD+Bsj,8r0'pSm<ICNWDe/SqrtD+Bsj,9Sf9rSm<ICNWDk1SqrtD+Bsj,:5GKtSm<ICNWDq3
-SqrtD+Bsj,:l(^!Sm<ICNWE"5SqrtD+Bsj,;M^p#Sm<ICNWE(7SqrtD+Bsj,</@-%Sm<ICNWE.
-9SqrtD+Bsj,<f!?'Sm<ICNWE4;SqrtD+Bsj,=GWQ)Sm<ICNWE:=SqrtD+Bsj,>)8c+Sm<ICNWC
-_fSqrtD+Bsj,/r6*TSm<IE+?ht3G%G]8Bl@mL!F_-SG%G]8Bl@mL!Fh3TP&bn&DJsQ4@;L@=05
-P?>BlmosI?ITn9.sdg@<-3nE-%1+Ou"b$BOPq)@;L!->9IEh@<-3nE-%1OOu6`_@<-3nE-%1OO
-u6`_@<-3nE-%1OOu6O.1Pc$e!FoeOEc#6(F-:!g!KsF/056S5Ou"b&DI[`1@q]:kD..C)+DI!3
-Ou%moL]N;5HS9,s5*@^5DI[`1C6D5Q30LHuF*)G:DJ+':E+P1qH\_Zb97;t&@q]:kG%#3.+DR'
-4P!3TCG^Y`GI?I,SF(KGI+Cf(nEctl-F,0gZ99M(aF(KGJ+Cf(nEctl-F,0j[99M(aF(KGK+Cf
-(nEctl-F,0m\99M)O@<[&OASu!rA8,poNWX<1GEOb1P#Q"1@rGmlDJ+t3Eaa0T4aShlGB4m9@<
--0qDNY<h1G<Hu!0T,kC5;kQ1OEgY@UX:nAT!YoH]gXBP#O)EG9C@'Eas#uAKY]C!KmJ>"-Q?@/
-<Vf!GB4mA+CfVYGV<bRBnunT!Ko5lC*78I!KmJH1OYEt04T3I+CfV:L]D1Q9Th1bFCf]=NW>4u
-I?IQ@DI[TqBl7RD"CZFpDj!8104o*3G%#3.+?VcH"@c-R0kP;XNW_gH6S`7k16)K,:.$gLDDR:
-U7SZ<-Ao9FJ5!G,c05YcC+C\c"Ch7LI$'I(tFCf]=+C\c"Ch7LIV33VfBnubP1G<L!!0T-bBcp
-knEbo<)P!+/T5^eep04S[(EZeh"Eas#uAKY]M99M)QAU&;>C*7#"@<.NUE+*d.AS,gi+Cf(nEe
-n%b4d#q^+C\c"Ch7L?"HoaIAs*:D@UX:eDe*E%BnueQ!Kp*3?BT/P04S[(EZet3@s29sF!+q#E
-as#uAKY]C!KmJ>"HlHA99M)QAU&;>C5r<;P'J]p+DHW7Oo^_%I=!V]+DHW4Oo^_%I?ITYP#Q:>
-B-:q3@q]:kP'AWo+DHW4Oo^_%05;VEL]NY>Ou%NLAM7nAB-;&4B8?P&P"_#p05YcCCh7K,D0'?
-Q@ZiN#FCf]=+EV1>FGKp3P"_#p04f$2H]gRU94N0eP!3WD5*C.DC*78I!KmJH1OYDrOu"b$GB4
-m9@<,jrA7^p5L]W`UOpR:-0564BOu"b+L]ESo04T'7FH-KFATTVh1OEgYD0'?+AT!YoH]gXBP#
-Qc]@q]:k0d(=SB-:oO99M(a@q]:k1*C:e!KmJ#F(]<#DN\UYD0'>4BnueQ!Kp*(H\e5@P#[Z$@
-rl4'P%8'9@<+)c@!cBs@<+(F@rl4'P%8-A@kVO=BnueQ!Ko7%5^eepF(KGK+Cf(nE\W_bHZNdS
-+CfJ(FHU0GDIXf!BOPp9+EM+91*C.G@kVO=BnueQ!Ko7%5^eep@rl4'P%8'9@<+,d@$5JU@rl4
-'NWaE7F>/k@HYd+F+CfJ(FHU0GDIY>0F(KHR"ES-r0p4>@HYd+E+CfJ(FHU0GDIY>0F(KHR"ES
--r0Tn5?P#[Z1I=#IFATWq8F(KGIP!+/5AhbE<F(KHVA7]Xg+Cf(nE\S\XATTXLASu"+HQ[BA0H
-akHATX)GASu!#@q]:k0d(OKF>+hKDI\*X<A/&/BnueQ!Ko7%5^eeqP!FGYAUT_Q04T3I+CfV:L
-]D1Q9Th2[P#OP+04>u-NWq3p0ekC<NWq3o0etI=NWq3n0f(O>NWq3m0f1U?NWq3o0ekC=NWq3n
-0etI>NWq3m0f(O?NWq3n0ekC>NWq3m0etI?NWq3m0ekC?NWq3t0ekC;NWq3s0etI<NWq3r0f(O
-=NWq3q0f1U>NWq3p0f:[?NWq3o0fCa@NWq3n0fLgANWq3m0fUmBNWq3s0ekC<NWq3r0etI=NWq
-3q0f(O>NWq3p0f1U?NWq3o0f:[@NWq3n0fCaANWq3m0fLgBNWq3r0ekC=NWq3q0etI>NWq3p0f
-(O?NWq3o0f1U@NWq3n0f:[ANWq3m0fCaBNWq3q0ekC>NWq3p0etI?NWq3o0f(O@NWq3n0f1UAN
-Wq3m0f:[BNWq3p0ekC?NWq3o0etI@NWq3n0f(OANWq3m0f1UBNWq3o0ekC@NWq3n0etIANWq3m
-0f(OBNWq3n0ekCANWq3m0etIBNWq3m0ekCBNX.@%0ekC;0f"as0ekC;0ekC;0fq*q04H&.NWq3
-q0etI>NWq3p0f(O?NWq3o0f1U@NWq3n0f:[ANWq3p0etI?NWq3o0f(O@NWq3n0f1UANWq3o0et
-I@NWq3n0f(OANWq3n0etIANWq3u0etI=NWq3t0f(O>NWq3s0f1U?NWq3r0f:[@NWq3q0fCaANW
-q3p0fLgBNWq3o0fUmCNWq3n0f^sDNWq3t0etI>NWq3s0f(O?NWq3r0f1U@NWq3q0f:[ANWq3p0
-fCaBNWq3o0fLgCNWq3n0fUmDNWq3s0etI?NWq3r0f(O@NWq3q0f1UANWq3p0f:[BNWq3o0fCaC
-NWq3n0fLgDNWq3r0etI@NWq3q0f(OANWq3p0f1UBNWq3o0f:[CNWq3n0fCaDNWq3q0etIANWq3
-p0f(OBNWq3o0f1UCNWq3n0f:[DNWq3p0etIBNWq3o0f(OCNWq3n0f1UDNWq3o0etICNWq3n0f(
-ODNWq3n0etIDNX.@%0etI>0f"as0etI=0etI=0g%0r05P?>Blmos@3Ad7"u.he1bg_F"u.he1G
-LYF"u.he1,1SF"u.he0ekMF"u.kf1GLVE"u.kf1,1PE"u.kf0ekJE"u.qh0ekDC"u.ng1,1MD"
-u.ng0ekGD"u/%k0ekDC"u/"j1,1MD"u.ti1GLVE"u.qh1bg_F"u.ng2)-hG"u.kf2DHqH"u.he
-2_d%I"u/"j0ekGD"u.ti1,1PE"u.qh1GLYF"u.ng1bgbG"u.kf2)-kH"u.he2DHtI"u.ti0ekJ
-E"u.qh1,1SF"u.ng1GL\G"u.kf1bgeH"u.he2)-nI"u.qh0ekMF"u.ng1,1VG"u.kf1GL_H"u.
-he1bghI"u.ng0ekPG"u.kf1,1YH"u.he1GLbI"u.kf0ekSH"u.he1,1\I"u.he0ekVI"u.ti0e
-kDC!ARk5Ch[a#FCeul+Bsj10etI@0f"an0etI?0f+go0etI>0f4mp0etI=0f=sq0f(O@0f"an0
-f(O?0f+go0f(O>0f4mp0f:[@0f"an0f1U@0f"an0f1U?0f+go0fUmC0f"an0fLgC0f"an0fCaC
-0f"an0f:[C0f"an0f1UC0f"an0f(OC0f"an0etIC0f"an0fLgB0f+go0fCaB0f+go0f:[B0f+g
-o0f1UB0f+go0f(OB0f+go0etIB0f+go0fCaA0f4mp0f:[A0f4mp0f1UA0f4mp0f(OA0f4mp0et
-IA0f4mp0f:[@0f=sq0f1U@0f=sq0f(O@0f=sq0etI@0f=sq0f1U?0fG$r0f(O?0fG$r0etI?0f
-G$r0f(O>0fP*s0etI>0fP*s0etI=0fY0t0f1U?0f"ai0jPnc4s5#[EcYr5DN[XGASu"!P!5$b0
-4Qb]+BosmL&pat!D8(HdYN@.7Yi:F%u:Bp+BsR#V20AP</<Mi,D[%i$A\gj+BsXRLa7crL_Y^V
-L^JqBL]^p*>DNTA#`&_A#)EG="Gd/9!aQpQL]N;4L]N;4L]N;4L]N;4>p*F91G<p-!0T-JGB8*
-a@s=)"Ou%muHXh7BG*9[t!KmSA!0V2G06SI]L)pDZ_3-U&P#O)X+EiS@Oq3^304T2K@s<b/Oq3
-^3I?K52P"@<M+Eel;BOt[hDe<U&ATX(9Ou%8mEcYr5DN5!=Bl.R+ARo544a(CWF(oQ1NX0H8D/
-"*'A7C]bP&bn&Fs(s_"94MeOu%99"#uH?G(p*!P%Kj[HS9ObG(p#COo^_%I?IQXHS9ObG(p,!O
-p$RmOo^_%I?IS`A0>*4!f-o6!f-o6!f-n`Ou"b3L]ESo04Te<Ou"b8L]ESo06;8QL]ESoHZO=H
-+Eio2H]gXBP#O)V+EM[B+Cd0N+EEW<A!0KJ!Ko6\+Eio2HS9RcGDH9_!Ko6L+EATKL]W_?P'AX
-$F_r7COu%NL<-07+P#-L9+EATKL]W_?P'AX#+EE8=Oo^_%06`3POu%NL<-07+P%K%o@j#9;!Km
-JH1G<qpGDH9_!Ko5lF*2=BFHSG.P#QjmAV_%V!/LZ3"FF[B5*AR%WI9q#A<K-4"d2'4G]mY=F(
-oQ1NWEUP4a(CWF(oQ1NX0H8D/"*'A7C]bP&bn&A0>)!A:'+5Oo]uo8R7K8I?IP_@q'M>$o'Ik0
-ekC;0ekC;0o-7$V32^Z1Pc3js+gZ%056S5Ou$TWF,1!6P,X6=P&,pTOo])9Bp),F09Q@!G^Y`G
-06:TD+CfV:P%'4OP&,prOo^`BOu$Ze@ric(DI[aN@Yb)KWKKo;3-/PMP!4[%P!5%SP%$(ZP!5$
-bL]E53@s<!W@Yb&JWI$:4P!5$bF(025C*7)*@ric&GB4m@P"Us2P'J]q+DQ]:Oo^_%I?I-B@WN
-Z,+Cel%P'J]q+DQ]@Oo^_%ASu"!+D#G#F-:!g!KsFF99M8U@WR\rC6CcDH'2WOOo[4NP!5$b06
-:TD+EM"5L]D1Q9Th1o4>1_dDD*Y`ASu<uDIm6s06:TD+Bot0@WQmP0TrD`P"Aq4@VBg*>9IurF
--:!g!KmJ>!g6H.BOtmjBQSZcK3^->@WNYr+EM"5P%'4JOo^@?P#?X_!.C#_>q^;EF<Fd1>9J$!
-G]Y'MAU&<ADe<U&ATT&:AU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C-*q06CcMFEh51BkM=
-D#%M4^FCfJGDfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<]cF(o
--&A7^o`P%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM
-@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/posicode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp posicode 0.0 2015050900 101857 104871
+%%BeginData: 389 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/posicode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset -7 def
+ /height 1 def
+ /encoding (auto) def
+ /version (a) def
+ /checkoffset 0 def
+ /raw false def
+ /parse false def
+ /parsefnc false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /encoding encoding cvlit def
+ /version version cvlit def
+ /checkoffset checkoffset cvi def
+ /height height cvr def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Special function characters
+ /la0 -1 def /la1 -2 def /la2 -3 def
+ /sf0 -4 def /sf1 -5 def /sf2 -6 def
+ /fn1 -7 def /fn2 -8 def /fn3 -9 def /fn4 -10 def
+
+ % Character maps for each state
+ <<
+ /normal
+ [
+ % 0 1 2 0 1 2 0 1 2
+ [ (0) (^) (') ] [ (1) (;) 27 ] [ (2) (<) 28 ] % 0-2
+ [ (3) (=) 29 ] [ (4) (>) 30 ] [ (5) (?) 31 ] % 3-5
+ [ (6) (@) (!) ] [ (7) ([) (") ] [ (8) 92 (#) ] % 6-8
+ [ (9) (]) (&) ] [ (A) (a) 1 ] [ (B) (b) 2 ] % 9-11
+ [ (C) (c) 3 ] [ (D) (d) 4 ] [ (E) (e) 5 ] % 12-14
+ [ (F) (f) 6 ] [ (G) (g) 7 ] [ (H) (h) 8 ] % 15-17
+ [ (I) (i) 9 ] [ (J) (j) 10 ] [ (K) (k) 11 ] % 18-20
+ [ (L) (l) 12 ] [ (M) (m) 13 ] [ (N) (n) 14 ] % 21-23
+ [ (O) (o) 15 ] [ (P) (p) 16 ] [ (Q) (q) 17 ] % 24-26
+ [ (R) (r) 18 ] [ (S) (s) 19 ] [ (T) (t) 20 ] % 27-29
+ [ (U) (u) 21 ] [ (V) (v) 22 ] [ (W) (w) 23 ] % 30-32
+ [ (X) (x) 24 ] [ (Y) (y) 25 ] [ (Z) (z) 26 ] % 33-35
+ [ (-) (_) 40 ] [ (.) (`) 41 ] [ ( ) 127 0 ] % 36-38
+ [ ($) ({) (*) ] [ (/) (|) (,) ] [ (+) (}) (:) ] % 39-41
+ [ (%) (~) fn1 ] [ la1 la0 fn2 ] [ sf1 sf0 fn3 ] % 42-44
+ [ sf2 sf2 fn4 ] % 45
+ ]
+ /limited
+ [
+ [ (0) -98 -98 ] [ (1) -98 -98 ] [ (2) -98 -98 ] % 0-2
+ [ (3) -98 -98 ] [ (4) -98 -98 ] [ (5) -98 -98 ] % 3-5
+ [ (6) -98 -98 ] [ (7) -98 -98 ] [ (8) -98 -98 ] % 6-8
+ [ (9) -98 -98 ] [ (A) -98 -98 ] [ (B) -98 -98 ] % 9-11
+ [ (C) -98 -98 ] [ (D) -98 -98 ] [ (E) -98 -98 ] % 12-14
+ [ (F) -98 -98 ] [ (G) -98 -98 ] [ (H) -98 -98 ] % 15-17
+ [ (I) -98 -98 ] [ (J) -98 -98 ] [ (K) -98 -98 ] % 18-20
+ [ (L) -98 -98 ] [ (M) -98 -98 ] [ (N) -98 -98 ] % 21-23
+ [ (O) -98 -98 ] [ (P) -98 -98 ] [ (Q) -98 -98 ] % 24-26
+ [ (R) -98 -98 ] [ (S) -98 -98 ] [ (T) -98 -98 ] % 27-29
+ [ (U) -98 -98 ] [ (V) -98 -98 ] [ (W) -98 -98 ] % 30-32
+ [ (X) -98 -98 ] [ (Y) -98 -98 ] [ (Z) -98 -98 ] % 33-35
+ [ (-) -98 -98 ] [ (.) -98 -98 ] % 36-37
+ ]
+ >>
+ version (a) eq version (b) eq or {/normal} {/limited} ifelse get
+ /charmaps exch def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [
+ charmaps length dict charmaps length dict charmaps length dict
+ ] def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 2 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals j get exch i put
+ } for
+ } for
+ /set0 charvals 0 get def
+ /set1 charvals 1 get def
+ /set2 charvals 2 get def
+
+ raw {/encoding (raw) def} if
+
+ encoding (raw) eq {
+ /cws barlen array def
+ /i 0 def /j 0 def
+ { % loop
+ i barlen eq {exit} if
+ /cw barcode i 1 add 3 getinterval cvi def
+ cws j cw put
+ /i i 4 add def
+ /j j 1 add def
+ } loop
+ /cws cws 0 j getinterval def
+ /text () def
+ } if
+
+ encoding (auto) eq {
+
+ /fncvals <<
+ (FNC1) fn1
+ (FNC2) fn2
+ (FNC3) fn3
+ (FNC4) fn4
+ >> def
+
+ % Convert input into bytes accounting for FNC characters
+ /msg barlen array def
+ /text barlen string def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ text j char put
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ text j ( ) putinterval
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+ /text text 0 j getinterval def
+
+ % Convert the input message to codewords
+ /enc {
+ exch get cws exch j exch put
+ /j j 1 add def
+ } bind def
+
+ /cws barcode length 2 mul array def
+ /i 0 def /j 0 def /cset (set0) def
+ {
+ i msglen eq {exit} if
+
+ { % common exit
+
+ % Read next two characters
+ /char1 msg i get def
+ /char2 i 1 add msglen lt {msg i 1 add get} {-99} ifelse def
+
+ % If current mode is sufficient then directly encode
+ cset load char1 known {
+ char1 cset load enc
+ /i i 1 add def
+ exit
+ } if
+
+ % If char1 is in set2 then shift encode
+ set2 char1 known {
+ sf2 cset load enc
+ char1 set2 enc
+ /i i 1 add def
+ exit
+ } if
+
+ % If char2 is also not in this set then latch else shift encode
+ cset load char2 known not {
+ cset (set0) eq {
+ la1 cset load enc
+ /cset (set1) def
+ } {
+ la0 cset load enc
+ /cset (set0) def
+ } ifelse
+ exit
+ } {
+ cset (set0) eq {
+ sf1 cset load enc
+ char1 set1 enc
+ } {
+ sf0 cset load enc
+ char1 set0 enc
+ } ifelse
+ /i i 1 add def
+ exit
+ } ifelse
+
+ exit
+ } loop
+
+ } loop
+ /cws cws 0 j getinterval def
+ } if % auto encoding
+
+ % Create an array containing the character mappings
+ << % ";"=11, "<"=12
+ /a
+ [ (141112) (131212) (121312) (111412) (131113)
+ (121213) (111313) (121114) (111214) (111115)
+ (181111) (171211) (161311) (151411) (141511)
+ (131611) (121711) (111811) (171112) (161212)
+ (151312) (141412) (131512) (121612) (111712)
+ (161113) (151213) (141313) (131413) (121513)
+ (111613) (151114) (141214) (131314) (121414)
+ (111514) (141115) (131215) (121315) (111415)
+ (131116) (121216) (111316) (121117) (111217)
+ (111118) (1<111112) (111111111;1)
+ ]
+ /b
+ [ (151213) (141313) (131413) (121513) (141214)
+ (131314) (121414) (131215) (121315) (121216)
+ (191212) (181312) (171412) (161512) (151612)
+ (141712) (131812) (121912) (181213) (171313)
+ (161413) (151513) (141613) (131713) (121813)
+ (171214) (161314) (151414) (141514) (131614)
+ (121714) (161215) (151315) (141415) (131515)
+ (121615) (151216) (141316) (131416) (121516)
+ (141217) (131317) (121417) (131218) (121318)
+ (121219) (1<121312) (121212121<1)
+ ]
+ /limiteda
+ [ (111411) (111312) (111213) (111114) (121311)
+ (121212) (121113) (141111) (131211) (131112)
+ (171111) (161211) (151311) (141411) (131511)
+ (121611) (111711) (161112) (151212) (141312)
+ (131412) (121512) (111612) (151113) (141213)
+ (131313) (121413) (111513) (141114) (131214)
+ (121314) (111414) (131115) (121215) (111315)
+ (121116) (111216) (111117) (151111) (1)
+ ]
+ /limitedb
+ [ (121512) (121413) (121314) (121215) (131412)
+ (131313) (131214) (151212) (141312) (141213)
+ (181212) (171312) (161412) (151512) (141612)
+ (131712) (121812) (171213) (161313) (151413)
+ (141513) (131613) (121713) (161214) (151314)
+ (141414) (131514) (121614) (151215) (141315)
+ (131415) (121515) (141216) (131316) (121416)
+ (131217) (121317) (121218) (141212) (1)
+ ]
+ >>
+ version get /encs exch def
+
+ /c2w [
+ [ 495 330 210 126 70 35 15 5 ]
+ [ 165 120 84 56 35 20 10 4 ]
+ [ 45 36 28 21 15 10 6 3 ]
+ [ 9 8 7 6 5 4 3 2 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ ] def
+ /v 0 def
+ cws {
+ /cw exch def
+ 6 {
+ cw v xor 1 and 0 ne {
+ /v v 7682 xor def
+ } if
+ /v v -1 bitshift def
+ /cw cw -1 bitshift def
+ } repeat
+ } forall
+ /v v checkoffset add def
+
+ version (limiteda) eq version (limitedb) eq or {
+ /v v 1023 and def
+ v 824 gt v 853 lt and {
+ /v v 292 add def
+ } if
+ } {
+ /v v 1023 and 45 add def
+ } ifelse
+
+ /d [ 2 2 2 2 2 2 ] def
+ /r 0 def /c 0 def /w 0 def /sum 0 def
+ {
+ sum v eq {exit} if
+ /t sum c2w r get c get add def
+ t v eq {
+ /w w 1 add def
+ d r w 2 add put
+ /sum t def
+ } if
+ t v gt {
+ d r w 2 add put
+ /r r 1 add def
+ /w 0 def
+ } if
+ t v lt {
+ /c c 1 add def
+ /w w 1 add def
+ /sum t def
+ } if
+ } loop
+ 20 0 1 4 {d exch get sub} for
+ d exch 5 exch put
+ version (b) eq version (limitedb) eq or {
+ /d [ d {1 add} forall ] def
+ } if
+ /cbs (111111111111) 12 string copy def
+ 5 -1 0 {
+ /i exch def
+ cbs 5 i sub 2 mul 1 add d i get 47 add put
+ } for
+
+ % Concatenate the space bar successions
+ /sbs cws length 6 mul 31 add string def
+ encs encs length 2 sub get dup
+ sbs exch 0 exch putinterval
+ length /j exch def
+ 0 1 cws length 1 sub {
+ /i exch def
+ sbs j encs cws i get get putinterval
+ /j j 6 add def
+ } for
+ sbs j cbs putinterval
+ /j j 12 add def
+ encs encs length 1 sub get dup
+ sbs exch j exch putinterval
+ length j add /j exch def
+ /sbs sbs 0 j getinterval def
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ /txt [ [text textxoffset textyoffset textfont textsize] ]
+ /textxalign (center)
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/posicode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER posicode--
@@ -3276,138 +9954,520 @@ D#%M4^FCfJGDfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<]cF(o
% --EXAM: CODABLOCK F 34567890123456789010040digit
% --EXOP: columns=8
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp codablockf 0.0 0 0 0
-%%BeginData: 130 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2@ :F %k@r#\ 'L_
-Q"0Ops'_E-,f4DK Ct)Ou "b# @<, j rA7 ^of Ou" b%Df0Z -E aa/7Am oLs
-AWei&Ec6/CM#WVo 04Sp: F_u #;L ^9 /" 061 uTB OtmjBQ T% ;Ou"b4 AT2
-<oBkM+$L]NYp04f $2De *R" B9 !+ 'F` _Pb 1G< ]UEc
-Ye7AmoLsAWei&E+ *d.A S ,g i+ D,% uF( LLjD fBf4D
-f0WZY:js=EbTE(F Eqh:P! +/J ! Ko= '% <$3- Bl@ m1H]kFA@;L !rP!+/T5^ee
-pOuSV6P,4<rNWD; +NHB2` AWf 3 'OtD h\P' )pO Ou%N5OtCcr F_-^lI?ITYP
- %BdtOuY16E-,f4 DKCt)O u%N L<,Z _tBl @m1 H]g15P"@<I Dg-7FEc6/CO
-t;bP04Sp:F_u#;+ Cf>+F _u#; Ot;bP 061u TBO tmjBQPA;Dg ,l+BkM+$Ot;
-bP06:]DBOtmjBQP A<AT2 <oBkM +$Ot; bP@ rH1+D/OEN" HlAeDesQ5DK
-CUtP$sLVEc6/CL] W`3Ec6/ CLb+]t Op#fD GB8 T?P!+tKOp$ +b@j#9"CisT
-4F-8>-P#QC/EcYf=05YcC+C\c"@rGmhP%'TNOu"b+L]ESo@UX:eDe*F+NWEILNI-gJD0'?Q5&-
-6EP'N4"C6AUR!KmI:C6CcD1QlmD3/@Qj"-Q?@/8]H@P!3W:!KsFF5*C/R30Ia,"-TX>"-Pj29R
-V8N3,N_LP!3WD5*C2S@VV&,05?Y6Ou"b#@<,jrA7Zm#F(^:/C6D8R1Qk"OP#ZpnAUT_@04J@1C
-h7K,@UX:eDe*FB@ZiN#F*D&Ks,o/kF*D)LrfT&jF*D,MrK8riF(TNMr/rihAo9>ZqiW`gAo9A[
-qN<WfAo9D\q3!NeAo9G]pl[EdF*(iHpQ@<cF*)AWp6%3b@q]:kD..C)+BosmL`hKrNWLmg>p*@
-3!?mI(+cZUX0jPo+NWC>a!@!O*0JZoV>E/_/NWCAb!\cE9+Bsj,,`VmNNWLmk>p*@3!@<a,-&r
-$\2-h>/NWCJe!@Eg.0K*2Z>E/_3NWCMf!\cQ=+BsXMLa\8b0K<>\>DO_a.?4H`3F*b3NWCVi!@
-j*20eclU>E/_7NWCYj!\lE8+Bsj,/<0`^NWLpj>p*@3!A0<4/WKle1L2,-NWCbm!A9B60f3/Y>
-E/_;NWCen!\lQ<+Bsj,0TH/fNWLpn>p*@3!ATT80oc;i2dIP1NWCnq!A]Z:0fWG]>E/_?NWCqr
-!\l]@+Bsj,1l_SnNWLsi>p*@3!B#l<23%_n0jPo+NWD%u!B,r>1,<,X>E/_CNWD)!!\uQ;+Bsj
-,30"#!NWLsm>p*@3!BH/@3K=.r2-h>/NWD2$!BQ5B1,`D\>E/_GNWD5%!\u]?+Bsj,4H9G)NWL
-sq>p*@3!BlGD4cTS!3F*b3NWD>(!BuMF1GE)W>E/_KNWDA)!])Q:+Bsj,5`Pk1NWM!l>p*@3!C
-;_H6&l"&1L2,-NWDJ,!CDeJ1GiA[>E/_ONWDM-!])]>+Bsj,7#h:9NWM!p>p*@3!C`"L7?.F*2
-dIP1NWDV0!Ci(N1H8Y_>E/_SNWDY1!])iB+Bsj,8<*^ANWM$k>p*@3!D/:P8WEj/0jPo+NWDb4
-!D8@R1br>Z>E/_WNWDe5!]2]=+Bsj,9TB-INWM$o>p*@3!DSRT9o]932-h>/NWDn8!D\XV1cAV
-^>E/_[NWDq9!]2iA+Bsj,:lYQQNWM$s>p*@3!E"jX;2t]73F*b3NWE%<!E+pZ2)&;Y>E/__NWE
-(=!];]<+Bsj,</puYNWM'n>p*@3!EG-\<K7,<1L2,-NWE1@!EP3^2)JS]>E/_cNWE4A!];i@+B
-sj,=H3DaNWM'r>p*@3!EkE`=cNP@2dIP1NWE=D!EtKb2)nka>E/_gNWE@E!];uD+BsY,Lg5rA2
-DADZ>E/_iNWEFG!]Dc=+Bsj,?B,%mNWM*o>p*@3!FLif?]G1G1L2,-L]EG9@#b:H1gM5.L]NM:
-@?(CI2-h>/L]WS;@ZCLJ2I.G0L]`Y<@u^UK2dIP1L]i_=A<$^L3*dY2L]re>AW?gM3F*b3L^&k
-?ArZpO0O5f*L^/q@B9!$P0jPo+L^9"ABT<-Q10l#,L^B(BBoW6R1L2,-L^K.CC5r?S1gM5.L^T
-4DCQ8HT2-h>/L^]:EClSQU2I.G0L^f@FD2nZV2dIP1L^oFGDN4cW3*dY2L_#LHDiOlX3F*b3L_
-,RIE/juZ0O5f*L_5XJEK1)[0jPo+L_>^KEfL2\10l#,L_GdLF,g;]1L2,-L_PjMFH-D^1gM5.L
-_YpNFcHM_2-h>/L_c!OG)cV`2I.G0L_l'PGE)_a2dIP1L_u-QG`Dhb3*dY2L`)3RH&_qc3F*b3
-L`29SHB&%e0O5f*L`;?TH]A.f0jPo+L`DEUI#\7g10l#,L`MKVI?"@h1L2,-L`VQWIZ=Ii1gM5
-.L`_G&NWM3u>p*>oAo9CIAo9Db!]`/E+Bot#DDE>HDDI4R3B(4d>9J!!F<GX:FH-D_3*dY2+EM
-a:+EMa:NWM4$>p*>oF*D(9Ao9FJF*D(9>p*>oAo9FJF*D%8F*D%8>p*>oAo9=GAo9=GAo9=G>p
-*>oF*(h5F*(h5F*(h5>p*>oF*)@DF*)@DF*)@D>p*F91G<6O@<-O"Ci^_'LhW#0LhW#0LhW#0?
-'7""!/LYcBOPpu@;p:N@Yb&JWI$:4P!5$b04f$2F!+t+@<-3nE-!.9P"UroL]E53L]VoVC6CcD
-1M(H6F!,4\99M8tY:js=EbTE(FEqh:P!+/J!0U!'P#Pq)@<-O"Ci^_6P"Us%Bp*^hP":"a82#$
-qFC?;%BOPq)@;L"@!0U!<1G<f\FCHA&BOPq)@;L"@!Kp*=1G<f\FCQG'BOPq)@;L"@!g63>1G<
-?X@s29sF!*S-NW_gH6SW1j0ocB+:.$dKDDI4T7SZ<,Ao9Db"@c-R1hLV^+?huP1G<TdB-:YlEb
-o<)OpR:-0564BOu"b+L]ESoHYFU3@<-0qDN[/0P!FGY<%h`p@<*K"@<,jrA7ZltP"UroE+*d.A
-S,gi+Cf(nEen%b4d#q^+C\c"Ch7L?"HoaIAs*:D@UX:eDe*E%BnueQ!Kp*3?BT/P04S[(EZet3
-@s29sF!+q#Eas#uAKY]C!KmJ>"HlHA99M(aBcq,G"HieK1OXU'Bcq,G!KmJH1OYEdI?IQHF(ZV
-1+Cf(nEftZ#Bcq,G!KmJH1G<JcC5;nR!Ko6eP%?:`F(ZV4F(^:/C6D8R1G<TdB5D-s+Dl14P%'
-S105boLF)ti3HS98m!0T,kF,0gZ1G<^15*@^KE$0"=B5D-sP"L(a5^eepD0'>4E0<kW3-/YQA!
-0$=@$5JUP')pQI?IQADD@;;HZOuEP%odQP!+.FF!,O[!KmJH1OXV55^eeqI?IP_DBNhQ!KmJH1
-G<elF,0j[!Ko5lE$0+U!KmJH1OYEtDBO"KOq*X204f$2@=',<ATV@D5*AQKGB8p2C6CcDGV<eS
-C5;nR!Ko6eOq*X204f$2@XB5=ATVCE5*AQKGB8p2C6CcDGV<eSC5;nR!Ko6eOq*X204f$2@sa@
-uP-6NIEcPT6FEqh:P&5PeATVFF5*AQeH]eGnFbh`7WKKH$0TrDk$Bf4g!I^,2@s<!W5&-6EP'A
-Wp+DQ]5Oo^_%I?G)'1G<0SDffH8OuRMoFCC=rP$jG:F(KH&P!5%:P&QQeI?G)'1G<3TDffE7Ou
-RMoFCLCsP$jG:F(KH%P!5%:P&QQeI?G)'1G<WWG][A3DffG2>9Id(B9H_NL]DjdK8(`a?'6usD
-In'7@W$++@3AbsD0'?Q@XEn2I?K5;-P'LG1Mq2GP%'4JP,X9;L]DcTBp(ZC1Mq2G+DI!3@;^"*
-@XB58AU&<*DJsW++DHW3P'DD%DIn'7@;^"*@N]A-DIn'7@;^"*@N]B@!KmJH98EV3!Kq\UP#Z@
-?B-:oO94DdWFCBM=DIn'7@W$++@3B9?!0VSTHZ!D>FCK-+FC?;++Dtb8FCK-+FC?;+L]NY>P"U
-T3Oo^_jI?ITYP"767@V'.iEb/^,OuR>jG][A3DffHO5*AR%5&OqVFCK-+FCC=rP"UsMI?G)'1G
-<3HAS,k$ARTqK3,W;PFCK-+FCC=rP"Us%DIn'7@;^"*@Zip<99Nn8Oq*X205t?1Ec6/KH[?lFF
-(KHR"ES-r@?Nd#F*D+:ASu!d04T'7FH-KFATVFF1Qk"OP#Pq4ATWq8F(KH&P!+/5G@Mb,DI[-/
-@rl4'NWaE7FCUIiP!FGY<+Bu\FH-KFATVFF4aV6o@N]6"@q.0%F(KHR"ES-r@ZiO15^eepI?J/
-iP(S1G%[&V$@s;u:@u(;O!HN+&F,9jZD0p;AGB81ZLb*t;<K_0]$'I(tBnubP1G<L!!0T,kEej
-aZ1G<QQF*)G@G9CL+Cia0N1OEqHF*)G@GC,K<I?IQNFC?;'DI[)tBcq86B5D-sP%K&T+Du==F)
-ti3I=$eMM#Vmd<A/64D0(k(Ou"b/@q]:kF-8_M1OEt[B5D-sL]ET$HZOC?+D#G#@4u,3ATWq8F
-(KH&Ou&7dI?IQIF_u2U!g60&F*D+:ASu!d04T'7FH-KFATVFF1Qk"OP#Q-<@:Ee[DfTDuHQ[BA
-F<G.4@pq$#F(KHR"ES-r@?NF05^eepF*D(9ASu!d04T'7FH-KFATVCE1Qk"OP%?:]+DQ]5Oo^_
- %04f$3De=$.G9CL+Cia0N1OCcqASiQ"L]`e@C*7#B"d/nLC6GQZ1MItKF(]<#DN[.oDIdZtEc
-6/bEdNs7I?IQD+Du==F)ti305boLF-8_M1G<WUBOPq&P!5$bHXh,.FH-KFATV@D4_&PEFH-KFA
-TVCE4d'i'F_u2U"HlB?"Dr3m+DI!3Ao9>dD3>$KDKTf;L]W`SL]ET$Eb0*D"-Q9>"FG36@j#9&
-ATWq8F(KH%P!+/'DI[+'HQZm;@q'kL<A.j'ATWq8F(KH'Ou%mqHYmh:+DI!3Ao9>d4aUdY0d(%
-F@q.0++DHW4Oo^_%I=#gPB-:oE!g65gDI[00Bcq,G!g3SI1OYEdI?K5G5^eepDKTf;L]W`SL]E
-TTEb0*D"HlB?"FG!,B-:oO94N$SFH-KFATV@D4aUaX@pse4+D#G#@XXD>052PCL]NY>Ou%0'@j
-#9&ATWq8F(KH%P!+/'DI[+'HQZm;@q'kL<A.j'ATWq8F(KH'Ou%mqHYmh:+DI!3Ao9>d4aUdY0
-d(%F@q.0++DHW4Oo^_%I=#gPB-:oE!g65gDI[00Bcq,G!g3SI1OYEdI?K5G5^eepI?IQ>F(KHR
-"ES-r@ZilkF(ZV0P"T5$DffHO"EJ'jL]W`3Op$,G+Dl14Ch7L?!KsFFAp\6J!KmIm@V'.iEb/[
-++EM.:+D#G#@N]N/B-:oO94`!N@4u=;BnueQ!Ko7%5^eepI?IQNG@;V*DI[-/@rl4'NWaE7FCC
-=gD0'>4Bp),#DI[*.Bcq,G!KmJH1Qk"OP#Pq4ATWq8F(KH%P!*Z'B-:oO94DdWFCC=8Eb0*D!g
-60="FFi*D0'?+AT!;)P,XUVHYJ9:Oo]!#AS,k$AR^!/F(TM:ASu!d+Dl14+DI!3ASu!e052PCL
-]NY>Ou&7dI?IQXP#QLH@N]6"@pq$#F(KHR"ES-r@ZiNaF(ZV0P"TA(@q%**+DHW4Oo^_%P!FGY
-<+Bu\FH-KFATVFF4`5CZF,0m\As*:;ASm5)P"Ll?HYFU2@V'.iEb/^,+EMa8+D#G#@kV>5ATWq
-8F(KH%Ou$rrB-:oO94`!N@4u=;BnueQ!Ko7%5^eepF*D(9ASu!f04T'7FH-KFATVCE1Mq2G+DI
-!3ASu!e052PCL]NY>Ou&7dI?IQ>F(KHR"ES-r@?NcpATV?'D0'>4Bp),P@$1Y5ASm5(P"Ll?HY
-mh:+DI!3ASu!d052PCL]NY>Ou&7dI?IQ>F(KHR"ES-r@ZilqATVB(D0'>4Bp),P@$1Y5ASm5(P
-"Ll?HYmh:+DI!3ASu!e052PCL]NY>Ou&7dI?IQ>F(KHR"ES-rA!/umF_u2U!g60="EJ'jL]NZ2
-Op$,KF(ZV0P"TD)0p4\HAo9=GASu!f052PCL]NY>Ou%N5D0'>4BnuhR9P&*O@kVO=BnuhR!Ko6
-eP#[Z1I?IP_ASu$sAo_g6+EVXHAWej45^ef,I?J/^+EDCEF-8\,Dg-8Ys,oO.EcQs:P#.;EBcq
-86B5D-sP!+s2Eb0*D!g60="FG0#D287VWGl9VEc6.TC*78I"-N\J1NRYW+D#G#@4uG*F*)G@G9
-D!JF_-^lI=$!GD'3e+A9)U405;VEL]NY>Ou%0$E$/_0@pq$2+EE8=Oo^_%I?ITYP%?:VGB4m:G
-B8Q?C6D8R1G<0GD..B+>DPP#!Jk*0I?I-W!/LZ3%sr_f8;J1?!JiseI?I-,Ou"b$D..B+>DN98
-!Jja&I?I-,Ou"b$BPVI+B-;&4B5D-sOpR:-05?:COu%moL]M@6B5D-sL]N[<HS9)r5*@]T@q]:
-k+Dl14+DI!3Ou$T]@<./(P"L(2BPVI+B-:q3@q]:kP'AWp+DQ]5Oo^_%I?IQ>BOPp(Ao9>d4_]
-]PP&6?bHXg`)D0'>4C5<mnGV<eSC5;nR!Ko6eP#Qjm82#'>L]ESo06At*!0T,kCGCVFOu"b,15
-Gpn1Pc$e!G[DkP,Wd]Bp(ZC1G<i)+Cf)#D0'>4Bp),'P&,qTP%p.906ArlF>4nJBPVI+B-:oO9
-9K=3<g%3\1G<Mu+DW\SF>B![LfT[ROu"b,1*C?f+ET?$!Jjd>C6CB$P"9),F!+t:F-:!g"Ho`o
-F(KHR"ES-rA!1\U@:F(^E.*'U@r5XnI?ITG0p51mG[kr=+CfV:P%'4LP,Vr4ATWq8F(KH'P&5P
-S@VoOmI=!)HD..C3P#Z9QP"Us_@s<!M!f-o@)2J<VWKKo1A!1\U@:F(^E.*'U@r5XnI?ITNL]W
-a=P"Us_L]N;4EejaZWI$:4P!5$b@s;u:BcpoA"d/nLCkr.U!Jgf?)2J<VWKKo1A!1\U@:F(^E.
-*'U@r5XnI?ITELanPgP"Us_I?I-W!/LYrL]N[<HXh8@P!3B3"d/nLCh&8(Oo^_>061QHF-8_M1
-G<6ZF_r7A@s<!M!0U!<1Pc'f!HM[oF-:!g!g9O0056S5Ou"b$F*2=B@rld0+ECt9F!,1[950Q*
-Oo^_%I?I-A@s;u:Eas<7P%'4JP,Vr4F_uqIP%p/)I?I,SASu"!+Bsj11,1O>1,=jo1,:U>1,=j
-o1,:U?1,4dn0etI=1,Fpp0etI>1,=jo0f(O>1,=jo0etL>0f+go0etL?0f"an0f(R?0f"an1,:
-R>0f+go1,:R?0f"an1,CX?0f"an0ekF=1GXsp0etL=1GXsp0etL>1GOmo0ekI>1,=jo0etO>1,
-=jo0etO?1,4dn1,:X@0en[m1,:R=1GXsp1,:R>1GOmo1,1R?0f"an1,:X?0f"an1GLX>1GOmo1
-GLU>1,=jo1GU[>1,=jo1GU[?1,4dn1GLX?0f"an1GU^?0f"an1GU^@0en[m1,1O=1,Fpp1,1O?
-1,4dn1,C[?1,4dn0ekC=1,Fpp0f(O=1,Fpp0f(O?1,4dn0ekF>0f+go0f(R>0f+go0f(R@0en[
-m1,1L>0f+go1,CX>0f+go1,CX@0en[m0ekF<1Gb$q0ekF>1GOmo0f(R>1GOmo0ekI=1,Fpp0ek
-I?1,4dn0f(U?1,4dn1GL[?1,4dn1,1L>1GOmo1,CX>1GOmo1,1R>0f+go1,1R@0en[m1,1R>1G
-Omo1GLU=1,Fpp1GLU?1,4dn1G^a?1,4dn1GLX>0f+go1GLX@0en[m1G^d@0en[m1GL^@0en[m1
-,:R@0en[m1c$j@0en[m0ekC<1,P!q0ekC>1,=jo0etI<1,P!q0etI?1,4dn0f1U>1,=jo0f1U?
-1,4dn0ekF=0f4mp0ekF?0f"an0etL=0f4mp0etL@0en[m0f1X?0f"an0f1X@0en[m1,L^@0en[
-m1,:R=0f4mp1bgd@0en[m1,L^?0f"an0f(X@0en[m0ekC<1bt'q0etI<1bt'q0etI=1bk!p0ek
-L?0f"an0etR?0f"an0etR@0en[m1bg^?0f"an1bpd?0f"an1bpd@0en[m1,1O=1bk!p1,1U?1,
-4dn1bga?1,4dn0ekC;1c(-r0ekC=1bk!p0f(O=1bk!p0ekL>0f+go0ekL@0en[m1bg^>0f+go1
-bg^@0en[m0ekI=1bk!p0ekL>1GOmo1GLU=1bk!p1bg^>1GOmo1,1L?0f"ao1,C^@0ekFhOu"b3
-Dg,Z)FE8RFOpR:-L]E53EejaZWI$:4P!5$b06:TD+BosuGB4m@+Cg32Oo^_^@u(;O!Kp-'ASu"
-!P!5%%H\aA=WI9q$I?I0-Ou$r`EbgI2F(03;L]NZ@L]NZ%H[CPKI=6HhL]MpPP#[ZtI?I0b)i+
-NXWKIRN$^*]:FcnqOF`MDE@VKq*+DHW6M#WWnP'DD<82#%0D0K])+Cg38P&,q7Oo^_%05tWMF!
-+[0F*VVHBk/?-AT2<oBkM+$P&,K$!I^,`L]E53Eejd[WI$:4P!5$bEc6/8ASGdjFF,-NDg,Z)F
-E8R=P"Ur>P')29K6(UCBOtmjBQSTW!Jgc4!/LZ3!/LW2!/LW2!Jg`3!-<F&GA1TD(m:kFL]Mpe
-K89Pa!Jg`3!/LW2!Jgc4!Jg`3!Jg`3!Jgc)P(S1G89/WmBOtmjBQSSDEc6/2BlnD=EejaZWKKo
-;!g7\SP(Rh$D0K])+EM+5BOtmjBQTDRH\_]NP(R&'1H[cQEb0,A061WAD..O,Bm;:MBm=\AE+s
-Q<05tWMGT_'QD0K])05tWMGp%'?G]T$WF*VVHBk3B)05+p2B4uB0E+sQ<P%&KXD0K])P#@*,Ou
-=t;Bk2=!+EMgFGA1TD8<PkaDfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu?nFE2)?P#RT)I
-?G)'1G<6VA78q`De!QpOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[D
-Fcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/codablockf 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp codablockf 0.0 2015050900 125044 131468
+%%BeginData: 512 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/codablockf {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /rows -1 def
+ /columns 8 def
+ /rowheight 10 def
+ /sepheight 1 def
+ /encoding (auto) def
+ /parse false def
+ /parsefnc false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /rows rows cvi def
+ /columns columns cvi def
+ /rowheight rowheight cvi def
+ /sepheight sepheight cvi def
+
+ columns 4 ge columns 62 le and
+ rows 2 ge rows 44 le and rows -1 eq or and {/c columns def} if
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Convert input into bytes accounting for FNC characters
+ /swa -1 def /swb -2 def /swc -3 def /sft -4 def
+ /fn1 -5 def /fn2 -6 def /fn3 -7 def /fn4 -8 def
+ /sta -9 def /stp -10 def
+
+ % Character maps for each state
+ /charmaps [
+ % A B C A B C A B C
+ [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
+ [ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5
+ [ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8
+ [ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11
+ [ (,) (,) (12) ] [ (-) (-) (13) ] [ (.) (.) (14) ] % 12-14
+ [ (/) (/) (15) ] [ (0) (0) (16) ] [ (1) (1) (17) ] % 15-17
+ [ (2) (2) (18) ] [ (3) (3) (19) ] [ (4) (4) (20) ] % 18-20
+ [ (5) (5) (21) ] [ (6) (6) (22) ] [ (7) (7) (23) ] % 21-23
+ [ (8) (8) (24) ] [ (9) (9) (25) ] [ (:) (:) (26) ] % 24-26
+ [ (;) (;) (27) ] [ (<) (<) (28) ] [ (=) (=) (29) ] % 27-29
+ [ (>) (>) (30) ] [ (?) (?) (31) ] [ (@) (@) (32) ] % 30-32
+ [ (A) (A) (33) ] [ (B) (B) (34) ] [ (C) (C) (35) ] % 33-35
+ [ (D) (D) (36) ] [ (E) (E) (37) ] [ (F) (F) (38) ] % 36-38
+ [ (G) (G) (39) ] [ (H) (H) (40) ] [ (I) (I) (41) ] % 39-41
+ [ (J) (J) (42) ] [ (K) (K) (43) ] [ (L) (L) (44) ] % 42-44
+ [ (M) (M) (45) ] [ (N) (N) (46) ] [ (O) (O) (47) ] % 45-47
+ [ (P) (P) (48) ] [ (Q) (Q) (49) ] [ (R) (R) (50) ] % 48-50
+ [ (S) (S) (51) ] [ (T) (T) (52) ] [ (U) (U) (53) ] % 51-53
+ [ (V) (V) (54) ] [ (W) (W) (55) ] [ (X) (X) (56) ] % 54-56
+ [ (Y) (Y) (57) ] [ (Z) (Z) (58) ] [ ([) ([) (59) ] % 57-59
+ [ 92 92 (60) ] [ (]) (]) (61) ] [ (^) (^) (62) ] % 60-62
+ [ (_) (_) (63) ] [ 0 (`) (64) ] [ 1 (a) (65) ] % 63-65
+ [ 2 (b) (66) ] [ 3 (c) (67) ] [ 4 (d) (68) ] % 66-68
+ [ 5 (e) (69) ] [ 6 (f) (70) ] [ 7 (g) (71) ] % 69-71
+ [ 8 (h) (72) ] [ 9 (i) (73) ] [ 10 (j) (74) ] % 72-74
+ [ 11 (k) (75) ] [ 12 (l) (76) ] [ 13 (m) (77) ] % 75-77
+ [ 14 (n) (78) ] [ 15 (o) (79) ] [ 16 (p) (80) ] % 78-80
+ [ 17 (q) (81) ] [ 18 (r) (82) ] [ 19 (s) (83) ] % 81-83
+ [ 20 (t) (84) ] [ 21 (u) (85) ] [ 22 (v) (86) ] % 84-86
+ [ 23 (w) (87) ] [ 24 (x) (88) ] [ 25 (y) (89) ] % 87-89
+ [ 26 (z) (90) ] [ 27 ({) (91) ] [ 28 (|) (92) ] % 90-92
+ [ 29 (}) (93) ] [ 30 (~) (94) ] [ 31 127 (95) ] % 93-95
+ [ fn3 fn3 (96) ] [ fn2 fn2 (97) ] [ sft sft (98) ] % 96-98
+ [ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101
+ [ fn1 fn1 fn1 ] [ sta sta sta ] [ stp stp stp ] % 102-104
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 105 dict 105 dict 105 dict ] def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 2 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals j get exch i put
+ } for
+ } for
+ /seta charvals 0 get def
+ /setb charvals 1 get def
+ /setc charvals 2 get def
+
+ /fncvals <<
+ (FNC1) fn1
+ (FNC2) fn2
+ (FNC3) fn3
+ (FNC4) fn4
+ >> def
+ /msg barlen array def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+
+ % Determine digit runlength and characters from given position
+ /numsscr {
+ /n 0 def /s 0 def
+ /p exch def {
+ p msglen ge {exit} if
+ msg p get
+ dup setc exch known not {pop exit} if
+ fn1 eq {
+ % FNC1 in odd position of run like two digits
+ s 2 mod 0 eq {/s s 1 add def} {exit} ifelse
+ } if
+ /n n 1 add def
+ /s s 1 add def
+ /p p 1 add def
+ } loop
+ n s
+ } bind def
+
+ % Encoding for each alphabet
+ /enca {
+ seta exch get cws exch j exch put
+ /j j 1 add def
+ } bind def
+ /encb {
+ setb exch get cws exch j exch put
+ /j j 1 add def
+ } bind def
+ /encc {
+ dup type /arraytype ne {
+ setc exch get
+ } {
+ aload pop 48 sub exch 48 sub 10 mul add
+ } ifelse
+ cws exch j exch put
+ /j j 1 add def
+ } bind def
+
+ % Character exclusively in either alphabet A or B
+ /anotb {dup seta exch known exch setb exch known not and} bind def
+ /bnota {dup setb exch known exch seta exch known not and} bind def
+
+ % Pre-compute relative position of next anotb and next bnota characters
+ /nextanotb [ msg length {0} repeat 9999 ] def
+ /nextbnota [ msg length {0} repeat 9999 ] def
+ msg length 1 sub -1 0 {
+ /i exch def
+ msg i get anotb {
+ nextanotb i 0 put
+ } {
+ nextanotb i nextanotb i 1 add get 1 add put
+ } ifelse
+ msg i get bnota {
+ nextbnota i 0 put
+ } {
+ nextbnota i nextbnota i 1 add get 1 add put
+ } ifelse
+ } for
+
+ % Does a-only come before b-only after given position and vice versa
+ /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def
+ /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def
+
+ % Add padding to row
+ /padrow {
+ {
+ { % common exit
+ cset (seta) eq {swc enca /cset (setc) def exit} if
+ cset (setb) eq {swc encb /cset (setc) def exit} if
+ cset (setc) eq {swb encc /cset (setb) def exit} if
+ } loop
+ } repeat
+ } bind def
+
+ % Convert message to codewords
+ /cws c 5 add rows -1 ne {rows} {44} ifelse mul array def
+
+ /i 0 def /j 0 def /r 1 def
+ /lastrow false def {
+
+ lastrow {exit} if
+
+ % Add start character and code subset selector
+ sta enca
+ i msglen lt {i numsscr} {-1 -1} ifelse /nums exch def /nchars exch def
+ { % common exit
+ msglen 0 eq {
+ swb enca
+ /cset (setb) def
+ exit
+ } if
+ nums 2 ge {
+ swc enca
+ /cset (setc) def
+ exit
+ } if
+ i abeforeb {
+ sft enca
+ /cset (seta) def
+ exit
+ } if
+ swb enca
+ /cset (setb) def
+ exit
+ } loop
+ /j j 1 add def % Skip row indicator position
+
+ % Main encoding loop
+ /endofrow false def {
+ /rem c 3 add j c 5 add mod sub def % Codewords to end of row
+
+ i msglen eq endofrow or {exit} if
+
+ i numsscr /nums exch def /nchars exch def
+
+ % Determine switches and shifts
+ { % common exit
+ cset (seta) eq cset (setb) eq or nums 4 ge and
+ msg i get fn1 ne and {
+ nums 2 mod 0 eq
+ rem 3 ge and {
+ swc cset (seta) eq {enca} {encb} ifelse
+ /cset (setc) def
+ 2 {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ nums 2 mod 0 ne
+ rem 4 ge and {
+ msg i get cset (seta) eq {enca} {encb} ifelse
+ /i i 1 add def
+ swc cset (seta) eq {enca} {encb} ifelse
+ /cset (setc) def
+ 2 {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ } if
+ cset (setb) eq msg i get anotb and
+ rem 2 ge and {
+ i msglen 1 sub lt {
+ i 1 add bbeforea {
+ sft encb
+ msg i get enca
+ /i i 1 add def
+ exit
+ } if
+ } if
+ swa encb
+ /cset (seta) def
+ msg i get enca
+ /i i 1 add def
+ exit
+ } if
+ cset (seta) eq msg i get bnota and
+ rem 2 ge and {
+ i msglen 1 sub lt {
+ i 1 add abeforeb {
+ sft enca
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+ } if
+ swb enca
+ /cset (setb) def
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+ cset (setc) eq nums 2 lt and
+ rem 2 ge and {
+ i abeforeb {
+ swa encc
+ /cset (seta) def
+ msg i get enca
+ /i i 1 add def
+ exit
+ } if
+ swb encc
+ /cset (setb) def
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+
+ % No switches or latches so try to encode
+ cset (seta) eq seta msg i get known and
+ rem 1 ge and {
+ msg i get enca
+ /i i 1 add def
+ exit
+ } if
+ cset (setb) eq setb msg i get known and
+ rem 1 ge and {
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+ cset (setc) eq nums 2 ge and
+ rem 1 ge and {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ exit
+ } if
+
+ % Encoding does not fit in the row
+ /endofrow true def
+ exit
+
+ } loop % common exit
+
+ } loop
+
+ % Determine whether this is the final row
+ r rows eq rows -1 eq or r 1 gt and i msglen eq and rem 2 ge and {
+ rem 2 sub padrow
+ /j j 3 add def % Skip symbol and row checksum character positions
+ stp enca
+ /lastrow true def
+ } {
+ rem padrow
+ /j j 1 add def % Skip row checksum character positions
+ stp enca
+ /r r 1 add def
+ } ifelse
+
+ } loop
+ /cws cws 0 j getinterval def
+
+ % Maps for row indicators and symbol checksums
+ /abmap [
+ 64 1 95 {} for
+ 0 1 15 {} for
+ 26 1 63 {} for
+ ] def
+ /cmap [ 0 1 85 {} for ] def
+
+ % Add symbol check characters to last row
+ /chkmsg msglen array def
+ /j 0 def
+ 0 1 msglen 1 sub {
+ /i exch def
+ /char msg i get def
+ char 0 ge {chkmsg j char put /j j 1 add def} if
+ char fn1 eq i 0 ne and {chkmsg j 29 put /j j 1 add def} if
+ } for
+ /t1 0 def /t2 0 def /k1 0 def /k2 0 def
+ 0 1 j 1 sub {
+ /i exch def
+ /t1 chkmsg i get i mul 86 mod def
+ /t2 t1 chkmsg i get add 86 mod def
+ /k1 k1 t2 add 86 mod def
+ /k2 k2 t1 add 86 mod def
+ } for
+ cws cws length 4 sub cset (setc) ne {abmap} {cmap} ifelse k1 get put
+ cws cws length 3 sub cset (setc) ne {abmap} {cmap} ifelse k2 get put
+
+ % Populate row indicators
+ cws 2 2 copy 1 sub get 99 ne {abmap} {cmap} ifelse r 2 sub get put
+ 1 1 r 1 sub {
+ /i exch def
+ cws i c 5 add mul 2 add 2 copy 1 sub get 99 ne {abmap} {cmap} ifelse i 42 add get put
+ } for
+
+ % Calculate row check characters
+ 0 1 r 1 sub {
+ cws exch c 5 add mul c 4 add getinterval /rcws exch def
+ /csum rcws 0 get def
+ 1 1 rcws length 2 sub {
+ /i exch def
+ /csum csum rcws i get i mul add def
+ } for
+ rcws rcws length 1 sub csum 103 mod put
+ } for
+
+ % Create an array containing the character mappings
+ /encs
+ [ (212222) (222122) (222221) (121223) (121322) (131222) (122213)
+ (122312) (132212) (221213) (221312) (231212) (112232) (122132)
+ (122231) (113222) (123122) (123221) (223211) (221132) (221231)
+ (213212) (223112) (312131) (311222) (321122) (321221) (312212)
+ (322112) (322211) (212123) (212321) (232121) (111323) (131123)
+ (131321) (112313) (132113) (132311) (211313) (231113) (231311)
+ (112133) (112331) (132131) (113123) (113321) (133121) (313121)
+ (211331) (231131) (213113) (213311) (213131) (311123) (311321)
+ (331121) (312113) (312311) (332111) (314111) (221411) (431111)
+ (111224) (111422) (121124) (121421) (141122) (141221) (112214)
+ (112412) (122114) (122411) (142112) (142211) (241211) (221114)
+ (413111) (241112) (134111) (111242) (121142) (121241) (114212)
+ (124112) (124211) (411212) (421112) (421211) (212141) (214121)
+ (412121) (111143) (111341) (131141) (114113) (114311) (411113)
+ (411311) (113141) (114131) (311141) (411131) (211412) (2331112)
+ ] def
+
+ % Derive the bits for each row
+ /rowbits r array def
+ 0 1 r 1 sub {
+ /i exch def
+ /sbs [
+ cws i c 5 add mul c 5 add getinterval {
+ encs exch get {48 sub} forall
+ } forall
+ ] def
+ mark
+ 0 sbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall
+ counttomark 1 sub array astore exch pop exch pop
+ rowbits i 3 -1 roll put
+ } for
+
+ % Populate the bitmap
+ /symwid c 11 mul 57 add def
+ /pixs [
+ symwid sepheight mul {1} repeat
+ 0 1 r 2 sub {
+ /i exch def
+ rowheight {rowbits i get aload pop} repeat
+ sepheight {
+ 1 1 0 1 0 0 0 0 1 0 0
+ symwid 24 sub {1} repeat
+ 1 1 0 0 0 1 1 1 0 1 0 1 1
+ } repeat
+ } for
+ rowheight {rowbits r 1 sub get aload pop} repeat
+ symwid sepheight mul {1} repeat
+ ] def
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx symwid
+ /pixy pixs length symwid idiv
+ /height pixs length symwid idiv 72 div
+ /width symwid 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/codablockf dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER codablockf--
@@ -3418,166 +10478,718 @@ Fcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
% --EXAM: Abcd-1234567890-wxyZ
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp code16k 0.0 0 0 0
-%%BeginData: 158 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2A MH )YH\`B !23
-JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj
-05YW<AVgAL1G<]c F,9jZ 1G< ceG B8 Q? Ou" b3D g,l+Bk M+ $L^9/" 06:
-]DBOtmjBQT%2Ou" b&DI [Tq Bl 7R D"C ZFp Diu n0Ea
-a/7AmoLsAWei&E+ *d.A K YS nC ia0 N1G <]UE cYf(D
-IXf$@;L!rOu%#qF D5Z2F- <^[ F *)G :D J+': E+P 1qH\_]c23J DeE-,f4DKC/
-fX(GdVF(LLtH]gX BP#RT( P%' T NOth st4d (eH EckrV4aW>D P!5%OP!5$bI
-=%,/FE2M8Ou%NL< IL$AOr fcH 05kf OBl@ m1P !5$bI?IQJE -,f4DKC/f1O
-YEX05YW<AKYi.A7 ^oTOu "b1D f[%?D f_'m Ou" b3Dg-7FEc6 /COt;bP061u
-TBOtmjBQPA;Dg,l +BkM+ $Ot;b P06:] DBO tmjBQPA<AT 2<oBkM+$Ot;
-bPE,TfRs,q5G061 uTF,1Bj 1OYEcE +*d.A U?( IF(ZV)@<,j rA7^p5P,4<t
-05?:COu$QUEas#uAUBF<?BU:pOuR<"B9GGnP!5%SP%&0h!Jgc>!AA2N5*@^bFcn_?!/L`?9Tgr
-DF(^Y"C5;nRWKKH.G`k%L@Yb,LWJCY>5*ATfH]g@*F(^Y"C6CcDH'2WOOo[4NP!5$b04J@1@rG
-mh+Dl14L]D1Q9Th2p5^eeqI?J/iP#O)D@<-0qDBNCsEas#uAWgMc1G<fn@>OrH1G<fn@Yk#H1G
-<fn@u1)H1G<fX0o5aj1G<fY0o5^i1G<fZ0o5[h1G<fX15Pah1G<fY15P^g1G<fZ15P[f1G<]UA
-;KrB1G<fY1Pk^e1G<fZ1Pk[d1G<?X0o5Fa1G<?X15PLa1G<?X1PkRa1G<?X1l1Xa1G<6O@<-3n
-E-!.++BsXEL`h]Z0JHcT>E/_-NWC;`!\c?7+Bsj,,)u[JNWLmi>p*@3!@*U*,E;gZ1L2,-NWCD
-c!@3[,0Jm&X>E/_1NWCGd!\cK;+Bsj,-B8*RNWLmm>p*@3!@Nm.-]S6^2dIP1La\'-NWLmo>p*
-@-.>TF5!\cW?+Bsj,.ZONZNWLph>p*@3!@s02.ujZc0jPo+NWC\k!A'640f!#W>E/_9NWC_l!\
-lK:+Bsj,/rfrbNWLpl>p*@3!ABH609-)g2-h>/NWCho!AKN80fE;[>E/_=NWCkp!\lW>+Bsj,1
-6)AjNWLpp>p*@3!Af`:1QDMk3F*b3NWCts!Aof<1,)uV>E/_ANWD"t!\uK9+Bsj,2N@erNWLsk
->p*@3!B6#>2i[qp1L2,-NWD,"!B?)@1,N8Z>E/_ENWD/#!\uW=+Bsj,3fX5%NWLso>p*@3!BZ;
-B4,s@t2dIP1NWD8&!BcAD1,rP^>E/_INWD;'!\ucA+Bsj,5)oY-NWM!j>p*@3!C)SF5E5e$0jP
-o+NWDD*!C2YH1GW5Y>E/_MNWDG+!])W<+Bsj,6B2(5NWM!n>p*@3!CMkJ6]M4(2-h>/NWDP.!C
-VqL1H&M]>E/_QNWDS/!])c@+Bsj,7ZIL=NWM!r>p*@3!Cr.N7udX,3F*b3NWD\2!D&4P1b`2X>
-E/_UNWD_3!]2W;+Bsj,8r`pENWM$m>p*@3!DAFR99''11L2,-NWDh6!DJLT1c/J\>E/_YNWDk7
-!]2c?+Bsj,:6#?MNWM$q>p*@3!De^V:Q>K52dIP1NWDt:!DndX1cSb`>E/_]NWE";!]2oC+Bsj
-,;N:cUNWM'l>p*@3!E5!Z;iUo:0jPo+NWE+>!E>'\2)8G[>E/_aNWE.?!];c>+Bsj,<fR2]NWM
-'p>p*@3!EY9^=,m>>2-h>/NWE7B!Eb?`2)\__>E/_eNWE:C!];oB+Bsj,>)iVeNWM't>p*@3!F
-(Qb>E/bB3F*b3Lg5a@NWM*m>p*@3!F:]d?&etE0jPo+NWEIH!FCcf2DSP\>E/_kNWELI!]Di?+
-BsX%NWEOJ!]Dl@+BsX&NWERK!]DoA+BsX'NWEUL!]DrB+BsX(NWEXM!]DuC+BsX)NWE[N!]E#D
-+BsX*NWE^O!]E&E+BsX+NWEaP!]Mf=+BsX,NWEdQ!]Mi>+BsX-NWEgR!]Ml?+BsX.NWEjS!]Mo
-@+BsX/NWEmT!]MrA+BsX0NWEpU!]MuB+BsX1NWEsV!]N#C+BsX2NWF!W!]N&D+BsX3NWF$X!]N
-)E+BsX4NWF'Y!]N,F+BsX5NWF*Z!]Vl>+BsX6NWF-[!]Vo?+BsX7NWF0\!]Vr@+BsX8NWF3]!]
-VuA+BsX9NWF6^!]W#B+BsX:NWF9_!]W&C+BsX;NWF<`!]W)D+BsX<NWF?a!]W,E+BsX=NWFBb!
-]W/F+BsX>NWFEc!]W2G+BsX?NWFHd!]_r?+BsX@NWFKe!]_u@+BsXANWFNf!]`#A+BsXBNWFQg
-!]`&B+BsXCNWFTh!]`)C+BsXDLjtEd3Ak(b>9INq1E^:I1QDMs2I.G0+D,LH+D,LHNWM4">p*>
-oF(-jHF($e`!]`5G+Bot0G@Mb:G@QX73B:@f>9J!2@N]9#1a$j`@N\r!>9INq1a$j`@3BW8@3A
-hu>9INq0d((G0d((G0d'aE>9IlnA0>i"A0>i"A0>/#>9Iur1*CXH1*CXI0d'aE>9Ius1*CXJ1*
-CXI1*BjF>9Ius1E^aK1E^aJ1E]sG?'6us@q]:kG%#3.+BsY=Ou8&4Ou8&4Ou6O.1Pc$e!FoeOE
-c#6(F-:!g!KsF/056S5Ou"b&DI[`1@q]:kD..C)+DI!3Ou%moL]N;5HS9,s5*@^5DI[`1C6D5Q
-30LHuF*)G:DJ+':E+P1qH\_Zb97;t&@q]:kG%#3.+DR'4P!3TCG^Y`GI?I,SF(KH%+Cf(nEctl
--F,0gZ99M(aF(KH&+Cf(nEctl-F,0j[99M(aF(KH'+Cf(nEctl-F,0m\99M)O@<[&OASu!rA8,
-poNWX<1GEOb1P#Q"1@rGmlDJ+t3Eaa0T4aShlGB4m9@<-0qDNY<h1G<Hu!0T,kC5;kQ1OEgY@U
-X:nAT!YoH]gXBP#O)EG9C@'Eas#uAKY]C!KmJ>"-Q?@/<Vf!GB4mA+CfVYGV<bRBnunT!Ko5lC
-*78I!KmJH1OYEt04T3I+CfV:L]D1Q9Th1bFCf]=NW>4uI?IQ@DI[TqBl7RD"CZFpDj!8104o*3
-G%#3.+?VcH"@c-R0kP;XNW_gH6S`7k16)K,:.$gLDDR:U7SZ<-Ao9FJ5!G,c05YcC+C\c"Ch7L
-I$'I(tBnubP1G<L!!0T-bBcpknEbo<)P!+/T5^eep04S[(EZeh"Eas#uAKY]M99M)M@<-F#Ao;
-*$@q]:kLgH6-Op#JA@UX:nAT!;,P,XUVOp$,@@<,jrA7ZltL]NY>P"UU;P&5P!@q]:k+D,M$G%
-#3.+C\c"@rGmh+DHW4Oo^@AP"_$3Ou"b*+DHW7Oo^_%I=!V]+DHW4Oo^_%I?ITYP#Q:>B-:q3@
-q]:kP'AWo+DHW4Oo^_%05;VEL]NY>Ou%NLAM7nAB-;&4B8?P&P"_#p05YcCCh7K,D0'?Q@ZiN#
-DKTf;F(96;05cRGOu"b4L]ESo06!(<Ou%H(+Dl14Ch7LI8pc^dI?IQHF(ZV7P"UrtF(KH'P!5%
-:P&Pc2Fco"<P#Q%20p4\HF,0m\C5;kQ4aSi'+EN>>Oo^_%I=%,BI?ITYP#O)P+Duu9Oo^_%068
-7WL]NY>Ou"b1+E3,;Oo^_%I?J/Z+EMso%[&V$ASu!dHQ[B@FCC=rP"T;/F-8_%P!5%R05;VEL]
-NY>Ou%NL%[&V$ASu!eHQ[B@FCLCsP"T;/F-8_%P!5%R05;VEL]NY>Ou%NL%[&V$ASu!fH]g@OY
-:j=)Eaa68H#R>XD0p>8FCUItP"U4MOogehLbP!kP!4[UP,X6EP&-9^I?IT?GB8p2C6CcDGV<eS
-C5;nR!Ko6eOq*X204Aa:FCKT[3-/YQ@?Ng;@$3]pATVCE5*B<:E0:?POq*X204Jg;FCBNZ3-/Y
-Q@Zip<@$3]pATV@D5*B<:E0:?POq*X205b?GFCB'*FCH@s+Dl14P%&co!.C#_L*mL;Ou"b/AU&
-<+DJsW*+Bot*F(^YFH\_ZMP(SK:%pb>SD0'?Q@Yb&JWJLS1!.-A5P!5$bD0'>4Bp)+tDJsW+HQ
-[3;G][A3DffG2BnubPG^XpVAU&<*DJsW++DDs9AU&<*DJsW++DHW4Oo^_=L]NY>P'DD<<Gcei+
-DI!3@W$++@=',7AU&<+DJsW*+DHW3P'DD%DIn'7@W$++@3B8,DIn'7@W$++@3B9?!KmJH98EV3
-!Kq\UP#Zpn82"C\AS,k$AR^"L3,W;PFCB'*FCLCsP"Us%DIn'7@W$++@?Ng;99Nn8Oq*X204JC
- %AoD^$@=+.sDIn'7@W$++@?Ng;99MJVAU&<*DJsW+P!5%%P%K-*%[&V$@s;u:@UX:eDe*FB@Y
-b)KCkr1V!KmbP1G<Hu!0T,kC5;kQ1OF(ZF,9jZD0oc:F,0g8Df^^AP#@):P,XUh@s<!M!H;suL
-^K;[L]N[<P'AWpL]W_q04T'7FH-KFATVCE1G<T`A7^Q%Ou&7dI?IQHF(]<#DMS:U4aShlF(KHR
-"ES-r@ZiN#D/WrrL]NYpP!FGY<,H\hCh7L?!g60&D0'?G!0TueDD@;;L]MC9D0'c.EfrVLFbg*
-^8s0=(04T'7FH-KFATVFF1G<T`A7^Q"Ou"b*L]NYpP!FGY<.0p/D0'?G!0TueDD@;;HS8lMATW
-q8F(KH&Ou"b.De*F8"-PGnBnueQ1Qk"OP#Q:>B5D-sL]W`3H\_Z>F_u2@@rd_rP')pIL]W`3P!
-4['P%odQP!+s2HS8lMATWq8F(KH'Ou"b.De*F8!g5@&5^eepL]D=8D0'c.EfrVLFcn_?"-Q9>5
-)99'C5;nR4d#qpD0'?G!0TudDI[-/@rl4'NWaE7FCUIi05YW<AV^MQ1G<Hu!Ko7%5^eepF(KH&
-+Dl14L]ET2P$j(HDKTf;F(96R5*C&O3/@X!8s2Ao!g7;S!0TL."Hin7D0'?G!0TudDI[-/@rl4
-'NWaE7FCUIi05YW<AV^MQ1G<Hu!Ko7%5^eepF(KH&+Dl14L]ET2P$j(HDKTf;F(96R5*C&O3/@
-["8s2Ao!g7;S!KoU/"Hin7D0'?G!0TudDI[,uD0'?G!Kp)eDI[-/@rl4'NWaE7FCUIi05YW<AV
-^PR1G<Hu!g5@&5^eepF(KH&+Dl14L]ET2P$i?BFCHA0F(^:0P"UsGOp$RBDKTf;F(96R5*C&O3
-/@X!8s2Ao!g7;S!0TL."Hin7D0'?G!0TudDI[,uD0'?G!Kp)eDI[-/@rl4'NWaE7FCUIi05YW<
-AV^PR1G<Hu!g5@&5^eepI?IQc!+B>JAoD^$@XBb<F(KHR"ES-r@?NE"D/WrrL]ESoP!FGY<%ha
-&ATWq8F(KH&Ou"b.De*F8!Ko7%5^ef,HYFU>F(]<#DN[/0P!FGY<,!ImF_u2@@ra5?F_u2_5*@
-]TDI[?gEc[C-Ou%GpF(KHR"ES-r@?Nd#Bcq86B5D-sL]N[<P%K&XF(ZV0P"T8%DffD1BnueQ!F
-]GKAoD^$@Zgk@F(-jHASu!d+Dl14+DI!3ASu!e052PCL]NY>Ou&7dI?IQXP#Q-<D0'?+AT!;*P
-,XUVHYmh:+DI!3@W$++@3BE.B-:oE!KmJH94DdWFCC=8BnuhR!F]GKAoD^$@Zgk@F(-mIASu!d
-+Dl14+DI!3ASu!e+Dl14+DHW4Oo^_=ASu!e052PCL]W_?Ou&7dI?IQXP#Q:>B-:oO94DdWFCBM
-=F*D(9ASu!d04T'7FH-KFATVCE1Qk"OP#Q-<D0'?+AT!;,P,XUVHZ!tCF,0s^4`b1V@3BE.B-:
-oE"HieK99N\G"FG3"1*C.G@pt/pHYmh:+DI!3Ao9>d4aUdY0d(%F@q.0++DHW4Oo^_%I=#gPB-
-:oE!g65gDI[00Bcq,G!g3SI1OYEdI?K5G5^eepI?IQD+Dl14Ch7L?#*PsKAp\E<D0(L;P!*ktF
-C?;/F(ZV0L^'"CP"UsGOp$,Q@l#6=DI[+2"++m+B-:oO94i&rP!+/(DD<8FDI[00Bcq,G!KmJH
-1OXUeF(ZV0L]W`5ASu!f052PCL]W_?Ou%NL<IL$_P!FGY<.0p/DKTf;L]il5DKTf;L]W`SL]ET
-$Op$,QG@Mb,DI[*.@rl4'NWaE7FCUIiP!FGY<,H\h+DI!3ASu!d052PCL]NY>Ou&7dI?IQ>F(K
-HR"ES-r@Zim$Bcq86B5D-sL]N[<P%K&XF(ZV0P"T5$DffG2BnueQ!FfMLAoD^$@?Lb?F($dGAS
-u!e+Dl14+DI!3ASu!d052PCL]NY>Ou&7dI?IQXP#Q-<D0'?+AT!;*P,XUVHYmh:+DI!3@;^"*@
-N]N/B-:oE!KmJH94;^VFCLC9BnuhR!FfMLAoD^$@?Lb?F($gHASu!e+Dl14+DI!3ASu!d+Dl14
-+DHW4Oo^_=ASu!d052PCL]W_?Ou&7dI?IQXP#Q:>B-:oO94;^VFCKS>F*D%8ASu!e04T'7FH-K
-FATV@D1Qk"OP#Q-<D0'?+AT!;,P,XUVHZ!tCF,0s^4`b1V@N]N/B-:oE"HieK99N\G"FG3"1*C
-.G@q(5qHYmh:+DI!3Ao9>d4aUdY0d(%F@q.0++DHW4Oo^_%I=#gPB-:oE!g65gDI[00Bcq,G!g
-3SI1OYEdI?K5G5^eepI?IQD+Dl14Ch7L?#*PsKAp\E<D0(L;P!*ktFCHA0F(ZV0L^'"CP"UsGO
-p$,Q@l#6=DI[.3"++m+B-:oO94i&rP!+/(DD<8FDI[00Bcq,G!KmJH1OXUeF(ZV0L]W`5ASu!f
-052PCL]W_?Ou%NL<IL$_P!FGY<.0p/DKTf;L]il5DKTf;L]W`SL]ET$Op$,QG@Mb,DI[-/@rl4
-'NWaE7FCUIiP!FGY<,H\h+DI!3ASu!e052PCL]NY>Ou&7dI?IQ>F(KHR"ES-rA!0!%DKTf;L]W
-`3HYmh:+DI!3Ao9>d4aUdY0d(%F@q.0++DHW4Oo^_%I=#gPB-:oE!g65gDI[00Bcq,G!g3SI1O
-YEdP!FGY<,!IlF(]<#DMS=VWKLk?F(KH&+Dl14+DI!3P$i![!KmJ$F_u2@@rd_rP')pIL]W`3P
-!4['P%odQP!+s2Op$,Q@PK!:DI[0!D0'>4Bp),#DI[-/Bcq,G!KmJH1Qk"OP#Qjm<,!IlF(]<#
-DMS=VWKLk?F(KH&+Dl14+DI!3P$i![!KmJ$F_u2@@rd_rP')pIL]`f4P!4['P%odRP!+s2Op$,
-Q@PT';DI[0!D0'>4Bp),#DI[,uD0'>4BnueQ!Kp)eDI[-/Bcq,G!g3SI1Qk"OP#Qjm<,!IlF(]
-<#DMS@WWKLk?F(KH&+Dl14+DI!3P$i?BFCHA0F(ZV0L]NY>P"UsGOp#KT!g3S%F_u2@@rd_rP'
-)pIL]W`3P!4['P%odQP!+s2Op$,Q@PT';DI[0!D0'>4Bp),#DI[,uD0'>4BnueQ!Kp)eDI[-/B
-cq,G!g3SI1Qk"OP#Qjm<,!IlF(]<#DMSCXWKLk?F(KH&+Dl14+DI!3P$i?BFCHA0F(ZV0L]NY>
-P"UsGOp#KT!g3S%F_u2@@rd_rP')pIL]`f4P!4['P%odRP!+s2Op$,Q@P]-<DI[0!D0'>4Bp),
-#DI[,uD0'>4BnueQ!Kp)eDI[,uD0'>4BnuhR!Kp)eDI[-/Bcq,G"-N\J1Qk"OP#Qjm<,!IlF(]
-<#DMSCXWKLk?F(KH&+Dl14+DI!3P$i?BFCHA0F(ZV0L]NY>P"UsGOp#i;FCHA0F(ZV0L]W_?P"
-UsGOp#KT"-N\&F_u2@@rd_rP')pIL]W`3P!4['P%odQP!+s2Op$,Q@P]-<DI[0!D0'>4Bp),#D
-I[,uD0'>4BnueQ!Kp)eDI[,uD0'>4BnuhR!Kp)eDI[-/Bcq,G"-N\J1Qk"OP#Qjm<,!I`@V'.i
-Eb/^,+EMa8+D#G#@kV>5ATWq8F(KH%Ou&7dI?IQNG@D\+DI[00@rl4'NWaE7FCLChP!FGY<0BL
-pP%B')AM7P;F!+t:F,0g2P"_#pI?IP_D.Rg0Bk)3,>9I.+!f.(e+BsX(L^[Q3>DNE<&R?M`L]r
-SM>p*@-#)F4(+BsX,L`ftG>DNQ@-!_WtL^Ake>p*@-$A^?@+BsX0LbrB[>DN]D3F*b3L^f/(>p
-*@-%Z!JX+BsX4Le(eo>DNiH9jJlIOu"b6Ec6/C+EDCEF-8=4BnubP1OCcl+Dk\3EbT$)+DI!3O
-u"b3+Dlo7P"Uro04\R:F!,=U!Kp*=1G<Z^@<iu;EckrV1Nd_VGB8Q?P&5>^Dg-7FEft:&"FDe?
-CLMK2AmoLsAWeitP#Pq8F-:!C@s<!W:jXj6CLMK2AmoLsAWeitP#Q@8@<m3_5^eep052PCL]NY
->Ou%NLAM7P;F!+[0@s<!W!g7\:@s;u:@s<!W@Zm^;LhD.!K3aWr04T3I+Bot/L]Wa=L^0)ZD/W
-rrOo]':F-6TfF^:.dL]E52L]M$rGB8+o3/@X!!KoWVGB8p2P"UsSOo]uo8;M&EC+j'OP!5$bL]
-E52L]M$rGB8+o3/@Tu!KoWVGB8p2P"UsSOo]uo87O@sA7Kh)L]W_?P&-9^Lhi/g04Qc#5*@]T@
-s;u:>9IF"F-6TfF^m-K@ko04Ou"b&DI[`1>E/nC0etL>16)Po1,:R>16)Po1,:U?0ocGm1,1O>
-1QDYo1,1R?16)Pn1GLX?16)Pn1,:U>1QDYo1,:X?16)Pn1GU^?16)Po1,1O=1QDYp1,1R>16)P
-o1GLX>16)Pn0etL?16)Pn1,:R?16)Pn1,:U@0ocGm0f(R?16)Pn1,CX?16)Pn1,C[@0ocGn1,C
-[?0ocGn1,1L>16)Po1,1O?0ocGn0f(R>16)Po1,CX>16)Pp0etI>0ocGo0ekF=16)Pp1,1L=16
-)Pp1,1O>0ocGo0etL=16)Pp1,:R=16)Pp1,:U>0ocGn0etI=1QDYp0etO?0ocGn1GU[?0ocGm0
-ekI>1QDYo1GLU>1QDYo1GL[@0ocGm0etO>1QDYo1GU[>1QDYo1GUa@0ocGn0ekI=1QDYp1GLU=
-1QDYp1GL[?0ocGm0etI>1QDYo0etO@0ocGm1GU[@0ocGm0f(O>1QDYo0f(U@0ocGm1G^a@0ocG
-o0f(O>0ocGn0ekI?0ocGn1GLU?0ocGn0f(O=1QDYp0f(U?0ocGn0f(O?0ocGo0ekC<1QDYq0ek
-I>0ocGo1GLU>0ocGo0etI<1QDYq0etO>0ocGo1GU[>0ocGo0f1U>0ocGn1,1U?0ocGp1GLU=0o
-cGm0ekF=1l_bp0ekL?16)Pn1,1L=1l_bp1,1U@0ocGm1bg^?16)Pn1bga@0ocGm0etL=1l_bp0
-etR?16)Pn1,:R=1l_bp1,:[@0ocGm1bpd?16)Pn1bpg@0ocGn1bga?0ocGn1,1L<1l_bs0f(O=
-0ocGn1bg^>16)Pn1Ggg@0ocGm0ekF?16)Pn1,1L?16)Pn1,1O@0ocGm0f1X?16)Pn1,L^?16)P
-n1,La@0ocGp0ekF<16)Pq1,1L<16)Pq1,1O=0ocGn0etI?0ocGn0f1U?0ocGp0etI=0ocGm0ek
-C>1QDYo0ekI@0ocGm1GLU@0ocGm0f1U>1QDYo0f1[@0ocGp0ekC;1QDYr0ekI=0ocGm0f(O@0o
-cGm0f1U@0ocGo0ekC>0ocGp0ekC=0ocGn0ekL>16)Po0ekF<1l_bq0ekF>16)Po0ekC=1L6/"0
-6;5DEcbl1@ribsNW_-n0en[k1,:U>NW_*l1,=jm0f1U>NW_'k1GXsn0etO>NW_'k0f4mn1GLU>
-NW_-n0en[k1,:U>NW_*l1,=jm0f1U>NW_'k1GXsn0etO>NW_'k0f4mn1GLU>?'6usF*)>>ASu"
-!De*B$>E/hB1,1MD">V_f0ocAl0etME">M_f0ocAk0f(SF">MYf0ocAk0ekMF">_be16)Jl0f(
-SF">MYf0ocAk0ekMF">_be16)Jn1,1MD">V_f0ocAl0etME">M_f0jTqu06;5RE+NosF(KN+DB
-N/D">V\e16)Jl1bg_F">MVe16)Jl1,CYF">MVc1l_\p0ekGD">MVe16)Jl1,CYF">MVc1l_\p0
-ekGD">_ef0ocAl1,:SE">V\e16)Jl1bg_F">_ef0ocAl1,:RiOu%&qF,9jZ4`G=\L^K;CL]W`S
-L]NZ%P&bn&F*)>>ASu"!+EMXCE+NosF)PT"Ou%N506;5RE+NosF!,OGDfB9*@rl4)AT!YeI?IS
-`Ec6/2BlnD=Efp`l1Pc$e!HNtsP,Wd]Bp(ZC1G<fYF!+\C$?L;tEcbl1@ric,P"U.X0TrD`P"C
-H1@s;u:BnuqUCkr7X9RC>g@rmesP"U.X0TrD`P"C(b8TSulE+NosF!,1[97)IKP,Wkm8VdCQOu
-$r`EbgI3F(03;L]NZ@L]ET$H[CPLI=6HhL]DjOP#[ZtI?I0b)i+NXWKIRN$^*]:FcnqOF`MDE@
-VKq*+DHW6M#WWnP'DD<82"prG]P!3Lf&5)E+ifsB4uCMCjUs=I?K5=!/LYrL]Wa=HS9)r5*@^B
-Dg,l+BkM+$HQ[?IG@G9.F!,1[99K@>Fa]F*F(K<(ASGdjFF/fNH\_ZMP(SQ[H\_]NP(SPjI?K5
-2P"9V3GA(Q%B4uC6+EDCE@VKq*+EE8=P,XU;OogehI?K5=;0-;fBOtmjBQTDRH\_]NP(R&'1H[
-cQEb0,A061WAD.. O,Bm; :MBm= \AE+s Q< 05t WMG_f3 ME+sQB+
-E2%>F-:!g;3Fg1B Otm jBQPA 9Bm=] ^@ Ydm E;M [l,2
-D98gA9;L@;2@c+2 D8ufF <G L@FD5 Z2F! *Y 1+C oD.FC ]E# GEQnu 061W
-AD..O,Bm>e?Ou[r R%[&V $@r Gmh 0fEg 13 0If *F_`U> D_ ?-CEcQ G7F
-`MSBDD#CBBlJ#6A 7]@eD Imj "F) Q 2A@ qCg GOu Y1:ATV m" @r#drB 9Ki
-QP'(hWFDtYuCM@[ !I?IP ~>
-% uk.co.terryburton.bwipp/code16k 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code16k 0.0 2015050900 142769 155916
+%%BeginData: 710 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/code16k {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /mode -1 def
+ /pos -1 def
+ /rows 0 def
+ /rowheight 8 def
+ /sepheight 1 def
+ /encoding (auto) def
+ /raw false def
+ /parse false def
+ /parsefnc false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /mode mode cvi def
+ /pos pos cvi def
+ /rows rows cvi def
+ /rowheight rowheight cvi def
+ /sepheight sepheight cvi def
+
+ pos -1 ne {/rows 16 def} if
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Convert input into bytes accounting for FNC characters
+ /swa -1 def /swb -2 def /swc -3 def
+ /sa1 -4 def /sb1 -5 def /sc1 -6 def
+ /sa2 -7 def /sb2 -8 def /sc2 -9 def
+ /pad -10 def /sb3 -11 def /sc3 -12 def
+ /fn1 -13 def /fn2 -14 def /fn3 -15 def /fn4 -16 def
+
+ % Character maps for each state
+ /charmaps [
+ % A B C A B C A B C
+ [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
+ [ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5
+ [ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8
+ [ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11
+ [ (,) (,) (12) ] [ (-) (-) (13) ] [ (.) (.) (14) ] % 12-14
+ [ (/) (/) (15) ] [ (0) (0) (16) ] [ (1) (1) (17) ] % 15-17
+ [ (2) (2) (18) ] [ (3) (3) (19) ] [ (4) (4) (20) ] % 18-20
+ [ (5) (5) (21) ] [ (6) (6) (22) ] [ (7) (7) (23) ] % 21-23
+ [ (8) (8) (24) ] [ (9) (9) (25) ] [ (:) (:) (26) ] % 24-26
+ [ (;) (;) (27) ] [ (<) (<) (28) ] [ (=) (=) (29) ] % 27-29
+ [ (>) (>) (30) ] [ (?) (?) (31) ] [ (@) (@) (32) ] % 30-32
+ [ (A) (A) (33) ] [ (B) (B) (34) ] [ (C) (C) (35) ] % 33-35
+ [ (D) (D) (36) ] [ (E) (E) (37) ] [ (F) (F) (38) ] % 36-38
+ [ (G) (G) (39) ] [ (H) (H) (40) ] [ (I) (I) (41) ] % 39-41
+ [ (J) (J) (42) ] [ (K) (K) (43) ] [ (L) (L) (44) ] % 42-44
+ [ (M) (M) (45) ] [ (N) (N) (46) ] [ (O) (O) (47) ] % 45-47
+ [ (P) (P) (48) ] [ (Q) (Q) (49) ] [ (R) (R) (50) ] % 48-50
+ [ (S) (S) (51) ] [ (T) (T) (52) ] [ (U) (U) (53) ] % 51-53
+ [ (V) (V) (54) ] [ (W) (W) (55) ] [ (X) (X) (56) ] % 54-56
+ [ (Y) (Y) (57) ] [ (Z) (Z) (58) ] [ ([) ([) (59) ] % 57-59
+ [ 92 92 (60) ] [ (]) (]) (61) ] [ (^) (^) (62) ] % 60-62
+ [ (_) (_) (63) ] [ 0 (`) (64) ] [ 1 (a) (65) ] % 63-65
+ [ 2 (b) (66) ] [ 3 (c) (67) ] [ 4 (d) (68) ] % 66-68
+ [ 5 (e) (69) ] [ 6 (f) (70) ] [ 7 (g) (71) ] % 69-71
+ [ 8 (h) (72) ] [ 9 (i) (73) ] [ 10 (j) (74) ] % 72-74
+ [ 11 (k) (75) ] [ 12 (l) (76) ] [ 13 (m) (77) ] % 75-77
+ [ 14 (n) (78) ] [ 15 (o) (79) ] [ 16 (p) (80) ] % 78-80
+ [ 17 (q) (81) ] [ 18 (r) (82) ] [ 19 (s) (83) ] % 81-83
+ [ 20 (t) (84) ] [ 21 (u) (85) ] [ 22 (v) (86) ] % 84-86
+ [ 23 (w) (87) ] [ 24 (x) (88) ] [ 25 (y) (89) ] % 87-89
+ [ 26 (z) (90) ] [ 27 ({) (91) ] [ 28 (|) (92) ] % 90-92
+ [ 29 (}) (93) ] [ 30 (~) (94) ] [ 31 127 (95) ] % 93-95
+ [ fn3 fn3 (96) ] [ fn2 fn2 (97) ] [ sb1 sa1 (98) ] % 96-98
+ [ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101
+ [ fn1 fn1 fn1 ] [ pad pad pad ] [ sb2 sa2 sb1 ] % 102-104
+ [ sc2 sc2 sb2 ] [ sc3 sc3 sb3 ] % 105-106
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 109 dict 109 dict 109 dict ] def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 2 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals j get exch i put
+ } for
+ } for
+ /seta charvals 0 get def
+ /setb charvals 1 get def
+ /setc charvals 2 get def
+
+ raw {/encoding (raw) def} if
+
+ encoding (raw) eq {
+ /cws barlen array def
+ /i 0 def /j 0 def
+ { % loop
+ i barlen eq {exit} if
+ /cw barcode i 1 add 3 getinterval cvi def
+ cws j cw put
+ /i i 4 add def
+ /j j 1 add def
+ } loop
+ /cws cws 0 j getinterval def
+ /text () def
+ } if
+
+ encoding (auto) eq {
+
+ /fncvals <<
+ (FNC1) fn1
+ (FNC2) fn2
+ (FNC3) fn3
+ (FNC4) fn4
+ >> def
+ /msg barlen array def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+
+ % Determine digit runlength and characters from given position
+ /numsscr {
+ /n 0 def /s 0 def
+ /p exch def {
+ p msglen ge {exit} if
+ msg p get
+ dup setc exch known not {pop exit} if
+ fn1 eq {
+ % FNC1 in odd position of run like two digits
+ s 2 mod 0 eq {/s s 1 add def} {exit} ifelse
+ } if
+ /n n 1 add def
+ /s s 1 add def
+ /p p 1 add def
+ } loop
+ n s
+ } bind def
+
+ % Encoding for each alphabet
+ /enca {
+ seta exch get cws exch j exch put
+ /j j 1 add def
+ } bind def
+ /encb {
+ setb exch get cws exch j exch put
+ /j j 1 add def
+ } bind def
+ /encc {
+ dup type /arraytype ne {
+ setc exch get
+ } {
+ aload pop 48 sub exch 48 sub 10 mul add
+ } ifelse
+ cws exch j exch put
+ /j j 1 add def
+ } bind def
+
+ % Character exclusively in either alphabet A or B
+ /anotb {dup seta exch known exch setb exch known not and} bind def
+ /bnota {dup setb exch known exch seta exch known not and} bind def
+
+ % Pre-compute relative position of next anotb and next bnota characters
+ /nextanotb [ msg length {0} repeat 9999 ] def
+ /nextbnota [ msg length {0} repeat 9999 ] def
+ msg length 1 sub -1 0 {
+ /i exch def
+ msg i get anotb {
+ nextanotb i 0 put
+ } {
+ nextanotb i nextanotb i 1 add get 1 add put
+ } ifelse
+ msg i get bnota {
+ nextbnota i 0 put
+ } {
+ nextbnota i nextbnota i 1 add get 1 add put
+ } ifelse
+ } for
+
+ % Does a-only come before b-only after given position and vice versa
+ /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def
+ /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def
+
+ /cws barcode length 2 mul 3 add array def
+
+ % Select mode and encode first characters
+ /i 0 def /j 0 def
+ { % common exit
+ % extended data length
+ pos -1 ne {
+ % encode one and two
+ cws 0 pos 10 idiv 1 sub put
+ cws 1 pos 10 mod 1 sub put
+ /j 2 def
+ /cset (setb) def
+ /mode 7 def
+ exit
+ } if
+ % empty => b
+ msglen 0 eq {
+ /cset (setb) def
+ /mode 1 def
+ exit
+ } if
+ % FNC1 . 2+ nums => c fnc1
+ msglen 2 ge {
+ msg 0 get fn1 eq 1 numsscr exch pop 2 ge and {
+ /cset (setc) def
+ /mode 4 def
+ /i 1 def
+ exit
+ } if
+ } if
+ % FNC1 => b fnc1
+ msg 0 get fn1 eq {
+ /cset (setb) def
+ /mode 3 def
+ /i 1 def
+ exit
+ } if
+ msglen 2 ge {
+ % 2+ even nums => c
+ 0 numsscr exch pop dup 2 ge exch 2 mod 0 eq and {
+ /cset (setc) def
+ /mode 2 def
+ exit
+ } if
+ % 3+ odd nums => c sb1 encode
+ 0 numsscr exch pop dup 3 ge exch 2 mod 1 eq and {
+ msg 0 get encb
+ /cset (setc) def
+ /mode 5 def
+ /i 1 def
+ exit
+ } if
+ % b . 2+ even nums => c sb1 encode
+ setb msg 0 get known
+ 1 numsscr exch pop dup 2 ge exch 2 mod 0 eq and and {
+ msg 0 get encb
+ /cset (setc) def
+ /mode 5 def
+ /i 1 def
+ exit
+ } if
+ % b . 3+ odd nums => c sb2 encode
+ setb msg 0 get known
+ 1 numsscr exch pop dup 3 ge exch 2 mod 1 eq and and {
+ msg 0 get encb
+ msg 1 get encb
+ /cset (setc) def
+ /mode 6 def
+ /i 2 def
+ exit
+ } if
+ % b . b . 2+ even nums => c sb2 encode
+ setb msg 0 get known
+ setb msg 1 get known and
+ 2 numsscr exch pop dup 2 ge exch 2 mod 0 eq and and {
+ msg 0 get encb
+ msg 1 get encb
+ /cset (setc) def
+ /mode 6 def
+ /i 2 def
+ exit
+ } if
+ } if
+ % anotb before bnota => a
+ 0 abeforeb {
+ /cset (seta) def
+ /mode 0 def
+ exit
+ } if
+ % otherwise => b
+ /cset (setb) def
+ /mode 1 def
+ exit
+ } loop
+
+ { % Encode remainder
+ i msglen eq {exit} if
+
+ i numsscr /nums exch def /nchars exch def
+
+ % Determine switches and shifts
+ { % common exit
+ cset (seta) eq {
+ % bnota . anotb before bnota => sb1 encode
+ i msglen 1 sub lt {
+ msg i get bnota
+ i 1 add abeforeb and {
+ sb1 enca
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+ } if
+ % bnota . bnota . anotb before bnota => sb2 encode
+ i msglen 2 sub lt {
+ msg i get bnota
+ msg i 1 add get bnota and
+ i 2 add abeforeb and {
+ sb2 enca
+ msg i get encb
+ msg i 1 add get encb
+ /i i 2 add def
+ exit
+ } if
+ } if
+ % bnota => swb
+ msg i get bnota {
+ swb enca
+ /cset (setb) def
+ exit
+ } if
+ % 4 nums . a => sc2 encode
+ i msglen 4 sub lt {
+ nums 4 eq
+ seta msg i 4 add get known and {
+ sc2 enca
+ 2 {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ } if
+ % 6 nums . a => sc3 encode
+ i msglen 6 sub lt {
+ nums 6 eq
+ seta msg i 6 add get known and {
+ sc3 enca
+ 3 {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ } if
+ % 4+ even nums => swc
+ nums 4 ge nums 2 mod 0 eq and {
+ swc enca
+ /cset (setc) def
+ exit
+ } if
+ % otherwise => encode
+ msg i get enca
+ /i i 1 add def
+ exit
+ } if
+ cset (setb) eq {
+ % anotb . bnota before anotb => sa1 encode
+ i msglen 1 sub lt {
+ msg i get anotb
+ i 1 add bbeforea and {
+ sa1 encb
+ msg i get enca
+ /i i 1 add def
+ exit
+ } if
+ } if
+ % anotb . anotb . bnota before anotb => sa2 encode
+ i msglen 2 sub lt {
+ msg i get anotb
+ msg i 1 add get anotb and
+ i 2 add bbeforea and {
+ sa2 encb
+ msg i get enca
+ msg i 1 add get enca
+ /i i 2 add def
+ exit
+ } if
+ } if
+ % anotb => swa
+ msg i get anotb {
+ swa encb
+ /cset (seta) def
+ exit
+ } if
+ % 4 nums . b => sc2 encode
+ i msglen 4 sub lt {
+ nums 4 eq
+ setb msg i 4 add get known and {
+ sc2 encb
+ 2 {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ } if
+ % 6 nums . b => sc3 encode
+ i msglen 6 sub lt {
+ nums 6 eq
+ setb msg i 6 add get known and {
+ sc3 encb
+ 3 {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ } if
+ % 4+ even nums => swc
+ nums 4 ge nums 2 mod 0 eq and {
+ swc encb
+ /cset (setc) def
+ exit
+ } if
+ % otherwise => encode
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+ cset (setc) eq {
+ % 2+ nums => encode
+ nums 2 ge {
+ msg i get fn1 eq {
+ fn1 encc
+ /i i 1 add def
+ } {
+ msg i 2 getinterval encc
+ /i i 2 add def
+ } ifelse
+ exit
+ } if
+ % b . 2+ even nums => sb1 encode
+ i msglen 1 sub lt {
+ setb msg i get known
+ i 1 add numsscr exch pop dup 2 ge exch 2 mod 0 eq and and {
+ sb1 encc
+ msg i get encb
+ /i i 1 add def
+ exit
+ } if
+ } if
+ % b . 3+ odd nums => sb2 encode
+ i msglen 1 sub lt {
+ setb msg i get known
+ i 1 add numsscr exch pop dup 3 ge exch 2 mod 1 eq and and {
+ sb2 encc
+ msg i get encb
+ msg i 1 add get encb
+ /i i 2 add def
+ exit
+ } if
+ } if
+ % b . b . 2+ even nums => sb2 encode
+ i msglen 2 sub lt {
+ setb msg i get known
+ setb msg i 1 add get known and
+ i 2 add numsscr exch pop dup 2 ge exch 2 mod 0 eq and and {
+ sb2 encc
+ msg i get encb
+ msg i 1 add get encb
+ /i i 2 add def
+ exit
+ } if
+ } if
+ % b . b . 3+ odd nums => sb3 encode
+ i msglen 3 sub lt {
+ setb msg i get known
+ setb msg i 1 add get known and
+ i 2 add numsscr exch pop dup 3 ge exch 2 mod 1 eq and and {
+ sb3 encc
+ msg i get encb
+ msg i 1 add get encb
+ msg i 2 add get encb
+ /i i 3 add def
+ exit
+ } if
+ } if
+ % b . b . b . 2+ even nums => sb3 encode
+ i msglen 3 sub lt {
+ setb msg i get known
+ setb msg i 1 add get known and
+ setb msg i 2 add get known and
+ i 3 add numsscr exch pop dup 2 ge exch 2 mod 0 eq and and {
+ sb3 encc
+ msg i get encb
+ msg i 1 add get encb
+ msg i 2 add get encb
+ /i i 3 add def
+ exit
+ } if
+ } if
+ % anotb before bnota => swa
+ i abeforeb {
+ swa encc
+ /cset (seta) def
+ exit
+ } if
+ % otherwise => swb
+ swb encc
+ /cset (setb) def
+ exit
+ } if
+ exit
+ } loop
+
+ } loop
+ /cws cws 0 j getinterval def
+ } if % auto encoding
+
+ % Basic metrics for the each symbol
+ % r dcws
+ /metrics [
+ [ 2 7 ]
+ [ 3 12 ]
+ [ 4 17 ]
+ [ 5 22 ]
+ [ 6 27 ]
+ [ 7 32 ]
+ [ 8 37 ]
+ [ 9 42 ]
+ [ 10 47 ]
+ [ 11 52 ]
+ [ 12 57 ]
+ [ 13 62 ]
+ [ 14 67 ]
+ [ 15 72 ]
+ [ 16 77 ]
+ ] def
+
+ % Select metrics of an appropriate symbol
+ /urows rows def
+ /i 0 def
+ { % loop
+ /m metrics i get def
+ /r m 0 get def % Columns in symbol
+ /dcws m 1 get def % Data codewords in symbol
+ /okay true def
+ urows 0 ne urows r ne and {/okay false def} if
+ cws length dcws gt {/okay false def} if
+ okay {exit} if
+ /i i 1 add def
+ } loop
+
+ % Extend cws to ncws codewords by addition of pad characters
+ /cws [ cws aload pop dcws cws length sub {103} repeat ] def
+
+ % Add the start character
+ /cws [ r 2 sub 7 mul mode add cws aload pop ] def
+
+ % Calculate the check characters
+ 0 0 1 dcws {dup 2 add exch cws exch get mul add} for
+ 107 mod /c1 exch def
+ 0 0 1 dcws {dup 1 add exch cws exch get mul add} for
+ c1 dcws 2 add mul add 107 mod /c2 exch def
+ /cws [ cws aload pop c1 c2 ] def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (212222) (222122) (222221) (121223) (121322) (131222) (122213)
+ (122312) (132212) (221213) (221312) (231212) (112232) (122132)
+ (122231) (113222) (123122) (123221) (223211) (221132) (221231)
+ (213212) (223112) (312131) (311222) (321122) (321221) (312212)
+ (322112) (322211) (212123) (212321) (232121) (111323) (131123)
+ (131321) (112313) (132113) (132311) (211313) (231113) (231311)
+ (112133) (112331) (132131) (113123) (113321) (133121) (313121)
+ (211331) (231131) (213113) (213311) (213131) (311123) (311321)
+ (331121) (312113) (312311) (332111) (314111) (221411) (431111)
+ (111224) (111422) (121124) (121421) (141122) (141221) (112214)
+ (112412) (122114) (122411) (142112) (142211) (241211) (221114)
+ (413111) (241112) (134111) (111242) (121142) (121241) (114212)
+ (124112) (124211) (411212) (421112) (421211) (212141) (214121)
+ (412121) (111143) (111341) (131141) (114113) (114311) (411113)
+ (411311) (113141) (114131) (311141) (411131) (211412) (211214)
+ (211232) (211133)
+ ] def
+
+ % Start/stop character encodings
+ /startencs [
+ (3211) (2221) (2122) (1411) (1132) (1231) (1114) (3112)
+ (3211) (2221) (2122) (1411) (1132) (1231) (1114) (3112)
+ ] def
+ /stopencsodd [
+ (3211) (2221) (2122) (1411) (1132) (1231) (1114) (3112)
+ (1132) (1231) (1114) (3112) (3211) (2221) (2122) (1411)
+ ] def
+ /stopencseven [
+ (2122) (1411) (1132) (1231) (1114) (3112) (1132) (1231)
+ (1114) (3112) (3211) (2221) (2122) (1411) (3211) (2221)
+ ] def
+ pos -1 eq pos 10 idiv 2 mod 1 eq or {
+ /stopencs stopencsodd def
+ } {
+ /stopencs stopencseven def
+ } ifelse
+
+ % Derive the bits for each row
+ /rowbits r array def
+ 0 1 r 1 sub {
+ /i exch def
+ /sbs [
+ 10
+ startencs i get {48 sub} forall
+ 1
+ cws i 5 mul 5 getinterval {
+ encs exch get {48 sub} forall
+ } forall
+ stopencs i get {48 sub} forall
+ 1
+ ] def
+ mark
+ 1 sbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall
+ counttomark 1 sub array astore exch pop exch pop
+ rowbits i 3 -1 roll put
+ } for
+
+ % Populate the bitmap
+ /pixs [
+ 81 sepheight mul {1} repeat
+ 0 1 r 2 sub {
+ /i exch def
+ rowheight {rowbits i get aload pop} repeat
+ sepheight {10 {0} repeat 70 {1} repeat 0} repeat
+ } for
+ rowheight {rowbits r 1 sub get aload pop} repeat
+ 81 sepheight mul {1} repeat
+ ] def
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx 81
+ /pixy pixs length 81 idiv
+ /height pixs length 81 idiv 72 div
+ /width 81 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/code16k dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code16k--
@@ -3588,942 +11200,1084 @@ QP'(hWFDtYuCM@[ !I?IP ~>
% --EXAM: MULTIPLE ROWS IN CODE 49
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp code49 0.0 0 0 0
-%%BeginData: 934 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2A Mc DoL_Q" 0Op
-s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW ei&
-D/WrrM#WVo05tiN M#WVo 061 uTF ,0 gZ 1G< ceG A(Q%B4 uC C#a-ts F(K
-<(ASGdjFGKs\1G< ]UEc Ye7 Am oL sAW ei& E+* d.AS
-,gi+D,%uF(LLjDf Bf4D f 0W ZY :js =Eb TE(F Eqh:P
-!+/J!Ko='%<$3-B l@m1H] kFA @ ;L! rP !+/T 5^e epOuSV6P,4 <rNWD;+NHB2
-`AWf3'OtDh\P')p OOu%N5 OtC c rF_- ^lI? ITY P%BdtOuY16 E-,f4DKCt)O
-u%NL<,Z_tBl@m1H ]g15P" @<D De*E %D/W rrO t;bP05tiN+ E27?Ot;bP06
-1uTF!,LAGB8ouOu "b3Dg ,l+B kM+$+ EDCE BOt mjBQTCgOu" b4AT2<oBkM+
-$+EM+5BOtmjBQTC gOu%& cEcYf =05Yc C+C \c"@rGmhP% 'TNOu"b+L]E
-So@UX:eDe*F+NWE ILNI-gJ D0'?Q5 &-6EP 'N4 "C6AUR!KmI :C6CcD1QlmD
-3/@Qj"-Q?@/8]H@P!3W:!KsFF5*C/R30Ia,"-TX>"-Pj29RV8N3,N_LP!3WD5*C2S@VV&,05?Y
-6Ou"b#@<,jrA7Zm#F(^:/C6D8R1Qk"OP#ZpnAUT_@04J@1Ch7K,@UX:eDe*FB@ZiN#F"rLNOu"
-b415Ppm1G<?X0o5dk1G<?X15Pjk1G<?X1Pkpk1G<WeM#*8j04o*3G%#3.+?VcH"@c-R0kP;XNW
-_gH6S`7k16)K,:.$gLDDND!5*@]TD0'>4@UX:nAT!Y;Ou"b*L]ESo05?:COu%H!+C\c"Ch7LI4
-aW>WI?IP_@q]:k+C\c"@rGmh+DI!3Ou%&cEcYf(DIXf!BOPq;?BRI7"DJuf@<-0qDMSFYWKLkV
-"FFTdEas#uAKY]C!KmJH98Ho;D0mpGBOPp(Ao;+%@;L!-@UX:eDe*E%BnueQ!JglA9Ti&31G<G
-bBnunT!Ko6eHS9(UBnueQ!Ko6eP#Zpn<,H\h+DN$/BOPqEGV<bRBnueQ!Ko5lC*78I!KmJH1OY
-Et05YcC+Dl14L]D1Q9Th1bD0'?+ASrW-F(^YFOu"b$BOPpu@;m>nNWCho!ATT816)AkNWCts!B
-#l<2N@esNWD,"!BH/@6&kt4NWDM-!CVqK7?.C<NWDY1!D&4O8WEgDNWDe5!DJLS9o]6LNWDq9!
-DndW;2tZTNWE(=!E>'[<K7)\NWE4A!Eb?_=cNMdNWC_l!A9B5+H?IJNWCen!@s02-$(d`F#"kM
-DD<8GDDE>HDDNDQF!+bO1G<6O@<-O"CibCeOu8CYL]E53LbO0/Bp(ZC1Lk*,Ec#6(+DI!3OuSW
-.06;5UBl7R*H#R>X4aVtbP"U4d<+BTMEctl-F-8_$P'DD<82"IkD.7F)+Bsj-0d)JX0gUg$0g^
-m%0ggs&0gq$'0h%*(0h.0)0h76*0h@<+0hIB,0hRH-0h[N.0hdT/0hmZ00i!`10i*f20i3l30i
-<r40iF#50iO)60iX/70ia580ij;90isA:0j'G;0j0M<0j9S=0en[i0f"aj0f+gk0f4ml0f=sm+
-<Z[G0fG$n0fP*o0fY0p+=)sK+=3$L0fb6q0eeUh0eJCe0eSIf0dMb\+=iHR0e\Og+>&TT+>/ZU
-+>8`V+>AfW+>JlX+>SrY+>]#Z+>f)[+>o/\+?#5]+?,;^+?5A_+?>G`0e87c1,4dj1,=jk1,Fp
-l1,P!m1,Y'n1,b-o+@2"h+@;(i+@D.j+@M4k+@V:l+@_@m+@hFn+@qLo+A%Rp+A.Xq+A7^r+A@
-ds+AIjt+ARpu+A\"!+Ae("+An.#+B"4$+B+:%+B4@&+B=F'+BFL(+BOR)+BXX*+Ba^++Bjd,1,
-k3p1,t9q1-(?r1,+^i1+eLf1+nRg1-pp%1.%!&1..''1.7-(1.@3)1.I9*1.R?+1.[E,1.dK-1
-.mQ.1/!W/1/*]01/3c11/<i21/Eo31/Nu41/X&51/a,61/j271/s8810'>9100D:109J;10BP<
-10KV=10T\>1*hk]1,"Xh1+S@d1*qq^1*Bkc1Pc$e!Jl5P056S5Ou$TdD.7F)+DI!3OuS6tP"RH
-<0p4_`1Pc'p9.sd1P!5$b@kicoP!+/%BOPq)@;L!-BcpV&@q]:kG%#3.+EK9#94MXDEctl-F!+
-sJP"T)DG^Y`S@kicpP!+/%BOPq)@;L!-BcpV&@q]:kG%#3.+EK<$94MXDEctl-F!+sJP"T)DG^
-Y`SI?I,SASu!rA7]1cE+i[,+Cf(nEctl-F-8_M99M8tY:j=)Eaa68H#R>XD0q'>OpR9ZI?IQm3
-+I/RP!3WD5*C2S@VV&,05?Y6Ou%NL%[&V$@UX=h1cTi<!0TNmLbP!kP!4[/P&-9^I?I0+L]`G6
-P)#2aL]N[<H]g@E0Tp165):nU;LO^\>p*@75*@mg@Yb&JWJLS1!.0M&P$!l2P"Us%I?I-aF^:.
-i@s<!W5&-6EP'N4"C6ATNC6CcD1OYDrOu"b&DI[TqASuX-ATDKpHS98ZD0(k(Ou"b1Eb-A2F_u
-2_@Zi^,"d3V`3/@X!D0qGFI=%-VL]rs@I?ITn1Pc$e"`SKnL]N[<HZ!tCF-8_C"d2Q8"-PiW@<
-6!:3.6r\05boLF!,@CD0$h=Eb-A2F_u2_@W6@!P,XU<Ou$uuD0(kLOuS6uP!+/0F_u1BBp),#D
-I[TqARTCoBOQ=P<0B4s"-PfoL]VI:D0$h/@<6!:3.6rhOuS7#P!+/J"'^R9LbN^hD0(jAP'(%Q
-@UX=h1cToH</:dB4aVte>DP"i0Q)#MF,0gP"HlHA!g7\3+C\c#AMcB&!cE-tF,0sT"-Q>e@<6!
-:3.6rhI?G)'1G<WgD.Ra%@rc^0F!+[0D0'?+ASujN!.C#_L]C_D1Mq2GCh7L?!KsF<s+gZ%056
-S5Ou$rrB-:oO99M8j0To%k5);4^@?Lb?DKTf-EbT$(F`)7CBcq;9D.Ra%@rc^0F!,1Q!KmJH98
-EV3!Kq\UHZ!tCATDKpEcl8@+DHW3P'DD<<IL$$D/WrrM#WW$H[B^MF,9jZD0mpQDe*F8"-PI'5
-^eepDKTf-EbT$(F`)8V!0U!2"d2K)05YW<AV^DN1Qk"OP#Pq)@<-O"Ci^_9F(^:/P"Us2OuSW.
-04AmA@<ls?E+P2LH]iM)D/WrrL]ESoP!FGY</:O;98G*]4aVtfI=$bRI?IS`D/WrrP!5$bP!FG
-YAUT_@04T3I+Dl14Ch7L?!g7AU!KmJH$'I(tD.Rg&De+k3@;Kmr@?NE"Bo)eP1G<L!s,o0TDe*
-F8!0TK^De*F8!KoU/EdKHVATVU(A<$h%CiF&rOu"b*L]ESo05?:COu%NL<,HPaAV^DN4aSi!AT
-VU(A<$n4F_t]1Bk*;^0564BOu"b+L]ESoI?IQHDe*F8"-Pfo05tiNG%#20>DN]D(5NEU(Pj5j%
-YtsX,)@e+%u;*Z,D[q-2i&$$)MfYp/r2KC6AQ50)i,er08MWE6\nHm&r7N`-AX@33f$1[:5E#.
-'8RZb-\sL54,?=]:P`/0@pP6R@s<!M!/LW2!Ji7QOuRE!F*:u.P!5%%E,Tf\D0qFgI?IQXP":B
-0Oo^_j05Y9BBQ%FA"^u4dBOR&[0564BOu"b+L]NYpI?IQHDe*F8"HkobDe*F8"d2$3EdM;?F,0
-g+BOPq)@;L!-D0'?G!0U!<98EV399ONQD.Rg&De+k3@;Kmr@?NE"BnueQ1G<L!!Ko6eP#QdB+D
-l14Ch7LI4aW>WI?IQVD.Rg&De+k3@;Kmr@?Nd#DKTf-EbT$(F`)7CBp),F"d2K)DK?q3DI[TqA
-RTCoBONQ2ATVU(A<$n4F_t]1Bk*;^P!FGY<,H\h+DI!3ASu!rA7]1cE+iZ5Bcq,G!KmJH1Qk"O
-P#Q:0FD,T'NX'HED.Ra%A!0!%DKTf-EbT$(F`)7CBp),F"d3JEDK?q3DI[TqARTCoBONQ2ATVU
-(A<$h%CiF&rOu&7dI?IQHF(ZV0+Du==ATDKpEcl8@+DI!3P"]G)@rGmhDKTf-EbT#:Bcq+4DKT
-f-EbT$(F`)7CBp),P!Ko7%5^eepI?J/iP%?:VGB4m:GB8Q?C6D8R1G<TVFE2)*F!+[0>DN?:$!
-eZXL]`GE>p*@-"Gdk"+BsX*L`ThE>DNK>-!_WtL^/_c>p*@-#`(3@+C1-d06M;RGB4mIDg-8c1
-G<Hu!0T-b05VhKATVs,@ric,P"Uro06/1PL]ET2Ou"b%@s;u:D284U99M(aDeid,+EVXHAWeil
-Ec6/CL]ETTF`MDEF!,LdD3>$K05kW7Gp$^-Cia0N1OYEc@s<!W@UrtmF-9@H05kW7Gp$^-Cia0
-N1OYEcDeid,H]gXBP#O)K+DHW4Oo^_%I?J.p@s;u:>9IF"F-6TfF_#!+F!+t:F-:!qWI'FTI?K
-4gOu"b$@ric5L^9/[OpR:-05?:COu%moL]MOP!g9O0056S5Ou"b$@j#9*F!,4R#EhcD1Ljp9+D
-HW;P&+W<P'LPIF!,1Q#a0"[#Ef+D!+TMcOo]uo8Vf*aC6EfpC*78I#Ef+N1OYEWC*7%sGB8pZH
-XgQ,+Ceo&P%'4QP,Vr8F!,3?A7Kh)+DR(=P"_$aI?IP_@raLNEejd[WJCeBCi+*$AWd(W1Ljp9
-+Ceo&P%'4KP,Vr32j/DiL]N;<L`_EkL]WA@L_5FZLa@iiL_bdNL`;.$L_#:lLaRudL^f.DLae-
-'La7c^L]iMVL]`GHLa\&sL`M9YL_tph?'70OP!4[9P!4[%L`hjSOogeh>q^D5BkM+$G`k7R1Qj
-_%P!4[5P!4[&L`hjSOogeh>q^D5BkM+$H'1@S1L$#+LaJ9KL]WATP"_#?P'(%`G@bK$BQSQ`5*
-@]T@ps1`@q]F`CO7^YASGdjFE<U/Ou"b4@rHC!L]ESoL]E53EejaZWJChCCkr.U;MY@:WI$:4P
-!5$b@q0R&BnuhRCm%GI0p6?_@ric,L]W`UL]NY>P"Ur=G@bK$BQS;<BnueQ!Kp*=CbKj>DfTEP
-5'(4PEb1C7Ou%NL8989ZEb0Z^%[&V$CghC,Ec6.E@q0R&@q0SC@Yb;QWJChC9Th2PL^0)8HXh(
-T+EqC2B4uC5L]ET2P&,>RBkM+$H6?^+Ch$sgARfM=!JUnhP%p.>LbY&jP!4[VP%odSOpR9ZCgh
-C,Ec6/X!/L`5s,r/#H$tiT06_Fk+DbJ-FE2;DL]ET2LbY'/CghC,Ec6/X!Kp*=!Ko6KE]5+bAS
-GdjFErZBP"UsSG@bK$BQSMB@ps1`@q]F`CQ\^BE\S\\ASGdjFEo!LL]ilWL]`g>P"UsSOo^:D@
-?PAg3%oJr16Oha1Qj_R0p5Ft5):qVC5;qS$'G[4@<6O2Dg.!=L]`J5P)#3G@raLNG@bK$BQSKT
-!0U!<Cj0H)B4uC3+Cehr@q01`@r%5.GB,D\G@bK$BQSJAEejj]Ckr1VWKKo;Cm"gCE\\b]ASGd
-jFEepKL]ilWL]Wa=P"UsSOo^:D@?PAg3/B;P;Na5"0p6:-!g3kQ$Z'6mFE2;DL]iM9M#WWnP'L
-PIF!+t&F-:!g#a20C#Ehc:!0TNmOo]uo8Vf*aC1Cap+Ceo&P%'4JP,X6>M#WWnP'AX!@<?U&Ec
-,q@>9I.1#Ve%k1,1L>16)Vq2)-g@0f(PE#Ve.k0etI>16)Vq2)-j@1,:SE#Ve.k1,1O>16)Vp1
-,L^@0f(SF#Vn1l1,1O>0ocMo1,La@1,:VF#Vn+l1,1O>0ocMo2)-g@1,:VF#Ve1k1,1R>16)Vp
-1G^a@1,:VF#Vn4l1,1R>0ocMo1G^d@1GLYF#Ve%k0etL>16)Vq1,La@1GLVE#Ve%k1,1R>16)V
-q2)-g@1GLVE#Ve.k0etO>16)Vq1G^a@1GLVE#Ve(k0etO>16)Vq0f:[@1GLVE#Ve4l1,1L>0oc
-Mo1c$mA0f(PE#Ve(l1,1L>0ocMo2)6mA0f(PE#Ve1l1,1O>0ocMo1GggA0f(PE#Ve+l1,1O>0o
-cMo0fCaA0f(PE#Ve4l0etL>0ocMo2DHsA1GLVE#Ve.l0etL>0ocMo1c$mA1GLVE#Ve(l0etL>0
-ocMo1,UgA1GLVE#Ve1l0etO>0ocMo1GggA1GLVE#Ve%l0etO>0ocMo0ekI=0f(\I#W"1i1GLU?
-1QD_u0ekI=0f(PE#Vn+h1,:R?1l_hu0ekF=0f(SF#Vn+h1GLX?1l_hu0ekI=1,:VF#Ve%g0f(O
-?23%qu0ekC=0f(VG#W4=k0f(O?0ocMo0ekF=1,:_I#W"1i1,:U?1QD_u0ekF=1,:SE#Ve%g1GL
-[?23%qu0ekI=1GL\G#W4=k1GL[?0ocMp0ekC=1,:\H#W+7j0f(R?16)Vq0ekF=1GL_H#W+7j1,
-:X?16)Vp0ekC=1GLbI#W"1i0f(U?1QD_u0ekC=1GLVE#Ve(h1GLU?1l_ht1,1R>0f(SF#Vn+i1
-GLU?1QD_t0etO>0f(PE#Vn.i1,:R?1QD_t1,1O>0f(PE#Ve%h1,:R?1l_hs1,1R>1,:YG#W+:k
-1GLX?0ocMo0etO>1,:\H#W"1j1GLX?16)Vp1,1L>0f(YH#W"4j0f(O?16)Vp1,1O>1,:\H#W"4
-j1,:U?16)Vp1,1R>1GL_H#W"4j1GL[?16)Vq0etO>1GL\G#W+7k1GL[?0ocMp1,1L>1,:YG#W+
-:k0f(R?0ocMo0etI>1,:\H#Vn.i1,:X?1QD_t1,1O>1GLVE#Ve%h1,:X?1l_ht0etL>1GLYF#V
-e(h0f(U?1l_ht1,1L>1GLYF#Vn+i0f(U?1QD_t0etI>1GLVE#Ve+i1GLU?1QD_s1GL[?0f(PE#
-Vn.j1GLU?16)Vp0f(U?0f(VG#W"1k1GLU?0ocMp1GLX?0f(SF#Ve(i1,:R?1QD_r1GL[?1,:VF
-#Ve(i1GLX?1QD_s1,:X?1,:SE#Vn+j1GLX?16)Vp1GLU?0f(VG#W"7k0f(O?0ocMo1GLX?1,:Y
-G#W"7k1,:U?0ocMo0f(O?0f(VG#Ve+i1GL[?1QD_s1GL[?1GLVE#Ve%i1,:U?1QD_r1,:X?1GL
-YF#Ve%i1GL[?1QD_s0f(U?1GLVE#Vn1j0f(R?16)Vp1,:R?1,:YG#Vn1j1,:X?16)Vp1,:U?1G
-L\G#W"4k1,:X?0ocMp0f(R?1GLYF#Ve+i0f(U?1QD_s1GLU?1GLVE#Vn.j0f(U?16)Vp0f(O?1
-GL\G#W"1k0f(U?0ocMo1bgd@0f(SF#Vn1k1GLU?0ocMo1,C^@0f(SF#Vn+k1GLU?0ocMp1bga@
-0f(PE#Ve+j1,:R?16)Vq1bgd@1,:SE#Ve+j1GLX?16)Vp0f1X@0f(SF#Vn.k1GLX?0ocMo0f1[
-@1,:VF#Ve.j0f(O?16)Vp1bga@1,:VF#Ve(j0f(O?16)Vp1bgd@1GLYF#Ve(j1,:U?16)Vq1GU
-a@1GLVE#Ve(j1GL[?16)Vq0f1[@1GLVE#Vn4k0f(R?0ocMo1GU[@1,:VF#Vn4k1,:X?0ocMo1G
-U^@1GLYF#Ve%j0f(R?16)Vq1,C[@1GLVE#Ve%j1,:X?16)Vp1bg^@1GLYF#Vn1k0f(U?0ocMo1
-,CX@1GLYF#Vn+k0f(U?0ocMo2)-mA0f(PE#Ve+k1GLU?0ocMo1bpgA0f(PE#Ve.k1GLX?0ocMo
-1,LaA0f(PE#Ve(k1GLX?0ocMo2)-gA0f(PE#Ve1k1,:U?0ocMo1G^aA0f(PE#Ve1k1GL[?0ocM
-o1G^dA1,:SE#Ve%k0f(O?0ocMo1G^gA1GLVE#Ve%k1,:U?0ocMo1bpdA1,:SE#Ve.k1,:X?0oc
-Mo1,L^A1,:SE#Ve(k1,:X?0ocMo2)-gA1GLVE#Ve+k0f(U?0ocMo0f:[A1GLVE#Ve%g1bg^@1l
-_ht0ekL>0f(SF#Vn+h1GU[@1QD_t0ekI>0f(PE#Vn+h1bga@1QD_t0ekL>1,:SE#Ve%g1,CX@1
-l_ht0ekF>0f(SF#Ve%g1GU^@1l_ht0ekI>1,:VF#Ve%g1bgd@1l_ht0ekL>1GLYF#Vn+h0f1U@
-1QD_t0ekC>0f(PE#Vn+h1,C[@1QD_t0ekF>1,:SE#Vn+h1GUa@1QD_t0ekI>1GLVE#Ve%g0f1X
-@1l_ht0ekC>1,:VF#Ve%g1,C^@1l_ht0ekF>1GLYF#Vn+h0f1[@1QD_t0ekC>1GLVE#Ve(h1bg
-^@1QD_s1,1U?0f(PE#Vn+i1bg^@16)Vq1,1R?0f(SF#Ve%h1GU[@1QD_r1,1U?1,:VF#Ve%h1b
-ga@1QD_s0etR?1,:SE#Ve(h1,CX@1QD_s1,1O?0f(PE#Ve(h1GU^@1QD_s1,1R?1,:SE#Ve(h1
-bgd@1QD_s1,1U?1GLVE#Vn+i1bgd@16)Vq1,1L?0f(SF#Ve%h0f1U@1QD_r1,1O?1,:VF#Ve%h
-1,C[@1QD_r1,1R?1GLYF#Ve%h1GUa@1QD_s0etO?1GLVE#Ve(h0f1X@1QD_s1,1L?1,:SE#Ve(
-h1,C^@1QD_s1,1O?1GLVE#Vn+i1,C^@16)Vq1,1L?1GLYF#Ve%h0f1[@1QD_s0etI?1GLVE#Ve
-+i1bg^@16)Vq1,:[@0f(PE#Ve%i1bg^@16)Vq1GL[@0f(PE#Ve(i1GU[@16)Vq1GL^@1,:SE#V
-e(i1bga@16)Vq0f(X@1,:SE#Ve+i1,CX@16)Vp1GL[@1,:VF#Ve%i1,CX@16)Vp1GL^@1GLYF#
-Ve%i1GU^@16)Vq1,:[@1GLVE#Ve%i1bgd@16)Vq1GLU@0f(PE#Ve(i0f1U@16)Vq1GLX@1,:SE
-#Ve(i1,C[@16)Vq1GL[@1GLVE#Ve(i1GUa@16)Vq0f(U@1GLVE#Ve+i0f1X@16)Vp1GLX@1GLY
-F#Ve%i0f1X@16)Vq1,:U@1GLVE#Ve%i1,C^@16)Vq1GLU@1GLVE#Ve(i0f1[@16)Vq0f(O@1GL
-VE#Ve.j1bg^@0ocMo1,CaA0f(PE#Ve+j1GU[@0ocMo1GUdA1,:SE#Ve%j1GU[@0ocMo1bgaA0f
-(PE#Ve.j1GU^@0ocMo1,C[A0f(PE#Ve.j1bgd@0ocMo1,C^A1,:SE#Ve(j1bgd@0ocMo1GU[A0
-f(PE#Ve+j1,C[@0ocMo0f1UA0f(PE#Ve+j1GUa@0ocMo0f1XA1,:SE#Ve%j1GUa@0ocMo1bg^A
-1,:SE#Ve.j1,C^@0ocMo1,CXA1,:SE#Ve(j1,C^@0ocMo1GU[A1GLVE#Ve%j0f1[@0ocMo0ekO
-?0f(VG#W"1i2)-gA0ocMp0ekL?0f(SF#Vn+h2)-jA16)Vp0ekI?0f(VG#W"1i1G^aA0ocMo0ek
-L?1,:YG#W"1i1bpgA0ocMo0ekO?1GL\G#W"1i2)-mA0ocMp0ekF?0f(SF#Vn+h1G^dA16)Vq0e
-kL?1GLYF#Ve%g0f:[A1QD_s0ekC?0f(PE#Ve%g1,LaA1QD_s0ekF?1,:SE#Ve%g1G^gA1QD_s0
-ekI?1GLVE#Vn+h0f:^A16)Vq0ekF?1GLYF#Ve(h2)-gA16)Vq0etU@0f(PE#Vn.i1bpdA0ocMo
-0etR@0f(SF#Vn.i2)-jA0ocMo0etU@1,:VF#Ve(h1G^aA16)Vp1,1U@1,:VF#Ve(h2)-mA16)V
-q0etU@1GLVE#Vn.i1,L^A0ocMo0etL@0f(SF#Vn.i1G^dA0ocMo0etO@1,:VF#Vn.i1bpjA0oc
-Mo0etR@1GLYF#Ve(h0f:[A16)Vp1,1O@1,:VF#Ve(h1G^gA16)Vq0etO@1GLVE#Vn.i0f:^A0o
-cMo0etI@1,:VF#Vn.i1,LdA0ocMo0etL@1GLYF#Ve+i2)-gA0ocMo1,:[A0f(PE#Ve(i2)-jA0
-ocMo1GL[A0f(PE#Ve+i1bpgA0ocMo0f(UA0f(PE#Ve+i2)-mA0ocMo0f(XA1,:SE#Ve(i1,L^A
-0ocMo1,:XA1,:SE#Ve(i1bpjA0ocMo1GLUA0f(PE#Ve+i1,LaA0ocMo0f(OA0f(PE#Ve+i1G^g
-A0ocMo0f(RA1,:SE#Ve%i1G^gA0ocMo1,:RA1,:SE#Ve(i1,LdA0ocMo0ekR@0f(SF#Vn+h2)6
-mB0ocMp0ekR@1,:SE#Ve%g1c$jB16)Vp0ekO@1,:VF#Ve%g2DI!B16)Vq0ekI@0f(PE#Vn+h1c
-$mB0ocMp0ekO@1GLVE#Ve%g1,UdB16)Vp0ekI@1,:VF#Ve%g1c$pB16)Vq0ekC@0f(PE#Vn+h1
-,UgB0ocMp0ekI@1GLVE#Ve(h2DHpB0ocMo0etUA0f(PE#Ve(h1c$jB0ocMo1,1XA1,:SE#Ve(h
-2DI!B0ocMo0etOA0f(PE#Ve%h1c$mB0ocMo0etUA1GLVE#Ve(h1,UdB0ocMo1,1RA1,:SE#Ve(
-h1c$pB0ocMo0etIA0f(PE#Ve%h1,UgB0ocMo0etOA1GLVE#Ve%g0ekF>2NA&!0ekC;1,CbI#W4
-=k0ekF>16)Vq0ekC;1GUhJ#W+7j0ekI>1QD`!0ekC;1GU\F#Ve%g0ekL>2NA&!0ekC;1bghI#W
-4=k0ekL>16)Vr0etI<0f1\H#W4=l0ekC>0ocMo1,1L<1,CeJ#W"4j0ekF>1QD_u1,1L<1,CYF#
-Vn+i0ekF>1l_hu0etI<1,C\G#Vn.i0ekI>1l_hu1,1L<1GU_G#Ve%h0ekI>23%qu0etI<1GUbH
-#W4=l0ekI>0ocMo1,1L<1bgkJ#W"4j0ekL>1QD_u1,1L<1bg_F#Vn+i0ekL>1l_hu0etI<1bgb
-G#Ve(i0ekC>1l_h t1,:R =0f1Y G#Vn+ j0 ekC >1QD_t 0f(O=0f
-1VF#Ve+i0ekF>1l _ht 1GLU= 1,C\G #V n.j 0ek F>1Q
-D_t1,:R=1,CYF#V e%i0e kF >1l_h t0f( O= 1,C \G#Vn 1j0 ekI>1 QD_t
-1GLU=1GU\F#Ve(i 0ekI> 1l_ ht1 ,:R= 1G U_G #Vn+j0 ek I>1QD_ t0f
-(O=1GU\F#Ve+i0e kL>1l _ht 1GL U =1b gbG #Vn .j0ekL >1 QD_t1, :R=
-1bg_F#Ve%i0ekL> 1l_ht 0f( O=1 bg bG #Ve +j0 ekC>1Q D_ s1GU[> 0f1
-VF#Vn.k0ekC>16) Vp0f 1U> 0f 1\ H#W "1l 0ek C>0o
-cMo1bg^>1,C_H#W ":l0 e kF >0 ocM p1G U[>1 ,C\G#
-Ve(j0ekF>1QD_s1 ,CX>1, CYF # Vn+ k0 ekF> 16) Vq1bg^>1GU _G#Ve+j0ekI
->1QD_s1GU[>1GU\ F#Vn.k 0ek I >16) Vp0f 1U> 1GUbH#W"1l 0ekI>0ocMo1
-bg^>1bgeH#W":l0 ekL>0o cMp 1GU[ >1bg bG# Ve(j0ekL>1 QD_s1,CX>1b
-g_F#Vn+k0ekL>16 )Vp1b pd?0 f1YG# Vn1l 0ek C>0ocMo1,L ^?0f1YG#Vn+
-l0ekC>0ocMo2)-g ?1,C\ G#Vn4 l0ekF >0o cMo1G^a?1, C\G#Vn.l0ek
-F>0ocMo0f:[?1,C \G#Vn7l 0ekI>0 ocMo1 bpd ?1GU_G#Vn1 l0ekI>0ocMo
-1,L^?1GU_G#Vn+l0ekI>0ocMo2)-g?1bgbG#Vn4l0ekL>0ocMo1G^a?1bgbG#Vn.l0ekL>0ocM
-o0f:[?1bgbG#Ve1l0ekC>0ocMo1Ggg@0f1VF#Ve%l0ekC>0ocMo2DHp@1,CYF#Ve.l0ekF>0oc
-Mo1,Ud@1,CYF#Ve1l0ekI>0ocMo1Ggg@1GU\F#Ve%l0ekI>0ocMo2DHp@1bg_F#Ve.l0ekL>0o
-cMo1,Ud@1bg_F#Vn+h1,1L?1l_hu0ekF<0f1YG#Ve%g0etI?23%qu0ekC<0f1\H#W4=k0etI?0
-ocMo0ekF<1,CeJ#W"1i1,1O?1QD_u0ekF<1,CYF#Vn+h0etL?1l_hu0ekC<1,C\G#Vn+h1,1R?
-1l_hu0ekF<1GU_G#Ve%g0etO?23%qu0ekC<1GUbH#W4=k0etO?0ocMo0ekF<1bgkJ#W"1i1,1U
-?1QD_u0ekF<1bg_F#Vn+h0etR?1l_hu0ekC<1bgbG#Vn.i1,1L?1QD_t1,1O=0f1VF#Ve%h1,1
-L?1l_ht0etL=0f1YG#Ve(h0etI?1l_ht1,1L=0f1YG#Ve(h1,1O?1l_ht1,1O=1,C\G#Vn+i1,
-1O?1QD_t0etL=1,CYF#Vn.i0etL?1QD_t1,1L=1,CYF#Ve%h0etL?1l_hs1,1O=1GUbH#W+:k1
-,1R?0ocMo0etL=1GUeI#W"1j1,1R?16)Vp1,1L=1GUeI#W"4j0etO?16)Vp1,1O=1bghI#W"4j
-1,1U?16)Vq0etL=1bgeH#W+7k1,1U?0ocMp1,1L=1bgeH#W+:k0etR?0ocMo0etI=1bghI#W"1
-j0etR?16)Vq1GLX>0f1YG#Ve(i1,1L?1QD_s1,:U>0f1VF#Vn+j1,1L?16)Vp1GLU>0f1\H#W"
-7k0etI?0ocMo1GLX>1,C_H#W"7k1,1O?0ocMo0f(O>0f1\H#Vn.j1,1O?16)Vp0f(R>1,C_H#W
-"1k1,1O?0ocMp1GLU>1,C\G#Ve(i0etL?1QD_r1GLX>1GU_G#Ve(i1,1R?1QD_s1,:U>1GU\F#
-Vn+j1,1R?16)Vp1GLU>1GUbH#W"7k0etO?0ocMo1GLX>1bgeH#W"7k1,1U?0ocMo0f(O>1GUbH
-#Vn.j1,1U?16)Vp0f(R>1bgeH#W"1k1,1U?0ocMp1GLU>1bgbG#Ve(i0etR?1QD_s1,:R>1bg_
-F#Vn+j0etR?16)Vq1bga?0f1VF#Ve+j1,1L?16)Vq1,C[?0f1VF#Ve%j1,1L?16)Vp1bg^?0f1
-YG#Ve.j1,1O?16)Vp1,CX?0f1YG#Vn1k1,1O?0ocMo1,C[?1,C\G#Vn+k1,1O?0ocMp1bg^?1,
-CYF#Ve+j0etL?16)Vq1bga?1GU\F#Ve+j1,1R?16)Vp0f1U?1,C\G#Vn.k1,1R?0ocMo0f1X?1
-GU_G#Ve.j0etO?16)Vp1bga?1bgbG#Ve(j0etO?16)Vq1GU^?1bg_F#Ve(j1,1U?16)Vq0f1X?
-1bg_F#Vn4k0etR?0ocMo1GU[?1bgbG#Vn.k0etR?0ocMo0f1U?1bgbG#Ve.k1,1L?0ocMo1,La
-@0f1VF#Ve1k0etI?0ocMo2)-j@1,CYF#Ve+k0etI?0ocMo1G^d@1,CYF#Ve%k0etI?0ocMo0f:
-^@1,CYF#Ve.k0etL?0ocMo1bpg@1GU\F#Ve(k0etL?0ocMo1,La@1GU\F#Ve1k0etO?0ocMo2)
--j@1bg_F#Ve+k0etO?0ocMo1G^d@1bg_F#Ve%k0etO?0ocMo0f:^@1bg_F#Ve.k0etR?0ocMo1
-,L^@1bg_F#Vn+h1GLU@1QD_t0ekI=0f1VF#Ve%g1,:R@1l_ht0ekF=0f1YG#Ve%g1GLX@1l_ht
-0ekI=1,C\G#Vn+h0f(O@1QD_t0ekC=0f1VF#Vn+h1,:U@1QD_t0ekF=1,CYF#Vn+h1GL[@1QD_
-t0ekI=1GU\F#Ve%g0f(R@1l_ht0ekC=1,C\G#Ve%g1,:X@1l_ht0ekF=1GU_G#Ve%g1GL^@1l_
-ht0ekI=1bgbG#Vn+h0f(U@1QD_t0ekC=1GU\F#Vn+h1,:[@1QD_t0ekF=1bg_F#Ve%g0f(X@1l
-_ht0ekC=1bgbG#Vn.i1GLU@16)Vp0etO>0f1\H#W"1j1GLU@0ocMo1,1O>0f1\H#W"4j1,:R@0
-ocMo1,1R>1,C_H#W"4j1GLX@0ocMp0etO>1,C\G#Vn.i0f(O@16)Vp0etI>0f1\H#Vn.i1,:U@
-16)Vp0etL>1,C_H#Vn.i1GL[@16)Vp0etO>1GUbH#W"1j1GL[@0ocMo1,1L>1,C_H#W"4j0f(R
-@0ocMo1,1O>1GUbH#W"4j1,:X@0ocMo1,1R>1bgeH#W"4j1GL^@0ocMp0etO>1bgbG#Vn.i0f(
-U@16)Vp0etI>1GUbH#Vn.i1,:[@16)Vp0etL>1bgeH#W"1j1,:[@0ocMo1,1L>1bgeH#W"4j0f
-(X@0ocMp0etI>1bgbG#Vn1j1GLU@0ocMo1,:X?0f1YG#Vn+j1GLU@0ocMo1GLX?0f1YG#Ve+i1
-GLX@16)Vp0f(R?0f1YG#Vn.j1GLX@0ocMo0f(U?1,C\G#Vn1j0f(O@0ocMo1,:R?0f1YG#Vn1j
-1,:U@0ocMo1,:U?1,C\G#Vn1j1GL[@0ocMo1,:X?1GU_G#Vn+j1GL[@0ocMo1GLU?1,C\G#Ve+
-i1,:X@16)Vp0f(O?1,C\G#Ve+i1GL^@16)Vp0f(R?1GU_G#Vn.j1GL^@0ocMo0f(U?1bgbG#Vn
-1j0f(U@0ocMo1,:R?1GU_G#Vn1j1,:[@0ocMo1,:U?1bgbG#Vn+j1,:[@0ocMo1GLU?1bgbG#V
-n.j0f(X@0ocMo0f(O?1bgbG#Ve+j1GLU@0ocMo0f1[@0f1VF#Ve.j1,:R@0ocMo1bgd@1,CYF#
-Ve(j1,:R@0ocMo1,C^@1,CYF#Ve+j0f(O@0ocMo1GU^@1,CYF#Ve%j0f(O@0ocMo1GUa@1GU\F
-#Ve%j1,:U@0ocMo0f1[@1GU\F#Ve.j0f(R@0ocMo1bga@1GU\F#Ve(j0f(R@0ocMo1bgd@1bg_
-F#Ve(j1,:X@0ocMo1,C^@1bg_F#Ve+j0f(U@0ocMo1GU^@1bg_F#Ve%j0f(U@0ocMo0f1X@1bg
-_F#Ve.j0f(X@0ocMo1,CX@1bg_F#Vn+h1bg^A16)Vp0ekI>0f1\H#W"1i1GU[A0ocMo0ekL>1,
-C_H#W"1i1bgaA0ocMp0ekF>0f1YG#Vn+h1GU^A16)Vq0ekL>1GU_G#Ve%g0f1UA1QD_s0ekC>0
-f1VF#Ve%g1,C[A1QD_s0ekF>1,CYF#Ve%g1GUaA1QD_s0ekI>1GU\F#Ve%g1bggA1QD_s0ekL>
-1bg_F#Vn+h0f1XA16)Vq0ekF>1GU_G#Vn+h1GUdA16)Vp0ekC>1GUbH#W"1i0f1[A0ocMo0ekF
->1bgeH#W"1i1,CaA0ocMp1,1U?0f1VF#Ve%h1bg^A16)Vp1,1R?0f1YG#Ve(h1bgaA16)Vq0et
-R?1,CYF#Vn.i1,CXA0ocMo0etL?0f1YG#Vn.i1GU^A0ocMo0etO?1,C\G#Vn.i1bgdA0ocMo0e
-tR?1GU_G#Ve(h0f1UA16)Vp1,1O?1,C\G#Ve(h1GUaA16)Vp1,1U?1bgbG#Vn+i1bggA0ocMp1
-,1L?1,CYF#Ve%h0f1XA16)Vq1,1O?1GU\F#Ve%h1,C^A16)Vq1,1R?1bg_F#Ve%h1GUdA16)Vp
-1,1L?1GU_G#Ve(h1,CaA16)Vq0etL?1bg_F#Ve(i1bg^A0ocMo1GL[@0f1VF#Ve+i1bgaA0ocM
-o0f(U@0f1VF#Ve%i1bgaA0ocMo1,:U@0f1VF#Ve(i1GU^A0ocMo1,:[@1GU\F#Ve+i0f1UA0oc
-Mo1GLX@1,CYF#Ve%i0f1UA0ocMo1GL[@1GU\F#Ve%i1,C[A0ocMo1GL^@1bg_F#Ve%i1GUaA0o
-cMo0f(X@1bg_F#Ve(i0f1XA0ocMo1,:U@1GU\F#Ve(i1GUdA0ocMo1GLU@1GU\F#Ve+i1,CaA0
-ocMo0f(O@1GU\F#Ve%i1,CaA0ocMp0ekO?0f1VF#Ve%g1bpdB16)Vp0ekO?1,C\G#Vn+h1G^aB
-0ocMp0ekL?1,CYF#Vn+h2)-mB0ocMo0ekF?0f1YG#Ve%g1G^dB16)Vp0ekL?1GU_G#Ve%g2)-p
-B16)Vq0ekC?0f1VF#Vn+h1,LaB0ocMp0ekI?1GU\F#Vn+h1bpmB0ocMo0ekC?1,C\G#Ve%g1,L
-dB16)Vp0ekI?1bgbG#Ve%h2)-gB0ocMo1,1U@0f1VF#Ve(h2)-jB0ocMo0etO@0f1VF#Ve%h1b
-pgB0ocMo0etU@1GU\F#Ve(h1,L^B0ocMo1,1R@1,CYF#Ve(h1bpjB0ocMo1,1X@1bg_F#Ve%h0
-f:[B0ocMo0etL@1,CYF#Ve%h1G^gB0ocMo0etR@1bg_F#Ve(h0f:^B0ocMo1,1O@1GU\F#Ve(h
-1G^jB0ocMo0ekO@0f1VF#Ve%g2DHsC0ocMo0ekI@0f1VF#Ve%g1c$mC0ocMo0ekO@1GU\F#Ve%
-g2DI$C0ocMo0ekC@0f1VF#Ve%g1,UgC0ocMo0ekI@1GU\F#Ve%g1c$sC0ocMp0ekC;1,LhJ#W+
-7j0ekF?16)Vp0ekC;1G^nK#W"1i0ekI?1QD_u0ekC;1G^bG#Vn+h0ekL?1l_hu0ekC;1bphH#V
-e%g0ekO?23%qu0ekC;2)-nI#W4=k0ekO?0ocMp0etI<0f:bI#W+7k0ekC?0ocMp1,1L<1,LeI#
-W+:k0ekF?0ocMo0etI<1,LhJ#W"1j0ekF?16)Vp1,1L<1G^kJ#W"4j0ekI?16)Vq0etI<1G^hI
-#W+7k0ekI?0ocMp1,1L<1bpkI#W+:k0ekL?0ocMo0etI<1bpnJ#W"1j0ekL?16)Vp1,1L<2)-q
-J#W"4j0ekO?16)Vq0etI<2)-nI#W+7k0ekO?0ocMp1,:R=0f:_H#Ve%i0ekC?1QD_s0f(O=0f:
-\G#Vn1j0ekF?16)Vp1,:R=1,LeI#W"4k0ekF?0ocMp0f(O=1,LbH#Ve+i0ekI?1QD_s1GLU=1G
-^bG#Vn.j0ekI?16)Vp0f(O=1G^hI#W"1k0ekI?0ocMp1GLU=1bphH#Ve(i0ekL?1QD_s1,:R=1
-bpeG#Vn+j0ekL?16)Vp1GLU=2)-nI#W"7k0ekO?0ocMp1,:R=2)-kH#Ve%i0ekO?1QD_s0f(O=
-2)-hG#Vn1k0ekC?0ocMo1,CX>0f:_H#Vn+k0ekC?0ocMp1bg^>1,L_G#Ve+j0ekF?16)Vq1,CX
->1,L_G#Ve%j0ekF?16)Vp1bg^>1G^eH#Vn1k0ekI?0ocMo1,CX>1G^eH#Vn+k0ekI?0ocMp1bg
-^>1bpeG#Ve+j0ekL?16)Vq1,CX>1bpeG#Ve%j0ekL?16)Vp1bg^>2)-kH#Vn1k0ekO?0ocMo1,
-CX>2)-kH#Vn+k0ekO?0ocMo1G^a?0f:\G#Ve%k0ekC?0ocMo1bpd?1,L_G#Ve(k0ekF?0ocMo2
-)-g?1G^bG#Ve+k0ekI?0ocMo0f:[?1G^bG#Ve.k0ekL?0ocMo1,L^?1bpeG#Ve1k0ekO?0ocMo
-1G^a?2)-hG#Ve%k0ekO?0ocMq0ekF<0f:_H#Vn+h0etI@1QD_t0ekC<0f:\G#Vn+h1,1O@1QD_
-t0ekF<1,L_G#Ve%g0etL@1l_ht0ekC<1,LbH#Ve%g1,1R@1l_ht0ekF<1G^eH#Vn+h0etO@1QD
-_t0ekC<1G^bG#Vn+h1,1U@1QD_t0ekF<1bpeG#Ve%g0etR@1l_ht0ekC<1bphH#Ve%g1,1X@1l
-_ht0ekF<2)-kH#Vn+h0etU@1QD_t0ekC<2)-hG#Ve(h1,1L@1QD_s1,1O=0f:\G#Vn+i1,1L@1
-6)Vq1,1L=0f:_H#Ve%h0etI@1QD_r1,1O=1,LbH#Ve%h1,1O@1QD_s0etL=1,L_G#Ve(h0etL@
-1QD_s1,1L=1,L_G#Ve(h1,1R@1QD_s1,1O=1G^bG#Vn+i1,1R@16)Vq1,1L=1G^eH#Ve%h0etO
-@1QD_r1,1O=1bphH#Ve%h1,1U@1QD_s0etL=1bpeG#Ve(h0etR@1QD_s1,1L=1bpeG#Ve(h1,1
-X@1QD_s1,1O=2)-hG#Vn+i1,1X@16)Vq1,1L=2)-kH#Ve%h0etU@1QD_s0etI=2)-hG#Ve+i1,
-1L@16)Vq1,:U>0f:\G#Ve%i1,1L@16)Vq1GLU>0f:\G#Ve(i0etI@16)Vq1GLX>1,L_G#Ve(i1
-,1O@16)Vq0f(R>1,L_G#Ve+i0etL@16)Vp1GLX>1G^eH#Ve%i0etL@16)Vq1,:U>1G^bG#Ve%i
-1,1R@16)Vq1GLU>1G^bG#Ve(i0etO@16)Vq1GLX>1bpeG#Ve(i1,1U@16)Vq0f(R>1bpeG#Ve+
-i0etR@16)Vp1GLX>2)-kH#Ve%i0etR@16)Vq1,:U>2)-hG#Ve%i1,1X@16)Vq1GLU>2)-hG#Ve
-(i0etU@16)Vq0f(O>2)-hG#Ve.j1,1L@0ocMo1,C[?0f:\G#Ve+j0etI@0ocMo1GU^?1,L_G#V
-e%j0etI@0ocMo0f1X?1,L_G#Ve.j0etL@0ocMo1bga?1G^bG#Ve(j0etL@0ocMo1,C[?1G^bG#
-Ve+j0etO@0ocMo1GU^?1bpeG#Ve%j0etO@0ocMo0f1X?1bpeG#Ve.j0etR@0ocMo1bga?2)-hG
-#Ve(j0etR@0ocMo1,C[?2)-hG#Ve+j0etU@0ocMo0f1U?2)-hG#Ve%g1GLUA1QD_s0ekI=0f:\
-G#Vn+h1,:RA16)Vq0ekI=1,LbH#Ve%g0f(OA1QD_s0ekC=0f:\G#Ve%g1,:UA1QD_s0ekF=1,L
-_G#Ve%g1GL[A1QD_s0ekI=1G^bG#Vn+h0f(RA16)Vq0ekF=1G^eH#Vn+h1GL^A16)Vp0ekC=1G
-^hI#W"1i0f(UA0ocMo0ekF=1bpkI#W"1i1,:[A0ocMo0ekI=2)-nI#W"1i1GLaA0ocMp0ekC=1
-bphH#Vn+h1,:^A16)Vp1,1R>0f:_H#Vn+i1GLUA0ocMp1,1O>0f:\G#Ve%h1,:RA16)Vq1,1R>
-1,L_G#Ve%h1GLXA16)Vp1,1L>0f:_H#Ve(h1,:UA16)Vp1,1R>1G^eH#Vn+i1GL[A0ocMp1,1L
->1,L_G#Ve%h0f(RA16)Vq1,1O>1G^bG#Ve%h1,:XA16)Vq1,1R>1bpeG#Ve%h1GL^A16)Vp1,1
-L>1G^eH#Ve(h1,:[A16)Vp1,1R>2)-kH#Vn+i1GLaA0ocMp1,1L>1bpeG#Ve%h0f(XA16)Vq1,
-1O>2)-hG#Ve%h1,:^A16)Vp1GL[?0f:\G#Ve%i1GLUA0ocMo1,:U?0f:\G#Ve(i1GLXA0ocMo1
-GLU?0f:\G#Ve+i1,:UA0ocMo0f(O?0f:\G#Ve+i1GL[A0ocMo0f(R?1,L_G#Ve%i1GL[A0ocMo
-1,:R?1,L_G#Ve(i1,:XA0ocMo1,:X?1bpeG#Ve+i0f(UA0ocMo1GLX?1bpeG#Ve%i0f(UA0ocM
-o1GL[?2)-hG#Ve%i1,:[A0ocMo0f(U?2)-hG#Ve(i0f(XA0ocMo1,:U?2)-hG#Ve%g1bg^B16)
-Vq0ekI>0f:\G#Vn+h1bgaB0ocMo0ekF>0f:_H#Ve%g1GU^B16)Vp0ekL>1G^eH#Vn+h0f1UB0o
-cMp0ekF>1,L_G#Vn+h1GUaB0ocMp0ekL>1bpeG#Ve%g0f1XB16)Vp0ekF>1G^eH#Ve%g1GUdB1
-6)Vp0ekL>2)-kH#Vn+h0f1[B0ocMp0ekF>1bpeG#Vn+h1GUgB0ocMo1,1U?0f:\G#Ve%h1GU[B
-0ocMo0etR?1,L_G#Ve(h1,CXB0ocMo1,1R?1,L_G#Ve(h1bgdB0ocMo0etI?0f:\G#Ve%h1,C[
-B0ocMo0etO?1G^bG#Ve%h1bggB0ocMo1,1L?1,L_G#Ve(h1,C^B0ocMo1,1R?1bpeG#Ve(h1bg
-jB0ocMo0etI?1G^bG#Ve%h1,CaB0ocMo0etO?2)-hG#Ve%g2)-gC0ocMo0ekI?0f:\G#Ve%g1b
-pgC0ocMo0ekO?1G^bG#Ve%g0f:[C0ocMo0ekF?1,L_G#Ve%g1G^gC0ocMo0ekL?1bpeG#Ve%g2
-)-sC0ocMo0ekC;1,UnK#W"1i0ekF@16)Vq0ekC;1GgnJ#W+7j0ekI@0ocMo0ekC;1c$tK#W"1i
-0ekL@16)Vq0ekC;2)6tJ#W+7j0ekO@0ocMo0ekC;2DI%K#W"1i0ekR@16)Vr0etI<0fCbH#Ve(
-h0ekF@1QD_s1,1L<1,UeH#Vn+i0ekF@16)Vq1,1L<1GgkI#Ve%h0ekI@1QD_s0etI<1GghH#Ve
-(h0ekL@1QD_s1,1L<1c$kH#Vn+i0ekL@16)Vq1,1L<2)6qI#Ve%h0ekO@1QD_s0etI<2)6nH#V
-e(h0ekR@1QD_s1,1L<2DHqH#Vn+i0ekR@16)Vp1,:R=0fCeI#Vn+j0ekC@0ocMo1GLU=1,UhI#
-Vn.j0ekF@0ocMo0f(O=1,UhI#Vn1j0ekI@0ocMo1,:R=1GgkI#Vn+j0ekI@0ocMo1GLU=1c$nI
-#Vn.j0ekL@0ocMo0f(O=1c$nI#Vn1j0ekO@0ocMo1,:R=2)6qI#Vn+j0ekO@0ocMo1GLU=2DHt
-I#Vn.j0ekR@0ocMo0f(O=2DHtI#Ve+j0ekC@0ocMo0f1U>0fCbH#Ve.j0ekF@0ocMo1,CX>1,U
-eH#Ve+j0ekI@0ocMo0f1U>1GghH#Ve.j0ekL@0ocMo1,CX>1c$kH#Ve+j0ekO@0ocMo0f1U>2)
-6nH#Ve.j0ekR@0ocMo1,CX>2DHqH#Vn+h1,1LA16)Vp0ekC<0fChJ#W"1i0etIA0ocMo0ekF<1
-,UkJ#W"1i1,1OA0ocMp0ekC<1,UhI#Vn+h1,1RA16)Vp0ekC<1GgnJ#W"1i0etOA0ocMo0ekF<
-1c$qJ#W"1i1,1UA0ocMp0ekC<1c$nI#Vn+h1,1XA16)Vp0ekC<2)6tJ#W"1i0etUA0ocMo0ekF
-<2DI"J#W"1i1,1[A0ocMp1,1O=0fCbH#Ve%h1,1LA16)Vp1,1L=0fCeI#Ve(h1,1OA16)Vq0et
-L=1,UeH#Vn.i0etLA0ocMo0etI=1,UhI#Vn.i1,1RA0ocMo0etL=1GgkI#Ve(h0etOA16)Vp1,
-1O=1c$nI#Vn+i1,1UA0ocMp1,1L=1c$kH#Ve%h0etRA16)Vq1,1O=2)6nH#Ve%h1,1XA16)Vp1
-,1L=2)6qI#Ve(h1,1[A16)Vq0etL=2DHqH#Ve(i1,1LA0ocMo1GLU>0fCbH#Ve+i1,1OA0ocMo
-0f(O>0fCbH#Ve%i1,1OA0ocMq1,1O=0ekPG#W4@l1,1L<1QD_r0etL=0ekSH#W+7k1,1L<1l_i
-"0etL=0ekGD#Vn.i0etI<2NA&"1,1L=0ekMF#W"1j0etI<23%r"0etI=0ekJE#Ve+i1,1L<2NA
-&!1GLX>0ekMF#Vn.j1,1L<23%r!1,:U>0ekJE#Ve%i1,1L<2NA&!0f(R>0ekMF#W4=m1,1L<16
-)Vq1GLU>0ekPG#W+=l0etI<1QD_q1,:R>0ekSH#W"4k0etI<1l_i!1,:R>0ekGD#Vn+j0etI<2
-3%r!0f(O>0ekJE#W=Cn0etI<0ocMo1bga?0ekPG#W":l1,1L<1QD_r1GU^?0ekMF#W+=m1,1L<
-16)Vp1,C[?0ekPG#W"4l1,1L<1QD_u1,C[?0ekDC#Vn+k1,1L<1l_hu0f1X?0ekGD#Vn4k0etI
-<1l_hr1GU[?0ekPG#W"7l0etI<1QD_r1,CX?0ekMF#W+:m0etI<16)Vp0f1U?0ekPG#W"1l0et
-I<1QD_u0f1U?0ekDC#Ve1k1,1L<1l_hs1bpg@0ekJE#Ve+k1,1L<1l_ht1G^d@0ekGD#Vn.l1,
-1L<1QD_t1,La@0ekDC#Ve%k1,1L<1l_ht0f:^@0ekGD#Vn7l0etI<1QD_q1bpd@0ekMF#W":m0
-etI<16)Vq1G^a@0ekJE#W+=n0etI<0ocMo1,L^@0ekMF#W"4m0etI<16)Vq0f:[@0ekJE#W+7n
-0etI<0ocMo2DHsA0ekJE#Vn7m1,1L<16)Vp1c$mA0ekJE#W":n1,1L<0ocMp1GgjA0ekGD#Ve(
-l1,1L<1QD_s1,Ug A0ekD C#Ve1 l0etI <1 QD_ r1c$jA 0ekGD#V
-e+l0etI<1QD_s1G ggA 0ekDC #Vn.m 0e tI< 16) Vp0f
-CaA0ekJE#W"1n0e tI<0o cM q0ekI =0ek PG #W4 =k1GL U=1 QD_r0 ekF=
-0ekSH#W+7j1,:R= 1l_i" 0ek F=0 ekGD #W "1i 0f(O=2 3% r"0ekC =0e
-kJE#Ve(h1GLU=2N A&!1, 1R> 0ek M F#W 4@l 1GL U=16)V q0 etO>0e kPG
-#W+7k1GLU=1QD`! 0etO> 0ek DC# Vn .i 1,: R=2 3%r!1, 1O >0ekJE #Ve
- %h1,:R=2NA&!0e tL>0 ekM F# W4 =l1 ,:R =16 )Vp1
-,1L>0ekSH#W"4j0 f(O= 1 l_ i! 1,1 L>0 ekGD #Vn+i
-0f(O=23%r!0etI> 0ekJE# W=C m 0f( O= 0ocM o1G L[?0ekPG#W "7k1GLU=1QD
-_r1,:X?0ekMF#W+ :l1GLU =16 ) Vp0f (U?0 ekP G#W"1k1GLU =1QD_u0f(U?
-0ekDC#Vn1j1,:R= 1l_hu1 GLX ?0ek GD#V e(i 1,:R=23%qu 1,:U?0ekJE#
-W4@m1,:R=0ocMp0 f(R?0 ekMF #W+7l 1,:R =16 )Vp1GLU?0e kPG#W"7k0f(
-O=1QD_r1,:R?0ek MF#W+ :l0f( O=16) Vp0 f(O?0ekPG# W"1k0f(O=1Q
-D_u0f(O?0ekDC#V e.j1GLU =1l_ht 1bgd@ 0ek GD#Vn1k1GL U=1QD_t1GUa
-@0ekDC#Ve(j1GLU=1l_ht1,C^@0ekGD#Vn+k1GLU=1QD_t0f1[@0ekDC#Vn4k1,:R=1QD_q1GU
-^@0ekMF#W"7l1,:R=16)Vq1,C[@0ekJE#W+:m1,:R=0ocMo0f1X@0ekMF#W"1l1,:R=16)Vp1b
-g^@0ekMF#W":l0f(O=16)Vq1GU[@0ekJE#W+=m0f(O=0ocMo1,CX@0ekMF#W"4l0f(O=16)Vq0
-f1U@0ekJE#W+7m0f(O=0ocMo2)-mA0ekJE#Vn4l1GLU=16)Vp1G^gA0ekJE#W"7m1GLU=0ocMp
-1,LdA0ekGD#Vn7l1,:R=16)Vp1bpgA0ekJE#W":m1,:R=0ocMp1G^dA0ekGD#Ve(k1,:R=1QD_
-s1,LaA0ekDC#Vn+l1,:R=16)Vp2)-gA0ekJE#Vn4l0f(O=16)Vp1G^aA0ekJE#W"7m0f(O=0oc
-Mp1,L^A0ekGD#Ve%k0f(O=1QD_s0f:[A0ekDC#Ve4l1GLU=16)Vq2)6sB0ekDC#Ve.l1GLU=16
-)Vq1GgmB0ekDC#Ve1l1,:R=16)Vq1c$mB0ekDC#Ve+l1,:R=16)Vq1,UgB0ekDC#Ve4l0f(O=1
-6)Vq2)6mB0ekDC#Ve.l0f(O=16)Vq1GggB0ekDC#Ve(l0f(O=16)Vq0fCaB0ekDC#Ve%g1bg^>
-2NA&!0ekL>0ekMF#W4=k1bg^>16)Vq0ekI>0ekPG#W+7j1GU[>1QD`!0ekI>0ekDC#Ve%g1,CX
->2NA&!0ekF>0ekMF#W4=k1,CX>16)Vq0ekC>0ekPG#W+7j0f1U>1QD`!0ekC>0ekDC#Ve(h1bg
-^>23%qu1,1U?0ekJE#W4@l1bg^>0ocMp0etR?0ekMF#W+7k1bg^>16)Vq1,1R?0ekMF#W+:k1G
-U[>16)Vp0etO?0ekPG#W"1j1GU[>1QD_u0etO?0ekDC#Ve(h1,CX>23%qu1,1O?0ekJE#W4@l1
-,CX>0ocMp0etL?0ekMF#W+7k1,CX>16)Vq1,1L?0ekMF#W+:k0f1U>16)Vp0etI?0ekPG#W"1j
-0f1U>1QD_u0etI?0ekDC#Ve+i1bg^>1l_ht1GL^@0ekGD#Vn.j1bg^>1QD_t1,:[@0ekDC#Ve%
-i1bg^>1l_ht0f(X@0ekGD#Vn1j1GU[>1QD_t1GL[@0ekDC#Ve(i1GU[>1l_ht1,:X@0ekGD#Vn
-+j1GU[>1QD_t0f(U@0ekDC#Ve+i1,CX>1l_ht1GLX@0ekGD#Vn.j1,CX>1QD_t1,:U@0ekDC#V
-e%i1,CX>1l_ht0f(R@0ekGD#Vn1j0f1U>1QD_t1GLU@0ekDC#Ve(i0f1U>1l_ht1,:R@0ekGD#
-Vn+j0f1U>1QD_t0f(O@0ekDC#Ve.j1bg^>1QD_s1bggA0ekDC#Vn1k1bg^>16)Vp1,CaA0ekJE
-#W"4l1bg^>0ocMp1bgdA0ekGD#Ve+j1GU[>1QD_s1GUaA0ekDC#Vn.k1GU[>16)Vp0f1[A0ekJ
-E#W"1l1GU[>0ocMo1bgaA0ekJE#W":l1,CX>0ocMp1GU^A0ekGD#Ve(j1,CX>1QD_s1,C[A0ek
-DC#Vn+k1,CX>16)Vq1bg^A0ekGD#Ve+j0f1U>1QD_s1GU[A0ekDC#Vn.k0f1U>16)Vp0f1UA0e
-kJE#W"1l0f1U>0ocMo2)-pB0ekGD#Vn4l1bg^>0ocMo1G^jB0ekGD#Vn7l1GU[>0ocMo1bpjB0
-ekGD#Vn1l1GU[>0ocMo1,LdB0ekGD#Ve1k1,CX>16)Vq1bpgB0ekDC#Ve+k1,CX>16)Vq1,LaB
-0ekDC#Ve%k1,CX>16)Vq2)-gB0ekDC#Ve.k0f1U>16)Vq1G^aB0ekDC#Ve(k0f1U>16)Vq0f:[
-B0ekDC#Ve4l1bg^>0ocMo1c$sC0ekDC#Ve1l1GU[>0ocMo1GgmC0ekDC#Ve4l1,CX>0ocMo1c$
-mC0ekDC#Ve(l1,CX>0ocMo2)6mC0ekDC#Ve+l0f1U>0ocMo0fCaC0ekDC#Ve%g2)-g?23%qu0e
-kO?0ekJE#W4=k2)-g?0ocMp0ekL?0ekMF#W+7j1bpd?16)Vp0ekI?0ekPG#W"1i1G^a?1QD_u0
-ekI?0ekDC#Vn+h1,L^?1l_hu0ekF?0ekGD#Ve%g0f:[?23%qu0ekC?0ekJE#W4=k0f:[?0ocMo
-1,1X@0ekMF#W"4j2)-g?16)Vq0etU@0ekJE#W+7k2)-g?0ocMp1,1U@0ekJE#W+:k1bpd?0ocM
-o0etR@0ekMF#W"1j1bpd?16)Vp1,1R@0ekMF#W"4j1G^a?16)Vq0etO@0ekJE#W+7k1G^a?0oc
-Mp1,1O@0ekJE#W+:k1,L^?0ocMo0etL@0ekMF#W"1j1,L^?16)Vp1,1L@0ekMF#W"4j0f:[?16
-)Vq0etI@0ekJE#W+7k0f:[?0ocMo1GLaA0ekJE#W"7k2)-g?0ocMp1,:^A0ekGD#Vn1j1bpd?1
-6)Vp1,:[A0ekJE#W"4k1bpd?0ocMp0f(XA0ekGD#Ve+i1G^a?1QD_s1GL[A0ekDC#Vn.j1G^a?
-16)Vp0f(UA0ekJE#W"1k1G^a?0ocMp1GLXA0ekGD#Ve(i1,L^?1QD_s1,:UA0ekDC#Vn+j1,L^
-?16)Vp1GLUA0ekJE#W"7k0f:[?0ocMp1,:RA0ekGD#Ve%i0f:[?1QD_s0f(OA0ekDC#Ve.j2)-
-g?16)Vq1GUgB0ekDC#Vn4k1bpd?0ocMo1GUdB0ekGD#Vn.k1bpd?0ocMo1bgdB0ekGD#Vn1k1G
-^a?0ocMo1,C^B0ekGD#Vn+k1G^a?0ocMp1bgaB0ekDC#Ve+j1,L^?16)Vq1,C[B0ekDC#Ve%j1
-,L^?16)Vp1bg^B0ekGD#Vn1k0f:[?0ocMo1,CXB0ekGD#Vn+k0f:[?0ocMo2)-sC0ekDC#Ve.k
-1bpd?0ocMo2)-mC0ekDC#Ve+k1G^a?0ocMo1bpgC0ekDC#Ve(k1,L^?0ocMo2)-gC0ekDC#Ve+
-k0f:[?0ocMo0f:[C0ekDC#Ve%g2DHp@1l_ht0ekR@0ekGD#Vn+h2)6m@1QD_t0ekO@0ekDC#Ve
- %g1c$j@1l_ht0ekL@0ekGD#Vn+h1Ggg@1QD_t0ekI@0ekDC#Ve%g1,Ud@1l_ht0ekF@0ekGD#
-Vn+h0fCa@1QD_t0ekC@0ekDC#Ve(h2DHp@1QD_s1,1[A0ekDC#Vn.i2)6m@16)Vp0etUA0ekJE
-#W"1j2)6m@0ocMo1,1UA0ekJE#W"4j1c$j@0ocMp0etRA0ekGD#Vn.i1Ggg@16)Vp0etOA0ekJ
-E#W"1j1Ggg@0ocMo1,1OA0ekJE#W"4j1,Ud@0ocMp0etLA0ekGD#Vn.i0fCa@16)Vp0etIA0ek
-JE#W"1j0fCa@0ocMo1GLdB0ekGD#Vn1j2)6m@0ocMo1,:^B0ekGD#Ve+i1c$j@16)Vq1,:[B0e
-kDC#Ve%i1c$j@16)Vq1GL[B0ekDC#Ve(i1Ggg@16)Vq0f(UB0ekDC#Ve+i1,Ud@16)Vq1,:UB0
-ekDC#Ve%i1,Ud@16)Vq1GLUB0ekDC#Ve(i0fCa@16)Vq0f(OB0ekDC#Ve.j2DHp@0ocMo1GUgC
-0ekDC#Ve.j1c$j@0ocMo1,CaC0ekDC#Ve+j1Ggg@0ocMo0f1[C0ekDC#Ve.j1,Ud@0ocMo1,C[
-C0ekDC#Ve+j0fCa@0ocMo0f1UC0ekDC#W"1i0ekF<2NA&#0ekC;1,1VG#W"1j0ekC<23%r"0et
-I<0etPF#W"4j0ekF<23%r"1,1L<1,1SF#Vn+i0ekF<2NA&"0etI<1,1VG#W=Cm0ekF<16)Vp1,
-:R=0etYI#W"4k0ekC<1l_i!1,:R=0etME#Vn+j0ekC<23%r!0f(O=0etPF#W=Cn0ekC<0ocMo1
-GLU=1,1\I#W"7k0ekF<1l_hs1,:R=1,1YH#W+:l0ekF<1QD_q0f(O=1,1\I#W"1k0ekF<1l_i!
-0f(O=1,1PE#Ve+j0ekC<23%qu1GU[>0etPF#Vn.k0ekC<1l_hu1,CX>0etME#Ve%j0ekC<23%q
-u0f1U>0etPF#W4=n0ekC<0ocMo1bg^>1,1YH#W":l0ekF<1QD_r1GU[>1,1VG#W+=m0ekF<16)
-Vp1,CX>1,1YH#W"4l0ekF<1QD_u1,CX>1,1MD#Vn+k0ekF<1l_hu0f1U>1,1PE#Ve.k0ekC<1l
-_ht1bpd?0etME#Vn1l0ekC<1QD_t1G^a?0etJD#Ve(k0ekC<1l_ht1,L^?0etME#Vn+l0ekC<1
-QD_t0f:[?0etJD#Ve1k0ekF<1l_hs1bpd?1,1SF#Ve+k0ekF<1l_ht1G^a?1,1PE#Vn.l0ekF<
-1QD_t1,L^?1,1MD#Ve%k0ekF<1l_ht0f:[?1,1PE#Ve1l0ekC<1QD_r1c$j@0etME#Ve+l0ekC
-<1QD_s1Ggg@0etJD#Vn.m0ekC<16)Vp0fCa@0etPF#W"1n0ekC<0ocMo2DHp@1,1SF#Vn7m0ek
-F<16)Vp1c$j@1,1SF#W":n0ekF<0ocMp1Ggg@1,1PE#Ve(l0ekF<1QD_s1,Ud@1,1MD#Vn+m0e
-kF<16)Vq0ekF<0etYI#W+7j1,1L=1l_i"0ekF<0etME#W"1i0etI=23%r"0ekC<0etPF#W"1i1
-,1O=23%r"0ekF<1,1SF#Vn+h0etL=2NA&"0ekC<1,1VG#W=Cl0etL=16)Vq1,1O=0etVH#W+:k
-1,1L=1QD_q0etL=0etYI#W"1j1,1L=1l_i!0etL=0etME#Ve(h0etI=2NA&!1,1L=0etSG#W4@
-l0etI=16)Vp1,1O=1,1\I#W"4j1,1O=1l_i!1,1O=1,1PE#Vn+i1,1O=23%r!0etL=1,1SF#W=
-Cm1,1O=0ocMp1,1L=1,1YH#W+:k0etL=1QD_q0etI=1,1\I#W"1j0etL=1l_i!0etI=1,1PE#V
-n1j1,1L=1l_hu1GLX>0etME#Ve(i1,1L=23%qu1,:U>0etPF#W4@m1,1L=0ocMp0f(R>0etSG#
-W+7l1,1L=16)Vp1GLU>0etVH#W"7k0etI=1QD_q1GLX>1,1YH#W"7k1,1O=1QD_q0f(O>0etVH
-#Vn.j1,1O=1l_hu1,:U>1,1PE#Ve%i1,1O=23%qu0f(R>1,1SF#W4=m1,1O=0ocMp1GLU>1,1V
-G#W+=l0etL=16)Vp1,:R>1,1YH#W"4k0etL=1QD_u1,:R>1,1MD#Vn+j0etL=1l_hu0f(O>1,1
-PE#Vn4k1,1L=1QD_q1GU^?0etSG#W"7l1,1L=16)Vq1,C[?0etPF#W+:m1,1L=0ocMo0f1X?0e
-tSG#W"1l1,1L=16)Vp1bg^?0etSG#W":l0etI=16)Vp1bga?1,1VG#W":l1,1O=16)Vp1,CX?0
-etSG#Vn1k1,1O=1QD_t1GU^?1,1MD#Ve(j1,1O=1l_ht1,C[?1,1PE#Vn+k1,1O=1QD_t0f1X?
-1,1MD#Vn4k0etL=1QD_q1GU[?1,1VG#W"7l0etL=16)Vq1,CX?1,1SF#W+:m0etL=0ocMo0f1U
-?1,1VG#W"1l0etL=16)Vq2)-j@0etME#Ve.k1,1L=1QD_s1bpg@0etJD#Vn1l1,1L=16)Vp1,L
-a@0etPF#W"4m1,1L=0ocMp0f:^@0etME#Ve1k0etI=1QD_q2)-j@1,1SF#Ve+k0etI=1QD_r1b
-pg@1,1PE#Ve+k1,1O=1QD_s1G^d@1,1MD#Ve%k0etI=1QD_r1,La@1,1PE#Ve%k1,1O=1QD_s0
-f:^@1,1MD#Vn7l0etL=16)Vp1bpd@1,1SF#W":m0etL=0ocMp1G^a@1,1PE#Ve(k0etL=1QD_s
-1,L^@1,1MD#Vn+l0etL=16)Vp2)6pA0etME#Vn4m1,1L=0ocMo1GgjA0etME#Vn.m1,1L=0ocM
-o2DHpA0etME#Ve4l1,1O=16)Vp1c$jA0etME#Vn7m1,1O=0ocMo1c$mA1,1PE#Ve(l0etI=16)
-Vq1GgjA1,1MD#Ve(l1,1O=16)Vp2)6mA1,1PE#Vn4m0etL=0ocMo1GggA1,1PE#Vn.m0etL=0o
-cMo0fCaA1,1PE#Vn+h1GLU>23%r!0ekI=0etPF#W=Cl1GLU>0ocMo0ekF=0etYI#W"1i1,:R>1
-l_i!0ekF=0etME#Ve%g1GLX>2NA&!0ekI=1,1VG#W4=k1GLX>16)Vq0ekC=0etVH#W+7j0f(O>
-1QD`!0ekC=0etJD#Vn+h1,:U>23%r!0ekF=1,1SF#W=Cl1,:U>0ocMo0ekC=1,1\I#W"1i0f(R
->1l_i!0ekC=1,1PE#Vn.i1GLU>1l_hu1,1R>0etME#Ve%h1GLU>23%qu0etO>0etPF#W4=l1GL
-U>0ocMo1,1O>0etVH#W"4j1,:R>1QD_u1,1O>0etJD#Ve(h1GLX>23%qu1,1R>1,1SF#W4@l1G
-LX>0ocMp0etO>1,1VG#W+7k1GLX>16)Vq1,1L>0etSG#W+:k0f(O>16)Vp0etI>0etVH#Vn.i1
-,:U>1l_hu1,1O>1,1PE#Ve%h1,:U>23%qu0etL>1,1SF#W4=l1,:U>0ocMo1,1L>1,1YH#W"4j
-0f(R>1QD_u1,1L>1,1MD#Vn+i0f(R>1l_hu0etI>1,1PE#Vn1j1GLU>1QD_t1GL[?0etJD#Ve(
-i1GLU>1l_ht1,:X?0etME#Vn+j1GLU>1QD_t0f(U?0etJD#Ve+i1,:R>1l_ht1GLX?0etME#Ve
-+i1GLX>1l_ht1GL[?1,1PE#Ve%i1,:R>1l_hs1,:X?1,1SF#W+:l1GLX>0ocMo0f(U?1,1VG#W
-"1k1GLX>16)Vq1GLU?0etPF#W+=l0f(O>0ocMo1,:R?0etSG#Vn1j1,:U>1QD_t1GLX?1,1MD#
-Ve(i1,:U>1l_ht1,:U?1,1PE#Vn+j1,:U>1QD_t0f(R?1,1MD#Ve+i0f(R>1l_ht1GLU?1,1PE
-#Vn.j0f(R>1QD_t1,:R?1,1MD#Ve%i0f(R>1l_ht0f(O?1,1PE#Vn4k1GLU>16)Vp1GUa@0etP
-F#W"7l1GLU>0ocMp1,C^@0etME#Ve%j1GLU>1QD_s0f1[@0etJD#Ve.j1,:R>1QD_s1bga@0et
-JD#Ve.j1GLX>1QD_s1bgd@1,1MD#Ve(j1,:R>1QD_r1GUa@1,1PE#Ve(j1GLX>1QD_s1,C^@1,
-1MD#Vn+k1GLX>16)Vq1bg^@0etME#Ve+j0f(O>1QD_r1bga@1,1PE#Ve+j1,:U>1QD_s1GU^@1
-,1MD#Ve%j0f(O>1QD_r1,C[@1,1PE#Ve%j1,:U>1QD_s0f1X@1,1MD#Ve.j0f(R>1QD_s1bg^@
-1,1MD#Vn1k0f(R>16)Vp1,CX@1,1SF#W"4l0f(R>0ocMp0f1U@1,1PE#Vn7l1GLU>0ocMo1bpj
-A0etME#Vn1l1GLU>0ocMo1,LdA0etME#Ve1k1,:R>16)Vp2)-mA1,1PE#Ve+k1,:R>16)Vq1bp
-jA1,1MD#Ve+k1GLX>16)Vp0f:^A0etME#Vn.l1GLX>0ocMp2)-gA0etJD#Ve.k0f(O>16)Vq2)
--jA1,1MD#Ve.k1,:U>16)Vp1,L^A0etME#Vn1l1,:U>0ocMo1,LaA1,1PE#Vn+l1,:U>0ocMo2
-)-gA1,1PE#Vn4l0f(R>0ocMo1G^aA1,1PE#Vn.l0f(R>0ocMo0f:[A1,1PE#Ve1l1GLU>0ocMo
-1GgmB0etJD#Ve4l1,:R>0ocMo2DI!B1,1MD#Ve.l1,:R>0ocMo1c$pB1,1MD#Ve(l1,:R>0ocM
-o2)6mB0etJD#Ve1l1,:U>0ocMo1GggB0etJD#Ve+l1,:U>0ocMo0fCaB0etJD#Ve4l0f(R>0oc
-Mo1c$jB1,1MD#Ve(l0f(R>0ocMp0ekL>0etSG#W+7j1bg^?16)Vp0ekI>0etVH#W"1i1GU[?1Q
-D_u0ekI>0etJD#Ve%g1bga?23%qu0ekL>1,1SF#W4=k1bga?0ocMp0ekF>0etSG#W+7j1,CX?1
-6)Vq0ekI>1,1VG#W+7j1GU^?16)Vp0ekC>0etVH#W"1i0f1U?1QD_u0ekC>0etJD#Ve%g1,C[?
-23%qu0ekF>1,1SF#W4=k1,C[?0ocMp0ekC>1,1VG#W+7j0f1X?16)Vq1,1U?0etPF#W+:k1bg^
-?0ocMo0etR?0etSG#W"1j1bg^?16)Vp1,1R?0etSG#W"4j1GU[?16)Vp1,1U?1,1VG#W"4j1bg
-a?16)Vq0etR?1,1SF#W+7k1bga?0ocMp1,1O?0etPF#W+:k1,CX?0ocMo0etL?0etSG#Vn.i1G
-U^?1QD_t1,1R?1,1MD#Ve%h1GU^?1l_ht0etO?1,1PE#Ve(h0f1U?1l_ht1,1L?0etME#Ve(h1
-,C[?1l_ht1,1O?1,1PE#Vn+i1,C[?1QD_t0etL?1,1MD#Vn.i0f1X?1QD_t1,1L?1,1MD#Ve%h
-0f1X?1l_ht0etI?1,1PE#Vn1j1bg^?16)Vp1,:[@0etPF#W"4k1bg^?0ocMp0f(X@0etME#Ve+
-i1GU[?1QD_s1GL[@0etJD#Ve+i1bga?1QD_s1GL^@1,1MD#Ve%i1GU[?1QD_r1,:[@1,1PE#Ve
- %i1bga?1QD_s0f(X@1,1MD#Vn1j1,CX?16)Vp1,:U@0etPF#Vn1j1GU^?16)Vp1,:X@1,1SF#
-W"4k1GU^?0ocMp0f(U@1,1PE#Ve+i0f1U?1QD_s1GLU@0etJD#Ve+i1,C[?1QD_s1GLX@1,1MD
-#Ve%i0f1U?1QD_r1,:U@1,1PE#Ve%i1,C[?1QD_s0f(R@1,1MD#Vn1j0f1X?16)Vp1,:R@1,1S
-F#W"4k0f1X?0ocMp0f(O@1,1PE#Vn4k1bg^?0ocMo1GUdA0etME#Vn.k1bg^?0ocMo1bgdA0et
-ME#Ve.j1bga?16)Vp1,C^A0etME#Vn1k1bga?0ocMo1,CaA1,1PE#Vn4k1,CX?0ocMo1GU^A0e
-tME#Vn4k1GU^?0ocMo1GUaA1,1PE#Ve%j1,CX?16)Vq1,C^A1,1MD#Ve%j1GU^?16)Vp1bg^A0
-etME#Ve.j1,C[?16)Vp1,CXA0etME#Vn1k1,C[?0ocMo1,C[A1,1PE#Vn+k1,C[?0ocMp1bg^A
-1,1MD#Ve+j0f1X?16)Vq1,CXA1,1MD#Ve%j0f1X?16)Vp1bpmB0etJD#Ve1k1GU[?0ocMo2)-p
-B1,1MD#Ve+k1GU[?0ocMo1G^jB1,1MD#Ve.k1,CX?0ocMo1bpjB1,1MD#Ve(k1,CX?0ocMo1,L
-dB1,1MD#Ve1k0f1U?0ocMo2)-jB1,1MD#Ve+k0f1U?0ocMo1G^dB1,1MD#Ve%k0f1U?0ocMo0f
-:^B1,1MD#Ve.k0f1X?0ocMo1,L^B1,1MD#Vn+h2)-g@1QD_t0ekO?0etJD#Ve%g1bpd@1l_ht0
-ekL?0etME#Ve%g2)-j@1l_ht0ekO?1,1PE#Vn+h1G^a@1QD_t0ekI?0etJD#Vn+h1bpg@1QD_t
-0ekL?1,1MD#Ve%g1,L^@1l_ht0ekF?0etME#Ve%g1G^d@1l_ht0ekI?1,1PE#Vn+h0f:[@1QD_
-t0ekC?0etJD#Vn+h1,La@1QD_t0ekF?1,1MD#Ve%g0f:^@1l_ht0ekC?1,1PE#Vn.i2)-g@16)
-Vp0etU@0etPF#W"1j2)-g@0ocMo1,1U@0etPF#W"4j1bpd@0ocMo1,1X@1,1SF#W"4j2)-j@0o
-cMp0etU@1,1PE#Vn.i1G^a@16)Vp0etO@0etPF#Vn.i1bpg@16)Vp0etR@1,1SF#W"1j1bpg@0
-ocMo1,1O@0etPF#W"4j1,L^@0ocMo1,1R@1,1SF#W"4j1G^d@0ocMp0etO@1,1PE#Vn.i0f:[@
-16)Vp0etI@0etPF#Vn.i1,La@16)Vp0etL@1,1SF#W"1j1,La@0ocMo1,1L@1,1SF#W"4j0f:^
-@0ocMp0etI@1,1PE#Vn1j2)-g@0ocMo1,:^A0etME#Ve+i1bpd@16)Vp1GLaA1,1PE#Ve%i1bp
-d@16)Vq1,:^A1,1MD#Vn1j1G^a@0ocMo1,:XA0etME#Vn1j1bpg@0ocMo1,:[A1,1PE#Vn+j1b
-pg@0ocMo1GLXA0etME#Ve+i1G^d@16)Vp0f(RA0etME#Vn.j1G^d@0ocMo0f(UA1,1PE#Vn1j0
-f:[@0ocMo1,:RA0 etME# Vn1j1 ,La@0 oc Mo1 ,:UA1, 1PE#Vn+
-j1,La@0ocMo1GLU A1, 1PE#V n.j0f :^ @0o cMo 0f(O
-A1,1PE#Ve+j2)-g @0ocM o1 bggB0 etJD #V e.j 2)-j@ 0oc Mo1,C aB0e
-tJD#Ve+j1G^a@0o cMo1G UdB 1,1 MD#V e% j1G ^a@0oc Mo 1bgaB0 etJ
-D#Ve.j1G^d@0ocM o1,C[ B0e tJD # Ve( j1G ^d@ 0ocMo1 GU [B0etJ D#V
-e+j1,La@0ocMo0f 1UB0e tJD #Ve %j 1, La@ 0oc Mo1bg^ B1 ,1MD#V e(j
-0f:^@0ocMp0ekR@ 0etM E#V e% g2 )6m A1Q D_s 0ekO
-@0etJD#Ve%g2DHs A1QD _ s0 ek R@1 ,1M D#Vn +h1c$
-jA16)Vq0ekO@1,1 PE#Ve% g1G g gA1 QD _s0e kI@ 0etJD#Ve%g 1c$mA1QD_s0
-ekL@1,1MD#Vn+h1 ,UdA16 )Vq 0 ekI@ 1,1P E#V e%g0fCaA1Q D_s0ekC@0et
-JD#Ve%g1,UgA1QD _s0ekF @1, 1MD# Vn.i 2DH pA0ocMo1,1 XA0etME#Ve(
-h2DHsA16)Vq1,1U A0etJ D#Ve %h1c$ jA16 )Vq 1,1XA1,1MD #Ve%h2)6pA1
-6)Vp1,1RA0etME# Ve(h1 c$mA1 6)Vq0 etR A1,1MD#Vn. i1,UdA0ocMo
-0etLA0etME#Vn.i 1GgjA0o cMo0et OA1,1 PE# Ve(h0fCaA1 6)Vp1,1OA1,
-1PE#Vn+i1,UgA0ocMo1GLaB0etJD#Ve+i2DHsA0ocMo1,:[B0etJD#Ve(i2)6pA0ocMo1GL[B0
-etJD#Ve+i1c$mA0ocMo0f(UB0etJD#Ve%i1c$mA0ocMo1,:UB0etJD#Ve(i1GgjA0ocMo1GLUB
-0etJD#Ve+i1,UgA0ocMo0f(OB0etJD#Ve%i1,UgA0ocMp0ekC;1,:bJ#W+7j0ekF=1l_i"0ekC
-;1,:VF#W"1i0ekI=23%r"0ekC;1GL\G#Vn+i0ekC=23%r!0etI<0f(VG#W=Cm0ekC=0ocMp1,1
-L<1,:_I#W+:k0ekF=1QD_q0etI<1,:bJ#W"1j0ekF=1l_i!0etI<1,:VF#Ve(h0ekI=2NA&!1,
-1L<1GL_H#W4@l0ekI=16)Vq0etI<1GLbI#W+7k0ekI=1QD`!0etI<1GLVE#Vn.j0ekC=1l_hu1
-,:R=0f(SF#Ve%i0ekC=23%qu0f(O=0f(VG#W4=m0ekC=0ocMp1GLU=1,:\H#W+=l0ekF=16)Vp
-1,:R=1,:_I#W"4k0ekF=1QD_u1,:R=1,:SE#Vn+j0ekF=1l_hu0f(O=1,:VF#Ve+i0ekI=23%q
-u1GLU=1GL\G#Vn.j0ekI=1l_hu1,:R=1GLYF#Ve%i0ekI=23%qu0f(O=1GL\G#W4=m0ekI=0oc
-Mp1GU[>0f(VG#W+=m0ekC=0ocMo1,CX>0f(YH#W"4l0ekC=16)Vq0f1U>0f(VG#W+7m0ekC=0o
-cMp1bg^>1,:YG#Ve+j0ekF=1l_ht1GU[>1,:VF#Vn.k0ekF=1QD_t1,CX>1,:SE#Ve%j0ekF=1
-l_ht0f1U>1,:VF#Ve.j0ekI=1l_ht1bg^>1GLYF#Vn1k0ekI=1QD_t1GU[>1GLVE#Ve(j0ekI=
-1l_ht1,CX>1GLYF#Vn+k0ekI=1QD_t0f1U>1GLVE#Vn4l0ekC=16)Vp1G^a?0f(VG#W"7m0ekC
-=0ocMp1,L^?0f(SF#Ve%k0ekC=1QD_s0f:[?0f(PE#Vn7l0ekF=16)Vp1bpd?1,:YG#W":m0ek
-F=0ocMp1G^a?1,:VF#Ve(k0ekF=1QD_s1,L^?1,:SE#Vn+l0ekF=16)Vp2)-g?1GL\G#Vn4l0e
-kI=16)Vp1G^a?1GL\G#W"7m0ekI=0ocMp1,L^?1GLYF#Ve%k0ekI=1QD_s0f:[?1GLVE#Vn7m0
-ekC=0ocMo1c$j@0f(SF#Vn1m0ekC=0ocMo1,Ud@0f(SF#Vn+m0ekC=0ocMo2)6m@1,:VF#Vn4m
-0ekF=0ocMo1Ggg@1,:VF#Vn.m0ekF=0ocMo0fCa@1,:VF#Ve4l0ekI=16)Vq2)6m@1GLVE#Ve.
-l0ekI=16)Vq1Ggg@1GLVE#Ve(l0ekI=16)Vq0fCa@1GLVE#W"1i1,1L>1l_i!0ekF<0f(SF#Vn
-+h0etI>23%r!0ekC<0f(VG#W=Cl0etI>0ocMp0ekF<1,:_I#W+7j1,1O>1QD`!0ekF<1,:SE#V
-e%g0etL>2NA&!0ekC<1,:\H#W4=k0etL>16)Vp0ekF<1GLeJ#W"1i1,1R>1l_i!0ekF<1GLYF#
-Vn+h0etO>23%r!0ekC<1GL\G#W=Cl0etO>0ocMo1,1O=0f(\I#W"4j1,1L>1QD_u1,1O=0f(PE
-#Vn+i1,1L>1l_hu0etL=0f(SF#Vn.i0etI>1l_hu1,1L=0f(SF#Ve%h0etI>23%qt1,1O=1,:\
-H#W+:k1,1O>16)Vp0etL=1,:_I#W"1j1,1O>1QD_u0etL=1,:SE#Ve(h0etL>23%qu1,1L=1,:
-YG#W4@l0etL>0ocMo1,1O=1GLbI#W"4j1,1R>1QD_u1,1O=1GLVE#Vn+i1,1R>1l_hu0etL=1G
-LYF#Vn.i0etO>1l_hu1,1L=1GLYF#Ve%h0etO>23%qu0etI=1GL\G#W4=l0etO>0ocMo1GLX>0
-f(YH#W"7k1,1L>16)Vq1,:U>0f(VG#W+:l1,1L>0ocMo0f(R>0f(YH#W"1k1,1L>16)Vq1GLU>
-0f(VG#W+=l0etI>0ocMo1,:R>0f(YH#Vn1j1,1O>1QD_t1GLX>1,:SE#Ve(i1,1O>1l_ht1,:U
->1,:VF#Vn+j1,1O>1QD_t0f(R>1,:SE#Ve+i0etL>1l_ht1GLU>1,:VF#Ve+i1,1R>1l_ht1GL
-X>1GLYF#Ve%i0etL>1l_hs1,:U>1GL\G#W+:l1,1R>0ocMo0f(R>1GL_H#W"1k1,1R>16)Vq1G
-LU>1GL\G#W+=l0etO>0ocMo1,:R>1GL_H#W"4k0etO>16)Vq0f(O>1GL\G#W+7l0etO>0ocMo1
-bga?0f(VG#W":l1,1L>0ocMp1GU^?0f(SF#Ve(j1,1L>1QD_s1,C[?0f(PE#Vn+k1,1L>16)Vq
-1bg^?0f(SF#Ve+j0etI>1QD_r1bga?1,:VF#Ve+j1,1O>1QD_s1GU^?1,:SE#Ve%j0etI>1QD_
-r1,C[?1,:VF#Ve%j1,1O>1QD_s0f1X?1,:SE#Ve.j0etL>1QD_s1bg^?1,:SE#Ve.j1,1R>1QD
-_s1bga?1GLVE#Ve(j0etL>1QD_r1GU^?1GLYF#Ve(j1,1R>1QD_s1,C[?1GLVE#Vn+k1,1R>16
-)Vq1bg^?1GLYF#Ve+j0etO>1QD_s1GU[?1GLVE#Vn.k0etO>16)Vp0f1U?1GL\G#W"1l0etO>0
-ocMo2)-j@0f(SF#Vn4l1,1L>0ocMo1G^d@0f(SF#Vn.l1,1L>0jPo+NX.Bq0etI<0fG$t1bpd@
-0ekC>NX.Eq1,:R=0f=ss2)-jA0ekC=NX.Er0ekF<0f=ss2)6m@1,1L>NX.Bp1,1O=0fG$t1bga
-?1,1L?NX.Nt1,1O=0f"ap1,CX?0ekC?NX.Ht0etI<0f+gq0etL>0ekC@NX.Er1,:R=0f4mr2)6
-pB0ekC<NX.Bp1GU[>0f=ss1bgdA0ekC=NX.Nt1GU[>0en[o0f(O=1,1LANX.Es0ekF<0f4mr1,
-:U>1,1L@NX.Hs1,1O=0f+gq0ekI=1,1LANX.Eq1GLX>0f4mr2)-mA1,1L=NX.Bs0etI<0f4mr0
-f(R?0ekC?NX.Es1,:R=0f+gq1,:X@0ekC>NX.Hs1GU[>0f"ap0ekL?0ekC?NX.Eq1bpd?0f+gq
-2)-pC0ekC;NX.?r0ekF<0f=ss1Ggg@1,1L>NX.Br1,1O=0f4mr1c$mA1,1L=NX.?p1GLX>0f=s
-s1GUa@1,1L>NX.Kt1GLX>0en[o1,1U?1,1L?NX.Hr1bga?0f"ap1,UdA0ekC=NX.?r1,:R=0f4
-mr1GgjB0ekC<NX.Br1GU[>0f+gq1c$pC0ekC;NX.?p1bpd?0f4mr1GUdB0ekC<NX.Bp2)6m@0f
-+gq1bgjC0ekC;NX.?s0ekF<0f4mr1,La@1,1L>NX.?q1GLX>0f4mr1G^gA1,1L=NX.Bq1bga?0
-f+gq1bpmB1,1L<NX.?o2)-j@0f4mr1GLaA1,1L=NX.?s1,:R=0f+gq1,LdB0ekC<NX.?q1bpd?
-0f+gq1G^jC0ekC;NX.Bq2)6m@0f"ap0fCa@1,1L>NX.Bt1,1O=0f"ap0f1[@1,1L>NX.Et1GLX
->0en[o1,CaA1,1L=NX.?p2)-j@0f+gq1GUgB1,1L<NX.Bp2DHsA0f"ap1,1L>0ekC@NX.Hr0f(
-O=0f4mr2DHpB0ekC<NX.Eq0etL=0f=ss2)-g@1,1L>NX.Bp0ekI=0fG$t1bg^>1GLU@NX.Nt0e
-kI=0f"ap1,:R?0ekC?NX.Hs0f(O=0f+gq0ekF>0ekC@NX.Eq1,CX>0f4mr2)-jB0ekC<NX.?p0
-etL=0fG$t1GU[?1,1L?NX.Kt0etL=0f"ap1,1O>1,1L@NX.Hr1,:U>0f+gq2DHsB1,1L<NX.Bq
-0ekI=0f=ss1bpd?1GLU?NX.?o1,1R>0fG$t1GLX>1GLU@NX.Ks1,1R>0f"ap1,CX@0ekC>NX.H
-t0f(O=0f"ap0etL?0ekC?NX.Er1,CX>0f+gq2)6pC0ekC;NX.Bp1G^a?0f4mr1bgdB0ekC<NX.
-?q0etL=0f=ss1G^a@1,1L>NX.Bq1,:U>0f4mr1bpgA1,1L=NX.?o1GU^?0f=ss1GL[@1,1L>NX
-.Ks1GU^?0en[o1,CX>1GLU@NX.Ht0ekI=0f"ap0etL=1GLUANX.Er1,1R>0f+gq2)6pA1GLU=N
-X.Bp1GL[?0f4mr1bgd@1GLU>NX.Bs0f(O=0f+gq0f(R@0ekC>NX.Es1,CX>0f"ap1,:XA0ekC=
-NX.Hs1G^a?0en[o0ekL@0ekC>NX.Eq1c$j@0f"ap0f1U?1,1L?NX.Et0etL=0f"ap1,C[@1,1L
->NX.Ht1,:U>0en[o0etO?1,1L?NX.Er1GU^?0f"ap1,1U@1,1L>NX.Hr1bpg@0en[o1,L^?1GL
-U?NX.?q1,1R>0f4mr1G^d@1GLU>NX.Bq1GL[?0f+gq1bpjA1GLU=NX.?o1bgd@0f4mr1GL^@1G
-LU>NX.Bt0f(O=0f"ap0f1XA0ekC=NX.Et1,CX>0en[o1,C^B0ekC<NX.?p1c$j@0f+gq1GUdC0
-ekC;NX.?s0etL=0f+gq1,LaA1,1L=NX.?q1GU^?0f+gq1G^gB1,1L<NX.Bq1bpg@0f"ap0ekO@
-1,1L>NX.Eq2)6pA0en[o1,Ud@1GLU>NX.?r1,1R>0f+gq1GgjA1GLU=NX.Br1GL[?0f"ap0etR
-?1GLU?NX.Er1bgd@0en[o1,1X@1GLU>NX.?s1,CX>0f"ap1,LdC0ekC;NX.?q1c$j@0f"ap0fC
-aA1,1L=NX.Bt1,:U>0en[o0f1[A1,1L=NX.Br1bpg@0en[o0etUA1,1L=NX.?s1,1R>0f"ap1,
-LdA1GLU=NX.?q1bgd@0f"ap1,:^A1GLU=NX.?o2DI!B0f"ap1,1L?0ekC?NX.Hr0f1U>0f+gq2
-DHpC0ekC;NX.?o0f(R>0fG$t1GLU?1,1L?NX.Ks0f(R>0f"ap1,1L=1GLUANX.Hr0etO>0f+gq
-2DHpA1GLU=NX.?o0ekL>0fG$t1GLU=1bg^ANX.Ks0ekL>0f"ap1,:R@0ekC>NX.Hs0f1U>0f"a
-p0ekF?0ekC?NX.Eq1,L^?0f+gq2)-jC0ekC;NX.?p0f(R>0f=ss1GU[@1,1L>NX.Kt0f(R>0en
-[o1,1O?1,1L?NX.Hr1,C[?0f"ap1,:R>1GLU@NX.Hs0etO>0f"ap0ekF=1GLUANX.Eq1,:X?0f
-+gq2)-jA1GLU=NX.?p0ekL>0f=ss1GU[>1bg^@NX.Kt0ekL>0en[o1,1O=1bg^ANX.Hr1,1U?0
-f"ap1,CXA0ekC=NX.Ht0f1U>0en[o0etL@0ekC>NX.Er1,L^?0f"ap1,1RA0ekC=NX.Hr1Ggg@
-0en[o0f(O?1,1L?NX.Es0f(R>0f"ap1,:U@1,1L>NX.Hs1,C[?0en[o0ekI?1,1L?NX.Eq1G^d
-@0f"ap1,CX?1GLU?NX.Ht0etO>0en[o0etL>1GLU@NX.Er1,:X?0f"ap1,1R?1GLU?NX.Hr1GU
-a@0en[o0f(O=1bg^ANX.Es0ekL>0f"ap1,:U>1bg^@NX.Hs1,1U?0en[o0ekI=1bg^ANX.Eq1G
-L^@0f"ap1,L^B0ekC<NX.?q1,L^?0f+gq1G^dC0ekC;NX.Bq1Ggg@0f"ap0f1U@1,1L>NX.Et0
-f(R>0en[o1,C[A1,1L=NX.?p1G^d@0f+gq1GUaB1,1L<NX.Bp1c$mA0f"ap1,L^@1GLU>NX.?q
-1,:X?0f+gq1G^dA1GLU=NX.Bq1GUa@0f"ap0ekL?1GLU?NX.Eq1bpjA0en[o0f1U>1bg^@NX.E
-t0ekL>0en[o1,C[?1bg^?NX.?p1GL^@0f+gq1GUa@1bg^>NX.Bp1bggA0f"ap1,UdC0ekC;NX.
-?r1,L^?0f"ap1,C^C0ekC;NX.?s0f(R>0f"ap1,LaB1,1L<NX.?q1G^d@0f"ap1,:[B1,1L<NX
-.Bt0etO>0en[o0f1X@1GLU>NX.Br1GUa@0en[o0etR@1GLU>NX.Bp2)6sB0en[o0f:[?1bg^?N
-X.Bs1,1U?0en[o0f(U?1bg^?NX.Bq1bggA0en[o0ekO?1bg^?NX.?s1,L^?0en[o0fCaB1,1L<
-NX.?r1G^d@0en[o0f:^A1GLU=NX.?q1bpjA0en[o0fCa@1bg^>NX.?r1GL^@0en[o0etU@1bg^
->NX.Bp0f:[?0f4mr1bg^B0ekC<NX.?o0f1X?0f=ss1GLU@1,1L>NX.Ks0f1X?0en[o1,1L>1GL
-U@NX.Hr0f(U?0f"ap0ekC<1bg^BNX.Eq0etR?0f+gq2)-g@1bg^>NX.Bp0ekO?0f4mr1bg^>2)
--g@NX.Bq0f:[?0f+gq1bpdC0ekC;NX.?o1,Ud@0f4mr1GLXB0ekC<NX.?p0f1X?0f4mr1GU[A1
-,1L=NX.Bp1,La@0f+gq1bgaB1,1L<NX.Bq0f(U?0f+gq1bpdA1GLU=NX.?o1,C^@0f4mr1GLX@
-1GLU>NX.?p0etR?0f4mr1GU[?1bg^?NX.Bp1,:[@0f+gq1bga@1bg^>NX.Bq0ekO?0f+gq1bpd
-?2)-g?NX.?o1,1X@0f4mr1GLX>2)-g@NX.Br0f:[?0f"ap0etLA0ekC=NX.Er1,Ud@0en[o0f(
-O@1,1L>NX.Es0f1X?0en[o1,:UA1,1L=NX.?o1GgjA0f+gq1GL[B1,1L<NX.Br0f(U?0f"ap0e
-tL?1GLU?NX.Er1,C^@0en[o1,1R@1GLU>NX.?q0etR?0f+gq1G^a@1bg^>NX.Bq1,:[@0f"ap0
-ekI>1bg^@NX.Eq1GUdA0en[o1,CX>2)-g@NX.?p1,1X@0f+gq1GU^?2)-g?NX.Bp1GLaA0f"ap
-1,L^C0ekC;NX.?q1,Ud@0f"ap0f1UA1,1L=NX.Br1,La@0en[o0etOA1,1L=NX.Bs0f(U?0en[
-o0f(R@1GLU>NX.Bq1G^gA0en[o0ekL@1GLU>NX.?r0etR?0f"ap1,C[@1bg^>NX.?p1GUdA0f"
-ap1,1U@1bg^>NX.Bs0ekO?0en[o0f(R>2)-g@NX.Bq1GLaA0en[o0ekL>2)-g@NX.?r1,Ud@0e
-n[o0f:[B1,1L<NX.?q1GgjA0en[o0f1XA1GLU=NX.?p1c$pB0en[o0f:[@1bg^>NX.?q1GUdA0
-en[o0ekO@1bg^>NX.?r1,1X@0en[o0etR?2)-g?NX.Bp0fCa@0f+gq1bg^C0ekC;NX.?o0f:^@
-0f4mr1GLUA1,1L=NX.Bp0f1[@0f+gq1bg^A1GLU=NX.?o0f(X@0f4mr1GLU?1bg^?NX.Bp0etU
-@0f+gq1bg^?2)-g?NX.?o0ekR@0f4mr1GLU=2DHpANX.Bq0fCa@0f"ap0etI@1,1L>NX.Er0f:
-^@0en[o1,1OA1,1L=NX.Bq0f1[@0f"ap0ekF?1GLU?NX.Eq1,LdA0en[o0etI>1bg^@NX.Er0f
-(X@0en[o1,1O?1bg^?NX.Bq0etU@0f"ap0ekF=2)-gANX.Eq1,:^A0en[o0etI<2DHpBNX.Er0
-ekR@0en[o1,1O=2DHpANX.Br0fCa@0en[o0f(OA1,1L=NX.Bq1,UgA0en[o1,CXA1GLU=NX.?p
-1,LdA0f"ap1,1RA1GLU=NX.?q0f(X@0f"ap1,:U@1bg^>NX.?o1G^jB0f"ap1,CX?2)-g?NX.?
-p1,:^A0f"ap1,1R?2)-g?NX.?q0ekR@0f"ap1,:U>2DHp@NX.?o1GLdB0f"ap0f1UB1,1L<NX.
-?q1,LdA0en[o0f1U@1bg^>NX.?p1G^jB0en[o0f(R?2)-g?NX.?o1bppC0en[o0f1U>2DHp@NX
-.?p1GLdB0en[o1bg^>0etI@NX.Nt0ekC<0f+gq1,1O=0ekFANX.Hr1,1L<1,P!s2DHsA0ekF=N
-X.Bq0ekC<0fG$t1bpd?0etI?NX.Eq1,1L=0f=ss2)-j@0etI>NX.Bq1,1L<1,Y't1bpg@0ekF>
-NX.?o1GLU=1,b-u1GL[?0ekF?NX.Ks1GLU=1,=jq1,CX>0etI@NX.Ht0ekC<0f+gq0etL=0etI
-ANX.Er1,1L=0f4mr2)6pA0etI=NX.Bp1GLU>0f=ss1bgd@0etI>NX.Nt1GLU>0en[o1,C[?0ek
-F?NX.Ht1,1L<1,=jq0etO>0ekF@NX.Er1GLU=1,Fpr2)6sB0ekF<NX.Bp1bg^>1,P!s1bggA0e
-kF=NX.Bs0ekC<0f4mr0f(R>0etI@NX.Es1,1L=0f+gq1,:X?0etI?NX.Hs1GLU>0f"ap0ekL>0
-etI@NX.Eq1bg^?0f+gq2)-pB0etI<NX.Bs1,1L<1,Fpr0f(U?0ekF?NX.Es1GLU=1,=jq1,:[@
-0ekF>NX.Hs1bg^>1,4dp0ekO?0ekF?NX.Eq2)-g?1,=jq1,Ud@0etI>NX.?r1,1L=0f4mr1Ggj
-A0etI=NX.Br1GLU>0f+gq1c$pB0etI<NX.?p1bg^?0f4mr1GUdA0etI=NX.Bp2)-g@0f+gq1bg
-jB0etI<NX.Bt1,1L<1,=jq0f1[@0ekF>NX.Et1GLU=1,4dp1,CaA0ekF=NX.?p2)-g?1,Fpr1G
-UgB0ekF<NX.Bp2DHp@1,=jq0f:^@0etI>NX.Bs1GLU>0f"ap0f(X@0etI>NX.Es1bg^?0en[o1
-,:^A0etI=NX.?o2DHpA0f+gq1GLdB0etI<NX.Eq0etI<1,Y't2)-g@0ekF>NX.Bp0ekF<1,b-u
-1bg^>1,1O@NX.Nt0ekF<1,=jq1,1L=0etIANX.Hr0etI=0f4mr2DHpA0etI=NX.Eq0ekF=0f=s
-s2)-g?1,:R?NX.?p0etI<1,b-u1GU[?0ekF?NX.Kt0etI<1,=jq1,1O>0ekF@NX.Hr1,:R=1,F
-pr2DHsB0ekF<NX.Bq0ekF<1,Y't1bpd?1,1O?NX.?o1,1O=1,b-u1,:R>0etI@NX.Hs0etI=0f
-+gq0ekF=0etIANX.Eq1,:R>0f4mr2)-jA0etI=NX.?p0ekF=0fG$t1GU[>1,:R@NX.Kt0ekF=0
-f"ap1,1O=1,:RANX.Hr1,1O>0f+gq2DHsA1,:R=NX.?q0etI<1,Y't1G^a@0ekF>NX.Bq1,:R=
-1,P!s1bpgA0ekF=NX.?o1GU[>1,Y't1GL[@0ekF>NX.Ks1GU[>1,4dp1,CX>1,1O@NX.Ht0ekF
-<1,=jq0etL=1,1OANX.Br0etI=0f4mr1c$jA0etI=NX.?p1,:R>0f=ss1GU^@0etI>NX.Kt1,:
-R>0en[o1,1R?0etI?NX.Hr1GU[?0f"ap0f(O=1,:RANX.Es0ekF=0f+gq1,:U>1,:R@NX.Hs1,
-1O>0f"ap0ekI=1,:RANX.Eq1GLX?0f+gq2)-mA1,:R=NX.?r0etI<1,P!s1GggA0ekF=NX.Br1
-,:R=1,Fpr1c$mB0ekF<NX.?p1GU[>1,P!s1GUaA0ekF=NX.Bp1bpd?1,Fpr1bggB0ekF<NX.Bs
-0ekF<1,Fpr0f(R>1,1O@NX.Bs0etI=0f+gq0f(R?0etI?NX.Es1,:R>0f"ap0ekL>1,1O@NX.B
-q1GU[?0f+gq1bpjB0etI<NX.?o1bpd@0f4mr1GL^A0etI=NX.?r0ekF=0f4mr1Ggg@1,:R>NX.
-Br1,1O>0f+gq1c$mA1,:R=NX.?p1GLX?0f4mr1GUa@1,:R>NX.Bp1bga@0f+gq1bggA1,:R=NX
-.?s0etI<1,Fpr1,LaA0ekF=NX.?q1GU[>1,Fpr1G^gB0ekF<NX.Bq1bpd?1,=jq0ekO@0ekF>N
-X.Eq2)6m@1,4dp1,Ud@1,1O>NX.?r1,1O=1,Fpr1,UdA0etI=NX.?r1,:R>0f+gq1GgjB0etI<
-NX.?p1bga?1,Fpr1,C^A0etI=NX.?p1bpd@0f+gq1GUdB0etI<NX.Bp2)6mA0f"ap0f:[?1,:R
-?NX.Bs1,1O>0f"ap0f(U?1,:R?NX.Es1GLX?0en[o1,:[@1,:R>NX.?o2)-jA0f+gq1GLaA1,:
-R=NX.?t0etI<1,=jq1,UgB0ekF<NX.?r1GU[>1,=jq1,CaB0ekF<NX.?p2)6m@1,=jq0f:^@1,
-1O>NX.?s1,:R>0f"ap0f(X@1,1O>NX.Bs1GU[?0en[o0f(XA0etI=NX.?o2DHsA1,=jq1,:^B0
-etI<NX.?t0ekF=0 f"ap1 ,UgA1 ,:R=N X. ?r1 GLX?0f "ap1,Ca
-A1,:R=NX.?p2)-j A0f "ap1, 1[A1, :R =NX .?o 0f(O
-=1,b-u1GLU?0ekF ?NX.K s0 f(O=1 ,=jq 1, 1L= 1,1OA NX. Hr0et L=1,
-Fpr2DHpA1,1O=NX .Bp0f (O> 0f= ss1b g^ @0e tI>NX. Nt 0f(O>0 en[
-o0ekC;1GLXCNX.E q0ekI =1, P!s 2 )-g ?1G LX? NX.?o0 et L>0fG$ t1G
-LU>1,:R@NX.Ks0e tL>0f "ap 1,1 L< 1G U[B NX. Hr0ekI >0 f+gq2D Hp@
-1GU[>NX.?p0f(O= 1,Y' t1G U[ @0 ekF >NX .Kt 0f(O
-=1,4dp1,1O?0ekF ?NX. H r1 ,C X>1 ,=j q1,: R>1,1
-O@NX.Hs0etL=1,= jq0ekF =1, 1 OAN X. Bq0f (O> 0f4mr1bpdA 0etI=NX.?o1
-,CX?0f=ss1GLX@0 etI>NX .Ks 1 ,CX? 0en[ o0e tI<1GLXBNX .Er0ekI=1,F
-pr2)6m@1GLX>NX. ?p0etL >0f =ss1 GU[? 1,: R?NX.Kt0et L>0en[o1,1O
->1,:R@NX.Hr1,:U ?0f"a p1,: R=1GU [ANX .Hs 0ekI>0f"ap 0ekF<1GU[BN
-X.Eq1,1R?0f+gq2 )-j@1 GU[>N X.?q0 f(O =1,P!s1G^a A0ekF=NX.Bq
-1,CX>1,Fpr1bpgB 0ekF<NX .?o1G^ a?1,P !s1 GL[A0ekF=N X.Br0etL=1,
-Fpr1c$jA1,1O=NX.?p1,:U>1,P!s1,CX@0etI>NX.Ht0f(O>0en[o0etL?0etI?NX.Er1,CX?0
-f"ap1,1R@0etI>NX.Hr1G^a@0en[o0f(O=1GLXANX.Es0ekI=1,=jq0f(O>1,:R@NX.Es0etL>
-0f"ap0ekI=1GLXANX.Bq1,:U?0f+gq1bpgA1,:R=NX.?o1GU^@0f4mr1GL[@1,:R>NX.Br0ekI
->0f+gq1c$j@1GU[>NX.?p1,1R?0f4mr1GU^?1GU[?NX.Bp1GL[@0f+gq1bgd@1GU[>NX.?r0f(
-O=1,Fpr1GggB0ekF<NX.Br1,CX>1,=jq0etO@0ekF>NX.Er1G^a?1,4dp1,1UA0ekF=NX.Bs0e
-tL=1,=jq0f(R?1,1O?NX.Bs0f(O>0f"ap0f(R@0etI>NX.Es1,CX?0en[o0ekL?1,1O?NX.Bq1
-G^a@0f"ap0ekL@0etI>NX.Eq1c$jA0en[o0f1U>1GLX@NX.Et0ekI=1,4dp0f1U?1,:R?NX.Et
-0etL>0en[o0etO>1GLX@NX.Br1,:U?0f"ap0etO?1,:R?NX.Er1GU^@0en[o1,1U@1,:R>NX.B
-s0ekI>0f"ap0f(R>1GU[@NX.Es1,1R?0en[o1,:X?1GU[?NX.?o1bgdA0f+gq1GL^@1GU[>NX.
-?s0f(O=1,=jq1,LaB0ekF<NX.?q1G^a?1,=jq1,:[B0ekF<NX.Bt0etL=1,4dp0f1X@1,1O>NX
-.Bt0f(O>0en[o0f1XA0etI=NX.?p1bpg@1,=jq1,C^B0etI<NX.?p1c$jA0f"ap0f:[?1GLX?N
-X.?s0etL>0f"ap0f(U?1GLX?NX.Bs1,:U?0en[o0f(U@1,:R>NX.?o2)-mA1,=jq1,:[A1,:R=
-NX.?o2)6pB0f"ap1,Ud@1GU[>NX.?r1,1R?0f"ap1,C^@1GU[>NX.?p1bgdA0f"ap1,1X@1GU[
->NX.?t0f(O=1,4dp0f1[B0ekF<NX.?s1,:U>1,4dp0f:^B0etI<NX.?q1bpg@1,4dp0f(XB0et
-I<NX.?t0ekI=1,4dp0fCaA1,:R=NX.?r1GL[?1,4dp0f1[A1,:R=NX.?p2)-mA1,4dp0etUA1,
-:R=NX.?s1,1R?0en[o0f(X@1GU[>NX.?o2DI!C0en[o0ekC>0ekF@NX.Eq0f1U>1,Fpr2)-gB0
-ekF<NX.Bp0f(R>1,P!s1bg^@1,1O>NX.Bp0f1U?0f4mr1bg^A0etI=NX.?o0etO>1,Y't1GLU>
-1GLX@NX.Ks0etO>1,4dp0ekC=1,:RANX.Eq0f(R?0f+gq2)-gA1,:R=NX.Bp0ekL>1,P!s1bg^
->1bga@NX.Bp0etO?0f4mr1bg^?1GU[?NX.?o0ekL?0f=ss1GLU=1bpdANX.Ks0ekL?0en[o0et
-I?0ekF?NX.Er0f1U>1,=jq1,1O@0ekF>NX.Hr1,L^?1,4dp1,:R?1,1O?NX.Hs0f(R>1,4dp0e
-kF>1,1O@NX.Bq0f1U?0f+gq1bpdB0etI<NX.?o1,L^@0f4mr1GLXA0etI=NX.?p0etO>1,P!s1
-GU[?1GLX?NX.?p0f(R?0f4mr1GU[@1,:R>NX.Bp1,C[@0f+gq1bgaA1,:R=NX.Bq0ekL>1,Fpr
-1bpd?1bga?NX.?o1,1U?1,P!s1,:R>1GU[@NX.Hs0etO?0en[o0ekF=1GU[ANX.Eq1,:X@0f"a
-p0etI<1bpdBNX.Er0ekL?0f"ap1,1O=1bpdANX.Hr1,1U@0en[o0f(O@0ekF>NX.Es0f1U>1,4
-dp1,:UA0ekF=NX.?o1Ggg@1,Fpr1GL[B0ekF<NX.Br0f(R>1,=jq0etL?1,1O?NX.Br0f1U?0f
-"ap0etL@0etI>NX.Er1,L^@0en[o1,1RA0etI=NX.?q0etO>1,Fpr1G^a@1GLX>NX.?q0f(R?0
-f+gq1G^aA1,:R=NX.?o1GUa@1,Fpr1,:U@1,:R>NX.?o1G^dA0f+gq1GL[A1,:R=NX.Br0ekL>
-1,=jq0etL=1bgaANX.Br0etO?0f"ap0etL>1GU[@NX.Er1,:X@0en[o1,1R?1GU[?NX.?q0ekL
-?0f+gq1G^a?1bpd?NX.Bq1,1U@0f"ap0ekI=1bpdANX.Eq1GL^A0en[o0f1UA0ekF=NX.Br1,L
-^?1,4dp0etOA0ekF=NX.Bs0f(R>1,4dp0f(R@1,1O>NX.Bs0f1U?0en[o0f(RA0etI=NX.?o1c
-$mA1,=jq1,:XB0etI<NX.?r0etO>1,=jq0f1U@1,:R>NX.?p1GUa@1,=jq1,C[A1,:R=NX.?p1
-G^dA0f"ap1,1UA1,:R=NX.Bs0ekL>1,4dp0f(R>1bga@NX.Bs0etO?0en[o0f(R?1GU[?NX.?o
-1bggA1,=jq1,:X@1GU[>NX.?o1bpjB0f"ap0f1U>1bpd@NX.Br1,1U@0en[o0etO>1bpd@NX.B
-p1bggB0en[o0f:[B0ekF<NX.?q1Ggg@1,4dp0f1XA1,1O=NX.?r1,L^@0en[o0etRA1,1O=NX.
-?s0etO>1,4dp0f:[A1,:R=NX.?q1GUa@1,4dp0f(UA1,:R=NX.?o2)6sB1,4dp0f1X?1bga?NX
-.?r1,:X@0en[o0etR?1bga?NX.?p1bpjB0en[o0f:[?1bpd?NX.?q1GL^A0en[o0ekO?1bpd?N
-X.?o0f:[?1,P!s1GLUA0ekF=NX.Bp0f1X?1,Fpr1bg^A1,1O=NX.Bp0f:[@0f+gq1bg^B0etI<
-NX.?o0f(U?1,P!s1GLU?1GLX?NX.?o0f1X@0f4mr1GLU@1,:R>NX.Bp0etR?1,Fpr1bg^?1bga
-?NX.Bp0f(U@0f+gq1bg^@1GU[>NX.?o0ekO?1,P!s1GLU=2)-jANX.?o0etR@0f4mr1GLU>1bp
-d@NX.Bp0ekO@0f+gq1bg^>2)6m@NX.?p0f:[?1,Fpr1GU[B0ekF<NX.Bp1,Ud@1,=jq1,:R@1,
-1O>NX.?o1,La@1,Fpr1,:RA0etI=NX.?o1,UdA0f+gq1GLXB0etI<NX.?p0f(U?1,Fpr1GU[@1
-GLX>NX.?p0f1X@0f+gq1GU[A1,:R=NX.Bp1,LaA0f"ap1,:R>1bga@NX.?o1,:[@1,Fpr1,:R?
-1GU[?NX.?o1,C^A0f+gq1GLX@1GU[>NX.?p0ekO?1,Fpr1GU[>2)-j@NX.?p0etR@0f+gq1GU[
-?1bpd?NX.Bp1,:[A0f"ap1,:R=2)6mANX.?o1,1XA0f+gq1GLX>2)6m@NX.?q0f:[?1,=jq1,:
-UB0ekF<NX.Br0f1X?1,4dp0etL@1,1O>NX.Br0f:[@0en[o0etLA0etI=NX.?q0f(U?1,=jq0f
-(O@1,:R>NX.?o1G^gA1,=jq1,:UA1,:R=NX.?o1GgjB0f"ap1,CX?1bga?NX.?p1,:[@1,=jq1
-,CX@1GU[>NX.?p1,C^A0f"ap1,1R@1GU[>NX.?q0ekO?1,=jq0f(O>1bpd@NX.?o1GLaA1,=jq
-1,:U?1bpd?NX.?o1GUdB0f"ap1,CX>2)6m@NX.?p1,1XA0f"ap1,1R>2)6m@NX.?r0f:[?1,4d
-p0f(RA1,1O=NX.?q1,UdA0en[o0f1U@1GLX>NX.?r0f1X@0en[o0etO@1GLX>NX.?p1GgjB0en
-[o0f(R?1bga?NX.?q1,C^A0en[o0ekL?1bga?NX.?o1c$pC0en[o0f1U>2)-j@NX.?r0etR@0e
-n[o0etO>2)-j@NX.?p1GUdB0en[o0f(R>2)6m@NX.?o1bgjC0en[o0ekC@0ekF>NX.Eq0fCa@1
-,4dp1,1L@1,1O>NX.Bp0fCaA0f"ap0ekC>1GLX@NX.Eq0f1[@1,4dp0ekC?1,:R?NX.Eq0f:^A
-0en[o1,1L>1bga@NX.Bp0f1[A0f"ap0ekC<2)-jBNX.Eq0etU@1,4dp0ekC=1bpdANX.Eq0f(X
-A0en[o1,1L<2DHsBNX.Bp0etUA0f"ap0etIA0ekF=NX.Bq0f:^@1,4dp0ekF@1,1O>NX.Bq0fC
-aA0en[o0etI?1GLX?NX.?p0f:^A0f"ap1,1OA1,:R=NX.Bq0f(X@1,4dp0ekF>1bga@NX.Bq0f
-1[A0en[o0ekF?1GU[?NX.?p0etU@1,=jq0etI>1bpd@NX.Bp1,CaB0en[o1,:R=2DHsANX.?o1
-,1[A1,=jq1,:R>2)6m@NX.?o1,:^B0f"ap0f(OB0ekF<NX.?p1,UgA1,4dp0f(O@1GLX>NX.?q
-0f:^A0en[o0ekI@1GLX>NX.?p1,CaA1,4dp0etL@1GU[>NX.?q0etU@1,4dp0f(O?1bpd?NX.?
-o1GUgB1,4dp0ekI?1bpd?NX.?p1,1[A1,4dp0etL>2)6m@NX.Eq0ekC<1,Y't2)-g?0etL?NX.
-Bp0ekC=0fG$t1bg^>0f(O@NX.Nt0ekC=0f"ap1GLX>0ekI@NX.Ks1,1L<1GXsr0etI<0etLBNX
-.Er0ekC<1,P!s2)6m@0etL>NX.Bp1,1L=1,Y't1bga?0etL?NX.Nt1,1L=1,4dp1,:R=0f(OAN
-X.Hs0ekC=0f+gq0ekF<0f(OBNX.Eq1,1L>0f4mr2)-j@0f(O>NX.?p1,1L<1Gt0u1GU^?0ekI?
-NX.Kt1,1L<1GOmq1,1R>0ekI@NX.Hr1GLU=1GXsr0f(O=0etLANX.Es0ekC<1,Fpr1,:U>0etL
-@NX.Hs1,1L=1,=jq0ekI=0etLANX.Eq1GLU>1,Fpr2)-mA0etL=NX.Br0ekC=0f4mr1c$j@0f(
-O>NX.?p1,1L>0f=ss1GU^?0f(O?NX.Kt1,1L>0en[o1,1R>0f(O@NX.Hr1GLU?0f"ap0f(R>0e
-kI@NX.Es1,1L<1GXsr1,:X?0ekI?NX.Hs1GLU=1GOmq0ekL>0ekI@NX.Eq1bg^>1GXsr0f1U>0
-etL@NX.Et0ekC<1,=jq1,C[?0etL?NX.Ht1,1L=1,4dp0etO>0etL@NX.Er1GLU>1,=jq1,1U?
-0etL?NX.Hr1bg^?1,4dp1,L^?0f(O?NX.?q1,1L>0f4mr1G^d@0f(O>NX.Bq1GLU?0f+gq1bpj
-A0f(O=NX.?o1bg^@0f4mr1GL^@0f(O>NX.?r1,1L<1Gb$s1GgjA0ekI=NX.Br1GLU=1GXsr0et
-R?0ekI?NX.Er1bg^>1GOmq1,1X@0ekI>NX.?s0ekC<1,Fpr1,La@0etL>NX.?q1GLU>1,Fpr1G
-^gA0etL=NX.Bq1bg^?1,=jq0ekO?0etL?NX.Eq2)-g@1,4dp1,Ud@0f(O>NX.?r1,1L>0f+gq1
-GgjA0f(O=NX.Br1GLU?0f"ap0etR?0f(O?NX.Er1bg^@0en[o1,1X@0f(O>NX.?s1,1L<1GXsr
-1,LdA0ekI=NX.?q1bg^>1GXsr1,:^A0ekI=NX.?o2DHp@1GXsr0fCa@0etL>NX.Bt1,1L=1,4d
-p0f1[@0etL>NX.Br1bg^?1,4dp0etU@0etL>NX.Bp2DHpA1,4dp0f:^@0f(O>NX.Bs1GLU?0en
-[o0f(X@0f(O>NX.Bq2)-gA0en[o0ekR@0f(O>NX.Bp0etI<1Gt0u1bg^?0ekI?NX.Nt0etI<1G
-Omq0ekC;1,1RCNX.Eq0ekF<1Gk*t2)-g?1,1R?NX.?o0etI=1,b-u1GLU>0etL@NX.Ks0etI=1
-,=jq1,1L<1,:UBNX.Hr0ekF=1,Fpr2DHp@1,:U>NX.Bp0etI>0f=ss1bg^?0f(O?NX.Nt0etI>
-0en[o0ekC;1,CXCNX.Eq0ekF>0f4mr2)-g?1,CX?NX.Bq0etI<1Gk*t1bpd@0ekI>NX.?o1,:R
-=1Gt0u1GLX?0ekI?NX.Ks1,:R=1GOmq0etI<1,1RBNX.Er0ekF<1Gb$s2)6m@1,1R>NX.?p0et
-I=1,Y't1GU[?0etL?NX.Kt0etI=1,4dp1,1O>0etL@NX.Hr1,:R>1,=jq1,:R=1,:UANX.Hs0e
-kF=1,=jq0ekF<1,:UBNX.Bq0etI>0f4mr1bpd@0f(O>NX.?o1,:R?0f=ss1GLX?0f(O?NX.Ks1
-,:R?0en[o0etI<1,CXBNX.Er0ekF>0f+gq2)6m@1,CX>NX.Bp1,1O?0f4mr1bga?1,CX?NX.Br
-0etI<1Gb$s1c$jA0ekI=NX.?p1,:R=1Gk*t1GU^@0ekI>NX.Bp1GU[>1Gb$s1bgdA0ekI=NX.?
-q0ekF<1Gk*t1G^a?1,1R?NX.?q0etI=1,P!s1G^a@0etL>NX.?o1GLX>1Gk*t1,:U?0etL?NX.
-Hs1,:R>1,4dp0ekI>0etL@NX.Eq1GU[?1,=jq1,CX>1,:U@NX.Ht0ekF=1,4dp0etL=1,:UANX
-.Br0etI>0f+gq1c$jA0f(O=NX.?p1,:R?0f4mr1GU^@0f(O>NX.Bp1GU[@0f+gq1bgdA0f(O=N
-X.?q0ekF>0f4mr1G^a?1,CX?NX.Bq1,1O?0f+gq1bpg@1,CX>NX.?o1GLX@0f4mr1GL[?1,CX?
-NX.Bs0etI<1GXsr0f(R?0ekI?NX.Es1,:R=1GOmq1,:X@0ekI>NX.?o1bpd?1Gb$s1GL^A0ekI
-=NX.?r0ekF<1Gb$s1Ggg@1,1R>NX.?r0etI=1,Fpr1GggA0etL=NX.?p1GLX>1Gb$s1,C[@0et
-L>NX.?p1GU[?1,Fpr1GUaA0etL=NX.Bp1bpd@1,=jq1,L^?1,:U?NX.?q1,1O>1,Fpr1,L^@0f
-(O>NX.?q1,:R?0f+gq1G^dA0f(O=NX.?o1bga@1,Fpr1,:X@0f(O>NX.?o1bpdA0f+gq1GL^A0
-f(O=NX.?r0ekF>0f+gq1Ggg@1,CX>NX.Br1,1O?0f"ap0etO>1,CX@NX.Er1GLX@0en[o1,1U?
-1,CX?NX.Bt0etI<1GOmq0f1X@0ekI>NX.Br1GU[>1GOmq0etR@0ekI>NX.Bp2)6m@1GOmq0f:[
-?1,1R?NX.?s0etI=1,=jq0f(U?1,1R?NX.Bs1,:R>1,4dp0f(U@0etL>NX.?o2)-j@1GXsr1,:
-[A0etL=NX.?o2)6mA1,=jq1,Ud@1,:U>NX.?r1,1O>1,=jq1,UdA0f(O=NX.?r1,:R?0f"ap0e
-tR?1,:U?NX.Br1GU[@0en[o0etR@0f(O>NX.Bp2)6mB0en[o0f:[?1,CX?NX.Bs1,1O?0en[o0
-f(U?1,CX?NX.Bq1bgaA0en[o0ekO?1,CX?NX.?s1,:R=1GOmq0f(XA0ekI=NX.?t0ekF<1GOmq
-0fCaA0etL=NX.?r1GLX>1GOmq0f1[A0etL=NX.?p2)-j@1GOmq0etUA0etL=NX.?s1,1O>1,4d
-p0f:^A0f(O=NX.?q1bga@1,4dp0f(XA0f(O=NX.?o2DHsB1,4dp0fCa@1,CX>NX.?r1GLX@0en
-[o0etU@1,CX>NX.Bp0f(O=1Gk*t1bg^@0ekI>NX.?o0etL=1Gt0u1GLU>1,1R@NX.Ks0etL=1G
-Omq0ekC=0etLANX.Eq0f(O>1,Fpr2)-gA0etL=NX.Bp0ekI=1Gk*t1bg^>1GL[@NX.Bp0etL>1
-,P!s1bg^?1,:U?NX.Bp0f(O?0f4mr1bg^@0f(O>NX.?o0ekI>1,Y't1GLU=1GU^ANX.Ks0ekI>
-1,4dp0ekC<1,CXBNX.Eq0etL?0f+gq2)-g@1,CX>NX.Bp0ekI?0f4mr1bg^>1G^a@NX.Bq0f(O
-=1Gb$s1bpdA0ekI=NX.?o1,CX>1Gk*t1GLX@0ekI>NX.?p0etL=1Gk*t1GU[?1,1R?NX.?p0f(
-O>1,P!s1GU[@0etL>NX.Bp1,CX?1,Fpr1bgaA0etL=NX.Bq0ekI=1Gb$s1bpd?1GL[?NX.?o1,
-1R>1Gk*t1,:R>1,:U@NX.Hs0etL>1,4dp0ekF=1,:UANX.Bq0f(O?0f+gq1bpdA0f(O=NX.?o1
-,CX@0f4mr1GLX@0f(O>NX.?p0ekI>1,P!s1GU[>1GU^@NX.?p0etL?0f4mr1GU[?1,CX?NX.Bp
-1,:U@0f+gq1bga@1,CX>NX.Bq0ekI?0f+gq1bpd?1G^a?NX.?o1,1R@0f4mr1GLX>1G^a@NX.B
-r0f(O=1GXsr0etL?0ekI?NX.Er1,CX>1GOmq1,1R@0ekI>NX.?q0etL=1Gb$s1G^a@1,1R>NX.
-?q0f(O>1,Fpr1G^aA0etL=NX.?o1GU^?1Gb$s1,:U@0etL>NX.?o1G^a@1,Fpr1GL[A0etL=NX
-.Br0ekI=1GXsr0etL=1GL[ANX.Br0etL>1,=jq0etL>1,:U@NX.Br0f(O?0f"ap0etL?0f(O?N
-X.Er1,CX@0en[o1,1R@0f(O>NX.?q0ekI>1,Fpr1G^a?1GU^?NX.?q0etL?0f+gq1G^a@1,CX>
-NX.?o1GL[@1,Fpr1,:U?1,CX?NX.?o1GU^A0f+gq1GL[@1,CX>NX.Br0ekI?0f"ap0etL=1G^a
-ANX.Er1,1R@0en[o1,1R>1G^a@NX.Bs0f(O=1GOmq0f(R@0ekI>NX.Bq1G^a?1GOmq0ekL@0ek
-I>NX.?r0etL=1GXsr0f1U@0etL>NX.?p1GU^?1GXsr1,C[A0etL=NX.?p1G^a@1,=jq1,1UA0e
-tL=NX.Bs0ekI=1GOmq0f(R>1GL[@NX.Bs0etL>1,4dp0f(R?1,:U?NX.Bs0f(O?0en[o0ekL>1
-GL[@NX.?q1,CX@0f"ap0ekL?1,:U?NX.Bq1G^aA0en[o0ekL@0f(O>NX.?r0ekI>1,=jq0f1U?
-1,CX?NX.?p1GL[@1,=jq1,C[@1,CX>NX.?p1GU^A0f"ap1,1U@1,CX>NX.Bs0ekI?0en[o0f(R
->1G^a@NX.Bq1GL[A0en[o0ekL>1G^a@NX.?r1,CX>1GOmq0etRA0ekI=NX.?s0etL=1GOmq0f:
-[A0etL=NX.?q1GU^?1GOmq0f(UA0etL=NX.?o2)6pA1GOmq0f1X?1GL[?NX.?r1,:U?1,4dp0e
-tR?1GL[?NX.?r1,CX@0en[o0etR@1,:U>NX.?p1c$jB0en[o0f:[?1GU^?NX.?s0etL?0en[o0
-f(U?1GU^?NX.?q1GU^A0en[o0ekO?1GU^?NX.?o2)6pC0en[o0f1X?1G^a?NX.?p1bgdB0en[o
-1,1L?0ekI?NX.Hr0f1U>1GOmq0ekC=1,1RANX.Eq0f(R>1GXsr0ekC>0etL@NX.Eq0f1U?1,=j
-q1,1L=1GL[ANX.Hr0etO>1GOmq1,1L>1,:U@NX.Hr0f(R?1,4dp1,1L?0f(O?NX.Hr0f1U@0en
-[o0ekC;1bgdCNX.Eq0ekL>1GXsr0ekC<1GU^BNX.Eq0etO?1,=jq0ekC=1,CXANX.Eq0f(R@0f
-"ap1,1L<1bpgBNX.Hr0ekL?1,4dp1,1L=1G^aANX.Hr0etO@0en[o0ekC;1c$jCNX.Eq0ekL@0
-f"ap1,:R@0ekI>NX.?o1,L^?1Gb$s1GLXA0ekI=NX.?p0f(R>1Gb$s1GU[@1,1R>NX.?p0f1U?
-1,Fpr1GU[A0etL=NX.Bp1,L^@1,=jq1,:R>1GL[@NX.?o1,:X?1Gb$s1,:R?1,:U?NX.?o1,C[
-@1,Fpr1,:R@0f(O>NX.?o1,L^A0f+gq1GLXA0f(O=NX.?p0ekL>1Gb$s1GU[>1bgd@NX.?p0et
-O?1,Fpr1GU[?1GU^?NX.?p0f(R@0f+gq1GU[@1,CX>NX.Bp1,C[A0f"ap1,:R=1bpgANX.?o1,
-1U@1,Fpr1,:R>1G^a@NX.?o1,:XA0f+gq1GLX?1G^a?NX.?p0ekL@0f+gq1GU[>1c$j@NX.Bp1
-,1UA0f"ap1,CXA0ekI=NX.?p1,L^?1GXsr1,1RA0ekI=NX.?q0f(R>1GXsr0f(O@0etL>NX.?o
-1G^d@1GXsr1,:UA0etL=NX.?o1GggA1,=jq1,CX?1GL[?NX.?p1,:X?1GXsr1,CX@1,:U>NX.?
-p1,C[@1,=jq1,CXA0f(O=NX.?p1,L^A0f"ap1,1RA0f(O=NX.?q0ekL>1GXsr0f(O>1GU^@NX.
-?o1GL^@1GXsr0f(O?1,CX?NX.?o1GUaA1,=jq1,:U@1,CX>NX.?o1G^dB0f"ap1,CX>1bpg@NX
-.?p1,1U@1,=jq1,CX?1G^a?NX.?p1,:XA0f"ap1,1R?1G^a?NX.?q0ekL@0f"ap1,:U>1c$j@N
-X.?o1GL^B0f"ap0 f(RA0 ekI=N X.?r0 f( R>1 GOmq0f 1UA0etL
-=NX.?p1G^d@1GOm q0e tOA0e tL=NX .? q1, :X? 1GOm
-q0f(R@1,:U>NX.? o1bpj A1 GOmq0 f(RA 0f (O= NX.?o 1c$ mB1,4 dp0f
-1U>1bgd@NX.?r0e tO?1, 4dp 0et O>1b gd @NX .?r0f( R@ 0en[o0 etO
-?1GU^?NX.?p1G^d B0en[ o0f (R> 1 bpg @NX .?q 1,:XA0 en [o0ekL >1b
-pg@NX.?o1bpjC0e n[o0f 1U> 1c$ j@ NX .?p 1GL ^B0en[ o1 ,1L@0e kI>
-NX.?o0f1X?1Gb$s 1GLU @1, 1R >N X.? o0f :[@ 1,Fp
-r1GLUA0etL=NX.B p0f( U ?1 GX sr1 ,1L ?1,: U?NX.
-Bp0f:[A0f"ap0ek C<1bgd BNX . Eq0 et R?1G Omq 0ekC=1GU^A NX.Eq0f(U@1
-,4dp0ekC>1,CX@N X.Eq0f 1XA 0 en[o 1,1L <2) -mBNX.Bp0e tR@1,=jq1,1
-L>1G^a@NX.?o0ek O@1,Fp r1G LU=2 )6pA NX. ?o0etRA0f+ gq1GLU>1c$j
-@NX.Bq0f:[?1GOm q0ekF @0ek I>NX. ?p0f 1X? 1GXsr0etI@ 0etL>NX.Bp1
-,UdA1,4dp1,:R?1 GL[?N X.?o1 ,C^@1 GXs r1,:R@1,:U >NX.?o1,LaA
-1,=jq1,:RA0f(O= NX.?o1, UdB0f" ap0et I=1 bgdANX.?p0 f(U@1,=jq0e
-tI?1,CX?NX.Bp1,LaB0en[o1,:R=2)-mANX.?o1,1X@1GXsr1,:R>1bpg@NX.?o1,:[A1,=jq1
-,:R?1G^a?NX.?o1,C^B0f"ap0etI<2)6pBNX.?p0etRA0f"ap1,1O>1c$j@NX.?p1,Ud@1GOmq
-0f(O@1,1R>NX.?q0f:[@1,4dp0ekI@1,1R>NX.?p1,C^@1GOmq0etL@1,:U>NX.?p1,UdB0en[
-o0f(O>1bgd@NX.?q0f(U@1,4dp0ekI>1bgd@NX.?q0f1XA0en[o0ekI?1GU^?NX.?o1GgjC0en
-[o0etL=2)-mANX.?p1,:[A1,4dp0etL?1G^a?NX.?q0ekO@1,4dp0f(O>1c$j@NX.?o1GLaB1,
-4dp0ekI>1c$j@NX.Bp0fCa@1GOmq0ekC?1,1R?NX.?o0fCaA1,=jq1,1L?1GL[?NX.Bp0f:^A1
-,4dp1,1LA0f(O=NX.?o0f(X@1GXsr0ekC>1GU^@NX.?o0f:^B0f"ap1,1L=2)-mANX.Bp0f(XA
-1,4dp1,1L?1G^a?NX.?o0ekR@1GXsr0ekC<2)6pBNX.?o0f(XB0f"ap0etI@1,1R>NX.?p0fCa
-A1,4dp0ekF?1GL[?NX.?o1,UgB1,4dp0etI>1bgd@NX.?p0f1[A1,4dp0etI@1,CX>NX.?o1,:
-^A1GOmq0ekF>1bpg@NX.?o1,LdC0en[o0etI<2DI!BNX.?p0etUA1,4dp0etI>1c$j@NX.Bp0e
-kC<1Gt0u1bg^>0etO@NX.Nt0ekC<1GOmq0ekC;0f(RCNX.Eq0ekC=1,P!s2)-g?0f(R?NX.Bp0
-ekC>0f=ss1bg^>0f1U@NX.Nt0ekC>0en[o1,1O=0ekLANX.Hr1,1L<1bt's1,:R=0etOANX.Hs
-0ekC<1GXsr0ekF<0etOBNX.Eq1,1L=1Gb$s2)-j@0etO>NX.?p0ekC=1,Y't1GU[>0f(R@NX.K
-t0ekC=1,4dp1,1O=0f(RANX.Hr1,1L>1,=jq1,:R=0f1UANX.Hs0ekC>0f"ap0ekF<0f1UBNX.
-Eq1,1L?0f+gq2)-j@0f1U>NX.Bq1,1L<1c(-t1bpg@0ekL>NX.?o1GLU=1c13u1GL[?0ekL?NX
-.Br0ekC<1Gb$s1c$j@0etO>NX.?p1,1L=1Gk*t1GU^?0etO?NX.Bp1GLU>1Gb$s1bgd@0etO>N
-X.?q0ekC=1,P!s1G^a?0f(R?NX.Bq1,1L>1,Fpr1bpg@0f(R>NX.?o1GLU?1,P!s1GL[?0f(R?
-NX.Br0ekC>0f+gq1c$j@0f1U>NX.?p1,1L?0f4mr1GU^?0f1U?NX.Bp1GLU@0f+gq1bgd@0f1U
->NX.Br1,1L<1bt's0etO>0ekL@NX.Er1GLU=1bk!r1,1U?0ekL?NX.Bs0ekC<1GXsr0f(R>0et
-O@NX.Es1,1L=1GOmq1,:X?0etO?NX.?o1bg^?1Gb$s1GL^@0etO>NX.?r0ekC=1,Fpr1Ggg@0f
-(R>NX.Br1,1L>1,=jq0etO>0f(R@NX.Er1GLU?1,4dp1,1U?0f(R?NX.Bs0ekC>0f"ap0f(R>0
-f1U@NX.Es1,1L?0en[o1,:X?0f1U?NX.?o1bg^A0f+gq1GL^@0f1U>NX.Bs1,1L<1bk!r0f(U?
-0ekL?NX.Bq1bg^>1bk!r0ekO?0ekL?NX.Bt0ekC<1GOmq0f1X?0etO?NX.Br1GLU>1GOmq0etR
-?0etO?NX.Bp2)-g@1GOmq0f:[?0f(R?NX.Bs1,1L>1,4dp0f(U?0f(R?NX.Bq1bg^@1,4dp0ek
-O?0f(R?NX.Bt0ekC>0en[o0f1X?0f1U?NX.Br1GLU@0en[o0etR?0f1U?NX.Bp2)-gB0en[o0f
-1[@0ekL>NX.?p2)-g?1bk!r0f:^@0etO>NX.?q1bg^?1GOmq0ekR@0etO>NX.?t0ekC=1,4dp0
-f1[@0f(R>NX.?p2)-gA1,4dp0f:^@0f1U>NX.?q1bg^A0en[o0ekR@0f1U>NX.Eq0etI<1c(-t
-2)-g@0ekL>NX.Bp0ekF<1c13u1bg^>1,1U@NX.Bp0etI=1Gk*t1bg^?0etO?NX.?o0ekF=1Gt0
-u1GLU=1,:XANX.Ks0ekF=1GOmq0ekC<0f(RBNX.Eq0etI>1,Fpr2)-g@0f(R>NX.Bp0ekF>1,P
-!s1bg^>1,C[@NX.Bp0etI?0f4mr1bg^?0f1U?NX.?o0ekF?0f=ss1GLU=1,L^ANX.Ks0ekF?0e
-n[o0etI=0ekLANX.Er0etI<1bt's1,1O>0ekL@NX.Hr1,:R=1bk!r1,:R=1,1UANX.Hs0ekF<1
-bk!r0ekF<1,1UBNX.Bq0etI=1Gb$s1bpd@0etO>NX.?o1,:R>1Gk*t1GLX?0etO?NX.?p0ekF=
-1Gk*t1GU[>1,:X@NX.?p0etI>1,P!s1GU[?0f(R?NX.Bp1,:R?1,Fpr1bga@0f(R>NX.Bq0ekF
->1,Fpr1bpd?1,C[?NX.?o1,1O?1,P!s1,:R>0f1U@NX.Hs0etI?0en[o0ekF=0f1UANX.Eq1,:
-R@0f"ap0etI<1,L^BNX.Er0ekF?0f"ap1,1O=1,L^ANX.Hr1,1O@0en[o0f(O>0ekL@NX.Es0e
-tI<1bk!r1,:U?0ekL?NX.?o1GU[>1c(-t1GL[@0ekL>NX.Br0ekF<1bt's0etL=1,1UANX.Br0
-etI=1GXsr0etL>0etO@NX.Er1,:R>1GOmq1,1R?0etO?NX.?q0ekF=1Gb$s1G^a?1,:X?NX.?q
-0etI>1,Fpr1G^a@0f(R>NX.?o1GLX?1Gb$s1,:U?0f(R?NX.?o1GU[@1,Fpr1GL[@0f(R>NX.B
-r0ekF>1,=jq0etL=1,C[ANX.Br0etI?0f"ap0etL>0f1U@NX.Er1,:R@0en[o1,1R?0f1U?NX.
-?q0ekF?0f+gq1G^a?1,L^?NX.Bq1,1O@0f"ap0ekI=1,L^ANX.Eq1GLXA0en[o0f1U?0ekL?NX
-.Br1,:R=1bk!r0etO?0ekL?NX.Bp1bpd?1bk!r1,L^?1,1U?NX.?q1,1O=1bt's1,L^@0etO>N
-X.?q1,:R>1GXsr0ekL>1,1U@NX.Bq1GU[?1GOmq0ekL?0etO?NX.?r0ekF=1GXsr0f1U?0f(R?
-NX.?p1GLX?1GXsr1,C[@0f(R>NX.?p1GU[@1,=jq1,1U@0f(R>NX.Bs0ekF>1,4dp0f(R>1,C[
-@NX.Bs0etI?0en[o0f(R?0f1U?NX.?o1bgaA1,=jq1,:X@0f1U>NX.?o1bpdB0f"ap0f1U>1,L
-^@NX.Br1,1O@0en[o0etO>1,L^@NX.Bp1bgaB0en[o0f:[@0ekL>NX.?q1GU[>1bk!r0ekO@0e
-kL>NX.?r1,1O=1bk!r0f1X@0etO>NX.?p1bga?1bk!r0etR@0etO>NX.?s0ekF=1GOmq0f:[@0
-f(R>NX.?q1GLX?1GOmq0f(U@0f(R>NX.?o2)-jA1GOmq0ekO@0f(R>NX.?r1,1O?1,4dp0f1X@
-0f1U>NX.?p1bgaA1,4dp0etR@0f1U>NX.?s0ekF?0en[o0f(U?1,L^?NX.?o2)-jC0en[o0ekC
-=0ekLANX.Eq0f(O=1bt's1,1L=1,1UANX.Hr0etL=1bk!r1,1L>0etO@NX.Hr0f(O>1GOmq0ek
-C;1GL^CNX.Eq0ekI=1bt's0ekC<1,:XBNX.Eq0etL>1GXsr0ekC=0f(RANX.Eq0f(O?1,=jq1,
-1L<1GUaBNX.Hr0ekI>1GOmq1,1L=1,C[ANX.Hr0etL?1,4dp1,1L>0f1U@NX.Hr0f(O@0en[o0
-ekC;1G^dCNX.Eq0ekI?1,=jq0ekC<1,L^BNX.Eq0etL@0f"ap1,1L<1GggBNX.Hr0ekI@0en[o
-0etI>0ekL@NX.Er0f(O=1bk!r1,1O?0ekL?NX.Bq0etL=1bt's0ekF=1,1UANX.Bq0f(O>1GXs
-r0ekF>0etO@NX.Eq1,CX?1GOmq0etI<1GL^BNX.Er0ekI=1bk!r0etI=1,:XANX.Er0etL>1GO
-mq0etI>0f(R@NX.Er0f(O?1,4dp1,1O?0f(R?NX.Bq0ekI>1GXsr0ekF<1GUaBNX.Bq0etL?1,
-=jq0ekF=1,C[ANX.Bq0f(O@0f"ap0ekF>0f1U@NX.Eq1,CXA0en[o0etI<1G^dBNX.Er0ekI?1
-,4dp0etI=1,L^ANX.Er0etL@0en[o1,1O>1,L^@NX.Bq0ekI@0f"ap0ekF<1GggBNX.Eq1,1RA
-0en[o0f(O?0ekL?NX.Bq1,CX>1bk!r0ekI?0ekL?NX.Br0etL=1bk!r0etL>1,1U@NX.Br0f(O
->1GOmq0etL?0etO?NX.Bp1G^a@1GOmq0f(O=1GL^ANX.?q0etL>1GXsr0ekI=1GL^ANX.?q0f(
-O?1,=jq0ekI>1,:X@NX.Bq1,CX@1,4dp0ekI?0f(R?NX.Br0ekI>1GOmq0etL=1GUaANX.Br0e
-tL?1,4dp0etL>1,C[@NX.Br0f(O@0en[o0etL?0f1U?NX.Bp1G^aB0en[o0f(O=1G^dANX.?q0
-etL@0f"ap0ekI=1G^dANX.Bq1,:UA0en[o0ekI>1,L^@NX.Br0ekI@0en[o0etL=1GggANX.Bp
-1GL[B0en[o0f1U@0ekL>NX.?p1G^a?1bk!r0f(R?1,1U?NX.?q1,CX?1GOmq0ekL?1,1U?NX.?
-o1c$jA1GOmq0f1U>1GL^@NX.?r0etL>1GOmq0etO>1GL^@NX.?r0f(O?1,4dp0etO?1,:X?NX.
-?p1G^aA1,4dp0f(R>1GUa@NX.?q1,:U@1,4dp0ekL>1GUa@NX.?q1,CXA0en[o0ekL?1,C[?NX
-.?o1c$jC0en[o0f1U>1G^d@NX.?r0etL@0en[o0etO>1G^d@NX.?p1GU^B0en[o0f(R>1Ggg@N
-X.?o1bgdC0en[o0ekC>0ekL@NX.Eq0f1U>1bk!r1,1L>1,1U@NX.Bp0f1U?1GXsr0ekC<1GL^B
-NX.Eq0etO>1bk!r0ekC=1,:XANX.Eq0f(R?1GOmq0ekC>0f(R@NX.Eq0f1U@1,4dp1,1L<1bgg
-BNX.Bp0etO?1GXsr1,1L>1,C[@NX.Bp0f1UA0f"ap0ekC;1bpjCNX.Eq0ekL?1GOmq0ekC<1G^
-dBNX.Eq0etO@1,4dp0ekC=1,L^ANX.Eq0f(RA0en[o1,1L<1c$mBNX.Bp0etOA0f"ap0etI?0e
-kL?NX.Bp1,L^?1bk!r1,:R?1,1U?NX.?o1,C[?1bt's1,:R@0etO>NX.?o1,L^@1GXsr0etI=1
-GL^ANX.?p0f(R?1GXsr0etI?0f(R?NX.Bp1,L^A1,4dp1,:R=1bggANX.?o1,1U?1bt's1,:R>
-1GUa@NX.?o1,:X@1GXsr1,:R?1,C[?NX.?o1,C[A1,=jq1,:R@0f1U>NX.?o1,L^B0f"ap0etI
-<1bpjBNX.?p0etO@1,=jq0etI>1,L^@NX.Bp1,C[B0en[o1,:R=1c$mANX.?o1,1UA1,=jq1,:
-R>1Ggg@NX.?o1,:XB0f"ap0f(O@0ekL>NX.?o1Ggg@1bk!r0etL?1,1U?NX.?p1,L^@1GOmq0f
-(O>1GL^@NX.?q0f(R?1GOmq0ekI>1GL^@NX.?q0f1U@1,4dp0ekI?1,:X?NX.?o1GggB1,4dp0
-etL=1bggANX.?p1,:X@1GOmq0etL?1,C[?NX.?p1,L^B0en[o0f(O=1bpjANX.?q0etO@1,4dp
-0ekI=1bpjANX.?q0f(RA0en[o0ekI>1G^d@NX.?o1G^dC0en[o0etL=1c$mANX.?p1,:XB0en[
-o0ekC?0ekL?NX.Bp0f1X?1bk!r1,1L@0etO>NX.?o0f(U?1bt's0ekC>1,:X@NX.?o0f:[A1,=
-jq1,1L=1bggANX.Bp0f(U@1GOmq1,1L?1,C[?NX.Bp0f:[B0en[o0ekC;2)-pCNX.?o0etR@1G
-Xsr0ekC=1G^dANX.?o0f1XB0f"ap1,1L<2)6sBNX.Bp0etRA1,4dp1,1L>1Ggg@NX.?p0f:[?1
-bk!r0ekF?1,1U?NX.?o1,UdA1GOmq0etI>1GL^@NX.?p0f1X@1GOmq0etI@0f(R>NX.?o1,:[@
-1bk!r0ekF>1GUa@NX.?o1,LaB1,4dp0ekF@0f1U>NX.?p0ekO?1bk!r0etI=1bpjANX.?p0f(U
-A1,4dp0etI?1,L^?NX.?o1,1XA1GOmq0ekF=1c$mANX.?o1,C^C0en[o0ekC@0ekL>NX.?o0f1
-[@1bk!r0ekC?1,:X?NX.?o0fCaB1,4dp0ekC<2)-pBNX.?o0f(XA1GOmq0ekC>1G^d@NX.?o0f
-:^C0en[o0ekC;0etRCNX.Eq0ekC<1c(-t2)-g?0etR?NX.Bp0ekC=1Gk*t1bg^>0f(U@NX.?o0
-ekC>1,Y't1GLU=0f1XANX.Ks0ekC>1,4dp1,1L<0f:[BNX.Hr0ekC?0f"ap1GLX>0ekO@NX.?p
-0ekC<1c13u1GU[>0etR@NX.Bp1,1L=1c(-t1bga?0etR?NX.Bq0ekC=1Gb$s1bpd?0f(U?NX.?
-o1,1L>1Gk*t1GLX>0f(U@NX.?p0ekC>1,P!s1GU[>0f1X@NX.Bp1,1L?1,Fpr1bga?0f1X?NX.
-Bq0ekC?0f+gq1bpd?0f:[?NX.?o1,1L@0f4mr1GLX>0f:[@NX.?p1,1L<2)C6u1GU^?0ekO?NX
-.Bp1GLU=2):0t0f(O=0etRANX.Es0ekC<1bk!r1,:U>0etR@NX.?o1GLU>1c(-t1GL[?0etR?N
-X.Br0ekC=1GXsr0etL=0f(UANX.Er1,1L>1GOmq1,1R>0f(U@NX.?q0ekC>1,Fpr1G^a?0f1X?
-NX.Bq1,1L?1,=jq0ekI=0f1XANX.Eq1GLU@1,4dp1,CX>0f:[@NX.?p1,1L@0f+gq1GU^?0f:[
-?NX.Bp1GLUA0f"ap0f(R>0ekO@NX.Bq1GLU=2)1*s0ekL>0ekO@NX.?r0ekC<1bt's1,C[?0et
-R?NX.?p1GLU>1bt's1,1U?0etR?NX.Bs0ekC=1GOmq0f(R>0f(U@NX.Bq1GLU?1GOmq0ekL>0f
-(U@NX.?r0ekC>1,=jq1,C[?0f1X?NX.?p1GLU@1,=jq1,1U?0f1X?NX.Bs0ekC?0en[o0f(R>0
-f:[@NX.Bq1GLUA0en[o0ekL>0f:[@NX.?r1,1L<2)1*s0etR?0ekO?NX.?s0ekC<1bk!r0f(U?
-0etR?NX.?o2)-g@1bk!r0f1X?0f(U?NX.?p1bg^@1GOmq0f:[?0f1X?NX.?q1GLU@1,4dp0ekO
-?0f1X?NX.?r1,1L@0en[o0etR?0f:[?NX.Bp0etI<2)C6u1bg^?0ekO?NX.?o0ekF<2)L=!1GL
-U=1,1XANX.?o0etI=1c13u1GLU>0etR@NX.Bp0ekF=1c(-t1bg^>1,:[@NX.Bp0etI>1Gb$s1b
-g^?0f(U?NX.?o0ekF>1Gk*t1GLU=1,C^ANX.?o0etI?1,P!s1GLU>0f1X@NX.Bp0ekF?1,Fpr1
-bg^>1,La@NX.Bp0etI@0f+gq1bg^?0f:[?NX.?o0ekF@0f4mr1GLU=1,UdANX.Bq0etI<2):0t
-0ekF=0ekOANX.Eq1,:R=2)1*s0etI<1,1XBNX.Er0ekF<2)1*s0etI=0etRANX.Er0etI=1bk!
-r1,1O>0etR@NX.Bq0ekF=1bt's0ekF<1,:[BNX.Bq0etI>1GXsr0ekF=0f(UANX.Eq1,:R?1GO
-mq0etI<1,C^BNX.Er0ekF>1GOmq0etI=0f1XANX.Er0etI?1,4dp1,1O>0f1X@NX.Bq0ekF?1,
-=jq0ekF<1,LaBNX.Bq0etI@0f"ap0ekF=0f:[ANX.Eq1,:RA0en[o0etI<1,UdBNX.Er0ekF@0
-en[o1,1O=1,UdANX.Br0etI<2)1*s0etL>0ekO@NX.Bp1GU[>2)1*s0f(O=1,1XANX.?q0etI=
-1bt's0ekI=1,1XANX.Bq1,:R>1bk!r0ekI>0etR@NX.Br0ekF=1bk!r0etL=1,:[ANX.Br0etI
->1GOmq0etL>0f(U@NX.Bp1GU[@1GOmq0f(O=1,C^ANX.?q0etI?1,=jq0ekI=1,C^ANX.Bq1,:
-R@1,4dp0ekI>0f1X@NX.Br0ekF?1,4dp0etL=1,LaANX.Br0etI@0en[o0etL>0f:[@NX.Bp1G
-U[B0en[o0f(O=1,UdANX.Bq1,1OA0en[o0ekI=1,UdANX.?q1,:R=2)1*s0ekL?0ekO?NX.?r0
-ekF<2)1*s0f1U?0etR?NX.?p1GLX>2)1*s0etO?0etR?NX.?q1,1O>1bk!r0f(R?0f(U?NX.?o
-1bga@1bk!r0ekL?0f(U?NX.?r0ekF>1GOmq0f1U?0f1X?NX.?p1GLX@1GOmq0etO?0f1X?NX.?
-q1,1O@1,4dp0f(R?0f:[?NX.?o1bgaB1,4dp0ekL?0f:[?NX.?r0ekF@0en[o0etO>1,Ud@NX.
-Bp0f(O=2):0t0ekC<1,1XBNX.Eq0etL=2)1*s0ekC=0etRANX.Eq0f(O>1bk!r1,1L<1GLaBNX
-.Bp0etL>1bt's1,1L>0f(U@NX.?o0ekI>1c(-t1GLU=1GUdANX.?o0etL?1Gb$s1GLU>1,C^@N
-X.?o0f(O@1,Fpr1GLU?0f1X?NX.Bp0ekI?1GXsr1,1L=1,LaANX.Bp0f(OA0f"ap0ekC;1GgjC
-NX.Eq0ekI@1,4dp0ekC<1,UdBNX.Eq0etLA0en[o1,:R?0ekO?NX.?o1,CX>2):0t0etI=1,1X
-ANX.?p0f(O>1bt's1,1O?0etR?NX.Bq0ekI=2)1*s0ekF<1GLaBNX.Bq0etL>1bk!r0ekF=1,:
-[ANX.Bq0f(O?1GOmq0ekF>0f(U@NX.?p0ekI>1bt's0etI=1,C^ANX.?p0f(O@1,=jq1,1O?0f
-1X?NX.Bq0ekI?1GOmq0ekF<1G^gBNX.Bq0etL@1,4dp0ekF=1,LaANX.Bq0f(OA0en[o0ekF>0
-f:[@NX.?p0ekI@1,=jq0etI=1,UdANX.Bp1,:UB0en[o0etL?0ekO?NX.?q0etL=2)1*s0f(O?
-0etR?NX.?o1GU^?2)1*s0ekI?0etR?NX.?p1,1R>2)1*s0etL>1,:[@NX.?p1,CX@1GOmq0f(O
-=1GUdANX.?q0etL?1GOmq0ekI=1GUdANX.?q0f(O@1,4dp0ekI>1,C^@NX.?o1G^aB1,4dp0et
-L=1G^gANX.?p1,:UA1,4dp0etL?0f:[?NX.?q0ekI@1,4dp0f(O>1,Ud@NX.?o1GL[B1,4dp0e
-kI>1,Ud@NX.Bp0f1U>2)1*s0ekC=1,1XANX.?o0f1U?1bt's1,1L=1GLaANX.Bp0f(R?1bk!r1
-,1L?0f(U?NX.?o0ekL>2):0t0ekC<1GUdBNX.?o0f(R@1GXsr0ekC>0f1X@NX.Bp0ekL?1bk!r
-1,1L=1G^gANX.Bp0f(RA1,4dp1,1L?0f:[?NX.?o0ekL@1GXsr0ekC<1GgjBNX.?o0f(RB0f"a
-p0ekF?0ekO?NX.?p0f(R>2)1*s0etI?0etR?NX.?o1,:X?2)1*s0ekF>1,:[@NX.?o1,L^A1GO
-mq0etI<1bgjBNX.?p0etO?1bk!r0etI>1,C^@NX.?p0f1UA1,4dp0ekF<1bpmBNX.?o1,:XA1G
-Omq0ekF>1,La@NX.?o1,L^C0en[o0etI<1c$pBNX.?p0etOA1,4dp0etI>1,Ud@NX.?o0f1X?2
-)1*s0ekC?0etR?NX.?o0etR?2)1*s0ekC=1GUdANX.?o0f1XA1GOmq0ekC?0f1X?NX.?o0ekO@
-1bk!r0ekC<1c$pBNX.?o0f(UB1,4dp0ekC>1,Ud@NX.Bp0ekC<2)C6u1bg^>0etU@NX.?o0ekC
-=1c13u1GLU=0f(XANX.Bp0ekC>1Gb$s1bg^>0f1[@NX.?o0ekC?1,P!s1GLU=0f:^ANX.Bp0ek
-C@0f+gq1bg^>0fCa@NX.Bp1,1L<2DU9u1,:R=0etUANX.?o1,1L=2)C6u1GLX>0etU@NX.?p0e
-kC=1c(-t1GU[>0f(X@NX.Bp1,1L>1bt's1,:R=0f1[ANX.?o1,1L?1Gb$s1GLX>0f1[@NX.?p0
-ekC?1,Fpr1GU[>0 f:^@N X.Bp1 ,1L@1 ,= jq1 ,:R=0f CaANX.?
-o1,1LA0f+gq1GLX >0f Ca@NX .Bq1, 1L <2D L3t 0ekI
-=0ekRANX.Br0ekC <2)1* s0 etL=0 etUA NX .Bp 1GLU> 2)1 *s0f( O=0f
-(XANX.Bq1,1L>1b k!r0e kI= 0f( XANX .B r0e kC>1GO mq 0etL=0 f1[
-ANX.Bp1GLU@1GOm q0f(O =0f :^A N X.B q1, 1L@ 1,4dp0 ek I=0f:^ ANX
-.Br0ekC@0en[o0e tL=0f CaA NX. Bp 1G LUB 0en [o0etO >0 ekR@NX .?q
-1,1L=2)1*s0ekL> 0etU @NX .? r0 ekC =1b k!r 0etO
->0f(X@NX.?q1,1L ?1GO m q0 ek L>0 f1[ @NX. ?r0ek
-C?1,4dp0etO>0f: ^@NX.? q1, 1 LA0 en [o0e kL> 0fCa@NX.Eq 0etI<2DL3t1
-,1L<1,1[BNX.Bp0 etI=2) :0t 0 ekC; 1,:^ CNX .Eq0ekF=2) 1*s0ekC<0f(
-XBNX.Eq0etI>1bk !r1,1L <1, CaBN X.Bp 0et I?1GXsr0ek C;1,LdCNX.E
-q0ekF?1GOmq0ekC <0f:^ BNX. Eq0et I@1, 4dp 1,1L<1,UgB NX.Bp0etIA0
-f"ap0etI=0ekRAN X.Bp1 ,:R=2 DL3t1 ,:R =1,1[ANX.? o1,1O=2DU9u
-1,:R>0etU@NX.?o 1,:R>2) :0t0et I<1,: ^BN X.?p0etI>1 bt's1,1O>0f
-(X@NX.Bq0ekF>1bk!r0ekF<1,CaBNX.Bq0etI?1GOmq0ekF=0f1[ANX.?p0ekF?1GXsr0etI=0
-f:^ANX.Bp1,:RA1,4dp1,:R=1,UgANX.?o1,1OA1,=jq1,:R>0fCa@NX.?o1,:RB0f"ap0f(O>
-0ekR@NX.?o1GU[>2DL3t0etL=1,1[ANX.?p1,:R>2)1*s0f(O=1,:^ANX.?q0etI>1bk!r0ekI
-=1,:^ANX.?o1GU[@1bk!r0etL=1,CaANX.?p1,:R@1GOmq0f(O=1,LdANX.?q0etI@1,4dp0ek
-I=1,LdANX.?o1GU[B1,4dp0etL=1,UgANX.?p1,:RB0en[o0ekC=0ekRANX.Bp0etL=2DL3t1,
-1L>0etU@NX.?o0ekI=2DSP\?'6usE+*d$FEo!5NW_'j0JSRj0JP79NW_'k0JJLi0JG49NW_'j0
-eeUj0JP:9NW_'k0en[k0JG17?'6usEc6/2BlnD=Efp`l1Pc$e!HNtsP,Wd]Bp(ZC1G<\iBcqGP
-!KsFFD0p51EbTW@+DI!3I=$tW0JG17I?ITn1G<6JEc6.E@q0R&Bo!%XCkr@[9Th1bF(96/G9C+
-G!/L]4#CBrjEc6/b5)99'9TfI?FcnqE0p6@9!I^,%?'6usF(025>DNWB!Jgc4!/LZ3"+)\9P!5
-$bE+*j1ATD[0+E/H<P"UTbP,XU;F(96/G9CX`99MqpLbP!kI?I0MP":B3L]LeE1MpQ@CPW"4@W
-QmP!KpQ@!0TKlH\_]NI=$<s!.B9Y<K_u_P"CfUL]N[<OpR9ZP!5%OP!5%OEc6/2BlnD=BnukIs
-,r/#G^Y`G05tWMF!+\C;0-;fBOtmjBQTDRH\_]NP(SPjL]MOP!g9O0056S5Ou%,sGA(Q%B4uC6
-+EDCE@VKq*+DI!3OogehI?K5(AT2<oBkM+$H\`#UL]DjdK8<!DL]MpeK89MUP(S1G89/WmBOtm
-jBQSSDEc6/2BlnD=EejaZWKKo;!g7\SP(SQfF(K<(ASGdjFHUHeL]MpeK3aWr4?P9;ASs.SEb0
--*@<?O(GV=#MG]P!HBm=\PE+sQALf#gEBm=nGE+sQ<P%'5EP#<rHASGdjF<GO:G]T$WLf'=5Le
-*[e06_,@FD-J-Le*[e05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-*@<?O(G`l$h3IR&#O
-u"b$De*E93Kc@bA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]H
-E+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/code49 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp code49 0.0 2015050900 218104 234960
+%%BeginData: 1076 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/code49 {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /mode -1 def
+ /pos -1 def
+ /rows 0 def
+ /rowheight 8 def
+ /sepheight 1 def
+ /parse false def
+ /parsefnc false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /mode mode cvi def
+ /pos pos cvi def
+ /rows rows cvi def
+ /rowheight rowheight cvi def
+ /sepheight sepheight cvi def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Convert input into bytes accounting for FNC characters
+ /s1 -1 def /s2 -2 def /fn1 -3 def /fn2 -4 def /fn3 -5 def /ns -6 def
+ /fncvals <<
+ (FNC1) fn1
+ (FNC2) fn2
+ (FNC3) fn3
+ >> def
+ /msg barlen array def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+
+ % Character encodings
+ /charmap [
+ (0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
+ (A) (B) (C) (D) (E) (F) (G) (H) (I) (J) (K) (L) (M)
+ (N) (O) (P) (Q) (R) (S) (T) (U) (V) (W) (X) (Y) (Z)
+ (-) (.) ( ) ($) (/) (+) (%)
+ s1 s2 fn1 fn2 fn3 ns
+ ] def
+
+ % Invert charmap to give character to value map
+ /charvals 49 dict def
+ 0 1 48 {
+ /i exch def
+ charmap i get
+ dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals exch i put
+ } for
+
+ % Shifted character encodings
+ /combos
+ [ (1 ) (1A) (1B) (1C) (1D) (1E) (1F) (1G) (1H) (1I) (1J) (1K) (1L) (1M) (1N) (1O)
+ (1P) (1Q) (1R) (1S) (1T) (1U) (1V) (1W) (1X) (1Y) (1Z) (11) (12) (13) (14) (15)
+ ( ) (16) (17) (18) ( $) ( %) (19) (10) (1-) (1.) (1$) ( +) (1/) ( -) ( .) ( /)
+ ( 0) ( 1) ( 2) ( 3) ( 4) ( 5) ( 6) ( 7) ( 8) ( 9) (1+) (21) (22) (23) (24) (25)
+ (26) ( A) ( B) ( C) ( D) ( E) ( F) ( G) ( H) ( I) ( J) ( K) ( L) ( M) ( N) ( O)
+ ( P) ( Q) ( R) ( S) ( T) ( U) ( V) ( W) ( X) ( Y) ( Z) (27) (28) (29) (20) (2-)
+ (2.) (2A) (2B) (2C) (2D) (2E) (2F) (2G) (2H) (2I) (2J) (2K) (2L) (2M) (2N) (2O)
+ (2P) (2Q) (2R) (2S) (2T) (2U) (2V) (2W) (2X) (2Y) (2Z) (2$) (2/) (2+) (2%) (2 )
+ ] def
+ 0 1 127 {
+ /i exch def
+ combos i get dup 0 get /c1 exch def 1 get /c2 exch def
+ c1 49 eq { % s1 char
+ charvals i [ charvals s1 get charvals c2 get ] put
+ } if
+ c1 50 eq { % s2 char
+ charvals i [ charvals s2 get charvals c2 get ] put
+ } if
+ } for
+
+ /encodealpha {
+ charvals exch get
+ dup type /arraytype ne {1 array astore} if
+ dup cws exch j exch putinterval
+ length j add /j exch def
+ } bind def
+
+ /base48 {
+ 0 exch {48 sub exch 10 mul add} forall
+ [ 3 1 roll exch 1 sub {dup 48 mod exch 48 idiv} repeat ]
+ [ exch dup length 1 sub -1 0 {1 index exch get exch} for pop ]
+ dup cws exch j exch putinterval
+ length j add /j exch def
+ } bind def
+
+ /encodenumeric {
+ /nums exch def
+ /pre nums length dup 5 mod dup 2 ne {sub} {sub 5 sub} ifelse def
+ 0 5 pre 1 sub {nums exch 5 getinterval 3 exch base48} for
+ /nums nums pre nums length pre sub getinterval def
+ nums length
+ dup 1 eq {nums i get encodealpha} if
+ dup 3 eq {2 nums base48} if
+ dup 4 eq {3 [49 48 nums aload pop] base48} if
+ 7 eq {
+ 3 [49 48 nums 0 4 getinterval aload pop] base48
+ 2 nums 4 3 getinterval base48
+ } if
+ } bind def
+
+ % Pre-compute alphanumeric and numeric runlengths
+ /numericruns [ msglen {0} repeat 0 ] def
+ msglen 1 sub -1 0 {
+ /i exch def
+ msg i get
+ dup 48 ge exch 57 le and {
+ numericruns i numericruns i 1 add get 1 add put
+ } {
+ numericruns i 0 put
+ } ifelse
+ } for
+
+ % Autoselect mode
+ mode -1 eq {
+ { % common exit
+ pos -1 ne {/mode 3 def exit} if
+ numericruns 0 get 5 ge {/mode 2 def exit} if
+ charvals msg 0 get get
+ dup type /arraytype ne {pop /mode 0 def exit} if
+ 0 get 43 eq {4} {5} ifelse /mode exch def
+ exit
+ } loop
+ } if
+
+ /cws msglen 2 mul 1 add array def
+ /method (alpha) def /i -1 def /j -1 def
+
+ % Handle start for each mode
+ mode 0 eq mode 1 eq or {/method (alpha) def /i 0 def /j 0 def} if
+ mode 2 eq {/method (numeric) def /i 0 def /j 0 def} if
+ mode 3 eq {
+ /posval [
+ 12 22
+ 13 23 33
+ 14 24 34 44
+ 15 25 35 45 55
+ 16 26 36 46 56 66
+ 17 27 37 47 57 67 77
+ 18 28 38 48 58 68 78 88
+ 19 29 39 49 59 69 79 89 99
+ ] def
+ cws 0 0 1 43 {dup posval exch get pos ne {pop} if} for 1 add put
+ /method (alpha) def /i 0 def /j 1 def
+ } if
+ mode 4 eq mode 5 eq or {
+ cws 0 charvals msg 0 get get 1 get put
+ /method (alpha) def /i 1 def /j 1 def
+ } if
+
+ % Encode remainder
+ {
+ i msglen eq {exit} if
+ { % not a loop but common exit point
+ method (alpha) eq {
+ numericruns i get 5 ge {
+ ns encodealpha
+ /method (numeric) def
+ exit
+ } if
+ msg i get encodealpha
+ /i i 1 add def
+ exit
+ } if
+ method (numeric) eq {
+ numericruns i get 5 lt {
+ ns encodealpha
+ /method (alpha) def
+ exit
+ } if
+ msg i numericruns i get getinterval encodenumeric
+ /i i numericruns i get add def
+ exit
+ } if
+ } loop
+ } loop
+ /cws cws 0 j getinterval def
+
+ % Basic metrics for the each symbol
+ % r dcws
+ /metrics [
+ [ 2 9 ]
+ [ 3 16 ]
+ [ 4 23 ]
+ [ 5 30 ]
+ [ 6 37 ]
+ [ 7 42 ]
+ [ 8 49 ]
+ ] def
+
+ % Select metrics of an appropriate symbol
+ /urows rows def
+ /i 0 def
+ { % loop
+ /m metrics i get def
+ /r m 0 get def % Columns in symbol
+ /dcws m 1 get def % Data codewords in symbol
+ /okay true def
+ urows 0 ne urows r ne and {/okay false def} if
+ cws length dcws gt {/okay false def} if
+ okay {exit} if
+ /i i 1 add def
+ } loop
+
+ % Extend cws to ncws codewords by addition of pad characters
+ /cws [ cws aload pop dcws cws length sub {48} repeat ] def
+
+ % Populate code character array and add row check characters
+ /ccs r 8 mul array def
+ /j 0 def
+ 0 1 r 2 sub {
+ /i exch def
+ /cc cws j 7 getinterval def
+ ccs i 8 mul cc putinterval
+ ccs i 8 mul 7 add 0 cc {add} forall 49 mod put
+ /j j 7 add def
+ } for
+ j dcws lt {
+ ccs ccs length 8 sub cws j dcws j sub getinterval putinterval
+ } if
+
+ % Place row count character
+ /cr7 r 2 sub 7 mul mode add def
+ ccs ccs length 2 sub cr7 put
+
+ % Calculate the symbol check characters
+ [ 1 9 31 26 2 12 17 23 37 18 22 6 27 44 15 43 39
+ 11 13 5 41 33 36 8 4 32 3 19 40 25 29 10 24 30 ]
+ dup [ exch 20 exch 0 32 getinterval aload pop ] /weightx exch def
+ dup [ exch 16 exch 1 32 getinterval aload pop ] /weighty exch def
+ [ exch 38 exch 2 32 getinterval aload pop ] /weightz exch def
+ /calccheck {
+ /weights exch def
+ /score 0 def
+ 0 1 r 1 sub 8 mul 2 idiv 1 sub {
+ /i exch def
+ ccs i 2 mul get 49 mul ccs i 2 mul 1 add get add
+ weights i 1 add get mul /score exch score add def
+ } for
+ score
+ } bind def
+ /lastrow ccs ccs length 8 sub 8 getinterval def
+
+ % wr1 check character
+ r 7 ge {
+ cr7 weightz 0 get mul weightz calccheck add 2401 mod
+ dup 49 idiv exch 49 mod 2 array astore
+ lastrow 0 3 -1 roll putinterval
+ } if
+ /wr1 lastrow 0 get 49 mul lastrow 1 get add def
+
+ % wr2 check character
+ cr7 weighty 0 get mul weighty calccheck add
+ wr1 weighty r 4 mul 3 sub get mul add
+ 2401 mod dup /wr2 exch def
+ dup 49 idiv exch 49 mod 2 array astore
+ lastrow 2 3 -1 roll putinterval
+
+ % wr3 check character
+ cr7 weightx 0 get mul weightx calccheck add
+ wr1 weightx r 4 mul 3 sub get mul add
+ wr2 weightx r 4 mul 2 sub get mul add
+ 2401 mod
+ dup 49 idiv exch 49 mod 2 array astore
+ lastrow 4 3 -1 roll putinterval
+
+ % Place last row check character
+ ccs ccs length 8 sub 7 getinterval 0 exch {add} forall 49 mod
+ ccs ccs length 1 sub 3 -1 roll put
+
+ /patterns [
+ [ % Even parity
+ (11521132) (25112131) (14212132) (25121221) (14221222) (12412132) (23321221)
+ (12421222) (21521221) (15112222) (15121312) (13312222) (24221311) (13321312)
+ (11512222) (22421311) (11521312) (25112311) (14212312) (23312311) (12412312)
+ (21512311) (16121131) (14321131) (12521131) (15212131) (15221221) (13412131)
+ (13421221) (11612131) (16112221) (16121311) (14312221) (14321311) (12512221)
+ (12521311) (15212311) (13412311) (11612311) (11131135) (31131133) (51131131)
+ (21122134) (41122132) (21131224) (41131222) (11113135) (31113133) (51113131)
+ (11122225) (31122223) (51122221) (11131315) (31131313) (51131311) (21113224)
+ (41113222) (21122314) (41122312) (11113315) (31113313) (51113311) (12131134)
+ (32131132) (21231133) (41231131) (22122133) (42122131) (11222134) (22131223)
+ (42131221) (11231224) (31231222) (12113134) (32113132) (12122224) (32122222)
+ (12131314) (32131312) (21231313) (41231311) (22113223) (42113221) (11213224)
+ (22122313) (42122311) (11222314) (31222312) (12113314) (32113312) (21213313)
+ (41213311) (13131133) (33131131) (22231132) (11331133) (31331131) (23122132)
+ (12222133) (23131222) (12231223) (32231221) (21331222) (13113133) (33113131)
+ (13122223) (33122221) (11313133) (13131313) (33131311) (11322223) (22231312)
+ (11331313) (31331311) (23113222) (12213223) (23122312) (12222313) (32222311)
+ (21322312) (13113313) (33113311) (22213312) (11313313) (31313311) (14131132)
+ (23231131) (12331132) (21431131) (24122131) (13222132) (24131221) (13231222)
+ (11422132) (22331221) (11431222) (14113132) (14122222) (12313132) (14131312)
+ (12322222) (23231311) (12331312) (21431311) (24113221) (13213222) (24122311)
+ (13222312) (11413222) (22322311) (11422312) (14113312) (23213311) (12313312)
+ (21413311) (15131131) (13331131) (14222131) (14231221) (12422131) (12431221)
+ (15113131) (15122221) (13313131) (15131311) (13322221) (11513131) (13331311)
+ (11522221) (14213221) (14222311) (12413221) (12422311) (15113311) (13313311)
+ (11513311) (11141134) (31141132) (21132133) (41132131) (21141223) (41141221)
+ (11123134) (31123132) (11132224) (31132222) (11141314) (31141312) (21114133)
+ (41114131) (21123223) (41123221) (21132313) (41132311) (11114224) (31114222)
+ (11123314) (31123312) (21114313) (41114311) (12141133) (32141131) (21241132)
+ (22132132) (11232133) (22141222) (11241223) (31241221) (12123133) (32123131)
+ (12132223) (32132221) (12141313) (32141311) (21241312) (22114132) (11214133)
+ (22123222) (11223223) (22132312) (11232313) (31232311) (12114223) (32114221)
+ (12123313) (32123311) (21223312) (22114312) (11214313) (31214311) (13141132)
+ (22241131) (11341132) (23132131) (12232132) (23141221) (12241222) (21341221)
+ (13123132) (13132222) (11323132) (13141312) (11332222) (22241311) (11341312)
+ (23114131) (12214132) (23123221) (12223222) (23132311) (12232312) (21332311)
+ (13114222) (13123312) (11314222) (22223311) (11323312) (23114311) (12214312)
+ (21314311) (14141131) (12341131) (13232131) (13241221) (11432131) (14123131)
+ (14132221) (12323131) (14141311) (12332221) (12341311) (13214131) (13223221)
+ (11414131) (13232311) (11423221) (11432311) (14114221) (14123311) (12314221)
+ (12323311) (13214311) (11414311) (11151133) (31151131) (21142132) (21151222)
+ (11133133) (31133131) (11142223) (31142221) (11151313) (31151311) (21124132)
+ (21133222) (21142312) (11115133) (31115131) (11124223) (31124221) (11133313)
+ (31133311) (21115222) (21124312) (12151132) (21251131) (22142131) (11242132)
+ (22151221) (11251222) (12133132) (12142222) (12151312) (21251311) (22124131)
+ (11224132) (22133221) (11233222) (22142311) (11242312) (12115132) (12124222)
+ (12133312) (21233311) (22115221) (11215222) (22124311) (11224312) (13151131)
+ (12242131) (12251221) (13133131) (13142221) (11333131) (13151311) (11342221)
+ (12224131) (12233221) (12242311) (13115131) (13124221) (11315131) (13133311)
+ (11324221) (11333311) (12215221) (12224311) (11161132) (21152131) (21161221)
+ (11143132) (11152222) (11161312) (21134131) (21143221) (21152311) (11125132)
+ (11134222) (11143312) (21116131) (21125221) (21134311) (12161131) (11252131)
+ (12143131) (12152221) (12161311) (11234131) (11243221) (11252311) (12125131)
+ (12134221) (12143311) (11216131) (11225221) (11234311) (11111236) (31111234)
+ (51111232) (21111325) (41111323) (61111321) (11111416) (31111414) (51111412)
+ (31211143) (51211141) (12111235) (32111233) (52111231) (21211234) (41211232)
+ (22111324) (42111322) (11211325) (31211323) (51211321) (12111415) (32111413)
+ (52111411) (21211414) (41211412) (12211144) (32211142) (21311143) (41311141)
+ (13111234) (33111232) (22211233) (42211231) (11311234) (31311232) (23111323)
+ (43111321) (12211324) (32211322) (21311323) (41311321) (13111414) (33111412)
+ (22211413) (42211411) (11311414) (31311412) (13211143) (33211141) (22311142)
+ (11411143) (31411141) (14111233) (34111231) (23211232) (12311233) (32311231)
+ (21411232) (24111322) (13211323) (33211321) (22311322) (11411323) (31411321)
+ (14111413) (34111411) (23211412) (12311413) (32311411) (21411412) (14211142)
+ (23311141) (12411142) (21511141) (15111232) (24211231) (13311232) (22411231)
+ (11511232) (25111321) (14211322) (23311321) (12411322) (21511321) (15111412)
+ (24211411) (13311412) (22411411) (11511412) (15211141) (13411141) (11611141)
+ (16111231) (14311231) (12511231) (15211321) (13411321) (11611321) (16111411)
+ (14311411) (12511411) (21121144) (41121142) (11112145) (31112143) (51112141)
+ (11121235) (31121233) (51121231) (21112234) (41112232) (21121324) (41121322)
+ (11112325) (31112323) (51112321) (11121415) (31121413) (51121411) (21112414)
+ (41112412) (22121143) (42121141) (11221144) (31221142) (12112144) (32112142)
+ (12121234) (32121232) (21221233) (41221231) (22112233) (42112231) (11212234)
+ (22121323) (42121321) (11221324) (31221322) (12112324) (32112322) (12121414)
+ (32121412) (21221413) (41221411) (22112413) (42112411) (11212414) (31212412)
+ (23121142) (12221143) (32221141) (21321142) (13112143) (33112141) (13121233)
+ (33121231) (11312143) (22221232) (11321233) (31321231) (23112232) (12212233)
+ (23121322) (12221323) (32221321) (21321322) (13112323) (33112321) (13121413)
+ (33121411) (11312323) (22221412) (11321413) (31321411) (23112412) (12212413)
+ (32212411) (21312412) (24121141) (13221142) (22321141) (11421142) (14112142)
+ (14121232) (12312142) (23221231) (12321232) (21421231) (24112231) (13212232)
+ (24121321) (13221322) (11412232) (22321321) (11421322) (14112322) (14121412)
+ (12312322) (23221411) (12321412) (21421411) (24112411) (13212412) (22312411)
+ (11412412) (14221141) (12421141) (15112141) (15121231) (13312141) (13321231)
+ (11512141) (11521231) (14212231) (14221321) (12412231) (12421321) (15112321)
+ (15121411) (13312321) (13321411) (11512321) (11521411) (14212411) (12412411)
+ (21131143) (41131141) (11122144) (31122142) (11131234) (31131232) (21113143)
+ (41113141) (21122233) (41122231) (21131323) (41131321) (11113234) (31113232)
+ (11122324) (31122322) (11131414) (31131412) (21113323) (41113321) (21122413)
+ (41122411) (11113414) (31113412) (22131142) (11231143) (31231141) (12122143)
+ (32122141) (12131233) (32131231) (21231232) (22113142) (11213143) (22122232)
+ (11222233) (22131322) (11231323) (31231321) (12113233) (32113231) (12122323)
+ (32122321) (12131413) (32131411) (21231412) (22113322) (11213323) (22122412)
+ (11222413) (31222411) (12113413) (32113411) (21213412) (23131141) (12231142)
+ (21331141) (13122142) (13131232) (11322142) (22231231) (11331232) (23113141)
+ (12213142) (23122231) (12222232) (23131321) (12231322) (21331321) (13113232)
+ (13122322) (11313232) (13131412) (11322322) (22231411) (11331412) (23113321)
+ (12213322) (23122411) (12222412) (21322411) (13113412) (22213411) (11313412)
+ (13231141) (11431141) (14122141) (14131231) (12322141) (12331231) (13213141)
+ (13222231) (11413141) (13231321) (11422231) (11431321) (14113231) (14122321)
+ (12313231) (14131411) (12322321) (12331411) (13213321) (13222411) (11413321)
+ (11422411) (14113411) (12313411) (21141142) (11132143) (31132141) (11141233)
+ (31141231) (21123142) (21132232) (21141322) (11114143) (31114141) (11123233)
+ (31123231) (11132323) (31132321) (11141413) (31141411) (21114232) (21123322)
+ (21132412) (11114323) (31114321) (11123413) (31123411) (22141141) (11241142)
+ (12132142) (12141232) (21241231) (22123141) (11223142) (22132231) (11232232)
+ (22141321) (11241322) (12114142) (12123232) (12132322) (12141412) (21241411)
+ (22114231) (11214232) (22123321) (11223322) (22132411) (11232412) (12114322)
+ (12123412) (21223411) (12241141) (13132141) (13141231) (11332141) (11341231)
+ (12223141) (12232231) (12241321) (13114141) (13123231) (11314141) (13132321)
+ (11323231) (13141411) (11332321) (11341411) (12214231) (12223321) (12232411)
+ (13114321) (13123411) (11314321) (11323411) (21151141) (11142142) (11151232)
+ (21133141) (21142231) (21151321) (11124142) (11133232) (11142322) (11151412)
+ (21115141) (21124231) (21133321) (21142411) (11115232) (11124322) (11133412)
+ (11251141) (12142141) (12151231) (11233141) (11242231) (11251321) (12124141)
+ (12133231) (12142321) (12151411) (11215141) (11224231) (11233321) (11242411)
+ (12115231) (12124321) (12133411) (11152141) (11161231) (11134141) (11143231)
+ (11152321) (11161411) (11116141) (11125231) (11134321) (11143411) (21111244)
+ (41111242) (11111335) (31111333) (51111331) (21111424) (41111422) (11111515)
+ (31111513) (51111511) (21211153) (41211151) (22111243) (42111241) (11211244)
+ (31211242) (12111334) (32111332) (21211333) (41211331) (22111423) (42111421)
+ (11211424) (31211422) (12111514) (32111512) (21211513) (41211511) (22211152)
+ (11311153) (31311151) (23111242) (12211243) (32211241) (21311242) (13111333)
+ (33111331) (22211332) (11311333) (31311331) (23111422) (12211423) (32211421)
+ (21311422) (13111513) (33111511) (22211512) (11311513) (31311511) (23211151)
+ (12311152) (21411151) (24111241) (13211242) (22311241) (11411242) (14111332)
+ (23211331) (12311332) (21411331) (24111421) (13211422) (22311421) (11411422)
+ (14111512) (23211511) (12311512) (21411511) (13311151) (11511151) (14211241)
+ (12411241) (15111331) (13311331) (11511331) (14211421) (12411421) (15111511)
+ (13311511) (11511511) (31121152) (21112153) (41112151) (21121243) (41121241)
+ (11112244) (31112242) (11121334) (31121332) (21112333) (41112331) (21121423)
+ (41121421) (11112424) (31112422) (11121514) (31121512) (21112513) (41112511)
+ (12121153) (32121151) (21221152) (22112152) (11212153) (22121242) (11221243)
+ (31221241) (12112243) (32112241) (12121333) (32121331) (21221332) (22112332)
+ (11212333) (22121422) (11221423) (31221421) (12112423) (32112421) (12121513)
+ (32121511) (21221512) (22112512) (11212513) (31212511) (13121152) (22221151)
+ (11321152) (23112151) (12212152) (23121241) (12221242) (21321241) (13112242)
+ (13121332) (11312242) (22221331) (11321332) (23112331) (12212332) (23121421)
+ (12221422) (21321421) (13112422) (13121512) (11312422) (22221511) (11321512)
+ (23112511) (12212512) (21312511) (14121151) (12321151) (13212151) (13221241)
+ (11412151) (11421241) (14112241) (14121331) (12312241) (12321331) (13212331)
+ (13221421) (11412331) (11421421) (14112421) (14121511) (12312421) (12321511)
+ (13212511) (11412511) (11131153) (31131151) (21122152) (21131242) (11113153)
+ (31113151) (11122243) (31122241) (11131333) (31131331) (21113242) (21122332)
+ (21131422) (11113333) (31113331) (11122423) (31122421) (11131513) (31131511)
+ (21113422) (21122512) (12131152) (21231151) (22122151) (11222152) (22131241)
+ (11231242) (12113152) (12122242) (12131332) (21231331) (22113241) (11213242)
+ (22122331) (11222332) (22131421) (11231422) (12113332) (12122422) (12131512)
+ (21231511) (22113421) (11213422) (22122511) (11222512) (13131151) (11331151)
+ (12222151) (12231241) (13113151) (13122241) (11313151) (13131331) (11322241)
+ (11331331) (12213241) (12222331) (12231421) (13113331) (13122421) (11313331)
+ (13131511) (11322421) (11331511) (12213421) (12222511) (11141152) (21132151)
+ (21141241) (11123152) (11132242) (11141332) (21114151) (21123241) (21132331)
+ (21141421) (11114242) (11123332) (11132422) (11141512) (21114331) (21123421)
+ (21132511) (12141151) (11232151) (11241241) (12123151) (12132241) (12141331)
+ (11214151) (11223241) (11232331) (11241421) (12114241) (12123331) (12132421)
+ (12141511) (11214331) (11223421) (11232511) (11151151) (11133151) (11142241)
+ (11151331) (11115151) (11124241) (11133331) (11142421) (11151511) (11111254)
+ (31111252) (21111343) (41111341) (11111434) (31111432) (21111523) (41111521)
+ (11111614) (31111612) (31211161) (12111253) (32111251) (21211252) (22111342)
+ (11211343) (31211341) (12111433) (32111431) (21211432) (22111522) (11211523)
+ (31211521) (12111613) (32111611) (21211612) (12211162) (21311161) (13111252)
+ (22211251) (11311252) (23111341) (12211342) (21311341) (13111432) (22211431)
+ (11311432) (23111521) (12211522) (21311521) (13111612) (22211611) (11311612)
+ (13211161) (11411161) (14111251) (12311251) (13211341) (11411341) (14111431)
+ (12311431) (13211521) (11411521) (14111611) (12311611) (21121162) (11112163)
+ (31112161) (11121253) (31121251) (21112252) (21121342) (11112343) (31112341)
+ (11121433) (31121431) (21112432) (21121522) (11112523) (31112521) (11121613)
+ (31121611) (22121161) (11221162) (12112162) (12121252) (21221251) (22112251)
+ (11212252) (22121341) (11221342) (12112342) (12121432) (21221431) (22112431)
+ (11212432) (22121521) (11221522) (12112522) (12121612) (21221611) (12221161)
+ (13112161) (13121251) (11312161) (11321251) (32121115) (52121113) (21221116)
+ (41221114) (61221112) (22112116) (42112114) (31212115) (51212113) (13121116)
+ (33121114) (22221115) (42221113) (11321116) (31321114) (51321112) (23112115)
+ (43112113) (12212116) (32212114) (52212112) (21312115) (41312113) (61312111)
+ (14121115) (34121113) (23221114) (43221112) (12321115) (32321113) (52321111)
+ (21421114) (41421112) (24112114) (13212115) (33212113) (22312114) (42312112)
+ (11412115) (31412113) (51412111) (15121114) (24221113) (13321114) (33321112)
+ (22421113) (42421111) (11521114) (31521112) (25112113) (14212114) (34212112)
+ (23312113) (43312111) (12412114) (32412112) (21512113) (41512111) (16121113)
+ (25221112) (14321113) (34321111) (23421112) (12521113) (32521111) (15212113)
+ (24312112) (13412113) (33412111) (22512112) (11612113) (31612111) (31131115)
+ (51131113) (21122116) (41122114) (61122112) (31113115) (51113113) (12131116)
+ (32131114) (52131112) (21231115) (41231113) (61231111) (22122115) (42122113)
+ (11222116) (31222114) (51222112) (12113116) (32113114) (52113112) (21213115)
+ (41213113) (61213111) (13131115) (33131113) (22231114) (42231112) (11331115)
+ (31331113) (51331111) (23122114) (43122112) (12222115) (32222113) (52222111)
+ (21322114) (41322112) (13113115) (33113113) (22213114) (42213112) (11313115)
+ (31313113) (51313111) (14131114) (34131112) (23231113) (43231111) (12331114)
+ (32331112) (21431113) (41431111) (24122113) (13222114) (33222112) (22322113)
+ (42322111) (11422114) (31422112) (14113114) (34113112) (23213113) (43213111)
+ (12313114) (32313112) (21413113) (41413111) (15131113) (24231112) (13331113)
+ (33331111) (22431112) (25122112) (14222113) (34222111) (23322112) (12422113)
+ (32422111) (21522112) (15113113) (24213112) (13313113) (33313111) (22413112)
+ (11513113) (31513111) (16131112) (25231111) (14331112) (23431111) (15222112)
+ (24322111) (13422112) (22522111) (16113112) (25213111) (14313112) (23413111)
+ (12513112) (21613111) (11141116) (31141114) (51141112) (21132115) (41132113)
+ (61132111) (11123116) (31123114) (51123112) (21114115) (41114113) (61114111)
+ (12141115) (32141113) (52141111) (21241114) (41241112) (22132114) (42132112)
+ (11232115) (31232113) (51232111) (12123115) (32123113) (52123111) (21223114)
+ (41223112) (22114114) (42114112) (11214115) (31214113) (51214111) (13141114)
+ (33141112) (22241113) (42241111) (11341114) (31341112) (23132113) (43132111)
+ (12232114) (32232112) (21332113) (41332111) (13123114) (33123112) (22223113)
+ (42223111) (11323114) (31323112) (23114113) (43114111) (12214114) (32214112)
+ (21314113) (41314111) (14141113) (34141111) (23241112) (12341113) (32341111)
+ (24132112) (13232113) (33232111) (22332112) (11432113) (31432111) (14123113)
+ (34123111) (23223112) (12323113) (32323111) (21423112) (24114112) (13214113)
+ (33214111) (22314112) (11414113) (31414111) (15141112) (24241111) (13341112)
+ (25132111) (14232112) (23332111) (12432112) (15123112) (24223111) (13323112)
+ (22423111) (11523112) (25114111) (14214112) (23314111) (12414112) (21514111)
+ (16141111) (14341111) (15232111) (13432111) (16123111) (14323111) (12523111)
+ (15214111) (13414111) (11614111) (11151115) (31151113) (51151111) (21142114)
+ (41142112) (11133115) (31133113) (51133111) (21124114) (41124112) (11115115)
+ (31115113) (51115111) (12151114) (32151112) (21251113) (41251111) (22142113)
+ (42142111) (11242114) (31242112) (12133114) (32133112) (21233113) (41233111)
+ (22124113) (42124111) (11224114) (31224112) (12115114) (32115112) (21215113)
+ (41215111) (13151113) (33151111) (22251112) (23142112) (12242113) (32242111)
+ (21342112) (13133113) (33133111) (22233112) (11333113) (31333111) (23124112)
+ (12224113) (32224111) (21324112) (13115113) (33115111) (22215112) (11315113)
+ (31315111) (14151112) (23251111) (24142111) (13242112) (22342111) (14133112)
+ (23233111) (12333112) (21433111) (24124111) (13224112) (22324111) (11424112)
+ (14115112) (23215111) (12315112) (21415111) (15151111) (14242111) (15133111)
+ (13333111) (14224111) (12424111) (15115111) (13315111) (11515111) (11161114)
+ (31161112) (21152113) (41152111) (11143114) (31143112) (21134113) (41134111)
+ (11125114) (31125112) (21116113) (41116111) (12161113) (32161111) (22152112)
+ (11252113) (31252111) (12143113) (32143111) (21243112) (22134112) (11234113)
+ (31234111) (12125113) (32125111) (21225112) (22116112) (11216113) (31216111)
+ (13161112) (23152111) (12252112) (13143112) (22243111) (11343112) (23134111)
+ (12234112) (21334111) (13125112) (22225111) (11325112) (23116111) (12216112)
+ (21316111) (14161111) (13252111) (14143111) (12343111) (13234111) (11434111)
+ (14125111) (12325111) (13216111) (11416111) (31111216) (51111214) (31211125)
+ (51211123) (32111215) (52111213) (21211216) (41211214) (61211212) (12211126)
+ (32211124) (52211122) (21311125) (41311123) (61311121) (13111216) (33111214)
+ (22211215) (42211213) (11311216) (31311214) (51311212) (13211125) (33211123)
+ (22311124) (42311122) (11411125) (31411123) (51411121) (14111215) (34111213)
+ (23211214) (43211212) (12311215) (32311213) (52311211) (21411214) (41411212)
+ (14211124) (34211122) (23311123) (43311121) (12411124) (32411122) (21511123)
+ (41511121) (15111214) (24211213) (13311214) (33311212) (22411213) (42411211)
+ (11511214) (31511212) (15211123) (24311122) (13411123) (33411121) (22511122)
+ (11611123) (31611121) (16111213) (25211212) (14311213) (34311211) (23411212)
+ (12511213) (32511211) (21611212) (21121126) (41121124) (61121122) (31112125)
+ (51112123) (31121215) (51121213) (21112216) (41112214) (61112212) (22121125)
+ (42121123) (11221126) (31221124) (51221122) (12112126) (32112124) (52112122)
+ (12121216) (32121214) (52121212) (21221215) (41221213) (61221211) (22112215)
+ (42112213) (11212216) (31212214) (51212212) (23121124) (43121122) (12221125)
+ (32221123) (52221121) (21321124) (41321122) (13112125) (33112123) (13121215)
+ (33121213) (11312125) (22221214) (42221212) (11321215) (31321213) (51321211)
+ (23112214) (43112212) (12212215) (32212213) (52212211) (21312214) (41312212)
+ (24121123) (13221124) (33221122) (22321123) (42321121) (11421124) (31421122)
+ (14112124) (34112122) (14121214) (34121212) (12312124) (23221213) (43221211)
+ (12321214) (32321212) (21421213) (41421211) (24112213) (13212214) (33212212)
+ (22312213) (42312211) (11412214) (31412212) (25121122) (14221123) (34221121)
+ (23321122) (12421123) (32421121) (21521122) (15112123) (15121213) (13312123)
+ (24221212) (13321213) (33321211) (11512123) (22421212) (11521213) (31521211)
+ (25112212) (14212213) (34212211) (23312212) (12412213) (32412211) (21512212)
+ (15221122) (24321121) (13421122) (22521121) (16112122) (16121212) (14312122)
+ (25221211) (14321212) (12512122) (23421211) (12521212) (15212212) (24312211)
+ (13412212) (22512211) (11612212) (21131125) (41131123) (61131121) (11122126)
+ (31122124) (51122122) (11131216) (31131214) (51131212) (21113125) (41113123)
+ (61113121) (21122215) (41122213) (61122211) (11113216) (31113214) (51113212)
+ (22131124) (42131122) (11231125) (31231123) (51231121) (12122125) (32122123)
+ (52122121) (12131215) (32131213) (52131211) (21231214) (41231212) (22113124)
+ (42113122) (11213125) (22122214) (42122212) (11222215) (31222213) (51222211)
+ (12113215) (32113213) (52113211) (21213214) (41213212) (23131123) (43131121)
+ (12231124) (32231122) (21331123) (41331121) (13122124) (33122122) (13131214)
+ (33131212) (11322124) (22231213) (42231211) (11331214) (31331212) (23113123)
+ (43113121) (12213124) (23122213) (43122211) (12222214) (32222212) (21322213)
+ (41322211) (13113214) (33113212) (22213213) (42213211) (11313214) (31313212)
+ (24131122) (13231123) (33231121) (22331122) (11431123) (31431121) (14122123)
+ (34122121) (14131213) (34131211) (12322123) (23231212) (12331213) (32331211)
+ (21431212) (24113122) (13213123) (24122212) (13222213) (33222211) (11413123)
+ (22322212) (11422213) (31422211) (14113213) (34113211) (23213212) (12313213)
+ (32313211) (21413212) (25131121) (14231122) (23331121) (12431122) (15122122)
+ (15131212) (13322122) (24231211) (13331212) (11522122) (22431211) (25113121)
+ (14213122) (25122211) (14222212) (12413122) (23322211) (12422212) (21522211)
+ (15113212) (24213211) (13313212) (22413211) (11513212) (15231121) (13431121)
+ (16122121) (16131211) (14322121) (14331211) (12522121) (15213121) (15222211)
+ (13413121) (13422211) (11613121) (16113211) (14313211) (12513211) (21141124)
+ (41141122) (11132125) (31132123) (51132121) (11141215) (31141213) (51141211)
+ (21123124) (41123122) (21132214) (41132212) (11114125) (31114123) (51114121)
+ (11123215) (31123213) (51123211) (21114214) (41114212) (22141123) (42141121)
+ (11241124) (31241122) (12132124) (32132122) (12141214) (32141212) (21241213)
+ (41241211) (22123123) (42123121) (11223124) (22132213) (42132211) (11232214)
+ (31232212) (12114124) (32114122) (12123214) (32123212) (21223213) (41223211)
+ (22114213) (42114211) (11214214) (31214212) (23141122) (12241123) (32241121)
+ (21341122) (13132123) (33132121) (13141213) (33141211) (11332123) (22241212)
+ (11341213) (31341211) (23123122) (12223123) (23132212) (12232213) (32232211)
+ (21332212) (13114123) (33114121) (13123213) (33123211) (11314123) (22223212)
+ (11323213) (31323211) (23114212) (12214213) (32214211) (21314212) (24141121)
+ (13241122) (22341121) (14132122) (14141212) (12332122) (23241211) (12341212)
+ (24123121) (13223122) (24132211) (13232212) (11423122) (22332211) (11432212)
+ (14114122) (14123212) (12314122) (23223211) (12323212) (21423211) (24114211)
+ (13214212) (22314211) (11414212) (14241121) (15132121) (15141211) (13332121)
+ (13341211) (14223121) (14232211) (12423121) (12432211) (15114121) (15123211)
+ (13314121) (13323211) (11514121) (11523211) (14214211) (12414211) (21151123)
+ (41151121) (11142124) (31142122) (11151214) (31151212) (21133123) (41133121)
+ (21142213) (41142211) (11124124) (31124122) (11133214) (31133212) (21115123)
+ (41115121) (21124213) (41124211) (11115214) (31115212) (22151122) (11251123)
+ (31251121) (12142123) (32142121) (12151213) (32151211) (21251212) (22133122)
+ (11233123) (22142212) (11242213) (31242211) (12124123) (32124121) (12133213)
+ (32133211) (21233212) (22115122) (11215123) (22124212) (11224213) (31224211)
+ (12115213) (32115211) (21215212) (23151121) (12251122) (13142122) (13151212)
+ (11342122) (22251211) (23133121) (12233122) (23142211) (12242212) (21342211)
+ (13124122) (13133212) (11324122) (22233211) (11333212) (23115121) (12215122)
+ (23124211) (12224212) (21324211) (13115212) (22215211) (11315212) (13251121)
+ (14142121) (14151211) (12342121) (13233121) (13242211) (11433121) (14124121)
+ (14133211) (12324121) (12333211) (13215121) (13224211) (11415121) (11424211)
+ (14115211) (12315211) (21161122) (11152123) (31152121) (11161213) (31161211)
+ (21143122) (21152212) (11134123) (31134121) (11143213) (31143211) (21125122)
+ (21134212) (11116123) (31116121) (11125213) (31125211) (22161121) (12152122)
+ (12161212) (22143121) (11243122) (22152211) (11252212) (12134122) (12143212)
+ (21243211) (22125121) (11225122) (22134211) (11234212) (12116122) (12125212)
+ (21225211) (13152121) (13161211) (12243121) (12252211) (13134121) (13143211)
+ (11334121) (11343211) (12225121) (12234211) (13116121) (13125211) (11316121)
+ (11325211) (21111226) (41111224) (61111222) (31111315) (51111313) (21211135)
+ (41211133) (61211131) (22111225) (42111223) (11211226) (31211224) (51211222)
+ (12111316) (32111314) (52111312) (21211315) (41211313) (61211311) (22211134)
+ (42211132) (11311135) (31311133) (51311131) (23111224) (43111222) (12211225)
+ (32211223) (52211221) (21311224) (41311222) (13111315) (33111313) (22211314)
+ (42211312) (11311315) (31311313) (51311311) (23211133) (43211131) (12311134)
+ (32311132) (21411133) (41411131) (24111223) (13211224) (33211222) (22311223)
+ (42311221) (11411224) (31411222) (14111314) (34111312) (23211313) (43211311)
+ (12311314) (32311312) (21411313) (41411311) (24211132) (13311133) (33311131)
+ (22411132) (11511133) (31511131) (25111222) (14211223) (34211221) (23311222)
+ (12411223) (32411221) (21511222) (15111313) (24211312) (13311313) (33311311)
+ (22411312) (11511313) (31511311) (25211131) (14311132) (23411131) (12511132)
+ (21611131) (15211222) (24311221) (13411222) (22511221) (11611222) (16111312)
+ (25211311) (14311312) (23411311) (12511312) (21611311) (31121134) (51121132)
+ (21112135) (41112133) (61112131) (21121225) (41121223) (61121221) (11112226)
+ (31112224) (51112222) (11121316) (31121314) (51121312) (21112315) (41112313)
+ (61112311) (12121135) (32121133) (52121131) (21221134) (41221132) (22112134)
+ (42112132) (11212135) (22121224) (42121222) (11221225) (31221223) (51221221)
+ (12112225) (32112223) (52112221) (12121315) (32121313) (52121311) (21221314)
+ (41221312) (22112314) (42112312) (11212315) (31212313) (51212311) (13121134)
+ (33121132) (22221133) (42221131) (11321134) (31321132) (23112133) (43112131)
+ (12212134) (23121223) (43121221) (12221224) (32221222) (21321223) (41321221)
+ (13112224) (33112222) (13121314) (33121312) (11312224) (22221313) (42221311)
+ (11321314) (31321312) (23112313) (43112311) (12212314) (32212312) (21312313)
+ (41312311) (14121133) (34121131) (23221132) (12321133) (32321131) (21421132)
+ (24112132) (13212133) (24121222) (13221223) (33221221) (11412133) (22321222)
+ (11421223) (31421221) (14112223) (34112221) (14121313) (34121311) (12312223)
+ (23221312) (12321313) (32321311) (21421312) (24112312) (13212313) (33212311)
+ (22312312) (11412313) (31412311) (15121132) (24221131) (13321132) (22421131)
+ ] [ % Odd parity
+ (22121116) (42121114) (31221115) (51221113) (32112115) (52112113) (21212116)
+ (41212114) (61212112) (23121115) (43121113) (12221116) (32221114) (52221112)
+ (21321115) (41321113) (61321111) (13112116) (33112114) (22212115) (42212113)
+ (11312116) (31312114) (51312112) (24121114) (13221115) (33221113) (22321114)
+ (42321112) (11421115) (31421113) (51421111) (14112115) (34112113) (23212114)
+ (43212112) (12312115) (32312113) (52312111) (21412114) (41412112) (25121113)
+ (14221114) (34221112) (23321113) (43321111) (12421114) (32421112) (21521113)
+ (41521111) (15112114) (24212113) (13312114) (33312112) (22412113) (42412111)
+ (11512114) (31512112) (15221113) (24321112) (13421113) (33421111) (22521112)
+ (16112113) (25212112) (14312113) (34312111) (23412112) (12512113) (32512111)
+ (21612112) (21131116) (41131114) (61131112) (31122115) (51122113) (21113116)
+ (41113114) (61113112) (22131115) (42131113) (11231116) (31231114) (51231112)
+ (12122116) (32122114) (52122112) (21222115) (41222113) (61222111) (22113115)
+ (42113113) (11213116) (31213114) (51213112) (23131114) (43131112) (12231115)
+ (32231113) (52231111) (21331114) (41331112) (13122115) (33122113) (22222114)
+ (42222112) (11322115) (31322113) (51322111) (23113114) (43113112) (12213115)
+ (32213113) (52213111) (21313114) (41313112) (24131113) (13231114) (33231112)
+ (22331113) (42331111) (11431114) (31431112) (14122114) (34122112) (23222113)
+ (43222111) (12322114) (32322112) (21422113) (41422111) (24113113) (13213114)
+ (33213112) (22313113) (42313111) (11413114) (31413112) (25131112) (14231113)
+ (34231111) (23331112) (12431113) (32431111) (15122113) (24222112) (13322113)
+ (33322111) (22422112) (11522113) (31522111) (25113112) (14213113) (34213111)
+ (23313112) (12413113) (32413111) (21513112) (15231112) (24331111) (13431112)
+ (16122112) (25222111) (14322112) (23422111) (12522112) (15213112) (24313111)
+ (13413112) (22513111) (11613112) (21141115) (41141113) (61141111) (11132116)
+ (31132114) (51132112) (21123115) (41123113) (61123111) (11114116) (31114114)
+ (51114112) (22141114) (42141112) (11241115) (31241113) (51241111) (12132115)
+ (32132113) (52132111) (21232114) (41232112) (22123114) (42123112) (11223115)
+ (31223113) (51223111) (12114115) (32114113) (52114111) (21214114) (41214112)
+ (23141113) (43141111) (12241114) (32241112) (21341113) (41341111) (13132114)
+ (33132112) (22232113) (42232111) (11332114) (31332112) (23123113) (43123111)
+ (12223114) (32223112) (21323113) (41323111) (13114114) (33114112) (22214113)
+ (42214111) (11314114) (31314112) (24141112) (13241113) (33241111) (22341112)
+ (14132113) (34132111) (23232112) (12332113) (32332111) (21432112) (24123112)
+ (13223113) (33223111) (22323112) (11423113) (31423111) (14114113) (34114111)
+ (23214112) (12314113) (32314111) (21414112) (25141111) (14241112) (23341111)
+ (15132112) (24232111) (13332112) (22432111) (25123111) (14223112) (23323111)
+ (12423112) (21523111) (15114112) (24214111) (13314112) (22414111) (11514112)
+ (15241111) (16132111) (14332111) (15223111) (13423111) (16114111) (14314111)
+ (12514111) (21151114) (41151112) (11142115) (31142113) (51142111) (21133114)
+ (41133112) (11124115) (31124113) (51124111) (21115114) (41115112) (22151113)
+ (42151111) (11251114) (31251112) (12142114) (32142112) (21242113) (41242111)
+ (22133113) (42133111) (11233114) (31233112) (12124114) (32124112) (21224113)
+ (41224111) (22115113) (42115111) (11215114) (31215112) (23151112) (12251113)
+ (32251111) (13142113) (33142111) (22242112) (11342113) (31342111) (23133112)
+ (12233113) (32233111) (21333112) (13124113) (33124111) (22224112) (11324113)
+ (31324111) (23115112) (12215113) (32215111) (21315112) (24151111) (13251112)
+ (14142112) (23242111) (12342112) (24133111) (13233112) (22333111) (11433112)
+ (14124112) (23224111) (12324112) (21424111) (24115111) (13215112) (22315111)
+ (11415112) (14251111) (15142111) (13342111) (14233111) (12433111) (15124111)
+ (13324111) (11524111) (14215111) (12415111) (21161113) (41161111) (11152114)
+ (31152112) (21143113) (41143111) (11134114) (31134112) (21125113) (41125111)
+ (11116114) (31116112) (22161112) (12152113) (32152111) (21252112) (22143112)
+ (11243113) (31243111) (12134113) (32134111) (21234112) (22125112) (11225113)
+ (31225111) (12116113) (32116111) (21216112) (23161111) (13152112) (22252111)
+ (23143111) (12243112) (21343111) (13134112) (22234111) (11334112) (23125111)
+ (12225112) (21325111) (13116112) (22216111) (11316112) (14152111) (13243111)
+ (14134111) (12334111) (13225111) (11425111) (14116111) (12316111) (41111215)
+ (61111213) (21211126) (41211124) (61211122) (22111216) (42111214) (31211215)
+ (51211213) (22211125) (42211123) (11311126) (31311124) (51311122) (23111215)
+ (43111213) (12211216) (32211214) (52211212) (21311215) (41311213) (61311211)
+ (23211124) (43211122) (12311125) (32311123) (52311121) (21411124) (41411122)
+ (24111214) (13211215) (33211213) (22311214) (42311212) (11411215) (31411213)
+ (51411211) (24211123) (13311124) (33311122) (22411123) (42411121) (11511124)
+ (31511122) (25111213) (14211214) (34211212) (23311213) (43311211) (12411214)
+ (32411212) (21511213) (41511211) (25211122) (14311123) (34311121) (23411122)
+ (12511123) (32511121) (21611122) (15211213) (24311212) (13411213) (33411211)
+ (22511212) (11611213) (31611211) (31121125) (51121123) (21112126) (41112124)
+ (61112122) (21121216) (41121214) (61121212) (31112215) (51112213) (12121126)
+ (32121124) (52121122) (21221125) (41221123) (61221121) (22112125) (42112123)
+ (11212126) (22121215) (42121213) (11221216) (31221214) (51221212) (12112216)
+ (32112214) (52112212) (21212215) (41212213) (61212211) (13121125) (33121123)
+ (22221124) (42221122) (11321125) (31321123) (51321121) (23112124) (43112122)
+ (12212125) (23121214) (43121212) (12221215) (32221213) (52221211) (21321214)
+ (41321212) (13112215) (33112213) (22212214) (42212212) (11312215) (31312213)
+ (51312211) (14121124) (34121122) (23221123) (43221121) (12321124) (32321122)
+ (21421123) (41421121) (24112123) (13212124) (24121213) (13221214) (33221212)
+ (11412124) (22321213) (42321211) (11421214) (31421212) (14112214) (34112212)
+ (23212213) (43212211) (12312214) (32312212) (21412213) (41412211) (15121123)
+ (24221122) (13321123) (33321121) (22421122) (11521123) (31521121) (25112122)
+ (14212123) (25121212) (14221213) (34221211) (12412123) (23321212) (12421213)
+ (32421211) (21521212) (15112213) (24212212) (13312213) (33312211) (22412212)
+ (11512213) (31512211) (16121122) (25221121) (14321122) (23421121) (12521122)
+ (15212122) (15221212) (13412122) (24321211) (13421212) (11612122) (22521211)
+ (16112212) (25212211) (14312212) (23412211) (12512212) (21612211) (11131126)
+ (31131124) (51131122) (21122125) (41122123) (61122121) (21131215) (41131213)
+ (61131211) (11113126) (31113124) (51113122) (11122216) (31122214) (51122212)
+ (21113215) (41113213) (61113211) (12131125) (32131123) (52131121) (21231124)
+ (41231122) (22122124) (42122122) (11222125) (22131214) (42131212) (11231215)
+ (31231213) (51231211) (12113125) (32113123) (52113121) (12122215) (32122213)
+ (52122211) (21222214) (41222212) (22113214) (42113212) (11213215) (31213213)
+ (51213211) (13131124) (33131122) (22231123) (42231121) (11331124) (31331122)
+ (23122123) (43122121) (12222124) (23131213) (43131211) (12231214) (32231212)
+ (21331213) (41331211) (13113124) (33113122) (13122214) (33122212) (11313124)
+ (22222213) (42222211) (11322214) (31322212) (23113213) (43113211) (12213214)
+ (32213212) (21313213) (41313211) (14131123) (34131121) (23231122) (12331123)
+ (32331121) (21431122) (24122122) (13222123) (24131212) (13231213) (33231211)
+ (11422123) (22331212) (11431213) (31431211) (14113123) (34113121) (14122213)
+ (34122211) (12313123) (23222212) (12322213) (32322211) (21422212) (24113212)
+ (13213213) (33213211) (22313212) (11413213) (31413211) (15131122) (24231121)
+ (13331122) (22431121) (25122121) (14222122) (25131211) (14231212) (12422122)
+ (23331211) (12431212) (15113122) (15122212) (13313122) (24222211) (13322212)
+ (11513122) (22422211) (11522212) (25113211) (14213212) (23313211) (12413212)
+ (21513211) (16131121) (14331121) (15222121) (15231211) (13422121) (13431211)
+ (16113121) (16122211) (14313121) (14322211) (12513121) (12522211) (15213211)
+ (13413211) (11613211) (11141125) (31141123) (51141121) (21132124) (41132122)
+ (21141214) (41141212) (11123125) (31123123) (51123121) (11132215) (31132213)
+ (51132211) (21114124) (41114122) (21123214) (41123212) (11114215) (31114213)
+ (51114211) (12141124) (32141122) (21241123) (41241121) (22132123) (42132121)
+ (11232124) (22141213) (42141211) (11241214) (31241212) (12123124) (32123122)
+ (12132214) (32132212) (21232213) (41232211) (22114123) (42114121) (11214124)
+ (22123213) (42123211) (11223214) (31223212) (12114214) (32114212) (21214213)
+ (41214211) (13141123) (33141121) (22241122) (11341123) (31341121) (23132122)
+ (12232123) (23141212) (12241213) (32241211) (21341212) (13123123) (33123121)
+ (13132213) (33132211) (11323123) (22232212) (11332213) (31332211) (23114122)
+ (12214123) (23123212) (12223213) (32223211) (21323212) (13114213) (33114211)
+ (22214212) (11314213) (31314211) (14141122) (23241121) (12341122) (24132121)
+ (13232122) (24141211) (13241212) (11432122) (22341211) (14123122) (14132212)
+ (12323122) (23232211) (12332212) (21432211) (24114121) (13214122) (24123211)
+ (13223212) (11414122) (22323211) (11423212) (14114212) (23214211) (12314212)
+ (21414211) (15141121) (13341121) (14232121) (14241211) (12432121) (15123121)
+ (15132211) (13323121) (13332211) (11523121) (14214121) (14223211) (12414121)
+ (12423211) (15114211) (13314211) (11514211) (11151124) (31151122) (21142123)
+ (41142121) (21151213) (41151211) (11133124) (31133122) (11142214) (31142212)
+ (21124123) (41124121) (21133213) (41133211) (11115124) (31115122) (11124214)
+ (31124212) (21115213) (41115211) (12151123) (32151121) (21251122) (22142122)
+ (11242123) (22151212) (11251213) (31251211) (12133123) (32133121) (12142213)
+ (32142211) (21242212) (22124122) (11224123) (22133212) (11233213) (31233211)
+ (12115123) (32115121) (12124213) (32124211) (21224212) (22115212) (11215213)
+ (31215211) (13151122) (22251121) (23142121) (12242122) (23151211) (12251212)
+ (13133122) (13142212) (11333122) (22242211) (11342212) (23124121) (12224122)
+ (23133211) (12233212) (21333211) (13115122) (13124212) (11315122) (22224211)
+ (11324212) (23115211) (12215212) (21315211) (14151121) (13242121) (13251211)
+ (14133121) (14142211) (12333121) (12342211) (13224121) (13233211) (11424121)
+ (11433211) (14115121) (14124211) (12315121) (12324211) (13215211) (11415211)
+ (11161123) (31161121) (21152122) (21161212) (11143123) (31143121) (11152213)
+ (31152211) (21134122) (21143212) (11125123) (31125121) (11134213) (31134211)
+ (21116122) (21125212) (12161122) (22152121) (11252122) (22161211) (12143122)
+ (12152212) (21252211) (22134121) (11234122) (22143211) (11243212) (12125122)
+ (12134212) (21234211) (22116121) (11216122) (22125211) (11225212) (13161121)
+ (12252121) (13143121) (13152211) (11343121) (12234121) (12243211) (13125121)
+ (13134211) (11325121) (11334211) (12216121) (12225211) (31111225) (51111223)
+ (21111316) (41111314) (61111312) (31211134) (51211132) (12111226) (32111224)
+ (52111222) (21211225) (41211223) (61211221) (22111315) (42111313) (11211316)
+ (31211314) (51211312) (12211135) (32211133) (52211131) (21311134) (41311132)
+ (13111225) (33111223) (22211224) (42211222) (11311225) (31311223) (51311221)
+ (23111314) (43111312) (12211315) (32211313) (52211311) (21311314) (41311312)
+ (13211134) (33211132) (22311133) (42311131) (11411134) (31411132) (14111224)
+ (34111222) (23211223) (43211221) (12311224) (32311222) (21411223) (41411221)
+ (24111313) (13211314) (33211312) (22311313) (42311311) (11411314) (31411312)
+ (14211133) (34211131) (23311132) (12411133) (32411131) (21511132) (15111223)
+ (24211222) (13311223) (33311221) (22411222) (11511223) (31511221) (25111312)
+ (14211313) (34211311) (23311312) (12411313) (32411311) (21511312) (15211132)
+ (24311131) (13411132) (22511131) (11611132) (16111222) (25211221) (14311222)
+ (23411221) (12511222) (21611221) (15211312) (24311311) (13411312) (22511311)
+ (11611312) (21121135) (41121133) (61121131) (11112136) (31112134) (51112132)
+ (11121226) (31121224) (51121222) (21112225) (41112223) (61112221) (21121315)
+ (41121313) (61121311) (11112316) (31112314) (51112312) (22121134) (42121132)
+ (11221135) (31221133) (51221131) (12112135) (32112133) (52112131) (12121225)
+ (32121223) (52121221) (21221224) (41221222) (22112224) (42112222) (11212225)
+ (22121314) (42121312) (11221315) (31221313) (51221311) (12112315) (32112313)
+ (52112311) (21212314) (41212312) (23121133) (43121131) (12221134) (32221132)
+ (21321133) (41321131) (13112134) (33112132) (13121224) (33121222) (11312134)
+ (22221223) (42221221) (11321224) (31321222) (23112223) (43112221) (12212224)
+ (23121313) (43121311) (12221314) (32221312) (21321313) (41321311) (13112314)
+ (33112312) (22212313) (42212311) (11312314) (31312312) (24121132) (13221133)
+ (33221131) (22321132) (11421133) (31421131) (14112133) (34112131) (14121223)
+ (34121221) (12312133) (23221222) (12321223) (32321221) (21421222) (24112222)
+ (13212223) (24121312) (13221313) (33221311) (11412223) (22321312) (11421313)
+ (31421311) (14112313) (34112311) (23212312) (12312313) (32312311) (21412312)
+ (25121131) (14221132) (23321131) (12421132) (21521131) (15112132) (15121222)
+ (13312132) (24221221) (13321222) (11512132) (22421221) (11521222) (25112221)
+ (14212222) (25121311) (14221312) (12412222) (23321311) (12421312) (21521311)
+ (15112312) (24212311) (13312312) (22412311) (11512312) (15221131) (13421131)
+ (16112131) (16121221) (14312131) (14321221) (12512131) (12521221) (15212221)
+ (15221311) (13412221) (13421311) (11612221) (16112311) (14312311) (12512311)
+ (21131134) (41131132) (11122135) (31122133) (51122131) (11131225) (31131223)
+ (51131221) (21113134) (41113132) (21122224) (41122222) (21131314) (41131312)
+ (11113225) (31113223) (51113221) (11122315) (31122313) (51122311) (21113314)
+ (41113312) (22131133) (42131131) (11231134) (31231132) (12122134) (32122132)
+ (12131224) (32131222) (21231223) (41231221) (22113133) (42113131) (11213134)
+ (22122223) (42122221) (11222224) (22131313) (42131311) (11231314) (31231312)
+ (12113224) (32113222) (12122314) (32122312) (21222313) (41222311) (22113313)
+ (42113311) (11213314) (31213312) (23131132) (12231133) (32231131) (21331132)
+ (13122133) (33122131) (13131223) (33131221) (11322133) (22231222) (11331223)
+ (31331221) (23113132) (12213133) (23122222) (12222223) (23131312) (12231313)
+ (32231311) (21331312) (13113223) (33113221) (13122313) (33122311) (11313223)
+ (22222312) (11322313) (31322311) (23113312) (12213313) (32213311) (21313312)
+ (24131131) (13231132) (22331131) (11431132) (14122132) (14131222) (12322132)
+ (23231221) (12331222) (21431221) (24113131) (13213132) (24122221) (13222222)
+ (24131311) (11413132) (13231312) (11422222) (22331311) (11431312) (14113222)
+ (14122312) (12313222) (23222311) (12322312) (21422311) (24113311) (13213312)
+ (22313311) (11413312) (14231131) (12431131) (15122131) (15131221) (13322131)
+ (13331221) (11522131) (14213131) (14222221) (12413131) (14231311) (12422221)
+ (12431311) (15113221) (15122311) (13313221) (13322311) (11513221) (11522311)
+ (14213311) (12413311) (21141133) (41141131) (11132134) (31132132) (11141224)
+ (31141222) (21123133) (41123131) (21132223) (41132221) (21141313) (41141311)
+ (11114134) (31114132) (11123224) (31123222) (11132314) (31132312) (21114223)
+ (41114221) (21123313) (41123311) (11114314) (31114312) (22141132) (11241133)
+ (31241131) (12132133) (32132131) (12141223) (32141221) (21241222) (22123132)
+ (11223133) (22132222) (11232223) (22141312) (11241313) (31241311) (12114133)
+ (32114131) (12123223) (32123221) (12132313) (32132311) (21232312) (22114222)
+ (11214223) (22123312) (11223313) (31223311) (12114313) (32114311) (21214312)
+ (23141131) (12241132) (21341131) (13132132) (13141222) (11332132) (22241221)
+ (11341222) (23123131) (12223132) (23132221) (12232222) (23141311) (12241312)
+ (21341311) (13114132) (13123222) (11314132) (13132312) (11323222) (22232311)
+ (11332312) (23114221) (12214222) (23123311) (12223312) (21323311) (13114312)
+ (22214311) (11314312) (13241131) (14132131) (14141221) (12332131) (12341221)
+ (13223131) (13232221) (11423131) (13241311) (11432221) (14114131) (14123221)
+ (12314131) (14132311) (12323221) (12332311) (13214221) (13223311) (11414221)
+ (11423311) (14114311) (12314311) (21151132) (11142133) (31142131) (11151223)
+ (31151221) (21133132) (21142222) (21151312) (11124133) (31124131) (11133223)
+ (31133221) (11142313) (31142311) (21115132) (21124222) (21133312) (11115223)
+ (31115221) (11124313) (31124311) (22151131) (11251132) (12142132) (12151222)
+ (21251221) (22133131) (11233132) (22142221) (11242222) (22151311) (11251312)
+ (12124132) (12133222) (12142312) (21242311) (22115131) (11215132) (22124221)
+ (11224222) (22133311) (11233312) (12115222) (12124312) (21224311) (12251131)
+ (13142131) (13151221) (11342131) (12233131) (12242221) (12251311) (13124131)
+ (13133221) (11324131) (13142311) (11333221) (11342311) (12215131) (12224221)
+ (12233311) (13115221) (13124311) (11315221) (11324311) (21161131) (11152132)
+ (11161222) (21143131) (21152221) (21161311) (11134132) (11143222) (11152312)
+ (21125131) (21134221) (21143311) (11116132) (11125222) (11134312) (12152131)
+ (12161221) (11243131) (11252221) (12134131) (12143221) (12152311) (11225131)
+ (11234221) (11243311) (12116131) (12125221) (12134311) (21111235) (41111233)
+ (61111231) (11111326) (31111324) (51111322) (21111415) (41111413) (61111411)
+ (21211144) (41211142) (22111234) (42111232) (11211235) (31211233) (51211231)
+ (12111325) (32111323) (52111321) (21211324) (41211322) (22111414) (42111412)
+ (11211415) (31211413) (51211411) (22211143) (42211141) (11311144) (31311142)
+ (23111233) (43111231) (12211234) (32211232) (21311233) (41311231) (13111324)
+ (33111322) (22211323) (42211321) (11311324) (31311322) (23111413) (43111411)
+ (12211414) (32211412) (21311413) (41311411) (23211142) (12311143) (32311141)
+ (21411142) (24111232) (13211233) (33211231) (22311232) (11411233) (31411231)
+ (14111323) (34111321) (23211322) (12311323) (32311321) (21411322) (24111412)
+ (13211413) (33211411) (22311412) (11411413) (31411411) (24211141) (13311142)
+ (22411141) (11511142) (25111231) (14211232) (23311231) (12411232) (21511231)
+ (15111322) (24211321) (13311322) (22411321) (11511322) (25111411) (14211412)
+ (23311411) (12411412) (21511411) (14311141) (12511141) (15211231) (13411231)
+ (11611231) (16111321) (14311321) (12511321) (15211411) (13411411) (11611411)
+ (31121143) (51121141) (21112144) (41112142) (21121234) (41121232) (11112235)
+ (31112233) (51112231) (11121325) (31121323) (51121321) (21112324) (41112322)
+ (21121414) (41121412) (11112415) (31112413) (51112411) (12121144) (32121142)
+ (21221143) (41221141) (22112143) (42112141) (11212144) (22121233) (42121231)
+ (11221234) (31221232) (12112234) (32112232) (12121324) (32121322) (21221323)
+ (41221321) (22112323) (42112321) (11212324) (22121413) (42121411) (11221414)
+ (31221412) (12112414) (32112412) (21212413) (41212411) (13121143) (33121141)
+ (22221142) (11321143) (31321141) (23112142) (12212143) (23121232) (12221233)
+ (32221231) (21321232) (13112233) (33112231) (13121323) (33121321) (11312233)
+ (22221322) (11321323) (31321321) (23112322) (12212323) (23121412) (12221413)
+ (32221411) (21321412) (13112413) (33112411) (22212412) (11312413) (31312411)
+ (14121142) (23221141) (12321142) (21421141) (24112141) (13212142) (24121231)
+ (13221232) (11412142) (22321231) (11421232) (14112232) (14121322) (12312232)
+ (23221321) (12321322) (21421321) (24112321) (13212322) (24121411) (13221412)
+ (11412322) (22321411) (11421412) (14112412) (23212411) (12312412) (21412411)
+ (15121141) (13321141) (11521141) (14212141) (14221231) (12412141) (12421231)
+ (15112231) (15121321) (13312231) (13321321) (11512231) (11521321) (14212321)
+ (14221411) (12412321) (12421411) (15112411) (13312411) (11512411) (11131144)
+ (31131142) (21122143) (41122141) (21131233) (41131231) (11113144) (31113142)
+ (11122234) (31122232) (11131324) (31131322) (21113233) (41113231) (21122323)
+ (41122321) (21131413) (41131411) (11113324) (31113322) (11122414) (31122412)
+ (21113413) (41113411) (12131143) (32131141) (21231142) (22122142) (11222143)
+ (22131232) (11231233) (31231231) (12113143) (32113141) (12122233) (32122231)
+ (12131323) (32131321) (21231322) (22113232) (11213233) (22122322) (11222323)
+ (22131412) (11231413) (31231411) (12113323) (32113321) (12122413) (32122411)
+ (21222412) (22113412) (11213413) (31213411) (13131142) (22231141) (11331142)
+ (23122141) (12222142) (23131231) (12231232) (21331231) (13113142) (13122232)
+ (11313142) (13131322) (11322232) (22231321) (11331322) (23113231) (12213232)
+ (23122321) (12222322) (23131411) (12231412) (21331411) (13113322) (13122412)
+ (11313322) (22222411) (11322412) (23113411) (12213412) (21313411) (14131141)
+ (12331141) (13222141) (13231231) (11422141) (11431231) (14113141) (14122231)
+ (12313141) (14131321) (12322231) (12331321) (13213231) (13222321) (11413231)
+ (13231411) (11422321) (11431411) (14113321) (14122411) (12313321) (12322411)
+ (13213411) (11413411) (11141143) (31141141) (21132142) (21141232) (11123143)
+ (31123141) (11132233) (31132231) (11141323) (31141321) (21114142) (21123232)
+ (21132322) (21141412) (11114233) (31114231) (11123323) (31123321) (11132413)
+ (31132411) (21114322) (21123412) (12141142) (21241141) (22132141) (11232142)
+ (22141231) (11241232) (12123142) (12132232) (12141322) (21241321) (22114141)
+ (11214142) (22123231) (11223232) (22132321) (11232322) (22141411) (11241412)
+ (12114232) (12123322) (12132412) (21232411) (22114321) (11214322) (22123411)
+ (11223412) (13141141) (11341141) (12232141) (12241231) (13123141) (13132231)
+ (11323141) (13141321) (11332231) (11341321) (12214141) (12223231) (12232321)
+ (12241411) (13114231) (13123321) (11314231) (13132411) (11323321) (11332411)
+ (12214321) (12223411) (11151142) (21142141) (21151231) (11133142) (11142232)
+ (11151322) (21124141) (21133231) (21142321) (21151411) (11115142) (11124232)
+ (11133322) (11142412) (21115231) (21124321) (21133411) (12151141) (11242141)
+ (11251231) (12133141) (12142231) (12151321) (11224141) (11233231) (11242321)
+ (11251411) (12115141) (12124231) (12133321) (12142411) (11215231) (11224321)
+ (11233411) (11161141) (11143141) (11152231) (11161321) (11125141) (11134231)
+ (11143321) (11152411) (11111245) (31111243) (51111241) (21111334) (41111332)
+ (11111425) (31111423) (51111421) (21111514) (41111512) (31211152) (12111244)
+ (32111242) (21211243) (41211241) (22111333) (42111331) (11211334) (31211332)
+ (12111424) (32111422) (21211423) (41211421) (22111513) (42111511) (11211514)
+ (31211512) (12211153) (32211151) (21311152) (13111243) (33111241) (22211242)
+ (11311243) (31311241) (23111332) (12211333) (32211331) (21311332) (13111423)
+ (33111421) (22211422) (11311423) (31311421) (23111512) (12211513) (32211511)
+ (21311512) (13211152) (22311151) (11411152) (14111242) (23211241) (12311242)
+ (21411241) (24111331) (13211332) (22311331) (11411332) (14111422) (23211421)
+ (12311422) (21411421) (24111511) (13211512) (22311511) (11411512) (14211151)
+ (12411151) (15111241) (13311241) (11511241) (14211331) (12411331) (15111421)
+ (13311421) (11511421) (14211511) (12411511) (21121153) (41121151) (11112154)
+ (31112152) (11121244) (31121242) (21112243) (41112241) (21121333) (41121331)
+ (11112334) (31112332) (11121424) (31121422) (21112423) (41112421) (21121513)
+ (41121511) (11112514) (31112512) (22121152) (11221153) (31221151) (12112153)
+ (32112151) (12121243) (32121241) (21221242) (22112242) (11212243) (22121332)
+ (11221333) (31221331) (12112333) (32112331) (12121423) (32121421) (21221422)
+ (22112422) (11212423) (22121512) (11221513) (31221511) (12112513) (32112511)
+ (21212512) (23121151) (12221152) (21321151) (13112152) (13121242) (11312152)
+ (22221241) (11321242) (23112241) (12212242) (23121331) (12221332) (21321331)
+ (13112332) (13121422) (11312332) (22221421) (11321422) (23112421) (12212422)
+ (23121511) (12221512) (21321511) (13112512) (22212511) (11312512) (13221151)
+ (11421151) (14112151) (14121241) (12312151) (12321241) (13212241) (13221331)
+ (11412241) (11421331) (14112331) (14121421) (12312331) (12321421) (13212421)
+ (13221511) (11412421) (11421511) (14112511) (12312511) (21131152) (11122153)
+ (31122151) (11131243) (31131241) (21113152) (21122242) (21131332) (11113243)
+ (31113241) (11122333) (31122331) (11131423) (31131421) (21113332) (21122422)
+ (21131512) (11113423) (31113421) (11122513) (31122511) (22131151) (11231152)
+ (12122152) (12131242) (21231241) (22113151) (11213152) (22122241) (11222242)
+ (22131331) (11231332) (12113242) (12122332) (12131422) (21231421) (22113331)
+ (11213332) (22122421) (11222422) (22131511) (11231512) (12113422) (12122512)
+ (21222511) (12231151) (13122151) (13131241) (11322151) (11331241) (12213151)
+ (12222241) (12231331) (13113241) (13122331) (11313241) (13131421) (11322331)
+ (11331421) (12213331) (12222421) (12231511) (13113421) (13122511) (11313421)
+ (11322511) (21141151) (11132152) (11141242) (21123151) (21132241) (21141331)
+ (11114152) (11123242) (11132332) (11141422) (21114241) (21123331) (21132421)
+ (21141511) (11114332) (11123422) (11132512) (11241151) (12132151) (12141241)
+ (11223151) (11232241) (11241331) (12114151) (12123241) (12132331) (12141421)
+ (11214241) (11223331) (11232421) (11241511) (12114331) (12123421) (12132511)
+ (11142151) (11151241) (11124151) (11133241) (11142331) (11151421) (11115241)
+ (11124331) (11133421) (11142511) (21111253) (41111251) (11111344) (31111342)
+ (21111433) (41111431) (11111524) (31111522) (21111613) (41111611) (21211162)
+ (22111252) (11211253) (31211251) (12111343) (32111341) (21211342) (22111432)
+ (11211433) (31211431) (12111523) (32111521) (21211522) (22111612) (11211613)
+ (31211611) (22211161) (11311162) (23111251) (12211252) (21311251) (13111342)
+ (22211341) (11311342) (23111431) (12211432) (21311431) (13111522) (22211521)
+ (11311522) (23111611) (12211612) (21311611) (12311161) (13211251) (11411251)
+ (14111341) (12311341) (13211431) (11411431) (14111521) (12311521) (13211611)
+ (11411611) (31121161) (21112162) (21121252) (11112253) (31112251) (11121343)
+ (31121341) (21112342) (21121432) (11112433) (31112431) (11121523) (31121521)
+ (21112522) (21121612) (12121162) (21221161) (22112161) (11212162) (22121251)
+ (11221252) (12112252) (12121342) (21221341) (22112341) (11212342) (22121431)
+ (11221432) (12112432) (12121522) (21221521) (22112521) (11212522) (22121611)
+ (11221612) (13121161) (11321161) (12212161) (12221251) (13112251) (13121341)
+ (11312251) (11321341) (12212341) (12221431) (13112431) (13121521) (11312431)
+ (11321521) (12212521) (12221611) (11131162) (21122161) (21131251) (11113162)
+ ]
+ ] def
+
+ /parity [
+ (1001) (0101) (1100) (0011) (1010) (0110) (1111) (0000)
+ ] def
+
+ % Derive the bits for each row
+ /rowbits r array def
+ 0 1 r 1 sub {
+ /i exch def
+ /p i r 1 sub ne {parity i get} {(0000)} ifelse def
+ /ccrow ccs i 8 mul 8 getinterval def
+ /scrow [
+ 0 2 7 {ccrow exch 2 getinterval aload pop exch 49 mul add} for
+ ] def
+ /sbs [
+ 10 1 1
+ 0 1 3 {
+ /j exch def
+ patterns p j get 48 sub get scrow j get get {48 sub} forall
+ } for
+ 4 1
+ ] def
+ mark
+ 1 sbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall
+ counttomark 1 sub array astore exch pop exch pop
+ rowbits i 3 -1 roll put
+ } for
+
+ % Populate the bitmap
+ /pixs [
+ 81 sepheight mul {1} repeat
+ 0 1 r 2 sub {
+ /i exch def
+ rowheight {rowbits i get aload pop} repeat
+ sepheight {10 {0} repeat 70 {1} repeat 0} repeat
+ } for
+ rowheight {rowbits r 1 sub get aload pop} repeat
+ 81 sepheight mul {1} repeat
+ ] def
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx 81
+ /pixy pixs length 81 idiv
+ /height pixs length 81 idiv 72 div
+ /width 81 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/code49 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code49--
@@ -4534,49 +12288,157 @@ E+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: 3493
% --EXOP: height=0.5 includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp channelcode 0.0 0 0 0
-%%BeginData: 41 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04S[(D Jj $%@rGm hH\
-`B!23JD%DfBf4Df 0WZ5* @]T @UX : eDe *FB 5*@ ]TA8c@ -A 9)+&+D ,%u
-F(LLj06:fFEcbo- DId=! +D, %uF (L Lj 055 <6C is9"FC f] =+D,%u F(L
-Lj055<6Cis9"@q] F`CE R4t Ci a0 N1G <EQ BkM +$L]
-NYpDfBf4Df0WZY: js=E b TE (F Eqh :P! +/J! Ko='%
-<$3-Bl@m1H]kFA@ ;L!rP! +/T 5 ^ee pO uSV6 P,4 <rNWD;+NHB 2`AWf3'OtDh
-\P')pOOu%N5OtCc rF_-^l I?I T YP%B dtOu Y16 E-,f4DKCt) Ou%NL<,Z_tB
-l@m1H]g15P"@<?A SGdjF< G7. BkM+ $OtV tS@ UX:eDe*FB@ Yb)KAn#1h@r
-GmhP%'4PP#.<^HS 8iPBl J#D@ q]:gD ImWo De* EG@:W&CDJ+ ')NZpi(@;]s
-oC`l)`A7Zm#F`VX I@V$Z ;+EVN E2]uX FB5 )I/0/%?SBl disEcQ)=P!=
-AX<+99V@rGmhH]g @E0Tp%2 5);4^: m,jG0 4K- >E,[F>BOPd rASbjpA7\)9
-A4($=Ea`I"ATEeW6YKnGDImW,6Z6LH+Dl7BF<G(3DKK<$DBNk8Cj@.6BkM.%F"]1e@;0doATDg
-0EfrY8P#Qjm8Rc+K@rGmhOt9gn)MS8<L(0u4!!')KKE);%Y_3""-&u7R@UX:eDe*FB@Yb)KWKK
-o;:jXj)GA2#8/n8R'DJj$%@rGmh<,Z\ABkNGg<+ohc6YKnGDImW,6Z6LH+Eh10F_)\0F!,RCD]
-iM'B-:f)EZfI;AKYl5D.7's+E(j7@q]:gDImX*0/%?SBldisEcQ)=P!=AX<%i-#G][DAOuSUaF
--8_M99MK%3+A%7L]N[<P"Us%OuRNG5)96&WKKo;5%9[=L]Wa=P"Us%Oo^^HOo^@AP#-L]!I]<N
-!e$53L]NZ@@q]:gL]W_?P%K'(3/@Tk"Hll6@Yb,L=GR$A=H[ob"-QcL5*Dn$!KmJ>"HllC"-Qc
-B!KmJ$AU&<<I?I-LH]g@E"-QcL@=)I>!g6ZA"HllMG]mM3F_)\;@<-!lFHSe605kuT+BsX(L]N
-;=H]g@0P!5%%P!3?<5*AQeP"8l7!+T\NDMS@WCm%JT1OYEc06Uc?F_)\=@;L'tL]NY>Ou%NL<.
-0p0P')q1P')q1I?G)'1G<WWG]\"ROuQrb@;^l&Oo^_XH\_]NH\_]c=FH?4L]N;6P$!'PL]W`AL
-]W`AP'DcaP$!l2P,X6<Oo^@@P$!MAP#uU5G][DCP":aYP')q1I?G)'1G<<W@rGmhHS8lB@;_5l
-Ou"b5@<-!lFHShN1G<o[Cis<F!0T,kDfp/Xs,o/k@N\m2!Jgc4!Jg`3!/LW2!/LW2!/LW2!*ta
-D0687?L]E53L]N;3L]E52L]E52L]E52L]C_D1Lk*,DNZu8")_[pFE8RCF``%p%[&V$@UX:nASr
-W"@<,jrA7^p5Ou"b'Bl7HmEZfF:DfTr3Bl7HmEdJp5L]N;4L]N;4L]Le0HQZOK!Jgc4!Jgc4!J
-gc4!Jgc4!F:,:<K]-kA79Rg+C\c"@rGmhOt:'NEbo<)L]NY>ASu!rA7^o[04S[,@r!2k+C1-dB
-l7EsF_#&nBOt[hHS95SA25q`>9I,m>p*>o>p*@-%>YFK"GdA?",Ht`+BsX2L]WA@L]`GGL_,@F
-L]Ld(>DNZC&;UpS#`'1N"GdD@!f.#9!F6gPL]N;7L_,@TL]`GAL]WA<L^AkHL^&Y9>p*@-'Sm<
-V(5NEU%u:XM"c*;;#`&eC'o2sJ#D`Cd+BsX'L^&YJL^8e;L]`G>L]iMBL^f.OL]WA:L_>LLL]L
-d(>p*TbEbo<)P"UroL]E52L]M$pFCC>AL]N[<H]g@!@<>q@5*AQp!KsFF5&G4K1,G(WP"UsSOo
-]uo8;J(FC5;t'DI[TqAM7P,ARfM=5*@^MP#O)U@WNYr+D,>*A7]eE!g7\:@<>q@!g7\9BOt[hO
-ogeh?'6usFEhmM@UX:nAT!Y;Ou%moL]LsnEbo<)L]N[<HS9)r5*@^DG]Y'B+Bost@<,jrA7Zlt
-L]NZ4L]E52NW=k8?'9G\P"7\t061WA0/%?WDJX$)ARTU4F(025F(02D@VBg*>9IurF-:!g!KmJ
->!g6H.BOtmjBQSZcK3^->@WNYr+EM"5P%'4JOo^@?P#?X_!.C#_>q^;EF<G[MF>%`IG]\1=Ch[
-O"NWs!)DKKH105kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b$BO
-PdrASbjpA7^o`P%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbF
-DtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/channelcode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp channelcode 0.0 2015050900 68302 68105
+%%BeginData: 149 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/channelcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /shortfinder false def
+ /includetext false def
+ /includecheck false def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /height height cvr def
+
+ % Validate the input
+ barcode length 2 lt barcode length 7 gt or {
+ /bwipp.channelcodeBadLength (Channel Code must be 2 to 7 digits) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.channelcodeBadCharacter (Channel Code must contain only digits) //raiseerror exec
+ } if
+ } forall
+ barcode cvi [ 26 292 3493 44072 576688 7742862 ] barcode length 2 sub get gt {
+ /bwipp.channelcodeTooBig (The Channel Code value is too big for the number of channels) //raiseerror exec
+ } if
+
+ /nextb {
+ dup
+ dup s exch get exch
+ dup b exch 1 sub get exch
+ dup s exch 1 sub get exch
+ b exch 2 sub get exch
+ add add add 4 gt {1} {2} ifelse
+ 1 index chan 2 add lt {
+ dup 1 4 index {
+ b 3 index 2 index put
+ 3 index exch sub 1 add 4 index 3 index 1 add nexts
+ } for
+ } {
+ dup 3 index le {
+ b 2 index 4 index put
+ value target eq {
+ /out [
+ 3 1 10 {dup s exch get exch b exch get} for
+ ] 0 chan 2 mul getinterval def
+ } if
+ /value value 1 add def
+ } if
+ } ifelse
+ pop pop pop pop
+ } bind def
+
+ /nexts {
+ dup chan 2 add lt {1} {1 index} ifelse 1 3 index {
+ s 2 index 2 index put
+ 2 index exch sub 1 add 3 index 2 index nextb
+ } for
+ pop pop pop
+ } bind def
+
+ /encode {
+ /chan exch def
+ /target exch def
+ /value 0 def
+ /out -1 def
+ /b [ 1 1 1 0 0 0 0 0 0 0 0 ] def
+ /s [ 0 1 1 0 0 0 0 0 0 0 0 ] def
+ chan dup 3 nexts
+ out
+ } bind def
+
+ /barlen barcode length def
+
+ % Determine finder
+ /finder shortfinder { [ 1 1 1 1 1 ] } { [ 1 1 1 1 1 1 1 1 1 ] } ifelse def
+
+ % Encode the main data
+ /data barcode cvi barlen 1 add encode def
+
+ % Determine check data
+ /check [] def
+ includecheck {
+ /mod23 [
+ [] []
+ [ 13 12 4 9 3 1 ]
+ [ 13 2 12 3 18 16 4 1 ]
+ [ 11 16 17 8 20 4 10 2 5 1 ]
+ [ 1 4 16 18 3 12 2 8 9 13 6 1 ]
+ [ 20 16 22 13 15 12 5 4 8 9 21 3 7 1 ]
+ [ 2 6 18 8 1 3 9 4 12 13 16 2 6 18 8 1 ]
+ ] barlen get def
+ 0
+ 0 1 data length 1 sub {
+ dup data exch get 1 sub exch mod23 exch get mul add
+ } for
+ 23 mod 3 encode /check exch def
+ } if
+
+ % Construct the symbol
+ /sbs [
+ finder aload pop
+ data aload pop
+ check aload pop
+ ] def
+
+ % Create the human readable text
+ /txt barlen array def
+ 0 1 barlen 1 sub {
+ /i exch def
+ txt i [barcode i 1 getinterval 0 0 () 0] put
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ /txt txt
+ /textxalign (center)
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/channelcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER channelcode--
@@ -4587,36 +12449,101 @@ DtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
% --EXAM: 11099
% --EXOP: inkspread=-0.25 showborder borderleft=0 borderright=0
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp flattermarken 0.0 0 0 0
-%%BeginData: 28 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04o$/F ED )7D..I #AS
-ujN'Tt>:%52X=FD 5Z2F- 8_M 1G< 3 GEa s#u AWf 6?1G<9 WD KKE0@< Wi+
-@;L!rOu"b*DI[L* A7]jo G]Y '?@ ;L !r Ou" b5A U&</Df 0Z Za-&53 FCf
-]=F(or3L^K;$06C cMFE qe: Ao hO *M# !2i 05+ p2B4
-uCE5+.h-Ou$QUEa s#uA U BS "L bP! (P! 4[^P #.<^H
-S8iPBlJ#DAo(mtF CfK0@< --p D F.c B6 YKnK @:O CjEfMJ9Cgh F-ATDWrEbf6
-(+Dl7BF<G(3DKK< $DBNk8 Cj@ . 6BkM .%F" ]1e @;0doATDg0 EfrY8P#Qjm8
-T/QiBl@m1P-6N[F E2)5B6 8E< AWf3 'L]N YrO pu>KFD5Z2F *j(NAmoLsAW
-f3'P!FGY<0B5(@Z mRN0o c8tP )XR(F _-_! H]f tD5*C&O5*@ ^MH]ft&Eckr
-V1OYEdI?J0)*g/N :DfBf 4Df0W Z5*@^ MP# Q@=FD5Z2F* j'+I?I/TFCf
-]=AoDR/+EV1>FCo H/FHS5= 1G<i]G ]\"@H =\4 @AU&<<BmO? R09S+EFCf]=
-H#I;,F(KG9FCf]=H#I;,F(KHV09S+EBOtmjBQPA1ASGdjFHS;?1Lad5@rGmhH]g@E0Tp%25);4
-^:m,jG04K->E,[FACghF-ATDWrEbf6(6=FClBOPpi@ru:&N[@53@<?U&Ec#6*CLqB+D09oA+Cf
->-FCAm$+E).6Gp$X3B5)I/0/%?SBldisEcQ)=P!=AX<.0p$04f$2F!+\I">DMa30"+q0ekVI">
-DSc2N@no1GLbI">DYe1l_\m2)-nI">D_g16)Jk2_d%I">Dei0TH8i3A<-mOu"b#@<,jk@<-FL$
-8F:l1c70M3&r[U1G<3GEbo<)+C\c"@rGmhP%'S106:TD+C\c"Ch7L?"HmSaV33VfFEhmM@UX:n
-AT!Y;Ou%moL]LsnEbo<)L]N[<HS9)r5*@^2@<,jrA7ZltL]NZ4@UX:eBOPq&P!5%gP')ps055<
-7G`k7R1QlmDFY@<D@j#?#@ric,DIe!T99M)P@WNZ+L]ilWASu"@H$":Q+DDs&+C\c"@rGmh+DH
-W4P"]SG$'K+HAU&<BDe<U&ATT&:AU&</Df0Y>FCf]=F(or3+C1.TI?I,`4>1_dDD*Y`ASu<uDI
-m6s06:TD+Bot0@WQmP0TrD`P"Aq4@VBg*>9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3^->@WNYr+
-EM"5P%'4JOo^@?P#?X_!.C#_>q^;EF<G[MF>%QOF<GL@FD5Z2F!*Y1+CoD.FC]E#GEQnu061WA
-Ch[cu@<.N1Ou[rR%[&V$Ao(mtFCfK0@<--pDNZuBA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\
-&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/flattermarken 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp flattermarken 0.0 2015050900 59248 59148
+%%BeginData: 93 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/flattermarken {
+
+ 20 dict begin % Confine variable to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /height 0.3 def
+
+ % Validate the input
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.flattermarkenBadCharacter (Flattermarken must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /height height cvr def
+
+ % Validate the input
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.flattermarkenBadCharacter (Flattermarken must contain only digits) //raiseerror exec
+ } if
+ } forall
+
+ % Create an array containing the character mappings
+ /encs
+ [ (0018) (0117) (0216) (0315) (0414) (0513) (0612) (0711) (0810)
+ (0900)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (1234567890) def
+
+ /barlen barcode length def % Length of the code
+
+ /sbs barlen 4 mul string def
+ /txt barlen array def
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 9 mul textyoffset textfont textsize] put
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [sbs {48 sub} forall]
+ /bhs [sbs length 1 add 2 idiv {height} repeat]
+ /bbs [sbs length 1 add 2 idiv {0} repeat]
+ /txt txt
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/flattermarken dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER flattermarken--
@@ -4627,26 +12554,60 @@ Ch[cu@<.N1Ou[rR%[&V$Ao(mtFCfK0@<--pDNZuBA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\
% --EXAM: 331132131313411122131311333213114131131221323
% --EXOP: height=0.5
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp raw 0.0 0 0 0
-%%BeginData: 18 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 061KFH \` B!23JD %Df
-Bf4Df0WZ5*@]T@U X:eDe *FB 5*@ ] TA8 c@- A9) +&+D,% uF (LLj05 +p2
-B4uCC!Ko6WE-,f4 DKCuE 06; 5UB l7 R* H#R >X4 aVtcOu 8C 3DfBf4 Df0
-WCP,i2'Cia0N4aW >WI? IQm 30 Ia 6V3 3Qn !Bl U*FE
-2M8P!+/T/Wr;\Fc nqO1 O XV 5/ Tc# UAW eitP #ZpnA
-We*t3A5;iFD5Z2F -8_M1O YEc D fBf 4D f0WC Ou% NL8M=agBkM +$+D>>#B4uC
-M09S,#@<,jrA7^+ N3/B;P As, ? 63Kd 4%Ed KHK GA2#8/okBE 6=FClBOPpi@
-ru:&N[%G1G9CaFF *&O7Df 0Z* Bl5& 3DJX S@A 8,[jFE8QZ+ EVNE3A3%+@;
-0doATDg0EfrY8P# Qjm8N ]*gE b0,A0 61WA Ch[ cu@<+#B@WN Yr+C\c"@rGm
-hH\aA=WI9q$>q]Z #F!+[ 0@UX: eDe*F B@Y b&J!Jgf?;L <(gBkM+$I?K
-4g04JC3+Bost@<, jrA7^p5 L]NY>L ]W`;H \_Z MP(R$nDfBe @DfBf4Df0V=
-5!C*"Df0Z-Eaa0TE%`kbASu<uDIm6sP#RT)I?G)'1G<cWGEOqKA1r(@/n8fPFCfK5H"(o:FDl%
-L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/raw 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp raw 0.0 2015050900 55514 55371
+%%BeginData: 52 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/raw {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /height 1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /height height cvr def
+
+ % Validate input
+ barcode {
+ dup 49 lt exch 57 gt or {
+ /bwipp.rawBadCharacter (Raw must contain only digits 1 to 9) //raiseerror exec
+ } if
+ } forall
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs [barcode {48 sub} forall]
+ /bhs [barcode length 1 add 2 idiv {height} repeat]
+ /bbs [barcode length 1 add 2 idiv {0} repeat]
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/raw dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER raw--
@@ -4657,32 +12618,84 @@ L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: FATDAFTDAD
% --EXOP:
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp daft 0.0 0 0 0
-%%BeginData: 24 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04\L'F F/ fXOu8C 305
-kfOBl@m1P!5$b04 J@1@r Gmh P!5 $ b04 ]!= FC] E#G9CL +C ia0N1G <EQ
-BkM+$MEWgP1QjP4 E-,f4 DKC uE0 6; 5U Bl7 R*H #R>X4a Vt cOu8C3 DfB
-f4Df0WCP,i2'Cia 0N4a W>W I? IQ m30 Ia6 V33 Qn!B
-lU*FE2M8P!+/T/W r;\F c nq O1 OXV 5/T c#UA WeitP
-#ZpnAWe*t3A5;iF D5Z2F- 8_M 1 OYE cD fBf4 Df0 WCOu%NL8M= agBkM+$+D>>
-#B4uCM09S,#@<,j rA7^+N 3/B t cD3@ )G3/ Bk` D3@)G3/C%e D3@)=<0D*]"
-HinN"FDe2GA2#8/ nAC&F@ 'DH 6YKn K@:O CjE fMe@5t4frD 09oA+Cf>-FC
-Am$+E).6Gp$U1@< ,ddFC fK6+ @Ib'5 qF-J +CT .u+B1!IEa` ['AS#n&DfV"
-*I?IQXP"@<9@<-0 qDBNC sEas# uAWgM c1G <3HF!+q#Eb o<)OpR:-04J
-U9+C\c"Ch7LI$'I *#!/LYb @<-0qD MS=VW I$: 4P!5$b04f$ 2+C\c"@rGmh
-+DHW4P"_#pASu"<!CW)6HX^H*+DHW3BOtmjBQTDRL^9/%P'CGLF!,1Q"__I]B4uCMCkr@[2Ni<
-5P#Q"1@u^RUP!+/$@WNZ+L]_=%BkM+$P&,p[OuAJJ@VBg*Bnuq+ASGdjFHUHr#a.*/G^Y`SASu
-"<!Ci58HX^H*+DHW3BOtmjBQTDRL^9/%P'CGLF!,1Q#\[d`B4uCMCkr@[2Ni<5P#Q"1@u^RhP!
-+/$@WNZ+L]_=%BkM+$P&,p[OuAJJ@VBg*Bnuh(ASGdjFHUHr#a.*/G^Y`SI?I,`4>1_dDD*Y`A
-Su<uDIm6s04JC3+C\f$04JU9+C]#*06:TD+BostBQK>GL]N[<H\t%t;='0)n"$b4P(SWV\5DTu
-05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b%@:jVE30If*F_`U
->D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDt
-YuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/daft 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp daft 0.0 2015050900 58288 58222
+%%BeginData: 76 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/daft {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /height 0.175 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /height height cvr def
+
+ barcode {
+ dup 68 ne exch dup 65 ne exch dup 70 ne exch 84 ne and and and {
+ /bwipp.daftBadCharacter (DAFT must contain only characters D, A, F and T) //raiseerror exec
+ } if
+ } forall
+
+ /barlen barcode length def
+
+ /bbs barlen array def
+ /bhs barlen array def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /enc barcode i 1 getinterval def
+ enc (D) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (A) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (F) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 8 height mul 8 div put
+ } if
+ enc (T) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 2 height mul 8 div put
+ } if
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /bbs bbs
+ /bhs bhs
+ /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/daft dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER daft--
@@ -4693,34 +12706,80 @@ YuCM@[!I?IP~>
% --EXAM: fima
% --EXOP: backgroundcolor=DD000011
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp symbol 0.0 0 0 0
-%%BeginData: 26 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 06;DU@ W- (0L_Q" 0Op
-s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW eif
-E-,f4DKCuE06;5U Bl7R* H#R >X4 aV tc Ou8 C3D fBf4Df 0W CP,i2' Cia
-0N4aW>WI?IQm30I a6V3 3Qn !B lU *FE 2M8 P!+ /T/W
-r;\FcnqO1OXV5/T c#UA W ei tP #Zp nAW e*t3 A5;iF
-D5Z2F-8_M1OYEcD fBf4Df 0WC O u%N L8 M>.1 D.7 F"F!*S-04n p8@='YK@WNY
-rMEh^Q!/a#Q!!%m A&-)]f 5r8 Q AMEh ^Q!/ a'! !!%mA&-)]f 5S*nqMEh^Q!
-*taD04JU9+Bs^f+ 92D!59 Kq+ ME`3 `!/` u`! !%m@+92CIO u"b#@WNYrL]
-E52L]E52L]C_D1O YDr04 np8@ XBbL@ WNYr MEh ^Q!/a%o!!% mA&-)]f5S*n
-qMEh^Q!/a%_!!%m A&-)] f5S*n qMEh^ Q!/ a%o!!%mA&- )]9Ou"b#BQG
-;#ME`3`!/`u`!!% m@+92D! 59Kq+M E`3`! /`u `!!$;f1G<3 HF!+\C!/LW2
-!/LW2!/LV\Ou%NL%PMF.D.@oGF(025>DbZW!!%mA&-)]f5S*nqMEoeo!/a#Q!!%mAfDko/5S*n
-qMEoeo!/a#Q!!%mA&-)]f5S*nq?'6us@VBg*>DbWf!!%m@+92D!59Kq+ME`3`!/`u`!!%m@+92
-CIOu"b#@WNYrL]E52L]E52L]E52?'7!lOq'-WBl.C-06:TD+Bs^g&-)]f5S*nqMEh^Q!/a#Q!!
- %mA&-)]f5hH&:MEh^Q!/a%o!!%mA&-)]f5S*nqMEh^Q!/a#Q!!%mA&-)]9Ou"b#BQG;#ME`3`
-!/`u`!!%m@+92D!59Kq+ME`3`!/`u`!!%m@+92CIOu"b#@WNYrL]E52L]E52L]E52L]C_D1OYD
-r5!G,cF*VV3DesJ;@UX:eDe*FB@$5JU04K->E,[FNH#7#/CfP@gDJs`:;gE4hDetFR<GlSiDg-
-(AF*VV3DepP6@;TQuE,ol?Bk1dc0/%?SBldisEcQ)=P!=AX<-*>%@W-((+C\c"@rGmhP"Us&4?
-P9;ASs.SEb0-)Bl7KjE\DKCF!,O5F"_!9F!+q*F"_!3F!+q$F"_HNF<GL@FD5Z2F!*Y1+CoD.F
-C]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$F*VV3DetRrP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=
-E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/symbol 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp symbol 0.0 2015050900 58044 57965
+%%BeginData: 72 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+begin
+/symbol {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /symbols <<
+ /fima {
+ /sbs [2.25 2.25 2.25 11.25 2.25 11.25 2.25 2.25 2.25] def
+ /bhs [.625 .625 .625 .625 .625] def
+ /bbs [0 0 0 0 0] def
+ } bind
+ /fimb {
+ /sbs [2.25 6.75 2.25 2.25 2.25 6.25 2.25 2.25 2.25 6.75 2.25] def
+ /bhs [.625 .625 .625 .625 .625 .625] def
+ /bbs [0 0 0 0 0 0] def
+ } bind
+ /fimc {
+ /sbs [2.25 2.25 2.25 6.75 2.25 6.75 2.25 6.75 2.25 2.25 2.25] def
+ /bhs [.625 .625 .625 .625 .625 .625] def
+ /bbs [0 0 0 0 0 0] def
+ } bind
+ /fimd {
+ /sbs [2.25 2.25 2.25 2.25 2.25 6.75 2.25 6.75 2.25 2.25 2.25 2.25 2.25] def
+ /bhs [.625 .625 .625 .625 .625 .625 .625] def
+ /bbs [0 0 0 0 0 0 0] def
+ } bind
+ >> def
+
+ % Valiate input
+ symbols barcode known not {
+ /bwipp.symbolUnknownSymbol (Unknown symbol name provided) //raiseerror exec
+ } if
+
+ symbols barcode get exec
+
+ % Return the arguments
+ <<
+ /ren //renlinear
+ /sbs sbs
+ /bhs bhs
+ /bbs bbs
+ /opt options
+ >>
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/symbol dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER symbol--
@@ -4729,665 +12788,1902 @@ E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: PDF417
% --EXAM: This is PDF417
-% --EXOP:
+% --EXOP: columns=2
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp pdf417 0.0 0 0 0
-%%BeginData: 310 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05tH61 bg q9L_Q" 0Op
-s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW ei&
-@rH4'@:OC%AmoLs AWei& ARf OfG %G KG s,o /k@ rH1+D/ OE N!0T,k Ec6
-/CL]ESo061uTD09 Z:L] `er 04 SL %+D ,%u F(L Lj06
-1KF+D,%uF(LLj05 t??F ( HJ +@ ;L! rOu %#qF D5Z2F
--<^[F*)G:DJ+':E +P1qH\ _]c 2 3JD eE -,f4 DKC /fX(GdVF(L LtH]gXBP#RT
-(P%'TNOthst4d(e HEckrV 4aW > DP!5 %OP! 5$b I=%,/FE2M8 Ou%NL<IL$AO
-rfcH05kfOBl@m1P !5$bI? IQJ E-,f 4DKC /f1 OYEX04eX0A ThX$+D#&!AT
-hX$Ot;bP04Sp:F_ u#;+C f>+F _u#;O t;bP 061 uTF!,LAGB8 ouOu"b3Dg-&
-@Cige?Dg-&@Cikg nOu%& cEcYf =05Yc C+C \c"@rGmhP% 'TNOu"b+L]E
-So@UX:eDe*F+NWE ILNI-gJ D0'?Q5 &-6EP 'N4 "C6AUR!KmI :C6CcD1QlmD
-3/@Qj"-Q?@/8]H@P!3W:!KsFF5*C/R30Ia,"-TX>"-Pj29RV8N3,N_LP!3WD5*C2S@VV&,05?Y
-6Ou"b#@<,jrA7Zm#F(^:/C6D8R1Qk"OP#ZpnAUT_@Eaa0=04\L5@s;u:@UX:eDe*FB@Zh%\1G<
-Hu!0T,kC5;kQ1OEgY@UX:eDe*FB@Zim$P!FGY<%ha*+C\c"@rGmh+DHW4Oo^@@P"_#iOu$WWFC
-TN9+DN$/GER2(Bcq,G"HieK1G<JcC5;nR!Ko6eP%?:W@<?"'F!,"%FCTN9L]D1Q9Th2[HS8i:E
-bo<)+C\c"@rGmhP%'S1@UX:nAT!;.P%odQP!+.FA79RiGB4m9@<-0qDMSL[;MYL>Ckr+T!KmbP
-1Lsp9@s<!M!/:TGP'DD%04\L5@s;u:@UX:nAT!;.P#@)>P&+T9Ebo<)L^'#WOo^@>Oo^^POu$W
-WFCTN9L]E/3Kp$\/P#[;<L]LsnEbo<)L^'#?L]N[<HS9)r5*@]TD0'0-+Bost@<,jrA7ZltL^'
-#YL]`f6H[V&K?'6usD0'3.+Bot*F(03R!g7\h5)'(<P&-9^P!4O!!<<+_Cm"gT"+-1jL'**lC6
-Cc8",)h8I?K4gOu"b-F(025>9IB`Eas#uAKY]C#*NeY"-N\@"-Q?)I?I0-Ou"b-F(986>9Ia'@
-WR\6P')pOL&h:;Cm"g^5(in:!!&0uOo^@@H]g@C",)hPP!4U&KT]5]P(R&'1G<6^F,1!_$'I)\
-F(99I!0TulF(99I!0U!0!BcN]Oo]':F,0sT!g6Z?",)hPP'D]`KT]5LF(99I!Kp*=!GumfF,0g
-Z983M!P&-9^D0'3.L]NZ3L&jE"Cm"g/GB8QBL]W`AL'**lC6Egr",)h8Cia*-L]W`4Oo]E@@rm
-G+P"UTFP&-9^D0'3.L]NZ3L&uphCm"g9F(99I!g632!BcN]Oo]':F,0mR!g6Z?",)hPP'D]`KT
-]5LF(99I"-Q<?!GumfF,0j[98F:FCm"g9F(99I!g632!eHMNOo]':F,0jQ!g6Z?",)hPP'D]`K
-T]5MF(99I!g634'U!9q!Fp=pL]E55M#WWnL'**lC6EgP@<?"'F!,1Q"d3\X!KmInGB8pmI?I,S
-Eb0)1@UX:nAT!;.P%p.9Eb0*D!0V2GA79RiGB4m;@<?"'F-:!QASmU0>9IB`Eas#uAKYGjEbo<
-)+ED%1P,WJ5D3@S>I?I0-P'MJ=<+BEJHS8o<FCTN9+BsR&Qt0WI@s<!W!g7\3Ou%NL<.0p005V
-hB@<?"'F-:!q1M('4AThX$M#WW$HYnQeP$r\jARfOfG%GKG!g5?fP#Q:S.?[;?L&dm0@?Lb?04
-eX0AThX$L]`erI?IQHL&dp18o9:`5a#Q="FDe5@r,_"ASd/*Ou%NL<,I?j6'=ie04eX0AThX$L
-]rqtI?IQXP#O)O@<c?nCh7d$Ck`%bL]N[<D3Cl7DMS@1DNZo@/;O=iWKK&K@r,_"AS`K+@<c?n
-Ch7d$Cm%VA04eX0AThX$+DkP3ARfOfG%GKQ1OYEc05H@FARfOfG%GKG!KmIpG]8fsOu$TdCisT
-4F,0gZ4aShlDesQ5DK?q;+D[,@L]`euF)c5BP)5>QOu%NL<+Bi_F_u#;L]NZ2@rH1+D/OEN*g0
-rp"FDe3+Cf>+F_u#;Ou%NL<%i87D'3VW!Jgc>!Fp%aF_u#;OuAI7Ot;bPEZfC@GB8pZEc6/CLg
-#sMOp$+bEZfC@GB8p'I?IQML]`fPHS9Dq"-PHgP#O)O@<c?nCh7d$C`m41Eft6p!KsF!P,W88L
-]VC1OuAISL]N[<L^8e<Or9EZH]gR@P#RTeOu$r`G\(B$AThX$+D#&!AThX$P#-KYARfOfG%GJ4
-D..[#@r,_"ASdMc05H@FARfOfG%GKG!KmIpG]8fsOu%NL<%i,3@j#fTCho35Ou"b$GB4m:+EEW
-]L]NY>OpR:-@s<!M!,dsE@s<!M!G#V\@s<!WH"2&>+Dlo8Oo\c0DBNeZWJCS<WI'@%KRK#9?'9
-JCGB4mE+Bot(H\_ZMP(SPj?'9IdEcYZ*DeC1sL]N54TR2h]L]`fVL'+-4C427t?'6usEcZ&8B8
--M^OpR:-L]N;4L'+)qOuRK'@;KjpP!5%%P!3o-Ci<sB",Hu@LQZn1P"76HF)Z/<A:'+6Or9&UP
-&6@GL]ETTOp$,PF)5c-P!5%%P!3o-Ci<sL5*AR%!JU]LP%o#Y@;KjpP!5%%I=%-"P')Q\I?ITY
-Oq*X204Sp3AnH*,>DN;qH\_ZMP(R&'1Pc'f!Gd$8Bp(ZC1Lk?7AnH*,Bcpo(AS,Oq+DHW4P,XU
-;P'C\s!KsF<s+g]&05?Y6Ou$TdAS,Oq+DN$/De3NmF!,4R!KsFF94MmOAnH*,C6D51F(&m'B-:
-oO96,)mEc5KO!JU]MP%p/)I?I-2De3NmF,0g+De3NmF,0gZ96,)^Ci<r/Bp),0F)Z/<A<M1cP"
-769De3NmF!+t2AS,OqL]Cq'AS,OqP%'4JP,XU<Ou$TdAS,OqP%'4JP,X9:L]Dd3De3NmF-8_C!
-g4Fa983PBP!5&.P'DD<8;I8%!H*\oP,Wd]FHSgtGB8p2P"T;/F!,@`99K=1"/1lmOu%moL]M:I
-!KsF/05?Y6Ou$TlF!,?CC6AU-GB4mE+DR&?L]NY>P"UN3Tl_DeDe3NmF!,6@C6GQP!KsFF99O+
-G"/1lmP,XTFL'+-4C6EgiP":"a88a4aDBN_X!IKth@s<!W5)'05@s<!M"c32ALQY;nWJ1MKP%p
-/)I?I,S@s;u:@s<!M!+U4oP%'4JP,XU<Ou"b$Cisf@ATDi7>9I.'!!1WcKE)&<n:UcBomDDm!S
-$%\!!2A0KE)&G5(in:W5+&d!Ru(A!!0$+KE)$L5_K+<W%`l)!Djnl!!04;KE)&(n:UcBl[4?c!
-Nb44!!1YqKE)&=5(in:=MTRi!N^6n!!-20KE)$Y^k;[gY4.)E!S;^P!!-?_KE)%UG_?%tf04if
-!F0Ss!!05bKE)$Zn:UcBYC)!'!FC#(!!08eKE)$[I"VJ#p%j=A!RfnZ!!2>/KE)&F^4ZIeUqhW
-`!Rbq?!!2=HKE)%K@"\L\dPum[!D#J/!!/lLKE)&$*/":m80EQc!MgQc!!,V%KE)%Mi.M(2ds-
-NG!U7=O!!,d/KE)%ME.e2ldl`9`!DHmS!!/rVKE)&%*eXLo9JD,"!N$ii!!,jQKE)%NG_?%te%
-UJ8!D[Te!!/u[KE)$J3.q84V]LKk!Ddrn!!0"3KE)$K4G3\8:EG/h!M[A_!!1JdKE)&:]S$7cU
-0rWS!RWl[!!2;TKE)$@5_K+<U+h6#!RVm?!!,J1KE)%I(k_ki6kG"O!CR3H!!,R)KE)%JE.e2l
-dCb,4!CgIM!!/iSKE)&#SqI(E7PKJq!M^Wf!!,P+KE)$B%"nT]7rX+]!Md;\!!,SLKE)%JSqI(
-E7i[0^!CseU!!/d$KE)&"\:ah_k[&oB!CB&)!!/cIKE)&"S:gkC66Lp]!ML?`!!1H,KE)$>&;1
-#aTaZSS!C@'F!!/btKE)$?@"\L\Tt#aU!RT\V!!,G@KE)%HS:gkC6PtIV!MPO,!!,FqKE)$?#(
-usWU#(G&!CMm#!!,ANKE)%GY_2uWcs25(!C7i]!!/a[KE)&":4rTJ5nJ\L!MGC)!!,@kKE)%GL
-4fO-5m2i@!C<rC!!,BQKE)$=N._035bNc1!RNHP!!/`dKE)%G7YCaB5_=Xh!Qs>R!!22+KE)&D
-^4ZIePe_qP!QoA7!!21DKE)%;@"\L\auG%S!TbAU!!+K5KE)%;0SBE,-m40C!LDYs!!18fKE)&
-7^4ZIe/AQo=!L@\X!!18*KE)$(@"\L\Q8jNt!A#pX!!+VfKE)$*i.M(2Q["/`!R&31!!+]kKE)
- %>4G3\8/i\La!A5@F!!+`tKE)%>^4ZIe00Fmf!AD0?!!1fhKE)&?E.e2lp:Q%Y!SUq7!!2IHK
-E)&HSqI(EZp99E!ST5\!!2I,KE)%[+G9^qg),JC!UUAM!!0G<KE)&,%"nT]P/)_N!Qf;6!!2/n
-KE)%]^k;[gP$iqC!Qd<S!!2/PKE)%]@"\L\gGjid!UZJ3!!-n$KE)#u+G9^qOr/iP!Qbh)!!-m
-YKE)%](k_kiC_27"!@GU8!!/:&KE)%p]S$7cDSUo*!@D3-!!/9CKE)%pSqI(EDIA+t!Ok%A!!1
-iGKE)$j0SBE,-5_C9!H&a-!!+HdKE)%:]S$7cDfC@0!@Kj[!!/:TKE)$k3.q84\"86Q!H/s2!!
-+I[KE)$k]S$7c-_>tk!H4Q_!!1b\KE)&>\:ah_p0NCP!O=tD!!1b,KE)&>S:gkCZ64f#!SJ<C!
-!2GHKE)%Y&;1#afaNN6!O;ua!!0A.KE)%8@"\L\aLHm'!T[R?!!0E6KE)%80SBE,aIIn`!G4TM
-!!+8dKE)&+S:gkCaGtoR!G3I-!!+8TKE)%8%"nT]Ae9Uq!OE2f!!/2dKE)#s"G?aU,@H0)!Kjm
-F!!10tKE)$c@"\L\,;=cN!Kin*!!-^dKE)%ZS:gkCOcG(p!G<7&!!+;QKE)#t#(usW,IiC,!Kl
-5l!!-`BKE)#tS:gkCB:OVT!@*VX!!-_mKE)$chLkk0Ys<sB!SFW0!!2FkKE)%X+G9^qfU.<l!U
-NR7!!0>9KE)&*N._03Ym?!_!SE-[!!0>-KE)%X!e^OS+[C\\!KaO=!!1/GKE)$_5_K+<+WuF<!
-K`\%!!1/9KE)$_+G9^qZ'^1E!SG\N!!-R@KE)#r#_W0YOG8Dg!FlCg!!0?ZKE)$_"G?aU+g?V"
-!Kc)i!!-T6KE)#rR"PG?ONrLZ!FqLM!!0@MKE)$_N._03+bkXM!Fpk;!!-TbKE)$_c@c/uYb6X
-L!SCM-!!2F=KE)%WOG!T7fM$qu!O.B5!!1_AKE)%WKS0=+Y_%N.!?e%g!!/0`KE)%o/qa3*@A&
-8R!?dJW!!/0TKE)$]OG!T7Yfqb#!K]d(!!-MaKE)#qKS0=+@>':6!?cuI!!+4pKE)$]fRs5*@E
-aB)!Fa!$!!1_'KE)&*-A2@"YX4!C!K\jc!!+35KE)$\aFjNo@)R]u!FWct!!.tmKE)%lE.e2li
-k0pE!K(9<!!1%uKE)#e5_K+<MD0\`!Q?%3!!*cVKE)%1(k_ki'G,ot!>Gfm!!*kNKE)%2E.e2l
-`Opj(!>]'r!!/!;KE)%lSqI(E(,1CA!K.qN!!*iPKE)#g%"nT](N>$-!K4UD!!*lqKE)%2SqI(
-E(EA).!>iD%!!*n-KE)%t@"\L\k.$'E!V9WN!!/NRKE)%t0SBE,k+%))!Lb-a!!1=]KE)&8Ne@
-B5RLk,P!R2%+!!/MoKE)%t#(usWM-tu:!Q;L$!!2(cKE)%B@"\L\M(jS_!Q:L]!!+uCKE)#c+G
-9^qc('Fe!Q:"O!!+u#KE)%B(k_kiM%#%;!B(LB!!*]<KE)$2#_W0Y'4?In!K"=>!!1$pKE)$3@
-"\L\'/5(>!R9JS!!,#4KE)%BS:gkCM2m5h!B1jK!!*`AKE)$3%"nT]'=`\q!K#Zd!!,$gKE)#d
-S:gkC2k5O$!>CKH!!*biKE)$3hLkk0h*?Vn!Ud1F!!2h!KE)&/+G9^qm[/Y-!V]?B!!1meKE)&
-@N._03h$AZ6!Ub\q!!1mYKE)%@5_K+<bcla#!TmX?!!0\sKE)%@+G9^qmbEHq!Tm.1!!0\SKE)
-&/R"PG?m`pIc!P8nr!!/JnKE)%sL4fO-]*O&i!SrK`!!/JhKE)#b5_K+<Lp2O4!Q85r!!+l@KE
-)#b+G9^qLmWhq!Q7`d!!.:/KE)$/+G9^qR@&X-!R/iB!!.9dKE)%bR"PG?h9LZR!JlJ`!!.9TK
-E)$/#_W0YR>-@p!I"g&!!*Z5KE)#bY_2uWLtmX`!Ags5!!*\!KE)%/c@c/uGHc`#!Ag*r!!/M5
-KE)$sR"PG?]?Z'0!>1'>!!+m1KE)#bgk5Y.1YdW`!>3V1!!.<!KE)$/c@c/ugn9<#!Ua'C!!2g
-HKE)&.OG!T7mS&96!SiKa!!2LWKE)&.KS0=+gk(1Z!LTO5!!1;GKE)&8/qa3*\Y+TU!LSt%!!2
-M*KE)%`OG!T7grtEO!R+#d!!0WdKE)%?KS0=+\V,V9!LSIl!!0W^KE)#aTS*:GLff<1!Q6UD!!
-+gIKE)#aOG!T7LeNI%!HXoe!!+g9KE)%?b_,rsLdm$t!HX?U!!0XSKE)#aKS0=+F,5JL!AT7\!
-!*X_KE)$-JqO+)&D2X9!JkWH!!+h,KE)#ab_,rsF4c-G!AVfO!!*YNKE)$ob_,rs0uekH!>+[P
-!!.0/KE)&.:kSfLmOX"k!Sg5!!!2L7KE)&.7"bO@gd6Yo!LQ]:!!1:pKE)%_d"DB"Qq2l1!R)m
-D!!0UNKE)&.AqU-b\AX%#!LQ3,!!0UHKE)#a:kSfLLb+2Z!AMlR!!*X%KE)%/-A2@"ER9@=!AM
-TJ!!/I!KE)$maFjNo\E8GE!>%SN!!.)XKE)$,_LqmiEPdA/!ANkn!!.*+KE)$mk(E^8mM:HU!S
-elP!!1:ZKE)%?,_Q-uQm.1`!>$Z4!!+ceKE)$lk_&p:&0cc-!AIu9!!.d]KE)#[5_K+<KeS/[!
-=Bs&!!.cjKE)%iNe@B5$4qjj!JLr8!!*E4KE)%,#(usW$XeVf!JS%:!!0snKE)#\0SBE,Kq*er
-!=K`t!!.e6KE)#\%"nT]$O27a!=QDj!!.f1KE)#\S:gkC$]]l?!=Rb;!!/'EKE)%mY_2uWj'76
-;!KA4T!!1*,KE)%4&;1#a`f,QN!K@A<!!1)oKE)%4"G?aU#sa.D!JI\1!!0rAKE)#l5_K+<#p=
-m$!QNoJ!!0r3KE)#l+G9^qNL5A!!QNE<!!+#MKE)#Z#_W0YKSG-[!?2;t!!/(6KE)#Z!e^OS$*
-]'_!JK6]!!+%CKE)#ZR"PG?K[,5N!?7DZ!!/))KE)#lN._03$&4*5!=@P7!!+%oKE)#Zc@c/u)
-pX*:!R@?k!!27bKE)&EY(QcUcB*\Z!U!.0!!1B$KE)&97YCaBc@giN!R?:M!!/%OKE)%m=G-YT
-SY1W9!K<+n!!1)5KE)%DOG!T7cHLqA!QIT^!!/XHKE)%3KS0=+SV2Xr!K;V`!!/XBKE)#YTS*:
-GKNNm-!?%P`!!*@eKE)%mDM.uj4.q6,!?$uP!!/&&KE)%+7YCaB4-5*q!M.Gf!!*@YKE)$7LkG
-a/)2*YC!=4:1!!*shKE)#YfRs5*KPlGC!?'OC!!*ALKE)$7fRs5*)9da6!=6\u!!,1*KE)#j`e
-4<m#k!?G!?(<Y!!,1LKE)&A:kSfLpT0#J!UiR4!!2hkKE)&A7"bO@mm;[-!R=Mp!!276KE)&0d
-"DB"mqdXW!Tte_!!1rtKE)&AAqU-bhSb'I!R=#b!!1rnKE)%3:kSfL`[lcC!M%Mi!!/$LKE)%m
--A2@"^!ME4!M%5a!!1AWKE)%daFjNohWBIk!K9?u!!0dOKE)%C_Lqmi]u#F&!=2MT!!.a(KE)#
-id"DB"#Y9UK!JDeQ!!,+,KE)#iaFjNoN+R_C!IN1H!!,+$KE)%Ck(E^8#XX1E!IMn@!!0dqKE)
-#i_LqmiHc1R;!=3Lp!!*r'KE)#YAqU-b3UDD!!>ssP!!.H5KE)$5k(E^8Hfft]!UhFi!!2h[KE
-)&A,_Q-umimDb!R<*H!!26uKE)&0BS6?dml#h!!T%@?!!1@hKE)&0@Y=^^N$s>Z!QGn.!!/U'K
-E)%3,_Q-u]]b"K!M!\R!!/$&KE)%cjFdL6S77-O!PIEF!!*?RKE)%+(5)Yg(heR&!K8pi!!,(C
-KE)#iA:sp`#U4p%!I<m^!!,(?KE)#i@Y=^^H/sVY!BB(l!!.B)KE)#iG(]hrH1lmk!UgYS!!1q
-5KE)&015#W.S2>m!!PEN-!!0`QKE)#i1kYi03-9fR!I46i!!.?8KE)#V5_K+<"X&Hu!J6\l!!*
-67KE)#V#_W0Y"U'JY!<o]\!!*7jKE)#VN._03"bq[1!<q83!!*8KKE)%-TS*:GL6.&g!Q.Ta!!
-.h1KE)%j7YCaBL4k3[!JZ2Z!!*4qKE)%)=G-YT%A8@S!J]6[!!.[FKE)#^OG!T7L<P;N!=aj<!
-!.hoKE)#^KS0=+"G2:,!=aX6!!*5TKE)%)DM.uj%G6=6!J^#q!!*PQKE)#U`e4<m%E=&$!<hhD
-!!*PsKE)%n:kSfLa%1j`!QRT]!!1,,KE)%-:kSfLNmNFZ!QT#0!!0taKE)%5aFjNoa(Bu)!KP*
-O!!.g@KE)%5_Lqmi"AjaO!=[>.!!*3nKE)%)-A2@"*RKH>!=[&&!!*3jKE)#naFjNo%)df!!<b
-`B!!++YKE)#]_Lqmi"Di_k!=\=J!!*47KE)#nm">?>%-E3C!?L<U!!28]KE)&9UkA^KkG!V0!Q
-QUA!!1DZKE)&9[Y+V]cX_\/!QQC;!!1DTKE)%-."hR$_\Rn*!KLiH!!1+uKE)%Ek_&p:Nb!eC!
-JVeO!!/\PKE)%5@Y=^^T&PD'!<ag(!!.ZeKE)#]BS6?dL,O\b!?C<V!!*L=KE)#U,(ops4m7P!
-!?C0R!!*L;KE)$9jFdL6*9)VO!<b<6!!*LOKE)#mp4NDH4naO/!Vb)s!!2iBKE)&9P_9#;n$I`
-J!U#W!!!2PoKE)%n'SHGecSU:T!QPh+!!1u!KE)&!15#W.hf=AM!JV;A!!/*:KE)%-&qg5cSof
-Vc!KJpg!!0h+>p*@)!!2b#KE)&L\:ah_l9L"&!VJ."!!2qdKE)&<+G9^qob`>^!W%h0!!2?rKE
-)&G%"nT]l3N%C!VHYM!!2?fKE)&=@"\L\osfYT!W(Z+!!1Y9KE)&=0SBE,opg[8!S/BH!!2C&K
-E)&GNe@B5ee!K7!UC/I!!1XVKE)&=#(usWec^X+!S:_4!!2DqKE)&GhLkk0Y!@X?!S9#Y!!2DU
-KE)%U+G9^qf,0/@!UGc!!!056KE)&)%"nT]XpB[\!S7O/!!05*KE)%V@"\L\f=6J6!UJTq!!-C
-kKE)%V0SBE,f:7Ko!F?n%!!08?KE)&)Ne@B5?4_bi!Nuob!!-C3KE)%V#(usW?XSNe!O'"d!!1
-^.KE)$[0SBE,YFL7G!FH[s!!09`KE)$[%"nT]?atah!O(@5!!-GsKE)$[Ne@B5ks0n%!VEUL!!
-2q$KE)&;+G9^qoU(:3!W#QE!!2<qKE)&FN._03km2qB!VD,"!!2<eKE)&;!e^OSdm/Qd!U6hA!
-!2`IKE)&%+G9^ql'R,(!VFZj!!1O[KE)&;N._03dg1U,!U5>l!!1OOKE)&%!e^OSVa,n8!Rn9+
-!!2?>KE)%N+G9^qe!Pdg!U7m_!!/u/KE)&%N._03V[.qU!RldV!!/u#KE)%N!e^OS:I'R5!N3/
-T!!1R(KE)$K+G9^qVjN,;!Ro>I!!,k,KE)%NN._03:C)UR!N1[*!!,juKE)$KY_2uWVqcq*!Df
-)9!!0"CKE)$KN._03:PON&!DhL(!!,m@KE)&:TS*:GoN6bH!W"F%!!2;FKE)&F9S<BHk_Oll!V
-Aj7!!2;:KE)&:JqO+)d@c-m!U/0h!!2_0KE)&#OG!T7kfe\[!RZ^V!!2<'KE)&#KS0=+d=R#O!
-Mc<@!!1L"KE)&:mXtQ@UQC-/!R],E!!/jNKE)&#`e4<mUP+:#!Mb7"!!,T_KE)%JfRs5*dI)Yf
-!Cr6)!!/k=KE)$CLkGa/UW.re!Cqfr!!,TAKE)$CfRs5*U[Ed8!Ct@e!!,U0KE)$CmXtQ@kYQp
-4!V@pr!!2:SKE)&F-A2@"kX:((!U)k'!!1HnKE)&:CkMchd)^k?!U+-K!!1HbKE)&"_LqmiU!S
-Gm!RU1d!!/e7KE)&"k(E^8Tu;Ta!MRA`!!,I6KE)%Hm">?>6cao\!MSY/!!,I*KE)$?_Lqmi6g
-TI+!CQ"&!!2:3KE)&F(5)YgkTkf]!U(_\!!1G[KE)&:2M;&2ct%e0!RP;/!!/bVKE)&"G(]hrT
-]Cb+!MJG*!!,CLKE)%Gp4NDH60*\!!C>^u!!29tKE)&:&qg5ccnpCU!RNTT!!/a7KE)%GEeFDn
-jZnJ!!V3IJ!!2n#KE)&7+G9^qnsG(1!VoKD!!20mKE)&DN._03jTpM>!V1tu!!20aKE)&7!e^O
-Sb<U^\!TgP=!!2ZGKE)%r+G9^qjd:]$!V4Nh!!17SKE)&7N._03b6Wb$!Tf&h!!17GKE)%r!e^
-OSQU$3(!R%^#!!2 3:KE) %>+G9 ^qbF! q_ !Th U[!!/D tKE)%rN
-._03QO&6E!R$4N! !/D hKE)% >!e^O S0 0k0 j!L L$D!
-!19uKE)$++G9^qQ ^EF+! R& cA!!+ _aKE )% >N. _030* m42 !LJOo !!+_
-UKE)$+Y_2uWQe[5 o!ABg n!! /G3 KE)$ +N ._0 308>,[ !A E5]!!+ auK
-E)&HTS*:GqcJLO! Gh1X! !2e TKE ) &M9 S<B HC& !>]!VV >& !!2sdK E)$
-dr.G%Np4S)!!VV+ u!!2/ RKE )&D =G -Y Tq( @=# !UZP5! !2 /BKE)& MDM
-.ujm>uu$!VX`j!! 2X[K E)& ?L kG a/j Fi0 d!U YPn!
-!2/4KE)&?JqO+)a e4:e ! T_ md !!2 Y.K E)&- TS*:G
-acM/U!T_IX!!1i9 KE)&?b _,r s jMl iQ !S`E `!! 12pKE)&-KS 0=+ab#0G!S`
-3Z!!/:VKE)%pfRs 5*jR.[ $!O n _T!! /:FK E)% pb_,rs[uc7 C!SbhO!!13]
-KE)%^LkGa/PD"Sh !Om`8! !/: 8KE) %^Jq O+) -_Q+m!L)/h !!140KE)$kT
-S*:G-]iu]!L(`\! !.#"K E)%^ b_,rs PK&7 U!H 3dI!!+I#KE )$kKS0=+-\@
-!O!@QNQ!!/;OKE) $kfRs 5*-d7 5D!H6 28! !+IeKE)$k` e4<m-glWf!V
-T?C!!2sJKE)$apk /VJp.0i :!W+3s !!-X. KE) &H7"bO@A:B 13!VSj5!!2.
-WKE)&D/;+!(m*LCc!TZe)!!2X;KE)&>aFjNop1AsX!URaX!!2.IKE)&>_LqmiaO#S?!T\'M!!1
-d"KE)%oaFjNojCX&F!SPPI!!2HKKE)&+`.S*kaMNT1!SP>C!!/5/KE)%om">?>Zd=@*!KkHV!!
-11'KE)%ZaFjNog#dqf!OK^t!!/5!KE)%Z_Lqmi,LD)D!Kl`%!!-`ZKE)#taFjNoOlh;s!GBK,!
-!0FgKE)$c`.S*k,Jo*6!GB9&!!+>2KE)$cm">?>,NaXZ!GCPJ!!2dAKE)&M(5)Yg@f1lZ!VRdl
-!!-PXKE)&H,(opsj=#Z]!V."Z!!2G"KE)&H2M;&2lstbL!TYGX!!2FqKE)%oBS6?dj>MYk!SHU
-h!!1/OKE)&*jFdL6aC9f&!SHCb!!/2FKE)%oG(]hrZ06i@!SI+!!!0@cKE)%7ie.:4Z/UE:!?p
-Z[!!/2TKE)$_k_&p:+ln:V!Ft2D!!+8&KE)$_ie.:4+ngQh!FthV!!2d-KE)$]IY7\%p(E#Y!T
-XrJ!!2FCKE)&6&qg5clnX4o!Q[*N!!1_oKE)%o15#W.fQ)WF!K_DV!!0=rKE)%7EeFDnYk!GI!
-?h#f!!-O#KE)#qnq6uD@If'O!VQkR!!2-fKE)&>)MA(ka;T^3!SBGd!!/0BKE)%WH@u8!ih1r)
-!V'9F!!2ktKE)&4OG!T7nP"T9!TJog!!2UZKE)&4KS0=+idug`!QC^b!!2*3KE)&CDM.uj`K5`
-Q!TM=V!!1&pKE)&4`e4<m`IrmE!QBYD!!/"NKE)%lfRs5*ipMI"!K3%m!!1'_KE)%2LkGa/`Q!
-Q2!K2Va!!/"0KE)#hTS*:GMqE[_!QFJ[!!*mtKE)%2b_,rs(Pm_E!K4sN!!*mhKE)#hJqO+)(Y
-FB@!K6B!!!*n[KE)#h`e4<m([cqV!V9-@!!2nsKE)$1pk/VJo14N7!VrUG!!+qSKE)&E7"bO@1
-k()X!V8X2!!2(UKE)&C/;+!(k0Sb]!THY'!!2U:KE)&8aFjNoo4EXU!Tq=R!!2(GKE)&8_Lqmi
-`6a/;!TIpK!!1?kKE)%kaFjNoib!iD!R8]=!!26EKE)%t`.S*k`570-!R8K7!!.r'KE)%km">?
->S'Zfg!K"mN!!1%#KE)%BaFjNoc/sZZ!Lq#\!!.qnKE)%B_Lqmi'@;C4!K$/r!!,%*KE)#daFj
-NoM<9Hk!B8)Q!!/SOKE)$3`.S*k'>fD&!B7lK!!*c"KE)$3m">?>'BXrJ!B9.o!!2tqKE)$qn:
-UcB])73]!W/[G!!.3:KE)%aIY7\%qkA`D!H`^B!!.1*KE)&E."hR$q3H[6!AaS+!!2h-KE)&M[
-Y+V]G5R!n!A]+W!!2h)KE)&E,(opsG(,)E!V^&V!!2(-KE)&C(5)Ygk%KDJ!TGAX!!2NOKE)&I
-G(]hriZa$U!Uf$%!!24kKE)&@ie.:4`+Xf(!TH"j!!1=-KE)%kA:sp`h<9Ll!R0VX!!1#IKE)&
-/jFdL6bi49U!Suag!!.o>KE)%kG(]hrRHT;(!Jofi!!0^qKE)%@jFdL6LuO'f!P@EG!!/MIKE)
- %bie.:4&a4lJ!JpH&!!+n>KE)#bjFdL6GNa\[!Aiei!!*\kKE)$sjFdL61ZF&f!I*OV!!*]*K
-E)$/p4NDHqila6!HRsg!!0WZKE)&MP(Wf9EdWN?!HLAW!!2[*KE)$-IY7\%pG@O'!V6qW!!..i
-KE)&I15#W.iY7%G!Tl4l!!2'lKE)&@FG'Vpjt_Si!Uau]!!1"pKE)%sFG'Vp`%luG!Sm=#!!1;
-aKE)&.nq6uDLie:M!LWM4!!.mrKE)%`oRm2FR.>n1!P.cS!!*Z'KE)$-oRm2F&FtJS!H[md!!+
-hFKE)$onq6uDqhg%,!HEL?!!.('KE)&E$A8B[pDS\b!TFH>!!24#KE)&@3eRJ6`#=:/!R*TX!!
-1l$KE)%/3eRJ6R!ODc!P%uZ!!*XWKE)$,qLehLEVb=g!H>c+!!2%TKE)&BXFpQSiCJV%!Uut>!
-!2%HKE)&36A,=>_U*r9!T@jJ!!0sXKE)&3AqU-b_Sh*-!Q)^,!!.f#KE)%im">?>KueoI!Q*uP
-!!.elKE)%,_Lqmi$daP,!JTln!!*JKKE)%,k(E^8$cI\u!=Qbt!!*JoKE)#\k(E^8nYh*@!Vk6
-!!!+#9KE)&CUkA^K)Ld>>!V)n;!!2%,KE)&BQ@o5=j(O)G!T>;W!!2+jKE)&3,(opsj'mZA!Q&
-N'!!2%:KE)%mk_&p:_IS<"!QO2R!!0rGKE)%mie.:4K]n'h!Q'#5!!/)CKE)%+jFdL6NT>`m!J
-KHc!!/)=KE)#Zk_&p:K_C'!!?:6U!!*DeKE)#ljFdL6$0$U<!?:$O!!*E"KE)#lp4NDHq:(&t!
-BU"/!!/X>KE)&KdY%T$3dcS\!BNDt!!2VSKE)#jIY7\%o<a/N!V)>+!!,01KE)&EZ@i2Yi=pqF
-!TQ"i!!2$kKE)&9FG'Vpj"c8f!U"KV!!0qnKE)%mFG'Vp_D6cE!RC=j!!1)[KE)%unq6uDKQMk
-I!K?Z(!!.anKE)%DoRm2FN:MW%!M/e7!!*AtKE)#joRm2F#kEWK!B]q,!!*u.KE)$7nq6uDHLQ
-Rf!PNl6!!.CjKE)%d5(in:H9?i\!I>f?!!2o<KE)$5I"VJ#qq?]'!IK3I!!,)DKE)%"5(in:nV
-Vu"!V;b5!!2i*KE)&3$A8B[iu3RN!TuLs!!2P7KE)%i)MA(k`]AbQ!R?"E!!1sQKE)%+3eRJ6N
--^-W!M'">!!0e0KE)#YH@u8!)#Amc!BL"0!!.@iKE)%c^4ZIeGs$`[!I5`>!!,'nKE)$u^4ZIe
-GeA\0!I12h!!.=NKE)&2W.Y-Oi1u#+!T9]*!!0oLKE)&2[Y+V]_.83!!Pr5u!!.]8KE)%hG(]h
-rK&hRb!J9<a!!*8eKE)%)p4NDH"lt=:!<qJ9!!*8sKE)&Be:[f&%=Ws1!V"Nj!!2#BKE)&3["J
-D[i0&`n!TC>;!!0nmKE)%jFG'Vp_(pZD!Q/r2!!.[nKE)%-oRm2FJoZME!J^/u!!*5pKE)#^oR
-m2F"S.3G!=eUQ!!2l[KE)#nI"VJ#*Bo,V!V"6b!!2WDKE)&2MM(s1iL5E"!TUbE!!0nSKE)%j3
-eRJ6a*NC=!J3@c!!.h#KE)%5qLehL"F>_$!=\gX!!+,:KE)$9G_?%tT"]jX!BiPu!!,5(KE)#m
-^4ZIe4hcRL!I\p?!!0gHKE)%$3.q84^7KuX!IYr@!!.KXKE)$8]S$7cICt45!Bcs,!!.M>KE)%
-#\:ah_^0ZHm!IUDj!!.J-KE)$8?A&:ZI,9MV!IS.*!!.IBKE)%#/qa3*^pJap!Pl!o!!.XmKE)
- %(EeFDn!q_-G!<VhF!!2$3KE)%gRY1YA_7G:"!J*:b!!.^uKE)#SH@u8!#5WuQ!=lhs!!+.RK
-E)#oSqI(E5.H7G!M<\O!!,9RKE)$:Ne@B5*aXL"!C#@n!!.PQKE)%f>_E(XI[Gcg!P_B_!!.P-
-KE)%%L4fO-5$Wa@!IigW!!,8YKE)%%c@c/uITV7'!P^7?!!.OBKE)%%7YCaB4t_Kg!Iep>!!.O
-"KE)%%-A2@"%pjnh!?YR"!!+0:KE)$;=G-YTT<<hI!C'82!!,;RKE)#p/qa3*5Al,S!C&,g!!,
-;2>p*@)!!0.YKE)&'pk/VJ;o"%d!NGRA!!1UIKE)$Mi.M(2W;)#G!RuRO!!,pcKE)%OI"VJ#:j
-@Wn!W(/r!!-<^KE)%Tpk/VJqT+<i!EnoF!!02!KE)&L`.S*k=SROL!N^a'!!2r5KE)$TI"VJ#p
-!A?l!W)/9!!-C#KE)&GaFjNoqW<G2!F5PU!!2c2KE)$XIY7\%otl@^!UJ*c!!2cZKE)&=aFjNo
-p#^o-!UI[W!!2E&KE)&)d"DB"lg09)!S>DG!!2EJKE)&)`.S*kf><1@!O'k'!!1^<KE)%VaFjN
-ofB._d!O'Fp!!,a.KE)%Ln:UcBdenau!D24&!!/njKE)&$IY7\%8FV94!Mk*r!!,W8KE)%K5(i
-n:83DP*!W$J_!!,g`KE)%Mr.G%NqIG6Z!DN9A!!/sGKE)&L@Y=^^9RMKn!DG\1!!2`UKE)&LG(
-]hr:AfbF!VGH+!!,iDKE)&Fie.:4l0*d#!VH)=!!2?FKE)&;ie.:4e*)Gb!U9<2!!1R0KE)&%i
-e.:4Vs&d6!Rpaq!!0"YKE)%Nie.:47Grh!!M]@B!!1JrKE)$@n:UcBU3qUo!CV0c!!/fXKE)$@
-4G3\86lq!]!W"X+!!,RaKE)%JIY7\%qD*^(!ChHi!!,PQKE)&FFG'Vp7t-*k!VCDc!!2<UKE)&
-:nq6uDdI`(l!R^Ik!!/keKE)%Jnq6uD6L]X.!MOmo!!,E2KE)%H5(in:69Ko$!C@i\!!2p7KE)
-$?I"VJ#6U$/'!VAF+!!2;0KE)&"qLehL6$S%_!MI/[!!,AJKE)$=*eXLo6,&!P!C4;N!!,?VKE
-)$'^k;[gQ10G,!Qt=n!!+P,KE)%;pk/VJb'o!D!@[Gj!!/=3KE)$$G_?%tPWja#!@U'`!!2n/K
-E)$)n:UcBQMcC9!Vp8Z!!+YGKE)%=IY7\%q-o!W!A&VO!!+W7KE)&Dk_&p:q0%Dk!A=;'!!2ZO
-KE)$*IY7\%o&><&!TiNu!!2ZaKE)&7jFdL6jl1pn!R'\[!!23TKE)%rjFdL6bMn0T!LN#'!!1:
-:KE)%>jFdL6Qf<Yu!O^j=!!1gKKE)&?IY7\%Bu#B%!OV?L!!1f$KE)$di.M(2[!76(!ST_j!!-
-bPKE)%[4G3\8BK1YF!ONo$!!-aQKE)$!i.M(2P5'\1!QfeD!!-rpKE)#un:UcBP'ho_!Gq7Y!!
-0NUKE)%95(in:Cj:U5!@0d\!!-muKE)#u*eXLoC`\60!VnR*!!+GAKE)%:IY7\%qfIJk!VnL(!
-!.!4KE)$"I"VJ#qf7>i!H*:<!!+E1KE)$j5(in:noTNb!@N>L!!2fcKE)&DEeFDnDgm?>!VZ);
-!!20QKE)&?oRm2FjRRs(!U]H2!!146KE)&-oRm2Famt)b!Sd0u!!/;UKE)%:nq6uDA\`s!!OD3
-J!!1c#KE)$`i.M(2Z?V$&!SKYi!!-VLKE)%Y4G3\8A2o5B!O<c"!!-UMKE)$`%YOf_,4L6c!Kh
-b_!!-^$KE)#sG_?%tOZnEu!G6S0!!0DiKE)$b4G3\8+s)C;!G3C+!!2m6KE)#tI"VJ#q`9B1!G
-?e5!!+<.KE)$c5(in:niDF(!VUhm!!2/,KE)&>qLehLaSLPi!SR=&!!/5YKE)$^i.M(2Z$:p%!
-SG,>!!-PJKE)%X4G3\8@Q9#@!O3]!!!-OKKE)$^%YOf_+aAY?!Kb$K!!-SSKE)#r4G3\8@m#DE
-!?iM;!!-RNKE)#r^4ZIeA%mTr!F]r#!!0=:KE)$]3.q84Yb$LJ!FZt$!!-L<KE)#q]S$7c@D%6
-n!?dte!!-N"KE)$\\:ah_Y[2t_!FVFN!!-JfKE)#q?A&:Z@,?P:!FT/c!!-J&KE)#fi.M(2MYM
-i)!QBM@!!*f'KE)%1I"VJ#'R592!K''o!!*crKE)#e*eXLopp>\S!>bH`!!/",KE)&JZ@i2Y(4
-:c8!>[kP!!2V3KE)#hIY7\%nT'9_!TNa)!!2*MKE)%loRm2F`U\Z^!K6T'!!/#KKE)$1^k;[gR
-dbt1!R6"F!!+q7KE)%AG_?%tbs$d\!AnbK!!/NNKE)$03.q84RN@+^!AkdL!!+ndKE)#cn:UcB
-M0ssV!B0G#!!*^WKE)%05(in:2L'lT!Ll9+!!+u?KE)#c*eXLo2BIMO!Vi+:!!*a\KE)&K\qC%
-a2gg8Y!>@YM!!,#BKE)&C3eRJ6o6Q&i!TJEY!!26YKE)%kqLehLc2*(n!K$Z+!!0[hKE)&/G_?
- %tm_4>S!Hc,1!!0ZMKE)&/4G3\8FC9b%!P17D!!1msKE)$p0SBE,\f?A'!H]03!!0Y@KE)$p%
-"nT]1>mfc!L\1c!!1<XKE)$ri.M(212qmH!LZ''!!.7^KE)%b4G3\8R3%"]!HpGU!!+hpKE)$r
-*/":m1(Js;!Hns+!!*[VKE)%/^4ZIe1O+QQ!>.GI!!.:gKE)$/4G3\8&KZT*!I$YZ!!+ksKE)$
-s*eXLo&\`nu!AhHC!!.;XKE)$n^k;[g\T!3%!Sk>@!!.+JKE)%`3.q84gn'0!!HKlI!!0VMKE)
-$n(k_ki\IO8m!HJU%!!.*EKE)$-E.e2lR(S(P!HW45!!+f6KE)%?SqI(EF#\gQ!P+eT!!.-\KE
-)$-%YOf_Et3j'!>)ns!!+geKE)#aSqI(EF1d/+!AU1!!!./4KE)$m@"\L\\@@1l!Sh"7!!.'nK
-E)%_S:gkCE>X?/!P"/C!!.'JKE)$m#(usW0Xuc9!LR2H!!.)LKE)$,S:gkCEL_[^!AKOe!!.)"
-KE)#a?A&:Z0]%H_!HHtL!!.&CKE)%_>_E(XE0u:Y!OtmX!!.%tKE)$lL4fO-0O082!H?hI!!+c
-KKE)$lc@c/uE*.bn!Osb8!!.%4KE)$l7YCaB0J8"Y!H;q0!!.$iKE)$l-A2@"$Li]K!JPoS!!*
-FOKE)%,5(in:$9WtA!=Bm$!!*ITKE)#\5(in:n@F8Q!TA?X!!0t5KE)%,qLehL)W68K!KD>W!!
-1*RKE)#kE.e2lNBDjo!?*qN!!/'#KE)#k*/":m)@hE#!=="(!!.beKE)#lG_?%t#s<k@!?4.S!
-!*BIKE)#l*eXLo$,2&m!?8b+!!,-rKE)%DE.e2lcFef1!BOVA!!/WMKE)%uSqI(E3\Z3e!M(3`
-!!,+tKE)%D%YOf_3XgZA!BLF<!!*sVKE)%3]S$7c4)fiQ!?!kM!!/%MKE)$73.q84)'";0!BV9
-S!!*rIKE)$7%YOf_#eYfj!?&P'!!*@sKE)$7]S$7c)4lK]!BZm+!!0c@KE)&0\:ah_mp:YI!I@
-"a!!0beKE)&0S:gkCH6@k@!PK>'!!1r:KE)%!&;1#a]aTPo!I>$)!!0b;KE)%!"G?aU3FIL?!M
-$ZQ!!1AOKE)%"@"\L\3A?*d!M#[5!!.F#KE)%dS:gkCS;r7&!IGZ:!!,(gKE)%"%"nT]3<k-:!
-IG$(!!*qHKE)%3?A&:Z3Oj_B!>q>[!!.GVKE)$5S:gkC(lj7L!IL>i!!,*?KE)%"Ne@B5#[W/a
-!>s[H!!,+:KE)%"hLkk0GsI#_!PGXi!!1q]KE)$u+G9^q]U4?P!T$S)!!.?VKE)%cN._03GmK'
-'!PF/?!!.?JKE)$u!e^OS33\&9!M!DJ!!.ALKE)$4R"PG?S5+_;!I:&c!!0aXKE)$uN._033/3
-(d!I9EQ!!*pAKE)$4gk5Y.(f#_a!I<IR!!,()KE)$uc@c/uGbB]i!PDNf!!1q/KE)$tOG!T7]M
-*tY!I0ER!!0`%KE)$tKS0=+G_1SK!B=27!!/TBKE)$tfRs5*3)"u*!I2hA!!,&KKE)$t`e4<m(
-bUIA!B=tM!!.?4KE)$t:kSfL]I\^9!I..g!!0_ZKE)$t7"bO@GX@&`!B;W`!!.=\KE)$4-A2@"
-G\2U/!I-#G!!0_JKE)$t,_Q-uGTqe@!B:jJ!!.=&KE)#VG_?%tK"cm<!<kT=!!*6EKE)#V^4ZI
-e%<-t#!J\7?!!*NgKE)%-SqI(E%31$$!=]Nl!!*58KE)#^]S$7c"J18H!=bWR!!+*JKE)%5\:a
-h_a'OE!!?EkI!!/+MKE)#n(k_kiNfJbm!?DT%!!+)EKE)#]\:ah_L0fN5!?J\'!!*LuKE)#nS:
-gkC%$#u@!?I2R!!*4/KE)#]hLkk0*SuGL!Bi]$!!/[qKE)&!>_E(X4WoCX!M5[3!!1D@KE)$9&
-;1#aSrA=&!Bg^A!!/[GKE)$9"G?aU4T^9:!?A=s!!/*bKE)$9Y_2uW*12BZ!KKp.!!,6MKE)%E
-c@c/u4cG$o!??iI!!,6;KE)#]>_E(X*8H2I!=V_V!!,7<KE)#mc@c/u4jJ]\!PY4[!!1tZKE)&
-AY(QcU^6"!J!T-S(!!0fiKE)&17YCaB^4_.>!PX/=!!,3TKE)%E=G-YTcRskN!I^Vo!!,3DKE)
- %E9S<BHI?9*^!PZd2!!/Z\KE)%$LkGa/4G8@f!I]WS!!,36KE)%$JqO+)**@jo!KJdc!!,47K
-E)#m9S<BHIFs2Q!BeSZ!!+'/KE)%$b_,rs4N<$S!I_t@!!*K\KE)#mDM.uj4RRk&!IaBh!!0f1
-KE)&1/;+!(^.<nW!T,5W!!0f%KE)%e6A,=>4A^\2!M1iq!!.JoKE)$88;$sDSgK*j!IVtA!!0f
-GKE)%#`.S*k4@4]$!IVb;!!+&jKE)$8CkMch*%$==!IX6e!!,2oKE)%#k(E^8^*nX7!T+ZG!!0
-eZKE)%e,(ops4=Gj_!M1'[!!.I\KE)$8,_Q-uHt7m1!B_QZ!!.IVKE)#m(5)Yg4>qim!IT'D!!
-0eJKE)%e&qg5c4;<GK!IQ_W!!,1pKE)%#15#W.!ka0d!<SjG!!*;6KE)%*?A&:Z#+U>H!="R;!
-!*.-KE)#WhLkk0%^:Td!Jap5!!*RsKE)%.:4rTJ%ZH&@!=jj;!!*:/KE)#_gk5Y.##9gO!=mD.
-!!+.6KE)%6=G-YTa0('q!?R>U!!/-SKE)#oLkGa/O%+d&!?QoI!!+-mKE)#_=G-YTLG"5[!?Tm
-H!!/-uKE)#ob_,rs%Ru*O!?T76!!*9VKE)#_DM.uj*q"[]!M<2A!!1EIKE)%F8;$sDc_c?q!M;
-c5!!/]YKE)#o:kSfLO">qa!C"k`!!/^.KE)%6-A2@"50/BW!?OX^!!,:%KE)#o6A,=>5/MsQ!=
-gZ6!!+-WKE)#_-A2@"54!q&!?Pj+!!,:GKE)&1W.Y-On(*-l!T0]+!!1uOKE)%F."hR$c^'4a!
-P`<$!!/];KE)%fA:sp`T-Apg!P`)s!!+,hKE)%6(5)Yg5%oTL!?NM>!!.Q4KE)$:A:sp`*[67;
-!Ij*_!!,8mKE)%%ie.:4%Mj]t!?O.P!!,9,KE)%%p4NDHhirco!T0&n!!/]+KE)%f1kYi0T+Ze
-W!P^CC!!+,TKE)$:1kYi0*YO,+!If-D!!,8=KE)%%EeFDnhhm'e!M9^P!!0hQKE)#o$A8B[4rT
-(S!Id(_!!*1,KE)#T:4rTJ#?ZWZ!J@P.!!*<uKE)#X7YCaB""o6,!=*Lq!!*U,KE)%.XFpQS%n
-M?R!JdP*!!*TuKE)#`6A,=>#:tN.!=s""!!*<OKE)#`AqU-bO/R^3!QWcE!!/.VKE)%6U4`LI%
-k*)2!Jcto!!+0TKE)%6[Y+V]+(U$)!=pB-!!+0NKE)#X(5)Yg%lT(@!?ZK<!!1EqKE)&!dY%T$
-O-G:t!M?`P!!/.DKE)%FZ@i2Y%hsZs!?X.O!!*TCKE)$;FG'Vp+#8KL!C(UX!!1EgKE)%6MM(s
-1T:1E5!=oNj!!+/[KE)$;3eRJ6"0@.U!<]3P!!*>'KE)%*eq=#(#Gd"Q!=,?P!!*1fKE)#X[Y+
-V]LX^tW!Jf*V!!*=hKE)#`["JD[#Ej`?!=uJh!!1.*>p*F91G<6^FDkW&FE;dO@r-:/FCfK6P!
-5%%P!5%%06WLBOu$<u&UT<6I?K5+L]WAEP,4<qH\aA=WI9q$?'711@YbVZWJD.L9RW'6Ou$TdD
-/`onFF,Z]GA1TD&S$u?L_5dNL_5dNL]NY>Ou%N50628NA;Ch-P&,pdOo^@NOo^@NOo^@OOo^_%
-I?IS`E+sQ<+ED[?A0>oUCm#*f1Pc$e!HNtsP,Wd]Bp(ZC1MMXIP%odQP!+.FCh%Z3BnukS;MZB
-WCiY=4P,X6>P#@GDOu"b3@s9&0L]`f<L`V^qA!-kK!KsFF1OYEcBnukSC5;nR4aShu@s9&0L]`
-f<L`V^qARfOfG%GKG"-RJ`!HNtsP,X6>P%p-\Ou"b3@s9&0L]`f<L`V^qEejaZWJCY>;N_'D1O
-YEcBnukSC5;qS4aShu@s9&0L]`f<L`V^qA!-kK!KsFF1G<cYG9CUU"-QQ<*g1>N@r,_"ASd/)P
-&-9^EejaZWJCY>C6AU\1OYEcE+sQ<+ED[?A0>TLCg2\rL]N;4L]N;4L]N;4L]N;3L]N;3L]N;3
-L]N;3L]E52Ch%Z3BnukSC1DI0DdmF&F*i=u8Rlsc+CcO.P&+Wk9RCK0"-RD/GB@b4BlnECI?I0
-MP"B/%D/`onFF/f EI=$! EG9CU U"-RD /G B@b 4BlnEC I?I0X!J
-gc4!Jgc4!Jgc4!J g`3 !Jg`3 !/LW2 !J g`3 !Jg `3!/
-LZ(P#YeNH$tiH4? P9;AS s. SEb0- *@<? O( GV= #MG]P !HB m=\PE +sQA
-+ED[?A1qn9G^1EP 05+p2 B4u B0E em8L 2K E_[ D09Z:P &) dqBk2= !+E
-D[?A;Ed>2D8ufF< GL@FD 5Z2 F!* Y 1+C oD. FC] E#GEQn u0 61WAD. .O,
-Bm>e?Ou[rR%[&V$ E+EQ; 0fP 7TP %6 4g CG' +8/ p(ZFEd ;, :Ecc5; /n0
-$=E,Zq1AS,XoATD @'Df p)1 AW h2 !3A 5Gb FDt YuCM
-@[!P.H"'F`V,9E+ *6lB l 7R 3P #M~>
-% uk.co.terryburton.bwipp/pdf417 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp pdf417 0.0 2015050900 188276 197810
+%%BeginData: 873 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/pdf417 {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /compact false def
+ /eclevel -1 def
+ /columns 0 def
+ /rows 0 def
+ /rowmult 3 def
+ /encoding (auto) def
+ /ccc false def
+ /raw false def
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /eclevel eclevel cvi def
+ /columns columns cvi def
+ /rows rows cvi def
+ /rowmult rowmult cvr def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ raw {/encoding (raw) def} if
+
+ % Convert input into array of codewords
+ encoding (raw) eq {
+ /datcws barcode length array def
+ /i 0 def /j 0 def
+ { % loop
+ i barcode length eq {exit} if
+ /cw barcode i 1 add 3 getinterval cvi def
+ datcws j cw put
+ /i i 4 add def
+ /j j 1 add def
+ } loop
+ /datcws datcws 0 j getinterval def
+ } if
+
+ /barcode [ barcode {} forall ] def
+ /barlen barcode length def
+
+ ccc {/encoding (ccc) def} if
+
+ /encb {
+ /in exch def
+ /inlen in length def
+ /out inlen 6 idiv 5 mul inlen 6 mod add array def
+ 0 1 inlen 6 idiv 1 sub {
+ /k exch def
+ /msbs [ in k 6 mul 3 getinterval aload pop ] def
+ /mscs [
+ msbs aload pop exch 256 mul add exch 65536 mul add
+ 3 {dup 900 mod exch 900 idiv} repeat
+ ] def
+ /lsbs [ in k 6 mul 3 add 3 getinterval aload pop ] def
+ /lscs [
+ lsbs aload pop exch 256 mul add exch 65536 mul add
+ 3 {dup 900 mod exch 900 idiv} repeat
+ ] def
+ lscs 0 get mscs 0 get 316 mul add
+ out k 5 mul 4 add 2 index 900 mod put
+ 900 idiv lscs 1 get add mscs 0 get 641 mul add mscs 1 get 316 mul add
+ out k 5 mul 3 add 2 index 900 mod put
+ 900 idiv lscs 2 get add mscs 0 get 20 mul add mscs 1 get 641 mul add mscs 2 get 316 mul add
+ out k 5 mul 2 add 2 index 900 mod put
+ 900 idiv lscs 3 get add mscs 1 get 20 mul add mscs 2 get 641 mul add
+ out k 5 mul 1 add 2 index 900 mod put
+ 900 idiv mscs 2 get 20 mul add
+ out k 5 mul 3 -1 roll 900 mod put
+ } for
+ /rem inlen 6 mod def
+ rem 0 ne {
+ out out length rem sub
+ [ in inlen rem sub rem getinterval aload pop ]
+ putinterval
+ } if
+ out
+ } bind def
+
+ encoding (byte) eq encoding (ccc) eq or {
+ /datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def
+ datcws 0 barlen 6 mod 0 eq {924} {901} ifelse put
+ datcws 1 barcode encb putinterval
+ encoding (ccc) eq {/datcws [920 datcws aload pop] def} if
+ } if
+
+ encoding (auto) eq {
+
+ % Modes and text submodes
+ /T 0 def /N 1 def /B 2 def
+ /A 0 def /L 1 def /M 2 def /P 3 def
+
+ % Special function characters for mode switching
+ /tl -1 def /nl -2 def /bl -3 def /bl6 -4 def /bs -5 def
+
+ % Special function characters for text mode
+ /al -6 def /ll -7 def /ml -8 def /pl -9 def /as -10 def /ps -11 def
+
+ % Character maps for each state
+ /charmaps [
+ % A L M P
+ [ (A) (a) (0) (;) ] % 0
+ [ (B) (b) (1) (<) ] % 1
+ [ (C) (c) (2) (>) ] % 2
+ [ (D) (d) (3) (@) ] % 3
+ [ (E) (e) (4) ([) ] % 4
+ [ (F) (f) (5) 92 ] % 5
+ [ (G) (g) (6) (]) ] % 6
+ [ (H) (h) (7) (_) ] % 7
+ [ (I) (i) (8) (`) ] % 8
+ [ (J) (j) (9) (~) ] % 9
+ [ (K) (k) (&) (!) ] % 10
+ [ (L) (l) 13 13 ] % 11
+ [ (M) (m) 9 9 ] % 12
+ [ (N) (n) (,) (,) ] % 13
+ [ (O) (o) (:) (:) ] % 14
+ [ (P) (p) (#) 10 ] % 15
+ [ (Q) (q) (-) (-) ] % 16
+ [ (R) (r) (.) (.) ] % 17
+ [ (S) (s) ($) ($) ] % 18
+ [ (T) (t) (/) (/) ] % 19
+ [ (U) (u) (+) (") ] % 20
+ [ (V) (v) (%) (|) ] % 21
+ [ (W) (w) (*) (*) ] % 22
+ [ (X) (x) (=) 40 ] % 23
+ [ (Y) (y) (^) 41 ] % 24
+ [ (Z) (z) pl (?) ] % 25
+ [ ( ) ( ) ( ) ({) ] % 26
+ [ ll as ll (}) ] % 27
+ [ ml ml al (') ] % 28
+ [ ps ps ps al ] % 29
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 30 dict 30 dict 30 dict 30 dict ] def
+ /alltext 104 dict def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 3 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ dup charvals j get exch i put
+ alltext exch -1 put
+ } for
+ } for
+
+ /e 10000 def % "Empty"
+
+ /latlen [ % Bit length of latch between submodes
+ % To: A L M P From
+ [ 0 1 1 2 ] % A
+ [ 2 0 1 2 ] % L
+ [ 1 1 0 1 ] % M
+ [ 1 2 2 0 ] % P
+ ] def
+
+ /latseq [ % Latch sequences between submodes
+ % To: A L M P From
+ [ [] [ll] [ml] [ml pl] ] % A
+ [ [ml al] [] [ml] [ml pl] ] % L
+ [ [al] [ll] [] [pl] ] % M
+ [ [al] [al ll] [al ml] [] ] % P
+ ] def
+
+ /shftlen [ % Bit length of shift to submode
+ % To: A L M P From
+ [ e e e 1 ] % A
+ [ 1 e e 1 ] % L
+ [ e e e 1 ] % M
+ [ e e e e ] % P
+ ] def
+
+ % Determine runlengths of digits
+ /numdigits [ barlen {0} repeat 0 ] def
+ /numtext [ barlen {0} repeat 0 ] def
+ /numbytes [ barlen {0} repeat 0 ] def
+ barlen 1 sub -1 0 {
+ /i exch def
+ barcode i get dup 48 ge exch 57 le and {
+ numdigits i numdigits i 1 add get 1 add put
+ } if
+ alltext barcode i get known numdigits i get 13 lt and {
+ numtext i numtext i 1 add get 1 add put
+ } if
+ numtext i get 5 lt numdigits i get 13 lt and {
+ numbytes i numbytes i 1 add get 1 add put
+ } if
+ } for
+ /numdigits numdigits 0 barlen getinterval def
+ /numtext numtext 0 barlen getinterval def
+ /numbytes numbytes 0 barlen getinterval def
+
+ /seq [] def /seqlen 0 def /state T def /p 0 def { % loop
+ p barlen eq {exit} if
+ /n numdigits p get def
+ n 13 ge {
+ /seq [
+ seq aload pop
+ nl
+ [ barcode p n getinterval aload pop ]
+ ] def
+ /state N def
+ /p p n add def
+ /seqlen seqlen 1 add n add def
+ } { % next
+ /t numtext p get def
+ t 5 ge {
+ /seq [
+ seq aload pop
+ state T ne {tl} if
+ [ barcode p t getinterval aload pop ]
+ ] def
+ /state T def
+ /p p t add def
+ /seqlen seqlen 1 add t add def % ish
+ } { % next
+ /b numbytes p get def
+ b 1 eq state T eq and {
+ /seq [
+ seq aload pop
+ bs
+ [ barcode p get ]
+ ] def
+ /p p b add def
+ /seqlen seqlen 2 add def
+ } { % next
+ /seq [
+ seq aload pop
+ b 6 mod 0 ne {bl} {bl6} ifelse
+ [ barcode p b getinterval aload pop ]
+ ] def
+ /state B def
+ /p p b add def
+ /seqlen seqlen 1 add b add def
+ } ifelse } ifelse } ifelse
+ } loop
+
+ /latchcws <<
+ tl 900 bl 901 bl6 924 nl 902 bs 913
+ >> def
+
+ % Submode encoding functions
+ /enca {charvals A get exch get} bind def
+ /encl {charvals L get exch get} bind def
+ /encm {charvals M get exch get} bind def
+ /encp {charvals P get exch get} bind def
+ /textencfuncs [ /enca /encl /encm /encp ] def
+
+ /addtotext {
+ text exch l exch put
+ /l l 1 add def
+ } bind def
+
+ /enct {
+
+ /in exch def
+
+ /curlen [ e e e e ] def
+ curlen submode 0 put
+ /curseq [ [] [] [] [] ] def
+
+ % Derive the optimal sequences ending in each submode
+ in {
+
+ /char exch def
+
+ % Check for optimisations in the current sequences by latching from x to y
+ { % loop
+ /imp false def
+ [ A L M P ] {
+ /x exch def
+ [ A L M P ] {
+ /y exch def
+ /cost curlen x get latlen x get y get add def
+ cost curlen y get lt {
+ curlen y cost put
+ curseq y [
+ curseq x get aload pop
+ latseq x get y get aload pop
+ ] put
+ /imp true def
+ } if
+ } forall
+ } forall
+ imp not {exit} if % Repeat unless no improvement
+ } loop
+
+ % Determine optimal next sequences for each valid encoding
+ /nxtlen [ e e e e ] def
+ /nxtseq 4 array def
+
+ [ A L M P ] {
+ /x exch def
+
+ { % loop for common exit
+
+ charvals x get char known not {exit} if
+
+ % Extend directly
+ /cost curlen x get 1 add def
+ cost nxtlen x get lt {
+ nxtlen x cost put
+ nxtseq x [ curseq x get aload pop char ] put
+ } if
+
+ % Optimise for direct shifts from y to x
+ [ A L M P ] {
+ /y exch def
+ x y ne {
+ /cost curlen y get shftlen y get x get add 1 add def
+ cost nxtlen y get lt {
+ nxtlen y cost put
+ nxtseq y [
+ curseq y get aload pop
+ x A eq {as} {ps} ifelse
+ char
+ ] put
+ } if
+ } if
+ } forall
+
+ exit
+ } loop
+
+ } forall
+
+ /curlen nxtlen def
+ /curseq nxtseq def
+
+ } forall
+
+ % Select the optimal sequence
+ /minseq e def
+ [ A L M P ] {
+ /k exch def
+ curlen k get minseq lt {
+ /minseq curlen k get def
+ /txtseq curseq k get def
+ } if
+ } forall
+
+ % Encode the sequence
+ /text minseq array def
+ /k 0 def /l 0 def {
+ k txtseq length ge {exit} if
+
+ /char txtseq k get def
+
+ % Encode character
+ char textencfuncs submode get load exec addtotext
+ /k k 1 add def
+
+ % Encode shifted next character
+ char as eq char ps eq or {
+ txtseq k get char as eq {enca} {encp} ifelse addtotext
+ /k k 1 add def
+ } if
+
+ % Latches to new submode
+ char al eq {/submode A def} if
+ char ll eq {/submode L def} if
+ char ml eq {/submode M def} if
+ char pl eq {/submode P def} if
+ } loop
+
+ text length 2 mod 1 eq {
+ submode P eq {
+ /pad al encp def
+ /submode A def
+ } {
+ /pad ps textencfuncs submode get load exec def
+ } ifelse
+ /text [ text aload pop pad ] def
+ } if
+
+ /out text length 2 idiv array def
+ 0 1 out length 1 sub {
+ /k exch def
+ out k text k 2 mul get 30 mul text k 2 mul 1 add get add put
+ } for
+
+ out
+
+ } bind def
+
+ /encn {
+ /in exch def
+ /out [] def
+ 0 44 in length 1 sub {
+ /k exch def
+ /gmod [
+ 1 in k in length k sub dup 44 gt {pop 44} if getinterval
+ {48 sub} forall
+ ] def
+ /cwn [] def {
+ /dv 900 def
+ /gmul [] def /val 0 def {
+ gmod length 0 eq {exit} if
+ /val val 10 mul gmod 0 get add def
+ /gmod gmod 1 gmod length 1 sub getinterval def
+ val dv lt {
+ gmul length 0 ne {
+ /gmul [ gmul aload pop 0 ] def
+ } if
+ } {
+ /gmul [ gmul aload pop val dv idiv ] def
+ } ifelse
+ /val val dv mod def
+ } loop
+ /dv val def
+ /cwn [ dv cwn aload pop ] def
+ /gmod gmul def
+ gmul length 0 eq {exit} if
+ } loop
+ /out [ out aload pop cwn aload pop ] def
+ } for
+ out
+ } bind def
+
+ /encfuncs [ /enct /encn /encb ] def
+
+ /addtocws {
+ dup datcws j 3 -1 roll putinterval
+ length j add /j exch def
+ } bind def
+
+ % Encode the sequence
+ /state T def /submode A def
+ /datcws seqlen array def
+ /i 0 def /j 0 def {
+ i seq length ge {exit} if
+ /chars seq i get def
+ chars type /arraytype eq { % Encode data according to mode
+ chars encfuncs state get load exec addtocws
+ } { % Encode the latch to new state or byte shift
+ [ latchcws chars get ] addtocws
+ chars tl eq {/state T def /submode A def} if
+ chars nl eq {/state N def} if
+ chars bl eq chars bl6 eq or {/state B def} if
+ chars bs eq {
+ /i i 1 add def
+ seq i get encb addtocws
+ } if
+ } ifelse
+ /i i 1 add def
+ } loop
+ /datcws datcws 0 j getinterval def
+ } if
+
+ % Determine the error correction level if unspecified
+ /m datcws length def
+ eclevel -1 eq {
+ m 40 le {/eclevel 2 def} if
+ m 41 ge m 160 le and {/eclevel 3 def} if
+ m 161 ge m 320 le and {/eclevel 4 def} if
+ m 321 ge {/eclevel 5 def} if
+ } if
+
+ % Reduce the error level so that it does not cause an excessive number of codewords
+ /maxeclevel 928 1 sub m sub ln 2 ln div cvi 1 sub def
+ eclevel maxeclevel gt {/eclevel maxeclevel def} if
+ /k 2 eclevel 1 add exp cvi def
+
+ % To determine size of matrix, number of columns if given by user...
+ columns 0 eq {/columns m k add 3 div sqrt round cvi def} if
+ columns 1 ge columns 30 le and {/c columns def} if
+
+ % ... and rows is greater of those required and that given by user within limits
+ /r m k add 1 add columns div ceiling cvi def % Required
+ r rows lt rows 90 le and {/r rows def} if
+ r 3 lt {/r 3 def} if
+
+ % Opportunistically raise the error level if a better fit to the matrix is possible
+ /maxeclevel c r mul 1 sub m sub ln 2 ln div cvi 1 sub 8 2 copy gt {exch} if pop def
+ maxeclevel eclevel gt {
+ /eclevel maxeclevel def
+ /k 2 eclevel 1 add exp cvi def
+ } if
+
+ % Create codewords array with one extra working space element and add padding
+ /n c r mul k sub def
+ /cws c r mul 1 add array def
+ cws 0 n put
+ cws 1 datcws putinterval
+ cws m 1 add [ n m sub 1 sub {900} repeat ] putinterval
+ cws n [ k {0} repeat 0 ] putinterval
+
+ % Calculate the log and anti-log tables
+ /rsalog [ 1 928 {dup 3 mul 929 mod} repeat ] def
+ /rslog 929 array def
+ 1 1 928 {dup rsalog exch get exch rslog 3 1 roll put} for
+
+ % Function to calculate the product in the field
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add 928 mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } bind def
+
+ % Generate the coefficients
+ /coeffs [ 1 k {0} repeat ] def
+ 1 1 k {
+ /i exch def
+ coeffs i coeffs i 1 sub get put
+ i 1 sub -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod add 929 mod put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+ /coeffs coeffs 0 coeffs length 1 sub getinterval def
+ coeffs length 1 sub -2 0 {coeffs exch 2 copy get 929 exch sub put} for
+
+ % Derive the error codewords
+ 0 1 n 1 sub {
+ /t exch cws exch get cws n get add 929 mod def
+ 0 1 k 1 sub {
+ /j exch def
+ cws n j add cws n j add 1 add get 929 t coeffs k j sub 1 sub get mul 929 mod sub add 929 mod put
+ } for
+ } for
+ n 1 n k add { dup cws exch 929 cws 5 -1 roll get sub 929 mod put } for
+
+ % Trim the working space from the end of the codewords
+ /cws cws 0 cws length 1 sub getinterval def
+
+ % Base 10 encoding of the bar space successions for the codewords in each cluster
+ /clusters [
+ [
+ 120256 125680 128380 120032 125560 128318 108736 119920 108640 86080 108592 86048
+ 110016 120560 125820 109792 120440 125758 88256 109680 88160 89536 110320 120700
+ 89312 110200 120638 89200 110140 89840 110460 89720 110398 89980 128506 119520
+ 125304 128190 107712 119408 125244 107616 119352 84032 107568 119324 84000 107544
+ 83984 108256 119672 125374 85184 108144 119612 85088 108088 119582 85040 108060
+ 85728 108408 119742 85616 108348 85560 108318 85880 108478 85820 85790 107200
+ 119152 125116 107104 119096 125086 83008 107056 119068 82976 107032 82960 82952
+ 83648 107376 119228 83552 107320 119198 83504 107292 83480 83468 83824 107452
+ 83768 107422 83740 83900 106848 118968 125022 82496 106800 118940 82464 106776
+ 118926 82448 106764 82440 106758 82784 106936 119006 82736 106908 82712 106894
+ 82700 82694 106974 82830 82240 106672 118876 82208 106648 118862 82192 106636
+ 82184 106630 82180 82352 82328 82316 82080 118830 106572 106566 82050 117472
+ 124280 127678 103616 117360 124220 103520 117304 124190 75840 103472 75808 104160
+ 117624 124350 76992 104048 117564 76896 103992 76848 76824 77536 104312 117694
+ 77424 104252 77368 77340 77688 104382 77628 77758 121536 126320 128700 121440
+ 126264 128670 111680 121392 126236 111648 121368 126222 111632 121356 103104 117104
+ 124092 112320 103008 117048 124062 112224 121656 126366 93248 74784 102936 117006
+ 93216 112152 93200 75456 103280 117180 93888 75360 103224 117150 93792 112440
+ 121758 93744 75288 93720 75632 103356 94064 75576 103326 94008 112542 93980
+ 75708 94140 75678 94110 121184 126136 128606 111168 121136 126108 111136 121112
+ 126094 111120 121100 111112 111108 102752 116920 123998 111456 102704 116892 91712
+ 74272 121244 116878 91680 74256 102668 91664 111372 102662 74244 74592 102840
+ 116958 92000 74544 102812 91952 111516 102798 91928 74508 74502 74680 102878
+ 92088 74652 92060 74638 92046 92126 110912 121008 126044 110880 120984 126030
+ 110864 120972 110856 120966 110852 110850 74048 102576 116828 90944 74016 102552
+ 116814 90912 111000 121038 90896 73992 102534 90888 110982 90884 74160 102620
+ 91056 74136 102606 91032 111054 91020 74118 91014 91100 91086 110752 120920
+ 125998 110736 120908 110728 120902 110724 110722 73888 102488 116782 90528 73872
+ 102476 90512 110796 102470 90504 73860 90500 73858 73944 90584 90572 90566
+ 120876 120870 110658 102444 73800 90312 90308 90306 101056 116080 123580 100960
+ 116024 70720 100912 115996 70688 100888 70672 70664 71360 101232 116156 71264
+ 101176 116126 71216 101148 71192 71180 71536 101308 71480 101278 71452 71612
+ 71582 118112 124600 127838 105024 118064 124572 104992 118040 124558 104976 118028
+ 104968 118022 100704 115896 123486 105312 100656 115868 79424 70176 118172 115854
+ 79392 105240 100620 79376 70152 79368 70496 100792 115934 79712 70448 118238
+ 79664 105372 100750 79640 70412 79628 70584 100830 79800 70556 79772 70542
+ 70622 79838 122176 126640 128860 122144 126616 128846 122128 126604 122120 126598
+ 122116 104768 117936 124508 113472 104736 126684 124494 113440 122264 126670 113424
+ 104712 117894 113416 122246 104706 69952 100528 115804 78656 69920 100504 115790
+ 96064 78624 104856 117966 96032 113560 122318 100486 96016 78600 104838 96008
+ 69890 70064 100572 78768 70040 100558 96176 78744 104910 96152 113614 70022
+ 78726 70108 78812 70094 96220 78798 122016 126552 128814 122000 126540 121992
+ 126534 121988 121986 104608 117848 124462 113056 104592 126574 113040 122060 117830
+ 113032 104580 113028 104578 113026 69792 100440 115758 78240 69776 100428 95136
+ 78224 104652 100422 95120 113100 69764 95112 78212 69762 78210 69848 100462
+ 78296 69836 95192 78284 69830 95180 78278 69870 95214 121936 126508 121928
+ 126502 121924 121922 104528 117804 112848 104520 117798 112840 121958 112836 104514
+ 112834 69712 100396 78032 69704 100390 94672 78024 104550 94664 112870 69698
+ 94660 78018 94658 78060 94700 94694 126486 121890 117782 104484 104482 69672
+ 77928 94440 69666 77922 99680 68160 99632 68128 99608 115342 68112 99596
+ 68104 99590 68448 99768 115422 68400 99740 68376 99726 68364 68358 68536
+ 99806 68508 68494 68574 101696 116400 123740 101664 116376 101648 116364 101640
+ 116358 101636 67904 99504 115292 72512 67872 116444 115278 72480 101784 116430
+ 72464 67848 99462 72456 101766 67842 68016 99548 72624 67992 99534 72600
+ 101838 72588 67974 68060 72668 68046 72654 118432 124760 127918 118416 124748
+ 118408 124742 118404 118402 101536 116312 105888 101520 116300 105872 118476 116294
+ 105864 101508 105860 101506 105858 67744 99416 72096 67728 116334 80800 72080
+ 101580 99398 80784 105932 67716 80776 72068 67714 72066 67800 99438 72152
+ 67788 80856 72140 67782 80844 72134 67822 72174 80878 126800 128940 126792
+ 128934 126788 126786 118352 124716 122576 126828 124710 122568 126822 122564 118338
+ 122562 101456 116268 105680 101448 116262 114128 105672 118374 114120 122598 101442
+ 114116 105666 114114 67664 99372 71888 67656 99366 80336 71880 101478 97232
+ 80328 105702 67650 97224 114150 71874 97220 67692 71916 67686 80364 71910
+ 97260 80358 97254 126760 128918 126756 126754 118312 124694 122472 126774 122468
+ 118306 122466 101416 116246 105576 101412 113896 105572 101410 113892 105570 113890
+ 67624 99350 71784 101430 80104 71780 67618 96744 80100 71778 96740 80098
+ 96738 71798 96758 126738 122420 122418 105524 113780 113778 71732 79988 96500
+ 96498 66880 66848 98968 66832 66824 66820 66992 66968 66956 66950 67036
+ 67022 100000 99984 115532 99976 115526 99972 99970 66720 98904 69024 100056
+ 98892 69008 100044 69000 100038 68996 66690 68994 66776 98926 69080 100078
+ 69068 66758 69062 66798 69102 116560 116552 116548 116546 99920 102096 116588
+ 115494 102088 116582 102084 99906 102082 66640 68816 66632 98854 73168 68808
+ 66628 73160 68804 66626 73156 68802 66668 68844 66662 73196 68838 73190
+ 124840 124836 124834 116520 118632 124854 118628 116514 118626 99880 115478 101992
+ 116534 106216 101988 99874 106212 101986 106210 66600 98838 68712 99894 72936
+ 68708 66594 81384 72932 68706 81380 72930 66614 68726 72950 81398 128980
+ 128978 124820 126900 124818 126898 116500 118580 116498 122740 118578 122738 99860
+ 101940 99858 106100 101938 114420
+ ] [
+ 128352 129720 125504 128304 129692 125472 128280 129678 125456 128268 125448 128262
+ 125444 125792 128440 129758 120384 125744 128412 120352 125720 128398 120336 125708
+ 120328 125702 120324 120672 125880 128478 110144 120624 125852 110112 120600 125838
+ 110096 120588 110088 120582 110084 110432 120760 125918 89664 110384 120732 89632
+ 110360 120718 89616 110348 89608 110342 89952 110520 120798 89904 110492 89880
+ 110478 89868 90040 110558 90012 89998 125248 128176 129628 125216 128152 129614
+ 125200 128140 125192 128134 125188 125186 119616 125360 128220 119584 125336 128206
+ 119568 125324 119560 125318 119556 119554 108352 119728 125404 108320 119704 125390
+ 108304 119692 108296 119686 108292 108290 85824 108464 119772 85792 108440 119758
+ 85776 108428 85768 108422 85764 85936 108508 85912 108494 85900 85894 85980
+ 85966 125088 128088 129582 125072 128076 125064 128070 125060 125058 119200 125144
+ 128110 119184 125132 119176 125126 119172 119170 107424 119256 125166 107408 119244
+ 107400 119238 107396 107394 83872 107480 119278 83856 107468 83848 107462 83844
+ 83842 83928 107502 83916 83910 83950 125008 128044 125000 128038 124996 124994
+ 118992 125036 118984 125030 118980 118978 106960 119020 106952 119014 106948 106946
+ 82896 106988 82888 106982 82884 82882 82924 82918 124968 128022 124964 124962
+ 118888 124982 118884 118882 106728 118902 106724 106722 82408 106742 82404 82402
+ 124948 124946 118836 118834 106612 106610 124224 127664 129372 124192 127640 129358
+ 124176 127628 124168 127622 124164 124162 117568 124336 127708 117536 124312 127694
+ 117520 124300 117512 124294 117508 117506 104256 117680 124380 104224 117656 124366
+ 104208 117644 104200 117638 104196 104194 77632 104368 117724 77600 104344 117710
+ 77584 104332 77576 104326 77572 77744 104412 77720 104398 77708 77702 77788
+ 77774 128672 129880 93168 128656 129868 92664 128648 129862 92412 128644 128642
+ 124064 127576 129326 126368 124048 129902 126352 128716 127558 126344 124036 126340
+ 124034 126338 117152 124120 127598 121760 117136 124108 121744 126412 124102 121736
+ 117124 121732 117122 121730 103328 117208 124142 112544 103312 117196 112528 121804
+ 117190 112520 103300 112516 103298 112514 75680 103384 117230 94112 75664 103372
+ 94096 112588 103366 94088 75652 94084 75650 75736 103406 94168 75724 94156
+ 75718 94150 75758 128592 129836 91640 128584 129830 91388 128580 91262 128578
+ 123984 127532 126160 123976 127526 126152 128614 126148 123970 126146 116944 124012
+ 121296 116936 124006 121288 126182 121284 116930 121282 102864 116972 111568 102856
+ 116966 111560 121318 111556 102850 111554 74704 102892 92112 74696 102886 92104
+ 111590 92100 74690 92098 74732 92140 74726 92134 128552 129814 90876 128548
+ 90750 128546 123944 127510 126056 128566 126052 123938 126050 116840 123958 121064
+ 116836 121060 116834 121058 102632 116854 111080 121078 111076 102626 111074 74216
+ 102646 91112 74212 91108 74210 91106 74230 91126 128532 90494 128530 123924
+ 126004 123922 126002 116788 120948 116786 120946 102516 110836 102514 110834 73972
+ 90612 73970 90610 128522 123914 125978 116762 120890 102458 110714 123552 127320
+ 129198 123536 127308 123528 127302 123524 123522 116128 123608 127342 116112 123596
+ 116104 123590 116100 116098 101280 116184 123630 101264 116172 101256 116166 101252
+ 101250 71584 101336 116206 71568 101324 71560 101318 71556 71554 71640 101358
+ 71628 71622 71662 127824 129452 79352 127816 129446 79100 127812 78974 127810
+ 123472 127276 124624 123464 127270 124616 127846 124612 123458 124610 115920 123500
+ 118224 115912 123494 118216 124646 118212 115906 118210 100816 115948 105424 100808
+ 115942 105416 118246 105412 100802 105410 70608 100844 79824 70600 100838 79816
+ 105446 79812 70594 79810 70636 79852 70630 79846 129960 95728 113404 129956
+ 95480 113278 129954 95356 95294 127784 129430 78588 128872 129974 95996 78462
+ 128868 127778 95870 128866 123432 127254 124520 123428 126696 128886 123426 126692
+ 124514 126690 115816 123446 117992 115812 122344 117988 115810 122340 117986 122338
+ 100584 115830 104936 100580 113640 104932 100578 113636 104930 113634 70120 100598
+ 78824 70116 96232 78820 70114 96228 78818 96226 70134 78838 129940 94968
+ 113022 129938 94844 94782 127764 78206 128820 127762 95102 128818 123412 124468
+ 123410 126580 124466 126578 115764 117876 115762 122100 117874 122098 100468 104692
+ 100466 113140 104690 113138 69876 78324 69874 95220 78322 95218 129930 94588
+ 94526 127754 128794 123402 124442 126522 115738 117818 121978 100410 104570 112890
+ 69754 78074 94714 94398 123216 127148 123208 127142 123204 123202 115408 123244
+ 115400 123238 115396 115394 99792 115436 99784 115430 99780 99778 68560 99820
+ 68552 99814 68548 68546 68588 68582 127400 129238 72444 127396 72318 127394
+ 123176 127126 123752 123172 123748 123170 123746 115304 123190 116456 115300 116452
+ 115298 116450 99560 115318 101864 99556 101860 99554 101858 68072 99574 72680
+ 68068 72676 68066 72674 68086 72694 129492 80632 105854 129490 80508 80446
+ 127380 72062 127924 127378 80766 127922 123156 123700 123154 124788 123698 124786
+ 115252 116340 115250 118516 116338 118514 99444 101620 99442 105972 101618 105970
+ 67828 72180 67826 80884 72178 80882 97008 114044 96888 113982 96828 96798
+ 129482 80252 130010 97148 80190 97086 127370 127898 128954 123146 123674 124730
+ 126842 115226 116282 118394 122618 99386 101498 105722 114170 67706 71930 80378
+ 96632 113854 96572 96542 80062 96702 96444 96414 96350 123048 123044 123042
+ 115048 123062 115044 115042 99048 115062 99044 99042 67048 99062 67044 67042
+ 67062 127188 68990 127186 123028 123316 123026 123314 114996 115572 114994 115570
+ 98932 100084 98930 100082 66804 69108 66802 69106 129258 73084 73022 127178
+ 127450 123018 123290 123834 114970 115514 116602 98874 99962 102138 66682 68858
+ 73210 81272 106174 81212 81182 72894 81342 97648 114364 97592 114334 97564
+ 97550 81084 97724 81054 97694 97464 114270 97436 97422 80990 97502 97372
+ 97358 97326 114868 114866 98676 98674 66292 66290 123098 114842 115130 98618
+ 99194 66170 67322 69310 73404 73374 81592 106334 81564 81550 73310 81630
+ 97968 114524 97944 114510 97932 97926 81500 98012 81486 97998 97880 114478
+ 97868 97862 81454 97902 97836 97830 69470 73564 73550 81752 106414 81740
+ 81734 73518 81774 81708 81702
+ ] [
+ 109536 120312 86976 109040 120060 86496 108792 119934 86256 108668 86136 129744
+ 89056 110072 129736 88560 109820 129732 88312 109694 129730 88188 128464 129772
+ 89592 128456 129766 89340 128452 89214 128450 125904 128492 125896 128486 125892
+ 125890 120784 125932 120776 125926 120772 120770 110544 120812 110536 120806 110532
+ 84928 108016 119548 84448 107768 119422 84208 107644 84088 107582 84028 129640
+ 85488 108284 129636 85240 108158 129634 85116 85054 128232 129654 85756 128228
+ 85630 128226 125416 128246 125412 125410 119784 125430 119780 119778 108520 119798
+ 108516 108514 83424 107256 119166 83184 107132 83064 107070 83004 82974 129588
+ 83704 107390 129586 83580 83518 128116 83838 128114 125172 125170 119284 119282
+ 107508 107506 82672 106876 82552 106814 82492 82462 129562 82812 82750 128058
+ 125050 119034 82296 106686 82236 82206 82366 82108 82078 76736 103920 117500
+ 76256 103672 117374 76016 103548 75896 103486 75836 129384 77296 104188 129380
+ 77048 104062 129378 76924 76862 127720 129398 77564 127716 77438 127714 124392
+ 127734 124388 124386 117736 124406 117732 117730 104424 117750 104420 104418 112096
+ 121592 126334 92608 111856 121468 92384 111736 121406 92272 111676 92216 111646
+ 92188 75232 103160 117118 93664 74992 103036 93424 112252 102974 93304 74812
+ 93244 74782 93214 129332 75512 103294 129908 129330 93944 75388 129906 93820
+ 75326 93758 127604 75646 128756 127602 94078 128754 124148 126452 124146 126450
+ 117236 121844 117234 121842 103412 103410 91584 111344 121212 91360 111224 121150
+ 91248 111164 91192 111134 91164 91150 74480 102780 91888 74360 102718 91768
+ 111422 91708 74270 91678 129306 74620 129850 92028 74558 91966 127546 128634
+ 124026 126202 116986 121338 102906 90848 110968 121022 90736 110908 90680 110878
+ 90652 90638 74104 102590 91000 74044 90940 74014 90910 74174 91070 90480
+ 110780 90424 110750 90396 90382 73916 90556 73886 90526 90296 110686 90268
+ 90254 73822 90334 90204 90190 71136 101112 116094 70896 100988 70776 100926
+ 70716 70686 129204 71416 101246 129202 71292 71230 127348 71550 127346 123636
+ 123634 116212 116210 101364 101362 79296 105200 118140 79072 105080 118078 78960
+ 105020 78904 104990 78876 78862 70384 100732 79600 70264 100670 79480 105278
+ 79420 70174 79390 129178 70524 129466 79740 70462 79678 127290 127866 123514
+ 124666 115962 118266 100858 113376 122232 126654 95424 113264 122172 95328 113208
+ 122142 95280 113180 95256 113166 95244 78560 104824 117950 95968 78448 104764
+ 95856 113468 104734 95800 78364 95772 78350 95758 70008 100542 78712 69948
+ 96120 78652 69918 96060 78622 96030 70078 78782 96190 94912 113008 122044
+ 94816 112952 122014 94768 112924 94744 112910 94732 94726 78192 104636 95088
+ 78136 104606 95032 113054 95004 78094 94990 69820 78268 69790 95164 78238
+ 95134 94560 112824 121950 94512 112796 94488 112782 94476 94470 78008 104542
+ 94648 77980 94620 77966 94606 69726 78046 94686 94384 112732 94360 112718
+ 94348 94342 77916 94428 77902 94414 94296 112686 94284 94278 77870 94318
+ 94252 94246 68336 99708 68216 99646 68156 68126 68476 68414 127162 123258
+ 115450 99834 72416 101752 116414 72304 101692 72248 101662 72220 72206 67960
+ 99518 72568 67900 72508 67870 72478 68030 72638 80576 105840 118460 80480
+ 105784 118430 80432 105756 80408 105742 80396 80390 72048 101564 80752 71992
+ 101534 80696 71964 80668 71950 80654 67772 72124 67742 80828 72094 80798
+ 114016 122552 126814 96832 113968 122524 96800 113944 122510 96784 113932 96776
+ 113926 96772 80224 105656 118366 97120 80176 105628 97072 114076 105614 97048
+ 80140 97036 80134 97030 71864 101470 80312 71836 97208 80284 71822 97180
+ 80270 97166 67678 71902 80350 97246 96576 113840 122460 96544 113816 122446
+ 96528 113804 96520 113798 96516 96514 80048 105564 96688 80024 105550 96664
+ 113870 96652 80006 96646 71772 80092 71758 96732 80078 96718 96416 113752
+ 122414 96400 113740 96392 113734 96388 96386 79960 105518 96472 79948 96460
+ 79942 96454 71726 79982 96494 96336 113708 96328 113702 96324 96322 79916
+ 96364 79910 96358 96296 113686 96292 96290 79894 96310 66936 99006 66876
+ 66846 67006 68976 100028 68920 99998 68892 68878 66748 69052 66718 69022
+ 73056 102072 116574 73008 102044 72984 102030 72972 72966 68792 99934 73144
+ 68764 73116 68750 73102 66654 68830 73182 81216 106160 118620 81184 106136
+ 118606 81168 106124 81160 106118 81156 81154 72880 101980 81328 72856 101966
+ 81304 106190 81292 72838 81286 68700 72924 68686 81372 72910 81358 114336
+ 122712 126894 114320 122700 114312 122694 114308 114306 81056 106072 118574 97696
+ 81040 106060 97680 114380 106054 97672 81028 97668 81026 97666 72792 101934
+ 81112 72780 97752 81100 72774 97740 81094 97734 68654 72814 81134 97774
+ 114256 122668 114248 122662 114244 114242 80976 106028 97488 80968 106022 97480
+ 114278 97476 80962 97474 72748 81004 72742 97516 80998 97510 114216 122646
+ 114212 114210 80936 106006 97384 80932 97380 80930 97378 72726 80950 97398
+ 114196 114194 80916 97332 80914 97330 66236 66206 67256 99166 67228 67214
+ 66142 67294 69296 100188 69272 100174 69260 69254 67164 69340 67150 69326
+ 73376 102232 116654 73360 102220 73352 102214 73348 73346 69208 100142 73432
+ 102254 73420 69190 73414 67118 69230 73454 106320 118700 106312 118694 106308
+ 106306 73296 102188 81616 106348 102182 81608 73284 81604 73282 81602 69164
+ 73324 69158 81644 73318 81638 122792 126934 122788 122786 106280 118678 114536
+ 106276 114532 106274 114530 73256 102166 81512 73252 98024 81508 73250 98020
+ 81506 98018 69142 73270 81526 98038 122772 122770 106260 114484 106258 114482
+ 73236 81460 73234 97908 81458 97906 122762 106250 114458 73226 81434 97850
+ 66396 66382 67416 99246 67404 67398 66350 67438 69456 100268 69448 100262
+ 69444 69442 67372 69484 67366 69478 102312 116694 102308 102306 69416 100246
+ 73576 102326 73572 69410 73570 67350 69430 73590 118740 118738 102292 106420
+ 102290 106418 69396 73524 69394 81780 73522 81778 118730 102282 106394 69386
+ 73498 81722 66476 66470 67496 99286 67492 67490 66454 67510 100308 100306
+ 67476 69556 67474 69554 116714
+ ]
+ ] def
+
+ % Return the 17 bits for a codeword in a given cluster
+ /cwtobits {
+ clusters exch get exch get /v exch def
+ [ 17 {0} repeat v 2 17 string cvrs {48 sub} forall ]
+ dup length 17 sub 17 getinterval
+ } bind def
+
+ % Populate bitmap for the image
+ compact {
+ /rwid 17 c mul 17 add 17 add 1 add def
+ } {
+ /rwid 17 c mul 17 add 17 add 17 add 18 add def
+ } ifelse
+ /pixs rwid r mul array def
+
+ 0 1 r 1 sub {
+ /i exch def
+
+ i 3 mod 0 eq {
+ /lcw i 3 idiv 30 mul r 1 sub 3 idiv add def
+ /rcw i 3 idiv 30 mul c add 1 sub def
+ } if
+ i 3 mod 1 eq {
+ /lcw i 3 idiv 30 mul eclevel 3 mul add r 1 sub 3 mod add def
+ /rcw i 3 idiv 30 mul r 1 sub 3 idiv add def
+ } if
+ i 3 mod 2 eq {
+ /lcw i 3 idiv 30 mul c add 1 sub def
+ /rcw i 3 idiv 30 mul eclevel 3 mul add r 1 sub 3 mod add def
+ } if
+
+ pixs rwid i mul [
+ 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 0
+ lcw i 3 mod cwtobits {} forall
+ cws c i mul c getinterval { i 3 mod cwtobits {} forall } forall
+ compact {
+ 1
+ } {
+ rcw i 3 mod cwtobits {} forall
+ 1 1 1 1 1 1 1 0 1 0 0 0 1 0 1 0 0 1
+ } ifelse
+ ] putinterval
+
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx rwid
+ /pixy r
+ /height r 72 div rowmult mul
+ /width rwid 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/pdf417 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER pdf417--
+% --BEGIN ENCODER pdf417compact--
+% --REQUIRES preamble raiseerror renmatrix pdf417--
+% --DESC: Compact PDF417
+% --EXAM: This is compact PDF417
+% --EXOP: columns=2
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp pdf417compact 0.0 2015050900 60668 60355
+%%BeginData: 43 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /pdf417 dup /uk.co.terryburton.bwipp findresource put
+begin
+/pdf417compact {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Get the result of encoding with pdf417 with compact option
+ options (dontdraw) true put
+ options (compact) true put
+
+ /args barcode options //pdf417 exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/pdf417compact dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER pdf417compact--
+
% --BEGIN ENCODER micropdf417--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: MicroPDF417
% --EXAM: MicroPDF417
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp micropdf417 0.0 0 0 0
-%%BeginData: 333 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 05YE5E c5 o-Ai)5 $H\
-`B!23JD%DfBf4Df 0WZ5* @]T @UX : eDe *FB 5*@ ]TA8c@ -A 9)+&+D ,%u
-F(LLj04Sp:F_u#; L]ESo 061 uTF ,0 gZ 1G< ceG AVJ=FG L! ]1G<6J @3B
-/jCia0N1G<6J@N] 8kCi a0N 1G <c WG9 CL+ Cia 0N1G
-<]UEcYe7AmoLsAW eifE - ,f 4D KCu E06 ;5UB l7R*H
-#R>X4aVtcOu8C3D fBf4Df 0WC P ,i2 'C ia0N 4aW >WI?IQm30I a6V33Qn!BlU
-*FE2M8P!+/T/Wr; \FcnqO 1OX V 5/Tc #UAW eit P#ZpnAWe*t 3A5;iFD5Z2F
--8_M1OYEcDfBf4D f0WCOu %NL 8M=R lCis T4F !+t2CisT4F -8);1G<ceGB
-4mIDg-8c/<VeBEc 6/=F_ l.BE c6/=F _l/_ 09S ,$@ps^;Eaa /7FE2M8Ou%N
-L<,c8dF(K\OD0'> 4@UX: eDe*F B@ZmR N1G <L!!0T-I@< ,jrA7^+J!FC
-qKH]g@*F(^Y"C6C cDH'2WO Oo^@>O o[4NP !5$ bP')pIL]E5 5P"_#iD0'?Q
-5&,lSP,XU.P'E-LP%'4LP,X6>P!5%&I=%,:D0'?Q5&-6EP'N4"C6ATNC6CcD1G<3GEas#uAKYi
-2B8?P&P"_#pP!FGY<IL$AI?IQM@<[&OA79RiGB4m9@<,jrA7^p5OpR:-0564BOu"b+L]ESoHYF
-U3@<,jrA7^p5P!+/T5^eep04T2K@UX:eDe*E%BnueQ!Jgi@9Tgri1Lsp9@s;u:C*7#1P'AWo+D
-HW7Oo^_%05;VEL]NY>Ou%NLAM7S&FCTN9+Cno&@s<!M!,@ZjOu%N504J@1Ch7K,@UX:eDe*FB@
-ZiNV@<-0qDMSL[C5;kQ4aShm@<?"'F!+q#Ebo<)L^'#?L]rrXL]NY>OpR:-A79RiGB8Q?L'*s/
-G^XolA79RiGB4m9@<-0qDMSL[;MYL>CgpgnCh7L?#*N_a!Jgc>!KmbP1Lsp9@s<!M!/:T0P'DD
-<<JUX2!FfJXCh7L?#*Ml?!KsF/056S5Ou"b.F(025>9IB`Eas#uAKY]C#*NeY"-Q?)I?I0-Ou"
-b.F(986>9Id(@WR\6P')pOL&h:;Cm"g^5(in:!!&0uOo^@@H]g@C",)hPP!4U&KT]5]P(R&'1G
-<Qc@WNYr+C\c"@rGmh+DHW9P&,pVOo^@@P"^4NP"ArB1G<Qc@ribs+Dc+.F-6TfFcnqC!<A:!O
-o^_0KE)#Q!0V/]!Jgi)OuS0uKT^)55)'/mP#?^kK3aWr04T3IL]rqJOu$oq@rmG+P"TY5@rmG+
-P"UN14HaND!Fp=pL]iM8P$!G@KT^)5G_Q<RP#?+;@rmG,P"Ur=D0'3.L]ET2L&uphCm"g9F(99
-I!Kp*1!BcN]Oo]':F,0pS!g6Z?",)hPP'D]`KT]5LF(99I!g63>!GumfF,0gZ98F:FCm"g9F(9
-9I!Kp*1!eHMNOo]E@@rmG-P"UN14HaND!Fp=pL]WA6P$!G@KT^)5G_Q<RP#?+;@rmG.P"Ur=D0
-'3.L]NZ3L_Q"gOo]E@@rmG-P"UN2JWai4!Fp=pL]N;5P$!G@KT^)5G_Q<RP#?.<@rmG-P"UTFP
-&-9^@s<!M!/L`5s,r.l",)hPP'CMGFCTN9+DHW8P&,pTOo]':F-:fsP"76HASiQ!@<-0qDMSL[
-C6CAnASm5'P&5PV@<?"'F!,"%FCTN9P%&HCD3Cl&+C\c"@rGmh+C\c"Ch7K,Eb0*NWH)QeP"^4
-NP"ArBH$tiT@q/tp04\L5@s;u:>D<6IA79RiGB8oKP'(&n1OYEcI?IS`D.Rg0Bk)3,>9I.+!Jh
-,>#D`D:!/Lqe+BsX&L^o4GL^8e:L^79/>DN<9&Vp[J,_uGV,[DNsL]N;GL^8eML]E5E>p*@-!J
-hSK#`&eC!/M4m+BsX&L`D3VL`)!KL`p%H>DN?:#`&bB!Jg`3!F6gPL]WA?L^Ak<L]E5;>p*@-!
-f.>B$&AkC!/Lnd+BsX'L_5FMLa7cVLa67K>DN?:'Sm-Q'8QXE'3u_bL]WAKL^f.HL]E5C>p*@-
-!f.bN%u;0\!/Mk*+BsX(L^&YDL]N;4L]Ld(>DNB;#`&tH#D`V@#@/HVL]`G?L_,@QL_#:P>p*@
--",IAA&r7E])2K/9+BsX(L_#:VLa@j'La?=L>DNB;'SmZ`!Jh>D+^H3pL]`GOL`hKSL^AkL>p*
-@-",J(U-AWCm*Jc"I+BsX(LaIp/L_#:`LbE$V>DNB;/;Q';!JhVL0jPo+L]iM:L^8eiL_GRp>p
-*@-"Gd8<%#=q?!Jgb^+BsX)L^8eHL^/_@L^.3.>DNE<$A]7L%u:aP%p^;^L]iMBL_>L]L`)!d>
-p*@-"GdSE'o4/l-&<jQ+BsX)L_PX`L]N;DL`p%H>DNE<)MfMl!Jh&<&R?M`L]iMVLaIomL`M9t
->p*@-"GeC\/;Ogm+,DRU+BsX)Lb+?;L]N;LLbW0X?'6us@q/qaATVs,@ribs+BsX'L]rS;LaRu
-YL_F&:>DN?:#)ED<!Jg`3+^H3pL]WA;L]rSWL]E5>>p*@-!f.,<"c*G?!/N%/+BsX'L^AkAL^o
-4@Lb;sU>DN?:$A\nB.u41](L8.fL]WA@L^/_ML]E5f>p*@-",I)9"GdGA.u5!I+BsX(L]rS<L]
-N;TL^dW4>DNB;#)EJ>"c+I\&R?M`L]`G<L^/_HLbFQ'>p*@-",I5=#Da+N!Jhn)+BsX)L]`G9L
-a\&nLbrB[>DNE<"Gd5;.u5!t"'m$RL]iM;L^&YfL`2'R>p*@-"Gd8<#DaR[%Yu`C+BsX)L^/_A
-L`M9XLacUP?'7!R@ps^;D.Rg0Bk)3,@q/qaATVs,@rmehI?IP_F`MDEF!,LAGB8p'06LcCCi^_
-/DesQ5DKCss0564BOu%G<D'3\,FE2)*F!,1[99M(a@j#WE!0U!<1G<bkD284U99M(aCERJM!g6
-3>1G<cWE,6Y6L]`f5Ou"b3@;o^!D28=X99M(aEa`p-+Dlo<P"Uro05b9DF!,KGA!1YDP,XU#05
-kW7Gp%3LF_-^lA79RiGB8pVDI[m3P#-KYDeid,+D,%uF(LLjI?IQPEc6/CL]ETTF`MDEF!,LdD
-3>$K05kW7Gp$^-Cia0N1OYEcF^o?+F,0gZD09?,Ci^_/P&6?bHS9;Q@<iu-@;L!rOu%NL<,ZP\
-H$b]>I?IP_Bcq,G!KmJH1OYEt05VhB@<?"'F-:!q1G<Vg@j#fTCho35Ou"b$GB4m:+EEW]L]NY
->OpR:-@s<!M!+]M[@s<!WH"2&>+Di6*+Dr<=P,We_",))cK3aXc@s;u:DBN.+CO:j;I?K5=!*t
-b5062,BCi<r/>DN<7"/("(3/@["Ck`%cP%oE.K3aWr062,MDeFe,Too_F1Pc'f!JU]LH]g@/F(
-&m'B9GHA99MJZF)5c-L]`G6P)#3FI?I,SEcZ2?De+3N!g4FW!0V2^5)93%D3>$KEcZ&8B9GHA9
-9MJZF)5c-P!5%%Oo^:>TTX&1F(&m'B9GHA97;/MFcpm'!.C#1I?G)'1G<6VAS,Oq+BsX&CO:j;
-I?K4gOu%mpL]M:<056S5Ou$TdAS,Oq+DDs.De3NmF!,1Q!KsFF99OO6L]N[<M#W83HS9,s5*@^
-3De3NmF!,3?@rGpjAof)0L]N[<P"T;'AS,Oq+DR'4EcYZ*DeC2,P"Th:E,ol-Oo^:>Tos/RG^Y
-`G@rGpjAoib.@rGpjAoib.P"Th:@;Kjp+DI!3EcZ2?De,#UI?I,S@rGpjAof))De3NmF,0g+De
-3NmF-:!g!KsFF9Th2ADe3NmF-:!g!KsF<reLQ$@rGpjAoj,!L]W_WP"UN3ToqU&WKMLSP":B/L
-]MCL!KsF/06E@@@s<!W5*AQKGB4mEP"Ur=L'+-4C6CB/!/LYkL]N[<HS9,s5*@^3GB4mE+DR&?
-@s;u:DBN\W!Jgc>!Kp*1"/0fZ@rGpjAof)1+DR(=L]N[<P"UsSL'+-4C6GQZ!JU]MP%p/)I?I-
-LP"9JH!H'#qOo]om3+I/RP!4U&Tjr:fL]rV7P)#2nP,X0<Tos/RG^Y`G04T3I+CfV:L]Cq/F-:
-!g!KsFF9Th1b@r-:/FCfK6+BosmKE)&'^k;[glL9H,!VLhn!!1U-KE)&<G_?%tofe$/!N<ee!!
-1SgKE)%O@"\L\:dB[6!N7]*!!,n=KE)%T^k;[gf'n=m!UG,d!!01ZKE)&(G_?%tlTTt%!Ed-j!
-!00?KE)$T@"\L\?,2*n!NtpF!!1]!KE)$Xi.M(2Y'>U"!S9Mg!!->DKE)%U4G3\8?LWUJ!O$m(
-!!-DNKE)%V5(in:?[RM,!VQ;B!!1O+KE)&;G_?%toY,tY!MmMa!!1MeKE)&;4G3\8UgSiU!R`r
-\!!,VUKE)%K0SBE,dN!o?!D">d!!/l4KE)$D&;1#aVVm+-!Rl:H!!2>uKE)$H^k;[gVJq1g!Rj
-/a!!,c$KE)%M3.q84diO/B!DG2#!!/r:KE)$Ji.M(2Vg*jp!Rnc9!!,i6KE)%N4G3\8:,mn,!N
--ul!!,l?KE)%N^4ZIe:HX:1!Dabi!!/h0KE)&#E.e2lke)QK!MWtT!!1J,KE)&:SqI(E6pQD*!
-MV9$!!1IeKE)$@+G9^qU)8O`!CRKP!!,InKE)$B^k;[gUMtkd!R\Q5!!,PsKE)%J3.q84d@Q!k
-!Cebr!!/i7KE)$B(k_ki7LXqM!Cq*^!!/k-KE)$C3.q84URm,=!Cn,_!!,U&KE)%H@"\L\d("`
-/!U*jC!!,DOKE)%H0SBE,d%#ah!C@o^!!/c1KE)&"Ne@B564eeM!MKpT!!,ClKE)%H#(usW6XY
-QI!MR#V!!1I'KE)$?0SBE,Tq$c9!CI]W!!/dRKE)$?%"nT]6O&2D!MSA'!!,HIKE)$=5_K+<TW
-j(L!RP))!!,A.KE)%GR"PG?cq]5o!C79M!!/aOKE)$=#_W0YTSA+"!C6jA!!,BiKE)$=R"PG?6
-&^Hs!C3<2!!1G!KE)%G9S<BHTLOS7!C26i!!17#KE)&7G_?%to"KbW!L1BQ!!15]KE)&74G3\8
-P[K.E!QmBT!!21&KE)$$5_K+<PV@aj!@T(D!!/DDKE)%rG_?%tjh?BJ!A)$>!!/C)KE)%r4G3\
-8/7=,2!L>]u!!+W)KE)$((k_ki0&VB_!LJ%a!!19WKE)$*E.e2lQTTp$!A6?b!!+\lKE)$+G_?
- %tQbJ+Q!A?Qg!!+aeKE)&,^k;[gm;R^Y!VX0Z!!1e]KE)&?3.q84p7?p;!OP+F!!1e-KE)&?*
-/":mZlk#%!SSBD!!2HsKE)%[&;1#ag'iW7!Kt6O!!12\KE)&6]S$7c[_ROr!KpiD!!12$KE)&6
-SqI(E[U=ag!S]Se!!2JYKE)$h5_K+<,Tqa?!Kn:Q!!11OKE)$h+G9^q[MXYt!Gi=#!!+F^KE)%
-:E.e2lah39,!H,]+!!+ESKE)%:3.q84ae".c!H):u!!0PgKE)&-SqI(EDD6_D!@AY:!!-sSKE)
-$#E.e2lPIuPK!H2q1!!+H,KE)%:SqI(ED`ECM!OnYR!!.!XKE)$#]S$7cDnL`'!@OIl!!.#0KE
-)&+@"\L\m'q]K!VTiQ!!0AjKE)&+0SBE,m$r_/!O<i$!!1aiKE)&>Ne@B5Z4MZh!SIm7!!0A2K
-E)%Y"G?aUO^NhB!Q_d(!!2.eKE)%Z@"\L\OYDFg!Q^da!!-[sKE)#s+G9^qfpm]q!Q^:S!!-[S
-KE)#s&;1#aOUQmC!G2mr!!0D7KE)%8#(usW+p<Q!!@)!*!!/4lKE)%ohLkk0B4-Am!@':O!!/4
-PKE)$c0SBE,Z^c[K!KiCq!!-^LKE)#t%"nT],6if$!@,+-!!/5=KE)$c\:ah_,FjDe!G@pU!!+
-=)KE)$cNe@B5BAS:A!O4nC!!1`VKE)&>>_E(XYon]"!SEcm!!2F]KE)%X&;1#afSkI`!O2o`!!
-1`,KE)%X"G?aUYl]RY!?j^]!!/1cKE)%o>_E(X@mG\I!?iS=!!/1KKE)%o:4rTJ@j$F)!O8#F!
-!1`tKE)$_&;1#a+UE`$!K`%h!!-R8KE)%XL4fO-@g%Gb!?n\#!!/2:KE)$_Y_2uW+ddo_!KbT[
-!!-SsKE)%Xc@c/u@uQ'@!?m2N!!-SaKE)$_gk5Y.A'T`-!O/5M!!1_SKE)&>/qa3*Y`OM<!SC)
-!!!0<[KE)&*7YCaBY_7Z0!O.0/!!+48KE)%7=G-YTa=`,G!F_XS!!+4(KE)%79S<BH@??-B!O0
-e$!!/0NKE)$]LkGa/+G>CJ!F^Y7!!+3oKE)#qfRs5*@G$55!Fa3*!!-NJKE)&*/;+!(fHu7O!O
-+nD!!/04KE)#q8;$sD@*"!$!FWj!!!-KEKE)%1^k;[g`GgJ1!TLbF!!.sbKE)%l3.q84'L7<O!
-K&Ra!!1%YKE)#e+G9^qMAV!H!>H)u!!*c>KE)#g^k;[gMf==L!QD^)!!*jCKE)%23.q84`L___
-!>[AB!!.utKE)#g(k_ki((>ir!>f^.!!/"jKE)#h3.q84Mk5S%!>c`/!!*nKKE)#hSqI(Ec!Z2
-)!TpnF!!2[tKE)%A5_K+<bqOeN!Too*!!/N2KE)%t(k_kik)P)p!LaRQ!!1=QKE)%A#_W0Ybm&
-h$!Jt3;!!1$JKE)&4?A&:ZRp^mL!JrL`!!1$.KE)$25_K+<&g2i-!R7-f!!1#uKE)$2+G9^qRi
-$eY!Jq5<!!+thKE)#c#_W0Y2@+s9!>Ajo!!.qdKE)%khLkk02dh:=!>@/?!!1@$KE)$30SBE,S
-",-3!Juhi!!,"qKE)#d%"nT]2[k?>!>Dtr!!.r5KE)$3\:ah_':a^U!B6O%!!*anKE)#dhLkk0
-2r92f!Sp"o!!2MlKE)&I>_E(Xh&q@N!Uc>.!!2ghKE)&/&;1#amYlf!!Sn$7!!2MBKE)&/"G?a
-UR6ZE*!R.d$!!24eKE)%b5_K+<R37._!Ue`r!!24WKE)%b+G9^qh3`iq!Ue6d!!0\CKE)%@#_W
-0Yb_CcN!P8Vj!!1o1KE)%@!e^OS&O;!L!Jmt5!!1#CKE)$/5_K+<&Kl`,!Jm+r!!1#5KE)$s5_
-K+<1E_>N!L]=.!!1<hKE)$s+G9^q]9n6O!Su%S!!.n1KE)$s&;1#a1C/X6!L\[q!!.9LKE)#b!
-e^OS&[6og!JoNa!!+m[KE)#bR"PG?LsCYR!I(c$!!+mCKE)%@c@c/uGF4$`!P?X1!!*[dKE)$/
-L4fO-&_r$>!AiMa!!*\WKE)$sgk5Y.1X:XR!Sj?$!!2LiKE)&I/qa3*glR0h!U`X7!!1l2KE)&
-@7YCaBgk:=\!Si9[!!/I[KE)%s=G-YTjt;;e!P+kV!!/IKKE)&@DM.uj\WDIE!SknP!!1;5KE)
- %`LkGa/R"U+m!P*l:!!/I=KE)%`JqO+)&>4[V!Jjj2!!1"jKE)$-TS*:G&<MPF!JjF&!!./6K
-E)$-OG!T7R*:3`!Jj3u!!./&KE)%`b_,rs&;5]:!HX'M!!+g-KE)#aJqO+)0nP&Y!>*n:!!.mn
-KE)$-fRs5*&Boe-!HZnH!!+guKE)#a`e4<mF3K:;!AVTI!!*Z!KE)$omXtQ@ge`Y(!U_Ll!!1k
-GKE)&@-A2@"gdHeq!Sg"p!!/H`KE)%s/;+!(\Bom/!LQE2!!1:jKE)%_aFjNogh)3>!P$($!!/
-HRKE)%__Lqmi&5\#[!Ji:[!!+e#KE)#a8;$sDLaIcT!HHJ>!!+dpKE)%?AqU-bEQEe5!P%9F!!
-*WtKE)$m`.S*k0Z&JC!HGu0!!+e?KE)$mm">?>ETVoS!U^_V!!1k!KE)%s(5)YgQm@=b!LP'a!
-!*WZKE)$,BS6?dE9MrT!>$H.!!+c_KE)%,@"\L\$:'7E!JN4\!!*ELKE)%,(k_ki_N'9L!=BBk
-!!.c^KE)#[#_W0YKa*21!=N:g!!.e`KE)%ihLkk0$S[56!JR%s!!*HEKE)%,Ne@B5$Oh[g!=K*
-b!!*J;KE)%,hLkk0$_2kM!=Op@!!*JaKE)%45_K+<`it*r!TRF<!!/'%KE)%mR"PG?N=^aC!QL
-(O!!/&bKE)%mL4fO-N<Fn7!=;#E!!.bWKE)%i>_E(X)aK&V!=9m%!!1*pKE)%i:4rTJ)^'e6!K
-EJ"!!1*bKE)#l&;1#a#mc1a!JH2\!!+#EKE)%4L4fO-#m,b[!=>u`!!.c.KE)#lY_2uW$(-AG!
-JJaO!!+%+KE)%4c@c/u)iTFM!==L6!!*D]KE)#lgk5Y.$-n2(!?9=;!!1B<KE)&9=G-YTo<*`H
-!R?d[!!27VKE)%uLkGa/k=1+)!R?@O!!1AsKE)%3TS*:G``Rlo!M,m:!!/%?KE)%m9S<BHSWJL
-)!RAoB!!1)/KE)%DLkGa/N.cia!M+ms!!/%1KE)%DJqO+)#bZhN!JFR.!!*t1KE)#YOG!T7`bp
-G0!BZs-!!*t!KE)%3b_,rsKLUUp!BZBr!!/Y7KE)#YKS0=+4,AOi!?$QD!!*@WKE)#jJqO+)#h
-Xe1!JG?D!!*tiKE)#Yb_,rs44o2d!?'+7!!*AFKE)$7b_,rs)9.=0!=8+H!!*u*KE)$7mXtQ@m
-neZ;!V`[K!!2OZKE)&IVM"pMmmMg/!Ui@.!!1AAKE)&9/;+!(hU$oU!UjiX!!270KE)&0aFjNo
-mq.4Q!T(bJ!!1A3KE)&0_LqmiN)50-!QH[D!!/V:KE)%38;$sD`[6?=!PQj5!!/V2KE)%uAqU-
-b]uYj,!T)sl!!/$FKE)%d`.S*kSAKpZ!PQ@'!!*@%KE)%+/;+!((smp9!=25L!!.a"KE)$5d"D
-B"(s%@1!K:WD!!.GnKE)$5aFjNoSE>J)!=2#F!!.GfKE)%dk(E^8(rCq+!IMb<!!*@AKE)#im"
->?>#\J_i!BKM"!!*r!KE)%"m">?>3Tbtp!INs^!!2O:KE)&IQ@o5=mj*Pd!Uh4c!!1@nKE)&9(
-5)YghIqQB!Uhq"!!1qeKE)%u,(opshI;-<!K8F[!!1(TKE)%CBS6?dN$O&V!PIWL!!/U#KE)%3
-,(ops]]=_G!M!VP!!0alKE)#Y."hR$KGK4@!>oL'!!/$:KE)$4k_&p:(hA:"!=0m&!!.B/KE)$
-4jFdL6(h/-u!I<aZ!!,(=KE)$uie.:4(j:Q4!I=Bl!!2O$KE)&01kYi0hD0`a!Lu!"!!0`SKE)
- %cEeFDn(c6mG!B>1S!!.?:KE)$tnq6uD"[I_@!<jU!!!.\=KE)#V&;1#a"UKb]!<iUZ!!*8-K
-E)#VR"PG?"cS*7!<n42!!*8YKE)#Vc@c/uL7j2"!JZ\h!!0u2KE)%-LkGa/_a]:Z!JZ8\!!.h+
-KE)#UTS*:GJlm[+!=b]T!!.i,KE)%)9S<BH%?Q5C!J\gO!!*ObKE)%-`e4<m%>9B7!<e"-!!*O
-\KE)#UfRs5*Jo65A!=d\7!!.iBKE)#^b_,rs"NH)p!=d&%!!*5jKE)#^mXtQ@a&%Eh!QR`a!!1
-,.KE)%n6A,=>L/<O'!KPN[!!1,VKE)%j-A2@"NlZkR!QSf*!!/+uKE)%-6A,=>Nl$GL!<c5P!!
-*MTKE)#U8;$sDJgQ-N!?KO?!!*MLKE)#U7"bO@*QWm6!=Zo"!!*3hKE)#n`.S*k%)RYt!<d4l!
-!*MpKE)#UAqU-b*UJFZ!=\+D!!+,&KE)&9W.Y-OkG3b2!U$21!!1+gKE)&!BS6?dkI-$D!RG;0
-!!1+aKE)&!@Y=^^L+%]T!Q,\+!!/*nKE)%n2M;&2T'1h-!KL]D!!.fuKE)%EjFdL6NadYA!M8;
-(!!*3NKE)%)(5)Yg$tt:o!JWLc!!+)'KE)#]A:sp`"<rL!!BoY"!!+)#KE)#]@Y=^^4lh7r!?C
-*P!!*3\KE)#]G(]hr*;5$c!Bp.0!!2iDKE)&IdY%T$kELW"!UmCK!!28GKE)&AZ@i2Y`tX1,!R
-ETU!!1+QKE)&1FG'VpcSC.R!T.pN!!.fgKE)%51kYi0L(].>!M4Cd!!/*8KE)%eoN`SDKE)&G@
-"\L\qRD1Y!U;q'!!2aHKE)&LS:gkCl6(`[!VI:_!!2qVKE)&<&;1#aoaHKR!U9rD!!2`sKE)&<
-"G?aUlX5AG!VNsU!!2rQKE)&(5_K+<lS*tl!VMt9!!1XnKE)&=(k_kioo=\*!S.g8!!2BoKE)&
-(#_W0YlNW"B!S.C,!!1\ZKE)&=\:ah_p"k?%!Nn\@!!1\*KE)&=S:gkCXrrAt!S80A!!2DGKE)
- %U&;1#af*m<4!Nl]]!!1[UKE)%U"G?aUY@*"`!S=i7!!2EBKE)$Z5_K+<Y:tV0!S<ip!!-CKK
-E)%V(k_kif8bLa!F?=j!!083KE)$Z#_W0YY6KX[!FK5f!!0:5KE)&)hLkk0?SI-5!O&#H!!-FD
-KE)%VNe@B5?OVSf!FN?i!!0:[KE)$[S:gkC?]Kd>!U2k&!!2_rKE)&L>_E(XkobWZ!VDb4!!2p
-kKE)&;&;1#aoSeG'!U0lC!!2_HKE)&;"G?aUklQM<!Rj;e!!2>gKE)&Fgk5Y.dia;D!U5u)!!2
-`;KE)&%&;1#al&:8q!Rh=-!!2>=KE)&%"G?aUdfP1&!N/29!!1QQKE)&;gk5Y.V]^Wm!RmEh!!
-2?0KE)%N&;1#adu8q[!N-3V!!1Q'KE)%N"G?aUVZMMO!Dbt6!!0"%KE)&%gk5Y.:EY;j!N2<<!
-!1QoKE)$K&;1#aVi69/!D`uS!!0!PKE)$K"G?aU:U#KP!N4_+!!,l_KE)%Nc@c/u:Q0r,!DeH'
-!!,mNKE)$Kc@c/u kb*S/ !VBKI !!2pK KE )&: OG!T7o Lso<!U,
->m!!2^]KE)&:KS0 =+k ^nHf! R[Qn! !2 <9K E)& FDM.
-ujd?'"]!U.a\!!1 K'KE) &: `e4<m d=d/ Q! RZL P!!/j fKE )&#fR s5*k
-jF*(!Mba0!!1KkK E)%JL kGa /dD gh>! Mb =$! !/jHKE )$ CTS*:G UY(
-5"!R^=g!!,TOKE) %Jb_, rs7 u2f u !Md Yf! !,T CKE)$C Jq O+)8(` Ip!
-Mf(9!!,U6KE)$C` e4<m8 +)$ 1!U *@ 5! !2^ CKE )&:8;$ sD oHo4k! U)q
-)!!2:MKE)&"d"DB "k\P nP! RS o@ !!2 :qK E)& "`.S
-*kd)(G9!MRkn!!1 I5KE ) %H aF jNo d,o u]!M RGb!!
-/e1KE)$?d"DB"U$ RF4!CO q]! ! /eU KE )$?` .S* k6c+KV!CQ4 ,!!,ILKE)&:
-."hR$oG3)[!U(e^ !!2:-K E)& " BS6? dkVe (o! RPA1!!1GUK E)%Gk_&p:cu
-t'B!MJM,!!/bPKE )$=k_& p:T _=$= !C>e "!! ,CFKE)&:'S HGekRrOK!RN
-ZV!!1G%KE)%GFG' VpTQ5 \c!T cS"!! 2YpK E)& K>_E(XjWK3 V!V2V2!!2mj
-KE)&7&;1#anr/5% !TaT? !!2YF KE)&7 "G? aUjT:)8!R! `]!!22cKE)&
-Dgk5Y.b92H<!Tf] %!!2Z9K E)%r&; 1#ajc "im !Qtb%!!229 KE)%r"G?aUb
-6!=s!LH')!!19IKE)&7gk5Y.QQUq]!R$j`!!23,KE)%>&;1#abD_)S!LF(F!!18tKE)%>"G?aU
-QNDg?!A?]k!!/FjKE)%rgk5Y.0-GoJ!LK1,!!19gKE)$+&;1#aQ]-Rt!A=_3!!/F@KE)$+"G?a
-U0<g*0!LMSp!!+a?KE)%>c@c/u08tPa!AB1\!!+b.KE)$+c@c/up7R'=!W,uP!!-m)KE)&HOG!
-T7qb2YC!GV=^!!2eLKE)&M7YCaBB`*M`!VV2"!!2eFKE)&6TS*:GnlUPF!Vn@$!!2J[KE)&6OG
-!T7qeh&e!UYu%!!2f;KE)&D7YCaBm>-Dq!T\oe!!2J?KE)&6JqO+)m=Kuk!Qh!f!!205KE)&DD
-M.ujgRs3"!QgFV!!20)KE)&-OG!T7mEC4`!T_7R!!1i1KE)%pKS0=+gOt4[!QfqH!!1i+KE)%:
-TS*:Gak27H!T`[%!!0R%KE)%:OG!T7aioD<!On/D!!1iuKE)%p`e4<m[to\;!L&1i!!0Q^KE)%
-:JqO+)[t985!@OOn!!/;9KE)%pmXtQ@DkMa`!@Nt^!!/;-KE)$kOG!T7\'0L*!L(NV!!."oKE)
-$#KS0=+DhNcD!@NJP!!+J"KE)%:mXtQ@DqK^C!@Q*E!!.#^KE)$#`e4<mDoRG1!@R;g!!2diKE
-)&M/;+!(Ab^oY!VT';!!2sDKE)$`r.G%Np-aQ6!G$Y4!!2d[KE)&6:kSfLngoFo!US0d!!2.OK
-E)&D-A2@"m)Xh[!VU,Y!!2H)KE)&66A,=>m)"DU!Q`W@!!2.sKE)&+d"DB"aN0#7!T[jG!!1co
-KE)&>k(E^8fu/OD!Q`-2!!1ciKE)%8d"DB"aR"Q[!OL.+!!/5'KE)%ok(E^8ZcIe"!SQUg!!0F
-EKE)%8_LqmiZbh@q!@,sE!!/5KKE)$cd"DB",KPN<!KlMt!!-`RKE)%Zk(E^8B>fH'!@,I7!!-
-`LKE)#tm">?>BC(9O!@-`[!!-`pKE)&H."hR$q\Fhb!Fkt[!!2d=KE)$^IY7\%p*,.i!TYY^!!
-2X+KE)&>BS6?dp,7R(!UO?M!!2.)KE)&>@Y=^^aCp5,!TZ.l!!1a9KE)%oA:sp`f]7\c!Q\`'!
-!1a3KE)%7k_&p:aEE4:!O:jA!!1aGKE)%XjFdL6OQ(on!O:X;!!+8,KE)%7p4NDHA*ARG!?pNW
-!!-TjKE)#rie.:4A)`.A!?q/i!!-U'KE)&H'SHGe@=Ek0!VR.Z!!2-pKE)&>1kYi0j:[+G!UMR
-p!!1.tKE)&*FG'Vpa>/DK!SDFG!!/1'KE)%WoRm2FOE-!S!O2-J!!+57KE)$]oRm2F+S(0c!Fb
-PP!!2d#KE)&6$A8B[ll(NW!QZ14!!1_5KE)%73eRJ6Y^1s&!TKc*!!2UlKE)&JY(QcUifJfn!V
-&j:!!2)8KE)&C7YCaBie2sb!TJ]a!!1'3KE)&4fRs5*nSX![!QC.R!!2*'KE)%lLkGa/il6WO!
-QB_F!!1&jKE)%2TS*:G`RohD!TNO#!!/">KE)%lb_,rsMhm#d!QE'3!!/"2KE)%2JqO+)(SHE]
-!K5T`!!1(,KE)#hOG!T7Mp-hS!>gQF!!/"tKE)#hKS0=+(P7;?!>jCA!!/#GKE)#hb_,rs(WM+
-.!>k0W!!2[fKE)&KXFpQS2>Dh)!V8j8!!2nmKE)$0r.G%No0e63!Ao7Y!!2[XKE)&4:kSfLnLT
-=n!Tqa^!!2(MKE)&C-A2@"k/`2U!V9oV!!26#KE)&46A,=>k/)cO!Q<?<!!2(qKE)%td"DB"`5
-mT3!TI^E!!1?cKE)&8k(E^8c,>88!Q;j.!!1?]KE)%0d"DB"`9`-W!LqGh!!.qtKE)%kk(E^8S
-&g6_!R9b[!!/S-KE)%0_LqmiS&0gY!>Eh5!!.rCKE)$3d"DB"'?Gh,!K#rl!!,%"KE)%Bk(E^8
-2oL@L!>E>'!!,$qKE)#dm">?>2sc1t!>FUK!!,%@KE)&MW.Y-OFmt%a!P82^!!2tmKE)$ppk/V
-J\pf;4!W/UE!!.1hKE)$p5(in:o-f7l!Vr%7!!+kQKE)&IBS6?dqmM.X!I"Bo!!+j(KE)&IA:s
-p`o-/hf!HrpF!!2h'KE)&4."hR$nJ6cX!Tn'K!!2()KE)&@k_&p:pND2i!TG;V!!2NKKE)&8@Y
-=^^mc&m"!Q8Z)!!2(;KE)%sk_&p:`+4N$!Susm!!1=)KE)%k@Y=^^h;j4h!R0PV!!1p8KE)%/k
-_&p:`--e6!L`/)!!.o:KE)%bk_&p:RH0#$!Jo`g!!0^mKE)%@ie.:4]AeJD!>4OK!!.oLKE)$/
-k_&p:&`eTF!I*a\!!+n:KE)#bie.:4GN=DW!Ai_g!!.<'KE)#bp4NDH1\QJ%!W/+7!!.-8KE)%
-`IY7\%qiZU4!HNR@!!.+(KE)&E'SHGe0n+cU!V\F(!!2[(KE)$oIY7\%pG.C%!TFfH!!24=KE)
-&4&qg5cmW=*^!Tl.j!!2M.KE)%k1kYi0b]JL<!Q6aH!!1mIKE)%sEeFDnh"$*u!JkiN!!/JZKE
-)%/EeFDn\b(OT!LWG2!!0Y$KE)#aoRm2F1%^,!!>+gT!!.05KE)$-nq6uDF7Ota!W.b-!!.(eK
-E)$m5(in:o*U-N!V[Lc!!2'dKE)&8)MA(kmQ-"$!Q5n0!!1;)KE)&.H@u8!LcU1h!LS1d!!0V+
-KE)#aH@u8!0`$G&!HIsh!!.&QKE)&3:kSfLn>q9C!T?S&!!2SdKE)&37"bO@iBi1t!Q*3:!!2%
-pKE)%iaFjNoiF[`C!Q)d.!!0sRKE)%,d"DB"_X)pU!JSUJ!!0t!KE)%,`.S*kKu/KC!=R8-!!.
-f?KE)#\aFjNoL$"$g!=Qi!!!*JEKE)#\m">?>$g**B!V*+A!!2lGKE)#kr.G%NnYCg<!?-E?!!
-2VaKE)&3."hR$n<S_-!TRjH!!2%(KE)&5A:sp`i?EpT!TRXB!!0rMKE)&32M;&2`or'U!Q&B#!
-!1+#KE)%i@Y=^^`o;XO!JKZi!!0r[KE)%4k_&p:K]Idd!KH/n!!.c4KE)%4ie.:4$0[$B!JL0"
-!!+&&KE)#ZjFdL6)ruYP!=@b=!!+%uKE)#Zp4NDH)tnpb!Vt5u!!,.UKE)%DIY7\%q9jor!BPU
-]!!,,EKE)&CP_9#;)1I5=!V<[O!!2VQKE)$7IY7\%o<O#L!T=`G!!2+:KE)&3&qg5ckB)@W!TP
-qg!!28'KE)%i1kYi0`cQk6!Q$UF!!1C;KE)%mEeFDncLQVg!JGQJ!!/&NKE)%+EeFDnSb.R8!K
-?T&!!/Y]KE)#YoRm2F)>&R^!=87L!!,1RKE)#jnq6uD47\%)!IF6g!!0c\KE)%!G_?%t]fq)L!
-I?k]!!.BeKE)&Kb(K`q3IHJ[!W1T(!!.FoKE)$55(in:HTm)_!V)&#!!2\[KE)&I\qC%ai<k5<
-!TP)O!!27DKE)&AH@u8!_A\(-!QI0R!!1AkKE)&0qLehLKK=bd!K;>X!!/VdKE)%dqLehL#^V.
-(!>tZd!!,+VKE)$uG_?%t]Y9%!!I6e\!!.?dKE)$4^4ZIeH+nq3!I281!!.>9KE)$t?A&:Zi2D
-;/!T9c,!!2#PKE)%hBS6?di3n:=!Pr<"!!0oFKE)%)k_&p:_01J3!J9Bc!!.]2KE)#Vk_&p:K(
-ait!<qP;!!*8_KE)#Vp4NDHnC3*k!=aL2!!2T;KE)&2P_9#;iO"7<!T9,o!!2&aKE)%h1kYi0_
-fUP3!PpOE!!0uXKE)%)FG'VpL@g-!!J5?F!!.iFKE)#UoRm2F%J5;R!<htH!!*Q"KE)&Jl@]-<
-*INM?!?F@W!!2T3KE)&Cg4TG,i/30f!TBK#!!2,kKE)%h)MA(k_`EGN!QTM>!!.[4KE)%-H@u8
-!Nr"D/!<d_%!!*N)KE)#nqLehL4a;V[!M7#Y!!,5FKE)$9*eXLo*57(+!Bn/M!!.LeKE)%e]S$
-7cI5ll[!PY.Y!!.KfKE)%$%YOf_4M6=I!I_V6!!,3RKE)%$SqI(EI(4h0!PVln!!.J;KE)%#Ne
-@B54C3[@!IWaW!!.IPKE)%#:4rTJHnL'P!Pl'q!!0m@KE)%(FG'VpJT?DD!<VnH!!*/lKE)&2g
-4TG,^m]oV!Pu@#!!.X3KE)%*H@u8!!d]M"!=&CR!!*SDKE)#o]S$7c*hJ#b!C"#H!!/]uKE)$:
-S:gkC5)t9r!?PR#!!,:?KE)%%Y_2uW^KcEl!IgDh!!0i0KE)%%N._03IYNLU!BsbA!!.Q(KE)$
-::4rTJIa3TH!Ie.(!!0heKE)%%9S<BHIR\tj!Br,h!!.OdKE)%%/;+!(IO9^J!=rLi!!+0HKE)
-#p:4rTJ5?NR=!M?NJ!!,;XKE)$;7YCaB+"i3H!C(IT!!,;8KE)$;-=%`uKE)%Ri.M(2ebFdt!E
-6de!!0(gKE)&&r.G%N;;d*-!N>dH!!1SuKE)$Ln:UcBW-j6u!Dn#o!!2rCKE)$Wi.M(2Xn[PL!
-W'lj!!-6lKE)%Sr.G%NqS\$e!Ef,M!!00MKE)&L_Lqmi=F>c%!VOfm!!2r_KE)$Ypk/VJouMdd
-!W(r3!!-@&KE)&G`.S*k>^h>+!VO<_!!2E4KE)&Gm">?>lc=_Z!VPT.!!2E(KE)&=_Lqmif?f0
-N!UK**!!1]mKE)&=k(E^8f>N=B!S>2A!!0:MKE)&)m">?>YK2@s!S?Ie!!0:AKE)$G^k;[gV=9
--<!Rgn!!!,[LKE)%Kpk/VJdXHiL!D)^5!!/mCKE)$DG_?%tUcsG3!D#>+!!2q0KE)$In:UcBVY
-l)I!W$>[!!,dgKE)%MIY7\%qI5*X!DIlo!!,bWKE)&Fk_&p:qK@Ml!D`QG!!2`QKE)$JIY7\%o
-\tN(!U8g$!!2`cKE)&;jFdL6l/I?r!Rp7c!!2?XKE)&%jFdL6e)H#\!N5.7!!1RBKE)%NjFdL6
-VrE@0!Cbq"!!/hhKE)&#IY7\%7.>j0!MXsp!!,K4KE)%I5(in:6p-,&!CRu^!!2pQKE)$Bpk/V
-JUOIjr!W"R)!!,Q:KE)$B5(in:oQ5`d!CqTl!!2_4KE)&:oRm2FkjjB,!R^Om!!1L<KE)%JoRm
-2FU[j'<!CH:/!!/d@KE)$>G_?%tTg",0!CAo%!!,D-KE)&L)MA(k6[XOe!CK&(!!2^QKE)&:H@
-u8!d/&Cq!C:s`!!/b,KE)$=4G3\85ot[Z!C=GQ!!,?tKE)$<SqI(E/&6f<!L</-!!17?KE)$%i
-.M(2Pk]n3!QokE!!+M;KE)%;I"VJ#.!UCF!L,d$!!+K1KE)&KBS6?d/b"Dn!LEY:!!2n+KE)$(
-pk/VJQ@=Je!Vp2X!!+WuKE)$(5(in:o&t`,!Vpnl!!+_MKE)&DjFdL6/q/HR!V56'!!23FKE)&
-Dp4NDHjlD'p!Ti<o!!1:,KE)&7p4NDHbN+<V!R'JU!!/GMKE)%rp4NDHQfNf"!LMf!!!0LcKE)
-&,pk/VJm=']g!GT?&!!0IrKE)&,I"VJ#B]+OD!OR*)!!1e;KE)$dE.e2lZoj!A!GFHG!!0GJKE
-)$d*/":m-/aFV!L!52!!12jKE)$ii.M(2,k-He!Kqh`!!-p*KE)%]I"VJ#P!4O!!Gm"6!!+?-K
-E)$h4G3\8,T_U=!Gig1!!2mPKE)$"pk/VJPCA/b!W-tl!!2mNKE)$jpk/VJ-@CIH!W-nj!!-tb
-KE)$"5(in:DE`^R!V1>c!!+HrKE)&HoRm2FnoBB`!H3F?!!2faKE)&6oRm2FmIZ&3!T`g)!!2K
-XKE)%poRm2Fg[p.!!Qjnc!!1jFKE)%:oRm2FPOaA,!G0'"!!0CpKE)&+I"VJ#ADi+@!O?s'!!1
-b:KE)$`E.e2lZ93d?!G"0C!!0AHKE)$`*/":mA.F7m!@%#d!!/40KE)$bn:UcB,'\b@!KfR!!!
--\VKE)%Z5(in:Ait_H!?rS<!!-[QKE)&K)MA(k,CG.E!W+p2!!-_[KE)#t5(in:B0LtK!V/:)!
-!2e>KE)&6H@u8!m.uA8!Qb+j!!1dLKE)%8qLehL@c2n>!O6m&!!1`dKE)$^E.e2lYrm[>!Fe$A
-!!0>GKE)$^*/":m@Le%k!?l]@!!/1qKE)$_G_?%t+ZtDX!Fn6F!!+5aKE)$_*eXLo+hiU0!Fri
-s!!-MIKE)%W]S$7c@5ro?!O//K!!-LJKE)$]%YOf_+M<@-!F`Wo!!+46KE)$]SqI(E@(:ji!O,
-m`!!-JtKE)$\Ne@B5+C9^$!FXc;!!-J4KE)$\:4rTJ(#X`F!K-Z*!!1&fKE)#en:UcBML:'W!>
-Kd3!!.s@KE)#e4G3\8'HVo-!Vj$T!!*l1KE)%2IY7\%pp,PQ!>^'9!!*j!KE)&CFG'Vp(Oh#;!
-V(2`!!2*OKE)&4nq6uD`Unf`!QFV_!!/#MKE)%2nq6uD28FkF!LiM2!!1>lKE)$0i.M(2RWsJc
-!R3f]!!+oqKE)%A4G3\81cU-g!Lb'_!!+nrKE)$0%YOf_'(CPS!Ju2W!!,"IKE)#cG_?%tM*?R
-m!B,1U!!/QQKE)$24G3\8&fu]+!B)!P!!2k`KE)#dI"VJ#q7;4Z!B5CZ!!*`sKE)$35(in:nN)
-='!V:Vj!!2)*KE)&8qLehL`;5,e!R:Io!!.rQKE)%ai.M(2h0=SQ!Ud[T!!.2WKE)%aE.e2lh)
-p>j!H__&!!0YjKE)&/*eXLoF>/@J!P08(!!.0YKE)%a%YOf_F:<g&!A`Sd!!/L4KE)%s^4ZIeG
-2S#R!A\VI!!/KMKE)$rE.e2l]0(`H!LY!^!!.7&KE)$.*/":mFrZ/8!AY.<!!.6QKE)#bG_?%t
-Lq\NB!AetR!!*ZoKE)$sG_?%t1H^<j!>-B+!!.:+KE)$/*eXLoG92D;!>3&!!!+miKE)$s^4ZI
-eEkm>.!P*0&!!1lfKE)$n@"\L\\N#6B!Sj9"!!.*oKE)%`*/":mEYsH0!P&\n!!.*KKE)$n#(u
-sW0lVdG!LUNQ!!..[KE)$-3.q84R%As2!HU5R!!0X%KE)$o*/":m0b/j:!HSa(!!*YDKE)$-]S
-$7c&>"OT!HYo,!!+gGKE)$oSqI(EEF=G"!P#Xm!!1k]KE)$m0SBE,\=A3P!HAs0!!0TiKE)$m%
-"nT]E<_'r!AM$:!!/HnKE)$m\:ah_0V!dr!HFW_!!+d6KE)$mNe@B5&71"i!ANA`!!.)rKE)$l
-Y_2uW\6O[e!H=EZ!!0T)KE)$lN._03E/'#G!AIc3!!.&oKE)$,:4rTJE6a+:!H;.o!!0S^KE)$
-l9S<BHE(5K\!AH-Z!!.%VKE)$l/;+!(E$g5<!=J=L!!.e$KE)#[G_?%tKg(.i!=CrB!!*EJKE)
-#\I"VJ#$U04D!V![R!!2&)KE)%iqLehLL&-H&!?0mL!!/((KE)%m^4ZIe)K:?0!KB3p!!*utKE
-)%4*eXLo)B=D1!?)H$!!*CNKE)%+^4ZIe)gI#9!=:lA!!+$$KE)#Z*eXLo)]jY4!=?Jn!!+%QK
-E)$6^k;[gST'5^!RA?2!!,,gKE)%D3.q84cCT[h!BMof!!/W1KE)$6(k_kiSIU;Q!BLXB!!,+b
-KE)#jE.e2lN4afD!BY7R!!*rsKE)%3SqI(E4#hln!>ul1!!,/$KE)#j%YOf_3t?oD!=6>k!!*t
-MKE)#YSqI(E41p4H!?%J^!!,0QKE)%d@"\L\hRJ4=!Uj?J!!.C2KE)%d0SBE,hOK6!!I>lA!!0
-bMKE)&0Ne@B5H4Y`0!PJnp!!.BOKE)%d#(usWH3Am$!BFP@!!/V"KE)%u?A&:ZHXML,!BDie!!
-/U[KE)%"0SBE,]ps`U!M#1'!!.E`KE)$5%"nT]HOPQ-!BC@;!!.ENKE)#i\:ah_N*_/;!BIZC!
-!*q,KE)%"\:ah_3Lka&!>piM!!.G:KE)$5Ne@B5H]EaZ!=3"b!!*qnKE)$5hLkk0HesDU!I6q`
-!!0a:KE)&0>_E(XGp%b?!PFeQ!!1qOKE)$u&;1#a]SqLD!I4s(!!0`eKE)$u"G?aUGliX!!B@<
-:!!/TpKE)$uY_2uW31,@!!Luo<!!.A4KE)%cc@c/uH&RCV!B>ge!!.A"KE)#i>_E(X38B/e!>n
-Rb!!.B#KE)$4c@c/uH-V'C!I18j!!0`7KE)&0/qa3*G`[RY!PD*Z!!.>#KE)%c7YCaBG_C_M!I
-03L!!,&]KE)%C/qa3*Gh@ZL!B<c+!!.>gKE)$47YCaBGfGC:!>mGB!!,&sKE)$tmXtQ@GYj%n!
-PBt:!!.=8KE)%c-A2@"GXR2b!I-qa!!,&1KE)$tCkMch3$s:Y!I/40!!.<mKE)%c(5)YgGU.qB
-!I,fA!!,%pKE)$t2M;&2"aG\#!J8%=!!*6cKE)#V*eXLo"hoWi!=a"$!!.heKE)#^3.q84L7X%
-u!=^$%!!*N=KE)#U]S$7c%D7>o!<f!I!!*P#KE)#n@"\L\Njs`B!QSN"!!+)oKE)%5S:gkC*>j
-G0!KN1n!!+)KKE)#n#(usW%(Lrj!JXp6!!++MKE)#]S:gkC*Lqc_!=Y!A!!++#KE)#U?A&:Z%,
-QX;!?L$M!!,5JKE)%EY_2uWcWl,'!BhQY!!/[YKE)&!:4rTJ4V38H!M57'!!,4gKE)%EL4fO-4
-TpE<!BgL;!!+(DKE)%5>_E(X4g9S>!?@J[!!/*TKE)$9R"PG?T$Duh!BlBp!!+'oKE)$9L4fO-
-$s\Gc!?BmJ!!*L'KE)$9gk5Y.*6s3;!Bn_]!!0g,KE)&1=G-YTn#h<D!PXYK!!1tNKE)%eLkGa
-/haW8!!PX5?!!0fcKE)$8TS*:GSlgXG!REBO!!.M@KE)$8OG!T7SkOe;!I^&_!!0gXKE)%E7YC
-aBI>EOV!Bc$g!!.M$KE)$8JqO+)I=d+P!?>3p!!/*4KE)$8fRs5**))"c!I`UR!!,4+KE)#m7Y
-CaBIE[?E!BeAT!!.MfKE)#]/qa3**,^E0!Bfe'!!.N9KE)%e:kSfLh^jE\!PV*X!!1t(KE)%e7
-"bO@^-[JQ!Ba23!!/ZBKE)%#d"DB"4@k,*!M1Wk!!.JgKE)%eAqU-bI)L[<!B`]%!!.JaKE)#m
-/;+!(4D]ZN!?<G>!!.K6KE)$8AqU-bI--(^!PTt8!!1smKE)%e,_Q-u^*841!B_c`!!/Z,KE)%
-#BS6?d4=#R[!ISF2!!,2+KE)%#@Y=^^*#=2-!B`8n!!.IjKE)%e'SHGe^(Q)!!B_'L!!.I(KE)
-$8&qg5cHnp?T!<Toe!!*.mKE)#W\:ah_K3j32!=#'I!!*:aKE)#S?A&:Z#2Y"5!=l>e!!.j[KE
-)#_R"PG?LJEL&!=k'A!!*RaKE)#W>_E(X%bu^;!<u;P!!*STKE)#oTS*:GO'%&8!QV?r!!+.&K
-E)%69S<BH*f,IL!KT^'!!+-oKE)#oJqO+)%TnAa!J`:\!!+.nKE)%6DM.uj*mB9;!=hSP!!+.\
-KE)#W/qa3*%W6q"!?UZ^!!/]gKE)&!XFpQST1FV8!RIWr!!/][KE)%F6A,=>*`.Li!KSdb!!,:
-1KE)%FCkMchO!]M[!C"SX!!+-/KE)$:`.S*k*^YM[!C"AR!!*Q\KE)#oCkMch%OQi/!C#k'!!+
--QKE)$:k(E^8hl)2.!UnTm!!1uQKE)&1U4`LIT.#?m!RI'b!!0iJKE)%F,_Q-u^LVut!M:Qh!!
-0iDKE)#o."hR$Nu!BK!Bt1M!!+,dKE)%%k_&p:5%K<H!?NG<!!.Q0KE)$:@Y=^^Ic?"\!=flu!
-!+-!KE)$:G(]hrIeJEp!T0,p!!1u?KE)%F'SHGe^GLTD!M:!X!!0hiKE)#o'SHGe4u@om!?Ml,
-!!.OjKE)$:15#W.IWC)A!T/cf!!/]!KE)%f)MA(k*X[Q#!BqET!!.O0KE)#T>_E(X"&=LL!=)_
-[!!._TKE)#X9S<BH#=a@H!<Xs-!!*=BKE)#`:kSfLLTH./!=q_S!!.kPKE)#`7"bO@%mkpL!=(
-0/!!*UHKE)#X-A2@"%q^Ip!KX14!!1-kKE)%6UkA^KO.q:-!=pT3!!.k@KE)#pBS6?dO1']A!?
-Yj*!!*TSKE)#p@Y=^^#8Vsm!=q)A!!+0bKE)&!e:[f&cdIIH!KWIu!!/_!KE)%6P(Wf9T<a+M!
-=olt!!+/uKE)#`&qg5c5BMPY!?X(M!!,<)KE)&!b(K`qO,ASj!M>g6!!*T;KE)#p)MA(k5<=Gt
-!<]EV!!*2!KE)#X W.Y-O K@Y\U !=,ER !! *>! KE)#TQ @o5=#I]
-9c!Jf0X!!.l'KE) #XP _9#;& %$ui! =+ d@! !*V 9KE)
- %nl<PN<Ou"b3@; p91>9 I. )"!WI %U4r cU L'' 2c"*0 +uH A2M_L ',#A
-".FrHg4f^PL'*<f !t'bb )MS >,L '*Tn "4 Do+ eqO:VL '* Zp"13d bUk
-SuKL'+T5"0@4ZW. kC&L' &u] ""o < 1-A DU\ L'+ l="."Z D( 5;o*L' '8e
-"*B8"A;11uL')=J ")N\o BSH U[L '( P4 "'g Q_? A8PWL' (, ("%7kG 7YV
-"3L'(mj+BsR%c@u BqL& u7I !\ T3 /-A DR[ L&r -F!Y
-U4h)MS;SL&s,b![ <@#@ Y Or )L &u[ U!r @WQn qI5>L
-&uOQ!d'.uA;1.tL &si!!^ _VC _ M/- OL '$Ll !p# (;m"PRXL&r o\![rd)BSHT
-PL'#GN!mHB#`.e? 5L'!*a !fi ! :N.q D(L' !`s !k<sdY_E4@ L'#_V!`4UQ=
-G?l^L'$.b!o@3*? '6us@s <$5 @VKq *HQZ g7F `VY9Ec[C-P "Us%P"RHOP!
-5$b>DNl<L]DjdK6 E%PL_ 5fHO t_6=0 TrD` P"A rB30Ia,&X' ,L&X#h9Oq*X
-2061K?FDkW&FE;d OEa`p .P!5% %P!5% %06 WLBOu$<u$@ @R/I?K5+L]W
-A>P,4<qH\aA=WI9 q$?'711 @YbASW JCnE9 RW' 6Ou"b3GA1S 1>DOV^2i(@f
-@pL3eL]N[<P"Uro@u(5M4_%u1Op$+bEd)5.Le*[bI?IP_E+sQ<+ED[?A0>oUCm#*f1Pc$e!HNt
-sP,Wd]Bp(ZC1G<6SF*&O=+ECn0Cm"gT!KsF<"-RD^1N7&QF!,LIBk/?#P&+>F@u(/K4aUlcEa`
-p'Oo^@>P,X6oP%odQEa`p/DdmF&F-6TfF^oW:+DI!3@r-4.+CfV;DdmF&F-6TfF_Mt=@;p7M!J
-gc>WJEBoC5;k1@;p=,@VKq*OogehI?IQ>L]W`&HYFUC@;p%G!Jgc>WJEBoC5;k1@;p=,@VKq*O
-ogeh@s;u:BnuhRCm%G$Cia\@@s<$5@VKq*Oogeh@s;u:BnuhRCkr+T!Kp)cCia\@@s<$5@VKq*
-OogehBcqG)E,q*BL]N[<Lbt90L]DI(E--#-BlnEZ!g7\SP#PqI"-Pfo@q/r1E-l:AEa`p'Oo^@
->P,X6oP%odQEa`p/DdmF&F-6TfFa]EP@s;u:BnukSCm%G$Cia\@@s<$5@VKq*OogehBcqG)E+>
- %3L]N[<Lbt90L]MO)E--#-BlnEZ!g7\9GB4m@L]`fVL]NY>P"T;$F*&O7GB@b4BlnEZ!g7\9G
-B4m@L]`fVL]W_?P"T;$F*&O7GB@b4BlnEZ!g7\?+ECn0EfpHZ!KsF<1m2U0!-2LeFDkW&FE<TH
-P')29<+C^eP!+/++ECn0Cm"gT!KsF<1m2U0!-2LeFDkW&FE<THP'(8YF!,1Q"HmSa94MdZF<G(
-;FDkW&FE<THP'(8YF!,1Q"HmSW!KmJH94MdZF<G(;FDkW&FE<THP'(I]Ea`osOo^@>P,X6oP%o
-dREa`p/DdmF&F-6TfF^oW:+DHW7P&,pUOo^_=@r-4.+CfV;DdmF&F-6TfF^oW:+DHW7P&,pVOo
-^_=@r-4.+CfV;DdmF&F-6TfF_Mt=@;p7M!Jgc>WJEBoC5;k1@;p=,@VKq*OogehI?IQc!F:k6I
-?I,`4>1_dDD*Y`ASu?nFE2)?05tWMF!,F9G]PNWBm=kFEd)5.05tWMGp%,\BOtmjBQPA;Le*[e
-Ec6/=F_l/_CbL!HA9;K-Ed)5.Le*[e05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-*@<?O
-(G`l$h3IR&#Ou"b.Bk)1%E+EQ;0fP7TP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD
-@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/micropdf417 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp micropdf417 0.0 2015050900 200331 213151
+%%BeginData: 952 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/micropdf417 {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /columns 0 def
+ /rows 0 def
+ /rowmult 2 def
+ /encoding (auto) def
+ /cca false def
+ /ccb false def
+ /raw false def
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /columns columns cvi def
+ /rows rows cvi def
+ /rowmult rowmult cvr def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ raw {/encoding (raw) def} if
+ cca {/encoding (cca) def} if
+
+ % Convert input into array of codewords
+ encoding (raw) eq encoding (cca) eq or {
+ /datcws barcode length array def
+ /i 0 def /j 0 def
+ { % loop
+ i barcode length eq {exit} if
+ /cw barcode i 1 add 3 getinterval cvi def
+ datcws j cw put
+ /i i 4 add def
+ /j j 1 add def
+ } loop
+ /datcws datcws 0 j getinterval def
+ } if
+
+ /barcode [ barcode {} forall ] def
+ /barlen barcode length def
+
+ ccb {/encoding (ccb) def} if
+
+ /encb {
+ /in exch def
+ /inlen in length def
+ /out inlen 6 idiv 5 mul inlen 6 mod add array def
+ 0 1 inlen 6 idiv 1 sub {
+ /k exch def
+ /msbs [ in k 6 mul 3 getinterval aload pop ] def
+ /mscs [
+ msbs aload pop exch 256 mul add exch 65536 mul add
+ 3 {dup 900 mod exch 900 idiv} repeat
+ ] def
+ /lsbs [ in k 6 mul 3 add 3 getinterval aload pop ] def
+ /lscs [
+ lsbs aload pop exch 256 mul add exch 65536 mul add
+ 3 {dup 900 mod exch 900 idiv} repeat
+ ] def
+ lscs 0 get mscs 0 get 316 mul add
+ out k 5 mul 4 add 2 index 900 mod put
+ 900 idiv lscs 1 get add mscs 0 get 641 mul add mscs 1 get 316 mul add
+ out k 5 mul 3 add 2 index 900 mod put
+ 900 idiv lscs 2 get add mscs 0 get 20 mul add mscs 1 get 641 mul add mscs 2 get 316 mul add
+ out k 5 mul 2 add 2 index 900 mod put
+ 900 idiv lscs 3 get add mscs 1 get 20 mul add mscs 2 get 641 mul add
+ out k 5 mul 1 add 2 index 900 mod put
+ 900 idiv mscs 2 get 20 mul add
+ out k 5 mul 3 -1 roll 900 mod put
+ } for
+ /rem inlen 6 mod def
+ rem 0 ne {
+ out out length rem sub
+ [ in inlen rem sub rem getinterval aload pop ]
+ putinterval
+ } if
+ out
+ } bind def
+
+ encoding (byte) eq encoding (ccb) eq or {
+ /datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def
+ datcws 0 barlen 6 mod 0 eq {924} {901} ifelse put
+ datcws 1 barcode encb putinterval
+ encoding (ccb) eq {/datcws [920 datcws aload pop] def} if
+ } if
+
+ encoding (auto) eq {
+
+ % Modes and text submodes
+ /T 0 def /N 1 def /B 2 def
+ /A 0 def /L 1 def /M 2 def /P 3 def
+
+ % Special function characters for mode switching
+ /tl -1 def /nl -2 def /bl -3 def /bl6 -4 def /bs -5 def
+
+ % Special function characters for text mode
+ /al -6 def /ll -7 def /ml -8 def /pl -9 def /as -10 def /ps -11 def
+
+ % Character maps for each state
+ /charmaps [
+ % A L M P
+ [ (A) (a) (0) (;) ] % 0
+ [ (B) (b) (1) (<) ] % 1
+ [ (C) (c) (2) (>) ] % 2
+ [ (D) (d) (3) (@) ] % 3
+ [ (E) (e) (4) ([) ] % 4
+ [ (F) (f) (5) 92 ] % 5
+ [ (G) (g) (6) (]) ] % 6
+ [ (H) (h) (7) (_) ] % 7
+ [ (I) (i) (8) (`) ] % 8
+ [ (J) (j) (9) (~) ] % 9
+ [ (K) (k) (&) (!) ] % 10
+ [ (L) (l) 13 13 ] % 11
+ [ (M) (m) 9 9 ] % 12
+ [ (N) (n) (,) (,) ] % 13
+ [ (O) (o) (:) (:) ] % 14
+ [ (P) (p) (#) 10 ] % 15
+ [ (Q) (q) (-) (-) ] % 16
+ [ (R) (r) (.) (.) ] % 17
+ [ (S) (s) ($) ($) ] % 18
+ [ (T) (t) (/) (/) ] % 19
+ [ (U) (u) (+) (") ] % 20
+ [ (V) (v) (%) (|) ] % 21
+ [ (W) (w) (*) (*) ] % 22
+ [ (X) (x) (=) 40 ] % 23
+ [ (Y) (y) (^) 41 ] % 24
+ [ (Z) (z) pl (?) ] % 25
+ [ ( ) ( ) ( ) ({) ] % 26
+ [ ll as ll (}) ] % 27
+ [ ml ml al (') ] % 28
+ [ ps ps ps al ] % 29
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 30 dict 30 dict 30 dict 30 dict ] def
+ /alltext 104 dict def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 3 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ dup charvals j get exch i put
+ alltext exch -1 put
+ } for
+ } for
+
+ /e 10000 def % "Empty"
+
+ /latlen [ % Bit length of latch between submodes
+ % To: A L M P From
+ [ 0 1 1 2 ] % A
+ [ 2 0 1 2 ] % L
+ [ 1 1 0 1 ] % M
+ [ 1 2 2 0 ] % P
+ ] def
+
+ /latseq [ % Latch sequences between submodes
+ % To: A L M P From
+ [ [] [ll] [ml] [ml pl] ] % A
+ [ [ml al] [] [ml] [ml pl] ] % L
+ [ [al] [ll] [] [pl] ] % M
+ [ [al] [al ll] [al ml] [] ] % P
+ ] def
+
+ /shftlen [ % Bit length of shift to submode
+ % To: A L M P From
+ [ e e e 1 ] % A
+ [ 1 e e 1 ] % L
+ [ e e e 1 ] % M
+ [ e e e e ] % P
+ ] def
+
+ % Determine runlengths of digits
+ /numdigits [ barlen {0} repeat 0 ] def
+ /numtext [ barlen {0} repeat 0 ] def
+ /numbytes [ barlen {0} repeat 0 ] def
+ barlen 1 sub -1 0 {
+ /i exch def
+ barcode i get dup 48 ge exch 57 le and {
+ numdigits i numdigits i 1 add get 1 add put
+ } if
+ alltext barcode i get known numdigits i get 13 lt and {
+ numtext i numtext i 1 add get 1 add put
+ } if
+ numtext i get 5 lt numdigits i get 13 lt and {
+ numbytes i numbytes i 1 add get 1 add put
+ } if
+ } for
+ /numdigits numdigits 0 barlen getinterval def
+ /numtext numtext 0 barlen getinterval def
+ /numbytes numbytes 0 barlen getinterval def
+
+ /seq [] def /seqlen 0 def /state B def /p 0 def { % loop
+ p barlen eq {exit} if
+ /n numdigits p get def
+ n 13 ge {
+ /seq [
+ seq aload pop
+ nl
+ [ barcode p n getinterval aload pop ]
+ ] def
+ /state N def
+ /p p n add def
+ /seqlen seqlen 1 add n add def
+ } { % next
+ /t numtext p get def
+ t 5 ge {
+ /seq [
+ seq aload pop
+ state T ne {tl} if
+ [ barcode p t getinterval aload pop ]
+ ] def
+ /state T def
+ /p p t add def
+ /seqlen seqlen 1 add t add def % ish
+ } { % next
+ /b numbytes p get def
+ b 1 eq state T eq and {
+ /seq [
+ seq aload pop
+ bs
+ [ barcode p get ]
+ ] def
+ /p p b add def
+ /seqlen seqlen 2 add def
+ } { % next
+ /seq [
+ seq aload pop
+ b 6 mod 0 ne {bl} {bl6} ifelse
+ [ barcode p b getinterval aload pop ]
+ ] def
+ /state B def
+ /p p b add def
+ /seqlen seqlen 1 add b add def
+ } ifelse } ifelse } ifelse
+ } loop
+
+ /latchcws <<
+ tl 900 bl 901 bl6 924 nl 902 bs 913
+ >> def
+
+ % Submode encoding functions
+ /enca {charvals A get exch get} bind def
+ /encl {charvals L get exch get} bind def
+ /encm {charvals M get exch get} bind def
+ /encp {charvals P get exch get} bind def
+ /textencfuncs [ /enca /encl /encm /encp ] def
+
+ /addtotext {
+ text exch l exch put
+ /l l 1 add def
+ } bind def
+
+ /enct {
+
+ /in exch def
+
+ /curlen [ e e e e ] def
+ curlen submode 0 put
+ /curseq [ [] [] [] [] ] def
+
+ % Derive the optimal sequences ending in each submode
+ in {
+
+ /char exch def
+
+ % Check for optimisations in the current sequences by latching from x to y
+ { % loop
+ /imp false def
+ [ A L M P ] {
+ /x exch def
+ [ A L M P ] {
+ /y exch def
+ /cost curlen x get latlen x get y get add def
+ cost curlen y get lt {
+ curlen y cost put
+ curseq y [
+ curseq x get aload pop
+ latseq x get y get aload pop
+ ] put
+ /imp true def
+ } if
+ } forall
+ } forall
+ imp not {exit} if % Repeat unless no improvement
+ } loop
+
+ % Determine optimal next sequences for each valid encoding
+ /nxtlen [ e e e e ] def
+ /nxtseq 4 array def
+
+ [ A L M P ] {
+ /x exch def
+
+ { % loop for common exit
+
+ charvals x get char known not {exit} if
+
+ % Extend directly
+ /cost curlen x get 1 add def
+ cost nxtlen x get lt {
+ nxtlen x cost put
+ nxtseq x [ curseq x get aload pop char ] put
+ } if
+
+ % Optimise for direct shifts from y to x
+ [ A L M P ] {
+ /y exch def
+ x y ne {
+ /cost curlen y get shftlen y get x get add 1 add def
+ cost nxtlen y get lt {
+ nxtlen y cost put
+ nxtseq y [
+ curseq y get aload pop
+ x A eq {as} {ps} ifelse
+ char
+ ] put
+ } if
+ } if
+ } forall
+
+ exit
+ } loop
+
+ } forall
+
+ /curlen nxtlen def
+ /curseq nxtseq def
+
+ } forall
+
+ % Select the optimal sequence
+ /minseq e def
+ [ A L M P ] {
+ /k exch def
+ curlen k get minseq lt {
+ /minseq curlen k get def
+ /txtseq curseq k get def
+ } if
+ } forall
+
+ % Encode the sequence
+ /text minseq array def
+ /k 0 def /l 0 def {
+ k txtseq length ge {exit} if
+
+ /char txtseq k get def
+
+ % Encode character
+ char textencfuncs submode get load exec addtotext
+ /k k 1 add def
+
+ % Encode shifted next character
+ char as eq char ps eq or {
+ txtseq k get char as eq {enca} {encp} ifelse addtotext
+ /k k 1 add def
+ } if
+
+ % Latches to new submode
+ char al eq {/submode A def} if
+ char ll eq {/submode L def} if
+ char ml eq {/submode M def} if
+ char pl eq {/submode P def} if
+ } loop
+
+ text length 2 mod 1 eq {
+ submode P eq {
+ /pad al encp def
+ /submode A def
+ } {
+ /pad ps textencfuncs submode get load exec def
+ } ifelse
+ /text [ text aload pop pad ] def
+ } if
+
+ /out text length 2 idiv array def
+ 0 1 out length 1 sub {
+ /k exch def
+ out k text k 2 mul get 30 mul text k 2 mul 1 add get add put
+ } for
+
+ out
+
+ } bind def
+
+ /encn {
+ /in exch def
+ /out [] def
+ 0 44 in length 1 sub {
+ /k exch def
+ /gmod [
+ 1 in k in length k sub dup 44 gt {pop 44} if getinterval
+ {48 sub} forall
+ ] def
+ /cwn [] def {
+ /dv 900 def
+ /gmul [] def /val 0 def {
+ gmod length 0 eq {exit} if
+ /val val 10 mul gmod 0 get add def
+ /gmod gmod 1 gmod length 1 sub getinterval def
+ val dv lt {
+ gmul length 0 ne {
+ /gmul [ gmul aload pop 0 ] def
+ } if
+ } {
+ /gmul [ gmul aload pop val dv idiv ] def
+ } ifelse
+ /val val dv mod def
+ } loop
+ /dv val def
+ /cwn [ dv cwn aload pop ] def
+ /gmod gmul def
+ gmul length 0 eq {exit} if
+ } loop
+ /out [ out aload pop cwn aload pop ] def
+ } for
+ out
+ } bind def
+
+ /encfuncs [ /enct /encn /encb ] def
+
+ /addtocws {
+ dup datcws j 3 -1 roll putinterval
+ length j add /j exch def
+ } bind def
+
+ % Encode the sequence
+ /state T def /submode A def
+ /datcws seqlen array def
+ /i 0 def /j 0 def {
+ i seq length ge {exit} if
+ /chars seq i get def
+ chars type /arraytype eq { % Encode data according to mode
+ chars encfuncs state get load exec addtocws
+ } { % Encode the latch to new state or byte shift
+ [ latchcws chars get ] addtocws
+ chars tl eq {/state T def /submode A def} if
+ chars nl eq {/state N def} if
+ chars bl eq chars bl6 eq or {/state B def} if
+ chars bs eq {
+ /i i 1 add def
+ seq i get encb addtocws
+ } if
+ } ifelse
+ /i i 1 add def
+ } loop
+ /datcws datcws 0 j getinterval def
+ } if
+
+ % Basic metrics for the each symbol
+ % c r ecw rl rc rr
+ /metrics [
+ [ 1 11 7 1 0 9 ]
+ [ 1 14 7 8 0 8 ]
+ [ 1 17 7 36 0 36 ]
+ [ 1 20 8 19 0 19 ]
+ [ 1 24 8 9 0 17 ]
+ [ 1 28 8 25 0 33 ]
+ [ 2 8 8 1 0 1 ]
+ [ 2 11 9 1 0 9 ]
+ [ 2 14 9 8 0 8 ]
+ [ 2 17 10 36 0 36 ]
+ [ 2 20 11 19 0 19 ]
+ [ 2 23 13 9 0 17 ]
+ [ 2 26 15 27 0 35 ]
+ [ 3 6 12 1 1 1 ]
+ [ 3 8 14 7 7 7 ]
+ [ 3 10 16 15 15 15 ]
+ [ 3 12 18 25 25 25 ]
+ [ 3 15 21 37 37 37 ]
+ [ 3 20 26 1 17 33 ]
+ [ 3 26 32 1 9 17 ]
+ [ 3 32 38 21 29 37 ]
+ [ 3 38 44 15 31 47 ]
+ [ 3 44 50 1 25 49 ]
+ [ 4 4 8 47 19 43 ]
+ [ 4 6 12 1 1 1 ]
+ [ 4 8 14 7 7 7 ]
+ [ 4 10 16 15 15 15 ]
+ [ 4 12 18 25 25 25 ]
+ [ 4 15 21 37 37 37 ]
+ [ 4 20 26 1 17 33 ]
+ [ 4 26 32 1 9 17 ]
+ [ 4 32 38 21 29 37 ]
+ [ 4 38 44 15 31 47 ]
+ [ 4 44 50 1 25 49 ]
+ ] def
+
+ % Basic metrics for the each symbol
+ % c r ecw rl rc rr
+ /ccametrics [
+ [ 2 5 4 39 0 19 ]
+ [ 2 6 4 1 0 33 ]
+ [ 2 7 5 32 0 12 ]
+ [ 2 8 5 8 0 40 ]
+ [ 2 9 6 14 0 46 ]
+ [ 2 10 6 43 0 23 ]
+ [ 2 12 7 20 0 52 ]
+ [ 3 4 4 11 43 23 ]
+ [ 3 5 5 1 33 13 ]
+ [ 3 6 6 5 37 17 ]
+ [ 3 7 7 15 47 27 ]
+ [ 3 8 7 21 1 33 ]
+ [ 4 3 4 40 20 52 ]
+ [ 4 4 5 43 23 3 ]
+ [ 4 5 6 46 26 6 ]
+ [ 4 6 7 34 14 46 ]
+ [ 4 7 8 29 9 41 ]
+ ] def
+ cca {/metrics ccametrics def} if
+
+ % Select metrics of an appropriate symbol
+ /urows rows def
+ /ucols columns def
+ /i 0 def
+ { % loop
+ /m metrics i get def
+ /c m 0 get def % Columns in symbol
+ /r m 1 get def % Rows in symbol
+ /k m 2 get def % Error correction codewords
+ /rapl m 3 get def % Left row address pattern
+ /rapc m 4 get def % Centre row address pattern
+ /rapr m 5 get def % Right row address pattern
+ /ncws r c mul k sub def % Data codewords
+ /okay true def
+ datcws length ncws gt {/okay false def} if
+ urows 0 ne urows r ne and {/okay false def} if
+ ucols 0 ne ucols c ne and {/okay false def} if
+ okay {exit} if
+ /i i 1 add def
+ } loop
+ /m datcws length def
+
+ % Create codewords array with one extra working space element and add padding
+ /n c r mul k sub def
+ /cws c r mul 1 add array def
+ cws 0 datcws putinterval
+ cws m [ n m sub {900} repeat ] putinterval
+ cws n [ k {0} repeat 0 ] putinterval
+
+ % Calculate the log and anti-log tables
+ /rsalog [ 1 928 {dup 3 mul 929 mod} repeat ] def
+ /rslog 929 array def
+ 1 1 928 {dup rsalog exch get exch rslog 3 1 roll put} for
+
+ % Function to calculate the product in the field
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add 928 mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } bind def
+
+ % Generate the coefficients
+ /coeffs [ 1 k {0} repeat ] def
+ 1 1 k {
+ /i exch def
+ coeffs i coeffs i 1 sub get put
+ i 1 sub -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod add 929 mod put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+ /coeffs coeffs 0 coeffs length 1 sub getinterval def
+ coeffs length 1 sub -2 0 {coeffs exch 2 copy get 929 exch sub put} for
+
+ % Derive the error codewords
+ 0 1 n 1 sub {
+ /t exch cws exch get cws n get add 929 mod def
+ 0 1 k 1 sub {
+ /j exch def
+ cws n j add cws n j add 1 add get 929 t coeffs k j sub 1 sub get mul 929 mod sub add 929 mod put
+ } for
+ } for
+ n 1 n k add { dup cws exch 929 cws 5 -1 roll get sub 929 mod put } for
+
+ % Trim the working space from the end of the codewords
+ /cws cws 0 cws length 1 sub getinterval def
+
+ % Base 10 encoding of the bar space successions for the codewords in each cluster
+ /clusters [
+ [
+ 120256 125680 128380 120032 125560 128318 108736 119920 108640 86080 108592 86048
+ 110016 120560 125820 109792 120440 125758 88256 109680 88160 89536 110320 120700
+ 89312 110200 120638 89200 110140 89840 110460 89720 110398 89980 128506 119520
+ 125304 128190 107712 119408 125244 107616 119352 84032 107568 119324 84000 107544
+ 83984 108256 119672 125374 85184 108144 119612 85088 108088 119582 85040 108060
+ 85728 108408 119742 85616 108348 85560 108318 85880 108478 85820 85790 107200
+ 119152 125116 107104 119096 125086 83008 107056 119068 82976 107032 82960 82952
+ 83648 107376 119228 83552 107320 119198 83504 107292 83480 83468 83824 107452
+ 83768 107422 83740 83900 106848 118968 125022 82496 106800 118940 82464 106776
+ 118926 82448 106764 82440 106758 82784 106936 119006 82736 106908 82712 106894
+ 82700 82694 106974 82830 82240 106672 118876 82208 106648 118862 82192 106636
+ 82184 106630 82180 82352 82328 82316 82080 118830 106572 106566 82050 117472
+ 124280 127678 103616 117360 124220 103520 117304 124190 75840 103472 75808 104160
+ 117624 124350 76992 104048 117564 76896 103992 76848 76824 77536 104312 117694
+ 77424 104252 77368 77340 77688 104382 77628 77758 121536 126320 128700 121440
+ 126264 128670 111680 121392 126236 111648 121368 126222 111632 121356 103104 117104
+ 124092 112320 103008 117048 124062 112224 121656 126366 93248 74784 102936 117006
+ 93216 112152 93200 75456 103280 117180 93888 75360 103224 117150 93792 112440
+ 121758 93744 75288 93720 75632 103356 94064 75576 103326 94008 112542 93980
+ 75708 94140 75678 94110 121184 126136 128606 111168 121136 126108 111136 121112
+ 126094 111120 121100 111112 111108 102752 116920 123998 111456 102704 116892 91712
+ 74272 121244 116878 91680 74256 102668 91664 111372 102662 74244 74592 102840
+ 116958 92000 74544 102812 91952 111516 102798 91928 74508 74502 74680 102878
+ 92088 74652 92060 74638 92046 92126 110912 121008 126044 110880 120984 126030
+ 110864 120972 110856 120966 110852 110850 74048 102576 116828 90944 74016 102552
+ 116814 90912 111000 121038 90896 73992 102534 90888 110982 90884 74160 102620
+ 91056 74136 102606 91032 111054 91020 74118 91014 91100 91086 110752 120920
+ 125998 110736 120908 110728 120902 110724 110722 73888 102488 116782 90528 73872
+ 102476 90512 110796 102470 90504 73860 90500 73858 73944 90584 90572 90566
+ 120876 120870 110658 102444 73800 90312 90308 90306 101056 116080 123580 100960
+ 116024 70720 100912 115996 70688 100888 70672 70664 71360 101232 116156 71264
+ 101176 116126 71216 101148 71192 71180 71536 101308 71480 101278 71452 71612
+ 71582 118112 124600 127838 105024 118064 124572 104992 118040 124558 104976 118028
+ 104968 118022 100704 115896 123486 105312 100656 115868 79424 70176 118172 115854
+ 79392 105240 100620 79376 70152 79368 70496 100792 115934 79712 70448 118238
+ 79664 105372 100750 79640 70412 79628 70584 100830 79800 70556 79772 70542
+ 70622 79838 122176 126640 128860 122144 126616 128846 122128 126604 122120 126598
+ 122116 104768 117936 124508 113472 104736 126684 124494 113440 122264 126670 113424
+ 104712 117894 113416 122246 104706 69952 100528 115804 78656 69920 100504 115790
+ 96064 78624 104856 117966 96032 113560 122318 100486 96016 78600 104838 96008
+ 69890 70064 100572 78768 70040 100558 96176 78744 104910 96152 113614 70022
+ 78726 70108 78812 70094 96220 78798 122016 126552 128814 122000 126540 121992
+ 126534 121988 121986 104608 117848 124462 113056 104592 126574 113040 122060 117830
+ 113032 104580 113028 104578 113026 69792 100440 115758 78240 69776 100428 95136
+ 78224 104652 100422 95120 113100 69764 95112 78212 69762 78210 69848 100462
+ 78296 69836 95192 78284 69830 95180 78278 69870 95214 121936 126508 121928
+ 126502 121924 121922 104528 117804 112848 104520 117798 112840 121958 112836 104514
+ 112834 69712 100396 78032 69704 100390 94672 78024 104550 94664 112870 69698
+ 94660 78018 94658 78060 94700 94694 126486 121890 117782 104484 104482 69672
+ 77928 94440 69666 77922 99680 68160 99632 68128 99608 115342 68112 99596
+ 68104 99590 68448 99768 115422 68400 99740 68376 99726 68364 68358 68536
+ 99806 68508 68494 68574 101696 116400 123740 101664 116376 101648 116364 101640
+ 116358 101636 67904 99504 115292 72512 67872 116444 115278 72480 101784 116430
+ 72464 67848 99462 72456 101766 67842 68016 99548 72624 67992 99534 72600
+ 101838 72588 67974 68060 72668 68046 72654 118432 124760 127918 118416 124748
+ 118408 124742 118404 118402 101536 116312 105888 101520 116300 105872 118476 116294
+ 105864 101508 105860 101506 105858 67744 99416 72096 67728 116334 80800 72080
+ 101580 99398 80784 105932 67716 80776 72068 67714 72066 67800 99438 72152
+ 67788 80856 72140 67782 80844 72134 67822 72174 80878 126800 128940 126792
+ 128934 126788 126786 118352 124716 122576 126828 124710 122568 126822 122564 118338
+ 122562 101456 116268 105680 101448 116262 114128 105672 118374 114120 122598 101442
+ 114116 105666 114114 67664 99372 71888 67656 99366 80336 71880 101478 97232
+ 80328 105702 67650 97224 114150 71874 97220 67692 71916 67686 80364 71910
+ 97260 80358 97254 126760 128918 126756 126754 118312 124694 122472 126774 122468
+ 118306 122466 101416 116246 105576 101412 113896 105572 101410 113892 105570 113890
+ 67624 99350 71784 101430 80104 71780 67618 96744 80100 71778 96740 80098
+ 96738 71798 96758 126738 122420 122418 105524 113780 113778 71732 79988 96500
+ 96498 66880 66848 98968 66832 66824 66820 66992 66968 66956 66950 67036
+ 67022 100000 99984 115532 99976 115526 99972 99970 66720 98904 69024 100056
+ 98892 69008 100044 69000 100038 68996 66690 68994 66776 98926 69080 100078
+ 69068 66758 69062 66798 69102 116560 116552 116548 116546 99920 102096 116588
+ 115494 102088 116582 102084 99906 102082 66640 68816 66632 98854 73168 68808
+ 66628 73160 68804 66626 73156 68802 66668 68844 66662 73196 68838 73190
+ 124840 124836 124834 116520 118632 124854 118628 116514 118626 99880 115478 101992
+ 116534 106216 101988 99874 106212 101986 106210 66600 98838 68712 99894 72936
+ 68708 66594 81384 72932 68706 81380 72930 66614 68726 72950 81398 128980
+ 128978 124820 126900 124818 126898 116500 118580 116498 122740 118578 122738 99860
+ 101940 99858 106100 101938 114420
+ ] [
+ 128352 129720 125504 128304 129692 125472 128280 129678 125456 128268 125448 128262
+ 125444 125792 128440 129758 120384 125744 128412 120352 125720 128398 120336 125708
+ 120328 125702 120324 120672 125880 128478 110144 120624 125852 110112 120600 125838
+ 110096 120588 110088 120582 110084 110432 120760 125918 89664 110384 120732 89632
+ 110360 120718 89616 110348 89608 110342 89952 110520 120798 89904 110492 89880
+ 110478 89868 90040 110558 90012 89998 125248 128176 129628 125216 128152 129614
+ 125200 128140 125192 128134 125188 125186 119616 125360 128220 119584 125336 128206
+ 119568 125324 119560 125318 119556 119554 108352 119728 125404 108320 119704 125390
+ 108304 119692 108296 119686 108292 108290 85824 108464 119772 85792 108440 119758
+ 85776 108428 85768 108422 85764 85936 108508 85912 108494 85900 85894 85980
+ 85966 125088 128088 129582 125072 128076 125064 128070 125060 125058 119200 125144
+ 128110 119184 125132 119176 125126 119172 119170 107424 119256 125166 107408 119244
+ 107400 119238 107396 107394 83872 107480 119278 83856 107468 83848 107462 83844
+ 83842 83928 107502 83916 83910 83950 125008 128044 125000 128038 124996 124994
+ 118992 125036 118984 125030 118980 118978 106960 119020 106952 119014 106948 106946
+ 82896 106988 82888 106982 82884 82882 82924 82918 124968 128022 124964 124962
+ 118888 124982 118884 118882 106728 118902 106724 106722 82408 106742 82404 82402
+ 124948 124946 118836 118834 106612 106610 124224 127664 129372 124192 127640 129358
+ 124176 127628 124168 127622 124164 124162 117568 124336 127708 117536 124312 127694
+ 117520 124300 117512 124294 117508 117506 104256 117680 124380 104224 117656 124366
+ 104208 117644 104200 117638 104196 104194 77632 104368 117724 77600 104344 117710
+ 77584 104332 77576 104326 77572 77744 104412 77720 104398 77708 77702 77788
+ 77774 128672 129880 93168 128656 129868 92664 128648 129862 92412 128644 128642
+ 124064 127576 129326 126368 124048 129902 126352 128716 127558 126344 124036 126340
+ 124034 126338 117152 124120 127598 121760 117136 124108 121744 126412 124102 121736
+ 117124 121732 117122 121730 103328 117208 124142 112544 103312 117196 112528 121804
+ 117190 112520 103300 112516 103298 112514 75680 103384 117230 94112 75664 103372
+ 94096 112588 103366 94088 75652 94084 75650 75736 103406 94168 75724 94156
+ 75718 94150 75758 128592 129836 91640 128584 129830 91388 128580 91262 128578
+ 123984 127532 126160 123976 127526 126152 128614 126148 123970 126146 116944 124012
+ 121296 116936 124006 121288 126182 121284 116930 121282 102864 116972 111568 102856
+ 116966 111560 121318 111556 102850 111554 74704 102892 92112 74696 102886 92104
+ 111590 92100 74690 92098 74732 92140 74726 92134 128552 129814 90876 128548
+ 90750 128546 123944 127510 126056 128566 126052 123938 126050 116840 123958 121064
+ 116836 121060 116834 121058 102632 116854 111080 121078 111076 102626 111074 74216
+ 102646 91112 74212 91108 74210 91106 74230 91126 128532 90494 128530 123924
+ 126004 123922 126002 116788 120948 116786 120946 102516 110836 102514 110834 73972
+ 90612 73970 90610 128522 123914 125978 116762 120890 102458 110714 123552 127320
+ 129198 123536 127308 123528 127302 123524 123522 116128 123608 127342 116112 123596
+ 116104 123590 116100 116098 101280 116184 123630 101264 116172 101256 116166 101252
+ 101250 71584 101336 116206 71568 101324 71560 101318 71556 71554 71640 101358
+ 71628 71622 71662 127824 129452 79352 127816 129446 79100 127812 78974 127810
+ 123472 127276 124624 123464 127270 124616 127846 124612 123458 124610 115920 123500
+ 118224 115912 123494 118216 124646 118212 115906 118210 100816 115948 105424 100808
+ 115942 105416 118246 105412 100802 105410 70608 100844 79824 70600 100838 79816
+ 105446 79812 70594 79810 70636 79852 70630 79846 129960 95728 113404 129956
+ 95480 113278 129954 95356 95294 127784 129430 78588 128872 129974 95996 78462
+ 128868 127778 95870 128866 123432 127254 124520 123428 126696 128886 123426 126692
+ 124514 126690 115816 123446 117992 115812 122344 117988 115810 122340 117986 122338
+ 100584 115830 104936 100580 113640 104932 100578 113636 104930 113634 70120 100598
+ 78824 70116 96232 78820 70114 96228 78818 96226 70134 78838 129940 94968
+ 113022 129938 94844 94782 127764 78206 128820 127762 95102 128818 123412 124468
+ 123410 126580 124466 126578 115764 117876 115762 122100 117874 122098 100468 104692
+ 100466 113140 104690 113138 69876 78324 69874 95220 78322 95218 129930 94588
+ 94526 127754 128794 123402 124442 126522 115738 117818 121978 100410 104570 112890
+ 69754 78074 94714 94398 123216 127148 123208 127142 123204 123202 115408 123244
+ 115400 123238 115396 115394 99792 115436 99784 115430 99780 99778 68560 99820
+ 68552 99814 68548 68546 68588 68582 127400 129238 72444 127396 72318 127394
+ 123176 127126 123752 123172 123748 123170 123746 115304 123190 116456 115300 116452
+ 115298 116450 99560 115318 101864 99556 101860 99554 101858 68072 99574 72680
+ 68068 72676 68066 72674 68086 72694 129492 80632 105854 129490 80508 80446
+ 127380 72062 127924 127378 80766 127922 123156 123700 123154 124788 123698 124786
+ 115252 116340 115250 118516 116338 118514 99444 101620 99442 105972 101618 105970
+ 67828 72180 67826 80884 72178 80882 97008 114044 96888 113982 96828 96798
+ 129482 80252 130010 97148 80190 97086 127370 127898 128954 123146 123674 124730
+ 126842 115226 116282 118394 122618 99386 101498 105722 114170 67706 71930 80378
+ 96632 113854 96572 96542 80062 96702 96444 96414 96350 123048 123044 123042
+ 115048 123062 115044 115042 99048 115062 99044 99042 67048 99062 67044 67042
+ 67062 127188 68990 127186 123028 123316 123026 123314 114996 115572 114994 115570
+ 98932 100084 98930 100082 66804 69108 66802 69106 129258 73084 73022 127178
+ 127450 123018 123290 123834 114970 115514 116602 98874 99962 102138 66682 68858
+ 73210 81272 106174 81212 81182 72894 81342 97648 114364 97592 114334 97564
+ 97550 81084 97724 81054 97694 97464 114270 97436 97422 80990 97502 97372
+ 97358 97326 114868 114866 98676 98674 66292 66290 123098 114842 115130 98618
+ 99194 66170 67322 69310 73404 73374 81592 106334 81564 81550 73310 81630
+ 97968 114524 97944 114510 97932 97926 81500 98012 81486 97998 97880 114478
+ 97868 97862 81454 97902 97836 97830 69470 73564 73550 81752 106414 81740
+ 81734 73518 81774 81708 81702
+ ] [
+ 109536 120312 86976 109040 120060 86496 108792 119934 86256 108668 86136 129744
+ 89056 110072 129736 88560 109820 129732 88312 109694 129730 88188 128464 129772
+ 89592 128456 129766 89340 128452 89214 128450 125904 128492 125896 128486 125892
+ 125890 120784 125932 120776 125926 120772 120770 110544 120812 110536 120806 110532
+ 84928 108016 119548 84448 107768 119422 84208 107644 84088 107582 84028 129640
+ 85488 108284 129636 85240 108158 129634 85116 85054 128232 129654 85756 128228
+ 85630 128226 125416 128246 125412 125410 119784 125430 119780 119778 108520 119798
+ 108516 108514 83424 107256 119166 83184 107132 83064 107070 83004 82974 129588
+ 83704 107390 129586 83580 83518 128116 83838 128114 125172 125170 119284 119282
+ 107508 107506 82672 106876 82552 106814 82492 82462 129562 82812 82750 128058
+ 125050 119034 82296 106686 82236 82206 82366 82108 82078 76736 103920 117500
+ 76256 103672 117374 76016 103548 75896 103486 75836 129384 77296 104188 129380
+ 77048 104062 129378 76924 76862 127720 129398 77564 127716 77438 127714 124392
+ 127734 124388 124386 117736 124406 117732 117730 104424 117750 104420 104418 112096
+ 121592 126334 92608 111856 121468 92384 111736 121406 92272 111676 92216 111646
+ 92188 75232 103160 117118 93664 74992 103036 93424 112252 102974 93304 74812
+ 93244 74782 93214 129332 75512 103294 129908 129330 93944 75388 129906 93820
+ 75326 93758 127604 75646 128756 127602 94078 128754 124148 126452 124146 126450
+ 117236 121844 117234 121842 103412 103410 91584 111344 121212 91360 111224 121150
+ 91248 111164 91192 111134 91164 91150 74480 102780 91888 74360 102718 91768
+ 111422 91708 74270 91678 129306 74620 129850 92028 74558 91966 127546 128634
+ 124026 126202 116986 121338 102906 90848 110968 121022 90736 110908 90680 110878
+ 90652 90638 74104 102590 91000 74044 90940 74014 90910 74174 91070 90480
+ 110780 90424 110750 90396 90382 73916 90556 73886 90526 90296 110686 90268
+ 90254 73822 90334 90204 90190 71136 101112 116094 70896 100988 70776 100926
+ 70716 70686 129204 71416 101246 129202 71292 71230 127348 71550 127346 123636
+ 123634 116212 116210 101364 101362 79296 105200 118140 79072 105080 118078 78960
+ 105020 78904 104990 78876 78862 70384 100732 79600 70264 100670 79480 105278
+ 79420 70174 79390 129178 70524 129466 79740 70462 79678 127290 127866 123514
+ 124666 115962 118266 100858 113376 122232 126654 95424 113264 122172 95328 113208
+ 122142 95280 113180 95256 113166 95244 78560 104824 117950 95968 78448 104764
+ 95856 113468 104734 95800 78364 95772 78350 95758 70008 100542 78712 69948
+ 96120 78652 69918 96060 78622 96030 70078 78782 96190 94912 113008 122044
+ 94816 112952 122014 94768 112924 94744 112910 94732 94726 78192 104636 95088
+ 78136 104606 95032 113054 95004 78094 94990 69820 78268 69790 95164 78238
+ 95134 94560 112824 121950 94512 112796 94488 112782 94476 94470 78008 104542
+ 94648 77980 94620 77966 94606 69726 78046 94686 94384 112732 94360 112718
+ 94348 94342 77916 94428 77902 94414 94296 112686 94284 94278 77870 94318
+ 94252 94246 68336 99708 68216 99646 68156 68126 68476 68414 127162 123258
+ 115450 99834 72416 101752 116414 72304 101692 72248 101662 72220 72206 67960
+ 99518 72568 67900 72508 67870 72478 68030 72638 80576 105840 118460 80480
+ 105784 118430 80432 105756 80408 105742 80396 80390 72048 101564 80752 71992
+ 101534 80696 71964 80668 71950 80654 67772 72124 67742 80828 72094 80798
+ 114016 122552 126814 96832 113968 122524 96800 113944 122510 96784 113932 96776
+ 113926 96772 80224 105656 118366 97120 80176 105628 97072 114076 105614 97048
+ 80140 97036 80134 97030 71864 101470 80312 71836 97208 80284 71822 97180
+ 80270 97166 67678 71902 80350 97246 96576 113840 122460 96544 113816 122446
+ 96528 113804 96520 113798 96516 96514 80048 105564 96688 80024 105550 96664
+ 113870 96652 80006 96646 71772 80092 71758 96732 80078 96718 96416 113752
+ 122414 96400 113740 96392 113734 96388 96386 79960 105518 96472 79948 96460
+ 79942 96454 71726 79982 96494 96336 113708 96328 113702 96324 96322 79916
+ 96364 79910 96358 96296 113686 96292 96290 79894 96310 66936 99006 66876
+ 66846 67006 68976 100028 68920 99998 68892 68878 66748 69052 66718 69022
+ 73056 102072 116574 73008 102044 72984 102030 72972 72966 68792 99934 73144
+ 68764 73116 68750 73102 66654 68830 73182 81216 106160 118620 81184 106136
+ 118606 81168 106124 81160 106118 81156 81154 72880 101980 81328 72856 101966
+ 81304 106190 81292 72838 81286 68700 72924 68686 81372 72910 81358 114336
+ 122712 126894 114320 122700 114312 122694 114308 114306 81056 106072 118574 97696
+ 81040 106060 97680 114380 106054 97672 81028 97668 81026 97666 72792 101934
+ 81112 72780 97752 81100 72774 97740 81094 97734 68654 72814 81134 97774
+ 114256 122668 114248 122662 114244 114242 80976 106028 97488 80968 106022 97480
+ 114278 97476 80962 97474 72748 81004 72742 97516 80998 97510 114216 122646
+ 114212 114210 80936 106006 97384 80932 97380 80930 97378 72726 80950 97398
+ 114196 114194 80916 97332 80914 97330 66236 66206 67256 99166 67228 67214
+ 66142 67294 69296 100188 69272 100174 69260 69254 67164 69340 67150 69326
+ 73376 102232 116654 73360 102220 73352 102214 73348 73346 69208 100142 73432
+ 102254 73420 69190 73414 67118 69230 73454 106320 118700 106312 118694 106308
+ 106306 73296 102188 81616 106348 102182 81608 73284 81604 73282 81602 69164
+ 73324 69158 81644 73318 81638 122792 126934 122788 122786 106280 118678 114536
+ 106276 114532 106274 114530 73256 102166 81512 73252 98024 81508 73250 98020
+ 81506 98018 69142 73270 81526 98038 122772 122770 106260 114484 106258 114482
+ 73236 81460 73234 97908 81458 97906 122762 106250 114458 73226 81434 97850
+ 66396 66382 67416 99246 67404 67398 66350 67438 69456 100268 69448 100262
+ 69444 69442 67372 69484 67366 69478 102312 116694 102308 102306 69416 100246
+ 73576 102326 73572 69410 73570 67350 69430 73590 118740 118738 102292 106420
+ 102290 106418 69396 73524 69394 81780 73522 81778 118730 102282 106394 69386
+ 73498 81722 66476 66470 67496 99286 67492 67490 66454 67510 100308 100306
+ 67476 69556 67474 69554 116714
+ ]
+ ] def
+
+ % Row address patterns
+ /raps [
+ [ % Left and right
+ 802 930 946 818 882 890 826 954 922 986 970 906 778
+ 794 786 914 978 982 980 916 948 932 934 942 940 936
+ 808 812 814 806 822 950 918 790 788 820 884 868 870
+ 878 876 872 840 856 860 862 846 844 836 838 834 866
+ ] [ % Centre
+ 718 590 622 558 550 566 534 530 538 570 562 546 610
+ 626 634 762 754 758 630 628 612 614 582 578 706 738
+ 742 740 748 620 556 552 616 744 712 716 708 710 646
+ 654 652 668 664 696 688 656 720 592 600 604 732 734
+ ]
+ ] def
+
+ % Return the 17 bits for a codeword in a given cluster
+ /cwtobits {
+ clusters exch get exch get /v exch def
+ [ 17 {0} repeat v 2 17 string cvrs {48 sub} forall ]
+ dup length 17 sub 17 getinterval
+ } bind def
+
+ % Return the 10 bits for a row address pattern
+ /raptobits {
+ raps exch get exch get /v exch def
+ [ 10 {0} repeat v 2 10 string cvrs {48 sub} forall ]
+ dup length 10 sub 10 getinterval
+ } bind def
+
+ % Populate bitmap for the image
+ /rwid [38 55 82 99] c 1 sub get def
+ c 3 eq cca and {/rwid 72 def} if
+ /pixs rwid r mul array def
+
+ 0 1 r 1 sub {
+ /i exch def
+ /clst i rapl add 1 sub 3 mod def
+ pixs rwid i mul [
+ c 1 eq {
+ i rapl add 1 sub 52 mod 0 raptobits aload pop
+ cws i get clst cwtobits aload pop
+ i rapr add 1 sub 52 mod 0 raptobits aload pop
+ } if
+ c 2 eq {
+ i rapl add 1 sub 52 mod 0 raptobits aload pop
+ cws i 2 mul get clst cwtobits aload pop
+ cws i 2 mul 1 add get clst cwtobits aload pop
+ i rapr add 1 sub 52 mod 0 raptobits aload pop
+ } if
+ c 3 eq {
+ cca not {
+ i rapl add 1 sub 52 mod 0 raptobits aload pop
+ } if
+ cws i 3 mul get clst cwtobits aload pop
+ i rapc add 1 sub 52 mod 1 raptobits aload pop
+ cws i 3 mul 1 add get clst cwtobits aload pop
+ cws i 3 mul 2 add get clst cwtobits aload pop
+ i rapr add 1 sub 52 mod 0 raptobits aload pop
+ } if
+ c 4 eq {
+ i rapl add 1 sub 52 mod 0 raptobits aload pop
+ cws i 4 mul get clst cwtobits aload pop
+ cws i 4 mul 1 add get clst cwtobits aload pop
+ i rapc add 1 sub 52 mod 1 raptobits aload pop
+ cws i 4 mul 2 add get clst cwtobits aload pop
+ cws i 4 mul 3 add get clst cwtobits aload pop
+ i rapr add 1 sub 52 mod 0 raptobits aload pop
+ } if
+ 1
+ ] putinterval
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx rwid
+ /pixy r
+ /height r 72 div rowmult mul
+ /width rwid 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/micropdf417 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER micropdf417--
@@ -5396,112 +14692,854 @@ Ec6/=F_l/_CbL!HA9;K-Ed)5.Le*[e05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-*@<?O
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: Data Matrix
% --EXAM: This is Data Matrix!
-% --EXOP: rows=32 columns=32
+% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp datamatrix 0.0 0 0 0
-%%BeginData: 102 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04\L5@ ;T FpEbTc FL_
-Q"0Ops'_E-,f4DK Ct)Ou "b# @<, j rA7 ^of Ou" b%Df0Z -E aa/7Am oLs
-AWei&@rH1+D/OEN !0T,k Ec6 /CL ]E So 04f $2D e*R"B9 !. (F(8ou Ou"
-b3@<Wi+@;L!rOu" b1@< -F# +D ,% uF( LLj 05t ??F(
-Js$@j#AlCia0N1N .5SB l @m 1P -6N [FE 2)5B 68E<A
-Wf3'L]NYrOpu>KF D5Z2F* j(N A moL sA Wf3' P!F GY<0B5(@Zm RN0oc8tP)XR
-(F_-_!H]ftD5*C& O5*@^M H]f t &Eck rV1O YEd I?J0)*g/N: DfBf4Df0WZ5
-*@^MP#Q@=FD5Z2F *j'+I? I/T @rH1 +D/O D;@ rH1+D/OEX/ <VeBEc6/C+E
-DCEF-8);1N6cCF( K\OD0 '>4@ UX:eD e*FB @Zm RN1G<L!!0T -I@<,jrA7^+
-J!FCqKH]g@*F(^Y "C6Cc DH'2W OOo^@ >Oo [4NP!5$bP' )pIL]E55P"_
-#iD0'?Q5&,lSP,X U.P'E-L P%'4LP ,X6>P !5% &I=%,:D0'? Q5&-6EP'N4"
-C6ATNC6CcD1G<3GEas#uAKYi2B8?P&P"_#pP!FGY<IL$AI?IP_@UX:nASrW"@<,jrA7^p5Ou%,
-eGC(uSDI[TqBl7RD"*.goOu%NL<+TrWDe*R"B9!(7@<[ktHS8lQF!+q#Ebo<)OpR:-0564BOu"
-b+L]ESoHYFU3@<-0qDN[/0P!FGY<%ha*+C\c"@rGmh+DHW4Oo^@@P"_#iOu$TlF!,3?@s=)\05
-2PCL]ikAOu"b++DQ]5Oo^_%I?J.p@s;u:@s<!M!,@ZjOu%NL<%hj$0o5jm1M(H6De*R"B9!.(F
-(8ouP!+.FAo;+%@;L!-4?SW,7SZ<*Ao9=G5!G,c05YcC+C\c"Ch7LI$'I(tBnubP1G<L!!0T-b
-BcpknEbo<)P!+/T5^eep04S[(EZeh"Eas#uAKY]M99M)M@<-F#Ao;*$@q]:kLgH6-Op#JA@UX:
-nAT!;,P,XUVOp$,@@<,jrA7ZltL]NY>P"UU;P&5P!@q]:k+D,M$G%#3.+C\c"@rGmh+DHW4Oo^
-@AP"_$3Ou"b*+DHW7Oo^_%I=!V]+DHW4Oo^_%I?ITYP#Q:>B-:q3@q]:kP'AWo+DHW4Oo^_%05
-;VEL]NY>Ou%NLAM7nAB-;&4B8?P&P"_#p05YcCCh7K,D0'?Q@ZiN#@s;u:D0'?+AT!;*P&-9fO
-u"b*L]ESo05?:COu%H!+Dl14Ch7LI4aW>WI?IP_@q]:k+Dl14+DI!3Ou$T]@<*K&DD@;;HXh8@
-+DQW2k`U0DBcq,G!KmJH1G<JcC5;nR!Ko6eHXg_tEelE48n2OCEel`=@?Lb-+Dl14Ch7L?!KsF
-FAs*:DD0'>4BnueQ!Kp*=3/B8O8s2Ao3Kdg6"FFX&F!,3?D0'>4Bp),F0TrDk$Bf4BF(ZV0L]N
-Y>P"UTbP,XTFL&cgg!Kq[\Bcq,G!g3SI1G<JcC5;nR!Ko6eHXh8@+DN$/BOPq;!KmJHGV<bRBn
-ueQ!Ko5lC*78I!KmJH1OYEdI=#I;@<.0RP$r]IGB4mA+Cf(nEejaZ!Kq[\Bcq,G!KmJH1G<JcC
-5;nR!Ko6eHXh8@+DQW2l]QL&GB4mAL]NY>@q]:kLjtSeP'AWo+DHW4Oo^_%05;VEL]W_?Ou%NL
-<IL$1I?ITYP%?:VGB4m:GB8Q?C6D8R1OYEc05Y9BEbT$)+BosmL^JqFL]N;4L]rS8>p*@-%#>=
-J!Jgc4#D`Cd+BsX3L^o4AL]N;=L]Ld(>DNiH&;U@C!Jh/?!F6gPL_>LVL]N;4L^o4A>p*@-'Sm
-HZ!Jgc4&r6Qo+BsX;L_bdIL]N;GL]Ld(>DO,P(l/3K!JhSK!F6gPL`2'fL]N;4L`D3O>p*@-+G
-_.r!f-o6,_uJ,+BsXILa7cXL]WA^L]Ld(>DO\`.#7q\!f/Od!F6gPLb+?5L]WA6LcC1k>p*@-0
-ShE=!f-o67#1kL+BsXYLbsnhL]WB3L]Uj)>DPP#5_oQ!"Gh#Q!aQpQLe*=mL]iM:L&d<k"C3-S
-Lern(L]iM:L&f#F"C3-SLffI8L]iM:L&g.f"C3-SLgZ$HL]iM:L&hjA"C3-SLhMTXL]iM:L&k,
-,#$i?ULj4`#L^&Y>L&mZt#$i?UL&cm]!/-.4L^&S7n;%?U+BsR#OG3asL^&Y>L&u1I$=+cYL^8
-eLL]N;4L^/_:>p*@-#`'UZ!Jgf5$]"gh+BsX1L`2'ML]N;AL]Ld(>DN]D,_uJW!f.JF!F6gPL_
-,@fL]N;5L_tpK>p*@-&;W#r!Jgf5*/FW$+C1-d06M;RGB4mIDg-8c1G<l\DesJ;@rH1+D/OEX1
-G<Hu!0T-b05VhKATVs,@ric,P"Uro061uTF!,=U!0U!<1G<6VCi^_9L]NZ3Ou"b3AS5[!D287V
-99M(aEb/m,+Dlo:P"Uro062,DG9CaY"HlE@1G<ci@Vd0(L]rr7Ou"b.Ec6/C+EDCEF,0m<AS5\
->Cm(c\1G<TTDesJ;@rH1)L]VU.B6KGSP,XU#062)OGB4mDEc6/C+ED%+BTc8V1G<cYDesJ;D.@
-L#F!,L7B6KG9Ou"b/@s;u:D/sQ=F!,=0DesKXCkr@[;K?hgGESqg1G<Z^@<iu;EckrV1LkWMP%
-&<=GB8pDHS9;Q@<iu-@;L!rOu%NL<-<5"GB8Q?P&5>^Dg-7FEc6/CP&6?bHS9;Q@<iu-@;L!rO
-u%NL<-;\hCibC4P&5>ODesJ;@rH1)P&6?bHS9;Q@<iu-@;L!rOu%NL<,ZP\H$b]>I?IP_Bcq,G
-!KmJH1OYEt@s<!W@W#\"F-:-^04\L5Ch7K,@s<!W@ZiN#@s;u:>9IF"F*i=u8T&$^F!,"%FDPN
-+P,We_!.fQ]K3aWrA79RrAT!;)Oo^@>DI[m3L]N[<HS9)r5*@^9L]NY>L&dL%Ck_rgP%odROo^
-:;JW^%s3/.G4P#-L[!</.\I?IQ>GB8p2Bp(ZCG^Y`GI?IP_@s;C'+EDO4Cm#*f1G<<L@WNZ4F(
-/sK$'I*#!/LYrF(/sA!KsF/056S5Ou$TlF-:!e"r<A=HS8lQ@WQ70AKYK,F-:!QF(/sK;N`haH
-YJ9@P$r\j@s;C'BmO?F!1]3.I=!VWG@GW-H=_g2S!#RUP#Zpn<A.j+@N]0)@WQ70AWd@_1Pc$e
-!Fp=_F(or3L]N[<HS9,s5*@^3G@D\0+CfV:+DN$>F(/sKCh]%5P"Us_I?I-2G@GV9Bcpo0@Zkt
-I@q'L%BcpV&EcY`7+EDO4Cm%\CL]DjdK3aXbI?I,SEcYZ*DeC1sL]N51s*KngL]W`UOuS0s!0T
-s$L&ilh_0qJGI?K4gOu"b3F)5c-L&h:;$'I*#!Jgc2!<7D/3-'(KCi<sL5*AR%5&t^\DeFk.L]
-NZoP'DD<82#")E,ol-H\_`d)2J9UD3@)=!0V2^"FG01Ci<sL5*AR%5&t^\DeG4sP"Ur=L&h7:C
-3"B(Ci<sL5*AQeH]iN7Fbg$GP#Zpn%[&V$@rGpjAof)!L]MO;@s9&9F(/sK;L=3"I?K4gOu%mp
-L]MO;@s9&9F(/sK;L:'2P!5$b@rGpjAof)/+Cf>$AnH*,BnueQWKKo;G\Ms7P,X9;L]MiUC6Cc
-D1Lk?7AnH*,C*7#)AS,Oq+DQ]5P,XU;@rGpjAof)0P"Th:@;Kjp+DI!3EcZ2?De,$IP'DD<87Q
-RLAnH+?!+TqYAnH+?!0TuqF(&m'B-:oO96,)mEc5KOG^Y`G04Sp3AnH*,@rGpjAoib.@rGpjAo
-j,EL]N[<P"_#pL]E53@s;C'P%'4JP,Wd]Bp(ZC1G<6^@N]0)@WNZ+P"Uro04eX&+D#%lF!,1[9
-9M)e!/LYcG@H_EL]N[<HS9K(5%AeGP!5%%ARf2*!0U!<_3-Tc@q(U1L]N[<M#W82HS9,s5*@]T
-E$/_%@Zk28P,X6<P,XU#ARf0lE$06F@rGpjAof)0P"Th:E,ol-P'C_t!0U0*ARf0lE$/_%@N]W
-G!KmJH94_UB+E3K:P/3<+I?IQXP":"a8:?XlDI[m3L'AEV4aShn@q'L%>9IKe@WR>2L]W`5H[V
-&KARf1jL]E5:P"^4NP"ArB1OYEc04T3I+BosuGB8+ZP"B\8@s<9U!.C#_?'7""!/LYrF(9EM!K
-sF/056S5Ou$TlF!,@1GB4m@Oo]-(@WNZ++EDO4Cm&Or95,MhF(/sK;Na\9G^Y`G05YW<F_kW9L
-]iP6P)#&'0JG170JG17L^90?Or9EBL]`J5P)"hpL^90?Ot`%YP%'4QP!5&.P!5%SL^/b9L]DdX
-!KpQJ5*AQp0TrDu5(/SbP')QgM#EKlH]gUL!KpQ@!0Ur@P!3`'Dg-8c!KoX&"Dr0tGB8QCOo^@
-EP%p/ZOo]uo<0B4s!0Ur@D.@L#F-6Qe5)9>Y@rH1)L]ikAL^9/YP,XTFP!4;W<0BF^@rH1)P&-
-9^D/E^'P!4[*M#WWnP'DD<8UZa3Ou"b%D/LJ#H\_`d)2J?WWKKH$!g9OG5(/S(H\_`d)2J<VWK
-KH$!g9OG5(/S(H\_`d)2J?WWKKH$!KsFF5(/S(H\_`d)2J<VWKKH$!KsFF5(/S(H\_`d)3R1>!
-KsFF5(/S(H\_`d)2J?WWI9p>H\_`d)2J<VWI9p>H\_`d)1@YX?'6usA8Pg2+Bs18D/sQ=F,0j[
-WJCP&Oq)hUEc6/CL]N[<L]Mpe%XW&5Dg-8Y!KsF<!e$4AH\_Z=@rH1)L]Wa=I?G(eL]D:%DesK
-N!KsF1Oq)hp!Gu=bCibC5P,Wkm%XX!5D.@L#F,0j[WI9p>H\_c@@rH1)L]N[<I?G(GOu"b%D.>
-=D>C.K0Ec6/CL]`g>L]Djd%XW&5Dg-8Y!g9O=!.C"?HYmeAGB8Q@P,X6;I?G(eL]D:%DesKN"H
-oa4Oq)hp!,Z4aCibC7P,Wkm%XX!3D.@L#F,0m\WI9p>H\_Z=@rH1)L]N[<I?G(eL]M@&DesKN!
-KsF1Oq(c\1G<9U@l#63HQ[0GDg-8Y"-TX>!.C"?HYmeAGB8QAP,X6;I?G(eD/sQ=F,0j[WJCP&
-Oq)hp!,Z4aCibC6P,Wkm%XX!3D.@L#F,0j[WI9p>H\_]>@rH1)L]N[<I?G(eL]VF'DesKN!KsF
-1Oq)hp")VOdCibC5P,Wkm%UG5R04\p01a$"L+Dl.;GB8Q@P,X6;I?G(eD/sQ=F,0j[WGQ-`Cib
-C5P,Wkm%XX!3D.@L#F,0p]WI9p>H\_Z=@rH1)L]Wa=I?G(eL]D:%DesKN!KsF1Oq)hp!Gu=bCi
-bC7P,Wkm%XX!4D.@L#F,0m\WI9p>H\_]>@rH1)L]N[<I?G(GOu"b.D..N/>9Id'Dg-7FD.@L#F
--:?dM#VmdK3aWr@s<!W@Yb&JWJLS1!./4"F-8_M97;soL]iM6H\_`d)2J9U4d&!GEc6/CP!+s2
-HXpu'0d(=OA9D^"I?IQc!g4FW!0TL.5&G=YGB8QAP,XU-Op#W3DesKN"HmMU!0V2^"FFZr@ko0
-DDe+!,AUT_@L]W_WL]ET$P!3`'Dg-8Y!g9OG4d#qb@rH1)L^9/YL]il(Op$,BD.>@ED/Ws-Ch8
-$X</:U=)2J?W4d&!GEc6/CL]ikAP!+s2D.@L#F,1*bC5;kQ4d#qpA8Pg5+Dl%-F_kW;P#Qda!g
-4FW!0Ts;5&G=YGB8pZOp$,f!g4Fa5&FeJCibbUOo]E:@<@YrP"UW2P!+/&D/LJ5De+!,AUT_@I
-?IQc!g3SI5)99'WKKH$!g4F<@rH1)P%Kk@L]ET1Op$qeH]gXBP#QjmAV^GO!KoX&!KmJH5'r(e
-Or8+HDesKXAs,?6!0Ts;"FGq+Or9EHD.@L#F-:@&!Gu[^FHShN98NV24aU^VDBNe7A9D^"I?IQ
-XP#R5=P,XU.L]W_?P!4['Or9&UP"Lm$D/sQ=F-:-u"Hm_NP!FGY<.0p@L]NY>P!4[(Oo^_0L]W
-_WD.@L#F-:-u5&G=YGB8pZP&c_)H]iN7Fco"<P#QjmASl9mF<GF@Dg-7FD.@L#F-:?q!KsFF98
-NV24aV$_@<<W/Ec6/C+DkV,CibC5P,XU\L]Wa=>DN<9!*tb5D/E^'+Dl.;GB4mD@rH1)P&,pUP
-,VZA!/LY]P'MJ=<%i3)G]P!JDg-7F@rH1)P&-9fOu"b$GAqJAL]ESoL]E53Ec6/CL]N[<HS9)r
-5*@^9+EDL@GB8QAOo^_\L]ET$HZ3\DF!,0>@rH1)P&+>F@rH1)L]W`;H\_]Y!.C#_?'9J]P#Q-
-<EcQ)BF,0m\!Kq2<Ec6/CL]NY>P!+/2Bm=\ABcpo(CibbU>9IEoCiarZ!I^,`?'9J]P#Q-<EcQ
-)BF,0m\!Kq2R!0V25+EDL@GB8QAOo^_\EcQ)BF,0j[!Kq;_"FGq)L]M"(CibC5P,Wd]C6CcD1M
-S%Q@rH1)L]W_?P%odQP!+/2Bm=\ABcpo(CibbUC6AUR!Kq\UP#Q0=Eas$(F,0m\!Kq2<@rH1)L
-]NY>P!+/2Bm=\ABcpo(CibbUC6AU3L]W`SP'DD<<,*Or@rH1)L]W_?P%odQP&4qVEas$(F,0m\
-!Kq2<@rH1)L]NY>P&6?bHZ3\DF!,0>@rH1)P&+lr!Gu[^F<G(;E,Tf\99ONQ@s;m1F!+t:E,Tf
-R!KmJH1OYEcI?I-LP#Qjm83B!fEb0,A061WAD..O,Bm;:MBm=\AE+sQ<05tWMGT^L7Ci_7KBm=
-nGEc6/C05+p2B4uB0Ec6/CL]W`ULe*[e06_,@FD)e,DesKN!g7AU8<PkaDfBe@DfBf4Df0V=5!
-C*"Df0Z-Eaa0TE%`kbASu?nFE2)?P#RT)I?G)'1G<9IFCB#pFE2)?OuSV806M%_@rEuAATDg:@
-Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB
-~>
-% uk.co.terryburton.bwipp/datamatrix 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp datamatrix 0.0 2015050900 189975 216544
+%%BeginData: 844 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/datamatrix {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /columns 0 def
+ /rows 0 def
+ /parse false def
+ /parsefnc false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /columns columns cvi def
+ /rows rows cvi def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Convert input into bytes accounting for FNC characters
+ /fnc1 -1 def /prog -2 def /m05 -3 def /m06 -4 def
+ /fncvals <<
+ (FNC1) fnc1
+ (PROG) prog
+ (MAC5) m05
+ (MAC6) m06
+ >> def
+ /msg barlen array def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+
+ % Basic metrics for the each symbol
+ % rows cols regh regv rscw rsbl
+ /metrics [
+ % Standard square symbols
+ [ 10 10 1 1 5 1 ]
+ [ 12 12 1 1 7 1 ]
+ [ 14 14 1 1 10 1 ]
+ [ 16 16 1 1 12 1 ]
+ [ 18 18 1 1 14 1 ]
+ [ 20 20 1 1 18 1 ]
+ [ 22 22 1 1 20 1 ]
+ [ 24 24 1 1 24 1 ]
+ [ 26 26 1 1 28 1 ]
+ [ 32 32 2 2 36 1 ]
+ [ 36 36 2 2 42 1 ]
+ [ 40 40 2 2 48 1 ]
+ [ 44 44 2 2 56 1 ]
+ [ 48 48 2 2 68 1 ]
+ [ 52 52 2 2 84 2 ]
+ [ 64 64 4 4 112 2 ]
+ [ 72 72 4 4 144 4 ]
+ [ 80 80 4 4 192 4 ]
+ [ 88 88 4 4 224 4 ]
+ [ 96 96 4 4 272 4 ]
+ [ 104 104 4 4 336 6 ]
+ [ 120 120 6 6 408 6 ]
+ [ 132 132 6 6 496 8 ]
+ [ 144 144 6 6 620 10 ]
+ % Optional rectangular symbols
+ [ 8 18 1 1 7 1 ]
+ [ 8 32 1 2 11 1 ]
+ [ 12 26 1 1 14 1 ]
+ [ 12 36 1 2 18 1 ]
+ [ 16 36 1 2 24 1 ]
+ [ 16 48 1 2 28 1 ]
+ ] def
+
+ % Create array of codewords remaining to make a full symbol
+ /urows rows def
+ /ucols columns def
+ /fullcws [] def
+ metrics {
+ /m exch def
+ /rows m 0 get def % Rows in symbol
+ /cols m 1 get def % Columns in symbol
+ /regh m 2 get def % Horizontal regions
+ /regv m 3 get def % Vertical regions
+ /rscw m 4 get def % Error correction codewords
+ /rsbl m 5 get def % Error correction blocks
+ /mrows rows 2 regh mul sub def % Rows in the mapping matrix
+ /mcols cols 2 regv mul sub def % Columns in the mapping matrix
+ /ncws mrows mcols mul 8 idiv rscw sub def % Data codewords
+ /okay true def
+ urows 0 ne urows rows ne and {/okay false def} if
+ ucols 0 ne ucols cols ne and {/okay false def} if
+ urows 0 eq ucols 0 eq or rows cols ne and {/okay false def} if
+ okay {/fullcws [ fullcws aload pop ncws ] def} if
+ } forall
+ /numremcws [ 1558 {10000} repeat ] def
+ fullcws {numremcws exch 1 sub 1 put} forall
+ 1556 -1 0 {
+ /i exch def
+ numremcws i get 1 ne {
+ numremcws i numremcws i 1 add get 1 add put
+ } if
+ } for
+
+ % Special characters
+ /lC -5 def /lB -6 def /lX -7 def /lT -8 def /lE -9 def /unl -10 def
+ /sapp -11 def /usft -12 def /sft1 -13 def /sft2 -14 def /sft3 -15 def /eci -16 def /pad -17 def
+ /unlcw 254 def
+
+ /Avals <<
+ 0 1 128 {dup 1 add} for
+ pad 129
+ 0 1 99 { % Double digits
+ dup 10 2 string cvrs (00) 2 string copy dup 2 3 index length sub 4 -1 roll putinterval
+ exch 130 add
+ } for
+ 229 [ lC lB fnc1 sapp prog usft m05 m06 lX lT lE eci ] {exch 1 add dup} forall pop
+ >> def
+ /Avals <<
+ Avals {[exch]} forall
+ >> def
+
+ /CNvals <<
+ sft1 0
+ sft2 1
+ sft3 2
+ 32 3
+ 48 1 57 {dup 44 sub} for % 0-9
+ 65 1 90 {dup 51 sub} for % A-Z
+ >> def
+ /C1vals << 0 1 31 {dup} for >> def
+ /C2vals <<
+ 33 1 47 {dup 33 sub} for
+ 58 1 64 {dup 43 sub} for
+ 91 1 95 {dup 69 sub} for
+ fnc1 27
+ usft 30
+ >> def
+ /C3vals << 96 1 127 {dup 96 sub} for >> def
+ /Cvals <<
+ CNvals {[exch]} forall
+ C1vals {[exch CNvals sft1 get exch]} forall
+ C2vals {[exch CNvals sft2 get exch]} forall
+ C3vals {[exch CNvals sft3 get exch]} forall
+ >> def
+
+ /TNvals <<
+ sft1 0
+ sft2 1
+ sft3 2
+ 32 3
+ 48 1 57 {dup 44 sub} for % 0-9
+ 97 1 122 {dup 83 sub} for % a-z
+ >> def
+ /T1vals << 0 1 31 {dup} for >> def
+ /T2vals <<
+ 33 1 47 {dup 33 sub} for
+ 58 1 64 {dup 43 sub} for
+ 91 1 95 {dup 69 sub} for
+ fnc1 27
+ usft 30
+ >> def
+ /T3vals <<
+ 96 0
+ 65 1 90 {dup 64 sub} for
+ 123 1 127 {dup 96 sub} for
+ >> def
+ /Tvals <<
+ TNvals {[exch]} forall
+ T1vals {[exch TNvals sft1 get exch]} forall
+ T2vals {[exch TNvals sft2 get exch]} forall
+ T3vals {[exch TNvals sft3 get exch]} forall
+ >> def
+
+ % Extended ASCII mappings
+ 128 1 255 {
+ /i exch def
+ Avals i [ Avals usft get aload pop Avals i 128 sub get aload pop ] put
+ Cvals i [ Cvals usft get aload pop Cvals i 128 sub get aload pop ] put
+ Tvals i [ Tvals usft get aload pop Tvals i 128 sub get aload pop ] put
+ } for
+
+ /Xvals <<
+ 13 0
+ 42 1
+ 62 2
+ 32 3
+ 48 1 57 {dup 44 sub} for
+ 65 1 90 {dup 51 sub} for
+ >> def
+ /Xvals <<
+ Xvals {[exch]} forall
+ >> def
+
+ /Evals <<
+ 64 1 94 {dup 64 sub} for
+ unl 31
+ 32 1 63 {dup} for
+ >> def
+ /Evals <<
+ Evals {[exch]} forall
+ >> def
+
+ /Bvals <<
+ 0 1 255 {dup} for
+ >> def
+ /Bvals <<
+ Bvals {[exch]} forall
+ >> def
+
+ /encvals [ Avals Cvals Tvals Xvals Evals Bvals ] def
+
+ /numD [ msglen {0} repeat 0 ] def
+ /nextXterm [ msglen {0} repeat 9999 ] def
+ /nextNonX [ msglen {0} repeat 9999 ] def
+ msglen 1 sub -1 0 {
+ /i exch def
+ /barchar msg i get def
+ barchar 48 ge barchar 57 le and {
+ numD i numD i 1 add get 1 add put
+ } if
+ barchar 13 eq barchar 42 eq or barchar 62 eq or {
+ nextXterm i 0 put
+ } {
+ nextXterm i nextXterm i 1 add get 1 add put
+ } ifelse
+ Xvals barchar known not {
+ nextNonX i 0 put
+ } {
+ nextNonX i nextNonX i 1 add get 1 add put
+ } ifelse
+ } for
+ /nextXterm [nextXterm {dup 10000 gt {pop 10000} if} forall] def
+ /nextNonX [nextNonX {dup 10000 gt {pop 10000} if} forall] def
+
+ /isD {char 48 ge char 57 le and} bind def
+ /isC {CNvals char known} bind def
+ /isT {TNvals char known} bind def
+ /isX {Xvals char known} bind def
+ /isE {Evals char known} bind def
+ /isEA {char 127 gt} bind def
+ /isFN {char 0 lt} bind def
+ /XtermFirst {dup nextXterm exch get exch nextNonX exch get lt} bind def
+
+ /A 0 def /C 1 def /T 2 def /X 3 def /E 4 def /B 5 def
+
+ /lookup {
+ /ac 1 def /cc 2 def /tc 2 def /xc 2 def /ec 2 def /bc 2.25 def
+ mode A eq {/ac 0 def /cc 1 def /tc 1 def /xc 1 def /ec 1 def /bc 1.25 def} if
+ mode C eq {/cc 0 def} if
+ mode T eq {/tc 0 def} if
+ mode X eq {/xc 0 def} if
+ mode E eq {/ec 0 def} if
+ mode B eq {/bc 0 def} if
+ 1 { % common exit
+ /k 0 def { % loop
+ i k add msglen eq {
+ [/ac /cc /tc /xc /ec /bc] {dup load ceiling def} forall
+ true [ cc tc xc ec bc] {ac exch le and} forall {A exit} if
+ true [ac cc tc xc ec ] {bc exch lt and} forall {B exit} if
+ true [ac cc tc xc bc] {ec exch lt and} forall {E exit} if
+ true [ac cc xc ec bc] {tc exch lt and} forall {T exit} if
+ true [ac cc tc ec bc] {xc exch lt and} forall {X exit} if
+ C exit
+ } if
+ /char msg i k add get def
+ /ac ac isD {1 2 div add} {isEA {ceiling 2 add} {1 add } ifelse} ifelse def
+ /cc cc isC {2 3 div add} {isEA { 8 3 div add } { 4 3 div add} ifelse} ifelse def
+ /tc tc isT {2 3 div add} {isEA { 8 3 div add } { 4 3 div add} ifelse} ifelse def
+ /xc xc isX {2 3 div add} {isEA {13 3 div add } {10 3 div add} ifelse} ifelse def
+ /ec ec isE {3 4 div add} {isEA {17 4 div add } {13 4 div add} ifelse} ifelse def
+ /bc bc isFN {4 add} {1 add} ifelse def
+ k 4 ge {
+ true [ cc tc xc ec bc] {ac 1 add exch le and} forall {A exit} if
+ bc 1 add ac le {B exit} if
+ true [ cc tc xc ec ] {bc 1 add exch lt and} forall {B exit} if
+ true [ac cc tc xc bc] {ec 1 add exch lt and} forall {E exit} if
+ true [ac cc xc ec bc] {tc 1 add exch lt and} forall {T exit} if
+ true [ac cc tc ec bc] {xc 1 add exch lt and} forall {X exit} if
+ true [ac tc ec bc] {cc 1 add exch lt and} forall {
+ cc xc lt {C exit} if
+ cc xc eq {i k add 1 add XtermFirst {X exit} {C exit} ifelse} if
+ } if
+ } if
+ /k k 1 add def
+ } loop
+ } repeat
+ } bind def
+
+ /addtocws {
+ dup cws exch j exch putinterval
+ /j exch length j add def
+ } bind def
+
+ /encA {
+ 1 { % Common exit
+ numD i get 2 ge {
+ 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
+ /i i 2 add def
+ exit
+ } if
+ /newmode lookup def
+ newmode mode ne {
+ Avals [-1 lC lT lX lE lB] newmode get get addtocws
+ /mode newmode def
+ exit
+ } if
+ Avals msg i get get addtocws
+ /i i 1 add def
+ exit
+ } repeat
+ } bind def
+
+ /CTXvalstocws {
+ /in exch def
+ mark
+ 0 3 in length 1 sub {
+ in exch 3 getinterval 0 exch {add 40 mul} forall 40 idiv 1 add
+ dup 256 idiv exch 256 mod
+ } for
+ counttomark array astore exch pop
+ } bind def
+
+ /encCTX {
+ /p 0 def
+ /ctxvals 2500 array def
+
+ % Lookup the values for each character
+ {
+ i msglen eq {exit} if
+ encvals mode get msg i get known not {exit} if
+ p 3 mod 0 eq {
+ lookup mode ne {
+ ctxvals 0 p getinterval CTXvalstocws addtocws
+ [unlcw] addtocws
+ /mode A def
+ exit
+ } if
+ msglen i sub 3 le { % Check end of data conditions
+ /remcws numremcws j p 3 idiv 2 mul add get def
+ /remvals [
+ msg i msglen i sub getinterval {
+ dup encvals mode get exch known {
+ encvals mode get exch get aload pop
+ } { % Unencodable X12 characters
+ pop -1 -1 -1 -1
+ } ifelse
+ } forall
+ ] def
+ remcws 2 eq remvals length 3 eq and {
+ % Encode and omit unlatch
+ [
+ ctxvals 0 p getinterval aload pop
+ remvals aload pop
+ ] CTXvalstocws addtocws
+ /mode A def
+ /i msglen def
+ exit
+ } if
+ remcws 2 eq remvals length 2 eq and mode X ne and {
+ % Encode with sft1 as third value, omit unlatch
+ [
+ ctxvals 0 p getinterval aload pop
+ remvals aload pop
+ encvals mode get sft1 get aload pop
+ ] CTXvalstocws addtocws
+ /mode A def
+ /i msglen def
+ exit
+ } if
+ remcws 2 eq remvals length 1 eq and {
+ % Unlatch to ASCII
+ ctxvals 0 p getinterval CTXvalstocws addtocws
+ [unlcw] addtocws
+ Avals msg i get get addtocws
+ /mode A def
+ /i msglen def
+ exit
+ } if
+ remcws 1 eq remvals length 1 eq and {
+ % Implied unlatch to ASCII
+ ctxvals 0 p getinterval CTXvalstocws addtocws
+ Avals msg i get get addtocws
+ /mode A def
+ /i msglen def
+ exit
+ } if
+ } if
+ } if
+ encvals mode get msg i get get
+ dup ctxvals exch p exch putinterval
+ /p exch length p add def
+ /i i 1 add def
+ } loop
+
+ % Backtrack to a boundary and return to ASCII
+ mode A ne {
+ {
+ p 3 mod 0 eq {exit} if
+ /i i 1 sub def
+ /p p encvals mode get msg i get get length sub def
+ } loop
+ [
+ ctxvals 0 p getinterval aload pop
+ ] CTXvalstocws addtocws
+ [unlcw] addtocws
+ /mode A def
+ % Encode something to avoid latching immediately back
+ i msglen ne {
+ numD i get 2 ge {
+ 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
+ /i i 2 add def
+ } {
+ Avals msg i get get addtocws
+ /i i 1 add def
+ } ifelse
+ } if
+ } if
+
+ } bind def
+
+ /Evalstocws {
+ /in exch def
+ /inlen in length def
+ /outlen in length 4 div 3 mul ceiling cvi def
+ /in [ in aload pop 0 0 0 ] def
+ mark
+ 0 4 inlen 1 sub {
+ in exch 4 getinterval 0 exch {or 6 bitshift} forall -6 bitshift
+ dup -16 bitshift 255 and exch
+ dup -8 bitshift 255 and exch
+ 255 and
+ } for
+ counttomark array astore exch pop
+ 0 outlen getinterval
+ } bind def
+
+ /encE {
+ /p 0 def
+ /edifactvals 2100 array def
+
+ % Lookup the values for each character
+ {
+ i msglen eq {exit} if
+ Evals msg i get known not {exit} if
+ p 4 mod 0 eq {
+ lookup mode ne {exit} if
+ msglen i sub 2 le { % Check end of data conditions
+ /remcws numremcws j p 4 idiv 3 mul add get def
+ /remvals [
+ msg i msglen i sub getinterval {
+ dup Evals exch known {
+ Evals exch get aload pop
+ } { % Unencodable EDIFACT characters
+ pop -1 -1 -1 -1 -1
+ } ifelse
+ } forall
+ ] def
+ remcws 2 eq remvals length 2 eq and {
+ % Implied unlatch to ASCII
+ edifactvals 0 p getinterval Evalstocws addtocws
+ Avals msg i get get addtocws
+ Avals msg i 1 add get get addtocws
+ /mode A def
+ /i msglen def
+ exit
+ } if
+ remcws 2 eq remcws 1 eq or remvals length 1 eq and {
+ % Implied unlatch to ASCII
+ edifactvals 0 p getinterval Evalstocws addtocws
+ Avals msg i get get addtocws
+ /mode A def
+ /i msglen def
+ exit
+ } if
+ } if
+ } if
+ Evals msg i get get
+ dup edifactvals exch p exch putinterval
+ /p exch length p add def
+ /i i 1 add def
+ } loop
+
+ % Unlatch and pad with zeros until boundary
+ mode A ne {
+ /remcws numremcws j p 4 idiv 3 mul add 1 sub get 1 sub def
+ remcws 0 ne { % Unlatch if we haven't filled symbol
+ Evals unl get
+ dup edifactvals exch p exch putinterval
+ /p exch length p add def
+ } if
+ edifactvals 0 p getinterval Evalstocws addtocws
+ /mode A def
+ % Encode something to avoid latching immediately back
+ i msglen ne {
+ numD i get 2 ge {
+ 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
+ /i i 2 add def
+ } {
+ Avals msg i get get addtocws
+ /i i 1 add def
+ } ifelse
+ } if
+ } if
+
+ } bind def
+
+ /encB {
+ /p 0 def /bvals 1558 array def {
+ i msglen eq {exit} if
+ lookup mode ne {exit} if
+ bvals p msg i get put
+ /p p 1 add def
+ /i i 1 add def
+ } loop
+ /remcws numremcws j p add get 1 sub def
+ /bvals [
+ remcws 0 eq i msglen eq and { % Terminates symbol
+ 0
+ } {
+ p 250 lt {p} {p 250 idiv 249 add p 250 mod} ifelse
+ } ifelse
+ bvals 0 p getinterval aload pop
+ ] def
+ 0 1 bvals length 1 sub { % Pseudo-randomise based on codeword position
+ /p exch def
+ j p add 1 add 149 mul 255 mod 1 add bvals p get add
+ dup 256 ge {256 sub} if
+ bvals exch p exch put
+ } for
+ bvals addtocws
+ /mode A def
+ } bind def
+
+ % Derive the codewords
+ /cws 1558 array def
+ /mode A def /i 0 def /j 0 def {
+ i msglen ge {exit} if
+ [ /encA /encCTX /encCTX /encCTX /encE /encB ] mode get load exec
+ } loop
+ /cws cws 0 j getinterval def
+
+ % Extend codewords to fill symbol with pseudo-randomised pad characters
+ /datlen cws length def
+ /remcws numremcws j 1 sub get 1 sub def
+ remcws 0 gt {
+ /cws [ cws aload pop remcws {129} repeat ] def
+ datlen 1 add 1 datlen remcws add 1 sub {
+ /i exch def
+ i 1 add 149 mul 253 mod 1 add 129 add
+ dup 254 gt {254 sub} if
+ cws exch i exch put
+ } for
+ } if
+
+ % Lookup symbol metrics based on number of codewords and user specification
+ /i 0 def { % loop
+ /m metrics i get def
+ /rows m 0 get def % Rows in symbol
+ /cols m 1 get def % Columns in symbol
+ /regh m 2 get def % Horizontal regions
+ /regv m 3 get def % Vertical regions
+ /rscw m 4 get def % Error correction codewords
+ /rsbl m 5 get def % Error correction blocks
+ /mrows rows 2 regh mul sub def % Rows in the mapping matrix
+ /mcols cols 2 regv mul sub def % Columns in the mapping matrix
+ /rrows mrows regh idiv def % Rows per region
+ /rcols mcols regv idiv def % Columns per region
+ /ncws mrows mcols mul 8 idiv rscw sub def % Data codewords
+ /okay true def
+ cws length ncws ne {/okay false def} if
+ urows 0 ne urows rows ne and {/okay false def} if
+ ucols 0 ne ucols cols ne and {/okay false def} if
+ okay {exit} if
+ /i i 1 add def
+ } loop
+
+ % De-interleave the codewords into blocks
+ /cwbs rsbl array def % Array of data codeword blocks
+ /ecbs rsbl array def % Array of error correction blocks
+ 0 1 rsbl 1 sub {
+ /i exch def
+ cws length 1558 ne {
+ /cwbsize cws length rsbl idiv def
+ } {
+ i 7 le {/cwbsize 156 def} {/cwbsize 155 def} ifelse
+ } ifelse
+ /cwb cwbsize array def
+ 0 1 cwbsize 1 sub {
+ /j exch def
+ cwb j cws j rsbl mul i add get put
+ } for
+ cwbs i cwb put
+ ecbs i [ rscw rsbl idiv {0} repeat ] put
+ } for
+
+ % Calculate the log and anti-log tables
+ /rsalog [ 1 255 { dup 2 mul dup 256 ge {301 xor} if } repeat ] def
+ /rslog 256 array def
+ 1 1 255 {dup rsalog exch get exch rslog 3 1 roll put} for
+
+ % Function to calculate the product in the field
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add 255 mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } bind def
+
+ % Generate the coefficients
+ /coeffs [ 1 rscw rsbl idiv {0} repeat ] def
+ 1 1 rscw rsbl idiv {
+ /i exch def
+ coeffs i coeffs i 1 sub get put
+ i 1 sub -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+ /coeffs coeffs 0 coeffs length 1 sub getinterval def
+
+ % Calculate the error correction codewords for each block
+ 0 1 cwbs length 1 sub {
+ /i exch def
+ /cwb cwbs i get def
+ /ecb ecbs i get def
+ 0 1 cwb length 1 sub {
+ /t exch cwb exch get ecb 0 get xor def
+ ecb length 1 sub -1 0 {
+ /j exch def
+ /p ecb length j sub 1 sub def
+ ecb p t coeffs j get rsprod put
+ j 0 gt { ecb p ecb p 1 add get ecb p get xor put } if
+ } for
+ } for
+ } for
+
+ % Strange fixup for 144x144 symbols
+ ncws 1558 eq {
+ /ecbs [ ecbs 8 2 getinterval {} forall ecbs 0 8 getinterval {} forall ] def
+ } if
+
+ % Extend codewords with the interleaved error correction codes
+ /cws [ cws {} forall rscw {0} repeat ] def
+ 0 1 rscw 1 sub {
+ /i exch def
+ cws ncws i add ecbs i rsbl mod get i rsbl idiv get put
+ } for
+
+ % Place the codewords into the matrix
+ /module {
+ % cw row col shape
+ 4 -1 roll
+ (00000000) 8 string copy dup 3 -1 roll 2 8 string cvrs
+ dup length 8 exch sub exch putinterval
+ 7 -1 0 {1 index exch get 48 sub exch} for pop
+ 11 -3 roll
+ % 1 2 4 8 16 32 64 128 row col shape
+ { % Place each bit of the codeword in the shape, MSB first
+ exec
+ 1 index 0 lt {
+ exch mrows add exch
+ 4 mrows 4 add 8 mod sub add
+ } if
+ dup 0 lt {
+ mcols add exch
+ 4 mcols 4 add 8 mod sub add exch
+ } if
+ exch mcols mul add
+ mmat exch 5 -1 roll put
+ } forall
+ } bind def
+
+ % Placement patterns
+ /dmn [
+ { 2 copy 2 sub exch 2 sub exch } bind { 2 copy 1 sub exch 2 sub exch } bind
+ { 2 copy 2 sub exch 1 sub exch } bind { 2 copy 1 sub exch 1 sub exch } bind
+ { 2 copy exch 1 sub exch } bind { 2 copy 2 sub } bind
+ { 2 copy 1 sub } bind { 2 copy } bind
+ ] def
+
+ /dmc1 [
+ { mrows 1 sub 0 } bind { mrows 1 sub 1 } bind
+ { mrows 1 sub 2 } bind { 0 mcols 2 sub } bind
+ { 0 mcols 1 sub } bind { 1 mcols 1 sub } bind
+ { 2 mcols 1 sub } bind { 3 mcols 1 sub } bind
+ ] def
+
+ /dmc2 [
+ { mrows 3 sub 0 } bind { mrows 2 sub 0 } bind
+ { mrows 1 sub 0 } bind { 0 mcols 4 sub } bind
+ { 0 mcols 3 sub } bind { 0 mcols 2 sub } bind
+ { 0 mcols 1 sub } bind { 1 mcols 1 sub } bind
+ ] def
+
+ /dmc3 [
+ { mrows 3 sub 0 } bind { mrows 2 sub 0 } bind
+ { mrows 1 sub 0 } bind { 0 mcols 2 sub } bind
+ { 0 mcols 1 sub } bind { 1 mcols 1 sub } bind
+ { 2 mcols 1 sub } bind { 3 mcols 1 sub } bind
+ ] def
+
+ /dmc4 [
+ { mrows 1 sub 0 } bind { mrows 1 sub mcols 1 sub } bind
+ { 0 mcols 3 sub } bind { 0 mcols 2 sub } bind
+ { 0 mcols 1 sub } bind { 1 mcols 3 sub } bind
+ { 1 mcols 2 sub } bind { 1 mcols 1 sub } bind
+ ] def
+
+ /mmat [ mrows mcols mul {-1} repeat ] def
+ cws length 1 sub -1 0 {cws exch get} for % Reverse cws onto stack
+ 4 0 % Starting row and column
+ { % loop
+ 2 copy 0 eq exch mrows eq and {
+ dmc1 module
+ } if
+ 2 copy 0 eq exch mrows 2 sub eq and mcols 4 mod 0 ne and {
+ dmc2 module
+ } if
+ 2 copy 0 eq exch mrows 2 sub eq and mcols 8 mod 4 eq and {
+ dmc3 module
+ } if
+ 2 copy 2 eq exch mrows 4 add eq and mcols 8 mod 0 eq and {
+ dmc4 module
+ } if
+
+ { % loop for sweeping upwards
+ 2 copy 0 ge exch mrows lt and {
+ 2 copy exch mcols mul add mmat exch get -1 eq {
+ dmn module
+ } if
+ } if
+ 2 add exch 2 sub exch
+ 2 copy mcols lt exch 0 ge and not {exit} if
+ } loop
+ 3 add exch 1 add exch
+
+ { % loop for sweeping downwards
+ 2 copy mcols lt exch 0 ge and {
+ 2 copy exch mcols mul add mmat exch get -1 eq {
+ dmn module
+ } if
+ } if
+ 2 sub exch 2 add exch
+ 2 copy 0 ge exch mrows lt and not {exit} if
+ } loop
+ 1 add exch 3 add exch
+
+ 2 copy mcols lt exch mrows lt or not {pop pop exit} if
+
+ } loop
+
+ % Set checker pattern if required
+ mmat mrows mcols mul 1 sub get -1 eq {
+ mmat mrows mcols 1 sub mul 2 sub [1 0] putinterval
+ mmat mrows mcols mul 2 sub [0 1] putinterval
+ } if
+
+ % Place the modules onto a pixel map between alignment patterns
+ /pixs rows cols mul array def
+ /cwpos 0 def
+ 0 1 rows 1 sub {
+ /i exch def
+ i rrows 2 add mod 0 eq { pixs i cols mul [ cols 2 idiv {1 0} repeat ] putinterval } if
+ i rrows 2 add mod rrows 1 add eq { pixs i cols mul [ cols {1} repeat ] putinterval } if
+ i rrows 2 add mod 0 ne i rrows 2 add mod rrows 1 add ne and {
+ 0 1 cols 1 sub {
+ /j exch def
+ j rcols 2 add mod 0 eq { pixs i cols mul j add 1 put } if
+ j rcols 2 add mod rcols 1 add eq { pixs i cols mul j add i 2 mod put } if
+ j rcols 2 add mod 0 ne j rcols 2 add mod rcols 1 add ne and {
+ pixs i cols mul j add mmat cwpos get put
+ /cwpos cwpos 1 add def
+ } if
+ } for
+ } if
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx cols
+ /pixy rows
+ /height rows 2 mul 72 div
+ /width cols 2 mul 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/datamatrix dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER datamatrix--
@@ -5509,466 +15547,1646 @@ Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB
% --BEGIN ENCODER qrcode--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: QR Code
-% --EXAM: http://www.terryburton.co.uk/barcodewriter/
+% --EXAM: http://goo.gl/0bis
% --EXOP: eclevel=M
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp qrcode 0.0 0 0 0
-%%BeginData: 286 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 06)#BD e* F+L_Q" 0Op
-s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW ei&
-AoD^,@<@M4Ap%p+ Ou"b7 ATD j+D f1 R= F`) 83F HSF5AR fO fG%GKM "a+
-^(ATX(k04f$2De* R"B9 !.< DK BB 2Ou "b3 @<W i+@;
-L!rOu"b1@<-F#+D ,%uF ( LL jD fBf 4Df 0WZY :js=E
-bTE(FEqh:P!+/J! Ko='%< $3- B l@m 1H ]kFA @;L !rP!+/T5^e epOuSV6P,4<
-rNWD;+NHB2`AWf3 'OtDh\ P') p OOu% N5Ot Ccr F_-^lI?ITY P%BdtOuY16E
--,f4DKCt)Ou%NL< ,Z_tBl @m1 H]g1 5P"B V$E cYf=05YcC+ C\c"@rGmhP%
-'TNOu"b+L]ESo@U X:eDe *F+N WEILN I-gJ D0' ?Q5&-6EP'N 4"C6AUR!KmI
-:C6CcD1QlmD3/@Q j"-Q? @/8]H @P!3W :!K sFF5*C/R30 Ia,"-TX>"-P
-j29RV8N3,N_LP!3 WD5*C2S @VV&,0 5?Y6O u"b #@<,jrA7Zm #F(^:/C6D8R
-1Qk"OP#ZpnAUT_@04J@1Ch7K,@UX:eDe*FB@ZiNY@r,_"ASdA1F`)83FHSe604eX0AThX$+D,P
-4D..OH"D2dmCm$r.NWDk&H]A,#I?ITn1OYEcEaa0=04f$2De*R"B9!(7@<[kjI?IQ@DI[TqBl7
-RD"*.goP!+.FD0'?!BlnD=@UX:eDe*FB1OXU'Ap%p+@ps=t+?Vb>DKTf-EbT#+4?P8j+BsXNLe
-W\TL&ei?!<7cS6A>M]L&oPR![rd)N.qE;L')LO"9+#X9nif1L'<*^"q64j]nQc1L'S6C#e5TqB
-ncsWL'mj5$h8r[dtS=FL(74<%n23a5)'Y8L([79'4ln4Kn^>1L)/!f(^Yp7:PKchL)[C'023Qn
-La%X>Lh2;@Q%f:]L&h7.!@<I$D2&(qL&qC1!aLH]Z\AQ%L')(C"5eh93eddML'9nu"l+h:5_]K
-EL'LP0#Rc@mN.qXCL'd@($B9cJ.>A5bL()ai%A&:aD2&QiL(G\d&GLnkm"Q.NL(gbF'Z#M=gg)
-R1+BsX@LbOWZLi8"JOG3b@L&fPS!<\&W3/.HML&n?0!U5=?7"tb[L'#,E!saP_Ck`&!L'/lY"G
-_^7aG'jnL'>5E"uM&=[Y>"qL'N]m#UP32Kn]mlL'ai6$>tS*onEj.L("BC%'50m=b[CsL(;Oa&
-"-]V80D,m&VqWe3f$[iC5)_HL&dZs!6U#rl\5E_L&jr%!Hs1uX+gZ)L&r!B!a:<[U4ra7L''#^
-".+`EabBp@L'1J1"O)T(#)3;DL'?Cf"tbQ6NJ7Z2L'MFI#NgaHD2&>pL']kp$/C7B6&#`ML'qp
-S$h7LF5!CW.CiF&rDKTf-EbT#+4?P8j+BsX>LbFQYLiS4MRYCg[L&g.d!>gIk:PJn.L&oeY!Z-
-RmCPDn[L'%('"'1-YWeLWlL'3'^"Q>(=8;7;TL'BJh#,m7]4ba3]L'Ub5#d8sh6&#]uL'i'X$Q
-+U+_1iA:L(+rR%FKn?ObOBJL(F$5&BJ-19d!Yr'Sn)l4c!9tHA2EgL&eN6!8WA1#)3.;L&l1H!
-MbAMj+[UHL&tJ3!g&-<hM)+dL'*Ei"3Q?$$\ee%L'6Fh"YPN5X+gf_L'D4D#/l6$089_SL'U)"
-#el$"6&#]gL'gJ+$J^@D:50/EL('<$%6n,O;'9)!&;V?_08MuO=,:[KI>.`mL&eoA!8WA1",6h
-)L&k\:!I0>"WeLQ*L&r$C!^;>?KSBQBL'$Ll"#kr:HA2O>L'/*C"@e+KP_K>0L'9&]"dOfGgP,
-o1L'FH.#5a,[983\SL'STM#_e!=qM#;u>q\_k>DNWB'Smui15J2O</=h9HA2E\L&eB2!6Blpj+
-[R:L&i6J!C;G@D2&(YL&o5I!UYUC/VX="L&um[!hb8Lk_90IL'(h<"-/*<^4labL'0Jj"Fc(.b
-(^'=L';UP"darIqM#25L'DsY#4@3N4C''n4tgAjFCcRW4>0AN>DNlI+G_n2:5EY>!/?4.RYCgX
-L&g@j!=snc6&#DYL&n9.!Qp,u#_iCQL'!$_!mZN&(kr,rL'+-("7([E6\Y`-L'7=,"]pE^\V::
-_L'Cn;#/l6$0STh*L'SKJ#`OKDs+Ui0L'e$;$B'WGq1]96>q\np>DNcF)Mfl!5)<0oC5@1j!18
-K@["\S2L&h+*!?[$s983I^L&mg!!Q'QlpkAi(L&u=K!h+iFa+a[(L'(S5"-80=jb<m_L'2(B"K
-$nVn:h*ML'=Z5"p0M`>_WHoL'J<F#Btn-`J+XSL'XW1#od/';'9)!$]#LQ+G_Y+4GZUc<etRH!
-.oq*Q\GLFL&fDO!:bdE!ep_$L&jVq!GmJkMM;/CL&p:g!W@`S2220BL'!Wp!m?<"mtLojL'(t@
-",qs:eqO;3L'1V5"H\?@b_?9'L':)%"cnBAgP,n_L'E-501[3iL^/_GL_tplLb+?CLd6bqLgl0
-aL&d'b!1S]CZ%`7qL&g"`!;_EN(kr&LL&k2,!Ifb(PD0+IL&oPR!WRlU(PVugL&u@L!g89>\qU
-:KL'&3G"%n:MJqaBAL'-%^"<3'u7>:qdL'5DK"Sl=G5!CW8@;]go+?Vb>9H[Pq$A]CP+G__-6&
-8Ep?\il[!0)^5VhP2kL&g4f!="8Z)MS8XL&l"C!KDg7\qU7LL&qp@!^)2=C5)e_L'#bW!t^1h8
-qmG&L'+N3"6tUD.Y\(BL'4c9"SmcU6\Yc$L'?4a"t>92I>.sBL'JT%023QnL^8eJL`2'rLbsoR
-LeEP0Li8"JK8'AqL&eK5!6g/thhD.1L&i$D!B,Z5=bZs-L&m`t!Od^`i._:EL&s)a!bR/gN.qD
-@L'$.b!t'bb983OtL'+c:"6tUD,_cG)L'3lu"NZ<$%#+p`L'=&P02WirL^/_EL_PXbLa@j/Lc'
-uTLern5Li%rrL&dKn!2"uG["\S#L&g.d!:tpG&;C37L&j>i!F1?[G_Q6cL&nf=!R?E#n:gu[L&
-s#_!aLH]HA2L&L'#\U!q_3L(5;oVL')7H".P#Ib_?6#>q\_k>DNE<#`'"I'o3fb,`!h(1l+8M8
-r-K'@#/ZUG_Q3SL&dZs!3LtU^P2a8L&gOo!;M9L%Yb!(L&jAj!D8(ID2&(BL&mQo!Nq.XabBiY
-L&qR6!\&j*:5/gUL'!-b!hk>M]nQUVL'%um+?ht35!G,c05YE5Ec5GrE-!-a4>1SpD.Ra%@j!l
-r02*KmL]rSAL_kjl>q\np>DW<8#`'+L*aLEr+Bs[%M#W;2L_X2K80D,ms+p]2s+p\\+?htB@;K
-mr@;^4)ATDKp+?Vb>9H[Pqs+gl8%Ytj*023QnM#W87L^T"O>q]%t>DW<8s+p]2%:(VX+Bs[%M#
-W;2M#Ua'5!CW/H$!U?4?P8j+Bs[%M#W8;L_!cE9d!Yrs+p]2#D`gp02WirM#W;2M#W8;>q\_k>
-DW<8s+p]2s'6a24tg\[DJEl.4?P8j+Bs[%M#W88L^@??9d!Yrs+p]2"Gd=h02WirM#W;2M#W87
->q\_k>DW<8s+p]2s'6a24s3$QOu"b&DI[iuCi^^]4>1SpD.Ra%@u(+<@;Kmr@;^4)ATDKpL]K/
-<H$!VR!\\=tDJEmA"$So31G<<W@ribT4>1SpD.Ra%@kVD2@r?F+ATDKp04A[9BOPe$D.Ra%@kV
-D2@ps1mBOPe$D.Ra%@kV;:FCd+:DI[.$FCd+@@;]go04f$2CLM*qBcoT'Ou"b.Bk29->E/h?0J
-G5A">DMa0TH8i0eb;A">MSa0O9ht05YE6F!*S-024/D>E/]>s+p]2s'79P1*Be]!AKN70o5jcs
-'79P1E]n^!\c<g!\c?h!\lBh!\lE80248G>E/e>0JJLh0JG5A"#)G`NWUsi0jTS9L]N;[H\_`d
-V2,JA5*@U:Bk2:5P"7c#Ou"b$@ki(D3?VO^$A]"E#`&alOu"b$@kfZZD_a3n>DN]D$]#@M$=/f
-N04SKI2frsp0HaSU%YtRM&;Ua#Ou"b$@r,^oF!*S-024/D>DNB;s+p]2s'79P1*BeW"Gd/9s+p
-\\0245F>DNH="Gd2:"'mQS1a$"Y#)EG="c*:eL]N;4L^AEa!g9C9$BdT90OnTIFDj0fP":B9L]
-N;MH\_`dV2,JA5*@U0@kfZZD_a5!P":BJL]N;[H\_`dV2,JA5*@U0@koubD_s.rP"7c#Ou"b$B
-OPpu@;q5Y0JP==1c70M3&s8k6UX@47n?3D92&&T:Jand;cHat='/U/+=&6_.kNA,3g)9P@q]:k
-G%#3.Lb+]HOu%moL]N;_H]g?uBOPpu@;qAnP"Us%@q]:kG%#3.L]`G6P)#3FI?I,SASu!qF_t]
-1Bk)KCBl9(tOu"b0F`\a?DN\Ib$Bf4]"-QQ<!KmJHV33VfBnubP1G<L!!0T-bBcq,-P%'S;H]g
-XBP#Q-<Bl9)CL]Wa=P%K'$$8=.f0JG170JG2:$Bh6K)3QsnDBNYL"-Q?@/;O@`$Bh6K0TnDY@Y
-bAS5*Dn.5*C1EBcq,G"-N\J1OXUa+DG_V@Yb)KWKKDkNX%6l0JG170SfssV32^Z3,*7QBnuhR9
-Tgr_!f.)EV33Nq30Ia,#Eh96WKKH.GqWkSBnuhR!Ko6eH]A4_0JG2:"HoUE)3QsnDBNYL!Kp->
-/;O@`"HoUE0TnDY@Yb/M5*Dn.5*C1EBcq,G!KmJH1OYEdI?ITn3,`q]P!3WD5*C2S@VV&,05?Y
-6Ou%NLAT)^5L]D1Q9RW'6Ou"b&DI[*kE+iZtF_t]1Bk)KCBl9(tOu"b0F`\a?DN\Ib$^,=^!g6
-H;!KmJHV33VfBnubP1G<L!!0T-bBcq,-P%'S;H]gXBP#Q-<Bl9)CL]N[<P%K'$$SX7g0JG170J
-G17L^TBBOr9EB@q]:kG%#3.+DG^9Bp),P98G0_Ch%-eEctl-F!,17+DHW4Oo^_=P"Ur=L]WA?P
-,4<qOuSV6L^TA0P,XU.P'J]p+DHW5Oo^_%I=$tY0JG170JJ:eP,4<ZOuQrb@<-O"Ci^_5DBNYV
-99Mr(!f.&DV33Nq30Ia,#*M05WKKH.GqWkSBnueQ!Ko6eP#[Z)Dfp/b5&-6EP'N4"C6ATNC6Cc
-D1OYEtDfp/X!,@ZjI?G)'1G<<W@q'_*AU?(EDN[2H1G<ZhF<G:8P%'4QP&-;XOu%moL]M4-P%'
-4JP,Wd]Bp(ZC1QD_p0JG170JG2:#a2$I)3QsnDBNYV99Li^!f.,FV33Nq30Ia,#a.B7WKKH.H#
-IhI+DHW;P&,pVM#WWnP'MJ=88iWmI?G)'1G<<W@r#LjC2&#JBl9(tOu"b0F`\a?DN\Ib!g6H;%
-?bOjV33VfBnubP1G<L!!0T-bBcq,-P%'S;H]gXBP#Q.5+DI!3L&h:;Ch[c0BnueQ!Kp*=!KoEq
-!!(qBP%K&o!!%R8I=$VI!5UpKP#[[EOuS9mOq39I^liMs5)'(;Op$pKNX[Zr0JG170JG170JG2
-:%?dQN)3Qt8",Qu?LPQ"f%?dQN0TnDY@YbJV5*Dn.5*C2S3,`q]P!3WD5*C2S@VV&,05?Y6Ou"
-b*+DHW5Oo^_%I?J/[F``%p%[&VZDI[TqBl7RD"a+^(ATX(uHS98ZD.Ra%@rH-kGp%3LF_-^l04
-A[9BOPe$D.Ra%@rH-kGp%3LF_-^l05G!6C2%U%@<iu;EckrV1G<3_FCfB+@<iu;EckrV1Lad5C
-h7L?!g7;S!0V2G05G!6C2%U%@<iu-@;L!rOu%NL</:O1!FfJXCh7L?!KsF/056S5Ou"b#@<,jk
-@<*K"@<,jrA7ZltP"Uro@UX:eBOPq;0Tp$W@<,jk@<./aP#.<^HS98ZD.Ra%@rH-kGp$^-Cia0
-N1OYEc@q]:kG%#3.+C\c"@q]:kP$jGlHS8fDE+iZtF_t]1Bk)'s@<iu-@;L!rOu%NL<,%-iP%o
-dQP!+/$@<,jk@<.)&JWaVS@<,jk@<.)&T9<$6EaiHt@q]:kL&g.pAn#1h@q]:kL&gP&:m,j^"F
-De;@;]goDeid,+D,%uF(LLjI?IQXP#Qjm87HjdAT)?mH$_2UDI[TqBl7RD"CcXuAWeitP#Q4*D
-JEm(CLML804f$2De*R"B9!.2@;]goOu%NL<+0T^BOPe$D.Ra%@rH-kH$_2UDI[TqBl7RD$t3sk
-BOPe$D.Ra%A!/WrP#Q=AD.Ra%@rH-kH$_2UDI[TqBl7RD#B"[$ATDKpOu%NL<.0p/05boL@q]:
-kF!+q#Ebo<)+D#G#De*R"B9!.2@;]goP!+/J!g6H0P#RT#G%G]8Bl@mL"a+^(ATX(uHS8l;E-!
-.6DfT]'FH-K9F_klW4aUd`Ci!TiE-$GS+Dkh&Ec5GrE-$Gj<Fp&XDe*R"B9Go!@r,_"ASdN&Ou
-"b*L]NYpHZ!tC@q]:kF!+t$E-!.9L]N[<P"UsHH]gXBP#O)K+DHW4Oo^_%I?J.pG%G]8Bl@l3B
-o!+P!g9CC0Tn5(DfT]'FH-NABk)1%P!+.FG%G]8Bl@mL!_jen!g9CC)3Qt&ATDj+Df1@3P!5%S
-Ou%NL<.0p/04SF0F!,(5Ec#6,NW`s:Ci#7tHY.D:Ch$mmF+&BXD/!L#De!3pF+'3OASu!rA8,p
-oP"Uro06UoIG%#20AoD^,@<@M4Ap%p+P!+/8ATDj+Df1^hL]N[<I=$-KEcYr5DMS=V98G<cWI9
-q0Ou$ZZCh7d$ClSNiP!+/0F_tW%@<-E3@ps=t027U&G%G];@;M*"P$r\jARfOfG%GKM!DS_5I?
-IQXP#Q"&Ch7d$ClSNjP!+/0F_tW%@<-E3@ps=t02[m*G%G];@;M*"P$r\jARfOfG%GKM!E#"9I
-?IQXP#Q"&Ch7d$ClSNnP!+/0F_tW%@<-E3@ps=t01_7!G%G];@;M*"P$r\jARfOfG%GKM!D&A0
-I?IQXP#O)OBk/?'Bk29-G%G]8Bl@mP94`!NG%#3.+D#G#De*R"B9GoN99M(a@q0=dDBNG!Ch7L
-*+Eh=:F(oQ1P"TA(@s29sF!,%3@rGmlDJ,,*P"Uro04f$2+C\c"@rGmh+D#G#F!,%3@rGmlDJ,
-,*P%9_?Ou&+00JG170JG170JG170JG17L]CppCh7LI9OhRKAT![-Or9EB@UX:nASrW%DI[TqBl
-7RD"`%OaC2&hoH\_`d;LO^-Ot;Cj@q0=dDN^iZ0TnDY@UinaAT!YpP,XU.P'J]jA!0$=1G<TdB
-4>RsF!,=6A<LD3@r,^oOo]-3A!1;a!Ks:B1Mq2G@VKq*L]D:+A<M4TF(\rrFE8RABk3B9@q1[I
-D0'?!BlnD=D/!OD@UinaAT!Y3ASu"@H$tiU05Y9BEbT$)+BosmNWj96@rcLJ!_kD*$]&8J@u)C
-7L]WBBLgu6N>p*@-!Jg`3s+p]2s+p]2s+p\\+C-*oNWj96@rcLJ!_kG+%>\JL@u*rcL]rS=Lgu
-6N>p*@-!Jg`3!Jg`3s+p]2s+p\\+C-*oNWj96@rcLJ!_kJ,%u=\N@tju:>DNK>#`)uH@pL3]L]
-N;3L]N;3M#W;2M#W;2>p*Dq>E/l(Bk)1%NWMp3L_5GPLgu/>^fuU#L^JqJLgs^5>DN<9!/LZ3!
-/LZ3!/UZ2s'6aQ+Bsj/Ap%p+NWCkj'o6=T@tk!1>DNN?$A].I&R?M`L]N;3L]N;3L]N;3L]N;3
->p*Dq>E/huF_klS!A]HKL_>MRL&kpkL^JqLL_bdd>p*@-!Jg`3!Jg`3!Jg`3!Jg_]+C-*oNW`s
-:Ci#+41Pd'-(5QIT!]O>>%u;-[,`"!W+BsX&L]E53L]E54L]E54L]C^'>p*@3"D2dmClSNQL`q
-QmLgu/A-X2B@La7d5Ld55g>DN<9!/L]4!/L]4!/Lc6!*p^Q+Bsj/Ap%p+NWD"n-&<Uu@tk+F>D
-O2R0Si8U=C!%RL]N;3L]WA4L]WA6L]WA6>p*Dq>E/huF_klS!B,`_La%XbL';3oLa7dALgZ$X>
-p*@-!f-i4"Gd&6"Gd&6"Gd%`+C-*oNW`s:Ci#+42i'&A(5O;l"s@-+.#:EMCk_qA>p*@-!f-i4
-"Gd&6!f-u8"Gd(a+C-*oNW`s:Ci#+43/B;F(l0Yr#EW/G0Sihc!/-(,S6[7AL]WA4L]WA6L]iM
-8L]iM8>p*Dq>E/huF_klS!BGrnL`2(%L'\u,LcgK2L&dm$!5Mk_>DN?:!/L`5!f-u8"Gd2:"C3
--U+Bsj/Ap%p+NWLphLcL82Lba\lcs);sL&cg[!5O<hi*@I0L]WA6L]iM7L^&Y:L^&Y:>p*Dq>E
-/huF_klS!\lEc4bt/82MMX5>DQ+1!1&?>i._7<>p*@-"Gd&6!Jgl7"Gd2:",I4g+C-*oNW`s:C
-i#+50f"PNL`hL7L(9;LLgYr;Y_E/]L&j,:+BsX'L]WA:L]WA8L^&Y?L]h!+>p*@3"D2dmClSQO
-1PeJU,)AF;&>36`BSHN,L&iEO!FT1U>DNE<!/Lo:!Jh#;"GdJB"C3-U+Bsj/Ap%p+NWLplLe3C
-@Lb=Dp.pIgSL&fk\!C2A?J6a:%L]`G6L]iM;L^T"BL^T"B>p*Dq>E/huF_klS!\lQg9o'^D0SU
-9g>D<-2L&g^t!GI2gY[&AUL]rS8L]rS<L]rS>L^T"D>p*Dq>E/huF_klS!\lTh;2?-H156S1>D
-<->L&i-G!LSTBi*@I0L]rS8L^/_<L_#:CL]`GB>p*Dq>E/huF_klS!\lWi<JV]P2MN)r>D<-VL
-&j,c!PjEk'O;hcL]N;8L^Jq=L]N;BL]WAE>p*Dq>E/huF_klS!\lZj=bn,T3//D'>D<-bL&k2,
-!VhBN9O/cFL]rS8L^Ak?L_5FDL]WAG>p*Dq>E/huF_klS!\l]k?&0PX3ee^Q>D<-rL&l+F![<@
-#MHq?/L]`G9L]`G@L_5FGL^AkK>p*Dq>E/huF_klS!\uHc@>H+`5)(6H>D<.9L&ms%!a(0Y]Nl
-XaL]`G:L]`GBL_#:FL_#:K>p*Dq>E/huF_klS!\uKdAV_=^157&">D<.9L&nl?!ec:0mTgr>L]
-iM:L_5FCL_5FIL_GRK>p*Dq>E/huF_klS!\uNeBo![`157/U>D<.UL&p(a!j[O_0O5f*L]WA;L
-_5FCL^/_ILa%WT>p*Dq>E/huF_klS!\uQfD296h2MN]W>D<.gL&q((!q(dFKO#^)L]iM;L]iMD
-L^T"KL_,@P>p*Dq>E/huF_klS!\uTgEJPTj2MNgu>D</0L&s&`""K$-^g/'eL^&Y<L^&YFL^T"
-ML`V?R>p*Dq>E/huF_klS!\uWhFbh/r3efAb>D</<L&t&'"(m8j)I4IiL^8e>L^8eGL^/_OL_b
-dU>p*Dq>E/huF_klS!\uZiH&*Mt3efLk>D</TL'!$_"1X'g<a?hPL^Jq>L_GRIL`D3TL`qQW>p
-*Dq>E/huF_klS!\u]jI>B)'5))'C>D</lL'##B"8mlVY[&AUL^8e>L_bdKL^8eTL^](Z>p*Dq>
-E/huF_klS!\u`i!.fqELba]I$X8>dL5#c^L'/EL"RKD:>DNB;$A\e?(Pi3M+,C;\+'g!p+Bsj/
-Ap%p+NWLsrL&cp`*f)_/5T<p^!MkGP&;C=0L':%P+BsX,L^/_NL^/_:La@ijL`0PA>p*@3"D2d
-mClSQQ0STRaL`2(+L."[=L&o/G""]00Y_E=S>p*@-"c*MA'8R!O%u;*Z(Pir7+C-*oNW`s:Ci#
-+51GOUaNJJX33/0tn>D<1:L'(t@"U]tfqHY4JL^f.BL]WAQLan2]L_kje>p*Dq>E/huF_klS!]
-)Td!0N']LcgDd$X8>dre:NFL':&$##nkN>DNlI!/Lu<(PiES,D["h,@)Et+Bsj/Ap%p+NWM!mL
-&dKp*f)k3;4CdE!ZZpse:n."L'Fed+BsX6L]N;AL_Y^dL_GRPLb;sU>p*@3"D2dmClSQQ1kl!u
-La%X=L/prOL&sDj":U"gqM#4\>p*@-%>Y4E%YtpW/;OOe4,<oC+C-*oNW`s:Ci#+51GsmeSVS>
-C2MPAm>D<2?L'/oZ"u_2@@U1*\L^](EL^](XLaRugL_bdq>p*Dq>E/huF_klS!])`h!252cLba
-]kcs)5+=G?rdL'E`o#J==b>DNK>%Yt=F,)@k-$A\b>5[>L<+Bsj/Ap%p+NWM!qL&e'+*/HM-A)
-LRG!d9;$["\eML'TVA+BsX6L]iMSL^o4qL^JqTLb;sU>p*@3"D2dmClSQQ3/.F4L`hL7L1q3'L
-'!To"RLjJ7"tuK>p*@-"Gd\H%>Z-_0Sg3p.Yo3Q+C-*oNW`s:Ci#+51HC0iXb[mO2MQ*W>D<4+
-L'8iW#G-YV#$i?UL_PXJLa\&aLb"8sL^Jr*>p*Dq>E/huF_klS!]2Tc!3q>$LcU93cs)5+mY1m
-ML'RL.$%?/&>DNrK#)EnJ+,D+s,)?qh4^B19+C1-d04eX0G%#3I"ADNe87c:IAThX$P)YWIP%'
-S<P')pOP')pD0564BOu%G<D'3\,FE2)*F!,1[99M(aAo_a1+Dlo7P"Uro06UoIF!,=U!Kp*=1G
-<f`H=\49L]W`4Ou"b"F)WlWD28:W99M(a@<6BD+Dlo;P"Uro05bWFA0>`F"d2NA1G<WUGB4mED
-/Ws@#a/)K1G<cXBlkJ8D/Ws@#a/qc1G<QS1h%S>@;L!rOu%/nH=_m?P!*l#H=_mCP!+tKHS98H
-GB4mE@s<!M!KmJH1G<cXBlo.2Ou"b-@l.X;FE2M8Ou%NL<%hfmGB4mDL^'#8ARfP"@;M*"Ou"b
- %@s;u:DI[m3+D# &,F-< Mc1G< 9UDe' u$ @s< !M#a0" ?@l.YAL
-]i-QL]Djd<Ka>E1 G<< L@PK! BL^0) 9A RfP "@; L`$P
-&-:SOu"b&@q%29D 28F[9 4_ ULG%# 3C!g 7A U!K mJH99 M(a Deid, +EVX
-HAWei]DfT]'F<G1 9D01q XHS 9;Q @<iu -@ ;L! rOu%NL <- DhnF(o Q1N
-WjQCF(KHVD0BK2F (oQ1+ Eh= :F- : C'" FDe ?CL MK2Amo Ls AWeitP #Q:
->B4>RsF-:!CD/Ws J:jXj 6CL MK2 Am oL sAW eit P#Q"&@ PN ]=P!*A d@P
-Wc>P!+tKHS9;Q@< iu-@ ;L! rO u% NL< ,ZP \H$ b]>I
-?IP_Bcq,G!KmJH1 OYEt 0 4o -C D.. N/A o_a1 Ou"b7
-ATDj+Df-\@ATDjT 1G<9KE +0r # @s; u: ARf1 (+D #%l16M[$;N `ghARf[g+Dt
-\5F!,%(@PK!:@q% 3V!Kp> k@r P n?WK K%jF CfK 0F!*S-0240 ]"#)D_0243^
-"Y_Va0JG.S1QD\o 0JG170 JG. S1l_ kr0J G17 0JG175!G,c 06CcGD'3q3E
-c#k?G%G]8Bl@mP@ !d!,E c#k? G%G]8 Bl@m P97 ;/I">DM`0R ]*aOu"b5ATD
-W1FCfK0L]Ct&De' u-F(\ rrFE< USP,W P7E c$tKL]W_WP #-Lg5(/SnP'
-)p]Ou$rrB4>RsF- :!SATDX N@ZgbT V33fo !,Z di@VKq*P'N 3MD0'?!BlnE
-Z@WZ1%D3B/tD0'?!BlnEZ5*@]TE+*9"A8Q6qP,4<tL]E53E+*:?@Yb&JWI&SmA<K-40Tp[/P"9
-P#A;C5&F(\rrFE<Uj05t?1F*)GD+Bsj30ekC:0ek@9NX.<m0JP780JQjr1G<]UA8ZO,L]ESoD0
-'?!BlnEZ@Yb;Q2NeW-#a0"e/;ORBD/Wr-Ch#;2H\_iRH\_]NP#[[EHZ3D(P!3hnA92j5F!,F1A
-8ZO,P"Us`05t?1DKTe=E+*9pF_up8Oo^@?P%p.9I?I,S@s;u:A7Kh)OpR:-L]E53@s<!W@Yb&J
-WI$:.P!5$b04Jm1GDHNf1MgPX@N]/'@s<!W@Yb&JWKKE-"FDe2E+=*J"HkQhP#O)EG@D\6@:UK
-jL^9/[@W5h$P"_#p04T3^!0T-o!/LYbE+=*J!KsF/056S5Ou"b$G9CC>L]V%)@s9&0P,X6<P,W
-#;E0;b^G@D\/P"UTbP,XU\Oo^_%I?I-2GB4m:+CfVYG^Y`G062,BCi<r/>DN<7!<7D/3/@X!Cm
-$c4!<A9TH\MPAP/2R0<.0p^?'6usEcZ&8B8-EeOpR:-L]N;4L&h7#OuRK'@;KjpP!5%%P!3o-C
-i<sB",Hu@LQZn1P"76HF)Z/<A:'+6Or9&UP&6@GL]ETTOp$,PF)5c-P!5%%P!3o-Ci<sL5*AR%
-!JUUSP%o#Y@;KjpP!5%%I=%-"P')Q\I?ITYOq*X204Sp3AnH*,>DN;k@rPn(L]DjdK3aWrL]E5
-3ARf[gL]N[<HS9)r5*@^3De3NmF!,1Q!KmInDe3NmF!,1[99OO6M#W83HS9,s5*@^3De3NmF!,
-3?@rGpjAof)0L]N[<P"T;'AS,Oq+DR'4EcYZ*DeC2,P"Th:E,ol-P/3<+I?I-2De3NmF,0g+De
-3NmF,0gZ96,)^Ci<r/Bp),0F)Z/<A<M1cP"769De3NmF!+t2AS,OqL]Cq'AS,OqP%'4JP,XU<O
-u"b3F(9-!ATN2OEcY`7F-8_M1G<ciDIal1F(9E8P%'S1062,DGB4m2+EDO5GB8+ZP"B4pE+40M
-!.C#_?'7""!/LYrF)GNE!KsF/05Zk9Ou"b,+EDO5GB4mDP"UroL]E53ARf[gL]N[<HS9,s5*@^
-BF(9E8+Di69Oo^@>Oo]'2AS,Oq+D#&%@N]EKWJCS<WKKni+EDOBEc5J2EcY`7F!,<BC6AUR!Km
-JH99R,SG^Y`GI?I-AF(9E8+EDO@A0>GnE+4u(I?G)'1G<9KGB749ARf1(+D#%l16M[$$'I(tAR
-fq*@N]5l@PK!:@q%3V!KmbP1Pc$e!G,bM0o,jnWI$:4P!5$bA7Kh)@N]A-@s;u:BcpqrE+4uHA
-7KRfP"_$`ARfq*@N]A-A7Kh)@N]BJ96,)`De*F#P'DD<8;I8%!G,bM15GsoWI$:4P!5$bA7Kh)
-@N]5l@PK!>Oo]':F!,%(@PK!9@rPn?ChY#&@rPn5!KmJHCm"g0@rPn5!KmJH9TjX3@s<!'+D#%
-l0d(1n!G#\aF(-8'@q%/8Bp&L[96,)`De*F#P'DD<82"IsF!,@1GB8oROu"b$GDH6^1Pc$e!G#
-\Z@XBbBP!5$bL]E53ARf1(+D#%l16MZo!KsF/05?Y6Ou$epA7Kh)@N]EK99NbIAp\$3F!+t:+C
-nu+F(-8,P"TMP99ONQ@s9&*GDH9_!Ko6eP#Qjm8:?XlL]E53ARf[gL]N[<HS9)r5*@^X!/LYe@
-q%/8ARf1)Oo^@>P,Wd]C6CcD1LkWM+CfU<ARfq*@N]EK950P^P'AWiG9CC>L]NY>Ou%NL8:?Xl
-Eaia)L]ET7HS9>HA0>B+F-:!g!KmJH$'I)`@:Y/o@s<!WH#R2&+E1b"P%'4JP,X6;P'AWiGB4m
-G@:YNWI?IQG@l.YA+Cnu+F,0j[WJCRm@s<!M!g9O0056S5Ou$TlF!,0>@s;u:Bp),F&!@'O"Hj
-:YG[kr=+DDs.GB4m@L]NY>P"UW/Oq3?ZOp#9=F!,1[99O=YG^Y`G@s;u:DI[m3L]N[<@s;u:DI
-[m3L]N[<P"UTAOp$RDOq3_#I?IP_E+sQ<+Bot0BmO>5F(or3P&,K$s*^&_?'6usEG]lG+EM7CA
-Wgkm!I^+@Ou"b'E+*i2>9I.+!Jgc4!Jgc4!Jgc4!Jg_]+BsX&L]E52L]E52L]E53L]C^'>DN<9
-!/LZ3!Jgc4!/LZ3!*p^OL]N;3L]N;4L]N;3L]N;3>p*@-!Jg`3!Jgc4!Jg`3!Jg_]+BsX&L]E5
-2L]E52L]E53L]C^'>DN<9!Jgc4!Jgc4!Jgc4!*p^OL]E52L]E52L]E52L]E52>p*F91Pc$e!G6
-:ZFHU*h!KsF/06r^EOu%moL]M+,@<@;*P"UsIL]N[<HS9W,5*@]TAoM3%AoM1#+F0,CG`k^_1N
-7&QF!,]MGp%*DFs(C9@ZktJDfT]'FH-K9F_klW4aV-^G]P!KBmO>5G`o%^!KsF-+E;7A+D,S%P
-'Cq[G]P!P+EM7CAKZ8]WJCS<WGucu+D,S%P'DD<<.0p#I?I,S@;KRoE+*i2>9I.+!Jgc4!Jgc4
-!F6gPL]N;3L]E52L]Ld(>DN<9!/LZ3!/LY]+BsX&L]E52L]E53>p*@-!Jgc4!Jgc4!F6gROu"b
-1F`_&.B5VZsFF,Z[H'1@S1G<]lP!5$bL]E53L]i&XE+4toOu%moL]N;7HS9>HP!5$bE+sQ<+E2
-QJE++n1E-WRF@Zgb3D0@%1ChIX)@<<W2@ZjB'@?O9HG^Y`GI?I-LOq*X2@<6BCL]Wa=@<6BD+C
-T>116SVXBmO?H%?d];056S5Ou$g."E8L*@;KRoE+*jE"DJutF`_&.B5VZsFFB<C@<6BCL]Wa=@
-<6BD+CT>116SVXBmO?H$'M9706iXDOu$NfE&*4NP,Vl2E&/VFF)WmtWH2d"AV^YUWI$:DP!5$b
-GT_8SE-682ChIX)@<?p\8:?XlAoD^,@<@M4Ap%p+P!+/J#`&M&BmO?H$'M97056S5Ou%&kG]P!
-AL^%j9Fs(LT!KmJ>!g7;]G]7AAF,1$7+E;7A+DHW4Oo^@?P%p/)I?I-LH\_r`!HVt$AV^AMWI$
-:4P!5$bE+sQ<+DHW3EG]kABnueQ!Jgf?C6Eg\Bm=]T!,3QqD0@%9L]NY>L]W`SP'DD<8:?Y$Ao
-D^,@<@M4Ap%p+P!+.FAoD^,@<??pE$/@->9I.+!/Lnd+BsX-F(or3L]N[<>p*Dq>9I.+!Jh"e+
-BsX-F(or3L]Wa=>p*Dq>9I.+!f.+f+BsX-F(or3L]`g>>p*Dq>9I.+",I4g+BsX-F(or3L]im?
->p*Dq>9I.+"Gd=h+BsX-F(or3L]rs@>p*Dq>9I.+"c*Fi+BsX-F(or3L^'$A>p*Dq>9I.+#D`X
-k+BsX-F(or3L^0*B>p*Dq>9I.+#`&al+Bot0BmO?H#a20C#[JQY+BosmL^8eA>p*>oF(or3L^0
-*BL^79/>p*>o>DNQ@"^N6T+EM7CAV^PRWJCgc+C-*o+BsX-L]h!+>9J!$H=_m9P,X6C>p*Dq>9
-I.+#`&Rg+Bot0BmO?H"Hoa?#[JQY+BosmL^8e<>p*>oF(or3L]`g>L^79/>p*>o>DNQ@!F6gP+
-EM7CAV^DNWJCgc+C-*o+BsX-L]C^'>9J!$H=_m5P,X6C>p*Dq?'7!lHS8uLEc#6,D..B+>9I,m
->DN<9#[JQY+BosmL]WA<>p*Dq>9I.+",I4g+C-*o+BsX)L^79/>p*>o>DNH=#[JQY+BosmL^&Y
-@>p*Dq>9I.+#D`Xk+C-*o+BsX-L^79/>p*>o>DNQ@#@/HX+BosmL^8e@>p*Dq>9I.+#`&Xi+C-
-*o+BsX-L]h!+>p*>o>DNQ@"'m$T+BosmL^8e<>p*Dq>9I.+#`&Le+C-*qOu%NL<G$/iD..O'@;
-pR?H[V&KEG]kAE+sQ<P!4[%P'DD<8UZanF(or3Lb4c^HS9PREcYr5DJ`g$+Bosm+Bot0BmO?H$
-'M9D"^N6TL]qj6H=_m=P,V_0>p*>o>9J!$H=_m>P,X6@>p*@-"`nC(AV^\VWEgWP+Bosm+EM7C
-AV^_WWJC^`+BsX*F(or3L^TBF>p*Dq>9I,mF(or3L^B6DL]h!+>DNE'BmO?H$'M8n+C-*o+Bot
-0BmO?H$BhBE"C3-SL]hd5H=_m>P,V_0>p*>o>9J!$H=_m?P,X6?>p*@-"ES:'AV^_WWEgWP+Bo
-sm+EM7CAV^YUWJCX^+BsX(F(or3L^B6D>p*Dq>9I,mF(or3L^K<EL]^p*>DNB&BmO?H$BhAo+C
--*o+Bot0BmO?H$^.KF"'m$RL]_^4H=_m?P,V_0>p*>o>9J!$H=_m=P,X6=>p*@-!cr(%AV^YUW
-EgWP+Bosm+EM7CAV^\VWJCU]+BsX'F(or3L^K<E>p*Dq>9I,mF(or3L^TBFL]Uj)>DN?%BmO?H
-$^.Jp+C-*o+Bot0BmO?H$'M9D!F6gPL]MR2H=_m=P,V_0>p*>o>9J!$H=_m>P,X6<>p*@-!HVt
-$AV^\VWEgWP+Bosm+EM7CAV^_WWJCR\+BsX&F(or3L^TBF>p*Dq>9I,mF(or3L^B6DL]C^'>DN
-9#BmO?H$'M8n+C-*o+Bot0BmO?H$BhBE!*p^OL]DL1H=_m>P,V_0>p*>o>9J!$H=_m?P,X6;>p
-*@-!-;k#AV^_WWEgWP+C1-dI=!VjATDj+Df0E#E$/@-?'7!lP#Z[:EcYr5DJ`g$H[C*fP"BY1F
-s(a<G]T$3L]ET_I?I0MP"B8(Ec#6,NW`s:Ci#7tHZ3\DF,1*CBmO?H#a20,D0C^9P'DD<<+^&h
-D..OH"D2dmCm$r.05Y-=CM%^,@ribsH]eDc!g7;HOq)i%5*C&E!g7;HOq)i%Fbg-_C426TH]eD
-c"-RDIOq)hp!g6HE5)9<(;N_':!g7;HOq)i%Cm$c6!g7;]5)9<(C6AUGOq)i%Cm$c6!g7;]5)9
-<(C6AUR!g7;HOq)hp!g4FaCkr1VC5;tJ!Kr5$!Jgf?C6AUR!g7;HOq(c\1OXU'D..L$Ap&!$F!
-+\6P!5%OL]W`SI?G(eL]W`;P!4[(P#@GDL]W`SI?G(eP&-:@L]W`SP!4[(P%p-\L]W`SI?G(eL
-]W_WP&,pVP%odTL]NZoOo^@?P%p-\L]W`SI?G(GOu%NL<A/2tF),h>D..L$Ap&!$F-:!q$'I*#
-!/LYm@<64*P%'4JP,Wd]D3@)G1G<TRF))n>BmO>5F(or3P&-9fOu%moL]MR2H=_m5P,Wd]C6Cc
-D1Pc$e!HVt$AV^AMWI$:4P!5$bBcq.5D..L$Ap&!$F!,=_99MMq!0TKaBm=\ABcq.5EG]l^98N
-V24d#qpL]MpNL]Djd<Gc/cCER=6C*7M5G)-6Vs,r/#G^Y`GI?I-<@<64*+Di6<@<64IG^Y`G05
-tiNGT_'AH=_m5P,XU#05tiNGp%0BH=_m5P,XU#04\d;M#WVo04Sp:L]NYp05boLL]ESoHZ3nEG
-_c?_Ap]\+I?IQKBm=\AE,TfB+E27?Gp%*DG*5LSs,oNl@s;u:DKTfP#a/)K98EgjF_up?P%p/Z
-P&?EnL]NYAE+sQ<+E27?GT^sDF*SmJD0C^;M#WWnP'AWtF_r7=F_up8Oo^_%I?IQ>Det41P!+.
-F@rH1>!0T,kE,TfB+E27?G_cB`WKK&cHS8lICkr+T1G<]cF*JgHDf^/Z!KmJH1G<]cF*SmIDf^
-1HA8-(I!Ko6XDf^2[!0Ur5Df^1HF(or3P"LmXHS8oDEZen,EesaYCm$S-E,TfC+E27?Gp$X3Ef
-pHd1G<]cF*JgHDf^/Z!g9OG1M1QGD..OH"D2dmCm$r#Df^/Z#*M-4"FDe@Df^.GE,TfBL]N[<O
-u%NL<.0p/I?ITYP%?:XG%#3!F_kl30lAdo06:WDCh8bnOu"b4@ra;[!-;XjCh7sV3/@a$8pc^%
-L]Wa=OuRlQ<0DBPP"Cfm06:WD1Pc$o1Pc-h!cqjlCh8c=L]`g>HS9,s5*@^C@rcBs+DR'4L]`f
-TL]ET$HS8u>@rri7@rcBs+DR'4L]`f<Ou%/hEbo;0C5;qSWJC_@9RCA[@s!ksI?I0b"Hks3Fcl
-lj"FFm>"-Pf^L]ikAF(96,AWgMc8s44A06:WD1E^aKE\iM"Oo^_%I=$$FEbo;0C5;tTWKKo1"H
-lAu@rcBs+DQ]7Oo^_=L]il5P&bn&F(95H+EM%51PdHB!Ko6eP#Qjm<IL$0I?IQXP"9Y(E\S\X@
-raAROq*X204f<8Ch@g+CjRgVH#8^.Ou"b/0o,gm1G<W$L]ESo05`S%!0T,kEbo;0F(or3L]NY>
-OpR:-05P'<FDtZ&EcW@EBmO?R$'I(tFD,B0E+*I$F!,O<H=`6GOu"b4BmO?!A7RD;F(or3L]NY
->Ou%moL]MR2H=_m5P,Wd]Bp(ZC1MpQ@CPVtH!,3QsBmO?R30H7aCkr+TWI&]3D3@)G99MJp!Kp
-QJ4aW>UL]NY>P!4;@L]NZ&I?ITYP":aYEbo<C!0S:W!g9OG9TfcpG%#3!F_kl30lAciDDRFV05
-`S/5*@^>0p2PjDD@;<Ou&8D06;DUEc6.EF*VUFBcqJ2H=`7UF(or3P"_#pD..I#L]E52F*VVCD
-g-Pk5)96&=HYgoP!4[&Oo^_0I=$bNP!4;W<IL$%P'(e]AV^>L)i+QYWKKr<$Y=KiCh@g+Ci1tF
-1E^QkOo[4R1Qjqb1N"q1!AA=FP!5$bP'&Eo@<6O0@;0b'+EV:2F)YQ%EcWmUBPDO,@;0b'+DbJ
--FDtZ&Ec[C"Ou%0)D/sQ=L]ET2L]NZ%H\_ZMH\_]NP#ZRKD/sQ=H]gRK!KpQJ!KoWpP"CgZFD,
-B0E+*I$F-6ooF_QX3P#-LB@<--+CghC,E+*I$F-6TfF`_;2F)YQ%Ec[BFP'(Xt+EM7CAUBS(F(
-or3@:Wn'P$!kJL]`eCL]ET$H\_ce!I^,1I?K49DDIA=Ou&77I?IQXP"76:@<-.>!-<F&H]eDXP
-"Cfm05`ThA79LoLh)ZbF(or3OuSV@OuA+OP,XTEL]rr"Ot;CrP&-:;DD<8O16MZU1QhcV1m.lf
-Oq*X204f<8Ci*lrEc6:XF*VVc5*@]TA8?4!F,0gZ1G<9S@W-@E!0T-o!JgbtBmO?H!KsF/056S
-5Ou"b%CN=*0+Co8.BQG;;H#4[FBmO?H!KsEr+E;7AP"Ur=Ou"b%CLV4(+Co7sDfd+CH#4[<+EM
-7CAV^AMWGucuP"Ur=Ou%NL87ZLVBQG;,CLV4(P$r]JCN=*0L_,_cA8>XmFHQZfDLHkBCLV4(L_
-,_cA8?4!F-6QeDLI[JI?G)'1G<3KF*)J5DfTEB4.=:kOu%moL]M@$F),i[@Yb&JWI$:8P!5$b0
-5Y-=CNFc<+EM7CAKZ&.H=`7UOpR:-L]E53F(or3+EM7CAWgkc!KsF/056S5Ou$r`F),iBD'3O8
-E+sQ<+DI!3D..L$F!,=_950P^P/3<+I?I-5DfT]'FH-K9F_klW4aV$SF),iBD'3D5@;KOuChtb
-G@rHC!P!5$bI=#g>F),iBD'3D5@;Kdp@rcK@F(9-/AWf6?1OYEdF(9-/AKYGnF*)J5DfTEPApZ
-1?ATMs7H#4[@@<64*H#8^#04JL6FDYH-CNa-&+Dm8t04JL6FE:r1Eb-A7@rHC!Ou%NL<.0p#05
-tWMF!+q'F*)JKD3?\eDfT]'FH-K9F_klW4aShoD00r0Ci^_'L/\e?;'gs'I"kiuL.1om5gG*[Q
-\J,*L3LRjEq>$6WePbhL1W)n@i0r:6&')sL),W#'>B2@kCsl$L'M1B!`asa%#,$LL,E=m0PH2*
-0nq^nL*X-\+bPM%g4h-F?'6usARfFbNW`'M85Wr.Ch7d$Cm'd@Fcp3s5*C&O5*C&O1G<?WFEV)
-/+D,J4G%#3.+D#%sA;C>N%q9*kFDYH-CNa-&Oo^_=Ou%N504o'CG%#3.+BsRg7>=*KL/'7R9,r
-[dY(fc@L0q`N>5*baPD3PBL2HmDBZc'QG_U98L3sbkGp.nHhM)-sL((;@$&=6O222_FL)jKQ(i
-4pQ#_jHdL+d.n.T(pWj+];<L-CTO41\^\1G<fpD/!N'>9I.+!*p^OL]N;5>p*@-",I(c+BsX*L
-^&Y?>p*DqF(or3L^TBFL]W`;P"T@rCj'6'P"Uro04o'CG%#20Ao2X5@;L!-F*VV:A;C;M%q9*k
-FDYH-CNa-&Oo^_=Ou%NL<JUX2!G67jD..O'@;qB=L]N[<HS9)r5*@^6DfT]'FDYH*+DI!3HZ3\
-DF-8_6I?I0AD0@%6D00r0CkrR8P,XU^Oq3?LOp$qmI?I0MP"9Y.H=_maP"L'SG%G];@;L!->D@
-NiKE)"+]S$7bR[Jg/!2S(s!!'Y)KE)"m@Y=^]fLLSp!9O`D!!)gCKE)#\G_?%t'O?@l!@en=!!
-+r4KE)$EVM"pM<eH&*!GKT.!!.<1KE)%5`.S*kOl:rn!O&PW!!0<aKE)%s)MA(kdm&Kc!UY#_!
-!2XeKE)&[eV!o((B&md![tX5!!5*OKE)'H$\SK]<%`h(!bu8!!!7:/KE)(4BjHlX06UoIG%#20
-G%G];@;L!-F(or3L_5fLL]il=L^0*BP"UroL]E53G%G]8Bl@m+@;qB=L]N[<HS9)r5*@^FATDj
-+Df0E#E$/kX97(VlG]T$3H[V&KEG]kAG%G];@;L`3Bp,HYDNYNd!KmSKG^Y`HI?I-LP#OP+061
-WA0/%?WDJ`g(EbTbOE+sQ<+E2%>F"_KHG^(?PBmO>DE+sQB+EM7CAM7_.BkM+$+EM7CAV^DNCk
-tWF2D98gA9;K-F(or3L]W`ULe*[e05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-*@<?O(G
-`l$h3IR&#Ou"b2Eas#uAWf$9A1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'
-P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/qrcode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp qrcode 0.0 2015050900 265291 275512
+%%BeginData: 1004 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/qrcode {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /format (full) def % full or micro or any
+ /version (unset) def % 1-40 or M1-M4
+ /eclevel (unset) def % L, M, Q or H
+ /parse false def
+ /parsefnc false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Convert input into bytes accounting for FNC characters
+ /fn1 -1 def
+ /fncvals <<
+ (FNC1) fn1
+ >> def
+ /msg barlen array def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+
+ % If FNC1 in first position then escape % as %%
+ /fnc1first false def
+ msglen 0 gt {
+ msg 0 get fn1 eq {
+ /fnc1first true def
+ /msg [ msg 1 msglen 1 sub getinterval { dup 37 eq {dup} if } forall ] def
+ /msglen msg length def
+ } if
+ } if
+
+ % Default error correction level
+ eclevel (unset) eq {/eclevel format (full) eq {(M)} {(L)} ifelse def} if
+
+ % Convert from input into message bitstream
+ /N 0 def /A 1 def /B 2 def /K 3 def
+
+ /Nexcl <<
+ [
+ 16#30 1 16#39 {} for
+ ] {-1} forall
+ >> def
+
+ /Aexcl <<
+ [
+ 16#20 16#24 16#25 16#2A 16#2B 16#2D 16#2E 16#2F 16#3A
+ 16#41 1 16#5A {} for
+ ] {-1} forall
+ >> def
+
+ /Bexcl <<
+ [
+ 16#00 1 16#1F {} for
+ 16#21 16#22 16#23 16#26 16#27 16#28 16#29 16#2C
+ 16#3B 1 16#40 {} for
+ 16#5B 1 16#7F {} for
+ 16#A0 1 16#DF {} for
+ ] {-1} forall
+ >> def
+
+ /Kexcl <<
+ [
+ 16#81 1 16#9F {} for
+ 16#E0 1 16#EB {} for
+ ] {-1} forall
+ >> def
+
+ /mids [ % N A B K
+ [ (0001) (0010) (0100) (1000) ] % 1-9
+ [ (0001) (0010) (0100) (1000) ] % 10-26
+ [ (0001) (0010) (0100) (1000) ] % 27-40
+ [ () -1 -1 -1 ] % M1
+ [ (0) (1) -1 -1 ] % M2
+ [ (00) (01) (10) (11) ] % M3
+ [ (000) (001) (010) (011) ] % M4
+ ] def
+
+ /cclens [ % N A B K
+ [ 10 9 8 8 ] % 1-9
+ [ 12 11 16 10 ] % 10-26
+ [ 14 13 16 12 ] % 27-40
+ [ 3 -1 -1 -1 ] % M1
+ [ 4 3 -1 -1 ] % M2
+ [ 5 4 4 3 ] % M3
+ [ 6 5 5 4 ] % M4
+ ] def
+
+ /termlens [ 4 4 4 3 5 7 9 ] def
+
+ % Encoding functions
+ /tobin {
+ string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } bind def
+
+ % Alphanumeric character to value map
+ /charmap (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:) def
+ /charvals 44 dict def
+ 0 1 44 {dup charmap exch get exch charvals 3 1 roll put} for
+
+ /encA {
+ /in exch def
+ fnc1first { % FNC1 as %
+ /in [ in { dup -1 eq {pop 37} if } forall ] def
+ } if
+ /out in length 11 mul 2 idiv 1 add string def
+ /k 0 def /m 0 def {
+ k in length eq {exit} if
+ k in length 1 sub lt {
+ charvals in k get get 45 mul charvals in k 1 add get get add 11 tobin
+ /k k 2 add def
+ } { % Final character
+ charvals in k get get 6 tobin
+ /k k 1 add def
+ } ifelse
+ dup out exch m exch putinterval
+ length m add /m exch def
+ } loop
+ out 0 m getinterval
+ } bind def
+
+ /encN {
+ /in exch def
+ /out in length 10 mul 3 idiv 1 add string def
+ /k 0 def /m 0 def {
+ k in length eq {exit} if
+ k in length 2 sub lt {
+ in k 3 getinterval 0 exch {exch 10 mul 48 sub add} forall 10 tobin
+ /k k 3 add def
+ } {
+ k in length 2 sub eq { % Two final digits
+ in k 2 getinterval 0 exch {exch 10 mul 48 sub add} forall 7 tobin
+ /k k 2 add def
+ } { % One final digit
+ in k 1 getinterval 0 exch {exch 10 mul 48 sub add} forall 4 tobin
+ /k k 1 add def
+ } ifelse
+ } ifelse
+ dup out exch m exch putinterval
+ length m add /m exch def
+ } loop
+ out 0 m getinterval
+ } bind def
+
+ /encB {
+ /in exch def
+ fnc1first { % FNC1 as GS
+ /in [ in { dup -1 eq {pop 29} if } forall ] def
+ } if
+ /out in length 8 mul string def
+ 0 1 in length 1 sub {
+ /k exch def
+ in k get cvi 8 tobin
+ out k 8 mul 3 -1 roll putinterval
+ } for
+ out
+ } bind def
+
+ /encK {
+ /in exch def
+ /out in length 2 idiv 13 mul string def
+ /k 0 def /m 0 def {
+ k in length eq {exit} if
+ in k get 256 mul in k 1 add get add
+ dup 16#E040 lt {16#8140} {16#C140} ifelse sub
+ dup -8 bitshift 16#C0 mul exch 16#00FF and add
+ 13 tobin dup out exch m exch putinterval
+ length m add /m exch def
+ /k k 2 add def
+ } loop
+ out
+ } bind def
+
+ /encfuncs [ /encN /encA /encB /encK ] def
+
+ /addtobits {
+ dup bits j 3 -1 roll putinterval
+ length j add /j exch def
+ } bind def
+
+ /numNs [ msglen {0} repeat 0 ] def
+ /numAs [ msglen {0} repeat 0 ] def
+ /numBs [ msglen {0} repeat 0 ] def
+ /numKs [ msglen {0} repeat -1 ] def
+ /nextNs [ msglen {0} repeat 9999 ] def
+ /nextBs [ msglen {0} repeat 9999 ] def
+ /nextAs [ msglen {0} repeat 9999 ] def
+ /nextKs [ msglen {0} repeat 9999 ] def
+ msglen 1 sub -1 0 {
+ /i exch def
+ /barchar msg i get def
+ Kexcl barchar known {
+ nextKs i 0 put
+ numKs i numKs i 1 add get 1 add put
+ } {
+ nextKs i nextKs i 1 add get 1 add put
+ } ifelse
+ Nexcl barchar known {
+ nextNs i 0 put
+ numNs i numNs i 1 add get 1 add put
+ } {
+ nextNs i nextNs i 1 add get 1 add put
+ } ifelse
+ Bexcl barchar known {
+ nextBs i 0 put
+ numBs i numBs i 1 add get 1 add put
+ } {
+ nextBs i nextBs i 1 add get 1 add put
+ } ifelse
+ Aexcl barchar known {
+ nextAs i 0 put
+ numAs i numAs i 1 add get 1 add put
+ } {
+ nextAs i nextAs i 1 add get 1 add put
+ } ifelse
+ } for
+ /numKs [ numKs {1 add 2 idiv} forall ] def
+
+ /KbeforeB {numK exch ver get ge nextBs numK 2 mul i add get 0 eq and} bind def
+ /KbeforeA {numK exch ver get ge nextAs numK 2 mul i add get 0 eq and} bind def
+ /KbeforeN {numK exch ver get ge nextNs numK 2 mul i add get 0 eq and} bind def
+ /KbeforeE {numK exch ver get ge numK 2 mul i add msglen eq and} bind def
+ /AbeforeK {numA exch ver get ge nextKs numA i add get 0 eq and} bind def
+ /AbeforeB {numA exch ver get ge nextBs numA i add get 0 eq and} bind def
+ /AbeforeN {numA exch ver get ge nextNs numA i add get 0 eq and} bind def
+ /AbeforeE {numA exch ver get ge numA i add msglen eq and} bind def
+ /NbeforeK {numN exch ver get ge nextKs numN i add get 0 eq and} bind def
+ /NbeforeB {numN exch ver get ge nextBs numN i add get 0 eq and} bind def
+ /NbeforeA {numN exch ver get ge nextAs numN i add get 0 eq and} bind def
+ /NbeforeE {numN exch ver get ge numN i add msglen eq and} bind def
+
+ % Encode unterminated bitsream for each version group separately
+ /msgbits [-1 -1 -1 -1 -1 -1 -1] def
+ /v1to9 0 def /v10to26 1 def /v27to40 2 def /vM1 3 def /vM2 4 def /vM3 5 def /vM4 6 def
+ /e 10000 def
+ [v1to9 v10to26 v27to40 vM1 vM2 vM3 vM4] {
+ /ver exch def
+
+ % Derive optimal sequence
+ /mode -1 def /seq [] def /i 0 def {
+ i msglen ge {exit} if
+ /numK numKs i get def
+ /numB numBs i get def
+ /numA numAs i get def
+ /numN numNs i get def
+ ver vM1 eq numA 1 ge and {/seq -1 def exit} if
+ ver vM1 eq numB 1 ge and {/seq -1 def exit} if
+ ver vM1 eq numK 1 ge and {/seq -1 def exit} if
+ ver vM2 eq numB 1 ge and {/seq -1 def exit} if
+ ver vM2 eq numK 1 ge and {/seq -1 def exit} if
+ { % common exit
+ mode -1 eq { % Set initial mode
+ [ 1 1 1 e e 1 1] KbeforeA {K exit} if
+ [ 1 1 1 e e 1 1] KbeforeN {K exit} if
+ [ 5 5 6 e e 2 3] KbeforeB {K exit} if
+ [ 1 1 1 e e 1 1] KbeforeE {K exit} if
+ numK 1 ge {B exit} if
+ [ 6 7 8 e e 3 4] AbeforeB {A exit} if
+ [ 1 1 1 e 1 1 1] AbeforeE {A exit} if
+ numA 1 ge {
+ ver vM1 ne ver vM2 ne and {B} {A} ifelse exit
+ } if
+ [ 4 4 5 e e 2 3] NbeforeB {N exit} if
+ [ 1 1 1 e e 1 1] NbeforeB {B exit} if
+ [ 7 8 9 e 3 4 5] NbeforeA {N exit} if
+ [ 1 1 1 e 1 1 1] NbeforeA {A exit} if
+ numN 1 ge {N exit} if
+ B exit
+ } if
+ mode B eq {
+ [ 9 12 13 e e 4 5] KbeforeB {K exit} if
+ [ 9 10 12 e e 4 5] KbeforeA {K exit} if
+ [ 9 10 11 e e 5 6] KbeforeN {K exit} if
+ [ 4 5 6 e e 2 3] KbeforeE {K exit} if
+ [11 12 14 e e 5 7] AbeforeK {A exit} if
+ [11 15 16 e e 6 7] AbeforeB {A exit} if
+ [12 13 15 e e 6 8] AbeforeN {A exit} if
+ [ 6 7 8 e e 3 4] AbeforeE {A exit} if
+ [ 6 7 8 e e 3 4] NbeforeK {N exit} if
+ [ 6 8 9 e e 3 4] NbeforeB {N exit} if
+ [ 6 7 8 e e 3 4] NbeforeA {N exit} if
+ [ 3 4 5 e e 2 3] NbeforeE {N exit} if
+ B exit
+ } if
+ mode A eq {
+ numK 1 ge {K exit} if
+ numB 1 ge {B exit} if
+ [13 15 17 e 5 7 9] NbeforeA {N exit} if
+ [13 17 18 e e 7 9] NbeforeB {N exit} if
+ [ 7 8 9 e 3 4 5] NbeforeE {N exit} if
+ A exit
+ } if
+ mode N eq {
+ numK 1 ge {K exit} if
+ numB 1 ge {B exit} if
+ numA 1 ge {A exit} if
+ N exit
+ } if
+ mode K eq {
+ numB 1 ge {B exit} if
+ numA 1 ge {A exit} if
+ numN 1 ge {N exit} if
+ K exit
+ } if
+ } loop
+ dup K eq fnc1first and {pop B} if % No kanji with fnc1first
+ dup mode eq { % Same mode encode directly
+ pop
+ /dat msg i mode K eq {2} {1} ifelse getinterval def
+ /seq [
+ seq aload pop
+ [ exch aload pop dat aload pop ]
+ ] def
+ } { % Change mode
+ /mode exch def
+ mode K eq {K msg i numK 2 mul getinterval} if
+ mode B eq {B msg i numB getinterval} if
+ mode A eq {A msg i numA getinterval} if
+ mode N eq {N msg i numN getinterval} if
+ /dat exch def /sw exch def
+ /seq [ seq aload pop sw dat ] def
+ } ifelse
+ /i i dat length add def
+ } loop
+
+ % Encode the sequence
+ { % common exit
+ seq -1 eq {exit} if % Sequence not available
+ /bits 23648 string def
+ /j 0 def
+ fnc1first {(0101) addtobits} if
+ /abort false def
+ 0 2 seq length 1 sub {
+ /i exch def
+ /mode seq i get def
+ mids ver get mode get addtobits
+ /cclen cclens ver get mode get def
+ /chars seq i 1 add get def
+ chars length 2 cclen exp cvi ge { % Too many characters for cc indicator
+ /abort true def exit
+ } if
+ chars length mode K eq {2 idiv} if cclen tobin addtobits
+ chars encfuncs mode get load exec addtobits
+ } for
+ abort {exit} if
+ /bits bits 0 j getinterval def
+ msgbits ver bits put
+ exit
+ } loop
+ } forall
+
+ % Lookup the most appropriate symbol specification
+ /metrics [
+ % format vers vergrp size align modules error codewords error correction blocks
+ % L M Q H L1 L2 M1 M2 Q1 Q2 H1 H2
+ [ (micro) (M1) vM1 11 98 99 36 [ 2 99 99 99 ] [ 1 0 -1 -1 -1 -1 -1 -1 ] ]
+ [ (micro) (M2) vM2 13 98 99 80 [ 5 6 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
+ [ (micro) (M3) vM3 15 98 99 132 [ 6 8 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
+ [ (micro) (M4) vM4 17 98 99 192 [ 8 10 14 99 ] [ 1 0 1 0 1 0 -1 -1 ] ]
+ [ (full) (1) v1to9 21 98 99 208 [ 7 10 13 17 ] [ 1 0 1 0 1 0 1 0 ] ]
+ [ (full) (2) v1to9 25 18 99 359 [ 10 16 22 28 ] [ 1 0 1 0 1 0 1 0 ] ]
+ [ (full) (3) v1to9 29 22 99 567 [ 15 26 36 44 ] [ 1 0 1 0 2 0 2 0 ] ]
+ [ (full) (4) v1to9 33 26 99 807 [ 20 36 52 64 ] [ 1 0 2 0 2 0 4 0 ] ]
+ [ (full) (5) v1to9 37 30 99 1079 [ 26 48 72 88 ] [ 1 0 2 0 2 2 2 2 ] ]
+ [ (full) (6) v1to9 41 34 99 1383 [ 36 64 96 112 ] [ 2 0 4 0 4 0 4 0 ] ]
+ [ (full) (7) v1to9 45 22 38 1568 [ 40 72 108 130 ] [ 2 0 4 0 2 4 4 1 ] ]
+ [ (full) (8) v1to9 49 24 42 1936 [ 48 88 132 156 ] [ 2 0 2 2 4 2 4 2 ] ]
+ [ (full) (9) v1to9 53 26 46 2336 [ 60 110 160 192 ] [ 2 0 3 2 4 4 4 4 ] ]
+ [ (full) (10) v10to26 57 28 50 2768 [ 72 130 192 224 ] [ 2 2 4 1 6 2 6 2 ] ]
+ [ (full) (11) v10to26 61 30 54 3232 [ 80 150 224 264 ] [ 4 0 1 4 4 4 3 8 ] ]
+ [ (full) (12) v10to26 65 32 58 3728 [ 96 176 260 308 ] [ 2 2 6 2 4 6 7 4 ] ]
+ [ (full) (13) v10to26 69 34 62 4256 [ 104 198 288 352 ] [ 4 0 8 1 8 4 12 4 ] ]
+ [ (full) (14) v10to26 73 26 46 4651 [ 120 216 320 384 ] [ 3 1 4 5 11 5 11 5 ] ]
+ [ (full) (15) v10to26 77 26 48 5243 [ 132 240 360 432 ] [ 5 1 5 5 5 7 11 7 ] ]
+ [ (full) (16) v10to26 81 26 50 5867 [ 144 280 408 480 ] [ 5 1 7 3 15 2 3 13 ] ]
+ [ (full) (17) v10to26 85 30 54 6523 [ 168 308 448 532 ] [ 1 5 10 1 1 15 2 17 ] ]
+ [ (full) (18) v10to26 89 30 56 7211 [ 180 338 504 588 ] [ 5 1 9 4 17 1 2 19 ] ]
+ [ (full) (19) v10to26 93 30 58 7931 [ 196 364 546 650 ] [ 3 4 3 11 17 4 9 16 ] ]
+ [ (full) (20) v10to26 97 34 62 8683 [ 224 416 600 700 ] [ 3 5 3 13 15 5 15 10 ] ]
+ [ (full) (21) v10to26 101 28 50 9252 [ 224 442 644 750 ] [ 4 4 17 0 17 6 19 6 ] ]
+ [ (full) (22) v10to26 105 26 50 10068 [ 252 476 690 816 ] [ 2 7 17 0 7 16 34 0 ] ]
+ [ (full) (23) v10to26 109 30 54 10916 [ 270 504 750 900 ] [ 4 5 4 14 11 14 16 14 ] ]
+ [ (full) (24) v10to26 113 28 54 11796 [ 300 560 810 960 ] [ 6 4 6 14 11 16 30 2 ] ]
+ [ (full) (25) v10to26 117 32 58 12708 [ 312 588 870 1050 ] [ 8 4 8 13 7 22 22 13 ] ]
+ [ (full) (26) v10to26 121 30 58 13652 [ 336 644 952 1110 ] [ 10 2 19 4 28 6 33 4 ] ]
+ [ (full) (27) v27to40 125 34 62 14628 [ 360 700 1020 1200 ] [ 8 4 22 3 8 26 12 28 ] ]
+ [ (full) (28) v27to40 129 26 50 15371 [ 390 728 1050 1260 ] [ 3 10 3 23 4 31 11 31 ] ]
+ [ (full) (29) v27to40 133 30 54 16411 [ 420 784 1140 1350 ] [ 7 7 21 7 1 37 19 26 ] ]
+ [ (full) (30) v27to40 137 26 52 17483 [ 450 812 1200 1440 ] [ 5 10 19 10 15 25 23 25 ] ]
+ [ (full) (31) v27to40 141 30 56 18587 [ 480 868 1290 1530 ] [ 13 3 2 29 42 1 23 28 ] ]
+ [ (full) (32) v27to40 145 34 60 19723 [ 510 924 1350 1620 ] [ 17 0 10 23 10 35 19 35 ] ]
+ [ (full) (33) v27to40 149 30 58 20891 [ 540 980 1440 1710 ] [ 17 1 14 21 29 19 11 46 ] ]
+ [ (full) (34) v27to40 153 34 62 22091 [ 570 1036 1530 1800 ] [ 13 6 14 23 44 7 59 1 ] ]
+ [ (full) (35) v27to40 157 30 54 23008 [ 570 1064 1590 1890 ] [ 12 7 12 26 39 14 22 41 ] ]
+ [ (full) (36) v27to40 161 24 50 24272 [ 600 1120 1680 1980 ] [ 6 14 6 34 46 10 2 64 ] ]
+ [ (full) (37) v27to40 165 28 54 25568 [ 630 1204 1770 2100 ] [ 17 4 29 14 49 10 24 46 ] ]
+ [ (full) (38) v27to40 169 32 58 26896 [ 660 1260 1860 2220 ] [ 4 18 13 32 48 14 42 32 ] ]
+ [ (full) (39) v27to40 173 26 54 28256 [ 720 1316 1950 2310 ] [ 20 4 40 7 43 22 10 67 ] ]
+ [ (full) (40) v27to40 177 30 58 29648 [ 750 1372 2040 2430 ] [ 19 6 18 31 34 34 20 61 ] ]
+ ] def
+ /eclval (LMQH) eclevel search pop length exch pop exch pop def
+ 0 1 43 {
+ /i exch def
+ /m metrics i get def
+ /frmt m 0 get def % Format of the symbol
+ /vers m 1 get def % Version of symbol
+ /vergrp m 2 get def % Version group
+ /size m 3 get def % Length of side
+ /asp2 m 4 get def % Position of second alignment symbol
+ /asp3 m 5 get def % Position of third alignment symbol
+ /nmod m 6 get def % Number of modules
+ /ncws nmod 8 idiv def % Total number of codewords
+ /rbit nmod 8 mod def % Number of remainder bits
+ /lc4b false def % Last data codeword is 4 bits long
+ size 11 eq size 15 eq or { % Adjustments for M1 and M3 symbols
+ /ncws ncws 1 add def
+ /rbit 0 def
+ /lc4b true def
+ } if
+ /ecws m 7 get eclval get def % Number of error correction codewords
+ /dcws ncws ecws sub def % Number of data codewords
+ /dmod dcws 8 mul lc4b {4} {0} ifelse sub def % Number of data modules
+ /ecb1 m 8 get eclval 2 mul get def % First error correction blocks
+ /ecb2 m 8 get eclval 2 mul 1 add get def % Second error correction blocks
+ /okay true def
+ format (any) ne format frmt ne and {/okay false def} if % The format must match that supplied
+ frmt (micro) eq fnc1first and {/okay false def} if
+ version (unset) ne version vers ne and {/okay false def} if % The version must match that supplied
+ ecb1 -1 eq ecb2 -1 eq or {/okay false def} if % Error correction level must be valid
+ /verbits msgbits vergrp get def
+ verbits -1 eq { % Bitstream must be available
+ /okay false def
+ } {
+ verbits length dmod gt {/okay false def} if % and fit into data modules
+ } ifelse
+ /term (000000000) 0 termlens vergrp get getinterval def
+ okay {exit} if
+ } for
+
+ okay not {
+ /bwipp.qrcodeNoValidSymbol (No valid symbol available) //raiseerror exec
+ } if
+
+ /format frmt def
+ /version vers def
+ /msgbits verbits def
+ /dcpb dcws ecb1 ecb2 add idiv def % Base data codewords per block
+ /ecpb ncws ecb1 ecb2 add idiv dcpb sub def % Error correction codewords per block
+
+ % Complete the message bits by adding the terminator, truncated if neccessary
+ /term term 0 dmod msgbits length sub term length 2 copy gt {exch} if pop getinterval def
+ msgbits length term length add string
+ dup 0 msgbits putinterval
+ dup msgbits length term putinterval
+ /msgbits exch def
+
+ % Expand the message bits by adding padding as necessary
+ /pad dmod string def
+ 0 1 pad length 1 sub {pad exch 48 put} for
+ pad 0 msgbits putinterval
+ /padstrs [ (11101100) (00010001) ] def
+ /padnum 0 def
+ msgbits length 8 div ceiling 8 mul cvi 8 dmod lc4b {5} {1} ifelse sub {
+ pad exch padstrs padnum get putinterval
+ /padnum padnum 1 add 2 mod def
+ } for
+
+ % Evaluate the padded message into codewords
+ /cws dcws array def
+ 0 1 cws length 1 sub {
+ /c exch def
+ /bpcw 8 def
+ lc4b c cws length 1 sub eq and {/bpcw 4 def} if
+ /cwb pad c 8 mul bpcw getinterval def
+ /cw 0 def
+ 0 1 bpcw 1 sub {
+ /i exch def
+ /cw cw 2 bpcw i sub 1 sub exp cvi cwb i get 48 sub mul add def
+ } for
+ cws c cw put
+ } for
+
+ % Calculate the log and anti-log tables
+ /rsalog [ 1 255 { dup 2 mul dup 256 ge {285 xor} if } repeat ] def
+ /rslog 256 array def
+ 1 1 255 {dup rsalog exch get exch rslog 3 1 roll put} for
+
+ % Function to calculate the product in the field
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add 255 mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } bind def
+
+ % Generate the coefficients for the Reed-Solomon algorithm
+ /coeffs [ 1 ecpb {0} repeat ] def
+ 0 1 ecpb 1 sub {
+ /i exch def
+ coeffs i 1 add coeffs i get put
+ i -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+ /coeffs coeffs 0 coeffs length 1 sub getinterval def
+
+ % Reed-Solomon algorithm to derive the error correction codewords
+ /rscodes {
+ /rscws exch def
+ /rsnd rscws length def
+ /rscws [ rscws {} forall ecpb {0} repeat ] def
+ 0 1 rsnd 1 sub {
+ /m exch def
+ /k rscws m get def
+ 0 1 ecpb 1 sub {
+ /j exch def
+ rscws m j add 1 add coeffs ecpb j sub 1 sub get k rsprod rscws m j add 1 add get xor put
+ } for
+ } for
+ rscws rsnd ecpb getinterval
+ } bind def
+
+ % Divide codewords into two groups of blocks and calculate the error correction codewords
+ /dcwsb ecb1 ecb2 add array def
+ /ecwsb ecb1 ecb2 add array def
+ 0 1 ecb1 1 sub { % First group of blocks has smaller number of data codewords
+ /i exch def
+ dcwsb i cws i dcpb mul dcpb getinterval put
+ ecwsb i dcwsb i get rscodes put
+ } for
+ 0 1 ecb2 1 sub { % Second group of blocks has larger number of data codewords
+ /i exch def
+ dcwsb ecb1 i add cws ecb1 dcpb mul i dcpb 1 add mul add dcpb 1 add getinterval put
+ ecwsb ecb1 i add dcwsb ecb1 i add get rscodes put
+ } for
+
+ % Reassemble the codewords
+ /cws ncws array def
+ /cw 0 def
+ 0 1 dcpb { % Interleave the data codeword blocks
+ /i exch def
+ 0 1 ecb1 ecb2 add 1 sub {
+ /j exch def
+ i dcwsb j get length lt { % Ignore the end of short blocks
+ cws cw dcwsb j get i get put
+ /cw cw 1 add def
+ } if
+ } for
+ } for
+ 0 1 ecpb 1 sub { % Interleave the error codeword blocks
+ /i exch def
+ 0 1 ecb1 ecb2 add 1 sub {
+ /j exch def
+ cws cw ecwsb j get i get put
+ /cw cw 1 add def
+ } for
+ } for
+
+ % Extend codewords by one if there are remainder bits
+ rbit 0 gt {
+ /pad cws length 1 add array def
+ pad 0 cws putinterval
+ pad pad length 1 sub 0 put
+ /cws pad def
+ } if
+
+ % Fixups for the short final data byte in M1 and M3 symbols
+ lc4b {
+ dcws 1 sub 1 ncws 2 sub {
+ /i exch def
+ cws i cws i get 15 and 4 bitshift put
+ cws i cws i 1 add get -4 bitshift 15 and cws i get or put
+ } for
+ cws ncws 1 sub cws ncws 1 sub get 15 and 4 bitshift put
+ } if
+
+ % Create the bitmap
+ /pixs [ size size mul {-1} repeat ] def
+ /qmv {size mul add} bind def
+
+ % Finder patterns
+ /fpat [
+ [ 1 1 1 1 1 1 1 0 ]
+ [ 1 0 0 0 0 0 1 0 ]
+ [ 1 0 1 1 1 0 1 0 ]
+ [ 1 0 1 1 1 0 1 0 ]
+ [ 1 0 1 1 1 0 1 0 ]
+ [ 1 0 0 0 0 0 1 0 ]
+ [ 1 1 1 1 1 1 1 0 ]
+ [ 0 0 0 0 0 0 0 0 ]
+ ] def
+ 0 1 fpat length 1 sub {
+ /y exch def
+ 0 1 fpat 0 get length 1 sub {
+ /x exch def
+ /fpb fpat y get x get def
+ pixs x y qmv fpb put
+ format (full) eq {
+ pixs size x sub 1 sub y qmv fpb put
+ pixs x size y sub 1 sub qmv fpb put
+ } if
+ } for
+ } for
+
+ % Alignment patterns
+ /algnpat [
+ [ 1 1 1 1 1 ]
+ [ 1 0 0 0 1 ]
+ [ 1 0 1 0 1 ]
+ [ 1 0 0 0 1 ]
+ [ 1 1 1 1 1 ]
+ ] def
+ /putalgnpat {
+ /py exch def
+ /px exch def
+ 0 1 4 {
+ /pb exch def
+ 0 1 4 {
+ /pa exch def
+ pixs px pa add py pb add qmv algnpat pb get pa get put
+ } for
+ } for
+ } bind def
+ asp2 2 sub asp3 asp2 sub size 13 sub {
+ /i exch def
+ i 4 putalgnpat
+ 4 i putalgnpat
+ } for
+ asp2 2 sub asp3 asp2 sub size 9 sub {
+ /x exch def
+ asp2 2 sub asp3 asp2 sub size 9 sub {
+ /y exch def
+ x y putalgnpat
+ } for
+ } for
+
+ % Timing patterns
+ format (full) eq {
+ 8 1 size 9 sub {
+ /i exch def
+ pixs i 6 qmv i 1 add 2 mod put
+ pixs 6 i qmv i 1 add 2 mod put
+ } for
+ } {
+ 8 1 size 1 sub {
+ /i exch def
+ pixs i 0 qmv i 1 add 2 mod put
+ pixs 0 i qmv i 1 add 2 mod put
+ } for
+ } ifelse
+
+ % Format information modules
+ format (full) eq {
+ /formatmap [
+ [ [ 0 8 ] [ 8 size 1 sub ] ] [ [ 1 8 ] [ 8 size 2 sub ] ] [ [ 2 8 ] [ 8 size 3 sub ] ]
+ [ [ 3 8 ] [ 8 size 4 sub ] ] [ [ 4 8 ] [ 8 size 5 sub ] ] [ [ 5 8 ] [ 8 size 6 sub ] ]
+ [ [ 7 8 ] [ 8 size 7 sub ] ] [ [ 8 8 ] [ size 8 sub 8 ] ] [ [ 8 7 ] [ size 7 sub 8 ] ]
+ [ [ 8 5 ] [ size 6 sub 8 ] ] [ [ 8 4 ] [ size 5 sub 8 ] ] [ [ 8 3 ] [ size 4 sub 8 ] ]
+ [ [ 8 2 ] [ size 3 sub 8 ] ] [ [ 8 1 ] [ size 2 sub 8 ] ] [ [ 8 0 ] [ size 1 sub 8 ] ]
+ ] def
+ } {
+ /formatmap [
+ [ [ 1 8 ] ] [ [ 2 8 ] ] [ [ 3 8 ] ] [ [ 4 8 ] ] [ [ 5 8 ] ]
+ [ [ 6 8 ] ] [ [ 7 8 ] ] [ [ 8 8 ] ] [ [ 8 7 ] ] [ [ 8 6 ] ]
+ [ [ 8 5 ] ] [ [ 8 4 ] ] [ [ 8 3 ] ] [ [ 8 2 ] ] [ [ 8 1 ] ]
+ ] def
+ } ifelse
+ formatmap {
+ { {} forall qmv pixs exch 0 put } forall
+ } forall
+
+ % Version information modules
+ size 45 ge {
+ /versionmap [
+ [ [ size 9 sub 5 ] [ 5 size 9 sub ] ] [ [ size 10 sub 5 ] [ 5 size 10 sub ] ]
+ [ [ size 11 sub 5 ] [ 5 size 11 sub ] ] [ [ size 9 sub 4 ] [ 4 size 9 sub ] ]
+ [ [ size 10 sub 4 ] [ 4 size 10 sub ] ] [ [ size 11 sub 4 ] [ 4 size 11 sub ] ]
+ [ [ size 9 sub 3 ] [ 3 size 9 sub ] ] [ [ size 10 sub 3 ] [ 3 size 10 sub ] ]
+ [ [ size 11 sub 3 ] [ 3 size 11 sub ] ] [ [ size 9 sub 2 ] [ 2 size 9 sub ] ]
+ [ [ size 10 sub 2 ] [ 2 size 10 sub ] ] [ [ size 11 sub 2 ] [ 2 size 11 sub ] ]
+ [ [ size 9 sub 1 ] [ 1 size 9 sub ] ] [ [ size 10 sub 1 ] [ 1 size 10 sub ] ]
+ [ [ size 11 sub 1 ] [ 1 size 11 sub ] ] [ [ size 9 sub 0 ] [ 0 size 9 sub ] ]
+ [ [ size 10 sub 0 ] [ 0 size 10 sub ] ] [ [ size 11 sub 0 ] [ 0 size 11 sub ] ]
+ ] def
+ } {
+ /versionmap [] def
+ } ifelse
+ versionmap {
+ { {} forall qmv pixs exch 0 put } forall
+ } forall
+
+ % Solitary dark module in full symbols
+ format (full) eq {
+ pixs 8 size 8 sub qmv 1 put
+ } if
+
+ % Calculate the mask patterns
+ format (full) eq {
+ /maskfuncs [
+ {add 2 mod} bind
+ {exch pop 2 mod} bind
+ {pop 3 mod} bind
+ {add 3 mod} bind
+ {2 idiv exch 3 idiv add 2 mod} bind
+ {mul dup 2 mod exch 3 mod add} bind
+ {mul dup 2 mod exch 3 mod add 2 mod} bind
+ {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod} bind
+ ] def
+ } {
+ /maskfuncs [
+ {exch pop 2 mod} bind
+ {2 idiv exch 3 idiv add 2 mod} bind
+ {mul dup 2 mod exch 3 mod add 2 mod} bind
+ {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod} bind
+ ] def
+ } ifelse
+ /masks maskfuncs length array def
+ 0 1 masks length 1 sub {
+ /m exch def
+ /mask size size mul array def
+ 0 1 size 1 sub {
+ /j exch def
+ 0 1 size 1 sub {
+ /i exch def
+ i j maskfuncs m get exec 0 eq
+ pixs i j qmv get -1 eq and {1} {0} ifelse
+ mask i j qmv 3 -1 roll put
+ } for
+ } for
+ masks m mask put
+ } for
+
+ % Walk the symbol placing the bitstream
+ /posx size 1 sub def
+ /posy size 1 sub def
+ /dir -1 def % -1 is upwards, 1 is downwards
+ /col 1 def % 0 is left bit, 1 is right bit
+ /num 0 def
+ { % loop
+ posx 0 lt {exit} if
+ pixs posx posy qmv get -1 eq {
+ cws num 8 idiv get 7 num 8 mod sub neg bitshift 1 and
+ pixs posx posy qmv 3 -1 roll put
+ /num num 1 add def
+ } if
+ col 1 eq {
+ /col 0 def
+ /posx posx 1 sub def
+ } {
+ /col 1 def
+ /posx posx 1 add def
+ /posy posy dir add def
+ posy 0 lt posy size ge or { % Turn around at top and bottom
+ /dir dir -1 mul def
+ /posy posy dir add def
+ /posx posx 2 sub def
+ % Hop over the timing pattern in full size symbols
+ format (full) eq posx 6 eq and {/posx posx 1 sub def} if
+ } if
+ } ifelse
+ } loop
+
+ % Evaluate runlength encoded rows or columns in full symbols
+ /evalfulln1n3 {
+ /scrle exch def
+ % Detect runs of 5 or more like modules
+ /scr1 0 scrle { dup 5 ge {add 2 sub dup} if pop } forall def
+ % Detect 1:1:3:1:1 ratio next to 4 modules of whitespace
+ /scr3 0 def
+ 3 2 scrle length 3 sub { % Scan odd (dark) runs within bounds
+ /j exch def
+ scrle j get 3 mod 0 eq { % Multiple of 3 black modules
+ /fact scrle j get 3 idiv def
+ scrle j 2 sub 5 getinterval {fact eq} forall and exch pop and and {
+ j 3 eq j 4 add scrle length ge or { % At either extent of run
+ /scr3 scr3 40 add def
+ } { % Bounded by dark modules
+ scrle j 3 sub get 4 ge scrle j 3 add get 4 ge or {
+ /scr3 scr3 40 add def
+ } if
+ } ifelse
+ } if
+ } if
+ } for
+ scr1 scr3
+ } bind def
+
+ % Evaluation algorithm for full symbols
+ /evalfull {
+ /sym exch def
+
+ /n1 0 def /n2 0 def /n3 0 def
+ /rle size 1 add array def
+ /lastpairs size array def
+ /thispairs size array def
+ /sizeadd1 size 1 add def
+ 0 1 size 1 sub {
+ /i exch def
+
+ % Runlength encode (light, dark, light, ...) and evaluate each column
+ mark 0 0
+ i size dup dup mul 1 sub {
+ sym exch get exch 1 index eq {exch 1 add exch} {1 exch} ifelse
+ } for
+ pop
+ rle 0 counttomark 2 sub getinterval astore
+ evalfulln1n3 n3 add /n3 exch def n1 add /n1 exch def
+ pop
+
+ % Runlength encode (light, dark, light, ...) and evaluate each row
+ /symrow sym i size mul size getinterval def
+ mark 0 0
+ symrow {
+ exch 1 index eq {exch 1 add exch} {1 exch} ifelse
+ } forall
+ pop
+ rle 0 counttomark 2 sub getinterval astore
+ evalfulln1n3 n3 add /n3 exch def n1 add /n1 exch def
+ pop
+
+ % Count and score same coloured blocks
+ /lastpairs thispairs /thispairs lastpairs def def
+ symrow 0 get 1 eq {0} {1} ifelse
+ symrow {exch 1 index add exch} forall
+ pop
+ thispairs astore pop
+ i 0 gt {
+ mark
+ lastpairs aload pop thispairs aload pop
+ n2 size { exch sizeadd1 index add 3 and 0 eq {3 add} if } repeat
+ /n2 exch def
+ cleartomark
+ } if
+
+ } for
+
+ % Score dark/light imbalance
+ /dark 0 sym {add} forall def
+ /n4 dark 100 mul size dup mul div 50 sub abs 5 div cvi 10 mul def
+
+ n1 n2 add n3 add n4 add
+ } bind def
+
+ % Evaluation algorithm for micro symbols
+ /evalmicro {
+ /sym exch def
+ /dkrhs 0 def /dkbot 0 def
+ 1 1 size 1 sub {
+ /i exch def
+ /dkrhs dkrhs sym size 1 sub i qmv get add def
+ /dkbot dkbot sym i size 1 sub qmv get add def
+ } for
+ dkrhs dkbot le {
+ dkrhs 16 mul dkbot add neg
+ } {
+ dkbot 16 mul dkrhs add neg
+ } ifelse
+ } bind def
+
+ % Evaluate the masked symbols to find the most suitable
+ /bestscore 999999999 def
+ 0 1 masks length 1 sub {
+ /m exch def
+ /masksym size size mul array def
+ 0 1 size size mul 1 sub {
+ /i exch def
+ masksym i pixs i get masks m get i get xor put
+ } for
+ format (full) eq {
+ masksym evalfull /score exch def
+ } {
+ masksym evalmicro /score exch def
+ } ifelse
+ score bestscore lt {
+ /bestsym masksym def
+ /bestmaskval m def
+ /bestscore score def
+ } if
+ } for
+ /pixs bestsym def
+
+ % Add the format information
+ format (full) eq {
+ /fmtvals [
+ 16#5412 16#5125 16#5e7c 16#5b4b 16#45f9 16#40ce 16#4f97 16#4aa0
+ 16#77c4 16#72f3 16#7daa 16#789d 16#662f 16#6318 16#6c41 16#6976
+ 16#1689 16#13be 16#1ce7 16#19d0 16#0762 16#0255 16#0d0c 16#083b
+ 16#355f 16#3068 16#3f31 16#3a06 16#24b4 16#2183 16#2eda 16#2bed
+ ] def
+ /ecid (MLHQ) eclevel search pop length exch pop exch pop def
+ /fmtval fmtvals ecid 3 bitshift bestmaskval add get def
+ } {
+ /fmtvals [
+ 16#4445 16#4172 16#4e2b 16#4b1c 16#55ae 16#5099 16#5fc0 16#5af7
+ 16#6793 16#62a4 16#6dfd 16#68ca 16#7678 16#734f 16#7c16 16#7921
+ 16#06de 16#03e9 16#0cb0 16#0987 16#1735 16#1202 16#1d5b 16#186c
+ 16#2508 16#203f 16#2f66 16#2a51 16#34e3 16#31d4 16#3e8d 16#3bba
+ ] def
+ /symid [ [0] [1 2] [3 4] [5 6 7] ] size 11 sub 2 idiv get eclval get def
+ /fmtval fmtvals symid 2 bitshift bestmaskval add get def
+ } ifelse
+ 0 1 formatmap length 1 sub {
+ /i exch def
+ formatmap i get {
+ pixs exch {} forall qmv fmtval 14 i sub neg bitshift 1 and put
+ } forall
+ } for
+
+ % Add the version information
+ size 45 ge {
+ /vervals [
+ 16#07c94 16#085bc 16#09a99 16#0a4d3 16#0bbf6 16#0c762 16#0d847
+ 16#0e60d 16#0f928 16#10b78 16#1145d 16#12a17 16#13532 16#149a6
+ 16#15683 16#168c9 16#177ec 16#18ec4 16#191e1 16#1afab 16#1b08e
+ 16#1cc1a 16#1d33f 16#1ed75 16#1f250 16#209d5 16#216fd 16#228ba
+ 16#2379f 16#24b0b 16#2542e 16#26a64 16#27541 16#28c69
+ ] def
+ /verval vervals size 17 sub 4 idiv 7 sub get def
+ 0 1 versionmap length 1 sub {
+ /i exch def
+ versionmap i get {
+ pixs exch {} forall qmv verval 17 i sub neg bitshift 1 and put
+ } forall
+ } for
+ } if
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx size
+ /pixy size
+ /height size 2 mul 72 div
+ /width size 2 mul 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/qrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER qrcode--
+% --BEGIN ENCODER microqrcode--
+% --REQUIRES preamble raiseerror renmatrix qrcode--
+% --DESC: Micro QR Code
+% --EXAM: 1234
+% --EXOP:
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp microqrcode 0.0 2015050900 60576 60353
+%%BeginData: 43 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /qrcode dup /uk.co.terryburton.bwipp findresource put
+begin
+/microqrcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Get the result of encoding with qrcode with format=micro
+ options (dontdraw) true put
+ options (format) (micro) put
+
+ /args barcode options //qrcode exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/microqrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER microqrcode--
+
% --BEGIN ENCODER maxicode--
% --REQUIRES preamble raiseerror renmaximatrix--
% --DESC: MaxiCode
% --EXAM: [)>^03001^02996152382802^029840^029001^0291Z00004951^029UPSN^02906X610^029159^0291234567^0291/1^029^029Y^029634 ALPHA DR^029PITTSBURGH^029PA^029^004
% --EXOP: mode=2 parse
% --RNDR: renmaximatrix
-%%BeginResource: uk.co.terryburton.bwipp maxicode 0.0 0 0 0
-%%BeginData: 157 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nG \M#'F E2)?
-OuP+;CG'+8/p(ZF Ed;,: Ecc 5;/ n0$= E, ^uo P'E-!0 5Y -BBk)' lAU
-B4IOu8C305kfOBl @m1P! 5$b 04J @ 1@r Gmh P!5 $b04]! =F C]E#G9 CL+
-Cia0N1G<T`A7^Ss Ou"b4 @;U i#O u" b1 @<- F#+ D,%uF( LL jDfBf4 Df0
-WZY:js=EbTE(FEq h:P! +/J !K o= '%< $3- Bl@ m1H]
-kFA@;L!rP!+/T5^ eepO u SV 6P ,4< rNW D;+N HB2`A
-Wf3'OtDh\P')pOO u%N5Ot Ccr F _-^ lI ?ITY P%B dtOuY16E-, f4DKCt)Ou%N
-L<,Z_tBl@m1H]g1 5P"@<D De* E %D/W rrOt ;bP 06:Q=+ELt. Ot;bPE+*d.A
-U?(IF(ZV)@<,jrA 7^p5P, 4<t 05?: COu$ QUE as#uAUBF<? BU:pOuR<"B9
-GGnP!5%SP%&0h!J gc>!A A2N5 *@^bF cn_? !/L `?9TgrDF(^ Y"C5;nRWKKH
-.G`k%L@Yb,LWJCY >5*AT fH]g@ *F(^Y "C6 CcDH'2WOOo [4NP!5$b04J
-@1@rGmh+Dl14L]D 1Q9Th2p 5^eeqI ?J/iP #O) OF(ZV)@<,j rA7^o[05YcC
-Ch7K,D0'?Q@ZiNaDe*F8!g5]`De*F8"-Pg1EdMYEB8?PD#Ehc@#?rW@*\];hP!+.FAnbcuD0'?
-G!/LrE9Th1bD0'>4D0'?G$#O`rCh7L?$'M9N9Th2[HS8uFA<$YQ1OYEdD0'?M!?I>_P'&Es@rG
-mhP!5$bP')cc*KlDFFY@67De*FB5*@^bFcHJCP)YWI06:WAA7^ofOu&8D05YcCP!5$bD0'?Q@V
-0=bP%'RTP,4=$L]D%$A<M5$3+cl8P%&9LB9INnD0'?Q5*@]TD0'?+ASrW-F(^YFOu%NL<%hfmB
-o)eP1G<]UA;L5J1G<WeM#EJm05P'Qr/rihCgr4tOu"b4@>OcC1G<fYM#!2i06:WZpl[EdF(C+$
-Ou"b4AVg&C1G<fX15PUd1G<fX1Pk[d1G<Q[@u0`>1G<Q[A;Kf>1G<Q[AVfl>1G<]X15PF_1G<]
-X1PkL_1G<6O@<-3nE-!.++BsX2NWEOB!5O<hi.qA=+Bsj,6&ktSL&f&E!9&_7>p*@3!CDeI@YO
-m"L&g4h!aQpQNWDM-!Fpia_hJ0OL]^p*>E/_PNWE[F!5sTljG3qE+Bsj,7?.C[L&f2I!9K"?>p
-*@3!Ci(MAqg<*L&g@l#$i?UNWDY1!G@,ea+aTWL^.3.>E/_TNWEgJ!6Blpk_KLM+Bsj,8WEgcL
-&f>M!9o:G>p*@3!D8@QC5)`2L&gLp$=+cYNWDe5!GdDibD$#_L^RK2>E/_XNWEsN!6g/tm"c'U
-+Bsj,9o]6kL&fJQ!:>RO>p*@3!D\XUDMA/:L&gXt%UC2]NWDq9!H3\mc\;GgL_!c6>E/_\NWF*
-R!76H#n;%W]+Bsj,;2tZsL&fVU!:bjW>p*@3!E+pYEeXSBL&ge#&mZVaNWE(=!HWtqdtRkoL_F
-&:>E/_`NWF6V!7Z`'oS=2e+Bsj,<K7*&L&fbY!;2-_>p*@3!EP3]G(p"JL&gq'(0r%eNWE4A!I
-'7uf7j;"L_j>>>E/_dNWFBZ!8*#+pkTbm+Bsj,=cNN.L&fn]!;VEg>p*@3!EtKaHA2FRL&h(+)
-I4Ii+D#%s+D#%s+D#%s+D#%s+D#%s+C-*oL`D3jL`D3jE+*9">p*@-*Jb_l*Jb_T@:UKd+BsXC
-L`V?nL`V?k>p*>oDK?q<F!,@A+Du6CDK?q++Bsj,+H?JLL&ft_!;hQl>p*>oE+*9"E+*:3!8N;
-/r.lA!+Bsj,,)u\PL&g%a!<%]p>p*@3!@*U*IYIjZL&h4/+'g!nNWCD]Itds\L&h7.!2!O>>E/
-_1NWD4r!31bRTnWQ?>p*@3!@Eg-4GEj;L&e0,!2<aA>E/_3NWD:t!3q7YX+gVL>p*@-.#n<lL&
-eN6!3_+WUg5*ILae>b5DB0EL&eH4!2WsD>E/_6NWE@=!4@O]["\RX>p*@3!@rt2L&ec=!4R[_V
-d1ELNWC\k!F:E[\qU3pL&e2Y+Bsj,/WKj<L&el@!5!scX^*&RNWCbm!FLQ]]nQO%L&eA^+Bsj,
-09-&UL&erB!/cL2[Tt"[NWCho!A&s*J;+&^L&dKE+Bsj,0oc8eL&cdZ!/uX4Q<bV;NWCnq!AB0
--Jqa8bL&dQG+Bsj,1QDJsL&cj\!02d6QsCh=NWCts!C2A>KSBJfL&dWI+Bsj,23%\\L&cp^!0D
-p8RU%%?NWD%u!ITV%L5#\jL&d]K+Bsj,2fN:_L&d!`!0W':S6[7ANWD+\@5<Q;LkYnnL&dcM+B
-sj,3HJUbL&d'b!0i3<Sm<ICNWD1[A2>?E@3BAp+DbI/>p*>oF(-85@?(@2NWC8_!?bYj>9Ius+
-EM$8ChmN'F(6>6@j#&">9Iut+EM'9F(?D0CLeQ/A0>/#>9Iuu+EM*:F(HJ8AKYf)AKY8$>9I`k
-+DbI/CgnN'@N]Jr+C-*qOu"b$BOPq)@;L!->DPP-22FM\22FM\22FM\22FM\2-lA$L]E53@q]:
-kD..C)P%'4JP,Wd]Bp(ZC1G<<W@ric&BOPpu@;p91Bp),P1Pc$e!Jgl*05?Y6Ou$Ze@ric-P"U
-rtP-6N[FE2)5B68E<AWf3'L]ET2I?IQ>BOPq)@;L!-C6D5Q5&$1)I?I-LP"76IATV?'@q]:kG%
-#3.L]ET2Ou"b4ATVB(@q]:kG%#3.L]NZ3Ou"b4ATVE)@q]:kG%#3.L]W`4Ou"b4ATVH*@q]:kG
- %#3.L]`f5Ou"b4ATVK+@q]:kG%#3.L]il6Ou"b/F(K>6>9Id(B5D-sL]NY>H\_ZMP(R&'1Mq2
-GCh7L?!KsF<s+gZ%056S5Ou$rrB-:oO99M8j0To%k5);4^@?Lb?DKBB/+DDs9F(K>6BnueQ!Kp
-*3!KmJHG^XpVF(K>6BnubPG^Y`TI?I,SDKBB/+Du73EJOU3F(]<#DN[\V1G<]fAS,Y$Bl8!'FF
-/fDH\_`d)3R1H@Zj?1P!FGY</:U=)3RXK"-QcL5*B<#L]NY>I=%,BI?ITYP%Be?P')pOP')29%
-[&V$ASu")P!5%%Dfp/b5&-6EP'AWp+DQ]5Oo^_%I?G)'1G<ZhFG9dWOpR:-0564BOu"b+L]ESo
-04T'7FH-KFATV@D1OEgYD0'?+AT!YoHXh,.FH-KFATV@DD.@WuFH-KFATVCED3>$KCgeGrF(KH
-VA7]Xg04T'7FH-KFATV@D1OYEcP!FGY<-rM(AT8i,P"UT;P"L(<F(ZV0L^B5<Ot;ClH]g@E5EZ
-/45)B&u%t0Un@rl4'P%8HOP"UT2L]WA>H]hKZP":B5OpR9ZL^/_:P)"htH]iN"P(R[qFHSh&P!
-5%S052PCL^B4FOu"b++DQ]:Oo^_%P!FGY<%h`p@<+(FD0'>4Bp),P1G<6O@<++GBnueQ!GumjC
-h7LIAp\B9B-:oE!KmJH97;/CSUHZ$Ou"b$BOPp;+DHW5Oo]E@B5D-sP%K&XF(ZV0L]W_?P"U4M
-Ln/sW<K].JF(KHVA7K:]E\W_bHXg_tE\S\HF(KHVA7]Xg052PCL]NY>Ou&7dI?IQ>F(KHR"ES-
-r@?NcpATVB(@q]:k0p5q-"FG3$FCHA&BOPp:P$iWQ@N]`'FC?;'DIY>0F(KHR"ES-r@ZiNqHZN
-X=F(KH%+D#G#+Cf(nE\S\XATVB(ASu!2Bcq,G!KmJH1OYEdP!FGY<+Bu\FH-KFATVCE4`b1V@3
-B&n@<+)c@$1Y>05r%TATV?'D0'>4Bnun/F(]<#DBNYVWJCV=)3RgCP!4;W<0DBe9Q5#`AncL(D
-KBB2Ou%'5!KoTmF($24ATVB(ASu!#@q]:k0d(OKFC?;'DIY>6+DHW4Oo^_%I?IQKL]W`&HZNUN
-+EM+9@N]6"@j#8p@<+(FF(KH%+D#G#+Cf(nE\\bYATV?'ASu!2Bcq,G!g3SI1OYEcE/4UZ4aV6
-Y1E^aMFCHA(DIXf!BOPp9+EM+9@3B-!@j#8p@<++GF(KH%+D#G#+Cf(nE\ehZATV?'ASu!2Bcq
-,G"-N\J1OYEcE/4X[8pbA_+EM+9@N]6"@kV>5ATWq8F(KH%Ou%NL<0BLpP#QL6FC?;%BOPp9P$
-iWQ@3B'$ATX)GASu!2@rl4'NWaE7FCC=gP!FGY<-)Vm@N]/o@<+)c@!c^!+CfJ(FHU0GDIY>0F
-(KHR"ES-r@ZiO15^eepF(KH'+Cf(nE\W_bHS9GOFEifKF(KH'Ou"b4GT_';Ou"b-CNpt<CL`M`
-I?IQNATVH*@q]:k0p5pk06:]HG`DoJATVIG1G<fo+EM(V1G<Q[GT^g<A<J`sP#QL6FCcS)BOPp
-9P$iViF(KH<NWaE7FCgUk06;@\F(LLj05PEK+Dbh)Ou%NL<%i25F(KH<P%8ENB-:oE"Dr3mCh7
-K,Bp,HO!g4Fa:j\?hI?IQmFcoF;Eb/isG\M&:ATX(kE/4OX4aV6p+CfJ(FHU0GDIXf!BOPp9+E
-M+9G`lTKDIY>6+DHW4Oo^_%I?IQKL]W`&HZOES@rl4'P%8-A@j#8p@<+(FF(KH<P%8-A@j#i;+
-CfJ(FHU0GDIXf!BOPp:+EM+9G`lTKDIY>6+DHW5Oo^_%I?IQKL]`f'HZOES@rl4'P%8-A@j#8p
-@<+(FF(KH<P%8-A@j#i;+CfJ(FHU0GDIXf!BOPp:+EM+9G`lTKDIXf1GT^L;ATX)GASu!#@q]:
-k1E^aMFEisZASu!2Bcq,G"-N\J1OYEcE/4X[8pbW(+CfJ(FHU0GDIXf*CNptCATW0[A7]Xg04T
-'7F<GX9FEis)I?IQm5^ef,I?J.pASu!pF(ZV6F``E>C6D8R1G<]UA9MBt+CfJ(FHU0R@:YNoOu
-"b4@;T^$>9I471NQuAM#WWTHS9GKD/"e-OpR:-F(&p"L]DL-FC?;2@:YNoP'D%VD/"e,F(&pA$
-Be;C!KsF<#a0"F@;Uf-P%odRP,XTFP'DD<<%hg#@r6:"+Bot0@;T_A!g7\;DI[O)B9E=ZF^:.d
-D/WrrL]W`&D/WrrL]`f'P&bn&D.I+9">DM`0SfjpV32^Z3,NSEAWeU#!f-uBV33Nq30Ia,"Hks
-3WKKH.H'0s:@q/u.$8=.f0JG170JG2:$Bh6K)3Qsh@rGmhOt;CjL^K<AOt`%YP%'4SP!5&.P!5
- %SOu"b4@q(H*0JG170JG170JJ:iP,4<ZOuRMmDe*FB/;O@`$Bh6K0TnDY@YbAS5*Dn.5*C2S1
-G<]W@ZD]f0JG170JG170JG170JG170JG170JG170JG170JG170JG2:,a,!e)3QdmDe*F8!g5]n
-E+<?"E+<fsAWgMY!f.&DV33Nq30Ia,#*M05WKKH.H#R8&+E1h/A7^oTL]WARP,4<qOuSV6La8-
-IP,XU.P'MJ&05tE2G9C+M"s>$2+<Ve_#*PgG)3Qt8!,uFdA7^p5L^'#=HZ3J5A7^PsL^'#9I=#
-pCDe*F-P#[ZjHZNb?@?Ng;97;sp?'7""!/LZ3"a_n:P!5$bE+<?"E+<C%+DI!3L]WA:P,4<qOu
-SV6L^%RVCkr:Y!KoX0WKKH.H$tiHI?IS`F(9'C4HcP(1NR&CL]VF(@Zl"X@r7#KE+<@5!/Lc@9
-Tj[B@r7#CE+<@5"Gd8F9Tj[B@r7#=E+<@5$A\nL9Tj[B@r7#7E+<@5&;UOR9Tj[B@r7#1E+<@5
-(5N0X9Tj[B@r7#+E+<@5*/Ff^9Tj[B@r7#%E+<@5,)?;`9Tj[B@r7#Y@q/u(!/L]>9Tj[B@r7#
-O@q/u(!f.&D9Tj[B@r7#I@q/u(#`&PF9Tj[B@r7#[F(8[8!/LiB9Tj[B@r7#UF(8[8#)EDF9Tj
-ZSE,oY8>DN98!/LW2!/LW2!/LW2!/LW2!*taDL]E53Lc]r:Bp(ZC1G<]g+DHW9P#@H!04f*Y!f
-."oL^'#WP,W#;E0;bn@r3?&P"UTbP,XU\Ou%&tBcqA9+E2@8+E2Cb94`(*!Kq\UP"76IARcieL
-fA_?@:XOiCjhJ!?'7!bARgMrASu!pF(^Y]I?IQHDe*F8"HkobDe*F8"d2$3Ec#`*AV^PR4d'i&
-De*F8s,oO.EdMYAA7^SsP!+.FD/Wrr+D#G#D0'?Q@YdaA@=*e6I=$bQI?ITn1OYEc04T3I+Bot
-*De*F8"d2#qLe`AFLgGLm<I8[nA9MBtI?K4gOu$TlF,0g5De*FBG[kr=L]M()@r6:"P'J^"EbQ
-Y+GB8Q?L^K;=Ou"b4ARcimGB8QI@s<!W@YbASWKKr<1OYEc062,BCi<r/>DN<95C8PQL]W`UOu
-S7_P"L(W6^#96P#QjmK3aWr062,MDeFkkOpR:-L]N;4Ld-6L3-'(KCi<sL5*AR%5&t^\DeFk.L
-]NZoP'DD<82#")E,ol-H\_`d)2J9UD3@)=!0V2^"FG01Ci<sL5*AR%5&t^\DeG4sP"Ur=Ld.&;
-EcYZ*DeG4sP"U4MP')q1L]Djd<IL#?Ou"b3F(9-!ATN2OEcZ,@D3@)G1G<6^@Zip<1G<6VAS,O
-q+BsX&EcZ,@D0q'=I?K4gOu%mpL]MO;DKTfC056S5Ou$TdAS,Oq+DDs.De3NmF!,1Q!KsFF99O
-O6L]N[<M#W83HS9,s5*@^3De3NmF!,3?@rGpjAof)0L]N[<P"T;'AS,Oq+DR'4EcYZ*DeC2,P"
-Th:E,ol-P/3<+I?I-2De3NmF,0g+De3NmF,0gZ96,)^Ci<r/Bp),0F)Z/<A<M1cP"769De3NmF
-!+t2AS,OqL]Cq'AS,OqP%'4JP,XU<Ou"b&@q$Qb+EDO@F_uJ]!.C#_?'7""!/LYcG@H_EL]N[<
-HS9K(5%AeGP!5%%ARf2*!0U!<_3-Tc@q(U1L]N[<M#W82HS9)r5*@]TE$/_%@Zk27P,X6<P,XU
-#ARf0lE$06F@rGpjAof)/P"Th:E,ol-P'C\s!0U0*ARf0lE$/_%@N]WG!KmJH94_UB+E3K:P/3
-<+I?IQXP":"a87c:?I?G)'1G<f\@rEJoL]E54F(JjE@Yb&JWI&\tA!0$=97;so?'6usF(Jim+B
-sX&L]VX/A!1;W!KsF/F(JjE5*AQeP"8lA1G<fZDe*F#+EM+(P%'5HP!+/J'Rb=a*.<uMOu"b4A
-RfXgBPS`3ARfX$F(9-!ATJu7F(9-!ATO"j06:]7ARfCh+EM+(AKZ&(De*F#+EDO5De*F#Ou"b4
-ARf4`CEQi;!/LYs@rGmhF,0j[WI'dfF(Jj"@q]Y@5*AR%5'(:FARfChP!5%%I?I-,Ou"b$De*F
-'DfTB0+Bot-EbU[<P'(_aBo!+:F(9-!ATO"9P'(hWA!-nVF`V,(@q]Y@!g7\3Ou"b.De*o3>D<
-5fH\_ZMP(R&'1Pc$e!JUT8HS9)r5*@]T@s9&"+Cf>#ATr'5A9/l-P"UT4L^'$=Ot_6=0TrD`P"
-ArB1Mq&@F,1$7P&,pY@s=)FP,XTF@s=)]I?I,SD/Ws%@;m>nL&ohZ!YL.f*ej\XL&kM5!Et3ZT
-nWWAL'#,E!ksBjLP>l+L&i6J!?-[n3JIPoL&l=L!b-lcC5)b9L&lUT!L\ZCR"bXNL'#2G!l0Nl
-089O&L&t&'!c*Mkb(]s%L&um[!kj<iUP8iEL&i<L!??gp4,*bsL&j2e!E=dT'8?N2L&iEO!C);
->?%rAbL&oAM!To+<"bm']L&on\!S2u+EJ=L5L&m?i!KMm8XbHkXL&rZU![NL%6\YY/L&te<!ap
-`aM1u(fL'"9-!iC\R`J+H4L&ujZ!e,k*SV@39L'"uA!kO*e(PVr+L&j/d!AoN3;hb<NL&l^W!I
-TV&Rt^s4L&ni>!P!jc0no``L&t/*!`"IOD2&+.L&rTS![<@#6&#G+L&t_:!a^T^Dh\:1L&m9g!
-K;a6X+gYTL&iNR!@!7!6&#D*L&kY9!FCK^MhV:jL'"?/!iUhTa+aZ8L]N;3L`_EoLcpPVL]`G7
-L`qQsLd-\ZL]rS;La.^"Ld?h^L^/_?La@j&LdQtbL^AkCLaS!*Ldd+fL^T"GLae-.Le!7jL^f.
-KLb"92Le3CnL_#:OLb4E6LeEOrL_5FSLbFQ:LeW\!L_GRWLbX]>Leih%L_Y^[LbjiBLf&t)L_k
-j_Lc'uFLf9+-L`)!cLc:,JLfK71L`;-gLcL8NLf]C5LinMqL&dEl!0W':Z%`7_Li\AmL&d?j!0
-Dp8YD*%[LiJ5iL&d9h!02d6XbHhWLi8)eL&d3f!/uX4X+gVSLi%raL&d-d!/cL2WJ1DOLhhf]L
-&d'b!/Q@0VhP2KLhVZYL&d!`!/?4.V1nuGLhDNUL&cp^!/-(,UP8cCLh2BQL&cj\!.oq*TnWQ?
-Lgu6ML&cdZ!.]e(T8!?;Lgc*ILjt50L&dd!!1\jPLgGmcLjXpWRt^p3Lg>gALjOr(L&dWr!18R
-HLg#U[Lj4XSQ\GL+L&eW9!47I\dtRkNL&gau!:Y^C[tXmkL&fbY!7Z`'o7d89L&ec=!4[a`f7j
-:VL&gn$!;)!G]7p<sL&fn]!8*#+pP&\AL&eoA!5+$dgP,^^L&h%(!;M9K^P2a&L&g%a!8N;/qh
->+IL&f&E!5O<hhhD-fL&h1,!;qQO_hJ0.L&g1e!8rS3s+UOQL&f2I!5sTlj+[QnL&h=0!<@iSa
-+aT6L&g=i!9Ak8",6gXL&f>M!6BlpkCs!!L&hI4!<e,WbD$#>L&gIm!9f.<#DN6`L&fJQ!6g/t
-l\5E)L&hU8!=4D[c\;GFL&gUq!:5F@$\eZhL&i`X!@W['7tq%6L&kk?!G$oc-\_XKL&j_t!CVY
-C@tk"nL&iTT!@3C#6\YV.L&k_;!FUW_'nu`'L&j)b!A]B1;2,*JL&hsB!>:+f0no]_L&k))!D\
-@M&V^;tL&ir^!A9*-9ni[BL&hg>!=jhb/VX9WL&jr%!D8(IBncY%L&m'a!JZ=0V1o#HL&l(E!G
-[>iM1u%eL&n3,!N(SPD2&(-L&m3e!K)U4WJ1GPL&ldY!Ifb(SV@08L&no@!P4!dJVF2UL&mp$!
-M5#H]nQR#L&lp]!J6%,TnWT@L&o&D!PX9hh1bscL&q1+!W%NP)2820L&p%`!SW8/q1\qFL&r0G
-!Z$LkfnKO[L&q%'!VV6L'nuc(L&o>L!QKipjb<fsL&qI3!Wn)W`J+E3L&p=h!TJh8!JUXUL&o2
-H!Q'QliJ%BkL&q=/!WIfT*JOV8L&sGk!]l&;=bZu[L&rHO!Zm't4ba##L&tS6!a:<[+bg%@L&s
-So!^;>??%rDcL&s/c!]#K3;2,-KL&u:J!cE_o222/hL&t;.!`FaSEJ=O6L&s;g!]Gc7<JCQSL&
-uFN!cj"sObNq!L'"Q5!j77Zc%Z;DL'!Ej!fi!:XbHnYL'#PQ!m66!NJ7LnL'"E1!igtVabBl<L
-&udX!do_(Rt_!5L'"o?!k<sdH\MTJL'!ct!gn]D[tXsmL&uXT!dKG$Q\GR-L'"c;!jm[`GD60B
-L'!Wp!gJE@Z\AOeL'#bW!mlZ'mtLo3L'%m>!t9ncdtRqPL'$n"!q:pH%u(/rL'#n[!n;r+o7d>
-;L'&$B!t^1gf7j@XL'%%&!q_3L'8?T%L'$%_!n`5/pP&bCL'&0F!u-IkgP,d`L'%1*!r.KP(PW
-#-L'$1c!o/M3qh>1KL'&<J!uQaohhD3hL'%=.!rRcT)hnG5L'$=g!oSe7s+UUSL'&HN"!!$sj+
-[WpL'%I2!s"&X+,0k=L'$Ik!p#(<",6mZL'&TR"!E="kCs'#L'%U6!sF>\,DH:EL'$Uo!pG@@#
-DN<bL'&`V"!iU&l\5K+L'%a:!sjV`-\_^ML''l!"%7kG@tk(pL'*!]"+Z+.6\Y\0L'(k="(6ic
-Ite&SL''_r"$hSC?\SYhL')jY"+5h*5DB8(L'(_9"'gQ_H\MWKL''Sn"$D;?>D<5`L')^U"*fP
-&4,*huL'(S5"'C9[GD63CL''Gj"#u#;=,$fXL')RQ"*B8"2hhDmL'(G1"&t!WF+sd;L'';f"#P
-`7;hbBPL')FM")rts1PPueL'(;-"&O^SDh\@3L''/b"#,H3:PJsHL'):I")N\o089Q]L'(/)"&
-+FOCPDq+L''#^""]0/983O@L').E")*Dk.u"-UL'(#%"%\.KB8-M#L'*-a",)C2UP8lFL',8H"
-2KWnLP>ncL'+9,"/LYR_hJ91L'*9e",M[6VhP;NL',DL"2oorMhV=kL'+E0"/pqVa+a]9L'*Ei
-",qs:X+g_VL',PP"3?3!O+masL'+Q4"0@4ZbD$,AL'*Qm"-A6>YD*.^L',\T"3cK%PD01&L'+]
-8"0dL^c\;PIL'*]q"-eNBZ\ARfL',hX"42c)Q\GU.L'+i<"13dbdtRtQL'*iu".4fF[tY!nL',
-t\"4W&-Rt_$6L'+u@"1X'ff7jCYL'+!$".Y)J]7pF!L'-+`"5&>1T8!H>L',,D"2'?jgP,gaLc
-U>pLffIVL&dKn!0i3<ZA&A,L&fST!:GRB%>FllL&icY!D/"H8;7.WL&m!_!JH1.U4r]bL&o)E!
-T&P3rIt@NL&r9J!]bu:3/.K8L&uLP!d'.uP(j%CL'"T6!mZN%m=k]/L'%d;""As,.#%gnL')"A
-"([,gJqaB$L'+*'"29Klh1c$e?'6usE+sQ<L'(hH$'I(tC5;kQ1Pc$e!GuacF-:!g!KsF/056S
-5Ou$rnA9/l-P"UT3P!+/2Bm=\AC*7A3A8Pao+DI!3P'AWp+DQ]5Oo^_%I?IQXP"76FBm=\A>9I
-m!G]SZ@C6D8;I?I0X*/GVi!>pOl)28/NL&oDN!U,7=oS*D[L'!s$!ka6hV1o&h?'7!+4>1_dDD
-*Y`ASu?nG\M#'FE 2)?05 tWMF! ,F9G] PN VE- *4@E-, f4DK?pa
-4s4BSDKKE0@<[lR 0/% ?WDJ` g,Bl. :# EbT c]< 0B7i
-Oq*X205Y-BBk)'l AWf$9 A1 r(@/n 8fPF Cf K5H "(o:F Dl% L@WuO *E$/
-\&Anc-oEb0<1F`L u'P') pJ0 6:] HE+* 6l Bl7 RH\pKT _F (KH4@: O(e
-DJ+B\;u~>
-% uk.co.terryburton.bwipp/maxicode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp maxicode 0.0 2015050900 116961 123452
+%%BeginData: 564 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmaximatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/maxicode {
+
+ 20 dict begin
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /mode -1 def
+ /sam -1 def
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /mode mode cvi def
+ /sam sam cvi def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /msg barcode def
+ /msglen msg length def
+
+ % Special message handling for modes 2 and 3
+ mode 2 eq mode 3 eq or {
+
+ % Normalise messages that begin with a field identifier [)>RS01GSyy
+ msg 0 7 getinterval <5b293e1e30311d> eq {
+ /fid msg 0 9 getinterval def
+ /msg msg 9 msglen 9 sub getinterval def
+ } {
+ /fid () def
+ } ifelse
+
+ % Read the postcode, country code and service code fields seperated by GS
+ msg <1d> search pop /pcode exch def
+ pop <1d> search pop /ccode exch def
+ pop <1d> search pop /scode exch def
+ pop /msg exch def
+
+ % Prepend the field identifier
+ msg length fid length add string dup
+ 0 fid putinterval dup
+ fid length msg putinterval
+ /msg exch def
+ /msglen msg length def
+
+ } if
+
+ % Special function characters
+ /eci -1 def /pad -2 def /ns -3 def
+ /la -4 def /lb -5 def
+ /sa -6 def /sb -7 def /sc -8 def /sd -9 def /se -10 def
+ /sa2 -11 def /sa3 -12 def
+ /lkc -13 def /lkd -14 def /lke -15 def
+ /pd2 -16 def /pd3 -17 def
+
+ % Character maps for each state
+ /charmaps [
+ % A B C D E
+ [ 13 (`) 192 224 0 ] % 0
+ [ (A) (a) 193 225 1 ] % 1
+ [ (B) (b) 194 226 2 ] % 2
+ [ (C) (c) 195 227 3 ] % 3
+ [ (D) (d) 196 228 4 ] % 4
+ [ (E) (e) 197 229 5 ] % 5
+ [ (F) (f) 198 230 6 ] % 6
+ [ (G) (g) 199 231 7 ] % 7
+ [ (H) (h) 200 232 8 ] % 8
+ [ (I) (i) 201 233 9 ] % 9
+ [ (J) (j) 202 234 10 ] % 10
+ [ (K) (k) 203 235 11 ] % 11
+ [ (L) (l) 204 236 12 ] % 12
+ [ (M) (m) 205 237 13 ] % 13
+ [ (N) (n) 206 238 14 ] % 14
+ [ (O) (o) 207 239 15 ] % 15
+ [ (P) (p) 208 240 16 ] % 16
+ [ (Q) (q) 209 241 17 ] % 17
+ [ (R) (r) 210 242 18 ] % 18
+ [ (S) (s) 211 243 19 ] % 19
+ [ (T) (t) 212 244 20 ] % 20
+ [ (U) (u) 213 245 21 ] % 21
+ [ (V) (v) 214 246 22 ] % 22
+ [ (W) (w) 215 247 23 ] % 23
+ [ (X) (x) 216 248 24 ] % 24
+ [ (Y) (y) 217 249 25 ] % 25
+ [ (Z) (z) 218 250 26 ] % 26
+ [ eci eci eci eci eci ] % 27
+ [ 28 28 28 28 pad ] % 28
+ [ 29 29 29 29 pad ] % 29
+ [ 30 30 30 30 27 ] % 30
+ [ ns ns ns ns ns ] % 31
+ [ ( ) ({) 219 251 28 ] % 32
+ [ pad pad 220 252 29 ] % 33
+ [ (") (}) 221 253 30 ] % 34
+ [ (#) (~) 222 254 31 ] % 35
+ [ ($) 127 223 255 159 ] % 36
+ [ (%) (;) 170 161 160 ] % 37
+ [ (&) (<) 172 168 162 ] % 38
+ [ (') (=) 177 171 163 ] % 39
+ [ 40 (>) 178 175 164 ] % 40
+ [ 41 (?) 179 176 165 ] % 41
+ [ (*) ([) 181 180 166 ] % 42
+ [ (+) 92 185 183 167 ] % 43
+ [ (,) (]) 186 184 169 ] % 44
+ [ (-) (^) 188 187 173 ] % 45
+ [ (.) (_) 189 191 174 ] % 46
+ [ (/) ( ) 190 138 182 ] % 47
+ [ (0) (,) 128 139 149 ] % 48
+ [ (1) (.) 129 140 150 ] % 49
+ [ (2) (/) 130 141 151 ] % 50
+ [ (3) (:) 131 142 152 ] % 51
+ [ (4) (@) 132 143 153 ] % 52
+ [ (5) (!) 133 144 154 ] % 53
+ [ (6) (|) 134 145 155 ] % 54
+ [ (7) pd2 135 146 156 ] % 55
+ [ (8) sa2 136 147 157 ] % 56
+ [ (9) sa3 137 148 158 ] % 57
+ [ (:) pd3 la la la ] % 58
+ [ sb sa ( ) ( ) ( ) ] % 59
+ [ sc sc lkc sc sc ] % 60
+ [ sd sd sd lkd sd ] % 61
+ [ se se se se lke ] % 62
+ [ lb la lb lb lb ] % 63
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 64 dict 64 dict 64 dict 64 dict 64 dict ] def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 4 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals j get exch i put
+ } for
+ } for
+ /seta charvals 0 get def
+ /setb charvals 1 get def
+ /setc charvals 2 get def
+ /setd charvals 3 get def
+ /sete charvals 4 get def
+
+ % Compute numeric runlengths
+ /nseq [ msglen 1 add {0} repeat ] def
+ msglen 1 sub -1 0 {
+ /i exch def
+ msg i get dup 48 ge exch 57 le and {
+ nseq i nseq i 1 add get 1 add put
+ } {
+ nseq i 0 put
+ } ifelse
+ } for
+ /nseq nseq 0 msglen getinterval def
+
+ % Encode the message from ASCII to codewords
+ /prefixinset {
+ 0 {
+ 2 copy exch length ge {exit} if
+ 2 copy get 3 index exch known {1 add} {exit} ifelse
+ } loop
+ exch pop exch pop
+ } bind def
+
+ /enc {
+ exch get out exch j exch put
+ /j j 1 add def
+ } bind def
+
+ /out 144 array def
+ /i 0 def /j 0 def /cset (seta) def
+ { % loop
+ % Exit when no characters remain latching back to A if necessary
+ i msglen eq {
+ cset (seta) ne cset (setb) ne and {
+ la cset load enc
+ /cset (seta) def
+ } if
+ exit
+ } if
+ { % not a loop but common exit point
+
+ % If 9 numerals available then use NS
+ nseq i get 9 ge {
+ msg i 9 getinterval cvi 4 { dup 63 and exch -6 bitshift } repeat cset load ns get
+ 0 2 10 {index} for 6 array astore 7 1 roll 6 {pop} repeat
+ out exch j exch putinterval
+ /i i 9 add def
+ /j j 6 add def
+ exit
+ } if
+
+ % Read next three characters
+ /char1 msg i get def
+ /char2 i 1 add msglen lt {msg i 1 add get} {-99} ifelse def
+ /char3 i 2 add msglen lt {msg i 2 add get} {-99} ifelse def
+
+ % If current mode is sufficient then directly encode
+ cset load char1 known {
+ char1 cset load enc
+ /i i 1 add def
+ exit
+ } if
+
+ % For switching from A to B
+ cset (seta) eq setb char1 known and {
+ setb char2 known {
+ lb seta enc
+ /cset (setb) def
+ } {
+ sb seta enc
+ char1 setb enc
+ /i i 1 add def
+ } ifelse
+ exit
+ } if
+
+ % For switching from B to A encode according to length of prefix
+ cset (setb) eq seta char1 known and {
+ /p seta msg i 4 msglen i sub 2 copy gt {exch} if pop getinterval prefixinset def
+ p 1 eq {
+ sa setb enc
+ char1 seta enc
+ /i i 1 add def
+ } if
+ p 2 eq {
+ sa2 setb enc
+ char1 seta enc
+ char2 seta enc
+ /i i 2 add def
+ } if
+ p 3 eq {
+ sa3 setb enc
+ char1 seta enc
+ char2 seta enc
+ char3 seta enc
+ /i i 3 add def
+ } if
+ p 4 ge {
+ la setb enc
+ /cset (seta) def
+ } if
+ exit
+ } if
+
+ % If character is in A or B then directly latch
+ seta char1 known {
+ la cset load enc
+ /cset (seta) def
+ exit
+ } if
+ setb char1 known {
+ lb cset load enc
+ /cset (setb) def
+ exit
+ } if
+
+ % Determine which one of sets C, D or E the character is in
+ setc char1 known {/setx (setc) def /sx sc def /lkx lkc def} if
+ setd char1 known {/setx (setd) def /sx sd def /lkx lkd def} if
+ sete char1 known {/setx (sete) def /sx se def /lkx lke def} if
+
+ % Encode according to the length of the prefix
+ /p setx load msg i 4 msglen i sub 2 copy gt {exch} if pop getinterval prefixinset def
+ p 1 eq {
+ sx cset load enc
+ char1 setx load enc
+ /i i 1 add def
+ } if
+ p 2 eq {
+ sx cset load enc
+ char1 setx load enc
+ sx cset load enc
+ char2 setx load enc
+ /i i 2 add def
+ } if
+ p 3 eq {
+ sx cset load enc
+ char1 setx load enc
+ sx cset load enc
+ char2 setx load enc
+ sx cset load enc
+ char3 setx load enc
+ /i i 3 add def
+ } if
+ p 4 ge {
+ sx cset load enc
+ lkx setx load enc
+ /cset setx def
+ } if
+
+ exit
+ } loop % out
+ } loop
+ /encmsg out 0 j getinterval def
+ /padval cset load pad get def
+
+ % Prefix the encoded message with the structured append insert
+ /sami [] def
+ sam -1 ne {
+ /sami 2 array def
+ sami 0 seta pad get put
+ sami 1 sam 10 idiv 1 sub 8 mul sam 10 mod 1 sub add put
+ } if
+ /encmsg [ sami aload pop encmsg aload pop ] def
+
+ % Derive the primary and secondary codewords for modes 2 and 3
+ mode 2 eq mode 3 eq or {
+
+ % Calculate the fixed-width binary values for the mode, postcode, country code and service
+ /mdb (0000) 4 string copy dup mode cvi 2 4 string cvrs dup length 4 exch sub exch putinterval def
+ /ccb (0000000000) 10 string copy dup ccode cvi 2 10 string cvrs dup length 10 exch sub exch putinterval def
+ /scb (0000000000) 10 string copy dup scode cvi 2 10 string cvrs dup length 10 exch sub exch putinterval def
+ /pcb (000000000000000000000000000000000000) 36 string copy def
+ mode 2 eq {
+ % For numeric postcode, first six bits represent length and remaining 30 bits the value
+ pcb pcode length 2 6 string cvrs dup length 6 exch sub exch putinterval
+ pcb pcode cvi 2 30 string cvrs dup length 36 exch sub exch putinterval
+ } { % mode=3
+ % For alphanumeric postcode, trim or pad with spaces to 6 chars and encode to binary
+ /pccw [
+ ( ) 6 string copy dup 0 pcode length 6 gt {pcode 0 6 getinterval} {pcode} ifelse putinterval
+ {seta exch get} forall
+ ] def
+ 0 1 5 {
+ /i exch def
+ pcb pccw i get 2 6 string cvrs dup length 6 i mul 6 add exch sub exch putinterval
+ } for
+ } ifelse
+
+ % Convolute the binary values into the structured carrier message
+ /scm 60 string def
+ scm 2 mdb putinterval
+ scm 38 pcb 0 4 getinterval putinterval
+ scm 30 pcb 4 6 getinterval putinterval
+ scm 24 pcb 10 6 getinterval putinterval
+ scm 18 pcb 16 6 getinterval putinterval
+ scm 12 pcb 22 6 getinterval putinterval
+ scm 6 pcb 28 6 getinterval putinterval
+ scm 0 pcb 34 2 getinterval putinterval
+ scm 52 ccb 0 2 getinterval putinterval
+ scm 42 ccb 2 6 getinterval putinterval
+ scm 36 ccb 8 2 getinterval putinterval
+ scm 54 scb 0 6 getinterval putinterval
+ scm 48 scb 6 4 getinterval putinterval
+
+ % Evaluate the structured carrier message as codewords
+ /pri [ 0 0 0 0 0 0 0 0 0 0 ] def
+ 0 1 59 {
+ /i exch def
+ /ps i 6 idiv def
+ /ep 2 5 i 6 mod sub exp cvi scm i get 48 sub mul def
+ pri ps pri ps get ep add put
+ } for
+
+ % Pad the encoded message into the secondary component
+ /sec [ 84 {padval} repeat ] def
+ sec 0 encmsg putinterval
+
+ } if
+
+ % Derive the primary and secondary codewords for modes 4, 5 and 6
+ mode 4 eq mode 5 eq or mode 6 eq or mode -1 eq or {
+
+ % If mode isn't specified then use EEC if message fits, otherwise SEC
+ mode -1 eq {
+ /mode encmsg length 77 le {5} {4} ifelse def
+ } if
+
+ % First symbol is the mode and the remainder are the padded message
+ /cws [ mode 5 eq {78} {94} ifelse {padval} repeat ] def
+ cws 0 mode put
+ cws 1 encmsg putinterval
+
+ % Fit the message into the primary and secondary components
+ /pri cws 0 10 getinterval def
+ /sec cws 10 cws length 10 sub getinterval def
+
+ } if
+
+ % Calculate the log and anti-log tables
+ /rsalog [ 1 63 { dup 2 mul dup 64 ge {67 xor} if } repeat ] def
+ /rslog 64 array def
+ 1 1 63 {dup rsalog exch get exch rslog 3 1 roll put} for
+
+ % Function to calculate the product in the field
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add 63 mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } bind def
+
+ % Generate error correction codewords
+ /rscodes {
+
+ /rsnum exch def
+ /cwb exch def
+
+ % Generate the coefficients
+ /coeffs [ 1 rsnum {0} repeat ] def
+ 1 1 rsnum {
+ /i exch def
+ coeffs i coeffs i 1 sub get put
+ i 1 sub -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+ /coeffs coeffs 0 coeffs length 1 sub getinterval def
+
+ % Calculate the error correction codewords
+ /ecb [ rsnum {0} repeat ] def
+ 0 1 cwb length 1 sub {
+ /t exch cwb exch get ecb 0 get xor def
+ ecb length 1 sub -1 0 {
+ /i exch def
+ /p ecb length i sub 1 sub def
+ ecb p t coeffs i get rsprod put
+ i 0 gt { ecb p ecb p 1 add get ecb p get xor put } if
+ } for
+ } for
+
+ ecb
+
+ } bind def
+
+ % Split secondary codeword into odd and even elements
+ /seco [ 0 2 sec length 1 sub { sec exch get } for ] def
+ /sece [ 1 2 sec length 1 sub { sec exch get } for ] def
+
+ % Calculate the parity codewords for secondary codeword parts based on mode
+ /scodes sec length 84 eq {20} {28} ifelse def % SEC/EEC mode
+ /secochk seco scodes rscodes def
+ /secechk sece scodes rscodes def
+
+ % Recompose the secondary parity codewords
+ /secchk [ 0 1 scodes 1 sub { dup secochk exch get exch secechk exch get } for ] def
+
+ % Concatinate the data into final codewords
+ /codewords [
+ pri aload pop
+ pri 10 rscodes aload pop
+ sec aload pop
+ secchk aload pop
+ ] def
+
+ % Convert the codewords into module bits
+ /mods [ 864 {0} repeat ] def
+ 0 1 143 {
+ /i exch def
+ /cw [ codewords i get 2 6 string cvrs {48 sub} forall ] def
+ mods 6 i mul 6 cw length sub add cw putinterval
+ } for
+
+ % Maps modules to pixels in the grid
+ /modmap [
+ 469 529 286 316 347 346 673 672 703 702 647 676 283 282 313 312 370 610 618 379
+ 378 409 408 439 705 704 559 589 588 619 458 518 640 701 675 674 285 284 315 314
+ 310 340 531 289 288 319 349 348 456 486 517 516 471 470 369 368 399 398 429 428
+ 549 548 579 578 609 608 649 648 679 678 709 708 639 638 669 668 699 698 279 278
+ 309 308 339 338 381 380 411 410 441 440 561 560 591 590 621 620 547 546 577 576
+ 607 606 367 366 397 396 427 426 291 290 321 320 351 350 651 650 681 680 711 710
+ 1 0 31 30 61 60 3 2 33 32 63 62 5 4 35 34 65 64 7 6
+ 37 36 67 66 9 8 39 38 69 68 11 10 41 40 71 70 13 12 43 42
+ 73 72 15 14 45 44 75 74 17 16 47 46 77 76 19 18 49 48 79 78
+ 21 20 51 50 81 80 23 22 53 52 83 82 25 24 55 54 85 84 27 26
+ 57 56 87 86 117 116 147 146 177 176 115 114 145 144 175 174 113 112 143 142
+ 173 172 111 110 141 140 171 170 109 108 139 138 169 168 107 106 137 136 167 166
+ 105 104 135 134 165 164 103 102 133 132 163 162 101 100 131 130 161 160 99 98
+ 129 128 159 158 97 96 127 126 157 156 95 94 125 124 155 154 93 92 123 122
+ 153 152 91 90 121 120 151 150 181 180 211 210 241 240 183 182 213 212 243 242
+ 185 184 215 214 245 244 187 186 217 216 247 246 189 188 219 218 249 248 191 190
+ 221 220 251 250 193 192 223 222 253 252 195 194 225 224 255 254 197 196 227 226
+ 257 256 199 198 229 228 259 258 201 200 231 230 261 260 203 202 233 232 263 262
+ 205 204 235 234 265 264 207 206 237 236 267 266 297 296 327 326 357 356 295 294
+ 325 324 355 354 293 292 323 322 353 352 277 276 307 306 337 336 275 274 305 304
+ 335 334 273 272 303 302 333 332 271 270 301 300 331 330 361 360 391 390 421 420
+ 363 362 393 392 423 422 365 364 395 394 425 424 383 382 413 412 443 442 385 384
+ 415 414 445 444 387 386 417 416 447 446 477 476 507 506 537 536 475 474 505 504
+ 535 534 473 472 503 502 533 532 455 454 485 484 515 514 453 452 483 482 513 512
+ 451 450 481 480 511 510 541 540 571 570 601 600 543 542 573 572 603 602 545 544
+ 575 574 605 604 563 562 593 592 623 622 565 564 595 594 625 624 567 566 597 596
+ 627 626 657 656 687 686 717 716 655 654 685 684 715 714 653 652 683 682 713 712
+ 637 636 667 666 697 696 635 634 665 664 695 694 633 632 663 662 693 692 631 630
+ 661 660 691 690 721 720 751 750 781 780 723 722 753 752 783 782 725 724 755 754
+ 785 784 727 726 757 756 787 786 729 728 759 758 789 788 731 730 761 760 791 790
+ 733 732 763 762 793 792 735 734 765 764 795 794 737 736 767 766 797 796 739 738
+ 769 768 799 798 741 740 771 770 801 800 743 742 773 772 803 802 745 744 775 774
+ 805 804 747 746 777 776 807 806 837 836 867 866 897 896 835 834 865 864 895 894
+ 833 832 863 862 893 892 831 830 861 860 891 890 829 828 859 858 889 888 827 826
+ 857 856 887 886 825 824 855 854 885 884 823 822 853 852 883 882 821 820 851 850
+ 881 880 819 818 849 848 879 878 817 816 847 846 877 876 815 814 845 844 875 874
+ 813 812 843 842 873 872 811 810 841 840 871 870 901 900 931 930 961 960 903 902
+ 933 932 963 962 905 904 935 934 965 964 907 906 937 936 967 966 909 908 939 938
+ 969 968 911 910 941 940 971 970 913 912 943 942 973 972 915 914 945 944 975 974
+ 917 916 947 946 977 976 919 918 949 948 979 978 921 920 951 950 981 980 923 922
+ 953 952 983 982 925 924 955 954 985 984 927 926 957 956 987 986 58 89 88 118
+ 149 148 178 209 208 238 269 268 298 329 328 358 389 388 418 449 448 478 509 508
+ 538 569 568 598 629 628 658 689 688 718 749 748 778 809 808 838 869 868 898 929
+ 928 958 989 988
+ ] def
+
+ % Lookup pixels for enabled modules from modmap
+ /pixs 864 array def
+ /j 0 def
+ 0 1 mods length 1 sub {
+ /i exch def
+ mods i get 1 eq {
+ pixs j modmap i get put
+ /j j 1 add def
+ } if
+ } for
+ /pixs [ pixs 0 j getinterval {} forall 28 29 280 281 311 457 488 500 530 670 700 677 707 ] def
+
+ % Return the arguments
+ <<
+ /ren //renmaximatrix
+ /pixs pixs
+ /opt options
+ >>
+
+ dontdraw not //renmaximatrix if
+
+ end
+
+} bind def
+/maxicode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER maxicode--
@@ -5979,219 +17197,1321 @@ DJ+B\;u~>
% --EXAM: This is Aztec Code
% --EXOP: format=full
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp azteccode 0.0 0 0 0
-%%BeginData: 117 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04B0KA Rf 4gA7^+ D'T
-t>:%52X=FD5Z2F- 8_M1G <3G Eas # uAW f6? 1G< 9WDKKE 0@ <Wi+@; L!r
-Ou"b'DfT]'FH-NI DKBB2 Ou" b3A RT +\ EbT E*F <G1(Ci a0 N1G<QQ H"D
-#;M#WVo04eX0ATh X$L_ l41 04 eX %A7 T1` @<- FF"-
-PGnEaa/7AmoLsAW ei&E + *d .A KYS nCi a0N1 N.5SB
-l@m1P-6N[FE2)5B 68E<AW f3' L ]NY rO pu>K FD5 Z2F*j(NAmo LsAWf3'P!FG
-Y<0B5(@ZmRN0oc8 tP)XR( F_- _ !H]f tD5* C&O 5*@^MH]ft& EckrV1OYEdI
-?J0)*g/N:DfBf4D f0WZ5* @^M P#Q@ =FD5 Z2F *j'+I?I/TC ghU#EcW@>@<
-lF)F-8);1G<<LCh 7d$C` m;!C h7d$C m$H7 1G< <L@:WnYBOP q&+D#%kA7T1
-`@<-FP/<Vf.@<-F #HS95 WB-:Y lEas# uAW gMcV33VfC5 ;kQ1Lad5@rG
-mhH]A,5P)XgO3,N _LP!3WD 5*C2S@ VV&,L ]NY >05?Y6Ou&8 DOuS6tL]`f6
-Ot:HkB9GGnL]N[<P!5%ROuSV6L]`g>L]`f(P"^:NOuR<"B9GGnP!5%SP%&0h!AA2N5*@]T@UX:
-eDe*E%D0'?G!,@ZjOu&7dI?ITYP%B')<%i*0B4>RsF,g6`1M1QGD..OH"EJX&AWgnN@<[k;HS9
-5WB4>RsF!+q#Eas#uAWeitP#Q%3Ec#6,NWaBFDInuJEaa0TE0:?N04J@1Ch7K,@UX:eDe*FB@Z
-iNV@<-0qDMTBt@=+"<0JG170SfmqV32^Z3+?<:Ch7L?!f.#CV33Nq30Ia,"d2'4WKKH.GqWZ;P
-!5$bI=$tc0JG170JG170JG170JG17L_,`GOr9EB@UX:nAT!;GP,X6=L_,`GOt`%YP%'4YP!5&.
-P!5%S04SLT5*@^MP#X/F@r,^o+CeoE@ZiN#D0'?!BlnEP"_2%YAT!Y3@UX:nAT!;0P&-9^P,4<
-tD0'?!BlnEP!0.4;0ekC;P'LncB4>RsF,1!0A!2+n!/LYb@<-0qDMS=VWI$:4P!5$bNX.<m0JG
-170JJ:gP,4<ZOuQoZEas#uAKY]M99Li^!f.,FV33Nq30Ia,#a.B7WKKH.H#7V8@VKq*L]q9uCh
-7LI!GR>qP&-9^L]`J5P)#3GI?I-LP#O)OATVs,@ribs+Bsj/Ecl82L]E52L]E58>p*@3#@h[hE
-+*6uL]N;4L_5FI>p*@3"D2dmCkr+J!JhJH#$i?UNX''4D/`onFGL!S!/N%Z#$i?UNW`s:Ci"n/
-L]N;cL^%-->E/quDf'H%@s!M/L]E5eL^79/>E/huF_klM",Hu64GX8K+Bsj2@rH4'@:OD8"Gd&
-69S`s[+Bsj/Ap%p+L]iM7LffH=>p*@3"D2dmCkr7N!JkuV#[JQWNW`s:Ci"n3L]N51S;7GV+Bs
-j/Ap%p+L^/_:L&f/J#[JQWNW`s:Ci"n5L]N51n;%?U+Bsj/Ap%p+L^Ak<L&g@l$=+cYNW`s:Ci
-"n7L]N52&;U[!+Bsj/Ap%p+L^T">L&jDm$=+cYNW`s:Ci"n9L]N52CkrF(+Bsj/Ap%p+L^f.@L
-&ms'$=+cYNW`s:Ci"n;L]N52eqaZ=+Bsj/Ap%p+L_#:BL&qpB$=+cYNW`s:Ci"n=L]N539Sa$]
-+Bsj/Ap%p+L_5FDL'!<i$=+cYNW`s:Ci"n?L]N53d"i$7+Bsj/Ap%p+L_GRFL'&3I$=+cYNW`s
-:Ci"nAL]N54@#,.q+Bsj/Ap%p+L_Y^HL'+N5$=+cYNW`s:Ci"nCL]N54r.k\c+Bsj/Ap%p+L_k
-jIL'*g!$sau[NW`s:Ci"nEL]E/3i.qeI+Bsj/Ap%p+L`)!KL'/u^$sau[NW`s:Ci"nGL]E/4G_
-cc6+Bsj/Ap%p+L`;-ML'5SR$sau[NW`s:Ci"nIL]E/5)Mef-+Bsj/Ap%p+L`M9OL';OP$sau[N
-W`s:Ci"nKL]E/5aG:71+Bsj/Ap%p+L`_EQL'AiX$sau[NW`s:Ci"nML]E/6J;=V>+C1-d0564B
-Ou%G<D'3\,FE2)*F!,1[99M(aAo_a1+Dlo7P"Uro05YNNEZf4T!Kp*=1G<HP@;m?+L]W`4Ou"b
-/@s;u:D28:W99M(a@W5h$+Dlo;P"Uro05boLARfp,DI[m3+D#&!AThX$P&,qbOu?l]@:WnYBOP
-q&Oo^^WOt;bPD0'?!BlnEZ@Yb#I4aSi"F_t]"GDH6^1OYEc05boLA7Kg+DI[m3+Du==ARfqIWK
-K%jDeid,+EVXHAWei]DfT]'FH-NIDKBB2P&4fLEc#6,+D,Y2FHUL("FDe?CLMK2AmoLsAWeitP
-#QI5@:WqiBl7X,+DG=oE/4OXD3>$K05kW7Gp$^-Cia0N1OYEcCghU#Ec[':P&5#DH"D#;+Dkq?
-Eft:&"FDe?CLMK2AmoLsAWeitP#Q:>B4>RsF-:!AE+=*T2NeW7/8fTIA7KhH:jXj6CLMK2AmoL
-sAWeitP#Q@8@<m3_5^eep052PCL]NY>Ou%NLAM7k.H"D#;+Dkq?Efr43AoD^,@<<W(Ec#o]1G<
-0QCjKZ5DgRX,P%'F[0JG170JG170JG17L]E55M#WWnP"_$%I?G)'1G<0QCi=3&F*j'0P%'F[0e
-kC;0ekC;0ekC;L]E55M#WWnP"_$%I?G)'1G<6^F!,@1GB8oROu"b.L]ESo04Te<Ou%H%F(\rrF
-E<USD3A=SP!FGY<,H\h@VKq*P%&9kWFBgVGEPRF04T38+Dl14@VKq*+Di61E+=*J!KsFF9Th1b
-@s;N-D0'?!BlnD=D'3;,@s=(:L]N[<L]NZ4Ou$Tl@N])qCjKZ5DgO-IG@lj90p4=GD'3\O!KsF
-F1OYEc@s;B)@;KauDImm904T3<NWChs1G<SfD284UWKK&cP#R5GP,4=$L]Cq/@Zl#"3+?i:GDH
-9_WFL-aP'Mi`@W5h$P"[N=G@H_!Ou%N504T38+Dl14@VKq*+Di6<F(\rrFE<USD3Cl]9Th1b@s
-;CB$o'Ik0ekC;0ekC;0o-7$V32^Z3/@QEG@H_\L]Cn'@s=)0Ou$Tl@N])qCi=3&F*f$>G@D\)G
-@H_EL]N[<NWChsH$tiTI?IS`@s<_/Ou%moL]Lt(@s<_0P,Wd]Bp(ZC1G<6^+CfVO!b-+YG9CU_
-WJCS<WF^<nOt:*e@N]BJ98G9bWKM(\!Ko6eP"9),F!+s8@s=)\05VhK+C];"GEMui1G<5\@u(/
-K!Ko6eP%?:VGB4m:GB8Q?A!0NK1G<ci@rGmhF*fQ\F)YuZ5*@]TEcYl*P!5$b062,OA!0$=1G<
-ci@s<!W5*@]TEcYZ*DeC1sL]MO;B4cr#P,Wek3/@X!Cm$buF(]*J8pbT"E,CcSI?IQXP(R&'1G
-<ciCi<r/EcYl*OpR:-L]N;4EcYl*L]N[<H]g@/F(&m'B9GHA99MJZF)5c-L]`G6P)#3FI?I,SE
-cZ2?De+3N!g4FW!0V2^5)93%D3>$KEcZ&8B9GHA99MJZF)5c-P!5%%Oo]TEB4cr#P,XUZEcYZ*
-DeG4sP"U4MP')q1L]Djd<IL#?Ou"b$De3NmF!+\C!HN7!@sa"3I?K4gOu%mpL]MO;DI\#HBp(Z
-C1Lk?7AnH*,Bcpo(AS,Oq+DHW4P,XU;P'C\s!KsF<s+g]&05?Y6Ou$TdAS,Oq+DN$/De3NmF!,
-4R!KsFF94MmOAnH*,C6D51F(&m'B-:oO96,)mEc5KO_30%kP"9)$AS,OqL]Cq'AS,OqL]ET2Ec
-YZ*DeC2,P"Th:E,ol-P'DD<82"jk+EDO5GB8pVOu"b3F(9E8+Bot/F(9E8H[V&KEcZ,.H\_ZMP
-(SPj?'7""!/LYnA;C8LWI$:6P!3o-@s<!W5*AQZF(9E8+Dt_Q99R,S1Pc$e!HN7!@u(/KWI$:5
-P!5$bEcY`7F!,@2+DR&?EcY`7F!,@2+DR&?L]NY>P"TR5@rGpjAof)8F)GJ1C6GQP!KsFF96,)
-mEc5KO_30%kP":"a89/c]GB8Q?EcY`7F-:!g!KsFF9RW'6Ou$]gEc#6,NW`s:Ci#7tHS95SA7Z
-m"@<lF)F,0j[WJCqF%qBg)P%'4JP,XTFOu%,i@:WqiBl7X,HS95SA7Zm#De*F6"9=U*Ou%NL<%
-i*,A7Zlf+Dl%-AV:$`n,SUSM"Hi@D/WrrL(=9I"Gli9%rH5qAVL3SOp$U=Oq2DJA7^Q-Op#'R1
-G<T`A7Zm#De*F8#)EhH'68/(De*F#Ou%NL<+^&hD..OH#@h[hE+*6uP!+.FD/Wrr+DbJ3ATDjJ
-!KsF<#*KL,GB8pVL]N[<Oo^_%Eb/ZiATDL&Bln\TD/Wrr+Dl%-AV_IlEfr5,P#O)ODe*E%>9Id
-$A7^Jqn<*p1r/qS-De*F8&!@'$Ou"b.De*E%D/WrrL]rSGL_FfM@rGmhF-8>-P#Q%3Ec#6,NWa
-BFDIntoHS95SA7Zlm@<,jrA7^oTOu"b.De*E%>9Id$A7^Jqn<*p1r/qS-De*F8&!@'$Ou"b.De
-*E%D/WrrL]rSGL_FfM@rGmhF-8=4D/Wrr+Bot*De*F+L^K<]I?I0-Ou%NL<%i*,A7]4aFE8RAD
-e*FB@Yb/MCm(WX1Pc$e!GuacAR]@qF-:!g!KsF/D/Wrr@VKq*P!4m,0Tp^0P":B/L]M@2A7^p5
-L]N[<HS9)r5*@^=De*EgBlnD=D/Wrr+DI!3L]WA8P,4<qOuSV6L]il)P,X6?Bp*:q!KoX0H$ti
-H062,Q@<,dnF!+[0>9I2o>9I2o>9I2o>9I2o>9I2o>9I2o>DPP#6X:g=+C-*oL&h:/!A.S">9I
-2o>D<7\L'.fg+Boso+BsR3!/;&!>p*F91G<6^F!+t:F!,@1GB4m:GB8pVP,WJCE+*cqD0$h/E+
-=*T97))M8TJl^De*F#Ou$]gEc#6,NW`s:Ci#7tHS8o<FCAWmFE8R@@<lF)F!,:-H"D#;P&,pcP
-&+rCH"D#;LiAMnOo^`BOu%N504\L5@:EqmF!,:-H"D#;+DbJ3ATDjTCkrXcCi!O*ATDjJ=H[K`
-!Ks:B1OYEdL]E53A79Rg@VKq*P%'4JP,We=@<>peBlnEZ5)oXtP'MJ=8;I8%!H)CkF,0j[WI$:
-4P!5$bA79Rg@VKq*+CfV:+DI!3L]V%)@s=*4Ot`%YP%%m>@s=)"P,Vo0@s9&0P&-9^A79Rg@VK
-q*P%&<=GB4m9E+=*TCm(c\!KoX0H$tiH04SjBHQ[BDH=`7UP,W;4A<HtAOq*X205PKKHS92EBl
-oM%Ou"b-CjC&a5*@]TCj0T(+D,g?Ci"B;L]ilWOo^_%05P05EZf1-Blo.4P#?+?Bk3B)Ou$obB
-l]"0P!+/.GA1TD!KsF<!g6HEDMS=V!Gl4ZFGL!];J^PkA<L\j!G6P3!KsF<!g6GtCjC&W!g7A_
-!Gl4ZFGL!]C6AU-D0C>j<,?)ZEejaZ4aUdbL]W`;Ci"B;L]W`UOo]B.Blo.4P%p-\Cj0T(L]N[
-<L]W`;L]N[<Cgq+#L]W`;Cj0T(P%p/Z@r6C;P#Q7.Bl]"2P!+/.GA1TD!g6HEDMS=V!Gl4ZFGL
-!];J^PkA<L\j!Kq>4GDH<`;J^/pEejd[Cm"g8@VKq?!g7;]!Kq>1D0C>j<,?)ZEejg\4aUdbL]
-N[<L]W`;Ci"B;L]W`UOo]B.Blo.4P%p-\P&>)[Bk3#$P#@):P,W8,Blo.4P#?+?Bk3BAP,XU^@
-r6C;P#Qjm%[&V[DfT]'FH-K9F_klW4aShoGDHZj1OXU'Ap9%;Ou%NL<A/E-H=\42G9C^1H"D#;
-L]ilWOo^@?Oo^_%05tWMF!+[0F(or3+EM7CAWgkVM#VmdK3aWr05YE6+EM7CAV^AMWJCV=;KHP
-uAWgkNBmO?H!KsF<!g6HE!Ko5lBnubP1Pc'f!Gl1iATDj=05P'BATEqtOu%moL]M+3+DbJ3ATE
-S0P&-9^L^9/[L]N[<HS9>VF-8_M1N7&QF!,:-H"D"=E,Te?Ci+><A79Rg@VKq*+Cno&@:EqmF-
-:!HP,X6<P,XU;LbP!kP'AWo+DHW4Oo^_%I?I-LP"92'Ec#6,NW`s:Ci#7tHS8uTL^fM'06:iRA
-KYT/+DbJ3ATDjJ"HmSa!Jgf?!Gl1iATDjL5pu^5Oo^G*n,NHO2M_BsWKJfg!g7A_!Ko5lD/!N'
-F(or3+EM7CAWgkc!g6HE1G<WbBm=\A>9J!$H=\4?BmO?RCjV!;I?K4gOu%moL_+WAH=_m6P#?W
-[Bp(ZC1Pc$e!HVt$AV^AMWI$:5P!5$bDK'<7F!,O<H=_m6P#@H\C6AU3+Cf83+Bot0BmO?H!g6
-GrOo]9[!Jgc>!Jgf?C0d!JDK'<7F!,O<H=_m6P#@H\C6AU3P&=cHFs(!3F(or3L]W`;C6AU3Oo
-^@>Oo^@?P%n9cH#@S8G]P!A+EM7CAV^DN;Nbp4Oo]'0Fs(!3F(or3L]W`;C6AU3Oo^@>Oo^@?P
- %n9cH#@S8G]P!AP&>>TH=_m6P#@H\C6AU-D0@%++EM7CAV^DN;JM?qBp&LQ!KmJ>!g7;(P'MJ
-=8:?Xl05?:COu%moL]MC4Bm=]^@Yb&JWI$:4P!5$bDK'<7F!,1[98NS14aV'cBm=\ABcqA/G]P
-!BP"Us_05;VEL]NY>Ou%NL<.0p#05tWMF!,@>Bm=]^1OYEc04oDNAp9%4P#@H!Ap9DUL]M+3HS
-9)r5*@^6GEQj"!G6P&05?Y6Ou%&kG]P!A+DN$/D0@%9OoT6[!0U0*Bp&IEHYS]DI?ITd!KmJ>!
-g7;]G^Y`GI?I-*+Bot#GDH9_!Kq>4GDH9*+Bot#GDH9_!Kq>4GDH9_!Jgb^+Bot#GEQiUGDH9_
-!Jgb^+Bot#GDH9_!G6P3!KmJ>!F6gP+D,hR!KmIqGDH9*+Bot#GDH9_!G6P=DMS=!+Bot#G9CL
-AL]NY>L]C^'>9IO%L]NY>Ap9%3Oo^_`L]C^'>9IO%+D,hR!KmJHDMS9u+Bot#GEQiUGDH9_!Kq
->V!*p^O+D,hR!KmJHDJ"*K!KmJHDMS9u+Bot#GDH9_!Kq>4GEQj"!*p^QHQ[9AG]T$3H[V&KL]
-`G6P)!OaG*5%PG^Y`HAoD^,@<@M4Ap%p+P!+.FD/WrrD..B+>9I.+qhPJ_+Bs["L^.3.>DW66#
-@/HVM#N28>p*@-s+gnc+BsX&L^.3.>DN?:#@/HVL]`G<>p*@-"Gd:g+BsX*L^.3.>DNN?"^N6T
-L^/_=>p*@-#D`If+BsX,L]Uj)>DNN?!F6gPL^/b9>p*@-#Di@b+BsX,M#CU%>DNN?r*:FLL^/b
-5>p*@-"c2t[+BsX)M"t=!>DNB;q->+IL]WD.>p*@-!JpPW+Bs[%M"t=!>DW97q->+IM#E/*>p*
-@-r.t/S+Bs[!M"t=!>DW*2qct=KM"ul)>p*@-q2"uT+BsZtM#L[&>DW*2s'6aOM"ui->p*@-q1
-o)X+BsZtL]^p*>DW*2"C3-SM"ui1>p*F91OXU'D/WrrD..B+>9I.+rJ1V_+Bs[$L]q',>DW<8"
-^N6TL]E57>p*@-!Jgnb+BsX'L]q',>DNB;"^N6TL]rS:>p*@-"c*4c+BsX*L]Ld(>DNH=!*p^O
-L]rV7>p*@-"c3.`+BsX*M#CU%>DNB;qct=KL]WD0>p*@-!JpVY+BsX%M#1I#>DW<8qct=KM#N5
-->p*@-rJ:>V+Bs[!M#CU%>DW04r`pXNM#3#.>p*@-qhP5X+Bs[!L]Ld(>DW04!aQpQM#2u1>p*
-F91OYEdL]E53D/WrrD..CH@Yb&JWI$:4P!5$bE+sQ<+Dl%-ASkjp+DI!3H[V&K@r6B3D/Wrr@V
-Kq*+DI!3LbP!kP'DD<83B!fEb0,A061WAD..O,Bm;:MBm=\AE+sQ<05tWMGT_'AH=\aKBm=nGF
-(or305+p2B4uB0F(or3L]W`ULe*[e06_,@FD)e<BmO?H!g7AU8<PkaDfBe@DfBf4Df0V=5!C*"
-Df0Z-Eaa0TE%`kbASu?nFE2)?P#RT)I?G)'1G<0_FCerlDe*FB30If*F_`U>D_?-CEcQG7F`MS
-BDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/azteccode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp azteccode 0.0 2015050900 163082 186690
+%%BeginData: 679 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/azteccode {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /format (unset) def % full, compact or rune
+ /readerinit false def
+ /layers -1 def
+ /eclevel 23 def
+ /ecaddchars 3 def
+ /raw false def
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /layers layers cvi def
+ /eclevel eclevel cvr def
+ /ecaddchars ecaddchars cvi def
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ % Convert from input into message bitstream
+ /msgbits () def
+ format (rune) ne raw and {/msgbits barcode def} if
+ format (rune) ne raw not and {
+
+ % State key: "U"pper, "L"ower, "M"ixed, "P"unctuation, "D"igit, "B"inary
+ /U 0 def /L 1 def /M 2 def /P 3 def /D 4 def /B 5 def
+
+ % Special function characters
+ /lu -1 def /ll -2 def /lm -3 def
+ /lp -4 def /ld -5 def /su -6 def
+ /sp -7 def /sb -8 def /fl -9 def
+ /p2 -10 def /p3 -11 def /p4 -12 def /p5 -13 def
+
+ % Character maps for each state
+ /charmaps [
+ % U L M P D
+ [ sp sp sp fl sp ] % 0
+ [ 32 32 32 13 32 ] % 1
+ [ (A) (a) 1 p2 (0) ] % 2 p2 = CR LF
+ [ (B) (b) 2 p3 (1) ] % 3 p3 = ". "
+ [ (C) (c) 3 p4 (2) ] % 4 p4 = ", "
+ [ (D) (d) 4 p5 (3) ] % 5 p5 = ": "
+ [ (E) (e) 5 (!) (4) ] % 6
+ [ (F) (f) 6 (") (5) ] % 7
+ [ (G) (g) 7 (#) (6) ] % 8
+ [ (H) (h) 8 ($) (7) ] % 9
+ [ (I) (i) 9 (%) (8) ] % 10
+ [ (J) (j) 10 (&) (9) ] % 11
+ [ (K) (k) 11 (') (,) ] % 12
+ [ (L) (l) 12 40 (.) ] % 13
+ [ (M) (m) 13 41 lu ] % 14
+ [ (N) (n) 27 (*) su ] % 15
+ [ (O) (o) 28 (+) -99 ] % 16
+ [ (P) (p) 29 (,) -99 ] % 17
+ [ (Q) (q) 30 (-) -99 ] % 18
+ [ (R) (r) 31 (.) -99 ] % 19
+ [ (S) (s) (@) (/) -99 ] % 20
+ [ (T) (t) 92 (:) -99 ] % 21
+ [ (U) (u) (^) (;) -99 ] % 22
+ [ (V) (v) (_) (<) -99 ] % 23
+ [ (W) (w) (`) (=) -99 ] % 24
+ [ (X) (x) (|) (>) -99 ] % 25
+ [ (Y) (y) (~) (?) -99 ] % 26
+ [ (Z) (z) 127 ([) -99 ] % 27
+ [ ll su ll (]) -99 ] % 28
+ [ lm lm lu ({) -99 ] % 29
+ [ ld ld lp (}) -99 ] % 30
+ [ sb sb sb lu -99 ] % 31
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 32 dict 32 dict 32 dict 32 dict 16 dict ] def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 4 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals j get exch i put
+ } for
+ } for
+
+ % Punctuation compression
+ /pcomp <<
+ <0d0a> p2 % CR LF
+ (. ) p3
+ (, ) p4
+ (: ) p5
+ >> def
+
+ /e 10000 def % "Empty"
+
+ /latlen [ % Bit length of latch between states
+ % To: U L M P D B From
+ [ 0 5 5 10 5 10 ] % U
+ [ 9 0 5 10 5 10 ] % L
+ [ 5 5 0 5 10 10 ] % M
+ [ 5 10 10 0 10 15 ] % P
+ [ 4 9 9 14 0 14 ] % D
+ [ 0 0 0 0 0 0 ] % B
+ ] def
+
+ /latseq [ % Latch sequences between states
+ % To: U L M P D B From
+ [ [] [ll] [lm] [lm lp] [ld] [sb] ] % U
+ [ [ld lu] [] [lm] [lm lp] [ld] [sb] ] % L
+ [ [lu] [ll] [] [lp] [lu ld] [sb] ] % M
+ [ [lu] [lu ll] [lu lm] [] [lu ld] [lu sb] ] % P
+ [ [lu] [lu ll] [lu lm] [lu lm lp] [] [lu sb] ] % D
+ [ [lu] [ll] [lm] [] [] [] ] % B
+ ] def
+
+ /shftlen [ % Bit length of shift to state
+ % To: U L M P D From
+ [ e e e 5 e ] % U
+ [ 5 e e 5 e ] % L
+ [ e e e 5 e ] % M
+ [ e e e e e ] % P
+ [ 4 e e 4 e ] % D
+ ] def
+
+ % U L M P D B
+ /charsize [ 5 5 5 5 4 8 ] def
+
+ % U L M P D B
+ /curlen [ 0 e e e e e ] def
+ /curseq [ [] [] [] [] [] [] ] def
+
+ /backto U def % U
+ /lastchar () def
+
+ % Derive the optimal sequences ending in each state
+ barcode {
+
+ /char exch def
+
+ % Check for optimisations in the current sequences by latching from x to y
+ { % loop
+ /imp false def
+ [ U L M P D B ] {
+ /x exch def
+ [ U L M P D B ] {
+ /y exch def
+ x B ne y backto eq or { % Only B -> backto
+ /cost curlen x get latlen x get y get add def
+ cost curlen y get lt {
+ curlen y cost put
+ curseq y [
+ curseq x get aload pop
+ latseq x get y get aload pop
+ ] put
+ y B eq { % Set backto to previous state
+ /backto x P eq x D eq or {U} {x} ifelse def
+ } if
+ /imp true def
+ } if
+ } if
+ } forall
+ } forall
+ imp not {exit} if % Repeat unless no improvement
+ } loop
+
+ % Determine optimal next sequences for each valid encoding
+ /nxtlen [ e e e e e e ] def
+ /nxtseq 6 array def
+
+ [ U L M P D B ] {
+ /x exch def
+
+ { % loop for common exit
+
+ % Skip states that cannot encode character
+ x B ne {charvals x get char known not {exit} if} if
+
+ % Extend directly
+ /cost curlen x get charsize x get add def
+ cost nxtlen x get lt {
+ nxtlen x cost put
+ nxtseq x [ curseq x get aload pop char ] put
+ } if
+
+ % Optimise for direct shifts from y to x
+ x B eq {exit} if % B is treated as a latch
+ [ U L M P D ] {
+ /y exch def
+ x y ne {
+ /cost curlen y get shftlen y get x get add charsize x get add def
+ cost nxtlen y get lt {
+ nxtlen y cost put
+ nxtseq y [
+ curseq y get aload pop
+ x U eq {su} {sp} ifelse
+ char
+ ] put
+ } if
+ } if
+ } forall
+
+ exit
+ } loop
+
+ } forall
+
+ % Optimise using P compression
+ lastchar () ne {
+ /pchars 2 string dup 0 lastchar put dup 1 char put def
+ pcomp pchars known {
+ curlen P get nxtlen P get lt {
+ nxtlen P curlen P get put
+ nxtseq P [ curseq P get aload pop pop pcomp pchars get ] put
+ } if
+ } if
+ } if
+
+ % Account for binary extension for 32 or more bytes
+ /numbytes 0 def
+ nxtseq B get {
+ sb eq {0} {numbytes 1 add} ifelse /numbytes exch def
+ } forall
+ numbytes 32 eq {nxtlen B nxtlen B get 11 add put} if
+
+ /curlen nxtlen def
+ /curseq nxtseq def
+ /lastchar char def
+
+ } forall
+
+ % Select the optimal sequence
+ /minseq e def
+ [ U L M P D B ] {
+ /i exch def
+ curlen i get minseq lt {
+ /minseq curlen i get def
+ /seq curseq i get def
+ } if
+ } forall
+
+ % Encoding functions
+ /tobin {
+ string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } bind def
+ /encu {charvals U get exch get 5 tobin} bind def
+ /encl {charvals L get exch get 5 tobin} bind def
+ /encm {charvals M get exch get 5 tobin} bind def
+ /encp {charvals P get exch get 5 tobin} bind def
+ /encd {charvals D get exch get 4 tobin} bind def
+ /encfuncs [ /encu /encl /encm /encp /encd ] def
+ /addtomsgbits {
+ /v exch def
+ msgbits j v putinterval
+ /j j v length add def
+ } bind def
+
+ % Encode the sequence
+ /state U def
+ /msgbits minseq string def
+ /i 0 def /j 0 def {
+ i seq length ge {exit} if
+
+ state B ne {
+
+ /char seq i get def
+
+ % Encode character
+ char encfuncs state get load exec addtomsgbits
+ /i i 1 add def
+
+ % Encode shifted next character
+ char su eq char sp eq or {
+ seq i get char su eq {encu} {encp} ifelse addtomsgbits
+ /i i 1 add def
+ } if
+
+ % Latches to new state
+ char lu eq {/state U def} if
+ char ll eq {/state L def} if
+ char lm eq {/state M def} if
+ char lp eq {/state P def} if
+ char ld eq {/state D def} if
+ char sb eq {/state B def} if
+
+ } { % Binary
+
+ % Find number of bytes before latch or end
+ /numbytes 0 def {
+ i numbytes add seq length ge {exit} if
+ seq i numbytes add get 0 lt {exit} if
+ /numbytes numbytes 1 add def
+ } loop
+
+ % Encode length
+ numbytes 31 le {
+ numbytes 5 tobin addtomsgbits
+ } {
+ 0 5 tobin addtomsgbits
+ numbytes 31 sub 11 tobin addtomsgbits
+ } ifelse
+
+ % Encode bytes
+ numbytes {
+ seq i get 8 tobin addtomsgbits
+ /i i 1 add def
+ } repeat
+
+ % Return to previous state as indicated
+ i seq length lt {
+ /char seq i get def
+ /i i 1 add def
+ char lu eq {/state U def} if
+ char ll eq {/state L def} if
+ char lm eq {/state M def} if
+ } if
+
+ } ifelse
+
+ } loop
+
+ } if
+
+ % Lookup the most appropriate symbol specification
+ /metrics [
+ [ (rune) 0 0 0 6 ] % Special metric for rune symbols
+ [ (compact) 1 1 17 6 ] [ (full) 1 1 21 6 ] [ (compact) 2 0 40 6 ]
+ [ (full) 2 1 48 6 ] [ (compact) 3 0 51 8 ] [ (full) 3 1 60 8 ]
+ [ (compact) 4 0 76 8 ] [ (full) 4 1 88 8 ] [ (full) 5 1 120 8 ]
+ [ (full) 6 1 156 8 ] [ (full) 7 1 196 8 ] [ (full) 8 1 240 8 ]
+ [ (full) 9 1 230 10 ] [ (full) 10 1 272 10 ] [ (full) 11 1 316 10 ]
+ [ (full) 12 1 364 10 ] [ (full) 13 1 416 10 ] [ (full) 14 1 470 10 ]
+ [ (full) 15 1 528 10 ] [ (full) 16 1 588 10 ] [ (full) 17 1 652 10 ]
+ [ (full) 18 1 720 10 ] [ (full) 19 1 790 10 ] [ (full) 20 1 864 10 ]
+ [ (full) 21 1 940 10 ] [ (full) 22 1 1020 10 ] [ (full) 23 0 920 12 ]
+ [ (full) 24 0 992 12 ] [ (full) 25 0 1066 12 ] [ (full) 26 0 1144 12 ]
+ [ (full) 27 0 1224 12 ] [ (full) 28 0 1306 12 ] [ (full) 29 0 1392 12 ]
+ [ (full) 30 0 1480 12 ] [ (full) 31 0 1570 12 ] [ (full) 32 0 1664 12 ]
+ ] def
+
+ /i 0 def
+ { % loop
+ /m metrics i get def
+ /frmt m 0 get def % Format of the symbol
+ /mlyr m 1 get def % Data layers
+ /icap m 2 get def % Reader initialisation capable
+ /ncws m 3 get def % Total of codewords
+ /bpcw m 4 get def % Bits per codeword
+ /numecw ncws eclevel mul 100 div ecaddchars add ceiling cvi def
+ msgbits length 0 eq {/numecw 0 def} if % Error correction codewords
+ /numdcw ncws numecw sub def % Data codewords
+ /okay true def
+ format (unset) ne format frmt ne and {/okay false def} if
+ readerinit icap 1 ne and {/okay false def} if
+ layers -1 ne layers mlyr ne and {/okay false def} if
+ msgbits length bpcw div ceiling cvi numdcw gt {/okay false def} if
+ okay {exit} if
+ /i i 1 add def
+ } loop
+ /layers mlyr def
+ /format frmt def
+
+ % Expand message bits into codewords avoiding codewords with all zeros or all ones
+ /allzero {dup length (000000000000) 0 3 -1 roll getinterval eq} bind def
+ /allones {dup length (111111111111) 0 3 -1 roll getinterval eq} bind def
+ /cws ncws array def
+ /m 0 def /c 0 def
+ {
+ msgbits length m le {exit} if
+ msgbits length m sub bpcw ge {
+ /cwb msgbits m bpcw 1 sub getinterval def % All but last bit
+ /cwf msgbits m bpcw add 1 sub 1 getinterval def % Last bit
+ cwb allzero {/cwf (1) def /m m 1 sub def} if % Flip last bit to avoid zeros
+ cwb allones {/cwf (0) def /m m 1 sub def} if % Flip last bit to avoid ones
+ % Concatinate the bits
+ 12 string dup 0 cwb putinterval
+ dup bpcw 1 sub cwf putinterval
+ 0 bpcw getinterval
+ /cwb exch def
+ } { % Final codeword
+ /cwb msgbits m msgbits length m sub getinterval def
+ /cwb (111111111111) 12 string copy dup 0 cwb putinterval 0 bpcw getinterval def
+ cwb allones {cwb cwb length 1 sub (0) putinterval} if % Prevent all ones
+ } ifelse
+ % Conversion of binary data into byte array
+ /cw 0 def
+ 0 1 bpcw 1 sub {
+ /i exch def
+ /cw cw 2 bpcw i sub 1 sub exp cvi cwb i get 48 sub mul add def
+ } for
+ cws c cw put
+ /m m bpcw add def
+ /c c 1 add def
+ } loop
+ /cws cws 0 c getinterval def
+
+ % Reed-Solomon algorithm
+ /rscodes {
+
+ /rspm exch def
+ /rsgf exch def
+ /rsnc exch def
+ /rscws exch def
+
+ % Calculate the log and anti-log tables
+ /rsalog [ 1 rsgf 1 sub { dup 2 mul dup rsgf ge {rspm xor} if } repeat ] def
+ /rslog rsgf array def
+ 1 1 rsgf 1 sub {dup rsalog exch get exch rslog 3 1 roll put} for
+
+ % Function to calculate the product in the field
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add rsgf 1 sub mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } bind def
+
+ % Generate the coefficients
+ /coeffs [ 1 rsnc {0} repeat ] def
+ 1 1 rsnc {
+ /i exch def
+ coeffs i coeffs i 1 sub get put
+ i 1 sub -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+
+ % Extend the input with the error correction values
+ /nd rscws length def
+ /rscws [ rscws {} forall rsnc {0} repeat 0 ] def
+ 0 1 nd 1 sub {
+ /k exch rscws exch get rscws nd get xor def
+ 0 1 rsnc 1 sub {
+ /j exch def
+ rscws nd j add rscws nd j add 1 add get k coeffs rsnc j sub 1 sub get rsprod xor put
+ } for
+ } for
+
+ % Return all but the last codeword
+ rscws 0 rscws length 1 sub getinterval
+
+ } bind def
+
+ % Create the codewords and bit string for the mode
+ format (full) eq {
+ /mode layers 1 sub 11 bitshift cws length 1 sub add def
+ readerinit {/mode mode 2#0000010000000000 or def} if
+ /mode [
+ mode 2#1111000000000000 and -12 bitshift
+ mode 2#0000111100000000 and -8 bitshift
+ mode 2#0000000011110000 and -4 bitshift
+ mode 2#0000000000001111 and
+ ] def
+ /mode mode 6 16 19 rscodes def
+ } if
+ format (compact) eq {
+ /mode layers 1 sub 6 bitshift cws length 1 sub add def
+ readerinit {/mode mode 2#00100000 or def} if
+ /mode [
+ mode 2#11110000 and -4 bitshift
+ mode 2#00001111 and
+ ] def
+ /mode mode 5 16 19 rscodes def
+ } if
+ format (rune) eq {
+ /mode barcode cvi def
+ /mode [
+ mode 2#11110000 and -4 bitshift
+ mode 2#00001111 and
+ ] def
+ /mode mode 5 16 19 rscodes def
+ /mode [mode {2#1010 xor} forall] def % Invert alternate bits
+ } if
+ /modebits mode length 4 mul string def
+ 0 1 modebits length 1 sub {modebits exch (0) putinterval} for
+ 0 1 mode length 1 sub {
+ /i exch def
+ modebits mode i get 2 4 string cvrs dup length 4 exch sub 4 i mul add exch putinterval
+ } for
+
+ % Extend the data codewords with error correction codewords to create the bit string for the data
+ /rsparams [
+ [] [] [] [] [] []
+ [ 64 67 ] % 6-bit codewords
+ []
+ [ 256 301 ] % 8-bit codewords
+ []
+ [ 1024 1033 ] % 10-bit codewords
+ []
+ [ 4096 4201 ] % 12-bit codewords
+ ] def
+ /cws cws ncws cws length sub rsparams bpcw get {} forall rscodes def
+ format (full) eq {
+ /databits layers layers mul 16 mul layers 112 mul add string def
+ } {
+ /databits layers layers mul 16 mul layers 88 mul add string def
+ } ifelse
+ 0 1 databits length 1 sub {databits exch (0) putinterval} for
+ 0 1 ncws 1 sub {
+ /i exch def
+ databits cws i get 2 bpcw string cvrs
+ dup length bpcw exch sub bpcw i mul add databits length ncws bpcw mul sub add
+ exch putinterval
+ } for
+
+ % Move to a point in the cartesian plane centered on the bullseye
+ /cmv {size mul sub mid add} bind def
+
+ % Move to a bit position within a layer
+ /lmv {
+ /lbit exch def
+ /llyr exch def
+ /lwid fw llyr 4 mul add def
+ /ldir lbit 2 idiv lwid idiv def
+ ldir 0 eq { % Top
+ lwid 1 sub 2 idiv neg 1 add lbit 2 idiv lwid mod add
+ fw 1 sub 2 idiv llyr 2 mul add lbit 2 mod add
+ cmv
+ } if
+ ldir 1 eq { % Right
+ fw 2 idiv llyr 2 mul add lbit 2 mod add
+ lwid 1 sub 2 idiv 1 sub lbit 2 idiv lwid mod sub
+ cmv
+ } if
+ ldir 2 eq { % Bottom
+ lwid 2 idiv neg 1 add lbit 2 idiv lwid mod add neg
+ fw 2 idiv llyr 2 mul add lbit 2 mod add neg
+ cmv
+ } if
+ ldir 3 eq { % Left
+ fw 1 sub 2 idiv llyr 2 mul add lbit 2 mod add neg
+ lwid 2 idiv 1 sub lbit 2 idiv lwid mod sub neg
+ cmv
+ } if
+ } bind def
+
+ % Create the pixel map
+ % For full symbols we disregard the reference grid at this stage
+ format (full) eq {/fw 12 def} {/fw 9 def} ifelse
+ /size fw layers 4 mul add 2 add def
+ /pixs [size size mul {-1} repeat] def
+ /mid size 1 sub 2 idiv size mul size 1 sub 2 idiv add def
+
+ % Data layers
+ /i 0 def
+ 1 1 layers {
+ /layer exch def
+ 0 1 fw layer 4 mul add 8 mul 1 sub {
+ /pos exch def
+ pixs layer pos lmv databits databits length i sub 1 sub get 48 sub put
+ /i i 1 add def
+ } for
+ } for
+
+ % For full symbols expand the pixel map by inserting the reference grid
+ format (full) eq {
+ /fw 13 def
+ /size fw layers 4 mul add 2 add layers 10.5 add 7.5 div 1 sub cvi 2 mul add def
+ /mid size size mul 2 idiv def
+ /npixs [size size mul {-2} repeat] def
+ 0 16 size 2 idiv {
+ /i exch def
+ 0 1 size 1 sub {
+ /j exch def
+ npixs size 2 idiv neg j add i cmv [size 2 idiv j add i add 1 add 2 mod] putinterval
+ npixs size 2 idiv neg j add i neg cmv [size 2 idiv j add i add 1 add 2 mod] putinterval
+ npixs i size 2 idiv neg j add cmv [size 2 idiv j add i add 1 add 2 mod] putinterval
+ npixs i neg size 2 idiv neg j add cmv [size 2 idiv j add i add 1 add 2 mod] putinterval
+ } for
+ } for
+ /j 0 def
+ 0 1 npixs length 1 sub {
+ /i exch def
+ npixs i get -2 eq {
+ npixs i pixs j get put
+ /j j 1 add def
+ } if
+ } for
+ /pixs npixs def
+ } if
+
+ % Finder pattern
+ /fw fw 2 idiv def
+ fw neg 1 fw {
+ /i exch def
+ fw neg 1 fw {
+ /j exch def
+ pixs i j cmv
+ i abs j abs gt {i abs} {j abs} ifelse 1 add 2 mod
+ put
+ } for
+ } for
+
+ % Orientation bits
+ [ [ fw 1 add neg fw 1 ] [ fw 1 add neg fw 1 add 1 ]
+ [ fw neg fw 1 add 1 ] [ fw 1 add fw 1 add 1 ]
+ [ fw 1 add fw 1 ] [ fw 1 add fw neg 1 ]
+ [ fw fw 1 add 0 ] [ fw 1 add fw 1 add neg 0 ]
+ [ fw fw 1 add neg 0 ] [ fw neg fw 1 add neg 0 ]
+ [ fw 1 add neg fw 1 add neg 0 ] [ fw 1 add neg fw neg 0 ]
+ ] {pixs exch {} forall 3 1 roll cmv exch put} forall
+
+ % Mode ring
+ format (full) eq {
+ /modemap [
+ [-5 7] [-4 7] [-3 7] [-2 7] [-1 7] [ 1 7] [ 2 7] [ 3 7] [ 4 7] [ 5 7]
+ [ 7 5] [ 7 4] [ 7 3] [ 7 2] [ 7 1] [ 7 -1] [ 7 -2] [ 7 -3] [ 7 -4] [ 7 -5]
+ [ 5 -7] [ 4 -7] [ 3 -7] [ 2 -7] [ 1 -7] [-1 -7] [-2 -7] [-3 -7] [-4 -7] [-5 -7]
+ [-7 -5] [-7 -4] [-7 -3] [-7 -2] [-7 -1] [-7 1] [-7 2] [-7 3] [-7 4] [-7 5]
+ ] def
+ } {
+ /modemap [
+ [-3 5] [-2 5] [-1 5] [ 0 5] [ 1 5] [ 2 5] [ 3 5]
+ [ 5 3] [ 5 2] [ 5 1] [ 5 0] [ 5 -1] [ 5 -2] [ 5 -3]
+ [ 3 -5] [ 2 -5] [ 1 -5] [ 0 -5] [-1 -5] [-2 -5] [-3 -5]
+ [-5 -3] [-5 -2] [-5 -1] [-5 0] [-5 1] [-5 2] [-5 3]
+ ] def
+ } ifelse
+ 0 1 modemap length 1 sub {
+ /i exch def
+ pixs modemap i get {} forall cmv modebits i get 48 sub put
+ } for
+
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx size
+ /pixy size
+ /height size 2 mul 72 div
+ /width size 2 mul 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/azteccode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER azteccode--
+% --BEGIN ENCODER azteccodecompact--
+% --REQUIRES preamble raiseerror renmatrix azteccode--
+% --DESC: Compact Aztec Code
+% --EXAM: 1234
+% --EXOP:
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp azteccodecompact 0.0 2015050900 60604 60376
+%%BeginData: 43 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /azteccode dup /uk.co.terryburton.bwipp findresource put
+begin
+/azteccodecompact {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Get the result of encoding with azteccode with format=compact
+ options (dontdraw) true put
+ options (format) (compact) put
+
+ /args barcode options //azteccode exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/azteccodecompact dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER azteccodecompact--
+
+% --BEGIN ENCODER aztecrune--
+% --REQUIRES preamble raiseerror renmatrix azteccode--
+% --DESC: Aztec Runes
+% --EXAM: 1
+% --EXOP:
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp aztecrune 0.0 2015050900 60573 60352
+%%BeginData: 43 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /azteccode dup /uk.co.terryburton.bwipp findresource put
+begin
+/aztecrune {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Get the result of encoding with azteccode with format=rune
+ options (dontdraw) true put
+ options (format) (rune) put
+
+ /args barcode options //azteccode exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/aztecrune dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER aztecrune--
+
% --BEGIN ENCODER codeone--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: Code One
% --EXAM: Code One
% --EXOP: version=B
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp codeone 0.0 0 0 0
-%%BeginData: 82 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-! 04Sp2A T) HtH\`B !23
-JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj
-06UoIF(oQ1NWjQC F(KHV 1G< <W@ rG ml DJ+ t5@ <5pmBp (8 *Eaa/7 Amo
-LsAWei&E+*d.AKY SnCi a0N 1N .5 SBl @m1 P-6 N[FE
-2)5B68E<AWf3'L] NYrO p u> KF D5Z 2F* j(NA moLsA
-Wf3'P!FGY<0B5(@ ZmRN0o c8t P )XR (F _-_! H]f tD5*C&O5*@ ^MH]ft&Eckr
-V1OYEdI?J0)*g/N :DfBf4 Df0 W Z5*@ ^MP# Q@= FD5Z2F*j'+ I?I/TF*)\HA
-KZ/-EcYr5DMS:K! Kp-:!E 5.E Ou%0 $H#R >A0 61KF+EVXHA WeitP#QC/Ec
-Yf=05YcC+C\c"@r GmhP% 'TNO u"b+L ]ESo @UX :eDe*F+NWE ILNI-gJD0'?
-Q5&-6EP'N4"C6AU R!KmI :C6Cc D1Qlm D3/ @Qj"-Q?@/8 ]H@P!3W:!Ks
-FF5*C/R30Ia,"-T X>"-Pj2 9RV8N3 ,N_LP !3W D5*C2S@VV& ,05?Y6Ou"b#
-@<,jrA7Zm#F(^:/C6D8R1Qk"OP#ZpnAUT_@04J@1Ch7K,@UX:eDe*FB@ZiNf@<[&OASu!rA8,p
-oNWX<1GEOb1P#Q"1@rGmlDJ+t3Eaa0T4aShlGB4m9@<-0qDNY<h1G<Hu!0T,kC5;kQ1OEgY@UX
-:nAT!YoH]gXBP#O)EG9C@'Eas#uAKY]C!KmJ>"-Q?@/<Vf!GB4mA+CfVYGV<bRBnunT!Ko5lC*
-78I!KmJH1OYEt04T3I+CfV:L]D1Q9Th2[P#Q"1@rGmlDJ+t5@<5pmBp(W+04T3I+C\c"Ch7L?!
-g7A_$'I(tBnubP1G<L!!0T-bBcpknEbo<)P!+/T5^eep04S[(EZeh"Eas#uAKY]M99M)@BOPq;
-0To%<BOPq;3Kdg6"DJuf@<-0qDMS=VWKLkV"FFTdEas#uAKY]C!KmJH99M8j0To%k5);4^@?Lb
-?@s;u:C*6toEas#uAKY]C!g66?/;=.VOo^_j052PCL]W_?Ou"b++DQ]5Oo^_%I=#IJF!,3?@q]
-:kL]NY>P'AWo+DHW4Oo^_%05;VEL]NY>Ou%NL<IK4(BOPq;J!+5e@s;u:C*7#"@<./)Oo^_j05
-2PCL]NY>Ou"b++DQ]5Oo^_%I=#IJF!,4P!:,em@s;u:C5;nR!FoeOEeo4.WKMKZBcq,G!KmJH1
-G<JcC5;qS!Ko6eP#Zpn<IL$A04T3I+CfV:L]D1Q9Th2[P#O)OATVs,@ribs+Bsj,6&6).&r7*T
-$A]%F!Jgl7@u(=p+Bsj,6AQD5(5NZ\'8R3U!Jgl7@u(Cr+Bsj,6\l_<+G_"n/;P4#!Jgl7(5N?
-(+Bsj,7#37I.Yo@+>DOhd!Jgl7&;Um'+Bsj,7>NdV2Ma&A!4I\QL]N;7L_bd^>p*@3!Chl7LeN
-UmL&l=L!/u^8L]iMLL`]nF>E/_SLhMTRLffB5gkGhHL]iM<L_Y_!>p*@3!D%qFP_K0mLj4XXaG
-'aML^8e@L_PY6>p*@3"B-m,0Sg!j$]#.G"Gd2:!Jk6A@u+W#+Bsj/;_9aYL^8eOL_PXNL^8e;L
-gu6NLgs^5>E/hb/Mf):#`'RY*f(5\%#=q?@u+WN@pL3]NW`<50fFh!L_5FSL^JqFL]N<ALgu6N
->p*@3"B6s/15HKt+c%7s(l/`Z!Jk6A@u+W#+Bsj/<%TpdL_,@sLbOW3L_bdILgu6NLgs^5?'6u
-sBnubP1OCcl+Dk\3EbT$)+DI!3Ou"b7ATDi7D281T99M(aEc6/C+Dlo8P"Uro04Sp:F!,=U!g6
-3>1G<9KDepP5L]`f5Ou"b%@s;u:D28=X99M(aEcY`7+Dlo<P"Uro062,CC`mSN#*MWB1G<c_F)
-N1<L^0)9Ou"b3Bldu2D28I\99M(aEbTT2+Dlo@P"Uro04\R3@N]2kGB4mIF(/sK;N`ghARf[g+
-EDO5G9CpI@Vh3*Ou"b0CLMK2FE2M8Ou%8mEcYr5DN4mCDKBB2P&5AREcYr5DBO+6Ec[C\Op$+b
-Deid,+D,%uF(LLjI?IQ>GB8pVA7Kh)P#-KYDeid,+D,%uF(LLjI?IQJCLML8P!FGY<%hr.Bnue
-Q!Ko6eP%A]VH#R>XE-j6JGB4m2+CfV:OogehA7Kh)+CfV:P%'TRH\MNOI?K4gOu%NL<%ha*@WN
-Z4F(/sK$'I(tARf1j+EDO4Cm#*f1Pc$e!HN6jCkr+TWI$:4P!5$b04T38+Cnu$@Zh%\1Pc$e!G
-#\Z@Yb&JWI$:5P!5$b@s;B)C*7#1F!,3?EcY]+P&+iq!Kp*=G^Y`G@s;C'+DDs.G@H_[I?I,SB
-4`9-FEqh:H\`emH\MP$I?ITn1G<BQ/MSA\Ar$JNWKK%jE,?_=FEqh:H\`trH\MPQI?ITn1G<ci
-@;Kjp+BsX&B4`_MH]g@E!g7A_3+lid8pbMoP/2R0<.0p^?'6usEcZ&8B-:i!OpR:-L]N;4B4`_
-MH]g@/F(&m'B9GHA99MJZF)5c-L]`G6P)#3FI?I,SEcZ2?De+3N!g4FW!0V2^5)93%D3>$KEcZ
-&8B9GHA99MJZF)5c-P!5%%Oo]3-/MWE'EcYZ*DeG4sP"U4MP')q1L]Djd<IL#?Ou"b$De3NmF!
-+\C!G,b[@XEn2I?K4gOu%moL]M'sE+4V(P,Wd]Bp(ZC1Lk?7AnH*,BnueQ!Fp%ZAnH*,Bp),PG
-\N!6L]MiUC6CcD1Lk?7AnH*,C*7#)AS,Oq+DQ]5P,XU;@rGpjAof)0P"Th:@;Kjp+DI!3EcZ2?
-De,$IP'DD<87QRLAnH+?!+TqYAnH+?!0TuqF(&m'B-:oO96,)mEc5KOG^Y`G04Sp3AnH*,@rGp
-jAoib.@rGpjAoj,EL]N[<P"_#pL]E53@s;C'P%'4JP,Wd]Bp(ZC1G<ci@s;u:>9IF"@WNZ+P"U
-r>P'(>GE+40M!.C#_?'7""!/LYd@rPn5!KsF/05Zk9Ou"b,+EDO5GB4mDP"UroL]E53ARf[gL]
-N[<HS9,s5*@^BF(9E8+Di69Oo^@>Oo]'2AS,Oq+D#&%@N]EKWJCS<WKKni+EDOBEc5J2EcY`7F
-!,<BC6AUR!KmJH99R,SG^Y`GI?I-4@q'L%BcqG;@s;u:A7KRf+D#&%@ZjEJG^Y`G04T3I+Bosu
-GB8oKP'(ed@s<9U!.C#_?'7""!/LYrF(9EM!KsF/056S5Ou$TlF!,"'GB4m@Oo]-(@WNZ++EDO
-4Cm&Or95,MhF(/sK;Na\9G^Y`G05YQ7F<G+(GB4mIF(9EW!HW@.E+OBP"at`R#^qk9P&-9fOu"
-b3L]ESo04Te<Ou%moF*)\HAUB47I=$bNI?IT?GB8pVL]N[<HS9)r5*@^CFEqh:P&Pc.#V[qd0J
-G170Sg!tV32^Z3+I/R+DI!3L]WA<P,4<qOuSV6L^9/-P,XU.P'L8p5'r)>P,Wkm8R7K=L]E56P
-"[NNDfCk'Ou%msL]il704JjAP!5$bI=$tX0JG170SfmqV32^Z3+I/R+DI!3L]WA9P,4<qOuSV6
-L]rr*P,XU.P'L8p5'r)>P,Wkm8R3uZ0p4_`1QDVm0JG17L]rs<Or9EB@s;u:BnueQ!Kp*3!f.#
-CV33Nq30Ia,"d2'4WKKH.H!?FqH\aA=WI9q$>q]\CP!5$b06D,O+Bosu0o,gc"-Q?@!g7\915G
-pd!g66?!g7\3Ou"b#Dfd+++Cd-^",I#A9TfI?F^m1_!f-rA9TfI?F^:.dI?ITID..N/EZen&De
-tSQA!-k7DfCkbD/E^'+EE8=Oo]*'DetSQA!-k%Dfh.f04Q,7+EVO@P%'RTOu$SjA7KOoP!+.F@
-u(,J1G<bkEejd[!Ko6eP#Qjm82"gsG'b?ADesKXCm"gIOq*X205tWMF!+[0Ec6/C+Cf>+F-:?d
-M#VmdK3aWr04AmCBkCd`F<Fe7+Cf>+F*i]CI?K52Oq)hKDesKAL]MpeK7/mmH\_Z3DesKN!g9O
-0L]MpeK89MUOq)hp!/LYcDesKN"Hoa2L]DjdK89Pa!.C"?HXgu1F,0j[WJCV=;L=6"I?K5=!Fp
- %aF,0j[WJCV=;L=6"I?K52Oq)hKDesKN!KsF<!g6H.M#VmdK89M;DesKN!KsF<!g6H.M#VmdK
-7/mmH\_]4DesKN!g9O0L]DjdK89PVOq)hp!Jg_cDesKN"Hoa2L]MpeK89M`!I^+@?'6us@rPju
-+?Vb>6&l.(1,1RA1G;(T#Ve(h1GgmE1G;+U#Ve(h1,1RA1G;.V$8F:j1GgmE1Ggm@7?.^01,1O
-=1GgmE1G;4X$8F:j1,1O=1Ggm@7ue!41,1O=1GgmE1Ggm@8<+*51,1O=1,1RA1Ggm@;iV,@2E!
-HJ1,h0G</qMI2E!HO2E!HO2DHsG3&`f\4s5#[Ec[$:L]NZ4P"UroE+sQ<L]DI6GB4m:E+*jO@Z
-m^H!g6GuD0@%++CfA!FF,-=Ecc#-@:ODB5):qVWKKo;5CJ\d?'9Jh!/LYrBle*H!KsF/056S5O
-u%,mF)N1ABldu2@rH1)L]N[<HS9,s5*@^+L]M4G%$G@]!0TKlL]MpNL]Djd<F(bIE+sQ<+DN$5
-+Dkt=L]`J5P)#3GBcqG1F)6X5P,XU]HZ3\DF!+t2Ci^_6P,X6=P,WJ?GB4m@P,X6<P,W;8G)-6
-Vs,r/#H$t%&Fa]EQI?I-LP"7\t00p^b+BsX1L]q',>q\Me>9I.+&;UQs+C-Wf+BosmL`2'X>p*
-E+6m,\V>q\Vh>9I.+)Mf28+C-Wi+BosmL`2'l>p*@-7Yi0m+BsX?La$+I>DPb),$c<s01R-h+B
-sX@LbN*W>DP_(0O5f,01[3i+BsX?LdkYm>DPV%7U7-@Lh_`8>p*@-)Mgpi+BsXgLe(eo>DR$M8
-6m?D02jGW0HaRB>q],.1,'hT+BsX/L]h!+>q],.1GBqU+BsX4L]h!+>DNfG#$i?W02sMX2BZ3H
->DNQ@$=+c[02sMZ1*BdD>DNiH$=+cYL_,@N>p*E+<%Tpd+BosmL_tpT>p*@-(l/T++BsX=L^m]
-5>p)<p+Eh=:F-91CE+sQ<P!5$1P'(VYG)-0^G^Y`H05?:COu%moL]MI/G]T$WL]N[<HS9)r5*@
-^@Bm=\ABp),Fs,oNlE+sQ<+DDs8D..N/C6D5QGV<eSC5;nR!Ko6eP#Qjm83B!fEb0,A061WAD.
-.O,Bm;:MBm=\AE+sQ<05tWMGT^L7Ci_7KBm=nGEc6/C05+p2B4uB0Ec6/CLe*[eL]W`U06_,@F
-D)e,DesKN8<Ple!g7@QDfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu?nFE2)?P#RT)I?G)'
-1G<6VA7][sAWf$9A1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]
-HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/codeone 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp codeone 0.0 2015050900 119329 129149
+%%BeginData: 512 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/codeone {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /version (unset) def
+ /encoding (ascii) def
+ /raw false def
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ raw {/encoding (raw) def} if
+
+ /stype version 0 1 getinterval (S) eq def
+ stype {/encoding (stype) def} if
+
+ encoding (raw) eq {
+ /cws barlen array def
+ /i 0 def /j 0 def
+ { % loop
+ i barlen eq {exit} if
+ /cw barcode i 1 add 3 getinterval cvi def
+ cws j cw put
+ /i i 4 add def
+ /j j 1 add def
+ } loop
+ /cws cws 0 j getinterval def
+ } if
+
+ encoding (ascii) eq {
+ /cws barlen 2 mul array def
+ /i 0 def /j 0 def
+ { % loop
+ i barlen eq {exit} if
+ /char barcode i get def
+ char 48 ge char 57 le and i barlen 1 sub lt and {
+ barcode i 1 add get dup 48 ge exch 57 le and { % Digit pair
+ cws j barcode i 2 getinterval cvi 130 add put
+ /i i 2 add def
+ /j j 1 add def
+ } { % Singular digit
+ cws j char 1 add put
+ /i i 1 add def
+ /j j 1 add def
+ } ifelse
+ } { char 127 le { % ASCII
+ cws j char 1 add put
+ /i i 1 add def
+ /j j 1 add def
+ } { % Extended ASCII
+ cws j 235 put
+ cws j 1 add char 127 sub put
+ /i i 1 add def
+ /j j 2 add def
+ } ifelse } ifelse
+ } loop
+ /cws cws 0 j getinterval def
+ } if
+
+ encoding (stype) eq {
+ /vals [
+ [ (0) (1) (10) (11) (100)
+ (101) (110) (111) (1000) (1001)
+ ]
+ [ (0) (1010) (10100) (11110) (101000)
+ (110010) (111100) (1000110) (1010000) (1011010)
+ ]
+ [ (0) (1100100) (11001000) (100101100)
+ (110010000) (111110100) (1001011000)
+ (1010111100) (1100100000) (1110000100)
+ ]
+ [ (0) (1111101000) (11111010000) (101110111000)
+ (111110100000) (1001110001000) (1011101110000)
+ (1101101011000) (1111101000000) (10001100101000)
+ ]
+ [ (0) (10011100010000) (100111000100000) (111010100110000)
+ (1001110001000000) (1100001101010000) (1110101001100000)
+ (10001000101110000) (10011100010000000) (10101111110010000)
+ ]
+ [ (0) (11000011010100000) (110000110101000000) (1001001001111100000)
+ (1100001101010000000) (1111010000100100000) (10010010011111000000)
+ (10101010111001100000) (11000011010100000000) (11011011101110100000)
+ ]
+ [ (0) (11110100001001000000)
+ (111101000010010000000) (1011011100011011000000)
+ (1111010000100100000000) (10011000100101101000000)
+ (10110111000110110000000) (11010101100111111000000)
+ (11110100001001000000000) (100010010101010001000000)
+ ]
+ [ (0) (100110001001011010000000)
+ (1001100010010110100000000) (1110010011100001110000000)
+ (10011000100101101000000000) (10111110101111000010000000)
+ (11100100111000011100000000) (100001011000001110110000000)
+ (100110001001011010000000000) (101010111010100101010000000)
+ ]
+ [ (0) (101111101011110000100000000)
+ (1011111010111100001000000000) (10001111000011010001100000000)
+ (10111110101111000010000000000) (11101110011010110010100000000)
+ (100011110000110100011000000000) (101001101110010010011100000000)
+ (101111101011110000100000000000) (110101101001001110100100000000)
+ ]
+ [ (0) (111011100110101100101000000000)
+ (1110111001101011001010000000000) (10110010110100000101111000000000)
+ (11101110011010110010100000000000) (100101010000001011111001000000000)
+ (101100101101000001011110000000000) (110100001001110111000011000000000)
+ (111011100110101100101000000000000) (1000011000011100010001101000000000)
+ ]
+ [ (0) (1001010100000010111110010000000000)
+ (10010101000000101111100100000000000)
+ (11011111100001000111010110000000000)
+ (100101010000001011111001000000000000)
+ (101110100100001110110111010000000000)
+ (110111111000010001110101100000000000)
+ (1000001001100010100110011110000000000)
+ (1001010100000010111110010000000000000)
+ (1010011110100011010110000010000000000)
+ ]
+ [ (0) (1011101001000011101101110100000000000)
+ (10111010010000111011011101000000000000)
+ (100010111011001011001001011100000000000)
+ (101110100100001110110111010000000000000)
+ (111010001101010010100101000100000000000)
+ (1000101110110010110010010111000000000000)
+ (1010001011111011010000000101100000000000)
+ (1011101001000011101101110100000000000000)
+ (1101000110001100001011100010100000000000)
+ ]
+ [ (0) (1110100011010100101001010001000000000000)
+ (11101000110101001010010100010000000000000)
+ (101011101001111101111011110011000000000000)
+ (111010001101010010100101000100000000000000)
+ (1001000110000100111001110010101000000000000)
+ (1010111010011111011110111100110000000000000)
+ (1100101110111010000100000110111000000000000)
+ (1110100011010100101001010001000000000000000)
+ (10000010111101111001110011011001000000000000)
+ ]
+ [ (0) (10010001100001001110011100101010000000000000)
+ (100100011000010011100111001010100000000000000)
+ (110110100100011101011010101111110000000000000)
+ (1001000110000100111001110010101000000000000000)
+ (1011010111100110001000001111010010000000000000)
+ (1101101001000111010110101011111100000000000000)
+ (1111111010101000100101001000100110000000000000)
+ (10010001100001001110011100101010000000000000000)
+ (10100011101101011000010000001111010000000000000)
+ ]
+ [ (0) (10110101111001100010000011110100100000000000000)
+ (101101011110011000100000111101001000000000000000)
+ (1000100001101100100110001011011101100000000000000)
+ (1011010111100110001000001111010010000000000000000)
+ (1110001101011111101010010011000110100000000000000)
+ (10001000011011001001100010110111011000000000000000)
+ (10011111001010010101110011010101111100000000000000)
+ (10110101111001100010000011110100100000000000000000)
+ (11001100101000101110010100010011000100000000000000)
+ ]
+ [ (0) (11100011010111111010100100110001101000000000000000)
+ (111000110101111110101001001100011010000000000000000)
+ (1010101010000111101111101110010100111000000000000000)
+ (1110001101011111101010010011000110100000000000000000)
+ (10001110000110111100100110111111000001000000000000000)
+ (10101010100001111011111011100101001110000000000000000)
+ (11000110111100111011010000001011011011000000000000000)
+ (11100011010111111010100100110001101000000000000000000)
+ (11111111110010111001111001010111110101000000000000000)
+ ]
+ [ (0) (100011100001101111001001101111110000010000000000000000)
+ (1000111000011011110010011011111100000100000000000000000)
+ (1101010100101001101011101001111010000110000000000000000)
+ (10001110000110111100100110111111000001000000000000000000)
+ (10110001101000101011110000101110110001010000000000000000)
+ (11010101001010011010111010011110100001100000000000000000)
+ (11111000101100001010000100001110010001110000000000000000)
+ (100011100001101111001001101111110000010000000000000000000)
+ (100111111101111101000010111101101110010010000000000000000)
+ ]
+ [ (0) (101100011010001010111100001011101100010100000000000000000)
+ (1011000110100010101111000010111011000101000000000000000000)
+ (10000101001110100000110100100011000100111100000000000000000)
+ (10110001101000101011110000101110110001010000000000000000000)
+ (11011110000010110110101100111010011101100100000000000000000)
+ (100001010011101000001101001000110001001111000000000000000000)
+ (100110110110111001100100101010001110110001100000000000000000)
+ (101100011010001010111100001011101100010100000000000000000000)
+ (110001111101011100010011101101001001110110100000000000000000)
+ ]
+ ] def
+
+ /normalize {
+ /base exch def
+ /num exch def
+ num length 1 sub -1 1 {
+ /i exch def
+ num i 1 sub 2 copy get num i get base idiv add put
+ num i num i get base mod put
+ } for
+ { %loop - extend input as necessary
+ num 0 get base lt {exit} if
+ /num [0 num {} forall] def
+ num 0 num 0 get num 1 get base idiv add put
+ num 1 num 1 get base mod put
+ } loop
+ % Trim leading zeros
+ /num [/i true def num {dup 0 eq i and {pop} {/i false def} ifelse} forall] def
+ num length 0 eq {/num [0] def} if
+ num
+ } bind def
+
+ /bigadd {
+ 2 copy length exch length
+ 2 copy sub abs /offset exch def
+ lt {exch} if
+ /a exch def /b exch def
+ 0 1 b length 1 sub {
+ dup a exch offset add 2 copy get b 5 -1 roll get add put
+ } for
+ a
+ } bind def
+
+ % Convert value plus one to binary
+ /v [ 1 ] def
+ 0 1 barlen 1 sub {
+ /i exch def
+ vals i get barcode barlen i sub 1 sub get 48 sub get
+ [ exch {48 sub} forall ] v bigadd /v exch def
+ } for
+ /v v 2 normalize def
+
+ % Split into 5-bit codewords
+ /v [ 5 v length 5 mod sub 5 mod {0} repeat v aload pop ] def
+ /cws v length 5 idiv array def
+ 0 1 cws length 1 sub {
+ /i exch def
+ v i 5 mul 5 getinterval
+ 0 exch {add 2 mul} forall 2 idiv
+ cws exch i exch put
+ } for
+
+ } if
+
+ % Basic metrics for the each symbol
+ % ver row col dcol dcws rscw rsbl ro ri rl
+ /metrics [
+ [ (A) 16 18 16 10 10 1 4 99 6 ]
+ [ (B) 22 22 20 19 16 1 4 99 8 ]
+ [ (C) 28 32 28 44 26 1 4 22 11 ]
+ [ (D) 40 42 36 91 44 1 4 16 16 ]
+ [ (E) 52 54 48 182 70 1 4 22 22 ]
+ [ (F) 70 76 68 370 140 2 4 22 31 ]
+ [ (G) 104 98 88 732 280 4 6 21 47 ]
+ [ (H) 148 134 120 1480 560 8 6 20 69 ]
+ [ (S-10) 8 11 10 4 4 1 99 99 99 ]
+ [ (S-20) 8 21 20 8 8 1 99 99 99 ]
+ [ (S-30) 8 31 30 12 12 1 99 99 99 ]
+ [ (T-16) 16 17 16 10 10 1 99 99 99 ]
+ [ (T-32) 16 33 32 24 16 1 99 99 99 ]
+ [ (T-48) 16 49 48 38 22 1 99 99 99 ]
+ ] def
+
+ % Select metrics of an appropriate symbol
+ /i 0 def
+ { % loop
+ /m metrics i get def
+ /vers m 0 get def % Version of symbol
+ /rows m 1 get def % Rows in symbol
+ /cols m 2 get def % Columns in symbol
+ /dcol m 3 get def % Data columns in symbol
+ /dcws m 4 get def % Data codewords in symbol
+ /rscw m 5 get def % Error correction codewords
+ /rsbl m 6 get def % Error correction blocks
+ /riso m 7 get def % Riser offset
+ /risi m 8 get def % Riser interval
+ /risl m 9 get def % Riser length
+ /dcpb dcws rsbl idiv def % Data codewords per block
+ /ecpb rscw rsbl idiv def % Error codewords per block
+ /okay true def
+ version (unset) ne version vers ne and {/okay false def} if % The version must match that supplied
+ cws length dcws gt {/okay false def} if
+ okay {exit} if
+ /i i 1 add def
+ } loop
+
+ % Extend cws to ncws codewords by addition of pad characters
+ stype not {
+ /cws [ cws aload pop dcws cws length sub {129} repeat ] def
+ } {
+ /cws [ dcws cws length sub {0} repeat cws aload pop ] def
+ } ifelse
+
+ % De-interleave the codewords into blocks
+ /cwbs rsbl array def % Array of data codeword blocks
+ /ecbs rsbl array def % Array of error correction blocks
+ 0 1 rsbl 1 sub {
+ /i exch def
+ /cwb dcpb array def
+ 0 1 dcpb 1 sub {
+ /j exch def
+ cwb j cws j rsbl mul i add get put
+ } for
+ cwbs i cwb put
+ } for
+
+ % Log and anti-log tables and function to calculate product in the field
+ /gf stype {32} {256} ifelse def
+ /gf-1 gf 1 sub def
+ /pm stype {37} {301} ifelse def
+ /rsalog [ 1 gf-1 { dup 2 mul dup gf ge {pm xor} if } repeat ] def
+ /rslog gf array def
+ 1 1 gf-1 {dup rsalog exch get exch rslog 3 1 roll put} for
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add gf-1 mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } bind def
+
+ % Generate the coefficients for the Reed-Solomon algorithm
+ /coeffs [ 1 ecpb {0} repeat ] def
+ 0 1 ecpb 1 sub {
+ /i exch def
+ coeffs i 1 add coeffs i get put
+ i -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+ /coeffs coeffs 0 coeffs length 1 sub getinterval def
+
+ % Reed-Solomon algorithm to derive the error correction codewords
+ 0 1 cwbs length 1 sub {
+ /i exch def
+ /rscws [ cwbs i get aload pop ecpb {0} repeat ] def
+ 0 1 dcpb 1 sub {
+ /m exch def
+ /k rscws m get def
+ 0 1 ecpb 1 sub {
+ /j exch def
+ rscws m j add 1 add coeffs ecpb j sub 1 sub get k rsprod rscws m j add 1 add get xor put
+ } for
+ } for
+ ecbs i rscws dcpb ecpb getinterval put
+ } for
+
+ % Extend codewords with the interleaved error correction codes
+ /cws [ cws aload pop rscw {0} repeat ] def
+ 0 1 rscw 1 sub {
+ /i exch def
+ cws dcws i add ecbs i rsbl mod get i rsbl idiv get put
+ } for
+
+ % Module matrix for layout of the codewords
+ /mmat dcws rscw add stype {5} {8} ifelse mul array def
+ /r 0 def /c 0 def
+ 0 stype {2} {1} ifelse cws length 1 sub {
+ /i exch def
+ stype not {
+ (00000000) 8 string copy dup cws i get 2 8 string cvrs
+ dup length 8 exch sub exch putinterval [ exch {48 sub} forall ]
+ dup 0 4 getinterval /top exch def
+ 4 4 getinterval /bot exch def
+ } {
+ (00000) 5 string copy dup cws i get 2 5 string cvrs
+ dup length 5 exch sub exch putinterval [ exch {48 sub} forall ]
+ /c1 exch def
+ (00000) 5 string copy dup cws i 1 add get 2 5 string cvrs
+ dup length 5 exch sub exch putinterval [ exch {48 sub} forall ]
+ /c2 exch def
+ /top [ c1 0 3 getinterval aload pop c2 0 2 getinterval aload pop ] def
+ /bot [ c1 3 2 getinterval aload pop c2 2 3 getinterval aload pop ] def
+ } ifelse
+ mmat r dcol mul c add top putinterval
+ mmat r 1 add dcol mul c add bot putinterval
+ /c c top length add def
+ c dcol eq {/c 0 def /r r 2 add def} if
+ } for
+
+ % Create bitmap and add finder patterns
+ /mmv {cols mul add} bind def
+ /pixs [ rows cols mul {-1} repeat ] def
+
+ % Centre pattern
+ /artifact [
+ {cols {0} repeat} bind
+ {cols {1} repeat} bind
+ {0 cols 2 sub {1} repeat 0} bind
+ {0 1 cols 4 sub {0} repeat 1 0} bind
+ {cols 1 sub 2 idiv {-1} repeat 1 cols 1 sub 2 idiv {-1} repeat} bind
+ {cols 1 sub 2 idiv {-1} repeat 0 cols 1 sub 2 idiv {-1} repeat} bind
+ {1 cols 2 sub {0} repeat 1} bind
+ {1 0 cols 4 sub {1} repeat 0 1} bind
+ ] def
+ /cpat <<
+ /A (121343)
+ /B (12134343)
+ /C (12121343)
+ /D (1213434343)
+ /E (1212134343)
+ /F (1212121343)
+ /G (121213434343)
+ /H (121212134343)
+ /S (56661278)
+ /T (5666666666127878)
+ >> vers 0 1 getinterval get def
+ pixs 0 rows cpat length sub 2 idiv mmv
+ [ cpat {artifact exch 49 sub get exec} forall ] putinterval
+
+ % Risers
+ 0 1 risl 1 sub {
+ /i exch def
+ riso risi cols 1 sub {
+ /j exch def
+ [ 1 i 12 mod 0 eq {1} {0} ifelse ] dup
+ pixs j i mmv
+ 3 -1 roll putinterval
+ i risl 1 sub ne {
+ pixs cols j sub 2 sub rows i sub 1 sub mmv
+ 3 -1 roll putinterval
+ } {pop} ifelse
+ } for
+ } for
+
+ % Black dots
+ <<
+ /A [ [12 5] ]
+ /B [ [16 7] ]
+ /C [ [26 12] ]
+ /D []
+ /E [ [26 23] ]
+ /F [ [26 32] [70 32] [26 34] [70 34] ]
+ /G [ [27 48] [69 48] ]
+ /H [ [26 70] [66 70] [106 70] [26 72] [66 72] [106 72] ]
+ /S-10 []
+ /S-20 [ [10 4] ]
+ /S-30 [ [15 4] [15 6] ]
+ /T-16 [ [8 10] ]
+ /T-32 [ [16 10] [16 12] ]
+ /T-48 [ [24 10] [24 12] [24 14] ]
+ >> vers get {pixs exch aload pop mmv 1 put} forall
+
+ % Place the modules onto a pixel map between alignment patterns
+ /j 0 def
+ 0 1 pixs length 1 sub {
+ /i exch def
+ pixs i get -1 eq {
+ pixs i mmat j get put
+ /j j 1 add def
+ } if
+ } for
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx cols
+ /pixy rows
+ /height rows 72 div 2 mul
+ /width cols 72 div 2 mul
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/codeone dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER codeone--
@@ -6202,160 +18522,658 @@ HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: ccversion=b cccolumns=4
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1-cc 0.0 0 0 0
-%%BeginData: 152 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 05tH61 bg qP3%oD i/n
-8fPFCfK5H"(o:FD l%L@W uO* E0A q <G` k$> D/! L#DfB6 !1 bgqP3% oDi
-/n8fPFCfK5H"(o: FDl%L @Wu O*E 0A q< G`i LhB 6,dZ@q 0k A'Tt>: %52
-X=FD5Z2F-8_M1G< 3GEa s#u AW f6 ?1G <9W DKK E0@<
-Wi+@;L!rOu"b$@s 2F(F ( oQ 1N WER O1G <6J@ rH1+D
-/OENs,o/kCh[d/H #R>T!0 T,k C h[d 2B k2=! M#W VoDfBf4Df0 WZY:js=EbTE
-(FEqh:P!+/J!Ko= '%<$3- Bl@ m 1H]k FA@; L!r P!+/T5^eep OuSV6P,4<rN
-WD;+NHB2`AWf3'O tDh\P' )pO Ou%N 5OtC crF _-^lI?ITYP %BdtOuY16E-
-,f4DKCt)Ou%NL<, Z_tBl @m1H ]g15P "@<: @q0 FnF_u#;+Ce nkDesQ5DKCs
-lOu"b-Bl8-/A9;K -Ch[d 2Bk2= !Ot;b P@q 0"eCisT4F, 9jZ4aT:R04e
-R00f+Ug06M5D@>G %>ARTI9 L]];QE +<I8! \\2 -0eG+83$;^ @G%G]8Bl@mL
-!Fq:0H\_fQHYdD6GA1T0BS\L.WJD.L;LO^.04\L5@:EYcDf'B+L]fAA@<>pe@<-F2@:O(aA;C:
-?A79Rg@UX:uFCAZpARo^rDJ=n.04\L5@:EYcFE2MA@psIjA;C@AA79Rg@UX:nBl.R+ARpT!04\
-L5@:EYcAU&0&DId<hL]fAA@<>pe@<,q(E+*WpARok(@:O(aA;C@P4s4ZUDKL/CAWf\>@q0"eCi
-sT4F-8_M1OYEc04fBI@;]V&055<e5*@]TDfp.EBl9)CP,4<t05?:COu$fiH]A,5P)XgO3,`q]P
-!3WD5*C2S@VV&,L]NY>05?Y6Ou&8DOuS6tL]`f6Ot:NoFHSh&L]N[<P!5%ROuSV6L]`g>L]`f(
-P"^:NOuRB&FHSh&P!5%SP%&0h!AA2N5*@^?F``E>C6D8R5^eeqI?J/iOq*X204AR9+BosoOu"b
-"Bm*p$L]W_sOu$QUEas#uAWf$9@Yb&JWJCS<5*ATdOuSI%P!+/T5^eepNWCSlNKSFI5*C&O5)o
-XlP)XgO5*C&O5)9;s!Kr4dH]A)^",Hu@LOG=c>9I?gF-6TfFcm]"!g3SI=C!RgBlfG$Ou$N\G%
-#3C",Hu@LLk^L@;]V=G^Y`dP'&ElF*2G@ATE-\3/Bk`8s2Ao>*<<W"FZFCOu"b*F)H,;0RJsBL
-bOuaP!4[^P$sLVI?G)'1G<H`DKTeNH]g@E0p5.l5);4^@?LbAOq*X2HXUW0P%'4JP"L(0Blf(1
-P"Uf:0eebR@;0e=!0U!8!\lEm4d'hoBlf(1P"Uf:0fP7YP&bo*s,I.80Tn\LP#Qjm<+0K^P%'4
-JP"L(0Blf(1P"Uf:3A?UZHS9Ob@;0mnClSQW0To(l1NnpjL]NZ2HZk2FP"TM1F`;;2EdNTBNWL
-piP!FGY<.0p/G*6<j!g60&G)--]95/HbF_riUG)-0^95/HiE,]B/Op$,f!KI490p4eMP#Qjm<-
-FF6L]`f4HZk2FP"TM1DKTeN+EiPAP"TM1DKTeMOp#ra!g62jF*2G@ATEq:H\_``!\lEm5^eepI
-?IQQP%'4MP"L(EL]ET2Ble07D)!/VL]NZ3Ble07D(q+UG)-3_95/HbF_rgq"EoS'P"TM1F`;;2
-EfpQPL]`Y=0enhVI?IQXP#Qjm<.0p/M#WJ90Tn\LP%?:`ATVU(A<K->1G<WbEb1CtOu"b'DIYD
-Ws,o/kCi4B4ATDKpM#NPn05P'5E+iZtF_t]1Bk)ttOu"b-Ble2N1cC0fOu"b5DdmEuH]k4g30I
-a,!KsF<!0TO%!KoWnL]NZ@P!4[UP'DD<8<Prg",Qu?LPQ"f!g6ZK@ZmRN0TnDY@Yb)K=H[-V5*
-Dn.5*C2>Oq*X204A[9BON#G4GZ:Z!Jjp+OuS7`P,X6@FDkW&DLI[=LbOVcLcKgF3/@^#!Jgr%D
-dmEuI?I-5DIYD]"Yh_d0ekjUOu"b/F_t]1Bk&8J4GWun!JkrHOuSI'0JJ:aP,4<ZOuS7"M#WWn
-L^T"?P,4<qOuSV6L]W`'P,XU.P'N3ML]ET2Ld@1eH]g@E!/OsEG^Y`SOuS6uP"UTsP!+/T3/@T
-k?BTP]P#RT.L^9.ENX%6l0JG170SfssV32^Z3/@Zms,r.n!f.)EV33Nq30Ia,#Eh96WKKH.H$t
-iHCgh.!BOPe$D.Ra%@u^[G0JG1E5*@]T@;Kmr@;^4)ATDKp+?VcB0Sfac3I?oKLb"XfL]qm=@V
-K_.P"92&@kiuI0JP::0o/,O!Jjp+OuS7@P,X6AFDkW&DLI[=LanDh0ekC:0eeD7L]N;bH]g@E&
-!?sL#'=cmBl8?^88N0dD.Ra%@u^XF0JI<WF)Nrn2N@qp0JP785!G,c055KG2Dd<74?SERL]N;l
-H]g@E/!?lf"a"ZlBl8?^87laL0ocDk0ekC;Ld?gtLg#.g3/@TuWJCe$DdmEuI?I-W@>Fr?H@(f
-7L^0*BL^/$?@VK_.P":BPNX.?o0eb=90JJ;,NX.?o0eb=90JSA0L]N;bH]g@C!6(*%L^8*@@VK
-_.P":BiL]N;rH]g@C!5"BpL^8*@@VK_.P":C9NX.?o0ekC:0enJ,NX.?o0ekC;0JI<\F_t]1Bk
-*/*0JG1s@;Kmr@;^4)ATDKpNWh*j0eb:F5*@^=ATVU(A<$^G0TnSG@;0e=!0U!8!\lEm4^i&GL
-]ET2NWLpoP!+tKHXUW3@;I&pBlf(1P"Us2OuS6tL]W`5Ot;=gJ<F`35*@m]!f-o@9Tgr_!KsF<
-+HgQ(5)9>t!g66?/<U$s!KI^F0JG170JG170JG170JG2:&<`lQ)3Qt8",Qu?LPQ"f&<`lQ0TnD
-Y@YbSY5*Dn.5*C1qL]N;3L]iP6P)"C?0TrD`P"B(rF,0gZ99''.0p4\HL]DjML]Mpe<F%7fA7g
-ugOu"b"BlbD*Blf(2@;0eG@Yb&JWKKr<1OXU'@q90o>DN<9!/LZ3!F:jEI?IT=BlfGHL]ETTHX
-UW0L]ET2NWLphP!+.FB5hH*>9I?gG%#3I!\lBl97))M8R7K8@;0eG@Yb&J:jXj.E+U4s+D5Y*O
-ogehAo;*5+C1-dI?IP_@;0d*@;0e=!F]\`P%'4JP,XU<Ou%N505#69+Bot#DIYCD?'7!lP#ZpW
-04SO)+BosuA7gu+P')Q\L]E52L]E52L]N;4L]N;4?'6usB5hH*>9I471OYEd05YW<AW@"5F_t]
-1Bk*;^I?IQHATVU(A<$^G0p4\H04SO)+BsX&L]LeE1G<0N3A;RaBm*p$NWM3pP"UroDK'W-L]N
-Y>@;._UP%'SkHXUVK0Hb7PEb1%-Oo]!*3A?V*DK'W-P,X6<P,XU<I=$tSI?IS`@;._UEb0*N5*
-@]TDII@#BOQ\s@;._UEb0*7OuS7`P"Lm$Lg#sMOp$,f!KmJ3P#Qjm8Wkk_DJjT6F,0g)BfRkfA
-SldW3/B8O8s2Ao3Kdg6"FGq*Oo]uo<.0p$Ou"b.De*E%DII@#BON$$DKTf;P#-Lc"^u4dBOQ=9
-NX'HED.Ra%@ssM?Ou$uaCiF&r+Du(>D0(j@@;._UEb0*N@ZkST05YW<AW@1-CiF&rDKTf-EbT$
-H1OYEc04SO)+BosuA7gu+P'(V[A7^c0@;Kmr@;^4)ATDKpP!+/J!.C#0D/WrrNX'HED.Ra%A!0
-!%L]N;3I?IQHDe*F>"^u4dBOR&eH\_]Y!I^,1?'6us@;0d;+CSu*P%'4JP#-L6Blf(2P"U4MM#
-Vmd<K].HBlc"h!\uKn4^i&G0ocAr0JG>H4d'i404SO)+BosuA7gu+P'(2IF"r[V1,4qTH\_]Y!
-.B3M!Jgc)P#YeN1OXU'@q90o>9IEdAs*4YFbg$'Ou%NL<A/65@;I'(E,oNG!0V2G@;._UL]D=3
-Eb1D-Ot;$.L]Djd<K].u&4/cU8P2WL:/Fec;cHe">%),*0Hb7PEb1%-P"_$uH]hj$5*C&O5*C%
-A@<Q'qP!5$bI=%-"04B$4Cl&+S1OYEdDK]H)L`_dl@<Q'qM#WWTOp$,l"Y_Va0JJ:dP,4<ZOuR
-?&@;L`$L]rs<Ot`%YP%'4NP!5&.P!5%S>EV0sLbP!kI?I0-05b65FE<U/Ou&+$0JG17L]im;Or
-9EB@<Q'qL]WA8P,4<qOuSV6L]il)P,XU.P'L8p5'r)>P,Wkm8R3uX@VKq*P!5$b04SO)+BosuA
-7gu+P'(YOBlnEZ!g7\7@VKq*Oogeh?'7!lH]AFe0JG170JG170Sg(!V32^Z3,WnJCkr.K$Bh6K
-0TnDY@YbAS5*Dn.5*C1qP!45K0TrD`P"Aq4DIR=%F-8_M1QDVm0JG17L]rs<Or9EB@;._U+Du.
-=AWf]B6'A4'!f.#CV33Nq30Ia,"d2'4WKKH.H!?FqH\aA=WI9q$>q]VqBlnEZ5*@]T@q90o>9I
-EdAs*4YFbg'S!Jgc4!Jgbo@VKq*Oogeh@:EqmF-6TfF^:.dI?ITIDe*F>#B"[$ATDKpP!+.FB5
-hH*>9I?g3A>JbD0p\o8RZ=SP%'4JP#-L;DIYDLP#P_M1OXU'ASu"!+Dl%-AW?q&CiF&rP!+/#C
-iF&rI=!)FCiF&rDKTf-EbT$3P#[Z$055;H>9I?g3A>JbD0p\o8RZ=SP%'4JP#-L;DIYDLP#P_M
-1G<ZhF<G:8P%'4OP&-9fOu"b+L]ESoL]E53Bl9)CL]N[<HYIA\5*AQMDI[aN5*AR%3*VP0H\aA
-=WI9q$>p+'.FHSh&P!5%SP%&0h!AA2N5*@^MP"769A7crg+CeqoOogehDfp/X!,@ZjOogeh?'6
-usB5hH*>9I471LY!=P%'4JP#-"6A7^c)@;Kmr@?PJjEdKHVDe*F>#B"[$ATDKpOu%NL<.0p004
-AR9+CSu*L]LpuF-:!g!KsFF9Th2?BlfGHL]ETTHXUW00oc;j0p4\.Blc"h"?8(h1m1"bEdKHPE
-+U4s+D5Y*Oogeh@;0mnC`m/#F"rhNH[V&K?'6us@;0d*@;0e=!F]\`P%'4JP,XU<Ou$N\F-:!g
-!0V2G05#69+Bot$E+Y77P'(AS@kf*3Ou%NL<.0p/I?IQXP#Q:0FD,T'NWChs4aShlA7crgL]C_
-D1G<B[Aft;#?'6usD/WrrNX'HED.Ra%A!/WrP#O)CBkD((ARpT5Ou8CY>DN98!Jgl*I?I-,H]A
-.]0SfdnV32^Z30H7W!Jgo8s,r.n0TlI"G[Y;uBm=3"L]`G6P)#3FI?I0+L^T">L_P2aP":BFL`
-_ERLa7=qP":BX?$hA7L]Wa9Ot`%Y@;0=fG\(EA",Hu@LQZn1P"CH0L]LpuF-:!g!KsF/056S5O
-u"b"BcphuF!,1[99M(aG%#20@;0mnC`m/#P"UroB5hIG@UWu6@Zgb8@;M*9Oo^^POuS6tB5hIG
-H'1."E+Y8B@;-igP!45@P"ArBH'1."E+Y8B@;1m6Oo]`7C`lrF5'q^@8R7L)05#69P!5$bBcph
-uF-:!g!KsFFD..-jBm=3"+CSu?!/L]>9TieHE0:?NB5hIG@Yb&J!KmbP3/@QIE+Y8YOuR)nAs-
-V8DIYDaGV<]KAs,?@1OYEcI?I,SEb0)sBlnEC06M>IA<K->1Ljp<ATDj+Df1R9A!1\U4?P9*+B
-osmL&e-+!/cSULhqlLLe`af>p*@+!2kPOMMQG3@Ydcb+BsR#`J+AjL&d*eCkthl+C-X0+BosmL
-&k,*!@W['!/:L#L&dm&BS\WR+BsR&!/:Q2L&r3H!MG/J0STSSL&dTsE/7&@+C-*oL'40("8ITQ
-8;72=L&pdu!FUW_#_i?+L&dTs@#-dJ+C-*R4s4?FG%G]8Bl@mP94MIADesQ5DKCU8P,XU;04JX
-;@ps=tP!5$bM#UpuFCS`uF*j'0F`V,)P"L(a5(/SnP')298Wl&hs,q5GF`V,)P,Wkm<.0*U4>1
-3#s#rUh@q0[nEcYr5DN[YUFY@SSF`V,)L^9/%Oq<d-OuS7%P#@)>P&-:FL^'#WOo^_%D29U'@=
-*e9I?IQHLaeKZD2&%`P$sLVH\`5]P#Q:Q!25QJD2&'VP$sLVH\`emP#Q:Q!C;l@H\aq8P#O)G@
-q0_(P!5$b05VhK+D#%mGB8oJL]`e@Ou"b$+Dbb0GA1T0BS\L.WJD.L;N`hQ+CgR4Lg#s<HS8kO
-@u(/K!Ko6eP#O)T+Di62OuAI7Ot;bP06CiK+CcO7P&+]>@s<!WWJCY>WKK5s"d2c>#*Nec5)9B
-*C6AUR#a0"e1NdbMA;24?P$r]ZB658=F(JmFWI9,Ls*^&1I?ITn3/ITt4aW?7@q0[nEcYr5DN4
-a+P!+.F@q0[nEcYr5DN4a,Ou%N5@q0[nEcYr5DN4a,P!*VqDKL/CAW@".F"o7$1,tF[Op$+b@q
-0[nEcYr5DN4a-Ou"b$@q0FnF_u#;+Dbb0GA1T0BS\L.WJD.L;N`haHS8l=G%G]8Bl@mFs,o0dP
-#Zpn<HW@oA0>o(D.74$F+'3NI?G)'1G<<W@rGmhH]g?AEaa0TD0qF0P"U4MP')29<EkVMH\aA=
-WI9q$?'711@ZiofE+W[!A!0#jP!5%S05?Y6C6AU\1OYDrOu"b/F_t]1Bk)1+DK?q)+D5Y*P%&c
-o!.C#_L]E82?'6us@;Kmr@;^4)ATDKpEcl8@+Bot$E+Y8BH\_ZMP(SPj?'6usDIn'7Ble2N1cB
-8iCj@.-+D5Y*P%&co!.C#_L*mL;Ou$`iAs-VZ!KsF<s+gZ%056S5Ou$`iAftfN99''-0SfdnV3
-2^Z3/@QIE+U5,P"UrtAo;*5P!+/TFbj@PP#RThBcq&-As-VZ!KsFFAp]\#L]M.-AftfD!KmJH9
-9M8HDIYDa4aW?7LgGLm<0DKSP#Q=AD.Ra%A!0$=@!cd6D.Ra%@rc^0F!,0>DKTf-EbT$(F`)7C
-BnuhR!Kp*3!g3SIG^XpVF_t]1Bk)1+DK?q7L]ET_I?ITn3+6WBBOPe$D.Ra%A!0$=@!c<uE+iZ
-tF_t]1Bk)1+DK?q7+CT)*BOPe$D.Ra%@rc^0F!,1Q!KmJH98EV3!Kq\UHXU`0BOPe$D.Ra%@rc
-^0F!,1Q!0VSTP#[Z)Ble2N1cCL\P$jG:@;Kmr@;^4)ATDKpP!5%:P&QQeHZ!D>FD5f72Dd=1DJ
-XS@BnubPG^XpVAU&<2F)Nrn2K*JLGp$fDDIn'7Ble2N1cB8iCj@.;L]NY>P"UT3Oo^_jI?ITYP
-"76=E+W[!@tl+>OpR:-0564BOu"b+L]ESoHYFU8E+Y8BP!+/T5^eepHYm\3AW@"5F_t]1Bk*;h
-HYFU8E+Y8BL]Wa=P$r]n!g9CC3/@QIE+U5,P"UrtAo;*5P!+/TFbj@PP#RThOuS6uB5hH*Bnue
-Q!Kp*=3+d&<0p4\HP')ReI?IQmG`k%(F_t]1Bk*;iP$iWSF_t]1Bk&8sDI[TqAM7a?BnuhR!Ko
-7%5^eepP'(SLCiF&rDKTf-EbT#+DKTf-EbT#+ASu!rA7[E2De*F>$t3skBOPe$D.Ra%A!/X25^
-dulE+U5,P"UrtLbP!(P!4[^P#.<^HYd,,E+iZtF_t]1Bk&9'F_t]1Bk&8sDI[TqAM7n=A7^c0@
-;Kmr@;^4)ATDKpOu&7dI?IP_Eb0)1@q927@VV&,Eb0)sBlnEZ1NI&DL]il5Eb0*D#*NDX"FH.5
-0JG170JJ:eP,4<ZL]DI,D3@SU3+m2B+DI!3LbFpjL]WA8P,4<qOuSV6L]il)P,XU.P'J^$@<Wi
-*DI[TqAM7a?BnueQ!Ko7%5^e!8!g9CC3/@QIE+U5,P"Us_OuS6uLgH6hDKTf-EbT#+ASu!rA7[
-E.+DHW4Oo^_%P!FGY<IL$1I?IQHDe*F>$t3skBOPe$D.Ra%A!0!%B5hH*Bp),$DIYDa4aUdY@k
-f*7CiF&rDKTf-EbT#+ASu!rA7[E2De*F>#B"[$ATDKpOu"b*+DHW4Oo^_%P!FGY<+g/^+DI!3O
-uR/sD`0F1P!5%:P!3;jE+iZtF_t]1Bk*;iP$jGlOp$,JBle2N1c?IbCiF&rDKTf-EbT#+ASu!r
-A7[E2De*F>#&/-s2Dd=T1Qk"OP#Q=AD.Ra%@rc^0F!,1[98Ee88pbAlF_t]1Bk&8oCiF&rDKTf
--EbT#+ASu!rA7[E2De*F>#B"[$ATDKpOu&7dI?IQIF_t]1Bk)1+DK?q7P"UrtL]il5P!3TC!G?
-@`P%'S;Op$,JDKTf-EbT#+@;Kmr@;^4)ATDKp+D#G#De*E4D/WrrNX'HED.Ra%A!/X25^eepB5
-hH*Bp)+tCiF&rDKTf-EbT#+ASu!rA7[E.+DHW4Oo^_%P!FGY<,HPaAW?t/F)Nrn2Ng4MB5hH*B
-p),$DIYDa4aUdY@kf*?F)Nrn2BZRK@rGmh05YW<AW@"5F_t]1Bk*;^052PCL]NY>Ou&7dI?IQI
-F_t]1Bk)1+DK?q7P"UT6P"KV'G][Y@D`0F1Df0B:+DI!3L^K;;Op$,JDKTf-EbT#+Ble2N1c?I
-fDI[TqAM7n=A7^c+DKTf-EbT$H1Qk"OP#Pk+E+iZtF_t]1Bk)1+DK?q7P"UT7P"KV'G][Y@D`0
-F1Df0B:+DI!3L^K;;Op$,J@;Kmr@;^4)ATDKp+DGn82Dd<7ASu!rA7[E2De*F>$t3skBOPe$D.
-Ra%A!/X25^eepB5hH*Bp),'F)Nrn2BZRK@rGmh052PCL]NY>Ou&7dI?IQXP%B')AM7\8Aft`*A
-n>jiL]D1Q9Th1bE+*9"@q927@V9XlP%'RTEb0)sBlnEZ$'I)`@:YO1L]ET7H\_ZX"`Rm\P%'4J
-P,Wd]Bp(ZC1N6c5+DDs&L]E52L]N;3L]C_:!,u@WP%&-gWJC_6!g4Fa:j\?hI?IQmFcoF]H$ti
-HD/WrrNX'HED.Ra%A!0!%05t?1+BsX%L]E52L]DC&A<I"WF^9e'E+*:?@ZjEJ1OYEcD/WrrNWi
-j-E+i[C4aSi$@:UKbL]N;4L]N;4L]MI'A<I"WF^9e'E+*:?@ZjEJ1OYEcI?IP_@VKq*+BosuA7
-gu+P'(DVAs*4YF`:c"Oogeh?'7!R@s2F(F(oQ1NWERO4aSi$GB,]!3$;EJ>DN98!/LW2!/LW2!
-/LY]LdZTG#EfCAP(R&'1Pc'f!Jj-j05?Y6Ou"b7L]ESoL^&\8L]MiUBp(ZC1G<noE-H=_1,pCk
-L]N[<P"TMP98EY4Cj(O8TTW39!Ko6XGB,]!3$;t!95,MlL'+*3C6EgiP"9P9E]Gm7+DR'4L]DC
-<E]Gm7+DQ]5P,XU;L]ET2L]W`UG(p*lP#@GDP'DD<82"IsF!+\C*.*JAI?K4gOu"b#L]ESo04T
-e<Ou%Go+C]&,F-:!q4aW>WI?IP_@WNZ$BlnD=@YdH^BlnEZ@UbM"L]W_WP#-Lg5(/SnP')p]Ou
-"b#F)2t.F-:!q1G<6Z+CfV:+CcO'F)6X>P#@):Oo^_>Ou"b$F)2t/F-:!q1Pc$e!Fg+dL]N[<H
-S9)r5*@^X!/LYcF)6X5P,Wd]C6CcD1LkJKC5;qS)3RX3GB,]!3$;pu9597fOo]'6Cm(c\94Drb
-@WQ?.Bp,HO!KsFF99O+S!Kq\UP":"a87Q^WL]N[<M#W83HS9)r5*@^3F!,1Q!KsF<!g4Fa94N#
-cBp),D"/(fTOo^_j@ric,L]W_WP"UN3TTX&QG^Y`G04H&5+C]D.Oo^_%04Q,7+CfJ/Oo^_%I?J
-.p@s;u:@s<!M!+V0cOu"b#@<,jrA7ZlnGB8pVL]ilWP,4<tL]E53@s<!W@Yb&JWI$:4P!5$bNW
-`Z2+<ZICP,4<ZOuQrqF!,1[98Eq2"HoUE0TnDY@Yb/M5*Dn.5*C2#@<,jrA7ZltL]ilWL]`J5P
-)#3GI?I->E-,f4DKCgDA8c@-A9)+&FE2M8P'CnaFD5Z2F,g?4@psJ"F_-_\DfBf4Df0WV#@h[g
-F_u#;@q0"eCisT4F-:c$@<-"%+C\c"@rGmh+E)4@Bl@m10/%0V@rcL,A7dYQ2j-Cg1OYEc@q0[
-nEcYr5DN4a,P!+.F@UX:eDe*E%@VKq*P%'4QP#@I>Ou%moL]LsnEas#uAWgMY!KsF/056S5Ou$
-Q]FE8R=L^9/[L^9/;L]ET%H]eDc!g7AJP"CH2P#>atEas#uAWf5kP!5%RI?I->E-,f4DKCgDA8
-c@-A9)+&FE2M8P'CnaFD5Z2F,g?4@q'P#F_-_\DfBf4Df0WV#@h[gF_u#;@q0"eCisT4F-:c$@
-<-"%+C\c"@rGmh+E)4@Bl@m10/%0V@rcL,A7dYQ2j-Cg1OYEc@q0[nEcYr5DN4a-P!+.F@UX:e
-De*E%@VKq*P%'4QP#@I>Ou%moL]LsnEas#uAWgMY!KsF/056S5Ou$Q]FE8R=L^9/[L^9/;L]ET
- %H]eDc!g7AJP"CH2P#>atEas#uAWf5kP!5%RI?I->E-,f4DKCgDA8c@-A9)+&FE2M8P'CnaFD
-5Z2F,g?4@q0V$F_-_\DfBf4Df0WV#@h[gF_u#;@q0"eCisT4F-:c$@<-"%+C\c"@rGmh+E)4@B
-l@m10/%9TAi)5$P!>*cI?IQ<EbBG9A8c@-A9)+&P&N'-Eb0-*@<?O(G`l$h3IR&#Ou"b(F"o7V
-A!/g7A1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7R
-H\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/gs1-cc 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp gs1-cc 0.0 2015050900 201765 192297
+%%BeginData: 650 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /pdf417 dup /uk.co.terryburton.bwipp findresource put
+dup /micropdf417 dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1-cc {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /ccversion (a) def
+ /cccolumns -1 def
+ /lintype () def
+ /linwidth -1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /cccolumns cccolumns cvi def
+ /linwidth linwidth cvi def
+
+ % Select columns based on linear type
+ cccolumns -1 eq {
+ <<
+ /ean13 4
+ /upca 4
+ /ean8 3
+ /upce 2
+ /gs1-128
+ ccversion (c) ne {4} {linwidth 52 sub 17 idiv} ifelse
+ /databaromni 4
+ /databarstacked 2
+ /databarstackedomni 2
+ /databartruncated 4
+ /databarlimited 3
+ /databarexpanded 4
+ /databarexpandedstacked 4
+ >> lintype get /cccolumns exch def
+ } if
+
+ % Expand ordinals of the form ^NNN to ASCII
+ /expand {
+ /in exch def
+ /out in length string def
+ /j 0 def
+ in
+ { % loop
+ (^) search {
+ dup out exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi out exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup out exch j exch putinterval
+ length j add /j exch def
+ out 0 j getinterval exit
+ } ifelse
+ } loop
+ } bind def
+
+ % Parse out AIs
+ /ais [] def
+ /aival 2 dict def
+ barcode dup length 1 sub 1 exch getinterval
+ { % loop
+ dup () eq {exit} if
+ (\)) search pop
+ exch pop
+ exch (\() search {
+ exch pop exch 3 1 roll
+ } {
+ () 3 1 roll
+ } ifelse
+ [ ais aload pop counttomark 2 add index ] /ais exch def
+ aival 3 1 roll expand put
+ } loop
+ pop
+
+ % Method selection
+ /isupper {dup 65 ge exch 90 le and} bind def % A-Z
+ /isnum0 {dup 48 ge exch 57 le and} bind def % 0-9
+ /isnum1 {dup 49 ge exch 57 le and} bind def % 1-9
+ { % common exit
+
+ % (10/11/17)...
+ ais length 1 ge {
+ ais 0 get (10) eq ais 0 get (11) eq or ais 0 get (17) eq or {
+ -1 (10) exit
+ } if
+ } if
+
+ % (90){0-3 digits not starting 0}{upper alpha}...
+ ais length 1 ge {
+ ais 0 get (90) eq {
+ /v aival (90) get def
+ v length 1 ge {
+ v 0 get isupper {
+ 0 (11) exit
+ } if
+ } if
+ v length 2 ge {
+ v 0 get isnum1
+ v 1 get isupper and {
+ 1 (11) exit
+ } if
+ } if
+ v length 3 ge {
+ v 0 get isnum1
+ v 1 get isnum0 and
+ v 2 get isupper and {
+ 2 (11) exit
+ } if
+ } if
+ v length 4 ge {
+ v 0 get isnum1
+ v 1 get isnum0 and
+ v 2 get isnum0 and
+ v 3 get isupper and {
+ 3 (11) exit
+ } if
+ } if
+ } if
+ } if
+
+ % Freeform
+ -1 (0) exit
+
+ } loop
+ /method exch def
+ /npre exch def
+
+ /fnc1 -1 def /lnumeric -2 def /lalphanumeric -3 def /liso646 -4 def
+
+ /tobin {
+ string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } bind def
+
+ /alpha <<
+ 65 1 90 {dup 65 sub 5 tobin} for
+ 48 1 57 {dup 4 add 6 tobin} for
+ fnc1 (11111)
+ >> def
+
+ /numeric <<
+ 0 1 119 {
+ dup (00) 2 string copy dup 3 -1 roll 11 2 string cvrs
+ dup length 2 exch sub exch putinterval
+ dup 0 get 65 eq {dup 0 94 put} if
+ dup 1 get 65 eq {dup 1 94 put} if
+ exch 8 add
+ (0000000) 7 string copy dup 3 -1 roll 2 7 string cvrs
+ dup length 7 exch sub exch putinterval
+ } for
+ lalphanumeric (0000)
+ >> def
+
+ /alphanumeric <<
+ 48 1 57 {dup 43 sub 5 tobin} for
+ fnc1 (01111)
+ 65 1 90 {dup 33 sub 6 tobin} for
+ 42 (111010)
+ 44 1 47 {dup 15 add 6 tobin} for
+ lnumeric (000)
+ liso646 (00100)
+ >> def
+
+ /iso646 <<
+ 48 1 57 {dup 43 sub 5 tobin} for
+ fnc1 (01111)
+ 65 1 90 {dup 1 sub 7 tobin} for
+ 97 1 122 {dup 7 sub 7 tobin} for
+ 33 (11101000)
+ 34 (11101001)
+ 37 1 47 {dup 197 add 8 tobin} for
+ 58 1 63 {dup 187 add 8 tobin} for
+ 95 (11111011)
+ 32 (11111100)
+ lnumeric (000)
+ lalphanumeric (00100)
+ >> def
+
+ method (10) eq { % TODO: fixme
+ ais 0 get (11) eq ais 0 get (17) eq or {
+ aival ais 0 get get
+ dup 0 2 getinterval cvi 384 mul exch
+ dup 2 2 getinterval cvi 1 sub 32 mul exch
+ 4 2 getinterval cvi add add
+ (0000000000000000) 16 string copy dup 3 -1 roll 2 16 string cvrs
+ dup length 16 exch sub exch putinterval
+ [ 1 0
+ 4 -1 roll {48 sub} forall
+ ais 0 get (11) eq {0} {1} ifelse
+ ] /cdf exch def
+ /ais ais 1 ais length 1 sub getinterval def
+ } {
+ /cdf [ 1 0 1 1 ] def
+ } ifelse
+ ais length 0 ne {
+ ais 0 get (10) eq {
+ /gpf [ aival (10) get {} forall ] def
+ ais length 1 gt {/gpf [ gpf aload pop fnc1 ] def} if % TODO: check
+ /ais ais 1 ais length 1 sub getinterval def
+ } {
+ /gpf [fnc1] def % TODO: check
+ } ifelse
+ } {
+ /cdf [ cdf aload pop 0 0 0 0 0 1 1 1 1 ] def
+ /gpf [] def
+ } ifelse
+ /mode (numeric) def
+ } if
+
+ method (11) eq {
+ /cdf [ 1 1 ] def
+ /ai90 aival (90) get def
+ npre 1 add ai90 length ne {
+ ai90 npre 1 add ai90 length npre sub 1 sub getinterval
+ } {
+ ()
+ } ifelse
+ /ai90rem exch def
+ /nalpha 0 ai90rem {dup 65 ge exch 90 le and {1 add} if} forall def
+ /nnums 0 ai90rem {dup 48 ge exch 57 le and {1 add} if} forall def
+ /mode nalpha nnums gt {(alpha)} {(numeric)} ifelse def
+ nalpha nnums add ai90rem length ne {/mode (alphanumeric) def} if
+ /cdf [
+ cdf aload pop
+ mode (alphanumeric) eq {0} if
+ mode (numeric) eq {1 0} if
+ mode (alpha) eq {1 1} if
+ ] def
+ /ais1 ais length 1 gt {ais 1 get} {-1} ifelse def
+ ais1 (21) eq ais1 (8004) eq or {
+ /cdf [ cdf aload pop ais1 (21) eq {1 0} {1 1} ifelse ] def
+ } {
+ /cdf [ cdf aload pop 0 ] def
+ } ifelse
+ /nval npre 0 ne {ai90 0 npre getinterval cvi} {0} ifelse def
+ (BDHIJKLNPQRSTVXZ) ai90 npre 1 getinterval search {
+ length exch pop exch pop
+ /aval exch def
+ } {
+ pop /aval -1 def
+ } ifelse
+ nval 31 lt aval -1 ne and {
+ (00000) 5 string copy dup nval 2 5 string cvrs
+ dup length 5 exch sub exch putinterval
+ [ exch {48 sub} forall ] /nbits exch def
+ (0000) 4 string copy dup aval 2 4 string cvrs
+ dup length 4 exch sub exch putinterval
+ [ exch {48 sub} forall ] /abits exch def
+ /cdf [
+ cdf aload pop
+ nbits aload pop
+ abits aload pop
+ ] def
+ } {
+ (0000000000) 10 string copy dup nval 2 10 string cvrs
+ dup length 10 exch sub exch putinterval
+ [ exch {48 sub} forall ] /nbits exch def
+ (00000) 5 string copy dup ai90 npre get 65 sub 2 5 string cvrs
+ dup length 5 exch sub exch putinterval
+ [ exch {48 sub} forall ] /abits exch def
+ /cdf [
+ cdf aload pop
+ 1 1 1 1 1
+ nbits aload pop
+ abits aload pop
+ ] def
+ } ifelse
+ mode (numeric) eq {
+ /gpf [ ai90rem {} forall ais length 1 gt {fnc1} if ] def
+ } {
+ /encs mode (alpha) eq {alpha} {alphanumeric} ifelse def
+ /in [ ai90rem {} forall ais length 1 gt {fnc1} if ] def
+ /out in length 6 mul array def
+ /j 0 def
+ 0 1 in length 1 sub {
+ in exch get encs exch get
+ dup [ exch {48 sub} forall ] out exch j exch putinterval
+ length j add /j exch def
+ } for
+ /cdf [
+ cdf aload pop
+ out 0 j getinterval aload pop
+ ] def
+ /gpf [] def
+ ais length 1 gt mode (alpha) ne or {/mode (numeric) def} if
+ } ifelse
+ /ais ais 1 ais length 1 sub getinterval def
+ ais length 0 ne {
+ ais1 (21) eq ais1 (8004) eq or {
+ /gpf [
+ gpf aload pop
+ aival ais1 get {} forall
+ ] def
+ /ais ais 1 ais length 1 sub getinterval def
+ ais length 0 ne {/gpf [gpf aload pop fnc1] def} if
+ } if
+ } if
+ } if
+
+ method (0) eq {
+ /cdf [ 0 ] def
+ /gpf [] def
+ /mode (numeric) def
+ } if
+
+ % Pre-defined fixed length data field AIs
+ % any AI whose prefix is not included in this table must be
+ % terminated with "FNC1", even if it's fixed length
+ /aifixed 23 dict def
+ [
+ 0 1 4 {} for
+ ] {
+ (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
+ } forall
+ [
+ 11 1 20 {} for
+ 23
+ 31 1 36 {} for
+ 41
+ ] {
+ 10 2 string cvrs dup aifixed 3 1 roll put
+ } forall
+
+ % Append the remaining AI data
+ 0 1 ais length 1 sub {
+ /i exch def
+ /ai ais i get def
+ /val aival ai get def
+ gpf length ai length add val length add array
+ dup 0 gpf putinterval
+ dup gpf length ai [ exch {} forall ] putinterval
+ dup gpf length ai length add val [ exch {} forall ] putinterval
+ /gpf exch def
+ i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ gpf length 1 add array
+ dup 0 gpf putinterval
+ dup gpf length fnc1 put
+ /gpf exch def
+ } if
+ } for
+
+ % Calculate the number of bits remaining to the next valid symbol size
+ /rembits {
+ /used exch def
+ ccversion (c) ne { % cc-a or cc-b
+ <<
+ /a [
+ [167 138 118 108 88 78 59]
+ [167 138 118 98 78]
+ [197 167 138 108 78]
+ ]
+ /b [
+ [ 336 296 256 208 160 104 56]
+ [ 768 648 536 416 304 208 152 112 72 32]
+ [1184 1016 840 672 496 352 264 208 152 96 56]
+ ]
+ >> ccversion get cccolumns 2 sub get /bitcaps exch def
+ -1 bitcaps {dup used ge {exch} if pop} forall
+ dup -1 ne {used sub} if
+ } {
+ << /c -1 >> ccversion get pop % Assert cc-c
+ /m used 8 div ceiling cvi dup 6 idiv 5 mul exch 6 mod add def
+ m 40 le {8 } if
+ m 41 ge m 160 le and {16} if
+ m 161 ge m 320 le and {32} if
+ m 321 ge {64} if
+ /eccws exch def
+ /m m eccws add 3 add def
+ /c linwidth 52 sub 17 idiv def
+ m c idiv 90 gt {/c c 1 add def} if
+ /r m c div ceiling cvi def
+ /tgt c r mul eccws sub 3 sub dup 5 idiv 6 mul exch 5 mod add 8 mul def
+ used 8296 le {tgt used sub} {-1} ifelse
+ } ifelse
+ dup -1 eq { % Upgrade CC-A to CC-B or CC-B to CC-C to fit
+ pop
+ ccversion (a) eq {
+ /ccversion (b) def
+ } {
+ ccversion (b) eq lintype (gs1-128) eq and {
+ /ccversion (c) def
+ /cccolumns linwidth 52 sub 17 idiv def
+ } {
+ /ccversion -1 def
+ } ifelse
+ } ifelse
+ used rembits
+ } if
+ } bind def
+
+ /encode {
+ dup /raw ne {exch get} {pop} ifelse
+ [ exch {48 sub} forall ]
+ dup length exch
+ gpfenc exch j exch putinterval
+ /j exch j add def
+ } bind def
+
+ % Pre-compute alphanumeric and numeric runlengths and position of next ISO646-only characters
+ /numericruns [ gpf length {0} repeat 0 -1 ] def
+ /alphanumericruns [ gpf length {0} repeat 0 ] def
+ /nextiso646only [ gpf length {0} repeat 9999 ] def
+ gpf length 1 sub -1 0 {
+ /i exch def
+ gpf i get
+ (00) 2 string copy
+ dup 0 gpf i get dup fnc1 eq {pop 94} if put
+ i gpf length 1 sub lt {dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put} if
+ numeric exch known {
+ numericruns i numericruns i 2 add get 2 add put
+ } {
+ numericruns i 0 put
+ } ifelse
+ dup alphanumeric exch known {
+ alphanumericruns i alphanumericruns i 1 add get 1 add put
+ } {
+ alphanumericruns i 0 put
+ } ifelse
+ dup iso646 exch known exch alphanumeric exch known not and {
+ nextiso646only i 0 put
+ } {
+ nextiso646only i nextiso646only i 1 add get 1 add put
+ } ifelse
+ } for
+
+ % Encode the general purpose field
+ /gpfenc 8296 array def
+ /i 0 def /j 0 def
+ { % loop
+ i gpf length eq {exit} if
+ { % not a loop but common exit point
+
+ mode (numeric) eq {
+ i gpf length 2 sub le {
+ 2 string
+ dup 0 gpf i get dup fnc1 eq {pop 94} if put
+ dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put
+ dup numeric exch known {
+ numeric encode
+ /i i 2 add def
+ exit
+ } if
+ pop
+ lalphanumeric numeric encode
+ /mode (alphanumeric) def
+ exit
+ } {
+ gpf i get dup 48 lt exch 57 gt or {
+ lalphanumeric numeric encode
+ /mode (alphanumeric) def
+ exit
+ } if
+ /rem cdf length j add rembits def
+ rem 4 ge rem 6 le and { % C1 + 1 into 4 to 6 bits
+ (000000) 6 string copy 0 rem getinterval
+ dup gpf i get 47 sub 2 4 string cvrs
+ dup length 4 exch sub exch putinterval /raw encode
+ /i i 1 add def
+ exit
+ } { % C1.FNC1
+ 2 string dup 0 gpf i get put dup 1 94 put numeric encode
+ /i i 1 add def
+ exit
+ } ifelse
+ } ifelse
+ } if
+
+ mode (alphanumeric) eq {
+ gpf i get fnc1 eq {
+ fnc1 alphanumeric encode
+ /mode (numeric) def
+ /i i 1 add def
+ exit
+ } if
+ gpf i get dup iso646 exch known exch alphanumeric exch known not and {
+ liso646 alphanumeric encode
+ /mode (iso646) def
+ exit
+ } if
+ numericruns i get 6 ge {
+ lnumeric alphanumeric encode
+ /mode (numeric) def
+ exit
+ } if
+ numericruns i get dup 4 ge exch i add gpf length eq and {
+ lnumeric alphanumeric encode
+ /mode (numeric) def
+ exit
+ } if
+ gpf i get alphanumeric encode
+ /i i 1 add def
+ exit
+ } if
+
+ mode (iso646) eq {
+ gpf i get fnc1 eq {
+ fnc1 iso646 encode
+ /mode (numeric) def
+ /i i 1 add def
+ exit
+ } if
+ numericruns i get 4 ge nextiso646only i get 10 ge and {
+ lnumeric iso646 encode
+ /mode (numeric) def
+ exit
+ } if
+ alphanumericruns i get 5 ge nextiso646only i get 10 ge and {
+ lalphanumeric iso646 encode
+ /mode (alphanumeric) def
+ exit
+ } if
+ gpf i get iso646 encode
+ /i i 1 add def
+ exit
+ } if
+
+ } loop
+ } loop
+ /gpf gpfenc 0 j getinterval def
+
+ % Create pad
+ /pad cdf length gpf length add rembits array def
+ pad length 0 gt {
+ 0 5 pad length 1 sub { % Fill with 00100
+ /i exch def
+ pad i [ 0 0 1 0 0 ] 0 pad length i sub 5 2 copy gt {exch} if pop getinterval putinterval
+ } for
+ mode (numeric) eq { % Prefix shift from numeric to ASCII
+ /pad [ 0 0 0 0 pad aload pop ] 0 pad length getinterval def
+ } if
+ mode (alpha) eq { % Prefix FNC1
+ /pad [ 1 1 1 1 1 pad aload pop ] 0 pad length getinterval def
+ } if
+ } if
+
+ % Concatinate fields
+ /bits [
+ cdf aload pop
+ gpf aload pop
+ pad aload pop
+ ] def
+
+ ccversion (a) eq {
+ /pwr928 [
+ [ 0 0 0 0 0 0 1 ]
+ 68 {7 array} repeat
+ ] def
+ 1 1 68 {
+ /j exch def
+ /v 0 def
+ 6 -1 1 {
+ /i exch def
+ /v pwr928 j 1 sub get i get 2 mul v 928 idiv add def
+ pwr928 j get i v 928 mod put
+ } for
+ pwr928 j get 0 pwr928 j 1 sub get 0 get 2 mul v 928 idiv add put
+ } for
+ /cws [ 28 {0} repeat ] def
+ /b 0 def /c 0 def
+ { % loop
+ b bits length eq {exit} if
+ /bs bits b 69 bits length b sub 2 copy gt {exch} if pop getinterval def
+ /bsl bs length def
+ /cs cws c bsl 10 idiv 1 add getinterval def
+ /csl cs length def
+ 0 1 bsl 1 sub {
+ /i exch def
+ 0 1 csl 1 sub {
+ /j exch def
+ cs j 2 copy get
+ pwr928 i get j 7 add csl sub get
+ bs bsl i sub 1 sub get
+ mul add put
+ } for
+ } for
+ csl 1 sub -1 1 {
+ /i exch def
+ cs i 1 sub 2 copy get cs i get 928 idiv add put
+ cs i 2 copy get 928 mod put
+ } for
+ /b b bsl add def
+ /c c csl add def
+ } loop
+ /cws cws 0 c getinterval def
+ /barcode cws length 4 mul string def
+ 0 1 cws length 1 sub {
+ /i exch def
+ (^ ) 4 string copy dup cws i get 10 4 string cvrs
+ dup length 4 exch sub exch putinterval
+ barcode i 4 mul 3 -1 roll putinterval
+ } for
+ options (dontdraw) true put
+ options (cca) true put
+ options (columns) cccolumns put
+ /args barcode options //micropdf417 exec def
+ } if
+
+ ccversion (b) eq {
+ /barcode bits length 8 idiv string def
+ 0 1 barcode length 1 sub {
+ /i exch def
+ bits i 8 mul 8 getinterval 0 exch {add 2 mul} forall 2 idiv
+ barcode exch i exch put
+ } for
+ options (dontdraw) true put
+ options (ccb) true put
+ options (columns) cccolumns put
+ /args barcode options //micropdf417 exec def
+ } if
+
+ ccversion (c) eq {
+ /barcode bits length 8 idiv string def
+ 0 1 barcode length 1 sub {
+ /i exch def
+ bits i 8 mul 8 getinterval 0 exch {add 2 mul} forall 2 idiv
+ barcode exch i exch put
+ } for
+ options (dontdraw) true put
+ options (ccc) true put
+ options (columns) cccolumns put
+ /args barcode options //pdf417 exec def
+ } if
+
+ args
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/gs1-cc dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1-cc--
@@ -6366,30 +19184,80 @@ H\pKT_F(KH4@:O(eDJ+B\;u~>
% --EXAM: 2112345678900|(99)1234-abcd
% --EXOP: includetext
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp ean13composite 0.0 0 0 0
-%%BeginData: 22 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP ++@;[ eUO uP+;C G'+8
-/p(ZFEd;,:Ecc5; /n0$= E,^ uoP 'E-L 05 #>\ /Rr:R3 %o Di/n8f PFC
-fK5H"(o:FDl%L@W uO*E0 Aq< G`k $ >Eb 0-) Bl7 KjEfrC 8F _`U>D_ ?-C
-EcQG7F`MSBDD#CB BlJ$S g6- ]D3 %o ;` DJ` g(E bTc]3% oD i/n8fP FCf
-K5H"(o:FDl%L@Wu O*E0 Aq< G` iL hAR TI2 1Lk ??E,
-Tf3FCffT'Tt>:%5 2X=F D 5Z 2F -8_ M1G <3GE as#uA
-Wf6?1G<9WDKKE0@ <Wi+@; L!r O u%# qF D5Z2 F-< ^[F*)G:DJ+ ':E+P1qH\_]
-c23JDeE-,f4DKC/ fX(GdV F(L L tH]g XBP# RT( P%'TNOthst 4d(eHEckrV4
-aW>DP!5%OP!5$bI =%,/FE 2M8 Ou%N L<IL $AO rfcH05kfOB l@m1P!5$bI?
-IQJE-,f4DKC/f1O YEX@U X:eD e*F>! IU&i HS9 2LDIm6sP!5 $bP'&EfDf'H
-V5*@^MH]iN"P#[Z ?DfBf 4Df0W V#Ae* lFE qh:NWj!&DD <r1G].PCBl@
-m1NX9E;CNFH8ART ,0!AK[] DfBf4D f0WV# \7j kFC]E#GB@k JAWh:SBl7Kj
-EZf:>FD5Z2F"]1X@;[eUP!:TQEb0-)Bl7KjEfrYCs+j4/L-.ROEb0,A061WAD..O,Bm;:MBm=\
-A>DN98!Jk$.L]DjdK89Pa!/LZ3!/Op-L]DjdK89M`!Jg`3!Jk$.L]DjdK89Pa!*q6sBm=lY@4u
-S6G^5)I05+p2B4uCC#)Gg52D98gA9;L@@>II;2D8ufF<GL@FD5Z2F!*Y10/%?WDJ`g(EbTc]5D
-];p#*O^NDf'G9DfBf4Df0VL05#>\/Rr:R5;+[1ASu?nFE2)?P!>+(Ou[rR%[&V$ARTI21Lk??E
-,Tf3FCgUpP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYu
-CM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/ean13composite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp ean13composite 0.0 2015050900 84039 84015
+%%BeginData: 72 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /ean13 dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/ean13composite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (ean13) put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //ean13 exec //renlinear exec
+
+ % Plot the separator
+ -1 72 rmoveto <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 93 {0} repeat 1 0
+ 1 0 93 {0} repeat 0 1
+ 0 1 93 {0} repeat 1 0
+ ]
+ /pixx 97
+ /pixy 3
+ /height 6 72 div
+ /width 97 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/ean13composite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean13composite--
@@ -6400,30 +19268,83 @@ CM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
% --EXAM: 02345673|(21)A12345678
% --EXOP: includetext
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp ean8composite 0.0 0 0 0
-%%BeginData: 22 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP ++@;\ &f3 %oDi/ n8fP
-FCfK5H"(o:FDl%L @WuO* E0A q<G `k$> B6 ,dZ @q1Z]0 6M %_@rEu AAT
-Dg:@Wc^5Df.1:GA 2#8P1 l(D OuP + 8AS u<u DIm 6sOuP+ ;C G'+8/p (ZF
-Ed;,:Ecc5;/n0$= E,^uo P'E -L0 61 WA D.. O,B m>e#06 M% _@rEuA ATD
-g:@Wc^5Df.1:GA2 #8P1 l(D Op s' U@; \&7 Df' H3F(
-o`-H\`B!23JD%Df Bf4D f 0W Z5 *@] T@U X:eD e*FB5
-*@]TA8c@-A9)+&+ D,%uF( LLj D fBf 4D f0WZ Y:j s=EbTE(FEq h:P!+/J!Ko=
-'%<$3-Bl@m1H]kF A@;L!r P!+ / T5^e epOu SV6 P,4<rNWD;+ NHB2`AWf3'O
-tDh\P')pOOu%N5O tCcrF_ -^l I?IT YP%B dtO uY16E-,f4D KCt)Ou%NL<,
-Z_tBl@m1H]g15P" B+kEa s#uA W?e=P )XfA Ch[ cu@<.MpOu& 8D04Sp;E0<D
-J1OXV5Fa]EQP"oq 7FD5Z 2F,gK ABl8$ <E+ P%4ARTI9P' CnaFD5Z2F,g
-Q@DJO<4Eb/ZiNWC hsG].PC Bl@m1N X006D KKE 0@<Zg6F_-_ \Ch[cu@<*K/
-E-,f4DK@HaARTI9P!:TQEb0-)Bl7KjEfrYCs+j4/L-.ROEb0,A061WAD..O,Bm;:MBm=\A>DN9
-8!Jj$gL]DjdK89Pa!/LZ3!/NpfL]DjdK89M`!Jg`3!Jj$gL]DjdK89Pa!*q6sBm=lY75&UoG^5
-)I05+p2B4uCC#)Gg52D98gA9;L@7>OKt2D8ufF<GL@FD5Z2F!*Y10/%?WDJ`g(EbTc]5@\VKE$
-0(<FD5Z2F"]1ZF"o7VA!0'>30",\Bm=lc98H$"5*Dn$#*O]o061WAD..O,Bm>e*P"h*"I?G)'1
-G<<JDE)-ED/aE7BlmpL30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgG
-OuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/ean8composite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp ean8composite 0.0 2015050900 84340 84317
+%%BeginData: 75 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /ean8 dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/ean8composite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ % Get the result of encoding with ean8 and gs1-cc
+ options (lintype) (ean8) put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //ean8 exec //renlinear exec
+
+ % Plot the separator
+ -1 72 rmoveto <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 65 {0} repeat 1 0
+ 1 0 65 {0} repeat 0 1
+ 0 1 65 {0} repeat 1 0
+ ]
+ /pixx 69
+ /pixy 3
+ /height 6 72 div
+ /width 69 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ comp options //gs1-cc exec
+ dup (pixx) get 69 exch sub 6 rmoveto
+ //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/ean8composite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean8composite--
@@ -6434,30 +19355,80 @@ OuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
% --EXAM: 416000336108|(99)1234-abcd
% --EXOP: includetext
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp upcacomposite 0.0 0 0 0
-%%BeginData: 22 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +;E+< =>3 %oDi/ n8fP
-FCfK5H"(o:FDl%L @WuO* E0A q<G `k$> B6 ,dZ @q1Z]0 6M %_@rEu AAT
-Dg:@Wc^5Df.1:GA 2#8P1 l(D OuP + 8AS u<u DIm 6sOuP+ ;C G'+8/p (ZF
-Ed;,:Ecc5;/n0$= E,^uo P'E -L0 61 WA D.. O,B m>e#06 M% _@rEuA ATD
-g:@Wc^5Df.1:GA2 #8P1 l(D Op s' eE+ <<d Df' H3F(
-o`-H\`B!23JD%Df Bf4D f 0W Z5 *@] T@U X:eD e*FB5
-*@]TA8c@-A9)+&+ D,%uF( LLj D fBf 4D f0WZ Y:j s=EbTE(FEq h:P!+/J!Ko=
-'%<$3-Bl@m1H]kF A@;L!r P!+ / T5^e epOu SV6 P,4<rNWD;+ NHB2`AWf3'O
-tDh\P')pOOu%N5O tCcrF_ -^l I?IT YP%B dtO uY16E-,f4D KCt)Ou%NL<,
-Z_tBl@m1H]g15P" B+kEa s#uA W?e=P )XfA Ch[ cu@<.MpOu& 8D04Sp;E0<D
-J1OXV5Fa]EQP"oq 7FD5Z 2F,gK ABl8$ <E+ P%5ARTI21Q m!$E-,f4DKC
-gEBl7^-E,oMuA<$ [EP'Cna FD5Z2F ,gN:D f0Z -Eaa06Eckr VG\h)3ARTU%
-DfBf4Df0VL06M5D@?Ni.061WACh[cu@<.MqM#W9%P(l(]061WA0/%?WDJ`g(EbTbOE+sQ<+BsX
- %L]N<;H\_ZMP(SPkL]E53L]E6:H\_ZMP(SPjL]N;3L]N<;H\_ZMP(SPkL]C^6E+sQALg_rUBm
-=oZ"#">!BkM+$L^&Z+Ou=t;Bk2=!Lgc*1Ou=t3E-*4@E-,f4DK?pa4teR0ASu?nFE2)?P!=d%L
-^'#s@rH4'+E)4@Bl@m10/$sZ0eHmFP!:TQEb0-*@<?O(G`k:S9p.MbOq*X206M5D@:O4mE,Tf3
-FCgUpP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[
-!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/upcacomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp upcacomposite 0.0 2015050900 84017 84082
+%%BeginData: 72 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /upca dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/upcacomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (ean13) put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //upca exec //renlinear exec
+
+ % Plot the separator
+ -1 72 rmoveto <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 93 {0} repeat 1 0
+ 1 0 93 {0} repeat 0 1
+ 0 1 93 {0} repeat 1 0
+ ]
+ /pixx 97
+ /pixy 3
+ /height 6 72 div
+ /width 97 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/upcacomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER upcacomposite--
@@ -6468,32 +19439,95 @@ FCgUpP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[
% --EXAM: 00123457|(15)021231
% --EXOP: includetext
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp upcecomposite 0.0 0 0 0
-%%BeginData: 24 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +;E+< IB3 %oDi/ n8fP
-FCfK5H"(o:FDl%L @WuO* E0A q<G `k$> B6 ,dZ @q1Z]0 6M %_@rEu AAT
-Dg:@Wc^5Df.1:GA 2#8P1 l(D OuP + 8AS u<u DIm 6sOuP+ ;C G'+8/p (ZF
-Ed;,:Ecc5;/n0$= E,^uo P'E -L0 61 WA D.. O,B m>e#06 M% _@rEuA ATD
-g:@Wc^5Df.1:GA2 #8P1 l(D Op s' eE+ <Hh Df' H3F(
-o`-H\`B!23JD%Df Bf4D f 0W Z5 *@] T@U X:eD e*FB5
-*@]TA8c@-A9)+&+ D,%uF( LLj D fBf 4D f0WZ Y:j s=EbTE(FEq h:P!+/J!Ko=
-'%<$3-Bl@m1H]kF A@;L!r P!+ / T5^e epOu SV6 P,4<rNWD;+ NHB2`AWf3'O
-tDh\P')pOOu%N5O tCcrF_ -^l I?IT YP%B dtO uY16E-,f4D KCt)Ou%NL<,
-Z_tBl@m1H]g15P" B+kEa s#uA W?e=P )XfA Ch[ cu@<.MpOu& 8D04Sp;E0<D
-J1OXV5Fa]EQ06:] D+?Vb >Eb0, A061W AD. .O,Bm;:MBm =\A>DN98!Ji
-IWL]DjdK89Pa!/L Z3!/N@V L]DjdK 89M`! Jg` 3!JiIWL]Dj dK89Pa!*q6s
-Bm=lY2(ro_G^5)I05+p2B4uCC#)Gg52D98gA9;L@22Fed2D8ufF<GL@FD5Z2F!*Y1Ou&7rDfBf
-4Df0WV#Ae*lFEqh:NWaKD@qCgJDfBf4Df0WV$#+9mF)Z/2@:YB!0Tp[!E-,f4DKCgDA8c@-A9)
-+&FE2M8P'CeWDIm6s+E)4@Bl@m10/%He@qCff0/%?WDJX$)ARTVB5D]>q8<S]i4>1_dDD*Y`AS
-u?nFE2)?05tWMF!+\C!/LZ30me]VI?K5=!Jg`3!Jg`30me]VI?K5=!/LZ3!/LZ30me]VI?K5=!
-Jg_]05tWMG_e41E+sQBL]];DASGdjFGL-W8<PkaGA1T0BS\O%8<PkaDfBe@DfBf4Df0V=5!CVQ
-Eb0-*@<?O(G`k:IreLcAL1>.=E$0(<FD5Z2F"]1ZF"o7VA!0&0061WAD..O,Bm>e*P"h*"I?G)
-'1G<li@qB.gD/aE7BlmpL30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qC
-gGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/upcecomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp upcecomposite 0.0 2015050900 88475 84857
+%%BeginData: 87 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /upce dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/upcecomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ % Define the separator
+ /sep <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 49 {0} repeat 1 0
+ 1 0 49 {0} repeat 0 1
+ 0 1 49 {0} repeat 1 0
+ ]
+ /pixx 53
+ /pixy 3
+ /height 6 72 div
+ /width 53 72 div
+ /opt options
+ >> def
+
+ gsave
+
+ options (lintype) (upce) put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //upce exec //renlinear exec
+
+ % Plot the separator
+ -1 72 rmoveto <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 49 {0} repeat 1 0
+ 1 0 49 {0} repeat 0 1
+ 0 1 49 {0} repeat 1 0
+ ]
+ /pixx 53
+ /pixy 3
+ /height 6 72 div
+ /width 53 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/upcecomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER upcecomposite--
@@ -6504,38 +19538,108 @@ gGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databaromnicomposite 0.0 0 0 0
-%%BeginData: 30 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +*@<> pe@ <-:'D J>7n
-06M%_@rEuAATDg: @Wc^5 Df. 1:G A2#8 P1 l(D OuP+-F "o 7VA!/f )F_
-`U>D_?-CEcQG7F` MSBDD #CB BlJ $ Sg6 -]D 3%o ;`DJX$ )A RTVB3% oDi
-/n8fPFCfK5H"(o: FDl%L @Wu O*E 0A q< G`k $>E b0-*@< ?O (G`k$> F_`
-U>D_?-CEcQG7F`M SBDD #CB Bl J$ Sg6 -]D %52 7#FC
-AWeEc5f4Bk)'uE, Tf3F C ff T' Tt> :%5 2X=F D5Z2F
--8_M1G<3GEas#uA Wf6?1G <9W D KKE 0@ <Wi+ @;L !rOu%#qFD5 Z2F-<^[F*)G
-:DJ+':E+P1qH\_] c23JDe E-, f 4DKC /fX( GdV F(LLtH]gXB P#RT(P%'TNO
-thst4d(eHEckrV4 aW>DP! 5%O P!5$ bI=% ,/F E2M8Ou%NL< IL$AOrfcH05
-kfOBl@m1P!5$bI? IQJE- ,f4D KC/f1 OYEX @UX :eDe*F>!IU &iHS92LDIm6
-sP!5$bP'&EfDf'H V5*@^ MH]iN "P#[Z ?Df Bf4Df0WV#A e*lFEqh:NXK
-B+FCAWeEc5f4Bp* ^ZE-,f4 DKCgCC h[d&@ :s. nEckrVG].P CBl@m1NX9E;
-CNFH8ART,0!AK[]DfBf4Df0WV#\7jkFC]E#GB@kJAWh:SBl7KjEZf:>FD5Z2F"]1W@<>pe@<-:
-'DJ>7uOuSI(F(03R9.t*qDKB9.P!5$bOuSI(@VBhG98ES298H-%CbKU=DJ3TqB4uCM5*@]T061
-WACh[cu@<.Mq06:]DAnc-nATE,NAoNnsOu$]hL]M+,L^]FIHS9)r5*@^2Dfd+9P"UT2P!+/$Df
-d+9L]N[<P"UT3P!+/J!I]<9AT/c+L]N[<P"UT2P!+/J!I]<N!.C#1I?ITYH\_ZMP#ZR7E0<D!P
-!5%RI?I,SAhtQ6L]N;4L]N;4L]N;4L]N;4L]N;3L]N;4L]LeE1N[Y[AV^>B!Jh/2OuQohFHSh"
-E0:6b99MJN1Qjqb99MH$"FZG(HZNb;+D,R8>DN98!/LW2!/LW2!/LW2!/LW2!/LZ3!/LV\P'MJ
-=<.0o>Ou$r`EbgI2Ch[d.@WQmP!KpQ@!KoTmH\_ZMI=$<s!I]BZ<K_u_P"CfUL]N[<OpR9Z04J
-jAP!5$bP')q106:]D+BostDfg>^!KoX0WI9q$?'7!bAT3G*>DN98!/LV\P'M+[E$045E0=[d"H
-o`gL]E52L]E52?'9Jh&p%W'Anc-nATESlF(K<&Bl7HmEej^3Bl7TqBkM+$P(l(]061WA0/%?WD
-J`g(EbTbOE+sQ<+EM+505tWMGT_'=E0=Z`E+sQBL]K/BASGdjFGKsR8<PkaGA1T0BHVA-E0=[d
-8<PkaDfBe@DfBf4Df0V=5!CVQEb0-*@<?O(G`k:IqhP99L1>.=E$0(<FD5Z2F"]1ZF"o7VA!0&
-0061WAD..O,Bm>e*P"h*"I?G)'1G<9IFCAWeEc5f4Bk)'uE,Tf3FCgUpP%64gCG'+8/p(ZFEd;
-,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#
-M~>
-% uk.co.terryburton.bwipp/databaromnicomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databaromnicomposite 0.0 2015050900 83884 87420
+%%BeginData: 100 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /databaromni dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databaromnicomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (databaromni) put
+ options (linkage) true put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //databaromni exec
+ dup (sbs) get /linsbs exch def
+ dup (bhs) get 0 get 72 mul /linheight exch def
+ //renlinear exec
+
+ % Plot the separator
+ /sepfinder {
+ /fp exch def
+ fp 1 fp 12 add {
+ /i exch def
+ bot i get 0 eq {
+ bot i 1 sub get 1 eq {
+ 1
+ } {
+ sep i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep exch i exch put
+ } for
+ /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def
+ true 0 1 12 {dup bot exch fp add get exch f3 exch get eq and} for {
+ % Right shifted module for value 3 finder
+ sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
+ } if
+ } bind def
+ mark
+ 0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall
+ counttomark 1 sub array astore /bot exch def pop pop
+ /sep [ bot {1 exch sub} forall ] def
+ sep 0 [0 0 0] putinterval
+ sep sep length 4 sub [0 0 0 0] putinterval
+ 18 sepfinder 64 sepfinder
+ 0 linheight rmoveto <<
+ /ren //renmatrix
+ /pixs sep
+ /pixx sep length
+ /pixy 1
+ /height 1 72 div
+ /width sep length 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ -5 1 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/databaromnicomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databaromnicomposite--
@@ -6546,36 +19650,104 @@ M~>
% --EXAM: (01)03412345678900|(17)010200
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarstackedcomposite 0.0 0 0 0
-%%BeginData: 28 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +*@<> pe@ <-F2@ :O(a
-A<Jo*F_`U>D_?-C EcQG7 F`M SBD D#CB Bl J$S g6-]D3 %n oc0eHm FOu
-P+;CG'+8/p(ZFEd ;,:Ec c5; /n0 $ =E, ^uo P'E -L061W AD ..O,Bm >e#
-06M%_@rEuAATDg: @Wc^5 Df. 1:G A2 #8 P1l (DO ps'T@< >p e@<-F2 @:O
-(aA7KOpE,Tf3FCf fT'T t>: %5 2X =FD 5Z2 F-8 _M1G
-<3GEas#uAWf6?1G <9WD K KE 0@ <Wi +@; L!rO u%#qF
-D5Z2F-<^[F*)G:D J+':E+ P1q H \_] c2 3JDe E-, f4DKC/fX(G dVF(LLtH]gX
-BP#RT(P%'TNOths t4d(eH Eck r V4aW >DP! 5%O P!5$bI=%,/ FE2M8Ou%NL<
-IL$AOrfcH05kfOB l@m1P! 5$b I?IQ JE-, f4D KC/f1OYEX@ UX:eDe*F>!I
-U&iHS92LDIm6sP! 5$bP' &EfD f'HV5 *@^M H]i N"P#[Z?DfB f4Df0WV#Ae*
-lFEqh:NXfT.FCAW eEcZ> 2@r#X dP'Cn aFD 5Z2F,gKABl 7]pB4Z1*F_-
-_\DfBf4Df0WV$#+ 9mF)Z/2 @:YB!0 Tp[!E -,f 4DKCgDA8c@ -A9)+&FE2M8
-P'CeWDIm6s+E)4@Bl@m10/$jEFCAWeEcZ>2@r#XdP!>*hNWa<8G]T$@L]E54P$!_IE+sQAP"Us
-304JjAP!5$bOuSI)E+sQBP"RHEBl7TqBkM+$P!5$b0/%?WDJ`g(EbTc]5;.(hE+Wg%A7]e.04o
-0d5*@^6E/4O,E/4pc!IHJ6P!5$b@W-?2Bp),F!0TKl@W-?2BnueQWKKo1!KoTmL]MpNF(K;5Bn
-ueQWKKo1!0TKlL]MpNL]Djd<IL$1I=$bMI?ITOAT3erBp(ZCG^Y`G04m!_>DN<9!Jgc4!Jgc4!
-Jgc4!Jgc4!/LZ3!Jgb^Ou%3#F_-@/L]N;?H]g?tDfh.+AoNn6P"Us%Ai#T6P"Us$Op$2r8:,Dh
-E$/b3+BsX%L]E52L]E52L]E52L]E52L]E53L]E52?'9J]P#Qjm%[&V$F(K;5>9IBnFF/fEP!5&
-.I?I0-Ou%/jE/4KuL]E52L]E52?'9JSAT/c5AT3fAL]im?>DN98!/LW2!*tb5L_=c?E+Wg%A7]
-e;!,Q@eBOtmjBQTDl4?P9;ASs.SEb0-*@<?O(GV=#MG]P!KAT0;ABm=kFF(K<R@P;\7G^5)G05
-+p2B4uCC!Jj:02D98gA9;K-F(K<R@YdR<2D8ufF<GL@FD5Z2F!*Y10/%?WDJ`g(EbTc]5DT>r!
-Kr1IDf'G9DfBf4Df0VL05#>\/Rr:R5;+[1ASu?nFE2)?P!>+(Ou[rR%[&V$A79Rg@UX:uFCAZp
-ARo:hD/aE7BlmpL30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1
-:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/databarstackedcomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarstackedcomposite 0.0 2015050900 89818 86093
+%%BeginData: 96 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /databarstacked dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarstackedcomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (databarstacked) put
+ options (linkage) true put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //databarstacked exec
+ dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
+ dup (pixy) get /linheight exch def
+ //renmatrix exec
+
+ % Plot the separator
+ /sepfinder {
+ /fp exch def
+ fp 1 fp 12 add {
+ /i exch def
+ bot i get 0 eq {
+ bot i 1 sub get 1 eq {
+ 1
+ } {
+ sep i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep exch i exch put
+ } for
+ /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def
+ true 0 1 12 {dup bot exch fp add get exch f3 exch get eq and} for {
+ % Right shifted module for value 3 finder
+ sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
+ } if
+ } bind def
+ /sep [ bot {1 exch sub} forall ] def
+ sep 0 [ 0 0 0 0 ] putinterval
+ sep sep length 4 sub [ 0 0 0 0 ] putinterval
+ 18 sepfinder
+ 0 linheight rmoveto <<
+ /ren //renmatrix
+ /pixs sep
+ /pixx sep length
+ /pixy 1
+ /height 1 72 div
+ /width sep length 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ 1 1 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/databarstackedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarstackedcomposite--
@@ -6586,36 +19758,104 @@ ARo:hD/aE7BlmpL30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarstackedomnicomposite 0.0 0 0 0
-%%BeginData: 28 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +*@<> pe@ <-F2@ :O(a
-A8c=&Bp(G/F_`U> D_?-C EcQ G7F `MSB DD #CB BlJ$Sg 6- ]D3%no c0e
-HmFOuP+;CG'+8/p (ZFEd ;,: Ecc 5 ;/n 0$= E,^ uoP'E- L0 61WAD. .O,
-Bm>e#06M%_@rEuA ATDg: @Wc ^5D f. 1: GA2 #8P 1l(DOp s' T@<>pe @<-
-F2@:O(aA8c=&Bk) 'uE, Tf3 FC ff T'T t>: %52 X=FD
-5Z2F-8_M1G<3GEa s#uA W f6 ?1 G<9 WDK KE0@ <Wi+@
-;L!rOu%#qFD5Z2F -<^[F* )G: D J+' :E +P1q H\_ ]c23JDeE-, f4DKC/fX(Gd
-VF(LLtH]gXBP#RT (P%'TN Oth s t4d( eHEc krV 4aW>DP!5%O P!5$bI=%,/F
-E2M8Ou%NL<IL$AO rfcH05 kfO Bl@m 1P!5 $bI ?IQJE-,f4D KC/f1OYEX@U
-X:eDe*F>!IU&iHS 92LDI m6sP !5$bP '&Ef Df' HV5*@^MH]i N"P#[Z?DfBf
-4Df0WV#Ae*lFEqh :NY5l 2FCAW eEcZ> 2@r #XdDf'B+P' CnaFD5Z2F,g
-KABl7]pB4Z1*F_- _\DfBf4 Df0WV$ #+9mF )Z/ 2@:YB!0Tp[ !E-,f4DKCgD
-A8c@-A9)+&FE2M8P'CeWDIm6s+E)4@Bl@m10/$jEFCAWeEcZ>2@r#XdDf'B+P!>*hNWa<8G]T$
-@L]E54P$!_IE+sQAP"Us304JjAP!5$bOuSI)E+sQBP"RHEBl7TqBkM+$P!5$b0/%?WDJ`g(EbT
-c]5;.(hE+Wg%A7]e.04o0d5*@^6E/4O,E/4pc!IHJ6P!5$b@W-?2Bp),F!0TKl@W-?2BnueQWK
-Ko1!KoTmL]MpNF(K;5BnueQWKKo1!0TKlL]MpNL]Djd<IL$1I=$bMI?ITOAT3erBp(ZCG^Y`G0
-4m!_>DN<9!Jgc4!Jgc4!Jgc4!Jgc4!/LZ3!Jgb^Ou%3#F_-@/L]N;?H]g?tDfh.+AoNn6P"Us%
-Ai#T6P"Us$Op$2r8:,DhE$/b3+BsX%L]E52L]E52L]E52L]E52L]E53L]E52?'9J]P#Qjm%[&V
-$F(K;5>9IBnFF/fEP!5&.I?I0-Ou%/jE/4KuL]E52L]C_DH#mP9+EM+5P%'4MP,VZA!/LW2!/L
-V\P'MirF(K<&Bl7HmEej^3Bl7TqBkM+$P(l(]061WA0/%?WDJ`g(EbTbOE+sQ<+EM+505tWMGT
-_'=E0=Z`E+sQBL]K/BASGdjFGKsR8<PkaGA1T0BHVA-E0=[d8<PkaDfBe@DfBf4Df0V=5!CVQE
-b0-*@<?O(G`k:I!Jgc>L1>.=E$0(<FD5Z2F"]1ZF"o7VA!0&0061WAD..O,Bm>e*P"h*"I?G)'
-1G<9IFCAWeEcZ>2@r#XdDf'B+@rH4'Df]W7AWf$9A1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\
-&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/databarstackedomnicomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarstackedomnicomposite 0.0 2015050900 89894 86165
+%%BeginData: 96 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /databarstackedomni dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarstackedomnicomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (databarstackedomni) put
+ options (linkage) true put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //databarstackedomni exec
+ dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
+ dup (pixy) get /linheight exch def
+ //renmatrix exec
+
+ % Plot the separator
+ /sepfinder {
+ /fp exch def
+ fp 1 fp 12 add {
+ /i exch def
+ bot i get 0 eq {
+ bot i 1 sub get 1 eq {
+ 1
+ } {
+ sep i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep exch i exch put
+ } for
+ /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def
+ true 0 1 12 {dup bot exch fp add get exch f3 exch get eq and} for {
+ % Right shifted module for value 3 finder
+ sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
+ } if
+ } bind def
+ /sep [ bot {1 exch sub} forall ] def
+ sep 0 [ 0 0 0 ] putinterval
+ sep sep length 4 sub [ 0 0 0 0 ] putinterval
+ 18 sepfinder
+ 0 linheight rmoveto <<
+ /ren //renmatrix
+ /pixs sep
+ /pixx sep length
+ /pixy 1
+ /height 1 72 div
+ /width sep length 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ 1 1 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/databarstackedomnicomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarstackedomnicomposite--
@@ -6626,38 +19866,108 @@ b0-*@<?O(G`k:I!Jgc>L1>.=E$0(<FD5Z2F"]1ZF"o7VA!0&0061WAD..O,Bm>e*P"h*"I?G)'
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databartruncatedcomposite 0.0 0 0 0
-%%BeginData: 30 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +*@<> pe@ <-I1F `(\t
-FCf!G3%oDi/n8fP FCfK5 H"( o:F Dl%L @W uO* E0Aq<G `k $>B6,d Z@q
-1Z]06M%_@rEuAAT Dg:@W c^5 Df. 1 :GA 2#8 P1l (DOuP+ 8A Su<uDI m6s
-OuP+;CG'+8/p(ZF Ed;,: Ecc 5;/ n0 $= E,^ uoP 'E-L06 1W AD..O, Bm>
-e#06M%_@rEuAATD g:@W c^5 Df .1 :GA 2#8 P1l (DOp
-s'T@<>pe@<-I1F` (\tF C eu mD f'H 3F( o`-H \`B!2
-3JD%DfBf4Df0WZ5 *@]T@U X:e D e*F B5 *@]T A8c @-A9)+&+D, %uF(LLjDfBf
-4Df0WZY:js=EbTE (FEqh: P!+ / J!Ko ='%< $3- Bl@m1H]kFA @;L!rP!+/T5
-^eepOuSV6P,4<rN WD;+NH B2` AWf3 'OtD h\P ')pOOu%N5O tCcrF_-^lI?
-ITYP%BdtOuY16E- ,f4DK Ct)O u%NL< ,Z_t Bl@ m1H]g15P"B +kEas#uAW?e
-=P)XfACh[cu@<.M pOu&8 D04Sp ;E0<D J1O XV5Fa]EQP" oq7FD5Z2F,g
-KABl8$<E+P%@A79 Rg@UX;! Ecl80@ <?'kP 'Cn aFD5Z2F,gK ABl7]pB4Z1*
-F_-_\DfBf4Df0WV$#+9mF)Z/2@:YB!0Tp[!E-,f4DKCgDA8c@-A9)+&FE2M8P'CeWDIm6s+E)4
-@Bl@m10/$jEFCAWeEcc>EDI[*sARprgOuSI(F(03R9.t*qDKB9.P!5$bOuSI(@VBhG98ES298H
--%CbKU=DJ3TqB4uCM5*@]T061WACh[cu@<.Mq06:]DAnc-nATE,NAoNnsOu$]hL]M+,L^]FIHS
-9)r5*@^2Dfd+9P"UT2P!+/$Dfd+9L]N[<P"UT3P!+/J!I]<9AT/c+L]N[<P"UT2P!+/J!I]<N!
-.C#1I?ITYH\_ZMP#ZR7E0<D!P!5%RI?I,SAhtQ6L]N;4L]N;4L]N;4L]N;4L]N;3L]N;4L]LeE
-1N[Y[AV^>B!Jh/2OuQohFHSh"E0:6b99MJN1Qjqb99MH$"FZG(HZNb;+D,R8>DN98!/LW2!/LW
-2!/LW2!/LW2!/LZ3!/LV\P'MJ=<.0o>Ou$r`EbgI2Ch[d.@WQmP!KpQ@!KoTmH\_ZMI=$<s!I]
-BZ<K_u_P"CfUL]N[<OpR9Z04JjAP!5$bP')q106:]D+BostDfg>^!KoX0WI9q$?'7!bAT3G*>D
-N98!/LV\P'M+[E$045E0=[d"Ho`gL]E52L]E52?'9Jh&p%W'Anc-nATESlF(K<&Bl7HmEej^3B
-l7TqBkM+$P(l(]061WA0/%?WDJ`g(EbTbOE+sQ<+EM+505tWMGT_'=E0=Z`E+sQBL]K/BASGdj
-FGKsR8<PkaGA1T0BHVA-E0=[d8<PkaDfBe@DfBf4Df0V=5!CVQEb0-*@<?O(G`k:IqhP99L1>.
-=E$0(<FD5Z2F"]1ZF"o7VA!0&0061WAD..O,Bm>e*P"h*"I?G)'1G<9IFCAWeEcc>EDI[*sARo
-:hD/aE7BlmpL30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:AT
-Vm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/databartruncatedcomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databartruncatedcomposite 0.0 2015050900 90784 87051
+%%BeginData: 100 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /databartruncated dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databartruncatedcomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (databartruncated) put
+ options (linkage) true put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //databartruncated exec
+ dup (sbs) get /linsbs exch def
+ dup (bhs) get 0 get 72 mul /linheight exch def
+ //renlinear exec
+
+ % Plot the separator
+ /sepfinder {
+ /fp exch def
+ fp 1 fp 12 add {
+ /i exch def
+ bot i get 0 eq {
+ bot i 1 sub get 1 eq {
+ 1
+ } {
+ sep i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep exch i exch put
+ } for
+ /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def
+ true 0 1 12 {dup bot exch fp add get exch f3 exch get eq and} for {
+ % Right shifted module for value 3 finder
+ sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
+ } if
+ } bind def
+ mark
+ 0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall
+ counttomark 1 sub array astore /bot exch def pop pop
+ /sep [ bot {1 exch sub} forall ] def
+ sep 0 [0 0 0] putinterval
+ sep sep length 4 sub [0 0 0 0] putinterval
+ 18 sepfinder 64 sepfinder
+ 0 linheight rmoveto <<
+ /ren //renmatrix
+ /pixs sep
+ /pixx sep length
+ /pixy 1
+ /height 1 72 div
+ /width sep length 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ -5 1 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/databartruncatedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databartruncatedcomposite--
@@ -6668,33 +19978,87 @@ Vm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
% --EXAM: (01)03512345678907|(21)abcdefghijklmnopqrstuv
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarlimitedcomposite 0.0 0 0 0
-%%BeginData: 25 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +*@<> pe@ <-0uD /"*'
-A<Jo*F_`U>D_?-C EcQG7 F`M SBD D#CB Bl J$S g6-]D3 %n oc0eHm FOu
-P+;CG'+8/p(ZFEd ;,:Ec c5; /n0 $ =E, ^uo P'E -L061W AC h[cu@< .Mj
-06M%_@rEuAATDg: @Wc^5 Df. 1:G A2 #8 P1l (DO uP+8AS u? nFE2)? OuP
-+;CG'+8/p(ZFEd; ,:Ec c5; /n 0$ =E, ^uo P'E -!04
-\L5@:EYcCh[a#FC eumD f 'H 3F (o` -H\ `B!2 3JD%D
-fBf4Df0WZ5*@]T@ UX:eDe *FB 5 *@] TA 8c@- A9) +&+D,%uF(L LjDfBf4Df0W
-ZY:js=EbTE(FEqh :P!+/J !Ko = '%<$ 3-Bl @m1 H]kFA@;L!r P!+/T5^eepO
-uSV6P,4<rNWD;+N HB2`AW f3' OtDh \P') pOO u%N5OtCcrF _-^lI?ITYP%
-BdtOuY16E-,f4DK Ct)Ou %NL< ,Z_tB l@m1 H]g 15P"B+kEas #uAW?e=P)Xf
-ACh[cu@<.MpOu&8 D04Sp ;E0<D J1OXV 5Fa ]EQP"oq7FD 5Z2F,gKABl8
-$<E+P%>A79Rg@UX :nBl.R+ ARpsKD fBf4D f0W V#Ae*lCLLj eFE2M8P'Cna
-FD5Z2F,gQ@DJO<4Eb/ZiNWChsG].PCBl@m1NX006DKKE0@<Zg6F_-_\Ch[cu@<*K/E-,f4DK@H
-aA79Rg@UX:nBl.R+ARprgOuSI(F(03R9.t*qDKB9.P!5$bOuSI(@VBhG98ES298H-%CbKU=DJ3
-TqB4uCM5*@]T061WACh[cu@<.MqD..I#L]M=+DKB9.H\_]c=GQs?4aVO3!I]BCH\_ZMI?ITnK7
-/nSOrK2XP,XTNOp`paAT3erOu&8DP'(hWE/4KuL]E52L]C_DH#mP9+EM+5P%'4MP,VZA!/LW2!
-/LV\P'Mi`Ch[d#ASGdjFHVA@4>1_dDD*Y`ASu?nFE2)?05tWMF!,O8E%c0EG^(?PAT3fA05tWM
-H&)JSBOtmjBQT%2Le*[e06_,@FD)e<AT3fALe*[e05kfO+E)4@Bl@m1+?htB061WAD..O,Bm>e
-*@rH4'+E)4@Bl@m10/$sZ0eHmFP!>*hNWa<8G^,BELe*[mP,X6<P(kVCEb0-*@<?O(G`k:S9p.
-MbOq*X204\L5@:EYcCh[a#FCeumDf'H3F(o`-OuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+C
-o%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/databarlimitedcomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarlimitedcomposite 0.0 2015050900 80661 80522
+%%BeginData: 79 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /databarlimited dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarlimitedcomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (databarlimited) put
+ options (linkage) true put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //databarlimited exec
+ dup (sbs) get /linsbs exch def
+ dup (bhs) get 0 get 72 mul /linheight exch def
+ //renlinear exec
+
+ % Plot the separator
+ mark
+ 1 linsbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall
+ counttomark 1 sub array astore /sep exch def pop pop
+ sep 0 [0 0 0] putinterval
+ sep sep length 4 sub [0 0 0 0] putinterval
+ 0 linheight rmoveto <<
+ /ren //renmatrix
+ /pixs sep
+ /pixx sep length
+ /pixy 1
+ /height 1 72 div
+ /width sep length 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ comp options //gs1-cc exec
+ dup (pixx) get 72 exch sub 1 rmoveto
+ //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/databarlimitedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarlimitedcomposite--
@@ -6705,36 +20069,106 @@ o%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
% --EXAM: (01)93712345678904(3103)001234|(91)1A2B3C4D5E
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarexpandedcomposite 0.0 0 0 0
-%%BeginData: 28 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +*@<> pe@ <,q(E +*Wp
-ARpr`06M%_@rEuA ATDg: @Wc ^5D f.1: GA 2#8 P1l(DO uP +-F"o7 VA!
-/f)F_`U>D_?-CEc QG7F` MSB DD# C BBl J$S g6- ]D3%o; `D JX$)AR TVB
-3%oDi/n8fPFCfK5 H"(o: FDl %L@ Wu O* E0A q<G `k$>Eb 0- *@<?O( G`k
-$>F_`U>D_?-CEcQ G7F` MSB DD #C BBl J$S g6- ]D%5
-27#FCAWeEb0K7@; ]UeA 7 KO pE ,Tf 3FC ffT' Tt>:%
-52X=FD5Z2F-8_M1 G<3GEa s#u A Wf6 ?1 G<9W DKK E0@<Wi+@;L !rOu%#qFD5Z
-2F-<^[F*)G:DJ+' :E+P1q H\_ ] c23J DeE- ,f4 DKC/fX(GdV F(LLtH]gXBP
-#RT(P%'TNOthst4 d(eHEc krV 4aW> DP!5 %OP !5$bI=%,/F E2M8Ou%NL<I
-L$AOrfcH05kfOBl @m1P! 5$bI ?IQJE -,f4 DKC /f1OYEX@UX :eDe*F>!IU&
-iHS92LDIm6sP!5$ bP'&E fDf'H V5*@^ MH] iN"P#[Z?Df Bf4Df0WV#Ae
-*lFEqh:NXoZ/FCA WeEb0K7 @;]UeA <M1UE -,f 4DKCgCCh[d &@:s.nEckrV
-G].PCBl@m1NX9E;CNFH8ART,0!AK[]DfBf4Df0WV#\7jkFC]E#GB@kJAWh:SBl7KjEZf:>FD5Z
-2F"]1W@<>pe@<,q(E+*WpARprgOuSI(F(03R9.t*qDKB9.P!5$bOuSI(@VBhG98ES298H-%CbK
-U=DJ3TqB4uCM5*@]T061WACh[cu@<.Mq06:]DAnc-nATE,NAoNnsOu$]hL]M+,L^]FIHS9)r5*
-@^2Dfd+9P"UT2P!+/$Dfd+9L]N[<P"UT3P!+/J!I]<9AT/c+L]N[<P"UT2P!+/J!I]<N!.C#1I
-?ITYH\_ZMP#ZR7E0<D!P!5%RI?I-LOq*X2D..I#L]D7*DKB9.H\_]c=GR!@4aVO3!.B9BH\_]N
-I?ITnK7/nSOrK2XP,XTNOp`pPDfh.+Ou&8DP'&F!AT/br+C]82H\_]c5*DmnP"ArB1NR,HL]CY
-8!/LW2!*tb5F(K;5F(K<R@Yb/MWEY/YL]E52L]C_DH!?(;Lgjh3FHU*h%?d];I?I-W7>PD^Dfh
-.OL^fNHH[V&J?$d]8AT26qDId=!I?I0X!,Q@eBOtmjBQTDl4?P9;ASs.SEb0-*@<?O(GV=#MG]
-P!KAT0;ABm=kFF(K<R@P;\7G^5)G05+p2B4uCC!Jj:02D98gA9;K-F(K<R@YdR<2D8ufF<GL@F
-D5Z2F!*Y10/%?WDJ`g(EbTc]5DT>r!Kr1IDf'G9DfBf4Df0VL05#>\/Rr:R5;+[1ASu?nFE2)?
-P!>+(Ou[rR%[&V$A79Rg@UX:gG]7)/A7]:]Df'H3F(o`-OuSV806M%_@rEuAATDg:@Wc^5Df.1
-:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATVm"@r#drB75qB~>
-% uk.co.terryburton.bwipp/databarexpandedcomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarexpandedcomposite 0.0 2015050900 86979 83324
+%%BeginData: 98 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /databarexpanded dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarexpandedcomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (databarexpanded) put
+ options (linkage) true put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //databarexpanded exec
+ dup (sbs) get /linsbs exch def
+ dup (bhs) get 0 get 72 mul /linheight exch def
+ //renlinear exec
+
+ % Plot the separator
+ /sepfinder {
+ /fp exch def
+ fp 1 fp 12 add {
+ /i exch def
+ bot i get 0 eq {
+ bot i 1 sub get 1 eq {
+ 1
+ } {
+ sep i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep exch i exch put
+ } for
+ } bind def
+ mark
+ 0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall
+ counttomark 1 sub array astore /bot exch def pop pop
+ /sep [ bot {1 exch sub} forall ] def
+ sep 0 [0 0 0] putinterval
+ sep sep length 4 sub [0 0 0 0] putinterval
+ [ % Finder pattern module positions
+ 18 98 bot length 13 sub {} for
+ 69 98 bot length 13 sub {} for
+ ] {sepfinder} forall
+ 0 linheight rmoveto <<
+ /ren //renmatrix
+ /pixs sep
+ /pixx sep length
+ /pixy 1
+ /height 1 72 div
+ /width sep length 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ 1 1 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/databarexpandedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarexpandedcomposite--
@@ -6745,36 +20179,103 @@ P!>+(Ou[rR%[&V$A79Rg@UX:gG]7)/A7]:]Df'H3F(o`-OuSV806M%_@rEuAATDg:@Wc^5Df.1
% --EXAM: (01)00012345678905(10)ABCDEF|(21)12345678
% --EXOP: segments=4
% --RNDR: renmatrix renlinear
-%%BeginResource: uk.co.terryburton.bwipp databarexpandedstackedcomposite 0.0 0 0 0
-%%BeginData: 28 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +*@<> pe@ <,q(E +*Wp
-ARok(@:O(aA<Jo* F_`U> D_? -CE cQG7 F` MSB DD#CBB lJ $Sg6-] D3%
-noc0eHmFOuP+;CG '+8/p (ZF Ed; , :Ec c5; /n0 $=E,^u oP 'E-L06 1WA
-D..O,Bm>e#06M%_ @rEuA ATD g:@ Wc ^5 Df. 1:G A2#8P1 l( DOps'T @<>
-pe@<,q(E+*WpARo k(@: O(a A7 KO pE, Tf3 FCf fT'T
-t>:%52X=FD5Z2F- 8_M1 G <3 GE as# uAW f6?1 G<9WD
-KKE0@<Wi+@;L!rO u%#qFD 5Z2 F -<^ [F *)G: DJ+ ':E+P1qH\_ ]c23JDeE-,f
-4DKC/fX(GdVF(LL tH]gXB P#R T (P%' TNOt hst 4d(eHEckrV 4aW>DP!5%OP
-!5$bI=%,/FE2M8O u%NL<I L$A Orfc H05k fOB l@m1P!5$bI ?IQJE-,f4DK
-C/f1OYEX@UX:eDe *F>!I U&iH S92LD Im6s P!5 $bP'&EfDf' HV5*@^MH]iN
-"P#[Z?DfBf4Df0W V#Ae* lFEqh :NYZ/ 6FC AWeEb0K7@; ]UeA92j$@r#
-XdP'CnaFD5Z2F,g KABl7]p B4Z1*F _-_\D fBf 4Df0WV$#+9 mF)Z/2@:YB!
-0Tp[!E-,f4DKCgDA8c@-A9)+&FE2M8P'CeWDIm6s+E)4@Bl@m10/$jEFCAWeEb0K7@;]UeA92j
-$@r#XdP!>*hNWa<8G]T$@L]E54P$!_IE+sQAP"Us304JjAP!5$bOuSI)E+sQBP"RHEBl7TqBkM
-+$P!5$b0/%?WDJ`g(EbTc]5;.(hE+Wg%A7]e.04o0d5*@^6E/4O,E/4pc!IHJ6P!5$b@W-?2Bp
-),F!0TKl@W-?2BnueQWKKo1!KoTmL]MpNF(K;5BnueQWKKo1!0TKlL]MpNL]Djd<IL$1I=$bMI
-?ITOAT3erBp(ZCG^Y`GI?G)'1G<f\E$/@-@W-@8L]NZ&P,Wkm8R7K8F(K<H!*b6ZL]E52?'9JS
-AT/c5AT3fAL]im?>DN98!/LW2!*tb5>DNrK@Ua7tP%'4VP,WeVP":BuLgjh3FHU*h%?d];I?I-
-,HQ[B@E+Wg%A7]e0P"CH0Ch[d#ASGdjFHVA@4>1_dDD*Y`ASu?nFE2)?05tWMF!,O8E%c0EG^(
-?PAT3fA05tWMH&)JSBOtmjBQT%2Le*[e06_,@FD)e<AT3fALe*[e05kfO+E)4@Bl@m1+?htB06
-1WAD..O,Bm>e*@W-@E!0U!2!0TKlL]W!OL]Djd<JU[=L1>.=E$0(<FD5Z2F"]1ZF"o7VA!0&00
-61WAD..O,Bm>e*P"h*"I?G)'1G<9IFCAWeEb0K7@;]UeA92j$@r#Xd@rH4'Df]W7AWf$9A1r(@
-/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH
-4@:O(eDJ+B\;u~>
-% uk.co.terryburton.bwipp/databarexpandedstackedcomposite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp databarexpandedstackedcomposite 0.0 2015050900 89645 89413
+%%BeginData: 95 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /databarexpandedstacked dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/databarexpandedstackedcomposite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (lintype) (databarexpandedstacked) put
+ options (linkage) true put
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Plot the linear part
+ linear options //databarexpandedstacked exec
+ dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
+ dup (pixy) get /linheight exch def
+ //renmatrix exec
+
+ % Plot the separator
+ /sepfinder {
+ /fp exch def
+ fp 1 fp 12 add {
+ /i exch def
+ bot i get 0 eq {
+ bot i 1 sub get 1 eq {
+ 1
+ } {
+ sep i 1 sub get 0 eq {1} {0} ifelse
+ } ifelse
+ } {
+ 0
+ } ifelse
+ sep exch i exch put
+ } for
+ } bind def
+ /sep [ bot {1 exch sub} forall ] def
+ sep 0 [ 0 0 0 ] putinterval
+ sep sep length 4 sub [ 0 0 0 0 ] putinterval
+ [ % Finder pattern module positions
+ 19 98 bot length 13 sub {} for
+ 70 98 bot length 13 sub {} for
+ ] {sepfinder} forall
+ 0 linheight rmoveto <<
+ /ren //renmatrix
+ /pixs sep
+ /pixx sep length
+ /pixy 1
+ /height 1 72 div
+ /width sep length 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ bot 0 get 0 eq {2} {0} ifelse 1 rmoveto
+ comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/databarexpandedstackedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarexpandedstackedcomposite--
@@ -6785,38 +20286,108 @@ AT/c5AT3fAL]im?>DN98!/LW2!*tb5>DNrK@Ua7tP%'4VP,WeVP":BuLgjh3FHU*h%?d];I?I-
% --EXAM: (00)030123456789012340|(02)13012345678909(37)24(10)1234567ABCDEFG
% --EXOP: ccversion=c
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1-128composite 0.0 0 0 0
-%%BeginData: 30 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: U=2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +-F"o 7$1 ,tFV0 6M%_
-@rEuAATDg:@Wc^5 Df.1: GA2 #8P 1l(D Ou P+- F"o7VA !/ f)F_`U >D_
-?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% o;` DJX $)ARTV B3 %oDi/n 8fP
-FCfK5H"(o:FDl%L @WuO* E0A q<G `k $> Eb0 -*@ <?O(G` k$ >F_`U> D_?
--CEcQG7F`MSBDD# CBBl J$S g6 -] D%5 2@8 0eG +83+
-HlDE,Tf3FCffT'T t>:% 5 2X =F D5Z 2F- 8_M1 G<3GE
-as#uAWf6?1G<9WD KKE0@< Wi+ @ ;L! rO u%#q FD5 Z2F-<^[F*) G:DJ+':E+P1
-qH\_]c23JDeE-,f 4DKC/f X(G d VF(L LtH] gXB P#RT(P%'TN Othst4d(eHE
-ckrV4aW>DP!5%OP !5$bI= %,/ FE2M 8Ou% NL< IL$AOrfcH0 5kfOBl@m1P!
-5$bI?IQJE-,f4DK C/f1O YEX@ UX:eD e*F> !IU &iHS92LDIm 6sP!5$bP'&E
-fDf'HV5*@^MH]iN "P#[Z ?DfBf 4Df0W V$# +9mF)Z/2@: YB!0Tp[!E-,
-f4DKCgDA8c@-A9) +&FE2M8 P'CnaF D5Z2F ,gN BBl7]pB4YL nEckrVG\h)3
-ARTU%4?Oa)E-,f4DKC/QP"@i$0/$sZ0eG+830HLd"*7pmP"UT2P!45U!I^,&05P??GA1T0BTbQ
-B1N.5SBl@m1NX'B7DKL/CAW@".F"o7$1,tGADfBf4Df0WV#]+3mGA1T0BP_C#GA1T0BTdUMDf'
-G9DfBf4Df0VL05#>\/Rr:R5;-MbD/aQAD3@)G1Lk??E-$;ANWa<8G^,BELguT2H]A,8I=$tT@s
-sM?05P??CNOi@AWf6?1MgcCCNOi@AW?e"P!+/1E-,f4DKCgDCh[d&@:s.[FE2M8P'CnaFD5Z2F
-,gNBBl7]pB4YRb@;L!rP'DD%DfBf4Df0WV#]+3mCLLje@:iqaF(LMZDfBf4Df0WV#]+3mCLLje
-@rua6AWh:dP#Z=4DIm6s+?Vb/DfBf4Df0WCI?I/c4teR%F"o7$1,tF]OuSI(F(03R9.t*qDKB9
-.P!5$bOuSI(@VBhG98ES298H-%CbKU=DJ3TqB4uCM5*@]T061WACh[cu@<.MqD..I#L]M=+DKB
-9.H\_]c=GQs?4aVO3!I]BCH\_ZMI?ITnK7/nSOrK2XP,XTNOp`paAT3erOu&8DP')Q\Ch[d#AS
-GdjFHVA@4>1_dDD*Y`ASu?nFE2)?05tWMF!,O8E%c0EG^(?PAT3fA05tWMH&)JSBOtmjBQT%2L
-e*[e06_,@FD)e<AT3fALe*[e05kfO+E)4@Bl@m1+?htB061WAD..O,Bm>e*Ch[d&FEqh:NWERO
-4aSi'+Dbb0GA1T0BSZ_QWJCqF;N`ghE$04X$'M9D!g6HE1G<tqF!,FbWJCS<WJCqFCkrF]!H<h
-pP!+/J!g3S4P#R6IP,XU#G_cB`L4+E)q1o'7L4,4b@rH4'F*VUU061WAD..O,Bm>e*P"h*"I?G
-)'1G<B^0eG+83+HlDE,Tf3FCgUpP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Df
-p)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/gs1-128composite 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp gs1-128composite 0.0 2015050900 86884 89985
+%%BeginData: 100 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+2 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-128 dup /uk.co.terryburton.bwipp findresource put
+dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1-128composite {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Split the linear and composite parts
+ barcode (|) search {
+ /linear exch def
+ pop
+ /comp exch def
+ } {
+ pop
+ } ifelse
+
+ gsave
+
+ options (inkspread) (0) put
+ options (dontdraw) true put
+
+ % Dummy plot of linear part with CC-A to get width
+ options (linkagea) true put
+ linear << options {} forall >> //gs1-128 exec
+ (sbs) get 0 exch {add} forall /linwidth exch def
+
+ % Create 2D part and determine type
+ options (lintype) (gs1-128) put
+ options (linwidth) linwidth put
+ comp options //gs1-cc exec /compsym exch def
+ compsym (pixx) get 99 eq {(a)} {(c)} ifelse /linktype exch def
+
+ % Plot linear part
+ linktype (a) eq {
+ options (linkagea) true put
+ options (linkagec) false put
+ } {
+ options (linkagea) false put
+ options (linkagec) true put
+ } ifelse
+ linear << options {} forall >> //gs1-128 exec
+ dup (sbs) get /linsbs exch def
+ dup (bhs) get 0 get 72 mul /linheight exch def
+ //renlinear exec
+
+ % Plot the separator
+ mark
+ 1 linsbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall
+ counttomark 1 sub array astore /sep exch def pop pop
+ 0 linheight rmoveto <<
+ /ren //renmatrix
+ /pixs sep
+ /pixx sep length
+ /pixy 1
+ /height 1 72 div
+ /width sep length 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ linktype (a) eq {
+ /s linwidth 2 sub 11 idiv def
+ /p s 9 sub 2 idiv def
+ /x s p sub 1 sub 11 mul 10 add p 0 eq {2 add} if 99 sub def
+ x 1 rmoveto
+ } {
+ -7 1 rmoveto
+ } ifelse
+
+ compsym //renmatrix exec
+
+ grestore
+
+ end
+
+} bind def
+/gs1-128composite dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1-128composite--
@@ -6827,87 +20398,391 @@ p)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
% --EXAM: (01)03453120000011(17)120508(10)ABCD1234(410)9501101020917
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1datamatrix 0.0 0 0 0
-%%BeginData: 31 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04\L5@ ;T FpEbTc ]3%
-oDi/n8fPFCfK5H" (o:FD l%L @Wu O *E0 Aq< G`i LhB6,e <@ <>pp@< ?O(
-G^G5\Ou8C305kfO Bl@m1 P!5 $b0 4J @1 @rG mhP !5$b04 ]! =FC]E# G9C
-L+Cia0N1N.5SBl@ m1P- 6N[ FE 2) 5B6 8E< AWf 3'L]
-NYrOpu>KFD5Z2F* j(NA m oL sA Wf3 'P! FGY< 0B5(@
-ZmRN0oc8tP)XR(F _-_!H] ftD 5 *C& O5 *@^M H]f t&EckrV1OY EdI?J0)*g/N
-:DfBf4Df0WZ5*@^ MP#Q@= FD5 Z 2F*j '+I? I/T AU&0&DIe)I Bl9(tOu"b0F
-`\a?DN\IlV33VfC 5;kQ1M L`R NWEI LNI- gJD fp/b5&-6EP 'N4"C6AUR!K
-mI:C6CcD1QlmD3/ @Qj"- Q?@/ 8oZQP !3W: !Ks FF5*C/R30I a,"-TX>"-Pj
-29RV8N3,`q]P!3W D5*C2 S@VV& ,05?Y 6Ou %$!FGKp3P" _$(I?ITYP%B
-')%[&V$@;0d*>9I 471G<0N G%#3C! g5F(1 Lad 5@rGmhOuSV 6L]N[<L]NZ&
-P"^4c30"!%4aW>WI?IQi!@a1kP')pOP')pONWCPkNI-gPP')pOL]`G6P)"I4NW=k;L]NZoI?IT
-7+CSu*OogehOrK2YOo^_J>q]W#F-8_M1LY!@@;L`%L]NZoAU&0&DIeoTI?J0)FY@0;AncL$A;D
- %b23Kb"L]E53L]i'QP"8l*NWLmgL]Wa9Or9EBOuS6uL]rV7P)"iIOo^_j@;0=fG\(EA",Hu@L
-QZn1P"Al6$]"h>'RP7k8;J(<+,BrR,^Xs&8;J^#H\`#b!g9CC0TnD(BkD((ARpT!L]NZoP'DD<
-8M=[n@kif>Ou"b%D01"F>9INq@kf*3Ou%moL]LpuF-:!g!KsF/056S5Ou"b"BcphuF!,1[99M(
-aG%#20@;0mnC`m/#P"UroA8QF5P%%j6P%'RTG%#3M@ZgbT$'I9(!+]qgG`m?83+QlJG`lNEBcp
-WC5'q^@8R7L)OuQuhFEisX@;1m6Oo]`7C`lrF5'q^@8R7L)04\pAG`k7R1MIt?BlfGHL]N[<P&
-4WAAncL$A0>;pL]E54P"_$HP&QQeHXpu8G`lNl!KmJH$'I9(!+]qgG`m?83+QlJG`lNJDIYDaG
-V<TEFEis4Ou%NL<.0p#04J@1@rGmh+Co>2G`lNl!KmJ>"d3\bV33VfBnubP1G<L!!0T-bBcpr'
-FEisXP!+/T5^eepA8QF5+DI!3OuR&k@kj-0H]iM\@<,jrA7ZluNWi`Y:.$b!GqWnTC5<"U!Ko6
-eHX^E(@rGmhP!3WD5*C/=P#X/L+DHW4Oo^_%05;VEL]NY>Ou%NLAM7M$Eas#uAKYGjEas#uAV^
->$P"_#pDfBf4Df0WV#\7jkFC]E#GB@kJAWh:VE-,f4DKCgDE+*d.AS,giFE2M8P'AWgEbBG9@U
-X:eDe*E%DfBf4Df0VL04\L5@;TFpEbTc]5E[g2EbBHR")i.#DfBf4Df0WZG[YW*F!,"3DKKE0@
-<[lR0/%?WDJ`g(EbTc]<0B7iOq*X205#>\A79RgD..O,Bm>e#P%64gCG'+8/p(ZFEd;,:Ecc5;
-/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/gs1datamatrix 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp gs1datamatrix 0.0 2015050900 78248 77990
+%%BeginData: 134 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1datamatrix {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Expand ordinals of the form ^NNN to ASCII
+ /expand {
+ /in exch def
+ /out in length string def
+ /j 0 def
+ in
+ { % loop
+ (^) search {
+ dup out exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi out exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup out exch j exch putinterval
+ length j add /j exch def
+ out 0 j getinterval exit
+ } ifelse
+ } loop
+ } bind def
+
+ % Parse out AIs
+ /ais [] def
+ /aival 2 dict def
+ barcode dup length 1 sub 1 exch getinterval
+ { % loop
+ dup () eq {exit} if
+ (\)) search pop
+ exch pop
+ exch (\() search {
+ exch pop exch 3 1 roll
+ } {
+ () 3 1 roll
+ } ifelse
+ [ ais aload pop counttomark 2 add index ] /ais exch def
+ aival 3 1 roll expand put
+ } loop
+ pop
+
+ % Pre-defined fixed length data field AIs
+ % any AI whose prefix is not included in this table must be
+ % terminated with "FNC1", even if it's fixed length
+ /aifixed 23 dict def
+ [
+ 0 1 4 {} for
+ ] {
+ (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
+ } forall
+ [
+ 11 1 20 {} for
+ 23
+ 31 1 36 {} for
+ 41
+ ] {
+ 10 2 string cvrs dup aifixed 3 1 roll put
+ } forall
+
+ % Create the datamatrix data
+ /fnc1 -1 def
+ /dmtx [ fnc1 ] def
+ 0 1 ais length 1 sub {
+ /i exch def
+ /ai ais i get def
+ /val aival ai get def
+ dmtx length ai length add val length add array
+ dup 0 dmtx putinterval
+ dup dmtx length ai [ exch {} forall ] putinterval
+ dup dmtx length ai length add val [ exch {} forall ] putinterval
+ /dmtx exch def
+ i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ dmtx length 1 add array
+ dup 0 dmtx putinterval
+ dup dmtx length fnc1 put
+ /dmtx exch def
+ } if
+ } for
+
+ % Compose input to datamatrix
+ /barcode dmtx length 1 add 5 mul string def
+ /i 0 def /j 0 def {
+ i dmtx length eq {exit} if
+ dmtx i get dup fnc1 eq {
+ pop barcode j (^FNC1) putinterval
+ /j j 4 add def
+ } {
+ barcode exch j exch put
+ } ifelse
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /barcode barcode 0 j getinterval def
+
+ % Get the result of encoding with code128
+ options (dontdraw) true put
+ options (parsefnc) true put
+ /args barcode options //datamatrix exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/gs1datamatrix dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1datamatrix--
+% --BEGIN ENCODER gs1qrcode--
+% --REQUIRES preamble raiseerror renmatrix qrcode--
+% --DESC: GS1 QR Code
+% --EXAM: (01)03453120000011(8200)http://www.abc.net(10)ABCD1234(410)9501101020917
+% --EXOP:
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp gs1qrcode 0.0 2015050900 78280 77938
+%%BeginData: 133 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /qrcode dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1qrcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Expand ordinals of the form ^NNN to ASCII
+ /expand {
+ /in exch def
+ /out in length string def
+ /j 0 def
+ in
+ { % loop
+ (^) search {
+ dup out exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi out exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup out exch j exch putinterval
+ length j add /j exch def
+ out 0 j getinterval exit
+ } ifelse
+ } loop
+ } bind def
+
+ % Parse out AIs
+ /ais [] def
+ /aival 2 dict def
+ barcode dup length 1 sub 1 exch getinterval
+ { % loop
+ dup () eq {exit} if
+ (\)) search pop
+ exch pop
+ exch (\() search {
+ exch pop exch 3 1 roll
+ } {
+ () 3 1 roll
+ } ifelse
+ [ ais aload pop counttomark 2 add index ] /ais exch def
+ aival 3 1 roll expand put
+ } loop
+ pop
+
+ % Pre-defined fixed length data field AIs
+ % any AI whose prefix is not included in this table must be
+ % terminated with "FNC1", even if it's fixed length
+ /aifixed 23 dict def
+ [
+ 0 1 4 {} for
+ ] {
+ (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
+ } forall
+ [
+ 11 1 20 {} for
+ 23
+ 31 1 36 {} for
+ 41
+ ] {
+ 10 2 string cvrs dup aifixed 3 1 roll put
+ } forall
+
+ % Create the qrcode data
+ /fnc1 -1 def
+ /qrc [ fnc1 ] def
+ 0 1 ais length 1 sub {
+ /i exch def
+ /ai ais i get def
+ /val aival ai get def
+ qrc length ai length add val length add array
+ dup 0 qrc putinterval
+ dup qrc length ai [ exch {} forall ] putinterval
+ dup qrc length ai length add val [ exch {} forall ] putinterval
+ /qrc exch def
+ i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ qrc length 1 add array
+ dup 0 qrc putinterval
+ dup qrc length fnc1 put
+ /qrc exch def
+ } if
+ } for
+
+ % Compose input to qrcode
+ /barcode qrc length 1 add 5 mul string def
+ /i 0 def /j 0 def {
+ i qrc length eq {exit} if
+ qrc i get dup fnc1 eq {
+ pop barcode j (^FNC1) putinterval
+ /j j 4 add def
+ } {
+ barcode exch j exch put
+ } ifelse
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /barcode barcode 0 j getinterval def
+
+ % Get the result of encoding with qrcode
+ options (dontdraw) true put
+ options (parsefnc) true put
+ /args barcode options //qrcode exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/gs1qrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER gs1qrcode--
+
% --BEGIN ENCODER hibccode39--
% --REQUIRES preamble raiseerror renlinear code39--
% --DESC: HIBC Code 39
% --EXAM: A123BJC5D6E71
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp hibccode39 0.0 0 0 0
-%%BeginData: 36 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A MZ ?03%oD i/n
-8fPFCfK5H"(o:FD l%L@W uO* E0A q <G` iLh BPC pc@rGm h1 HBf<'T t>:
- %52X=FD5Z2F-8_ M1G<3 GEa s#u AW f6 ?1G <9W DKKE0@ <W i+@;L! rOu
-"b5AU&</Df0ZZa- &53F Cf] =F (o r3L ^K; $06 CcMF
-Eqe:AohO*M#!2i0 6CcM F Eh _9 Aoh O*L ]ESo 06Uc?
-Bk1XoARfCb@r!3! @;L!rO u%# q FD5 Z2 F-<^ [F* )G:DJ+':E+ P1qH\_]c23J
-DeE-,f4DKC/fX(G dVF(LL tH] g XBP# RT(P %'T NOthst4d(e HEckrV4aW>D
-P!5%OP!5$bI=%,/ FE2M8O u%N L<IL $AOr fcH 05kfOBl@m1 P!5$bI?IQJE
--,f4DKC/f1OYEX0 6CcMF CoH/ F<G[: G][P 9DK M$nOu"b5AU &<<BmO>5FCf
-]=F(or3OtVtS06C cMFEq e:Aoh O*+EV 1>F Eqe:AohO*O tVtS06CcMFE
-h_9AohO*+EV1>FE h_9AohO *OtVtS 04J@1 @q] :kF,hb)0et OA2)[BQ3C,u
-!6q'R884cEH9MJ8X:f1+h<)lt#=BSfZ/g)Dm.j^?704S[(Ectl-F,2?023KbO!/LZ3.XPZ=@<-
-O"Cibb'OuQoZEarckEc[C-L]NZ4P!5%RI?I-W!/LYb@<,jrA7^p5L]N[<HX^E(@rGmhP!4[&P"
-]A!@<-O"Cibb'P$jGlHS8iPBlJ#DBPCpc@rGmh1HAoQA4($=Ea`I"ATEf284c-8+@C'XAKWch+
-Dl7BF<G(3DKK<$DBNk8Cj@.6BkM.%F"AGD@;oq&@;I'&ATW$*EcWcSF)YPtATJu&DIal3BOr<-
-H#7#/Ci^^N/gN)#,qgol@;0doATDg0EfrY8P#Qjm82"F\Ebo<)+C\c"@rGmhP%&TCCh[EgFCer
-qARfM&L]N[<I?IQm1G<6OARfLsF_up7Ou%moL]LsnEbo<)L]N[<HX^E(@rGmhP!4[&P"]A!@<-
-O"Cibb'P"T:uARfLsF`!9B04S[,@r$..D3@)G1OYEW04S[,@r$..D'3>%ARfLsF_upbP%p.9G%
-#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"UsTHS8iPBlJ#DB
-PCpc@rGmh1HAoQA4($A@r"JHB5)IJ.nOVgDfTl0@rrha8O>ce6Z6LH+>Z##@q]F`CER/%B5)H1
-E,ol?Bk1dc0/%?SBldisEcQ)=P!=AX<%h]hEas#uAKYGjEas#uAV^=q@<-0qDN[\V1OYEc04J@
-1@rGmh+C\c"Ch7L?!g3SIV33fo!FfJX@rGmhP'N3H@UX:eDe*F8!/N.gG[b*%@rGmh+C\c"Ch7
-L?!KmIm@<,jk@<-E3@q]F`CNFW8P"Us_06CcMF<G%$Ebo<)L]ikAP,4<tFCf]=L]E5\P'D([G]
-\`B@UX:eDe*FBH$!VBF<G%$Ebo<)L]W_?@UX:eDe*E%@UX:nAT!;)Oo^_=OuS7?P!+/TFbjCQP
-#RThFCf]=+C\c"Ch7L?"-N\@.[#$pE-,f4DKCgDA8c@-A9)+&FE2M8P'CnaFD5Z2F,gZCDI[L*
-A7]7aARfLf@;L!rP'CnaFD5Z2F,g]Q@;KXg@<?'jBOt[hAmoLsAWh9k@<-"%+C\c"@rGmh+E)4
-@Bl@m10/$gRA7[PWP!>*c@<-"%NWXBJFB]kl+EV1>F<G[:G]\1KAnH*qF<G[:G]\4LAnH*qF<G
-[:G][P9DKI"CAU&<<BmO>5>p*F9G[YW*F,gTLAU&<A@;KXjDN4p2ASuU$EftZUEbBHR")i.#Df
-Bf4Df0WZG[YW*F!,"3DKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X205,'/@q0FfAMZ?030If*F
-_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hW
-FDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/hibccode39 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp hibccode39 0.0 2015050900 63169 62924
+%%BeginData: 92 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code39 dup /uk.co.terryburton.bwipp findresource put
+begin
+/hibccode39 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /textxoffset 0 def
+ /validatecheck false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /textxoffset textxoffset cvr def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+ /charvals 43 dict def
+ 0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.hibccode39badCharacter (HIBC Code 39 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 41 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 43 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.hibccode39badCheckDigit (Incorrect HIBC Code 39 check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ /barcode barlen 2 add string dup 1 barcode putinterval def
+ barcode 0 43 put
+ barcode barlen 1 add barchars checksum get put
+
+ /text barlen 4 add string def
+ text 0 42 put
+ text 1 barcode putinterval
+ text barlen 2 add barcode barlen 1 add get dup 32 eq {pop 95} if put
+ text barlen 3 add 42 put
+
+ % Get the result of encoding with code39
+ options (dontdraw) true put
+ options (includecheck) false put
+ options (validatecheck) false put
+ /args barcode options //code39 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/hibccode39 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibccode39--
@@ -6918,43 +20793,99 @@ FDtYuCM@[!I?IP~>
% --EXAM: A123BJC5D6E71
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp hibccode128 0.0 0 0 0
-%%BeginData: 35 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu <uD Im6sO uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2A MG r"OuP+ ;CG
-'+8/p(ZFEd;,:Ec c5;/n 0$= E,^ u oP' E-! 05, '/@q0F fA MGr"H\ `B!
-23JD%DfBf4Df0WZ 5*@]T @UX :eD e* FB 5*@ ]TA 8c@-A9 )+ &+D,%u F(L
-Lj06CcMFCoH/FHO V,1G <i] G] \" @H= _m> Ou" b5AU
-&<BDe<U&ATWb(Ou "b5A U &< AD e<U &AT W_.O u"b7@
-;KXg@<?'jBOt[h+ D,%uF( LLj D fBf 4D f0WZ Y:j s=EbTE(FEq h:P!+/J!Ko=
-'%<$3-Bl@m1H]kF A@;L!r P!+ / T5^e epOu SV6 P,4<rNWD;+ NHB2`AWf3'O
-tDh\P')pOOu%N5O tCcrF_ -^l I?IT YP%B dtO uY16E-,f4D KCt)Ou%NL<,
-Z_tBl@m1H]g15P" @<KAU &</D f0Y>F Cf]= AoD R/OtDhQ06C cMFE;/BAKZ)
-+G]\"@H=`6mOu"b 5AU&< BDe<U &ATT& :AU &<BDe<U&AT X(gOu"b5AU&
-<ADe<U&ATT&:AU& <ADe<U& ATX(gO u"b#@ <,j k@<-FL.ki\ 51GgsI2`Nf`
-6:4.07Rp!@8kViP:/=\`;H$Op<``C+=tM?L,VLYoOu"b$BOPq)@;L"@/!;cQ1Pc$e!Ji4P@q]:
-kG%#3.P!5$g@UX:eBOPq&P!4[&P"_$&P'DD<8;I8%!FfJX@rGmhP%'4JP,We;@<,jrA7^ofL]N
-Z4@q]:kG%#3.P!5%:P&Pb$@WuO*E%Yg<@UindA7[JN3+?<,6YKnK@:OCjEfO0k8O>ce6Z6LH+>
-GW2+Dl7BF<G(3DKK<$DBNk8Cj@.6BkM.%F"AGD@;oq&@;I'&ATW$*EcWcSF)YPtATJu&DIal3B
-Or<-H#7#/Ci^^N/gN)#,qgol@;0doATDg0EfrY8P#Qjm82"F\Ebo<)+C\c"@rGmhP%&TCCh[Eg
-FCerqARfM&L]N[<I?IQm1G<6OARfLsF_up7Ou%moL]LsnEbo<)L]N[<HX^E(@rGmhP!4[&P"]A
-!@<-O"Cibb'P"T:uARfLsF`!9B04S[,@r$..D3@)G1OYEW04S[,@r$..D'3>%ARfLsF_upbP%p
-.9G%#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"UsTHS8iPBl
-J#DBPCpc@rGmh0et^t@:V`=ARfLDBkM.%N\!b>@rHC.ARfg)84c-8+@C'XAKW]_3$;^EARfKuA
-8,[jF<GOCDg#i*ARmGIEa`['AS#n&DfV"*I?IP_@UX:eDe*E%@UX:eDe*F8!+KAWCh7LI9Th2[
-P#O)D@<,jrA7Zlm@<-0qDMS@W!Ks:B3/@TE@<,jrA7^pLOu$QUEas#uAV^>B/!>-d@<,jrA7Zl
-m@<-0qDMS=V!FfJX@q]:kF!+t+ARfLsF`!:7P'AX%AU&;>@UX:nAT!;,Oo^`BOu%2kG]\`ALan
-R4FCf]=L]LsnEas#uAWh=\AU&;>@UX:nAT!;*Oo]$#Eas#uAKYGjEbo<)L]NY>P"UrtL`hjDH]
-iN-?[\):P'D([G]Y';@<-0qDMSCX!Ji4gG].PCBl@m1NX006DKKE0@<Zg6F_-_\DfBf4Df0WV%
-<c/rBk1XoARfCb@r#[bCia0NGV<KGB6,2)@<,jrA7Zm%E-,f4DK@Ha@rGmh0et_O5E[g2EbBHR
-"*Ad0>9I,mFCf]=+EV1>FEh_9AohO*+EV1>FEqe:AohO*+EV1>FCoH/F<G[:G]\"@H=\4)+C1.
-T@<-"%NXBl>G]\1=Ch[O"NWs!)DKKH1P'CDUB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQ
-nu061WACh[cu@<.N1Ou[rR%[&V$BPCpc@rGmh0et_O30If*F_`U>D_?-CEcQG7F`MSBDD#CBBl
-J#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/hibccode128 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp hibccode128 0.0 2015050900 67220 66909
+%%BeginData: 91 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /code128 dup /uk.co.terryburton.bwipp findresource put
+begin
+/hibccode128 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textyoffset -7 def
+ /textxoffset 0 def
+ /validatecheck false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textyoffset textyoffset cvr def
+ /textxoffset textxoffset cvr def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+ /charvals 43 dict def
+ 0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.hibccode128badCharacter (HIBC Code 128 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 41 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 43 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.hibccode128badCheckDigit (Incorrect HIBC Code 128 check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ /barcode barlen 2 add string dup 1 barcode putinterval def
+ barcode 0 43 put
+ barcode barlen 1 add barchars checksum get put
+
+ /text barlen 4 add string def
+ text 0 42 put
+ text 1 barcode putinterval
+ text barlen 2 add barcode barlen 1 add get dup 32 eq {pop 95} if put
+ text barlen 3 add 42 put
+
+ % Get the result of encoding with code128
+ options (dontdraw) true put
+ options (validatecheck) false put
+ /args barcode options //code128 exec def
+
+ args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
+ args (textxalign) (center) put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+} bind def
+/hibccode128 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibccode128--
@@ -6965,38 +20896,82 @@ J#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcdatamatrix 0.0 0 0 0
-%%BeginData: 30 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04\L5@ ;T FpEbTc ]3%
-oDi/n8fPFCfK5H" (o:FD l%L @Wu O *E0 Aq< G`i LhBPCp cA 79RgD. .O,
-Bm=u\'Tt>:%52X= FD5Z2 F-8 _M1 G< 3G Eas #uA Wf6?1G <9 WDKKE0 @<W
-i+@;L!rOu"b7@;K Xg@< ?'j BO t[ h+D ,%u F(L LjDf
-Bf4Df0WZY:js=Eb TE(F E qh :P !+/ J!K o='% <$3-B
-l@m1H]kFA@;L!rP !+/T5^ eep O uSV 6P ,4<r NWD ;+NHB2`AWf 3'OtDh\P')p
-OOu%N5OtCcrF_-^ lI?ITY P%B d tOuY 16E- ,f4 DKCt)Ou%NL <,Z_tBl@m1H
-]g15P"@<9@<,jk@ <-FL.k i\5 1Ggs I2`N f`6 :4.07Rp!@8 kViP:/=\`;H
-$Op<``C+=tM?L,V LYoOu "b$B OPq)@ ;L"@ /!; cQ1Pc$e!Ji 4P@q]:kG%#3
-.P!5$g@UX:eBOPq &P!4[ &P"_$ &P'DD <8; I8%!FfJX@r GmhP%'4JP,W
-e;@<,jrA7^ofL]N Z4@q]:k G%#3.P !5%:P &Pb $@WuO*E%Yg <@UiqWFCB#p
-FE2)?6=FClBOPpi@ru:&N`enE6:2k`@<>p#9jr-aBm:b;F`VXI@rH7,@;0U%Df0B:+Co2!BlnD
-I+Cei!Blmd"+DbV2FCfK6/0K"Q@:Nki+CT.u+EV:.+EMgF@W-((+>#2k0.S>%061K8F(Jp'Ec5
-u]5CJ\oI?I,S@UX:nASrW"@<,jrA7^p5G%#3$A79Rk@q]F`CO:j<P,Wkm<0B$j@q]F`CNFW8L]
-ESoL]E53@UX:nAT!;)P,We;@<,jrA7^ofL]NZ4@q]:kG%#3.P!5%%@q]F`CNFW8Oo[4GBOt[hF
-*2>_5*@^MP"769BOt[hF*2=B@q]F`CNFW8Lb"X'Ou%8iCh[EgFCerqARfM&+C\c"@rGmh+C\c"
-Ch7LI94D=M@q]:kF!+t+ARfLsF`!:7P&5P!@WuO*E%Yg<@UiqWFCB#pFE2)?6=FClBOt[h6tp:
-JFH/"GDI[U*Eb/a&+@o'j6Qed*FC?:d@<?O(GT^L0ARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS#
-n&DfV"*I?IP_@UX:eDe*E%@UX:eDe*F8!+KAWCh7LI9Th2[P#O)D@<,jrA7Zlm@<-0qDMS@W!K
-s:B3/@TE@<,jrA7^pLOu$QUEas#uAV^>B/!>-d@<,jrA7Zlm@<-0qDMS=V!FfJX@q]:kF!+t+A
-RfLsF`!:7P'CnaFD5Z2F,gN:Df0Z-Eaa06EckrVG].PCBl@m1NX^/?Ch[EgFCerqARfLf@;L!r
-P'AWgEbBG9@UX:eDe*E%DfBf4Df0VL04\L5@;TFpEbTc]5E[g2EbBHR")i.#DfBf4Df0WZG[YW
-*F!,"3DKKE0@<[lR0/%?WDJ`g(EbTc]<0B7iOq*X205,'/@q9"i@;TFpEbTc]30If*F_`U>D_?
--CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM
-@[!I?IP~>
-% uk.co.terryburton.bwipp/hibcdatamatrix 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp hibcdatamatrix 0.0 2015050900 68711 64879
+%%BeginData: 74 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/hibcdatamatrix {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /validatecheck false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+ /charvals 43 dict def
+ 0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.hibcdatamatrixBadCharacter (HIBC Data Matrix must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 41 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 43 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.hibcdatamatrixBadCheckDigit (Incorrect HIBC Data Matrix check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ /barcode barlen 2 add string dup 1 barcode putinterval def
+ barcode 0 43 put
+ barcode barlen 1 add barchars checksum get put
+
+ % Get the result of encoding with datamatrix
+ options (dontdraw) true put
+ options (validatecheck) false put
+ /args barcode options //datamatrix exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/hibcdatamatrix dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibcdatamatrix--
@@ -7007,38 +20982,86 @@ P'AWgEbBG9@UX:eDe*E%DfBf4Df0VL04\L5@;TFpEbTc]5E[g2EbBHR")i.#DfBf4Df0WZG[YW
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcpdf417 0.0 0 0 0
-%%BeginData: 30 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 05tH61 bg qP3%oD i/n
-8fPFCfK5H"(o:FD l%L@W uO* E0A q <G` iLh BPC pcE+EQ ;0 fOH8'T t>:
- %52X=FD5Z2F-8_ M1G<3 GEa s#u AW f6 ?1G <9W DKKE0@ <W i+@;L! rOu
-"b$DesQ5DKCU8Ou "b7@ ;KX g@ <? 'jB Ot[ h+D ,%uF
-(LLjDfBf4Df0WZY :js= E bT E( FEq h:P !+/J !Ko='
- %<$3-Bl@m1H]kF A@;L!r P!+ / T5^ ee pOuS V6P ,4<rNWD;+N HB2`AWf3'Ot
-Dh\P')pOOu%N5Ot CcrF_- ^lI ? ITYP %Bdt OuY 16E-,f4DKC t)Ou%NL<,Z_
-tBl@m1H]g15P"@< :DesQ5 DK? q1De sQ5D KCs lOu"b#@<,j k@<-FL.ki\5
-1GgsI2`Nf`6:4.0 7Rp!@ 8kVi P:/=\ `;H$ Op< ``C+=tM?L, VLYoOu"b$BO
-Pq)@;L"@/!;cQ1P c$e!J i4P@q ]:kG% #3. P!5$g@UX:e BOPq&P!4[&P
-"_$&P'DD<8;I8%! FfJX@rG mhP%'4 JP,We ;@< ,jrA7^ofL] NZ4@q]:kG%#
-3.P!5%:P&Pb$@WuO*E%Yg<@Uj@fAi)5$6=FClBOPpi@ru:&N`8P@6:2kl6q0!f2]us[F*&O7Df
-0Z*Bl5&3DJXS@A8,[jFE8uU@ps=jFCAu.Ch7^1ATDiC+EML1@qB^(@;]TuFD,5.F*VV3DesJ;/
-M8;%.jZi%Ea`['AS#n&DfV"*I?IQXP"768@<-0qDBNCsEas#uAWgMG@;KXg@<?'jBOt[hH\_]c
-WI9q/Ou"b$BOt[hF*2>U!0T-o!/LYb@<-0qDMS=VWI&)_Eas#uAWf65!Kp,dBOPq)@;L"J5*AQ
-KBOt[hF*2>_!A@qrARfLsF`!:*Ou%NL82"IdARfLsF_r72BOt[hF*2>U/!=Y11Nm2CBk1XoARf
-Cb@r$E6@UX:eDe*E%@UX:nAT!Z(@UX:eBOPq&+Cf(r@r$..D3@PTD0mpFGA2#8/nes.@rPsj1b
-gpU@:V`=ARfLDBkM.%N[dV<@rHC.ARfg)84c-8+AbHq1bgp3@q]F`CER/%B5)H1E,ol?Bk1dc0
-/%?SBldisEcQ)=P!=AX<%h]hEas#uAKYGjEas#uAV^=q@<-0qDN[\V1OYEc04J@1@rGmh+C\c"
-Ch7L?!g3SIV33fo!FfJX@rGmhP'N3H@UX:eDe*F8!/N.gG[b*%@rGmh+C\c"Ch7L?!KmIm@<,j
-k@<-E3@q]F`CNFW8P"Us_DfBf4Df0WV#\7jkFC]E#GB@kJAWh:VE-,f4DKCgC@rH1+D/OE)Des
-Q5DKCtcDfBf4Df0WV%<c/rBk1XoARfCb@r#[bCia0NGV<KGB6,2)@<,jrA7Zm%E-,f4DK@HaE+
-EQ;0fP7[Ou$NeB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WAD..O,Bm>e?Ou[rR%
-[&V$BPCpcE+EQ;0fP7TP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!
-3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/hibcpdf417 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp hibcpdf417 0.0 2015050900 65468 65072
+%%BeginData: 78 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /pdf417 dup /uk.co.terryburton.bwipp findresource put
+begin
+/hibcpdf417 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /columns 2 def
+ /validatecheck false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /columns columns cvi def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+ /charvals 43 dict def
+ 0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.hibcpdf417BadCharacter (HIBC PDF417 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 41 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 43 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.hibcpdf417BadCheckDigit (Incorrect HIBC PDF417 check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ /barcode barlen 2 add string dup 1 barcode putinterval def
+ barcode 0 43 put
+ barcode barlen 1 add barchars checksum get put
+
+ % Get the result of encoding with pdf417
+ options (dontdraw) true put
+ options (columns) columns put
+ options (validatecheck) false put
+ /args barcode options //pdf417 exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/hibcpdf417 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibcpdf417--
@@ -7049,39 +21072,86 @@ EQ;0fP7[Ou$NeB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WAD..O,Bm>e?Ou[rR%
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcmicropdf417 0.0 0 0 0
-%%BeginData: 31 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 05YE5E c5 o-Ai)5 $Ou
-P+;CG'+8/p(ZFEd ;,:Ec c5; /n0 $ =E, ^uo P'E -!05,' /@ r5piEc 5o-
-Ai)5$H\`B!23JD% DfBf4 Df0 WZ5 *@ ]T @UX :eD e*FB5* @] TA8c@- A9)
-+&+D,%uF(LLj04S p:F_ u#; L] W_ q06 Uc? Bk1 XoAR
-fCb@r!3!@;L!rOu %#qF D 5Z 2F -<^ [F* )G:D J+':E
-+P1qH\_]c23JDeE -,f4DK C/f X (Gd VF (LLt H]g XBP#RT(P%' TNOthst4d(e
-HEckrV4aW>DP!5% OP!5$b I=% , /FE2 M8Ou %NL <IL$AOrfcH 05kfOBl@m1P
-!5$bI?IQJE-,f4D KC/f1O YEX 04Sp :F_u #;+ Cf>+F_u#;O t;bP04J@1@q
-]:kF,hb)0etOA2) [BQ3C ,u!6 q'R88 4cEH 9MJ 8X:f1+h<)l t#=BSfZ/g)D
-m.j^?704S[(Ectl -F,2? 023Kb O!/LZ 3.X PZ=@<-O"Ci bb'OuQoZEar
-ckEc[C-L]NZ4P!5 %RI?I-W !/LYb@ <,jrA 7^p 5L]N[<HX^E (@rGmhP!4[&
-P"]A!@<-O"Cibb'P$jGlHS8iPBlJ#DBPCpcD/!L#DfB6!1bgpU@:V`=@<,ddFCfKQ=\)+N6Qf*
-;@rcKa6q0!f2]us[F*&O7Df0Z*Bl5&3DJXS@A8,[jFE8uU@ps=jFCAu.Ch7^1ATDiC+EML1@qB
-^(@;]TuFD,5.F*VV3DesJ;/M8;%.jZi%Ea`['AS#n&DfV"*I?IQXP"768@<-0qDBNCsEas#uAW
-gMG@;KXg@<?'jBOt[hH\_]cWI9q/Ou"b$BOt[hF*2>U!0T-o!/LYb@<-0qDMS=VWI&)_Eas#uA
-Wf65!Kp,dBOPq)@;L"J5*AQKBOt[hF*2>_!A@qrARfLsF`!:*Ou%NL82"IdARfLsF_r72BOt[h
-F*2>U/!=Y11Nm2CBk1XoARfCb@r$E6@UX:eDe*E%@UX:nAT!Z(@UX:eBOPq&+Cf(r@r$..D3@P
-TD0mpFGA2#8/nes.@r5piEc5o-Ai)5$6=FClBOt[h6tp:JFH/"GDI[U*Eb/a&+@o'j6Qf*;@rc
-Ka6q0!f2]uUDARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS#n&DfV"*I?IP_@UX:eDe*E%@UX:eDe
-*F8!+KAWCh7LI9Th2[P#O)D@<,jrA7Zlm@<-0qDMS@W!Ks:B3/@TE@<,jrA7^pLOu$QUEas#uA
-V^>B/!>-d@<,jrA7Zlm@<-0qDMS=V!FfJX@q]:kF!+t+ARfLsF`!:7P'CnaFD5Z2F,gN:Df0Z-
-Eaa06EckrVG].PCBl@m1NX''4CisT4F(9-)F_u#;P'CnaFD5Z2F,g]Q@;KXg@<?'jBOt[hAmoL
-sAWh9k@<-"%+C\c"@rGmh+E)4@Bl@m10/%0V@rcL,A7dYQ2j-Cg1LY<:F,g?@E--#;FD5Z2F-:
-cVEbBG9A8c@-A9)+&P&N'-Eb0-*@<?O(G`l$h3IR&#Ou"b)BjtRhBk)1%E+EQ;0fP7TP%64gCG
-'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E
-+*6lBl7R3P#M~>
-% uk.co.terryburton.bwipp/hibcmicropdf417 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp hibcmicropdf417 0.0 2015050900 65606 65195
+%%BeginData: 78 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /micropdf417 dup /uk.co.terryburton.bwipp findresource put
+begin
+/hibcmicropdf417 {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /columns 2 def
+ /validatecheck false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /columns columns cvi def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+ /charvals 43 dict def
+ 0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.hibcmicropdf417BadCharacter (HIBC MicroPDF417 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 41 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 43 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.hibcmicropdf417BadCheckDigit (Incorrect HIBC MicroPDF417 check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ /barcode barlen 2 add string dup 1 barcode putinterval def
+ barcode 0 43 put
+ barcode barlen 1 add barchars checksum get put
+
+ % Get the result of encoding with micropdf417
+ options (dontdraw) true put
+ options (columns) columns put
+ options (validatecheck) false put
+ /args barcode options //micropdf417 exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/hibcmicropdf417 dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibcmicropdf417--
@@ -7092,37 +21162,82 @@ cVEbBG9A8c@-A9)+&P&N'-Eb0-*@<?O(G`l$h3IR&#Ou"b)BjtRhBk)1%E+EQ;0fP7TP%64gCG
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcqrcode 0.0 0 0 0
-%%BeginData: 29 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 06)#BD e* FB3%oD i/n
-8fPFCfK5H"(o:FD l%L@W uO* E0A q <G` iLh BPC pcEH5Q -A 7^+D'T t>:
- %52X=FD5Z2F-8_ M1G<3 GEa s#u AW f6 ?1G <9W DKKE0@ <W i+@;L! rOu
-"b7@;KXg@<?'jBO t[h+ D,% uF (L LjD fBf 4Df 0WZY
-:js=EbTE(FEqh:P !+/J ! Ko =' %<$ 3-B l@m1 H]kFA
-@;L!rP!+/T5^eep OuSV6P ,4< r NWD ;+ NHB2 `AW f3'OtDh\P' )pOOu%N5OtC
-crF_-^lI?ITYP%B dtOuY1 6E- , f4DK Ct)O u%N L<,Z_tBl@m 1H]g15P"@<9
-@<,jk@<-FL.ki\5 1GgsI2 `Nf `6:4 .07R p!@ 8kViP:/=\` ;H$Op<``C+=
-tM?L,VLYoOu"b$B OPq)@ ;L"@ /!;cQ 1Pc$ e!J i4P@q]:kG% #3.P!5$g@UX
-:eBOPq&P!4[&P"_ $&P'D D<8;I 8%!Ff JX@ rGmhP%'4JP ,We;@<,jrA7
-^ofL]NZ4@q]:kG% #3.P!5% :P&Pb$ @WuO* E%Y g<@UjCu@rG mh6=FClBOPp
-i@ru:&N`AVA6:2km;BS>FA7Zm#F`VXI@rH7,@;0U%Df0B:+Co2!BlnDI+Cei!Blmd"+DbV2FCf
-K6/0K"Q@:Nki+CT.u+EV:.+EMgF@W-((+>#2k0.S>%061K8F(Jp'Ec5u]5CJ\oI?I,S@UX:nAS
-rW"@<,jrA7^p5G%#3$A79Rk@q]F`CO:j<P,Wkm<0B$j@q]F`CNFW8L]ESoL]E53@UX:nAT!;)P
-,We;@<,jrA7^ofL]NZ4@q]:kG%#3.P!5%%@q]F`CNFW8Oo[4GBOt[hF*2>_5*@^MP"769BOt[h
-F*2=B@q]F`CNFW8Lb"X'Ou%8iCh[EgFCerqARfM&+C\c"@rGmh+C\c"Ch7LI94D=M@q]:kF!+t
-+ARfLsF`!:7P&5P!@WuO*E%Yg<@UjCu@rGmh6=FClBOt[h6tp:JFH.kCDI[U*Eb/a&+@o'j6Qf
-6(+@C'XAKYJrARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS#n&DfV"*I?IP_@UX:eDe*E%@UX:eDe
-*F8!+KAWCh7LI9Th2[P#O)D@<,jrA7Zlm@<-0qDMS@W!Ks:B3/@TE@<,jrA7^pLOu$QUEas#uA
-V^>B/!>-d@<,jrA7Zlm@<-0qDMS=V!FfJX@q]:kF!+t+ARfLsF`!:7P'CnaFD5Z2F,gN:Df0Z-
-Eaa06EckrVG].PCBl@m1NX^/?Ch[EgFCerqARfLf@;L!rP'AWgEbBG9@UX:eDe*E%DfBf4Df0V
-L06)#BDe*FB5E[g2EbBHR")i.#DfBf4Df0WZG[YW*F!,"3DKKE0@<[lR0/%?WDJ`g(EbTc]<0B
-7iOq*X205,'/@rZO!De*FB30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@q
-CgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
-% uk.co.terryburton.bwipp/hibcqrcode 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp hibcqrcode 0.0 2015050900 64983 68179
+%%BeginData: 74 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /qrcode dup /uk.co.terryburton.bwipp findresource put
+begin
+/hibcqrcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /validatecheck false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+ /charvals 43 dict def
+ 0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.hibcqrcodeBadCharacter (HIBC QR Code must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 41 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 43 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.hibcqrcodeBadCheckDigit (Incorrect HIBC QR Code check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ /barcode barlen 2 add string dup 1 barcode putinterval def
+ barcode 0 43 put
+ barcode barlen 1 add barchars checksum get put
+
+ % Get the result of encoding with qrcode
+ options (dontdraw) true put
+ options (validatecheck) false put
+ /args barcode options //qrcode exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/hibcqrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibcqrcode--
@@ -7133,38 +21248,82 @@ CgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibccodablockf 0.0 0 0 0
-%%BeginData: 30 ASCII Lines
-currentfile /ASCII85Decode filter cvx exec
-06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K
-H4@:O(eDJ+B\</: R<2 3KpPE a`['A S# n&D fV" #06M
- %_@rEuAATDg:@W c^5Df .1 :GA2# 8P1l (D OuP +8ASu ?nF E2)?O uP+;
-CG'+8/p(ZFEd;,: Ecc5; /n0 $=E ,^uo P' E-L 04Sp2@ :F %k@r#\ >3%
-oDi/n8fPFCfK5H" (o:FD l%L @Wu O *E0 Aq< G`i LhBPCp c@ rGmd@V fsm
-CM%pL'Tt>:%52X= FD5Z2 F-8 _M1 G< 3G Eas #uA Wf6?1G <9 WDKKE0 @<W
-i+@;L!rOu"b7@;K Xg@< ?'j BO t[ h+D ,%u F(L LjDf
-Bf4Df0WZY:js=Eb TE(F E qh :P !+/ J!K o='% <$3-B
-l@m1H]kFA@;L!rP !+/T5^ eep O uSV 6P ,4<r NWD ;+NHB2`AWf 3'OtDh\P')p
-OOu%N5OtCcrF_-^ lI?ITY P%B d tOuY 16E- ,f4 DKCt)Ou%NL <,Z_tBl@m1H
-]g15P"@<9@<,jk@ <-FL.k i\5 1Ggs I2`N f`6 :4.07Rp!@8 kViP:/=\`;H
-$Op<``C+=tM?L,V LYoOu "b$B OPq)@ ;L"@ /!; cQ1Pc$e!Ji 4P@q]:kG%#3
-.P!5$g@UX:eBOPq &P!4[ &P"_$ &P'DD <8; I8%!FfJX@r GmhP%'4JP,W
-e;@<,jrA7^ofL]N Z4@q]:k G%#3.P !5%:P &Pb $@WuO*E%YX =A78q`De!Qp
-6=FClBOPpi@ru:&N`enE6:2k_De*9cCi<g!+@[JjF`VXI@rH7,@;0U%Df0B:+Co2!BlnDI+Cei
-!Blmd"+DbV2FCfK6/0K"Q@:Nki+CT.u+EV:.+EMgF@W-((+>#2k0.S>%061K8F(Jp'Ec5u]5CJ
-\oI?I,S@UX:nASrW"@<,jrA7^p5G%#3$A79Rk@q]F`CO:j<P,Wkm<0B$j@q]F`CNFW8L]ESoL]
-E53@UX:nAT!;)P,We;@<,jrA7^ofL]NZ4@q]:kG%#3.P!5%%@q]F`CNFW8Oo[4GBOt[hF*2>_5
-*@^MP"769BOt[hF*2=B@q]F`CNFW8Lb"X'Ou%8iCh[EgFCerqARfM&+C\c"@rGmh+C\c"Ch7LI
-94D=M@q]:kF!+t+ARfLsF`!:7P&5P!@WuO*E%Yg<@UindA78q`De!Qp6=FClBOt[h6tp:JFH/"
-GDI[U*Eb/a&+@o'j6Qea7A78q`De!Q*7Nc2SARfKuA8,[jF<GOCDg#i*ARmGIEa`['AS#n&DfV
-"*I?IP_@UX:eDe*E%@UX:eDe*F8!+KAWCh7LI9Th2[P#O)D@<,jrA7Zlm@<-0qDMS@W!Ks:B3/
-@TE@<,jrA7^pLOu$QUEas#uAV^>B/!>-d@<,jrA7Zlm@<-0qDMS=V!FfJX@q]:kF!+t+ARfLsF
-`!:7P'CnaFD5Z2F,gN:Df0Z-Eaa06EckrVG].PCBl@m1NX^/?Ch[EgFCerqARfLf@;L!rP'AWg
-EbBG9@UX:eDe*E%DfBf4Df0VL04Sp2@:F%k@r#\>5E[g2EbBHR")i.#DfBf4Df0WZG[YW*F!,"
-3DKKE0@<[lR0/%?WDJ`g(EbTc]<0B7iOq*X205,'/@q0Ff@:F%k@r#\>30If*F_`U>D_?-CEcQ
-G7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?
-IP~>
-% uk.co.terryburton.bwipp/hibccodablockf 0.0 0
+%%BeginResource: uk.co.terryburton.bwipp hibccodablockf 0.0 2015050900 60823 64313
+%%BeginData: 74 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /codablockf dup /uk.co.terryburton.bwipp findresource put
+begin
+/hibccodablockf {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+ /validatecheck false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+ /charvals 43 dict def
+ 0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+
+ % Validate the input
+ 0 1 barcode length 1 sub {
+ barcode exch 1 getinterval charvals exch known not {
+ /bwipp.codablockfBadCharacter (HIBC Codablock F must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
+ } if
+ } for
+
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 41 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 43 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.hibccodablockfBadCheckDigit (Incorrect HIBC Codablock F check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ } if
+
+ /barcode barlen 2 add string dup 1 barcode putinterval def
+ barcode 0 43 put
+ barcode barlen 1 add barchars checksum get put
+
+ % Get the result of encoding with codablockf
+ options (dontdraw) true put
+ options (validatecheck) false put
+ /args barcode options //codablockf exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+} bind def
+/hibccodablockf dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibccodablockf--
diff --git a/Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex b/Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex
index a0710af9811..a5a5420f165 100644
--- a/Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex
+++ b/Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex
@@ -19,8 +19,8 @@
\let\PSTBarcodeLoaded\endinput
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
%
-\def\fileversion{0.12}
-\def\filedate{2013/10/26}
+\def\fileversion{0.13}
+\def\filedate{2015/05/11}
\message{`PST-barcode' v\fileversion, \filedate\space (tb,hv)}
%
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
diff --git a/Master/texmf-dist/tex/latex/pst-barcode/pst-barcode.sty b/Master/texmf-dist/tex/latex/pst-barcode/pst-barcode.sty
index ed02c1e4a1b..3cffbfaa237 100644
--- a/Master/texmf-dist/tex/latex/pst-barcode/pst-barcode.sty
+++ b/Master/texmf-dist/tex/latex/pst-barcode/pst-barcode.sty
@@ -6,6 +6,6 @@
[\filedate\space v\fileversion\space `PST-barcode' (hv)]
\IfFileExists{pst-barcode.pro}{%
\ProvidesFile{pst-barcode.pro}
- [2011/03/12 PostScript prologue file (hv)]
+ [2015/05/11 PostScript prologue file (hv)]
\@addtofilelist{pst-barcode.pro}}{}%
\endinput