From 2b0ff37419ed820b62c35b01372a8ad6e6e8208e Mon Sep 17 00:00:00 2001 From: vog Date: Tue, 12 Jul 2011 23:52:16 +0000 Subject: [PATCH] More graceful handling of EPS images in which non-existing XMP metadata is announced --- src/epsimage.cpp | 3 +- ...toshop-cs5-ascii_failure-bigxmp.eps.newxmp | 30 +++++++++++++++++++ ...lat_photoshop-cs5-ascii_failure-bigxmp.xmp | 1 + test/data/eps/eps-test.out | 19 ++++++++++-- test/data/preview/preview-test.out | 8 ++--- 5 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 test/data/eps/eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps.newxmp create mode 100644 test/data/eps/eps-flat_photoshop-cs5-ascii_failure-bigxmp.xmp diff --git a/src/epsimage.cpp b/src/epsimage.cpp index 97ed55ec..fc7a0041 100644 --- a/src/epsimage.cpp +++ b/src/epsimage.cpp @@ -633,11 +633,10 @@ namespace { if (containsXmp) { // search for XMP metadata findXmp(xmpPos, xmpSize, data, posEps, posEndEps, write); - if (xmpSize == 0) { + if (xmpPos == posEndEps) { #ifndef SUPPRESS_WARNINGS EXV_WARNING << "Unable to find XMP metadata as announced at position: " << posContainsXmp << "\n"; #endif - throw Error(write ? 21 : 14); } // check embedding of XMP metadata const size_t posLineAfterXmp = readLine(line, data, xmpPos + xmpSize, posEndEps); diff --git a/test/data/eps/eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps.newxmp b/test/data/eps/eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps.newxmp new file mode 100644 index 00000000..b7785b71 --- /dev/null +++ b/test/data/eps/eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps.newxmp @@ -0,0 +1,30 @@ +%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 12.0.2x20101122 [20101122.r.1204 2010/11/22:02:00:00 cutoff; r branch] %%Title: zs_bigxmp_photoshop-cs5-ascii.eps %%CreationDate: 3/25/11 10:14 PM %%BoundingBox: 0 0 37 47 %%HiResBoundingBox: 0 0 37 47 %%SuppressDotGainCompensation %ADO_ContainsXMP: MainFirst %%LanguageLevel: 2 %%Pages: 1 %Exiv2Version: _Exiv2Version_ %Exiv2Website: http://www.exiv2.org/ %%EndComments %%BeginProlog %%EndProlog %%BeginSetup %%EndSetup %ImageData: 37 47 8 3 1 37 2 "beginimage" %BeginPhotoshop: 3178 % 3842494D040400000000000F1C015A00031B25471C020000020000003842494D % 0425000000000010CDCFFA7DA8C7BE09057076AEAF05C34E3842494D043A0000 % 000000F1000000100000000100000000000B7072696E744F7574707574000000 % 0600000000436C7253656E756D00000000436C72530000000045434D59000000 % 004E6D2020544558540000001900500068006F0074006F00730068006F007000 % 200034002000440065006600610075006C007400200043004D0059004B000000 % 000000496E7465656E756D00000000496E746500000000436C726D000000004D % 70426C626F6F6C010000000F7072696E745369787465656E426974626F6F6C00 % 0000000B7072696E7465724E616D65544558540000000F003100370032002E00 % 320038002E003100370036002E0031003000310000003842494D043B00000000 % 01B200000010000000010000000000127072696E744F75747075744F7074696F % 6E7300000012000000004370746E626F6F6C0000000000436C6272626F6F6C00 % 000000005267734D626F6F6C000000000043726E43626F6F6C0000000000436E % 7443626F6F6C00000000004C626C73626F6F6C00000000004E677476626F6F6C % 0000000000456D6C44626F6F6C0000000000496E7472626F6F6C000000000042 % 636B674F626A6300000001000000000000524742430000000300000000526420 % 20646F7562406FE000000000000000000047726E20646F7562406FE000000000 % 0000000000426C2020646F7562406FE000000000000000000042726454556E74 % 4623526C74000000000000000000000000426C6420556E744623526C74000000 % 00000000000000000052736C74556E74462350786C4052000000000000000000 % 0A766563746F7244617461626F6F6C010000000050675073656E756D00000000 % 506750730000000050675043000000004C656674556E744623526C7400000000 % 0000000000000000546F7020556E744623526C74000000000000000000000000 % 53636C20556E74462350726340590000000000003842494D03ED000000000010 % 004800000001000200480000000100023842494D042600000000000E00000000 % 0000000000003F8000003842494D040D0000000000040000001E3842494D0419 % 0000000000040000001E3842494D03F300000000000900000000000000000100 % 3842494D271000000000000A000100000000000000023842494D03F500000000 % 0048002F66660001006C66660006000000000001002F6666000100A1999A0006 % 000000000001003200000001005A00000006000000000001003500000001002D % 000000060000000000013842494D03F80000000000700000FFFFFFFFFFFFFFFF % FFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFF % FFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF % FFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF % FFFF03E800003842494D04080000000000100000000100000240000002400000 % 00003842494D041E000000000004000000003842494D041A0000000003430000 % 000600000000000000000000002F0000002500000007006200690067002D0058 % 004D005000000001000000000000000000000000000000000000000100000000 % 00000000000000250000002F0000000000000000000000000000000001000000 % 0000000000000000000000000000000010000000010000000000006E756C6C00 % 00000200000006626F756E64734F626A63000000010000000000005263743100 % 00000400000000546F70206C6F6E6700000000000000004C6566746C6F6E6700 % 0000000000000042746F6D6C6F6E670000002F00000000526768746C6F6E6700 % 00002500000006736C69636573566C4C73000000014F626A6300000001000000 % 000005736C6963650000001200000007736C69636549446C6F6E670000000000 % 00000767726F757049446C6F6E6700000000000000066F726967696E656E756D % 0000000C45536C6963654F726967696E0000000D6175746F47656E6572617465 % 640000000054797065656E756D0000000A45536C696365547970650000000049 % 6D672000000006626F756E64734F626A63000000010000000000005263743100 % 00000400000000546F70206C6F6E6700000000000000004C6566746C6F6E6700 % 0000000000000042746F6D6C6F6E670000002F00000000526768746C6F6E6700 % 0000250000000375726C54455854000000010000000000006E756C6C54455854 % 000000010000000000004D7367655445585400000001000000000006616C7454 % 6167544558540000000100000000000E63656C6C54657874497348544D4C626F % 6F6C010000000863656C6C546578745445585400000001000000000009686F72 % 7A416C69676E656E756D0000000F45536C696365486F727A416C69676E000000 % 0764656661756C740000000976657274416C69676E656E756D0000000F45536C % 69636556657274416C69676E0000000764656661756C740000000B6267436F6C % 6F7254797065656E756D0000001145536C6963654247436F6C6F725479706500 % 0000004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A % 6C6566744F75747365746C6F6E67000000000000000C626F74746F6D4F757473 % 65746C6F6E67000000000000000B72696768744F75747365746C6F6E67000000 % 00003842494D042800000000000C000000023FF00000000000003842494D0411 % 00000000000101003842494D0414000000000004000000013842494D040C0000 % 0000025A00000001000000250000002F00000070000014900000023E00180001 % FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001 % FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F15181313151313 % 18110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C % 0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C % 0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C % 0C0C0C0C0C0CFFC0001108002F002503012200021101031101FFDD00040003FF % C4013F0000010501010101010100000000000000030001020405060708090A0B % 0100010501010101010100000000000000010002030405060708090A0B100001 % 0401030204020507060805030C33010002110304211231054151611322718132 % 061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283 % 264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4 % E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F7 % 1100020201020404030405060707060535010002110321311204415161712213 % 0532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B2 % 83072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495 % C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7 % FFDA000C03010002110311003F00F554924925292492494A49249253FFD0F554 % 924925292492494A49249253FFD1F554924925292492494A49249253FFD93842 % 494D042100000000005500000001010000000F00410064006F00620065002000 % 500068006F0074006F00730068006F00700000001300410064006F0062006500 % 2000500068006F0074006F00730068006F007000200043005300350000000100 % 3842494D042200000000018A49492A00080000000E0000010300010000002500 % 000001010300010000002F0000000201030003000000B6000000030103000100 % 0000010000000601030001000000020000001201030001000000010000001501 % 030001000000030000001A01050001000000BC0000001B01050001000000C400 % 00001C0103000100000001000000280103000100000002000000310102001E00 % 0000CC0000003201020014000000EA0000006987040001000000000100002C01 % 000008000800080080FC0A001027000080FC0A001027000041646F6265205068 % 6F746F73686F7020435335204D6163696E746F736800323031313A30333A3235 % 2032323A31343A3235000000030001A0030001000000FFFF000002A004000100 % 00002500000003A00400010000002F0000000000000000000600030103000100 % 0000060000001A010500010000007A0100001B01050001000000820100002801 % 0300010000000200000001020400010000008A01000002020400010000000000 % 000000000000480000000100000048000000010000003842494D03FD00000000 % 00080000000000000000 %EndPhotoshop %%Page: 1 1 %%EndPageComments %%BeginPageSetup %Exiv2BeginXMP: Before %%EndPageSetup %Exiv2Notice: The following line is needed by Photoshop. %begin_xml_code /currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse {userdict /Exiv2_pdfmark /cleartomark load put userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} {userdict /Exiv2_pdfmark /pdfmark load put userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse [/NamespacePush Exiv2_pdfmark [/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark [{Exiv2_metadata_stream} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark [{Exiv2_metadata_stream} currentfile 0 (% &&end XMP packet marker&&) /SubFileDecode filter Exiv2_metafile_pdfmark %Exiv2Notice: The following line is needed by Photoshop. Parameter must be exact size of XMP metadata. %begin_xml_packet: 2376 + + + + + + + + + + + + + + + + + + + + + + + + + + + % &&end XMP packet marker&& [/Document 1 dict begin /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark %Exiv2Notice: The following line is needed by Photoshop. %end_xml_code %Exiv2EndXMP %%EndPageSetup gsave % EPS gsave /hascolor /deviceinfo where {pop deviceinfo /Colors known {deviceinfo /Colors get exec 1 gt} {false} ifelse} {/statusdict where {pop statusdict /processcolors known {statusdict /processcolors get exec 1 gt} {false} ifelse} {false} ifelse} ifelse def 40 dict begin /_image systemdict /image get def /_setgray systemdict /setgray get def /_currentgray systemdict /currentgray get def /_settransfer systemdict /settransfer get def /_currenttransfer systemdict /currenttransfer get def /blank 0 _currenttransfer exec 1 _currenttransfer exec eq def /negative blank {0 _currenttransfer exec 0.5 lt} {0 _currenttransfer exec 1 _currenttransfer exec gt} ifelse def /inverted? negative def /level2 systemdict /languagelevel known {languagelevel 2 ge} {false} ifelse def /level3 systemdict /languagelevel known {languagelevel 3 ge} {false} ifelse def /foureq {4 index eq 8 1 roll 4 index eq 8 1 roll 4 index eq 8 1 roll 4 index eq 8 1 roll pop pop pop pop and and and} def hascolor {/band 0 def} {/band 5 def} ifelse /setcmykcolor where {pop 1 0 0 0 setcmykcolor _currentgray 1 exch sub 0 1 0 0 setcmykcolor _currentgray 1 exch sub 0 0 1 0 setcmykcolor _currentgray 1 exch sub 0 0 0 1 setcmykcolor _currentgray 1 exch sub 4 {4 copy} repeat 1 0 0 0 foureq {/band 1 store} if 0 1 0 0 foureq {/band 2 store} if 0 0 1 0 foureq {/band 3 store} if 0 0 0 1 foureq {/band 4 store} if 0 0 0 0 foureq {/band 6 store} if} if blank {/band 6 store} if gsave % Image Header gsave /rows 47 def /cols 37 def 37 47 scale level2 { band 0 eq { /DeviceRGB } {/DeviceGray} ifelse setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if /picstr1 37 string def /picstr2 37 string def /picstr3 37 string def /picstr4 37 string def /_rowpadstr 37 string def /rawreaddata {currentfile exch readhexstring pop} def /padreaddata { _topPad 0 gt { /_topPad _topPad 1 sub def pop _rowpadstr } { _subImageRows 0 gt { /_subImageRows _subImageRows 1 sub def dup _leftPad _picsubstr rawreaddata putinterval } { pop _rowpadstr } ifelse } ifelse } def /image2 level2 {/image load def} {{begin Width Height BitsPerComponent ImageMatrix Decode length 2 eq {/DataSource load image} if Decode length 6 eq {DataSource 0 get DataSource 1 get DataSource 2 get true 3 colorimage} if Decode length 8 eq {DataSource 0 get DataSource 1 get DataSource 2 get DataSource 3 get true 4 colorimage} if end} def} ifelse /_image2 level2 {/_image load def} {{begin Width Height BitsPerComponent ImageMatrix /DataSource load _image end} def} ifelse /beginimage { band 0 eq band 4 eq or band 5 eq or {image2} {negative {{pop 0}} {{pop 1}} ifelse _settransfer _image2} ifelse } def /readdata /rawreaddata load bind def 12 dict begin /ImageType 1 def /Width cols def /Height rows def /ImageMatrix [cols 0 0 rows neg 0 rows] def /BitsPerComponent 8 def band 0 eq {/Decode [0 1 0 1 0 1] def /MultipleDataSources true def /DataSource [ {picstr1 readdata} {picstr2 readdata} {picstr3 readdata picstr4 readdata pop} ] def} {/Decode [0 1] def /DataSource { picstr1 readdata pop picstr2 readdata pop picstr3 readdata pop picstr4 readdata } def} ifelse currentdict end %%BeginBinary: 14141 beginimage FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF %%EndBinary grestore end % Image Trailer grestore grestore % EPS grestore %%PageTrailer %Exiv2BeginXMP: After %%PageTrailer [/EMC Exiv2_pdfmark [/NamespacePop Exiv2_pdfmark %Exiv2EndXMP %%EOF \ No newline at end of file diff --git a/test/data/eps/eps-flat_photoshop-cs5-ascii_failure-bigxmp.xmp b/test/data/eps/eps-flat_photoshop-cs5-ascii_failure-bigxmp.xmp new file mode 100644 index 00000000..12bbf745 --- /dev/null +++ b/test/data/eps/eps-flat_photoshop-cs5-ascii_failure-bigxmp.xmp @@ -0,0 +1 @@ + diff --git a/test/data/eps/eps-test.out b/test/data/eps/eps-test.out index 9fc1b9a8..cb184146 100644 --- a/test/data/eps/eps-test.out +++ b/test/data/eps/eps-test.out @@ -2525,9 +2525,22 @@ Exit code: 0 Command: exiv2 -u -pa eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps Warning: Unable to find XMP metadata as announced at position: 291 -Exiv2 exception in print action for file eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps: -Failed to read image data -Exit code: 1 +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps +Warning: Unable to find XMP metadata as announced at position: 291 +Exit code: 0 + +Command: exiv2 -ix eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps +Warning: Unable to find XMP metadata as announced at position: 291 +Warning: Unable to find XMP metadata as announced at position: 291 +Exit code: 0 + +Command: (2) exiv2 -ix eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps +Exit code: 0 + +Command: exiv2 -f -ex eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps +Exit code: 0 -----> eps-flat_photoshop-cs5-binary-preview.eps <----- diff --git a/test/data/preview/preview-test.out b/test/data/preview/preview-test.out index a3250812..07683061 100644 --- a/test/data/preview/preview-test.out +++ b/test/data/preview/preview-test.out @@ -180,15 +180,11 @@ Exit code: 0 Command: exiv2 -pp eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps Warning: Unable to find XMP metadata as announced at position: 291 -Exiv2 exception in print action for file eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps: -Failed to read image data -Exit code: 1 +Exit code: 0 Command: exiv2 -f -ep eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps Warning: Unable to find XMP metadata as announced at position: 291 -Exiv2 exception in extract action for file eps-flat_photoshop-cs5-ascii_failure-bigxmp.eps: -Failed to read image data -Exit code: 1 +Exit code: 0 -----> eps-flat_photoshop-cs5-binary-preview.eps <-----