From 333b16cea9e7f9a11968fd05c75a3de892e360d4 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Wed, 1 Jul 2009 12:16:44 +0000 Subject: #i10000# to 'honor' the lost path variable ... --- transex3/scripts/localize | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100755 transex3/scripts/localize diff --git a/transex3/scripts/localize b/transex3/scripts/localize deleted file mode 100755 index 74a75ecc3aee..000000000000 --- a/transex3/scripts/localize +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -if [ x${SOLARENV}x = xx ]; then - echo No environment found, please use 'setsolar' -exit 1 -fi - -# localize.pl calls localize_sl in solver bin directory which depends on dynamic -# libraries in solver lib directory but has no correct RPATH (or equivalent): -if [ "${OS?}" = MACOSX ]; then - export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH+${DYLD_LIBRARY_PATH}:}${SOLARVERSION?}/${INPATH?}/lib${UPDMINOREXT} -else - export LD_LIBRARY_PATH=${LD_LIBRARY_PATH+${LD_LIBRARY_PATH}:}${SOLARVERSION?}/${INPATH?}/lib${UPDMINOREXT} -fi - -if [ x${SOLARVER}x = xx -o x${UPDMINOR}x = xx ]; then - exec perl -w $SOLARVERSION/$INPATH/bin/localize.pl "$@" -else - exec perl -w $SOLARVERSION/$INPATH/bin.$UPDMINOR/localize.pl "$@" -fi - -- cgit v1.2.3 From 8db27b88f6b00e6e6824ba3a2a456fe873bce57e Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Wed, 1 Jul 2009 12:17:39 +0000 Subject: #i10000# to 'honor' the lost path variable ... --- transex3/scripts/localize.pl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/transex3/scripts/localize.pl b/transex3/scripts/localize.pl index 8d09b567b77b..b5d16cd7ceb1 100755 --- a/transex3/scripts/localize.pl +++ b/transex3/scripts/localize.pl @@ -103,6 +103,8 @@ if ( defined $ENV{USE_SHELL} && $ENV{USE_SHELL} eq '4nt' ) { $DELIMITER = "/"; } +my $binpath = $ENV{SOLARVER}.$DELIMITER.$ENV{INPATH}.$DELIMITER."bin".$ENV{UPDMINROREXT}.$DELIMITER ; + #%sl_modules = fetch_sourcelanguage_dirlist(); @@ -494,11 +496,11 @@ sub collectfiles{ my $args = ""; if( $ENV{WRAPCMD} ){ - $command = "$ENV{WRAPCMD} localize_sl"; + $command = $ENV{WRAPCMD}.$binpath."localize_sl"; }else{ - $command = "localize_sl"; + $command = $binpath."localize_sl"; } - + print $command; # -e # if ( -x $command ){ if( $command ){ -- cgit v1.2.3 From dde139fd30b1d61856923b19cc280c90c158c27c Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Wed, 1 Jul 2009 15:49:06 +0000 Subject: #i10000# typo fix --- transex3/scripts/localize.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transex3/scripts/localize.pl b/transex3/scripts/localize.pl index b5d16cd7ceb1..5fd591fc4e7e 100755 --- a/transex3/scripts/localize.pl +++ b/transex3/scripts/localize.pl @@ -103,7 +103,7 @@ if ( defined $ENV{USE_SHELL} && $ENV{USE_SHELL} eq '4nt' ) { $DELIMITER = "/"; } -my $binpath = $ENV{SOLARVER}.$DELIMITER.$ENV{INPATH}.$DELIMITER."bin".$ENV{UPDMINROREXT}.$DELIMITER ; +my $binpath = $ENV{SOLARVER}.$DELIMITER.$ENV{INPATH}.$DELIMITER."bin".$ENV{UPDMINOREXT}.$DELIMITER ; #%sl_modules = fetch_sourcelanguage_dirlist(); -- cgit v1.2.3 From 23cd960582d18a62ba135f5fd6a4c87d8b91a841 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Thu, 2 Jul 2009 09:05:03 +0000 Subject: CWS-TOOLING: integrate CWS odfmetadata2 2009-06-22 11:48:36 +0200 mst r273206 : - connectivity/source/drivers/mozab/mozillasrc/MNSInclude.hxx: + add "include ustrbuf.hxx" to work around warning caused by solaris declaring a global "long l ;" 2009-06-19 14:25:25 +0200 mst r273159 : - scp2/source/ooo/file_library_ooo.scp: + fix MinGW build 2009-06-08 12:52:33 +0200 mst r272727 : - redland/raptor-1.4.18.patch.mingw, redland/raptor/makefile.mk: + disable parsers that do not build on MinGW (thanks for patch by tono) 2009-05-15 17:31:07 +0200 mst r271957 : fix typos 2009-05-15 17:28:57 +0200 mst r271956 : #i101965# - offapi/com/sun/star/text/TextPortion: + add missing properties: SoftPageBreak, DocumentIndexMark, ReferenceMark, Footnote, TextField + fix read-only status of properties: Bookmark, IsStart, IsCollapsed - offapi/type_reference/{typelibrary_history.txt,types.rdb}: + update reference types.rdb 2009-05-07 14:41:38 +0200 mst r271669 : - sw/inc/{fmtftn.hxx,unocoll.hxx,doc.hxx,editsh.hxx,ftninfo.hxx}, sw/source/core/layout/{flowfrm.cxx,ftnfrm.cxx}, sw/source/core/doc/docftn.cxx, sw/source/core/edit/edattr.cxx, sw/source/core/txtnode/atrftn.cxx, sw/source/core/unocore/unocoll.cxx, sw/source/ui/fldui/fldref.cxx: + fix warning ... the hard way + also fix signature of SwDoc::SetCurFtn 2009-05-05 19:52:55 +0200 mst r271556 : - sw/inc/undobj.hxx: + make some members const 2009-05-05 19:34:40 +0200 mst r271555 : - sw/inc/rolbck.hxx, sw/source/core/undo/rolbck.cxx: + make some members const 2009-05-05 19:13:14 +0200 mst r271553 : - sw/inc/{undobj.hxx,rolbck.hxx}, sw/source/core/undo/{unbkmk.cxx,rolbck.cxx}: + fix rebase merge error + rename SwHstryBookmark to SwHistoryBookmark + clean up SwUndoBookmark 2009-05-05 19:05:53 +0200 mst r271552 : - sw/source/core/unocore/unoportenum.cxx: + fix annoying assertion 2009-05-05 15:34:48 +0200 mst r271522 : CWS-TOOLING: rebase CWS odfmetadata2 to trunk@271427 (milestone: DEV300:m47) 2009-05-04 12:37:01 +0200 mst r271444 : trivial 2009-04-22 13:30:37 +0200 mst r271102 : - sfx2/inc/sfx2/dinfdlg.hxx: + trivial change 2009-04-21 16:46:58 +0200 mst r271043 : - sw/inc/hintids.hxx: + introduce some predicates for the various hints, and use them 2009-04-21 16:19:03 +0200 mst r271041 : - sw/inc/undobj.hxx, sw/source/core/doc/{docfly.cxx,docfmt.cxx,docftn.cxx,doctxm.cxx}, sw/source/core/undo/{unattr.cxx,unins.cxx}: + clean up unattr.cxx: remove/fix casts, prefix members, use auto_ptr, etc. 2009-04-21 15:34:23 +0200 mst r271039 : - sw/inc/{rolbck.hxx,undobj.hxx}, sw/source/core/doc/docfmt.cxx, sw/source/core/txtnode/{thints.cxx,txtedt.cxx}, sw/source/core/undo/{rolbck.cxx,undel.cxx,undobj.cxx,unins.cxx,unmove.cxx, unovwr.cxx,unsect.cxx,unspnd.cxx,untbl.cxx,untblk.cxx,unattr.cxx}: + clean up SwHistory, SwRegHistory and SwHistoryHint etc.: remove/fix casts, prefix members, remove wrong const annotations, use auto_ptr, remove unused members, etc. 2009-04-20 19:17:36 +0200 mst r271013 : - sw/inc/ndhints.hxx, sw/source/core/text/{itrtxt.cxx,txtftn.cxx,itratr.cxx,porfly.cxx, txtfrm.cxx,txtdrop.cxx,frmform.cxx}, sw/source/core/txtnode/{ndtxt.cxx,ndhints.cxx,thints.cxx,txtedt.cxx}, sw/source/core/edit/acorrect.cxx, sw/source/core/doc/{docedt.cxx,docfmt.cxx}, sw/source/filter/html/swhtml.cxx: + clean up SwHintsArray and its subclasses: remove/fix casts, prefix members 2009-04-20 18:42:07 +0200 mst r271007 : - sw/source/core/text/txtio.cxx, sw/source/core/edit/edattr.cxx, sw/source/core/undo/rolbck.cxx: + remove JP_NEWCORE dead code 2009-04-20 18:38:09 +0200 mst r271006 : - sw/source/core/unocore/unochart.cxx: + silence unxlngi warning (debug=t) 2009-04-20 16:36:13 +0200 mst r270991 : - sfx2/inc/sfx2/dinfdlg.hxx, sfx2/source/dialog/dinfdlg.cxx, sfx2/source/doc/objserv.cxx, sw/source/ui/fldui/flddinf.hxx: + trivial cleanups 2009-04-20 15:28:52 +0200 mst r270990 : - sfx2/inc/sfx2/dinfdlg.hxx, sfx2/source/dialog/dinfdlg.cxx, sfx2/source/doc/objserv.cxx: + fix bug: replaying a macro with a DocumentInfoItem removes all user-defined properties 2009-03-10 15:08:20 +0100 mst r269273 : - sfx2/source/doc/Metadatable.cxx: + add missing SolarMutex guards 2009-03-10 14:46:29 +0100 mst r269272 : - unoxml/source/rdf/librdf_repository.cxx: + never free rdf_world because that would call libxm2 xmlCleanupParser (and, to add insult to injury, other libxml2 functions later...) 2009-03-06 19:02:44 +0100 mst r269041 : argh! undo... 2009-03-06 19:00:58 +0100 mst r269040 : fix #i99931# - sw/source/ui/uno/unomod.cxx: + SwXViewSettings::_getSingleValue returns uninitialized memory for the ZoomType property if the value is PAGE_WIDTH_EXACT 2009-03-06 18:59:28 +0100 mst r269039 : - sw/inc/ndtxt.hxx, sw/source/core/txtnode/ndtxt.cxx, sw/source/core/unocore/unoportenum.cxx: + fix some more wntmsci12 warnings... 2009-03-06 18:56:46 +0100 mst r269038 : - sd/source/ui/slidesorter/model/SlsPageEnumerationProvider.cxx: + work around spurious warning on unxsoli4 debug=t 2009-03-05 14:02:01 +0100 mst r268902 : - sw/inc/txatbase.hxx: + back to c-style casts, they also compile on wntmsci12... 2009-03-05 10:23:25 +0100 mst r268882 : - comphelper/inc/comphelper/processfactory.hxx, comphelper/source/processfactory/processfactory.cxx: + revert change of return type of comphelper_getProcessComponentContext to Reference: does not build on wntmsci12 2009-03-04 19:08:09 +0100 mst r268861 : - sw/source/core/txtnode/{atrtox.cxx,ndtxt.cxx}: + fix initialization 2009-03-04 14:37:30 +0100 mst r268831 : - solenv/inc/target.mk: + fix CLASSPATH so complex tests run (fix by sb) 2009-03-04 14:36:30 +0100 mst r268830 : - sw/inc/unoobj.hxx, sw/source/core/unocore/{unoparagraph.cxx,unoobj.cxx,unoobj2.cxx}: + SwXParaFrameEnumeration constructor now takes SwPaM, not SwUnoCrsr + move SwParaSelection into unoparagraph.cxx, as it is only used there + bugfix: replace SwUnoCrsrs on stack with SwCursors 2009-03-04 14:34:46 +0100 mst r268829 : - sw/inc/pam.hxx, sw/source/core/crsr/pam.cxx, sw/source/core/edit/eddel.cxx, sw/source/core/doc/docredln.cxx, sw/source/core/undo/{untbl.cxx,undel.cxx}, sw/source/filter/rtf/swparrtf.cxx: + clean up SwPaM: prefix members + new constructor SwPosition(SwCntntNode&, xub_StrLen) + fix several broken SwPosition and SwPaM constructors + SwPam::DeleteMark now actually resets the unused position to default 2009-03-02 12:07:09 +0100 mst r268646 : - sw/inc/fmtcol.hxx: + fix annoying warning (gcc 4) 2009-03-02 12:06:27 +0100 mst r268645 : - odk/util/check.pl, odk/examples/DevelopersGuide/Text/TextDocuments.java: + rename module from FieldMaster to fieldmaster 2009-02-27 19:49:56 +0100 mst r268614 : - sfx2/inc/sfx2/Metadatable.hxx, sfx2/prj/d.lst, sfx2/source/doc/{Metadatable.cxx,makefile.mk}, sw/inc/{SwMetadatable.hxx,unoobj.hxx,undobj.hxx,ndtxt.hxx}, sw/source/core/doc/{SwMetadatable.cxx,makefile.mk,docnew.cxx}, sw/source/core/undo/{untbl.cxx,unins.cxx}, sw/source/core/unocore/unoparagraph.cxx, sw/source/ui/app/docsh.cxx: + move Metadatable implementation from sw to sfx2 2009-02-27 17:58:55 +0100 mst r268608 : - sw/inc/{SwMetadatable.hxx,undobj.hxx}, sw/source/core/doc/SwMetadatable.cxx, sw/source/core/undo/{untbl.cxx,unins.cxx,undel.cxx}: + CreateUndo now returns an opaque MetadatableUndo object 2009-02-27 13:15:44 +0100 mst r268587 : - sw/inc/ndtxt.hxx, sw/source/core/doc/docfmt.cxx, sw/source/core/text/{itratr.cxx,porlay.cxx}, sw/source/core/txtnode/{txtedt.cxx,ndtxt.cxx,thints.cxx}: + clean up SwTxtNode: fix casts, prefix members + factor out inline function SwTxtNode::TryDeleteSwpHints() 2009-02-27 13:14:30 +0100 mst r268586 : - svx/inc/svx/emphitem.hxx: + fix borken header guard 2009-02-27 13:13:56 +0100 mst r268585 : - sfx2/source/bastyp/progress.cxx: + fix use of compiler specific macro 2009-02-27 11:00:32 +0100 mst r268564 : - sw/inc/{txatbase.hxx,txtatr.hxx,txtinet.hxx,txtfld.hxx,txtftn.hxx, txtflcnt.hxx,txttxmrk.hxx,txtrfmrk.hxx}, sw/source/core/txtnode/{atrtox.cxx,atrref.cxx,atrflyin.cxx,atrftn.cxx, txtatr2.cxx,txatbase.cxx,atrfld.cxx,txtedt.cxx}, sw/source/core/text/atrstck.cxx, sw/source/core/access/acchyperlink.cxx, sw/source/core/doc/visiturl.cxx, sw/source/ui/wrtsh/wrtsh2.cxx: + clean up SwTxtAttr and its subclasses: remove/fix casts, prefix members + SwTxtINetFmt: remove unused member bColor - sw/source/core/text/txtfld.cxx: + move SwTxtFld methods to atrfld.cxx 2009-02-27 10:58:44 +0100 mst r268563 : - sfx2/inc/sfx2/sfxbasemodel.hxx: + don't privately inherit BaseMutex, ScModelObj wants to access it 2009-02-27 10:58:02 +0100 mst r268562 : - xmloff/source/core/{RDFaExportHelper.cxx,RDFaImportHelper.cxx}: + arrrgh!!! someone thought it would be a good idea to have 2 different versions of boost in external! and they're NOT compatible!!! insert an ugly fragile hack that maybe works with both... 2009-02-26 17:42:26 +0100 mst r268544 : - comphelper/inc/comphelper/storagehelper.hxx. sfx2/source/doc/DocumentMetadataAccess.cxx: + someone made IsValidZipEntryFileName a static method and didn't tell me 2009-02-26 15:52:56 +0100 mst r268529 : redland: split up patches 2009-02-26 13:17:56 +0100 mst r268509 : migration of cws odfmetadata2 from CVS (resync to m42): module sw #i95863# - sw/inc/segdefs{,_}.hxx: + remove obsolete files - sw/source/ui/inc/itemdef.hxx: + remove itemdef.hxx - sw/source/ui/app/[apphdl.cxx,docsh.cxx}, sw/source/ui/misc/glshell.cxx, sw/source/ui/shells/*.cxx, sw/source/ui/uiview/*.cxx, sw/source/ui/web/*.cxx: + use sfx2/msg.hxx instead of itemdef.hxx - sw/source/core/edit/eddel.cxx: + @ JP: SwEditShell::Replace: you're right, deleting the text to be replaced first, and then inserting a space, and then replacing that space is unnecessary. whew, i'm so happy that we finally answered that question after 11 years. - sw/inc/edimp.hxx: + remove FOREACHCURSOR_START, FOREACHCURSOR_END - sw/inc/{swcrsr.hxx,unocrsr.hxx,viscrs.hxx}, sw/source/core/crsr/{crsrsh.cxx,swcrsr.cxx,trvlreg.cxx,trvltbl.cxx, unocrsr.cxx,viscrs.cxx}, sw/source/core/doc/{docbm.cxx,doccorr.cxx}, sw/source/core/docnode/{ndtbl.cxx,ndtbl1.cxx}, sw/source/core/edit/editsh.cxx, sw/source/core/frmedt/{fefly1.cxx,fetab.cxx,tblsel.cxx}, sw/source/core/layout/trvlfrm.cxx, sw/source/core/unocore/{unochart.cxx,unoobj2.cxx,unoparagraph.cxx, unoportenum.cxx,unotbl.cxx}, sw/source/core/view/vprint.cxx: + remove the hideous virtual operator SwFooCursor* + make SwCursor::IsReadOnlyAvailable() virtual + make SwUnoCrsr::Clone() virtual + refactor SwCursor methods IsSelOver(), LeftRight(), UpDown(), GotoTable(): replace dynamic_cast<...>(this) with new virtual methods 2009-02-26 13:14:58 +0100 mst r268508 : migration of cws odfmetadata2 from CVS (resync to m42): module sw - sw/source/filter/xml/swxml.cxx: + XMLReader::Read: load RDF metadata of the ODF document - sw/source/filter/xml/wrtxml.cxx: + SwXMLWriter::_Write: write RDF metadata of the ODF document if ODF >= 1.2 #i90620#: import xml:id in text tables (does not actually work yet) - sw/source/filter/xml/xmltbli{.hxx,.cxx}: + SwXMLTableCellAttrTokens,aTableCellAttrTokenMap: add XML_TOK_TABLE_XMLID + SwXMLTableCellContext_Impl::SwXMLTableCellContext_Impl: attribute xml:id + SwXMLTableCellContext_Impl::CreateChildContext: attribute xml:id + SwXMLTableColContext_Impl::SwXMLTableColContext_Impl: attribute xml:id + SwXMLTableContext::SwXMLTableContext: attribute xml:id fix #i98530# - sw/inc/unoport.hxx, sw/source/core/unocore/unoport.cxx: + SwXTextPortion: make constructor params const& - sw/source/core/unocore/unoportenum.cxx: + refactor to remove some code duplication + fix bug: paragraph w/out hints: bookmark before frame gets lost #i97274# handle invalid tables - sw/source/core/layout/tabfrm.cxx, sw/source/filter/xml/xmltbli.cxx: + SwXMLTableContext::MakeTable(): check that the table actually contains cells, and abort (removing the inserted table nodes) if not 2009-02-26 13:11:48 +0100 mst r268507 : migration of cws odfmetadata2 from CVS (resync to m42): module sw refactor SwXTextRange and SwXParagraph - sw/inc/unoobj.hxx, sw/source/core/unocore/unoobj2.cxx: + remove 3 constructors of SwXTextRange + new method SwXTextRange::CreateParentXText + refactor SwXTextRange::CreateTextRangeFromPosition and SwXTextRange::getText - sw/inc/unoobj.hxx, sw/source/core/unocore/unoparagraph.cxx: + SwXParagraph no longer uses a cursor; it registers directly at SwTxtNode + replace SwXParagraph::GetCrsr with SwXParagraph::GetTxtNode - sw/source/core/unocore/unotext.cxx, sw/source/ui/uno/unotxvw.cxx: + adapt to new SwXParagraph #i90620# - sw/inc/SwMetadatable.hxx, sw/source/core/doc/SwMetadatable.cxx: + new files: base classes sw::Metadatable and sw::MetadatableMixin; also, 2 implementations of IXmlIdRegistry: sw::XmlIdRegistryDocument and sw::XmlIdRegistryClipboard + setMetadataReference: handle empty stream name as auto-detect - sw/source/core/doc/makefile.mk: + add SwMetadatable add a XmlIdRegistry to SwDoc - sw/inc/doc.hxx: + SwDoc: add member m_pXmlIdRegistry, method GetXmlIdRegistry() - sw/source/core/doc/docnew.cxx: + initialize XmlIdRegistry in SwDoc::GetXmlIdRegistry, not in constructor, because the constructor is not told whether the SwDoc is a clipboard - sw/inc/docsh.hxx, sw/source/ui/app/docsh.cxx: + SwDocShell: override GetXmlIdRegistry() #i91563#: make the SwTxtNode metadatable - sw/inc/ndtxt.hxx + SwTxtNode inherits sw::Metadatable - sw/inc/unoobj.hxx, sw/source/core/unocore/unoparagraph.cxx: + SwXParagraph inherits sw::MetadatableMixin #i91563#: handle SwTxtNode's metadata for delete - sw/source/core/txtnode/ndtxt.cxx: + SwTxtNode::SplitCntntNode: handle XmlId + SwTxtNode::JoinNext: merge XmlIds - sw/source/core/doc/docedt.cxx: + lcl_GetJoinFlags: document postcondition + SwDoc::Delete: remove XmlId only if SwTxtNode _becomes_ empty #i91563#: handle SwTxtNode's metadata for delete with undo - sw/inc/undobj.hxx + SwUndoDelete: new members m_pMetadataUndoStart, m_pMetadataUndoEnd - sw/source/core/undo/undel.cxx: + SwUndoDelete::SaveCntnt: save XmlIds for start and end SwTxtNode + SwUndoDelete::SaveCntnt: remove XmlId only if SwTxtNode _becomes_ empty + SwUndoDelete::Undo: restore saved XmlIds for start and end SwTxtNode - sw/source/core/docnode/ndcopy.cxx: + SwTxtNode::MakeCopy: register copy at XmlIdRegistry #i91563#: handle SwTxtNode's metadata for find/replace with undo - sw/source/core/undo/unins.cxx: + _UnReplaceData: rename members: add prefix m_ + _UnReplaceData: new members m_pMetadataUndoStart, m_pMetadataUndoEnd + _UnReplaceData::_UnReplaceData: save XmlIds for start and end SwTxtNode + _UnReplaceData::Undo: restore saved XmlIds for start and end SwTxtNode #i91563#: handle SwTxtNode's metadata for table-to-text with undo - sw/source/core/undo/untbl.cxx: + SwTblToTxtSave: rename members: add prefix m_ + SwTblToTxtSave: new members m_pMetadataUndoStart, m_pMetadataUndoEnd + SwTblToTxtSave::SwTblToTxtSave: save XmlIds for start and end SwTxtNode + SwTblToTxtSave::SwTblToTxtSave, SwNodes::UndoTableToText: always store the index of the first SwTxtNode in the cell, instead of the index of the first SwTxtNode in case of the first cell in a row, and the cell start node in other cases + SwNodes::UndoTableToText: restore saved XmlIds for start and end SwTxtNode - sw/source/core/docnode/ndtbl.cxx: + lcl_DelBox: simplify for refactored start index handling in SwTblToTxtSave 2009-02-26 13:02:28 +0100 mst r268505 : migration of cws odfmetadata2 from CVS (resync to m42): module sd - sd/source/ui/table/tableobjectbar.cxx,sd/source/ui/view/*.cxx: + remove invocations of SFX_DECL_TYPE - sd/source/ui/slideshow/SlideShowRestarter.cxx, sd/source/ui/toolpanel/LayoutMenu.cxx, sd/source/ui/unoidl/DrawController.cxx, sd/source/ui/view/{ViewShellBase.cxx,ViewTabBar.cxx,frmview.cxx}: + fix abuses of comphelper_getProcessComponentContext (missing release) 2009-02-26 13:01:24 +0100 mst r268504 : migration of cws odfmetadata2 from CVS (resync to m42): module starmath - starmath/source/document.cxx: + don't touch SfxObjectShell's privates 2009-02-26 13:00:37 +0100 mst r268503 : migration of cws odfmetadata2 from CVS (resync to m42): module sfx2 #i90620# - sfx2/inc/sfx2/XmlIdRegistry.hxx: + new file: interfaces sfx2::IXmlIdRegistry and sfx2::IXmlIdRegistrySupplier and a couple of utility functions - sfx2/inc/sfx2/DocumentMetadataAccess.hxx, sfx2/source/doc/DocumentMetadataAccess.cxx: + new class sfx2::DocumentMetadataAccess, implements XDocumentMetadataAccess + the URI of the DocumentMetadataAccess is now the URI from which the document was loaded; for a new document, use a vnd.sun.star.tdoc URI + add new function sfx2::createBaseURI() + prevent using reserved file names + try not to recurse into embedded subdocuments - sfx2/source/doc/makefile.mk: + add DocumentMetadataAccess - sfx2/util/makefile.mk: + link libsfx2 against libxml2 (needed for xmlValidateNCName) - sfx2/source/doc/makefile.mk: + add LIBXML_CFLAGS to CFLAGS - sfx2/prj/build.lst: + add dependence on libxml2 - sfx2/prj/d.lst: + add XmlIdRegistry.hxx, DocumentMetadataAccess.hxx - sfx2/inc/sfx2/objsh.hxx, sfx2/source/doc/objxtor.cxx: + make SfxObjectShell's members private + new method SfxObjectShell::GetAutoStyleFilterIndex + SfxObjectShell inherits sfx2::IXmlIdRegistrySupplier - sfx2/source/dialog/templdlg.cxx, sfx2/source/doc/sfxbasemodel.cxx: + don't touch SfxObjectShell's privates - sfx2/inc/sfx2/sfxbasemodel.hxx, sfx2/source/doc/sfxbasemodel.cxx: + SfxBaseModel inherits BaseMutex instead of IMPL_SfxBaseModel_MutexContainer + SfxBaseModel implements additional interface XDocumentMetadataAccess + IMPL_SfxBaseModel_DataContainer has new member: a sfx2::DocumentMetadataAccess + implementation of XDocumentMetadataAccess forwards to the sfx2::DocumentMetadataAccess member - sfx2/qa/complex/DocumentMetadataAccessTest.java, sfx2/qa/complex/{tests.sce,makefile.mk}, sfx2/qa/complex/testdocuments/TESTRDFA.odt: + add complex test: DocumentMetadataAccessTest + add RDFa test document #i95863# - sfx2/inc/sfx2/dinfdlg.hxx, sfx2/source/dialog/dinfdlg.cxx: + refactor SfxDocumentItem so it no longer requires a XDocumentInfo + move struct CustomProperty to implementation file + remove class SfxDocumentUserPage + QueryValue,PutValue: remove MID_DOCINFO_FIELD* - sfx2/source/doc/objserv.cxx: + adapt to SfxDocumentItem change - sfx2/inc/sfx2/sfx.hrc, sfx2/sdi/sfxslots.sdi, sfx2/inc/sfx2/msg.hxx: + remove MID_DOCINFO_FIELD* + put all invocations of SFX_DECL_TYPE in msg.hxx, and undef SFX_DECL_TYPE - sfx2/source/doc/objxtor.cxx: + fix abuses of comphelper_getProcessComponentContext (missing release) - sfx2/source/doc/docfile.cxx: + SfxMedium::SfxMedium: don't dereference NULL, throw exception instead - sfx2/source/doc/objstor.cxx: + SfxObjectShell::DoLoad: fix bug: DocumentBaseURI is not initialized 2009-02-26 12:58:07 +0100 mst r268502 : migration of cws odfmetadata2 from CVS (resync to m42): module xmloff #i90620#: implement RDFa import (interface change) - xmloff/inc/xmloff/xmlimp.hxx. xmloff/source/core/xmlimp.cxx: + make SvXMLImport::GetAbsoluteReference() const + add SvXMLImport::GetComponentContext() + SvXMLImport::_InitCtor(): add RDFa namespace + add SvXMLImport::AddRDFa() + SvXMLImport::endDocument() inserts RDFa into document repository - xmloff/inc/xmloff/xmltoken.hxx, xmloff/source/core/xmltoken.cxx: + new tokens for RDFa: XML_ABOUT, XML_DATATYPE - xmloff/inc/RDFaImportHelper.hxx, xmloff/source/core/RDFaImportHelper.cxx: + new class RDFaImportHelper + adapt the code to the bleak reality of broken C++ implementations + handle empty xhtml:about attributes properly, which are actually valid relative URIs + work around broken SvXMLImport::GetAbsoluteReference - xmloff/source/core/makefile.mk: + add RDFaImportHelper.cxx #i90620#: implement RDFa export - xmloff/inc/xmloff/xmlexp.hxx, xmloff/source/core/xmlexp.cxx: + add SvXMLExport::EnsureNamespace(), and a stack of namespace maps + add SvXMLExport::GetComponentContext() + add SvXMLExport::AddAttributesRDFa() - xmloff/inc/RDFaExportHelper.hxx, xmloff/source/core/RDFaExportHelper.cxx: + new class RDFaExportHelper + don't use std::map::data_type, which is actually called std::map::mapped_type by libstdc++ - xmloff/source/core/makefile.mk: + add RDFaExportHelper.cxx #i91563# - xmloff/inc/xmloff/txtimp.hxx, xmloff/source/text/txtimp.cxx: + XMLTextPAttrTokens: add RDFa tokens - xmloff/source/text/txtparai{.hxx,.cxx}: + import RDFa for text:p - xmloff/source/text/txtparae.cxx: + export RDFa for text:p interface change: use XHTML namespace instead of RDFA - xmloff/inc/xmlnmspe.hxx, xmloff/inc/xmloff/xmltoken.hxx, xmloff/source/core/{xmltoken.cxx,xmlimp.cxx,xmlexp.cxx,RDFaExportHelper.cxx}, xmloff/source/text/txtimp.cxx: + use XHTML namespace instead of RDFA #i91565#, #i91566#: (preliminary) import for text:meta, text:meta-field - xmloff/source/text/txtparai.cxx: + new class XMLMetaImportContextBase with subclasses to import text:meta and text:meta-field - xmloff/source/text/XMLTextMarkImportContext.cxx: + change XMLTextMarkImportContext::CreateAndInsertMark to handle marks with no name (text:meta) #i91565#, #i91566#: (preliminary) export for text:meta, text:meta-field - xmloff/inc/txtflde.hxx, xmloff/source/text/txtflde.cxx: + add FIELD_ID_META to FieldIdEnum + new method XMLTextFieldExport::ExportMetaField() + change XMLTextFieldExport::ExportField{,AutoStyle,Helper} to take additional parameter for progress bar - xmloff/inc/xmloff/txtparae.hxx, xmloff/source/text/txtparae.cxx: + make XMLTextParagraphExport::exportTextRangeEnumeration() public + new method XMLTextParagraphExport::exportMeta() #i90620# - xmloff/inc/xmloff/xmlimp.hxx, xmloff/source/core/xmlimp.cxx, xmloff/inc/xmloff/xmlexp.hxx, xmloff/source/core/xmlexp.cxx: + rename SvXML{Im,Ex}port::GetStreamPath() to GetStreamName() + fix xml:id {im,ex}port for embedded documents and non-packages + adapt to API change: XMetadatable #i90620# GRDDL - xmloff/inc/xmlnmspe.hxx, xmloff/inc/xmloff/xmltoken.hxx, xmloff/source/core/{xmltoken.cxx,xmlexp.cxx}: + add GRDDL namespace + add token XML_TRANSFORMATION + add grddl:transformation attribute to root elements for meta.xml, content.xml and styles.xml 2009-02-26 12:54:40 +0100 mst r268501 : migration of cws odfmetadata2 from CVS (resync to m42): module unoxml #i90620# - unoxml/source/rdf/librdf_repository.cxx: + librdf_Repository::importGraph: allocate buffer sized length of stream + switch from one librdf_world per repository to a single static world because redland has global variables with a brain-damaged life-cycle... + exportGraph: use new raptor 1.4.18 feature to disable writing an xml:base attribute in RDF/XML files - unoxml/source/rdf/librdf_repository.cxx: unoxml/qa/complex/RDFRepositoryTest.java: + adapt to predicate is URI change + adapt to RDFa API change + adapt to API change: RDFa has multiple predicates... + adapt to API change: XMetadatable derives from XURI + allow xhtml:datatype without xhtml:content + adapt to API change: attribute MetadataReference is StringPair - unoxml/source/rdf/CURI.cxx: + add some more URI constants 2009-02-26 12:53:32 +0100 mst r268500 : migration of cws odfmetadata2 from CVS (resync to m42): module package - package/inc/ImplValidCharacters.hxx: + remove (moved to comphelper) 2009-02-26 12:52:49 +0100 mst r268499 : migration of cws odfmetadata2 from CVS (resync to m42): module comphelper - comphelper/inc/comphelper/processfactory.hxx, comphelper/source/processfactory/processfactory.cxx: + add getProcessComponentContext() + change return type of comphelper_getProcessComponentContext to Reference - comphelper/inc/comphelper/stl_types.hxx: + add OUStringBufferAppender + add algorithm intersperse - comphelper/source/misc/string.cxx: + rewrite convertCommaSeparated with intersperse and OUStringBufferAppender - comphelper/inc/comphelper/stlunosequence.hxx: + fix bug: begin() on empty sequence != end() 2009-02-26 12:50:47 +0100 mst r268498 : migration of cws odfmetadata2 from CVS (resync to m42): module offapi #i96209# - offapi/com/sun/star/text/fieldmaster/*.idl: + rename module from FieldMaster to fieldmaster - offapi/type_reference/{typelibrary_history.txt,types.rdb}: + update reference types.rdb #i90620# - offapi/com/sun/star/rdf/{XMetadatable.idl,XDocumentMetadataAccess.idl}: + API change: XMetadatable derives from XURI + API change: replace XmlId (string) with MetadataReference (StringPair) - offapi/com/sun/star/rdf/{Statement.idl,XDocumentRepository.idl, XNamedGraph.idl,XRepository.idl}: + the predicate of a statement is a URI, not a Resource - offapi/com/sun/star/rdf/XDocumentMetadataAccess.idl: + rename: s/Package/Document/ + remove uuid + remove everything related to mapping + graph names are now generated from base URI and file names + load methods: improve error handling with XInteractionHandler - offapi/com/sun/star/rdf/XDocumentRepository.idl: + change: RDFa permits using multiple predicates in one attribute + setStatementRDFa: subject is now XResource, object is now XMetadatable - offapi/com/sun/star/rdf/URIs.idl: + add some more URI constants - offapi/com/sun/star/rdf: + fix @since tags and replace with 2009-02-26 12:47:24 +0100 mst r268497 : migration of cws odfmetadata2 from CVS (resync to m42): module redland fix #i93768# - redland/raptor-1.4.17.patch, redland/raptor/makefile.mk: + disable GRDDL parser to prevent call to libxslt xsltSetDefaultSecurityPrefs, which breaks xmlhelp - redland/raptor/makefile.mk, redland/raptor-1.4.17.patch, redland/raptor-1.4.18.patch: + upgrade raptor to 1.4.18 + deactivate serializer for RSS/Atom (does not build) - redland/rasqal/makefile.mk, redland/rasqal-0.9.15.patch, redland/rasqal-0.9.16.patch, + upgrade rasqal to 0.9.16 - redland/redland/makefile.mk, redland/redland-1.0.7.patch, redland/redland-1.0.8.patch: + upgrade redland to 1.0.8 - redland/redlandversion.mk: + the librasqal SONAME has changed --- comphelper/inc/comphelper/processfactory.hxx | 11 ++++- comphelper/inc/comphelper/stl_types.hxx | 54 ++++++++++++++++++++++ comphelper/inc/comphelper/stlunosequence.hxx | 6 ++- comphelper/inc/comphelper/storagehelper.hxx | 3 -- comphelper/source/misc/string.cxx | 27 ++++++----- .../source/processfactory/processfactory.cxx | 20 +++++--- 6 files changed, 94 insertions(+), 27 deletions(-) diff --git a/comphelper/inc/comphelper/processfactory.hxx b/comphelper/inc/comphelper/processfactory.hxx index d2ae887ba341..9b24f8e784ac 100644 --- a/comphelper/inc/comphelper/processfactory.hxx +++ b/comphelper/inc/comphelper/processfactory.hxx @@ -79,10 +79,19 @@ COMPHELPER_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XI const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rArgs ) SAL_THROW( ( ::com::sun::star::uno::RuntimeException ) ); +/** + * This function gets the process service factory's default component context. + * If no service factory is set the function returns a null interface. + */ +COMPHELPER_DLLPUBLIC +::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > +getProcessComponentContext(); + } + extern "C" { -/// @internal +/// @internal ATTENTION returns ACQUIRED pointer! release it explicitly! COMPHELPER_DLLPUBLIC ::com::sun::star::uno::XComponentContext * comphelper_getProcessComponentContext(); diff --git a/comphelper/inc/comphelper/stl_types.hxx b/comphelper/inc/comphelper/stl_types.hxx index aeb6342048c9..4b3126043a08 100644 --- a/comphelper/inc/comphelper/stl_types.hxx +++ b/comphelper/inc/comphelper/stl_types.hxx @@ -49,6 +49,7 @@ #include +#include #include #include @@ -191,6 +192,59 @@ inline mem_fun1_t<_Tp,_Arg> mem_fun(void (_Tp::*__f)(_Arg)) return mem_fun1_t<_Tp,_Arg>(__f); } +//......................................................................... +/** output iterator that appends OUStrings into an OUStringBuffer. + */ +class OUStringBufferAppender : + public ::std::iterator< ::std::output_iterator_tag, void, void, void, void> +{ +public: + typedef OUStringBufferAppender Self; + typedef ::std::output_iterator_tag iterator_category; + typedef void value_type; + typedef void reference; + typedef void pointer; + typedef size_t difference_type; + + OUStringBufferAppender(::rtl::OUStringBuffer & i_rBuffer) + : m_rBuffer(i_rBuffer) { } + Self & operator=(::rtl::OUString const & i_rStr) + { + m_rBuffer.append( i_rStr ); + return *this; + } + Self & operator*() { return *this; } // so operator= works + Self & operator++() { return *this; } + Self & operator++(int) { return *this; } + +private: + ::rtl::OUStringBuffer & m_rBuffer; +}; + +//......................................................................... +/** algorithm similar to std::copy, but inserts a separator between elements. + */ +template< typename ForwardIter, typename OutputIter, typename T > +OutputIter intersperse( + ForwardIter start, ForwardIter end, OutputIter out, T const & separator) +{ + if (start != end) { + *out = *start; + ++start; + ++out; + } + + while (start != end) { + *out = separator; + ++out; + *out = *start; + ++start; + ++out; + } + + return out; +} + //......................................................................... } //... namespace comphelper ................................................ diff --git a/comphelper/inc/comphelper/stlunosequence.hxx b/comphelper/inc/comphelper/stlunosequence.hxx index 2ffe08cb6b75..a0ace84e8a6e 100644 --- a/comphelper/inc/comphelper/stlunosequence.hxx +++ b/comphelper/inc/comphelper/stlunosequence.hxx @@ -312,7 +312,8 @@ namespace comphelper { namespace stlunosequence { template inline typename StlSequence::iterator StlSequence::begin() { - return typename StlSequence::iterator(m_UnoSequence, begin_of_sequence); + return typename StlSequence::iterator(m_UnoSequence, + size() ? begin_of_sequence : end_of_sequence); } template @@ -324,7 +325,8 @@ namespace comphelper { namespace stlunosequence { template inline typename StlSequence::const_iterator StlSequence::begin() const { - return typename StlSequence::const_iterator(m_UnoSequence, begin_of_sequence); + return typename StlSequence::const_iterator(m_UnoSequence, + size() ? begin_of_sequence : end_of_sequence); } template diff --git a/comphelper/inc/comphelper/storagehelper.hxx b/comphelper/inc/comphelper/storagehelper.hxx index b99f7e1233ca..efb5431959ba 100644 --- a/comphelper/inc/comphelper/storagehelper.hxx +++ b/comphelper/inc/comphelper/storagehelper.hxx @@ -48,9 +48,6 @@ namespace comphelper { -sal_Bool COMPHELPER_DLLPUBLIC IsValidZipEntryFileName( - const sal_Unicode *pChar, sal_Int32 nLength, sal_Bool bSlashAllowed ); - class COMPHELPER_DLLPUBLIC OStorageHelper { public: diff --git a/comphelper/source/misc/string.cxx b/comphelper/source/misc/string.cxx index 77a251372d85..e9437528b0de 100644 --- a/comphelper/source/misc/string.cxx +++ b/comphelper/source/misc/string.cxx @@ -36,10 +36,13 @@ #include #include -#include "comphelper/string.hxx" -#include "rtl/ustring.hxx" -#include "sal/types.h" -#include "comphelper/stlunosequence.hxx" +#include +#include +#include + +#include +#include +#include namespace comphelper { namespace string { @@ -96,12 +99,12 @@ rtl::OUString searchAndReplaceAsciiL( ::rtl::OUString convertCommaSeparated( ::com::sun::star::uno::Sequence< ::rtl::OUString > const& i_rSeq) { - ::rtl::OUString ret; - for (sal_Int32 i = 0; i < i_rSeq.getLength(); ++i) { - if (i != 0) ret += ::rtl::OUString::createFromAscii(", "); - ret += i_rSeq[i]; - } - return ret; + ::rtl::OUStringBuffer buf; + ::comphelper::intersperse( + ::comphelper::stl_begin(i_rSeq), ::comphelper::stl_end(i_rSeq), + ::comphelper::OUStringBufferAppender(buf), + ::rtl::OUString::createFromAscii(", ")); + return buf.makeStringAndClear(); } ::com::sun::star::uno::Sequence< ::rtl::OUString > @@ -119,10 +122,6 @@ rtl::OUString searchAndReplaceAsciiL( } while (idx >= 0); ::com::sun::star::uno::Sequence< ::rtl::OUString > kws(vec.size()); std::copy(vec.begin(), vec.end(), stl_begin(kws)); - /* - for (size_t i = 0; i < vec.size(); ++i) { - kws[i] = vec.at(i); - }*/ return kws; } diff --git a/comphelper/source/processfactory/processfactory.cxx b/comphelper/source/processfactory/processfactory.cxx index 0f50f4a4cb01..c4eac583e3c0 100644 --- a/comphelper/source/processfactory/processfactory.cxx +++ b/comphelper/source/processfactory/processfactory.cxx @@ -98,24 +98,30 @@ Reference< XInterface > createProcessComponentWithArguments( const ::rtl::OUStri return xComponent; } -} // namesapce comphelper - -extern "C" { -uno::XComponentContext * comphelper_getProcessComponentContext() +Reference< XComponentContext > getProcessComponentContext() { - uno::Reference xRet; + Reference< XComponentContext > xRet; uno::Reference const xProps( comphelper::getProcessServiceFactory(), uno::UNO_QUERY ); if (xProps.is()) { try { - xRet.set( xProps->getPropertyValue( - rtl::OUString( + xRet.set( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ), uno::UNO_QUERY ); } catch (beans::UnknownPropertyException const&) { } } + return xRet; +} + +} // namespace comphelper + +extern "C" { +uno::XComponentContext * comphelper_getProcessComponentContext() +{ + uno::Reference xRet; + xRet = ::comphelper::getProcessComponentContext(); if (xRet.is()) xRet->acquire(); return xRet.get(); -- cgit v1.2.3 From 10f3260f4010b1547fb42d5c5395122d75d565eb Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Fri, 3 Jul 2009 07:59:31 +0000 Subject: CWS-TOOLING: integrate CWS fwk108 2009-05-27 09:53:38 +0200 cd r272332 : CWS-TOOLING: rebase CWS fwk108 to trunk@272291 (milestone: DEV300:m49) 2009-05-26 15:31:26 +0200 cd r272307 : CWS-TOOLING: rebase CWS fwk108 to trunk@271830 (milestone: DEV300:m48) 2009-04-08 12:56:05 +0200 cd r270636 : #i100910# Check for exact type for SfxVoidItem 2009-04-03 16:18:17 +0200 tl r270499 : #i100828# avoid loading library for language guessing at start-up --- svtools/source/items1/itemset.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svtools/source/items1/itemset.cxx b/svtools/source/items1/itemset.cxx index 48fe2877b892..6edeffe6d250 100644 --- a/svtools/source/items1/itemset.cxx +++ b/svtools/source/items1/itemset.cxx @@ -541,7 +541,7 @@ SfxItemState SfxItemSet::GetItemState( USHORT nWhich, // Unterschiedlich vorhanden return SFX_ITEM_DONTCARE; - if ( (*ppFnd)->IsA(TYPE(SfxVoidItem)) ) + if ( (*ppFnd)->Type() == TYPE(SfxVoidItem) ) return SFX_ITEM_DISABLED; if (ppItem) -- cgit v1.2.3 From 12b49d3e687f56553ed5859ccd296dadc9b49c92 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Fri, 3 Jul 2009 12:24:35 +0000 Subject: CWS-TOOLING: integrate CWS dbaperf2 2009-06-22 11:04:36 +0200 msc r273202 : #100000# fix to run this test 2009-06-22 09:41:04 +0200 msc r273200 : #100000# correct case 2009-06-22 09:02:42 +0200 msc r273199 : new SRB 2009-06-22 08:53:26 +0200 msc r273198 : #100000 2009-06-15 12:36:32 +0200 oj r272976 : test 2009-06-12 14:23:23 +0200 msc r272918 : #101587# unused feature was removed 2009-06-12 06:45:17 +0200 oj r272903 : use GUI instead of OS 2009-06-11 09:12:30 +0200 oj r272845 : remove unused dep 2009-06-11 09:11:09 +0200 oj r272844 : ColumnAliasInOrderBy not supported 2009-06-11 08:27:00 +0200 oj r272843 : CWS-TOOLING: rebase CWS dbaperf2 to trunk@272827 (milestone: DEV300:m50) 2009-06-10 15:30:17 +0200 msc r272822 : #100000 2009-06-10 15:27:40 +0200 msc r272820 : #102515# new function for the database type list 2009-06-10 15:26:09 +0200 msc r272818 : move file to dbaccess/tools/dbcreatetools.inc 2009-06-10 15:20:10 +0200 msc r272816 : #102515# new function for the database type list 2009-06-10 12:34:46 +0200 oj r272803 : #i101587# check extension 2009-06-10 11:53:45 +0200 oj r272800 : remove unused code 2009-06-09 09:57:25 +0200 oj r272752 : #i101587# EscapeDateTime moved into features section 2009-06-09 09:56:26 +0200 oj r272751 : enable finish 2009-06-08 11:50:37 +0200 oj r272726 : #i102588# move convert tzo saveDataSource 2009-06-05 11:54:20 +0200 jsk r272676 : #i102515# - NEW: Functions to retrieve Database names from API 2009-06-05 10:52:22 +0200 jsk r272671 : NEW: Functions to retrieve Database names from API 2009-06-05 09:36:54 +0200 oj r272666 : handle win and unx differently 2009-06-05 09:36:28 +0200 oj r272665 : handle win and unx differently 2009-06-04 13:41:56 +0200 oj r272625 : #i101268# make use of stringbuffer instead of oustring 2009-06-04 10:18:14 +0200 oj r272612 : add SAL_DLLPUBLIC_EXPORT 2009-05-28 10:56:33 +0200 oj r272381 : #i101587# create langpacks 2009-05-28 10:41:59 +0200 oj r272380 : #i101587# create langpacks 2009-05-28 10:29:30 +0200 oj r272379 : #i101587# create langpacks 2009-05-07 10:11:46 +0200 oj r271635 : fix compile warnings 2009-05-07 07:01:31 +0200 oj r271619 : change type from int32 to PathID 2009-05-07 06:53:19 +0200 oj r271618 : add all 2009-05-06 14:57:02 +0200 oj r271595 : add missing lib 2009-05-06 14:56:54 +0200 oj r271594 : no used anymore 2009-05-06 14:56:08 +0200 oj r271593 : no used anymore 2009-05-06 14:54:25 +0200 oj r271592 : no used anymore 2009-05-06 14:45:59 +0200 oj r271591 : add missing lib 2009-05-06 14:41:54 +0200 oj r271590 : change wnt 2009-05-06 14:22:21 +0200 oj r271589 : #i101587# use config for the drivers 2009-05-06 14:21:39 +0200 oj r271588 : #i101587# add new set for metadata and config data for driver 2009-05-06 14:19:36 +0200 oj r271587 : #i101587# handle metadata and props of driver 2009-05-06 10:11:11 +0200 oj r271570 : #i101587# correct wrong use of reference 2009-05-06 09:24:33 +0200 oj r271567 : #i101587# add new set for metadata 2009-05-06 08:52:06 +0200 oj r271563 : #i101587# add driver configuration 2009-05-06 08:51:04 +0200 oj r271562 : #i101587# add driver configuration 2009-05-04 10:24:41 +0200 oj r271442 : CWS-TOOLING: rebase CWS dbaperf2 to trunk@271427 (milestone: DEV300:m47) 2009-04-28 07:06:22 +0200 oj r271303 : compile error 2009-04-27 14:12:48 +0200 oj r271270 : #i101268# make use of stringbuffer instead of oustring 2009-04-27 14:12:27 +0200 oj r271269 : #i101268# make use of stringbuffer instead of oustring 2009-04-27 09:30:10 +0200 oj r271255 : use string buffer when possible 2009-04-24 11:56:01 +0200 oj r271207 : #i101268# remove end() call from loop 2009-04-23 14:24:03 +0200 oj r271171 : add dep 2009-04-23 13:25:25 +0200 oj r271164 : #i101268# add config entries for database drivers 2009-04-23 13:07:13 +0200 oj r271161 : #i101268# add config entries for database drivers 2009-04-23 13:06:33 +0200 oj r271160 : #i101268# add parent url pattern entry for driver node 2009-04-23 13:05:39 +0200 oj r271159 : #i101268# add config entry for driver node 2009-04-23 13:04:09 +0200 oj r271157 : #i101268# add config entry for driver node 2009-04-23 06:41:32 +0200 oj r271142 : #i101268# add new configuration file Drivers 2009-04-22 13:49:19 +0200 oj r271103 : convert EOL 2009-04-22 13:29:17 +0200 oj r271101 : #i101268# use of driver configuration entries for features and properties 2009-04-22 13:28:08 +0200 oj r271100 : #i101268# use of driver configuration entries for features and properties 2009-04-22 13:15:26 +0200 oj r271098 : #i101268# add new configuration file Drivers 2009-04-22 13:14:43 +0200 oj r271097 : #i101268# use of driver configuration entries for features and properties --- comphelper/source/property/propertybag.cxx | 5 +++-- comphelper/source/property/propertycontainerhelper.cxx | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/comphelper/source/property/propertybag.cxx b/comphelper/source/property/propertybag.cxx index a56793e05769..383e1cc2c5aa 100644 --- a/comphelper/source/property/propertybag.cxx +++ b/comphelper/source/property/propertybag.cxx @@ -168,10 +168,11 @@ namespace comphelper // will throw an UnknownPropertyException if necessary if ( ( rProp.Attributes & PropertyAttribute::REMOVEABLE ) == 0 ) throw NotRemoveableException( ::rtl::OUString(), NULL ); + const sal_Int32 nHandle = rProp.Handle; - revokeProperty( rProp.Handle ); + revokeProperty( nHandle ); - m_pImpl->aDefaults.erase( rProp.Handle ); + m_pImpl->aDefaults.erase( nHandle ); } //-------------------------------------------------------------------- diff --git a/comphelper/source/property/propertycontainerhelper.cxx b/comphelper/source/property/propertycontainerhelper.cxx index 9d1662d1ecf2..7f5db1d6cf7e 100644 --- a/comphelper/source/property/propertycontainerhelper.cxx +++ b/comphelper/source/property/propertycontainerhelper.cxx @@ -76,12 +76,12 @@ namespace // comparing two property descriptions (by name) struct PropertyDescriptionNameMatch : public ::std::unary_function< PropertyDescription, bool > { - const ::rtl::OUString& m_rCompare; + ::rtl::OUString m_rCompare; PropertyDescriptionNameMatch( const ::rtl::OUString& _rCompare ) : m_rCompare( _rCompare ) { } bool operator() (const PropertyDescription& x ) const { - return x.aProperty.Name == m_rCompare; + return x.aProperty.Name.equals(m_rCompare); } }; } -- cgit v1.2.3 From fe2fc695df1238e16110f542762d48bdf624e049 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Fri, 3 Jul 2009 14:21:50 +0000 Subject: CWS-TOOLING: integrate CWS dba32c 2009-06-29 20:53:25 +0200 fs r273484 : #i103138# Rectangle conversion 2009-06-29 20:51:50 +0200 fs r273483 : #i103138# yet more refactoring, now also setting the proper zoom level at the proper point in time 2009-06-29 13:40:26 +0200 fs r273470 : added svn:ignore to ignore output paths 2009-06-29 10:08:54 +0200 fs r273455 : #i103138# refactored the code for positioning/zooming the control Basically, we now allow adjustControlGeometry_throw (formerly known as positionControl_throw and setControlZoom) to take an additional ViewTransformation parameter, describing the transformation to obtain the actual control position/size. Consequently, positionControl itself also allows for a ViewTransformation parameter. This has become necessary since during painting, the device which we created our control for might not necessarily have a proper MapMode set. In this case, if we would use this map mode for calculating the control's position/size, this would lead to wrong results. Note that this problem was introduced by the fix for #i101398#: During the fix, we postponed the control creation to a later time (when it is really needed). At this later time, the MapMode at the device is broken, at the earlier time where we formerly crearted the control (createPrimitive2DSequence), it is not yet broken. Whether or not the MapMode is defined as "broken" might depend on one's point of view, however ... I consider it broken, since: - we need the map mode to obtain the proper zoom level, which is to be forwarded to the control - there are scenarios where the MapMode is *not* set to MAP_PIXEL (in those scenarios, everything works fine), and there are scenarios where it *is* set to MAP_PIXEL (in those the bug 103138 appears). It somehow feels wrong that one cannot rely on the device's map mode this way, but on the other hand one has no possibility to obtain the current zoom by other means. Note that one issue (still to be submitted) is left: In the page pane of a Draw/Impress document, controls have a wrong text size. This is because in this pane, the above-mentioned "broken" map mode is used, which means the controls have a zoom of "1:1" set, which is wrong here. 2009-06-25 13:41:35 +0200 msc r273380 : #100000# the tabs changed die to new properties 2009-06-24 12:42:40 +0200 msc r273330 : #102082# remove issue warning 2009-06-22 10:43:14 +0200 fs r273201 : createPrimitive2DSequence: care for being disposed 2009-06-18 12:35:13 +0200 oj r273109 : #i102305# make nooptfiles for gcc 2009-06-17 12:14:37 +0200 oj r273056 : #i102305# fix for linux 2009-06-17 07:20:22 +0200 oj r273046 : #i102305# move ValueTransfer into the for loop to avoid a crash under Linux 2009-06-17 07:17:28 +0200 oj r273045 : #i102305# use varchar 2009-06-15 14:11:27 +0200 fs r272983 : added since tag 2009-06-15 12:11:39 +0200 oj r272973 : #i102305# SAL_DLLPUBLIC_EXPORT inserted 2009-06-15 11:08:53 +0200 fs r272969 : #i10000# 2009-06-15 09:25:13 +0200 fs r272963 : merging fix for P1 issue #i102701# 2009-06-11 11:31:24 +0200 fs r272858 : #i10000# copied the fix which before the rebase was done in ../dialog/macropg.src 2009-06-11 09:38:14 +0200 fs r272846 : CWS-TOOLING: rebase CWS dba32c to trunk@272827 (milestone: DEV300:m50) 2009-06-02 09:53:10 +0200 fs r272483 : #i10000# 2009-05-29 15:55:03 +0200 fs r272465 : #i100818# 2009-05-29 12:58:43 +0200 fs r272452 : don't apply comphelper::getString on possibly VOID any 2009-05-29 10:38:35 +0200 oj r272437 : #i101519# handle where condition 2009-05-29 09:53:39 +0200 fs r272434 : #i100818# call into releaseStubs /without/ locked GlobalMutex 2009-05-28 07:53:44 +0200 oj r272375 : #i101369# parse tree changed 2009-05-27 14:53:36 +0200 fs r272347 : #i10000# 2009-05-27 09:29:15 +0200 oj r272327 : #i101626# check for double before hard cast 2009-05-27 09:13:58 +0200 oj r272326 : #i101626# handle void correctly 2009-05-27 08:04:39 +0200 oj r272321 : #i102256# wrong method signature used 2009-05-27 07:55:52 +0200 oj r272320 : #i101519# look up parameter typ if used in function 2009-05-27 06:49:07 +0200 oj r272319 : #i101519# set parameter from rowset as well 2009-05-26 13:30:56 +0200 oj r272297 : #i101987# impl XBatchExecution 2009-05-26 12:44:34 +0200 oj r272293 : #i101700# check if group is not set 2009-05-26 12:16:53 +0200 oj r272290 : #i101369# resolved some reduce7reduce problems with boolean_term and search_condition 2009-05-26 12:12:42 +0200 oj r272289 : #i101369# fix for or on one line criteria 2009-05-25 16:02:25 +0200 fs r272257 : #i999704# +PROPERTY_MOUSE_WHEEL_BEHAVIOR 2009-05-25 16:01:55 +0200 fs r272256 : merging the changes from CWS dba32b herein 2009-05-25 15:49:57 +0200 fs r272254 : #i999704# 2009-05-25 15:32:57 +0200 fs r272252 : #i99704# grid columns also to respect the MouseWheelBehavior property 2009-05-25 15:23:43 +0200 fs r272251 : don't pass empty Anys to ::comphelper::getString 2009-05-25 14:48:43 +0200 fs r272248 : merged changes from CWS dba32b herein 2009-05-25 14:44:40 +0200 fs r272247 : #i99704# support new MouseWheelBehavior property 2009-05-25 14:43:18 +0200 fs r272246 : #i99704# WheelWithoutFocus (peer property) superseded by MouseWheelBehavior (model property) 2009-05-25 14:41:03 +0200 fs r272245 : #i99704# no need to set the mouse wheel behavior at the peer, this is now a model property, having the right default 2009-05-25 14:39:31 +0200 fs r272243 : removed dead import 2009-05-25 14:35:36 +0200 fs r272242 : the new EnableVisible doesn't make sense for grid columns 2009-05-25 14:34:33 +0200 fs r272241 : #i99704# +MouseWheelBehavior - allow to enable/disable the mouse wheel for the control, or make it focus-dependent 2009-05-25 14:26:11 +0200 fs r272240 : #i99704# change MouseSettings wheel flag (NoWheelActionWithoutFocus) to a three-state option, allowing to completely ignore the mouse wheel 2009-05-23 21:35:59 +0200 fs r272213 : localize 'sub component opened/closed' event 2009-05-22 21:42:47 +0200 fs r272211 : #i102003# 2009-05-22 21:42:20 +0200 fs r272210 : grammar 2009-05-22 21:36:10 +0200 fs r272209 : #i102140# load only once, not twice, and show error messages during loading (and during any form action, that is) asynchronously 2009-05-22 21:35:11 +0200 fs r272208 : #i102140# +clear 2009-05-22 14:50:30 +0200 fs r272194 : #i102139# for newly created DB docs, set the MacroExecutionMode to USE_CONFIG 2009-05-22 12:03:42 +0200 fs r272180 : #i88878# provided by noel.power@novell.com implement a visibility property (EnableVisible) for toolkit controls, and usage in forms and UNO dialogs 2009-05-15 15:37:31 +0200 fs r271942 : #i100671# corrected some @since tags, so autodoc has better chances of correctly reading them 2009-05-15 15:33:11 +0200 fs r271940 : don't call comphelper::getFOO for VOID values 2009-05-15 15:08:31 +0200 fs r271937 : includes 2009-05-15 13:39:22 +0200 fs r271934 : #i101398# createPrimitive2DSequence: when we already have a control, use the old code. In particular, call positionControlForPaint 2009-05-15 12:33:48 +0200 fs r271933 : make the geometry a part of the ControlPrimitive2D's identity 2009-05-15 10:15:44 +0200 fs r271928 : #i10000# 2009-05-14 20:55:38 +0200 fs r271921 : #i101398# don't reuse the name PRIMITIVE_ID_CONTROLPRIMITIVE2D, make the name of our own ControlPrimitive2D unique 2009-05-14 20:55:31 +0200 fs r271920 : #i101398# don't reuse the name PRIMITIVE_ID_CONTROLPRIMITIVE2D, make the name of our own ControlPrimitive2D unique 2009-05-14 20:23:23 +0200 fs r271919 : #i101622# 2009-05-14 16:04:38 +0200 fs r271898 : don't use comphelper::getInt32 on voids 2009-05-14 16:04:12 +0200 fs r271897 : merge fix for issue whose number just slipped my memory ... (originally fixed in CWS dba32b) 2009-05-14 15:36:55 +0200 fs r271895 : merging changes from DEV300:m48 2009-05-07 14:43:19 +0200 fs r271670 : #i101477# 2009-05-07 14:37:30 +0200 fs r271668 : #i101477# 2009-05-07 09:27:30 +0200 oj r271628 : #i101343# remove pch 2009-05-06 09:36:02 +0200 fs r271568 : getFoo: diagnostics 2009-05-04 09:23:06 +0200 oj r271438 : CWS-TOOLING: rebase CWS dba32c to trunk@271427 (milestone: DEV300:m47) 2009-04-29 23:18:13 +0200 fs r271394 : #i101398# use a dedicated 2DPrimitive for UNO Controls, which is able to provide the B2DRange *without* actually creating the control 2009-04-29 13:52:25 +0200 fs r271366 : #i101308# --- comphelper/source/misc/types.cxx | 11 ++-- comphelper/source/streaming/memorystream.cxx | 3 + toolkit/inc/toolkit/helper/property.hxx | 3 +- toolkit/inc/toolkit/helper/vclunohelper.hxx | 4 ++ toolkit/source/awt/vclxwindow.cxx | 84 +++++++++++++++++++++++----- toolkit/source/awt/vclxwindows.cxx | 27 +++++++++ toolkit/source/controls/formattedcontrol.cxx | 2 + toolkit/source/controls/tkspinbutton.cxx | 1 + toolkit/source/controls/tree/treecontrol.cxx | 1 + toolkit/source/controls/unocontrol.cxx | 7 ++- toolkit/source/controls/unocontrolmodel.cxx | 4 +- toolkit/source/controls/unocontrols.cxx | 4 ++ toolkit/source/helper/property.cxx | 5 +- toolkit/source/helper/vclunohelper.cxx | 8 +++ vcl/inc/vcl/settings.hxx | 14 +++-- vcl/source/app/settings.cxx | 6 +- vcl/source/control/combobox.cxx | 11 +++- vcl/source/control/lstbox.cxx | 11 +++- vcl/source/control/spinfld.cxx | 7 ++- vcl/source/window/window.cxx | 15 ++--- 20 files changed, 183 insertions(+), 45 deletions(-) diff --git a/comphelper/source/misc/types.cxx b/comphelper/source/misc/types.cxx index 2b20fd9acca3..2a9180c038b0 100644 --- a/comphelper/source/misc/types.cxx +++ b/comphelper/source/misc/types.cxx @@ -87,8 +87,7 @@ sal_Bool operator ==(const Time& _rLeft, const Time& _rRight) sal_Int32 getINT32(const Any& _rAny) { sal_Int32 nReturn = 0; - _rAny >>= nReturn; - + OSL_VERIFY( _rAny >>= nReturn ); return nReturn; } @@ -96,7 +95,7 @@ sal_Int32 getINT32(const Any& _rAny) sal_Int16 getINT16(const Any& _rAny) { sal_Int16 nReturn = 0; - _rAny >>= nReturn; + OSL_VERIFY( _rAny >>= nReturn ); return nReturn; } @@ -104,7 +103,7 @@ sal_Int16 getINT16(const Any& _rAny) double getDouble(const Any& _rAny) { double nReturn = 0.0; - _rAny >>= nReturn; + OSL_VERIFY( _rAny >>= nReturn ); return nReturn; } @@ -112,7 +111,7 @@ double getDouble(const Any& _rAny) float getFloat(const Any& _rAny) { float nReturn = 0.0; - _rAny >>= nReturn; + OSL_VERIFY( _rAny >>= nReturn ); return nReturn; } @@ -120,7 +119,7 @@ float getFloat(const Any& _rAny) ::rtl::OUString getString(const Any& _rAny) { ::rtl::OUString nReturn; - _rAny >>= nReturn; + OSL_VERIFY( _rAny >>= nReturn ); return nReturn; } diff --git a/comphelper/source/streaming/memorystream.cxx b/comphelper/source/streaming/memorystream.cxx index b999c0f8e6af..a2baef21010e 100644 --- a/comphelper/source/streaming/memorystream.cxx +++ b/comphelper/source/streaming/memorystream.cxx @@ -167,6 +167,9 @@ void SAL_CALL UNOMemoryStream::seek( sal_Int64 location ) throw (IllegalArgument if ( location > static_cast< sal_Int64 >( maData.size() ) ) maData.resize( static_cast< sal_Int32 >( location ) ); + if ( location > static_cast< sal_Int64 >( maData.size() ) ) + maData.resize( static_cast< sal_Int32 >( location ) ); + mnCursor = static_cast< sal_Int32 >( location ); } diff --git a/toolkit/inc/toolkit/helper/property.hxx b/toolkit/inc/toolkit/helper/property.hxx index da2de08c9544..f5e1b4ea3770 100644 --- a/toolkit/inc/toolkit/helper/property.hxx +++ b/toolkit/inc/toolkit/helper/property.hxx @@ -165,7 +165,7 @@ namespace rtl { #define BASEPROPERTY_IMAGEPOSITION 113 // sal_Int16 #define BASEPROPERTY_NATIVE_WIDGET_LOOK 114 // sal_Bool #define BASEPROPERTY_VERTICALALIGN 115 // VerticalAlignment -#define BASEPROPERTY_WHEELWITHOUTFOCUS 116 // sal_Bool +#define BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR 116 // sal_Int16 #define BASEPROPERTY_GRAPHIC 117 // css.graphic.XGraphic #define BASEPROPERTY_STEP_TIME 118 // sal_Int32 #define BASEPROPERTY_DECORATION 119 // sal_Bool @@ -191,6 +191,7 @@ namespace rtl { #define BASEPROPERTY_IMAGE_SCALE_MODE 137 #define BASEPROPERTY_WRITING_MODE 138 #define BASEPROPERTY_CONTEXT_WRITING_MODE 139 +#define BASEPROPERTY_ENABLEVISIBLE 140 // sal_Bool // Keine gebundenen Properties, werden immer aus der Property BASEPROPERTY_FONTDESCRIPTOR entnommen. #define BASEPROPERTY_FONTDESCRIPTORPART_START 1000 diff --git a/toolkit/inc/toolkit/helper/vclunohelper.hxx b/toolkit/inc/toolkit/helper/vclunohelper.hxx index 68583f99b447..1c5d89a3cc64 100644 --- a/toolkit/inc/toolkit/helper/vclunohelper.hxx +++ b/toolkit/inc/toolkit/helper/vclunohelper.hxx @@ -135,11 +135,15 @@ public: static MapUnit /* MapModeUnit */ ConvertToMapModeUnit(sal_Int16 /* com.sun.star.util.MeasureUnit.* */ _nMeasureUnit) throw (::com::sun::star::lang::IllegalArgumentException); static sal_Int16 /* com.sun.star.util.MeasureUnit.* */ ConvertToMeasurementUnit(MapUnit /* MapModeUnit */ _nMapModeUnit) throw (::com::sun::star::lang::IllegalArgumentException); + static ::Size /* VCLSize */ ConvertToVCLSize(::com::sun::star::awt::Size const& _aSize); static ::com::sun::star::awt::Size ConvertToAWTSize(::Size /* VCLSize */ const& _aSize); + static ::Point /* VCLPoint */ ConvertToVCLPoint(::com::sun::star::awt::Point const& _aPoint); static ::com::sun::star::awt::Point ConvertToAWTPoint(::Point /* VCLPoint */ const& _aPoint); + static ::Rectangle ConvertToVCLRect( ::com::sun::star::awt::Rectangle const & _rRect ); + static ::com::sun::star::awt::Rectangle ConvertToAWTRect( ::Rectangle const & _rRect ); }; diff --git a/toolkit/source/awt/vclxwindow.cxx b/toolkit/source/awt/vclxwindow.cxx index 09e318800184..125d134cd3fd 100644 --- a/toolkit/source/awt/vclxwindow.cxx +++ b/toolkit/source/awt/vclxwindow.cxx @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -82,6 +83,7 @@ using ::com::sun::star::style::VerticalAlignment_BOTTOM; using ::com::sun::star::style::VerticalAlignment_MAKE_FIXED_SIZE; namespace WritingMode2 = ::com::sun::star::text::WritingMode2; +namespace MouseWheelBehavior = ::com::sun::star::awt::MouseWheelBehavior; //==================================================================== @@ -226,6 +228,8 @@ private: ::toolkit::AccessibilityClient maAccFactory; bool mbDisposed; bool mbDrawingOntoParent; // no bit mask, is passed around by reference + sal_Bool mbEnableVisible; + sal_Bool mbDirectVisible; ::osl::Mutex maListenerContainerMutex; ::cppu::OInterfaceContainerHelper maWindow2Listeners; @@ -273,6 +277,15 @@ public: */ VCLXWindowImpl( VCLXWindow& _rAntiImpl, ::vos::IMutex& _rMutex, bool _bWithDefaultProps ); + /** synchronously mbEnableVisible + */ + void setEnableVisible( sal_Bool bEnableVisible ) { mbEnableVisible = bEnableVisible; } + sal_Bool isEnableVisible() { return mbEnableVisible; } + /** synchronously mbDirectVisible; + */ + void setDirectVisible( sal_Bool bDirectVisible ) { mbDirectVisible = bDirectVisible; } + sal_Bool isDirectVisible() { return mbDirectVisible; } + /** asynchronously notifies a mouse event to the VCLXWindow's XMouseListeners */ void notifyMouseEvent( const awt::MouseEvent& _rMouseEvent, MouseEventType _nType ); @@ -347,6 +360,8 @@ VCLXWindowImpl::VCLXWindowImpl( VCLXWindow& _rAntiImpl, ::vos::IMutex& _rMutex, ,mrMutex( _rMutex ) ,mbDisposed( false ) ,mbDrawingOntoParent( false ) + ,mbEnableVisible(sal_True) + ,mbDirectVisible(sal_True) ,maListenerContainerMutex( ) ,maWindow2Listeners( maListenerContainerMutex ) ,maDockableWindowListeners( maListenerContainerMutex ) @@ -625,7 +640,12 @@ void VCLXWindow::SetWindow( Window* pWindow ) SetOutputDevice( pWindow ); if ( GetWindow() ) + { GetWindow()->AddEventListener( LINK( this, VCLXWindow, WindowEventListener ) ); + sal_Bool bDirectVisible = pWindow ? pWindow->IsVisible() : false; + mpImpl->setDirectVisible( bDirectVisible ); + } + } void VCLXWindow::suspendVclEventListening( ) @@ -1226,7 +1246,8 @@ void VCLXWindow::setVisible( sal_Bool bVisible ) throw(::com::sun::star::uno::Ru } } */ - pWindow->Show( bVisible ); + mpImpl->setDirectVisible( bVisible ); + pWindow->Show( bVisible && mpImpl->isEnableVisible() ); } } @@ -1529,6 +1550,7 @@ void VCLXWindow::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds, bool bWithDe BASEPROPERTY_HELPURL, BASEPROPERTY_TEXT, BASEPROPERTY_PRINTABLE, + BASEPROPERTY_ENABLEVISIBLE, // for visibility BASEPROPERTY_TABSTOP, 0); @@ -1634,19 +1656,27 @@ void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com:: } break; - case BASEPROPERTY_WHEELWITHOUTFOCUS: + case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR: { - sal_Bool bWheelOnHover( sal_True ); - if ( Value >>= bWheelOnHover ) - { - AllSettings aSettings = pWindow->GetSettings(); - MouseSettings aMouseSettings = aSettings.GetMouseSettings(); + sal_uInt16 nWheelBehavior( MouseWheelBehavior::SCROLL_FOCUS_ONLY ); + OSL_VERIFY( Value >>= nWheelBehavior ); - aMouseSettings.SetNoWheelActionWithoutFocus( !bWheelOnHover ); - aSettings.SetMouseSettings( aMouseSettings ); + AllSettings aSettings = pWindow->GetSettings(); + MouseSettings aMouseSettings = aSettings.GetMouseSettings(); - pWindow->SetSettings( aSettings, TRUE ); + USHORT nVclBehavior( MOUSE_WHEEL_FOCUS_ONLY ); + switch ( nWheelBehavior ) + { + case MouseWheelBehavior::SCROLL_DISABLED: nVclBehavior = MOUSE_WHEEL_DISABLE; break; + case MouseWheelBehavior::SCROLL_FOCUS_ONLY: nVclBehavior = MOUSE_WHEEL_FOCUS_ONLY; break; + case MouseWheelBehavior::SCROLL_ALWAYS: nVclBehavior = MOUSE_WHEEL_ALWAYS; break; + default: + OSL_ENSURE( false, "VCLXWindow::setProperty( 'MouseWheelBehavior' ): illegal property value!" ); } + + aMouseSettings.SetWheelBehavior( nWheelBehavior ); + aSettings.SetMouseSettings( aMouseSettings ); + pWindow->SetSettings( aSettings, TRUE ); } break; @@ -1672,6 +1702,19 @@ void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com:: setEnable( b ); } break; + case BASEPROPERTY_ENABLEVISIBLE: + { + sal_Bool b = sal_False; + if ( Value >>= b ) + { + if( b != mpImpl->isEnableVisible() ) + { + mpImpl->setEnableVisible( b ); + pWindow->Show( b && mpImpl->isDirectVisible() ); + } + } + } + break; case BASEPROPERTY_TEXT: case BASEPROPERTY_LABEL: case BASEPROPERTY_TITLE: @@ -2122,10 +2165,19 @@ void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com:: aProp <<= mpImpl->mnWritingMode; break; - case BASEPROPERTY_WHEELWITHOUTFOCUS: + case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR: { - sal_Bool bWheelOnHover = !GetWindow()->GetSettings().GetMouseSettings().GetNoWheelActionWithoutFocus(); - aProp <<= bWheelOnHover; + USHORT nVclBehavior = GetWindow()->GetSettings().GetMouseSettings().GetWheelBehavior(); + sal_Int16 nBehavior = MouseWheelBehavior::SCROLL_FOCUS_ONLY; + switch ( nVclBehavior ) + { + case MOUSE_WHEEL_DISABLE: nBehavior = MouseWheelBehavior::SCROLL_DISABLED; break; + case MOUSE_WHEEL_FOCUS_ONLY: nBehavior = MouseWheelBehavior::SCROLL_FOCUS_ONLY; break; + case MOUSE_WHEEL_ALWAYS: nBehavior = MouseWheelBehavior::SCROLL_ALWAYS; break; + default: + OSL_ENSURE( false, "VCLXWindow::getProperty( 'MouseWheelBehavior' ): illegal VCL value!" ); + } + aProp <<= nBehavior; } break; @@ -2137,6 +2189,10 @@ void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com:: aProp <<= (sal_Bool) GetWindow()->IsEnabled(); break; + case BASEPROPERTY_ENABLEVISIBLE: + aProp <<= (sal_Bool) mpImpl->isEnableVisible(); + break; + case BASEPROPERTY_TEXT: case BASEPROPERTY_LABEL: case BASEPROPERTY_TITLE: @@ -2411,7 +2467,7 @@ void VCLXWindow::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno: if ( !pWindow ) return; - if ( pWindow ) + if ( isDesignMode() || mpImpl->isEnableVisible() ) { TabPage* pTabPage = dynamic_cast< TabPage* >( pWindow ); if ( pTabPage ) diff --git a/toolkit/source/awt/vclxwindows.cxx b/toolkit/source/awt/vclxwindows.cxx index 59cb9632b7e1..b49fa1a621d6 100644 --- a/toolkit/source/awt/vclxwindows.cxx +++ b/toolkit/source/awt/vclxwindows.cxx @@ -386,6 +386,7 @@ void VCLXButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DEFAULTBUTTON, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_GRAPHIC, BASEPROPERTY_HELPTEXT, @@ -668,6 +669,7 @@ void VCLXImageControl::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_BORDERCOLOR, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_GRAPHIC, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -796,6 +798,7 @@ void VCLXCheckBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) PushPropertyIds( rIds, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_GRAPHIC, BASEPROPERTY_HELPTEXT, @@ -1095,6 +1098,7 @@ void VCLXRadioButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) PushPropertyIds( rIds, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_GRAPHIC, BASEPROPERTY_HELPTEXT, @@ -1380,6 +1384,9 @@ void VCLXRadioButton::ImplClickedOrToggled( BOOL bToggled ) // ---------------------------------------------------- void VCLXSpinField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) { + PushPropertyIds( rIds, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, + 0 ); VCLXEdit::ImplGetPropertyIds( rIds ); } @@ -1519,6 +1526,7 @@ void VCLXListBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_DROPDOWN, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -1532,6 +1540,7 @@ void VCLXListBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_ALIGN, BASEPROPERTY_WRITING_MODE, BASEPROPERTY_CONTEXT_WRITING_MODE, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 0); VCLXWindow::ImplGetPropertyIds( rIds ); } @@ -2709,6 +2718,7 @@ void VCLXFixedHyperlink::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_BORDERCOLOR, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -2737,6 +2747,7 @@ void VCLXFixedText::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_BORDERCOLOR, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -2879,6 +2890,7 @@ void VCLXScrollBar::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_BORDERCOLOR, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, BASEPROPERTY_LINEINCREMENT, @@ -3358,6 +3370,7 @@ void VCLXEdit::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ECHOCHAR, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HARDLINEBREAKS, BASEPROPERTY_HELPTEXT, @@ -3734,6 +3747,7 @@ void VCLXComboBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_DROPDOWN, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -3748,6 +3762,7 @@ void VCLXComboBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_ALIGN, BASEPROPERTY_WRITING_MODE, BASEPROPERTY_CONTEXT_WRITING_MODE, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 0); // no, don't call VCLXEdit here - it has properties which we do *not* want to have at at combo box // #i92690# / 2008-08-12 / frank.schoenheit@sun.com @@ -4250,6 +4265,7 @@ void VCLXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_DROPDOWN, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_EXTDATEFORMAT, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, @@ -4266,6 +4282,7 @@ void VCLXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_HIDEINACTIVESELECTION, BASEPROPERTY_WRITING_MODE, BASEPROPERTY_CONTEXT_WRITING_MODE, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 0); VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); } @@ -4586,6 +4603,7 @@ void VCLXTimeField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_BORDERCOLOR, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_EXTTIMEFORMAT, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, @@ -4605,6 +4623,7 @@ void VCLXTimeField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_HIDEINACTIVESELECTION, BASEPROPERTY_WRITING_MODE, BASEPROPERTY_CONTEXT_WRITING_MODE, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 0); VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); } @@ -4887,6 +4906,7 @@ void VCLXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DECIMALACCURACY, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -4906,6 +4926,7 @@ void VCLXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_HIDEINACTIVESELECTION, BASEPROPERTY_WRITING_MODE, BASEPROPERTY_CONTEXT_WRITING_MODE, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 0); VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); } @@ -5227,6 +5248,7 @@ void VCLXMetricField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DECIMALACCURACY, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -5244,6 +5266,7 @@ void VCLXMetricField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_CUSTOMUNITTEXT, BASEPROPERTY_WRITING_MODE, BASEPROPERTY_CONTEXT_WRITING_MODE, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 0); VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); } @@ -5477,6 +5500,7 @@ void VCLXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DECIMALACCURACY, BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -5496,6 +5520,7 @@ void VCLXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_HIDEINACTIVESELECTION, BASEPROPERTY_WRITING_MODE, BASEPROPERTY_CONTEXT_WRITING_MODE, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 0); VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); } @@ -5828,6 +5853,7 @@ void VCLXPatternField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_DEFAULTCONTROL, BASEPROPERTY_EDITMASK, BASEPROPERTY_ENABLED, + BASEPROPERTY_ENABLEVISIBLE, BASEPROPERTY_FONTDESCRIPTOR, BASEPROPERTY_HELPTEXT, BASEPROPERTY_HELPURL, @@ -5841,6 +5867,7 @@ void VCLXPatternField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) BASEPROPERTY_HIDEINACTIVESELECTION, BASEPROPERTY_WRITING_MODE, BASEPROPERTY_CONTEXT_WRITING_MODE, + BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 0); VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); } diff --git a/toolkit/source/controls/formattedcontrol.cxx b/toolkit/source/controls/formattedcontrol.cxx index 19fb4c3609d0..6171067f1185 100644 --- a/toolkit/source/controls/formattedcontrol.cxx +++ b/toolkit/source/controls/formattedcontrol.cxx @@ -142,6 +142,7 @@ namespace toolkit ImplRegisterProperty( BASEPROPERTY_EFFECTIVE_MAX ); ImplRegisterProperty( BASEPROPERTY_EFFECTIVE_MIN ); ImplRegisterProperty( BASEPROPERTY_ENABLED ); + ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE ); ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR ); ImplRegisterProperty( BASEPROPERTY_FORMATKEY ); ImplRegisterProperty( BASEPROPERTY_FORMATSSUPPLIER ); @@ -161,6 +162,7 @@ namespace toolkit ImplRegisterProperty( BASEPROPERTY_ENFORCE_FORMAT ); ImplRegisterProperty( BASEPROPERTY_WRITING_MODE ); ImplRegisterProperty( BASEPROPERTY_CONTEXT_WRITING_MODE ); + ImplRegisterProperty( BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR ); Any aTreatAsNumber; aTreatAsNumber <<= (sal_Bool) sal_True; diff --git a/toolkit/source/controls/tkspinbutton.cxx b/toolkit/source/controls/tkspinbutton.cxx index 5c4e47e240dc..138b849a190c 100644 --- a/toolkit/source/controls/tkspinbutton.cxx +++ b/toolkit/source/controls/tkspinbutton.cxx @@ -60,6 +60,7 @@ namespace toolkit ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR ); ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL ); ImplRegisterProperty( BASEPROPERTY_ENABLED ); + ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE ); ImplRegisterProperty( BASEPROPERTY_HELPTEXT ); ImplRegisterProperty( BASEPROPERTY_HELPURL ); ImplRegisterProperty( BASEPROPERTY_ORIENTATION ); diff --git a/toolkit/source/controls/tree/treecontrol.cxx b/toolkit/source/controls/tree/treecontrol.cxx index 68c3212f5692..2949954bb13c 100644 --- a/toolkit/source/controls/tree/treecontrol.cxx +++ b/toolkit/source/controls/tree/treecontrol.cxx @@ -65,6 +65,7 @@ UnoTreeModel::UnoTreeModel() ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR ); ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL ); ImplRegisterProperty( BASEPROPERTY_ENABLED ); + ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE ); ImplRegisterProperty( BASEPROPERTY_FILLCOLOR ); ImplRegisterProperty( BASEPROPERTY_HELPTEXT ); ImplRegisterProperty( BASEPROPERTY_HELPURL ); diff --git a/toolkit/source/controls/unocontrol.cxx b/toolkit/source/controls/unocontrol.cxx index 92c27e33ead0..0775b6ee74f3 100644 --- a/toolkit/source/controls/unocontrol.cxx +++ b/toolkit/source/controls/unocontrol.cxx @@ -1049,7 +1049,13 @@ void UnoControl::draw( sal_Int32 x, sal_Int32 y ) throw(RuntimeException) } if ( xDrawPeerView.is() ) + { + Reference< XVclWindowPeer > xWindowPeer; + xWindowPeer.set( xDrawPeer, UNO_QUERY ); + if ( xWindowPeer.is() ) + xWindowPeer->setDesignMode( mbDesignMode ); xDrawPeerView->draw( x, y ); + } if ( bDisposeDrawPeer ) xDrawPeer->dispose(); @@ -1420,7 +1426,6 @@ void UnoControl::setDesignMode( sal_Bool bOn ) throw(RuntimeException) // remember this mbDesignMode = bOn; xWindow = xWindow.query( getPeer() ); - // dispose our current AccessibleContext, if we have one // (changing the design mode implies having a new implementation for this context, // so the old one must be declared DEFUNC) diff --git a/toolkit/source/controls/unocontrolmodel.cxx b/toolkit/source/controls/unocontrolmodel.cxx index 0f54a204a010..cc5faa27eec8 100644 --- a/toolkit/source/controls/unocontrolmodel.cxx +++ b/toolkit/source/controls/unocontrolmodel.cxx @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -294,6 +295,7 @@ void UnoControlModel::ImplPropertyChanged( sal_uInt16 ) case BASEPROPERTY_IMAGEALIGN: aDefault <<= (sal_Int16) 1 /*ImageAlign::TOP*/; break; case BASEPROPERTY_IMAGEPOSITION: aDefault <<= (sal_Int16) 12 /*ImagePosition::Centered*/; break; case BASEPROPERTY_PUSHBUTTONTYPE: aDefault <<= (sal_Int16) 0 /*PushButtonType::STANDARD*/; break; + case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR:aDefault <<= (sal_Int16) awt::MouseWheelBehavior::SCROLL_FOCUS_ONLY; break; case BASEPROPERTY_DATEMAX: aDefault <<= (sal_Int32) Date( 31, 12, 2200 ).GetDate(); break; case BASEPROPERTY_DATEMIN: aDefault <<= (sal_Int32) Date( 1, 1, 1900 ).GetDate(); break; @@ -338,13 +340,13 @@ void UnoControlModel::ImplPropertyChanged( sal_uInt16 ) case BASEPROPERTY_HARDLINEBREAKS: case BASEPROPERTY_NOLABEL: aDefault <<= (sal_Bool) sal_False; break; - case BASEPROPERTY_WHEELWITHOUTFOCUS: case BASEPROPERTY_HIDEINACTIVESELECTION: case BASEPROPERTY_ENFORCE_FORMAT: case BASEPROPERTY_AUTOCOMPLETE: case BASEPROPERTY_SCALEIMAGE: case BASEPROPERTY_ENABLED: case BASEPROPERTY_PRINTABLE: + case BASEPROPERTY_ENABLEVISIBLE: case BASEPROPERTY_DECORATION: aDefault <<= (sal_Bool) sal_True; break; case BASEPROPERTY_HELPTEXT: diff --git a/toolkit/source/controls/unocontrols.cxx b/toolkit/source/controls/unocontrols.cxx index 771a69c532b9..3abacef7b67f 100644 --- a/toolkit/source/controls/unocontrols.cxx +++ b/toolkit/source/controls/unocontrols.cxx @@ -481,6 +481,7 @@ UnoControlFileControlModel::UnoControlFileControlModel() ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR ); ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL ); ImplRegisterProperty( BASEPROPERTY_ENABLED ); + ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE ); ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR ); ImplRegisterProperty( BASEPROPERTY_HELPTEXT ); ImplRegisterProperty( BASEPROPERTY_HELPURL ); @@ -1778,6 +1779,7 @@ UnoControlGroupBoxModel::UnoControlGroupBoxModel() { ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL ); ImplRegisterProperty( BASEPROPERTY_ENABLED ); + ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE ); ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR ); ImplRegisterProperty( BASEPROPERTY_HELPTEXT ); ImplRegisterProperty( BASEPROPERTY_HELPURL ); @@ -3594,6 +3596,7 @@ UnoControlProgressBarModel::UnoControlProgressBarModel() ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR ); ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL ); ImplRegisterProperty( BASEPROPERTY_ENABLED ); + ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE ); ImplRegisterProperty( BASEPROPERTY_FILLCOLOR ); ImplRegisterProperty( BASEPROPERTY_HELPTEXT ); ImplRegisterProperty( BASEPROPERTY_HELPURL ); @@ -3723,6 +3726,7 @@ UnoControlFixedLineModel::UnoControlFixedLineModel() ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR ); ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL ); ImplRegisterProperty( BASEPROPERTY_ENABLED ); + ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE ); ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR ); ImplRegisterProperty( BASEPROPERTY_HELPTEXT ); ImplRegisterProperty( BASEPROPERTY_HELPURL ); diff --git a/toolkit/source/helper/property.cxx b/toolkit/source/helper/property.cxx index bace3ff94771..0560afbd835f 100644 --- a/toolkit/source/helper/property.cxx +++ b/toolkit/source/helper/property.cxx @@ -257,7 +257,7 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount ) DECL_PROP_2 ( "Complete", COMPLETE, sal_Bool, BOUND, MAYBEDEFAULT ), DECL_PROP_2 ( "CurrentItemID", CURRENTITEMID, sal_Int16, BOUND, MAYBEDEFAULT ), - DECL_PROP_2 ( "WheelWithoutFocus", WHEELWITHOUTFOCUS, sal_Bool, BOUND, MAYBEDEFAULT ), + DECL_PROP_2 ( "MouseWheelBehavior", MOUSE_WHEEL_BEHAVIOUR, sal_Int16, BOUND, MAYBEDEFAULT ), DECL_PROP_2 ( "StepTime", STEP_TIME, sal_Int32, BOUND, MAYBEDEFAULT ), DECL_PROP_2 ( "Decoration", DECORATION, sal_Bool, BOUND, MAYBEDEFAULT ), @@ -272,7 +272,8 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount ) DECL_PROP_2 ( "DialogSourceURL", DIALOGSOURCEURL, ::rtl::OUString, BOUND, MAYBEDEFAULT ), DECL_PROP_2 ( "URL", URL, ::rtl::OUString, BOUND, MAYBEDEFAULT ), DECL_PROP_2 ( "WritingMode", WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT ), - DECL_PROP_3 ( "ContextWritingMode", CONTEXT_WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT, TRANSIENT ) + DECL_PROP_3 ( "ContextWritingMode", CONTEXT_WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT, TRANSIENT ), + DECL_PROP_2 ( "EnableVisible", ENABLEVISIBLE, sal_Bool, BOUND, MAYBEDEFAULT ) }; pPropertyInfos = aImplPropertyInfos; nElements = sizeof( aImplPropertyInfos ) / sizeof( ImplPropertyInfo ); diff --git a/toolkit/source/helper/vclunohelper.cxx b/toolkit/source/helper/vclunohelper.cxx index d76b56a6a37d..029e520baca6 100644 --- a/toolkit/source/helper/vclunohelper.cxx +++ b/toolkit/source/helper/vclunohelper.cxx @@ -736,4 +736,12 @@ com::sun::star::awt::Point VCLUnoHelper::ConvertToAWTPoint(::Point /* VCLPoint * return aAWTPoint; } +::Rectangle VCLUnoHelper::ConvertToVCLRect( ::com::sun::star::awt::Rectangle const & _rRect ) +{ + return ::Rectangle( _rRect.X, _rRect.Y, _rRect.X + _rRect.Width - 1, _rRect.Y + _rRect.Height - 1 ); +} +::com::sun::star::awt::Rectangle VCLUnoHelper::ConvertToAWTRect( ::Rectangle const & _rRect ) +{ + return ::com::sun::star::awt::Rectangle( _rRect.Left(), _rRect.Top(), _rRect.GetWidth(), _rRect.GetHeight() ); +} diff --git a/vcl/inc/vcl/settings.hxx b/vcl/inc/vcl/settings.hxx index 5ee27e3aeb31..a7cd61477519 100644 --- a/vcl/inc/vcl/settings.hxx +++ b/vcl/inc/vcl/settings.hxx @@ -139,7 +139,7 @@ private: ULONG mnMenuDelay; ULONG mnFollow; USHORT mnMiddleButtonAction; - BOOL mbNoWheelActionWithoutFocus; + USHORT mnWheelBehavior; BOOL mbAlign1; }; @@ -158,6 +158,10 @@ private: #define MOUSE_MIDDLE_AUTOSCROLL ((USHORT)1) #define MOUSE_MIDDLE_PASTESELECTION ((USHORT)2) +#define MOUSE_WHEEL_DISABLE ((USHORT)0) +#define MOUSE_WHEEL_FOCUS_ONLY ((USHORT)1) +#define MOUSE_WHEEL_ALWAYS ((USHORT)2) + class VCL_DLLPUBLIC MouseSettings { void CopyData(); @@ -257,10 +261,10 @@ public: USHORT GetMiddleButtonAction() const { return mpData->mnMiddleButtonAction; } - void SetNoWheelActionWithoutFocus( BOOL bAction ) - { CopyData(); mpData->mbNoWheelActionWithoutFocus = bAction; } - BOOL GetNoWheelActionWithoutFocus() const - { return mpData->mbNoWheelActionWithoutFocus; } + void SetWheelBehavior( USHORT nBehavior ) + { CopyData(); mpData->mnWheelBehavior = nBehavior; } + USHORT GetWheelBehavior() const + { return mpData->mnWheelBehavior; } const MouseSettings& operator =( const MouseSettings& rSet ); diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx index 12213c25a64f..444f1f58c8fb 100644 --- a/vcl/source/app/settings.cxx +++ b/vcl/source/app/settings.cxx @@ -189,7 +189,7 @@ ImplMouseData::ImplMouseData() mnActionDelay = 250; mnMenuDelay = 150; mnFollow = MOUSE_FOLLOW_MENU | MOUSE_FOLLOW_DDLIST; - mbNoWheelActionWithoutFocus = FALSE; + mnWheelBehavior = MOUSE_WHEEL_FOCUS_ONLY; } // ----------------------------------------------------------------------- @@ -217,7 +217,7 @@ ImplMouseData::ImplMouseData( const ImplMouseData& rData ) mnActionDelay = rData.mnActionDelay; mnMenuDelay = rData.mnMenuDelay; mnFollow = rData.mnFollow; - mbNoWheelActionWithoutFocus = rData.mbNoWheelActionWithoutFocus; + mnWheelBehavior = rData.mnWheelBehavior; } // ----------------------------------------------------------------------- @@ -308,7 +308,7 @@ BOOL MouseSettings::operator ==( const MouseSettings& rSet ) const (mpData->mnActionDelay == rSet.mpData->mnActionDelay) && (mpData->mnMenuDelay == rSet.mpData->mnMenuDelay) && (mpData->mnFollow == rSet.mpData->mnFollow) && - (mpData->mbNoWheelActionWithoutFocus == rSet.mpData->mbNoWheelActionWithoutFocus) ) + (mpData->mnWheelBehavior == rSet.mpData->mnWheelBehavior ) ) return TRUE; else return FALSE; diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx index 42abe3fd248a..309acb404750 100644 --- a/vcl/source/control/combobox.cxx +++ b/vcl/source/control/combobox.cxx @@ -876,10 +876,19 @@ long ComboBox::Notify( NotifyEvent& rNEvt ) (rNEvt.GetCommandEvent()->GetCommand() == COMMAND_WHEEL) && (rNEvt.GetWindow() == mpSubEdit) ) { - if( ! GetSettings().GetMouseSettings().GetNoWheelActionWithoutFocus() || HasChildPathFocus() ) + USHORT nWheelBehavior( GetSettings().GetMouseSettings().GetWheelBehavior() ); + if ( ( nWheelBehavior == MOUSE_WHEEL_ALWAYS ) + || ( ( nWheelBehavior == MOUSE_WHEEL_FOCUS_ONLY ) + && HasChildPathFocus() + ) + ) + { nDone = mpImplLB->HandleWheelAsCursorTravel( *rNEvt.GetCommandEvent() ); + } else + { nDone = 0; // don't eat this event, let the default handling happen (i.e. scroll the context) + } } return nDone ? nDone : Edit::Notify( rNEvt ); diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx index 66722b70eef8..687352716ae8 100644 --- a/vcl/source/control/lstbox.cxx +++ b/vcl/source/control/lstbox.cxx @@ -959,10 +959,19 @@ long ListBox::PreNotify( NotifyEvent& rNEvt ) (rNEvt.GetCommandEvent()->GetCommand() == COMMAND_WHEEL) && (rNEvt.GetWindow() == mpImplWin) ) { - if( ! GetSettings().GetMouseSettings().GetNoWheelActionWithoutFocus() || HasChildPathFocus() ) + USHORT nWheelBehavior( GetSettings().GetMouseSettings().GetWheelBehavior() ); + if ( ( nWheelBehavior == MOUSE_WHEEL_ALWAYS ) + || ( ( nWheelBehavior == MOUSE_WHEEL_FOCUS_ONLY ) + && HasChildPathFocus() + ) + ) + { nDone = mpImplLB->HandleWheelAsCursorTravel( *rNEvt.GetCommandEvent() ); + } else + { nDone = 0; // don't eat this event, let the default handling happen (i.e. scroll the context) + } } } diff --git a/vcl/source/control/spinfld.cxx b/vcl/source/control/spinfld.cxx index 3f8779dc2e90..0d656da40ba7 100644 --- a/vcl/source/control/spinfld.cxx +++ b/vcl/source/control/spinfld.cxx @@ -599,7 +599,12 @@ long SpinField::Notify( NotifyEvent& rNEvt ) { if ( ( rNEvt.GetCommandEvent()->GetCommand() == COMMAND_WHEEL ) && !IsReadOnly() ) { - if( ! GetSettings().GetMouseSettings().GetNoWheelActionWithoutFocus() || HasChildPathFocus() ) + USHORT nWheelBehavior( GetSettings().GetMouseSettings().GetWheelBehavior() ); + if ( ( nWheelBehavior == MOUSE_WHEEL_ALWAYS ) + || ( ( nWheelBehavior == MOUSE_WHEEL_FOCUS_ONLY ) + && HasChildPathFocus() + ) + ) { const CommandWheelData* pData = rNEvt.GetCommandEvent()->GetWheelData(); if ( pData->GetMode() == COMMAND_WHEEL_SCROLL ) diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index 279775d712e4..86d6347617b0 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -5844,18 +5844,15 @@ void Window::UpdateSettings( const AllSettings& rSettings, BOOL bChild ) ImplInitResolutionSettings(); /* #i73785# - * do not overwrite a NoWheelActionWithoutFocus with false - * this looks kind of a hack, but NoWheelActionWithoutFocus + * do not overwrite a WheelBehavior with false + * this looks kind of a hack, but WheelBehavior * is always a local change, not a system property, - * so we can spare all our users the hassel of reacting on + * so we can spare all our users the hassle of reacting on * this in their respective DataChanged. */ - if( aOldSettings.GetMouseSettings().GetNoWheelActionWithoutFocus() ) - { - MouseSettings aSet( maSettings.GetMouseSettings() ); - aSet.SetNoWheelActionWithoutFocus( TRUE ); - maSettings.SetMouseSettings( aSet ); - } + MouseSettings aSet( maSettings.GetMouseSettings() ); + aSet.SetWheelBehavior( aOldSettings.GetMouseSettings().GetWheelBehavior() ); + maSettings.SetMouseSettings( aSet ); if( (nChangeFlags & SETTINGS_STYLE) && IsBackground() ) { -- cgit v1.2.3 From 047cc986976a353d7676eef1114ef4c46c22d147 Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Mon, 6 Jul 2009 12:37:58 +0000 Subject: CWS-TOOLING: integrate CWS ooo311gsl03_DEV300 2009-06-08 19:08:54 +0200 pl r272745 : #159965# add missing link dependency 2009-06-08 18:14:12 +0200 pl r272743 : #159965# join svp02, fix copyArea, copyBits and getBitmap from subsetted devices 2009-06-05 14:55:00 +0200 pl r272689 : #i101082# adjust GetClientSize to behavior on other platforms 2009-06-04 20:21:35 +0200 pl r272658 : #i96031# try key event if special key codes fail --- vcl/aqua/inc/salframeview.h | 1 + vcl/aqua/source/window/salframe.cxx | 12 +++++++-- vcl/aqua/source/window/salframeview.mm | 12 ++++++--- vcl/unx/headless/svpgdi.cxx | 6 ++--- vcl/unx/headless/svpvd.cxx | 5 ++++ vcl/workben/makefile.mk | 1 + vcl/workben/svpclient.cxx | 47 +++++++++++++++++++++++++++++++--- 7 files changed, 73 insertions(+), 11 deletions(-) diff --git a/vcl/aqua/inc/salframeview.h b/vcl/aqua/inc/salframeview.h index e969cc8509a1..7fd4d96c4a45 100755 --- a/vcl/aqua/inc/salframeview.h +++ b/vcl/aqua/inc/salframeview.h @@ -108,6 +108,7 @@ -(void)sendMouseEventToFrame:(NSEvent*)pEvent button:(USHORT)nButton eventtype:(USHORT)nEvent; -(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar; -(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod; +-(MacOSBOOL)sendKeyToFrameDirect: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod; -(MacOSBOOL)sendSingleCharacter:(NSEvent*)pEvent; -(MacOSBOOL)handleKeyDownException:(NSEvent*)pEvent; /* diff --git a/vcl/aqua/source/window/salframe.cxx b/vcl/aqua/source/window/salframe.cxx index 560d80fd75d5..8c40e1acfe66 100644 --- a/vcl/aqua/source/window/salframe.cxx +++ b/vcl/aqua/source/window/salframe.cxx @@ -520,8 +520,16 @@ void AquaSalFrame::SetClientSize( long nWidth, long nHeight ) void AquaSalFrame::GetClientSize( long& rWidth, long& rHeight ) { - rWidth = mbShown ? maGeometry.nWidth : 0; - rHeight = mbShown ? maGeometry.nHeight : 0; + if( mbShown || mbInitShow ) + { + rWidth = maGeometry.nWidth; + rHeight = maGeometry.nHeight; + } + else + { + rWidth = 0; + rHeight = 0; + } } // ----------------------------------------------------------------------- diff --git a/vcl/aqua/source/window/salframeview.mm b/vcl/aqua/source/window/salframeview.mm index 7de43d770385..a6213ca7b64d 100755 --- a/vcl/aqua/source/window/salframeview.mm +++ b/vcl/aqua/source/window/salframeview.mm @@ -1242,12 +1242,18 @@ private: } } --(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar +-(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar { return [self sendKeyInputAndReleaseToFrame: nKeyCode character: aChar modifiers: mpFrame->mnLastModifierFlags]; } --(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod +-(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod +{ + return [self sendKeyToFrameDirect: nKeyCode character: aChar modifiers: nMod] || + [self sendSingleCharacter: mpLastEvent]; +} + +-(MacOSBOOL)sendKeyToFrameDirect: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod { YIELD_GUARD; @@ -1283,7 +1289,7 @@ private: // don't send unicodes in the private use area if( keyChar >= 0xf700 && keyChar < 0xf780 ) keyChar = 0; - MacOSBOOL bRet = [self sendKeyInputAndReleaseToFrame: nKeyCode character: keyChar]; + MacOSBOOL bRet = [self sendKeyToFrameDirect: nKeyCode character: keyChar modifiers: mpFrame->mnLastModifierFlags]; mbInKeyInput = false; return bRet; diff --git a/vcl/unx/headless/svpgdi.cxx b/vcl/unx/headless/svpgdi.cxx index cd3e286d167a..bd317c883b0b 100644 --- a/vcl/unx/headless/svpgdi.cxx +++ b/vcl/unx/headless/svpgdi.cxx @@ -429,7 +429,7 @@ void SvpSalGraphics::copyArea( long nDestX, { B2IRange aSrcRect( nSrcX, nSrcY, nSrcX+nSrcWidth, nSrcY+nSrcHeight ); B2IRange aDestRect( nDestX, nDestY, nDestX+nSrcWidth, nDestY+nSrcHeight ); - m_aDevice->drawBitmap( m_aDevice, aSrcRect, aDestRect, DrawMode_PAINT, m_aClipMap ); + m_aDevice->drawBitmap( m_aOrigDevice, aSrcRect, aDestRect, DrawMode_PAINT, m_aClipMap ); dbgOut( m_aDevice ); } @@ -444,7 +444,7 @@ void SvpSalGraphics::copyBits( const SalTwoRect* pPosAry, B2IRange aDestRect( pPosAry->mnDestX, pPosAry->mnDestY, pPosAry->mnDestX+pPosAry->mnDestWidth, pPosAry->mnDestY+pPosAry->mnDestHeight ); - m_aDevice->drawBitmap( pSrc->m_aDevice, aSrcRect, aDestRect, DrawMode_PAINT, m_aClipMap ); + m_aDevice->drawBitmap( pSrc->m_aOrigDevice, aSrcRect, aDestRect, DrawMode_PAINT, m_aClipMap ); dbgOut( m_aDevice ); } @@ -519,7 +519,7 @@ SalBitmap* SvpSalGraphics::getBitmap( long nX, long nY, long nWidth, long nHeigh m_aDevice ); B2IRange aSrcRect( nX, nY, nX+nWidth, nY+nHeight ); B2IRange aDestRect( 0, 0, nWidth, nHeight ); - aCopy->drawBitmap( m_aDevice, aSrcRect, aDestRect, DrawMode_PAINT ); + aCopy->drawBitmap( m_aOrigDevice, aSrcRect, aDestRect, DrawMode_PAINT ); SvpSalBitmap* pBitmap = new SvpSalBitmap(); pBitmap->setBitmap( aCopy ); diff --git a/vcl/unx/headless/svpvd.cxx b/vcl/unx/headless/svpvd.cxx index 3f48584036f6..6220af0b28b8 100644 --- a/vcl/unx/headless/svpvd.cxx +++ b/vcl/unx/headless/svpvd.cxx @@ -34,6 +34,8 @@ #include #include +#include "stdio.h" + using namespace basegfx; using namespace basebmp; @@ -80,16 +82,19 @@ BOOL SvpSalVirtualDevice::SetSize( long nNewDX, long nNewDY ) #else case 16: nFormat = Format::SIXTEEN_BIT_LSB_TC_MASK; break; #endif + case 0: case 24: nFormat = Format::TWENTYFOUR_BIT_TC_MASK; break; case 32: nFormat = Format::THIRTYTWO_BIT_TC_MASK; break; } m_aDevice = aDevPal.empty() ? createBitmapDevice( aDevSize, false, nFormat ) : createBitmapDevice( aDevSize, false, nFormat, PaletteMemorySharedVector( new std::vector< basebmp::Color >(aDevPal) ) ); + // update device in existing graphics for( std::list< SvpSalGraphics* >::iterator it = m_aGraphics.begin(); it != m_aGraphics.end(); ++it ) (*it)->setDevice( m_aDevice ); + } return true; } diff --git a/vcl/workben/makefile.mk b/vcl/workben/makefile.mk index 83abbbf4e6bf..34316356a1a6 100644 --- a/vcl/workben/makefile.mk +++ b/vcl/workben/makefile.mk @@ -125,6 +125,7 @@ APP5OBJS= $(OBJ)$/svpclient.obj APP5STDLIBS= $(CPPULIB) \ $(CPPUHELPERLIB) \ $(COMPHELPERLIB) \ + $(UCBHELPERLIB) \ $(VCLLIB) \ $(TOOLSLIB) \ $(SALLIB) \ diff --git a/vcl/workben/svpclient.cxx b/vcl/workben/svpclient.cxx index cf64d58110e8..7bea0b94f76a 100644 --- a/vcl/workben/svpclient.cxx +++ b/vcl/workben/svpclient.cxx @@ -50,6 +50,8 @@ #include #include #include +#include "ucbhelper/contentbroker.hxx" +#include "ucbhelper/configurationkeys.hxx" #include #include @@ -60,6 +62,8 @@ using namespace rtl; +using namespace cppu; +using namespace comphelper; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; // ----------------------------------------------------------------------- @@ -73,10 +77,47 @@ SAL_IMPLEMENT_MAIN() { tools::extendApplicationEnvironment(); - Reference< XMultiServiceFactory > xMS; - xMS = cppu::createRegistryServiceFactory( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "applicat.rdb" ) ), sal_True ); + //------------------------------------------------- + // create the global service-manager + //------------------------------------------------- + Reference< XMultiServiceFactory > xFactory; + try + { + Reference< XComponentContext > xCtx = defaultBootstrap_InitialComponentContext(); + xFactory = Reference< XMultiServiceFactory >( xCtx->getServiceManager(), UNO_QUERY ); + if( xFactory.is() ) + setProcessServiceFactory( xFactory ); + } + catch( com::sun::star::uno::Exception& rExc) + { + } + + if( ! xFactory.is() ) + { + fprintf( stderr, "Could not bootstrap UNO, installation must be in disorder. Exiting.\n" ); + exit( 1 ); + } + + /* + * Create UCB. + */ + Sequence< Any > aArgs( 2 ); + aArgs[ 0 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY1_LOCAL ); + aArgs[ 1 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY2_OFFICE ); +#if OSL_DEBUG_LEVEL > 1 + sal_Bool bSuccess = +#endif + ::ucbhelper::ContentBroker::initialize( xFactory, aArgs ); + +#if OSL_DEBUG_LEVEL > 1 + if ( !bSuccess ) + { + fprintf( stderr, "Error creating UCB, installation must be in disorder. Exiting.\n" ); + exit( 1 ); + } +#endif - InitVCL( xMS ); + InitVCL( xFactory ); ::Main(); DeInitVCL(); -- cgit v1.2.3 From 2c0004f43ab3a53f19951b40e1351cb733b9af95 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Mon, 6 Jul 2009 13:08:26 +0000 Subject: #i10000# localize.cxx is in a weird state --- transex3/source/localize.cxx | 46 ++++++++++++++++---------------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/transex3/source/localize.cxx b/transex3/source/localize.cxx index 2f19f727b517..bcd45d7027a4 100644 --- a/transex3/source/localize.cxx +++ b/transex3/source/localize.cxx @@ -283,6 +283,7 @@ void SourceTreeLocalizer::WorkOnFile( const ByteString &rParameter, const ByteString &rIso ) /*****************************************************************************/ { + (void) rIso; // Remove me ;) String sFull( rFileName, RTL_TEXTENCODING_ASCII_US ); DirEntry aEntry( sFull ); ByteString sFileName( aEntry.GetName(), RTL_TEXTENCODING_ASCII_US ); @@ -324,36 +325,23 @@ void SourceTreeLocalizer::WorkOnFile( sExecutable += rExecutable ; -#if defined(WNT) || defined(OS2) - sExecutable += ".exe"; - String sPath( Export::GetEnv( "PATH" ), RTL_TEXTENCODING_ASCII_US ); -#else - String sPath( Export::GetEnv( "LD_LIBRARY_PATH" ), RTL_TEXTENCODING_ASCII_US ); -#endif + ByteString sCommand( sExecutable ); + sCommand += " "; + sCommand += rParameter; + sCommand += " -p "; + sCommand += sPrj; + sCommand += " -r "; + sCommand += sRoot; + sCommand += " -i "; + sCommand += sFileName; + sCommand += " -o "; + sCommand += sTempFile; + if ( sLanguageRestriction.Len()) { + sCommand += " -l "; + sCommand += getSourceLanguages( sLanguageRestriction , sCommand ); + } - DirEntry aExecutable( String( sExecutable, RTL_TEXTENCODING_ASCII_US )); - aExecutable.Find( sPath ); - - ByteString sCommand( aExecutable.GetFull(), RTL_TEXTENCODING_ASCII_US ); - sCommand += " "; - sCommand += rParameter; - sCommand += " -p "; - sCommand += sPrj; - sCommand += " -r "; - sCommand += sRoot; - sCommand += " -i "; - sCommand += sFileName; - sCommand += " -o "; - sCommand += sTempFile; - if ( sLanguageRestriction.Len()) { - sCommand += " -l "; - sCommand += getSourceLanguages( sLanguageRestriction , sCommand ); - } - if ( rIso.Equals("iso") && sIsoCode99.Len()) { - sCommand += " -ISO99 "; - sCommand += sIsoCode99; - } - if( bQuiet2 ){ + if( bQuiet2 ){ sCommand +=" -QQ "; } //printf("DBG: %s\n",sCommand.GetBuffer()); -- cgit v1.2.3 From 8e923ca55af52cb650edae67ab771d094f69506a Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Mon, 6 Jul 2009 21:00:37 +0000 Subject: CWS-TOOLING: integrate CWS impress173_DEV300 2009-06-16 15:50:22 +0200 sj r273022 : #i101545# fixed crash - bracketing of graphic links has been done twice leading to a broken graphic state stack 2009-06-05 10:37:58 +0200 cl r272669 : #i102298# prevent export of multiple writing-mode attributes for cell styles 2009-06-05 10:29:42 +0200 cl r272667 : #i98403# fixed editing of motion path --- goodies/source/graphic/grfmgr.cxx | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/goodies/source/graphic/grfmgr.cxx b/goodies/source/graphic/grfmgr.cxx index bece8389d270..5cb37a51e81f 100644 --- a/goodies/source/graphic/grfmgr.cxx +++ b/goodies/source/graphic/grfmgr.cxx @@ -44,7 +44,6 @@ #include #include #include -#include #include #include "grfmgr.hxx" @@ -674,31 +673,11 @@ BOOL GraphicObject::Draw( OutputDevice* pOut, const Point& rPt, const Size& rSz, const sal_uInt32 nOldDrawMode = pOut->GetDrawMode(); BOOL bCropped = aAttr.IsCropped(); BOOL bCached = FALSE; - BOOL bWritingPdfLinkedGraphic = FALSE; BOOL bRet; // #i29534# Provide output rects for PDF writer Rectangle aCropRect; - // #i29534# Notify PDF writer about linked graphic (if any) - vcl::ExtOutDevData* pExtOutDevData = pOut->GetExtOutDevData(); - if( pExtOutDevData && pExtOutDevData->ISA(vcl::PDFExtOutDevData) ) - { - // #i29534# Only delegate image handling to PDF, if no special - // treatment is necessary - if( GetGraphic().IsLink() && - aSz.Width() > 0L && - aSz.Height() > 0L && - !aAttr.IsSpecialDrawMode() && - !aAttr.IsMirrored() && - !aAttr.IsRotated() && - !aAttr.IsAdjusted() ) - { - bWritingPdfLinkedGraphic = TRUE; - static_cast< vcl::PDFExtOutDevData* >( pExtOutDevData )->BeginGroup(); - } - } - if( !( GRFMGR_DRAW_USE_DRAWMODE_SETTINGS & nFlags ) ) pOut->SetDrawMode( nOldDrawMode & ( ~( DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT ) ) ); @@ -749,16 +728,6 @@ BOOL GraphicObject::Draw( OutputDevice* pOut, const Point& rPt, const Size& rSz, pOut->SetDrawMode( nOldDrawMode ); - // #i29534# Notify PDF writer about linked graphic (if any) - if( bWritingPdfLinkedGraphic ) - { - static_cast< vcl::PDFExtOutDevData* >( pExtOutDevData )->EndGroup( - const_cast< Graphic& >(GetGraphic()), - aAttr.GetTransparency(), - Rectangle( aPt, aSz ), - aCropRect ); - } - // #i29534# Moved below OutDev restoration, to avoid multiple swap-ins // (code above needs to call GetGraphic twice) if( bCached ) -- cgit v1.2.3 From f273ae885d22cd9daa22c1f13abd78dafdc161b2 Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Tue, 7 Jul 2009 07:40:36 +0000 Subject: CWS-TOOLING: integrate CWS ooo311gsl04_DEV300 2009-06-25 18:59:25 +0200 pl r273391 : add forgotten patch flags for cws: ooo311gsl01,ooo311gsl02,ooo311gsl03,ooo311gsl04,svp02,c28v001 2009-06-25 18:05:10 +0200 pl r273388 : CWS-TOOLING: rebase CWS ooo311gsl04 to branches/OOO310@272865 (milestone: OOO310:m13) 2009-06-15 16:57:19 +0200 pl r273001 : #i98804# check for nil 2009-06-11 07:14:52 +0200 hdu r272842 : #i102603# make rotated+shuffled text export work again --- vcl/source/gdi/pdfwriter_impl.cxx | 48 +++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 3f648fda8589..25f02a1b2718 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -792,7 +792,8 @@ static void appendNonStrokingColor( const Color& rColor, OStringBuffer& rBuffer } // matrix helper class -namespace vcl +// TODO: use basegfx matrix class instead or derive from it +namespace vcl // TODO: use anonymous namespace to keep this class local { /* for sparse matrices of the form (2D linear transformations) * f[0] f[1] 0 @@ -812,6 +813,7 @@ public: void scale( double sx, double sy ); void rotate( double angle ); void translate( double tx, double ty ); + bool invert(); void append( PDFWriterImpl::PDFPage& rPage, OStringBuffer& rBuffer, Point* pBack = NULL ); @@ -888,6 +890,36 @@ void Matrix3::translate( double tx, double ty ) f[5] += ty; } +bool Matrix3::invert() +{ + // short circuit trivial cases + if( f[1]==f[2] && f[1]==0.0 && f[0]==f[3] && f[0]==1.0 ) + { + f[4] = -f[4]; + f[5] = -f[5]; + return true; + } + + // check determinant + const double fDet = f[0]*f[3]-f[1]*f[2]; + if( fDet == 0.0 ) + return false; + + // invert the matrix + double fn[6]; + fn[0] = +f[3] / fDet; + fn[1] = -f[1] / fDet; + fn[2] = -f[2] / fDet; + fn[3] = +f[0] / fDet; + + // apply inversion to translation + fn[4] = -(f[4]*fn[0] + f[5]*fn[2]); + fn[5] = -(f[4]*fn[1] + f[5]*fn[3]); + + set( fn ); + return true; +} + void Matrix3::append( PDFWriterImpl::PDFPage& rPage, OStringBuffer& rBuffer, Point* pBack ) { appendDouble( f[0], rBuffer ); @@ -6635,6 +6667,7 @@ void PDFWriterImpl::drawHorizontalGlyphs( // subsequent use of that operator would move // the texline matrix relative to what was set before // making use of that would drive us into rounding issues + Matrix3 aMat; if( nRun == 0 && fAngle == 0.0 && fXScale == 1.0 && fSkew == 0.0 ) { m_aPages.back().appendPoint( aCurPos, rLine, false ); @@ -6642,7 +6675,6 @@ void PDFWriterImpl::drawHorizontalGlyphs( } else { - Matrix3 aMat; if( fSkew != 0.0 ) aMat.skew( 0.0, fSkew ); aMat.scale( fXScale, 1.0 ); @@ -6665,15 +6697,17 @@ void PDFWriterImpl::drawHorizontalGlyphs( appendHex( rGlyphs[nBeginRun].m_nMappedGlyphId, aKernedLine ); appendHex( rGlyphs[nBeginRun].m_nMappedGlyphId, aUnkernedLine ); + aMat.invert(); bool bNeedKern = false; for( sal_uInt32 nPos = nBeginRun+1; nPos < aRunEnds[nRun]; nPos++ ) { appendHex( rGlyphs[nPos].m_nMappedGlyphId, aUnkernedLine ); - // check for adjustment - double fTheoreticalGlyphWidth = rGlyphs[nPos].m_aPos.X() - rGlyphs[nPos-1].m_aPos.X(); - fTheoreticalGlyphWidth = fabs( fTheoreticalGlyphWidth ); // #i100522# workaround until #i87686# gets fixed - fTheoreticalGlyphWidth = 1000.0 * fTheoreticalGlyphWidth / fXScale / double(nPixelFontHeight); - sal_Int32 nAdjustment = rGlyphs[nPos-1].m_nNativeWidth - sal_Int32(fTheoreticalGlyphWidth+0.5); + // check if glyph advance matches with the width of the previous glyph, else adjust + const Point aThisPos = aMat.transform( rGlyphs[nPos].m_aPos ); + const Point aPrevPos = aMat.transform( rGlyphs[nPos-1].m_aPos ); + double fAdvance = aThisPos.X() - aPrevPos.X(); + fAdvance *= 1000.0 / (fXScale * nPixelFontHeight); + const sal_Int32 nAdjustment = rGlyphs[nPos-1].m_nNativeWidth - sal_Int32(fAdvance+0.5); if( nAdjustment != 0 ) { bNeedKern = true; -- cgit v1.2.3 From 84798a0c285ec82bcb530c7e588d55080fe4d9c6 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Thu, 16 Jul 2009 09:56:45 +0000 Subject: CWS-TOOLING: integrate CWS ooo311gsl05_DEV300 2009-06-30 17:18:18 +0200 pl r273524 : add patch flags for CWS ooo311gsl05 2009-06-30 16:22:06 +0200 pl r273519 : #i102485# correct landscape printing 2009-06-30 08:45:25 +0200 hdu r273486 : #i102378# fix PDF-export on PPC (thanks cloph!) --- vcl/aqua/source/gdi/salprn.cxx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/vcl/aqua/source/gdi/salprn.cxx b/vcl/aqua/source/gdi/salprn.cxx index a0062834e269..5db6ad30bb8b 100644 --- a/vcl/aqua/source/gdi/salprn.cxx +++ b/vcl/aqua/source/gdi/salprn.cxx @@ -127,20 +127,27 @@ void AquaSalInfoPrinter::SetupPrinterGraphics( CGContextRef i_rContext ) const NSRect aImageRect = [mpPrintInfo imageablePageBounds]; if( mePageOrientation == ORIENTATION_PORTRAIT ) { + // move mirrored CTM back into paper double dX = 0, dY = aPaperSize.height; + // move CTM to reflect imageable area dX += aImageRect.origin.x; dY -= aPaperSize.height - aImageRect.size.height - aImageRect.origin.y; CGContextTranslateCTM( i_rContext, dX + mnStartPageOffsetX, dY - mnStartPageOffsetY ); + // scale to be top/down and reflect our "virtual" DPI CGContextScaleCTM( i_rContext, 0.1, -0.1 ); } else { + // move CTM to reflect imageable area + double dX = aImageRect.origin.x, dY = aPaperSize.height - aImageRect.size.height - aImageRect.origin.y; + CGContextTranslateCTM( i_rContext, -dX, -dY ); + // turn by 90 degree CGContextRotateCTM( i_rContext, M_PI/2 ); - double dX = aPaperSize.height, dY = -aPaperSize.width; - dY += aPaperSize.height - aImageRect.size.height - aImageRect.origin.y; - dX -= aImageRect.origin.x; - + // move turned CTM back into paper + dX = aPaperSize.height; + dY = -aPaperSize.width; CGContextTranslateCTM( i_rContext, dX + mnStartPageOffsetY, dY - mnStartPageOffsetX ); + // scale to be top/down and reflect our "virtual" DPI CGContextScaleCTM( i_rContext, -0.1, 0.1 ); } mpGraphics->SetPrinterGraphics( i_rContext, nDPIX, nDPIY, 1.0 ); -- cgit v1.2.3 From 54e28ede40c3a5b749946fbfeefa23d1791a5e73 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Thu, 16 Jul 2009 16:59:45 +0000 Subject: CWS-TOOLING: integrate CWS mav53_DEV300 2009-06-29 13:42:56 +0200 hbrinkm r273471 : #i101593# switched off optimization in table layout, that caused frames to be layouted incorrectly 2009-06-25 12:29:11 +0200 cd r273376 : #i101774# Don't rely on initialize call for VistaFilePicker 2009-06-25 11:48:33 +0200 tl r273373 : #i101420# Gnome accessibility fix 2009-06-24 18:16:49 +0200 od r273361 : #i97309 method - export text:start-value at correct list item. 2009-06-23 14:11:44 +0200 b_michaelsen r273281 : #i103032#: cutting of URL-parameters for usage tracking 2009-06-22 11:49:12 +0200 b_michaelsen r273207 : #i102805#: Added usage tracking to SfxToolboxControl 2009-06-22 11:46:00 +0200 b_michaelsen r273205 : whitespace fixes 2009-06-05 14:21:12 +0200 mav r272683 : #i101741# check the file date only in document file locking context --- comphelper/source/misc/uieventslogger.cxx | 3 ++- svtools/source/contnr/fileview.cxx | 5 +++- svtools/source/contnr/svtabbx.cxx | 41 +++++++++++++++++++------------ 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/comphelper/source/misc/uieventslogger.cxx b/comphelper/source/misc/uieventslogger.cxx index 3ff875a4e67d..a55d5b58854d 100644 --- a/comphelper/source/misc/uieventslogger.cxx +++ b/comphelper/source/misc/uieventslogger.cxx @@ -375,9 +375,10 @@ namespace comphelper } else logdata[2] = UNKNOWN_ORIGIN; - logdata[3] = url.Complete; if(url.Complete.match(URL_FILE)) logdata[3] = URL_FILE; + else + logdata[3] = url.Main; m_Logger->log(LogLevel::INFO, m_Formatter->formatMultiColumn(logdata)); m_SessionLogEventCount++; } diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx index d56c270fd5a8..274557051c27 100644 --- a/svtools/source/contnr/fileview.cxx +++ b/svtools/source/contnr/fileview.cxx @@ -1065,7 +1065,10 @@ BOOL ViewTabListBox_Impl::DoubleClickHdl() ::rtl::OUString sRet = SvHeaderTabListBox::GetAccessibleObjectDescription( _eType, _nPos ); if ( ::svt::BBTYPE_TABLECELL == _eType ) { - sal_Int32 nRow = _nPos / GetColumnCount(); + sal_Int32 nRow = -1; + const sal_uInt16 nColumnCount = GetColumnCount(); + if (nColumnCount > 0) + nRow = _nPos / nColumnCount; SvLBoxEntry* pEntry = GetEntry( nRow ); if ( pEntry ) { diff --git a/svtools/source/contnr/svtabbx.cxx b/svtools/source/contnr/svtabbx.cxx index 32e8e68facb1..fc02c85dfd25 100644 --- a/svtools/source/contnr/svtabbx.cxx +++ b/svtools/source/contnr/svtabbx.cxx @@ -980,10 +980,12 @@ Reference< XAccessible > SvHeaderTabListBox::CreateAccessibleCell( sal_Int32 _nR if ( !AreChildrenTransient() ) { + const sal_uInt16 nColumnCount = GetColumnCount(); + // first call? -> initial list if ( m_aAccessibleChildren.empty() ) { - sal_Int32 nCount = ( GetRowCount() + 1 ) * GetColumnCount(); + sal_Int32 nCount = ( GetRowCount() + 1 ) * nColumnCount; m_aAccessibleChildren.assign( nCount, Reference< XAccessible >() ); } @@ -1021,8 +1023,9 @@ Reference< XAccessible > SvHeaderTabListBox::CreateAccessibleColumnHeader( sal_u // first call? -> initial list if ( m_aAccessibleChildren.empty() ) { - sal_Int32 nCount = AreChildrenTransient() ? GetColumnCount() - : ( GetRowCount() + 1 ) * GetColumnCount(); + const sal_uInt16 nColumnCount = GetColumnCount(); + sal_Int32 nCount = AreChildrenTransient() ? + nColumnCount : ( GetRowCount() + 1 ) * nColumnCount; m_aAccessibleChildren.assign( nCount, Reference< XAccessible >() ); } @@ -1098,9 +1101,12 @@ sal_Bool SvHeaderTabListBox::ConvertPointToColumnHeader( sal_uInt16&, const Poin if ( _nPos >= 0 ) { sal_uInt16 nColumnCount = GetColumnCount(); - sal_Int32 nRow = _nPos / nColumnCount; - sal_uInt16 nColumn = static_cast< sal_uInt16 >( _nPos % nColumnCount ); - aRetText = GetCellText( nRow, nColumn ); + if (nColumnCount > 0) + { + sal_Int32 nRow = _nPos / nColumnCount; + sal_uInt16 nColumn = static_cast< sal_uInt16 >( _nPos % nColumnCount ); + aRetText = GetCellText( nRow, nColumn ); + } } break; } @@ -1135,16 +1141,19 @@ sal_Bool SvHeaderTabListBox::ConvertPointToColumnHeader( sal_uInt16&, const Poin static const String sVar2( RTL_CONSTASCII_USTRINGPARAM( "%2" ) ); sal_uInt16 nColumnCount = GetColumnCount(); - sal_Int32 nRow = _nPos / nColumnCount; - sal_uInt16 nColumn = static_cast< sal_uInt16 >( _nPos % nColumnCount ); - - String aText( SvtResId( STR_SVT_ACC_DESC_TABLISTBOX ) ); - aText.SearchAndReplace( sVar1, String::CreateFromInt32( nRow ) ); - String sColHeader = m_pImpl->m_pHeaderBar->GetItemText( m_pImpl->m_pHeaderBar->GetItemId( nColumn ) ); - if ( sColHeader.Len() == 0 ) - sColHeader = String::CreateFromInt32( nColumn ); - aText.SearchAndReplace( sVar2, sColHeader ); - aRetText = aText; + if (nColumnCount > 0) + { + sal_Int32 nRow = _nPos / nColumnCount; + sal_uInt16 nColumn = static_cast< sal_uInt16 >( _nPos % nColumnCount ); + + String aText( SvtResId( STR_SVT_ACC_DESC_TABLISTBOX ) ); + aText.SearchAndReplace( sVar1, String::CreateFromInt32( nRow ) ); + String sColHeader = m_pImpl->m_pHeaderBar->GetItemText( m_pImpl->m_pHeaderBar->GetItemId( nColumn ) ); + if ( sColHeader.Len() == 0 ) + sColHeader = String::CreateFromInt32( nColumn ); + aText.SearchAndReplace( sVar2, sColHeader ); + aRetText = aText; + } } return aRetText; -- cgit v1.2.3 From 4b4c5570a0ebc8d24515fad9350190e542c88be6 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Thu, 23 Jul 2009 08:50:41 +0000 Subject: #i10000# #i103730# ooo vs. so env fix --- transex3/scripts/localize.pl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/transex3/scripts/localize.pl b/transex3/scripts/localize.pl index 5fd591fc4e7e..10e8124027b1 100755 --- a/transex3/scripts/localize.pl +++ b/transex3/scripts/localize.pl @@ -103,7 +103,15 @@ if ( defined $ENV{USE_SHELL} && $ENV{USE_SHELL} eq '4nt' ) { $DELIMITER = "/"; } -my $binpath = $ENV{SOLARVER}.$DELIMITER.$ENV{INPATH}.$DELIMITER."bin".$ENV{UPDMINOREXT}.$DELIMITER ; +my $binpath = ''; +if( defined $ENV{UPDMINOREXT} ) +{ + $binpath = $ENV{SOLARVER}.$DELIMITER.$ENV{INPATH}.$DELIMITER."bin".$ENV{UPDMINOREXT}.$DELIMITER ; +} +else +{ + $binpath = $ENV{SOLARVER}.$DELIMITER.$ENV{INPATH}.$DELIMITER."bin".$DELIMITER ; +} #%sl_modules = fetch_sourcelanguage_dirlist(); -- cgit v1.2.3 From 0cc253983c0a3507326cc0f7f81510d754848562 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Fri, 24 Jul 2009 15:45:35 +0000 Subject: CWS-TOOLING: integrate CWS vcl103 2009-07-24 Jens-Heiner Rechtien #i10000#: merge with m53 2009-07-10 Philipp Lohmann merge 2009-07-10 hdu #i103417# ignore non-standard font styles 2009-07-07 Philipp Lohmann #i98789# add: Invalidate on StateChanged( STATE_CHANGE_ENABLE ) 2009-07-07 Philipp Lohmann #i102501# ExportFormFields should be persistent 2009-07-07 Philipp Lohmann merge 2009-07-07 Philipp Lohmann #i103319# there is no platform currently where we should beep on disabled controls 2009-07-02 Philipp Lohmann merge 2009-07-01 Philipp Lohmann #i93100# handle ListBox with no border a little more graceful on MacOSX 2009-07-01 Philipp Lohmann #i101307# don't crash due to unfortunate timing 2009-07-03 thb #i103145# Swapped HINT_DOCK for HINT_TOOLBAR for the presentation fullscreen window; anecdotal evidence suggests it works much better then for wide-spread window managers 2009-06-30 Philipp Lohmann #i103102# evaluate Cmd-Option key combinations 2009-06-29 Philipp Lohmann #i103148# catch exception from missing UCB (thanks thb) 2009-06-29 hdu #i102378# fix PDF-export on PPC (thanks cloph!) 2009-06-25 Philipp Lohmann fix another link problem 2009-06-24 Philipp Lohmann use correct method signature 2009-06-24 Philipp Lohmann fix a warning 2009-06-24 Philipp Lohmann fix a warning 2009-06-24 Philipp Lohmann #i100357# add: GDIMetaFile::GetBoundRect 2009-06-24 Philipp Lohmann merge 2009-06-24 hdu #i100357# extend GetTextBoundRect() to measure justified text too 2009-06-23 Philipp Lohmann #i101108# protect writer from itself, no one could ever use paper of size (0,0) 2009-06-22 Philipp Lohmann merge 2009-06-22 Philipp Lohmann #i92356# treat windows running a popup menu as modal 2009-06-22 hdu #i100000# remove sft.h again (CWS dba32b accidentially reintroduced it) 2009-06-17 Philipp Lohmann merge 2009-06-17 Philipp Lohmann remove warnings (thanks ericb) 2009-06-17 Philipp Lohmann merge 2009-06-17 Philipp Lohmann #i102133# free cursors (thanks cmc) 2009-06-17 Philipp Lohmann #i97293# catch exception 2009-06-17 Philipp Lohmann #i91240# fix images in menus, again 2009-06-15 Philipp Lohmann #i100586# fix a pure virtual method (thanks cmc) 2009-06-15 Philipp Lohmann fix an array delete issue 2009-06-15 Philipp Lohmann #i102228# fix a cleanup issue 2009-06-15 Philipp Lohmann #i97218# solve duplicate accelerator 2009-06-12 hdu #i102219# avoid void*->oslGenericFunction cast for MingW (thanks tono!) --- dtrans/source/X11/X11_selection.cxx | 9 + dtrans/source/aqua/DropTarget.cxx | 12 +- dtrans/source/aqua/aqua_clipboard.cxx | 9 +- svtools/inc/svtools/svlbox.hxx | 3 + svtools/source/contnr/svlbox.cxx | 6 + vcl/aqua/inc/vclnsapp.h | 1 - .../source/a11y/aqua11ytextattributeswrapper.mm | 2 + vcl/aqua/source/a11y/aqua11yutil.mm | 2 +- vcl/aqua/source/a11y/aqua11ywrapper.mm | 8 +- vcl/aqua/source/app/saldata.cxx | 2 +- vcl/aqua/source/app/salinst.cxx | 16 +- vcl/aqua/source/app/salsys.cxx | 8 +- vcl/aqua/source/app/vclnsapp.mm | 73 +-- vcl/aqua/source/gdi/aquaprintview.mm | 5 +- vcl/aqua/source/gdi/salatslayout.cxx | 4 +- vcl/aqua/source/gdi/salgdiutils.cxx | 9 +- vcl/aqua/source/gdi/salnativewidgets.cxx | 8 +- vcl/aqua/source/gdi/salprn.cxx | 8 +- vcl/aqua/source/gdi/salvd.cxx | 4 +- vcl/aqua/source/window/salframe.cxx | 14 +- vcl/aqua/source/window/salframeview.mm | 10 + vcl/aqua/source/window/salmenu.cxx | 12 +- vcl/inc/sft.h | 641 --------------------- vcl/inc/vcl/gdimtf.hxx | 8 + vcl/inc/vcl/outdev.hxx | 10 +- vcl/inc/vcl/sndstyle.hxx | 2 +- vcl/source/app/dbggui.cxx | 2 +- vcl/source/control/lstbox.cxx | 62 +- vcl/source/fontsubset/sft.cxx | 2 +- vcl/source/gdi/gdimtf.cxx | 430 ++++++++++++++ vcl/source/gdi/makefile.mk | 1 + vcl/source/gdi/outdev3.cxx | 17 +- vcl/source/window/menu.cxx | 13 +- vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx | 4 + vcl/unx/gtk/window/gtkframe.cxx | 2 +- vcl/unx/source/window/salframe.cxx | 28 +- vcl/win/source/window/salframe.cxx | 10 +- 37 files changed, 671 insertions(+), 786 deletions(-) delete mode 100644 vcl/inc/sft.h diff --git a/dtrans/source/X11/X11_selection.cxx b/dtrans/source/X11/X11_selection.cxx index affc92e98908..21030a220917 100644 --- a/dtrans/source/X11/X11_selection.cxx +++ b/dtrans/source/X11/X11_selection.cxx @@ -515,6 +515,15 @@ SelectionManager::~SelectionManager() // destroy message window if( m_aWindow ) XDestroyWindow( m_pDisplay, m_aWindow ); + // release cursors + if (m_aMoveCursor != None) + XFreeCursor(m_pDisplay, m_aMoveCursor); + if (m_aCopyCursor != None) + XFreeCursor(m_pDisplay, m_aCopyCursor); + if (m_aLinkCursor != None) + XFreeCursor(m_pDisplay, m_aLinkCursor); + if (m_aNoneCursor != None) + XFreeCursor(m_pDisplay, m_aNoneCursor); // paranoia setting, the drag thread should have // done that already diff --git a/dtrans/source/aqua/DropTarget.cxx b/dtrans/source/aqua/DropTarget.cxx index bb45742732e7..6f973d7aa08f 100644 --- a/dtrans/source/aqua/DropTarget.cxx +++ b/dtrans/source/aqua/DropTarget.cxx @@ -245,8 +245,8 @@ NSDragOperation DropTarget::draggingEntered(id sender) CocoaToVCL(dragLocation, bounds); - sal_Int32 posX = dragLocation.x; - sal_Int32 posY = dragLocation.y; + sal_Int32 posX = static_cast(dragLocation.x); + sal_Int32 posY = static_cast(dragLocation.y); NSPasteboard* dragPboard = [sender draggingPasteboard]; mXCurrentDragClipboard = new AquaClipboard(mXComponentContext, dragPboard, false); @@ -284,8 +284,8 @@ NSDragOperation DropTarget::draggingUpdated(id sender) CocoaToVCL(dragLocation, bounds); - sal_Int32 posX = dragLocation.x; - sal_Int32 posY = dragLocation.y; + sal_Int32 posX = static_cast(dragLocation.x); + sal_Int32 posY = static_cast(dragLocation.y); DropTargetDragEvent dtde(static_cast(this), 0, @@ -350,8 +350,8 @@ MacOSBOOL DropTarget::performDragOperation(id sender) CocoaToVCL(dragLocation, bounds); - sal_Int32 posX = dragLocation.x; - sal_Int32 posY = dragLocation.y; + sal_Int32 posX = static_cast(dragLocation.x); + sal_Int32 posY = static_cast(dragLocation.y); DropTargetDropEvent dtde(static_cast(this), 0, diff --git a/dtrans/source/aqua/aqua_clipboard.cxx b/dtrans/source/aqua/aqua_clipboard.cxx index d0b821099ea0..370edee90eb7 100644 --- a/dtrans/source/aqua/aqua_clipboard.cxx +++ b/dtrans/source/aqua/aqua_clipboard.cxx @@ -323,8 +323,13 @@ void AquaClipboard::fireLostClipboardOwnershipEvent(Reference o void AquaClipboard::provideDataForType(NSPasteboard* sender, NSString* type) { DataProviderPtr_t dp = mpDataFlavorMapper->getDataProvider(type, mXClipboardContent); - NSData* pBoardData = (NSData*)dp->getSystemData(); - [sender setData: pBoardData forType: type]; + NSData* pBoardData = NULL; + + if (dp.get() != NULL) + { + pBoardData = (NSData*)dp->getSystemData(); + [sender setData: pBoardData forType: type]; + } } diff --git a/svtools/inc/svtools/svlbox.hxx b/svtools/inc/svtools/svlbox.hxx index ba119263eff8..7371c2feee05 100644 --- a/svtools/inc/svtools/svlbox.hxx +++ b/svtools/inc/svtools/svlbox.hxx @@ -328,6 +328,9 @@ protected: // wird an der Target-View aufgerufen (im Drop-Handler) virtual void ReadDragServerInfo( const Point&,SvLBoxDDInfo* ); + // invalidate children on enable/disable + virtual void StateChanged( StateChangedType ); + virtual ULONG Insert( SvLBoxEntry* pEnt,SvLBoxEntry* pPar,ULONG nPos=LIST_APPEND); virtual ULONG Insert( SvLBoxEntry* pEntry,ULONG nRootPos = LIST_APPEND ); void InsertTree( SvLBoxEntry* pTree, SvLBoxEntry* pTarget) {pModel->InsertTree( pTree, pTarget ); } diff --git a/svtools/source/contnr/svlbox.cxx b/svtools/source/contnr/svlbox.cxx index 1c81343cd84f..e56db398b8fb 100644 --- a/svtools/source/contnr/svlbox.cxx +++ b/svtools/source/contnr/svlbox.cxx @@ -1203,6 +1203,12 @@ void SvLBox::ViewDataInitialized( SvLBoxEntry* ) DBG_CHKTHIS(SvLBox,0); } +void SvLBox::StateChanged( StateChangedType eType ) +{ + if( eType == STATE_CHANGE_ENABLE ) + Invalidate( INVALIDATE_CHILDREN ); + Control::StateChanged( eType ); +} void SvLBox::ImplShowTargetEmphasis( SvLBoxEntry* pEntry, BOOL bShow) { diff --git a/vcl/aqua/inc/vclnsapp.h b/vcl/aqua/inc/vclnsapp.h index a5c339c238bd..fc637ff75a31 100755 --- a/vcl/aqua/inc/vclnsapp.h +++ b/vcl/aqua/inc/vclnsapp.h @@ -59,7 +59,6 @@ -(void)scrollbarSettingsChanged: (NSNotification*) pNotification; -(void)addFallbackMenuItem: (NSMenuItem*)pNewItem; -(void)removeFallbackMenuItem: (NSMenuItem*)pOldItem; --(void)getSystemVersionMajor:(unsigned *)major minor:(unsigned *)minor bugFix:(unsigned *)bugFix; -(void)addDockMenuItem: (NSMenuItem*)pNewItem; -(void)applicationWillBecomeActive: (NSNotification *)pNotification; -(void)applicationWillResignActive: (NSNotification *)pNotification; diff --git a/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm b/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm index 53472e6ae34d..e521e7362323 100644 --- a/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm +++ b/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm @@ -249,6 +249,8 @@ using namespace ::rtl; // empty } catch ( IndexOutOfBoundsException & e ) { // empty + } catch ( RuntimeException& ) { + // at least don't crash } return string; } diff --git a/vcl/aqua/source/a11y/aqua11yutil.mm b/vcl/aqua/source/a11y/aqua11yutil.mm index 6d12fbee7a91..44f95169ca68 100644 --- a/vcl/aqua/source/a11y/aqua11yutil.mm +++ b/vcl/aqua/source/a11y/aqua11yutil.mm @@ -51,7 +51,7 @@ using namespace ::com::sun::star::awt; +(Point)nsPointToVclPoint:(NSValue *)nsPoint { // VCL coordinates are in upper-left-notation, Cocoa likes it the Cartesian way (lower-left) NSRect screenRect = [ [ NSScreen mainScreen ] frame ]; - return Point ( [ nsPoint pointValue ].x, screenRect.size.height - [ nsPoint pointValue ].y ); + return Point ( static_cast([ nsPoint pointValue ].x), static_cast(screenRect.size.height - [ nsPoint pointValue ].y) ); } @end diff --git a/vcl/aqua/source/a11y/aqua11ywrapper.mm b/vcl/aqua/source/a11y/aqua11ywrapper.mm index d6f99c7020d6..99bcbd20f698 100644 --- a/vcl/aqua/source/a11y/aqua11ywrapper.mm +++ b/vcl/aqua/source/a11y/aqua11ywrapper.mm @@ -728,9 +728,15 @@ static MacOSBOOL isPopupMenuOpen = NO; if ( nativeSubrole != nil && ! [ nativeSubrole isEqualToString: @"" ] ) { [ attributeNames addObject: NSAccessibilitySubroleAttribute ]; } + try + { if ( [ self accessibleContext ] -> getAccessibleChildCount() > 0 ) { [ attributeNames addObject: NSAccessibilityChildrenAttribute ]; } + } + catch( DisposedException& ) {} + catch( RuntimeException& ) {} + if ( title != nil && ! [ title isEqualToString: @"" ] ) { [ attributeNames addObject: NSAccessibilityTitleAttribute ]; } @@ -986,7 +992,7 @@ Reference < XAccessibleContext > hitTestRunner ( Point point, Reference < XAcces } Reference < XAccessibleContext > hitChild; NSRect screenRect = [ [ NSScreen mainScreen ] frame ]; - Point hitPoint ( point.x , screenRect.size.height - point.y ); + Point hitPoint ( static_cast(point.x) , static_cast(screenRect.size.height - point.y) ); // check child windows first NSWindow * window = (NSWindow *) [ self accessibilityAttributeValue: NSAccessibilityWindowAttribute ]; NSArray * childWindows = [ window childWindows ]; diff --git a/vcl/aqua/source/app/saldata.cxx b/vcl/aqua/source/app/saldata.cxx index a70854306122..180f6a106459 100644 --- a/vcl/aqua/source/app/saldata.cxx +++ b/vcl/aqua/source/app/saldata.cxx @@ -93,7 +93,7 @@ SalData::~SalData() } osl_destroyThreadKey( s_aAutoReleaseKey ); - s_aAutoReleaseKey = NULL; + s_aAutoReleaseKey = 0; } if ( mpMainController ) [mpMainController release]; diff --git a/vcl/aqua/source/app/salinst.cxx b/vcl/aqua/source/app/salinst.cxx index b9d66d1e02d3..71bfb7953187 100644 --- a/vcl/aqua/source/app/salinst.cxx +++ b/vcl/aqua/source/app/salinst.cxx @@ -140,10 +140,6 @@ bool AquaSalInstance::isOnCommandLine( const rtl::OUString& rArg ) // returns an NSAutoreleasePool that must be released when the event loop begins static void initNSApp() { - SInt32 major = NULL; - SInt32 minor = NULL; - SInt32 bugFix = NULL; - // create our cocoa NSApplication [VCL_NSApplication sharedApplication]; @@ -176,7 +172,17 @@ static void initNSApp() object: nil ]; // get System Version and store the value in GetSalData()->mnSystemVersion - [NSApp getSystemVersionMajor: (unsigned int *)major minor:(unsigned int *)minor bugFix:(unsigned int *)bugFix ]; + OSErr err = noErr; + SInt32 systemVersion = VER_TIGER; // Initialize with minimal requirement + if( (err = Gestalt(gestaltSystemVersion, &systemVersion)) == noErr ) + { + GetSalData()->mnSystemVersion = systemVersion; +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "System Version %x\n", (unsigned int)systemVersion); +#endif + } + else + NSLog(@"Unable to obtain system version: %ld", (long)err); // Initialize Apple Remote GetSalData()->mpMainController = [[MainController alloc] init]; diff --git a/vcl/aqua/source/app/salsys.cxx b/vcl/aqua/source/app/salsys.cxx index 28acb47ccade..78b5defe6dd9 100644 --- a/vcl/aqua/source/app/salsys.cxx +++ b/vcl/aqua/source/app/salsys.cxx @@ -75,8 +75,8 @@ Rectangle AquaSalSystem::GetDisplayScreenPosSizePixel( unsigned int nScreen ) if( pScreen ) { NSRect aFrame = [pScreen frame]; - aRet = Rectangle( Point( aFrame.origin.x, aFrame.origin.y ), - Size( aFrame.size.width, aFrame.size.height ) ); + aRet = Rectangle( Point( static_cast(aFrame.origin.x), static_cast(aFrame.origin.y) ), + Size( static_cast(aFrame.size.width), static_cast(aFrame.size.height) ) ); } return aRet; } @@ -94,8 +94,8 @@ Rectangle AquaSalSystem::GetDisplayWorkAreaPosSizePixel( unsigned int nScreen ) if( pScreen ) { NSRect aFrame = [pScreen visibleFrame]; - aRet = Rectangle( Point( aFrame.origin.x, aFrame.origin.y ), - Size( aFrame.size.width, aFrame.size.height ) ); + aRet = Rectangle( Point( static_cast(aFrame.origin.x), static_cast(aFrame.origin.y) ), + Size( static_cast(aFrame.size.width), static_cast(aFrame.size.height) ) ); } return aRet; } diff --git a/vcl/aqua/source/app/vclnsapp.mm b/vcl/aqua/source/app/vclnsapp.mm index 4ad5e7ff9271..43d44c709c12 100755 --- a/vcl/aqua/source/app/vclnsapp.mm +++ b/vcl/aqua/source/app/vclnsapp.mm @@ -105,44 +105,33 @@ } } - /* #i89611# - Cmd-Option-Space is for some reason not consumed by the menubar, - but also not by the input method (like e.g. Cmd-Space) and stays - without function. - - However MOD1 + MOD2 combinations are not used throughout OOo code - since they tend to clash with system shortcuts on all platforms so - we can skip this case here. - */ // get information whether the event was handled; keyDown returns nothing GetSalData()->maKeyEventAnswer[ pEvent ] = false; bool bHandled = false; - if( nModMask != (NSCommandKeyMask | NSAlternateKeyMask) ) + // dispatch to view directly to avoid the key event being consumed by the menubar + // popup windows do not get the focus, so they don't get these either + // simplest would be dispatch this to the key window always if it is without parent + // however e.g. in document we want the menu shortcut if e.g. the stylist has focus + if( pFrame->mpParent && (pFrame->mnStyle & SAL_FRAME_STYLE_FLOAT) == 0 ) { - // dispatch to view directly to avoid the key event being consumed by the menubar - // popup windows do not get the focus, so they don't get these either - // simplest would be dispatch this to the key window always if it is without parent - // however e.g. in document we want the menu shortcut if e.g. the stylist has focus - if( pFrame->mpParent && (pFrame->mnStyle & SAL_FRAME_STYLE_FLOAT) == 0 ) - { - [[pKeyWin contentView] keyDown: pEvent]; - bHandled = GetSalData()->maKeyEventAnswer[ pEvent ]; - } - - // see whether the main menu consumes this event - // if not, we want to dispatch it ourselves. Unless we do this "trick" - // the main menu just beeps for an unknown or disabled key equivalent - // and swallows the event wholesale - NSMenu* pMainMenu = [NSApp mainMenu]; - if( ! bHandled && (pMainMenu == 0 || ! [pMainMenu performKeyEquivalent: pEvent]) ) - { - [[pKeyWin contentView] keyDown: pEvent]; - bHandled = GetSalData()->maKeyEventAnswer[ pEvent ]; - } - else - bHandled = true; // event handled already or main menu just handled it + [[pKeyWin contentView] keyDown: pEvent]; + bHandled = GetSalData()->maKeyEventAnswer[ pEvent ]; + } + + // see whether the main menu consumes this event + // if not, we want to dispatch it ourselves. Unless we do this "trick" + // the main menu just beeps for an unknown or disabled key equivalent + // and swallows the event wholesale + NSMenu* pMainMenu = [NSApp mainMenu]; + if( ! bHandled && (pMainMenu == 0 || ! [pMainMenu performKeyEquivalent: pEvent]) ) + { + [[pKeyWin contentView] keyDown: pEvent]; + bHandled = GetSalData()->maKeyEventAnswer[ pEvent ]; } + else + bHandled = true; // event handled already or main menu just handled it + GetSalData()->maKeyEventAnswer.erase( pEvent ); if( bHandled ) return; @@ -374,26 +363,6 @@ AquaSalMenu::removeFallbackMenuItem( pItem ); } -- (void)getSystemVersionMajor:(unsigned *)major - minor:(unsigned *)minor - bugFix:(unsigned *)bugFix -{ - OSErr err; - SInt32 systemVersion = VER_TIGER; // Initialize with minimal requirement - if ((err = Gestalt(gestaltSystemVersion, &systemVersion)) == noErr) - { - GetSalData()->mnSystemVersion = systemVersion; -#if OSL_DEBUG_LEVEL > 1 - fprintf( stderr, "System Version %x\n", (unsigned int)systemVersion); - fprintf( stderr, "Stored System Version %x\n", (unsigned int)GetSalData()->mnSystemVersion); -#endif - } - else - NSLog(@"Unable to obtain system version: %ld", (long)err); - - return; -} - -(void)addDockMenuItem: (NSMenuItem*)pNewItem { NSMenu* pDock = AquaSalInstance::GetDynamicDockMenu(); diff --git a/vcl/aqua/source/gdi/aquaprintview.mm b/vcl/aqua/source/gdi/aquaprintview.mm index 6099fbaed741..ba139da5f5a4 100755 --- a/vcl/aqua/source/gdi/aquaprintview.mm +++ b/vcl/aqua/source/gdi/aquaprintview.mm @@ -58,6 +58,9 @@ { NSSize aPaperSize = [mpInfoPrinter->getPrintInfo() paperSize]; int nWidth = (int)aPaperSize.width; + // #i101108# sanity check + if( nWidth < 1 ) + nWidth = 1; NSRect aRect = { { page % nWidth, page / nWidth }, aPaperSize }; return aRect; } @@ -71,7 +74,7 @@ -(void)drawRect: (NSRect)rect { NSPoint aPoint = [self locationOfPrintRect: rect]; - mpInfoPrinter->setStartPageOffset( rect.origin.x, rect.origin.y ); + mpInfoPrinter->setStartPageOffset( static_cast(rect.origin.x), static_cast(rect.origin.y) ); NSSize aPaperSize = [mpInfoPrinter->getPrintInfo() paperSize]; int nPage = (int)(aPaperSize.width * rect.origin.y + rect.origin.x); diff --git a/vcl/aqua/source/gdi/salatslayout.cxx b/vcl/aqua/source/gdi/salatslayout.cxx index 98700feba39d..cec842739de3 100755 --- a/vcl/aqua/source/gdi/salatslayout.cxx +++ b/vcl/aqua/source/gdi/salatslayout.cxx @@ -431,8 +431,8 @@ void ATSLayout::DrawText( SalGraphics& rGraphics ) const if( rAquaGraphics.mnATSUIRotation != 0 ) { const double fRadians = rAquaGraphics.mnATSUIRotation * (M_PI/0xB40000); - nXOfsFixed = +rSubPortion.mnXOffset * cos( fRadians ); - nYOfsFixed = +rSubPortion.mnXOffset * sin( fRadians ); + nXOfsFixed = static_cast(static_cast(+rSubPortion.mnXOffset) * cos( fRadians )); + nYOfsFixed = static_cast(static_cast(+rSubPortion.mnXOffset) * sin( fRadians )); } // draw sub-portions diff --git a/vcl/aqua/source/gdi/salgdiutils.cxx b/vcl/aqua/source/gdi/salgdiutils.cxx index 066268791b11..99a1629006d2 100755 --- a/vcl/aqua/source/gdi/salgdiutils.cxx +++ b/vcl/aqua/source/gdi/salgdiutils.cxx @@ -102,8 +102,8 @@ void AquaSalGraphics::SetVirDevGraphics( CGLayerRef xLayer, CGContextRef xContex else { const CGSize aSize = CGLayerGetSize( mxLayer ); - mnWidth = aSize.width; - mnHeight = aSize.height; + mnWidth = static_cast(aSize.width); + mnHeight = static_cast(aSize.height); } // prepare graphics for drawing @@ -219,7 +219,10 @@ void AquaSalGraphics::RefreshRect(float lX, float lY, float lWidth, float lHeigh { // update a little more around the designated rectangle // this helps with antialiased rendering - const Rectangle aVclRect( Point( lX-1, lY-1 ), Size( lWidth+2, lHeight+2) ); + const Rectangle aVclRect(Point(static_cast(lX-1), + static_cast(lY-1) ), + Size( static_cast(lWidth+2), + static_cast(lHeight+2) ) ); mpFrame->maInvalidRect.Union( aVclRect ); } } diff --git a/vcl/aqua/source/gdi/salnativewidgets.cxx b/vcl/aqua/source/gdi/salnativewidgets.cxx index 9f2c7c4fa3a7..6cd4e78a2d1a 100644 --- a/vcl/aqua/source/gdi/salnativewidgets.cxx +++ b/vcl/aqua/source/gdi/salnativewidgets.cxx @@ -612,7 +612,7 @@ BOOL AquaSalGraphics::drawNativeControl(ControlType nType, aPushInfo.animation.time.start = 0; aPushInfo.animation.time.current = 0; PushButtonValue* pPBVal = (PushButtonValue*)aValue.getOptionalVal(); - int nPaintHeight = rc.size.height; + int nPaintHeight = static_cast(rc.size.height); if( pPBVal && pPBVal->mbBevelButton ) { @@ -1162,8 +1162,10 @@ BOOL AquaSalGraphics::drawNativeControl(ControlType nType, if( mxClipPath ) aRect = CGPathGetBoundingBox( mxClipPath ); if( aRect.size.width != 0 && aRect.size.height != 0 ) - buttonRect.Intersection( Rectangle( Point( aRect.origin.x, aRect.origin.y ), - Size( aRect.size.width, aRect.size.height ) ) ); + buttonRect.Intersection( Rectangle( Point( static_cast(aRect.origin.x), + static_cast(aRect.origin.y) ), + Size( static_cast(aRect.size.width), + static_cast(aRect.size.height) ) ) ); } RefreshRect( buttonRect.Left(), buttonRect.Top(), buttonRect.GetWidth(), buttonRect.GetHeight() ); diff --git a/vcl/aqua/source/gdi/salprn.cxx b/vcl/aqua/source/gdi/salprn.cxx index 5db6ad30bb8b..b9a1f4ef7748 100644 --- a/vcl/aqua/source/gdi/salprn.cxx +++ b/vcl/aqua/source/gdi/salprn.cxx @@ -310,8 +310,12 @@ BOOL AquaSalInfoPrinter::SetData( ULONG i_nFlags, ImplJobSetup* io_pSetupData ) double width = 0, height = 0; if( io_pSetupData->mePaperFormat == PAPER_USER ) { - width = TenMuToPt( io_pSetupData->mnPaperWidth ); - height = TenMuToPt( io_pSetupData->mnPaperHeight ); + // #i101108# sanity check + if( io_pSetupData->mnPaperWidth && io_pSetupData->mnPaperHeight ) + { + width = TenMuToPt( io_pSetupData->mnPaperWidth ); + height = TenMuToPt( io_pSetupData->mnPaperHeight ); + } } else getPaperSize( width, height, io_pSetupData->mePaperFormat ); diff --git a/vcl/aqua/source/gdi/salvd.cxx b/vcl/aqua/source/gdi/salvd.cxx index d7690e4e38bd..4d25d5d8b63b 100644 --- a/vcl/aqua/source/gdi/salvd.cxx +++ b/vcl/aqua/source/gdi/salvd.cxx @@ -228,8 +228,8 @@ void AquaSalVirtualDevice::GetSize( long& rWidth, long& rHeight ) if( mxLayer ) { const CGSize aSize = CGLayerGetSize( mxLayer ); - rWidth = aSize.width; - rHeight = aSize.height; + rWidth = static_cast(aSize.width); + rHeight = static_cast(aSize.height); } else { diff --git a/vcl/aqua/source/window/salframe.cxx b/vcl/aqua/source/window/salframe.cxx index 8c40e1acfe66..9c713ea26a52 100644 --- a/vcl/aqua/source/window/salframe.cxx +++ b/vcl/aqua/source/window/salframe.cxx @@ -1182,7 +1182,7 @@ void AquaSalFrame::UpdateSettings( AllSettings& rSettings ) getAppleScrollBarVariant(); // set scrollbar size - aStyleSettings.SetScrollBarSize( [NSScroller scrollerWidth] ); + aStyleSettings.SetScrollBarSize( static_cast([NSScroller scrollerWidth]) ); // images in menus false for MacOSX aStyleSettings.SetUseImagesInMenus( false ); @@ -1203,7 +1203,15 @@ const SystemEnvData* AquaSalFrame::GetSystemData() const void AquaSalFrame::Beep( SoundType eSoundType ) { - NSBeep(); + switch( eSoundType ) + { + case SOUND_DISABLE: + // don't beep + break; + default: + NSBeep(); + break; + } } // ----------------------------------------------------------------------- @@ -1240,7 +1248,7 @@ void AquaSalFrame::SetPosSize(long nX, long nY, long nWidth, long nHeight, USHOR if( (nFlags & SAL_FRAME_POSSIZE_WIDTH) != 0 ) nX = mpParent->maGeometry.nWidth - nWidth-1 - nX; else - nX = mpParent->maGeometry.nWidth - aContentRect.size.width-1 - nX; + nX = mpParent->maGeometry.nWidth - static_cast( aContentRect.size.width-1) - nX; } NSRect aParentFrameRect = [mpParent->mpWindow frame]; aParentContentRect = [NSWindow contentRectForFrameRect: aParentFrameRect styleMask: mpParent->mnStyleMask]; diff --git a/vcl/aqua/source/window/salframeview.mm b/vcl/aqua/source/window/salframeview.mm index a6213ca7b64d..c7facd8c6c09 100755 --- a/vcl/aqua/source/window/salframeview.mm +++ b/vcl/aqua/source/window/salframeview.mm @@ -841,6 +841,16 @@ private: if( pUnmodifiedString && [pUnmodifiedString length] == 1 ) { + /* #i103102# key events with command and alternate don't make it through + interpretKeyEvents (why ?). Try to dispatch them here first, + if not successful continue normally + */ + if( (mpFrame->mnLastModifierFlags & (NSAlternateKeyMask | NSCommandKeyMask)) + == (NSAlternateKeyMask | NSCommandKeyMask) ) + { + if( [self sendSingleCharacter: mpLastEvent] ) + return YES; + } unichar keyChar = [pUnmodifiedString characterAtIndex: 0]; USHORT nKeyCode = ImplMapCharCode( keyChar ); diff --git a/vcl/aqua/source/window/salmenu.cxx b/vcl/aqua/source/window/salmenu.cxx index 4fafbbdbb4cf..5c838701933c 100644 --- a/vcl/aqua/source/window/salmenu.cxx +++ b/vcl/aqua/source/window/salmenu.cxx @@ -651,11 +651,9 @@ void AquaSalMenu::SetItemImage( unsigned nPos, SalMenuItem* pSMI, const Image& r NSImage* pImage = CreateNSImage( rImage ); + [pSalMenuItem->mpMenuItem setImage: pImage]; if( pImage ) - { - [pSalMenuItem->mpMenuItem setImage: pImage]; [pImage release]; - } } void AquaSalMenu::SetItemText( unsigned i_nPos, SalMenuItem* i_pSalMenuItem, const XubString& i_rText ) @@ -894,7 +892,13 @@ Rectangle AquaSalMenu::GetMenuBarButtonRectPixel( USHORT i_nItemId, SalFrame* i_ aRect.origin.x -= i_pReferenceFrame->maGeometry.nX; aRect.origin.y -= i_pReferenceFrame->maGeometry.nY + aRect.size.height; - return Rectangle( Point( aRect.origin.x, aRect.origin.y ), Size( aRect.size.width, aRect.size.height ) ); + return Rectangle( Point(static_cast(aRect.origin.x), + static_cast(aRect.origin.y) + ), + Size( static_cast(aRect.size.width), + static_cast(aRect.size.height) + ) + ); } // ======================================================================= diff --git a/vcl/inc/sft.h b/vcl/inc/sft.h deleted file mode 100644 index efda0903afc5..000000000000 --- a/vcl/inc/sft.h +++ /dev/null @@ -1,641 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: sft.h,v $ - * $Revision: 1.21 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -/* $Id: sft.h,v 1.21 2008-06-25 14:20:49 kz Exp $ */ - -/** - - * - * @file sft.h - * @brief Sun Font Tools - * @author Alexander Gelfenbain - */ - -/* - * If NO_MAPPERS is defined, MapChar() and MapString() and consequently GetTTSimpleCharMetrics() - * don't get compiled in. This is done to avoid including a large chunk of code (TranslateXY() from - * xlat.c in the projects that don't require it. - * - * If NO_TYPE3 is defined CreateT3FromTTGlyphs() does not get compiled in. - * If NO_TYPE42 is defined Type42-related code is excluded - * If NO_TTCR is defined TrueType creation related code is excluded\ - * If NO_LIST is defined list.h and piblic functions that use it don't get compiled - */ - -/* - * Generated fonts contain an XUID entry in the form of: - * - * 103 0 T C1 N C2 C3 - * - * 103 - Sun's Adobe assigned XUID number. Contact person: Alexander Gelfenbain - * - * T - font type. 0: Type 3, 1: Type 42 - * C1 - CRC-32 of the entire source TrueType font - * N - number of glyphs in the subset - * C2 - CRC-32 of the array of glyph IDs used to generate the subset - * C3 - CRC-32 of the array of encoding numbers used to generate the subset - * - */ - - -#ifndef __SUBFONT_H -#define __SUBFONT_H - -#ifdef UNX -#include -#include -#endif -#include - -#include - -#ifndef NO_LIST -#include "list.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/*@{*/ -#ifndef __cplusplus -#define false 0 /**< standard false value */ -#define true 1 /**< standard true value */ -#endif -/*@}*/ - -/*@{*/ - typedef sal_Int16 F2Dot14; /**< fixed: 2.14 */ - typedef sal_Int32 F16Dot16; /**< fixed: 16.16 */ -/*@}*/ - - typedef struct { - sal_uInt16 s; - sal_uInt16 d; - } sal_uInt16pair; - -/** Return value of OpenTTFont() and CreateT3FromTTGlyphs() */ - enum SFErrCodes { - SF_OK, /**< no error */ - SF_BADFILE, /**< file not found */ - SF_FILEIO, /**< file I/O error */ - SF_MEMORY, /**< memory allocation error */ - SF_GLYPHNUM, /**< incorrect number of glyphs */ - SF_BADARG, /**< incorrect arguments */ - SF_TTFORMAT, /**< incorrect TrueType font format */ - SF_TABLEFORMAT, /**< incorrect format of a TrueType table */ - SF_FONTNO /**< incorrect logical font number of a TTC font */ - }; - -#ifndef FW_THIN /* WIN32 compilation would conflict */ -/** Value of the weight member of the TTGlobalFontInfo struct */ - enum WeightClass { - FW_THIN = 100, /**< Thin */ - FW_EXTRALIGHT = 200, /**< Extra-light (Ultra-light) */ - FW_LIGHT = 300, /**< Light */ - FW_NORMAL = 400, /**< Normal (Regular) */ - FW_MEDIUM = 500, /**< Medium */ - FW_SEMIBOLD = 600, /**< Semi-bold (Demi-bold) */ - FW_BOLD = 700, /**< Bold */ - FW_EXTRABOLD = 800, /**< Extra-bold (Ultra-bold) */ - FW_BLACK = 900 /**< Black (Heavy) */ - }; - -/** Value of the width member of the TTGlobalFontInfo struct */ -#ifndef OS2 - enum WidthClass { - FWIDTH_ULTRA_CONDENSED = 1, /**< 50% of normal */ - FWIDTH_EXTRA_CONDENSED = 2, /**< 62.5% of normal */ - FWIDTH_CONDENSED = 3, /**< 75% of normal */ - FWIDTH_SEMI_CONDENSED = 4, /**< 87.5% of normal */ - FWIDTH_NORMAL = 5, /**< Medium, 100% */ - FWIDTH_SEMI_EXPANDED = 6, /**< 112.5% of normal */ - FWIDTH_EXPANDED = 7, /**< 125% of normal */ - FWIDTH_EXTRA_EXPANDED = 8, /**< 150% of normal */ - FWIDTH_ULTRA_EXPANDED = 9 /**< 200% of normal */ - }; -#endif // OS2 -#endif /* FW_THIN */ - -/** Type of the 'kern' table, stored in _TrueTypeFont::kerntype */ - enum KernType { - KT_NONE = 0, /**< no kern table */ - KT_APPLE_NEW = 1, /**< new Apple kern table */ - KT_MICROSOFT = 2 /**< Microsoft table */ - }; - -/* Composite glyph flags definition */ - enum CompositeFlags { - ARG_1_AND_2_ARE_WORDS = 1, - ARGS_ARE_XY_VALUES = 1<<1, - ROUND_XY_TO_GRID = 1<<2, - WE_HAVE_A_SCALE = 1<<3, - MORE_COMPONENTS = 1<<5, - WE_HAVE_AN_X_AND_Y_SCALE = 1<<6, - WE_HAVE_A_TWO_BY_TWO = 1<<7, - WE_HAVE_INSTRUCTIONS = 1<<8, - USE_MY_METRICS = 1<<9, - OVERLAP_COMPOUND = 1<<10 - }; - -#ifndef NO_TTCR -/** Flags for TrueType generation */ - enum TTCreationFlags { - TTCF_AutoName = 1, /**< Automatically generate a compact 'name' table. - If this flag is not set, name table is generated - either from an array of NameRecord structs passed as - arguments or if the array is NULL, 'name' table - of the generated TrueType file will be a copy - of the name table of the original file. - If this flag is set the array of NameRecord structs - is ignored and a very compact 'name' table is automatically - generated. */ - - TTCF_IncludeOS2 = 2 /** If this flag is set OS/2 table from the original font will be - copied to the subset */ - }; -#endif - - - - -/** Structure used by GetTTSimpleGlyphMetrics() and GetTTSimpleCharMetrics() functions */ - typedef struct { - sal_uInt16 adv; /**< advance width or height */ - sal_Int16 sb; /**< left or top sidebearing */ - } TTSimpleGlyphMetrics; - - - -/** Structure used by the TrueType Creator and GetRawGlyphData() */ - - typedef struct { - sal_uInt32 glyphID; /**< glyph ID */ - sal_uInt16 nbytes; /**< number of bytes in glyph data */ - sal_uInt8 *ptr; /**< pointer to glyph data */ - sal_uInt16 aw; /**< advance width */ - sal_Int16 lsb; /**< left sidebearing */ - sal_uInt16 compflag; /**< 0- if non-composite, 1- otherwise */ - sal_uInt16 npoints; /**< number of points */ - sal_uInt16 ncontours; /**< number of contours */ - /* */ - sal_uInt32 newID; /**< used internally by the TTCR */ - } GlyphData; - -/** Structure used by the TrueType Creator and CreateTTFromTTGlyphs() */ - typedef struct { - sal_uInt16 platformID; /**< Platform ID */ - sal_uInt16 encodingID; /**< Platform-specific encoding ID */ - sal_uInt16 languageID; /**< Language ID */ - sal_uInt16 nameID; /**< Name ID */ - sal_uInt16 slen; /**< String length in bytes */ - sal_uInt8 *sptr; /**< Pointer to string data (not zero-terminated!) */ - } NameRecord; - - - -/** Return value of GetTTGlobalFontInfo() */ - - typedef struct { - char *family; /**< family name */ - sal_uInt16 *ufamily; /**< family name UCS2 */ - char *subfamily; /**< subfamily name */ - sal_uInt16 *usubfamily; /**< subfamily name UCS2 */ - char *psname; /**< PostScript name */ - sal_uInt16 macStyle; /**< macstyle bits from 'HEAD' table */ - int weight; /**< value of WeightClass or 0 if can't be determined */ - int width; /**< value of WidthClass or 0 if can't be determined */ - int pitch; /**< 0: proportianal font, otherwise: monospaced */ - int italicAngle; /**< in counter-clockwise degrees * 65536 */ - int xMin; /**< global bounding box: xMin */ - int yMin; /**< global bounding box: yMin */ - int xMax; /**< global bounding box: xMax */ - int yMax; /**< global bounding box: yMax */ - int ascender; /**< typographic ascent. */ - int descender; /**< typographic descent. */ - int linegap; /**< typographic line gap.\ Negative values are treated as - zero in Win 3.1, System 6 and System 7. */ - int vascent; /**< typographic ascent for vertical writing mode */ - int vdescent; /**< typographic descent for vertical writing mode */ - int typoAscender; /**< OS/2 portable typographic ascender */ - int typoDescender; /**< OS/2 portable typographic descender */ - int typoLineGap; /**< OS/2 portable typographc line gap */ - int winAscent; /**< ascender metric for Windows */ - int winDescent; /**< descender metric for Windows */ - int symbolEncoded; /**< 1: MS symbol encoded 0: not symbol encoded */ - int rangeFlag; /**< if set to 1 Unicode Range flags are applicable */ - sal_uInt32 ur1; /**< bits 0 - 31 of Unicode Range flags */ - sal_uInt32 ur2; /**< bits 32 - 63 of Unicode Range flags */ - sal_uInt32 ur3; /**< bits 64 - 95 of Unicode Range flags */ - sal_uInt32 ur4; /**< bits 96 - 127 of Unicode Range flags */ - sal_uInt8 panose[10]; /**< PANOSE classification number */ - sal_uInt16 typeFlags; /**< type flags (copyright information) */ - } TTGlobalFontInfo; - -/** Structure used by KernGlyphs() */ - typedef struct { - int x; /**< positive: right, negative: left */ - int y; /**< positive: up, negative: down */ - } KernData; - - -/** ControlPoint structure used by GetTTGlyphPoints() */ - typedef struct { - sal_uInt32 flags; /**< 00000000 00000000 e0000000 bbbbbbbb */ - /**< b - byte flags from the glyf array */ - /**< e == 0 - regular point */ - /**< e == 1 - end contour */ - sal_Int16 x; /**< X coordinate in EmSquare units */ - sal_Int16 y; /**< Y coordinate in EmSquare units */ - } ControlPoint; - - typedef struct _TrueTypeFont TrueTypeFont; - -/** - * @defgroup sft Sun Font Tools Exported Functions - */ - - -/** - * Get the number of fonts contained in a TrueType collection - * @param fname - file name - * @return number of fonts or zero, if file is not a TTC file. - * @ingroup sft - */ - int CountTTCFonts(const char* fname); - - -/** - * TrueTypeFont constructor. - * The font file has to be provided as a memory buffer and length - * @param facenum - logical font number within a TTC file. This value is ignored - * for TrueType fonts - * @return value of SFErrCodes enum - * @ingroup sft - */ - int OpenTTFontBuffer(void* pBuffer, sal_uInt32 nLen, sal_uInt32 facenum, TrueTypeFont** ttf); /*FOLD01*/ -#if !defined(WIN32) && !defined(OS2) -/** - * TrueTypeFont constructor. - * Reads the font file and allocates the memory for the structure. - * on WIN32 the font has to be provided as a memory buffer and length - * @param facenum - logical font number within a TTC file. This value is ignored - * for TrueType fonts - * @return value of SFErrCodes enum - * @ingroup sft - */ - int OpenTTFontFile(const char *fname, sal_uInt32 facenum, TrueTypeFont** ttf); -#endif - -/** - * TrueTypeFont destructor. Deallocates the memory. - * @ingroup sft - */ - void CloseTTFont(TrueTypeFont *); - -/** - * Extracts TrueType control points, and stores them in an allocated array pointed to - * by *pointArray. This function returns the number of extracted points. - * - * @param ttf pointer to the TrueTypeFont structure - * @param glyphID Glyph ID - * @param pointArray Return value - address of the pointer to the first element of the array - * of points allocated by the function - * @return Returns the number of points in *pointArray or -1 if glyphID is - * invalid. - * @ingroup sft - * - */ - int GetTTGlyphPoints(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray); - -/** - * Extracts raw glyph data from the 'glyf' table and returns it in an allocated - * GlyphData structure. - * - * @param ttf pointer to the TrueTypeFont structure - * @param glyphID Glyph ID - * - * @return pointer to an allocated GlyphData structure or NULL if - * glyphID is not present in the font - * @ingroup sft - * - */ - GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID); - -#ifndef NO_LIST -/** - * For a specified glyph adds all component glyphs IDs to the list and - * return their number. If the glyph is a single glyph it has one component - * glyph (which is added to the list) and the function returns 1. - * For a composite glyphs it returns the number of component glyphs - * and adds all of them to the list. - * - * @param ttf pointer to the TrueTypeFont structure - * @param glyphID Glyph ID - * @param glyphlist list of glyphs - * - * @return number of component glyphs - * @ingroup sft - * - */ - int GetTTGlyphComponents(TrueTypeFont *ttf, sal_uInt32 glyphID, list glyphlist); -#endif - -/** - * Extracts all Name Records from the font and stores them in an allocated - * array of NameRecord structs - * - * @param ttf pointer to the TrueTypeFont struct - * @param nr pointer to the array of NameRecord structs - * - * @return number of NameRecord structs - * @ingroup sft - */ - - int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr); - -/** - * Deallocates previously allocated array of NameRecords. - * - * @param nr array of NameRecord structs - * @param n number of elements in the array - * - * @ingroup sft - */ - void DisposeNameRecords(NameRecord* nr, int n); - - -#ifndef NO_TYPE3 -/** - * Generates a new PostScript Type 3 font and dumps it to outf file. - * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. - * @param ttf pointer to the TrueTypeFont structure - * @param outf the resulting font is written to this stream - * @param fname font name for the new font. If it is NULL the PostScript name of the - * original font will be used - * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf - * @param encoding array of encoding values. encoding[i] specifies the position of the glyph - * glyphArray[i] in the encoding vector of the resulting Type3 font - * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding - * @param wmode writing mode for the output file: 0 - horizontal, 1 - vertical - * @return return the value of SFErrCodes enum - * @see SFErrCodes - * @ingroup sft - * - */ - int CreateT3FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *fname, sal_uInt16 *glyphArray, sal_uInt8 *encoding, int nGlyphs, int wmode); -#endif - -#ifndef NO_TTCR -/** - * Generates a new TrueType font and dumps it to outf file. - * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. - * @param ttf pointer to the TrueTypeFont structure - * @param fname file name for the output TrueType font file - * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf. The first - * element of this array has to be glyph 0 (default glyph) - * @param encoding array of encoding values. encoding[i] specifies character code for - * the glyphID glyphArray[i]. Character code 0 usually points to a default - * glyph (glyphID 0) - * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding - * @param nNameRecs number of NameRecords for the font, if 0 the name table from the - * original font will be used - * @param nr array of NameRecords - * @param flags or'ed TTCreationFlags - * @return return the value of SFErrCodes enum - * @see SFErrCodes - * @ingroup sft - * - */ - int CreateTTFromTTGlyphs(TrueTypeFont *ttf, - const char *fname, - sal_uInt16 *glyphArray, - sal_uInt8 *encoding, - int nGlyphs, - int nNameRecs, - NameRecord *nr, - sal_uInt32 flags); -#endif - -#ifndef NO_TYPE42 -/** - * Generates a new PostScript Type42 font and dumps it to outf file. - * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. - * @param ttf pointer to the TrueTypeFont structure - * @param outf output stream for a resulting font - * @param psname PostScript name of the resulting font - * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf. The first - * element of this array has to be glyph 0 (default glyph) - * @param encoding array of encoding values. encoding[i] specifies character code for - * the glyphID glyphArray[i]. Character code 0 usually points to a default - * glyph (glyphID 0) - * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding - * @return SF_OK - no errors - * SF_GLYPHNUM - too many glyphs (> 255) - * SF_TTFORMAT - corrupted TrueType fonts - * - * @see SFErrCodes - * @ingroup sft - * - */ - int CreateT42FromTTGlyphs(TrueTypeFont *ttf, - FILE *outf, - const char *psname, - sal_uInt16 *glyphArray, - sal_uInt8 *encoding, - int nGlyphs); -#endif - - -/** - * Queries glyph metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it. - * - * @param ttf pointer to the TrueTypeFont structure - * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf - * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding - * @param mode writing mode: 0 - horizontal, 1 - vertical - * @ingroup sft - * - */ - TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *glyphArray, int nGlyphs, int mode); - -#ifndef NO_MAPPERS -/** - * Queries glyph metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it. - * This function behaves just like GetTTSimpleGlyphMetrics() but it takes a range of Unicode - * characters instead of an array of glyphs. - * - * @param ttf pointer to the TrueTypeFont structure - * @param firstChar Unicode value of the first character in the range - * @param nChars number of Unicode characters in the range - * @param mode writing mode: 0 - horizontal, 1 - vertical - * - * @see GetTTSimpleGlyphMetrics - * @ingroup sft - * - */ - TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont *ttf, sal_uInt16 firstChar, int nChars, int mode); - -/** - * Maps a Unicode (UCS-2) string to a glyph array. Returns the number of glyphs in the array, - * which for TrueType fonts is always the same as the number of input characters. - * - * @param ttf pointer to the TrueTypeFont structure - * @param str pointer to a UCS-2 string - * @param nchars number of characters in str - * @param glyphArray pointer to the glyph array where glyph IDs are to be recorded. - * - * @return MapString() returns -1 if the TrueType font has no usable 'cmap' tables. - * Otherwise it returns the number of characters processed: nChars - * - * glyphIDs of TrueType fonts are 2 byte positive numbers. glyphID of 0 denotes a missing - * glyph and traditionally defaults to an empty square. - * glyphArray should be at least sizeof(sal_uInt16) * nchars bytes long. If glyphArray is NULL - * MapString() replaces the UCS-2 characters in str with glyphIDs. - * @ingroup sft - */ - int MapString(TrueTypeFont *ttf, sal_uInt16 *str, int nchars, sal_uInt16 *glyphArray, int bvertical); - -/** - * Maps a Unicode (UCS-2) character to a glyph ID and returns it. Missing glyph has - * a glyphID of 0 so this function can be used to test if a character is encoded in the font. - * - * @param ttf pointer to the TrueTypeFont structure - * @param ch Unicode (UCS-2) character - * @return glyph ID, if the character is missing in the font, the return value is 0. - * @ingroup sft - */ - sal_uInt16 MapChar(TrueTypeFont *ttf, sal_uInt16 ch, int bvertical); - -/** - * Returns 0 when the font does not substitute vertical glyphs - * - * @param ttf pointer to the TrueTypeFont structure - */ - int DoesVerticalSubstitution( TrueTypeFont *ttf, int bvertical); - -#endif - -/** - * Returns global font information about the TrueType font. - * @see TTGlobalFontInfo - * - * @param ttf pointer to a TrueTypeFont structure - * @param info pointer to a TTGlobalFontInfo structure - * @ingroup sft - * - */ - void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info); - -#ifdef TEST5 -/** - * Returns kerning information for an array of glyphs. - * Kerning is not cumulative. - * kern[i] contains kerning information for a pair of glyphs at positions i and i+1 - * - * @param ttf pointer to a TrueTypeFont structure - * @param glyphs array of source glyphs - * @param nglyphs number of glyphs in the array - * @param wmode writing mode: 0 - horizontal, 1 - vertical - * @param kern array of KernData structures. It should contain nglyphs-1 elements - * @see KernData - * @ingroup sft - * - */ - void KernGlyphs(TrueTypeFont *ttf, sal_uInt16 *glyphs, int nglyphs, int wmode, KernData *kern); -#endif - -/** - * Returns nonzero if font is a symbol encoded font - */ - int CheckSymbolEncoding(TrueTypeFont* ttf); - -/** - * returns the number of glyphs in a font - */ - int GetTTGlyphCount( TrueTypeFont* ttf ); - -/*- private definitions */ /*FOLD00*/ - - struct _TrueTypeFont { - sal_uInt32 tag; - - char *fname; - sal_Int32 fsize; - sal_uInt8 *ptr; - - char *psname; - char *family; - sal_uInt16 *ufamily; - char *subfamily; - sal_uInt16 *usubfamily; - - sal_uInt32 ntables; - sal_uInt32 *goffsets; - sal_uInt32 nglyphs; - sal_uInt32 unitsPerEm; - sal_uInt32 numberOfHMetrics; - sal_uInt32 numOfLongVerMetrics; /* if this number is not 0, font has vertical metrics information */ - sal_uInt8 *cmap; - int cmapType; - sal_uInt32 (*mapper)(const sal_uInt8 *, sal_uInt32); /* character to glyphID translation function */ - void **tables; /* array of pointers to tables */ - sal_uInt32 *tlens; /* array of table lengths */ - int kerntype; /* Defined in the KernType enum */ - sal_uInt32 nkern; /* number of kern subtables */ - sal_uInt8 **kerntables; /* array of pointers to kern subtables */ - void *pGSubstitution; /* info provided by GSUB for UseGSUB() */ - }; - -#ifdef __cplusplus -} -#endif - -/* indexes into _TrueTypeFont::tables[] and _TrueTypeFont::tlens[] */ -#define O_maxp 0 /* 'maxp' */ -#define O_glyf 1 /* 'glyf' */ -#define O_head 2 /* 'head' */ -#define O_loca 3 /* 'loca' */ -#define O_name 4 /* 'name' */ -#define O_hhea 5 /* 'hhea' */ -#define O_hmtx 6 /* 'hmtx' */ -#define O_cmap 7 /* 'cmap' */ -#define O_vhea 8 /* 'vhea' */ -#define O_vmtx 9 /* 'vmtx' */ -#define O_OS2 10 /* 'OS/2' */ -#define O_post 11 /* 'post' */ -#define O_kern 12 /* 'kern' */ -#define O_cvt 13 /* 'cvt_' - only used in TT->TT generation */ -#define O_prep 14 /* 'prep' - only used in TT->TT generation */ -#define O_fpgm 15 /* 'fpgm' - only used in TT->TT generation */ -#define O_gsub 16 /* 'GSUB' */ -#define NUM_TAGS 17 - -#endif /* __SUBFONT_H */ diff --git a/vcl/inc/vcl/gdimtf.hxx b/vcl/inc/vcl/gdimtf.hxx index 62439d4d4613..c53460d35584 100644 --- a/vcl/inc/vcl/gdimtf.hxx +++ b/vcl/inc/vcl/gdimtf.hxx @@ -164,6 +164,14 @@ public: void Scale( double fScaleX, double fScaleY ); void Scale( const Fraction& rScaleX, const Fraction& rScaleY ); void Rotate( long nAngle10 ); + /* get the bound rect of the contained actions + * caveats: + * - clip actions will limit the contained actions, + * but the current clipregion of the passed OutputDevice will not + * - coordinates of actions will be transformed to preferred mapmode + * - the returned rectangle is relative to the preferred mapmode of the metafile + */ + Rectangle GetBoundRect( OutputDevice& i_rReference ); void Adjust( short nLuminancePercent = 0, short nContrastPercent = 0, short nChannelRPercent = 0, short nChannelGPercent = 0, diff --git a/vcl/inc/vcl/outdev.hxx b/vcl/inc/vcl/outdev.hxx index 3f821f995a51..0d071a8a9617 100644 --- a/vcl/inc/vcl/outdev.hxx +++ b/vcl/inc/vcl/outdev.hxx @@ -655,20 +655,20 @@ public: void GetKerningPairs( ULONG nPairs, KerningPair* pKernPairs ) const; BOOL GetTextBoundRect( Rectangle& rRect, - const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, - xub_StrLen nLen = STRING_LEN ) const; + const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, + ULONG nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const; BOOL GetTextOutline( PolyPolygon&, const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, BOOL bOptimize = TRUE, - const ULONG nWidth = 0, const sal_Int32* pDXArray = NULL ) const; + ULONG nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const; BOOL GetTextOutlines( PolyPolyVector&, const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, BOOL bOptimize = TRUE, - const ULONG nWidth = 0, const sal_Int32* pDXArray = NULL ) const; + ULONG nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const; BOOL GetTextOutlines( ::basegfx::B2DPolyPolygonVector&, const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, BOOL bOptimize = TRUE, - const ULONG nWidth = 0, const sal_Int32* pDXArray = NULL ) const; + ULONG nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const; BOOL GetGlyphBoundRects( const Point& rOrigin, const String& rStr, int nIndex, int nLen, int nBase, MetricVector& rVector ); diff --git a/vcl/inc/vcl/sndstyle.hxx b/vcl/inc/vcl/sndstyle.hxx index 2fc568a5e86d..55255171ad9f 100644 --- a/vcl/inc/vcl/sndstyle.hxx +++ b/vcl/inc/vcl/sndstyle.hxx @@ -44,6 +44,6 @@ typedef USHORT SoundType; #define SOUND_ERROR ((SoundType)3) #define SOUND_QUERY ((SoundType)4) -#define SOUND_DISABLE (SOUND_DEFAULT) +#define SOUND_DISABLE ((SoundType)5) #endif // _SV_SNDSTYLE_HXX diff --git a/vcl/source/app/dbggui.cxx b/vcl/source/app/dbggui.cxx index c8567264b9b9..36d0991c7640 100644 --- a/vcl/source/app/dbggui.cxx +++ b/vcl/source/app/dbggui.cxx @@ -1782,7 +1782,7 @@ void DbgDialogTest( Window* pWindow ) i++; } - delete pRectAry; + delete [] pRectAry; } // ======================================================================= diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx index 687352716ae8..641665aacf6b 100644 --- a/vcl/source/control/lstbox.cxx +++ b/vcl/source/control/lstbox.cxx @@ -31,21 +31,21 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_vcl.hxx" -#ifndef _SV_RC_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "tools/rc.h" + +#include "vcl/svdata.hxx" +#include "vcl/decoview.hxx" +#include "vcl/event.hxx" +#include "vcl/scrbar.hxx" +#include "vcl/button.hxx" +#include "vcl/edit.hxx" +#include "vcl/subedit.hxx" +#include "vcl/ilstbox.hxx" +#include "vcl/lstbox.hxx" +#include "vcl/combobox.hxx" +#include "vcl/controllayout.hxx" + +#include "tools/debug.hxx" @@ -650,6 +650,7 @@ void ListBox::Resize() long nTop = 0; long nBottom = aOutSz.Height(); + // note: in case of no border, pBorder will actually be this Window *pBorder = GetWindow( WINDOW_BORDER ); ImplControlValue aControlValue; Point aPoint; @@ -678,6 +679,17 @@ void ListBox::Resize() // use the themes drop down size Rectangle aContentRect = aContent.GetBoundRect(); + if( ! (GetStyle() & WB_BORDER) && ImplGetSVData()->maNWFData.mbNoFocusRects ) + { + // no border but focus ring behavior -> we have a problem; the + // native rect relies on the border to draw the focus + // let's do the best we can and center vertically, so it doesn't look + // completely wrong. + Size aSz( GetOutputSizePixel() ); + long nDiff = aContentRect.Top() - (aSz.Height() - aContentRect.GetHeight())/2; + aContentRect.Top() -= nDiff; + aContentRect.Bottom() -= nDiff; + } mpImplWin->SetPosSizePixel( aContentRect.TopLeft(), aContentRect.GetSize() ); } else @@ -1273,6 +1285,26 @@ Size ListBox::CalcMinimumSize() const else { aSz.Height() = mpImplLB->CalcSize( 1 ).Height(); + if( aSz.Height() < mnDDHeight ) + { + aSz.Height() = mnDDHeight; + // FIXME: this is currently only on mac/aqua + if( ImplGetSVData()->maNWFData.mbNoFocusRects && + IsNativeWidgetEnabled() && + const_cast(this)->IsNativeControlSupported( CTRL_LISTBOX, PART_ENTIRE_CONTROL ) ) + { + ImplControlValue aControlValue; + Region aCtrlRegion( Rectangle( (const Point&)Point(), Size( 20, mnDDHeight ) ) ); + Region aBoundingRgn( aCtrlRegion ); + Region aContentRgn( aCtrlRegion ); + // adjust the size of the edit field + if( const_cast(this)->GetNativeControlRegion( CTRL_LISTBOX, PART_ENTIRE_CONTROL, + aCtrlRegion, 0, aControlValue, rtl::OUString(), aBoundingRgn, aContentRgn) ) + { + aSz.Height() = aContentRgn.GetBoundRect().GetHeight(); + } + } + } aSz.Width() = mpImplLB->GetMaxEntryWidth(); aSz.Width() += GetSettings().GetStyleSettings().GetScrollBarSize(); } diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx index 10d4cf774b04..7744b2f9a59c 100644 --- a/vcl/source/fontsubset/sft.cxx +++ b/vcl/source/fontsubset/sft.cxx @@ -329,7 +329,7 @@ _inline void PutInt16(sal_Int16 val, sal_uInt8 *ptr, size_t offset, int bigendia } -#if defined(OSL_BIG_ENDIAN) +#if defined(OSL_BIGENDIAN) #define Int16FromMOTA(a) (a) #define Int32FromMOTA(a) (a) #else diff --git a/vcl/source/gdi/gdimtf.cxx b/vcl/source/gdi/gdimtf.cxx index 3a29e6d56095..6483c8292df7 100644 --- a/vcl/source/gdi/gdimtf.cxx +++ b/vcl/source/gdi/gdimtf.cxx @@ -1403,6 +1403,436 @@ void GDIMetaFile::Rotate( long nAngle10 ) // ------------------------------------------------------------------------ +static void ImplActionBounds( Rectangle& o_rOutBounds, + const Rectangle& i_rInBounds, + const std::vector& i_rClipStack ) +{ + Rectangle aBounds( i_rInBounds ); + if( ! i_rInBounds.IsEmpty() && ! i_rClipStack.empty() && ! i_rClipStack.back().IsEmpty() ) + aBounds.Intersection( i_rClipStack.back() ); + if( ! aBounds.IsEmpty() ) + { + if( ! o_rOutBounds.IsEmpty() ) + o_rOutBounds.Union( aBounds ); + else + o_rOutBounds = aBounds; + } +} + +Rectangle GDIMetaFile::GetBoundRect( OutputDevice& i_rReference ) +{ + GDIMetaFile aMtf; + VirtualDevice aMapVDev( i_rReference ); + + aMapVDev.EnableOutput( FALSE ); + aMapVDev.SetMapMode( GetPrefMapMode() ); + + std::vector aClipStack( 1, Rectangle() ); + std::vector aPushFlagStack; + + Rectangle aBound; + + for( MetaAction* pAction = (MetaAction*) First(); pAction; pAction = (MetaAction*) Next() ) + { + const USHORT nActionType = pAction->GetType(); + + switch( nActionType ) + { + case( META_PIXEL_ACTION ): + { + MetaPixelAction* pAct = (MetaPixelAction*) pAction; + ImplActionBounds( aBound, + Rectangle( aMapVDev.LogicToLogic( pAct->GetPoint(), aMapVDev.GetMapMode(), GetPrefMapMode() ), + aMapVDev.PixelToLogic( Size( 1, 1 ), GetPrefMapMode() ) ), + aClipStack ); + } + break; + + case( META_POINT_ACTION ): + { + MetaPointAction* pAct = (MetaPointAction*) pAction; + ImplActionBounds( aBound, + Rectangle( aMapVDev.LogicToLogic( pAct->GetPoint(), aMapVDev.GetMapMode(), GetPrefMapMode() ), + aMapVDev.PixelToLogic( Size( 1, 1 ), GetPrefMapMode() ) ), + aClipStack ); + } + break; + + case( META_LINE_ACTION ): + { + MetaLineAction* pAct = (MetaLineAction*) pAction; + Point aP1( pAct->GetStartPoint() ), aP2( pAct->GetEndPoint() ); + Rectangle aRect( aP1, aP2 ); + aRect.Justify(); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_RECT_ACTION ): + { + MetaRectAction* pAct = (MetaRectAction*) pAction; + ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_ROUNDRECT_ACTION ): + { + MetaRoundRectAction* pAct = (MetaRoundRectAction*) pAction; + ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_ELLIPSE_ACTION ): + { + MetaEllipseAction* pAct = (MetaEllipseAction*) pAction; + ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_ARC_ACTION ): + { + MetaArcAction* pAct = (MetaArcAction*) pAction; + // FIXME: this is imprecise + // e.g. for small arcs the whole rectangle is WAY too large + ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_PIE_ACTION ): + { + MetaPieAction* pAct = (MetaPieAction*) pAction; + // FIXME: this is imprecise + // e.g. for small arcs the whole rectangle is WAY too large + ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_CHORD_ACTION ): + { + MetaChordAction* pAct = (MetaChordAction*) pAction; + // FIXME: this is imprecise + // e.g. for small arcs the whole rectangle is WAY too large + ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_POLYLINE_ACTION ): + { + MetaPolyLineAction* pAct = (MetaPolyLineAction*) pAction; + Rectangle aRect( pAct->GetPolygon().GetBoundRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_POLYGON_ACTION ): + { + MetaPolygonAction* pAct = (MetaPolygonAction*) pAction; + Rectangle aRect( pAct->GetPolygon().GetBoundRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_POLYPOLYGON_ACTION ): + { + MetaPolyPolygonAction* pAct = (MetaPolyPolygonAction*) pAction; + Rectangle aRect( pAct->GetPolyPolygon().GetBoundRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_TEXT_ACTION ): + { + MetaTextAction* pAct = (MetaTextAction*) pAction; + Rectangle aRect; + // hdu said base = index + aMapVDev.GetTextBoundRect( aRect, pAct->GetText(), pAct->GetIndex(), pAct->GetIndex(), pAct->GetLen() ); + Point aPt( pAct->GetPoint() ); + aRect.Move( aPt.X(), aPt.Y() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_TEXTARRAY_ACTION ): + { + MetaTextArrayAction* pAct = (MetaTextArrayAction*) pAction; + Rectangle aRect; + // hdu said base = index + aMapVDev.GetTextBoundRect( aRect, pAct->GetText(), pAct->GetIndex(), pAct->GetIndex(), pAct->GetLen(), + 0, pAct->GetDXArray() ); + Point aPt( pAct->GetPoint() ); + aRect.Move( aPt.X(), aPt.Y() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_STRETCHTEXT_ACTION ): + { + MetaStretchTextAction* pAct = (MetaStretchTextAction*) pAction; + Rectangle aRect; + // hdu said base = index + aMapVDev.GetTextBoundRect( aRect, pAct->GetText(), pAct->GetIndex(), pAct->GetIndex(), pAct->GetLen(), + pAct->GetWidth(), NULL ); + Point aPt( pAct->GetPoint() ); + aRect.Move( aPt.X(), aPt.Y() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_TEXTLINE_ACTION ): + { + MetaTextLineAction* pAct = (MetaTextLineAction*) pAction; + // measure a test string to get ascend and descent right + static const sal_Unicode pStr[] = { 0xc4, 0x67, 0 }; + String aStr( pStr ); + + Rectangle aRect; + aMapVDev.GetTextBoundRect( aRect, aStr, 0, 0, aStr.Len(), 0, NULL ); + Point aPt( pAct->GetStartPoint() ); + aRect.Move( aPt.X(), aPt.Y() ); + aRect.Right() = aRect.Left() + pAct->GetWidth(); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_BMPSCALE_ACTION ): + { + MetaBmpScaleAction* pAct = (MetaBmpScaleAction*) pAction; + Rectangle aRect( pAct->GetPoint(), pAct->GetSize() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_BMPSCALEPART_ACTION ): + { + MetaBmpScalePartAction* pAct = (MetaBmpScalePartAction*) pAction; + Rectangle aRect( pAct->GetDestPoint(), pAct->GetDestSize() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_BMPEXSCALE_ACTION ): + { + MetaBmpExScaleAction* pAct = (MetaBmpExScaleAction*) pAction; + Rectangle aRect( pAct->GetPoint(), pAct->GetSize() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_BMPEXSCALEPART_ACTION ): + { + MetaBmpExScalePartAction* pAct = (MetaBmpExScalePartAction*) pAction; + Rectangle aRect( pAct->GetDestPoint(), pAct->GetDestSize() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_GRADIENT_ACTION ): + { + MetaGradientAction* pAct = (MetaGradientAction*) pAction; + Rectangle aRect( pAct->GetRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_GRADIENTEX_ACTION ): + { + MetaGradientExAction* pAct = (MetaGradientExAction*) pAction; + Rectangle aRect( pAct->GetPolyPolygon().GetBoundRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_COMMENT_ACTION ): + { + // nothing to do + }; + break; + + case( META_HATCH_ACTION ): + { + MetaHatchAction* pAct = (MetaHatchAction*) pAction; + Rectangle aRect( pAct->GetPolyPolygon().GetBoundRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_TRANSPARENT_ACTION ): + { + MetaTransparentAction* pAct = (MetaTransparentAction*) pAction; + Rectangle aRect( pAct->GetPolyPolygon().GetBoundRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_FLOATTRANSPARENT_ACTION ): + { + MetaFloatTransparentAction* pAct = (MetaFloatTransparentAction*) pAction; + GDIMetaFile aTransMtf( pAct->GetGDIMetaFile() ); + // get the bound rect of the contained metafile + Rectangle aRect( aTransMtf.GetBoundRect( i_rReference ) ); + // scale the rect now on the assumption that the correct top left of the metafile + // (not its bounds !) is (0,0) + Size aPSize( aTransMtf.GetPrefSize() ); + aPSize = aMapVDev.LogicToLogic( aPSize, aTransMtf.GetPrefMapMode(), aMapVDev.GetMapMode() ); + Size aActSize( pAct->GetSize() ); + double fX = double(aActSize.Width())/double(aPSize.Width()); + double fY = double(aActSize.Height())/double(aPSize.Height()); + aRect.Left() = long(double(aRect.Left())*fX); + aRect.Right() = long(double(aRect.Right())*fX); + aRect.Top() = long(double(aRect.Top())*fY); + aRect.Bottom() = long(double(aRect.Bottom())*fY); + + // transform the rect to current VDev state + aRect = aMapVDev.LogicToLogic( aRect, aTransMtf.GetPrefMapMode(), aMapVDev.GetMapMode() ); + + ImplActionBounds( aBound, aRect, aClipStack ); + } + break; + + case( META_EPS_ACTION ): + { + MetaEPSAction* pAct = (MetaEPSAction*) pAction; + Rectangle aRect( pAct->GetPoint(), pAct->GetSize() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_CLIPREGION_ACTION ): + { + MetaClipRegionAction* pAct = (MetaClipRegionAction*) pAction; + if( pAct->IsClipping() ) + aClipStack.back() = aMapVDev.LogicToLogic( pAct->GetRegion().GetBoundRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ); + else + aClipStack.back() = Rectangle(); + } + break; + + case( META_ISECTRECTCLIPREGION_ACTION ): + { + MetaISectRectClipRegionAction* pAct = (MetaISectRectClipRegionAction*) pAction; + Rectangle aRect( aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ) ); + if( aClipStack.back().IsEmpty() ) + aClipStack.back() = aRect; + else + aClipStack.back().Intersection( aRect ); + } + break; + + case( META_ISECTREGIONCLIPREGION_ACTION ): + { + MetaISectRegionClipRegionAction* pAct = (MetaISectRegionClipRegionAction*) pAction; + Rectangle aRect( aMapVDev.LogicToLogic( pAct->GetRegion().GetBoundRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ) ); + if( aClipStack.back().IsEmpty() ) + aClipStack.back() = aRect; + else + aClipStack.back().Intersection( aRect ); + } + break; + + case( META_BMP_ACTION ): + { + MetaBmpAction* pAct = (MetaBmpAction*) pAction; + Rectangle aRect( pAct->GetPoint(), aMapVDev.PixelToLogic( pAct->GetBitmap().GetSizePixel() ) ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_BMPEX_ACTION ): + { + MetaBmpExAction* pAct = (MetaBmpExAction*) pAction; + Rectangle aRect( pAct->GetPoint(), aMapVDev.PixelToLogic( pAct->GetBitmapEx().GetSizePixel() ) ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_MASK_ACTION ): + { + MetaMaskAction* pAct = (MetaMaskAction*) pAction; + Rectangle aRect( pAct->GetPoint(), aMapVDev.PixelToLogic( pAct->GetBitmap().GetSizePixel() ) ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_MASKSCALE_ACTION ): + { + MetaMaskScalePartAction* pAct = (MetaMaskScalePartAction*) pAction; + Rectangle aRect( pAct->GetDestPoint(), pAct->GetDestSize() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_MASKSCALEPART_ACTION ): + { + MetaMaskScalePartAction* pAct = (MetaMaskScalePartAction*) pAction; + Rectangle aRect( pAct->GetDestPoint(), pAct->GetDestSize() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_WALLPAPER_ACTION ): + { + MetaWallpaperAction* pAct = (MetaWallpaperAction*) pAction; + Rectangle aRect( pAct->GetRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_TEXTRECT_ACTION ): + { + MetaTextRectAction* pAct = (MetaTextRectAction*) pAction; + Rectangle aRect( pAct->GetRect() ); + ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack ); + } + break; + + case( META_MOVECLIPREGION_ACTION ): + { + MetaMoveClipRegionAction* pAct = (MetaMoveClipRegionAction*) pAction; + if( ! aClipStack.back().IsEmpty() ) + { + Size aDelta( pAct->GetHorzMove(), pAct->GetVertMove() ); + aDelta = aMapVDev.LogicToLogic( aDelta, aMapVDev.GetMapMode(), GetPrefMapMode() ); + aClipStack.back().Move( aDelta.Width(), aDelta.Width() ); + } + } + break; + + default: + { + pAction->Execute( &aMapVDev ); + + if( nActionType == META_PUSH_ACTION ) + { + MetaPushAction* pAct = (MetaPushAction*) pAction; + aPushFlagStack.push_back( pAct->GetFlags() ); + if( (aPushFlagStack.back() & PUSH_CLIPREGION) != 0 ) + { + Rectangle aRect( aClipStack.back() ); + aClipStack.push_back( aRect ); + } + } + else if( nActionType == META_POP_ACTION ) + { + // sanity check + if( ! aPushFlagStack.empty() ) + { + if( (aPushFlagStack.back() & PUSH_CLIPREGION) != 0 ) + { + if( aClipStack.size() > 1 ) + aClipStack.pop_back(); + } + aPushFlagStack.pop_back(); + } + } + } + break; + } + } + return aBound; +} + +// ------------------------------------------------------------------------ + Color GDIMetaFile::ImplColAdjustFnc( const Color& rColor, const void* pColParam ) { return Color( rColor.GetTransparency(), diff --git a/vcl/source/gdi/makefile.mk b/vcl/source/gdi/makefile.mk index 977e5386fe97..4d0ded320060 100644 --- a/vcl/source/gdi/makefile.mk +++ b/vcl/source/gdi/makefile.mk @@ -137,6 +137,7 @@ EXCEPTIONSFILES= $(SLO)$/salmisc.obj \ $(SLO)$/pngwrite.obj \ $(SLO)$/virdev.obj \ $(SLO)$/impprn.obj \ + $(SLO)$/gdimtf.obj \ $(SLO)$/graphictools.obj diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx index 537964582ceb..9d876c7bdcb5 100644 --- a/vcl/source/gdi/outdev3.cxx +++ b/vcl/source/gdi/outdev3.cxx @@ -7919,8 +7919,8 @@ BOOL OutputDevice::GetGlyphBoundRects( const Point& rOrigin, const String& rStr, // ----------------------------------------------------------------------- BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect, - const String& rStr, xub_StrLen nBase, xub_StrLen nIndex, - xub_StrLen nLen ) const + const String& rStr, xub_StrLen nBase, xub_StrLen nIndex, xub_StrLen nLen, + ULONG nLayoutWidth, const sal_Int32* pDXAry ) const { DBG_TRACE( "OutputDevice::GetTextBoundRect()" ); DBG_CHKTHIS( OutputDevice, ImplDbgCheckOutputDevice ); @@ -7929,13 +7929,14 @@ BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect, rRect.SetEmpty(); SalLayout* pSalLayout = NULL; + const Point aPoint; // calculate offset when nBase!=nIndex long nXOffset = 0; if( nBase != nIndex ) { xub_StrLen nStart = Min( nBase, nIndex ); xub_StrLen nOfsLen = Max( nBase, nIndex ) - nStart; - pSalLayout = ImplLayout( rStr, nStart, nOfsLen ); + pSalLayout = ImplLayout( rStr, nStart, nOfsLen, aPoint, nLayoutWidth, pDXAry ); if( pSalLayout ) { nXOffset = pSalLayout->GetTextWidth(); @@ -7947,7 +7948,7 @@ BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect, } } - pSalLayout = ImplLayout( rStr, nIndex, nLen ); + pSalLayout = ImplLayout( rStr, nIndex, nLen, aPoint, nLayoutWidth, pDXAry ); Rectangle aPixelRect; if( pSalLayout ) { @@ -7997,7 +7998,7 @@ BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect, aVDev.SetTextAlign( ALIGN_TOP ); // layout the text on the virtual device - pSalLayout = aVDev.ImplLayout( rStr, nIndex, nLen ); + pSalLayout = aVDev.ImplLayout( rStr, nIndex, nLen, aPoint, nLayoutWidth, pDXAry ); if( !pSalLayout ) return false; @@ -8097,7 +8098,7 @@ BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect, BOOL OutputDevice::GetTextOutlines( ::basegfx::B2DPolyPolygonVector& rVector, const String& rStr, xub_StrLen nBase, xub_StrLen nIndex, xub_StrLen nLen, - BOOL bOptimize, const ULONG nTWidth, const sal_Int32* pDXArray ) const + BOOL bOptimize, ULONG nTWidth, const sal_Int32* pDXArray ) const { // the fonts need to be initialized if( mbNewFont ) @@ -8326,7 +8327,7 @@ BOOL OutputDevice::GetTextOutlines( ::basegfx::B2DPolyPolygonVector& rVector, BOOL OutputDevice::GetTextOutlines( PolyPolyVector& rResultVector, const String& rStr, xub_StrLen nBase, xub_StrLen nIndex, - xub_StrLen nLen, BOOL bOptimize, const ULONG nTWidth, const sal_Int32* pDXArray ) const + xub_StrLen nLen, BOOL bOptimize, ULONG nTWidth, const sal_Int32* pDXArray ) const { rResultVector.clear(); @@ -8349,7 +8350,7 @@ BOOL OutputDevice::GetTextOutlines( PolyPolyVector& rResultVector, BOOL OutputDevice::GetTextOutline( PolyPolygon& rPolyPoly, const String& rStr, xub_StrLen nBase, xub_StrLen nIndex, xub_StrLen nLen, - BOOL bOptimize, const ULONG nTWidth, const sal_Int32* pDXArray ) const + BOOL bOptimize, ULONG nTWidth, const sal_Int32* pDXArray ) const { rPolyPoly.Clear(); diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index c827905e94e6..ccf75dbd59b3 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -3480,11 +3480,6 @@ USHORT PopupMenu::Execute( Window* pExecWindow, const Rectangle& rRect, USHORT n USHORT PopupMenu::ImplExecute( Window* pW, const Rectangle& rRect, ULONG nPopupModeFlags, Menu* pSFrom, BOOL bPreSelectFirst ) { - - // #59614# Mit TH abgesprochen dass die ASSERTION raus kommt, - // weil es evtl. legitim ist... -// DBG_ASSERT( !PopupMenu::IsInExecute() || pSFrom, "PopupMenu::Execute() called in PopupMenu::Execute()" ); - if ( !pSFrom && ( PopupMenu::IsInExecute() || !GetItemCount() ) ) return 0; @@ -3660,8 +3655,16 @@ USHORT PopupMenu::ImplExecute( Window* pW, const Rectangle& rRect, ULONG nPopupM { pWin->ImplAddDel( &aDelData ); + ImplDelData aModalWinDel; + pW->ImplAddDel( &aModalWinDel ); + pW->ImplIncModalCount(); + pWin->Execute(); + DBG_ASSERT( ! aModalWinDel.IsDead(), "window for popup died, modal count incorrect !" ); + if( ! aModalWinDel.IsDead() ) + pW->ImplDecModalCount(); + if ( !aDelData.IsDelete() ) pWin->ImplRemoveDel( &aDelData ); else diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx index 9dbb218403d0..fdaa102c614b 100644 --- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx @@ -454,6 +454,10 @@ void GtkData::deInitNWF( void ) gtk_widget_destroy( gWidgetData[i].gMenuWidget ); if( gWidgetData[i].gTooltipPopup ) gtk_widget_destroy( gWidgetData[i].gTooltipPopup ); + delete gWidgetData[i].gCacheTabPages; + gWidgetData[i].gCacheTabPages = NULL; + delete gWidgetData[i].gCacheTabItems; + gWidgetData[i].gCacheTabItems = NULL; delete gWidgetData[i].gNWPixmapCacheList; gWidgetData[i].gNWPixmapCacheList = NULL; } diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx index 57f48df66c3c..b6770ca1a77e 100644 --- a/vcl/unx/gtk/window/gtkframe.cxx +++ b/vcl/unx/gtk/window/gtkframe.cxx @@ -834,7 +834,7 @@ void GtkSalFrame::Init( SalFrame* pParent, ULONG nStyle ) } if( (nStyle & SAL_FRAME_STYLE_PARTIAL_FULLSCREEN ) ) { - eType = GDK_WINDOW_TYPE_HINT_DOCK; + eType = GDK_WINDOW_TYPE_HINT_TOOLBAR; gtk_window_set_keep_above( GTK_WINDOW(m_pWindow), true ); } diff --git a/vcl/unx/source/window/salframe.cxx b/vcl/unx/source/window/salframe.cxx index 22e43999caa6..04eb9cd32771 100644 --- a/vcl/unx/source/window/salframe.cxx +++ b/vcl/unx/source/window/salframe.cxx @@ -72,6 +72,7 @@ #include "tools/debug.hxx" #include "sal/alloca.h" +#include #include @@ -425,15 +426,26 @@ void X11SalFrame::Init( ULONG nSalFrameStyle, int nScreen, SystemParentData* pPa if( IsOverrideRedirect() ) Attributes.override_redirect = True; // default icon - if( (nStyle_ & SAL_FRAME_STYLE_INTRO) == 0 && - SelectAppIconPixmap( pDisplay_, m_nScreen, - mnIconID != 1 ? mnIconID : - (mpParent ? mpParent->mnIconID : 1), 32, - Hints.icon_pixmap, Hints.icon_mask )) + if( (nStyle_ & SAL_FRAME_STYLE_INTRO) == 0 ) { - Hints.flags |= IconPixmapHint; - if( Hints.icon_mask ) - Hints.flags |= IconMaskHint; + bool bOk=false; + try + { + bOk=SelectAppIconPixmap( pDisplay_, m_nScreen, + mnIconID != 1 ? mnIconID : + (mpParent ? mpParent->mnIconID : 1), 32, + Hints.icon_pixmap, Hints.icon_mask ); + } + catch( com::sun::star::uno::Exception& ) + { + // can happen - no ucb during early startup + } + if( bOk ) + { + Hints.flags |= IconPixmapHint; + if( Hints.icon_mask ) + Hints.flags |= IconMaskHint; + } } // find the top level frame of the transience hierarchy diff --git a/vcl/win/source/window/salframe.cxx b/vcl/win/source/window/salframe.cxx index 57ad272bcf51..3ffc358bd76d 100644 --- a/vcl/win/source/window/salframe.cxx +++ b/vcl/win/source/window/salframe.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: salframe.cxx,v $ - * $Revision: 1.157.20.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -355,11 +352,9 @@ SalFrame* ImplSalCreateFrame( WinSalInstance* pInst, { OUString aLibraryName( RTL_CONSTASCII_USTRINGPARAM( "user32" ) ); oslModule pLib = osl_loadModule( aLibraryName.pData, SAL_LOADMODULE_DEFAULT ); - void *pFunc = NULL; + oslGenericFunction pFunc = NULL; if( pLib ) - { pFunc = osl_getAsciiFunctionSymbol( pLib, "SetLayeredWindowAttributes" ); - } lpfnSetLayeredWindowAttributes = ( SetLayeredWindowAttributes_Proc_T ) pFunc; @@ -3155,7 +3150,8 @@ void WinSalFrame::Beep( SoundType eSoundType ) MB_ICONQUESTION // SOUND_QUERY }; - MessageBeep( aImplSoundTab[eSoundType] ); + if( eSoundType != SOUND_DISABLE ) // don't beep on disable + MessageBeep( aImplSoundTab[eSoundType] ); } // ----------------------------------------------------------------------- -- cgit v1.2.3 From 242fa8cd290df213faea0acd0e511afc45cbd84a Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Mon, 27 Jul 2009 15:26:29 +0000 Subject: CWS-TOOLING: integrate CWS kso32fixes 2009-07-10 15:25:24 +0200 kso r273899 : #i53184# - fix probs with UNC server names containing underscores. 2009-07-10 14:31:59 +0200 kso r273893 : CWS-TOOLING: rebase CWS kso32fixes to trunk@273858 (milestone: DEV300:m52) 2009-07-09 13:46:16 +0200 kso r273861 : #i53184# - withdrew patch. 2009-07-08 13:39:00 +0200 kso r273829 : #i63159# - added license header 2009-07-08 11:44:08 +0200 kso r273824 : i53184 - cannot open files from shell if UNC server has a _ (underscore) 2009-07-08 11:21:12 +0200 kso r273822 : #i93271# - mingw build error 2009-07-08 11:13:48 +0200 kso r273821 : #i91247 - Adhere to one more xdg spec 2009-07-08 11:02:53 +0200 kso r273820 : #i89017# - osl_trace now emits trailing line feed to the debugger 2009-07-08 10:55:04 +0200 kso r273819 : #i88663# - not waiting on successful forks but subsequent process failure 2009-07-07 17:05:27 +0200 kso r273810 : #i88382# - It's nice to leave the modal mode in gtk+ too ;-) 2009-07-07 16:53:34 +0200 kso r273808 : i88331# - Typo in include guard 2009-07-07 16:48:17 +0200 kso r273807 : i82831# - crashrep: warnings when size_t != int 2009-07-07 16:39:49 +0200 kso r273806 : i63159# - Patch to use d_type field in dirent structure if possible 2009-06-24 12:52:27 +0200 kso r273333 : #i100274# - solved win2k missing symbol problem (again). 2009-05-20 13:58:48 +0200 kso r272124 : CWS-TOOLING: rebase CWS kso32fixes to trunk@271830 (milestone: DEV300:m48) 2009-04-17 14:50:54 +0200 kso r270950 : CWS-TOOLING: rebase CWS kso32fixes to trunk@270723 (milestone: DEV300:m46) 2009-03-26 09:27:28 +0100 kso r270054 : #i100274# NTLM code cleanup. 2009-03-20 14:13:38 +0100 kso r269807 : #i100274# - Fixed potential buffer overflow in NTLM code. 2009-03-19 14:53:03 +0100 kso r269748 : #i100274. Added NTLM support for Non-Windows platforms. 2009-03-17 15:52:44 +0100 kso r269613 : CWS-TOOLING: rebase CWS kso32fixes to trunk@269297 (milestone: DEV300:m43) --- tools/source/fsys/urlobj.cxx | 9 ++++++++- tools/workben/urltest.cxx | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx index e3484aee4e2d..2aff0d734bf6 100644 --- a/tools/source/fsys/urlobj.cxx +++ b/tools/source/fsys/urlobj.cxx @@ -1523,8 +1523,15 @@ bool INetURLObject::convertRelToAbs(rtl::OUString const & rTheRelURIRef, else if (pEnd - q >= 2 && q[0] == '\\' && q[1] == '\\') { q += 2; - if (scanDomain(q, pEnd) > 0 && (q == pEnd || *q == '\\')) + sal_Int32 n = rtl_ustr_indexOfChar_WithLength( + q, pEnd - q, '\\'); + sal_Unicode const * qe = n == -1 ? pEnd : q + n; + if (parseHostOrNetBiosName( + q, qe, bOctets, ENCODE_ALL, RTL_TEXTENCODING_DONTKNOW, + true, NULL)) + { bFSys = true; // 1st + } } if (bFSys) { diff --git a/tools/workben/urltest.cxx b/tools/workben/urltest.cxx index 542297eb4bd6..a232f8ebdd93 100644 --- a/tools/workben/urltest.cxx +++ b/tools/workben/urltest.cxx @@ -799,6 +799,25 @@ main() bSuccess = false; } } + { + bool bWasAbsolute; + if (!rtl::OUString(INetURLObject(rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( + "file:///"))). + smartRel2Abs( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( + "\\\\unc_host\\path")), + bWasAbsolute). + GetMainURL(INetURLObject::NO_DECODE)). + equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM("file://unc_host/path")) + || !bWasAbsolute) + { + printf("BAD smartRel2Abs(\"\\\\unc_host\\path\")\n"); + bSuccess = false; + } + } } if (true) -- cgit v1.2.3 From cbf10a85ee07cf370a5547e725cce5f193c9362c Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Mon, 27 Jul 2009 16:24:52 +0000 Subject: CWS-TOOLING: integrate CWS aw073 2009-07-16 11:21:19 +0200 aw r274036 : corrections after resync 2009-07-15 13:34:18 +0200 aw r274009 : CWS-TOOLING: rebase CWS aw073 to trunk@273858 (milestone: DEV300:m52) 2009-07-01 20:04:27 +0200 aw r273613 : CWS-TOOLING: rebase CWS aw073 to trunk@273468 (milestone: DEV300:m51) 2009-06-24 11:51:03 +0200 aw r273324 : #i102062# added using statement for solaris compiler 2009-06-23 12:53:50 +0200 aw r273278 : #i100158# force filled polygons to closed state 2009-06-23 12:28:33 +0200 aw r273276 : #i100158#, #i102371# corrected all (mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) shortcuts to support line/fill and to be not used when FillMode is not overpaint 2009-06-23 12:15:14 +0200 aw r273274 : #i100158# added PolyPolygon support for snapPointsOfHorizontalOrVerticalEdges helper 2009-06-22 17:28:33 +0200 aw r273244 : #i101508# added taking care of cell's distance-to-border values for cell text primitive creation 2009-06-22 12:59:10 +0200 aw r273218 : #i102253# applied patch from OD (see task) 2009-06-18 17:00:52 +0200 aw r273125 : #i102251# added EE_CNTRL_ONLINESPELLING switch off at DrawOutliner during GraphicExporter::GetGraphic 2009-06-18 14:35:57 +0200 aw r273120 : #i102241# added mergeToSinglePolyPolygon usage to SdrObject::ImpConvertToContourObj 2009-06-18 14:35:20 +0200 aw r273119 : #i102241# improved PolygonStrokePrimitive2D::createLocalDecomposition 2009-06-18 14:34:49 +0200 aw r273118 : #i102241# Made B2DCubicBezier::testAndSolveTrivialBezier() numerically more stable 2009-06-17 16:11:21 +0200 aw r273078 : #i102062# added compare support for OutlireParaObject's WrongList in an extra method; using in primitive comparators 2009-06-16 19:10:18 +0200 aw r273037 : #i101957# corrected: offset needs to be added before rotation and shear 2009-06-16 18:58:43 +0200 aw r273035 : #i101957# added needed offset by object width to SdrTextObj::impDecomposeStretchTextPrimitive for vertical texts 2009-06-16 18:35:55 +0200 aw r273034 : #i101941# corrected object initialisation for 3D Scenes on Clone operator 2009-06-16 16:07:30 +0200 aw r273024 : #i101811# extended renderChartPrimitive2D to create a correct embedding in a new MapMode 2009-06-12 19:38:07 +0200 aw r272940 : #i101734# added test code to experiment on demand with more complex transformations for virtual objects than only translations 2009-06-12 19:37:07 +0200 aw r272939 : #i101734# corrected SvtGraphicStroke preparation in MetaFile renderer (AFAP) 2009-06-12 16:31:55 +0200 aw r272931 : #i101648# re-enabled object creation with objecttype OBJ_NONE for SW Frame creation 2009-06-12 13:59:05 +0200 aw r272917 : #i101598# supported AAed single line paint in VCL 2009-06-12 11:34:25 +0200 aw r272907 : #i101598# adapted Graphic::GetBitmap() usage 2009-06-10 16:34:19 +0200 aw r272830 : #i101598# added VCL_DLLPUBLIC to parameter class 2009-06-10 16:30:27 +0200 aw r272829 : #i101598# extended calls to Graphic::GetBitmap/Ex where conversions to Bitmap objects is needed to user defined parameters like AntiAlisasing 2009-06-10 16:28:44 +0200 aw r272828 : #i101598# extended Graphic::GetBitmap/Ex interfaces to transport raster conversion parameters since these calls potentially need to rasterconvert a contained MetaFile 2009-06-09 16:26:40 +0200 aw r272781 : #i100945# checked in proposed patch for now 2009-06-08 18:01:42 +0200 aw r272742 : #i101239# teached BinTextObject to register at EditEngineItemPool sub-pool, not on given pool directly --- .../inc/basegfx/polygon/b2dpolypolygoncutter.hxx | 9 + .../inc/basegfx/polygon/b2dpolypolygontools.hxx | 14 ++ basegfx/source/curve/b2dcubicbezier.cxx | 36 ++-- basegfx/source/polygon/b2dpolypolygoncutter.cxx | 79 +++++++++ basegfx/source/polygon/b2dpolypolygontools.cxx | 12 ++ vcl/inc/vcl/graph.hxx | 44 ++++- vcl/inc/vcl/impgraph.hxx | 5 +- vcl/source/gdi/graph.cxx | 38 +--- vcl/source/gdi/impgraph.cxx | 38 ++-- vcl/source/gdi/outdev.cxx | 195 +++++++++++++++++---- vcl/source/gdi/outdev6.cxx | 14 +- 11 files changed, 380 insertions(+), 104 deletions(-) diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx index 9474e51e3904..12532ff078f3 100644 --- a/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx +++ b/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx @@ -104,6 +104,15 @@ namespace basegfx // DIFF: Return all areas where CandidateA is not covered by CandidateB (cut B out of A) B2DPolyPolygon solvePolygonOperationDiff(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB); + /** merge all single PolyPolygons to a single, OR-ed PolyPolygon + + @param rInput + The source PolyPolygons + + @return A single PolyPolygon containing the Or-merged result + */ + B2DPolyPolygon mergeToSinglePolyPolygon(const std::vector< basegfx::B2DPolyPolygon >& rInput); + } // end of namespace tools } // end of namespace basegfx diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx index 5c75edd7f262..c4687b3cfc5f 100644 --- a/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx +++ b/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx @@ -262,6 +262,20 @@ namespace basegfx bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB, const double& rfSmallValue); bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB); + /** snap some polygon coordinates to discrete coordinates + + This method allows to snap some polygon points to discrete (integer) values + which equals e.g. a snap to discrete coordinates. It will snap points of + horizontal and vertical edges + + @param rCandidate + The source polygon + + @return + The modified version of the source polygon + */ + B2DPolyPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolyPolygon& rCandidate); + } // end of namespace tools } // end of namespace basegfx diff --git a/basegfx/source/curve/b2dcubicbezier.cxx b/basegfx/source/curve/b2dcubicbezier.cxx index 76d1b74ddbca..e7247a95333b 100644 --- a/basegfx/source/curve/b2dcubicbezier.cxx +++ b/basegfx/source/curve/b2dcubicbezier.cxx @@ -443,21 +443,32 @@ namespace basegfx bool bAIsTrivial(aVecA.equalZero()); bool bBIsTrivial(aVecB.equalZero()); + // #i102241# prepare inverse edge length to normalize cross values; + // else the small compare value used in fTools::equalZero + // will be length dependent and this detection will work as less + // precise as longer the edge is. In principle, the length of the control + // vector would need to be used too, but to be trivial it is assumed to + // be of roughly equal length to the edge, so edge length can be used + // for both. Only needed when one of both is not trivial per se. + const double fInverseEdgeLength(bAIsTrivial && bBIsTrivial + ? 1.0 + : 1.0 / aEdge.getLength()); + // if A is not zero, check if it could be if(!bAIsTrivial) { - // parallel to edge? Check aVecA, aEdge - // B2DVector::areParallel is too correct, uses differences in the e15 region, - // thus do own test here - const double fValA(aVecA.getX() * aEdge.getY()); - const double fValB(aVecA.getY() * aEdge.getX()); + // #i102241# parallel to edge? Check aVecA, aEdge. Use cross() which does what + // we need here with the precision we need + const double fCross(aVecA.cross(aEdge) * fInverseEdgeLength); - if(fTools::equalZero(fabs(fValA) - fabs(fValB))) + if(fTools::equalZero(fCross)) { // get scale to edge. Use bigger distance for numeric quality - const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY()) ? aVecA.getX() / aEdge.getX() : aVecA.getY() / aEdge.getY()); + const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY()) + ? aVecA.getX() / aEdge.getX() + : aVecA.getY() / aEdge.getY()); - // end point of vector in edge range? + // relative end point of vector in edge range? if(fTools::moreOrEqual(fScale, 0.0) && fTools::lessOrEqual(fScale, 1.0)) { bAIsTrivial = true; @@ -470,13 +481,14 @@ namespace basegfx if(bAIsTrivial && !bBIsTrivial) { // parallel to edge? Check aVecB, aEdge - const double fValA(aVecB.getX() * aEdge.getY()); - const double fValB(aVecB.getY() * aEdge.getX()); + const double fCross(aVecB.cross(aEdge) * fInverseEdgeLength); - if(fTools::equalZero(fabs(fValA) - fabs(fValB))) + if(fTools::equalZero(fCross)) { // get scale to edge. Use bigger distance for numeric quality - const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY()) ? aVecB.getX() / aEdge.getX() : aVecB.getY() / aEdge.getY()); + const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY()) + ? aVecB.getX() / aEdge.getX() + : aVecB.getY() / aEdge.getY()); // end point of vector in edge range? Caution: controlB is directed AGAINST edge if(fTools::lessOrEqual(fScale, 0.0) && fTools::moreOrEqual(fScale, -1.0)) diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx index b06e6fbafff7..0674bfe3953e 100644 --- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx +++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx @@ -929,6 +929,85 @@ namespace basegfx } } + B2DPolyPolygon mergeToSinglePolyPolygon(const std::vector< basegfx::B2DPolyPolygon >& rInput) + { + std::vector< basegfx::B2DPolyPolygon > aInput(rInput); + + // first step: prepareForPolygonOperation and simple merge of non-overlapping + // PolyPolygons for speedup; this is possible for the wanted OR-operation + if(aInput.size()) + { + std::vector< basegfx::B2DPolyPolygon > aResult; + aResult.reserve(aInput.size()); + + for(sal_uInt32 a(0); a < aInput.size(); a++) + { + const basegfx::B2DPolyPolygon aCandidate(prepareForPolygonOperation(aInput[a])); + + if(aResult.size()) + { + const B2DRange aCandidateRange(aCandidate.getB2DRange()); + bool bCouldMergeSimple(false); + + for(sal_uInt32 b(0); !bCouldMergeSimple && b < aResult.size(); b++) + { + basegfx::B2DPolyPolygon aTarget(aResult[b]); + const B2DRange aTargetRange(aTarget.getB2DRange()); + + if(!aCandidateRange.overlaps(aTargetRange)) + { + aTarget.append(aCandidate); + aResult[b] = aTarget; + bCouldMergeSimple = true; + } + } + + if(!bCouldMergeSimple) + { + aResult.push_back(aCandidate); + } + } + else + { + aResult.push_back(aCandidate); + } + } + + aInput = aResult; + } + + // second step: melt pairwise to a single PolyPolygon + while(aInput.size() > 1) + { + std::vector< basegfx::B2DPolyPolygon > aResult; + aResult.reserve((aInput.size() / 2) + 1); + + for(sal_uInt32 a(0); a < aInput.size(); a += 2) + { + if(a + 1 < aInput.size()) + { + // a pair for processing + aResult.push_back(solvePolygonOperationOr(aInput[a], aInput[a + 1])); + } + else + { + // last single PolyPolygon; copy to target to not lose it + aResult.push_back(aInput[a]); + } + } + + aInput = aResult; + } + + // third step: get result + if(1 == aInput.size()) + { + return aInput[0]; + } + + return B2DPolyPolygon(); + } + ////////////////////////////////////////////////////////////////////////////// } // end of namespace tools diff --git a/basegfx/source/polygon/b2dpolypolygontools.cxx b/basegfx/source/polygon/b2dpolypolygontools.cxx index c92f2f29147b..e6b3a448530d 100644 --- a/basegfx/source/polygon/b2dpolypolygontools.cxx +++ b/basegfx/source/polygon/b2dpolypolygontools.cxx @@ -569,6 +569,18 @@ namespace basegfx return equal(rCandidateA, rCandidateB, fSmallValue); } + B2DPolyPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolyPolygon& rCandidate) + { + B2DPolyPolygon aRetval; + + for(sal_uInt32 a(0L); a < rCandidate.count(); a++) + { + aRetval.append(snapPointsOfHorizontalOrVerticalEdges(rCandidate.getB2DPolygon(a))); + } + + return aRetval; + } + } // end of namespace tools } // end of namespace basegfx diff --git a/vcl/inc/vcl/graph.hxx b/vcl/inc/vcl/graph.hxx index f56c55b7db42..9d70c67d3e55 100644 --- a/vcl/inc/vcl/graph.hxx +++ b/vcl/inc/vcl/graph.hxx @@ -53,6 +53,36 @@ class OutputDevice; class Font; class GfxLink; +class VCL_DLLPUBLIC GraphicConversionParameters +{ +private: + Size maSizePixel; // default is (0,0) + + // bitfield + unsigned mbUnlimitedSize : 1; // default is false + unsigned mbAntiAliase : 1; // default is false + unsigned mbSnapHorVerLines : 1; // default is false + +public: + GraphicConversionParameters( + const Size& rSizePixel = Size(), + bool bUnlimitedSize = false, + bool bAntiAliase = false, + bool bSnapHorVerLines = false) + : maSizePixel(rSizePixel), + mbUnlimitedSize(bUnlimitedSize), + mbAntiAliase(bAntiAliase), + mbSnapHorVerLines(bSnapHorVerLines) + { + } + + // data read access + const Size getSizePixel() const { return maSizePixel; } + bool getUnlimitedSize() const { return mbUnlimitedSize; } + bool getAntiAliase() const { return mbAntiAliase; } + bool getSnapHorVerLines() const { return mbSnapHorVerLines; } +}; + class VCL_DLLPUBLIC Graphic : public SvDataCopyStream { private: @@ -96,12 +126,14 @@ public: BOOL IsAlpha() const; BOOL IsAnimated() const; - Bitmap GetBitmap() const; - Bitmap GetBitmap( const Size* pSizePixel ) const; - BitmapEx GetBitmapEx() const; - BitmapEx GetBitmapEx( const Size* pSizePixel ) const; - Bitmap GetUnlimitedBitmap( const Size* pSizePixel ) const; - BitmapEx GetUnlimitedBitmapEx( const Size* pSizePixel ) const; + // #i102089# Access of Bitmap potentially will have to rasterconvert the Graphic + // if it is a MetaFile. To be able to control this conversion it is necessary to + // allow giving parameters which control AntiAliasing and LineSnapping of the + // MetaFile when played. Defaults will use a no-AAed, not snapped conversion as + // before. + Bitmap GetBitmap(const GraphicConversionParameters& rParameters = GraphicConversionParameters()) const; + BitmapEx GetBitmapEx(const GraphicConversionParameters& rParameters = GraphicConversionParameters()) const; + Animation GetAnimation() const; const GDIMetaFile& GetGDIMetaFile() const; diff --git a/vcl/inc/vcl/impgraph.hxx b/vcl/inc/vcl/impgraph.hxx index 34b61a5fe21c..3b36173891ae 100644 --- a/vcl/inc/vcl/impgraph.hxx +++ b/vcl/inc/vcl/impgraph.hxx @@ -55,6 +55,7 @@ struct ImpSwapInfo class OutputDevice; class GfxLink; struct ImpSwapFile; +class GraphicConversionParameters; class ImpGraphic { @@ -102,8 +103,8 @@ private: BOOL ImplIsAlpha() const; BOOL ImplIsAnimated() const; - Bitmap ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) const; - BitmapEx ImplGetBitmapEx( const Size* pSizePixel, BOOL bUnlimited ) const; + Bitmap ImplGetBitmap(const GraphicConversionParameters& rParameters) const; + BitmapEx ImplGetBitmapEx(const GraphicConversionParameters& rParameters) const; Animation ImplGetAnimation() const; const GDIMetaFile& ImplGetGDIMetaFile() const; diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx index dfa155e29eae..77f065912e5d 100644 --- a/vcl/source/gdi/graph.cxx +++ b/vcl/source/gdi/graph.cxx @@ -430,44 +430,16 @@ BOOL Graphic::IsAnimated() const // ------------------------------------------------------------------------ -Bitmap Graphic::GetBitmap() const +Bitmap Graphic::GetBitmap(const GraphicConversionParameters& rParameters) const { - return GetBitmap( NULL ); + return mpImpGraphic->ImplGetBitmap(rParameters); } // ------------------------------------------------------------------------ -BitmapEx Graphic::GetBitmapEx() const +BitmapEx Graphic::GetBitmapEx(const GraphicConversionParameters& rParameters) const { - return GetBitmapEx( NULL ); -} - -// ------------------------------------------------------------------------ - -Bitmap Graphic::GetBitmap( const Size* pSizePixel ) const -{ - return mpImpGraphic->ImplGetBitmap( pSizePixel, FALSE ); -} - -// ------------------------------------------------------------------------ - -BitmapEx Graphic::GetBitmapEx( const Size* pSizePixel ) const -{ - return mpImpGraphic->ImplGetBitmapEx( pSizePixel, FALSE ); -} - -// ------------------------------------------------------------------------ - -Bitmap Graphic::GetUnlimitedBitmap( const Size* pSizePixel ) const -{ - return mpImpGraphic->ImplGetBitmap( pSizePixel, TRUE ) ; -} - -// ------------------------------------------------------------------------ - -BitmapEx Graphic::GetUnlimitedBitmapEx( const Size* pSizePixel ) const -{ - return mpImpGraphic->ImplGetBitmapEx( pSizePixel, TRUE ) ; + return mpImpGraphic->ImplGetBitmapEx(rParameters); } // ------------------------------------------------------------------------ @@ -553,7 +525,7 @@ Size Graphic::GetSizePixel( const OutputDevice* pRefDevice ) const Size aRet; if( GRAPHIC_BITMAP == mpImpGraphic->ImplGetType() ) - aRet = mpImpGraphic->ImplGetBitmapEx( NULL, FALSE ).GetSizePixel(); + aRet = mpImpGraphic->ImplGetBitmapEx(GraphicConversionParameters()).GetSizePixel(); else aRet = ( pRefDevice ? pRefDevice : Application::GetDefaultDevice() )->LogicToPixel( GetPrefSize(), GetPrefMapMode() ); diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index a67d6fa7feac..d73f35bef962 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -483,7 +483,7 @@ BOOL ImpGraphic::ImplIsAnimated() const // ------------------------------------------------------------------------ -Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) const +Bitmap ImpGraphic::ImplGetBitmap(const GraphicConversionParameters& rParameters) const { Bitmap aRetBmp; @@ -494,8 +494,8 @@ Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) cons aRetBmp = rRetBmpEx.GetBitmap( &aReplaceColor ); - if( pSizePixel ) - aRetBmp.Scale( *pSizePixel ); + if(rParameters.getSizePixel().Width() || rParameters.getSizePixel().Height()) + aRetBmp.Scale(rParameters.getSizePixel()); } else if( ( meType != GRAPHIC_DEFAULT ) && ImplIsSupportedGraphic() ) { @@ -508,16 +508,18 @@ Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) cons Size aDrawSize( aVDev.LogicToPixel( maMetaFile.GetPrefSize(), maMetaFile.GetPrefMapMode() ) ); Size aSizePix( labs( aBRPix.X() - aTLPix.X() ) + 1, labs( aBRPix.Y() - aTLPix.Y() ) + 1 ); - if( pSizePixel && aSizePix.Width() && aSizePix.Height() ) + if(rParameters.getSizePixel().Width() && rParameters.getSizePixel().Height()) { - aDrawSize.Width() = FRound( (double) pSizePixel->Width() * (double) aDrawSize.Width() / (double) aSizePix.Width() ); - aDrawSize.Height() = FRound( (double) pSizePixel->Height() * (double) aDrawSize.Height() / (double) aSizePix.Height() ); + aDrawSize.Width() = FRound((double)rParameters.getSizePixel().Width() * + (double)aDrawSize.Width() / (double)aSizePix.Width()); + aDrawSize.Height() = FRound((double)rParameters.getSizePixel().Height() * + (double)aDrawSize.Height() / (double)aSizePix.Height()); - aSizePix = *pSizePixel; + aSizePix = rParameters.getSizePixel(); } - if( aSizePix.Width() && aSizePix.Height() && !bUnlimited && - ( aSizePix.Width() > GRAPHIC_MTFTOBMP_MAXEXT || aSizePix.Height() > GRAPHIC_MTFTOBMP_MAXEXT ) ) + if( aSizePix.Width() && aSizePix.Height() && !rParameters.getUnlimitedSize() + && (aSizePix.Width() > GRAPHIC_MTFTOBMP_MAXEXT || aSizePix.Height() > GRAPHIC_MTFTOBMP_MAXEXT)) { const Size aOldSizePix( aSizePix ); double fWH = (double) aSizePix.Width() / aSizePix.Height(); @@ -533,6 +535,16 @@ Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) cons if( aVDev.SetOutputSizePixel( aSizePix ) ) { + if(rParameters.getAntiAliase()) + { + aVDev.SetAntialiasing(aVDev.GetAntialiasing() | ANTIALIASING_ENABLE_B2DDRAW); + } + + if(rParameters.getSnapHorVerLines()) + { + aVDev.SetAntialiasing(aVDev.GetAntialiasing() | ANTIALIASING_PIXELSNAPHAIRLINE); + } + ImplDraw( &aVDev, aNullPt, aDrawSize ); aRetBmp = aVDev.GetBitmap( aNullPt, aVDev.GetOutputSizePixel() ); } @@ -549,7 +561,7 @@ Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) cons // ------------------------------------------------------------------------ -BitmapEx ImpGraphic::ImplGetBitmapEx( const Size* pSizePixel, BOOL bUnlimited ) const +BitmapEx ImpGraphic::ImplGetBitmapEx(const GraphicConversionParameters& rParameters) const { BitmapEx aRetBmpEx; @@ -557,13 +569,13 @@ BitmapEx ImpGraphic::ImplGetBitmapEx( const Size* pSizePixel, BOOL bUnlimited ) { aRetBmpEx = ( mpAnimation ? mpAnimation->GetBitmapEx() : maEx ); - if( pSizePixel ) - aRetBmpEx.Scale( *pSizePixel ); + if(rParameters.getSizePixel().Width() || rParameters.getSizePixel().Height()) + aRetBmpEx.Scale(rParameters.getSizePixel()); } else if( ( meType != GRAPHIC_DEFAULT ) && ImplIsSupportedGraphic() ) { const ImpGraphic aMonoMask( maMetaFile.GetMonochromeMtf( COL_BLACK ) ); - aRetBmpEx = BitmapEx( ImplGetBitmap( pSizePixel, bUnlimited ), aMonoMask.ImplGetBitmap( pSizePixel, bUnlimited ) ); + aRetBmpEx = BitmapEx(ImplGetBitmap(rParameters), aMonoMask.ImplGetBitmap(rParameters)); } return aRetBmpEx; diff --git a/vcl/source/gdi/outdev.cxx b/vcl/source/gdi/outdev.cxx index 0e9da9f81136..ebcf31199364 100644 --- a/vcl/source/gdi/outdev.cxx +++ b/vcl/source/gdi/outdev.cxx @@ -68,6 +68,7 @@ #include #include #include +#include #include #include @@ -2285,8 +2286,35 @@ void OutputDevice::DrawLine( const Point& rStartPt, const Point& rEndPt ) if ( mbInitLineColor ) ImplInitLineColor(); - Point aStartPt = ImplLogicToDevicePixel( rStartPt ); - Point aEndPt = ImplLogicToDevicePixel( rEndPt ); + // #i101598# support AA and snap for lines, too + if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && IsLineColor()) + { + // at least transform with double precision to device coordinates; this will + // avoid pixel snap of single, appended lines + const basegfx::B2DHomMatrix aTransform(ImplGetDeviceTransformation()); + const basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 ); + basegfx::B2DPolygon aB2DPolyLine; + + aB2DPolyLine.append(basegfx::B2DPoint(rStartPt.X(), rStartPt.Y())); + aB2DPolyLine.append(basegfx::B2DPoint(rEndPt.X(), rEndPt.Y())); + aB2DPolyLine.transform( aTransform ); + + if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE) + { + aB2DPolyLine = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyLine); + } + + if(mpGraphics->DrawPolyLine(aB2DPolyLine, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this)) + { + return; + } + } + + const Point aStartPt(ImplLogicToDevicePixel(rStartPt)); + const Point aEndPt(ImplLogicToDevicePixel(rEndPt)); mpGraphics->DrawLine( aStartPt.X(), aStartPt.Y(), aEndPt.X(), aEndPt.Y(), this ); @@ -2445,21 +2473,27 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly ) ImplInitLineColor(); // use b2dpolygon drawing if possible - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)) + if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && IsLineColor()) { - ::basegfx::B2DPolygon aB2DPolyLine = rPoly.getB2DPolygon(); + basegfx::B2DPolygon aB2DPolyLine(rPoly.getB2DPolygon()); const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation(); - aB2DPolyLine.transform( aTransform ); const ::basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 ); - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && (mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE)) + // transform the polygon + aB2DPolyLine.transform( aTransform ); + + if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE) { - // #i98289# aB2DPolyLine = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyLine); } - if( mpGraphics->DrawPolyLine( aB2DPolyLine, aB2DLineWidth, basegfx::B2DLINEJOIN_ROUND, this ) ) + if(mpGraphics->DrawPolyLine(aB2DPolyLine, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this)) + { return; + } } Polygon aPoly = ImplLogicToDevicePixel( rPoly ); @@ -2598,13 +2632,40 @@ void OutputDevice::DrawPolygon( const Polygon& rPoly ) ImplInitFillColor(); // use b2dpolygon drawing if possible - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)) + if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && (IsLineColor() || IsFillColor())) { - ::basegfx::B2DPolyPolygon aB2DPolyPolygon( rPoly.getB2DPolygon() ); const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation(); - aB2DPolyPolygon.transform( aTransform ); - if( mpGraphics->DrawPolyPolygon( aB2DPolyPolygon, 0.0, this ) ) + basegfx::B2DPolygon aB2DPolygon(rPoly.getB2DPolygon()); + bool bSuccess(true); + + // transform the polygon and ensure closed + aB2DPolygon.transform(aTransform); + aB2DPolygon.setClosed(true); + + if(IsFillColor()) + { + bSuccess = mpGraphics->DrawPolyPolygon(basegfx::B2DPolyPolygon(aB2DPolygon), 0.0, this); + } + + if(bSuccess && IsLineColor()) + { + const ::basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 ); + + if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE) + { + aB2DPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolygon); + } + + bSuccess = mpGraphics->DrawPolyLine(aB2DPolygon, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this); + } + + if(bSuccess) + { return; + } } Polygon aPoly = ImplLogicToDevicePixel( rPoly ); @@ -2661,13 +2722,43 @@ void OutputDevice::DrawPolyPolygon( const PolyPolygon& rPolyPoly ) ImplInitFillColor(); // use b2dpolygon drawing if possible - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)) + if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && (IsLineColor() || IsFillColor())) { - ::basegfx::B2DPolyPolygon aB2DPolyPolygon = rPolyPoly.getB2DPolyPolygon(); const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation(); - aB2DPolyPolygon.transform( aTransform ); - if( mpGraphics->DrawPolyPolygon( aB2DPolyPolygon, 0.0, this ) ) + basegfx::B2DPolyPolygon aB2DPolyPolygon(rPolyPoly.getB2DPolyPolygon()); + bool bSuccess(true); + + // transform the polygon and ensure closed + aB2DPolyPolygon.transform(aTransform); + aB2DPolyPolygon.setClosed(true); + + if(IsFillColor()) + { + bSuccess = mpGraphics->DrawPolyPolygon(aB2DPolyPolygon, 0.0, this); + } + + if(bSuccess && IsLineColor()) + { + const ::basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 ); + + if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE) + { + aB2DPolyPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyPolygon); + } + + for(sal_uInt32 a(0); bSuccess && a < aB2DPolyPolygon.count(); a++) + { + bSuccess = mpGraphics->DrawPolyLine(aB2DPolyPolygon.getB2DPolygon(a), aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this); + } + } + + if(bSuccess) + { return; + } } if ( nPoly == 1 ) @@ -2748,13 +2839,43 @@ void OutputDevice::DrawPolyPolygon( const basegfx::B2DPolyPolygon& rB2DPolyPoly if( mbInitFillColor ) ImplInitFillColor(); - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)) + if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && (IsLineColor() || IsFillColor())) { - const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation(); - ::basegfx::B2DPolyPolygon aB2DPP = rB2DPolyPoly; - aB2DPP.transform( aTransform ); - if( mpGraphics->DrawPolyPolygon( aB2DPP, 0.0, this ) ) + const basegfx::B2DHomMatrix aTransform(ImplGetDeviceTransformation()); + basegfx::B2DPolyPolygon aB2DPolyPolygon(rB2DPolyPoly); + bool bSuccess(true); + + // transform the polygon and ensure closed + aB2DPolyPolygon.transform(aTransform); + aB2DPolyPolygon.setClosed(true); + + if(IsFillColor()) + { + bSuccess = mpGraphics->DrawPolyPolygon(aB2DPolyPolygon, 0.0, this); + } + + if(bSuccess && IsLineColor()) + { + const ::basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 ); + + if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE) + { + aB2DPolyPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyPolygon); + } + + for(sal_uInt32 a(0);bSuccess && a < aB2DPolyPolygon.count(); a++) + { + bSuccess = mpGraphics->DrawPolyLine(aB2DPolyPolygon.getB2DPolygon(a), aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this); + } + } + + if(bSuccess) + { return; + } } // fallback to old polygon drawing if needed @@ -2809,28 +2930,34 @@ void OutputDevice::DrawPolyLine( ImplInitLineColor(); // #i98289# use b2dpolygon drawing if possible - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)) + if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && IsLineColor()) { - const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation(); - ::basegfx::B2DVector aB2DLineWidth(1.0, 1.0); - - // transform the line width if used - if( fLineWidth != 0.0 ) - aB2DLineWidth = aTransform * ::basegfx::B2DVector( fLineWidth, fLineWidth ); + const basegfx::B2DHomMatrix aTransform(ImplGetDeviceTransformation()); + basegfx::B2DPolygon aB2DPolygon(rB2DPolygon); + basegfx::B2DVector aB2DLineWidth(1.0, 1.0); // transform the polygon - ::basegfx::B2DPolygon aB2DPL = rB2DPolygon; - aB2DPL.transform( aTransform ); + aB2DPolygon.transform(aTransform); - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && (mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE)) + // transform the line width if used + if(fLineWidth != 0.0) { - // #i98289# - aB2DPL = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPL); + aB2DLineWidth = aTransform * ::basegfx::B2DVector(fLineWidth, fLineWidth); + } + + if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE) + { + aB2DPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolygon); } // draw the polyline - if( mpGraphics->DrawPolyLine( aB2DPL, aB2DLineWidth, eLineJoin, this ) ) + if(mpGraphics->DrawPolyLine(aB2DPolygon, aB2DLineWidth, eLineJoin, this)) + { return; + } } // fallback to old polygon drawing if needed diff --git a/vcl/source/gdi/outdev6.cxx b/vcl/source/gdi/outdev6.cxx index cee4f475a577..a11e276982f7 100644 --- a/vcl/source/gdi/outdev6.cxx +++ b/vcl/source/gdi/outdev6.cxx @@ -185,14 +185,20 @@ void OutputDevice::DrawTransparent( const basegfx::B2DPolyPolygon& rB2DPolyPoly, if( mbInitFillColor ) ImplInitFillColor(); - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)) + if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && IsFillColor()) { // b2dpolygon support not implemented yet on non-UNX platforms const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation(); - ::basegfx::B2DPolyPolygon aB2DPP = rB2DPolyPoly; - aB2DPP.transform( aTransform ); + basegfx::B2DPolyPolygon aB2DPolyPolygon(rB2DPolyPoly); - if( mpGraphics->DrawPolyPolygon( aB2DPP, fTransparency, this ) ) + // transform the polygon and ensure closed + aB2DPolyPolygon.transform(aTransform); + aB2DPolyPolygon.setClosed(true); + + if(mpGraphics->DrawPolyPolygon(aB2DPolyPolygon, fTransparency, this)) { #if 0 // MetaB2DPolyPolygonAction is not implemented yet: -- cgit v1.2.3 From 801268f69c46e8b5f7f25af82806460c9f7b77f2 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Mon, 27 Jul 2009 17:18:56 +0000 Subject: CWS-TOOLING: integrate CWS cmcfixes60 2009-07-03 21:56:04 +0200 cmc r273718 : #i103313# org.openoffice.System not org.openoffice.Setup for looking up default locale 2009-07-01 17:15:31 +0200 cmc r273606 : #i102636# extra rounding precision 2009-07-01 11:04:47 +0200 cmc r273556 : #i100000# workaround build issue 2009-06-30 17:27:41 +0200 cmc r273525 : #i102636# extra rounding precision 2009-06-30 09:42:46 +0200 cmc r273491 : #i102634# numbers got mixed up somehow 2009-06-30 09:19:56 +0200 cmc r273490 : CWS-TOOLING: rebase CWS cmcfixes60 to trunk@273468 (milestone: DEV300:m51) 2009-06-22 12:54:45 +0200 cmc r273217 : #i103000# micro-optimization to remove unused symbols from fpicker etc. 2009-06-19 10:06:21 +0200 cmc r273148 : #i102932# put same type into an Any as we take out of that Any, affect 64bit 2009-06-13 17:38:42 +0200 cmc r272957 : #i102742# gcc44 warnings, return of const primitive type doesn't mean anything 2009-06-13 16:22:40 +0200 cmc r272955 : #i102737# keep existing logic and silence new gcc44 warnings 2009-06-13 16:06:25 +0200 cmc r272954 : #i102736# confirm existing logic to be gcc44 warnings free 2009-06-10 19:40:24 +0200 cmc r272837 : #i87461# 64bit color lossage 2009-06-10 19:23:38 +0200 cmc r272836 : #i102636# tidy up UI rounding errors --- i18npool/source/paper/paper.cxx | 9 +++++++-- svtools/source/misc1/adrparse.cxx | 16 ++++++++-------- unotools/inc/unotools/confignode.hxx | 2 +- unotools/source/config/confignode.cxx | 5 ----- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/i18npool/source/paper/paper.cxx b/i18npool/source/paper/paper.cxx index a81b9b370b8c..726a4c3bd898 100644 --- a/i18npool/source/paper/paper.cxx +++ b/i18npool/source/paper/paper.cxx @@ -63,7 +63,7 @@ struct PageDesc (long)(((v) * 35.27777778) + 0.5) #define IN2MM100( v ) \ - ((long)((v) * 2540)) + ((long)(((v) * 2540) + 0.5)) #define MM2MM100( v ) \ ((long)((v) * 100)) @@ -362,11 +362,16 @@ PaperInfo PaperInfo::getSystemDefaultPaper() { // if set to "use system", try to get locale from system if( aLocaleStr.getLength() == 0 ) + { + aArgs[ 0 ] <<= CREATE_OUSTRING( "org.openoffice.System/L10N/" ); + xConfigNA.set( xConfigProv->createInstanceWithArguments( + CREATE_OUSTRING( "com.sun.star.configuration.ConfigurationAccess" ), aArgs ), + UNO_QUERY_THROW ); xConfigNA->getByName( CREATE_OUSTRING( "Locale" ) ) >>= aLocaleStr; + } } catch( Exception& ) {} - if (aLocaleStr.getLength() == 0) aLocaleStr = CREATE_OUSTRING("en-US"); diff --git a/svtools/source/misc1/adrparse.cxx b/svtools/source/misc1/adrparse.cxx index d9b389513f80..37c25d6c669f 100644 --- a/svtools/source/misc1/adrparse.cxx +++ b/svtools/source/misc1/adrparse.cxx @@ -172,8 +172,8 @@ inline void SvAddressParser_Impl::addTokenToRealName() if (!m_pRealNameBegin) m_pRealNameBegin = m_pRealNameContentBegin = m_pCurTokenBegin; else if (m_pRealNameEnd < m_pCurTokenBegin - 1 - || m_pRealNameEnd == m_pCurTokenBegin - 1 - && *m_pRealNameEnd != ' ') + || (m_pRealNameEnd == m_pCurTokenBegin - 1 + && *m_pRealNameEnd != ' ')) m_bRealNameReparse = true; m_pRealNameEnd = m_pRealNameContentEnd = m_pCurTokenEnd; } @@ -634,8 +634,8 @@ SvAddressParser_Impl::SvAddressParser_Impl(SvAddressParser * pParser, else { m_pAddrSpec = m_aInnerAddrSpec.isValid() - || !m_aOuterAddrSpec.isValid() - && m_aInnerAddrSpec.isPoorlyValid() ? + || (!m_aOuterAddrSpec.isValid() + && m_aInnerAddrSpec.isPoorlyValid()) ? &m_aInnerAddrSpec : m_aOuterAddrSpec.isPoorlyValid() ? &m_aOuterAddrSpec : 0; @@ -663,11 +663,11 @@ SvAddressParser_Impl::SvAddressParser_Impl(SvAddressParser * pParser, } UniString aTheRealName; if (!m_pRealNameBegin - || m_pAddrSpec == &m_aOuterAddrSpec + || (m_pAddrSpec == &m_aOuterAddrSpec && m_pRealNameBegin == m_aOuterAddrSpec.m_pBegin && m_pRealNameEnd == m_aOuterAddrSpec.m_pEnd - && m_pFirstCommentBegin) + && m_pFirstCommentBegin)) if (!m_pFirstCommentBegin) aTheRealName = aTheAddrSpec; else if (m_bFirstCommentReparse) @@ -820,7 +820,7 @@ bool SvAddressParser::createRFC822Mailbox(String const & rPhrase, return false; if (*p == '"') break; - if (*p == '\x0D' || *p == '\\' && ++p == pEnd + if (*p == '\x0D' || (*p == '\\' && ++p == pEnd) || !INetMIME::isUSASCII(*p)) return false; if (INetMIME::needsQuotedStringEscape(*p)) @@ -868,7 +868,7 @@ bool SvAddressParser::createRFC822Mailbox(String const & rPhrase, return false; if (*p == ']') break; - if (*p == '\x0D' || *p == '[' || *p == '\\' && ++p == pEnd + if (*p == '\x0D' || *p == '[' || (*p == '\\' && ++p == pEnd) || !INetMIME::isUSASCII(*p)) return false; if (*p >= '[' && *p <= ']') diff --git a/unotools/inc/unotools/confignode.hxx b/unotools/inc/unotools/confignode.hxx index a50025a6ab50..580274004e1a 100644 --- a/unotools/inc/unotools/confignode.hxx +++ b/unotools/inc/unotools/confignode.hxx @@ -86,7 +86,7 @@ namespace utl const OConfigurationNode& operator=(const OConfigurationNode& _rSource); /// dtor - ~OConfigurationNode(); + ~OConfigurationNode() {} /** open a sub node @param _rPath access path of the to-be-opened sub node. May be a hierarchical path. diff --git a/unotools/source/config/confignode.cxx b/unotools/source/config/confignode.cxx index 56d0b1b06118..4b1b9fe272db 100644 --- a/unotools/source/config/confignode.cxx +++ b/unotools/source/config/confignode.cxx @@ -129,11 +129,6 @@ namespace utl return *this; } - //------------------------------------------------------------------------ - OConfigurationNode::~OConfigurationNode() - { - } - //------------------------------------------------------------------------ void OConfigurationNode::_disposing( const EventObject& _rSource ) { -- cgit v1.2.3 From 9c4ae699b5b91fa193b4ccf0bf29a3c1e69676b4 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Tue, 28 Jul 2009 09:21:19 +0000 Subject: CWS-TOOLING: integrate CWS fwk112 2009-07-17 08:54:15 +0200 cd r274075 : #i102094# MinGW needs additional path info for linking 2009-07-13 15:09:07 +0200 cd r273938 : #i102094# Add special part for MinGW linking to imagehlp.lib 2009-07-10 08:05:14 +0200 cd r273871 : #i102094# Use size_t for constant values to fix warnings 2009-07-09 13:45:27 +0200 cd r273859 : #i102094# MinGW needs include malloc.h for function alloca 2009-07-09 12:37:39 +0200 cd r273856 : #i102094# Fix problem with signed/unsigned comparision warning 2009-06-19 11:34:40 +0200 cd r273154 : #i102094# Added comment for future maintenance 2009-06-19 11:34:11 +0200 cd r273153 : #i102094# Added comment for future maintenance 2009-06-16 17:25:03 +0200 cd r273032 : #i102094# Extend md5.cxx to detect Windows PE images and ignore PE header date+time/checksum to have the same MD5 checksum 2009-06-16 17:22:47 +0200 cd r273031 : #i102094# Added rebase custom action 2009-06-16 17:01:12 +0200 cd r273030 : #i102094# Use rebaseoo.exe instead of rebase.exe to prevent clash with build tool 2009-06-16 17:00:34 +0200 cd r273029 : #i102094# Execute rebase custom action for administrative installations 2009-06-16 16:59:11 +0200 cd r273028 : #i102094# Small changes for rebaseoo/rebasegui tools 2009-06-16 16:58:29 +0200 cd r273027 : i102094# Deliver rebase tool as rebaseoo.exe as build env already use a rebase.exe 2009-06-16 16:57:15 +0200 cd r273026 : i102094# Crash reporter should not use PE header date+time/checksum data for MD5 checksum 2009-05-29 17:03:26 +0200 cd r272474 : #i102094# Fix wrong deliver statement 2009-05-29 14:55:35 +0200 cd r272459 : #i102904# Make executables more robust. Add error message if installation cannot be found 2009-05-28 17:41:07 +0200 cd r272422 : CWS-TOOLING: rebase CWS fwk112 to trunk@272291 (milestone: DEV300:m49) 2009-05-28 17:31:27 +0200 cd r272421 : #i10000# Resolve conflict on merge 2009-05-28 15:32:09 +0200 cd r272409 : #i102094# Added resource and localization files for rebasegui tool 2009-05-27 13:56:33 +0200 cd r272341 : #i102094# Added new command line tool to rebase libraries to a default virtual load address. Additional GUI tool to check the state of an installation 2009-05-26 10:49:20 +0200 cd r272285 : #i102094# New command line tool to rebase libraries to a default virtual load address 2009-05-26 10:40:02 +0200 cd r272282 : #i102094# New command line tool to rebase libraries to a default virtual load address 2009-05-26 08:57:24 +0200 cd r272280 : #i102094# Fixed wrong variable usage 2009-05-26 08:41:29 +0200 cd r272278 : #i102094# New command line tool to rebase libraries to a default virtual load address 2009-05-20 16:47:24 +0200 cd r272141 : #102094# Added missing include statement for debug build 2009-05-20 15:39:21 +0200 is r272136 : #102094# rebase to default value in installation 2009-05-20 15:38:38 +0200 is r272135 : #102094# rebase to default value in installation 2009-05-20 15:37:45 +0200 is r272134 : #102094# rebase to default value in installation --- tools/bootstrp/md5.cxx | 64 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/tools/bootstrp/md5.cxx b/tools/bootstrp/md5.cxx index bca89725fac2..a234f278cc9d 100644 --- a/tools/bootstrp/md5.cxx +++ b/tools/bootstrp/md5.cxx @@ -44,8 +44,62 @@ #define FILE_OPEN_READ "r" #endif +// Extended calc_md5_checksum to recognize Windows executables and libraries. To +// create the same md5 checksum for a (code/data) identical file it ignores a different +// date and header checksum. Please see crashrep/source/win32/soreport.cpp +// where the same method is also used. The crash reporter uses the MD5 +// checksums to transfer them to the crash database. You have to make sure that both +// methods use the same algorithm otherwise there could be problems with stack reports. + +void normalize_pe_image(sal_uInt8* buffer, size_t nBufferSize) +{ + const int OFFSET_PE_OFFSET = 0x3c; + const int OFFSET_COFF_TIMEDATESTAMP = 4; + const int PE_SIGNATURE_SIZE = 4; + const int COFFHEADER_SIZE = 20; + const int OFFSET_PE_OPTIONALHEADER_CHECKSUM = 64; + + // Check the header part of the file buffer + if (buffer[0] == sal_uInt8('M') && buffer[1] == sal_uInt8('Z')) + { + unsigned long PEHeaderOffset = (long)buffer[OFFSET_PE_OFFSET]; + if (PEHeaderOffset < nBufferSize-4) + { + if ( buffer[PEHeaderOffset+0] == sal_uInt8('P') && + buffer[PEHeaderOffset+1] == sal_uInt8('E') && + buffer[PEHeaderOffset+2] == 0 && + buffer[PEHeaderOffset+3] == 0 ) + { + PEHeaderOffset += PE_SIGNATURE_SIZE; + if (PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP < nBufferSize-4) + { + // Set timedatestamp and checksum fields to a normalized + // value to enforce the same MD5 checksum for identical + // Windows executables/libraries. + buffer[PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP+0] = 0; + buffer[PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP+1] = 0; + buffer[PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP+2] = 0; + buffer[PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP+3] = 0; + } + + if (PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM < nBufferSize-4) + { + // Set checksum to a normalized value + buffer[PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM] = 0; + buffer[PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM+1] = 0; + buffer[PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM+2] = 0; + buffer[PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM+3] = 0; + } + } + } + } +} + rtlDigestError calc_md5_checksum( const char *filename, ByteString &aChecksum ) { + const size_t BUFFER_SIZE = 0x1000; + const size_t MINIMAL_SIZE = 512; + sal_uInt8 checksum[RTL_DIGEST_LENGTH_MD5]; rtlDigestError error = rtl_Digest_E_None; @@ -58,11 +112,19 @@ rtlDigestError calc_md5_checksum( const char *filename, ByteString &aChecksum ) if ( digest ) { size_t nBytesRead; - sal_uInt8 buffer[0x1000]; + sal_uInt8 buffer[BUFFER_SIZE]; + bool bHeader(true); while ( rtl_Digest_E_None == error && 0 != (nBytesRead = fread( buffer, 1, sizeof(buffer), fp )) ) { + if (bHeader) + { + bHeader = false; + if (nBytesRead >= MINIMAL_SIZE && buffer[0] == sal_uInt8('M') && buffer[1] == sal_uInt8('Z') ) + normalize_pe_image(buffer, nBytesRead); + } + error = rtl_digest_updateMD5( digest, buffer, nBytesRead ); } -- cgit v1.2.3 From f14430833c3204785ceb95dba8ba81fd9704cf27 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Tue, 28 Jul 2009 10:28:03 +0000 Subject: CWS-TOOLING: integrate CWS ooo311gsl06_DEV300 2009-07-21 16:30:28 +0200 hdu r274204 : #i102486# right align text one pixel left of right edge 2009-07-20 16:47:50 +0200 hdu r274150 : #i103446# fix use case of GetTextBreak() when there is no room at all for the text --- vcl/aqua/source/gdi/salatslayout.cxx | 5 ++--- vcl/source/gdi/outdev3.cxx | 7 +++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/vcl/aqua/source/gdi/salatslayout.cxx b/vcl/aqua/source/gdi/salatslayout.cxx index cec842739de3..7ecef01cf0d5 100755 --- a/vcl/aqua/source/gdi/salatslayout.cxx +++ b/vcl/aqua/source/gdi/salatslayout.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: salatslayout.cxx,v $ - * $Revision: 1.12 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -745,6 +742,8 @@ int ATSLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) cons // get a quick overview on what could fit const long nPixelWidth = (nMaxWidth - (nCharExtra * mnCharCount)) / nFactor; + if( nPixelWidth <= 0 ) + return mnMinCharPos; // check assumptions DBG_ASSERT( !mnTrailingSpaceWidth, "ATSLayout::GetTextBreak() with nTSW!=0" ); diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx index 9d876c7bdcb5..710620d54ab8 100644 --- a/vcl/source/gdi/outdev3.cxx +++ b/vcl/source/gdi/outdev3.cxx @@ -7,7 +7,6 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: outdev3.cxx,v $ - * $Revision: 1.240.14.5 $ * * This file is part of OpenOffice.org. * @@ -6484,7 +6483,7 @@ SalLayout* OutputDevice::ImplLayout( const String& rOrigStr, nRTLOffset = nPixelWidth; else nRTLOffset = pSalLayout->GetTextWidth() / pSalLayout->GetUnitsPerPixel(); - pSalLayout->DrawOffset().X() = -nRTLOffset; + pSalLayout->DrawOffset().X() = 1 - nRTLOffset; } return pSalLayout; @@ -6919,13 +6918,13 @@ void OutputDevice::ImplDrawText( const Rectangle& rRect, nStyle &= ~TEXT_DRAW_CLIP; } - // Vertikales Alignment + // horizontal text alignment if ( nStyle & TEXT_DRAW_RIGHT ) aPos.X() += nWidth-nTextWidth; else if ( nStyle & TEXT_DRAW_CENTER ) aPos.X() += (nWidth-nTextWidth)/2; - // Font Alignment + // vertical font alignment if ( eAlign == ALIGN_BOTTOM ) aPos.Y() += nTextHeight; else if ( eAlign == ALIGN_BASELINE ) -- cgit v1.2.3 From bbce7b8a5901b4f41c8814849f4422588d7807c9 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Tue, 28 Jul 2009 16:11:04 +0000 Subject: CWS-TOOLING: integrate CWS filepicker01 2009-07-03 13:21:25 +0200 cd r273690 : #i102319# Use GetSelectedFiles() instead of GetMPath() to retrieve a set of selected files 2009-07-01 14:27:56 +0200 cd r273582 : #i64800# Use ParseDisplayName correctly and don't allocate memory for an output parameter 2009-07-01 10:47:47 +0200 cd r273553 : #i102701# Make P1 fix for CWS filepicker01, too. 2009-06-29 11:58:09 +0200 cd r273463 : i102319# File picker should NOT set multi selection as a default. 2009-06-29 11:49:10 +0200 cd r273461 : #i102319# Use XFilePicker2 interface to retrieve files from multi selection 2009-06-26 15:42:43 +0200 cd r273423 : #i99759# Release solar mutex before blocking on execute() when using system file picker 2009-06-26 15:35:50 +0200 cd r273422 : #i99759# Don't release solar mutex in shutdown(). Must be done before calling execute() 2009-06-23 11:40:02 +0200 cd r273267 : #i95425# Fixed wrong initialization of TimeValue members 2009-06-23 10:35:20 +0200 cd r273262 : #i99759# Fix deadlock on Windows XP/2000 because of removing Picker Thread from sfx2. Now CAsyncEventNotifierThread releases the solar mutex before blocking 2009-06-22 11:59:15 +0200 cd r273209 : #i102948# Remove links from toolbar object when using lazy delete as the toolbar manager is now destroyed before the toolbar 2009-06-22 11:22:14 +0200 cd r273204 : #i99759# Don't use a new thread to call the file picker. As a consequence this thread is also calling Application::Yield() and therefore is fighting with the main thread for messages 2009-06-22 11:13:32 +0200 cd r273203 : #i99759# Solar mutex must be locked before calling Application::Yield() 2009-06-19 15:23:01 +0200 cd r273161 : #i102948# Remove/add decorated window from/into old/new parent decorated window list 2009-06-19 12:49:37 +0200 cd r273156 : #i101843# Use new COM based dialog implementation from Windows Vista on --- vcl/source/window/window.cxx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index 86d6347617b0..5333d20d4306 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -6221,6 +6221,15 @@ void Window::SetParent( Window* pNewParent ) pSysWin->GetTaskPaneList()->RemoveWindow( this ); } } + // remove ownerdraw decorated windows from list in the top-most frame window + if( (GetStyle() & WB_OWNERDRAWDECORATION) && mpWindowImpl->mbFrame ) + { + ::std::vector< Window* >& rList = ImplGetOwnerDrawList(); + ::std::vector< Window* >::iterator p; + p = ::std::find( rList.begin(), rList.end(), this ); + if( p != rList.end() ) + rList.erase( p ); + } ImplSetFrameParent( pNewParent ); @@ -6350,6 +6359,9 @@ void Window::SetParent( Window* pNewParent ) if( bChangeTaskPaneList ) pNewSysWin->GetTaskPaneList()->AddWindow( this ); + if( (GetStyle() & WB_OWNERDRAWDECORATION) && mpWindowImpl->mbFrame ) + ImplGetOwnerDrawList().push_back( this ); + if ( bVisible ) Show( TRUE, SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE ); } -- cgit v1.2.3 From 1729a188555ab18269b793726eb72e8cd9217773 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Tue, 28 Jul 2009 16:27:10 +0000 Subject: CWS-TOOLING: integrate CWS thaical311_DEV300 2009-07-21 12:42:57 +0200 er r274181 : #i102356# init: force Gregorian calendar in spite of what ICU may default to for a locale --- i18npool/source/calendar/calendar_gregorian.cxx | 34 ++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/i18npool/source/calendar/calendar_gregorian.cxx b/i18npool/source/calendar/calendar_gregorian.cxx index 96eee0772bc1..50b61eae5cf1 100644 --- a/i18npool/source/calendar/calendar_gregorian.cxx +++ b/i18npool/source/calendar/calendar_gregorian.cxx @@ -148,10 +148,42 @@ void SAL_CALL Calendar_gregorian::init(Era *_eraArray) { cCalendar = "com.sun.star.i18n.Calendar_gregorian"; + + // #i102356# With icu::Calendar::createInstance(UErrorCode) in a Thai + // th_TH system locale we accidentally used a Buddhist calendar. Though + // the ICU documentation says that should be the case only for + // th_TH_TRADITIONAL (and ja_JP_TRADITIONAL Gengou), a plain th_TH + // already triggers that behavior, ja_JP does not. Strange enough, + // passing a th_TH locale to the calendar creation doesn't trigger + // this. + // See also http://userguide.icu-project.org/datetime/calendar + + // Whatever ICU offers as the default calendar for a locale, ensure we + // have a Gregorian calendar as requested. + + /* XXX: with the current implementation the aLocale member variable is + * not set prior to loading a calendar from locale data. This + * creates an empty (root) locale for ICU, but at least the correct + * calendar is used. The language part must not be NULL (respectively + * not all, language and country and variant), otherwise the current + * default locale would be used again and the calendar keyword ignored. + * */ + icu::Locale aIcuLocale( "", NULL, NULL, "calendar=gregorian"); + UErrorCode status; - body = icu::Calendar::createInstance(status = U_ZERO_ERROR); + body = icu::Calendar::createInstance( aIcuLocale, status = U_ZERO_ERROR); if (!body || !U_SUCCESS(status)) throw ERROR; +#if 0 + { + icu::Locale loc; + loc = body->getLocale( ULOC_ACTUAL_LOCALE, status = U_ZERO_ERROR); + fprintf( stderr, "\nICU calendar actual locale: %s\n", loc.getName()); + loc = body->getLocale( ULOC_VALID_LOCALE, status = U_ZERO_ERROR); + fprintf( stderr, "ICU calendar valid locale: %s\n", loc.getName()); + } +#endif + eraArray=_eraArray; } -- cgit v1.2.3 From 24365b5de833aa8bf0c98d0ffc614f4d7164cd33 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Wed, 29 Jul 2009 14:40:58 +0000 Subject: CWS-TOOLING: integrate CWS dba311b_DEV300 2009-07-08 11:52:32 +0200 fs r273825 : #i101701# always Draw (instead of PaintToDevice) when exporting to PDF, there's no reason to care for IsExportFormFields, this is done in higher layers --- toolkit/source/awt/vclxwindow.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolkit/source/awt/vclxwindow.cxx b/toolkit/source/awt/vclxwindow.cxx index 125d134cd3fd..337400c08713 100644 --- a/toolkit/source/awt/vclxwindow.cxx +++ b/toolkit/source/awt/vclxwindow.cxx @@ -2537,7 +2537,7 @@ void VCLXWindow::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno: vcl::PDFExtOutDevData* pPDFExport = dynamic_cast(pDev->GetExtOutDevData()); bool bDrawSimple = ( pDev->GetOutDevType() == OUTDEV_PRINTER ) || ( pDev->GetOutDevViewType() == OUTDEV_VIEWTYPE_PRINTPREVIEW ) - || ( pPDFExport && ! pPDFExport->GetIsExportFormFields() ); + || ( pPDFExport != NULL ); if ( bDrawSimple ) { pWindow->Draw( pDev, aP, aSz, WINDOW_DRAW_NOCONTROLS ); -- cgit v1.2.3 From b1afe0f67dca54e3deec4110f1760dd4880e6762 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Wed, 29 Jul 2009 15:33:56 +0000 Subject: CWS-TOOLING: integrate CWS cmcfixes61 2009-07-22 10:53:14 +0200 cmc r274224 : #i103714# duplicate patch 2009-07-22 10:45:26 +0200 cmc r274223 : #i103715# fix up m68k makefile.mk 2009-07-22 10:32:16 +0200 cmc r274222 : #i103714# || && new gcc warnings 2009-07-21 13:29:17 +0200 cmc r274190 : #i103651# fix for subpixel gray line in cairo canvas animations 2009-07-20 17:35:58 +0200 cmc r274151 : #i103668# WaE over use of const 2009-07-20 15:53:51 +0200 cmc r274146 : #i103664# use boost::addressof instead 2009-07-20 15:38:40 +0200 cmc r274145 : #i103451# long -> INT32 for these streamable values 2009-07-20 15:33:15 +0200 cmc r274144 : #i103663 clear low-hanging aliasing warnings 2009-07-20 15:28:23 +0200 cmc r274143 : #i103662 clear low-hanging aliasing warnings 2009-07-20 15:21:46 +0200 cmc r274142 : #i103661 clear low-hanging aliasing warnings 2009-07-20 15:16:05 +0200 cmc r274141 : #i103660 clear low-hanging aliasing warnings --- canvas/source/cairo/cairo_canvashelper.cxx | 2 +- svtools/source/control/scrwin.cxx | 4 ++-- vcl/source/glyphs/gcach_ftyp.cxx | 24 ++++++++++++------------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/canvas/source/cairo/cairo_canvashelper.cxx b/canvas/source/cairo/cairo_canvashelper.cxx index f1c54e9b4ab7..9cf2dd978759 100644 --- a/canvas/source/cairo/cairo_canvashelper.cxx +++ b/canvas/source/cairo/cairo_canvashelper.cxx @@ -888,7 +888,7 @@ namespace cairocanvas nY = aP.getY(); cairo_matrix_transform_point( &aOrigMatrix, &nX, &nY ); - if( ! bIsBezier && bIsRectangle ) { + if( ! bIsBezier && (bIsRectangle || aOperation == Clip) ) { nX = basegfx::fround( nX ); nY = basegfx::fround( nY ); } diff --git a/svtools/source/control/scrwin.cxx b/svtools/source/control/scrwin.cxx index 9805110c9254..162f23948385 100644 --- a/svtools/source/control/scrwin.cxx +++ b/svtools/source/control/scrwin.cxx @@ -273,8 +273,8 @@ void __EXPORT ScrollableWindow::Resize() // disable painting in the corner between the scrollbars if ( bVVisible && bHVisible ) { - aCornerWin.SetPosSizePixel( - *((Point*) &aOutPixSz), Size(nScrSize, nScrSize) ); + aCornerWin.SetPosSizePixel(Point(aOutPixSz.Width(), aOutPixSz.Height()), + Size(nScrSize, nScrSize) ); aCornerWin.Show(); } else diff --git a/vcl/source/glyphs/gcach_ftyp.cxx b/vcl/source/glyphs/gcach_ftyp.cxx index d149ee26284f..591557eaa091 100644 --- a/vcl/source/glyphs/gcach_ftyp.cxx +++ b/vcl/source/glyphs/gcach_ftyp.cxx @@ -1058,7 +1058,7 @@ static inline void SplitGlyphFlags( const FreetypeServerFont& rFont, int& nGlyph // ----------------------------------------------------------------------- int FreetypeServerFont::ApplyGlyphTransform( int nGlyphFlags, - FT_GlyphRec_* pGlyphFT, bool bForBitmapProcessing ) const + FT_Glyph pGlyphFT, bool bForBitmapProcessing ) const { int nAngle = GetFontSelData().mnOrientation; // shortcut most common case @@ -1130,9 +1130,9 @@ int FreetypeServerFont::ApplyGlyphTransform( int nGlyphFlags, else { // FT<=2005 ignores transforms for bitmaps, so do it manually - FT_BitmapGlyph& rBmpGlyphFT = reinterpret_cast(pGlyphFT); - rBmpGlyphFT->left += (aVector.x + 32) >> 6; - rBmpGlyphFT->top += (aVector.y + 32) >> 6; + FT_BitmapGlyph pBmpGlyphFT = reinterpret_cast(pGlyphFT); + pBmpGlyphFT->left += (aVector.x + 32) >> 6; + pBmpGlyphFT->top += (aVector.y + 32) >> 6; } return nAngle; @@ -1440,12 +1440,12 @@ bool FreetypeServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap } } - const FT_BitmapGlyph& rBmpGlyphFT = reinterpret_cast(pGlyphFT); + const FT_BitmapGlyph pBmpGlyphFT = reinterpret_cast(pGlyphFT); // NOTE: autohinting in FT<=2.0.2 miscalculates the offsets below by +-1 - rRawBitmap.mnXOffset = +rBmpGlyphFT->left; - rRawBitmap.mnYOffset = -rBmpGlyphFT->top; + rRawBitmap.mnXOffset = +pBmpGlyphFT->left; + rRawBitmap.mnYOffset = -pBmpGlyphFT->top; - const FT_Bitmap& rBitmapFT = rBmpGlyphFT->bitmap; + const FT_Bitmap& rBitmapFT = pBmpGlyphFT->bitmap; rRawBitmap.mnHeight = rBitmapFT.rows; rRawBitmap.mnBitCount = 1; if( mbArtBold && !pFTEmbolden ) @@ -1595,11 +1595,11 @@ bool FreetypeServerFont::GetGlyphBitmap8( int nGlyphIndex, RawBitmap& rRawBitmap } } - const FT_BitmapGlyph& rBmpGlyphFT = reinterpret_cast(pGlyphFT); - rRawBitmap.mnXOffset = +rBmpGlyphFT->left; - rRawBitmap.mnYOffset = -rBmpGlyphFT->top; + const FT_BitmapGlyph pBmpGlyphFT = reinterpret_cast(pGlyphFT); + rRawBitmap.mnXOffset = +pBmpGlyphFT->left; + rRawBitmap.mnYOffset = -pBmpGlyphFT->top; - const FT_Bitmap& rBitmapFT = rBmpGlyphFT->bitmap; + const FT_Bitmap& rBitmapFT = pBmpGlyphFT->bitmap; rRawBitmap.mnHeight = rBitmapFT.rows; rRawBitmap.mnWidth = rBitmapFT.width; rRawBitmap.mnBitCount = 8; -- cgit v1.2.3 From 3bf6f1976814b5488c4572954dbadf624a4130cf Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Thu, 30 Jul 2009 10:24:24 +0000 Subject: CWS-TOOLING: integrate CWS wordencryption 2009-07-10 09:42:25 +0200 mav r273872 : resolve merge problem 2009-07-08 07:46:13 +0200 mav r273815 : CWS-TOOLING: rebase CWS wordencryption to trunk@273468 (milestone: DEV300:m51) 2009-07-03 10:38:03 +0200 mav r273682 : #i10000# resolve conflict 2009-07-02 08:47:35 +0200 steve_yin r273618 : Removed IBM(C) from modified files. 2009-06-22 04:34:44 +0200 steve_yin r273191 : Based on Mikhail suggestions, I changed some code. 2009-06-18 09:37:14 +0200 mav r273100 : #i10000# get rid of windows warnings 2009-06-17 08:18:33 +0200 mav r273047 : #i10000# adopt for linux build --- svtools/inc/docmspasswdrequest.hxx | 72 ++++++++++++++ svtools/inc/pch/precompiled_svtools.hxx | 1 + svtools/prj/d.lst | 1 + svtools/source/misc1/docmspasswdrequest.cxx | 143 ++++++++++++++++++++++++++++ svtools/source/misc1/makefile.mk | 1 + 5 files changed, 218 insertions(+) create mode 100644 svtools/inc/docmspasswdrequest.hxx create mode 100644 svtools/source/misc1/docmspasswdrequest.cxx diff --git a/svtools/inc/docmspasswdrequest.hxx b/svtools/inc/docmspasswdrequest.hxx new file mode 100644 index 000000000000..684bffe71760 --- /dev/null +++ b/svtools/inc/docmspasswdrequest.hxx @@ -0,0 +1,72 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright IBM Corporation 2009. + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: docmspasswdrequest.hxx,v $ + * $Revision: 1.0 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX +#define INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX + +#include "svtools/svldllapi.h" +#include +#include +#include +#include + +class MSAbortContinuation; +class MSPasswordContinuation; + +class SVL_DLLPUBLIC RequestMSDocumentPassword : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest > +{ + ::com::sun::star::uno::Any m_aRequest; + + ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > + > m_lContinuations; + + MSAbortContinuation* m_pAbort; + MSPasswordContinuation* m_pPassword; + +public: + RequestMSDocumentPassword( ::com::sun::star::task::PasswordRequestMode nMode, ::rtl::OUString aName ); + + sal_Bool isAbort(); + sal_Bool isPassword(); + + ::rtl::OUString getPassword(); + + virtual ::com::sun::star::uno::Any SAL_CALL getRequest() + throw( ::com::sun::star::uno::RuntimeException ); + + virtual ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > + > SAL_CALL getContinuations() + throw( ::com::sun::star::uno::RuntimeException ); +}; + +#endif /* INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX */ diff --git a/svtools/inc/pch/precompiled_svtools.hxx b/svtools/inc/pch/precompiled_svtools.hxx index 440bd04dce36..cab81cac04ec 100644 --- a/svtools/inc/pch/precompiled_svtools.hxx +++ b/svtools/inc/pch/precompiled_svtools.hxx @@ -227,6 +227,7 @@ #include #include #include +#include #include #include #include diff --git a/svtools/prj/d.lst b/svtools/prj/d.lst index 6b85194db6c1..4ff74419b9d4 100644 --- a/svtools/prj/d.lst +++ b/svtools/prj/d.lst @@ -312,6 +312,7 @@ mkdir: %_DEST%\inc%_EXT%\svtools ..\inc\textwindowaccessibility.hxx %_DEST%\inc%_EXT%\svtools\textwindowaccessibility.hxx ..\inc\docpasswdrequest.hxx %_DEST%\inc%_EXT%\svtools\docpasswdrequest.hxx +..\inc\docmspasswdrequest.hxx %_DEST%\inc%_EXT%\svtools\docmspasswdrequest.hxx ..\inc\fontsubstconfig.hxx %_DEST%\inc%_EXT%\svtools\fontsubstconfig.hxx ..\inc\apearcfg.hxx %_DEST%\inc%_EXT%\svtools\apearcfg.hxx ..\inc\fltrcfg.hxx %_DEST%\inc%_EXT%\svtools\fltrcfg.hxx diff --git a/svtools/source/misc1/docmspasswdrequest.cxx b/svtools/source/misc1/docmspasswdrequest.cxx new file mode 100644 index 000000000000..e892d3a57d1a --- /dev/null +++ b/svtools/source/misc1/docmspasswdrequest.cxx @@ -0,0 +1,143 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright IBM Corporation 2009. + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: docmspasswdrequest.cxx,v $ + * $Revision: 1.0 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + +#include "docmspasswdrequest.hxx" +#include +#include + +//========================================================================== + +class MSAbortContinuation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionAbort > +{ + sal_Bool mbSelected; + +public: + MSAbortContinuation() : mbSelected( sal_False ) {} + + sal_Bool isSelected() { return mbSelected; } + + void reset() { mbSelected = sal_False; } + + virtual void SAL_CALL select() throw(::com::sun::star::uno::RuntimeException) { mbSelected = sal_True; } +}; + +//========================================================================== + +class MSPasswordContinuation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionPassword > +{ + sal_Bool mbSelected; + ::rtl::OUString maPassword; + +public: + MSPasswordContinuation() : mbSelected( sal_False ) {} + + sal_Bool isSelected() { return mbSelected; } + + void reset() { mbSelected = sal_False; } + + virtual void SAL_CALL select() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPassword( const ::rtl::OUString& aPass ) throw (::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getPassword( ) throw (::com::sun::star::uno::RuntimeException); +}; + +void SAL_CALL MSPasswordContinuation::select() + throw(::com::sun::star::uno::RuntimeException) +{ + mbSelected = sal_True; +} + +void SAL_CALL MSPasswordContinuation::setPassword( const ::rtl::OUString& aPass ) + throw (::com::sun::star::uno::RuntimeException) +{ + maPassword = aPass; +} + +::rtl::OUString SAL_CALL MSPasswordContinuation::getPassword() + throw (::com::sun::star::uno::RuntimeException) +{ + return maPassword; +} + +//========================================================================== + +RequestMSDocumentPassword::RequestMSDocumentPassword( ::com::sun::star::task::PasswordRequestMode nMode, ::rtl::OUString aName ) +{ + ::rtl::OUString temp; + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > temp2; + ::com::sun::star::task::DocumentMSPasswordRequest + aDocumentMSPasswordRequest( temp, + temp2, + ::com::sun::star::task::InteractionClassification_QUERY, + nMode, + aName ); + + m_aRequest <<= aDocumentMSPasswordRequest; + + m_pAbort = new MSAbortContinuation; + m_pPassword = new MSPasswordContinuation; + + m_lContinuations.realloc( 2 ); + m_lContinuations[0] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pAbort ); + m_lContinuations[1] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pPassword ); +} + +sal_Bool RequestMSDocumentPassword::isAbort() +{ + return m_pAbort->isSelected(); +} + +sal_Bool RequestMSDocumentPassword::isPassword() +{ + return m_pPassword->isSelected(); +} + +::rtl::OUString RequestMSDocumentPassword::getPassword() +{ + return m_pPassword->getPassword(); +} + +::com::sun::star::uno::Any SAL_CALL RequestMSDocumentPassword::getRequest() + throw( ::com::sun::star::uno::RuntimeException ) +{ + return m_aRequest; +} + +::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > + SAL_CALL RequestMSDocumentPassword::getContinuations() + throw( ::com::sun::star::uno::RuntimeException ) +{ + return m_lContinuations; +} + + diff --git a/svtools/source/misc1/makefile.mk b/svtools/source/misc1/makefile.mk index 0d1e67fd9021..3ca57ff36f92 100644 --- a/svtools/source/misc1/makefile.mk +++ b/svtools/source/misc1/makefile.mk @@ -50,6 +50,7 @@ SLOFILES=\ $(EXCEPTIONSFILES) \ $(SLO)$/adrparse.obj \ $(SLO)$/docpasswdrequest.obj \ + $(SLO)$/docmspasswdrequest.obj \ $(SLO)$/filenotation.obj \ $(SLO)$/inethist.obj \ $(SLO)$/inettype.obj \ -- cgit v1.2.3 From a439835cc8ed03f3c834f5688a2c5b5da87a3225 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Thu, 30 Jul 2009 10:40:37 +0000 Subject: CWS-TOOLING: integrate CWS aw074_DEV300 2009-07-06 13:21:50 +0200 aw r273737 : CWS-TOOLING: rebase CWS aw074 to branches/OOO310@273700 (milestone: OOO310:m15) 2009-07-06 11:12:35 +0200 aw r273728 : #i102637# corrected condition to add gray frame to page visualisation objects 2009-07-03 14:43:00 +0200 aw r273702 : #i102380# always swap n GrafObjects on MasterPages synchronously 2009-07-03 12:14:57 +0200 aw r273686 : #i102548# corrected SdrPathPrimitive2D's usage of unit polygon 2009-07-02 16:06:16 +0200 aw r273662 : #i103255# added control when to show the draft graphic visualisation (in VOC, of course) and when not. Changed text visualisation to BlockText 2009-07-01 17:36:55 +0200 aw r273609 : #i103116# clear GaphicLink for interaction clone of graphic objets 2009-07-01 16:42:09 +0200 aw r273601 : #i101491# corrected some minor glitches in line geometry creation 2009-06-30 18:47:44 +0200 aw r273532 : #i102380# committed the cleanups/additions for the fix 2009-06-26 13:16:17 +0200 aw r273404 : #i101491# finetuning changes 2009-06-26 13:15:57 +0200 aw r273403 : #i101491# finetuning changes 2009-06-25 16:31:26 +0200 aw r273387 : #i101491# first version checkin for linux/mac tests 2009-06-25 16:31:04 +0200 aw r273386 : #i101491# first version checkin for linux/mac tests 2009-06-24 15:35:05 +0200 aw r273350 : #i101734# corrected VclMetafileProcessor2D::impTryToCreateSvtGraphicStroke to use the current ObjectTransformation 2009-06-24 15:01:58 +0200 aw r273348 : #i101811# added ViewInformation2D to renderChartPrimitive2D to allow embedding of object transformation to target MapMode 2009-06-24 12:27:05 +0200 aw r273328 : #i101980# use a hairline LineWitdth for SdrObject::TakeContour() calculation (like the old implementation did) 2009-06-24 11:29:43 +0200 aw r273321 : #i101781# corrected creation fallback for FullDrag for circle objects 2009-06-23 17:26:58 +0200 aw r273300 : #i101556# made primitive text attributes take versioned base text attribute sets into account --- basegfx/source/polygon/b2dlinegeometry.cxx | 105 +- basegfx/source/polygon/b2dpolygoncutandtouch.cxx | 9 +- vcl/aqua/source/gdi/salgdi.cxx | 5 + vcl/inc/vcl/outdev.hxx | 14 + vcl/source/gdi/outdev.cxx | 155 +- vcl/unx/source/gdi/salgdi.cxx | 3087 +++++++++++----------- vcl/win/source/gdi/salgdi_gdiplus.cxx | 162 +- 7 files changed, 1856 insertions(+), 1681 deletions(-) diff --git a/basegfx/source/polygon/b2dlinegeometry.cxx b/basegfx/source/polygon/b2dlinegeometry.cxx index 0cda1036e13b..1a9264ab769e 100644 --- a/basegfx/source/polygon/b2dlinegeometry.cxx +++ b/basegfx/source/polygon/b2dlinegeometry.cxx @@ -352,13 +352,12 @@ namespace basegfx // Unfortunately, while it would be geometrically correct to not add // the in-between points EdgeEnd and EdgeStart, it leads to rounding // errors when converting to integer polygon coordinates for painting - const B2DVector aEdgeVector(rEdge.getEndPoint() - rEdge.getStartPoint()); - if(rEdge.isBezier()) { // prepare target and data common for upper and lower B2DPolygon aBezierPolygon; - const double fEdgeLength(aEdgeVector.getLength()); + const B2DVector aPureEdgeVector(rEdge.getEndPoint() - rEdge.getStartPoint()); + const double fEdgeLength(aPureEdgeVector.getLength()); const bool bIsEdgeLengthZero(fTools::equalZero(fEdgeLength)); const B2DVector aTangentA(rEdge.getTangent(0.0)); const B2DVector aTangentB(rEdge.getTangent(1.0)); @@ -441,7 +440,11 @@ namespace basegfx } else { - const B2DVector aPerpendEdgeVector(getNormalizedPerpendicular(aEdgeVector) * fHalfLineWidth); + // #i101491# emulate rEdge.getTangent call which applies a factor of 0.3 to the + // full-length edge vector to have numerically exactly the same results as in the + // createAreaGeometryForJoin implementation + const B2DVector aEdgeTangent((rEdge.getEndPoint() - rEdge.getStartPoint()) * 0.3); + const B2DVector aPerpendEdgeVector(getNormalizedPerpendicular(aEdgeTangent) * fHalfLineWidth); B2DPolygon aEdgePolygon; // create upper edge @@ -495,45 +498,75 @@ namespace basegfx } } - // create first polygon part for edge - aEdgePolygon.append(aEndPoint); - aEdgePolygon.append(rPoint); - aEdgePolygon.append(aStartPoint); - - if(B2DLINEJOIN_MITER == eJoin) + switch(eJoin) { - // Look for the cut point between start point along rTangentPrev and - // end point along rTangentEdge. -rTangentEdge should be used, but since - // the cut value is used for interpolating along the first edge, the negation - // is not needed since the same fCut will be found on the first edge. - // If it exists, insert it to complete the mitered fill polygon. - double fCutPos(0.0); - tools::findCut(aStartPoint, rTangentPrev, aEndPoint, rTangentEdge, CUTFLAG_ALL, &fCutPos); - - if(0.0 != fCutPos) + case B2DLINEJOIN_MITER : { - const B2DPoint aCutPoint(interpolate(aStartPoint, aStartPoint + rTangentPrev, fCutPos)); - aEdgePolygon.append(aCutPoint); - } - } - else if(B2DLINEJOIN_ROUND == eJoin) - { - // use tooling to add needed EllipseSegment - double fAngleStart(atan2(rPerpendPrev.getY(), rPerpendPrev.getX())); - double fAngleEnd(atan2(rPerpendEdge.getY(), rPerpendEdge.getX())); + aEdgePolygon.append(aEndPoint); + aEdgePolygon.append(rPoint); + aEdgePolygon.append(aStartPoint); + + // Look for the cut point between start point along rTangentPrev and + // end point along rTangentEdge. -rTangentEdge should be used, but since + // the cut value is used for interpolating along the first edge, the negation + // is not needed since the same fCut will be found on the first edge. + // If it exists, insert it to complete the mitered fill polygon. + double fCutPos(0.0); + tools::findCut(aStartPoint, rTangentPrev, aEndPoint, rTangentEdge, CUTFLAG_ALL, &fCutPos); + + if(0.0 != fCutPos) + { + const B2DPoint aCutPoint(interpolate(aStartPoint, aStartPoint + rTangentPrev, fCutPos)); + aEdgePolygon.append(aCutPoint); + } - // atan2 results are [-PI .. PI], consolidate to [0.0 .. 2PI] - if(fAngleStart < 0.0) - { - fAngleStart += F_2PI; + break; } - - if(fAngleEnd < 0.0) + case B2DLINEJOIN_ROUND : { - fAngleEnd += F_2PI; + // use tooling to add needed EllipseSegment + double fAngleStart(atan2(rPerpendPrev.getY(), rPerpendPrev.getX())); + double fAngleEnd(atan2(rPerpendEdge.getY(), rPerpendEdge.getX())); + + // atan2 results are [-PI .. PI], consolidate to [0.0 .. 2PI] + if(fAngleStart < 0.0) + { + fAngleStart += F_2PI; + } + + if(fAngleEnd < 0.0) + { + fAngleEnd += F_2PI; + } + + const B2DPolygon aBow(tools::createPolygonFromEllipseSegment(rPoint, fHalfLineWidth, fHalfLineWidth, fAngleStart, fAngleEnd)); + + if(aBow.count() > 1) + { + // #i101491# + // use the original start/end positions; the ones from bow creation may be numerically + // different due to their different creation. To guarantee good merging quality with edges + // and edge roundings (and to reduce point count) + aEdgePolygon = aBow; + aEdgePolygon.setB2DPoint(0, aStartPoint); + aEdgePolygon.setB2DPoint(aEdgePolygon.count() - 1, aEndPoint); + aEdgePolygon.append(rPoint); + + break; + } + else + { + // wanted fall-through to default + } } + default: // B2DLINEJOIN_BEVEL + { + aEdgePolygon.append(aEndPoint); + aEdgePolygon.append(rPoint); + aEdgePolygon.append(aStartPoint); - aEdgePolygon.append(tools::createPolygonFromEllipseSegment(rPoint, fHalfLineWidth, fHalfLineWidth, fAngleStart, fAngleEnd)); + break; + } } // create last polygon part for edge diff --git a/basegfx/source/polygon/b2dpolygoncutandtouch.cxx b/basegfx/source/polygon/b2dpolygoncutandtouch.cxx index a1b7a69775ad..26016942717d 100644 --- a/basegfx/source/polygon/b2dpolygoncutandtouch.cxx +++ b/basegfx/source/polygon/b2dpolygoncutandtouch.cxx @@ -110,7 +110,10 @@ namespace basegfx { // #i76891# mergeTemporaryPointsAndPolygon redesigned to be able to correctly handle // single edges with/without control points - if(rTempPoints.size()) + // #i101491# added counter for non-changing element count + const sal_uInt32 nTempPointCount(rTempPoints.size()); + + if(nTempPointCount) { B2DPolygon aRetval; const sal_uInt32 nCount(rCandidate.count()); @@ -138,7 +141,7 @@ namespace basegfx double fLeftStart(0.0); // now add all points targeted to be at this index - while(nNewInd < rTempPoints.size() && rTempPoints[nNewInd].getIndex() == a) + while(nNewInd < nTempPointCount && rTempPoints[nNewInd].getIndex() == a) { const temporaryPoint& rTempPoint = rTempPoints[nNewInd++]; @@ -160,7 +163,7 @@ namespace basegfx else { // add all points targeted to be at this index - while(nNewInd < rTempPoints.size() && rTempPoints[nNewInd].getIndex() == a) + while(nNewInd < nTempPointCount && rTempPoints[nNewInd].getIndex() == a) { const temporaryPoint& rTempPoint = rTempPoints[nNewInd++]; const B2DPoint aNewPoint(rTempPoint.getPoint()); diff --git a/vcl/aqua/source/gdi/salgdi.cxx b/vcl/aqua/source/gdi/salgdi.cxx index 3ee54afe2fba..f8410a47dfd6 100644 --- a/vcl/aqua/source/gdi/salgdi.cxx +++ b/vcl/aqua/source/gdi/salgdi.cxx @@ -974,6 +974,11 @@ bool AquaSalGraphics::drawPolyLine( const ::basegfx::B2DPolygon& rPolyLine, if( rLineWidths.getX() != rLineWidths.getY() ) return false; + // #i101491# Aqua does not support B2DLINEJOIN_NONE; return false to use + // the fallback (own geometry preparation) + if(basegfx::B2DLINEJOIN_NONE == eLineJoin) + return false; + // setup line attributes CGLineJoin aCGLineJoin = kCGLineJoinMiter; switch( eLineJoin ) { diff --git a/vcl/inc/vcl/outdev.hxx b/vcl/inc/vcl/outdev.hxx index 0d071a8a9617..f4e42846dd5e 100644 --- a/vcl/inc/vcl/outdev.hxx +++ b/vcl/inc/vcl/outdev.hxx @@ -563,6 +563,20 @@ public: // tells whether this output device is RTL in an LTR UI or LTR in a RTL UI SAL_DLLPRIVATE bool ImplIsAntiparallel() const ; + // #i101491# + // Helper which holds the old line geometry creation and is extended to use AA when + // switched on. Advantage is that line geometry is only temporarily used for paint + SAL_DLLPRIVATE void ImpDrawPolyLineWithLineInfo(const Polygon& rPoly, const LineInfo& rLineInfo); + + // #i101491# + // Helper who implements the DrawPolyPolygon functionality for basegfx::B2DPolyPolygon + // without MetaFile processing + SAL_DLLPRIVATE void ImpDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon& rB2DPolyPoly); + + // #i101491# + // Helper who tries to use SalGDI's DrawPolyLine direct and returns it's bool. Contains no AA check. + SAL_DLLPRIVATE bool ImpTryDrawPolyLineDirect(const basegfx::B2DPolygon& rB2DPolygon, double fLineWidth, basegfx::B2DLineJoin eLineJoin); + protected: OutputDevice(); diff --git a/vcl/source/gdi/outdev.cxx b/vcl/source/gdi/outdev.cxx index ebcf31199364..5b543258cb0b 100644 --- a/vcl/source/gdi/outdev.cxx +++ b/vcl/source/gdi/outdev.cxx @@ -69,6 +69,7 @@ #include #include #include +#include #include #include @@ -2472,11 +2473,13 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly ) if ( mbInitLineColor ) ImplInitLineColor(); - // use b2dpolygon drawing if possible - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + const bool bTryAA((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) && ROP_OVERPAINT == GetRasterOp() - && IsLineColor()) + && IsLineColor()); + + // use b2dpolygon drawing if possible + if(bTryAA && ImpTryDrawPolyLineDirect(rPoly.getB2DPolygon(), 0.0, basegfx::B2DLINEJOIN_NONE)) { basegfx::B2DPolygon aB2DPolyLine(rPoly.getB2DPolygon()); const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation(); @@ -2533,9 +2536,23 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly, const LineInfo& rLineInfo return; } + // #i101491# + // Try direct Fallback to B2D-Version of DrawPolyLine + if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && LINE_SOLID == rLineInfo.GetStyle()) + { + DrawPolyLine(rPoly.getB2DPolygon(), (double)rLineInfo.GetWidth(), basegfx::B2DLINEJOIN_ROUND); + return; + } + if ( mpMetaFile ) mpMetaFile->AddAction( new MetaPolyLineAction( rPoly, rLineInfo ) ); + ImpDrawPolyLineWithLineInfo(rPoly, rLineInfo); +} + +void OutputDevice::ImpDrawPolyLineWithLineInfo(const Polygon& rPoly, const LineInfo& rLineInfo) +{ USHORT nPoints = rPoly.GetSize(); if ( !IsDeviceOutputNecessary() || !mbLineColor || ( nPoints < 2 ) || ( LINE_NONE == rLineInfo.GetStyle() ) || ImplIsRecordLayout() ) @@ -2561,6 +2578,10 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly, const LineInfo& rLineInfo return; const LineInfo aInfo( ImplLogicToDevicePixel( rLineInfo ) ); + const bool bTryAA((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && IsLineColor()); if( aInfo.GetWidth() > 1L ) { @@ -2574,9 +2595,32 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly, const LineInfo& rLineInfo ImplInitLineColor(); SetFillColor( aOldLineColor ); ImplInitFillColor(); + bool bDone(false); - for( const Polygon* pPoly = aLineCvt.ImplGetFirst(); pPoly; pPoly = aLineCvt.ImplGetNext() ) - mpGraphics->DrawPolygon( pPoly->GetSize(), (const SalPoint*) pPoly->GetConstPointAry(), this ); + if(bTryAA) + { + // #i101491# try AAed version + // Use old on-the-fly geometry preparation, combine with AA + bool bSuccess(true); + + for(const Polygon* pPoly = aLineCvt.ImplGetFirst(); bSuccess && pPoly; pPoly = aLineCvt.ImplGetNext()) + { + bSuccess = mpGraphics->DrawPolyPolygon(basegfx::B2DPolyPolygon(pPoly->getB2DPolygon()), 0.0, this); + } + + if(bSuccess) + { + bDone = true; + } + } + + if(!bDone) + { + for( const Polygon* pPoly = aLineCvt.ImplGetFirst(); pPoly; pPoly = aLineCvt.ImplGetNext() ) + { + mpGraphics->DrawPolygon( pPoly->GetSize(), (const SalPoint*) pPoly->GetConstPointAry(), this ); + } + } SetLineColor( aOldLineColor ); SetFillColor( aOldFillColor ); @@ -2820,6 +2864,12 @@ void OutputDevice::DrawPolyPolygon( const basegfx::B2DPolyPolygon& rB2DPolyPoly mpMetaFile->AddAction( new MetaPolyPolygonAction( PolyPolygon( rB2DPolyPoly ) ) ); #endif + // call helper + ImpDrawPolyPolygonWithB2DPolyPolygon(rB2DPolyPoly); +} + +void OutputDevice::ImpDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon& rB2DPolyPoly) +{ // AW: Do NOT paint empty PolyPolygons if(!rB2DPolyPoly.count()) return; @@ -2886,6 +2936,38 @@ void OutputDevice::DrawPolyPolygon( const basegfx::B2DPolyPolygon& rB2DPolyPoly // ----------------------------------------------------------------------- +bool OutputDevice::ImpTryDrawPolyLineDirect( + const basegfx::B2DPolygon& rB2DPolygon, + double fLineWidth, + basegfx::B2DLineJoin eLineJoin) +{ + const basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation(); + basegfx::B2DVector aB2DLineWidth(1.0, 1.0); + + // transform the line width if used + if( fLineWidth != 0.0 ) + { + aB2DLineWidth = aTransform * ::basegfx::B2DVector( fLineWidth, fLineWidth ); + } + + // transform the polygon + basegfx::B2DPolygon aB2DPolygon(rB2DPolygon); + aB2DPolygon.transform(aTransform); + + if((mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE) + && aB2DPolygon.count() < 1000) + { + // #i98289#, #i101491# + // better to remove doubles on device coordinates. Also assume from a given amount + // of points that the single edges are not long enough to smooth + aB2DPolygon.removeDoublePoints(); + aB2DPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolygon); + } + + // draw the polyline + return mpGraphics->DrawPolyLine(aB2DPolygon, aB2DLineWidth, eLineJoin, this); +} + void OutputDevice::DrawPolyLine( const basegfx::B2DPolygon& rB2DPolygon, double fLineWidth, @@ -2929,43 +3011,62 @@ void OutputDevice::DrawPolyLine( if( mbInitLineColor ) ImplInitLineColor(); - // #i98289# use b2dpolygon drawing if possible - if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + const bool bTryAA((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) && ROP_OVERPAINT == GetRasterOp() - && IsLineColor()) + && IsLineColor()); + + // use b2dpolygon drawing if possible + if(bTryAA && ImpTryDrawPolyLineDirect(rB2DPolygon, fLineWidth, eLineJoin)) { - const basegfx::B2DHomMatrix aTransform(ImplGetDeviceTransformation()); - basegfx::B2DPolygon aB2DPolygon(rB2DPolygon); - basegfx::B2DVector aB2DLineWidth(1.0, 1.0); + return; + } - // transform the polygon - aB2DPolygon.transform(aTransform); + // #i101491# + // no output yet; fallback to geometry decomposition and use filled polygon paint + // when line is fat and not too complex. ImpDrawPolyPolygonWithB2DPolyPolygon + // will do internal needed AA checks etc. + if(fLineWidth >= 2.5 + && rB2DPolygon.count() + && rB2DPolygon.count() <= 1000) + { + const double fHalfLineWidth((fLineWidth * 0.5) + 0.5); + const basegfx::B2DPolyPolygon aAreaPolyPolygon(basegfx::tools::createAreaGeometry( + rB2DPolygon, fHalfLineWidth, eLineJoin)); - // transform the line width if used - if(fLineWidth != 0.0) - { - aB2DLineWidth = aTransform * ::basegfx::B2DVector(fLineWidth, fLineWidth); - } + const Color aOldLineColor(maLineColor); + const Color aOldFillColor(maFillColor); - if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE) - { - aB2DPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolygon); - } + SetLineColor(); + ImplInitLineColor(); + SetFillColor(aOldLineColor); + ImplInitFillColor(); + + ImpDrawPolyPolygonWithB2DPolyPolygon(aAreaPolyPolygon); + + SetLineColor(aOldLineColor); + ImplInitLineColor(); + SetFillColor(aOldFillColor); + ImplInitFillColor(); - // draw the polyline - if(mpGraphics->DrawPolyLine(aB2DPolygon, aB2DLineWidth, eLineJoin, this)) + if(bTryAA) { - return; + // when AA it is necessary to also paint the filled polygon's outline + // to avoid optical gaps + for(sal_uInt32 a(0); a < aAreaPolyPolygon.count(); a++) + { + ImpTryDrawPolyLineDirect(aAreaPolyPolygon.getB2DPolygon(a), 0.0, basegfx::B2DLINEJOIN_NONE); + } } } - // fallback to old polygon drawing if needed + // fallback to old polygon drawing if needed. This will really + // use ImplLineConverter, but still try to AA lines const Polygon aToolsPolygon( rB2DPolygon ); LineInfo aLineInfo; if( fLineWidth != 0.0 ) aLineInfo.SetWidth( static_cast(fLineWidth+0.5) ); - DrawPolyLine( aToolsPolygon, aLineInfo ); + ImpDrawPolyLineWithLineInfo( aToolsPolygon, aLineInfo ); } // ----------------------------------------------------------------------- diff --git a/vcl/unx/source/gdi/salgdi.cxx b/vcl/unx/source/gdi/salgdi.cxx index db49c97de00c..6695d4abeb21 100644 --- a/vcl/unx/source/gdi/salgdi.cxx +++ b/vcl/unx/source/gdi/salgdi.cxx @@ -1,1539 +1,1548 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_vcl.hxx" - -#include "Xproto.h" - -#include "salunx.h" -#include "saldata.hxx" -#include "saldisp.hxx" -#include "salgdi.h" -#include "salframe.h" -#include "salvd.h" -#include "xrender_peer.hxx" - -#include "vcl/printergfx.hxx" -#include "vcl/jobdata.hxx" - -#include "tools/debug.hxx" - -#include "basegfx/polygon/b2dpolygon.hxx" -#include "basegfx/polygon/b2dpolypolygon.hxx" -#include "basegfx/polygon/b2dpolypolygontools.hxx" -#include "basegfx/polygon/b2dpolygontools.hxx" -#include "basegfx/polygon/b2dpolygonclipper.hxx" -#include "basegfx/polygon/b2dlinegeometry.hxx" -#include "basegfx/matrix/b2dhommatrix.hxx" -#include "basegfx/polygon/b2dpolypolygoncutter.hxx" - -#include -#include -#include - -// -=-= SalPolyLine =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -#define STATIC_POINTS 64 - -class SalPolyLine -{ - XPoint Points_[STATIC_POINTS]; - XPoint *pFirst_; -public: - inline SalPolyLine( ULONG nPoints ); - inline SalPolyLine( ULONG nPoints, const SalPoint *p ); - inline ~SalPolyLine(); - inline XPoint &operator [] ( ULONG n ) const - { return pFirst_[n]; } -}; - -inline SalPolyLine::SalPolyLine( ULONG nPoints ) - : pFirst_( nPoints+1 > STATIC_POINTS ? new XPoint[nPoints+1] : Points_ ) -{} - -inline SalPolyLine::SalPolyLine( ULONG nPoints, const SalPoint *p ) - : pFirst_( nPoints+1 > STATIC_POINTS ? new XPoint[nPoints+1] : Points_ ) -{ - for( ULONG i = 0; i < nPoints; i++ ) - { - pFirst_[i].x = (short)p[i].mnX; - pFirst_[i].y = (short)p[i].mnY; - } - pFirst_[nPoints] = pFirst_[0]; // close polyline -} - -inline SalPolyLine::~SalPolyLine() -{ if( pFirst_ != Points_ ) delete [] pFirst_; } - -#undef STATIC_POINTS -// -=-= X11SalGraphics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -X11SalGraphics::X11SalGraphics() -{ - m_pFrame = NULL; - m_pVDev = NULL; - m_pDeleteColormap = NULL; - hDrawable_ = None; - m_aRenderPicture = 0; - m_pRenderFormat = NULL; - - pClipRegion_ = NULL; - pPaintRegion_ = NULL; - - pPenGC_ = NULL; - nPenPixel_ = 0; - nPenColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black - - pFontGC_ = NULL; - for( int i = 0; i < MAX_FALLBACK; ++i ) - { - mXFont[i] = NULL; - mpServerFont[i] = NULL; - } - - nTextPixel_ = 0; - nTextColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black - - pBrushGC_ = NULL; - nBrushPixel_ = 0; - nBrushColor_ = MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ); // White - hBrush_ = None; - - pMonoGC_ = NULL; - pCopyGC_ = NULL; - pMaskGC_ = NULL; - pInvertGC_ = NULL; - pInvert50GC_ = NULL; - pStippleGC_ = NULL; - pTrackingGC_ = NULL; - - bWindow_ = FALSE; - bPrinter_ = FALSE; - bVirDev_ = FALSE; - bPenGC_ = FALSE; - bFontGC_ = FALSE; - bBrushGC_ = FALSE; - bMonoGC_ = FALSE; - bCopyGC_ = FALSE; - bInvertGC_ = FALSE; - bInvert50GC_ = FALSE; - bStippleGC_ = FALSE; - bTrackingGC_ = FALSE; - bXORMode_ = FALSE; - bDitherBrush_ = FALSE; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -X11SalGraphics::~X11SalGraphics() -{ - ReleaseFonts(); - freeResources(); -} - -// -=-= SalGraphics / X11SalGraphics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -void X11SalGraphics::freeResources() -{ - Display *pDisplay = GetXDisplay(); - - DBG_ASSERT( !pPaintRegion_, "pPaintRegion_" ); - if( pClipRegion_ ) XDestroyRegion( pClipRegion_ ), pClipRegion_ = None; - - if( hBrush_ ) XFreePixmap( pDisplay, hBrush_ ), hBrush_ = None; - if( pPenGC_ ) XFreeGC( pDisplay, pPenGC_ ), pPenGC_ = None; - if( pFontGC_ ) XFreeGC( pDisplay, pFontGC_ ), pFontGC_ = None; - if( pBrushGC_ ) XFreeGC( pDisplay, pBrushGC_ ), pBrushGC_ = None; - if( pMonoGC_ ) XFreeGC( pDisplay, pMonoGC_ ), pMonoGC_ = None; - if( pCopyGC_ ) XFreeGC( pDisplay, pCopyGC_ ), pCopyGC_ = None; - if( pMaskGC_ ) XFreeGC( pDisplay, pMaskGC_ ), pMaskGC_ = None; - if( pInvertGC_ ) XFreeGC( pDisplay, pInvertGC_ ), pInvertGC_ = None; - if( pInvert50GC_ ) XFreeGC( pDisplay, pInvert50GC_ ), pInvert50GC_ = None; - if( pStippleGC_ ) XFreeGC( pDisplay, pStippleGC_ ), pStippleGC_ = None; - if( pTrackingGC_ ) XFreeGC( pDisplay, pTrackingGC_ ), pTrackingGC_ = None; - if( m_pDeleteColormap ) - delete m_pDeleteColormap, m_pColormap = m_pDeleteColormap = NULL; - - if( m_aRenderPicture ) - XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ), m_aRenderPicture = 0; - - bPenGC_ = bFontGC_ = bBrushGC_ = bMonoGC_ = bCopyGC_ = bInvertGC_ = bInvert50GC_ = bStippleGC_ = bTrackingGC_ = false; -} - -void X11SalGraphics::SetDrawable( Drawable aDrawable, int nScreen ) -{ - // shortcut if nothing changed - if( hDrawable_ == aDrawable ) - return; - - // free screen specific resources if needed - if( nScreen != m_nScreen ) - { - freeResources(); - m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap( nScreen ); - m_nScreen = nScreen; - } - - hDrawable_ = aDrawable; - SetXRenderFormat( NULL ); - if( m_aRenderPicture ) - { - XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ); - m_aRenderPicture = 0; - } - - if( hDrawable_ ) - { - nPenPixel_ = GetPixel( nPenColor_ ); - nTextPixel_ = GetPixel( nTextColor_ ); - nBrushPixel_ = GetPixel( nBrushColor_ ); - } -} - -void X11SalGraphics::Init( SalFrame *pFrame, Drawable aTarget, int nScreen ) -{ -#if 0 // TODO: use SetDrawable() instead - m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap(nScreen); - hDrawable_ = aTarget; - m_nScreen = nScreen; - SetXRenderFormat( NULL ); - if( m_aRenderPicture ) - XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ), m_aRenderPicture = 0; - - nPenPixel_ = GetPixel( nPenColor_ ); - nTextPixel_ = GetPixel( nTextColor_ ); - nBrushPixel_ = GetPixel( nBrushColor_ ); -#else - m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap(nScreen); - m_nScreen = nScreen; - SetDrawable( aTarget, nScreen ); -#endif - - bWindow_ = TRUE; - m_pFrame = pFrame; - m_pVDev = NULL; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::DeInit() -{ - SetDrawable( None, m_nScreen ); -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::SetClipRegion( GC pGC, XLIB_Region pXReg ) const -{ - Display *pDisplay = GetXDisplay(); - - int n = 0; - XLIB_Region Regions[3]; - - if( pClipRegion_ /* && !XEmptyRegion( pClipRegion_ ) */ ) - Regions[n++] = pClipRegion_; -// if( pPaintRegion_ /* && !XEmptyRegion( pPaintRegion_ ) */ ) -// Regions[n++] = pPaintRegion_; - - if( pXReg && !XEmptyRegion( pXReg ) ) - Regions[n++] = pXReg; - - if( 0 == n ) - XSetClipMask( pDisplay, pGC, None ); - else if( 1 == n ) - XSetRegion( pDisplay, pGC, Regions[0] ); - else - { - XLIB_Region pTmpRegion = XCreateRegion(); - XIntersectRegion( Regions[0], Regions[1], pTmpRegion ); -// if( 3 == n ) -// XIntersectRegion( Regions[2], pTmpRegion, pTmpRegion ); - XSetRegion( pDisplay, pGC, pTmpRegion ); - XDestroyRegion( pTmpRegion ); - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -GC X11SalGraphics::SelectPen() -{ - Display *pDisplay = GetXDisplay(); - - if( !pPenGC_ ) - { - XGCValues values; - values.subwindow_mode = ClipByChildren; - values.fill_rule = EvenOddRule; // Pict import/ Gradient - values.graphics_exposures = False; - - pPenGC_ = XCreateGC( pDisplay, hDrawable_, - GCSubwindowMode | GCFillRule | GCGraphicsExposures, - &values ); - } - - if( !bPenGC_ ) - { - if( nPenColor_ != SALCOLOR_NONE ) - XSetForeground( pDisplay, pPenGC_, nPenPixel_ ); - XSetFunction ( pDisplay, pPenGC_, bXORMode_ ? GXxor : GXcopy ); - SetClipRegion( pPenGC_ ); - bPenGC_ = TRUE; - } - - return pPenGC_; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -GC X11SalGraphics::SelectBrush() -{ - Display *pDisplay = GetXDisplay(); - - DBG_ASSERT( nBrushColor_ != SALCOLOR_NONE, "Brush Transparent" ); - - if( !pBrushGC_ ) - { - XGCValues values; - // values.subwindow_mode = IncludeInferiors; - values.subwindow_mode = ClipByChildren; - values.fill_rule = EvenOddRule; // Pict import/ Gradient - values.graphics_exposures = False; - - pBrushGC_ = XCreateGC( pDisplay, hDrawable_, - GCSubwindowMode | GCFillRule | GCGraphicsExposures, - &values ); - } - - if( !bBrushGC_ ) - { - if( !bDitherBrush_ ) - { - XSetFillStyle ( pDisplay, pBrushGC_, FillSolid ); - XSetForeground( pDisplay, pBrushGC_, nBrushPixel_ ); - #if defined(_USE_PRINT_EXTENSION_) - XSetBackground( pDisplay, pBrushGC_, - WhitePixel(pDisplay, DefaultScreen(pDisplay)) ); - #else - if( bPrinter_ ) - XSetTile( pDisplay, pBrushGC_, None ); - #endif - } - else - { - // Bug in Sun Solaris 2.5.1, XFillPolygon doesn't allways reflect - // changes of the tile. PROPERTY_BUG_Tile doesn't fix this ! - if (GetDisplay()->GetProperties() & PROPERTY_BUG_FillPolygon_Tile) - XSetFillStyle ( pDisplay, pBrushGC_, FillSolid ); - - XSetFillStyle ( pDisplay, pBrushGC_, FillTiled ); - XSetTile ( pDisplay, pBrushGC_, hBrush_ ); - } - XSetFunction ( pDisplay, pBrushGC_, bXORMode_ ? GXxor : GXcopy ); - SetClipRegion( pBrushGC_ ); - - bBrushGC_ = TRUE; - } - - return pBrushGC_; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -GC X11SalGraphics::GetTrackingGC() -{ - const char dash_list[2] = {2, 2}; - - if( !pTrackingGC_ ) - { - XGCValues values; - - values.graphics_exposures = False; - values.foreground = m_pColormap->GetBlackPixel() - ^ m_pColormap->GetWhitePixel(); - values.function = GXxor; - values.line_width = 1; - values.line_style = LineOnOffDash; - - pTrackingGC_ = XCreateGC( GetXDisplay(), GetDrawable(), - GCGraphicsExposures | GCForeground | GCFunction - | GCLineWidth | GCLineStyle, - &values ); - XSetDashes( GetXDisplay(), pTrackingGC_, 0, dash_list, 2 ); - } - - if( !bTrackingGC_ ) - { - SetClipRegion( pTrackingGC_ ); - bTrackingGC_ = TRUE; - } - - return pTrackingGC_; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::DrawLines( ULONG nPoints, - const SalPolyLine &rPoints, - GC pGC, - bool bClose - ) -{ - // errechne wie viele Linien XWindow auf einmal zeichnen kann - ULONG nMaxLines = (GetDisplay()->GetMaxRequestSize() - sizeof(xPolyPointReq)) - / sizeof(xPoint); - if( nMaxLines > nPoints ) nMaxLines = nPoints; - - // gebe alle Linien aus, die XWindows zeichnen kann. - ULONG n; - for( n = 0; nPoints - n > nMaxLines; n += nMaxLines - 1 ) - XDrawLines( GetXDisplay(), - GetDrawable(), - pGC, - &rPoints[n], - nMaxLines, - CoordModeOrigin ); - - if( n < nPoints ) - XDrawLines( GetXDisplay(), - GetDrawable(), - pGC, - &rPoints[n], - nPoints - n, - CoordModeOrigin ); - if( bClose ) - { - if( rPoints[nPoints-1].x != rPoints[0].x || rPoints[nPoints-1].y != rPoints[0].y ) - drawLine( rPoints[nPoints-1].x, rPoints[nPoints-1].y, rPoints[0].x, rPoints[0].y ); - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -// Dithern: Calculate a dither-pixmap and make a brush of it -#define P_DELTA 51 -#define DMAP( v, m ) ((v % P_DELTA) > m ? (v / P_DELTA) + 1 : (v / P_DELTA)) - -BOOL X11SalGraphics::GetDitherPixmap( SalColor nSalColor ) -{ - static const short nOrdDither8Bit[ 8 ][ 8 ] = - { - { 0, 38, 9, 48, 2, 40, 12, 50}, - {25, 12, 35, 22, 28, 15, 37, 24}, - { 6, 44, 3, 41, 8, 47, 5, 44}, - {32, 19, 28, 16, 34, 21, 31, 18}, - { 1, 40, 11, 49, 0, 39, 10, 48}, - {27, 14, 36, 24, 26, 13, 36, 23}, - { 8, 46, 4, 43, 7, 45, 4, 42}, - {33, 20, 30, 17, 32, 20, 29, 16} - }; - - // test for correct depth (8bit) - if( GetColormap().GetVisual().GetDepth() != 8 ) - return FALSE; - - char pBits[64]; - char *pBitsPtr = pBits; - - // Set the pallette-entries for the dithering tile - UINT8 nSalColorRed = SALCOLOR_RED ( nSalColor ); - UINT8 nSalColorGreen = SALCOLOR_GREEN ( nSalColor ); - UINT8 nSalColorBlue = SALCOLOR_BLUE ( nSalColor ); - - for( int nY = 0; nY < 8; nY++ ) - { - for( int nX = 0; nX < 8; nX++ ) - { - short nMagic = nOrdDither8Bit[nY][nX]; - UINT8 nR = P_DELTA * DMAP( nSalColorRed, nMagic ); - UINT8 nG = P_DELTA * DMAP( nSalColorGreen, nMagic ); - UINT8 nB = P_DELTA * DMAP( nSalColorBlue, nMagic ); - - *pBitsPtr++ = GetColormap().GetPixel( MAKE_SALCOLOR( nR, nG, nB ) ); - } - } - - // create the tile as ximage and an according pixmap -> caching - XImage *pImage = XCreateImage( GetXDisplay(), - GetColormap().GetXVisual(), - 8, - ZPixmap, - 0, // offset - pBits, // data - 8, 8, // width & height - 8, // bitmap_pad - 0 ); // (default) bytes_per_line - - if ( GetDisplay()->GetProperties() & PROPERTY_BUG_Tile ) - { - if (hBrush_) - XFreePixmap (GetXDisplay(), hBrush_); - hBrush_ = XCreatePixmap( GetXDisplay(), GetDrawable(), 8, 8, 8 ); - } - else - if( !hBrush_ ) - hBrush_ = XCreatePixmap( GetXDisplay(), GetDrawable(), 8, 8, 8 ); - - // put the ximage to the pixmap - XPutImage( GetXDisplay(), - hBrush_, - GetDisplay()->GetCopyGC( m_nScreen ), - pImage, - 0, 0, // Source - 0, 0, // Destination - 8, 8 ); // width & height - - // destroy image-frame but not palette-data - pImage->data = NULL; - XDestroyImage( pImage ); - - return TRUE; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::GetResolution( sal_Int32 &rDPIX, sal_Int32 &rDPIY ) // const -{ - const SalDisplay *pDisplay = GetDisplay(); - - rDPIX = pDisplay->GetResolution().A(); - rDPIY = pDisplay->GetResolution().B(); - if( !pDisplay->GetExactResolution() && rDPIY < 96 ) - { - rDPIX = Divide( rDPIX * 96, rDPIY ); - rDPIY = 96; - } - else if ( rDPIY > 200 ) - { - rDPIX = Divide( rDPIX * 200, rDPIY ); - rDPIY = 200; - } - - // #i12705# equalize x- and y-resolution if they are close enough - if( rDPIX != rDPIY ) - { - // different x- and y- resolutions are usually artifacts of - // a wrongly calculated screen size. - //if( (13*rDPIX >= 10*rDPIY) && (13*rDPIY >= 10*rDPIX) ) //+-30% - { -#ifdef DEBUG - printf("Forcing Resolution from %" SAL_PRIdINT32 "x%" SAL_PRIdINT32 " to %" SAL_PRIdINT32 "x%" SAL_PRIdINT32 "\n", - rDPIX,rDPIY,rDPIY,rDPIY); -#endif - rDPIX = rDPIY; // y-resolution is more trustworthy - } - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -USHORT X11SalGraphics::GetBitCount() // const -{ - return GetVisual().GetDepth(); -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -long X11SalGraphics::GetGraphicsWidth() const -{ - if( m_pFrame ) - return m_pFrame->maGeometry.nWidth; - else if( m_pVDev ) - return m_pVDev->GetWidth(); - else - return 0; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -long X11SalGraphics::GetGraphicsHeight() const -{ - if( m_pFrame ) - return m_pFrame->maGeometry.nHeight; - else if( m_pVDev ) - return m_pVDev->GetHeight(); - else - return 0; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::ResetClipRegion() -{ - if( pClipRegion_ ) - { - bPenGC_ = FALSE; - bFontGC_ = FALSE; - bBrushGC_ = FALSE; - bMonoGC_ = FALSE; - bCopyGC_ = FALSE; - bInvertGC_ = FALSE; - bInvert50GC_ = FALSE; - bStippleGC_ = FALSE; - bTrackingGC_ = FALSE; - - XDestroyRegion( pClipRegion_ ); - pClipRegion_ = NULL; - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::BeginSetClipRegion( ULONG ) -{ - if( pClipRegion_ ) - XDestroyRegion( pClipRegion_ ); - pClipRegion_ = XCreateRegion(); -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -BOOL X11SalGraphics::unionClipRegion( long nX, long nY, long nDX, long nDY ) -{ - if (!nDX || !nDY) - return TRUE; - - XRectangle aRect; - aRect.x = (short)nX; - aRect.y = (short)nY; - aRect.width = (unsigned short)nDX; - aRect.height = (unsigned short)nDY; - - XUnionRectWithRegion( &aRect, pClipRegion_, pClipRegion_ ); - - return TRUE; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -bool X11SalGraphics::unionClipRegion( const ::basegfx::B2DPolyPolygon& ) -{ - // TODO: implement and advertise OutDevSupport_B2DClip support - return false; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::EndSetClipRegion() -{ - bPenGC_ = FALSE; - bFontGC_ = FALSE; - bBrushGC_ = FALSE; - bMonoGC_ = FALSE; - bCopyGC_ = FALSE; - bInvertGC_ = FALSE; - bInvert50GC_ = FALSE; - bStippleGC_ = FALSE; - bTrackingGC_ = FALSE; - - if( XEmptyRegion( pClipRegion_ ) ) - { - XDestroyRegion( pClipRegion_ ); - pClipRegion_= NULL; - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::SetLineColor() -{ - if( nPenColor_ != SALCOLOR_NONE ) - { - nPenColor_ = SALCOLOR_NONE; - bPenGC_ = FALSE; - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::SetLineColor( SalColor nSalColor ) -{ - if( nPenColor_ != nSalColor ) - { - nPenColor_ = nSalColor; - nPenPixel_ = GetPixel( nSalColor ); - bPenGC_ = FALSE; - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::SetFillColor() -{ - if( nBrushColor_ != SALCOLOR_NONE ) - { - bDitherBrush_ = FALSE; - nBrushColor_ = SALCOLOR_NONE; - bBrushGC_ = FALSE; - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::SetFillColor( SalColor nSalColor ) -{ - if( nBrushColor_ != nSalColor ) - { - bDitherBrush_ = FALSE; - nBrushColor_ = nSalColor; - nBrushPixel_ = GetPixel( nSalColor ); - if( TrueColor != GetColormap().GetVisual().GetClass() - && GetColormap().GetColor( nBrushPixel_ ) != nBrushColor_ - && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0x00 ) // black - && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0x80 ) // blue - && nSalColor != MAKE_SALCOLOR( 0x00, 0x80, 0x00 ) // green - && nSalColor != MAKE_SALCOLOR( 0x00, 0x80, 0x80 ) // cyan - && nSalColor != MAKE_SALCOLOR( 0x80, 0x00, 0x00 ) // red - && nSalColor != MAKE_SALCOLOR( 0x80, 0x00, 0x80 ) // magenta - && nSalColor != MAKE_SALCOLOR( 0x80, 0x80, 0x00 ) // brown - && nSalColor != MAKE_SALCOLOR( 0x80, 0x80, 0x80 ) // gray - && nSalColor != MAKE_SALCOLOR( 0xC0, 0xC0, 0xC0 ) // light gray - && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0xFF ) // light blue - && nSalColor != MAKE_SALCOLOR( 0x00, 0xFF, 0x00 ) // light green - && nSalColor != MAKE_SALCOLOR( 0x00, 0xFF, 0xFF ) // light cyan - && nSalColor != MAKE_SALCOLOR( 0xFF, 0x00, 0x00 ) // light red - && nSalColor != MAKE_SALCOLOR( 0xFF, 0x00, 0xFF ) // light magenta - && nSalColor != MAKE_SALCOLOR( 0xFF, 0xFF, 0x00 ) // light brown - && nSalColor != MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ) ) - bDitherBrush_ = GetDitherPixmap(nSalColor); - bBrushGC_ = FALSE; - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::SetROPLineColor( SalROPColor nROPColor ) -{ - switch( nROPColor ) - { - case SAL_ROP_0 : // 0 - nPenPixel_ = (Pixel)0; - break; - case SAL_ROP_1 : // 1 - nPenPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1; - break; - case SAL_ROP_INVERT : // 2 - nPenPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1; - break; - } - nPenColor_ = GetColormap().GetColor( nPenPixel_ ); - bPenGC_ = FALSE; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::SetROPFillColor( SalROPColor nROPColor ) -{ - switch( nROPColor ) - { - case SAL_ROP_0 : // 0 - nBrushPixel_ = (Pixel)0; - break; - case SAL_ROP_1 : // 1 - nBrushPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1; - break; - case SAL_ROP_INVERT : // 2 - nBrushPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1; - break; - } - bDitherBrush_ = FALSE; - nBrushColor_ = GetColormap().GetColor( nBrushPixel_ ); - bBrushGC_ = FALSE; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::SetXORMode( bool bSet, bool ) -{ - if( !bXORMode_ == bSet ) - { - bXORMode_ = bSet; - bPenGC_ = FALSE; - bBrushGC_ = FALSE; - bMonoGC_ = FALSE; - bCopyGC_ = FALSE; - bInvertGC_ = FALSE; - bInvert50GC_ = FALSE; - bStippleGC_ = FALSE; - bTrackingGC_ = FALSE; - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::drawPixel( long nX, long nY ) -{ - if( nPenColor_ != SALCOLOR_NONE ) - XDrawPoint( GetXDisplay(), GetDrawable(), SelectPen(), nX, nY ); -} - -void X11SalGraphics::drawPixel( long nX, long nY, SalColor nSalColor ) -{ - if( nSalColor != SALCOLOR_NONE ) - { - Display *pDisplay = GetXDisplay(); - - if( (nPenColor_ == SALCOLOR_NONE) && !bPenGC_ ) - { - SetLineColor( nSalColor ); - XDrawPoint( pDisplay, GetDrawable(), SelectPen(), nX, nY ); - nPenColor_ = SALCOLOR_NONE; - bPenGC_ = False; - } - else - { - GC pGC = SelectPen(); - - if( nSalColor != nPenColor_ ) - XSetForeground( pDisplay, pGC, GetPixel( nSalColor ) ); - - XDrawPoint( pDisplay, GetDrawable(), pGC, nX, nY ); - - if( nSalColor != nPenColor_ ) - XSetForeground( pDisplay, pGC, nPenPixel_ ); - } - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 ) -{ - if( nPenColor_ != SALCOLOR_NONE ) - { - if ( GetDisplay()->GetProperties() & PROPERTY_BUG_DrawLine ) - { - GC aGC = SelectPen(); - XDrawPoint (GetXDisplay(), GetDrawable(), aGC, (int)nX1, (int)nY1); - XDrawPoint (GetXDisplay(), GetDrawable(), aGC, (int)nX2, (int)nY2); - XDrawLine (GetXDisplay(), GetDrawable(), aGC, nX1, nY1, nX2, nY2 ); - } - else - XDrawLine( GetXDisplay(), GetDrawable(),SelectPen(), - nX1, nY1, nX2, nY2 ); - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::drawRect( long nX, long nY, long nDX, long nDY ) -{ - if( nBrushColor_ != SALCOLOR_NONE ) - { - XFillRectangle( GetXDisplay(), - GetDrawable(), - SelectBrush(), - nX, nY, nDX, nDY ); - } - // Beschreibung DrawRect verkehrt, deshalb -1 - if( nPenColor_ != SALCOLOR_NONE ) - XDrawRectangle( GetXDisplay(), - GetDrawable(), - SelectPen(), - nX, nY, nDX-1, nDY-1 ); -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint *pPtAry ) -{ - drawPolyLine( nPoints, pPtAry, false ); -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint *pPtAry, bool bClose ) -{ - if( nPenColor_ != 0xFFFFFFFF ) - { - SalPolyLine Points( nPoints, pPtAry ); - - DrawLines( nPoints, Points, SelectPen(), bClose ); - } -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::drawPolygon( ULONG nPoints, const SalPoint* pPtAry ) -{ - if( nPoints == 0 ) - return; - - if( nPoints < 3 ) - { - if( !bXORMode_ ) - { - if( 1 == nPoints ) - drawPixel( pPtAry[0].mnX, pPtAry[0].mnY ); - else - drawLine( pPtAry[0].mnX, pPtAry[0].mnY, - pPtAry[1].mnX, pPtAry[1].mnY ); - } - return; - } - - SalPolyLine Points( nPoints, pPtAry ); - - nPoints++; - - /* WORKAROUND: some Xservers (Xorg, VIA chipset in this case) - * do not draw the visible part of a polygon - * if it overlaps to the left of screen 0,y. - * This happens to be the case in the gradient drawn in the - * menubar background. workaround for the special case of - * of a rectangle overlapping to the left. - */ - if( nPoints == 5 && - Points[ 0 ].x == Points[ 1 ].x && - Points[ 1 ].y == Points[ 2 ].y && - Points[ 2 ].x == Points[ 3 ].x && - Points[ 0 ].x == Points[ 4 ].x && Points[ 0 ].y == Points[ 4 ].y - ) - { - bool bLeft = false; - bool bRight = false; - for(unsigned int i = 0; i < nPoints; i++ ) - { - if( Points[i].x < 0 ) - bLeft = true; - else - bRight= true; - } - if( bLeft && ! bRight ) - return; - if( bLeft && bRight ) - { - for( unsigned int i = 0; i < nPoints; i++ ) - if( Points[i].x < 0 ) - Points[i].x = 0; - } - } - - if( nBrushColor_ != SALCOLOR_NONE ) - XFillPolygon( GetXDisplay(), - GetDrawable(), - SelectBrush(), - &Points[0], nPoints, - Complex, CoordModeOrigin ); - - if( nPenColor_ != 0xFFFFFFFF ) - DrawLines( nPoints, Points, SelectPen(), true ); -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -void X11SalGraphics::drawPolyPolygon( sal_uInt32 nPoly, - const sal_uInt32 *pPoints, - PCONSTSALPOINT *pPtAry ) -{ - if( nBrushColor_ != SALCOLOR_NONE ) - { - ULONG i, n; - XLIB_Region pXRegA = NULL; - - for( i = 0; i < nPoly; i++ ) { - n = pPoints[i]; - SalPolyLine Points( n, pPtAry[i] ); - if( n > 2 ) - { - XLIB_Region pXRegB = XPolygonRegion( &Points[0], n+1, WindingRule ); - if( !pXRegA ) - pXRegA = pXRegB; - else - { - XXorRegion( pXRegA, pXRegB, pXRegA ); - XDestroyRegion( pXRegB ); - } - } - } - - if( pXRegA ) - { - XRectangle aXRect; - XClipBox( pXRegA, &aXRect ); - - GC pGC = SelectBrush(); - SetClipRegion( pGC, pXRegA ); // ??? doppelt - XDestroyRegion( pXRegA ); - bBrushGC_ = FALSE; - - XFillRectangle( GetXDisplay(), - GetDrawable(), - pGC, - aXRect.x, aXRect.y, aXRect.width, aXRect.height ); - } - } - - if( nPenColor_ != SALCOLOR_NONE ) - for( ULONG i = 0; i < nPoly; i++ ) - drawPolyLine( pPoints[i], pPtAry[i], true ); -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -sal_Bool X11SalGraphics::drawPolyLineBezier( ULONG, const SalPoint*, const BYTE* ) -{ - return sal_False; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -sal_Bool X11SalGraphics::drawPolygonBezier( ULONG, const SalPoint*, const BYTE* ) -{ - return sal_False; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -sal_Bool X11SalGraphics::drawPolyPolygonBezier( sal_uInt32, const sal_uInt32*, - const SalPoint* const*, const BYTE* const* ) -{ - return sal_False; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -void X11SalGraphics::invert( ULONG nPoints, - const SalPoint* pPtAry, - SalInvert nFlags ) -{ - SalPolyLine Points ( nPoints, pPtAry ); - - GC pGC; - if( SAL_INVERT_50 & nFlags ) - pGC = GetInvert50GC(); - else - if ( SAL_INVERT_TRACKFRAME & nFlags ) - pGC = GetTrackingGC(); - else - pGC = GetInvertGC(); - - if( SAL_INVERT_TRACKFRAME & nFlags ) - DrawLines ( nPoints, Points, pGC, true ); - else - XFillPolygon( GetXDisplay(), - GetDrawable(), - pGC, - &Points[0], nPoints, - Complex, CoordModeOrigin ); -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -BOOL X11SalGraphics::drawEPS( long,long,long,long,void*,ULONG ) -{ - return FALSE; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -XID X11SalGraphics::GetXRenderPicture() -{ - if( !m_aRenderPicture ) - { - // check xrender support for matching visual - // find a XRenderPictFormat compatible with the Drawable - XRenderPeer& rRenderPeer = XRenderPeer::GetInstance(); - XRenderPictFormat* pVisualFormat = static_cast(GetXRenderFormat()); - if( !pVisualFormat ) - { - Visual* pVisual = GetDisplay()->GetVisual( m_nScreen ).GetVisual(); - pVisualFormat = rRenderPeer.FindVisualFormat( pVisual ); - if( !pVisualFormat ) - return 0; - // cache the XRenderPictFormat - SetXRenderFormat( static_cast(pVisualFormat) ); - } - - // get the matching xrender target for drawable - m_aRenderPicture = rRenderPeer.CreatePicture( hDrawable_, pVisualFormat, 0, NULL ); - } - -#if 0 - // setup clipping so the callers don't have to do it themselves - // TODO: avoid clipping if already set correctly - if( pClipRegion_ && !XEmptyRegion( pClipRegion_ ) ) - rRenderPeer.SetPictureClipRegion( aDstPic, pClipRegion_ ); -#endif - - return m_aRenderPicture; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -SystemGraphicsData X11SalGraphics::GetGraphicsData() const -{ - SystemGraphicsData aRes; - - aRes.nSize = sizeof(aRes); - aRes.pDisplay = GetXDisplay(); - aRes.hDrawable = hDrawable_; - aRes.pVisual = GetDisplay()->GetVisual( m_nScreen ).GetVisual(); - aRes.nScreen = m_nScreen; - aRes.nDepth = GetDisplay()->GetVisual( m_nScreen ).GetDepth(); - aRes.aColormap = GetDisplay()->GetColormap( m_nScreen ).GetXColormap(); - aRes.pRenderFormat = m_pRenderFormat; - return aRes; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -// B2DPolygon support methods - -namespace { // anonymous namespace to prevent export -// the methods and structures here are used by the -// B2DPolyPolygon->RenderTrapezoid conversion algorithm - -// compare two line segments -// assumption: both segments point downward -// assumption: they must have at least some y-overlap -// assumption: rA.p1.y <= rB.p1.y -bool IsLeftOf( const XLineFixed& rA, const XLineFixed& rB ) -{ - bool bAbove = (rA.p1.y <= rB.p1.y); - const XLineFixed& rU = bAbove ? rA : rB; - const XLineFixed& rL = bAbove ? rB : rA; - - const XFixed aXDiff = rU.p2.x - rU.p1.x; - const XFixed aYDiff = rU.p2.y - rU.p1.y; - - if( (rU.p1.y != rL.p1.y) || (rU.p1.x != rL.p1.x) ) - { - const sal_Int64 n1 = (sal_Int64)aXDiff * (rL.p1.y - rU.p1.y); - const sal_Int64 n2 = (sal_Int64)aYDiff * (rL.p1.x - rU.p1.x); - if( n1 != n2 ) - return ((n1 < n2) == bAbove); - } - - if( (rU.p2.y != rL.p2.y) || (rU.p2.x != rL.p2.x) ) - { - const sal_Int64 n3 = (sal_Int64)aXDiff * (rL.p2.y - rU.p1.y); - const sal_Int64 n4 = (sal_Int64)aYDiff * (rL.p2.x - rU.p1.x); - if( n3 != n4 ) - return ((n3 < n4) == bAbove); - } - - // both segments overlap - return false; -} - -struct HalfTrapezoid -{ - // assumptions: - // maLine.p1.y <= mnY < maLine.p2.y - XLineFixed maLine; - XFixed mnY; -}; - -struct HalfTrapCompare -{ - bool operator()( const HalfTrapezoid& rA, const HalfTrapezoid& rB ) const - { - bool bIsTopLeft = false; - if( rA.mnY != rB.mnY ) // sort top-first if possible - bIsTopLeft = (rA.mnY < rB.mnY); - else // else sort left-first - bIsTopLeft = IsLeftOf( rA.maLine, rB.maLine ); - // adjust to priority_queue sorting convention - return !bIsTopLeft; - } -}; - -typedef std::priority_queue< HalfTrapezoid, std::vector, HalfTrapCompare > HTQueueBase; -// we need a priority queue with a reserve() to prevent countless reallocations -class HTQueue -: public HTQueueBase -{ -public: - void reserve( size_t n ) { c.reserve( n ); } - int capacity() { return c.capacity(); } -}; - -typedef std::vector TrapezoidVector; - -class TrapezoidXCompare -{ - const TrapezoidVector& mrVector; -public: - TrapezoidXCompare( const TrapezoidVector& rVector ) - : mrVector( rVector ) {} - bool operator()( int nA, int nB ) const - { return IsLeftOf( mrVector[nA].left, mrVector[nB].left ); } -}; - -typedef std::multiset< int, TrapezoidXCompare > ActiveTrapSet; - -class TrapezoidYCompare -{ - const TrapezoidVector& mrVector; -public: - TrapezoidYCompare( const TrapezoidVector& rVector ) - : mrVector( rVector ) {} - bool operator()( int nA, int nB ) const - { return (mrVector[nA].bottom < mrVector[nB].bottom); } -}; - -typedef std::multiset< int, TrapezoidYCompare > VerticalTrapSet; -} // end of anonymous namespace - -// draw a poly-polygon -bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, double fTransparency) -{ - // nothing to do for empty polypolygons - const int nPolygonCount = rPolyPoly.count(); - if( nPolygonCount <= 0 ) - return TRUE; - - // nothing to do if everything is transparent - if( (nBrushColor_ == SALCOLOR_NONE) - && (nPenColor_ == SALCOLOR_NONE) ) - return TRUE; - - // cannot handle pencolor!=brushcolor yet - if( (nPenColor_ != SALCOLOR_NONE) - && (nPenColor_ != nBrushColor_) ) - return FALSE; - - // TODO: remove the env-variable when no longer needed - static const char* pRenderEnv = getenv( "SAL_DISABLE_RENDER_POLY" ); - if( pRenderEnv ) - return FALSE; - - // check xrender support for trapezoids - XRenderPeer& rRenderPeer = XRenderPeer::GetInstance(); - if( !rRenderPeer.AreTrapezoidsSupported() ) - return FALSE; - Picture aDstPic = GetXRenderPicture(); - // check xrender support for this drawable - if( !aDstPic ) - return FALSE; - - // don't bother with polygons outside of visible area - const basegfx::B2DRange aViewRange( 0, 0, GetGraphicsWidth(), GetGraphicsHeight() ); - const basegfx::B2DRange aPolyRange = basegfx::tools::getRange( rPolyPoly ); - const bool bNeedViewClip = !aPolyRange.isInside( aViewRange ); - if( !aPolyRange.overlaps( aViewRange ) ) - return true; - - // convert the polypolygon to trapezoids - - // first convert the B2DPolyPolygon to HalfTrapezoids - // #i100922# try to prevent priority-queue reallocations by reservering enough - int nHTQueueReserve = 0; - for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx ) - { - const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx ); - const int nPointCount = aOuterPolygon.count(); - nHTQueueReserve += aOuterPolygon.areControlPointsUsed() ? 8 * nPointCount : nPointCount; - } - nHTQueueReserve = ((4*nHTQueueReserve) | 0x1FFF) + 1; - HTQueue aHTQueue; - aHTQueue.reserve( nHTQueueReserve ); - for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx ) - { - const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx ); - - // render-trapezoids should be inside the view => clip polygon against view range - basegfx::B2DPolyPolygon aClippedPolygon( aOuterPolygon ); - if( bNeedViewClip ) - { - aClippedPolygon = basegfx::tools::clipPolygonOnRange( aOuterPolygon, aViewRange, true, false ); - DBG_ASSERT( aClippedPolygon.count(), "polygon confirmed to overlap with view should not get here" ); - if( !aClippedPolygon.count() ) - continue; - } - - // render-trapezoids have linear edges => get rid of bezier segments - if( aClippedPolygon.areControlPointsUsed() ) - aClippedPolygon = ::basegfx::tools::adaptiveSubdivideByDistance( aClippedPolygon, 0.125 ); - - // test and remove self intersections - // TODO: make code intersection save, then remove this test - basegfx::B2DPolyPolygon aInnerPolyPoly(basegfx::tools::solveCrossovers( aClippedPolygon)); - const int nInnerPolyCount = aInnerPolyPoly.count(); - for( int nInnerPolyIdx = 0; nInnerPolyIdx < nInnerPolyCount; ++nInnerPolyIdx ) - { - ::basegfx::B2DPolygon aInnerPolygon = aInnerPolyPoly.getB2DPolygon( nInnerPolyIdx ); - const int nPointCount = aInnerPolygon.count(); - if( !nPointCount ) - continue; - - aHTQueue.reserve( aHTQueue.size() + 8 * nPointCount ); - - // convert polygon point pairs to HalfTrapezoids - // connect the polygon point with the first one if needed - XPointFixed aOldXPF = { 0, 0 }; - XPointFixed aNewXPF; - for( int nPointIdx = 0; nPointIdx <= nPointCount; ++nPointIdx, aOldXPF = aNewXPF ) - { - const int k = (nPointIdx < nPointCount) ? nPointIdx : 0; - const ::basegfx::B2DPoint& aPoint = aInnerPolygon.getB2DPoint( k ); - - // convert the B2DPoint into XRENDER units - if(getAntiAliasB2DDraw()) - { - aNewXPF.x = XDoubleToFixed( aPoint.getX() ); - aNewXPF.y = XDoubleToFixed( aPoint.getY() ); - } - else - { - aNewXPF.x = XDoubleToFixed( basegfx::fround( aPoint.getX() ) ); - aNewXPF.y = XDoubleToFixed( basegfx::fround( aPoint.getY() ) ); - } - - // check if enough data is available for a new HalfTrapezoid - if( nPointIdx == 0 ) - continue; - // ignore vertical segments - if( aNewXPF.y == aOldXPF.y ) - continue; - - // construct HalfTrapezoid as topdown segment - HalfTrapezoid aHT; - if( aNewXPF.y < aOldXPF.y ) - { - aHT.maLine.p1 = aNewXPF; - aHT.maLine.p2 = aOldXPF; - } - else - { - aHT.maLine.p2 = aNewXPF; - aHT.maLine.p1 = aOldXPF; - } - - aHT.mnY = aHT.maLine.p1.y; - -#if 0 // ignore clipped HalfTrapezoids - if( aHT.mnY < 0 ) - aHT.mnY = 0; - else if( aHT.mnY > 10000 ) - continue; -#endif - - // queue up the HalfTrapezoid - aHTQueue.push( aHT ); - } - } - } - - if( aHTQueue.empty() ) - return TRUE; - - // then convert the HalfTrapezoids into full Trapezoids - TrapezoidVector aTrapVector; - aTrapVector.reserve( aHTQueue.size() * 2 ); // just a guess - - TrapezoidXCompare aTrapXCompare( aTrapVector ); - ActiveTrapSet aActiveTraps( aTrapXCompare ); - - TrapezoidYCompare aTrapYCompare( aTrapVector ); - VerticalTrapSet aVerticalTraps( aTrapYCompare ); - - while( !aHTQueue.empty() ) - { - XTrapezoid aTrapezoid; - - // convert a HalfTrapezoid pair - const HalfTrapezoid& rLeft = aHTQueue.top(); - aTrapezoid.top = rLeft.mnY; - aTrapezoid.bottom = rLeft.maLine.p2.y; - aTrapezoid.left = rLeft.maLine; - -#if 0 - // ignore empty trapezoids - if( aTrapezoid.bottom <= aTrapezoid.top ) - continue; -#endif - - aHTQueue.pop(); - if( aHTQueue.empty() ) // TODO: assert - break; - const HalfTrapezoid& rRight = aHTQueue.top(); - aTrapezoid.right = rRight.maLine; - aHTQueue.pop(); - - aTrapezoid.bottom = aTrapezoid.left.p2.y; - if( aTrapezoid.bottom > aTrapezoid.right.p2.y ) - aTrapezoid.bottom = aTrapezoid.right.p2.y; - - // keep the full Trapezoid candidate - aTrapVector.push_back( aTrapezoid ); - - // unless it splits an older trapezoid - bool bSplit = false; - for(;;) - { - // check if the new trapezoid overlaps with an old trapezoid - ActiveTrapSet::iterator aActiveTrapsIt - = aActiveTraps.upper_bound( aTrapVector.size()-1 ); - if( aActiveTrapsIt == aActiveTraps.begin() ) - break; - --aActiveTrapsIt; - - XTrapezoid& rLeftTrap = aTrapVector[ *aActiveTrapsIt ]; - - // in the ActiveTrapSet there are still trapezoids where - // a vertical overlap with new trapezoids is no longer possible - // they could have been removed in the verticaltraps loop below - // but this would have been expensive and is not needed as we can - // simply ignore them now and remove them from the ActiveTrapSet - // so they won't bother us in the future - if( rLeftTrap.bottom <= aTrapezoid.top ) - { - aActiveTraps.erase( aActiveTrapsIt ); - continue; - } - - // check if there is horizontal overlap - // aTrapezoid.left==rLeftTrap.right is allowed though - if( !IsLeftOf( aTrapezoid.left, rLeftTrap.right ) ) - break; - - // split the old trapezoid and keep its upper part - // find the old trapezoids entry in the VerticalTrapSet and remove it - typedef std::pair VTSPair; - VTSPair aVTSPair = aVerticalTraps.equal_range( *aActiveTrapsIt ); - VerticalTrapSet::iterator aVTSit = aVTSPair.first; - for(; (aVTSit != aVTSPair.second) && (*aVTSit != *aActiveTrapsIt); ++aVTSit ) ; - if( aVTSit != aVTSPair.second ) - aVerticalTraps.erase( aVTSit ); - // then update the old trapezoid's bottom - rLeftTrap.bottom = aTrapezoid.top; - // enter the updated old trapzoid in VerticalTrapSet - aVerticalTraps.insert( aVerticalTraps.begin(), *aActiveTrapsIt ); - // the old trapezoid is no longer active - aActiveTraps.erase( aActiveTrapsIt ); - - // the trapezoid causing the split has become obsolete - // so its both sides have to be re-queued - HalfTrapezoid aHT; - aHT.mnY = aTrapezoid.top; - aHT.maLine = aTrapezoid.left; - aHTQueue.push( aHT ); - aHT.maLine = aTrapezoid.right; - aHTQueue.push( aHT ); - - bSplit = true; - break; - } - - // keep or forget the resulting full Trapezoid - if( bSplit ) - aTrapVector.pop_back(); - else - { - aActiveTraps.insert( aTrapVector.size()-1 ); - aVerticalTraps.insert( aTrapVector.size()-1 ); - } - - // mark trapezoids that can no longer be split as inactive - // and recycle their sides which were not fully resolved - static const XFixed nMaxTop = +0x7FFFFFFF; - XFixed nNewTop = aHTQueue.empty() ? nMaxTop : aHTQueue.top().mnY; - while( !aVerticalTraps.empty() ) - { - const XTrapezoid& rOldTrap = aTrapVector[ *aVerticalTraps.begin() ]; - if( nNewTop < rOldTrap.bottom ) - break; - // the reference Trapezoid can no longer be split - aVerticalTraps.erase( aVerticalTraps.begin() ); - - // recycle its sides that were not fully resolved - HalfTrapezoid aHT; - aHT.mnY = rOldTrap.bottom; - if( rOldTrap.left.p2.y > rOldTrap.bottom ) - { - aHT.maLine = rOldTrap.left; - aHTQueue.push( aHT ); - } - if( rOldTrap.right.p2.y > rOldTrap.bottom ) - { - aHT.maLine = rOldTrap.right; - aHTQueue.push( aHT ); - } - } - } - - // create xrender Picture for polygon foreground - SalDisplay::RenderEntry& rEntry = GetDisplay()->GetRenderEntries( m_nScreen )[ 32 ]; - if( !rEntry.m_aPicture ) - { - Display* pXDisplay = GetXDisplay(); - - rEntry.m_aPixmap = ::XCreatePixmap( pXDisplay, hDrawable_, 1, 1, 32 ); - XRenderPictureAttributes aAttr; - aAttr.repeat = true; - - XRenderPictFormat* pXRPF = rRenderPeer.FindStandardFormat( PictStandardARGB32 ); - rEntry.m_aPicture = rRenderPeer.CreatePicture( rEntry.m_aPixmap, pXRPF, CPRepeat, &aAttr ); - } - - // set polygon foreground color and opacity - XRenderColor aRenderColor = GetXRenderColor( nBrushColor_ , fTransparency ); - rRenderPeer.FillRectangle( PictOpSrc, rEntry.m_aPicture, &aRenderColor, 0, 0, 1, 1 ); - - // set clipping - // TODO: move into GetXRenderPicture? - if( pClipRegion_ && !XEmptyRegion( pClipRegion_ ) ) - rRenderPeer.SetPictureClipRegion( aDstPic, pClipRegion_ ); - - // render the trapezoids - const XRenderPictFormat* pMaskFormat = rRenderPeer.GetStandardFormatA8(); - rRenderPeer.CompositeTrapezoids( PictOpOver, - rEntry.m_aPicture, aDstPic, pMaskFormat, 0, 0, &aTrapVector[0], aTrapVector.size() ); - - return TRUE; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin eLineJoin) -{ - const XRenderPeer& rRenderPeer = XRenderPeer::GetInstance(); - if( !rRenderPeer.AreTrapezoidsSupported() ) - return false; - - // get the area polygon for the line polygon - basegfx::B2DPolygon aPolygon = rPolygon; - if( (rLineWidth.getX() != rLineWidth.getY()) - && !basegfx::fTools::equalZero( rLineWidth.getY() ) ) - { - // prepare for createAreaGeometry() with anisotropic linewidth - basegfx::B2DHomMatrix aAnisoMatrix; - aAnisoMatrix.scale( 1.0, rLineWidth.getX() / rLineWidth.getY() ); - aPolygon.transform( aAnisoMatrix ); - } - - // AW: reSegment no longer needed; new createAreaGeometry will remove exteme positions - // and create bezier polygons - //if( aPolygon.areControlPointsUsed() ) - // aPolygon = basegfx::tools::reSegmentPolygonEdges( aPolygon, 8, true, false ); - //const basegfx::B2DPolyPolygon aAreaPolyPoly = basegfx::tools::createAreaGeometryForSimplePolygon( - // aPolygon, 0.5*rLineWidth.getX(), eLineJoin ); - const basegfx::B2DPolyPolygon aAreaPolyPoly(basegfx::tools::createAreaGeometry(aPolygon, 0.5*rLineWidth.getX(), eLineJoin)); - - if( (rLineWidth.getX() != rLineWidth.getY()) - && !basegfx::fTools::equalZero( rLineWidth.getX() ) ) - { - // postprocess createAreaGeometry() for anisotropic linewidth - basegfx::B2DHomMatrix aAnisoMatrix; - aAnisoMatrix.scale( 1.0, rLineWidth.getY() / rLineWidth.getX() ); - aPolygon.transform( aAnisoMatrix ); - } - - // temporarily adjust brush color to pen color - // since the line is drawn as an area-polygon - const SalColor aKeepBrushColor = nBrushColor_; - nBrushColor_ = nPenColor_; - - // draw each area polypolygon component individually - // to emulate the polypolygon winding rule "non-zero" - bool bDrawOk = true; - const int nPolyCount = aAreaPolyPoly.count(); - for( int nPolyIdx = 0; nPolyIdx < nPolyCount; ++nPolyIdx ) - { - const ::basegfx::B2DPolyPolygon aOnePoly( aAreaPolyPoly.getB2DPolygon( nPolyIdx ) ); - bDrawOk = drawPolyPolygon( aOnePoly, 0.0); - if( !bDrawOk ) - break; - } - - // restore the original brush GC - nBrushColor_ = aKeepBrushColor; - return bDrawOk; -} - -// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +#include "Xproto.h" + +#include "salunx.h" +#include "saldata.hxx" +#include "saldisp.hxx" +#include "salgdi.h" +#include "salframe.h" +#include "salvd.h" +#include "xrender_peer.hxx" + +#include "vcl/printergfx.hxx" +#include "vcl/jobdata.hxx" + +#include "tools/debug.hxx" + +#include "basegfx/polygon/b2dpolygon.hxx" +#include "basegfx/polygon/b2dpolypolygon.hxx" +#include "basegfx/polygon/b2dpolypolygontools.hxx" +#include "basegfx/polygon/b2dpolygontools.hxx" +#include "basegfx/polygon/b2dpolygonclipper.hxx" +#include "basegfx/polygon/b2dlinegeometry.hxx" +#include "basegfx/matrix/b2dhommatrix.hxx" +#include "basegfx/polygon/b2dpolypolygoncutter.hxx" + +#include +#include +#include + +// -=-= SalPolyLine =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +#define STATIC_POINTS 64 + +class SalPolyLine +{ + XPoint Points_[STATIC_POINTS]; + XPoint *pFirst_; +public: + inline SalPolyLine( ULONG nPoints ); + inline SalPolyLine( ULONG nPoints, const SalPoint *p ); + inline ~SalPolyLine(); + inline XPoint &operator [] ( ULONG n ) const + { return pFirst_[n]; } +}; + +inline SalPolyLine::SalPolyLine( ULONG nPoints ) + : pFirst_( nPoints+1 > STATIC_POINTS ? new XPoint[nPoints+1] : Points_ ) +{} + +inline SalPolyLine::SalPolyLine( ULONG nPoints, const SalPoint *p ) + : pFirst_( nPoints+1 > STATIC_POINTS ? new XPoint[nPoints+1] : Points_ ) +{ + for( ULONG i = 0; i < nPoints; i++ ) + { + pFirst_[i].x = (short)p[i].mnX; + pFirst_[i].y = (short)p[i].mnY; + } + pFirst_[nPoints] = pFirst_[0]; // close polyline +} + +inline SalPolyLine::~SalPolyLine() +{ if( pFirst_ != Points_ ) delete [] pFirst_; } + +#undef STATIC_POINTS +// -=-= X11SalGraphics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +X11SalGraphics::X11SalGraphics() +{ + m_pFrame = NULL; + m_pVDev = NULL; + m_pDeleteColormap = NULL; + hDrawable_ = None; + m_aRenderPicture = 0; + m_pRenderFormat = NULL; + + pClipRegion_ = NULL; + pPaintRegion_ = NULL; + + pPenGC_ = NULL; + nPenPixel_ = 0; + nPenColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black + + pFontGC_ = NULL; + for( int i = 0; i < MAX_FALLBACK; ++i ) + { + mXFont[i] = NULL; + mpServerFont[i] = NULL; + } + + nTextPixel_ = 0; + nTextColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black + + pBrushGC_ = NULL; + nBrushPixel_ = 0; + nBrushColor_ = MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ); // White + hBrush_ = None; + + pMonoGC_ = NULL; + pCopyGC_ = NULL; + pMaskGC_ = NULL; + pInvertGC_ = NULL; + pInvert50GC_ = NULL; + pStippleGC_ = NULL; + pTrackingGC_ = NULL; + + bWindow_ = FALSE; + bPrinter_ = FALSE; + bVirDev_ = FALSE; + bPenGC_ = FALSE; + bFontGC_ = FALSE; + bBrushGC_ = FALSE; + bMonoGC_ = FALSE; + bCopyGC_ = FALSE; + bInvertGC_ = FALSE; + bInvert50GC_ = FALSE; + bStippleGC_ = FALSE; + bTrackingGC_ = FALSE; + bXORMode_ = FALSE; + bDitherBrush_ = FALSE; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +X11SalGraphics::~X11SalGraphics() +{ + ReleaseFonts(); + freeResources(); +} + +// -=-= SalGraphics / X11SalGraphics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +void X11SalGraphics::freeResources() +{ + Display *pDisplay = GetXDisplay(); + + DBG_ASSERT( !pPaintRegion_, "pPaintRegion_" ); + if( pClipRegion_ ) XDestroyRegion( pClipRegion_ ), pClipRegion_ = None; + + if( hBrush_ ) XFreePixmap( pDisplay, hBrush_ ), hBrush_ = None; + if( pPenGC_ ) XFreeGC( pDisplay, pPenGC_ ), pPenGC_ = None; + if( pFontGC_ ) XFreeGC( pDisplay, pFontGC_ ), pFontGC_ = None; + if( pBrushGC_ ) XFreeGC( pDisplay, pBrushGC_ ), pBrushGC_ = None; + if( pMonoGC_ ) XFreeGC( pDisplay, pMonoGC_ ), pMonoGC_ = None; + if( pCopyGC_ ) XFreeGC( pDisplay, pCopyGC_ ), pCopyGC_ = None; + if( pMaskGC_ ) XFreeGC( pDisplay, pMaskGC_ ), pMaskGC_ = None; + if( pInvertGC_ ) XFreeGC( pDisplay, pInvertGC_ ), pInvertGC_ = None; + if( pInvert50GC_ ) XFreeGC( pDisplay, pInvert50GC_ ), pInvert50GC_ = None; + if( pStippleGC_ ) XFreeGC( pDisplay, pStippleGC_ ), pStippleGC_ = None; + if( pTrackingGC_ ) XFreeGC( pDisplay, pTrackingGC_ ), pTrackingGC_ = None; + if( m_pDeleteColormap ) + delete m_pDeleteColormap, m_pColormap = m_pDeleteColormap = NULL; + + if( m_aRenderPicture ) + XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ), m_aRenderPicture = 0; + + bPenGC_ = bFontGC_ = bBrushGC_ = bMonoGC_ = bCopyGC_ = bInvertGC_ = bInvert50GC_ = bStippleGC_ = bTrackingGC_ = false; +} + +void X11SalGraphics::SetDrawable( Drawable aDrawable, int nScreen ) +{ + // shortcut if nothing changed + if( hDrawable_ == aDrawable ) + return; + + // free screen specific resources if needed + if( nScreen != m_nScreen ) + { + freeResources(); + m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap( nScreen ); + m_nScreen = nScreen; + } + + hDrawable_ = aDrawable; + SetXRenderFormat( NULL ); + if( m_aRenderPicture ) + { + XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ); + m_aRenderPicture = 0; + } + + if( hDrawable_ ) + { + nPenPixel_ = GetPixel( nPenColor_ ); + nTextPixel_ = GetPixel( nTextColor_ ); + nBrushPixel_ = GetPixel( nBrushColor_ ); + } +} + +void X11SalGraphics::Init( SalFrame *pFrame, Drawable aTarget, int nScreen ) +{ +#if 0 // TODO: use SetDrawable() instead + m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap(nScreen); + hDrawable_ = aTarget; + m_nScreen = nScreen; + SetXRenderFormat( NULL ); + if( m_aRenderPicture ) + XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ), m_aRenderPicture = 0; + + nPenPixel_ = GetPixel( nPenColor_ ); + nTextPixel_ = GetPixel( nTextColor_ ); + nBrushPixel_ = GetPixel( nBrushColor_ ); +#else + m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap(nScreen); + m_nScreen = nScreen; + SetDrawable( aTarget, nScreen ); +#endif + + bWindow_ = TRUE; + m_pFrame = pFrame; + m_pVDev = NULL; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::DeInit() +{ + SetDrawable( None, m_nScreen ); +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::SetClipRegion( GC pGC, XLIB_Region pXReg ) const +{ + Display *pDisplay = GetXDisplay(); + + int n = 0; + XLIB_Region Regions[3]; + + if( pClipRegion_ /* && !XEmptyRegion( pClipRegion_ ) */ ) + Regions[n++] = pClipRegion_; +// if( pPaintRegion_ /* && !XEmptyRegion( pPaintRegion_ ) */ ) +// Regions[n++] = pPaintRegion_; + + if( pXReg && !XEmptyRegion( pXReg ) ) + Regions[n++] = pXReg; + + if( 0 == n ) + XSetClipMask( pDisplay, pGC, None ); + else if( 1 == n ) + XSetRegion( pDisplay, pGC, Regions[0] ); + else + { + XLIB_Region pTmpRegion = XCreateRegion(); + XIntersectRegion( Regions[0], Regions[1], pTmpRegion ); +// if( 3 == n ) +// XIntersectRegion( Regions[2], pTmpRegion, pTmpRegion ); + XSetRegion( pDisplay, pGC, pTmpRegion ); + XDestroyRegion( pTmpRegion ); + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +GC X11SalGraphics::SelectPen() +{ + Display *pDisplay = GetXDisplay(); + + if( !pPenGC_ ) + { + XGCValues values; + values.subwindow_mode = ClipByChildren; + values.fill_rule = EvenOddRule; // Pict import/ Gradient + values.graphics_exposures = False; + + pPenGC_ = XCreateGC( pDisplay, hDrawable_, + GCSubwindowMode | GCFillRule | GCGraphicsExposures, + &values ); + } + + if( !bPenGC_ ) + { + if( nPenColor_ != SALCOLOR_NONE ) + XSetForeground( pDisplay, pPenGC_, nPenPixel_ ); + XSetFunction ( pDisplay, pPenGC_, bXORMode_ ? GXxor : GXcopy ); + SetClipRegion( pPenGC_ ); + bPenGC_ = TRUE; + } + + return pPenGC_; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +GC X11SalGraphics::SelectBrush() +{ + Display *pDisplay = GetXDisplay(); + + DBG_ASSERT( nBrushColor_ != SALCOLOR_NONE, "Brush Transparent" ); + + if( !pBrushGC_ ) + { + XGCValues values; + // values.subwindow_mode = IncludeInferiors; + values.subwindow_mode = ClipByChildren; + values.fill_rule = EvenOddRule; // Pict import/ Gradient + values.graphics_exposures = False; + + pBrushGC_ = XCreateGC( pDisplay, hDrawable_, + GCSubwindowMode | GCFillRule | GCGraphicsExposures, + &values ); + } + + if( !bBrushGC_ ) + { + if( !bDitherBrush_ ) + { + XSetFillStyle ( pDisplay, pBrushGC_, FillSolid ); + XSetForeground( pDisplay, pBrushGC_, nBrushPixel_ ); + #if defined(_USE_PRINT_EXTENSION_) + XSetBackground( pDisplay, pBrushGC_, + WhitePixel(pDisplay, DefaultScreen(pDisplay)) ); + #else + if( bPrinter_ ) + XSetTile( pDisplay, pBrushGC_, None ); + #endif + } + else + { + // Bug in Sun Solaris 2.5.1, XFillPolygon doesn't allways reflect + // changes of the tile. PROPERTY_BUG_Tile doesn't fix this ! + if (GetDisplay()->GetProperties() & PROPERTY_BUG_FillPolygon_Tile) + XSetFillStyle ( pDisplay, pBrushGC_, FillSolid ); + + XSetFillStyle ( pDisplay, pBrushGC_, FillTiled ); + XSetTile ( pDisplay, pBrushGC_, hBrush_ ); + } + XSetFunction ( pDisplay, pBrushGC_, bXORMode_ ? GXxor : GXcopy ); + SetClipRegion( pBrushGC_ ); + + bBrushGC_ = TRUE; + } + + return pBrushGC_; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +GC X11SalGraphics::GetTrackingGC() +{ + const char dash_list[2] = {2, 2}; + + if( !pTrackingGC_ ) + { + XGCValues values; + + values.graphics_exposures = False; + values.foreground = m_pColormap->GetBlackPixel() + ^ m_pColormap->GetWhitePixel(); + values.function = GXxor; + values.line_width = 1; + values.line_style = LineOnOffDash; + + pTrackingGC_ = XCreateGC( GetXDisplay(), GetDrawable(), + GCGraphicsExposures | GCForeground | GCFunction + | GCLineWidth | GCLineStyle, + &values ); + XSetDashes( GetXDisplay(), pTrackingGC_, 0, dash_list, 2 ); + } + + if( !bTrackingGC_ ) + { + SetClipRegion( pTrackingGC_ ); + bTrackingGC_ = TRUE; + } + + return pTrackingGC_; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::DrawLines( ULONG nPoints, + const SalPolyLine &rPoints, + GC pGC, + bool bClose + ) +{ + // errechne wie viele Linien XWindow auf einmal zeichnen kann + ULONG nMaxLines = (GetDisplay()->GetMaxRequestSize() - sizeof(xPolyPointReq)) + / sizeof(xPoint); + if( nMaxLines > nPoints ) nMaxLines = nPoints; + + // gebe alle Linien aus, die XWindows zeichnen kann. + ULONG n; + for( n = 0; nPoints - n > nMaxLines; n += nMaxLines - 1 ) + XDrawLines( GetXDisplay(), + GetDrawable(), + pGC, + &rPoints[n], + nMaxLines, + CoordModeOrigin ); + + if( n < nPoints ) + XDrawLines( GetXDisplay(), + GetDrawable(), + pGC, + &rPoints[n], + nPoints - n, + CoordModeOrigin ); + if( bClose ) + { + if( rPoints[nPoints-1].x != rPoints[0].x || rPoints[nPoints-1].y != rPoints[0].y ) + drawLine( rPoints[nPoints-1].x, rPoints[nPoints-1].y, rPoints[0].x, rPoints[0].y ); + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// Dithern: Calculate a dither-pixmap and make a brush of it +#define P_DELTA 51 +#define DMAP( v, m ) ((v % P_DELTA) > m ? (v / P_DELTA) + 1 : (v / P_DELTA)) + +BOOL X11SalGraphics::GetDitherPixmap( SalColor nSalColor ) +{ + static const short nOrdDither8Bit[ 8 ][ 8 ] = + { + { 0, 38, 9, 48, 2, 40, 12, 50}, + {25, 12, 35, 22, 28, 15, 37, 24}, + { 6, 44, 3, 41, 8, 47, 5, 44}, + {32, 19, 28, 16, 34, 21, 31, 18}, + { 1, 40, 11, 49, 0, 39, 10, 48}, + {27, 14, 36, 24, 26, 13, 36, 23}, + { 8, 46, 4, 43, 7, 45, 4, 42}, + {33, 20, 30, 17, 32, 20, 29, 16} + }; + + // test for correct depth (8bit) + if( GetColormap().GetVisual().GetDepth() != 8 ) + return FALSE; + + char pBits[64]; + char *pBitsPtr = pBits; + + // Set the pallette-entries for the dithering tile + UINT8 nSalColorRed = SALCOLOR_RED ( nSalColor ); + UINT8 nSalColorGreen = SALCOLOR_GREEN ( nSalColor ); + UINT8 nSalColorBlue = SALCOLOR_BLUE ( nSalColor ); + + for( int nY = 0; nY < 8; nY++ ) + { + for( int nX = 0; nX < 8; nX++ ) + { + short nMagic = nOrdDither8Bit[nY][nX]; + UINT8 nR = P_DELTA * DMAP( nSalColorRed, nMagic ); + UINT8 nG = P_DELTA * DMAP( nSalColorGreen, nMagic ); + UINT8 nB = P_DELTA * DMAP( nSalColorBlue, nMagic ); + + *pBitsPtr++ = GetColormap().GetPixel( MAKE_SALCOLOR( nR, nG, nB ) ); + } + } + + // create the tile as ximage and an according pixmap -> caching + XImage *pImage = XCreateImage( GetXDisplay(), + GetColormap().GetXVisual(), + 8, + ZPixmap, + 0, // offset + pBits, // data + 8, 8, // width & height + 8, // bitmap_pad + 0 ); // (default) bytes_per_line + + if ( GetDisplay()->GetProperties() & PROPERTY_BUG_Tile ) + { + if (hBrush_) + XFreePixmap (GetXDisplay(), hBrush_); + hBrush_ = XCreatePixmap( GetXDisplay(), GetDrawable(), 8, 8, 8 ); + } + else + if( !hBrush_ ) + hBrush_ = XCreatePixmap( GetXDisplay(), GetDrawable(), 8, 8, 8 ); + + // put the ximage to the pixmap + XPutImage( GetXDisplay(), + hBrush_, + GetDisplay()->GetCopyGC( m_nScreen ), + pImage, + 0, 0, // Source + 0, 0, // Destination + 8, 8 ); // width & height + + // destroy image-frame but not palette-data + pImage->data = NULL; + XDestroyImage( pImage ); + + return TRUE; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::GetResolution( sal_Int32 &rDPIX, sal_Int32 &rDPIY ) // const +{ + const SalDisplay *pDisplay = GetDisplay(); + + rDPIX = pDisplay->GetResolution().A(); + rDPIY = pDisplay->GetResolution().B(); + if( !pDisplay->GetExactResolution() && rDPIY < 96 ) + { + rDPIX = Divide( rDPIX * 96, rDPIY ); + rDPIY = 96; + } + else if ( rDPIY > 200 ) + { + rDPIX = Divide( rDPIX * 200, rDPIY ); + rDPIY = 200; + } + + // #i12705# equalize x- and y-resolution if they are close enough + if( rDPIX != rDPIY ) + { + // different x- and y- resolutions are usually artifacts of + // a wrongly calculated screen size. + //if( (13*rDPIX >= 10*rDPIY) && (13*rDPIY >= 10*rDPIX) ) //+-30% + { +#ifdef DEBUG + printf("Forcing Resolution from %" SAL_PRIdINT32 "x%" SAL_PRIdINT32 " to %" SAL_PRIdINT32 "x%" SAL_PRIdINT32 "\n", + rDPIX,rDPIY,rDPIY,rDPIY); +#endif + rDPIX = rDPIY; // y-resolution is more trustworthy + } + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +USHORT X11SalGraphics::GetBitCount() // const +{ + return GetVisual().GetDepth(); +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +long X11SalGraphics::GetGraphicsWidth() const +{ + if( m_pFrame ) + return m_pFrame->maGeometry.nWidth; + else if( m_pVDev ) + return m_pVDev->GetWidth(); + else + return 0; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +long X11SalGraphics::GetGraphicsHeight() const +{ + if( m_pFrame ) + return m_pFrame->maGeometry.nHeight; + else if( m_pVDev ) + return m_pVDev->GetHeight(); + else + return 0; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::ResetClipRegion() +{ + if( pClipRegion_ ) + { + bPenGC_ = FALSE; + bFontGC_ = FALSE; + bBrushGC_ = FALSE; + bMonoGC_ = FALSE; + bCopyGC_ = FALSE; + bInvertGC_ = FALSE; + bInvert50GC_ = FALSE; + bStippleGC_ = FALSE; + bTrackingGC_ = FALSE; + + XDestroyRegion( pClipRegion_ ); + pClipRegion_ = NULL; + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::BeginSetClipRegion( ULONG ) +{ + if( pClipRegion_ ) + XDestroyRegion( pClipRegion_ ); + pClipRegion_ = XCreateRegion(); +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +BOOL X11SalGraphics::unionClipRegion( long nX, long nY, long nDX, long nDY ) +{ + if (!nDX || !nDY) + return TRUE; + + XRectangle aRect; + aRect.x = (short)nX; + aRect.y = (short)nY; + aRect.width = (unsigned short)nDX; + aRect.height = (unsigned short)nDY; + + XUnionRectWithRegion( &aRect, pClipRegion_, pClipRegion_ ); + + return TRUE; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +bool X11SalGraphics::unionClipRegion( const ::basegfx::B2DPolyPolygon& ) +{ + // TODO: implement and advertise OutDevSupport_B2DClip support + return false; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::EndSetClipRegion() +{ + bPenGC_ = FALSE; + bFontGC_ = FALSE; + bBrushGC_ = FALSE; + bMonoGC_ = FALSE; + bCopyGC_ = FALSE; + bInvertGC_ = FALSE; + bInvert50GC_ = FALSE; + bStippleGC_ = FALSE; + bTrackingGC_ = FALSE; + + if( XEmptyRegion( pClipRegion_ ) ) + { + XDestroyRegion( pClipRegion_ ); + pClipRegion_= NULL; + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::SetLineColor() +{ + if( nPenColor_ != SALCOLOR_NONE ) + { + nPenColor_ = SALCOLOR_NONE; + bPenGC_ = FALSE; + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::SetLineColor( SalColor nSalColor ) +{ + if( nPenColor_ != nSalColor ) + { + nPenColor_ = nSalColor; + nPenPixel_ = GetPixel( nSalColor ); + bPenGC_ = FALSE; + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::SetFillColor() +{ + if( nBrushColor_ != SALCOLOR_NONE ) + { + bDitherBrush_ = FALSE; + nBrushColor_ = SALCOLOR_NONE; + bBrushGC_ = FALSE; + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::SetFillColor( SalColor nSalColor ) +{ + if( nBrushColor_ != nSalColor ) + { + bDitherBrush_ = FALSE; + nBrushColor_ = nSalColor; + nBrushPixel_ = GetPixel( nSalColor ); + if( TrueColor != GetColormap().GetVisual().GetClass() + && GetColormap().GetColor( nBrushPixel_ ) != nBrushColor_ + && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0x00 ) // black + && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0x80 ) // blue + && nSalColor != MAKE_SALCOLOR( 0x00, 0x80, 0x00 ) // green + && nSalColor != MAKE_SALCOLOR( 0x00, 0x80, 0x80 ) // cyan + && nSalColor != MAKE_SALCOLOR( 0x80, 0x00, 0x00 ) // red + && nSalColor != MAKE_SALCOLOR( 0x80, 0x00, 0x80 ) // magenta + && nSalColor != MAKE_SALCOLOR( 0x80, 0x80, 0x00 ) // brown + && nSalColor != MAKE_SALCOLOR( 0x80, 0x80, 0x80 ) // gray + && nSalColor != MAKE_SALCOLOR( 0xC0, 0xC0, 0xC0 ) // light gray + && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0xFF ) // light blue + && nSalColor != MAKE_SALCOLOR( 0x00, 0xFF, 0x00 ) // light green + && nSalColor != MAKE_SALCOLOR( 0x00, 0xFF, 0xFF ) // light cyan + && nSalColor != MAKE_SALCOLOR( 0xFF, 0x00, 0x00 ) // light red + && nSalColor != MAKE_SALCOLOR( 0xFF, 0x00, 0xFF ) // light magenta + && nSalColor != MAKE_SALCOLOR( 0xFF, 0xFF, 0x00 ) // light brown + && nSalColor != MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ) ) + bDitherBrush_ = GetDitherPixmap(nSalColor); + bBrushGC_ = FALSE; + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::SetROPLineColor( SalROPColor nROPColor ) +{ + switch( nROPColor ) + { + case SAL_ROP_0 : // 0 + nPenPixel_ = (Pixel)0; + break; + case SAL_ROP_1 : // 1 + nPenPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1; + break; + case SAL_ROP_INVERT : // 2 + nPenPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1; + break; + } + nPenColor_ = GetColormap().GetColor( nPenPixel_ ); + bPenGC_ = FALSE; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::SetROPFillColor( SalROPColor nROPColor ) +{ + switch( nROPColor ) + { + case SAL_ROP_0 : // 0 + nBrushPixel_ = (Pixel)0; + break; + case SAL_ROP_1 : // 1 + nBrushPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1; + break; + case SAL_ROP_INVERT : // 2 + nBrushPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1; + break; + } + bDitherBrush_ = FALSE; + nBrushColor_ = GetColormap().GetColor( nBrushPixel_ ); + bBrushGC_ = FALSE; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::SetXORMode( bool bSet, bool ) +{ + if( !bXORMode_ == bSet ) + { + bXORMode_ = bSet; + bPenGC_ = FALSE; + bBrushGC_ = FALSE; + bMonoGC_ = FALSE; + bCopyGC_ = FALSE; + bInvertGC_ = FALSE; + bInvert50GC_ = FALSE; + bStippleGC_ = FALSE; + bTrackingGC_ = FALSE; + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::drawPixel( long nX, long nY ) +{ + if( nPenColor_ != SALCOLOR_NONE ) + XDrawPoint( GetXDisplay(), GetDrawable(), SelectPen(), nX, nY ); +} + +void X11SalGraphics::drawPixel( long nX, long nY, SalColor nSalColor ) +{ + if( nSalColor != SALCOLOR_NONE ) + { + Display *pDisplay = GetXDisplay(); + + if( (nPenColor_ == SALCOLOR_NONE) && !bPenGC_ ) + { + SetLineColor( nSalColor ); + XDrawPoint( pDisplay, GetDrawable(), SelectPen(), nX, nY ); + nPenColor_ = SALCOLOR_NONE; + bPenGC_ = False; + } + else + { + GC pGC = SelectPen(); + + if( nSalColor != nPenColor_ ) + XSetForeground( pDisplay, pGC, GetPixel( nSalColor ) ); + + XDrawPoint( pDisplay, GetDrawable(), pGC, nX, nY ); + + if( nSalColor != nPenColor_ ) + XSetForeground( pDisplay, pGC, nPenPixel_ ); + } + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 ) +{ + if( nPenColor_ != SALCOLOR_NONE ) + { + if ( GetDisplay()->GetProperties() & PROPERTY_BUG_DrawLine ) + { + GC aGC = SelectPen(); + XDrawPoint (GetXDisplay(), GetDrawable(), aGC, (int)nX1, (int)nY1); + XDrawPoint (GetXDisplay(), GetDrawable(), aGC, (int)nX2, (int)nY2); + XDrawLine (GetXDisplay(), GetDrawable(), aGC, nX1, nY1, nX2, nY2 ); + } + else + XDrawLine( GetXDisplay(), GetDrawable(),SelectPen(), + nX1, nY1, nX2, nY2 ); + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::drawRect( long nX, long nY, long nDX, long nDY ) +{ + if( nBrushColor_ != SALCOLOR_NONE ) + { + XFillRectangle( GetXDisplay(), + GetDrawable(), + SelectBrush(), + nX, nY, nDX, nDY ); + } + // Beschreibung DrawRect verkehrt, deshalb -1 + if( nPenColor_ != SALCOLOR_NONE ) + XDrawRectangle( GetXDisplay(), + GetDrawable(), + SelectPen(), + nX, nY, nDX-1, nDY-1 ); +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint *pPtAry ) +{ + drawPolyLine( nPoints, pPtAry, false ); +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint *pPtAry, bool bClose ) +{ + if( nPenColor_ != 0xFFFFFFFF ) + { + SalPolyLine Points( nPoints, pPtAry ); + + DrawLines( nPoints, Points, SelectPen(), bClose ); + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::drawPolygon( ULONG nPoints, const SalPoint* pPtAry ) +{ + if( nPoints == 0 ) + return; + + if( nPoints < 3 ) + { + if( !bXORMode_ ) + { + if( 1 == nPoints ) + drawPixel( pPtAry[0].mnX, pPtAry[0].mnY ); + else + drawLine( pPtAry[0].mnX, pPtAry[0].mnY, + pPtAry[1].mnX, pPtAry[1].mnY ); + } + return; + } + + SalPolyLine Points( nPoints, pPtAry ); + + nPoints++; + + /* WORKAROUND: some Xservers (Xorg, VIA chipset in this case) + * do not draw the visible part of a polygon + * if it overlaps to the left of screen 0,y. + * This happens to be the case in the gradient drawn in the + * menubar background. workaround for the special case of + * of a rectangle overlapping to the left. + */ + if( nPoints == 5 && + Points[ 0 ].x == Points[ 1 ].x && + Points[ 1 ].y == Points[ 2 ].y && + Points[ 2 ].x == Points[ 3 ].x && + Points[ 0 ].x == Points[ 4 ].x && Points[ 0 ].y == Points[ 4 ].y + ) + { + bool bLeft = false; + bool bRight = false; + for(unsigned int i = 0; i < nPoints; i++ ) + { + if( Points[i].x < 0 ) + bLeft = true; + else + bRight= true; + } + if( bLeft && ! bRight ) + return; + if( bLeft && bRight ) + { + for( unsigned int i = 0; i < nPoints; i++ ) + if( Points[i].x < 0 ) + Points[i].x = 0; + } + } + + if( nBrushColor_ != SALCOLOR_NONE ) + XFillPolygon( GetXDisplay(), + GetDrawable(), + SelectBrush(), + &Points[0], nPoints, + Complex, CoordModeOrigin ); + + if( nPenColor_ != 0xFFFFFFFF ) + DrawLines( nPoints, Points, SelectPen(), true ); +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +void X11SalGraphics::drawPolyPolygon( sal_uInt32 nPoly, + const sal_uInt32 *pPoints, + PCONSTSALPOINT *pPtAry ) +{ + if( nBrushColor_ != SALCOLOR_NONE ) + { + ULONG i, n; + XLIB_Region pXRegA = NULL; + + for( i = 0; i < nPoly; i++ ) { + n = pPoints[i]; + SalPolyLine Points( n, pPtAry[i] ); + if( n > 2 ) + { + XLIB_Region pXRegB = XPolygonRegion( &Points[0], n+1, WindingRule ); + if( !pXRegA ) + pXRegA = pXRegB; + else + { + XXorRegion( pXRegA, pXRegB, pXRegA ); + XDestroyRegion( pXRegB ); + } + } + } + + if( pXRegA ) + { + XRectangle aXRect; + XClipBox( pXRegA, &aXRect ); + + GC pGC = SelectBrush(); + SetClipRegion( pGC, pXRegA ); // ??? doppelt + XDestroyRegion( pXRegA ); + bBrushGC_ = FALSE; + + XFillRectangle( GetXDisplay(), + GetDrawable(), + pGC, + aXRect.x, aXRect.y, aXRect.width, aXRect.height ); + } + } + + if( nPenColor_ != SALCOLOR_NONE ) + for( ULONG i = 0; i < nPoly; i++ ) + drawPolyLine( pPoints[i], pPtAry[i], true ); +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +sal_Bool X11SalGraphics::drawPolyLineBezier( ULONG, const SalPoint*, const BYTE* ) +{ + return sal_False; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +sal_Bool X11SalGraphics::drawPolygonBezier( ULONG, const SalPoint*, const BYTE* ) +{ + return sal_False; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +sal_Bool X11SalGraphics::drawPolyPolygonBezier( sal_uInt32, const sal_uInt32*, + const SalPoint* const*, const BYTE* const* ) +{ + return sal_False; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +void X11SalGraphics::invert( ULONG nPoints, + const SalPoint* pPtAry, + SalInvert nFlags ) +{ + SalPolyLine Points ( nPoints, pPtAry ); + + GC pGC; + if( SAL_INVERT_50 & nFlags ) + pGC = GetInvert50GC(); + else + if ( SAL_INVERT_TRACKFRAME & nFlags ) + pGC = GetTrackingGC(); + else + pGC = GetInvertGC(); + + if( SAL_INVERT_TRACKFRAME & nFlags ) + DrawLines ( nPoints, Points, pGC, true ); + else + XFillPolygon( GetXDisplay(), + GetDrawable(), + pGC, + &Points[0], nPoints, + Complex, CoordModeOrigin ); +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +BOOL X11SalGraphics::drawEPS( long,long,long,long,void*,ULONG ) +{ + return FALSE; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +XID X11SalGraphics::GetXRenderPicture() +{ + if( !m_aRenderPicture ) + { + // check xrender support for matching visual + // find a XRenderPictFormat compatible with the Drawable + XRenderPeer& rRenderPeer = XRenderPeer::GetInstance(); + XRenderPictFormat* pVisualFormat = static_cast(GetXRenderFormat()); + if( !pVisualFormat ) + { + Visual* pVisual = GetDisplay()->GetVisual( m_nScreen ).GetVisual(); + pVisualFormat = rRenderPeer.FindVisualFormat( pVisual ); + if( !pVisualFormat ) + return 0; + // cache the XRenderPictFormat + SetXRenderFormat( static_cast(pVisualFormat) ); + } + + // get the matching xrender target for drawable + m_aRenderPicture = rRenderPeer.CreatePicture( hDrawable_, pVisualFormat, 0, NULL ); + } + +#if 0 + // setup clipping so the callers don't have to do it themselves + // TODO: avoid clipping if already set correctly + if( pClipRegion_ && !XEmptyRegion( pClipRegion_ ) ) + rRenderPeer.SetPictureClipRegion( aDstPic, pClipRegion_ ); +#endif + + return m_aRenderPicture; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +SystemGraphicsData X11SalGraphics::GetGraphicsData() const +{ + SystemGraphicsData aRes; + + aRes.nSize = sizeof(aRes); + aRes.pDisplay = GetXDisplay(); + aRes.hDrawable = hDrawable_; + aRes.pVisual = GetDisplay()->GetVisual( m_nScreen ).GetVisual(); + aRes.nScreen = m_nScreen; + aRes.nDepth = GetDisplay()->GetVisual( m_nScreen ).GetDepth(); + aRes.aColormap = GetDisplay()->GetColormap( m_nScreen ).GetXColormap(); + aRes.pRenderFormat = m_pRenderFormat; + return aRes; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +// B2DPolygon support methods + +namespace { // anonymous namespace to prevent export +// the methods and structures here are used by the +// B2DPolyPolygon->RenderTrapezoid conversion algorithm + +// compare two line segments +// assumption: both segments point downward +// assumption: they must have at least some y-overlap +// assumption: rA.p1.y <= rB.p1.y +bool IsLeftOf( const XLineFixed& rA, const XLineFixed& rB ) +{ + bool bAbove = (rA.p1.y <= rB.p1.y); + const XLineFixed& rU = bAbove ? rA : rB; + const XLineFixed& rL = bAbove ? rB : rA; + + const XFixed aXDiff = rU.p2.x - rU.p1.x; + const XFixed aYDiff = rU.p2.y - rU.p1.y; + + if( (rU.p1.y != rL.p1.y) || (rU.p1.x != rL.p1.x) ) + { + const sal_Int64 n1 = (sal_Int64)aXDiff * (rL.p1.y - rU.p1.y); + const sal_Int64 n2 = (sal_Int64)aYDiff * (rL.p1.x - rU.p1.x); + if( n1 != n2 ) + return ((n1 < n2) == bAbove); + } + + if( (rU.p2.y != rL.p2.y) || (rU.p2.x != rL.p2.x) ) + { + const sal_Int64 n3 = (sal_Int64)aXDiff * (rL.p2.y - rU.p1.y); + const sal_Int64 n4 = (sal_Int64)aYDiff * (rL.p2.x - rU.p1.x); + if( n3 != n4 ) + return ((n3 < n4) == bAbove); + } + + // both segments overlap + return false; +} + +struct HalfTrapezoid +{ + // assumptions: + // maLine.p1.y <= mnY < maLine.p2.y + XLineFixed maLine; + XFixed mnY; +}; + +struct HalfTrapCompare +{ + bool operator()( const HalfTrapezoid& rA, const HalfTrapezoid& rB ) const + { + bool bIsTopLeft = false; + if( rA.mnY != rB.mnY ) // sort top-first if possible + bIsTopLeft = (rA.mnY < rB.mnY); + else // else sort left-first + bIsTopLeft = IsLeftOf( rA.maLine, rB.maLine ); + // adjust to priority_queue sorting convention + return !bIsTopLeft; + } +}; + +typedef std::priority_queue< HalfTrapezoid, std::vector, HalfTrapCompare > HTQueueBase; +// we need a priority queue with a reserve() to prevent countless reallocations +class HTQueue +: public HTQueueBase +{ +public: + void reserve( size_t n ) { c.reserve( n ); } + int capacity() { return c.capacity(); } +}; + +typedef std::vector TrapezoidVector; + +class TrapezoidXCompare +{ + const TrapezoidVector& mrVector; +public: + TrapezoidXCompare( const TrapezoidVector& rVector ) + : mrVector( rVector ) {} + bool operator()( int nA, int nB ) const + { return IsLeftOf( mrVector[nA].left, mrVector[nB].left ); } +}; + +typedef std::multiset< int, TrapezoidXCompare > ActiveTrapSet; + +class TrapezoidYCompare +{ + const TrapezoidVector& mrVector; +public: + TrapezoidYCompare( const TrapezoidVector& rVector ) + : mrVector( rVector ) {} + bool operator()( int nA, int nB ) const + { return (mrVector[nA].bottom < mrVector[nB].bottom); } +}; + +typedef std::multiset< int, TrapezoidYCompare > VerticalTrapSet; +} // end of anonymous namespace + +// draw a poly-polygon +bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, double fTransparency) +{ + // nothing to do for empty polypolygons + const int nPolygonCount = rPolyPoly.count(); + if( nPolygonCount <= 0 ) + return TRUE; + + // nothing to do if everything is transparent + if( (nBrushColor_ == SALCOLOR_NONE) + && (nPenColor_ == SALCOLOR_NONE) ) + return TRUE; + + // cannot handle pencolor!=brushcolor yet + if( (nPenColor_ != SALCOLOR_NONE) + && (nPenColor_ != nBrushColor_) ) + return FALSE; + + // TODO: remove the env-variable when no longer needed + static const char* pRenderEnv = getenv( "SAL_DISABLE_RENDER_POLY" ); + if( pRenderEnv ) + return FALSE; + + // check xrender support for trapezoids + XRenderPeer& rRenderPeer = XRenderPeer::GetInstance(); + if( !rRenderPeer.AreTrapezoidsSupported() ) + return FALSE; + Picture aDstPic = GetXRenderPicture(); + // check xrender support for this drawable + if( !aDstPic ) + return FALSE; + + // don't bother with polygons outside of visible area + const basegfx::B2DRange aViewRange( 0, 0, GetGraphicsWidth(), GetGraphicsHeight() ); + const basegfx::B2DRange aPolyRange = basegfx::tools::getRange( rPolyPoly ); + const bool bNeedViewClip = !aPolyRange.isInside( aViewRange ); + if( !aPolyRange.overlaps( aViewRange ) ) + return true; + + // convert the polypolygon to trapezoids + + // first convert the B2DPolyPolygon to HalfTrapezoids + // #i100922# try to prevent priority-queue reallocations by reservering enough + int nHTQueueReserve = 0; + for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx ) + { + const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx ); + const int nPointCount = aOuterPolygon.count(); + nHTQueueReserve += aOuterPolygon.areControlPointsUsed() ? 8 * nPointCount : nPointCount; + } + nHTQueueReserve = ((4*nHTQueueReserve) | 0x1FFF) + 1; + HTQueue aHTQueue; + aHTQueue.reserve( nHTQueueReserve ); + for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx ) + { + const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx ); + + // render-trapezoids should be inside the view => clip polygon against view range + basegfx::B2DPolyPolygon aClippedPolygon( aOuterPolygon ); + if( bNeedViewClip ) + { + aClippedPolygon = basegfx::tools::clipPolygonOnRange( aOuterPolygon, aViewRange, true, false ); + DBG_ASSERT( aClippedPolygon.count(), "polygon confirmed to overlap with view should not get here" ); + if( !aClippedPolygon.count() ) + continue; + } + + // render-trapezoids have linear edges => get rid of bezier segments + if( aClippedPolygon.areControlPointsUsed() ) + aClippedPolygon = ::basegfx::tools::adaptiveSubdivideByDistance( aClippedPolygon, 0.125 ); + + // test and remove self intersections + // TODO: make code intersection save, then remove this test + basegfx::B2DPolyPolygon aInnerPolyPoly(basegfx::tools::solveCrossovers( aClippedPolygon)); + const int nInnerPolyCount = aInnerPolyPoly.count(); + for( int nInnerPolyIdx = 0; nInnerPolyIdx < nInnerPolyCount; ++nInnerPolyIdx ) + { + ::basegfx::B2DPolygon aInnerPolygon = aInnerPolyPoly.getB2DPolygon( nInnerPolyIdx ); + const int nPointCount = aInnerPolygon.count(); + if( !nPointCount ) + continue; + + aHTQueue.reserve( aHTQueue.size() + 8 * nPointCount ); + + // convert polygon point pairs to HalfTrapezoids + // connect the polygon point with the first one if needed + XPointFixed aOldXPF = { 0, 0 }; + XPointFixed aNewXPF; + for( int nPointIdx = 0; nPointIdx <= nPointCount; ++nPointIdx, aOldXPF = aNewXPF ) + { + const int k = (nPointIdx < nPointCount) ? nPointIdx : 0; + const ::basegfx::B2DPoint& aPoint = aInnerPolygon.getB2DPoint( k ); + + // convert the B2DPoint into XRENDER units + if(getAntiAliasB2DDraw()) + { + aNewXPF.x = XDoubleToFixed( aPoint.getX() ); + aNewXPF.y = XDoubleToFixed( aPoint.getY() ); + } + else + { + aNewXPF.x = XDoubleToFixed( basegfx::fround( aPoint.getX() ) ); + aNewXPF.y = XDoubleToFixed( basegfx::fround( aPoint.getY() ) ); + } + + // check if enough data is available for a new HalfTrapezoid + if( nPointIdx == 0 ) + continue; + // ignore vertical segments + if( aNewXPF.y == aOldXPF.y ) + continue; + + // construct HalfTrapezoid as topdown segment + HalfTrapezoid aHT; + if( aNewXPF.y < aOldXPF.y ) + { + aHT.maLine.p1 = aNewXPF; + aHT.maLine.p2 = aOldXPF; + } + else + { + aHT.maLine.p2 = aNewXPF; + aHT.maLine.p1 = aOldXPF; + } + + aHT.mnY = aHT.maLine.p1.y; + +#if 0 // ignore clipped HalfTrapezoids + if( aHT.mnY < 0 ) + aHT.mnY = 0; + else if( aHT.mnY > 10000 ) + continue; +#endif + + // queue up the HalfTrapezoid + aHTQueue.push( aHT ); + } + } + } + + if( aHTQueue.empty() ) + return TRUE; + + // then convert the HalfTrapezoids into full Trapezoids + TrapezoidVector aTrapVector; + aTrapVector.reserve( aHTQueue.size() * 2 ); // just a guess + + TrapezoidXCompare aTrapXCompare( aTrapVector ); + ActiveTrapSet aActiveTraps( aTrapXCompare ); + + TrapezoidYCompare aTrapYCompare( aTrapVector ); + VerticalTrapSet aVerticalTraps( aTrapYCompare ); + + while( !aHTQueue.empty() ) + { + XTrapezoid aTrapezoid; + + // convert a HalfTrapezoid pair + const HalfTrapezoid& rLeft = aHTQueue.top(); + aTrapezoid.top = rLeft.mnY; + aTrapezoid.bottom = rLeft.maLine.p2.y; + aTrapezoid.left = rLeft.maLine; + +#if 0 + // ignore empty trapezoids + if( aTrapezoid.bottom <= aTrapezoid.top ) + continue; +#endif + + aHTQueue.pop(); + if( aHTQueue.empty() ) // TODO: assert + break; + const HalfTrapezoid& rRight = aHTQueue.top(); + aTrapezoid.right = rRight.maLine; + aHTQueue.pop(); + + aTrapezoid.bottom = aTrapezoid.left.p2.y; + if( aTrapezoid.bottom > aTrapezoid.right.p2.y ) + aTrapezoid.bottom = aTrapezoid.right.p2.y; + + // keep the full Trapezoid candidate + aTrapVector.push_back( aTrapezoid ); + + // unless it splits an older trapezoid + bool bSplit = false; + for(;;) + { + // check if the new trapezoid overlaps with an old trapezoid + ActiveTrapSet::iterator aActiveTrapsIt + = aActiveTraps.upper_bound( aTrapVector.size()-1 ); + if( aActiveTrapsIt == aActiveTraps.begin() ) + break; + --aActiveTrapsIt; + + XTrapezoid& rLeftTrap = aTrapVector[ *aActiveTrapsIt ]; + + // in the ActiveTrapSet there are still trapezoids where + // a vertical overlap with new trapezoids is no longer possible + // they could have been removed in the verticaltraps loop below + // but this would have been expensive and is not needed as we can + // simply ignore them now and remove them from the ActiveTrapSet + // so they won't bother us in the future + if( rLeftTrap.bottom <= aTrapezoid.top ) + { + aActiveTraps.erase( aActiveTrapsIt ); + continue; + } + + // check if there is horizontal overlap + // aTrapezoid.left==rLeftTrap.right is allowed though + if( !IsLeftOf( aTrapezoid.left, rLeftTrap.right ) ) + break; + + // split the old trapezoid and keep its upper part + // find the old trapezoids entry in the VerticalTrapSet and remove it + typedef std::pair VTSPair; + VTSPair aVTSPair = aVerticalTraps.equal_range( *aActiveTrapsIt ); + VerticalTrapSet::iterator aVTSit = aVTSPair.first; + for(; (aVTSit != aVTSPair.second) && (*aVTSit != *aActiveTrapsIt); ++aVTSit ) ; + if( aVTSit != aVTSPair.second ) + aVerticalTraps.erase( aVTSit ); + // then update the old trapezoid's bottom + rLeftTrap.bottom = aTrapezoid.top; + // enter the updated old trapzoid in VerticalTrapSet + aVerticalTraps.insert( aVerticalTraps.begin(), *aActiveTrapsIt ); + // the old trapezoid is no longer active + aActiveTraps.erase( aActiveTrapsIt ); + + // the trapezoid causing the split has become obsolete + // so its both sides have to be re-queued + HalfTrapezoid aHT; + aHT.mnY = aTrapezoid.top; + aHT.maLine = aTrapezoid.left; + aHTQueue.push( aHT ); + aHT.maLine = aTrapezoid.right; + aHTQueue.push( aHT ); + + bSplit = true; + break; + } + + // keep or forget the resulting full Trapezoid + if( bSplit ) + aTrapVector.pop_back(); + else + { + aActiveTraps.insert( aTrapVector.size()-1 ); + aVerticalTraps.insert( aTrapVector.size()-1 ); + } + + // mark trapezoids that can no longer be split as inactive + // and recycle their sides which were not fully resolved + static const XFixed nMaxTop = +0x7FFFFFFF; + XFixed nNewTop = aHTQueue.empty() ? nMaxTop : aHTQueue.top().mnY; + while( !aVerticalTraps.empty() ) + { + const XTrapezoid& rOldTrap = aTrapVector[ *aVerticalTraps.begin() ]; + if( nNewTop < rOldTrap.bottom ) + break; + // the reference Trapezoid can no longer be split + aVerticalTraps.erase( aVerticalTraps.begin() ); + + // recycle its sides that were not fully resolved + HalfTrapezoid aHT; + aHT.mnY = rOldTrap.bottom; + if( rOldTrap.left.p2.y > rOldTrap.bottom ) + { + aHT.maLine = rOldTrap.left; + aHTQueue.push( aHT ); + } + if( rOldTrap.right.p2.y > rOldTrap.bottom ) + { + aHT.maLine = rOldTrap.right; + aHTQueue.push( aHT ); + } + } + } + + // create xrender Picture for polygon foreground + SalDisplay::RenderEntry& rEntry = GetDisplay()->GetRenderEntries( m_nScreen )[ 32 ]; + if( !rEntry.m_aPicture ) + { + Display* pXDisplay = GetXDisplay(); + + rEntry.m_aPixmap = ::XCreatePixmap( pXDisplay, hDrawable_, 1, 1, 32 ); + XRenderPictureAttributes aAttr; + aAttr.repeat = true; + + XRenderPictFormat* pXRPF = rRenderPeer.FindStandardFormat( PictStandardARGB32 ); + rEntry.m_aPicture = rRenderPeer.CreatePicture( rEntry.m_aPixmap, pXRPF, CPRepeat, &aAttr ); + } + + // set polygon foreground color and opacity + XRenderColor aRenderColor = GetXRenderColor( nBrushColor_ , fTransparency ); + rRenderPeer.FillRectangle( PictOpSrc, rEntry.m_aPicture, &aRenderColor, 0, 0, 1, 1 ); + + // set clipping + // TODO: move into GetXRenderPicture? + if( pClipRegion_ && !XEmptyRegion( pClipRegion_ ) ) + rRenderPeer.SetPictureClipRegion( aDstPic, pClipRegion_ ); + + // render the trapezoids + const XRenderPictFormat* pMaskFormat = rRenderPeer.GetStandardFormatA8(); + rRenderPeer.CompositeTrapezoids( PictOpOver, + rEntry.m_aPicture, aDstPic, pMaskFormat, 0, 0, &aTrapVector[0], aTrapVector.size() ); + + return TRUE; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin eLineJoin) +{ + // #i101491# + if(rPolygon.count() > 1000) + { + // the used basegfx::tools::createAreaGeometry is simply too + // expensive with very big polygons; fallback to caller (who + // should use ImplLineConverter normally) + return false; + } + + const XRenderPeer& rRenderPeer = XRenderPeer::GetInstance(); + if( !rRenderPeer.AreTrapezoidsSupported() ) + return false; + + // get the area polygon for the line polygon + basegfx::B2DPolygon aPolygon = rPolygon; + if( (rLineWidth.getX() != rLineWidth.getY()) + && !basegfx::fTools::equalZero( rLineWidth.getY() ) ) + { + // prepare for createAreaGeometry() with anisotropic linewidth + basegfx::B2DHomMatrix aAnisoMatrix; + aAnisoMatrix.scale( 1.0, rLineWidth.getX() / rLineWidth.getY() ); + aPolygon.transform( aAnisoMatrix ); + } + + // AW: reSegment no longer needed; new createAreaGeometry will remove exteme positions + // and create bezier polygons + //if( aPolygon.areControlPointsUsed() ) + // aPolygon = basegfx::tools::reSegmentPolygonEdges( aPolygon, 8, true, false ); + //const basegfx::B2DPolyPolygon aAreaPolyPoly = basegfx::tools::createAreaGeometryForSimplePolygon( + // aPolygon, 0.5*rLineWidth.getX(), eLineJoin ); + const basegfx::B2DPolyPolygon aAreaPolyPoly(basegfx::tools::createAreaGeometry(aPolygon, 0.5*rLineWidth.getX(), eLineJoin)); + + if( (rLineWidth.getX() != rLineWidth.getY()) + && !basegfx::fTools::equalZero( rLineWidth.getX() ) ) + { + // postprocess createAreaGeometry() for anisotropic linewidth + basegfx::B2DHomMatrix aAnisoMatrix; + aAnisoMatrix.scale( 1.0, rLineWidth.getY() / rLineWidth.getX() ); + aPolygon.transform( aAnisoMatrix ); + } + + // temporarily adjust brush color to pen color + // since the line is drawn as an area-polygon + const SalColor aKeepBrushColor = nBrushColor_; + nBrushColor_ = nPenColor_; + + // draw each area polypolygon component individually + // to emulate the polypolygon winding rule "non-zero" + bool bDrawOk = true; + const int nPolyCount = aAreaPolyPoly.count(); + for( int nPolyIdx = 0; nPolyIdx < nPolyCount; ++nPolyIdx ) + { + const ::basegfx::B2DPolyPolygon aOnePoly( aAreaPolyPoly.getB2DPolygon( nPolyIdx ) ); + bDrawOk = drawPolyPolygon( aOnePoly, 0.0); + if( !bDrawOk ) + break; + } + + // restore the original brush GC + nBrushColor_ = aKeepBrushColor; + return bDrawOk; +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= diff --git a/vcl/win/source/gdi/salgdi_gdiplus.cxx b/vcl/win/source/gdi/salgdi_gdiplus.cxx index 8709fc872540..5c00c786e22d 100644 --- a/vcl/win/source/gdi/salgdi_gdiplus.cxx +++ b/vcl/win/source/gdi/salgdi_gdiplus.cxx @@ -64,75 +64,79 @@ void impAddB2DPolygonToGDIPlusGraphicsPath(Gdiplus::GraphicsPath& rPath, const basegfx::B2DPolygon& rPolygon) { - const sal_uInt32 nCount(rPolygon.count()); - - if(nCount) - { - const sal_uInt32 nEdgeCount(rPolygon.isClosed() ? nCount : nCount - 1); - const bool bControls(rPolygon.areControlPointsUsed()); - basegfx::B2DPoint aCurr(rPolygon.getB2DPoint(0)); - Gdiplus::PointF aFCurr(Gdiplus::REAL(aCurr.getX()), Gdiplus::REAL(aCurr.getY())); - - for(sal_uInt32 a(0); a < nEdgeCount; a++) - { - const sal_uInt32 nNextIndex((a + 1) % nCount); - const basegfx::B2DPoint aNext(rPolygon.getB2DPoint(nNextIndex)); - const Gdiplus::PointF aFNext(Gdiplus::REAL(aNext.getX()), Gdiplus::REAL(aNext.getY())); - - if(bControls && (rPolygon.isNextControlPointUsed(a) || rPolygon.isPrevControlPointUsed(nNextIndex))) - { - const basegfx::B2DPoint aCa(rPolygon.getNextControlPoint(a)); - const basegfx::B2DPoint aCb(rPolygon.getPrevControlPoint(nNextIndex)); - - rPath.AddBezier( - aFCurr, - Gdiplus::PointF(Gdiplus::REAL(aCa.getX()), Gdiplus::REAL(aCa.getY())), - Gdiplus::PointF(Gdiplus::REAL(aCb.getX()), Gdiplus::REAL(aCb.getY())), - aFNext); - } - else - { - rPath.AddLine(aFCurr, aFNext); - } - - if(a + 1 < nEdgeCount) - { - aCurr = aNext; - aFCurr = aFNext; - } - } - } + const sal_uInt32 nCount(rPolygon.count()); + + if(nCount) + { + const sal_uInt32 nEdgeCount(rPolygon.isClosed() ? nCount : nCount - 1); + const bool bControls(rPolygon.areControlPointsUsed()); + basegfx::B2DPoint aCurr(rPolygon.getB2DPoint(0)); + Gdiplus::PointF aFCurr(Gdiplus::REAL(aCurr.getX()), Gdiplus::REAL(aCurr.getY())); + + for(sal_uInt32 a(0); a < nEdgeCount; a++) + { + const sal_uInt32 nNextIndex((a + 1) % nCount); + const basegfx::B2DPoint aNext(rPolygon.getB2DPoint(nNextIndex)); + const Gdiplus::PointF aFNext(Gdiplus::REAL(aNext.getX()), Gdiplus::REAL(aNext.getY())); + + if(bControls && (rPolygon.isNextControlPointUsed(a) || rPolygon.isPrevControlPointUsed(nNextIndex))) + { + const basegfx::B2DPoint aCa(rPolygon.getNextControlPoint(a)); + const basegfx::B2DPoint aCb(rPolygon.getPrevControlPoint(nNextIndex)); + + rPath.AddBezier( + aFCurr, + Gdiplus::PointF(Gdiplus::REAL(aCa.getX()), Gdiplus::REAL(aCa.getY())), + Gdiplus::PointF(Gdiplus::REAL(aCb.getX()), Gdiplus::REAL(aCb.getY())), + aFNext); + } + else + { + rPath.AddLine(aFCurr, aFNext); + } + + if(a + 1 < nEdgeCount) + { + aCurr = aNext; + aFCurr = aFNext; + } + } + } } bool WinSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPolygon, double fTransparency) { - const sal_uInt32 nCount(rPolyPolygon.count()); + const sal_uInt32 nCount(rPolyPolygon.count()); if(mbBrush && nCount && (fTransparency >= 0.0 && fTransparency < 1.0)) { - Gdiplus::Graphics aGraphics(mhDC); + Gdiplus::Graphics aGraphics(mhDC); const sal_uInt8 aTrans((sal_uInt8)255 - (sal_uInt8)basegfx::fround(fTransparency * 255.0)); - Gdiplus::Color aTestColor(aTrans, SALCOLOR_RED(maFillColor), SALCOLOR_GREEN(maFillColor), SALCOLOR_BLUE(maFillColor)); - Gdiplus::SolidBrush aTestBrush(aTestColor); - Gdiplus::GraphicsPath aPath; + Gdiplus::Color aTestColor(aTrans, SALCOLOR_RED(maFillColor), SALCOLOR_GREEN(maFillColor), SALCOLOR_BLUE(maFillColor)); + Gdiplus::SolidBrush aTestBrush(aTestColor); + Gdiplus::GraphicsPath aPath; for(sal_uInt32 a(0); a < nCount; a++) { - aPath.StartFigure(); + if(0 != a) + { + aPath.StartFigure(); // #i101491# not needed for first run + } + impAddB2DPolygonToGDIPlusGraphicsPath(aPath, rPolyPolygon.getB2DPolygon(a)); aPath.CloseFigure(); } if(getAntiAliasB2DDraw()) { - aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias); - } - else - { - aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeNone); - } - - aGraphics.FillPath(&aTestBrush, &aPath); + aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias); + } + else + { + aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeNone); + } + + aGraphics.FillPath(&aTestBrush, &aPath); } return true; @@ -140,53 +144,59 @@ bool WinSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly bool WinSalGraphics::drawPolyLine(const basegfx::B2DPolygon& rPolygon, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin eLineJoin) { - const sal_uInt32 nCount(rPolygon.count()); + const sal_uInt32 nCount(rPolygon.count()); if(mbPen && nCount) { - Gdiplus::Graphics aGraphics(mhDC); - Gdiplus::Color aTestColor(255, SALCOLOR_RED(maLineColor), SALCOLOR_GREEN(maLineColor), SALCOLOR_BLUE(maLineColor)); - Gdiplus::Pen aTestPen(aTestColor, Gdiplus::REAL(rLineWidths.getX())); - Gdiplus::GraphicsPath aPath; - - switch(eLineJoin) - { + Gdiplus::Graphics aGraphics(mhDC); + Gdiplus::Color aTestColor(255, SALCOLOR_RED(maLineColor), SALCOLOR_GREEN(maLineColor), SALCOLOR_BLUE(maLineColor)); + Gdiplus::Pen aTestPen(aTestColor, Gdiplus::REAL(rLineWidths.getX())); + Gdiplus::GraphicsPath aPath; + + switch(eLineJoin) + { default : // basegfx::B2DLINEJOIN_NONE : { break; } case basegfx::B2DLINEJOIN_BEVEL : { - aTestPen.SetLineJoin(Gdiplus::LineJoinBevel); + aTestPen.SetLineJoin(Gdiplus::LineJoinBevel); break; } case basegfx::B2DLINEJOIN_MIDDLE : case basegfx::B2DLINEJOIN_MITER : { const Gdiplus::REAL aMiterLimit(15.0); - aTestPen.SetMiterLimit(aMiterLimit); - aTestPen.SetLineJoin(Gdiplus::LineJoinMiter); + aTestPen.SetMiterLimit(aMiterLimit); + aTestPen.SetLineJoin(Gdiplus::LineJoinMiter); break; } case basegfx::B2DLINEJOIN_ROUND : { - aTestPen.SetLineJoin(Gdiplus::LineJoinRound); + aTestPen.SetLineJoin(Gdiplus::LineJoinRound); break; } - } + } impAddB2DPolygonToGDIPlusGraphicsPath(aPath, rPolygon); - - if(getAntiAliasB2DDraw()) - { - aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias); - } - else - { - aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeNone); - } - - aGraphics.DrawPath(&aTestPen, &aPath); + + if(rPolygon.isClosed()) + { + // #i101491# needed to create the correct line joins + aPath.CloseFigure(); + } + + if(getAntiAliasB2DDraw()) + { + aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias); + } + else + { + aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeNone); + } + + aGraphics.DrawPath(&aTestPen, &aPath); } return true; -- cgit v1.2.3 From ec5603d236bda81a877cc7a13fe6aa2e7a8ce63f Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Thu, 30 Jul 2009 10:52:48 +0000 Subject: CWS-TOOLING: integrate CWS fwk114 2009-07-08 Mikhail Voytenko #i102448# fix typo 2009-07-08 Mikhail Voytenko #i102448# detect the document of new format correctly 2009-07-03 Mikhail Voytenko #i101418# adjust header 2009-07-02 Mikhail Voytenko #i103001# Integrate the patch 2009-07-01 Mikhail Voytenko rebase to DEV300_m51 2009-06-25 Mikhail Voytenko #i71512# integrate the patch 2009-06-19 Mikhail Voytenko #i102931# check whether the file was changed even in case of system file locking 2009-06-10 Mikhail Voytenko #i102448# allow to turn the office update dialog off 2009-06-10 Mikhail Voytenko #i102448# allow to turn the office update dialog off 2009-06-09 Mikhail Voytenko #i96091# the disposed frame should throw DisposedException 2009-06-09 Mikhail Voytenko #i100835# commit the patch 2009-05-26 Mikhail Voytenko #i89514# integrate the patch 2009-05-26 Mikhail Voytenko #i30373# integrate the patch 2009-05-26 Mikhail Voytenko #i101418# fix the error handling --- sot/inc/sot/exchange.hxx | 11 ----------- sot/source/base/exchange.cxx | 34 ---------------------------------- 2 files changed, 45 deletions(-) diff --git a/sot/inc/sot/exchange.hxx b/sot/inc/sot/exchange.hxx index 68862367e4f0..0c235fffcdbb 100644 --- a/sot/inc/sot/exchange.hxx +++ b/sot/inc/sot/exchange.hxx @@ -196,10 +196,7 @@ public: static ULONG RegisterFormatMimeType( const String& rMimeType ); static ULONG GetFormat( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - static ULONG GetStaticNameFormat( const String& rName ); - static String GetFormatName( ULONG nFormat ); - static String GetFormatStaticName( ULONG nFormat ); static sal_Bool GetFormatDataFlavor( ULONG nFormat, ::com::sun::star::datatransfer::DataFlavor& rFlavor ); static String GetFormatMimeType( ULONG nFormat ); static BOOL IsInternal( const SvGlobalName& ); @@ -216,14 +213,6 @@ public: static ULONG RegisterSotFormatName( SotFormatStringId nId ) { return nId; } - // Anzahl der bereits registrierten Formate bzw. der hoechsten - // registrierten ID abfragen (fuer System-Registrierung) - // ACHTUNG: Die Algorithmen zur Registrierung beim System - // verlassen sich darauf, dass die hier gelieferte maximale - // Format-ID 'klein' ist, so dass eine Schleife ueber alle - // Formate laufen kann. - static ULONG GetMaxFormat( void ); - // same for XTransferable interface static USHORT GetExchangeAction( // XTransferable diff --git a/sot/source/base/exchange.cxx b/sot/source/base/exchange.cxx index 05de84bdfd46..6dedd84cdaeb 100644 --- a/sot/source/base/exchange.cxx +++ b/sot/source/base/exchange.cxx @@ -479,18 +479,6 @@ ULONG SotExchange::GetFormat( const DataFlavor& rFlavor ) return 0; } -/************************************************************************* -|* -|* SotExchange::GetStaticNameFormat() -|* -|* Beschreibung CLIP.SDW -*************************************************************************/ -ULONG SotExchange::GetStaticNameFormat( const String& rName ) -{ - // has to be changed to return the format for the static name (KA 27.09.2001) - return SotExchange::RegisterFormatName( rName ); -} - /************************************************************************* |* |* SotExchange::GetFormatName() @@ -508,28 +496,6 @@ String SotExchange::GetFormatName( ULONG nFormat ) return aRet; } -/************************************************************************* -|* -|* SotExchange::GetFormatStaticName() -|* -|* Beschreibung CLIP.SDW -*************************************************************************/ -String SotExchange::GetFormatStaticName( ULONG nFormat ) -{ - // has to be changed to return the static format name (KA 27.09.2001) - return SotExchange::GetFormatName( nFormat ); -} - -/************************************************************************* -|* -|* SotExchange::GetMaxFormat() -|* -*************************************************************************/ -ULONG SotExchange::GetMaxFormat( void ) -{ - return( SOT_FORMATSTR_ID_USER_END + InitFormats_Impl().Count() ); -} - BOOL SotExchange::IsInternal( const SvGlobalName& rName ) { if ( rName == SvGlobalName(SO3_SW_CLASSID_60) || -- cgit v1.2.3 From 2402421ffe33e7e5ae2f8f6f5fb86b5acf26ad2b Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Wed, 5 Aug 2009 17:01:07 +0000 Subject: CWS-TOOLING: integrate CWS impress172 2009-07-30 15:29:39 +0200 cl r274492 : #i102921# remove reference to inssrc.obj which was moved to svx 2009-07-29 11:40:35 +0200 wg r274445 : i103869 2009-07-22 14:39:13 +0200 sj r274241 : #i102713# fixed cloud shape 2009-07-07 15:28:04 +0200 sj r273800 : fixed build problem 2009-07-07 13:27:13 +0200 cl r273792 : #i102921# moved insert col/rows dialog to svx 2009-07-07 10:36:05 +0200 cl r273782 : fixed compiler warnings 2009-07-02 10:40:21 +0200 sj r273626 : fixed build problem 2009-07-02 10:27:56 +0200 cl r273624 : fixed merge problem 2009-07-02 10:27:19 +0200 cl r273623 : fixed compiler warning 2009-07-01 10:04:58 +0200 cl r273550 : CWS-TOOLING: rebase CWS impress172 to trunk@273468 (milestone: DEV300:m51) 2009-06-30 16:22:02 +0200 cl r273518 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 16:20:46 +0200 cl r273517 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 16:20:28 +0200 cl r273516 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 16:19:49 +0200 cl r273515 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 16:19:28 +0200 cl r273514 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 16:17:38 +0200 cl r273513 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 15:45:44 +0200 cl r273511 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 15:37:16 +0200 cl r273510 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 15:33:47 +0200 cl r273509 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 15:32:10 +0200 cl r273508 : #i102921# added insert table row/col dialog for impress tables 2009-06-30 15:30:05 +0200 cl r273507 : #i102921# added insert table row/col dialog for impress tables 2009-06-29 12:32:42 +0200 sj r273465 : #158632# fixed textrange hyperlinks to specific pages, added slide names 2009-06-24 15:17:59 +0200 sj r273349 : #158636# fixed text range hyperlink to first/last slide 2009-06-22 13:18:30 +0200 sj r273224 : #158651# fixed header footer import 2009-06-19 15:18:24 +0200 sj r273160 : #158614# default text of presentation objects now cleared 2009-06-16 15:54:19 +0200 sj r273023 : #i101545# fixed crash - bracketing of graphic links has been done twice leading to a broken graphic state stack 2009-06-15 16:26:26 +0200 sj r272998 : #158635# importing bookmark interactions: firstslide, lastslide, nextslide, previousslide 2009-06-15 16:25:26 +0200 sj r272997 : #158635# added bookmark interactions: firstslide, lastslide, nextslide, previousslide 2009-06-12 13:17:32 +0200 sj r272915 : #i102713# fixed cloud shape 2009-06-10 18:36:58 +0200 sj r272833 : #158674# fixed curvedleftarrow, curvedrightarrow, curveddownarrow, curveduparrow 2009-06-08 19:52:28 +0200 sj r272746 : #158674# fixed curvedleftarrow, curvedrightarrow, curveddownarrow, curveduparrow 2009-06-04 15:28:32 +0200 cl r272640 : #i102358# applied patch to remove warnings 2009-06-04 14:39:45 +0200 cl r272630 : #i99423# applied path to change impress wizard create button to open when opening exisitng documents 2009-06-03 18:21:26 +0200 sj r272601 : #158635# now using the correct paragraph bottom spacing. using font independent linespacing for impress text objects 2009-06-03 15:47:27 +0200 cl r272583 : #i101817# added color collection based on scribus 2009-06-03 14:43:59 +0200 cl r272580 : #i102163# use weak ref to SdrObject instead of listening to the model 2009-06-03 12:39:29 +0200 cl r272556 : #i93308# correct namespace for com.sun.star.text.textfields 2009-06-03 12:27:00 +0200 cl r272555 : #i93308# correct namespace for com.sun.star.text.textfields 2009-06-03 11:33:44 +0200 cl r272553 : #i23221# allow all settings (that make sense) for presentation styles 2009-06-03 11:30:59 +0200 cl r272552 : #i23221# allow all settings (that make sense) for presentation styles 2009-06-03 11:30:22 +0200 cl r272551 : #i23221# allow all settings (that make sense) for presentation styles 2009-06-02 18:41:07 +0200 sj r272527 : #i28358# applied patch (better conversion of dotted lines) 2009-06-02 11:52:13 +0200 cl r272491 : #i98668# applied patch to fix possible endless loop if exception occours 2009-05-28 17:02:55 +0200 sj r272416 : #i102336# retaining graphic file names unchanged 2009-05-28 17:00:25 +0200 sj r272415 : #i102336# retaining graphic file names unchanged 2009-05-28 17:00:10 +0200 sj r272414 : #i102336# retaining graphic file names unchanged 2009-05-25 12:43:58 +0200 sj r272232 : #i102069# added patch from thb (fixed rotated group objects) --- goodies/source/filter.vcl/idxf/dxf2mtf.cxx | 181 ++++++++++++++++++++-------- goodies/source/filter.vcl/idxf/dxf2mtf.hxx | 10 +- goodies/source/filter.vcl/idxf/dxfreprd.cxx | 12 +- goodies/source/filter.vcl/idxf/dxfreprd.hxx | 10 +- goodies/source/filter.vcl/idxf/dxfvec.cxx | 29 ++++- goodies/source/filter.vcl/idxf/dxfvec.hxx | 34 ++++++ 6 files changed, 217 insertions(+), 59 deletions(-) diff --git a/goodies/source/filter.vcl/idxf/dxf2mtf.cxx b/goodies/source/filter.vcl/idxf/dxf2mtf.cxx index a2547bcae232..654b66888f67 100644 --- a/goodies/source/filter.vcl/idxf/dxf2mtf.cxx +++ b/goodies/source/filter.vcl/idxf/dxf2mtf.cxx @@ -91,41 +91,93 @@ long DXF2GDIMetaFile::GetEntityColor(const DXFBasicEntity & rE) return nColor; } - -PenStyle DXF2GDIMetaFile::LTypeToPStyle(const char * sLineType) +DXFLineInfo DXF2GDIMetaFile::LTypeToDXFLineInfo(const char * sLineType) { const DXFLType * pLT; - PenStyle ePStyle; + DXFLineInfo aDXFLineInfo; + pLT=pDXF->aTables.SearchLType(sLineType); - if (pLT==NULL) ePStyle=PEN_SOLID; - else if (pLT->nDashCount<=1) ePStyle=PEN_SOLID; - else if (pLT->nDashCount==2) { - if (fabs(pLT->fDash[0])*4fPatternLength)) ePStyle=PEN_DOT; - else ePStyle=PEN_DASH; - } - else ePStyle=PEN_DASHDOT; - return ePStyle; -} + if (pLT==NULL || pLT->nDashCount == 0) { + aDXFLineInfo.eStyle = LINE_SOLID; + } + else { + sal_Int32 i; + double x; + aDXFLineInfo.eStyle = LINE_DASH; + for (i=0; i < (pLT->nDashCount); i++) { + x = pLT->fDash[i] * pDXF->getGlobalLineTypeScale(); +// #### + // x = (sal_Int32) rTransform.TransLineWidth( pLT->fDash[i] * pDXF->getGlobalLineTypeScale() ); + if ( x >= 0.0 ) { + if ( aDXFLineInfo.nDotCount == 0 ) { + aDXFLineInfo.nDotCount ++; + aDXFLineInfo.fDotLen = x; + } + else if ( aDXFLineInfo.fDotLen == x ) { + aDXFLineInfo.nDotCount ++; + } + else if ( aDXFLineInfo.nDashCount == 0 ) { + aDXFLineInfo.nDashCount ++; + aDXFLineInfo.fDashLen = x; + } + else if ( aDXFLineInfo.fDashLen == x ) { + aDXFLineInfo.nDashCount ++; + } + else { + // It is impossible to be converted. + } + } + else { + if ( aDXFLineInfo.fDistance == 0 ) { + aDXFLineInfo.fDistance = -1 * x; + } + else { + // It is impossible to be converted. + } + } + + } + } +#if 0 + if (aDXFLineInfo.DashCount > 0 && aDXFLineInfo.DashLen == 0.0) + aDXFLineInfo.DashLen ( 1 ); + if (aDXFLineInfo.DotCount > 0 && aDXFLineInfo.DotLen() == 0.0) + aDXFLineInfo.SetDotLen( 1 ); + if (aDXFLineInfo.GetDashCount > 0 || aDXFLineInfo.GetDotCount > 0) + if (aDXFLineInfo.GetDistance() == 0) + aDXFLineInfo.SetDistance( 1 ); +#endif -PenStyle DXF2GDIMetaFile::GetEntityPStyle(const DXFBasicEntity & rE) + return aDXFLineInfo; +} + +DXFLineInfo DXF2GDIMetaFile::GetEntityDXFLineInfo(const DXFBasicEntity & rE) { - PenStyle ePStyle; + DXFLineInfo aDXFLineInfo; const DXFLayer * pLayer; + aDXFLineInfo.eStyle = LINE_SOLID; + aDXFLineInfo.fWidth = 0; + aDXFLineInfo.nDashCount = 0; + aDXFLineInfo.fDashLen = 0; + aDXFLineInfo.nDotCount = 0; + aDXFLineInfo.fDotLen = 0; + aDXFLineInfo.fDistance = 0; + if (strcmp(rE.sLineType,"BYLAYER")==0) { - if (rE.sLayer[0]=='0' && rE.sLayer[1]==0) ePStyle=eParentLayerPStyle; + if (rE.sLayer[0]=='0' && rE.sLayer[1]==0) aDXFLineInfo=aParentLayerDXFLineInfo; else { pLayer=pDXF->aTables.SearchLayer(rE.sLayer); - if (pLayer!=NULL) ePStyle=LTypeToPStyle(pLayer->sLineType); - else ePStyle=eParentLayerPStyle; + if (pLayer!=NULL) aDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType); + else aDXFLineInfo=aParentLayerDXFLineInfo; } } else if (strcmp(rE.sLineType,"BYBLOCK")==0) { - ePStyle=eBlockPStyle; + aDXFLineInfo=aBlockDXFLineInfo; } - else ePStyle=LTypeToPStyle(rE.sLineType); - return ePStyle; + else aDXFLineInfo=LTypeToDXFLineInfo(rE.sLineType); + return aDXFLineInfo; } @@ -133,12 +185,10 @@ BOOL DXF2GDIMetaFile::SetLineAttribute(const DXFBasicEntity & rE, ULONG /*nWidth { long nColor; Color aColor; - PenStyle ePStyle; nColor=GetEntityColor(rE); if (nColor<0) return FALSE; aColor=ConvertColor((BYTE)nColor); - ePStyle=GetEntityPStyle(rE); if (aActLineColor!=aColor) { pVirDev->SetLineColor( aActLineColor = aColor ); @@ -202,12 +252,30 @@ BOOL DXF2GDIMetaFile::SetFontAttribute(const DXFBasicEntity & rE, short nAngle, void DXF2GDIMetaFile::DrawLineEntity(const DXFLineEntity & rE, const DXFTransform & rTransform) { - if (SetLineAttribute(rE)) { Point aP0,aP1; rTransform.Transform(rE.aP0,aP0); rTransform.Transform(rE.aP1,aP1); - pVirDev->DrawLine(aP0,aP1); + + DXFLineInfo aDXFLineInfo; + aDXFLineInfo=GetEntityDXFLineInfo(rE); + LineInfo aLineInfo; + aLineInfo = rTransform.Transform(aDXFLineInfo); + +#if 0 + printf("%f\n", rTransform.TransLineWidth(1000.0)); + + // LINE_NONE = 0, LINE_SOLID = 1, LINE_DASH = 2, LineStyle_FORCE_EQUAL_SIZE = SAL_MAX_ENUM + aLineInfo.SetStyle( LINE_DASH ); + aLineInfo.SetWidth( 300 ); + aLineInfo.SetDashCount( 2 ); + aLineInfo.SetDashLen( 100 ); + aLineInfo.SetDotCount( 1 ); + aLineInfo.SetDotLen( 0 ); + aLineInfo.SetDistance( 500 ); +#endif + + pVirDev->DrawLine(aP0,aP1,aLineInfo); if (rE.fThickness!=0) { Point aP2,aP3; rTransform.Transform(rE.aP0+DXFVector(0,0,rE.fThickness),aP2); @@ -426,23 +494,23 @@ void DXF2GDIMetaFile::DrawInsertEntity(const DXFInsertEntity & rE, const DXFTran rTransform ); long nSavedBlockColor, nSavedParentLayerColor; - PenStyle eSavedBlockPStyle, eSavedParentLayerPStyle; + DXFLineInfo aSavedBlockDXFLineInfo, aSavedParentLayerDXFLineInfo; nSavedBlockColor=nBlockColor; nSavedParentLayerColor=nParentLayerColor; - eSavedBlockPStyle=eBlockPStyle; - eSavedParentLayerPStyle=eParentLayerPStyle; + aSavedBlockDXFLineInfo=aBlockDXFLineInfo; + aSavedParentLayerDXFLineInfo=aParentLayerDXFLineInfo; nBlockColor=GetEntityColor(rE); - eBlockPStyle=GetEntityPStyle(rE); + aBlockDXFLineInfo=GetEntityDXFLineInfo(rE); if (rE.sLayer[0]!='0' || rE.sLayer[1]!=0) { DXFLayer * pLayer=pDXF->aTables.SearchLayer(rE.sLayer); if (pLayer!=NULL) { nParentLayerColor=pLayer->nColor; - eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType); + aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType); } } DrawEntities(*pB,aT,FALSE); - eBlockPStyle=eSavedBlockPStyle; - eParentLayerPStyle=eSavedParentLayerPStyle; + aBlockDXFLineInfo=aSavedBlockDXFLineInfo; + aParentLayerDXFLineInfo=aSavedParentLayerDXFLineInfo; nBlockColor=nSavedBlockColor; nParentLayerColor=nSavedParentLayerColor; } @@ -540,6 +608,8 @@ void DXF2GDIMetaFile::DrawLWPolyLineEntity(const DXFLWPolyLineEntity & rE, const pVirDev->DrawPolygon( aPoly ); else pVirDev->DrawPolyLine( aPoly ); + // #### + //pVirDev->DrawPolyLine( aPoly, aDXFLineInfo ); } } } @@ -675,23 +745,23 @@ void DXF2GDIMetaFile::DrawDimensionEntity(const DXFDimensionEntity & rE, const D rTransform ); long nSavedBlockColor, nSavedParentLayerColor; - PenStyle eSavedBlockPStyle, eSavedParentLayerPStyle; + DXFLineInfo aSavedBlockDXFLineInfo, aSavedParentLayerDXFLineInfo; nSavedBlockColor=nBlockColor; nSavedParentLayerColor=nParentLayerColor; - eSavedBlockPStyle=eBlockPStyle; - eSavedParentLayerPStyle=eParentLayerPStyle; + aSavedBlockDXFLineInfo=aBlockDXFLineInfo; + aSavedParentLayerDXFLineInfo=aParentLayerDXFLineInfo; nBlockColor=GetEntityColor(rE); - eBlockPStyle=GetEntityPStyle(rE); + aBlockDXFLineInfo=GetEntityDXFLineInfo(rE); if (rE.sLayer[0]!='0' || rE.sLayer[1]!=0) { DXFLayer * pLayer=pDXF->aTables.SearchLayer(rE.sLayer); if (pLayer!=NULL) { nParentLayerColor=pLayer->nColor; - eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType); + aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType); } } DrawEntities(*pB,aT,FALSE); - eBlockPStyle=eSavedBlockPStyle; - eParentLayerPStyle=eSavedParentLayerPStyle; + aBlockDXFLineInfo=aSavedBlockDXFLineInfo; + aParentLayerDXFLineInfo=aSavedParentLayerDXFLineInfo; nBlockColor=nSavedBlockColor; nParentLayerColor=nSavedParentLayerColor; } @@ -801,16 +871,28 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF nMainEntitiesCount=CountEntities(pDXF->aEntities); nBlockColor=7; - eBlockPStyle=PEN_SOLID; + aBlockDXFLineInfo.eStyle = LINE_SOLID; + aBlockDXFLineInfo.fWidth = 0; + aBlockDXFLineInfo.nDashCount = 0; + aBlockDXFLineInfo.fDashLen = 0; + aBlockDXFLineInfo.nDotCount = 0; + aBlockDXFLineInfo.fDotLen = 0; + aBlockDXFLineInfo.fDistance = 0; pLayer=pDXF->aTables.SearchLayer("0"); if (pLayer!=NULL) { nParentLayerColor=pLayer->nColor & 0xff; - eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType); + aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType); } else { nParentLayerColor=7; - eParentLayerPStyle=PEN_SOLID; + aParentLayerDXFLineInfo.eStyle = LINE_SOLID; + aParentLayerDXFLineInfo.fWidth = 0; + aParentLayerDXFLineInfo.nDashCount = 0; + aParentLayerDXFLineInfo.fDashLen = 0; + aParentLayerDXFLineInfo.nDotCount = 0; + aParentLayerDXFLineInfo.fDotLen = 0; + aParentLayerDXFLineInfo.fDistance = 0; } pVirDev->EnableOutput(FALSE); @@ -837,14 +919,14 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF fScale = 0; // -Wall added this... } else { - if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) { +// if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) { if (fWidth>fHeight) fScale=10000.0/fWidth; else fScale=10000.0/fHeight; - } - else - fScale=1.0; +// } +// else +// fScale=1.0; aTransform=DXFTransform(fScale,-fScale,fScale, DXFVector(-pDXF->aBoundingBox.fMinX*fScale, pDXF->aBoundingBox.fMaxY*fScale, @@ -857,14 +939,14 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF else { fHeight=pVPort->fHeight; fWidth=fHeight*pVPort->fAspectRatio; - if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) { +// if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) { if (fWidth>fHeight) fScale=10000.0/fWidth; else fScale=10000.0/fHeight; - } - else - fScale=1.0; +// } +// else +// fScale=1.0; aTransform=DXFTransform( DXFTransform(pVPort->aDirection,pVPort->aTarget), DXFTransform( @@ -894,7 +976,6 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF } delete pVirDev; - return bStatus; } diff --git a/goodies/source/filter.vcl/idxf/dxf2mtf.hxx b/goodies/source/filter.vcl/idxf/dxf2mtf.hxx index bf32750cc0af..a1bf99639430 100644 --- a/goodies/source/filter.vcl/idxf/dxf2mtf.hxx +++ b/goodies/source/filter.vcl/idxf/dxf2mtf.hxx @@ -33,6 +33,7 @@ #include "dxfreprd.hxx" #include +#include // MT: NOOLDSV, someone should change the code... enum PenStyle { PEN_NULL, PEN_SOLID, PEN_DOT, PEN_DASH, PEN_DASHDOT }; @@ -41,6 +42,7 @@ enum BrushStyle { BRUSH_NULL, BRUSH_SOLID, BRUSH_HORZ, BRUSH_VERT, BRUSH_25, BRUSH_50, BRUSH_75, BRUSH_BITMAP }; + class DXF2GDIMetaFile { private: @@ -56,9 +58,9 @@ private: ULONG nMainEntitiesCount; long nBlockColor; - PenStyle eBlockPStyle; + DXFLineInfo aBlockDXFLineInfo; long nParentLayerColor; - PenStyle eParentLayerPStyle; + DXFLineInfo aParentLayerDXFLineInfo; Color aActLineColor; Color aActFillColor; Font aActFont; @@ -71,9 +73,9 @@ private: long GetEntityColor(const DXFBasicEntity & rE); - PenStyle LTypeToPStyle(const char * sLineType); + DXFLineInfo LTypeToDXFLineInfo(const char * sLineType); - PenStyle GetEntityPStyle(const DXFBasicEntity & rE); + DXFLineInfo GetEntityDXFLineInfo(const DXFBasicEntity & rE); BOOL SetLineAttribute(const DXFBasicEntity & rE, ULONG nWidth=0); diff --git a/goodies/source/filter.vcl/idxf/dxfreprd.cxx b/goodies/source/filter.vcl/idxf/dxfreprd.cxx index 7dc2f5d8d58d..80b4cb599b73 100644 --- a/goodies/source/filter.vcl/idxf/dxfreprd.cxx +++ b/goodies/source/filter.vcl/idxf/dxfreprd.cxx @@ -142,7 +142,8 @@ void DXFPalette::SetColor(BYTE nIndex, BYTE nRed, BYTE nGreen, BYTE nBlue) DXFRepresentation::DXFRepresentation() { - setTextEncoding(RTL_TEXTENCODING_IBM_437); + setTextEncoding(RTL_TEXTENCODING_IBM_437); + setGlobalLineTypeScale(1.0); } @@ -217,11 +218,18 @@ void DXFRepresentation::ReadHeader(DXFGroupReader & rDGR) // FIXME: we really need a whole table of // $DWGCODEPAGE to encodings mappings if ( (strcmp(rDGR.GetS(),"ANSI_932")==0) || - (strcmp(rDGR.GetS(),"DOS932")==0) ) + (strcmp(rDGR.GetS(),"ansi_932")==0) || + (strcmp(rDGR.GetS(),"DOS932")==0) || + (strcmp(rDGR.GetS(),"dos932")==0) ) { setTextEncoding(RTL_TEXTENCODING_MS_932); } } + else if (strcmp(rDGR.GetS(),"$LTSCALE")==0) + { + rDGR.Read(); + setGlobalLineTypeScale(getGlobalLineTypeScale() * rDGR.GetF()); + } else rDGR.Read(); } } diff --git a/goodies/source/filter.vcl/idxf/dxfreprd.hxx b/goodies/source/filter.vcl/idxf/dxfreprd.hxx index 490f7af57223..13ca7d022697 100644 --- a/goodies/source/filter.vcl/idxf/dxfreprd.hxx +++ b/goodies/source/filter.vcl/idxf/dxfreprd.hxx @@ -101,7 +101,9 @@ public: DXFEntities aEntities; // Die Entities (aus der Entities-Section) der DXF-Datei - rtl_TextEncoding mEnc; + rtl_TextEncoding mEnc; // $DWGCODEPAGE + + double mfGlobalLineTypeScale; // $LTSCALE DXFRepresentation(); ~DXFRepresentation(); @@ -109,6 +111,9 @@ public: rtl_TextEncoding getTextEncoding() const; void setTextEncoding(rtl_TextEncoding aEnc); + double getGlobalLineTypeScale() const; + void setGlobalLineTypeScale(double fGlobalLineTypeScale); + BOOL Read( SvStream & rIStream, USHORT nMinPercent, USHORT nMaxPercent); // Liesst die komplette DXF-Datei ein. @@ -128,7 +133,8 @@ inline BYTE DXFPalette::GetGreen(BYTE nIndex) const { return pGreen[nIndex]; } inline BYTE DXFPalette::GetBlue(BYTE nIndex) const { return pBlue[nIndex]; } inline rtl_TextEncoding DXFRepresentation::getTextEncoding() const { return mEnc; } inline void DXFRepresentation::setTextEncoding(rtl_TextEncoding aEnc) { mEnc = aEnc; } - +inline double DXFRepresentation::getGlobalLineTypeScale() const { return mfGlobalLineTypeScale; } +inline void DXFRepresentation::setGlobalLineTypeScale(double fGlobalLineTypeScale) { mfGlobalLineTypeScale = fGlobalLineTypeScale; } #endif diff --git a/goodies/source/filter.vcl/idxf/dxfvec.cxx b/goodies/source/filter.vcl/idxf/dxfvec.cxx index ee5a923a8684..48bc93ae3eb6 100644 --- a/goodies/source/filter.vcl/idxf/dxfvec.cxx +++ b/goodies/source/filter.vcl/idxf/dxfvec.cxx @@ -206,6 +206,32 @@ BOOL DXFTransform::TransCircleToEllipse(double fRadius, double & rEx, double & r else return FALSE; } +LineInfo DXFTransform::Transform(const DXFLineInfo& aDXFLineInfo) const +{ + double fex,fey,scale; + + fex=sqrt(aMX.fx*aMX.fx + aMX.fy*aMX.fy); + fey=sqrt(aMY.fx*aMY.fx + aMY.fy*aMY.fy); + scale = (fex+fey)/2.0; + + LineInfo aLineInfo; + + aLineInfo.SetStyle( aDXFLineInfo.eStyle ); + aLineInfo.SetWidth( (sal_Int32) (aDXFLineInfo.fWidth * scale + 0.5) ); + aLineInfo.SetDashCount( static_cast< USHORT >( aDXFLineInfo.nDashCount ) ); + aLineInfo.SetDashLen( (sal_Int32) (aDXFLineInfo.fDashLen * scale + 0.5) ); + aLineInfo.SetDotCount( static_cast< USHORT >( aDXFLineInfo.nDotCount ) ); + aLineInfo.SetDotLen( (sal_Int32) (aDXFLineInfo.fDotLen * scale + 0.5) ); + aLineInfo.SetDistance( (sal_Int32) (aDXFLineInfo.fDistance * scale + 0.5) ); + + if ( aLineInfo.GetDashCount() > 0 && aLineInfo.GetDashLen() == 0 ) + aLineInfo.SetDashLen(1); + + if ( aLineInfo.GetDotCount() > 0 && aLineInfo.GetDotLen() == 0 ) + aLineInfo.SetDotLen(1); + + return aLineInfo; +} ULONG DXFTransform::TransLineWidth(double fW) const { @@ -213,6 +239,8 @@ ULONG DXFTransform::TransLineWidth(double fW) const fex=sqrt(aMX.fx*aMX.fx + aMX.fy*aMX.fy); fey=sqrt(aMY.fx*aMY.fx + aMY.fy*aMY.fy); + // ### + // printf("fex=%f fey=%f\n", fex, fey); return (ULONG)(fabs(fW)*(fex+fey)/2.0+0.5); } @@ -227,4 +255,3 @@ BOOL DXFTransform::Mirror() const if (aMZ.SProd(aMX*aMY)<0) return TRUE; else return FALSE; } - diff --git a/goodies/source/filter.vcl/idxf/dxfvec.hxx b/goodies/source/filter.vcl/idxf/dxfvec.hxx index 5ccc0be25774..aca26df46676 100644 --- a/goodies/source/filter.vcl/idxf/dxfvec.hxx +++ b/goodies/source/filter.vcl/idxf/dxfvec.hxx @@ -32,6 +32,37 @@ #define _DXFVEC_HXX #include +#include + +class DXFLineInfo { +public: + LineStyle eStyle; + double fWidth; + sal_Int32 nDashCount; + double fDashLen; + sal_Int32 nDotCount; + double fDotLen; + double fDistance; + + DXFLineInfo() : + eStyle(LINE_SOLID), + fWidth(0), + nDashCount(0), + fDashLen(0), + nDotCount(0), + fDotLen(0), + fDistance(0) {} + + DXFLineInfo(const DXFLineInfo& x) : + eStyle(x.eStyle), + fWidth(x.fWidth), + nDashCount(x.nDashCount), + fDashLen(x.fDashLen), + nDotCount(x.nDotCount), + fDotLen(x.fDotLen), + fDistance(x.fDistance) {} + +}; //------------------------------------------------------------------------------ @@ -135,6 +166,9 @@ public: BOOL Mirror() const; // Liefert TRUE, wenn die Matrix ein Linkssystem bildet + LineInfo Transform(const DXFLineInfo& aDXFLineInfo) const; + // Transform to LineInfo + private: DXFVector aMX; DXFVector aMY; -- cgit v1.2.3 From 9732a509373732db8036bab56ad404ef69d62510 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Thu, 6 Aug 2009 12:44:16 +0000 Subject: CWS-TOOLING: integrate CWS os132 2009-07-21 15:24:18 +0200 os r274201 : #i103696# SwXTextPortion/SwXParagraph excluded 2009-07-15 13:19:17 +0200 os r274007 : #i103564# typo 2009-07-15 13:09:30 +0200 os r274005 : #i103564# SwFrames::hasElements 2009-07-15 13:02:16 +0200 os r274003 : #i103564# SwXBookmark::getPropertySetInfo fixed 2009-06-26 10:11:00 +0200 os r273395 : CWS-TOOLING: rebase CWS os132 to trunk@272827 (milestone: DEV300:m50) 2009-06-23 08:52:24 +0200 os r273256 : #i102764# patch: attribute ListBoxes correctly handled in ::Reset() 2009-06-23 08:51:31 +0200 os r273255 : #i102764# ResetColor() added to remove background color 2009-06-22 14:57:38 +0200 os r273233 : #i102619# prevent access to already destroyed shell 2009-06-18 13:26:51 +0200 os r273112 : #i99508# ::insertTextContent: re-route to ::attach() 2009-06-18 10:59:53 +0200 os r273107 : #i85405# patch to enable 'Print grid' CheckBox correctly 2009-06-18 10:54:02 +0200 os r273106 : #i85133# dispose connection in GetColumnFmt to prevent connection locking 2009-06-18 10:24:31 +0200 os r273104 : #99535# ExportGraphic changed 2009-06-18 10:24:03 +0200 os r273103 : #99535# ExportGraphic changed 2009-06-18 10:23:11 +0200 os r273102 : #i102841# redlining mode switches to insert mode (cmc) 2009-06-17 14:05:42 +0200 os r273070 : #i102111# do not save already saved HTML documents before switching to source veiw 2009-06-17 13:18:20 +0200 os r273063 : #i101825# set rembered start position at the real start not at the initial start 2009-06-17 08:24:10 +0200 os r273048 : #99535# no dierect access to the file picker interface 2009-06-16 15:00:12 +0200 os r273020 : #i99937# notification of user options changes re-introduced 2009-06-15 14:36:03 +0200 os r272987 : #i98032# unreplaced text in protected areas must not be attributed either 2009-06-15 14:20:26 +0200 os r272985 : #i98032# replace list has to be initialised 2009-06-04 13:29:02 +0200 os r272624 : #i97810# set focus into column page 2009-06-04 11:01:14 +0200 os r272617 : #i98164# dialog resize to ease localisation 2009-06-04 10:59:44 +0200 os r272616 : #i98164# dialog resize to ease localisation 2009-05-28 16:05:03 +0200 os r272413 : #i98172# ConvertFieldsToText: take care of tabs with attributes 2009-05-28 11:12:45 +0200 os r272385 : #i59361# dialog controls resized 2009-05-28 11:03:14 +0200 os r272383 : #i59174# dialog controls moved --- svtools/source/config/useroptions.cxx | 107 +++++++++++++++++++++++----------- 1 file changed, 73 insertions(+), 34 deletions(-) diff --git a/svtools/source/config/useroptions.cxx b/svtools/source/config/useroptions.cxx index aad000a235f1..4eafbefe54a3 100644 --- a/svtools/source/config/useroptions.cxx +++ b/svtools/source/config/useroptions.cxx @@ -49,51 +49,45 @@ #include #include "itemholder2.hxx" -#ifndef _COM_SUN_STAR_BEANS_PROPERTY_HPP_ #include -#endif - -#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ #include -#endif - -#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_ #include -#endif - -#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_ #include -#endif - -#ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_ #include -#endif - -#ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_ #include -#endif - -#ifndef _COMPHELPER_CONFIGURATIONHELPER_HXX_ +#include +#include +#include #include -#endif - -#ifndef _UNOTOOLS_PROCESSFACTORY_HXX_ #include -#endif - -#ifndef _SVT_LOGHELPER_HXX -#include "loghelper.hxx" -#endif +#include using namespace utl; using namespace rtl; +using namespace com::sun::star; using namespace com::sun::star::uno; namespace css = ::com::sun::star; // class SvtUserOptions_Impl --------------------------------------------- +class SvtUserOptions_Impl; +class SvtUserConfigChangeListener_Impl : public cppu::WeakImplHelper1 +< + com::sun::star::util::XChangesListener +> +{ + SvtUserOptions_Impl& m_rParent; + public: + SvtUserConfigChangeListener_Impl(SvtUserOptions_Impl& rParent); + ~SvtUserConfigChangeListener_Impl(); + + //XChangesListener + virtual void SAL_CALL changesOccurred( const util::ChangesEvent& Event ) throw(RuntimeException); + //XEventListener + virtual void SAL_CALL disposing( const lang::EventObject& Source ) throw(RuntimeException); +}; -class SvtUserOptions_Impl +class SvtUserOptions_Impl : public SfxBroadcaster { public: SvtUserOptions_Impl(); @@ -144,8 +138,10 @@ public: sal_Bool IsTokenReadonly( USHORT nToken ) const; ::rtl::OUString GetToken(USHORT nToken) const; + void Notify(); private: + uno::Reference< util::XChangesListener > m_xChangeListener; css::uno::Reference< css::container::XNameAccess > m_xCfg; css::uno::Reference< css::beans::XPropertySet > m_xData; ::rtl::OUString m_aLocale; @@ -158,18 +154,47 @@ static sal_Int32 nRefCount = 0; #define READONLY_DEFAULT sal_False -// functions ------------------------------------------------------------- +/*-- 16.06.2009 14:22:56--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SvtUserConfigChangeListener_Impl::SvtUserConfigChangeListener_Impl(SvtUserOptions_Impl& rParent) : + m_rParent( rParent ) +{ +} +/*-- 16.06.2009 14:22:56--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SvtUserConfigChangeListener_Impl::~SvtUserConfigChangeListener_Impl() +{ +} +/*-- 16.06.2009 14:22:56--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SvtUserConfigChangeListener_Impl::changesOccurred( const util::ChangesEvent& rEvent ) throw(RuntimeException) +{ + if(rEvent.Changes.getLength()) + m_rParent.Notify(); +} +/*-- 16.06.2009 14:22:56--------------------------------------------------- -namespace + -----------------------------------------------------------------------*/ +void SvtUserConfigChangeListener_Impl::disposing( const lang::EventObject& rSource ) throw(RuntimeException) { - struct PropertyNames - : public rtl::Static< Sequence< rtl::OUString >, PropertyNames> {}; + try + { + uno::Reference< util::XChangesNotifier > xChgNot( rSource.Source, UNO_QUERY_THROW); + xChgNot->removeChangesListener(this); + } + catch(Exception& ) + { + } } // class SvtUserOptions_Impl --------------------------------------------- // ----------------------------------------------------------------------- -SvtUserOptions_Impl::SvtUserOptions_Impl() +SvtUserOptions_Impl::SvtUserOptions_Impl() : + m_xChangeListener( new SvtUserConfigChangeListener_Impl(*this) ) { try { @@ -181,6 +206,14 @@ SvtUserOptions_Impl::SvtUserOptions_Impl() css::uno::UNO_QUERY ); m_xData = css::uno::Reference< css::beans::XPropertySet >(m_xCfg, css::uno::UNO_QUERY); + uno::Reference< util::XChangesNotifier > xChgNot( m_xCfg, UNO_QUERY); + try + { + xChgNot->addChangesListener( m_xChangeListener ); + } + catch(RuntimeException& ) + { + } } catch(const css::uno::Exception& ex) { @@ -743,6 +776,12 @@ void SvtUserOptions_Impl::SetApartment( const ::rtl::OUString& sApartment ) // ----------------------------------------------------------------------- +void SvtUserOptions_Impl::Notify() +{ + Broadcast( SfxSimpleHint( SFX_HINT_USER_OPTIONS_CHANGED ) ); +} +// ----------------------------------------------------------------------- + sal_Bool SvtUserOptions_Impl::IsTokenReadonly( USHORT nToken ) const { css::uno::Reference< css::beans::XPropertySet > xData(m_xCfg, css::uno::UNO_QUERY); @@ -906,7 +945,7 @@ SvtUserOptions::SvtUserOptions() } ++nRefCount; pImp = pOptions; - //StartListening( *pImp); + StartListening( *pImp); } // ----------------------------------------------------------------------- -- cgit v1.2.3 From e1ad946ef5db3f7c0a540207d0f0fd85799e3b66 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Thu, 6 Aug 2009 18:13:57 +0000 Subject: CWS-TOOLING: integrate CWS tl73 2009-07-31 15:29:33 +0200 tl r274535 : #i64400# dash/hyphen should not break words --- i18npool/inc/breakiterator_ctl.hxx | 1 + i18npool/inc/breakiterator_unicode.hxx | 6 +- i18npool/inc/xdictionary.hxx | 4 +- .../source/breakiterator/breakiterator_cjk.cxx | 4 +- .../source/breakiterator/breakiterator_ctl.cxx | 7 +- .../source/breakiterator/breakiterator_unicode.cxx | 29 ++-- i18npool/source/breakiterator/data/dict_word.txt | 3 +- .../source/breakiterator/data/dict_word_dash.txt | 148 ------------------- .../source/breakiterator/data/dict_word_nodash.txt | 147 +++++++++++++++++++ .../breakiterator/data/dict_word_prepostdash.txt | 157 +++++++++++++++++++++ i18npool/source/breakiterator/makefile.mk | 2 +- i18npool/source/breakiterator/xdictionary.cxx | 30 +++- i18npool/source/localedata/data/de_DE.xml | 9 +- i18npool/source/localedata/data/nl_NL.xml | 35 +++-- i18npool/source/localedata/data/pl_PL.xml | 7 - i18npool/source/localedata/data/sv_SE.xml | 7 + 16 files changed, 405 insertions(+), 191 deletions(-) delete mode 100644 i18npool/source/breakiterator/data/dict_word_dash.txt create mode 100644 i18npool/source/breakiterator/data/dict_word_nodash.txt create mode 100644 i18npool/source/breakiterator/data/dict_word_prepostdash.txt diff --git a/i18npool/inc/breakiterator_ctl.hxx b/i18npool/inc/breakiterator_ctl.hxx index 9e753e8ae16f..3e687b5e8e68 100644 --- a/i18npool/inc/breakiterator_ctl.hxx +++ b/i18npool/inc/breakiterator_ctl.hxx @@ -58,6 +58,7 @@ protected: sal_Int32* nextCellIndex; sal_Int32* previousCellIndex; sal_Int32 cellIndexSize; + virtual void SAL_CALL makeIndex(const rtl::OUString& text, sal_Int32 pos) throw(com::sun::star::uno::RuntimeException); }; diff --git a/i18npool/inc/breakiterator_unicode.hxx b/i18npool/inc/breakiterator_unicode.hxx index 3a0720f27545..654df424b237 100644 --- a/i18npool/inc/breakiterator_unicode.hxx +++ b/i18npool/inc/breakiterator_unicode.hxx @@ -86,12 +86,16 @@ protected: const sal_Char *cBreakIterator, *wordRule, *lineRule; Boundary result; // for word break iterator - struct { + struct BI_Data { UnicodeString aICUText; icu::BreakIterator *aBreakIterator; + + BI_Data() : aICUText(), aBreakIterator(NULL) {} } character, word, sentence, line, *icuBI; + com::sun::star::lang::Locale aLocale; sal_Int16 aBreakType, aWordType; + void SAL_CALL loadICUBreakIterator(const com::sun::star::lang::Locale& rLocale, sal_Int16 rBreakType, sal_Int16 rWordType, const sal_Char* name, const rtl::OUString& rText) throw(com::sun::star::uno::RuntimeException); }; diff --git a/i18npool/inc/xdictionary.hxx b/i18npool/inc/xdictionary.hxx index 32ffdbbfe377..04c5836aaaea 100644 --- a/i18npool/inc/xdictionary.hxx +++ b/i18npool/inc/xdictionary.hxx @@ -45,11 +45,13 @@ namespace com { namespace sun { namespace star { namespace i18n { // cache structure. struct WordBreakCache { - sal_Bool equals(const sal_Unicode *str, Boundary& boundary); // checking cached string sal_Int32 length; // contents length saved here. sal_Unicode *contents; // seperated segment contents. sal_Int32* wordboundary; // word boundaries in segments. sal_Int32 size; // size of wordboundary + + WordBreakCache(); + sal_Bool equals(const sal_Unicode *str, Boundary& boundary); // checking cached string }; class xdictionary diff --git a/i18npool/source/breakiterator/breakiterator_cjk.cxx b/i18npool/source/breakiterator/breakiterator_cjk.cxx index 3d684b8788df..3a44c02edc23 100644 --- a/i18npool/source/breakiterator/breakiterator_cjk.cxx +++ b/i18npool/source/breakiterator/breakiterator_cjk.cxx @@ -46,7 +46,9 @@ namespace com { namespace sun { namespace star { namespace i18n { // class BreakIterator_CJK // ----------------------------------------------------; -BreakIterator_CJK::BreakIterator_CJK() : dict(NULL) +BreakIterator_CJK::BreakIterator_CJK() : + dict( NULL ), + hangingCharacters() { cBreakIterator = "com.sun.star.i18n.BreakIterator_CJK"; } diff --git a/i18npool/source/breakiterator/breakiterator_ctl.cxx b/i18npool/source/breakiterator/breakiterator_ctl.cxx index a42014615f1a..0e1bee869cac 100644 --- a/i18npool/source/breakiterator/breakiterator_ctl.cxx +++ b/i18npool/source/breakiterator/breakiterator_ctl.cxx @@ -45,11 +45,14 @@ namespace com { namespace sun { namespace star { namespace i18n { /** * Constructor. */ -BreakIterator_CTL::BreakIterator_CTL() +BreakIterator_CTL::BreakIterator_CTL() : + cachedText(), + nextCellIndex( NULL ), + previousCellIndex( NULL ), + cellIndexSize( 512 ) { cBreakIterator = "com.sun.star.i18n.BreakIterator_CTL"; // to improve performance, alloc big enough memory in construct. - cellIndexSize = 512; nextCellIndex = (sal_Int32*) calloc(cellIndexSize, sizeof(sal_Int32)); previousCellIndex = (sal_Int32*) calloc(cellIndexSize, sizeof(sal_Int32)); memset(nextCellIndex, 0, cellIndexSize * sizeof(sal_Int32)); diff --git a/i18npool/source/breakiterator/breakiterator_unicode.cxx b/i18npool/source/breakiterator/breakiterator_unicode.cxx index b832bb02e7e9..f0710c996858 100644 --- a/i18npool/source/breakiterator/breakiterator_unicode.cxx +++ b/i18npool/source/breakiterator/breakiterator_unicode.cxx @@ -51,20 +51,23 @@ namespace com { namespace sun { namespace star { namespace i18n { #define ERROR ::com::sun::star::uno::RuntimeException() -#define ImplementName "com.sun.star.i18n.BreakIterator_Unicode"; - - -BreakIterator_Unicode::BreakIterator_Unicode() +//#define ImplementName "com.sun.star.i18n.BreakIterator_Unicode"; + + +BreakIterator_Unicode::BreakIterator_Unicode() : + cBreakIterator( "com.sun.star.i18n.BreakIterator_Unicode" ), // implementation name + wordRule( "word" ), + lineRule( "line" ), + result(), + character(), + word(), + sentence(), + line(), + icuBI( NULL ), + aLocale(), + aBreakType(), + aWordType() { - wordRule="word"; - lineRule="line"; - character.aBreakIterator=word.aBreakIterator=sentence.aBreakIterator=line.aBreakIterator=NULL; - character.aICUText=UnicodeString(); - word.aICUText=UnicodeString(); - sentence.aICUText=UnicodeString(); - line.aICUText=UnicodeString(); - cBreakIterator = ImplementName; - icuBI=NULL; } diff --git a/i18npool/source/breakiterator/data/dict_word.txt b/i18npool/source/breakiterator/data/dict_word.txt index 4c5c80823041..367a82db9e6f 100644 --- a/i18npool/source/breakiterator/data/dict_word.txt +++ b/i18npool/source/breakiterator/data/dict_word.txt @@ -34,7 +34,8 @@ $ALetter = [\u0002 [:Alphabetic:] [:name= COMMERCIAL AT:] [:name= HEBREW PUNCT $MidLetter = [[:name = APOSTROPHE:] [:name = GRAVE ACCENT:] \u0084 [:name = SOFT HYPHEN:] [:name = MIDDLE DOT:] [:name = GREEK TONOS:] [:name= FULL STOP:] [:name = HEBREW PUNCTUATION GERSHAYIM:] [:name = DOUBLE VERTICAL LINE:] [:name = LEFT SINGLE QUOTATION MARK:] - [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:] ]; + [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:] + [:name = HYPHEN-MINUS:] [:name = EN DASH:] [:name = EM DASH:] ]; $SufixLetter = [:name= FULL STOP:]; diff --git a/i18npool/source/breakiterator/data/dict_word_dash.txt b/i18npool/source/breakiterator/data/dict_word_dash.txt deleted file mode 100644 index 7f861c7911ca..000000000000 --- a/i18npool/source/breakiterator/data/dict_word_dash.txt +++ /dev/null @@ -1,148 +0,0 @@ -# -# Copyright (C) 2002-2003, International Business Machines Corporation and others. -# All Rights Reserved. -# -# file: dict_word.txt -# -# ICU Word Break Rules -# See Unicode Standard Annex #29. -# These rules are based on Version 4.0.0, dated 2003-04-17 -# - - - -#################################################################################### -# -# Character class definitions from TR 29 -# -#################################################################################### -$Katakana = [[:Script = KATAKANA:] [:name = KATAKANA-HIRAGANA PROLONGED SOUND MARK:] - [:name = HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK:] - [:name = HALFWIDTH KATAKANA VOICED SOUND MARK:] - [:name = HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK:]]; - -$Ideographic = [:Ideographic:]; -$Hangul = [:Script = HANGUL:]; - -$ALetter = [\u0002 [:Alphabetic:] [:name= COMMERCIAL AT:] [:name= HEBREW PUNCTUATION GERESH:] - - $Ideographic - - $Katakana - - $Hangul - - [:Script = Thai:] - - [:Script = Lao:] - - [:Script = Hiragana:]]; - -$MidLetter = [[:name = APOSTROPHE:] [:name = GRAVE ACCENT:] \u0084 [:name = SOFT HYPHEN:] [:name = MIDDLE DOT:] [:name = GREEK TONOS:] [:name= FULL STOP:] - [:name = HEBREW PUNCTUATION GERSHAYIM:] [:name = DOUBLE VERTICAL LINE:] [:name = LEFT SINGLE QUOTATION MARK:] - [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:] - [:name = HYPHEN-MINUS:] [:name = EN DASH:] ]; - -$SufixLetter = [:name= FULL STOP:]; - - -$MidNum = [[:LineBreak = Infix_Numeric:] [:name= COMMERCIAL AT:] \u0084 [:name = GREEK TONOS:] [:name = ARABIC DECIMAL SEPARATOR:] - [:name = LEFT SINGLE QUOTATION MARK:] [:name = RIGHT SINGLE QUOTATION MARK:] [:name = SINGLE HIGH-REVERSED-9 QUOTATION MARK:] - [:name = PRIME:]]; -$Numeric = [:LineBreak = Numeric:]; - - -$TheZWSP = \u200b; - -# -# Character Class Definitions. -# The names are those from TR29. -# -$CR = \u000d; -$LF = \u000a; -$Control = [[[:Zl:] [:Zp:] [:Cc:] [:Cf:]] - $TheZWSP]; -$Extend = [[:Grapheme_Extend = TRUE:]]; - - - - -#################################################################################### -# -# Word Break Rules. Definitions and Rules specific to word break begin Here. -# -#################################################################################### - -$Format = [[:Cf:] - $TheZWSP]; - - - -# Rule 3: Treat a grapheme cluster as if it were a single character. -# Hangul Syllables are easier to deal with here than they are in Grapheme Clusters -# because we don't need to find the boundaries between adjacent syllables - -# they won't be word boundaries. -# - - -# -# "Extended" definitions. Grapheme Cluster + Format Chars, treated like the base char. -# -$ALetterEx = $ALetter $Extend*; -$NumericEx = $Numeric $Extend*; -$MidNumEx = $MidNum $Extend*; -$MidLetterEx = $MidLetter $Extend*; -$SufixLetterEx= $SufixLetter $Extend*; -$KatakanaEx = $Katakana $Extend*; -$IdeographicEx= $Ideographic $Extend*; -$HangulEx = $Hangul $Extend*; -$FormatEx = $Format $Extend*; - - -# -# Numbers. Rules 8, 11, 12 form the TR. -# -$NumberSequence = $NumericEx ($FormatEx* $MidNumEx? $FormatEx* $NumericEx)*; -$NumberSequence {100}; - -# -# Words. Alpha-numerics. Rule 5, 6, 7, 9, 10 -# - must include at least one letter. -# - may include both letters and numbers. -# - may include MideLetter, MidNumber punctuation. -# -$LetterSequence = $ALetterEx ($FormatEx* $MidLetterEx? $FormatEx* $ALetterEx)*; # rules #6, #7 -($NumberSequence $FormatEx*)? $LetterSequence ($FormatEx* ($NumberSequence | $LetterSequence))* $SufixLetterEx? {200}; - -[[:P:][:S:]]*; - -# -# Do not break between Katakana. Rule #13. -# -$KatakanaEx ($FormatEx* $KatakanaEx)* {300}; -[:Hiragana:] $Extend* {300}; - -# -# Ideographic Characters. Stand by themselves as words. -# Separated from the "Everything Else" rule, below, only so that they -# can be tagged with a return value. TODO: is this what we want? -# -$IdeographicEx ($FormatEx* $IdeographicEx)* {400}; -$HangulEx ($FormatEx* $HangulEx)* {400}; - -# -# Everything Else, with no tag. -# Non-Control chars combine with $Extend (combining) chars. -# Controls are do not. -# -[^$Control [:Ideographic:]] $Extend*; -$CR $LF; - -# -# Reverse Rules. Back up over any of the chars that can group together. -# (Reverse rules do not need to be exact; they can back up too far, -# but must back up at least enough, and must stop on a boundary.) -# - -# NonStarters are the set of all characters that can appear at the 2nd - nth position of -# a word. (They may also be the first.) The reverse rule skips over these, until it -# reaches something that can only be the start (and probably only) char in a "word". -# A space or punctuation meets the test. -# -$NonStarters = [$Numeric $ALetter $Katakana $Ideographic $Hangul [:P:] [:S:] $MidLetter $MidNum $SufixLetter $Extend $Format]; - -#!.*; -! ($NonStarters* | \n \r) .; - diff --git a/i18npool/source/breakiterator/data/dict_word_nodash.txt b/i18npool/source/breakiterator/data/dict_word_nodash.txt new file mode 100644 index 000000000000..4c5c80823041 --- /dev/null +++ b/i18npool/source/breakiterator/data/dict_word_nodash.txt @@ -0,0 +1,147 @@ +# +# Copyright (C) 2002-2003, International Business Machines Corporation and others. +# All Rights Reserved. +# +# file: dict_word.txt +# +# ICU Word Break Rules +# See Unicode Standard Annex #29. +# These rules are based on Version 4.0.0, dated 2003-04-17 +# + + + +#################################################################################### +# +# Character class definitions from TR 29 +# +#################################################################################### +$Katakana = [[:Script = KATAKANA:] [:name = KATAKANA-HIRAGANA PROLONGED SOUND MARK:] + [:name = HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK:] + [:name = HALFWIDTH KATAKANA VOICED SOUND MARK:] + [:name = HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK:]]; + +$Ideographic = [:Ideographic:]; +$Hangul = [:Script = HANGUL:]; + +$ALetter = [\u0002 [:Alphabetic:] [:name= COMMERCIAL AT:] [:name= HEBREW PUNCTUATION GERESH:] + - $Ideographic + - $Katakana + - $Hangul + - [:Script = Thai:] + - [:Script = Lao:] + - [:Script = Hiragana:]]; + +$MidLetter = [[:name = APOSTROPHE:] [:name = GRAVE ACCENT:] \u0084 [:name = SOFT HYPHEN:] [:name = MIDDLE DOT:] [:name = GREEK TONOS:] [:name= FULL STOP:] + [:name = HEBREW PUNCTUATION GERSHAYIM:] [:name = DOUBLE VERTICAL LINE:] [:name = LEFT SINGLE QUOTATION MARK:] + [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:] ]; + +$SufixLetter = [:name= FULL STOP:]; + + +$MidNum = [[:LineBreak = Infix_Numeric:] [:name= COMMERCIAL AT:] \u0084 [:name = GREEK TONOS:] [:name = ARABIC DECIMAL SEPARATOR:] + [:name = LEFT SINGLE QUOTATION MARK:] [:name = RIGHT SINGLE QUOTATION MARK:] [:name = SINGLE HIGH-REVERSED-9 QUOTATION MARK:] + [:name = PRIME:]]; +$Numeric = [:LineBreak = Numeric:]; + + +$TheZWSP = \u200b; + +# +# Character Class Definitions. +# The names are those from TR29. +# +$CR = \u000d; +$LF = \u000a; +$Control = [[[:Zl:] [:Zp:] [:Cc:] [:Cf:]] - $TheZWSP]; +$Extend = [[:Grapheme_Extend = TRUE:]]; + + + + +#################################################################################### +# +# Word Break Rules. Definitions and Rules specific to word break begin Here. +# +#################################################################################### + +$Format = [[:Cf:] - $TheZWSP]; + + + +# Rule 3: Treat a grapheme cluster as if it were a single character. +# Hangul Syllables are easier to deal with here than they are in Grapheme Clusters +# because we don't need to find the boundaries between adjacent syllables - +# they won't be word boundaries. +# + + +# +# "Extended" definitions. Grapheme Cluster + Format Chars, treated like the base char. +# +$ALetterEx = $ALetter $Extend*; +$NumericEx = $Numeric $Extend*; +$MidNumEx = $MidNum $Extend*; +$MidLetterEx = $MidLetter $Extend*; +$SufixLetterEx= $SufixLetter $Extend*; +$KatakanaEx = $Katakana $Extend*; +$IdeographicEx= $Ideographic $Extend*; +$HangulEx = $Hangul $Extend*; +$FormatEx = $Format $Extend*; + + +# +# Numbers. Rules 8, 11, 12 form the TR. +# +$NumberSequence = $NumericEx ($FormatEx* $MidNumEx? $FormatEx* $NumericEx)*; +$NumberSequence {100}; + +# +# Words. Alpha-numerics. Rule 5, 6, 7, 9, 10 +# - must include at least one letter. +# - may include both letters and numbers. +# - may include MideLetter, MidNumber punctuation. +# +$LetterSequence = $ALetterEx ($FormatEx* $MidLetterEx? $FormatEx* $ALetterEx)*; # rules #6, #7 +($NumberSequence $FormatEx*)? $LetterSequence ($FormatEx* ($NumberSequence | $LetterSequence))* $SufixLetterEx? {200}; + +[[:P:][:S:]]*; + +# +# Do not break between Katakana. Rule #13. +# +$KatakanaEx ($FormatEx* $KatakanaEx)* {300}; +[:Hiragana:] $Extend* {300}; + +# +# Ideographic Characters. Stand by themselves as words. +# Separated from the "Everything Else" rule, below, only so that they +# can be tagged with a return value. TODO: is this what we want? +# +$IdeographicEx ($FormatEx* $IdeographicEx)* {400}; +$HangulEx ($FormatEx* $HangulEx)* {400}; + +# +# Everything Else, with no tag. +# Non-Control chars combine with $Extend (combining) chars. +# Controls are do not. +# +[^$Control [:Ideographic:]] $Extend*; +$CR $LF; + +# +# Reverse Rules. Back up over any of the chars that can group together. +# (Reverse rules do not need to be exact; they can back up too far, +# but must back up at least enough, and must stop on a boundary.) +# + +# NonStarters are the set of all characters that can appear at the 2nd - nth position of +# a word. (They may also be the first.) The reverse rule skips over these, until it +# reaches something that can only be the start (and probably only) char in a "word". +# A space or punctuation meets the test. +# +$NonStarters = [$Numeric $ALetter $Katakana $Ideographic $Hangul [:P:] [:S:] $MidLetter $MidNum $SufixLetter $Extend $Format]; + +#!.*; +! ($NonStarters* | \n \r) .; + diff --git a/i18npool/source/breakiterator/data/dict_word_prepostdash.txt b/i18npool/source/breakiterator/data/dict_word_prepostdash.txt new file mode 100644 index 000000000000..1bf94451fae2 --- /dev/null +++ b/i18npool/source/breakiterator/data/dict_word_prepostdash.txt @@ -0,0 +1,157 @@ +# +# Copyright (C) 2002-2003, International Business Machines Corporation and others. +# All Rights Reserved. +# +# file: dict_word.txt +# +# ICU Word Break Rules +# See Unicode Standard Annex #29. +# These rules are based on Version 4.0.0, dated 2003-04-17 +# + + + +#################################################################################### +# +# Character class definitions from TR 29 +# +#################################################################################### +$Katakana = [[:Script = KATAKANA:] [:name = KATAKANA-HIRAGANA PROLONGED SOUND MARK:] + [:name = HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK:] + [:name = HALFWIDTH KATAKANA VOICED SOUND MARK:] + [:name = HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK:]]; + +$Ideographic = [:Ideographic:]; +$Hangul = [:Script = HANGUL:]; + +# list of dashes or hyphens that should be accepted as part of the word if a single one of these +# pre- or postfixes a word. E.g. in German: "Arbeits-" or "-nehmer" where that hyphen needs to +# be part of the word in order to have it properly spell checked etc. +$PrePostDashHyphen = [ [:name = HYPHEN-MINUS:] [:name = EN DASH:] [:name = EM DASH:] ]; + + +$ALetter = [\u0002 [:Alphabetic:] [:name= COMMERCIAL AT:] [:name= HEBREW PUNCTUATION GERESH:] + - $Ideographic + - $Katakana + - $Hangul + - [:Script = Thai:] + - [:Script = Lao:] + - [:Script = Hiragana:]]; + +$MidLetter = [[:name = APOSTROPHE:] [:name = GRAVE ACCENT:] \u0084 [:name = SOFT HYPHEN:] [:name = MIDDLE DOT:] [:name = GREEK TONOS:] [:name= FULL STOP:] + [:name = HEBREW PUNCTUATION GERSHAYIM:] [:name = DOUBLE VERTICAL LINE:] [:name = LEFT SINGLE QUOTATION MARK:] + [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:] + [:name = HYPHEN-MINUS:] [:name = EN DASH:] [:name = EM DASH:] ]; + +$SufixLetter = [:name= FULL STOP:]; + + +$MidNum = [[:LineBreak = Infix_Numeric:] [:name= COMMERCIAL AT:] \u0084 [:name = GREEK TONOS:] [:name = ARABIC DECIMAL SEPARATOR:] + [:name = LEFT SINGLE QUOTATION MARK:] [:name = RIGHT SINGLE QUOTATION MARK:] [:name = SINGLE HIGH-REVERSED-9 QUOTATION MARK:] + [:name = PRIME:]]; +$Numeric = [:LineBreak = Numeric:]; + + +$TheZWSP = \u200b; + +# +# Character Class Definitions. +# The names are those from TR29. +# +$CR = \u000d; +$LF = \u000a; +$Control = [[[:Zl:] [:Zp:] [:Cc:] [:Cf:]] - $TheZWSP]; +$Extend = [[:Grapheme_Extend = TRUE:]]; + + + + +#################################################################################### +# +# Word Break Rules. Definitions and Rules specific to word break begin Here. +# +#################################################################################### + +$Format = [[:Cf:] - $TheZWSP]; + + + +# Rule 3: Treat a grapheme cluster as if it were a single character. +# Hangul Syllables are easier to deal with here than they are in Grapheme Clusters +# because we don't need to find the boundaries between adjacent syllables - +# they won't be word boundaries. +# + + +# +# "Extended" definitions. Grapheme Cluster + Format Chars, treated like the base char. +# +$ALetterEx = $ALetter $Extend*; +$NumericEx = $Numeric $Extend*; +$MidNumEx = $MidNum $Extend*; +$MidLetterEx = $MidLetter $Extend*; +$SufixLetterEx= $SufixLetter $Extend*; +$KatakanaEx = $Katakana $Extend*; +$IdeographicEx= $Ideographic $Extend*; +$HangulEx = $Hangul $Extend*; +$FormatEx = $Format $Extend*; + + +# +# Numbers. Rules 8, 11, 12 form the TR. +# +$NumberSequence = $NumericEx ($FormatEx* $MidNumEx? $FormatEx* $NumericEx)*; +$NumberSequence {100}; + +# +# Words. Alpha-numerics. Rule 5, 6, 7, 9, 10 +# - must include at least one letter. +# - may include both letters and numbers. +# - may include MideLetter, MidNumber punctuation. +# +# At most one leading or trailing dash/hyphen should be accepted as well. +# E.g. in German: "Arbeits-" or "-nehmer" where that hyphen needs to +# be part of the word in order to have it properly spell checked etc. +$LetterSequence = $PrePostDashHyphen? $ALetterEx ($FormatEx* $MidLetterEx? $FormatEx* $ALetterEx)* $PrePostDashHyphen?; # rules #6, #7 +($NumberSequence $FormatEx*)? $LetterSequence ($FormatEx* ($NumberSequence | $LetterSequence))* $SufixLetterEx? {200}; + +[[:P:][:S:]]*; + +# +# Do not break between Katakana. Rule #13. +# +$KatakanaEx ($FormatEx* $KatakanaEx)* {300}; +[:Hiragana:] $Extend* {300}; + +# +# Ideographic Characters. Stand by themselves as words. +# Separated from the "Everything Else" rule, below, only so that they +# can be tagged with a return value. TODO: is this what we want? +# +$IdeographicEx ($FormatEx* $IdeographicEx)* {400}; +$HangulEx ($FormatEx* $HangulEx)* {400}; + +# +# Everything Else, with no tag. +# Non-Control chars combine with $Extend (combining) chars. +# Controls are do not. +# +[^$Control [:Ideographic:]] $Extend*; +$CR $LF; + +# +# Reverse Rules. Back up over any of the chars that can group together. +# (Reverse rules do not need to be exact; they can back up too far, +# but must back up at least enough, and must stop on a boundary.) +# + +# NonStarters are the set of all characters that can appear at the 2nd - nth position of +# a word. (They may also be the first.) The reverse rule skips over these, until it +# reaches something that can only be the start (and probably only) char in a "word". +# A space or punctuation meets the test. +# +$NonStarters = [$Numeric $ALetter $Katakana $Ideographic $Hangul [:P:] [:S:] $MidLetter $MidNum $SufixLetter $Extend $Format]; + +#!.*; +! ($NonStarters* | \n \r) .; + diff --git a/i18npool/source/breakiterator/makefile.mk b/i18npool/source/breakiterator/makefile.mk index 7ba9cd3e753d..50e437e98b91 100644 --- a/i18npool/source/breakiterator/makefile.mk +++ b/i18npool/source/breakiterator/makefile.mk @@ -93,7 +93,7 @@ $(MISC)$/%_brk.c : $(MISC)$/%.brk # The output of gencmn generates warnings under Windows. We want to minimize the patches to external tools, # so the output (OpenOffice_icu_dat.c) is changed here to include a pragma to disable the warnings. # Output of gencmn is redirected to OpenOffice_icu_tmp.c with the -t switch. -$(MISC)$/OpenOffice_%.c : +$(MISC)$/OpenOffice_%.c : $(MY_BRK_BRKFILES:s/.brk/_brk.c/) $(WRAPCMD) $(GENCMN) -n OpenOffice -t tmp -S -d $(MISC) O $(mktmp $(subst,$(MISC)$/, $(MY_BRK_BRKFILES:t"\n"))) echo $(USQ)#ifdef _MSC_VER$(USQ) > $@ echo $(USQ)#pragma warning( disable : 4229 4668 )$(USQ) >> $@ diff --git a/i18npool/source/breakiterator/xdictionary.cxx b/i18npool/source/breakiterator/xdictionary.cxx index fb832f0b6468..f286dd2449ac 100644 --- a/i18npool/source/breakiterator/xdictionary.cxx +++ b/i18npool/source/breakiterator/xdictionary.cxx @@ -54,7 +54,21 @@ namespace com { namespace sun { namespace star { namespace i18n { extern "C" { static void SAL_CALL thisModule() {} } -xdictionary::xdictionary(const sal_Char *lang) +xdictionary::xdictionary(const sal_Char *lang) : + existMark( NULL ), + index1( NULL ), + index2( NULL ), + lenArray( NULL ), + dataArea( NULL ), + hModule( NULL ), + boundary(), + japaneseWordBreak( sal_False ) +#if USE_CELL_BOUNDARY_CODE + // For CTL breakiterator, where the word boundary should not be inside cell. + , + useCellBoundary( sal_False ), + cellBoundary( NULL ) +#endif { index1 = 0; #ifdef SAL_DLLPREFIX @@ -92,6 +106,7 @@ xdictionary::xdictionary(const sal_Char *lang) #if USE_CELL_BOUNDARY_CODE useCellBoundary = sal_False; + cellBoundary = NULL; #endif japaneseWordBreak = sal_False; } @@ -149,6 +164,19 @@ sal_Int32 xdictionary::getLongestMatch(const sal_Unicode* str, sal_Int32 sLen) { return 0; } + +/* + * c-tor + */ + +WordBreakCache::WordBreakCache() : + length( 0 ), + contents( NULL ), + wordboundary( NULL ), + size( 0 ) +{ +} + /* * Compare two unicode string, */ diff --git a/i18npool/source/localedata/data/de_DE.xml b/i18npool/source/localedata/data/de_DE.xml index 295b826a5e9f..a83b3dbb791d 100644 --- a/i18npool/source/localedata/data/de_DE.xml +++ b/i18npool/source/localedata/data/de_DE.xml @@ -328,7 +328,14 @@ - + + + dict_word_prepostdash + + + + + wahr falsch 1. Quartal diff --git a/i18npool/source/localedata/data/nl_NL.xml b/i18npool/source/localedata/data/nl_NL.xml index eedfdc146b5e..5a91c9c3e42e 100644 --- a/i18npool/source/localedata/data/nl_NL.xml +++ b/i18npool/source/localedata/data/nl_NL.xml @@ -360,20 +360,27 @@ - -waar -onwaar -1ste kwartaal -2de kwartaal -3de kwartaal -4de kwartaal -boven -onder -K1 -K2 -K3 -K4 - + + + dict_word_prepostdash + + + + + + waar + onwaar + 1ste kwartaal + 2de kwartaal + 3de kwartaal + 4de kwartaal + boven + onder + K1 + K2 + K3 + K4 + diff --git a/i18npool/source/localedata/data/pl_PL.xml b/i18npool/source/localedata/data/pl_PL.xml index 4119060ea7df..195689666247 100644 --- a/i18npool/source/localedata/data/pl_PL.xml +++ b/i18npool/source/localedata/data/pl_PL.xml @@ -326,13 +326,6 @@ - - - dict_word_dash - - - - prawda fałsz diff --git a/i18npool/source/localedata/data/sv_SE.xml b/i18npool/source/localedata/data/sv_SE.xml index 333690a0ef09..211f95c3e894 100644 --- a/i18npool/source/localedata/data/sv_SE.xml +++ b/i18npool/source/localedata/data/sv_SE.xml @@ -315,6 +315,13 @@ + + + dict_word_prepostdash + + + + sant falskt -- cgit v1.2.3 From 782ba886a2c93f86acdfa681a52b5315f1380a6e Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Fri, 7 Aug 2009 10:16:34 +0000 Subject: CWS-TOOLING: integrate CWS kde4int 2009-07-15 10:40:52 +0200 pl r273993 : #i103288# configure 2009-07-09 14:57:24 +0200 pl r273867 : #i103284# spin fields 2009-07-09 13:49:13 +0200 pl r273864 : #i103284# min size for dropdown comboboxes 2009-07-09 13:46:11 +0200 pl r273860 : #i103284# min size fro dropdown listboxes 2009-07-09 13:01:48 +0200 pl r273857 : #i103284# fix most radiobuttons and checboxes, also on tabpages 2009-07-08 19:38:12 +0200 pl r273847 : #i103290# clean up, enable KDE4 fpicker 2009-07-08 15:54:06 +0200 pl r273837 : #i103284# background mode opaque doesn't look that good 2009-07-07 19:29:01 +0200 pl r273814 : add kde4 directory and deliverables 2009-07-07 11:18:08 +0200 pl r273786 : make compile with Qt 4.1 2009-07-02 19:20:47 +0200 pl r273673 : #i103290# add: KDE4 file picker (thanks Roman Shtylman) 2009-07-02 19:16:07 +0200 pl r273672 : #i103289# add: KDE4integration (thanks Roman Shtylman) 2009-07-02 19:01:20 +0200 pl r273671 : #i103286# add: KDE4 checks (thanks Roman Shtylman) 2009-07-02 18:58:15 +0200 pl r273670 : #i103286# initial import for KDE4 backend (thanks Roman Shtylman) 2009-07-02 18:08:06 +0200 pl r273668 : #i103284# initial import for KDE4 plugin (thanks Roman Shtylman) --- vcl/prj/build.lst | 3 +- vcl/source/control/combobox.cxx | 28 +- vcl/source/control/lstbox.cxx | 4 +- vcl/source/window/tabpage.cxx | 2 + vcl/unx/kde4/KDEData.cxx | 52 +++ vcl/unx/kde4/KDEData.hxx | 42 ++ vcl/unx/kde4/KDESalDisplay.cxx | 45 ++ vcl/unx/kde4/KDESalDisplay.hxx | 37 ++ vcl/unx/kde4/KDESalFrame.cxx | 409 +++++++++++++++++ vcl/unx/kde4/KDESalFrame.hxx | 58 +++ vcl/unx/kde4/KDESalGraphics.cxx | 819 +++++++++++++++++++++++++++++++++++ vcl/unx/kde4/KDESalGraphics.hxx | 114 +++++ vcl/unx/kde4/KDESalInstance.cxx | 35 ++ vcl/unx/kde4/KDESalInstance.hxx | 41 ++ vcl/unx/kde4/KDEXLib.cxx | 171 ++++++++ vcl/unx/kde4/KDEXLib.hxx | 48 ++ vcl/unx/kde4/VCLKDEApplication.cxx | 52 +++ vcl/unx/kde4/VCLKDEApplication.hxx | 53 +++ vcl/unx/kde4/main.cxx | 83 ++++ vcl/unx/kde4/makefile.mk | 92 ++++ vcl/unx/source/plugadapt/salplug.cxx | 133 +++--- vcl/util/makefile.mk | 31 +- 22 files changed, 2259 insertions(+), 93 deletions(-) create mode 100644 vcl/unx/kde4/KDEData.cxx create mode 100644 vcl/unx/kde4/KDEData.hxx create mode 100644 vcl/unx/kde4/KDESalDisplay.cxx create mode 100644 vcl/unx/kde4/KDESalDisplay.hxx create mode 100644 vcl/unx/kde4/KDESalFrame.cxx create mode 100644 vcl/unx/kde4/KDESalFrame.hxx create mode 100644 vcl/unx/kde4/KDESalGraphics.cxx create mode 100644 vcl/unx/kde4/KDESalGraphics.hxx create mode 100644 vcl/unx/kde4/KDESalInstance.cxx create mode 100644 vcl/unx/kde4/KDESalInstance.hxx create mode 100644 vcl/unx/kde4/KDEXLib.cxx create mode 100644 vcl/unx/kde4/KDEXLib.hxx create mode 100644 vcl/unx/kde4/VCLKDEApplication.cxx create mode 100644 vcl/unx/kde4/VCLKDEApplication.hxx create mode 100644 vcl/unx/kde4/main.cxx create mode 100644 vcl/unx/kde4/makefile.mk diff --git a/vcl/prj/build.lst b/vcl/prj/build.lst index aea5211d074a..3af135dd760b 100644 --- a/vcl/prj/build.lst +++ b/vcl/prj/build.lst @@ -32,6 +32,7 @@ vc vcl\unx\gtk\window nmake - u vc__gtkw vc_inc NULL vc vcl\unx\gtk\gdi nmake - u vc__gtkg vc_inc NULL vc vcl\unx\headless nmake - u vc__hl vc_inc NULL vc vcl\unx\kde nmake - u vc__kde vc_inc NULL +vc vcl\unx\kde4 nmake - u vc__kde4 vc_inc NULL vc vcl\aqua\source\a11y nmake - u vc__aquy vc_inc NULL vc vcl\aqua\source\app nmake - u vc__appa vc_inc NULL vc vcl\aqua\source\gdi nmake - u vc__gdia vc_inc NULL @@ -41,6 +42,6 @@ vc vcl\mac\source\app nmake - m vc__appm vc_inc NULL vc vcl\mac\source\gdi nmake - m vc__gdim vc_inc NULL vc vcl\mac\source\window nmake - m vc__winm vc_inc NULL vc vcl\mac\source\src nmake - m vc__srcm vc_inc NULL -vc vcl\util nmake - all vc_util vc__plug.u vc__aquy.u vc__appa.u vc__appm.m vc__appu.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL +vc vcl\util nmake - all vc_util vc__plug.u vc__aquy.u vc__appa.u vc__appm.m vc__appu.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL vc vcl\util\linksvp nmake - u vc_lsvp vc_util NULL vc vcl\workben nmake - all vc_wrkb vc_util vc_salmain NULL diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx index 309acb404750..49c7e5457da7 100644 --- a/vcl/source/control/combobox.cxx +++ b/vcl/source/control/combobox.cxx @@ -142,23 +142,19 @@ void ComboBox::ImplCalcEditHeight() if ( !IsDropDownBox() ) mnDDHeight += 4; - // FIXME: currently only on aqua; see if we can use this on other platforms - if( ImplGetSVData()->maNWFData.mbNoFocusRects ) + Region aCtrlRegion( Rectangle( (const Point&)Point(), Size( 10, 10 ) ) ); + Region aBoundRegion, aContentRegion; + ImplControlValue aControlValue; + ControlType aType = IsDropDownBox() ? CTRL_COMBOBOX : CTRL_EDITBOX; + if( GetNativeControlRegion( aType, PART_ENTIRE_CONTROL, + aCtrlRegion, + CTRL_STATE_ENABLED, + aControlValue, rtl::OUString(), + aBoundRegion, aContentRegion ) ) { - Region aCtrlRegion( Rectangle( (const Point&)Point(), Size( 10, 10 ) ) ); - Region aBoundRegion, aContentRegion; - ImplControlValue aControlValue; - ControlType aType = IsDropDownBox() ? CTRL_COMBOBOX : CTRL_EDITBOX; - if( GetNativeControlRegion( aType, PART_ENTIRE_CONTROL, - aCtrlRegion, - CTRL_STATE_ENABLED, - aControlValue, rtl::OUString(), - aBoundRegion, aContentRegion ) ) - { - const long nNCHeight = aBoundRegion.GetBoundRect().GetHeight(); - if( mnDDHeight < nNCHeight ) - mnDDHeight = sal::static_int_cast( nNCHeight ); - } + const long nNCHeight = aBoundRegion.GetBoundRect().GetHeight(); + if( mnDDHeight < nNCHeight ) + mnDDHeight = sal::static_int_cast( nNCHeight ); } } diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx index 641665aacf6b..a5e9ff1cc7d0 100644 --- a/vcl/source/control/lstbox.cxx +++ b/vcl/source/control/lstbox.cxx @@ -127,9 +127,7 @@ void ListBox::ImplInit( Window* pParent, WinBits nStyle ) GetBorder( nLeft, nTop, nRight, nBottom ); mnDDHeight = (USHORT)(GetTextHeight() + nTop + nBottom + 4); - // FIXME: this is currently only on mac/aqua - if( ImplGetSVData()->maNWFData.mbNoFocusRects && - IsNativeWidgetEnabled() && + if( IsNativeWidgetEnabled() && IsNativeControlSupported( CTRL_LISTBOX, PART_ENTIRE_CONTROL ) ) { ImplControlValue aControlValue; diff --git a/vcl/source/window/tabpage.cxx b/vcl/source/window/tabpage.cxx index 57eec66e705a..e28026876fad 100644 --- a/vcl/source/window/tabpage.cxx +++ b/vcl/source/window/tabpage.cxx @@ -121,6 +121,8 @@ void TabPage::StateChanged( StateChangedType nType ) { if ( GetSettings().GetStyleSettings().GetAutoMnemonic() ) ImplWindowAutoMnemonic( this ); + // FIXME: no layouting, workaround some clipping issues + ImplAdjustNWFSizes(); } else if ( nType == STATE_CHANGE_CONTROLBACKGROUND ) { diff --git a/vcl/unx/kde4/KDEData.cxx b/vcl/unx/kde4/KDEData.cxx new file mode 100644 index 000000000000..07a10c60d933 --- /dev/null +++ b/vcl/unx/kde4/KDEData.cxx @@ -0,0 +1,52 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "KDEData.hxx" + +#include "KDEXLib.hxx" + +KDEData::~KDEData() +{ +} + +void KDEData::Init() +{ + pXLib_ = new KDEXLib(); + pXLib_->Init(); +} + +void KDEData::initNWF() +{ + ImplSVData *pSVData = ImplGetSVData(); + + // draw toolbars on separate lines + pSVData->maNWFData.mbDockingAreaSeparateTB = true; +} + +void KDEData::deInitNWF() +{ +} \ No newline at end of file diff --git a/vcl/unx/kde4/KDEData.hxx b/vcl/unx/kde4/KDEData.hxx new file mode 100644 index 000000000000..68645abc28d3 --- /dev/null +++ b/vcl/unx/kde4/KDEData.hxx @@ -0,0 +1,42 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#pragma once + +#include +#include + +class KDEData : public X11SalData +{ + public: + KDEData() {} + virtual ~KDEData(); + + virtual void Init(); + virtual void initNWF(); + virtual void deInitNWF(); +}; \ No newline at end of file diff --git a/vcl/unx/kde4/KDESalDisplay.cxx b/vcl/unx/kde4/KDESalDisplay.cxx new file mode 100644 index 000000000000..61044c3de71b --- /dev/null +++ b/vcl/unx/kde4/KDESalDisplay.cxx @@ -0,0 +1,45 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "KDESalDisplay.hxx" + +#include "KDEXLib.hxx" + +SalKDEDisplay::SalKDEDisplay( Display* pDisp ) + : SalX11Display( pDisp ) +{ +} + +SalKDEDisplay::~SalKDEDisplay() +{ + // in case never a frame opened + static_cast(GetXLib())->doStartup(); + // clean up own members + doDestruct(); + // prevent SalDisplay from closing KApplication's display + pDisp_ = NULL; +} \ No newline at end of file diff --git a/vcl/unx/kde4/KDESalDisplay.hxx b/vcl/unx/kde4/KDESalDisplay.hxx new file mode 100644 index 000000000000..ce294f45087d --- /dev/null +++ b/vcl/unx/kde4/KDESalDisplay.hxx @@ -0,0 +1,37 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#pragma once + +#include + +class SalKDEDisplay : public SalX11Display +{ + public: + SalKDEDisplay( Display* pDisp ); + virtual ~SalKDEDisplay(); +}; diff --git a/vcl/unx/kde4/KDESalFrame.cxx b/vcl/unx/kde4/KDESalFrame.cxx new file mode 100644 index 000000000000..ad8f467ee960 --- /dev/null +++ b/vcl/unx/kde4/KDESalFrame.cxx @@ -0,0 +1,409 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#define Region QtXRegion + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#undef Region + +#include "KDESalFrame.hxx" +#include "KDEXLib.hxx" +#include "KDESalGraphics.hxx" + +#include +#include +#include + +#include + +#include + +#if OSL_DEBUG_LEVEL > 1 +#include +#endif + +KDESalFrame::KDESalFrame( SalFrame* pParent, ULONG nState ) : + X11SalFrame( pParent, nState ) +{ +} + +void KDESalFrame::Show( BOOL bVisible, BOOL bNoActivate ) +{ + if ( !GetParent() && ! (GetStyle() & SAL_FRAME_STYLE_INTRO) ) + { + KDEXLib* pXLib = static_cast(GetDisplay()->GetXLib()); + pXLib->doStartup(); + } + + X11SalFrame::Show( bVisible, bNoActivate ); +} + +/** Helper function to convert colors. +*/ +static Color toColor( const QColor &rColor ) +{ + return Color( rColor.red(), rColor.green(), rColor.blue() ); +} + +/** Helper function to read untranslated text entry from KConfig configuration repository. +*/ +static OUString readEntryUntranslated( KConfigGroup *pGroup, const char *pKey ) +{ + return OUString::createFromAscii( (const char *) pGroup->readEntryUntranslated( pKey ).toAscii() ); +} + +/** Helper function to read color from KConfig configuration repository. +*/ +static Color readColor( KConfigGroup *pGroup, const char *pKey ) +{ + return toColor( pGroup->readEntry( pKey, QColor(Qt::white) ) ); +} + +/** Helper function to add information to Font from QFont. + + Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx). +*/ +static Font toFont( const QFont &rQFont, const ::com::sun::star::lang::Locale& rLocale ) +{ + psp::FastPrintFontInfo aInfo; + QFontInfo qFontInfo( rQFont ); + + // set family name + aInfo.m_aFamilyName = String( (const char *) rQFont.family().toUtf8(), RTL_TEXTENCODING_UTF8 ); + + // set italic + aInfo.m_eItalic = ( qFontInfo.italic()? psp::italic::Italic: psp::italic::Upright ); + + // set weight + int nWeight = qFontInfo.weight(); + if ( nWeight <= QFont::Light ) + aInfo.m_eWeight = psp::weight::Light; + else if ( nWeight <= QFont::Normal ) + aInfo.m_eWeight = psp::weight::Normal; + else if ( nWeight <= QFont::DemiBold ) + aInfo.m_eWeight = psp::weight::SemiBold; + else if ( nWeight <= QFont::Bold ) + aInfo.m_eWeight = psp::weight::Bold; + else + aInfo.m_eWeight = psp::weight::UltraBold; + + // set width + int nStretch = rQFont.stretch(); + if ( nStretch <= QFont::UltraCondensed ) + aInfo.m_eWidth = psp::width::UltraCondensed; + else if ( nStretch <= QFont::ExtraCondensed ) + aInfo.m_eWidth = psp::width::ExtraCondensed; + else if ( nStretch <= QFont::Condensed ) + aInfo.m_eWidth = psp::width::Condensed; + else if ( nStretch <= QFont::SemiCondensed ) + aInfo.m_eWidth = psp::width::SemiCondensed; + else if ( nStretch <= QFont::Unstretched ) + aInfo.m_eWidth = psp::width::Normal; + else if ( nStretch <= QFont::SemiExpanded ) + aInfo.m_eWidth = psp::width::SemiExpanded; + else if ( nStretch <= QFont::Expanded ) + aInfo.m_eWidth = psp::width::Expanded; + else if ( nStretch <= QFont::ExtraExpanded ) + aInfo.m_eWidth = psp::width::ExtraExpanded; + else + aInfo.m_eWidth = psp::width::UltraExpanded; + +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "font name BEFORE system match: \"%s\"\n", OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); +#endif + + // match font to e.g. resolve "Sans" + psp::PrintFontManager::get().matchFont( aInfo, rLocale ); + +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "font match %s, name AFTER: \"%s\"\n", + aInfo.m_nID != 0 ? "succeeded" : "failed", + OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); +#endif + + // font height + int nPointHeight = qFontInfo.pointSize(); + if ( nPointHeight <= 0 ) + nPointHeight = rQFont.pointSize(); + + // Create the font + Font aFont( aInfo.m_aFamilyName, Size( 0, nPointHeight ) ); + if( aInfo.m_eWeight != psp::weight::Unknown ) + aFont.SetWeight( PspGraphics::ToFontWeight( aInfo.m_eWeight ) ); + if( aInfo.m_eWidth != psp::width::Unknown ) + aFont.SetWidthType( PspGraphics::ToFontWidth( aInfo.m_eWidth ) ); + if( aInfo.m_eItalic != psp::italic::Unknown ) + aFont.SetItalic( PspGraphics::ToFontItalic( aInfo.m_eItalic ) ); + if( aInfo.m_ePitch != psp::pitch::Unknown ) + aFont.SetPitch( PspGraphics::ToFontPitch( aInfo.m_ePitch ) ); + + return aFont; +} + +/** Implementation of KDE integration's main method. +*/ +void KDESalFrame::UpdateSettings( AllSettings& rSettings ) +{ + StyleSettings style( rSettings.GetStyleSettings() ); + BOOL bSetTitleFont = false; + + + // General settings + QPalette pal = kapp->palette(); + + style.SetActiveColor(toColor(pal.color(QPalette::Active, QPalette::Window))); + style.SetDeactiveColor(toColor(pal.color(QPalette::Inactive, QPalette::Window))); + + style.SetActiveColor2(toColor(pal.color(QPalette::Active, QPalette::Window))); + style.SetDeactiveColor2(toColor(pal.color(QPalette::Inactive, QPalette::Window))); + + style.SetActiveTextColor(toColor(pal.color(QPalette::Active, QPalette::WindowText))); + style.SetDeactiveTextColor(toColor(pal.color(QPalette::Inactive, QPalette::WindowText))); + + // WM settings + KConfig *pConfig = KGlobal::config().data(); + if ( pConfig ) + { + KConfigGroup aGroup = pConfig->group( "WM" ); + const char *pKey; + + pKey = "titleFont"; + if ( aGroup.hasKey( pKey ) ) + { + Font aFont = toFont( aGroup.readEntry( pKey, QFont() ), rSettings.GetUILocale() ); + style.SetTitleFont( aFont ); + bSetTitleFont = true; + } + + aGroup = pConfig->group( "Icons" ); + + pKey = "Theme"; + if ( aGroup.hasKey( pKey ) ) + style.SetPreferredSymbolsStyleName( readEntryUntranslated( &aGroup, pKey ) ); + } + + Color aFore = toColor( pal.color( QPalette::Active, QPalette::WindowText ) ); + Color aBack = toColor( pal.color( QPalette::Active, QPalette::Window ) ); + Color aText = toColor( pal.color( QPalette::Active, QPalette::Text ) ); + Color aBase = toColor( pal.color( QPalette::Active, QPalette::Base ) ); + Color aButn = toColor( pal.color( QPalette::Active, QPalette::ButtonText ) ); + Color aMid = toColor( pal.color( QPalette::Active, QPalette::Mid ) ); + Color aHigh = toColor( pal.color( QPalette::Active, QPalette::Highlight ) ); + + // Foreground + style.SetRadioCheckTextColor( aFore ); + style.SetLabelTextColor( aFore ); + style.SetInfoTextColor( aFore ); + style.SetDialogTextColor( aFore ); + style.SetGroupTextColor( aFore ); + + // Text + style.SetFieldTextColor( aText ); + style.SetFieldRolloverTextColor( aText ); + style.SetWindowTextColor( aText ); + style.SetHelpTextColor( aText ); + + // Base + style.SetFieldColor( aBase ); + style.SetHelpColor( aBase ); + style.SetWindowColor( aBase ); + style.SetActiveTabColor( aBase ); + + // Buttons + style.SetButtonTextColor( aButn ); + style.SetButtonRolloverTextColor( aButn ); + + // Disable color + style.SetDisableColor( aMid ); + + // Workspace + style.SetWorkspaceColor( aMid ); + + // Background + style.Set3DColors( aBack ); + style.SetFaceColor( aBack ); + style.SetInactiveTabColor( aBack ); + style.SetDialogColor( aBack ); + + if( aBack == COL_LIGHTGRAY ) + style.SetCheckedColor( Color( 0xCC, 0xCC, 0xCC ) ); + else + { + Color aColor2 = style.GetLightColor(); + style. + SetCheckedColor( Color( (BYTE)(((USHORT)aBack.GetRed()+(USHORT)aColor2.GetRed())/2), + (BYTE)(((USHORT)aBack.GetGreen()+(USHORT)aColor2.GetGreen())/2), + (BYTE)(((USHORT)aBack.GetBlue()+(USHORT)aColor2.GetBlue())/2) + ) ); + } + + // Selection + style.SetHighlightColor( aHigh ); + style.SetHighlightTextColor( toColor(pal.color( QPalette::HighlightedText)) ); + + // Font + Font aFont = toFont( kapp->font(), rSettings.GetUILocale() ); + + style.SetAppFont( aFont ); + style.SetHelpFont( aFont ); + + if( !bSetTitleFont ) + { + style.SetTitleFont( aFont ); + } + + style.SetFloatTitleFont( aFont ); + style.SetMenuFont( aFont ); // will be changed according to pMenuBar + style.SetToolFont( aFont ); // will be changed according to pToolBar + style.SetLabelFont( aFont ); + style.SetInfoFont( aFont ); + style.SetRadioCheckFont( aFont ); + style.SetPushButtonFont( aFont ); + style.SetFieldFont( aFont ); + style.SetIconFont( aFont ); + style.SetGroupFont( aFont ); + + int flash_time = QApplication::cursorFlashTime(); + style.SetCursorBlinkTime( flash_time != 0 ? flash_time/2 : STYLE_CURSOR_NOBLINKTIME ); + + KMainWindow qMainWindow; + + // Menu + style.SetSkipDisabledInMenus( TRUE ); + KMenuBar *pMenuBar = qMainWindow.menuBar(); + if ( pMenuBar ) + { + // Color + QPalette qMenuCG = pMenuBar->palette(); + + // Menu text and background color, theme specific + Color aMenuFore = toColor( qMenuCG.color( QPalette::WindowText ) ); + Color aMenuBack = toColor( qMenuCG.color( QPalette::Window ) ); + + aMenuFore = toColor( qMenuCG.color( QPalette::ButtonText ) ); + aMenuBack = toColor( qMenuCG.color( QPalette::Button ) ); + + style.SetMenuTextColor( aMenuFore ); + style.SetMenuColor( aMenuBack ); + style.SetMenuBarColor( aMenuBack ); + + style.SetMenuHighlightColor( toColor ( qMenuCG.color( QPalette::Highlight ) ) ); + + style.SetMenuHighlightTextColor( aMenuFore ); + + // set special menubar higlight text color + if ( kapp->style()->inherits( "HighContrastStyle" ) ) + ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = toColor( qMenuCG.color( QPalette::HighlightedText ) ); + else + ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = aMenuFore; + + // Font + aFont = toFont( pMenuBar->font(), rSettings.GetUILocale() ); + style.SetMenuFont( aFont ); + } + + // Tool bar + KToolBar *pToolBar = qMainWindow.toolBar(); + if ( pToolBar ) + { + aFont = toFont( pToolBar->font(), rSettings.GetUILocale() ); + style.SetToolFont( aFont ); + } + + // Scroll bar size + style.SetScrollBarSize( kapp->style()->pixelMetric( QStyle::PM_ScrollBarExtent ) ); + + // #i59364# high contrast mode + BOOL bHC = ( style.GetFaceColor().IsDark() || + style.GetWindowColor().IsDark() ); + style.SetHighContrastMode( bHC ); + + rSettings.SetStyleSettings( style ); +} + + +void KDESalFrame::ReleaseGraphics( SalGraphics *pGraphics ) +{ + for( int i = 0; i < nMaxGraphics; i++ ) + { + if( m_aGraphics[i].pGraphics == pGraphics ) + { + m_aGraphics[i].bInUse = false; + break; + } + } +} + +void KDESalFrame::updateGraphics() +{ + for( int i = 0; i < nMaxGraphics; i++ ) + { + if( m_aGraphics[i].bInUse ) + m_aGraphics[i].pGraphics->SetDrawable( GetWindow(), GetScreenNumber() ); + } +} + +KDESalFrame::~KDESalFrame() +{ +} + +KDESalFrame::GraphicsHolder::~GraphicsHolder() +{ + delete pGraphics; +} + +SalGraphics* KDESalFrame::GetGraphics() +{ + if( GetWindow() ) + { + for( int i = 0; i < nMaxGraphics; i++ ) + { + if( ! m_aGraphics[i].bInUse ) + { + m_aGraphics[i].bInUse = true; + if( ! m_aGraphics[i].pGraphics ) + { + m_aGraphics[i].pGraphics = new KDESalGraphics(); + m_aGraphics[i].pGraphics->Init( this, GetWindow(), GetScreenNumber() ); + } + return m_aGraphics[i].pGraphics; + } + } + } + + return NULL; +} \ No newline at end of file diff --git a/vcl/unx/kde4/KDESalFrame.hxx b/vcl/unx/kde4/KDESalFrame.hxx new file mode 100644 index 000000000000..11a22bd93ba5 --- /dev/null +++ b/vcl/unx/kde4/KDESalFrame.hxx @@ -0,0 +1,58 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#pragma once + +#include +#include + +class KDESalFrame : public X11SalFrame +{ + private: + static const int nMaxGraphics = 2; + + struct GraphicsHolder + { + X11SalGraphics* pGraphics; + bool bInUse; + + GraphicsHolder() : pGraphics(0),bInUse( false ) {} + ~GraphicsHolder(); + }; + + GraphicsHolder m_aGraphics[ nMaxGraphics ]; + + public: + KDESalFrame( SalFrame* pParent, ULONG nStyle ); + virtual ~KDESalFrame(); + + virtual SalGraphics* GetGraphics(); + virtual void ReleaseGraphics( SalGraphics *pGraphics ); + virtual void updateGraphics(); + virtual void UpdateSettings( AllSettings& rSettings ); + virtual void Show( BOOL bVisible, BOOL bNoActivate ); +}; \ No newline at end of file diff --git a/vcl/unx/kde4/KDESalGraphics.cxx b/vcl/unx/kde4/KDESalGraphics.cxx new file mode 100644 index 000000000000..ae917f252b11 --- /dev/null +++ b/vcl/unx/kde4/KDESalGraphics.cxx @@ -0,0 +1,819 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +#define _SV_SALNATIVEWIDGETS_KDE_CXX + +#define Region QtXRegion + +#include +#include +#include + +#include + +#undef Region + +#include "KDESalGraphics.hxx" + +#include +#include + +#include + +using namespace ::rtl; + +/** + Conversion function between VCL ControlState together with + ImplControlValue and Qt state flags. + @param nControlState State of the widget (default, focused, ...) in Native Widget Framework. + @param aValue Value held by the widget (on, off, ...) +*/ +QStyle::State vclStateValue2StateFlag( ControlState nControlState, + const ImplControlValue& aValue ) +{ + QStyle::State nState = + ( (nControlState & CTRL_STATE_DEFAULT)? QStyle::State_None: QStyle::State_None ) | + ( (nControlState & CTRL_STATE_ENABLED)? QStyle::State_Enabled: QStyle::State_None ) | + ( (nControlState & CTRL_STATE_FOCUSED)? QStyle::State_HasFocus: QStyle::State_None ) | + ( (nControlState & CTRL_STATE_PRESSED)? QStyle::State_Sunken: QStyle::State_None ) | + ( (nControlState & CTRL_STATE_SELECTED)? QStyle::State_Selected : QStyle::State_None ) | + ( (nControlState & CTRL_STATE_ROLLOVER)? QStyle::State_MouseOver: QStyle::State_None ); + //TODO ( (nControlState & CTRL_STATE_HIDDEN)? QStyle::State_: QStyle::State_None ) | + + switch ( aValue.getTristateVal() ) + { + case BUTTONVALUE_ON: nState |= QStyle::State_On; break; + case BUTTONVALUE_OFF: nState |= QStyle::State_Off; break; + case BUTTONVALUE_MIXED: nState |= QStyle::State_NoChange; break; + default: break; + } + + return nState; +} + +/** + Convert VCL Region to QRect. + @param rControlRegion The region to convert. + @return The bounding box of the region. +*/ +QRect region2QRect( const Region& rControlRegion ) +{ + Rectangle aRect = rControlRegion.GetBoundRect(); + + return QRect( QPoint( aRect.Left(), aRect.Top() ), + QPoint( aRect.Right(), aRect.Bottom() ) ); +} + +BOOL KDESalGraphics::IsNativeControlSupported( ControlType type, ControlPart part ) +{ + if (type == CTRL_PUSHBUTTON) return true; + + if (type == CTRL_MENUBAR) return true; + + if (type == CTRL_MENU_POPUP) return true; + + if (type == CTRL_EDITBOX) return true; + + if (type == CTRL_COMBOBOX) return true; + + if (type == CTRL_TOOLBAR) return true; + + if (type == CTRL_CHECKBOX) return true; + + if (type == CTRL_LISTBOX) return true; + + if (type == CTRL_LISTNODE) return true; + + if (type == CTRL_FRAME) return true; + + if (type == CTRL_SCROLLBAR) return true; + + if (type == CTRL_WINDOW_BACKGROUND) return true; + + if (type == CTRL_SPINBOX && (part == PART_ENTIRE_CONTROL || part == HAS_BACKGROUND_TEXTURE) ) return true; + + // no spinbuttons for KDE, paint spinbox complete + //if (type == CTRL_SPINBUTTONS) return true; + + if (type == CTRL_GROUPBOX) return true; + + if (type == CTRL_FIXEDLINE) return true; + + if (type == CTRL_FIXEDBORDER) return true; + + if (type == CTRL_TOOLTIP) return true; + + if (type == CTRL_RADIOBUTTON) return true; + + return false; + + if ( (type == CTRL_TAB_ITEM) && (part == PART_ENTIRE_CONTROL) ) return true; + if ( (type == CTRL_TAB_PANE) && (part == PART_ENTIRE_CONTROL) ) return true; + // no CTRL_TAB_BODY for KDE + if ( (type == CTRL_PROGRESS) && (part == PART_ENTIRE_CONTROL) ) return true; + + return false; +} + + +BOOL KDESalGraphics::hitTestNativeControl( ControlType, ControlPart, + const Region&, const Point&, + SalControlHandle&, BOOL& ) +{ + return FALSE; +} + +BOOL KDESalGraphics::drawNativeControl( ControlType type, ControlPart part, + const Region& rControlRegion, ControlState nControlState, + const ImplControlValue& value, SalControlHandle&, + const OUString& ) +{ + // put not implemented types here + if (type == CTRL_SPINBUTTONS) + { + return false; + } + + BOOL returnVal = true; + + Display* dpy = GetXDisplay(); + XLIB_Window drawable = GetDrawable(); + GC gc = SelectPen(); + + QRect widgetRect = region2QRect(rControlRegion); + if( type == CTRL_SPINBOX && part == PART_ALL_BUTTONS ) + type = CTRL_SPINBUTTONS; + if( type == CTRL_SPINBUTTONS ) + { + SpinbuttonValue* pSpinVal = (SpinbuttonValue *)(value.getOptionalVal()); + Rectangle aButtonRect( pSpinVal->maUpperRect); + aButtonRect.Union( pSpinVal->maLowerRect );; + widgetRect = QRect( aButtonRect.Left(), aButtonRect.Top(), + aButtonRect.Right(), aButtonRect.Bottom() ); + } + + //draw right onto the window + QPixmap pixmap(widgetRect.width(), widgetRect.height()); + + if (pixmap.isNull()) + { + return false; + } + + QPainter painter(&pixmap); + // painter.setBackgroundMode(Qt::OpaqueMode); + + //copy previous screen contents for proper blending + #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) ) + QPixmap screen = QPixmap::fromX11Pixmap(drawable); + painter.drawPixmap(0,0, screen, widgetRect.left(), widgetRect.top(), widgetRect.width(), widgetRect.height()); + #else + const QX11Info& rX11Info( pixmap.x11Info() ); + X11SalGraphics::CopyScreenArea( dpy, + drawable, GetScreenNumber(), GetBitCount(), + pixmap.handle(), rX11Info.screen(), rX11Info.depth(), + GetDisplay()->GetCopyGC( GetScreenNumber() ), + widgetRect.left(), widgetRect.top(), widgetRect.width(), widgetRect.height(), + 0, 0 ); + #endif + + if (type == CTRL_PUSHBUTTON) + { + QStyleOptionButton styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state =vclStateValue2StateFlag( nControlState, value ); + + kapp->style()->drawControl( QStyle::CE_PushButton, &styleOption, &painter); + } + else if ( (type == CTRL_MENUBAR)) + { + if (part == PART_MENU_ITEM) + { + QStyleOptionMenuItem styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + kapp->style()->drawControl( QStyle::CE_MenuBarItem, &styleOption, &painter); + } + else + { + pixmap.fill(KApplication::palette().color(QPalette::Window)); + } + } + else if (type == CTRL_MENU_POPUP) + { + if (part == PART_MENU_ITEM) + { + QStyleOptionMenuItem styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + kapp->style()->drawControl( QStyle::CE_MenuItem, &styleOption, &painter); + } + else if (part == PART_MENU_ITEM_CHECK_MARK) + { + QStyleOptionButton styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + if (nControlState & CTRL_STATE_PRESSED) + { + kapp->style()->drawPrimitive( QStyle::PE_IndicatorMenuCheckMark, &styleOption, &painter); + } + } + else if (part == PART_MENU_ITEM_RADIO_MARK) + { + QStyleOptionButton styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + if (nControlState & CTRL_STATE_PRESSED) + { + kapp->style()->drawPrimitive( QStyle::PE_IndicatorRadioButton, &styleOption, &painter); + } + } + else + { + pixmap.fill(KApplication::palette().color(QPalette::Window)); + + #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) ) + QStyleOptionFrameV3 styleOption; + #else + QStyleOptionFrameV2 styleOption; + #endif + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) ) + styleOption.frameShape = QFrame::StyledPanel; + #endif + + kapp->style()->drawPrimitive( QStyle::PE_FrameMenu, &styleOption, &painter); + } + } + else if ( (type == CTRL_TOOLBAR) && (part == PART_BUTTON) ) + { + QStyleOptionToolButton styleOption; + + styleOption.arrowType = Qt::NoArrow; + styleOption.subControls = QStyle::SC_ToolButton; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + styleOption.state |= QStyle::State_Raised | QStyle::State_Enabled | QStyle::State_AutoRaise; + + kapp->style()->drawComplexControl( QStyle::CC_ToolButton, &styleOption, &painter); + } + else if ( (type == CTRL_TOOLBAR) && (part == PART_ENTIRE_CONTROL) ) + { + QStyleOptionToolBar styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + kapp->style()->drawControl( QStyle::CE_ToolBar, &styleOption, &painter); + } + else if ( (type == CTRL_TOOLBAR) && (part == PART_THUMB_VERT) ) + { + QStyleOption styleOption; + + int width = kapp->style()->pixelMetric(QStyle::PM_ToolBarHandleExtent); + + styleOption.rect = QRect(0, 0, width, widgetRect.height()); + styleOption.state = QStyle::State_Horizontal; + + kapp->style()->drawPrimitive( QStyle::PE_IndicatorToolBarHandle, &styleOption, &painter); + } + else if (type == CTRL_EDITBOX) + { + pixmap.fill(KApplication::palette().color(QPalette::Window)); + + //TODO hover?? OO does not seem to do this for line edits + + #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) ) + QStyleOptionFrameV3 styleOption; + #else + QStyleOptionFrameV2 styleOption; + #endif + + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + //TODO...how does the line edit draw itself internally?? + styleOption.rect = QRect(2, 2, widgetRect.width()-4, widgetRect.height()-4); + kapp->style()->drawPrimitive( QStyle::PE_PanelLineEdit, &styleOption, &painter); + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + kapp->style()->drawPrimitive( QStyle::PE_FrameLineEdit, &styleOption, &painter); + } + else if (type == CTRL_COMBOBOX) + { + pixmap.fill(KApplication::palette().color(QPalette::Window)); + + QStyleOptionComboBox styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + styleOption.editable = true; + + kapp->style()->drawComplexControl(QStyle::CC_ComboBox, &styleOption, &painter); + } + else if (type == CTRL_LISTBOX) + { + QStyleOptionComboBox styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + if (part == PART_SUB_EDIT) + { + kapp->style()->drawControl(QStyle::CE_ComboBoxLabel, &styleOption, &painter); + } + else + { + kapp->style()->drawComplexControl(QStyle::CC_ComboBox, &styleOption, &painter); + } + } + else if (type == CTRL_LISTNODE) + { + QStyleOption styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + styleOption.state |= QStyle::State_Item; + styleOption.state |= QStyle::State_Children; + + if (nControlState & CTRL_STATE_PRESSED) + { + styleOption.state |= QStyle::State_Open; + } + + kapp->style()->drawPrimitive(QStyle::PE_IndicatorBranch, &styleOption, &painter); + } + else if (type == CTRL_CHECKBOX) + { + QStyleOptionButton styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + kapp->style()->drawControl(QStyle::CE_CheckBox, &styleOption, &painter); + } + else if (type == CTRL_SCROLLBAR) + { + pixmap.fill(KApplication::palette().color(QPalette::Window)); + + if ((part == PART_DRAW_BACKGROUND_VERT) || (part == PART_DRAW_BACKGROUND_HORZ)) + { + ScrollbarValue* sbVal = static_cast ( value.getOptionalVal() ); + + QStyleOptionSlider styleOption; + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + + //if the scroll bar is active (aka not degenrate...allow for hover events + if (sbVal->mnVisibleSize < sbVal->mnMax) + { + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + styleOption.state |= QStyle::State_MouseOver; + } + + //horizontal or vertical + if (part == PART_DRAW_BACKGROUND_VERT) + { + styleOption.orientation = Qt::Vertical; + } + else + { + styleOption.state |= QStyle::State_Horizontal; + } + + //setup parameters from the OO values + styleOption.minimum = sbVal->mnMin; + styleOption.maximum = sbVal->mnMax - sbVal->mnVisibleSize; + styleOption.sliderValue = sbVal->mnCur; + styleOption.sliderPosition = sbVal->mnCur; + styleOption.pageStep = sbVal->mnVisibleSize; + + //setup the active control...always the slider + if (sbVal->mnThumbState & CTRL_STATE_ROLLOVER) + { + styleOption.activeSubControls = QStyle::SC_ScrollBarSlider; + } + + kapp->style()->drawComplexControl(QStyle::CC_ScrollBar, &styleOption, &painter); + } + } + else if (type == CTRL_SPINBOX) + { + pixmap.fill(KApplication::palette().color(QPalette::Window)); + + QStyleOptionSpinBox styleOption; + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + // determine active control + SpinbuttonValue* pSpinVal = (SpinbuttonValue *)(value.getOptionalVal()); + if( pSpinVal ) + { + if( (pSpinVal->mnUpperState & CTRL_STATE_PRESSED) ) + styleOption.activeSubControls |= QStyle::SC_SpinBoxUp; + if( (pSpinVal->mnLowerState & CTRL_STATE_PRESSED) ) + styleOption.activeSubControls |= QStyle::SC_SpinBoxDown; + } + + kapp->style()->drawComplexControl(QStyle::CC_SpinBox, &styleOption, &painter); + } + else if (type == CTRL_GROUPBOX) + { + QStyleOptionGroupBox styleOption; + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + kapp->style()->drawComplexControl(QStyle::CC_GroupBox, &styleOption, &painter); + } + else if (type == CTRL_RADIOBUTTON) + { + QStyleOptionButton styleOption; + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + kapp->style()->drawControl(QStyle::CE_RadioButton, &styleOption, &painter); + } + else if (type == CTRL_TOOLTIP) + { + QStyleOption styleOption; + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + + kapp->style()->drawPrimitive(QStyle::PE_PanelTipLabel, &styleOption, &painter); + } + else if (type == CTRL_FRAME) + { + #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) ) + QStyleOptionFrameV3 styleOption; + #else + QStyleOptionFrameV2 styleOption; + #endif + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) ) + styleOption.frameShape = QFrame::StyledPanel; + #endif + + kapp->style()->drawPrimitive(QStyle::PE_FrameWindow, &styleOption, &painter); + } + else if (type == CTRL_FIXEDBORDER) + { + #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) ) + QStyleOptionFrameV3 styleOption; + #else + QStyleOptionFrameV2 styleOption; + #endif + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) ) + styleOption.frameShape = QFrame::StyledPanel; + #endif + + kapp->style()->drawPrimitive(QStyle::PE_FrameWindow, &styleOption, &painter); + } + else if (type == CTRL_WINDOW_BACKGROUND) + { + pixmap.fill(KApplication::palette().color(QPalette::Window)); + } + else if (type == CTRL_FIXEDLINE) + { + QStyleOptionMenuItem styleOption; + + styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height()); + styleOption.state = vclStateValue2StateFlag( nControlState, value ); + styleOption.menuItemType = QStyleOptionMenuItem::Separator; + styleOption.state |= QStyle::State_Item; + + kapp->style()->drawControl( QStyle::CE_MenuItem, &styleOption, &painter); + } + else + { + returnVal = false; + } + + if (returnVal) + { + X11SalGraphics::CopyScreenArea( dpy, + pixmap.handle(), pixmap.x11Info().screen(), pixmap.x11Info().depth(), + drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, + 0, 0, widgetRect.width(), widgetRect.height(), widgetRect.left(), widgetRect.top() ); + } + + return returnVal; +} + +BOOL KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part, + const Region& controlRegion, ControlState controlState, + const ImplControlValue& val, SalControlHandle&, + const OUString&, + Region &nativeBoundingRegion, Region &nativeContentRegion ) +{ + bool retVal = false; + + QRect boundingRect = region2QRect( controlRegion ); + QRect contentRect = boundingRect; + QStyleOptionComplex styleOption; + + switch ( type ) + { + // Metrics of the push button + case CTRL_PUSHBUTTON: + if (part == PART_ENTIRE_CONTROL) + { + styleOption.state = vclStateValue2StateFlag(controlState, val); + + if ( controlState & CTRL_STATE_DEFAULT ) + { + int size = kapp->style()->pixelMetric( + QStyle::PM_ButtonDefaultIndicator, &styleOption ); + + boundingRect.adjust( -size, -size, size, size ); + + retVal = true; + } + } + break; + case CTRL_EDITBOX: + { + styleOption.rect = QRect(0, 0, contentRect.width(), contentRect.height()); + styleOption.state = vclStateValue2StateFlag(controlState, val); + + int size = kapp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) - 1; + + contentRect.adjust( -size, -size, size, size); + boundingRect = contentRect; + + retVal = true; + + break; + } + case CTRL_CHECKBOX: + if (part == PART_ENTIRE_CONTROL) + { + styleOption.state = vclStateValue2StateFlag(controlState, val); + + contentRect.setWidth(kapp->style()->pixelMetric( + QStyle::PM_IndicatorWidth, &styleOption)); + contentRect.setHeight(kapp->style()->pixelMetric( + QStyle::PM_IndicatorHeight, &styleOption)); + + contentRect.adjust(0, 0, + 2 * kapp->style()->pixelMetric( + QStyle::PM_FocusFrameHMargin, &styleOption), + 2 * kapp->style()->pixelMetric( + QStyle::PM_FocusFrameVMargin, &styleOption) + ); + + boundingRect = contentRect; + + retVal = true; + + break; + } + case CTRL_COMBOBOX: + case CTRL_LISTBOX: + { + QStyleOptionComboBox cbo; + + cbo.rect = QRect(0, 0, contentRect.width(), contentRect.height()); + cbo.state = vclStateValue2StateFlag(controlState, val); + + switch ( part ) + { + case PART_ENTIRE_CONTROL: + { + int size = kapp->style()->pixelMetric(QStyle::PM_ComboBoxFrameWidth) - 2; + contentRect.adjust(-size,-size,size,size); + + // find out the minimum size that should be used + // assume contents is a text ling + int nHeight = kapp->fontMetrics().height(); + QSize aContentSize( contentRect.width(), nHeight ); + QSize aMinSize = kapp->style()-> + sizeFromContents( QStyle::CT_ComboBox, &cbo, aContentSize ); + if( aMinSize.height() > contentRect.height() ) + contentRect.adjust( 0, 0, 0, aMinSize.height() - contentRect.height() ); + boundingRect = contentRect; + retVal = true; + break; + } + case PART_BUTTON_DOWN: + //the entire control can be used as the "down" button + retVal = true; + break; + case PART_SUB_EDIT: + contentRect = kapp->style()->subControlRect( + QStyle::CC_ComboBox, &cbo, QStyle::SC_ComboBoxEditField ); + + contentRect.translate( boundingRect.left(), boundingRect.top() ); + + retVal = true; + break; + } + break; + } + case CTRL_SPINBOX: + { + QStyleOptionSpinBox sbo; + + sbo.rect = QRect(0, 0, contentRect.width(), contentRect.height()); + sbo.state = vclStateValue2StateFlag(controlState, val); + + switch ( part ) + { + case PART_BUTTON_UP: + contentRect = kapp->style()->subControlRect( + QStyle::CC_SpinBox, &sbo, QStyle::SC_SpinBoxUp ); + contentRect.translate( boundingRect.left(), boundingRect.top() ); + retVal = true; + boundingRect = QRect(); + break; + + case PART_BUTTON_DOWN: + contentRect = kapp->style()->subControlRect( + QStyle::CC_SpinBox, &sbo, QStyle::SC_SpinBoxDown ); + retVal = true; + contentRect.translate( boundingRect.left(), boundingRect.top() ); + boundingRect = QRect(); + break; + + case PART_SUB_EDIT: + contentRect = kapp->style()->subControlRect( + QStyle::CC_SpinBox, &sbo, QStyle::SC_SpinBoxEditField ); + retVal = true; + contentRect.translate( boundingRect.left(), boundingRect.top() ); + break; + default: + retVal = true; + } + break; + } + case CTRL_MENU_POPUP: + //just limit the widget of the menu items + //OO isn't very flexible in all reguards with the menu + //so we do the best we can + if (part == PART_MENU_ITEM_CHECK_MARK) + { + contentRect.setWidth(contentRect.height()); + retVal = true; + } + else if (part == PART_MENU_ITEM_RADIO_MARK) + { + contentRect.setWidth(contentRect.height()); + retVal = true; + } + break; + case CTRL_FRAME: + { + if (part == PART_BORDER) + { + int size = kapp->style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + //contentRect.adjust(size, size, size, size); + boundingRect.adjust(-size, -size, size, size); + retVal = true; + } + + break; + } + case CTRL_RADIOBUTTON: + { + const int h = kapp->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorHeight); + const int w = kapp->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth); + + contentRect = QRect(boundingRect.left(), boundingRect.top(), w, h); + contentRect.adjust(0, 0, + 2 * kapp->style()->pixelMetric( + QStyle::PM_FocusFrameHMargin, &styleOption), + 2 * kapp->style()->pixelMetric( + QStyle::PM_FocusFrameVMargin, &styleOption) + ); + boundingRect = contentRect; + + retVal = true; + } + default: + break; + } +#if 0 + + + // Metrics of the scroll bar + case CTRL_SCROLLBAR: + //pWidget = pWidgetPainter->scrollBar( rControlRegion, + //( part == PART_BUTTON_LEFT || part == PART_BUTTON_RIGHT ), + //ImplControlValue() ); + //aStyleOption.initFrom( pWidget ); + + switch ( part ) + { + case PART_BUTTON_LEFT: + case PART_BUTTON_UP: + qRect = kapp->style()->subControlRect( + QStyle::CC_ScrollBar, &aStyleOption, QStyle::SC_ScrollBarSubLine ); + + // Workaround for Platinum style scroll bars. It makes the + // left/up button invisible. + if ( part == PART_BUTTON_LEFT ) + { + if ( qRect.left() > kapp->style()->subControlRect( + QStyle::CC_ScrollBar, &aStyleOption, + QStyle::SC_ScrollBarSubPage ).left() ) + { + qRect.setLeft( 0 ); + qRect.setRight( 0 ); + } + } + else + { + if ( qRect.top() > kapp->style()->subControlRect( + QStyle::CC_ScrollBar, &aStyleOption, + QStyle::SC_ScrollBarSubPage ).top() ) + { + qRect.setTop( 0 ); + qRect.setBottom( 0 ); + } + } + + qRect.translate( qBoundingRect.left(), qBoundingRect.top() ); + + bReturn = TRUE; + break; + + case PART_BUTTON_RIGHT: + case PART_BUTTON_DOWN: + qRect = kapp->style()->subControlRect( + QStyle::CC_ScrollBar, &aStyleOption, QStyle::SC_ScrollBarAddLine ); + + // Workaround for Platinum and 3 button style scroll bars. + // It makes the right/down button bigger. + if ( part == PART_BUTTON_RIGHT ) + qRect.setLeft( kapp->style()->subControlRect( + QStyle::CC_ScrollBar, &aStyleOption, + QStyle::SC_ScrollBarAddPage ).right() + 1 ); + else + qRect.setTop( kapp->style()->subControlRect( + QStyle::CC_ScrollBar, &aStyleOption, + QStyle::SC_ScrollBarAddPage ).bottom() + 1 ); + + qRect.translate( qBoundingRect.left(), qBoundingRect.top() ); + + bReturn = TRUE; + break; + } + break; + } +#endif + + if (retVal) + { + // Bounding region + Point aBPoint( boundingRect.x(), boundingRect.y() ); + Size aBSize( boundingRect.width(), boundingRect.height() ); + nativeBoundingRegion = Region( Rectangle( aBPoint, aBSize ) ); + + // Region of the content + Point aPoint( contentRect.x(), contentRect.y() ); + Size aSize( contentRect.width(), contentRect.height() ); + nativeContentRegion = Region( Rectangle( aPoint, aSize ) ); + } + + return retVal; +} diff --git a/vcl/unx/kde4/KDESalGraphics.hxx b/vcl/unx/kde4/KDESalGraphics.hxx new file mode 100644 index 000000000000..e598f75be75f --- /dev/null +++ b/vcl/unx/kde4/KDESalGraphics.hxx @@ -0,0 +1,114 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#pragma once + +#include +#include +#include + +/** handles graphics drawings requests and performs the needed drawing operations */ +class KDESalGraphics : public X11SalGraphics +{ + public: + KDESalGraphics() {} + virtual ~KDESalGraphics() {} + + /** + What widgets can be drawn the native way. + @param type Type of the widget. + @param part Specification of the widget's part if it consists of more than one. + @return true if the platform supports native drawing of the widget type defined by part. + */ + virtual BOOL IsNativeControlSupported( ControlType type, ControlPart part ); + + /** Test whether the position is in the native widget. + If the return value is TRUE, bIsInside contains information whether + aPos was or was not inside the native widget specified by the + type/part combination. + */ + virtual BOOL hitTestNativeControl( ControlType type, ControlPart part, + const Region& rControlRegion, const Point& aPos, + SalControlHandle& rControlHandle, BOOL& rIsInside ); + /** Draw the requested control described by part/nControlState. + + @param rControlRegion + The bounding region of the complete control in VCL frame coordinates. + + @param aValue + An optional value (tristate/numerical/string). + + @param rControlHandle + Carries platform dependent data and is maintained by the SalFrame implementation. + + @param aCaption + A caption or title string (like button text etc.) + */ + virtual BOOL drawNativeControl( ControlType type, ControlPart part, + const Region& rControlRegion, ControlState nControlState, + const ImplControlValue& aValue, SalControlHandle& rControlHandle, + const rtl::OUString& aCaption ); + + /** Draw text on the widget. + OPTIONAL. Draws the requested text for the control described by part/nControlState. + Used if text is not drawn by DrawNativeControl(). + + @param rControlRegion The bounding region of the complete control in VCL frame coordinates. + @param aValue An optional value (tristate/numerical/string) + @param rControlHandle Carries platform dependent data and is maintained by the SalFrame implementation. + @param aCaption A caption or title string (like button text etc.) + */ + virtual BOOL drawNativeControlText( ControlType, ControlPart, + const Region&, ControlState, + const ImplControlValue&, SalControlHandle&, + const rtl::OUString& ) { return false; } + /** Check if the bounding regions match. + + If the return value is TRUE, rNativeBoundingRegion + contains the true bounding region covered by the control + including any adornment, while rNativeContentRegion contains the area + within the control that can be safely drawn into without drawing over + the borders of the control. + + @param rControlRegion + The bounding region of the control in VCL frame coordinates. + + @param aValue + An optional value (tristate/numerical/string) + + @param rControlHandle + Carries platform dependent data and is maintained by the SalFrame implementation. + + @param aCaption + A caption or title string (like button text etc.) + */ + virtual BOOL getNativeControlRegion( ControlType type, ControlPart part, + const Region& rControlRegion, ControlState nControlState, + const ImplControlValue& aValue, SalControlHandle& rControlHandle, + const rtl::OUString& aCaption, + Region &rNativeBoundingRegion, Region &rNativeContentRegion ); +}; \ No newline at end of file diff --git a/vcl/unx/kde4/KDESalInstance.cxx b/vcl/unx/kde4/KDESalInstance.cxx new file mode 100644 index 000000000000..b9aab9a0184a --- /dev/null +++ b/vcl/unx/kde4/KDESalInstance.cxx @@ -0,0 +1,35 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "KDESalInstance.hxx" + +#include "KDESalFrame.hxx" + +SalFrame* KDESalInstance::CreateFrame( SalFrame *pParent, ULONG nState ) +{ + return new KDESalFrame( pParent, nState ); +} \ No newline at end of file diff --git a/vcl/unx/kde4/KDESalInstance.hxx b/vcl/unx/kde4/KDESalInstance.hxx new file mode 100644 index 000000000000..6f0b268cc397 --- /dev/null +++ b/vcl/unx/kde4/KDESalInstance.hxx @@ -0,0 +1,41 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#pragma once + +#include + +class SalYieldMutex; +class SalFrame; + +class KDESalInstance : public X11SalInstance +{ + public: + KDESalInstance( SalYieldMutex* pMutex ) : X11SalInstance( pMutex ) {} + virtual ~KDESalInstance() {} + virtual SalFrame* CreateFrame( SalFrame* pParent, ULONG nStyle ); +}; \ No newline at end of file diff --git a/vcl/unx/kde4/KDEXLib.cxx b/vcl/unx/kde4/KDEXLib.cxx new file mode 100644 index 000000000000..70b1796df7f0 --- /dev/null +++ b/vcl/unx/kde4/KDEXLib.cxx @@ -0,0 +1,171 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "VCLKDEApplication.hxx" + +#define Region QtXRegion + +#include +#include +#include +#include +#include + +#undef Region + +#include "KDEXLib.hxx" + +#include +#include + +#include +#include + +#include "KDESalDisplay.hxx" + +#if OSL_DEBUG_LEVEL > 1 +#include +#endif + +KDEXLib::KDEXLib() : + SalXLib(), m_bStartupDone(false), m_pApplication(0), + m_pFreeCmdLineArgs(0), m_pAppCmdLineArgs(0), m_nFakeCmdLineArgs( 0 ) +{ +} + +KDEXLib::~KDEXLib() +{ + delete (VCLKDEApplication*)m_pApplication; + + // free the faked cmdline arguments no longer needed by KApplication + for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) + { + free( m_pFreeCmdLineArgs[i] ); + } + + delete [] m_pFreeCmdLineArgs; + delete [] m_pAppCmdLineArgs; +} + +void KDEXLib::Init() +{ + SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod; + pInputMethod->SetLocale(); + XrmInitialize(); + + KAboutData *kAboutData = new KAboutData( "OpenOffice.org", + "OpenOffice.org", + ki18n( "OpenOffice.org" ), + "3.0.0", + ki18n( "OpenOffice.org with KDE Native Widget Support." ), + KAboutData::License_LGPL, + ki18n( "Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 Novell, Inc"), + ki18n( "OpenOffice.org is an office suite.\n" ), + "http://kde.openoffice.org/index.html", + "dev@kde.openoffice.org" ); + kAboutData->addAuthor( ki18n( "Jan Holesovsky" ), + ki18n( "Original author and maintainer of the KDE NWF." ), + "kendy@artax.karlin.mff.cuni.cz", + "http://artax.karlin.mff.cuni.cz/~kendy" ); + kAboutData->addAuthor( ki18n("Eric Bischoff"), + ki18n( "Accessibility fixes, porting to KDE 4." ), + "bischoff@kde.org" ); + + m_nFakeCmdLineArgs = 1; + USHORT nIdx; + vos::OExtCommandLine aCommandLine; + int nParams = aCommandLine.getCommandArgCount(); + rtl::OString aDisplay; + rtl::OUString aParam, aBin; + + for ( nIdx = 0; nIdx < nParams; ++nIdx ) + { + aCommandLine.getCommandArg( nIdx, aParam ); + if ( !m_pFreeCmdLineArgs && aParam.equalsAscii( "-display" ) && nIdx + 1 < nParams ) + { + aCommandLine.getCommandArg( nIdx + 1, aParam ); + aDisplay = rtl::OUStringToOString( aParam, osl_getThreadTextEncoding() ); + + m_nFakeCmdLineArgs = 3; + m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; + m_pFreeCmdLineArgs[ 1 ] = strdup( "-display" ); + m_pFreeCmdLineArgs[ 2 ] = strdup( aDisplay.getStr() ); + } + } + if ( !m_pFreeCmdLineArgs ) + m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; + + osl_getExecutableFile( &aParam.pData ); + osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData ); + rtl::OString aExec = rtl::OUStringToOString( aBin, osl_getThreadTextEncoding() ); + m_pFreeCmdLineArgs[0] = strdup( aExec.getStr() ); + + // make a copy of the string list for freeing it since + // KApplication manipulates the pointers inside the argument vector + // note: KApplication bad ! + m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; + for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) + m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i]; + + KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData ); + + m_pApplication = new VCLKDEApplication(); + kapp->disableSessionManagement(); + + Display* pDisp = QX11Info::display(); + SalKDEDisplay *pSalDisplay = new SalKDEDisplay(pDisp); + + ((VCLKDEApplication*)m_pApplication)->disp = pSalDisplay; + + XSetIOErrorHandler ( (XIOErrorHandler)X11SalData::XIOErrorHdl ); + XSetErrorHandler ( (XErrorHandler)X11SalData::XErrorHdl ); + + pInputMethod->CreateMethod( pDisp ); + pInputMethod->AddConnectionWatch( pDisp, (void*)this ); + pSalDisplay->SetInputMethod( pInputMethod ); + + PushXErrorLevel( true ); + SalI18N_KeyboardExtension *pKbdExtension = new SalI18N_KeyboardExtension( pDisp ); + XSync( pDisp, False ); + + pKbdExtension->UseExtension( ! HasXErrorOccured() ); + PopXErrorLevel(); + + pSalDisplay->SetKbdExtension( pKbdExtension ); +} + +void KDEXLib::doStartup() +{ + if( ! m_bStartupDone ) + { + KStartupInfo::appStarted(); + m_bStartupDone = true; + #if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "called KStartupInfo::appStarted()\n" ); + #endif + } +} \ No newline at end of file diff --git a/vcl/unx/kde4/KDEXLib.hxx b/vcl/unx/kde4/KDEXLib.hxx new file mode 100644 index 000000000000..0380db7212ef --- /dev/null +++ b/vcl/unx/kde4/KDEXLib.hxx @@ -0,0 +1,48 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#pragma once + +#include + +class KDEXLib : public SalXLib +{ + private: + bool m_bStartupDone; + void* m_pApplication; + char** m_pFreeCmdLineArgs; + char** m_pAppCmdLineArgs; + int m_nFakeCmdLineArgs; + + public: + KDEXLib(); + + virtual ~KDEXLib(); + virtual void Init(); + + void doStartup(); +}; diff --git a/vcl/unx/kde4/VCLKDEApplication.cxx b/vcl/unx/kde4/VCLKDEApplication.cxx new file mode 100644 index 000000000000..29adcae6ceff --- /dev/null +++ b/vcl/unx/kde4/VCLKDEApplication.cxx @@ -0,0 +1,52 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "VCLKDEApplication.hxx" + +#define Region QtXRegion +#include +#undef Region + +#include "KDESalDisplay.hxx" + +VCLKDEApplication::VCLKDEApplication() : + KApplication() +{ + disp = 0; +} + +bool VCLKDEApplication::x11EventFilter(XEvent* event) +{ + //if we have a display and the display consumes the event + //do not process the event in qt + if (disp && disp->Dispatch(event) > 0) + { + return true; + } + + return false; +} \ No newline at end of file diff --git a/vcl/unx/kde4/VCLKDEApplication.hxx b/vcl/unx/kde4/VCLKDEApplication.hxx new file mode 100644 index 000000000000..839b664ea8d2 --- /dev/null +++ b/vcl/unx/kde4/VCLKDEApplication.hxx @@ -0,0 +1,53 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#pragma once + +#define Region QtXRegion + +#include + +#include + +#undef Region + +class SalKDEDisplay; + +/* #i59042# override KApplications method for session management + * since it will interfere badly with our own. + */ +class VCLKDEApplication : public KApplication +{ + public: + VCLKDEApplication(); + + virtual void commitData(QSessionManager&) {}; + + virtual bool x11EventFilter(XEvent* event); + + SalKDEDisplay* disp; +}; \ No newline at end of file diff --git a/vcl/unx/kde4/main.cxx b/vcl/unx/kde4/main.cxx new file mode 100644 index 000000000000..2a48624d9d14 --- /dev/null +++ b/vcl/unx/kde4/main.cxx @@ -0,0 +1,83 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +#define Region QtXRegion +#include +#undef Region + +#include "KDEData.hxx" +#include "KDESalInstance.hxx" + +#if OSL_DEBUG_LEVEL > 1 +#include +#endif + +#include + +/// entry point for the KDE4 VCL plugin +extern "C" { + VCL_DLLPUBLIC SalInstance* create_SalInstance( oslModule ) + { +#if QT_VERSION < 0x050000 + // Qt 4.x support needs >= 4.1.0 + rtl::OString aVersion( qVersion() ); +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "qt version string is \"%s\"\n", aVersion.getStr() ); +#endif + sal_Int32 nIndex = 0, nMajor = 0, nMinor = 0, nMicro = 0; + nMajor = aVersion.getToken( 0, '.', nIndex ).toInt32(); + if( nIndex > 0 ) + nMinor = aVersion.getToken( 0, '.', nIndex ).toInt32(); + if( nIndex > 0 ) + nMicro = aVersion.getToken( 0, '.', nIndex ).toInt32(); + if( nMajor != 4 || nMinor < 1 ) + { +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "unsuitable qt version %d.%d.%d\n", nMajor, nMinor, nMicro ); +#endif + return NULL; + } +#endif + + KDESalInstance* pInstance = new KDESalInstance( new SalYieldMutex() ); +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "created KDESalInstance 0x%p\n", pInstance ); +#endif + + // initialize SalData + KDEData *salData = new KDEData(); + SetSalData(salData); + salData->m_pInstance = pInstance; + salData->Init(); + salData->initNWF(); + + return pInstance; + } +} diff --git a/vcl/unx/kde4/makefile.mk b/vcl/unx/kde4/makefile.mk new file mode 100644 index 000000000000..48a2dc87c3a6 --- /dev/null +++ b/vcl/unx/kde4/makefile.mk @@ -0,0 +1,92 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2008 by Sun Microsystems, Inc. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.10 $ +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=..$/.. + +PRJNAME=vcl +TARGET=kde4plug +.INCLUDE : $(PRJ)$/util$/makefile.pmk + +# workaround for makedepend hang +MKDEPENDSOLVER= + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(PRJ)$/util$/makefile2.pmk + +# For some of the included external KDE headers, GCC complains about shadowed +# symbols in instantiated template code only at the end of a compilation unit, +# so the only solution is to disable that warning here: +.IF "$(COM)" == "GCC" +CFLAGSCXX+=-Wno-shadow +.ENDIF + +# --- Files -------------------------------------------------------- + +.IF "$(GUIBASE)"!="unx" + +dummy: + @echo "Nothing to build for GUIBASE $(GUIBASE)" + +.ELSE # "$(GUIBASE)"!="unx" + +.IF "$(ENABLE_KDE4)" != "" + +CFLAGS+=$(KDE4_CFLAGS) + +.IF "$(ENABLE_RANDR)" != "" +CDEFS+=-DUSE_RANDR +.ENDIF + +SLOFILES=\ + $(SLO)$/main.obj \ + $(SLO)$/VCLKDEApplication.obj \ + $(SLO)$/KDEXLib.obj \ + $(SLO)$/KDESalDisplay.obj \ + $(SLO)$/KDESalFrame.obj \ + $(SLO)$/KDESalGraphics.obj \ + $(SLO)$/KDESalInstance.obj \ + $(SLO)$/KDEData.obj + + +.ELSE # "$(ENABLE_KDE4)" != "" + +dummy: + @echo KDE disabled - nothing to build +.ENDIF +.ENDIF # "$(GUIBASE)"!="unx" + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +.INCLUDE : $(PRJ)$/util$/target.pmk diff --git a/vcl/unx/source/plugadapt/salplug.cxx b/vcl/unx/source/plugadapt/salplug.cxx index 0c791ca8091f..8a1ed05b8e25 100644 --- a/vcl/unx/source/plugadapt/salplug.cxx +++ b/vcl/unx/source/plugadapt/salplug.cxx @@ -55,13 +55,16 @@ typedef SalInstance*(*salFactoryProc)( oslModule pModule); static oslModule pCloseModule = NULL; -#define DESKTOP_NONE 0 -#define DESKTOP_UNKNOWN 1 -#define DESKTOP_GNOME 2 -#define DESKTOP_KDE 3 -#define DESKTOP_CDE 4 +enum { + DESKTOP_NONE = 0, + DESKTOP_UNKNOWN, + DESKTOP_GNOME, + DESKTOP_KDE, + DESKTOP_KDE4, + DESKTOP_CDE +}; -static const char * desktop_strings[5] = { "none", "unknown", "GNOME", "KDE", "CDE" }; +static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "CDE" }; static SalInstance* tryInstance( const OUString& rModuleBase ) { @@ -225,15 +228,18 @@ extern "C" typedef int(* XErrorHandler)(Display*,XErrorEvent*); } -static OUString getNetWMName( Display* pDisplay ) +static int KDEVersion( Display* pDisplay ) { - OUString aRet; + int nRet = 0; - Atom nWmCheck = XInternAtom( pDisplay, "_NET_SUPPORTING_WM_CHECK", True ); - Atom nWmName = XInternAtom( pDisplay, "_NET_WM_NAME", True ); - if( nWmName && nWmCheck ) + Atom nFullSession = XInternAtom( pDisplay, "KDE_FULL_SESSION", True ); + Atom nKDEVersion = XInternAtom( pDisplay, "KDE_SESSION_VERSION", True ); + + if( nFullSession ) { - XLIB_Window aCheckWin = None; + if( !nKDEVersion ) + return 3; + Atom aRealType = None; int nFormat = 8; unsigned long nItems = 0; @@ -241,86 +247,63 @@ static OUString getNetWMName( Display* pDisplay ) unsigned char* pProperty = NULL; XGetWindowProperty( pDisplay, DefaultRootWindow( pDisplay ), - nWmCheck, + nKDEVersion, 0, 1, False, - XA_WINDOW, + AnyPropertyType, &aRealType, &nFormat, &nItems, &nBytesLeft, &pProperty ); - if( aRealType == XA_WINDOW && nFormat == 32 && nItems != 0 ) - aCheckWin = *(XLIB_Window*)pProperty; + if( !WasXError() && nItems != 0 && pProperty ) + { + nRet = *reinterpret_cast< sal_Int32* >( pProperty ); + } if( pProperty ) { XFree( pProperty ); pProperty = NULL; } + } + return nRet; +} - // see if that window really exists and has the check property set - if( aCheckWin != None ) +static bool is_kde_desktop( Display* pDisplay ) +{ + if ( NULL != getenv( "KDE_FULL_SESSION" ) ) + { + const char *pVer = getenv( "KDE_SESSION_VERSION" ); + if ( !pVer || pVer[0] == '0' ) { - // clear error flag - WasXError(); - // get the property - XGetWindowProperty( pDisplay, - aCheckWin, - nWmCheck, - 0, 1, - False, - XA_WINDOW, - &aRealType, - &nFormat, - &nItems, - &nBytesLeft, - &pProperty ); - if( ! WasXError() && aRealType == XA_WINDOW && nFormat == 32 && nItems != 0 && pProperty ) - { - if( aCheckWin == *(XLIB_Window*)pProperty ) - { - XFree( pProperty ); - pProperty = NULL; - XGetWindowProperty( pDisplay, - aCheckWin, - nWmName, - 0, 256, - False, - AnyPropertyType, - &aRealType, - &nFormat, - &nItems, - &nBytesLeft, - &pProperty ); - if( !WasXError() && nItems != 0 && pProperty && *pProperty ) - { - if( aRealType == XA_STRING ) // some WM's use this although the should use UTF8_STRING - { - aRet = rtl::OStringToOUString( rtl::OString( (sal_Char*)pProperty ), RTL_TEXTENCODING_ISO_8859_1 ); - } - else - aRet = rtl::OStringToOUString( rtl::OString( (sal_Char*)pProperty ), RTL_TEXTENCODING_UTF8 ); - } - } - } - if( pProperty ) - { - XFree( pProperty ); - pProperty = NULL; - } + return true; // does not exist => KDE3 + } + + rtl::OUString aVer( RTL_CONSTASCII_USTRINGPARAM( "3" ) ); + if ( aVer.equalsIgnoreAsciiCaseAscii( pVer ) ) + { + return true; } } - return aRet; + + if ( KDEVersion( pDisplay ) == 3 ) + return true; + + return false; } -static bool is_kde_desktop( Display* pDisplay ) +static bool is_kde4_desktop( Display* pDisplay ) { if ( NULL != getenv( "KDE_FULL_SESSION" ) ) - return true; + { + rtl::OUString aVer( RTL_CONSTASCII_USTRINGPARAM( "4" ) ); + + const char *pVer = getenv( "KDE_SESSION_VERSION" ); + if ( pVer && aVer.equalsIgnoreAsciiCaseAscii( pVer ) ) + return true; + } - // check for kwin - rtl::OUString aWM = getNetWMName( pDisplay ); - if( aWM.equalsIgnoreAsciiCaseAscii( "KWin" ) ) + if ( KDEVersion( pDisplay ) == 4 ) return true; return false; @@ -355,6 +338,8 @@ static const char * get_desktop_environment() pRet = desktop_strings[DESKTOP_CDE]; if ( aOver.equalsIgnoreAsciiCase( "kde" ) ) pRet = desktop_strings[DESKTOP_KDE]; + if ( aOver.equalsIgnoreAsciiCase( "kde4" ) ) + pRet = desktop_strings[DESKTOP_KDE4]; if ( aOver.equalsIgnoreAsciiCase( "gnome" ) ) pRet = desktop_strings[DESKTOP_GNOME]; if ( aOver.equalsIgnoreAsciiCase( "none" ) ) @@ -395,7 +380,9 @@ static const char * get_desktop_environment() { XErrorHandler pOldHdl = XSetErrorHandler( autodect_error_handler ); - if ( is_kde_desktop( pDisplay ) ) + if ( is_kde4_desktop( pDisplay ) ) + pRet = desktop_strings[DESKTOP_KDE4]; + else if ( is_kde_desktop( pDisplay ) ) pRet = desktop_strings[DESKTOP_KDE]; else if ( is_gnome_desktop( pDisplay ) ) pRet = desktop_strings[DESKTOP_GNOME]; @@ -428,6 +415,8 @@ static const char* autodetect_plugin() pRet = "gtk"; else if( desktop == desktop_strings[DESKTOP_KDE] ) pRet = "kde"; + else if( desktop == desktop_strings[DESKTOP_KDE4] ) + pRet = "kde4"; else { // #i95296# use the much nicer looking gtk plugin diff --git a/vcl/util/makefile.mk b/vcl/util/makefile.mk index 96c28980118f..63994c1be81c 100644 --- a/vcl/util/makefile.mk +++ b/vcl/util/makefile.mk @@ -366,7 +366,7 @@ SHL5IMPLIB=ikde_plug_ SHL5LIBS=$(LIB5TARGET) SHL5DEPN=$(SHL2TARGETN) # libs for KDE plugin -SHL5STDLIBS=$(KDE_LIBS) +SHL5LINKFLAGS+=$(KDE_LIBS) SHL5STDLIBS+=-l$(SHL2TARGET) SHL5STDLIBS+=\ $(VCLLIB) \ @@ -382,6 +382,35 @@ SHL5STDLIBS+= $(XRANDR_LIBS) .ENDIF # "$(ENABLE_KDE)" != "" +# KDE4 plugin +.IF "$(ENABLE_KDE4)" != "" +.IF "$(KDE4_ROOT)"!="" +EXTRALIBPATHS+=-L$(KDE4_ROOT)$/lib +.ENDIF +LIB6TARGET=$(SLB)$/ikde4_plug_ +LIB6FILES=$(SLB)$/kde4plug.lib +SHL6TARGET=vclplug_kde4$(DLLPOSTFIX) +SHL6IMPLIB=ikde4_plug_ +SHL6LIBS=$(LIB6TARGET) +SHL6DEPN=$(SHL2TARGETN) +# libs for KDE4 plugin +SHL6LINKFLAGS+=$(KDE4_LIBS) +SHL6STDLIBS+=-l$(SHL2TARGET) +SHL6STDLIBS+=\ + $(VCLLIB) \ + $(PSPLIB) \ + $(TOOLSLIB) \ + $(VOSLIB) \ + $(SALLIB) + +.IF "$(ENABLE_RANDR)" != "" +.IF "$(XRANDR_DLOPEN)" == "FALSE" +SHL6STDLIBS+= $(XRANDR_LIBS) +.ENDIF +.ENDIF + +.ENDIF # "$(ENABLE_KDE4)" != "" + .ENDIF # UNX # --- Allgemein ---------------------------------------------------------- -- cgit v1.2.3 From 92402b224fda5cb71e3f30430eb657bdbabfa6a1 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Fri, 7 Aug 2009 13:32:06 +0000 Subject: CWS-TOOLING: integrate CWS gciteratorfix_DEV300 2009-08-04 10:23:19 +0200 od r274608 : add missing patch flags for libaries swui, msword and xo 2009-08-03 16:42:48 +0200 mav r274586 : #i101899# workaround the wrong error code on MAC 2009-08-03 13:24:44 +0200 tl r274575 : #i103936# fix for grammar checking loop 2009-08-03 12:37:37 +0200 tl r274573 : #i103936# fix for grammar checking loop 2009-08-03 12:10:01 +0200 tl r274572 : #i103936# fix for grammar checking loop 2009-08-03 09:06:49 +0200 tl r274565 : #i103936# fix for grammar checking loop 2009-08-03 09:04:50 +0200 tl r274564 : #i103936# fix for grammar checking loop 2009-07-31 17:52:45 +0200 tl r274545 : #i103936# fix for grammar checking loop --- comphelper/source/misc/mediadescriptor.cxx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/comphelper/source/misc/mediadescriptor.cxx b/comphelper/source/misc/mediadescriptor.cxx index da0dd71a5520..9f463cdf0380 100644 --- a/comphelper/source/misc/mediadescriptor.cxx +++ b/comphelper/source/misc/mediadescriptor.cxx @@ -726,8 +726,13 @@ class StillReadWriteInteraction : public ::ucbhelper::InterceptedInteraction css::ucb::InteractiveIOException exIO; xRequest->getRequest() >>= exIO; bAbort = ( - (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED ) || - (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION ) + (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED ) + || (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION ) +#ifdef MACOSX + // this is a workaround for MAC, on this platform if the file is locked + // the returned error code looks to be wrong + || (exIO.Code == css::ucb::IOErrorCode_GENERAL ) +#endif ); } break; -- cgit v1.2.3 From 5624be5a3520a16d57724064e16df3722d728010 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Mon, 17 Aug 2009 14:12:14 +0000 Subject: CWS-TOOLING: integrate CWS graphite01 2009-08-06 11:09:01 +0200 hdu r274708 : #i10000# fix build breaker for SYSTEM_GRAPHITE=NO 2009-07-21 12:01:52 +0200 hdu r274174 : #i93645# fix include files for EXT_USE_STLPORT 2009-07-21 11:51:07 +0200 hdu r274173 : #i93645# convert line-endings of files to be patched 2009-07-21 10:49:01 +0200 hdu r274170 : #i93645# adjust makefile.vc8 for HH-RelEng env (thanks ause) 2009-07-20 05:21:32 +0200 kstribley r274105 : attempt to fix Windows build error caused by NULL variable in nmake file 2009-07-16 10:22:36 +0200 hdu r274032 : #i69129# also use solar minor version to find graphite lib 2009-07-16 05:36:06 +0200 kstribley r274029 : allow windows build to have Graphite disabled with SAL_DISABLE_GRAPHITE 2009-07-15 13:59:22 +0200 hdu r274011 : #i69129# default to ENABLE_GRAPHITE=TRUE 2009-07-15 13:19:54 +0200 hdu r274008 : #i93645# ignore compile warnings for graphite 2009-07-15 13:18:25 +0200 hdu r274006 : #i93645# stlport needs libmath, use solar minor version to find matching libs 2009-07-15 09:21:13 +0200 hdu r273989 : #i100000# avoid compile warning 2009-07-14 12:19:08 +0200 hdu r273963 : CWS-TOOLING: rebase CWS graphite01 to trunk@273858 (milestone: DEV300:m52) 2009-07-13 06:54:56 +0200 kstribley r273912 : change to use standard file headers 2009-07-13 05:39:14 +0200 kstribley r273911 : Remove unnecessary change to configure.in as reported by Rene 2009-07-10 16:58:44 +0200 hdu r273902 : #i100000# fix compile for precompiled-header support 2009-07-02 13:48:26 +0200 kstribley r273647 : #69129# fix a graphite bug which could crash with fonts containing obscure GDL positioning rules 2009-07-02 01:44:02 +0200 rene r273616 : #i10000# we need to link with -licuuc 2009-07-01 04:02:20 +0200 kstribley r273540 : restore missing sdf files from base 2009-07-01 04:01:40 +0200 kstribley r273539 : restore missing sdf files from base 2009-07-01 04:01:12 +0200 kstribley r273538 : restore missing sdf files from base 2009-07-01 03:59:41 +0200 kstribley r273537 : restore missing sdf files from base 2009-06-29 10:16:51 +0200 kstribley r273456 : #i69129# fixes a bug which caused occasional incorrect linebreaking when graphite is asked to render a part of a cluster not containing a base 2009-06-27 10:43:58 +0200 kstribley r273445 : #i69129# added kashida support for justified RTL text 2009-06-01 12:57:06 +0200 kstribley r272476 : CWS-TOOLING: rebase CWS graphite01 to trunk@272291 (milestone: DEV300:m49) 2009-05-26 10:50:06 +0200 kstribley r272286 : #i69129# fixes a build error when NDEBUG is not defined 2009-05-25 13:14:06 +0200 kstribley r272237 : #i69129# enable debugging by fixing compile warnings 2009-05-25 13:07:47 +0200 kstribley r272234 : #i69129# added env variable to disable GRAPHITE at run time on linux and fixed a bug with a rare attachment sequence 2009-04-20 17:39:25 +0200 kstribley r271001 : CWS-TOOLING: rebase CWS graphite01 to trunk@270723 (milestone: DEV300:m46) 2009-04-18 07:11:33 +0200 kstribley r270957 : #i101178# attempt to fix buildbot builds by reordering configure.in 2009-04-14 17:37:07 +0200 kstribley r270801 : #i93645# tweak configure to enable graphite by default on windows and linux to assist testing with tinderbox build 2009-04-14 16:33:17 +0200 kstribley r270796 : #i96925# another fix for rtl fallback and add optional debug info in MultiSalLayout 2009-04-08 13:27:55 +0200 kstribley r270641 : #i69129# fix features after a bad merge 2009-04-08 13:26:34 +0200 kstribley r270640 : #i69129# add a patch for WinFont 2009-03-24 12:37:54 +0100 kstribley r269937 : #i69129# fix build error due to locale being included in method for features 2009-03-24 12:36:10 +0100 kstribley r269936 : #i93645# change patch variable and fix configure 2009-03-20 04:18:56 +0100 kstribley r269776 : CWS-TOOLING: rebase CWS graphite01 to trunk@269297 (milestone: DEV300:m43) 2009-03-01 13:10:59 +0100 kstribley r268622 : added a patch to improve handling of a font with bad graphite language feature tables #i93645# 2009-02-12 04:50:51 +0100 kstribley r267631 : #i93645# fix windows build for graphite 2.3.1 and remove unnecessary patch 2009-02-10 04:48:50 +0100 kstribley r267535 : #i93645# fix a build error with stlport on Ubuntu 8.10 x86 2009-02-10 03:51:10 +0100 kstribley r267534 : #i69129# remove legacy config_office 2009-02-07 19:12:54 +0100 kstribley r267482 : #i93645# upgrade to using silgraphite-2.3.1 2009-02-02 18:17:57 +0100 kstribley r267290 : #i69129# backout unwanted checkin 2009-02-02 17:44:03 +0100 kstribley r267281 : #i69129# backout erroneous update to aclocal.m4 2009-02-01 10:05:03 +0100 kstribley r267236 : #i69129# fix build error due to locale being added to set font attributes 2009-02-01 06:02:52 +0100 kstribley r267235 : #i69129# fix erroneous merge 2009-01-31 16:24:56 +0100 kstribley r267234 : #i69129# update configure.in solenv.in in their new locations with enable graphite 2009-01-31 10:53:18 +0100 kstribley r267232 : CWS-TOOLING: rebase CWS graphite01 to trunk@267171 (milestone: DEV300:m41) 2008-12-17 04:17:33 +0100 kstribley r265577 : #i93645# remove superfluous autoreconf check and autoconf patch 2008-12-16 10:07:20 +0100 rene r265529 : fix aclocal.m4 breakage 2008-12-16 05:13:29 +0100 kstribley r265520 : #i93645# change to autoconf && configure 2008-12-16 04:39:48 +0100 kstribley r265519 : #i93645# modified LD_FLAGS so that system graphite isn't pulled in by accident and fixed autoconf problem 2008-12-15 14:16:25 +0100 rene r265497 : check for working STL 2008-12-15 12:53:39 +0100 rene r265473 : revert broken check 2008-12-15 11:59:21 +0100 kstribley r265472 : #i93645# added check for system STL, since this is a requirement for system graphite to work correctly and moved the position of the check further down 2008-12-15 11:55:34 +0100 kstribley r265471 : #i93645# remove references to gr3ooo to allow system graphite to be used 2008-12-12 18:48:18 +0100 rene r265437 : fix link for system-graphite 2008-12-12 18:46:45 +0100 rene r265436 : the tarball is in graphite, remove obsolete check 2008-12-12 18:22:22 +0100 rene r265433 : typo; re-autoconf 2008-12-12 17:35:26 +0100 rene r265432 : actually implement SYSTEM_GRAPHIT checks (as already checked for in makefile.mks) but remove the checks in graphit itself and move to BUILD_TYPE 2008-12-12 08:08:33 +0100 kstribley r265387 : #i69129# 2 of the patched files need windows line endings so patch works on linux as well as windows 2008-12-12 08:04:41 +0100 kstribley r265386 : #i69129# rtl fallback fix which prevents caching of segments with fallback 2008-12-08 04:28:12 +0100 kstribley r264969 : results of running autoconf with graphite config changes #i69129# 2008-12-05 08:12:47 +0100 kstribley r264886 : backout unintential change at r264884 2008-12-05 06:26:33 +0100 kstribley r264884 : #i96925# fixes for uniscribe fallback 2008-12-05 06:11:37 +0100 kstribley r264883 : #i69129# improvements to windows graphite code, including caching of sila table lookup 2008-12-02 13:28:51 +0100 kstribley r264694 : #i93645# add graphite library and append to patch 2008-11-27 06:47:10 +0100 kstribley r264445 : #69129# fix rtl loop bug and rtl caching problem 2008-11-27 06:42:20 +0100 kstribley r264444 : add caching for GraphiteFontAdaptor 2008-11-14 15:57:03 +0100 kstribley r263681 : #69129# add graphite addtional files from cvs 2008-11-14 15:54:47 +0100 kstribley r263680 : #69129# fix for modified resolution api 2008-11-13 16:24:09 +0100 kstribley r263652 : #69129# add skeleton to build graphite module library 2008-11-13 16:22:19 +0100 kstribley r263651 : #69129# add skeleton to build graphite module library 2008-11-13 16:16:10 +0100 kstribley r263650 : #69129# migrate from cvs 2008-11-13 15:26:54 +0100 kstribley r263646 : #69129# add a module for the graphite library --- canvas/source/cairo/cairo_canvasfont.cxx | 3 + canvas/source/cairo/makefile.mk | 2 +- canvas/source/directx/dx_textlayout_drawhelper.cxx | 3 + canvas/source/directx/makefile.mk | 4 +- canvas/source/vcl/canvasfont.cxx | 4 +- canvas/source/vcl/makefile.mk | 2 +- cppcanvas/source/mtfrenderer/implrenderer.cxx | 4 + cppcanvas/util/makefile.mk | 2 +- svtools/source/control/ctrltool.cxx | 6 +- vcl/inc/vcl/graphite_adaptors.hxx | 154 +++ vcl/inc/vcl/graphite_cache.hxx | 265 ++++ vcl/inc/vcl/graphite_features.hxx | 77 ++ vcl/inc/vcl/graphite_layout.hxx | 167 +++ vcl/inc/vcl/graphite_serverfont.hxx | 103 ++ vcl/prj/build.lst | 2 +- vcl/source/gdi/makefile.mk | 3 + vcl/source/gdi/outdev3.cxx | 67 +- vcl/source/gdi/sallayout.cxx | 140 +- vcl/source/glyphs/gcach_ftyp.cxx | 14 + vcl/source/glyphs/gcach_layout.cxx | 0 vcl/source/glyphs/gcach_rbmp.cxx | 0 vcl/source/glyphs/glyphcache.cxx | 26 +- vcl/source/glyphs/graphite_adaptors.cxx | 327 +++++ vcl/source/glyphs/graphite_cache.cxx | 198 +++ vcl/source/glyphs/graphite_features.cxx | 289 +++++ vcl/source/glyphs/graphite_layout.cxx | 1367 ++++++++++++++++++++ vcl/source/glyphs/graphite_serverfont.cxx | 88 ++ vcl/source/glyphs/graphite_textsrc.cxx | 172 +++ vcl/source/glyphs/graphite_textsrc.hxx | 131 ++ vcl/source/glyphs/makefile.mk | 21 + vcl/unx/inc/salgdi.h | 2 + vcl/unx/source/gdi/makefile.mk | 4 + vcl/unx/source/gdi/pspgraphics.cxx | 48 +- vcl/unx/source/gdi/salgdi.cxx | 7 +- vcl/unx/source/gdi/salgdi3.cxx | 27 +- vcl/util/makefile.mk | 26 +- vcl/win/inc/salgdi.h | 6 + vcl/win/source/gdi/MAKEFILE.MK | 4 + vcl/win/source/gdi/salgdi3.cxx | 15 + vcl/win/source/gdi/winlayout.cxx | 307 ++++- vcl/win/source/window/MAKEFILE.MK | 4 + 41 files changed, 4039 insertions(+), 52 deletions(-) create mode 100644 vcl/inc/vcl/graphite_adaptors.hxx create mode 100644 vcl/inc/vcl/graphite_cache.hxx create mode 100644 vcl/inc/vcl/graphite_features.hxx create mode 100644 vcl/inc/vcl/graphite_layout.hxx create mode 100644 vcl/inc/vcl/graphite_serverfont.hxx mode change 100755 => 100644 vcl/source/glyphs/gcach_layout.cxx mode change 100755 => 100644 vcl/source/glyphs/gcach_rbmp.cxx create mode 100644 vcl/source/glyphs/graphite_adaptors.cxx create mode 100644 vcl/source/glyphs/graphite_cache.cxx create mode 100644 vcl/source/glyphs/graphite_features.cxx create mode 100644 vcl/source/glyphs/graphite_layout.cxx create mode 100644 vcl/source/glyphs/graphite_serverfont.cxx create mode 100644 vcl/source/glyphs/graphite_textsrc.cxx create mode 100644 vcl/source/glyphs/graphite_textsrc.hxx mode change 100755 => 100644 vcl/win/source/gdi/winlayout.cxx diff --git a/canvas/source/cairo/cairo_canvasfont.cxx b/canvas/source/cairo/cairo_canvasfont.cxx index 3ef5db762c60..c6fa0847e660 100644 --- a/canvas/source/cairo/cairo_canvasfont.cxx +++ b/canvas/source/cairo/cairo_canvasfont.cxx @@ -37,6 +37,7 @@ #include #include +#include #include "cairo_canvasfont.hxx" #include "cairo_textlayout.hxx" @@ -86,6 +87,8 @@ namespace cairocanvas maFont->SetWeight( static_cast(rFontRequest.FontDescription.FontDescription.Weight) ); maFont->SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL ); + maFont->SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale)); + // adjust to stretched/shrinked font if( !::rtl::math::approxEqual( rFontMatrix.m00, rFontMatrix.m11) ) { diff --git a/canvas/source/cairo/makefile.mk b/canvas/source/cairo/makefile.mk index bd54254abf7e..2ab726da3464 100644 --- a/canvas/source/cairo/makefile.mk +++ b/canvas/source/cairo/makefile.mk @@ -84,7 +84,7 @@ SLOFILES = $(SLO)$/cairo_cachedbitmap.obj \ SHL1TARGET=$(TARGET).uno -SHL1STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(TOOLSLIB) +SHL1STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(TOOLSLIB) $(I18NISOLANGLIB) .IF "$(GUI)"=="UNX" diff --git a/canvas/source/directx/dx_textlayout_drawhelper.cxx b/canvas/source/directx/dx_textlayout_drawhelper.cxx index f44d8aa4a518..358bd1e9d74f 100755 --- a/canvas/source/directx/dx_textlayout_drawhelper.cxx +++ b/canvas/source/directx/dx_textlayout_drawhelper.cxx @@ -52,6 +52,7 @@ #include #include "dx_impltools.hxx" #include +#include #include "dx_textlayout_drawhelper.hxx" #include "dx_bitmap.hxx" #include "dx_canvasfont.hxx" @@ -135,6 +136,8 @@ namespace dxcanvas aFont.SetWeight( static_cast(rFontRequest.FontDescription.FontDescription.Weight) ); aFont.SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL ); + aFont.SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale)); + // setup font color aFont.SetColor( aColor ); aFont.SetFillColor( aColor ); diff --git a/canvas/source/directx/makefile.mk b/canvas/source/directx/makefile.mk index c1d210dfcf64..1a9db2ec51c0 100644 --- a/canvas/source/directx/makefile.mk +++ b/canvas/source/directx/makefile.mk @@ -96,7 +96,7 @@ GDIPLUS_SLOFILES = \ $(SLO)$/dx_canvas.obj GDIPLUS_SLOFILES += $(SHARED_SLOFILES) -STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) +STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) $(I18NISOLANGLIB) ######################################################## @@ -194,7 +194,7 @@ LIB3OBJFILES = $(GDIPLUS_SLOFILES) SHL3TARGET=$(TARGET3).uno # Links import libraries. -SHL3STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) +SHL3STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) $(I18NISOLANGLIB) # Specifies an import library to create. For Win32 only. SHL3IMPLIB=i$(TARGET3).lib diff --git a/canvas/source/vcl/canvasfont.cxx b/canvas/source/vcl/canvasfont.cxx index 9fb69875ecde..b049e1e4f317 100644 --- a/canvas/source/vcl/canvasfont.cxx +++ b/canvas/source/vcl/canvasfont.cxx @@ -35,7 +35,7 @@ #include #include - +#include #include #include "canvasfont.hxx" @@ -67,6 +67,8 @@ namespace vclcanvas maFont->SetWeight( static_cast(rFontRequest.FontDescription.FontDescription.Weight) ); maFont->SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL ); + maFont->SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale)); + // adjust to stretched/shrinked font if( !::rtl::math::approxEqual( rFontMatrix.m00, rFontMatrix.m11) ) { diff --git a/canvas/source/vcl/makefile.mk b/canvas/source/vcl/makefile.mk index 781cd58d8b91..fdfdd62d16b8 100644 --- a/canvas/source/vcl/makefile.mk +++ b/canvas/source/vcl/makefile.mk @@ -73,7 +73,7 @@ SLOFILES = $(SLO)$/backbuffer.obj \ SHL1TARGET=$(TARGET).uno -SHL1STDLIBS= $(TOOLSLIB) $(TKLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(GOODIESLIB) +SHL1STDLIBS= $(TOOLSLIB) $(TKLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(GOODIESLIB) $(I18NISOLANGLIB) SHL1IMPLIB=i$(TARGET) SHL1LIBS=$(SLB)$/$(TARGET).lib diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx index 6269cfb11ef4..c6f9a295b332 100644 --- a/cppcanvas/source/mtfrenderer/implrenderer.cxx +++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx @@ -83,6 +83,7 @@ #include #include #include +#include #include #include @@ -956,6 +957,9 @@ namespace cppcanvas rParms.mrParms.maFontLetterForm.getValue() : (rFont.GetItalic() == ITALIC_NONE) ? 0 : 9; + LanguageType aLang = rFont.GetLanguage(); + aFontRequest.Locale = MsLangId::convertLanguageToLocale(aLang, false); + // setup state-local text transformation, // if the font be rotated const short nFontAngle( rFont.GetOrientation() ); diff --git a/cppcanvas/util/makefile.mk b/cppcanvas/util/makefile.mk index a5ac026e262c..4d0ff2a8dc55 100644 --- a/cppcanvas/util/makefile.mk +++ b/cppcanvas/util/makefile.mk @@ -50,7 +50,7 @@ LIB1FILES=\ SHL1TARGET= $(TARGET)$(DLLPOSTFIX) SHL1IMPLIB= i$(TARGET) -SHL1STDLIBS= $(TOOLSLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CANVASTOOLSLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) +SHL1STDLIBS= $(TOOLSLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CANVASTOOLSLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(I18NISOLANGLIB) .IF "$(debug)$(dbgutil)"!="" SHL1STDLIBS += $(CPPUHELPERLIB) diff --git a/svtools/source/control/ctrltool.cxx b/svtools/source/control/ctrltool.cxx index 35e86189c352..77bb996584bd 100644 --- a/svtools/source/control/ctrltool.cxx +++ b/svtools/source/control/ctrltool.cxx @@ -161,7 +161,11 @@ static void ImplMakeSearchString( XubString& rStr ) static void ImplMakeSearchStringFromName( XubString& rStr ) { - rStr = rStr.GetToken( 0, ';' ); + // check for features before alternate font separator + if (rStr.Search(':') < rStr.Search(';')) + rStr = rStr.GetToken( 0, ':' ); + else + rStr = rStr.GetToken( 0, ';' ); ImplMakeSearchString( rStr ); } diff --git a/vcl/inc/vcl/graphite_adaptors.hxx b/vcl/inc/vcl/graphite_adaptors.hxx new file mode 100644 index 000000000000..41ffa00b0f8f --- /dev/null +++ b/vcl/inc/vcl/graphite_adaptors.hxx @@ -0,0 +1,154 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SV_GRAPHITEADAPTORS_HXX +#define _SV_GRAPHITEADAPTORS_HXX + +// We need this to enable namespace support in libgrengine headers. +#define GR_NAMESPACE + +// Standard Library +#include +// Platform + +#ifndef _SVWIN_H +#include +#endif + +#ifndef _SV_SVSYS_HXX +#include +#endif + +#ifndef _SV_SALGDI_HXX +#include +#endif + +#ifndef _SV_SALLAYOUT_HXX +#include +#endif + +// Module +#include "vcl/dllapi.h" + +// Libraries +#include +#include +#include + + +// Module type definitions and forward declarations. +// +#ifndef MSC +// SAL/VCL types +class ServerFont; +class FreetypeServerFont; + +// Graphite types + +struct FontProperties : gr::FontProps +{ + FontProperties(const FreetypeServerFont & font) throw(); +}; + +namespace grutils +{ + class GrFeatureParser; +} + +// This class adapts the Sal font and graphics services to form required by +// the Graphite engine. +// @author tse +// +class VCL_DLLPUBLIC GraphiteFontAdaptor : public gr::Font +{ +typedef std::map > GlyphMetricMap; + +public: + static bool IsGraphiteEnabledFont(ServerFont &) throw(); + + GraphiteFontAdaptor(ServerFont & font, const sal_Int32 dpi_x, const sal_Int32 dpi_y); + GraphiteFontAdaptor(const GraphiteFontAdaptor &) throw(); + ~GraphiteFontAdaptor() throw(); + + gr::Font * copyThis(); + + // Basic attribute accessors. + virtual float ascent(); + virtual float descent(); + virtual bool bold(); + virtual bool italic(); + virtual float height(); + virtual unsigned int getDPIx(); + virtual unsigned int getDPIy(); + + // Font access methods. + virtual const void * getTable(gr::fontTableId32 tableID, size_t * pcbSize); + virtual void getFontMetrics(float * ascent_out, float * descent_out = 0, float * em_square_out = 0); + + // Glyph metrics. + virtual void getGlyphMetrics(gr::gid16 glyphID, gr::Rect & boundingBox, gr::Point & advances); + + // Adaptor attributes. + const FontProperties & fontProperties() const throw(); + FreetypeServerFont & font() const throw(); + const grutils::GrFeatureParser * features() const { return mpFeatures; }; + +private: + virtual void UniqueCacheInfo(std::wstring &, bool &, bool &); + + FreetypeServerFont& mrFont; + FontProperties maFontProperties; + const unsigned int mnDpiX, mnDpiY; + const float mfAscent, + mfDescent, + mfEmUnits; + grutils::GrFeatureParser * mpFeatures; + GlyphMetricMap maGlyphMetricMap; +}; + +// Partial implementation of class GraphiteFontAdaptor. +// +inline const FontProperties & GraphiteFontAdaptor::fontProperties() const throw() { + return maFontProperties; +} + +inline FreetypeServerFont & GraphiteFontAdaptor::font() const throw() { + return mrFont; +} +#endif // not MFC + +// Partial implementation of class TextSourceAdaptor. +// +//inline const ImplLayoutArgs & TextSourceAdaptor::layoutArgs() const throw() { +// return _layout_args; +//} + + +#endif // _SV_GRAPHITEADAPTORS_HXX diff --git a/vcl/inc/vcl/graphite_cache.hxx b/vcl/inc/vcl/graphite_cache.hxx new file mode 100644 index 000000000000..5a537c5f1e48 --- /dev/null +++ b/vcl/inc/vcl/graphite_cache.hxx @@ -0,0 +1,265 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// Description: Classes to cache Graphite Segments to try to improve +// rendering performance. + +#ifndef GraphiteSegmentCache_h +#define GraphiteSegmentCache_h + +#include +#include + +#define GRCACHE_REUSE_VECTORS 1 + +//#include +#include + +class TextSourceAdaptor; +/** +* GrSegRecord stores a Graphite Segment and its associated text +*/ +class GrSegRecord { +public: + GrSegRecord(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl); + + ~GrSegRecord(); + + void reuse(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl); + + void clearVectors(); + void clear(); +#ifdef GRCACHE_REUSE_VECTORS + void setGlyphVectors(long nWidth, GraphiteLayout::Glyphs & vGlyphs, std::vector vCharDxs, + std::vector & vChar2Base, std::vector & vGlyph2Char) + { + clearVectors(); + mnWidth = nWidth; + mvGlyphs.insert(mvGlyphs.begin(), vGlyphs.begin(), vGlyphs.end()); + mvCharDxs.insert(mvCharDxs.begin(),vCharDxs.begin(),vCharDxs.end()); + mvChar2BaseGlyph.insert(mvChar2BaseGlyph.begin(),vChar2Base.begin(),vChar2Base.end()); + mvGlyph2Char.insert(mvGlyph2Char.begin(),vGlyph2Char.begin(),vGlyph2Char.end()); + } +#endif + gr::Segment * getSegment() { return m_seg; } + TextSourceAdaptor * getTextSrc() { return m_text; } + void unlock() { --m_lockCount; } + bool isRtl() const { return mbIsRtl; } +#ifdef GRCACHE_REUSE_VECTORS + const long & width() const { return mnWidth; } + const GraphiteLayout::Glyphs & glyphs() const { return mvGlyphs; } + const std::vector & charDxs() const { return mvCharDxs; } + const std::vector & char2BaseGlyph() const { return mvChar2BaseGlyph; } + const std::vector & glyph2Char() const { return mvGlyph2Char; } +#endif +private: + rtl::OUString * m_rope; + TextSourceAdaptor * m_text; + gr::Segment * m_seg; + const xub_Unicode * m_nextKey; + const xub_Unicode* m_pStr; + size_t m_startChar; + float m_fontScale; + long mnWidth; + GraphiteLayout::Glyphs mvGlyphs; // glyphs in display order + std::vector mvCharDxs; // right hand side x offset of each glyph + std::vector mvChar2BaseGlyph; + std::vector mvGlyph2Char; + bool mbIsRtl; + int m_lockCount; + friend class GraphiteSegmentCache; +}; + +typedef std::hash_map > GraphiteSegMap; +typedef std::hash_multimap GraphiteRopeMap; +typedef std::pair GrRMEntry; + +/** +* GraphiteSegmentCache contains the cached Segments for one particular font size +*/ +class GraphiteSegmentCache +{ + enum { + // not really sure what good values are here, + // bucket size should be >> cache size + SEG_BUCKET_SIZE = 4096, + SEG_CACHE_SIZE = 255 + }; +public: + GraphiteSegmentCache() + : m_segMap(SEG_BUCKET_SIZE), + m_oldestKey(NULL) {}; + ~GraphiteSegmentCache() + { + m_ropeMap.clear(); + GraphiteSegMap::iterator i = m_segMap.begin(); + while (i != m_segMap.end()) + { + GrSegRecord *r = i->second; + delete r; + ++i; + } + m_segMap.clear(); + }; + GrSegRecord * getSegment(ImplLayoutArgs & layoutArgs, bool bIsRtl) + { + GrSegRecord * found = NULL; + // try to find a segment starting at correct place, if not, try to find a + // match for the complete buffer + GraphiteSegMap::iterator iMap = + m_segMap.find(reinterpret_cast(layoutArgs.mpStr + + layoutArgs.mnMinCharPos)); + if (iMap != m_segMap.end()) + { + found = iMap->second; + } + else + { + iMap = m_segMap.find(reinterpret_cast(layoutArgs.mpStr)); + if (iMap != m_segMap.end()) + { + found = iMap->second; + } + } + if (found) + { + if (found->m_seg->startCharacter() <= layoutArgs.mnMinCharPos && + found->m_seg->stopCharacter() >= layoutArgs.mnEndCharPos) + { + const size_t seg_char_limit = min(layoutArgs.mnLength, layoutArgs.mnEndCharPos + + GraphiteLayout::EXTRA_CONTEXT_LENGTH); + DBG_ASSERT(found && found->m_seg, "null entry in GraphiteSegmentCache"); + // restore original start character, in case it has changed + found->m_seg->setTextSourceOffset(found->m_startChar); + // check that characters are the same, at least in the range of + // interest + // We could use substr and ==, but substr does a copy, + // so its probably faster to do it like this + for (size_t i = layoutArgs.mnMinCharPos; i < seg_char_limit; i++) + { + //if (!found->m_rope->match(rtl::OUString(layoutArgs.mpStr[i], layoutArgs.mnLength), i - found->m_seg->startCharacter())) + if (found->m_rope->getStr()[i-found->m_seg->startCharacter()] != layoutArgs.mpStr[i]) + return NULL; + } + if (found->isRtl() != bIsRtl) + { + return NULL; + } +// if (found->m_lockCount != 0) +// OutputDebugString("Multple users of SegRecord!"); + found->m_lockCount++; + } + else found = NULL; + } + else + { + // the pointers aren't the same, but we might still have the same text in a segment + // this is expecially needed when editing a large paragraph + // each edit changes the pointers, but if we don't reuse any segments it gets very + // slow. + const size_t seg_char_limit = min(layoutArgs.mnLength, layoutArgs.mnEndCharPos + + GraphiteLayout::EXTRA_CONTEXT_LENGTH); + rtl::OUString * rope = new rtl::OUString(layoutArgs.mpStr + layoutArgs.mnMinCharPos, + seg_char_limit - layoutArgs.mnMinCharPos); + if (!rope) return NULL; + size_t nHash = (*(rope)).hashCode(); + GrRMEntry range = m_ropeMap.equal_range(nHash); + while (range.first != range.second) + { + found = range.first->second; + if (found->m_lockCount == 0) + { + if(rope->match(*(found->m_rope))) + { + // found, but the pointers are all wrong + found->m_seg->setTextSourceOffset(layoutArgs.mnMinCharPos); + // the switch is done in graphite_layout.cxx + //found->m_text->switchLayoutArgs(layoutArgs); + found->m_lockCount++; + break; + } + else + found = NULL; + } + else + found = NULL; + ++(range.first); + } + delete rope; + } + return found; + }; + GrSegRecord * cacheSegment(TextSourceAdaptor * adapter, gr::Segment * seg, bool bIsRtl); +private: + GraphiteSegMap m_segMap; + GraphiteRopeMap m_ropeMap; + const xub_Unicode * m_oldestKey; + const xub_Unicode * m_prevKey; +}; + +typedef std::hash_map > GraphiteCacheMap; + +/** +* GraphiteCacheHandler maps a particular font, style, size to a GraphiteSegmentCache +*/ +class GraphiteCacheHandler +{ +public: + GraphiteCacheHandler() : m_cacheMap(255) {}; + ~GraphiteCacheHandler() + { + GraphiteCacheMap::iterator i = m_cacheMap.begin(); + while (i != m_cacheMap.end()) + { + GraphiteSegmentCache *r = i->second; + delete r; + ++i; + } + m_cacheMap.clear(); + }; + + static GraphiteCacheHandler instance; + + GraphiteSegmentCache * getCache(sal_Int32 & fontHash) + { + if (m_cacheMap.count(fontHash) > 0) + { + return m_cacheMap.find(fontHash)->second; + } + GraphiteSegmentCache *pCache = new GraphiteSegmentCache(); + m_cacheMap[fontHash] = pCache; + return pCache; + } +private: + GraphiteCacheMap m_cacheMap; +}; + +#endif + diff --git a/vcl/inc/vcl/graphite_features.hxx b/vcl/inc/vcl/graphite_features.hxx new file mode 100644 index 000000000000..6cfe5dfca0fd --- /dev/null +++ b/vcl/inc/vcl/graphite_features.hxx @@ -0,0 +1,77 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// Description: +// Parse a string of features specified as ; separated pairs. +// e.g. +// 1001=1&2002=2&fav1=0 + +#include +#include +#include + +namespace grutils +{ + + class GrFeatureParser + { + public: + enum { MAX_FEATURES = 64 }; + static const char FEAT_PREFIX; + static const char FEAT_SEPARATOR; + static const char FEAT_ID_VALUE_SEPARATOR; + static const std::string ISO_LANG; + GrFeatureParser(gr::Font & font, const std::string features, const std::string lang); + GrFeatureParser(gr::Font & font, const std::string lang); + GrFeatureParser(const GrFeatureParser & copy); + ~GrFeatureParser(); + size_t getFontFeatures(gr::FeatureSetting settings[MAX_FEATURES]) const; + bool parseErrors() { return mbErrors; }; + static bool isValid(gr::Font & font, gr::FeatureSetting & setting); + gr::isocode getLanguage() const { return maLang; }; + bool hasLanguage() const { return (maLang.rgch[0] != '\0'); } + sal_Int32 hashCode() const; + private: + void setLang(gr::Font & font, const std::string & lang); + bool isCharId(const std::string & id, size_t offset, size_t length); + int getCharId(const std::string & id, size_t offset, size_t length); + int getIntValue(const std::string & id, size_t offset, size_t length); + size_t mnNumSettings; + gr::isocode maLang; + bool mbErrors; + gr::FeatureSetting maSettings[64]; + }; + + union FeatId + { + gr::featid num; + unsigned char label[5]; + }; +} diff --git a/vcl/inc/vcl/graphite_layout.hxx b/vcl/inc/vcl/graphite_layout.hxx new file mode 100644 index 000000000000..2ec3bc4c2391 --- /dev/null +++ b/vcl/inc/vcl/graphite_layout.hxx @@ -0,0 +1,167 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SV_GRAPHITELAYOUT_HXX +#define _SV_GRAPHITELAYOUT_HXX +// Description: An implementation of the SalLayout interface that uses the +// Graphite engine. + +// We need this to enable namespace support in libgrengine headers. +#define GR_NAMESPACE + +#define GRCACHE 1 + +// Standard Library +#include +#include +#include +// Libraries +#include +#include +#include +#include +#include +// Platform +#include +#include +// Module + +// For backwards compatibility with 2.4.x +#if (SUPD == 680) +typedef sal_Int32 sal_GlyphId; +#endif + + +// Module type definitions and forward declarations. +// +class TextSourceAdaptor; +class GraphiteFontAdaptor; +class GrSegRecord; +// SAL/VCL types +class ServerFont; +// Graphite types +namespace gr { class Segment; class GlyphIterator; } +namespace grutils { class GrFeatureParser; } + +// This class uses the SIL Graphite engine to provide complex text layout services to the VCL +// @author tse +// +class VCL_DLLPUBLIC GraphiteLayout : public SalLayout +{ +public: + class Glyphs : public std::vector + { + public: + typedef std::pair iterator_pair_t; + + void fill_from(gr::Segment & rSeg, ImplLayoutArgs & rArgs, + bool bRtl, long &rWidth, float fScaling, + std::vector & rChar2Base, std::vector & rGlyph2Char, + std::vector & rCharDxs); + void move_glyph(Glyphs::iterator, long dx); + + const_iterator cluster_base(const_iterator) const; + iterator_pair_t neighbour_clusters(const_iterator) const; + private: + std::pair appendCluster(gr::Segment & rSeg, ImplLayoutArgs & rArgs, + bool bRtl, int nFirstCharInCluster, int nNextChar, + int nFirstGlyphInCluster, int nNextGlyph, float fScaling, + std::vector & rChar2Base, std::vector & rGlyph2Char, + std::vector & rCharDxs, long & rDXOffset); + void append(gr::Segment & rSeg, ImplLayoutArgs & rArgs, gr::GlyphInfo & rGi, float nextGlyphOrigin, float fScaling, std::vector & rChar2Base, std::vector & rGlyph2Char, std::vector & rCharDxs, long & rDXOffset, bool bIsBase); + }; + + mutable Glyphs mvGlyphs; + void clear(); + +private: + TextSourceAdaptor * mpTextSrc; // Text source. + gr::LayoutEnvironment maLayout; + const gr::Font &mrFont; + long mnWidth; + std::vector mvCharDxs; + std::vector mvChar2BaseGlyph; + std::vector mvGlyph2Char; + float mfScaling; + const grutils::GrFeatureParser * mpFeatures; + +public: + GraphiteLayout(const gr::Font & font, const grutils::GrFeatureParser * features = NULL) throw(); + + // used by upper layers + virtual bool LayoutText( ImplLayoutArgs& ); // first step of layout + // split into two stages to allow dc to be restored on the segment +#ifdef GRCACHE + gr::Segment * CreateSegment(ImplLayoutArgs& rArgs, GrSegRecord ** pRecord = NULL); + bool LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment, GrSegRecord * pSegRecord); +#else + gr::Segment * CreateSegment(ImplLayoutArgs& rArgs); + bool LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment); +#endif + + virtual void AdjustLayout( ImplLayoutArgs& ); // adjusting positions + + // methods using string indexing + virtual int GetTextBreak( long nMaxWidth, long nCharExtra=0, int nFactor=1 ) const; + virtual long FillDXArray( sal_Int32* pDXArray ) const; + virtual void ApplyDXArray(ImplLayoutArgs &rArgs, std::vector & rDeltaWidth); + + virtual void GetCaretPositions( int nArraySize, sal_Int32* pCaretXArray ) const; + + // methods using glyph indexing + virtual int GetNextGlyphs(int nLen, sal_GlyphId* pGlyphIdxAry, ::Point & rPos, int&, + sal_Int32* pGlyphAdvAry = 0, int* pCharPosAry = 0 ) const; + + // used by glyph+font+script fallback + virtual void MoveGlyph( int nStart, long nNewXPos ); + virtual void DropGlyph( int nStart ); + virtual void Simplify( bool bIsBase ); + + // Dummy implementation so layout can be shared between Linux/Windows + virtual void DrawText(SalGraphics&) const {}; + + virtual ~GraphiteLayout() throw(); + void SetFeatures(grutils::GrFeatureParser * aFeature) { mpFeatures = aFeature; } + void SetFontScale(float s) { mfScaling = s; }; + const TextSourceAdaptor * textSrc() const { return mpTextSrc; }; + virtual sal_GlyphId getKashidaGlyph(int & width) = 0; + void kashidaJustify(std::vector & rDeltaWidth, sal_GlyphId, int width); + + static const int EXTRA_CONTEXT_LENGTH; +private: + int glyph_to_char(Glyphs::iterator); + std::pair glyph_to_chars(const GlyphItem &) const; + + std::pair caret_positions(size_t) const; +}; + + + +#endif // _SV_GRAPHITELAYOUT_HXX diff --git a/vcl/inc/vcl/graphite_serverfont.hxx b/vcl/inc/vcl/graphite_serverfont.hxx new file mode 100644 index 000000000000..d9e6670df79b --- /dev/null +++ b/vcl/inc/vcl/graphite_serverfont.hxx @@ -0,0 +1,103 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SV_GRAPHITESERVERFONT_HXX +#define _SV_GRAPHITESERVERFONT_HXX + +// We need this to enable namespace support in libgrengine headers. +#define GR_NAMESPACE + +#ifndef MSC +#include +#include + +// Modules + +class VCL_DLLPUBLIC GraphiteLayoutImpl : public GraphiteLayout +{ +public: + GraphiteLayoutImpl(const gr::Font & font, const grutils::GrFeatureParser * features, GraphiteFontAdaptor * pFont) throw() + : GraphiteLayout(font, features), mpFont(pFont) {}; + virtual ~GraphiteLayoutImpl() throw() {}; + virtual sal_GlyphId getKashidaGlyph(int & width); +private: + GraphiteFontAdaptor * mpFont; +}; + +// This class implments the server font specific parts. +// @author tse +// +class VCL_DLLPUBLIC GraphiteServerFontLayout : public ServerFontLayout +{ +private: + mutable GraphiteFontAdaptor * mpFont; + // mutable so that the DrawOffset/DrawBase can be set + mutable GraphiteLayoutImpl maImpl; +public: + GraphiteServerFontLayout(GraphiteFontAdaptor * font) throw(); + + virtual bool LayoutText( ImplLayoutArgs& rArgs) { SalLayout::AdjustLayout(rArgs); return maImpl.LayoutText(rArgs); }; // first step of layout + virtual void AdjustLayout( ImplLayoutArgs& rArgs) + { + SalLayout::AdjustLayout(rArgs); + maImpl.DrawBase() = maDrawBase; + maImpl.DrawOffset() = maDrawOffset; + maImpl.AdjustLayout(rArgs); + }; + virtual long GetTextWidth() const { return maImpl.GetTextWidth(); } + virtual long FillDXArray( sal_Int32* dxa ) const { return maImpl.FillDXArray(dxa); } + virtual int GetTextBreak( long mw, long ce, int f ) const { return maImpl.GetTextBreak(mw, ce, f); } + virtual void GetCaretPositions( int as, sal_Int32* cxa ) const { maImpl.GetCaretPositions(as, cxa); } + + // used by display layers + virtual int GetNextGlyphs( int l, sal_GlyphId* gia, Point& p, int& s, + sal_Int32* gaa = NULL, int* cpa = NULL ) const + { + maImpl.DrawBase() = maDrawBase; + maImpl.DrawOffset() = maDrawOffset; + return maImpl.GetNextGlyphs(l, gia, p, s, gaa, cpa); + } + + virtual void MoveGlyph( int nStart, long nNewXPos ) { maImpl.MoveGlyph(nStart, nNewXPos); }; + virtual void DropGlyph( int nStart ) { maImpl.DropGlyph(nStart); }; + virtual void Simplify( bool bIsBase ) { maImpl.Simplify(bIsBase); }; + + virtual ~GraphiteServerFontLayout() throw(); + +// For use with PspGraphics + const sal_Unicode* getTextPtr() const; + int getMinCharPos() const { return mnMinCharPos; } + int getMaxCharPos() const { return mnEndCharPos; } +}; + + + +#endif +#endif //_SV_GRAPHITESERVERFONT_HXX diff --git a/vcl/prj/build.lst b/vcl/prj/build.lst index 3af135dd760b..52b444164029 100644 --- a/vcl/prj/build.lst +++ b/vcl/prj/build.lst @@ -1,4 +1,4 @@ -vc vcl : l10n apple_remote BOOST:boost rsc sot ucbhelper unotools ICU:icu i18npool i18nutil unoil ridljar X11_EXTENSIONS:x11_extensions offuh basegfx basebmp tools transex3 icc SO:print_header cpputools NULL +vc vcl : l10n apple_remote BOOST:boost rsc sot ucbhelper unotools ICU:icu GRAPHITE:graphite i18npool i18nutil unoil ridljar X11_EXTENSIONS:x11_extensions offuh basegfx basebmp tools transex3 icc SO:print_header cpputools NULL vc vcl usr1 - all vc_mkout NULL vc vcl\inc nmake - all vc_inc NULL vc vcl\source\glyphs nmake - all vc_glyphs vc_inc NULL diff --git a/vcl/source/gdi/makefile.mk b/vcl/source/gdi/makefile.mk index 4d0ded320060..a09ae92dcb5e 100644 --- a/vcl/source/gdi/makefile.mk +++ b/vcl/source/gdi/makefile.mk @@ -45,6 +45,9 @@ TARGET=gdi .IF "$(COM)"=="ICC" CDEFS+=-D_STD_NO_NAMESPACE -D_VOS_NO_NAMESPACE -D_UNO_NO_NAMESPACE .ENDIF +.IF "$(ENABLE_GRAPHITE)" == "TRUE" +CDEFS+=-DENABLE_GRAPHITE +.ENDIF # --- Files -------------------------------------------------------- diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx index 710620d54ab8..345dc162e67e 100644 --- a/vcl/source/gdi/outdev3.cxx +++ b/vcl/source/gdi/outdev3.cxx @@ -66,6 +66,9 @@ #ifndef _OSL_FILE_H #include #endif +#ifdef ENABLE_GRAPHITE +#include +#endif #include #include @@ -2749,6 +2752,14 @@ size_t ImplFontCache::IFSD_Hash::operator()( const ImplFontSelectData& rFSD ) co // TODO: does it pay off to improve this hash function? static FontNameHash aFontNameHash; size_t nHash = aFontNameHash( rFSD.maSearchName ); +#ifdef ENABLE_GRAPHITE + // check for features and generate a unique hash if necessary + if (rFSD.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX) + != STRING_NOTFOUND) + { + nHash = aFontNameHash( rFSD.maTargetName ); + } +#endif nHash += 11 * rFSD.mnHeight; nHash += 19 * rFSD.meWeight; nHash += 29 * rFSD.meItalic; @@ -2800,6 +2811,15 @@ bool ImplFontCache::IFSD_Equal::operator()(const ImplFontSelectData& rA, const I return false; } +#ifdef ENABLE_GRAPHITE + // check for features + if ((rA.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX) + != STRING_NOTFOUND || + rB.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX) + != STRING_NOTFOUND) && rA.maTargetName != rB.maTargetName) + return false; +#endif + return true; } @@ -2837,7 +2857,12 @@ ImplFontEntry* ImplFontCache::GetFontEntry( ImplDevFontList* pFontList, // if it is already known get its normalized search name FontNameList::const_iterator it_name = maFontNameList.find( aSearchName ); if( it_name != maFontNameList.end() ) - if( !(*it_name).second.EqualsAscii( "hg", 0, 2) ) + if( !(*it_name).second.EqualsAscii( "hg", 0, 2) +#ifdef ENABLE_GRAPHITE + && (aSearchName.Search(grutils::GrFeatureParser::FEAT_PREFIX) + == STRING_NOTFOUND) +#endif + ) aSearchName = (*it_name).second; } @@ -2942,6 +2967,22 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD, { rFSD.maTargetName = GetNextFontToken( rFSD.maName, nTokenPos ); aSearchName = rFSD.maTargetName; + +#ifdef ENABLE_GRAPHITE + // Until features are properly supported, they are appended to the + // font name, so we need to strip them off so the font is found. + xub_StrLen nFeat = aSearchName.Search(grutils::GrFeatureParser::FEAT_PREFIX); + String aOrigName = rFSD.maTargetName; + String aBaseFontName(aSearchName, 0, (nFeat != STRING_NOTFOUND)?nFeat:aSearchName.Len()); + if (nFeat != STRING_NOTFOUND && STRING_NOTFOUND != + aSearchName.Search(grutils::GrFeatureParser::FEAT_ID_VALUE_SEPARATOR, nFeat)) + { + aSearchName = aBaseFontName; + rFSD.maTargetName = aBaseFontName; + } + +#endif + ImplGetEnglishSearchFontName( aSearchName ); ImplFontSubstitute( aSearchName, nSubstFlags, pDevSpecific ); // #114999# special emboldening for Ricoh fonts @@ -2972,6 +3013,10 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD, } } +#ifdef ENABLE_GRAPHITE + // restore the features to make the font selection data unique + rFSD.maTargetName = aOrigName; +#endif // check if the current font name token or its substitute is valid ImplDevFontListData* pFoundData = ImplFindBySearchName( aSearchName ); if( pFoundData ) @@ -2980,16 +3025,21 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD, // some systems provide special customization // e.g. they suggest "serif" as UI-font, but this name cannot be used directly // because the system wants to map it to another font first, e.g. "Helvetica" +#ifdef ENABLE_GRAPHITE + // use the target name to search in the prematch hook + rFSD.maTargetName = aBaseFontName; +#endif if( mpPreMatchHook ) - { if( mpPreMatchHook->FindFontSubstitute( rFSD ) ) - { ImplGetEnglishSearchFontName( aSearchName ); - pFoundData = ImplFindBySearchName( aSearchName ); - if( pFoundData ) - return pFoundData; - } - } +#ifdef ENABLE_GRAPHITE + // the prematch hook uses the target name to search, but we now need + // to restore the features to make the font selection data unique + rFSD.maTargetName = aOrigName; +#endif + pFoundData = ImplFindBySearchName( aSearchName ); + if( pFoundData ) + return pFoundData; // break after last font name token was checked unsuccessfully if( nTokenPos == STRING_NOTFOUND) @@ -5440,6 +5490,7 @@ void OutputDevice::SetFont( const Font& rNewFont ) DBG_CHKOBJ( &rNewFont, Font, NULL ); Font aFont( rNewFont ); + aFont.SetLanguage(rNewFont.GetLanguage()); if ( mnDrawMode & (DRAWMODE_BLACKTEXT | DRAWMODE_WHITETEXT | DRAWMODE_GRAYTEXT | DRAWMODE_GHOSTEDTEXT | DRAWMODE_SETTINGSTEXT | DRAWMODE_BLACKFILL | DRAWMODE_WHITEFILL | DRAWMODE_GRAYFILL | DRAWMODE_NOFILL | DRAWMODE_GHOSTEDFILL | DRAWMODE_SETTINGSFILL ) ) diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx index a96d4dc64b89..21ac05a498fc 100755 --- a/vcl/source/gdi/sallayout.cxx +++ b/vcl/source/gdi/sallayout.cxx @@ -63,6 +63,26 @@ #include +#ifdef DEBUG +//#define MULTI_SL_DEBUG +#endif + +#ifdef MULTI_SL_DEBUG +#include +FILE * mslLogFile = NULL; +FILE * mslLog() +{ +#ifdef MSC + std::string logFileName(getenv("TEMP")); + logFileName.append("\\msllayout.log"); + if (mslLogFile == NULL) mslLogFile = fopen(logFileName.c_str(),"w"); + else fflush(mslLogFile); + return mslLogFile; +#else + return stdout; +#endif +} +#endif // ======================================================================= // TODO: ask the glyph directly, for now we need this method because of #i99367# @@ -1157,11 +1177,17 @@ void GenericSalLayout::ApplyDXArray( ImplLayoutArgs& rArgs ) for( int nCharPos = i = -1; rArgs.GetNextPos( &nCharPos, &bRTL ); ) { n = nCharPos - rArgs.mnMinCharPos; - i = pLogCluster[ n ]; - long nDelta = rArgs.mpDXArray[ n ] ; - if( n > 0 ) - nDelta -= rArgs.mpDXArray[ n-1 ]; - pNewGlyphWidths[ i ] += nDelta * mnUnitsPerPixel; + if( (n < 0) || (nCharCount <= n) ) continue; + + if( pLogCluster[ n ] >= 0 ) + i = pLogCluster[ n ]; + if( i >= 0 ) + { + long nDelta = rArgs.mpDXArray[ n ] ; + if( n > 0 ) + nDelta -= rArgs.mpDXArray[ n-1 ]; + pNewGlyphWidths[ i ] += nDelta * mnUnitsPerPixel; + } } // move cluster positions using the adjusted widths @@ -1768,6 +1794,19 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs ) } } + // Compute rtl flags, since in some scripts glyphs/char order can be + // reversed for a few character sequencies e.g. Myanmar + std::vector vRtl(rArgs.mnEndCharPos - rArgs.mnMinCharPos, false); + rArgs.ResetPos(); + bool bRtl; + int nRunStart, nRunEnd; + while (rArgs.GetNextRun(&nRunStart, &nRunEnd, &bRtl)) + { + if (bRtl) std::fill(vRtl.begin() + nRunStart - rArgs.mnMinCharPos, + vRtl.begin() + nRunEnd - rArgs.mnMinCharPos, true); + } + rArgs.ResetPos(); + // prepare "merge sort" int nStartOld[ MAX_FALLBACK ]; int nStartNew[ MAX_FALLBACK ]; @@ -1804,6 +1843,10 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs ) nStartNew[ nLevel ] = nStartOld[ nLevel ] = 0; nValid[ nLevel ] = mpLayouts[n]->GetNextGlyphs( 1, &nDummy, aPos, nStartNew[ nLevel ], &nGlyphAdv[ nLevel ], &nCharPos[ nLevel ] ); +#ifdef MULTI_SL_DEBUG + if (nValid[nLevel]) fprintf(mslLog(), "layout[%d]->GetNextGlyphs %d,%d x%d a%d c%d %x\n", n, nStartOld[nLevel], nStartNew[nLevel], aPos.X(), nGlyphAdv[nLevel], nCharPos[nLevel], + rArgs.mpStr[nCharPos[nLevel]]); +#endif if( (n > 0) && !nValid[ nLevel ] ) { // an empty fallback layout can be released @@ -1829,6 +1872,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs ) for( n = 0; n < nLevel; ++n ) maFallbackRuns[n].ResetPos(); int nActiveCharPos = nCharPos[0]; + int nLastRunEndChar = (vRtl[nActiveCharPos - mnMinCharPos])? + rArgs.mnEndCharPos : rArgs.mnMinCharPos - 1; + int nRunVisibleEndChar = nCharPos[0]; while( nValid[0] && (nLevel > 0)) { // find best fallback level @@ -1864,6 +1910,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs ) nStartOld[0] = nStartNew[0]; nValid[0] = mpLayouts[0]->GetNextGlyphs( 1, &nDummy, aPos, nStartNew[0], &nGlyphAdv[0], &nCharPos[0] ); +#ifdef MULTI_SL_DEBUG + if (nValid[0]) fprintf(mslLog(), "layout[0]->GetNextGlyphs %d,%d x%d a%d c%d %x\n", nStartOld[0], nStartNew[0], aPos.X(), nGlyphAdv[0], nCharPos[0], rArgs.mpStr[nCharPos[0]]); +#endif if( !nValid[0] ) break; } @@ -1881,7 +1930,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs ) int nOrigCharPos = nCharPos[n]; nValid[n] = mpLayouts[n]->GetNextGlyphs( 1, &nDummy, aPos, nStartNew[n], &nGlyphAdv[n], &nCharPos[n] ); - +#ifdef MULTI_SL_DEBUG + if (nValid[n]) fprintf(mslLog(), "layout[%d]->GetNextGlyphs %d,%d a%d c%d %x\n", n, nStartOld[n], nStartNew[n], nGlyphAdv[n], nCharPos[n], rArgs.mpStr[nCharPos[n]]); +#endif // break after last glyph of active layout if( !nValid[n] ) { @@ -1927,6 +1978,27 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs ) { maFallbackRuns[0].NextRun(); break; } bKeepNotDef = bNeedFallback; } + // check for reordered glyphs + if (aMultiArgs.mpDXArray && + nRunVisibleEndChar < mnEndCharPos && + nRunVisibleEndChar >= mnMinCharPos && + nCharPos[n] < mnEndCharPos && + nCharPos[n] >= mnMinCharPos) + { + if (vRtl[nActiveCharPos - mnMinCharPos]) + { + if (aMultiArgs.mpDXArray[nRunVisibleEndChar-mnMinCharPos] + >= aMultiArgs.mpDXArray[nCharPos[n] - mnMinCharPos]) + { + nRunVisibleEndChar = nCharPos[n]; + } + } + else if (aMultiArgs.mpDXArray[nRunVisibleEndChar-mnMinCharPos] + <= aMultiArgs.mpDXArray[nCharPos[n] - mnMinCharPos]) + { + nRunVisibleEndChar = nCharPos[n]; + } + } } // if a justification array is available @@ -1936,16 +2008,40 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs ) // the run advance is the width from the first char // in the run to the first char in the next run nRunAdvance = 0; - const bool bLTR = (nActiveCharPos < nCharPos[0]); +#ifdef MULTI_SL_DEBUG + const bool bLTR = !(vRtl[nActiveCharPos - mnMinCharPos]);//(nActiveCharPos < nCharPos[0]); + int nOldRunAdv = 0; int nDXIndex = nCharPos[0] - mnMinCharPos - bLTR; if( nDXIndex >= 0 ) - nRunAdvance += aMultiArgs.mpDXArray[ nDXIndex ]; + nOldRunAdv += aMultiArgs.mpDXArray[ nDXIndex ]; nDXIndex = nActiveCharPos - mnMinCharPos - bLTR; if( nDXIndex >= 0 ) - nRunAdvance -= aMultiArgs.mpDXArray[ nDXIndex ]; + nOldRunAdv -= aMultiArgs.mpDXArray[ nDXIndex ]; if( !bLTR ) - nRunAdvance = -nRunAdvance; - + nOldRunAdv = -nOldRunAdv; +#endif + if (vRtl[nActiveCharPos - mnMinCharPos]) + { + if (nRunVisibleEndChar > mnMinCharPos && nRunVisibleEndChar <= mnEndCharPos) + nRunAdvance -= aMultiArgs.mpDXArray[nRunVisibleEndChar - 1 - mnMinCharPos]; + if (nLastRunEndChar > mnMinCharPos && nLastRunEndChar <= mnEndCharPos) + nRunAdvance += aMultiArgs.mpDXArray[nLastRunEndChar - 1 - mnMinCharPos]; +#ifdef MULTI_SL_DEBUG + fprintf(mslLog(), "rtl visible %d-%d,%d-%d adv%d(%d)\n", nLastRunEndChar-1, nRunVisibleEndChar-1, nActiveCharPos - bLTR, nCharPos[0] - bLTR, nRunAdvance, nOldRunAdv); +#endif + } + else + { + if (nRunVisibleEndChar >= mnMinCharPos) + nRunAdvance += aMultiArgs.mpDXArray[nRunVisibleEndChar - mnMinCharPos]; + if (nLastRunEndChar >= mnMinCharPos) + nRunAdvance -= aMultiArgs.mpDXArray[nLastRunEndChar - mnMinCharPos]; +#ifdef MULTI_SL_DEBUG + fprintf(mslLog(), "visible %d-%d,%d-%d adv%d(%d)\n", nLastRunEndChar, nRunVisibleEndChar, nActiveCharPos - bLTR, nCharPos[0] - bLTR, nRunAdvance, nOldRunAdv); +#endif + } + nLastRunEndChar = nRunVisibleEndChar; + nRunVisibleEndChar = nCharPos[0]; // the requested width is still in pixel units // => convert it to base level font units nRunAdvance *= mnUnitsPerPixel; @@ -1963,9 +2059,27 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs ) // prepare for next fallback run nActiveCharPos = nCharPos[0]; + // it essential that the runs don't get ahead of themselves and in the + // if( bKeepNotDef && !bNeedFallback ) statement above, the next run may + // have already been reached on the base level for( int i = nFBLevel; --i >= 0;) - if( !maFallbackRuns[i].PosIsInRun( nActiveCharPos ) ) - maFallbackRuns[i].NextRun(); + { + if (maFallbackRuns[i].GetRun(&nRunStart, &nRunEnd, &bRtl)) + { + if (bRtl) + { + if (nRunStart > nActiveCharPos) + maFallbackRuns[i].NextRun(); + } + else + { + if (nRunEnd <= nActiveCharPos) + maFallbackRuns[i].NextRun(); + } + } + } +// if( !maFallbackRuns[i].PosIsInRun( nActiveCharPos ) ) +// maFallbackRuns[i].NextRun(); } mpLayouts[0]->Simplify( true ); diff --git a/vcl/source/glyphs/gcach_ftyp.cxx b/vcl/source/glyphs/gcach_ftyp.cxx index 591557eaa091..ebb530b1acf6 100644 --- a/vcl/source/glyphs/gcach_ftyp.cxx +++ b/vcl/source/glyphs/gcach_ftyp.cxx @@ -1425,6 +1425,20 @@ bool FreetypeServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap FT_Glyph_Transform( pGlyphFT, &aMatrix, NULL ); } + // Check for zero area bounding boxes as this crashes some versions of FT. + // This also provides a handy short cut as much of the code following + // becomes an expensive nop when a glyph covers no pixels. + FT_BBox cbox; + FT_Glyph_Get_CBox(pGlyphFT, ft_glyph_bbox_unscaled, &cbox); + + if( (cbox.xMax - cbox.xMin) == 0 || (cbox.yMax - cbox.yMin == 0) ) + { + nAngle = 0; + memset(&rRawBitmap, 0, sizeof rRawBitmap); + FT_Done_Glyph( pGlyphFT ); + return true; + } + if( pGlyphFT->format != FT_GLYPH_FORMAT_BITMAP ) { if( pGlyphFT->format == FT_GLYPH_FORMAT_OUTLINE ) diff --git a/vcl/source/glyphs/gcach_layout.cxx b/vcl/source/glyphs/gcach_layout.cxx old mode 100755 new mode 100644 diff --git a/vcl/source/glyphs/gcach_rbmp.cxx b/vcl/source/glyphs/gcach_rbmp.cxx old mode 100755 new mode 100644 diff --git a/vcl/source/glyphs/glyphcache.cxx b/vcl/source/glyphs/glyphcache.cxx index acfc8e3ac38d..f4e2de486b4b 100644 --- a/vcl/source/glyphs/glyphcache.cxx +++ b/vcl/source/glyphs/glyphcache.cxx @@ -41,6 +41,10 @@ #include #include +#ifdef ENABLE_GRAPHITE +#include +#endif + #include // used only for string=>hashvalue #include #include @@ -85,12 +89,23 @@ size_t GlyphCache::IFSD_Hash::operator()( const ImplFontSelectData& rFontSelData { // TODO: is it worth to improve this hash function? sal_IntPtr nFontId = reinterpret_cast( rFontSelData.mpFontData ); +#ifdef ENABLE_GRAPHITE + if (rFontSelData.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX) + != STRING_NOTFOUND) + { + rtl::OString aFeatName = rtl::OUStringToOString( rFontSelData.maTargetName, RTL_TEXTENCODING_UTF8 ); + nFontId ^= aFeatName.hashCode(); + } +#endif size_t nHash = nFontId << 8; nHash += rFontSelData.mnHeight; nHash += rFontSelData.mnOrientation; nHash += rFontSelData.mbVertical; nHash += rFontSelData.meItalic; nHash += rFontSelData.meWeight; +#ifdef ENABLE_GRAPHITE + nHash += rFontSelData.meLanguage; +#endif return nHash; } @@ -121,7 +136,16 @@ bool GlyphCache::IFSD_Equal::operator()( const ImplFontSelectData& rA, const Imp if( (rA.mnWidth != rB.mnWidth) && ((rA.mnHeight != rB.mnWidth) || (rA.mnWidth != 0)) ) return false; - +#ifdef ENABLE_GRAPHITE + if (rA.meLanguage != rB.meLanguage) + return false; + // check for features + if ((rA.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX) + != STRING_NOTFOUND || + rB.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX) + != STRING_NOTFOUND) && rA.maTargetName != rB.maTargetName) + return false; +#endif return true; } diff --git a/vcl/source/glyphs/graphite_adaptors.cxx b/vcl/source/glyphs/graphite_adaptors.cxx new file mode 100644 index 000000000000..67330698ffdf --- /dev/null +++ b/vcl/source/glyphs/graphite_adaptors.cxx @@ -0,0 +1,327 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// Description: Implements the Graphite interfaces with access to the +// platform's font and graphics systems. + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +// We need this to enable namespace support in libgrengine headers. +#define GR_NAMESPACE + +// Header files +// +// Standard Library +#include +#include +// Libraries +#include +#include +#include +// Platform +#ifndef MSC +#include + +#include + +#include + +// Module +#include "gcach_ftyp.hxx" + +#include +#include + +// Module private type definitions and forward declarations. +// +using gr::GrResult; +namespace +{ + inline float from_hinted(const int x) { + return static_cast(x + 32) / 64.0; + } + typedef std::hash_map SilfMap; + SilfMap sSilfMap; +} + +// class CharacterRenderProperties implentation. +// +FontProperties::FontProperties(const FreetypeServerFont &font) throw() +{ + clrFore = gr::kclrBlack; + clrBack = gr::kclrTransparent; + + pixHeight = from_hinted(font.GetMetricsFT().height); + + switch (font.GetFontSelData().meWeight) + { + case WEIGHT_SEMIBOLD: case WEIGHT_BOLD: + case WEIGHT_ULTRABOLD: case WEIGHT_BLACK: + fBold = true; + break; + default : + fBold = false; + } + + switch (font.GetFontSelData().meItalic) + { + case ITALIC_NORMAL: case ITALIC_OBLIQUE: + fItalic = true; + break; + default : + fItalic = false; + } + + // Get the font name. + const sal_Unicode * name = font.GetFontSelData().maName.GetBuffer(); + const size_t name_sz = std::min(sizeof szFaceName/sizeof(wchar_t)-1, + size_t(font.GetFontSelData().maName.Len())); + + std::copy(name, name + name_sz, szFaceName); + szFaceName[name_sz] = '\0'; +} + +// class GraphiteFontAdaptor implementaion. +// +GraphiteFontAdaptor::GraphiteFontAdaptor(ServerFont & sfont, const sal_Int32 dpiX, const sal_Int32 dpiY) + : mrFont(static_cast(sfont)), + maFontProperties(static_cast(sfont)), + mnDpiX(dpiX), + mnDpiY(dpiY), + mfAscent(from_hinted(static_cast(sfont).GetMetricsFT().ascender)), + mfDescent(from_hinted(static_cast(sfont).GetMetricsFT().descender)), + mfEmUnits(static_cast(sfont).GetMetricsFT().y_ppem), + mpFeatures(NULL) +{ + //std::wstring face_name(maFontProperties.szFaceName); + const rtl::OString aLang = MsLangId::convertLanguageToIsoByteString( sfont.GetFontSelData().meLanguage ); +#ifdef DEBUG + printf("GraphiteFontAdaptor %lx\n", (long)this); +#endif + rtl::OString name = rtl::OUStringToOString( + sfont.GetFontSelData().maTargetName, RTL_TEXTENCODING_UTF8 ); + sal_Int32 nFeat = name.indexOf(grutils::GrFeatureParser::FEAT_PREFIX) + 1; + if (nFeat > 0) + { + rtl::OString aFeat = name.copy(nFeat, name.getLength() - nFeat); + mpFeatures = new grutils::GrFeatureParser(*this, aFeat.getStr(), aLang.getStr()); +#ifdef DEBUG + printf("GraphiteFontAdaptor %s/%s/%s %x language %d features %d errors\n", + rtl::OUStringToOString( sfont.GetFontSelData().maName, + RTL_TEXTENCODING_UTF8 ).getStr(), + rtl::OUStringToOString( sfont.GetFontSelData().maTargetName, + RTL_TEXTENCODING_UTF8 ).getStr(), + rtl::OUStringToOString( sfont.GetFontSelData().maSearchName, + RTL_TEXTENCODING_UTF8 ).getStr(), + sfont.GetFontSelData().meLanguage, + (int)mpFeatures->getFontFeatures(NULL), mpFeatures->parseErrors()); +#endif + } + else + { + mpFeatures = new grutils::GrFeatureParser(*this, aLang.getStr()); + } +} + +GraphiteFontAdaptor::GraphiteFontAdaptor(const GraphiteFontAdaptor &rhs) throw() + : Font(rhs), + mrFont (rhs.mrFont), maFontProperties(rhs.maFontProperties), + mnDpiX(rhs.mnDpiX), mnDpiY(rhs.mnDpiY), + mfAscent(rhs.mfAscent), mfDescent(rhs.mfDescent), mfEmUnits(rhs.mfEmUnits), + mpFeatures(NULL) +{ + if (rhs.mpFeatures) mpFeatures = new grutils::GrFeatureParser(*(rhs.mpFeatures)); +} + + +GraphiteFontAdaptor::~GraphiteFontAdaptor() throw() +{ + maGlyphMetricMap.clear(); + if (mpFeatures) delete mpFeatures; + mpFeatures = NULL; +} + +void GraphiteFontAdaptor::UniqueCacheInfo(std::wstring & face_name_out, bool & bold_out, bool & italic_out) +{ + face_name_out = maFontProperties.szFaceName; + bold_out = maFontProperties.fBold; + italic_out = maFontProperties.fItalic; +} + +bool GraphiteFontAdaptor::IsGraphiteEnabledFont(ServerFont & font) throw() +{ + // NOTE: this assumes that the same FTFace pointer won't be reused, + // so FtFontInfo::ReleaseFaceFT must only be called at shutdown. + FreetypeServerFont & aFtFont = dynamic_cast(font); + FT_Face aFace = reinterpret_cast(aFtFont.GetFtFace()); + SilfMap::iterator i = sSilfMap.find(reinterpret_cast(aFace)); + if (i != sSilfMap.end()) + { +#ifdef DEBUG + if (static_cast(aFtFont.GetTable("Silf", 0)) != (*i).second) + printf("Silf cache font mismatch\n"); +#endif + return (*i).second; + } + bool bHasSilf = aFtFont.GetTable("Silf", 0); + sSilfMap[reinterpret_cast(aFace)] = bHasSilf; + return bHasSilf; +} + + +gr::Font * GraphiteFontAdaptor::copyThis() { + return new GraphiteFontAdaptor(*this); +} + + +unsigned int GraphiteFontAdaptor::getDPIx() { + return mnDpiX; +} + + +unsigned int GraphiteFontAdaptor::getDPIy() { + return mnDpiY; +} + + +float GraphiteFontAdaptor::ascent() { + return mfAscent; +} + + +float GraphiteFontAdaptor::descent() { + return mfDescent; +} + + +bool GraphiteFontAdaptor::bold() { + return maFontProperties.fBold; +} + + +bool GraphiteFontAdaptor::italic() { + return maFontProperties.fItalic; +} + + +float GraphiteFontAdaptor::height() { + return maFontProperties.pixHeight; +} + + +void GraphiteFontAdaptor::getFontMetrics(float * ascent_out, float * descent_out, float * em_square_out) { + if (ascent_out) *ascent_out = mfAscent; + if (descent_out) *descent_out = mfDescent; + if (em_square_out) *em_square_out = mfEmUnits; +} + + +const void * GraphiteFontAdaptor::getTable(gr::fontTableId32 table_id, size_t * buffer_sz) +{ + char tag_name[5] = {char(table_id >> 24), char(table_id >> 16), char(table_id >> 8), char(table_id), 0}; + ULONG temp = *buffer_sz; + + const void * const tbl_buf = static_cast(mrFont).GetTable(tag_name, &temp); + *buffer_sz = temp; + + return tbl_buf; +} + +#define fix26_6(x) (x >> 6) + (x & 32 ? (x > 0 ? 1 : 0) : (x < 0 ? -1 : 0)) + +// Return the glyph's metrics in pixels. +void GraphiteFontAdaptor::getGlyphMetrics(gr::gid16 nGlyphId, gr::Rect & aBounding, gr::Point & advances) +{ + // Graphite gets really confused if the glyphs have been transformed, so + // if orientation has been set we can't use the font's glyph cache + // unfortunately the font selection data, doesn't always have the orientation + // set, even if it was when the glyphs were cached, so we use our own cache. + +// const GlyphMetric & metric = mrFont.GetGlyphMetric(nGlyphId); +// +// aBounding.right = aBounding.left = metric.GetOffset().X(); +// aBounding.bottom = aBounding.top = -metric.GetOffset().Y(); +// aBounding.right += metric.GetSize().Width(); +// aBounding.bottom -= metric.GetSize().Height(); +// +// advances.x = metric.GetDelta().X(); +// advances.y = -metric.GetDelta().Y(); + + GlyphMetricMap::const_iterator gm_itr = maGlyphMetricMap.find(nGlyphId); + if (gm_itr != maGlyphMetricMap.end()) + { + // We've cached the results from last time. + aBounding = gm_itr->second.first; + advances = gm_itr->second.second; + } + else + { + // We need to look up the glyph. + FT_Int nLoadFlags = mrFont.GetLoadFlags(); + + FT_Face aFace = reinterpret_cast(mrFont.GetFtFace()); + if (!aFace) + { + aBounding.top = aBounding.bottom = aBounding.left = aBounding.right = 0; + advances.x = advances.y = 0; + return; + } + FT_Error aStatus = -1; + aStatus = FT_Load_Glyph(aFace, nGlyphId, nLoadFlags); + if( aStatus != FT_Err_Ok || (!aFace->glyph)) + { + aBounding.top = aBounding.bottom = aBounding.left = aBounding.right = 0; + advances.x = advances.y = 0; + return; + } + // check whether we need synthetic bold/italic otherwise metric is wrong + if (mrFont.NeedsArtificialBold()) + FT_GlyphSlot_Embolden(aFace->glyph); + + if (mrFont.NeedsArtificialItalic()) + FT_GlyphSlot_Oblique(aFace->glyph); + + const FT_Glyph_Metrics &gm = aFace->glyph->metrics; + + // Fill out the bounding box an advances. + aBounding.top = aBounding.bottom = fix26_6(gm.horiBearingY); + aBounding.bottom -= fix26_6(gm.height); + aBounding.left = aBounding.right = fix26_6(gm.horiBearingX); + aBounding.right += fix26_6(gm.width); + advances.x = fix26_6(gm.horiAdvance); + advances.y = 0; + + // Now add an entry to our metrics map. + maGlyphMetricMap[nGlyphId] = std::make_pair(aBounding, advances); + } +} + +#endif diff --git a/vcl/source/glyphs/graphite_cache.cxx b/vcl/source/glyphs/graphite_cache.cxx new file mode 100644 index 000000000000..c1bca0f87cb8 --- /dev/null +++ b/vcl/source/glyphs/graphite_cache.cxx @@ -0,0 +1,198 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +#ifdef MSC +#include +#include +#endif + +#include +#include + +#include +#include + +#include +#include +#include + +#include "graphite_textsrc.hxx" + +GrSegRecord::GrSegRecord(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl) + : m_rope(rope), m_text(textSrc), m_seg(seg), m_nextKey(NULL), + m_fontScale(0.0f), mbIsRtl(bIsRtl), m_lockCount(0) +{ + m_pStr = textSrc->getLayoutArgs().mpStr + seg->startCharacter(); + m_startChar = seg->startCharacter(); +} + +GrSegRecord::~GrSegRecord() +{ + clear(); +} + +void GrSegRecord::reuse(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl) +{ + clear(); + mnWidth = 0; + m_rope = rope; + m_text = textSrc; + m_seg = seg; + m_nextKey = NULL; + m_pStr = textSrc->getLayoutArgs().mpStr + seg->startCharacter(); + m_startChar = seg->startCharacter(); + mbIsRtl = bIsRtl; +} + +void GrSegRecord::clearVectors() +{ + mvGlyphs.clear(); + mvCharDxs.clear(); + mvChar2BaseGlyph.clear(); + mvGlyph2Char.clear(); +} + +void GrSegRecord::clear() +{ +#ifdef GR_DEBUG_TEXT + if (m_lockCount != 0) + OutputDebugString("GrSegRecord locked!"); +#endif + clearVectors(); + delete m_rope; + delete m_seg; + delete m_text; + m_rope = NULL; + m_seg = NULL; + m_text = NULL; + m_fontScale = 0.0f; + m_lockCount = 0; +} + +GrSegRecord * GraphiteSegmentCache::cacheSegment(TextSourceAdaptor * adapter, gr::Segment * seg, bool bIsRtl) +{ + GrSegRecord * record = NULL; + // We keep a record of the oldest key and the last key added + // when the next key is added, the record for the prevKey's m_nextKey field + // is updated to the newest key so that m_oldestKey can be updated to the + // next oldest key when the record for m_oldestKey is deleted + if (m_segMap.size() > SEG_CACHE_SIZE) + { + GraphiteSegMap::iterator oldestPair = m_segMap.find(reinterpret_cast(m_oldestKey)); + // oldest record may no longer exist if a buffer was changed + if (oldestPair != m_segMap.end()) + { + record = oldestPair->second; + m_segMap.erase(reinterpret_cast(m_oldestKey)); + GrRMEntry range = m_ropeMap.equal_range((*(record->m_rope)).hashCode()); + while (range.first != range.second) + { + if (range.first->second == record) + { + m_ropeMap.erase(range.first); + break; + } + ++range.first; + } + m_oldestKey = record->m_nextKey; + // record will be reused, so don't delete + } + } + + +// const int seg_char_limit = min(adapter->maLayoutArgs().mnLength, +// adapter->maLayoutArgs().mnEndCharPos +// + GraphiteLayout::EXTRA_CONTEXT_LENGTH); +// if (seg->stopCharacter() - seg->startCharacter() <= 0) +// OutputDebugString("Invalid seg indices\n"); + rtl::OUString * pRope = new rtl::OUString(adapter->getLayoutArgs().mpStr + seg->startCharacter(), + seg->stopCharacter() - seg->startCharacter()); + if (!pRope) return NULL; + bool reuse = false; + if (record) + record->reuse(pRope, adapter, seg, bIsRtl); + else + record = new GrSegRecord(pRope, adapter, seg, bIsRtl); + if (!record) + { + delete pRope; + return NULL; + } + GraphiteSegMap::iterator iMap = + m_segMap.find(reinterpret_cast(record->m_pStr)); + if (iMap != m_segMap.end()) + { + // the buffer has changed, so the old cached Segment is useless + reuse = true; + GrSegRecord * found = iMap->second; + // Note: we reuse the old next key to avoid breaking our history + // chain. This means it will be prematurely deleted, but this is + // unlikely to happen very often. + record->m_nextKey = found->m_nextKey; + // overwrite the old record + m_segMap[reinterpret_cast(record->m_pStr)] = record; + // erase the old rope key and save the new one + GrRMEntry range = m_ropeMap.equal_range((*(found->m_rope)).hashCode()); + while (range.first != range.second) + { + if (range.first->second == found) + { + m_ropeMap.erase(range.first); + break; + } + ++range.first; + } + GraphiteRopeMap::value_type mapEntry(record->m_rope->hashCode(), record); + m_ropeMap.insert(mapEntry); + // remove the old record + delete found; + record->m_lockCount++; + return record; + } + m_segMap[reinterpret_cast(record->m_pStr)] = record; + GraphiteRopeMap::value_type mapEntry((*(record->m_rope)).hashCode(), record); + m_ropeMap.insert(mapEntry); + + if (m_oldestKey == NULL) + { + m_oldestKey = record->m_pStr; + m_prevKey = record->m_pStr; + } + else if (reuse == false) + { + DBG_ASSERT(m_segMap.count(reinterpret_cast(m_prevKey)), + "Previous key got lost somehow!"); + m_segMap.find(reinterpret_cast(m_prevKey)) + ->second->m_nextKey = record->m_pStr; + m_prevKey = record->m_pStr; + } + record->m_lockCount++; + return record; +} diff --git a/vcl/source/glyphs/graphite_features.cxx b/vcl/source/glyphs/graphite_features.cxx new file mode 100644 index 000000000000..3c5214d3c420 --- /dev/null +++ b/vcl/source/glyphs/graphite_features.cxx @@ -0,0 +1,289 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// Description: +// Parse a string of features specified as & separated pairs. +// e.g. +// 1001=1&2002=2&fav1=0 + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +#include + +#ifdef MSC +#include +#include +#endif + +#include + +using namespace grutils; +// These mustn't conflict with font name lists which use ; and , +const char GrFeatureParser::FEAT_PREFIX = ':'; +const char GrFeatureParser::FEAT_SEPARATOR = '&'; +const char GrFeatureParser::FEAT_ID_VALUE_SEPARATOR = '='; +const std::string GrFeatureParser::ISO_LANG("lang"); + +GrFeatureParser::GrFeatureParser(gr::Font & font, const std::string lang) + : mnNumSettings(0), mbErrors(false) +{ + maLang.rgch[0] = maLang.rgch[1] = maLang.rgch[2] = maLang.rgch[3] = '\0'; + setLang(font, lang); +} + +GrFeatureParser::GrFeatureParser(gr::Font & font, const std::string features, const std::string lang) + : mnNumSettings(0), mbErrors(false) +{ + size_t nEquals = 0; + size_t nFeatEnd = 0; + size_t pos = 0; + maLang.rgch[0] = maLang.rgch[1] = maLang.rgch[2] = maLang.rgch[3] = '\0'; + setLang(font, lang); + while (pos < features.length() && mnNumSettings < MAX_FEATURES) + { + nEquals = features.find(FEAT_ID_VALUE_SEPARATOR,pos); + if (nEquals == std::string::npos) + { + mbErrors = true; + break; + } + // check for a lang=xxx specification + if (features.compare(pos, nEquals - pos, ISO_LANG) == 0) + { + pos = nEquals + 1; + nFeatEnd = features.find(FEAT_SEPARATOR, pos); + if (nFeatEnd == std::string::npos) + { + nFeatEnd = features.length(); + } + if (nFeatEnd - pos > 3) + mbErrors = true; + else + { + gr::isocode aLang = maLang; + for (size_t i = pos; i < nFeatEnd; i++) + aLang.rgch[i-pos] = features[i]; + std::pair aSupported + = font.getSupportedLanguages(); + gr::LanguageIterator iL = aSupported.first; + while (iL != aSupported.second) + { + gr::isocode aSupportedLang = *iL; + // here we only expect full 3 letter codes + if (aLang.rgch[0] == aSupportedLang.rgch[0] && + aLang.rgch[1] == aSupportedLang.rgch[1] && + aLang.rgch[2] == aSupportedLang.rgch[2] && + aLang.rgch[3] == aSupportedLang.rgch[3]) break; + ++iL; + } + if (iL == aSupported.second) mbErrors = true; + else maLang = aLang; + } + } + else + { + if (isCharId(features, pos, nEquals - pos)) + maSettings[mnNumSettings].id = getCharId(features, pos, nEquals - pos); + else maSettings[mnNumSettings].id = getIntValue(features, pos, nEquals - pos); + pos = nEquals + 1; + nFeatEnd = features.find(FEAT_SEPARATOR, pos); + if (nFeatEnd == std::string::npos) + { + nFeatEnd = features.length(); + } + if (isCharId(features, pos, nFeatEnd - pos)) + maSettings[mnNumSettings].value = getCharId(features, pos, nFeatEnd - pos); + else + maSettings[mnNumSettings].value= getIntValue(features, pos, nFeatEnd - pos); + if (isValid(font, maSettings[mnNumSettings])) + mnNumSettings++; + else + mbErrors = true; + } + pos = nFeatEnd + 1; + } +} + +void GrFeatureParser::setLang(gr::Font & font, const std::string & lang) +{ + gr::isocode aLang = {{0,0,0,0}}; + if (lang.length() > 2) + { + for (size_t i = 0; i < lang.length() && i < 3; i++) + { + if (lang[i] == '-') break; + aLang.rgch[i] = lang[i]; + } + std::pair aSupported + = font.getSupportedLanguages(); + gr::LanguageIterator iL = aSupported.first; + while (iL != aSupported.second) + { + gr::isocode aSupportedLang = *iL; + if (aLang.rgch[0] == aSupportedLang.rgch[0] && + aLang.rgch[1] == aSupportedLang.rgch[1] && + aLang.rgch[2] == aSupportedLang.rgch[2] && + aLang.rgch[3] == aSupportedLang.rgch[3]) break; + ++iL; + } + if (iL != aSupported.second) + maLang = aLang; +#ifdef DEBUG + else + printf("%s has no features\n", aLang.rgch); +#endif + } +} + +GrFeatureParser::GrFeatureParser(const GrFeatureParser & aCopy) + : maLang(aCopy.maLang), mbErrors(aCopy.mbErrors) +{ + mnNumSettings = aCopy.getFontFeatures(maSettings); +} + +GrFeatureParser::~GrFeatureParser() +{ +} + +size_t GrFeatureParser::getFontFeatures(gr::FeatureSetting settings[64]) const +{ + if (settings) + { + std::copy(maSettings, maSettings + mnNumSettings, settings); + } + return mnNumSettings; +} + +bool GrFeatureParser::isValid(gr::Font & font, gr::FeatureSetting & setting) +{ + gr::FeatureIterator i = font.featureWithID(setting.id); + if (font.getFeatures().second == i) + { + return false; + } + std::pair< gr::FeatureSettingIterator, gr::FeatureSettingIterator > + validValues = font.getFeatureSettings(i); + gr::FeatureSettingIterator j = validValues.first; + while (j != validValues.second) + { + if (*j == setting.value) return true; + ++j; + } + return false; +} + +bool GrFeatureParser::isCharId(const std::string & id, size_t offset, size_t length) +{ + if (length > 4) return false; + for (size_t i = 0; i < length; i++) + { + if (i > 0 && id[offset+i] == '\0') continue; + if ((id[offset+i]) < 0x20 || (id[offset+i]) < 0) + return false; + if (i==0 && id[offset+i] < 0x41) + return false; + } + return true; +} + +int GrFeatureParser::getCharId(const std::string & id, size_t offset, size_t length) +{ + FeatId charId; + charId.num = 0; +#ifdef WORDS_BIGENDIAN + for (size_t i = 0; i < length; i++) + { + charId.label[i] = id[offset+i]; + } +#else + for (size_t i = 0; i < length; i++) + { + charId.label[3-i] = id[offset+i]; + } +#endif + return charId.num; +} + +int GrFeatureParser::getIntValue(const std::string & id, size_t offset, size_t length) +{ + int value = 0; + int sign = 1; + for (size_t i = 0; i < length; i++) + { + switch (id[offset + i]) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + value *= 10; + if (sign < 0) + { + value = -(id[offset + i] - '0'); + sign = 1; + } + value += (id[offset + i] - '0'); + break; + case '-': + if (i == 0) + sign = -1; + else + { + mbErrors = true; + break; + } + default: + mbErrors = true; + break; + } + } + return value; +} + + +sal_Int32 GrFeatureParser::hashCode() const +{ + union IsoHash { sal_Int32 mInt; gr::isocode mCode; }; + IsoHash isoHash; + isoHash.mCode = maLang; + sal_Int32 hash = isoHash.mInt; + for (size_t i = 0; i < mnNumSettings; i++) + { + hash = (hash << 16) ^ ((maSettings[i].id << 8) | maSettings[i].value); + } + return hash; +} diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx new file mode 100644 index 000000000000..751c3694d033 --- /dev/null +++ b/vcl/source/glyphs/graphite_layout.cxx @@ -0,0 +1,1367 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// Description: An implementation of the SalLayout interface that uses the +// Graphite engine. + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +// We need this to enable namespace support in libgrengine headers. +#define GR_NAMESPACE + +// Enable lots of debug info +#ifdef DEBUG +//#define GRLAYOUT_DEBUG 1 +//#undef NDEBUG +#endif + +// Header files +// +// Standard Library +#include +#include +#include +#include +#include +#include + +// Platform +#ifdef MSC +#include +#include +#endif + +#include + +#include +#include +#include + +// Graphite Libraries (must be after vcl headers on windows) +#include +#include +#include +#include +#include + +#include +#include +#include "graphite_textsrc.hxx" + + +// Module private type definitions and forward declarations. +// +// Module private names. +// + +#ifdef GRLAYOUT_DEBUG +FILE * grLogFile = NULL; +FILE * grLog() +{ +#ifdef MSC + std::string logFileName(getenv("TEMP")); + logFileName.append("\\graphitelayout.log"); + if (grLogFile == NULL) grLogFile = fopen(logFileName.c_str(),"w"); + else fflush(grLogFile); + return grLogFile; +#else + return stdout; +#endif +} +#endif + +#ifdef GRCACHE +#include +#endif + + +namespace +{ + typedef std::pair glyph_range_t; + typedef std::pair glyph_set_range_t; + + inline long round(const float n) { + return long(n + (n < 0 ? -0.5 : 0.5)); + } + + + template + inline bool in_range(const T i, const T b, const T e) { + return !(b > i) && i < e; + } + + + template + inline bool is_subrange(const T sb, const T se, const T b, const T e) { + return !(b > sb || se > e); + } + + + template + inline bool is_subrange(const std::pair &s, const T b, const T e) { + return is_subrange(s.first, s.second, b, e); + } + + int findSameDirLimit(const xub_Unicode* buffer, int charCount, bool rtl) + { + UErrorCode status = U_ZERO_ERROR; + UBiDi *ubidi = ubidi_openSized(charCount, 0, &status); + int limit = 0; + ubidi_setPara(ubidi, buffer, charCount, + (rtl)?UBIDI_DEFAULT_RTL:UBIDI_DEFAULT_LTR, NULL, &status); + UBiDiLevel level = 0; + ubidi_getLogicalRun(ubidi, 0, &limit, &level); + ubidi_close(ubidi); + if ((rtl && !(level & 1)) || (!rtl && (level & 1))) + { + limit = 0; + } + return limit; + } + +} // namespace + + + +// Impementation of the GraphiteLayout::Glyphs container class. +// This is an extended vector class with methods added to enable +// o Correctly filling with glyphs. +// o Querying clustering relationships. +// o manipulations that affect neighouring glyphs. + +const int GraphiteLayout::EXTRA_CONTEXT_LENGTH = 10; +#ifdef GRCACHE +GraphiteCacheHandler GraphiteCacheHandler::instance; +#endif + +// The Graphite glyph stream is really a sequence of glyph attachment trees +// each rooted at a non-attached base glyph. fill_from walks the glyph stream +// find each non-attached base glyph and calls append to record them as a +// sequence of clusters. +void +GraphiteLayout::Glyphs::fill_from(gr::Segment & rSegment, ImplLayoutArgs &rArgs, + bool bRtl, long &rWidth, float fScaling, std::vector & rChar2Base, std::vector & rGlyph2Char, std::vector & rCharDxs) +{ + // Create a glyph item for each of the glyph and append it to the base class glyph list. + typedef std::pair< gr::GlyphSetIterator, gr::GlyphSetIterator > GrGlyphSet; + int nChar = rArgs.mnEndCharPos - rArgs.mnMinCharPos; + glyph_range_t iGlyphs = rSegment.glyphs(); + int nGlyphs = iGlyphs.second - iGlyphs.first; + gr::GlyphIterator prevBase = iGlyphs.second; + float fMinX = rSegment.advanceWidth(); + float fMaxX = 0.0f; + rGlyph2Char.assign(nGlyphs, -1); + long nDxOffset = 0; + int nGlyphIndex = (bRtl)? (nGlyphs - 1) : 0; + // OOo always expects the glyphs in ltr order + int nDelta = (bRtl)? -1 : 1; + + int nLastGlyph = (bRtl)? nGlyphs - 1: 0; + int nNextChar = (bRtl)? (rSegment.stopCharacter() - 1) : rSegment.startCharacter();//rArgs.mnMinCharPos; + // current glyph number (Graphite glyphs) + //int currGlyph = 0; + int nFirstCharInCluster = nNextChar; + int nFirstGlyphInCluster = nLastGlyph; + + // ltr first char in cluster is lowest, same is true for rtl + // ltr first glyph in cluster is lowest, rtl first glyph is highest + + // loop over the glyphs determining which characters are linked to them + gr::GlyphIterator gi; + for (gi = iGlyphs.first + nGlyphIndex; + nGlyphIndex >= 0 && nGlyphIndex < nGlyphs; + nGlyphIndex+= nDelta, gi = iGlyphs.first + nGlyphIndex) + { + gr::GlyphInfo info = (*gi); +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"Glyph %d %f,%f\n", (int)info.logicalIndex(), info.origin(), info.yOffset()); +#endif + // the last character associated with this glyph is after + // our current cluster buffer position + if ((bRtl && ((signed)info.firstChar() <= nNextChar)) || + (!bRtl && ((signed)info.lastChar() >= nNextChar))) + { + if ((bRtl && nGlyphIndex < nLastGlyph) || + (!bRtl && nGlyphIndex > nLastGlyph)) + { + // this glyph is after the previous one left->right + // if insertion is allowed before it then we are in a + // new cluster + int nAttachedBase = (*(info.attachedClusterBase())).logicalIndex(); + if (!info.isAttached() || + !in_range(nAttachedBase, nFirstGlyphInCluster, nGlyphIndex)) + { + if (in_range(nFirstCharInCluster, rArgs.mnMinCharPos, rArgs.mnEndCharPos) && + nFirstGlyphInCluster != nGlyphIndex) + { + std::pair aBounds = + appendCluster(rSegment, rArgs, bRtl, nFirstCharInCluster, + nNextChar, nFirstGlyphInCluster, nGlyphIndex, fScaling, + rChar2Base, rGlyph2Char, rCharDxs, nDxOffset); + fMinX = std::min(aBounds.first, fMinX); + fMaxX = std::max(aBounds.second, fMaxX); + } + nFirstCharInCluster = (bRtl)? info.lastChar() : info.firstChar(); + nFirstGlyphInCluster = nGlyphIndex; + } + nLastGlyph = (bRtl)? std::min(nGlyphIndex, nAttachedBase) : + std::max(nGlyphIndex, nAttachedBase); + } + // loop over chacters associated with this glyph and characters + // between nextChar and the last character associated with this glyph + // giving them the current cluster id. This allows for character /glyph + // order reversal. + // For each character we do a reverse glyph id look up + // and store the glyph id with the highest logical index in nLastGlyph + while ((bRtl && ((signed)info.firstChar() <= nNextChar)) || + (!bRtl && (signed)info.lastChar() >= nNextChar)) + { + GrGlyphSet charGlyphs = rSegment.charToGlyphs(nNextChar); + nNextChar += nDelta; + gr::GlyphSetIterator gj = charGlyphs.first; + while (gj != charGlyphs.second) + { + nLastGlyph = (bRtl)? min(nLastGlyph, (signed)(*gj).logicalIndex()) : max(nLastGlyph, (signed)(*gj).logicalIndex()); + ++gj; + } + } + // Loop over attached glyphs and make sure they are all in the cluster since you + // can have glyphs attached with another base glyph in between + glyph_set_range_t iAttached = info.attachedClusterGlyphs(); + for (gr::GlyphSetIterator agi = iAttached.first; agi != iAttached.second; ++agi) + { + nLastGlyph = (bRtl)? min(nLastGlyph, (signed)(*agi).logicalIndex()) : max(nLastGlyph, (signed)(*agi).logicalIndex()); + } + + // if this is a rtl attached glyph, then we need to include its + // base in the cluster, which will have a lower graphite index + if (bRtl) + { + if ((signed)info.attachedClusterBase()->logicalIndex() < nLastGlyph) + { + nLastGlyph = info.attachedClusterBase()->logicalIndex(); + } + } + } + + // it is possible for the lastChar to be after nextChar and + // firstChar to be before the nFirstCharInCluster in rare + // circumstances e.g. Myanmar word for cemetery + if ((bRtl && ((signed)info.lastChar() > nFirstCharInCluster)) || + (!bRtl && ((signed)info.firstChar() < nFirstCharInCluster))) + { + nFirstCharInCluster = info.firstChar(); + } + } + // process last cluster + if (in_range(nFirstCharInCluster, rArgs.mnMinCharPos, rArgs.mnEndCharPos) && + nFirstGlyphInCluster != nGlyphIndex) + { + std::pair aBounds = + appendCluster(rSegment, rArgs, bRtl, nFirstCharInCluster, nNextChar, + nFirstGlyphInCluster, nGlyphIndex, fScaling, + rChar2Base, rGlyph2Char, rCharDxs, nDxOffset); + fMinX = std::min(aBounds.first, fMinX); + fMaxX = std::max(aBounds.second, fMaxX); + } + long nXOffset = round(fMinX * fScaling); + rWidth = round(fMaxX * fScaling) - nXOffset + nDxOffset; + if (rWidth < 0) + { + // This can happen when there was no base inside the range + rWidth = 0; + } + // fill up non-base char dx with cluster widths from previous base glyph + if (bRtl) + { + if (rCharDxs[nChar-1] == -1) + rCharDxs[nChar-1] = 0; + else + rCharDxs[nChar-1] -= nXOffset; + for (int i = nChar - 2; i >= 0; i--) + { + if (rCharDxs[i] == -1) rCharDxs[i] = rCharDxs[i+1]; + else rCharDxs[i] -= nXOffset; + } + } + else + { + if (rCharDxs[0] == -1) + rCharDxs[0] = 0; + else + rCharDxs[0] -= nXOffset; + for (int i = 1; i < nChar; i++) + { + if (rCharDxs[i] == -1) rCharDxs[i] = rCharDxs[i-1]; + else rCharDxs[i] -= nXOffset; + } + } +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"Glyphs xOff%ld dropDx%ld w%ld\n", nXOffset, nDxOffset, rWidth); +#endif + // remove offset due to context if there is one + if (nXOffset != 0) + { + for (size_t i = 0; i < size(); i++) + (*this)[i].maLinearPos.X() -= nXOffset; + } +} + +std::pair GraphiteLayout::Glyphs::appendCluster(gr::Segment & rSeg, + ImplLayoutArgs & rArgs, bool bRtl, int nFirstCharInCluster, int nNextChar, + int nFirstGlyphInCluster, int nNextGlyph, float fScaling, + std::vector & rChar2Base, std::vector & rGlyph2Char, + std::vector & rCharDxs, long & rDXOffset) +{ + glyph_range_t iGlyphs = rSeg.glyphs(); + int nGlyphs = iGlyphs.second - iGlyphs.first; + int nDelta = (bRtl)? -1 : 1; + gr::GlyphInfo aFirstGlyph = *(iGlyphs.first + nFirstGlyphInCluster); + std::pair aBounds; + aBounds.first = aFirstGlyph.origin(); + aBounds.second = aFirstGlyph.origin(); + // before we add the glyphs to this vector, we record the + // glyph's index in the vector (which is not the same as + // the Segment's glyph index!) + assert(size() < rGlyph2Char.size()); + rChar2Base[nFirstCharInCluster-rArgs.mnMinCharPos] = size(); + rGlyph2Char[size()] = nFirstCharInCluster; + bool bBaseGlyph = true; + for (int j = nFirstGlyphInCluster; + j != nNextGlyph; j += nDelta) + { + long nNextOrigin; + float fNextOrigin; + gr::GlyphInfo aGlyph = *(iGlyphs.first + j); + if (j + nDelta >= nGlyphs || j + nDelta < 0) // at rhs ltr,rtl + { + fNextOrigin = rSeg.advanceWidth(); + nNextOrigin = round(rSeg.advanceWidth() * fScaling + rDXOffset); + aBounds.second = std::max(rSeg.advanceWidth(), aBounds.second); + } + else + { + gr::GlyphInfo aNextGlyph = *(iGlyphs.first + j + nDelta); + fNextOrigin = std::max(aNextGlyph.attachedClusterBase()->origin(), aNextGlyph.origin()); + aBounds.second = std::max(fNextOrigin, aBounds.second); + nNextOrigin = round(fNextOrigin * fScaling + rDXOffset); + } + aBounds.first = std::min(aGlyph.origin(), aBounds.first); + if ((signed)aGlyph.firstChar() < rArgs.mnEndCharPos && + (signed)aGlyph.firstChar() >= rArgs.mnMinCharPos) + { + rCharDxs[aGlyph.firstChar()-rArgs.mnMinCharPos] = nNextOrigin; + } + if ((signed)aGlyph.attachedClusterBase()->logicalIndex() == j) + { + append(rSeg, rArgs, aGlyph, fNextOrigin, fScaling, rChar2Base, rGlyph2Char, rCharDxs, rDXOffset, bBaseGlyph); + bBaseGlyph = false; + } + } + // from the point of view of the dx array, the xpos is + // the origin of the first glyph of the next cluster ltr + // rtl it is the origin of the 1st glyph of the cluster + long nXPos = (bRtl)? + round(aFirstGlyph.attachedClusterBase()->origin() * fScaling) + rDXOffset : + round(aBounds.second * fScaling) + rDXOffset; + // force the last char in range to have the width of the cluster + if (bRtl) + { + for (int n = nNextChar + 1; n <= nFirstCharInCluster; n++) + { + if ((n < rArgs.mnEndCharPos) && (n >= rArgs.mnMinCharPos)) + rCharDxs[n-rArgs.mnMinCharPos] = nXPos; + } + } + else + { + for (int n = nNextChar - 1; n >= nFirstCharInCluster; n--) + { + if (n < rArgs.mnEndCharPos && n >= rArgs.mnMinCharPos) + rCharDxs[n-rArgs.mnMinCharPos] = nXPos; + } + } +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"Cluster g[%d-%d) c[%d-%d)%x x%ld y%f\n", nFirstGlyphInCluster, nNextGlyph, nFirstCharInCluster, nNextChar, rArgs.mpStr[nFirstCharInCluster], nXPos, aFirstGlyph.yOffset()); +#endif + return aBounds; +} + +// append walks an attachment tree, flattening it, and converting it into a +// sequence of GlyphItem objects which we can later manipulate. +void +GraphiteLayout::Glyphs::append(gr::Segment &segment, ImplLayoutArgs &args, gr::GlyphInfo & gi, float nextGlyphOrigin, float scaling, std::vector & rChar2Base, std::vector & rGlyph2Char, std::vector & rCharDxs, long & rDXOffset, bool bIsBase) +{ + float nextOrigin = nextGlyphOrigin; + int firstChar = std::min(gi.firstChar(), gi.lastChar()); + assert(size() < rGlyph2Char.size()); + if (!bIsBase) rGlyph2Char[size()] = firstChar; + // is the next glyph attached or in the next cluster? + glyph_set_range_t iAttached = gi.attachedClusterGlyphs(); + if (iAttached.first != iAttached.second) + { + nextOrigin = iAttached.first->origin(); + } + long glyphId = gi.glyphID(); + long deltaOffset = 0; + int glyphWidth = round(nextOrigin * scaling) - round(gi.origin() * scaling); +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"c%d g%d gWidth%d x%f ", firstChar, (int)gi.logicalIndex(), glyphWidth, nextOrigin); +#endif + if (glyphId == 0) + { + args.NeedFallback( + firstChar, + gr::RightToLeftDir(gr::DirCode(gi.directionality()))); + if( (SAL_LAYOUT_FOR_FALLBACK & args.mnFlags )) + { + glyphId = GF_DROPPED; + deltaOffset -= glyphWidth; + glyphWidth = 0; + } + } + else if(args.mnFlags & SAL_LAYOUT_FOR_FALLBACK) + { +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"fallback c%d %x in run %d\n", firstChar, args.mpStr[firstChar], + args.maRuns.PosIsInAnyRun(firstChar)); +#endif + // glyphs that aren't requested for fallback will be taken from base + // layout, so mark them as dropped (should this wait until Simplify(false) is called?) + if (!args.maRuns.PosIsInAnyRun(firstChar) && + in_range(firstChar, args.mnMinCharPos, args.mnEndCharPos)) + { + glyphId = GF_DROPPED; + deltaOffset -= glyphWidth; + glyphWidth = 0; + } + } + // append this glyph. + long nGlyphFlags = bIsBase ? 0 : GlyphItem::IS_IN_CLUSTER; + // directionality seems to be unreliable + //nGlyphFlags |= gr::RightToLeftDir(gr::DirCode(gi.attachedClusterBase()->directionality())) ? GlyphItem::IS_RTL_GLYPH : 0; + nGlyphFlags |= (gi.directionLevel() & 0x1)? GlyphItem::IS_RTL_GLYPH : 0; + GlyphItem aGlyphItem(size(),//gi.logicalIndex(), + glyphId, + Point(round(gi.origin() * scaling + rDXOffset), + round((-gi.yOffset() * scaling) - segment.AscentOffset()* scaling)), + nGlyphFlags, + glyphWidth); + aGlyphItem.mnOrigWidth = round(gi.advanceWidth() * scaling); + push_back(aGlyphItem); + + // update the offset if this glyph was dropped + rDXOffset += deltaOffset; + + // Recursively apply append all the attached glyphs. + for (gr::GlyphSetIterator agi = iAttached.first; agi != iAttached.second; ++agi) + { + if (agi + 1 == iAttached.second) + append(segment, args, *agi, nextGlyphOrigin, scaling, rChar2Base, rGlyph2Char,rCharDxs, rDXOffset, false); + else + append(segment, args, *agi, (agi + 1)->origin(), scaling, rChar2Base, rGlyph2Char, rCharDxs, rDXOffset, false); + } +} + +// +// An implementation of the SalLayout interface to enable Graphite enabled fonts to be used. +// +GraphiteLayout::GraphiteLayout(const gr::Font & font, const grutils::GrFeatureParser * pFeatures) throw() + : mpTextSrc(0), + mrFont(font), + mnWidth(0), + mfScaling(1.0), + mpFeatures(pFeatures) +{ + // Line settings can have subtle affects on space handling + // since we don't really know whether it is the end of a line or just a run + // in the middle, it is hard to know what to set them to. + // If true, it can cause end of line spaces to be hidden e.g. Doulos SIL + maLayout.setStartOfLine(false); + maLayout.setEndOfLine(false); +// maLayout.setDumbFallback(false); + // trailing ws doesn't seem to always take affect if end of line is true + maLayout.setTrailingWs(gr::ktwshAll); +#ifdef GRLAYOUT_DEBUG + gr::ScriptDirCode aDirCode = font.getSupportedScriptDirections(); + fprintf(grLog(),"GraphiteLayout scripts %x %lx\n", aDirCode, long(this)); +#endif +} + + +GraphiteLayout::~GraphiteLayout() throw() +{ + clear(); + // the features are owned by the platform layers + mpFeatures = NULL; +} + +void GraphiteLayout::clear() +{ + // Destroy the segment and text source from any previous invocation of + // LayoutText + mvGlyphs.clear(); + mvCharDxs.clear(); + mvChar2BaseGlyph.clear(); + mvGlyph2Char.clear(); + +#ifndef GRCACHE + delete mpTextSrc; +#endif + + // Reset the state to the empty state. + mpTextSrc=0; + mnWidth = 0; + // Don't reset the scaling, because it is set before LayoutText +} + +// This method shouldn't be called on windows, since it needs the dc reset +bool GraphiteLayout::LayoutText(ImplLayoutArgs & rArgs) +{ +#ifdef GRCACHE + GrSegRecord * pSegRecord = NULL; + gr::Segment * pSegment = CreateSegment(rArgs, &pSegRecord); + if (!pSegment) + return false; + + // layout the glyphs as required by OpenOffice + bool success = LayoutGlyphs(rArgs, pSegment, pSegRecord); + + if (pSegRecord) pSegRecord->unlock(); + else delete pSegment; +#else + gr::Segment * pSegment = CreateSegment(rArgs); + bool success = LayoutGlyphs(rArgs, pSegment); + delete pSegment; +#endif + return success; +} + +#ifdef GRCACHE +class GrFontHasher : public gr::Font +{ +public: + GrFontHasher(const gr::Font & aFont) : gr::Font(aFont), mrRealFont(const_cast(aFont)) {}; + ~GrFontHasher(){}; + virtual bool bold() { return mrRealFont.bold(); }; + virtual bool italic() { return mrRealFont.italic(); }; + virtual float ascent() { return mrRealFont.ascent(); }; + virtual float descent() { return mrRealFont.descent(); }; + virtual float height() { return mrRealFont.height(); }; + virtual gr::Font* copyThis() { return mrRealFont.copyThis(); }; + virtual unsigned int getDPIx() { return mrRealFont.getDPIx(); }; + virtual unsigned int getDPIy() { return mrRealFont.getDPIy(); }; + virtual const void* getTable(gr::fontTableId32 nId, size_t* nSize) + { return mrRealFont.getTable(nId,nSize); } + virtual void getFontMetrics(float*pA, float*pB, float*pC) { mrRealFont.getFontMetrics(pA,pB,pC); }; + + sal_Int32 hashCode(const grutils::GrFeatureParser * mpFeatures) + { + // is this sufficient? + std::wstring aFace; + bool bBold; + bool bItalic; + UniqueCacheInfo(aFace, bBold, bItalic); + sal_Unicode uName[32]; // max length used in gr::Font + // Note: graphite stores font names as UTF-16 even if wchar_t is 32bit + // this conversion should be OK. + for (size_t i = 0; i < aFace.size() && i < 32; i++) + { + uName[i] = aFace[i]; + } + size_t iSize = aFace.size(); + if (0 == iSize) return 0; + sal_Int32 hash = rtl_ustr_hashCode_WithLength(uName, iSize); + hash ^= static_cast(height()); + hash |= (bBold)? 0x1000000 : 0; + hash |= (bItalic)? 0x2000000 : 0; + if (mpFeatures) + hash ^= mpFeatures->hashCode(); +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(), "font hash %x size %f\n", (int)hash, height()); +#endif + return hash; + }; + +private: + gr::Font & mrRealFont; +}; +#endif + +#ifdef GRCACHE +gr::Segment * GraphiteLayout::CreateSegment(ImplLayoutArgs& rArgs, GrSegRecord ** pSegRecord) +#else +gr::Segment * GraphiteLayout::CreateSegment(ImplLayoutArgs& rArgs) +#endif +{ + assert(rArgs.mnLength >= 0); + + gr::Segment * pSegment = NULL; + + // Set the SalLayouts values to be the inital ones. + SalLayout::AdjustLayout(rArgs); + // TODO check if this is needed + if (mnUnitsPerPixel > 1) + mfScaling = 1.0f / mnUnitsPerPixel; + + // Clear out any previous buffers + clear(); + bool bRtl = mnLayoutFlags & SAL_LAYOUT_BIDI_RTL; + try + { + // Don't set RTL if font doesn't support it otherwise it forces rtl on + // everything + if (bRtl && (mrFont.getSupportedScriptDirections() & gr::kfsdcHorizRtl)) + maLayout.setRightToLeft(bRtl); + +#ifdef GRCACHE + GrFontHasher hasher(mrFont); + sal_Int32 aFontHash = hasher.hashCode(mpFeatures); + GraphiteSegmentCache * pCache = + (GraphiteCacheHandler::instance).getCache(aFontHash); + if (pCache) + { + *pSegRecord = pCache->getSegment(rArgs, bRtl); + if (*pSegRecord) + { + pSegment = (*pSegRecord)->getSegment(); + mpTextSrc = (*pSegRecord)->getTextSrc(); + maLayout.setRightToLeft((*pSegRecord)->isRtl()); + if (rArgs.mpStr != mpTextSrc->getLayoutArgs().mpStr || + rArgs.mnMinCharPos != mpTextSrc->getLayoutArgs().mnMinCharPos || + rArgs.mnEndCharPos != mpTextSrc->getLayoutArgs().mnEndCharPos || + (SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags) ) + { + (*pSegRecord)->clearVectors(); + } + mpTextSrc->switchLayoutArgs(rArgs); + return pSegment; + } + } +#endif + + // Context is often needed beyond the specified end, however, we don't + // want it if there has been a direction change, since it is hard + // to tell between reordering within one direction and multi-directional + // text. + const int segCharLimit = min(rArgs.mnLength, mnEndCharPos + EXTRA_CONTEXT_LENGTH); + int limit = rArgs.mnEndCharPos; + if (segCharLimit > limit) + { + limit += findSameDirLimit(rArgs.mpStr + rArgs.mnEndCharPos, + segCharLimit - rArgs.mnEndCharPos, bRtl); + } + + // Create a new TextSource object for the engine. + mpTextSrc = new TextSourceAdaptor(rArgs, limit); + if (mpFeatures) mpTextSrc->setFeatures(mpFeatures); + + pSegment = new gr::RangeSegment((gr::Font *)&mrFont, mpTextSrc, &maLayout, mnMinCharPos, limit); + if (pSegment != NULL) + { +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"Gr::LayoutText %d-%d, context %d,len%d rtl%d/%d scaling %f\n", rArgs.mnMinCharPos, + rArgs.mnEndCharPos, limit, rArgs.mnLength, maLayout.rightToLeft(), pSegment->rightToLeft(), mfScaling); +#endif +#ifdef GRCACHE + // on a new segment rightToLeft should be correct + *pSegRecord = pCache->cacheSegment(mpTextSrc, pSegment, pSegment->rightToLeft()); +#endif + } + else + { + clear(); + return NULL; + } + } + catch (...) + { + clear(); // destroy the text source and any partially built segments. + return NULL; + } + return pSegment; +} + +#ifdef GRCACHE +bool GraphiteLayout::LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment, GrSegRecord * pSegRecord) +#else +bool GraphiteLayout::LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment) +#endif +{ +#ifdef GRCACHE +#ifdef GRCACHE_REUSE_VECTORS + // if we have an exact match, then we can reuse the glyph vectors from before + if (pSegRecord && (pSegRecord->glyphs().size() > 0) && + !(SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags) ) + { + mnWidth = pSegRecord->width(); + mvGlyphs = pSegRecord->glyphs(); + mvCharDxs = pSegRecord->charDxs(); + mvChar2BaseGlyph = pSegRecord->char2BaseGlyph(); + mvGlyph2Char = pSegRecord->glyph2Char(); + return true; + } +#endif +#endif + // Calculate the initial character dxs. + mvCharDxs.assign(mnEndCharPos - mnMinCharPos, -1); + mvChar2BaseGlyph.assign(mnEndCharPos - mnMinCharPos, -1); + mnWidth = 0; + if (mvCharDxs.size() > 0) + { + // Discover all the clusters. + try + { + // Note: we use the layout rightToLeft() because in cached segments + // rightToLeft() may no longer be valid if the engine has been run + // ltr since the segment was created. +#ifdef GRCACHE + bool bRtl = pSegRecord? pSegRecord->isRtl() : pSegment->rightToLeft(); +#else + bool bRtl = pSegment->rightToLeft(); +#endif + mvGlyphs.fill_from(*pSegment, rArgs, bRtl, + mnWidth, mfScaling, mvChar2BaseGlyph, mvGlyph2Char, mvCharDxs); + + if (bRtl) + { + // not needed for adjacent differences, but for mouse clicks to char + std::transform(mvCharDxs.begin(), mvCharDxs.end(), mvCharDxs.begin(), + std::bind1st(std::minus(), mnWidth)); + // fixup last dx to ensure it always equals the width + mvCharDxs[mvCharDxs.size() - 1] = mnWidth; + } +#ifdef GRCACHE +#ifdef GRCACHE_REUSE_VECTORS + if (pSegRecord && rArgs.maReruns.IsEmpty() && + !(SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags)) + { + pSegRecord->setGlyphVectors(mnWidth, mvGlyphs, mvCharDxs, + mvChar2BaseGlyph, mvGlyph2Char); + } +#endif +#endif + } + catch (std::exception e) + { +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"LayoutGlyphs failed %s\n", e.what()); +#endif + return false; + } + catch (...) + { +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"LayoutGlyphs failed with exception"); +#endif + return false; + } + } + else + { + mnWidth = 0; + } + return true; +} + +int GraphiteLayout::GetTextBreak(long maxmnWidth, long char_extra, int factor) const +{ + // Adjust maxmnWidth so FindNextBreakPoint returns a sensible answer. + maxmnWidth -= (mnEndCharPos-mnMinCharPos-1)*char_extra; // extra character spacing. + maxmnWidth /= factor; // scaling factor. + + // Ask the segment for the nearest whole letter break for the width. + //float width; + float targetWidth = maxmnWidth/mfScaling; + // return quickly if this segment is narrower than the target width + // (sometimes graphite doesn't seem to realise this!) + if (targetWidth > mnWidth) + return STRING_LEN; + //int nBreak = mpSegment->findNextBreakPoint(mnMinCharPos, + // gr::klbWordBreak, gr::klbLetterBreak, targetWidth, &width); + + // LineFillSegment seems to give better results that findNextBreakPoint + // though it may be slower + gr::LayoutEnvironment aLE; + gr::LineFillSegment lineSeg(const_cast(&mrFont), mpTextSrc, &aLE, + mnMinCharPos, mpTextSrc->getContextLength(), + targetWidth); + int nBreak = lineSeg.stopCharacter(); + + if (nBreak > mnEndCharPos) nBreak = STRING_LEN; + else if (nBreak < mnMinCharPos) nBreak = mnMinCharPos; + return nBreak; +} + + +long GraphiteLayout::FillDXArray( sal_Int32* pDXArray ) const +{ + if (mnEndCharPos == mnMinCharPos) + // Then we must be zero width! + return 0; + + if (pDXArray) + { + for (size_t i = 0; i < mvCharDxs.size(); i++) + { + assert((mvChar2BaseGlyph[i] >= -1) && (mvChar2BaseGlyph[i] < (signed)mvGlyphs.size())); + if (mvChar2BaseGlyph[i] != -1 && + mvGlyphs[mvChar2BaseGlyph[i]].mnGlyphIndex == GF_DROPPED) + { + // when used in MultiSalLayout::GetTextBreak dropped glyphs + // must have zero width + pDXArray[i] = 0; + } + else + { + pDXArray[i] = mvCharDxs[i]; + if (i > 0) pDXArray[i] -= mvCharDxs[i-1]; + } +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"%d,%d,%ld ", (int)i, (int)mvCharDxs[i], pDXArray[i]); +#endif + } + //std::adjacent_difference(mvCharDxs.begin(), mvCharDxs.end(), pDXArray); + //for (size_t i = 0; i < mvCharDxs.size(); i++) + // fprintf(grLog(),"%d,%d,%d ", (int)i, (int)mvCharDxs[i], pDXArray[i]); + //fprintf(grLog(),"FillDX %ld,%d\n", mnWidth, std::accumulate(pDXArray, pDXArray + mvCharDxs.size(), 0)); + } +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"FillDXArray %d-%d,%d=%ld\n", mnMinCharPos, mnEndCharPos, (int)mpTextSrc->getLength(), mnWidth); +#endif + return mnWidth; +} + + +void GraphiteLayout::AdjustLayout(ImplLayoutArgs& rArgs) +{ + SalLayout::AdjustLayout(rArgs); + + if(rArgs.mpDXArray) + { + std::vector vDeltaWidths(mvGlyphs.size(), 0); + ApplyDXArray(rArgs, vDeltaWidths); + + if( (mnLayoutFlags & SAL_LAYOUT_BIDI_RTL) && + !(rArgs.mnFlags & SAL_LAYOUT_FOR_FALLBACK) ) + { + // check if this is a kashida script + bool bKashidaScript = false; + for (int i = rArgs.mnMinCharPos; i < rArgs.mnEndCharPos; i++) + { + UErrorCode aStatus = U_ZERO_ERROR; + UScriptCode scriptCode = uscript_getScript(rArgs.mpStr[i], &aStatus); + if (scriptCode == USCRIPT_ARABIC || scriptCode == USCRIPT_SYRIAC) + { + bKashidaScript = true; + break; + } + } + int nKashidaWidth = 0; + int nKashidaIndex = getKashidaGlyph(nKashidaWidth); + if( nKashidaIndex != 0 && bKashidaScript) + { + kashidaJustify( vDeltaWidths, nKashidaIndex, nKashidaWidth ); + } + } + } +} + + +void GraphiteLayout::ApplyDXArray(ImplLayoutArgs &args, std::vector & rDeltaWidth) +{ + const size_t nChars = args.mnEndCharPos - args.mnMinCharPos; + if (nChars == 0) return; + +#ifdef GRLAYOUT_DEBUG + for (size_t iDx = 0; iDx < mvCharDxs.size(); iDx++) + fprintf(grLog(),"%d,%d,%ld ", (int)iDx, (int)mvCharDxs[iDx], args.mpDXArray[iDx]); + fprintf(grLog(),"ApplyDx\n"); +#endif + bool bRtl = mnLayoutFlags & SAL_LAYOUT_BIDI_RTL; + int nXOffset = 0; + if (bRtl) + { + nXOffset = args.mpDXArray[nChars - 1] - mvCharDxs[nChars - 1]; + } + int nPrevClusterGlyph = (bRtl)? mvGlyphs.size() : -1; + int nPrevClusterLastChar = -1; + for (size_t i = 0; i < nChars; i++) + { + if (mvChar2BaseGlyph[i] > -1 && mvChar2BaseGlyph[i] != nPrevClusterGlyph) + { + assert((mvChar2BaseGlyph[i] > -1) && (mvChar2BaseGlyph[i] < (signed)mvGlyphs.size())); + GlyphItem & gi = mvGlyphs[mvChar2BaseGlyph[i]]; + if (!gi.IsClusterStart()) + continue; + + // find last glyph of this cluster + size_t j = i + 1; + int nLastChar = i; + int nLastGlyph = mvChar2BaseGlyph[i]; + for (; j < nChars; j++) + { + assert((mvChar2BaseGlyph[j] >= -1) && (mvChar2BaseGlyph[j] < (signed)mvGlyphs.size())); + if (mvChar2BaseGlyph[j] != -1 && mvGlyphs[mvChar2BaseGlyph[j]].IsClusterStart()) + { + nLastGlyph = mvChar2BaseGlyph[j] + ((bRtl)? 1 : -1); + nLastChar = j - 1; + break; + } + } + if (nLastGlyph < 0) + { + nLastGlyph = mvChar2BaseGlyph[i]; + } + // Its harder to find the last glyph rtl, since the first of + // cluster is still on the left so we need to search towards + // the previous cluster to the right + if (bRtl) + { + nLastGlyph = mvChar2BaseGlyph[i]; + while (nLastGlyph + 1 < (signed)mvGlyphs.size() && + !mvGlyphs[nLastGlyph+1].IsClusterStart()) + { + ++nLastGlyph; + } + } + if (j == nChars) + { + nLastChar = nChars - 1; + if (!bRtl) nLastGlyph = mvGlyphs.size() - 1; + } + assert((nLastChar > -1) && (nLastChar < (signed)nChars)); + long nNewClusterWidth = args.mpDXArray[nLastChar]; + long nOrigClusterWidth = mvCharDxs[nLastChar]; + long nDGlyphOrigin = 0; + if (nPrevClusterLastChar > - 1) + { + assert(nPrevClusterLastChar < (signed)nChars); + nNewClusterWidth -= args.mpDXArray[nPrevClusterLastChar]; + nOrigClusterWidth -= mvCharDxs[nPrevClusterLastChar]; + nDGlyphOrigin = args.mpDXArray[nPrevClusterLastChar] - mvCharDxs[nPrevClusterLastChar]; + } + long nDWidth = nNewClusterWidth - nOrigClusterWidth; +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(), "c%d last glyph %d/%d\n", i, nLastGlyph, mvGlyphs.size()); +#endif + assert((nLastGlyph > -1) && (nLastGlyph < (signed)mvGlyphs.size())); + mvGlyphs[nLastGlyph].mnNewWidth += nDWidth; + if (gi.mnGlyphIndex != GF_DROPPED) + mvGlyphs[nLastGlyph].mnNewWidth += nDWidth; + else + nDGlyphOrigin += nDWidth; + // update glyph positions + if (bRtl) + { + for (int n = mvChar2BaseGlyph[i]; n <= nLastGlyph; n++) + { + assert((n > - 1) && (n < (signed)mvGlyphs.size())); + mvGlyphs[n].maLinearPos.X() += -nDGlyphOrigin + nXOffset; + } + } + else + { + for (int n = mvChar2BaseGlyph[i]; n <= nLastGlyph; n++) + { + assert((n > - 1) && (n < (signed)mvGlyphs.size())); + mvGlyphs[n].maLinearPos.X() += nDGlyphOrigin + nXOffset; + } + } + rDeltaWidth[mvChar2BaseGlyph[i]] = nDWidth; +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"c%d g%d-%d dW%ld-%ld=%ld dX%ld x%ld\t", (int)i, mvChar2BaseGlyph[i], nLastGlyph, nNewClusterWidth, nOrigClusterWidth, nDWidth, nDGlyphOrigin, mvGlyphs[mvChar2BaseGlyph[i]].maLinearPos.X()); +#endif + nPrevClusterGlyph = mvChar2BaseGlyph[i]; + nPrevClusterLastChar = nLastChar; + i = nLastChar; + } + } + // Update the dx vector with the new values. + std::copy(args.mpDXArray, args.mpDXArray + nChars, + mvCharDxs.begin() + (args.mnMinCharPos - mnMinCharPos)); +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"ApplyDx %ld(%ld)\n", args.mpDXArray[nChars - 1], mnWidth); +#endif + mnWidth = args.mpDXArray[nChars - 1]; +} + +void GraphiteLayout::kashidaJustify(std::vector& rDeltaWidths, sal_GlyphId nKashidaIndex, int nKashidaWidth) +{ + // skip if the kashida glyph in the font looks suspicious + if( nKashidaWidth <= 0 ) + return; + + // calculate max number of needed kashidas + Glyphs::iterator i = mvGlyphs.begin(); + int nKashidaCount = 0; + int nOrigGlyphIndex = -1; + int nGlyphIndex = -1; + while (i != mvGlyphs.end()) + { + nOrigGlyphIndex++; + nGlyphIndex++; + // only inject kashidas in RTL contexts + if( !(*i).IsRTLGlyph() ) + { + ++i; + continue; + } + // no kashida-injection for blank justified expansion either + if( IsSpacingGlyph( (*i).mnGlyphIndex ) ) + { + ++i; + continue; + } + // calculate gap, ignore if too small + int nGapWidth = rDeltaWidths[nOrigGlyphIndex];; + // worst case is one kashida even for mini-gaps + if( 3 * nGapWidth < nKashidaWidth ) + { + ++i; + continue; + } + nKashidaCount = 1 + (nGapWidth / nKashidaWidth); +#ifdef GRLAYOUT_DEBUG + printf("inserting %d kashidas at %ld\n", nKashidaCount, (*i).mnGlyphIndex); +#endif + GlyphItem glyphItem = *i; + Point aPos(0, 0); + aPos.X() = (*i).maLinearPos.X(); + GlyphItem newGi(glyphItem.mnCharPos, nKashidaIndex, aPos, + GlyphItem::IS_IN_CLUSTER|GlyphItem::IS_RTL_GLYPH, nKashidaWidth); + mvGlyphs.reserve(mvGlyphs.size() + nKashidaCount); + i = mvGlyphs.begin() + nGlyphIndex; + mvGlyphs.insert(i, nKashidaCount, newGi); + i = mvGlyphs.begin() + nGlyphIndex; + nGlyphIndex += nKashidaCount; + // now fix up the kashida positions + for (int j = 0; j < nKashidaCount; j++) + { + (*(i)).maLinearPos.X() -= nGapWidth; + nGapWidth -= nKashidaWidth; + i++; + } + + // fixup rightmost kashida for gap remainder + if( nGapWidth < 0 ) + { + if( nKashidaCount <= 1 ) + nGapWidth /= 2; // for small gap move kashida to middle + (*(i-1)).mnNewWidth += nGapWidth; // adjust kashida width to gap width + (*(i-1)).maLinearPos.X() += nGapWidth; + } + + (*i).mnNewWidth = (*i).mnOrigWidth; + ++i; + } + +} + +void GraphiteLayout::GetCaretPositions( int nArraySize, sal_Int32* pCaretXArray ) const +{ + // For each character except the last discover the caret positions + // immediatly before and after that character. + // This is used for underlines in the GUI amongst other things. + // It may be used from MultiSalLayout, in which case it must take into account + // glyphs that have been moved. + std::fill(pCaretXArray, pCaretXArray + nArraySize, -1); + // the layout method doesn't modify the layout even though it isn't + // const in the interface + bool bRtl = const_cast(this)->maLayout.rightToLeft(); + int prevBase = -1; + long prevClusterWidth = 0; + for (int i = 0, nCharSlot = 0; i < nArraySize && nCharSlot < static_cast(mvCharDxs.size()); ++nCharSlot, i+=2) + { + if (mvChar2BaseGlyph[nCharSlot] != -1) + { + assert((mvChar2BaseGlyph[nCharSlot] > -1) && (mvChar2BaseGlyph[nCharSlot] < (signed)mvGlyphs.size())); + GlyphItem gi = mvGlyphs[mvChar2BaseGlyph[nCharSlot]]; + if (gi.mnGlyphIndex == GF_DROPPED) + { + continue; + } + int nCluster = mvChar2BaseGlyph[nCharSlot]; + long origClusterWidth = gi.mnNewWidth; + long nMin = gi.maLinearPos.X(); + long nMax = gi.maLinearPos.X() + gi.mnNewWidth; + // attached glyphs are always stored after their base rtl or ltr + while (++nCluster < static_cast(mvGlyphs.size()) && + !mvGlyphs[nCluster].IsClusterStart()) + { + origClusterWidth += mvGlyphs[nCluster].mnNewWidth; + if (mvGlyph2Char[nCluster] == nCharSlot) + { + nMin = std::min(nMin, mvGlyphs[nCluster].maLinearPos.X()); + nMax = std::min(nMax, mvGlyphs[nCluster].maLinearPos.X() + mvGlyphs[nCluster].mnNewWidth); + } + } + if (bRtl) + { + pCaretXArray[i+1] = nMin; + pCaretXArray[i] = nMax; + } + else + { + pCaretXArray[i] = nMin; + pCaretXArray[i+1] = nMax; + } + prevBase = mvChar2BaseGlyph[nCharSlot]; + prevClusterWidth = origClusterWidth; + } + else if (prevBase > -1) + { + // this could probably be improved + assert((prevBase > -1) && (prevBase < (signed)mvGlyphs.size())); + GlyphItem gi = mvGlyphs[prevBase]; + int nGlyph = prevBase + 1; + // try to find a better match, otherwise default to complete cluster + for (; nGlyph < static_cast(mvGlyphs.size()) && + !mvGlyphs[nGlyph].IsClusterStart(); nGlyph++) + { + if (mvGlyph2Char[nGlyph] == nCharSlot) + { + gi = mvGlyphs[nGlyph]; + break; + } + } + long nGWidth = gi.mnNewWidth; + // if no match position at end of cluster + if (nGlyph == static_cast(mvGlyphs.size()) || + mvGlyphs[nGlyph].IsClusterStart()) + { + nGWidth = prevClusterWidth; + if (bRtl) + { + pCaretXArray[i+1] = gi.maLinearPos.X(); + pCaretXArray[i] = gi.maLinearPos.X(); + } + else + { + pCaretXArray[i] = gi.maLinearPos.X() + prevClusterWidth; + pCaretXArray[i+1] = gi.maLinearPos.X() + prevClusterWidth; + } + } + else + { + if (bRtl) + { + pCaretXArray[i+1] = gi.maLinearPos.X(); + pCaretXArray[i] = gi.maLinearPos.X() + gi.mnNewWidth; + } + else + { + pCaretXArray[i] = gi.maLinearPos.X(); + pCaretXArray[i+1] = gi.maLinearPos.X() + gi.mnNewWidth; + } + } + } + else + { + pCaretXArray[i] = pCaretXArray[i+1] = 0; + } +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"%d,%ld-%ld\t", nCharSlot, pCaretXArray[i], pCaretXArray[i+1]); +#endif + } +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"\n"); +#endif +} + + +// GetNextGlyphs returns a contiguous sequence of glyphs that can be +// rendered together. It should never return a dropped glyph. +// The glyph_slot returned should be the index of the next visible +// glyph after the last glyph returned by this call. +// The char_index array should be filled with the characters corresponding +// to each glyph returned. +// glyph_adv array should be a virtual width such that if successive +// glyphs returned by this method are added one after the other they +// have the correct spacing. +// The logic in this method must match that expected in MultiSalLayout which +// is used when glyph fallback is in operation. +int GraphiteLayout::GetNextGlyphs( int length, sal_GlyphId * glyph_out, + ::Point & aPosOut, int &glyph_slot, sal_Int32 * glyph_adv, int *char_index) const +{ + // Sanity check on the slot index. + if (glyph_slot >= signed(mvGlyphs.size())) + { + glyph_slot = mvGlyphs.size(); + return 0; + } + assert(glyph_slot >= 0); + // Find the first glyph in the substring. + for (; glyph_slot < signed(mvGlyphs.size()) && + ((mvGlyphs.begin() + glyph_slot)->mnGlyphIndex == GF_DROPPED); + ++glyph_slot) {}; + + // Update the length + const int nGlyphSlotEnd = std::min(size_t(glyph_slot + length), mvGlyphs.size()); + + // We're all out of glyphs here. + if (glyph_slot == nGlyphSlotEnd) + { + return 0; + } + + // Find as many glyphs as we can which can be drawn in one go. + Glyphs::const_iterator glyph_itr = mvGlyphs.begin() + glyph_slot; + const int glyph_slot_begin = glyph_slot; + const int initial_y_pos = glyph_itr->maLinearPos.Y(); + + // Set the position to the position of the start glyph. + ::Point aStartPos = glyph_itr->maLinearPos; + //aPosOut = glyph_itr->maLinearPos; + aPosOut = GetDrawPosition(aStartPos); + + + for (;;) // Forever + { + // last index of the range from glyph_to_chars does not include this glyph + if (char_index) + { + assert((glyph_slot >= -1) && (glyph_slot < (signed)mvGlyph2Char.size())); + if (mvGlyph2Char[glyph_slot] == -1) + *char_index++ = mvCharDxs.size(); + else + *char_index++ = mvGlyph2Char[glyph_slot]; + } + // Copy out this glyphs data. + ++glyph_slot; + *glyph_out++ = glyph_itr->mnGlyphIndex; + + // Find the actual advance - this must be correct if called from + // MultiSalLayout::AdjustLayout which requests one glyph at a time. + const long nGlyphAdvance = (glyph_slot == static_cast(mvGlyphs.size()))? + glyph_itr->mnNewWidth : + ((glyph_itr+1)->maLinearPos.X() - glyph_itr->maLinearPos.X()); + +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"GetNextGlyphs g%d c%d x%ld,%ld adv%ld, pos %ld,%ld\n", glyph_slot - 1, + mvGlyph2Char[glyph_slot-1], glyph_itr->maLinearPos.X(), glyph_itr->maLinearPos.Y(), nGlyphAdvance, + aPosOut.X(), aPosOut.Y()); +#endif + + if (glyph_adv) // If we are returning advance store it. + *glyph_adv++ = nGlyphAdvance; + else // Stop when next advance is unexpected. + if (glyph_itr->mnOrigWidth != nGlyphAdvance) break; + + // Have fetched all the glyphs we need to + if (glyph_slot == nGlyphSlotEnd) + break; + + ++glyph_itr; + // Stop when next y position is unexpected. + if (initial_y_pos != glyph_itr->maLinearPos.Y()) + break; + + // Stop if glyph dropped + if (glyph_itr->mnGlyphIndex == GF_DROPPED) + break; + } + int numGlyphs = glyph_slot - glyph_slot_begin; + // move the next glyph_slot to a glyph that hasn't been dropped + while (glyph_slot < static_cast(mvGlyphs.size()) && + (mvGlyphs.begin() + glyph_slot)->mnGlyphIndex == GF_DROPPED) + ++glyph_slot; + return numGlyphs; +} + + +void GraphiteLayout::MoveGlyph( int nGlyphIndex, long nNewPos ) +{ + // TODO it might be better to actualy implement simplify properly, but this + // needs to be done carefully so the glyph/char maps are maintained + // If a glyph has been dropped then it wasn't returned by GetNextGlyphs, so + // the index here may be wrong + while ((mvGlyphs[nGlyphIndex].mnGlyphIndex == GF_DROPPED) && + (nGlyphIndex < (signed)mvGlyphs.size())) + { + nGlyphIndex++; + } + const long dx = nNewPos - mvGlyphs[nGlyphIndex].maLinearPos.X(); + + if (dx == 0) return; + // GenericSalLayout only changes maLinearPos, mvCharDxs doesn't change +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"Move %d (%ld,%ld) c%d by %ld\n", nGlyphIndex, mvGlyphs[nGlyphIndex].maLinearPos.X(), nNewPos, mvGlyph2Char[nGlyphIndex], dx); +#endif + for (size_t gi = nGlyphIndex; gi < mvGlyphs.size(); gi++) + { + mvGlyphs[gi].maLinearPos.X() += dx; + } + // width does need to be updated for correct fallback + mnWidth += dx; +} + + +void GraphiteLayout::DropGlyph( int nGlyphIndex ) +{ + if(nGlyphIndex >= signed(mvGlyphs.size())) + return; + + GlyphItem & glyph = mvGlyphs[nGlyphIndex]; + glyph.mnGlyphIndex = GF_DROPPED; +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"Dropped %d\n", nGlyphIndex); +#endif +} + +void GraphiteLayout::Simplify( bool isBaseLayout ) +{ + const sal_GlyphId dropMarker = isBaseLayout ? GF_DROPPED : 0; + + Glyphs::iterator gi = mvGlyphs.begin(); + // TODO check whether we need to adjust positions here + // MultiSalLayout seems to move the glyphs itself, so it may not be needed. + long deltaX = 0; + while (gi != mvGlyphs.end()) + { + if (gi->mnGlyphIndex == dropMarker) + { + deltaX += gi->mnNewWidth; + gi->mnNewWidth = 0; + } + else + { + deltaX = 0; + } + //mvCharDxs[mvGlyph2Char[gi->mnCharPos]] -= deltaX; + ++gi; + } +#ifdef GRLAYOUT_DEBUG + fprintf(grLog(),"Simplify base%d dx=%ld newW=%ld\n", isBaseLayout, deltaX, mnWidth - deltaX); +#endif + // discard width from trailing dropped glyphs, but not those in the middle + mnWidth -= deltaX; +} diff --git a/vcl/source/glyphs/graphite_serverfont.cxx b/vcl/source/glyphs/graphite_serverfont.cxx new file mode 100644 index 000000000000..e8cd152b43ac --- /dev/null +++ b/vcl/source/glyphs/graphite_serverfont.cxx @@ -0,0 +1,88 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +// We need this to enable namespace support in libgrengine headers. +#define GR_NAMESPACE + +// Header files +// + +// Platform +#include +// Module +#include "gcach_ftyp.hxx" +#include +#include "graphite_textsrc.hxx" +#include + +#ifndef MSC + +// +// An implementation of the GraphiteLayout interface to enable Graphite enabled fonts to be used. +// + +GraphiteServerFontLayout::GraphiteServerFontLayout(GraphiteFontAdaptor * pFont) throw() + : ServerFontLayout(pFont->font()), mpFont(pFont), + maImpl(*mpFont, mpFont->features(), pFont) +{ + // Nothing needed here +} + +GraphiteServerFontLayout::~GraphiteServerFontLayout() throw() +{ + delete mpFont; + mpFont = NULL; +} + +const sal_Unicode* GraphiteServerFontLayout::getTextPtr() const +{ + return maImpl.textSrc()->getLayoutArgs().mpStr + + maImpl.textSrc()->getLayoutArgs().mnMinCharPos; +} + +sal_GlyphId GraphiteLayoutImpl::getKashidaGlyph(int & width) +{ + int nKashidaIndex = mpFont->font().GetGlyphIndex( 0x0640 ); + if( nKashidaIndex != 0 ) + { + const GlyphMetric& rGM = mpFont->font().GetGlyphMetric( nKashidaIndex ); + width = rGM.GetCharWidth(); + } + else + { + width = 0; + } + return nKashidaIndex; +} + +#endif diff --git a/vcl/source/glyphs/graphite_textsrc.cxx b/vcl/source/glyphs/graphite_textsrc.cxx new file mode 100644 index 000000000000..d2987e585281 --- /dev/null +++ b/vcl/source/glyphs/graphite_textsrc.cxx @@ -0,0 +1,172 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +// We need this to enable namespace support in libgrengine headers. +#define GR_NAMESPACE + +// Header files +// +// Standard Library +#include +#include +#include "graphite_textsrc.hxx" +#include + +// class TextSourceAdaptor implementation. +// +TextSourceAdaptor::~TextSourceAdaptor() +{ + delete mpFeatures; +} + +gr::UtfType TextSourceAdaptor::utfEncodingForm() { + return gr::kutf16; +} + + +size_t TextSourceAdaptor::getLength() +{ + return maLayoutArgs.mnLength; +} + + +size_t TextSourceAdaptor::fetch(gr::toffset, size_t, gr::utf32 *) +{ + assert(false); + return 0; +} + + +size_t TextSourceAdaptor::fetch(gr::toffset offset, size_t char_count, gr::utf16 * char_buffer) +{ + assert(char_buf); + + size_t copy_count = std::min(size_t(maLayoutArgs.mnLength), char_count); + std::copy(maLayoutArgs.mpStr + offset, maLayoutArgs.mpStr + offset + copy_count, char_buffer); + + return copy_count; +} + + +size_t TextSourceAdaptor::fetch(gr::toffset, size_t, gr::utf8 *) +{ + assert(false); + return 0; +} + + +inline void TextSourceAdaptor::getCharProperties(const int nCharIdx, int & min, int & lim, size_t & depth) +{ + maLayoutArgs.ResetPos(); + bool rtl = maLayoutArgs.mnFlags & SAL_LAYOUT_BIDI_RTL; + for(depth = ((rtl)? 1:0); maLayoutArgs.maRuns.GetRun(&min, &lim, &rtl); maLayoutArgs.maRuns.NextRun()) + { + if (min > nCharIdx) + break; + // Only increase the depth when a change of direction occurs. + depth += int(rtl ^ bool(depth & 0x1)); + if (min <= nCharIdx && nCharIdx < lim) + break; + } + // If there is no run for this position increment the depth, but don't + // change if this is out of bounds context + if (lim > 0 && nCharIdx >= lim && nCharIdx < maLayoutArgs.mnEndCharPos) + depth++; +} + + +bool TextSourceAdaptor::getRightToLeft(gr::toffset nCharIdx) +{ + size_t depth; + int min, lim = 0; + getCharProperties(nCharIdx, min, lim, depth); + //printf("getRtl %d,%x=%d\n", nCharIdx, maLayoutArgs.mpStr[nCharIdx], depth & 0x1); + return depth & 0x1; +} + + +unsigned int TextSourceAdaptor::getDirectionDepth(gr::toffset nCharIdx) +{ + size_t depth; + int min, lim; + getCharProperties(nCharIdx, min, lim, depth); + //printf("getDirectionDepth %d,%x=%d\n", nCharIdx, maLayoutArgs.mpStr[nCharIdx], depth); + return depth; +} + + +float TextSourceAdaptor::getVerticalOffset(gr::toffset) +{ + return 0.0f; //TODO: Implement correctly +} + +gr::isocode TextSourceAdaptor::getLanguage(gr::toffset) +{ + if (mpFeatures && mpFeatures->hasLanguage()) + return mpFeatures->getLanguage(); + gr::isocode unknown = {{0,0,0,0}}; + return unknown; +} + +std::pair TextSourceAdaptor::propertyRange(gr::toffset nCharIdx) +{ + + if (nCharIdx < unsigned(maLayoutArgs.mnMinCharPos)) + return std::make_pair(0, maLayoutArgs.mnMinCharPos); + + if (nCharIdx < mnEnd) + return std::make_pair(maLayoutArgs.mnMinCharPos, mnEnd); + + return std::make_pair(mnEnd, maLayoutArgs.mnLength); +} + +size_t TextSourceAdaptor::getFontFeatures(gr::toffset, gr::FeatureSetting * settings) +{ + if (mpFeatures) return mpFeatures->getFontFeatures(settings); + return 0; +} + + +bool TextSourceAdaptor::sameSegment(gr::toffset char_idx1, gr::toffset char_idx2) +{ + const std::pair + range1 = propertyRange(char_idx1), + range2 = propertyRange(char_idx2); + + return range1 == range2; +} + +void TextSourceAdaptor::setFeatures(const grutils::GrFeatureParser * pFeatures) +{ + mpFeatures = new grutils::GrFeatureParser(*pFeatures); +} diff --git a/vcl/source/glyphs/graphite_textsrc.hxx b/vcl/source/glyphs/graphite_textsrc.hxx new file mode 100644 index 000000000000..6f701988bb01 --- /dev/null +++ b/vcl/source/glyphs/graphite_textsrc.hxx @@ -0,0 +1,131 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SV_GRAPHITETEXTSRC_HXX +#define _SV_GRAPHITETEXTSRC_HXX +// Description: Implements the Graphite interfaces IGrTextSource and +// IGrGraphics which provide Graphite with access to the +// app's text storage system and the platform's font and +// graphics systems. + +// We need this to enable namespace support in libgrengine headers. +#define GR_NAMESPACE + +// Standard Library +#include +// Platform + +#ifndef _SVWIN_H +#include +#endif + +#ifndef _SV_SVSYS_HXX +#include +#endif + +#ifndef _SV_SALGDI_HXX +#include +#endif + +#ifndef _SV_SALLAYOUT_HXX +#include +#endif + +// Module +#include "vcl/dllapi.h" + +// Libraries +#include +#include +#include + +// Module type definitions and forward declarations. +// +namespace grutils +{ + class GrFeatureParser; +} +// Implements the Adaptor pattern to adapt the LayoutArgs and the ServerFont interfaces to the +// gr::IGrTextSource interface. +// @author tse +// +class TextSourceAdaptor : public gr::ITextSource +{ +public: + TextSourceAdaptor(ImplLayoutArgs &layout_args, const int nContextLen) throw(); + ~TextSourceAdaptor(); + virtual gr::UtfType utfEncodingForm(); + virtual size_t getLength(); + virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf32 * prgchBuffer); + virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer); + virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf8 * prgchsBuffer); + virtual bool getRightToLeft(gr::toffset ich); + virtual unsigned int getDirectionDepth(gr::toffset ich); + virtual float getVerticalOffset(gr::toffset ich); + virtual gr::isocode getLanguage(gr::toffset ich); + + virtual std::pair propertyRange(gr::toffset ich); + virtual size_t getFontFeatures(gr::toffset ich, gr::FeatureSetting * prgfset); + virtual bool sameSegment(gr::toffset ich1, gr::toffset ich2); + + operator ImplLayoutArgs & () throw(); + void setFeatures(const grutils::GrFeatureParser * pFeatures); + const ImplLayoutArgs & getLayoutArgs() const { return maLayoutArgs; } + size_t getContextLength() const { return mnEnd; }; + inline void switchLayoutArgs(ImplLayoutArgs & newArgs); +private: + // Prevent the generation of a default assignment operator. + TextSourceAdaptor & operator=(const TextSourceAdaptor &); + + void getCharProperties(const int, int &, int &, size_t &); + + ImplLayoutArgs maLayoutArgs; + size_t mnEnd; + const grutils::GrFeatureParser * mpFeatures; +}; + +inline TextSourceAdaptor::TextSourceAdaptor(ImplLayoutArgs &la, const int nContextLen) throw() + : maLayoutArgs(la), + mnEnd(std::min(la.mnLength, nContextLen)), + mpFeatures(NULL) +{ +} + +inline TextSourceAdaptor::operator ImplLayoutArgs & () throw() { + return maLayoutArgs; +} + +inline void TextSourceAdaptor::switchLayoutArgs(ImplLayoutArgs & aNewArgs) +{ + mnEnd += aNewArgs.mnMinCharPos - maLayoutArgs.mnMinCharPos; + maLayoutArgs = aNewArgs; +} + +#endif diff --git a/vcl/source/glyphs/makefile.mk b/vcl/source/glyphs/makefile.mk index b08777d7020f..3c3ba62c49e6 100644 --- a/vcl/source/glyphs/makefile.mk +++ b/vcl/source/glyphs/makefile.mk @@ -54,6 +54,27 @@ SLOFILES=\ $(SLO)$/gcach_rbmp.obj \ $(SLO)$/gcach_layout.obj \ $(SLO)$/gcach_ftyp.obj + +.IF "$(ENABLE_GRAPHITE)" != "" +CFLAGS+=-DENABLE_GRAPHITE +SLOFILES+= $(SLO)$/graphite_adaptors.obj \ + $(SLO)$/graphite_features.obj \ + $(SLO)$/graphite_cache.obj \ + $(SLO)$/graphite_textsrc.obj \ + $(SLO)$/graphite_serverfont.obj \ + $(SLO)$/graphite_layout.obj +.ENDIF + +.ELSE +.IF "$(ENABLE_GRAPHITE)" == "TRUE" +# make use of stlport headerfiles +EXT_USE_STLPORT=TRUE +SLOFILES=\ + $(SLO)$/graphite_textsrc.obj \ + $(SLO)$/graphite_cache.obj \ + $(SLO)$/graphite_features.obj \ + $(SLO)$/graphite_layout.obj +.ENDIF .ENDIF # --- Targets ------------------------------------------------------ diff --git a/vcl/unx/inc/salgdi.h b/vcl/unx/inc/salgdi.h index 16276cdeb5c9..f893b547e847 100644 --- a/vcl/unx/inc/salgdi.h +++ b/vcl/unx/inc/salgdi.h @@ -106,6 +106,8 @@ protected: Pixel nTextPixel_; BOOL bFontVertical_; + BOOL bDisableGraphite_; + GC pBrushGC_; // Brush attributes SalColor nBrushColor_; Pixel nBrushPixel_; diff --git a/vcl/unx/source/gdi/makefile.mk b/vcl/unx/source/gdi/makefile.mk index 8f0faf863af2..bdd400baa8ad 100644 --- a/vcl/unx/source/gdi/makefile.mk +++ b/vcl/unx/source/gdi/makefile.mk @@ -90,6 +90,10 @@ ENVCFLAGS+=-DUSE_CDE CFLAGS+=-DXRENDER_LINK .ENDIF +.IF "$(ENABLE_GRAPHITE)" == "TRUE" +CFLAGS+=-DENABLE_GRAPHITE +.ENDIF + .ENDIF # "$(GUIBASE)"!="unx" # --- Targets ------------------------------------------------------ diff --git a/vcl/unx/source/gdi/pspgraphics.cxx b/vcl/unx/source/gdi/pspgraphics.cxx index e8dfe391dc86..18a54ef0d770 100644 --- a/vcl/unx/source/gdi/pspgraphics.cxx +++ b/vcl/unx/source/gdi/pspgraphics.cxx @@ -51,6 +51,11 @@ #include #include +#ifdef ENABLE_GRAPHITE +#include +#include +#endif + using namespace psp; using namespace rtl; @@ -699,9 +704,30 @@ static void DrawPrinterLayout( const SalLayout& rLayout, ::psp::PrinterGfx& rGfx Point aPos; long nUnitsPerPixel = rLayout.GetUnitsPerPixel(); - const sal_Unicode* pText = bIsPspServerFontLayout ? static_cast(rLayout).getTextPtr() : NULL; - int nMinCharPos = bIsPspServerFontLayout ? static_cast(rLayout).getMinCharPos() : 0; - int nMaxCharPos = bIsPspServerFontLayout ? static_cast(rLayout).getMaxCharPos() : 0; + const sal_Unicode* pText = NULL; + int nMinCharPos = 0; + int nMaxCharPos = 0; + if (bIsPspServerFontLayout) + { + const PspServerFontLayout * pPspLayout = dynamic_cast(&rLayout); +#ifdef ENABLE_GRAPHITE + const GraphiteServerFontLayout * pGrLayout = dynamic_cast(&rLayout); +#endif + if (pPspLayout) + { + pText = pPspLayout->getTextPtr(); + nMinCharPos = pPspLayout->getMinCharPos(); + nMaxCharPos = pPspLayout->getMaxCharPos(); + } +#ifdef ENABLE_GRAPHITE + else if (pGrLayout) + { + pText = pGrLayout->getTextPtr(); + nMinCharPos = pGrLayout->getMinCharPos(); + nMaxCharPos = pGrLayout->getMaxCharPos(); + } +#endif + } for( int nStart = 0;; ) { int nGlyphCount = rLayout.GetNextGlyphs( nMaxGlyphs, aGlyphAry, aPos, nStart, aWidthAry, bIsPspServerFontLayout ? aCharPosAry : NULL ); @@ -961,7 +987,21 @@ SalLayout* PspGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel if( m_pServerFont[ nFallbackLevel ] && !(rArgs.mnFlags & SAL_LAYOUT_DISABLE_GLYPH_PROCESSING) ) - pLayout = new PspServerFontLayout( *m_pPrinterGfx, *m_pServerFont[nFallbackLevel], rArgs ); + { +#ifdef ENABLE_GRAPHITE + // Is this a Graphite font? + if (GraphiteFontAdaptor::IsGraphiteEnabledFont(*m_pServerFont[nFallbackLevel])) + { + sal_Int32 xdpi, ydpi; + GetResolution(xdpi, ydpi); + GraphiteFontAdaptor * pGrfont = new GraphiteFontAdaptor( *m_pServerFont[nFallbackLevel], xdpi, ydpi); + if (!pGrfont) return NULL; + pLayout = new GraphiteServerFontLayout(pGrfont); + } + else +#endif + pLayout = new PspServerFontLayout( *m_pPrinterGfx, *m_pServerFont[nFallbackLevel], rArgs ); + } else pLayout = new PspFontLayout( *m_pPrinterGfx ); diff --git a/vcl/unx/source/gdi/salgdi.cxx b/vcl/unx/source/gdi/salgdi.cxx index 6695d4abeb21..4d3e40840a7b 100644 --- a/vcl/unx/source/gdi/salgdi.cxx +++ b/vcl/unx/source/gdi/salgdi.cxx @@ -119,6 +119,12 @@ X11SalGraphics::X11SalGraphics() nTextPixel_ = 0; nTextColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black +#ifdef ENABLE_GRAPHITE + // check if graphite fonts have been disabled + static const char* pDisableGraphiteStr = getenv( "SAL_DISABLE_GRAPHITE" ); + bDisableGraphite_ = pDisableGraphiteStr ? (pDisableGraphiteStr[0]!='0') : FALSE; +#endif + pBrushGC_ = NULL; nBrushPixel_ = 0; nBrushColor_ = MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ); // White @@ -1490,7 +1496,6 @@ bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const : // should use ImplLineConverter normally) return false; } - const XRenderPeer& rRenderPeer = XRenderPeer::GetInstance(); if( !rRenderPeer.AreTrapezoidsSupported() ) return false; diff --git a/vcl/unx/source/gdi/salgdi3.cxx b/vcl/unx/source/gdi/salgdi3.cxx index d1a60cda4097..0ee0e0bb20c8 100644 --- a/vcl/unx/source/gdi/salgdi3.cxx +++ b/vcl/unx/source/gdi/salgdi3.cxx @@ -82,6 +82,11 @@ #include +#ifdef ENABLE_GRAPHITE +#include +#include +#endif + struct cairo_surface_t; struct cairo_t; struct cairo_font_face_t; @@ -1681,11 +1686,29 @@ BOOL X11SalGraphics::GetGlyphOutline( long nGlyphIndex, SalLayout* X11SalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel ) { - GenericSalLayout* pLayout = NULL; + SalLayout* pLayout = NULL; if( mpServerFont[ nFallbackLevel ] && !(rArgs.mnFlags & SAL_LAYOUT_DISABLE_GLYPH_PROCESSING) ) - pLayout = new ServerFontLayout( *mpServerFont[ nFallbackLevel ] ); + { +#ifdef ENABLE_GRAPHITE + // Is this a Graphite font? + if (!bDisableGraphite_ && + GraphiteFontAdaptor::IsGraphiteEnabledFont(*mpServerFont[nFallbackLevel])) + { + sal_Int32 xdpi, ydpi; + + xdpi = GetDisplay()->GetResolution().A(); + ydpi = GetDisplay()->GetResolution().B(); + + GraphiteFontAdaptor * pGrfont = new GraphiteFontAdaptor( *mpServerFont[nFallbackLevel], xdpi, ydpi); + if (!pGrfont) return NULL; + pLayout = new GraphiteServerFontLayout(pGrfont); + } + else +#endif + pLayout = new ServerFontLayout( *mpServerFont[ nFallbackLevel ] ); + } else if( mXFont[ nFallbackLevel ] ) pLayout = new X11FontLayout( *mXFont[ nFallbackLevel ] ); else diff --git a/vcl/util/makefile.mk b/vcl/util/makefile.mk index 63994c1be81c..dd176374223d 100644 --- a/vcl/util/makefile.mk +++ b/vcl/util/makefile.mk @@ -6,10 +6,6 @@ # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.111.36.3 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify @@ -184,6 +180,16 @@ SHL1STDLIBS+=\ $(ICUDATALIB) \ $(ICULELIB) \ $(JVMACCESSLIB) + +.IF "$(GUI)" == "UNX" +.IF "$(ENABLE_GRAPHITE)" != "" +.IF "$(SYSTEM_GRAPHITE)" == "YES" +SHL1STDLIBS+= $(GRAPHITE_LIBS) +.ELSE +SHL1STDLIBS+= $(SOLARVERSION)/$(INPATH)/lib$(UPDMINOREXT)/libgraphite.a +.ENDIF +.ENDIF +.ENDIF SHL1USE_EXPORTS=name .IF "$(GUIBASE)"=="aqua" @@ -198,6 +204,10 @@ LIB1FILES+= \ .IF "$(USE_BUILTIN_RASTERIZER)"!="" LIB1FILES += $(SLB)$/glyphs.lib SHL1STDLIBS+= $(FREETYPELIB) +.ELSE +.IF "$(ENABLE_GRAPHITE)" == "TRUE" + LIB1FILES += $(SLB)$/glyphs.lib +.ENDIF .ENDIF # USE_BUILTIN_RASTERIZER SHL1LIBS= $(LIB1TARGET) @@ -223,6 +233,14 @@ DEFLIB1NAME =vcl .IF "$(GUI)" == "WNT" +.IF "$(ENABLE_GRAPHITE)" == "TRUE" +.IF "$(COM)" == "GCC" +SHL1STDLIBS += -lgraphite +.ELSE +SHL1STDLIBS += graphite_dll.lib +.ENDIF +.ENDIF + SHL1STDLIBS += $(UWINAPILIB) \ $(GDI32LIB) \ $(GDIPLUSLIB) \ diff --git a/vcl/win/inc/salgdi.h b/vcl/win/inc/salgdi.h index 0475ea4a193e..c7ceb68199b9 100644 --- a/vcl/win/inc/salgdi.h +++ b/vcl/win/inc/salgdi.h @@ -81,6 +81,9 @@ public: bool SupportsArabic() const { return mbHasArabicSupport; } bool AliasSymbolsHigh() const { return mbAliasSymbolsHigh; } bool AliasSymbolsLow() const { return mbAliasSymbolsLow; } +#ifdef ENABLE_GRAPHITE + bool SupportsGraphite() const { return mbHasGraphiteSupport; } +#endif ImplFontCharMap* GetImplFontCharMap() const; const Ucs2SIntMap* GetEncodingVector() const { return mpEncodingVector; } @@ -97,6 +100,9 @@ private: mutable bool mbDisableGlyphApi; mutable bool mbHasKoreanRange; mutable bool mbHasCJKSupport; +#ifdef ENABLE_GRAPHITE + mutable bool mbHasGraphiteSupport; +#endif mutable bool mbHasArabicSupport; mutable ImplFontCharMap* mpUnicodeMap; mutable const Ucs2SIntMap* mpEncodingVector; diff --git a/vcl/win/source/gdi/MAKEFILE.MK b/vcl/win/source/gdi/MAKEFILE.MK index a6d84d41f3ea..3d8fd904b35b 100644 --- a/vcl/win/source/gdi/MAKEFILE.MK +++ b/vcl/win/source/gdi/MAKEFILE.MK @@ -64,6 +64,10 @@ SLOFILES= $(SLO)$/salgdi.obj \ EXCEPTIONSFILES= $(SLO)$/salprn.obj +.IF "$(ENABLE_GRAPHITE)" == "TRUE" +CFLAGS+=-DENABLE_GRAPHITE +.ENDIF + # --- Targets ------------------------------------------------------ .INCLUDE : target.mk diff --git a/vcl/win/source/gdi/salgdi3.cxx b/vcl/win/source/gdi/salgdi3.cxx index 99f276faa964..2bae9ab1388b 100644 --- a/vcl/win/source/gdi/salgdi3.cxx +++ b/vcl/win/source/gdi/salgdi3.cxx @@ -74,6 +74,11 @@ #include #endif +#ifdef ENABLE_GRAPHITE +#include +#include +#endif + #include #include #include @@ -807,6 +812,9 @@ ImplWinFontData::ImplWinFontData( const ImplDevFontAttributes& rDFS, mbDisableGlyphApi( false ), mbHasKoreanRange( false ), mbHasCJKSupport( false ), +#ifdef ENABLE_GRAPHITE + mbHasGraphiteSupport( false ), +#endif mbHasArabicSupport ( false ), mbAliasSymbolsLow( false ), mbAliasSymbolsHigh( false ), @@ -865,6 +873,13 @@ void ImplWinFontData::UpdateFromHDC( HDC hDC ) const ReadCmapTable( hDC ); ReadOs2Table( hDC ); +#ifdef ENABLE_GRAPHITE + static const char* pDisableGraphiteText = getenv( "SAL_DISABLE_GRAPHITE" ); + if( !pDisableGraphiteText || (pDisableGraphiteText[0] == '0') ) + { + mbHasGraphiteSupport = gr::WinFont::FontHasGraphiteTables(hDC); + } +#endif // even if the font works some fonts have problems with the glyph API // => the heuristic below tries to figure out which fonts have the problem diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx old mode 100755 new mode 100644 index 8d9347e7e352..2d335808e4c1 --- a/vcl/win/source/gdi/winlayout.cxx +++ b/vcl/win/source/gdi/winlayout.cxx @@ -71,6 +71,17 @@ typedef std::hash_map IntMap; typedef std::set IntSet; +// Graphite headers +#ifdef ENABLE_GRAPHITE +#include +#include +#include +#include +#include +#include +#include +#endif + #define DROPPED_OUTGLYPH 0xFFFF using namespace rtl; @@ -1757,6 +1768,8 @@ bool UniscribeLayout::GetItemSubrange( const VisualItem& rVisualItem, if( nMaxGlyphPos < n ) nMaxGlyphPos = n; } + if (nMaxGlyphPos > rVisualItem.mnEndGlyphPos) + nMaxGlyphPos = rVisualItem.mnEndGlyphPos - 1; // extend the glyph range to account for all glyphs in referenced clusters if( !rVisualItem.IsRTL() ) // LTR-item @@ -2041,11 +2054,25 @@ void UniscribeLayout::MoveGlyph( int nStartx8, long nNewXPos ) long nDelta = nNewXPos - pVI->mnXOffset; if( nStart > nMinGlyphPos ) { - // move the glyph by expanding its left glyph - int i; + // move the glyph by expanding its left glyph but ignore dropped glyphs + int i, nLastUndropped = nMinGlyphPos - 1; for( i = nMinGlyphPos; i < nStart; ++i ) - nDelta -= mpGlyphAdvances[ i ]; - mpGlyphAdvances[ i-1 ] += nDelta; + { + if (mpOutGlyphs[i] != DROPPED_OUTGLYPH) + { + nDelta -= (mpJustifications)? mpJustifications[ i ] : mpGlyphAdvances[ i ]; + nLastUndropped = i; + } + } + if (nLastUndropped >= nMinGlyphPos) + { + mpGlyphAdvances[ nLastUndropped ] += nDelta; + if (mpJustifications) mpJustifications[ nLastUndropped ] += nDelta; + } + else + { + pVI->mnXOffset += nDelta; + } } else { @@ -2066,11 +2093,18 @@ void UniscribeLayout::DropGlyph( int nStartx8 ) --nStart; else // nStart<=0 for first visible glyph { - const VisualItem* pVI = mpVisualItems; + VisualItem* pVI = mpVisualItems; for( int i = mnItemCount, nDummy; --i >= 0; ++pVI ) if( GetItemSubrange( *pVI, nStart, nDummy ) ) break; DBG_ASSERT( nStart <= mnGlyphCount, "USPLayout::DropG overflow" ); + int nOffset = 0; + int j = pVI->mnMinGlyphPos; + while (mpOutGlyphs[j] == DROPPED_OUTGLYPH) j++; + if (j == nStart) + { + pVI->mnXOffset += ((mpJustifications)? mpJustifications[nStart] : mpGlyphAdvances[nStart]); + } } mpOutGlyphs[ nStart ] = DROPPED_OUTGLYPH; @@ -2127,11 +2161,12 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ ) } // handle dropped glyphs at start of visual item - int nEndGlyphPos; - GetItemSubrange( rVI, i, nEndGlyphPos ); + int nMinGlyphPos, nEndGlyphPos, nOrigMinGlyphPos = rVI.mnMinGlyphPos; + GetItemSubrange( rVI, nMinGlyphPos, nEndGlyphPos ); + i = nMinGlyphPos; while( (mpOutGlyphs[i] == cDroppedGlyph) && (i < nEndGlyphPos) ) { - rVI.mnXOffset += pGlyphWidths[ i ]; + //rVI.mnXOffset += pGlyphWidths[ i ]; rVI.mnMinGlyphPos = ++i; } @@ -2141,6 +2176,17 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ ) rVI.mnEndGlyphPos = 0; continue; } + // If there are still glyphs in the cluster and mnMinGlyphPos + // has changed then we need to remove the dropped glyphs at start + // to correct logClusters, which is unsigned and relative to the + // item start. + if (rVI.mnMinGlyphPos != nOrigMinGlyphPos) + { + // drop any glyphs in the visual item outside the range + for (i = nOrigMinGlyphPos; i < nMinGlyphPos; i++) + mpOutGlyphs[ i ] = cDroppedGlyph; + rVI.mnMinGlyphPos = i = nOrigMinGlyphPos; + } // handle dropped glyphs in the middle of visual item for(; i < nEndGlyphPos; ++i ) @@ -2157,9 +2203,10 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ ) mpGlyphAdvances[ j ] = mpGlyphAdvances[ i ]; if( mpJustifications ) mpJustifications[ j ] = mpJustifications[ i ]; - int k = mpGlyphs2Chars[ i ]; + const int k = mpGlyphs2Chars[ i ]; mpGlyphs2Chars[ j ] = k; - mpLogClusters[ k ] = sal::static_int_cast(j++); + const int nRelGlyphPos = (j++) - rVI.mnMinGlyphPos; + mpLogClusters[ k ] = static_cast(nRelGlyphPos); } rVI.mnEndGlyphPos = j; @@ -2751,6 +2798,234 @@ bool UniscribeLayout::IsKashidaPosValid ( int nCharPos ) const #endif // USE_UNISCRIBE +#ifdef ENABLE_GRAPHITE + +class GraphiteLayoutWinImpl : public GraphiteLayout +{ +public: + GraphiteLayoutWinImpl(const gr::Font & font, ImplWinFontEntry & rFont) + throw() + : GraphiteLayout(font), mrFont(rFont) {}; + virtual ~GraphiteLayoutWinImpl() throw() {}; + virtual sal_GlyphId getKashidaGlyph(int & rWidth); +private: + ImplWinFontEntry & mrFont; +}; + +sal_GlyphId GraphiteLayoutWinImpl::getKashidaGlyph(int & rWidth) +{ + rWidth = mrFont.GetMinKashidaWidth(); + return mrFont.GetMinKashidaGlyph(); +} + +// This class uses the SIL Graphite engine to provide complex text layout services to the VCL +// @author tse +// +class GraphiteWinLayout : public WinLayout +{ +private: + mutable gr::WinFont mpFont; + grutils::GrFeatureParser * mpFeatures; + mutable GraphiteLayoutWinImpl maImpl; +public: + GraphiteWinLayout(HDC hDC, const ImplWinFontData& rWFD, ImplWinFontEntry& rWFE); + + static bool IsGraphiteEnabledFont(HDC hDC) throw(); + + // used by upper layers + virtual bool LayoutText( ImplLayoutArgs& ); // first step of layout + virtual void AdjustLayout( ImplLayoutArgs& ); // adjusting after fallback etc. + // virtual void InitFont() const; + virtual void DrawText( SalGraphics& ) const; + + // methods using string indexing + virtual int GetTextBreak( long nMaxWidth, long nCharExtra=0, int nFactor=1 ) const; + virtual long FillDXArray( long* pDXArray ) const; + + virtual void GetCaretPositions( int nArraySize, long* pCaretXArray ) const; + + // methods using glyph indexing + virtual int GetNextGlyphs(int nLen, sal_GlyphId* pGlyphIdxAry, ::Point & rPos, int&, + long* pGlyphAdvAry = 0, int* pCharPosAry = 0 ) const; + + // used by glyph+font+script fallback + virtual void MoveGlyph( int nStart, long nNewXPos ); + virtual void DropGlyph( int nStart ); + virtual void Simplify( bool bIsBase ); + ~GraphiteWinLayout() { delete mpFeatures; mpFeatures = NULL; }; +protected: + virtual void ReplaceDC(gr::Segment & segment) const; + virtual void RestoreDC(gr::Segment & segment) const; +}; + +bool GraphiteWinLayout::IsGraphiteEnabledFont(HDC hDC) throw() +{ + return gr::WinFont::FontHasGraphiteTables(hDC); +} + +GraphiteWinLayout::GraphiteWinLayout(HDC hDC, const ImplWinFontData& rWFD, ImplWinFontEntry& rWFE) throw() + : WinLayout(hDC, rWFD, rWFE), mpFont(hDC), + maImpl(mpFont, rWFE) +{ + const rtl::OString aLang = MsLangId::convertLanguageToIsoByteString( rWFE.maFontSelData.meLanguage ); + rtl::OString name = rtl::OUStringToOString( + rWFE.maFontSelData.maTargetName, RTL_TEXTENCODING_UTF8 ); + sal_Int32 nFeat = name.indexOf(grutils::GrFeatureParser::FEAT_PREFIX) + 1; + if (nFeat > 0) + { + rtl::OString aFeat = name.copy(nFeat, name.getLength() - nFeat); + mpFeatures = new grutils::GrFeatureParser(mpFont, aFeat.getStr(), aLang.getStr()); + } + else + { + mpFeatures = new grutils::GrFeatureParser(mpFont, aLang.getStr()); + } + maImpl.SetFeatures(mpFeatures); +} + +void GraphiteWinLayout::ReplaceDC(gr::Segment & segment) const +{ + COLORREF color = GetTextColor(mhDC); + dynamic_cast(segment.getFont()).replaceDC(mhDC); + SetTextColor(mhDC, color); +} + +void GraphiteWinLayout::RestoreDC(gr::Segment & segment) const +{ + dynamic_cast(segment.getFont()).restoreDC(); +} + +bool GraphiteWinLayout::LayoutText( ImplLayoutArgs & args) +{ + HFONT hUnRotatedFont; + if (args.mnOrientation) + { + // Graphite gets very confused if the font is rotated + LOGFONTW aLogFont; + ::GetObjectW( mhFont, sizeof(LOGFONTW), &aLogFont); + aLogFont.lfEscapement = 0; + aLogFont.lfOrientation = 0; + hUnRotatedFont = ::CreateFontIndirectW( &aLogFont); + ::SelectFont(mhDC, hUnRotatedFont); + } + WinLayout::AdjustLayout(args); + mpFont.replaceDC(mhDC); + maImpl.SetFontScale(WinLayout::mfFontScale); + //bool succeeded = maImpl.LayoutText(args); +#ifdef GRCACHE + GrSegRecord * pSegRecord = NULL; + gr::Segment * pSegment = maImpl.CreateSegment(args, &pSegRecord); +#else + gr::Segment * pSegment = maImpl.CreateSegment(args); +#endif + bool bSucceeded = false; + if (pSegment) + { + // replace the DC on the font within the segment + ReplaceDC(*pSegment); + // create glyph vectors +#ifdef GRCACHE + bSucceeded = maImpl.LayoutGlyphs(args, pSegment, pSegRecord); +#else + bSucceeded = maImpl.LayoutGlyphs(args, pSegment); +#endif + // restore original DC + RestoreDC(*pSegment); +#ifdef GRCACHE + if (pSegRecord) pSegRecord->unlock(); + else delete pSegment; +#else + delete pSegment; +#endif + } + mpFont.restoreDC(); + if (args.mnOrientation) + { + // restore the rotated font + ::SelectFont(mhDC, mhFont); + ::DeleteObject(hUnRotatedFont); + } + return bSucceeded; +} + +void GraphiteWinLayout::AdjustLayout(ImplLayoutArgs& rArgs) +{ + WinLayout::AdjustLayout(rArgs); + maImpl.DrawBase() = WinLayout::maDrawBase; + maImpl.DrawOffset() = WinLayout::maDrawOffset; + if ( (rArgs.mnFlags & SAL_LAYOUT_BIDI_RTL) && rArgs.mpDXArray) + { + mrWinFontEntry.InitKashidaHandling(mhDC); + } + maImpl.AdjustLayout(rArgs); +} + +void GraphiteWinLayout::DrawText(SalGraphics &sal_graphics) const +{ + HFONT hOrigFont = DisableFontScaling(); + HDC aHDC = static_cast(sal_graphics).mhDC; + maImpl.DrawBase() = WinLayout::maDrawBase; + maImpl.DrawOffset() = WinLayout::maDrawOffset; + const int MAX_GLYPHS = 2; + sal_GlyphId glyphIntStr[MAX_GLYPHS]; + WORD glyphWStr[MAX_GLYPHS]; + int glyphIndex = 0; + Point aPos(0,0); + int nGlyphs = 0; + do + { + nGlyphs = maImpl.GetNextGlyphs(1, glyphIntStr, aPos, glyphIndex); + if (nGlyphs < 1) + break; + std::copy(glyphIntStr, glyphIntStr + nGlyphs, glyphWStr); + ::ExtTextOutW(aHDC, aPos.X(), aPos.Y(), ETO_GLYPH_INDEX, + NULL, (LPCWSTR)&(glyphWStr), nGlyphs, NULL); + } while (nGlyphs); + if( hOrigFont ) + DeleteFont( SelectFont( mhDC, hOrigFont ) ); +} + +int GraphiteWinLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const +{ + mpFont.replaceDC(mhDC); + int nBreak = maImpl.GetTextBreak(nMaxWidth, nCharExtra, nFactor); + mpFont.restoreDC(); + return nBreak; +} + +long GraphiteWinLayout::FillDXArray( long* pDXArray ) const +{ + return maImpl.FillDXArray(pDXArray); +} + +void GraphiteWinLayout::GetCaretPositions( int nArraySize, long* pCaretXArray ) const +{ + maImpl.GetCaretPositions(nArraySize, pCaretXArray); +} + +int GraphiteWinLayout::GetNextGlyphs( int length, sal_GlyphId* glyph_out, + ::Point & pos_out, int &glyph_slot, long * glyph_adv, int *char_index) const +{ + maImpl.DrawBase() = WinLayout::maDrawBase; + maImpl.DrawOffset() = WinLayout::maDrawOffset; + return maImpl.GetNextGlyphs(length, glyph_out, pos_out, glyph_slot, glyph_adv, char_index); +} + +void GraphiteWinLayout::MoveGlyph( int glyph_idx, long new_x_pos ) +{ + maImpl.MoveGlyph(glyph_idx, new_x_pos); +} + +void GraphiteWinLayout::DropGlyph( int glyph_idx ) +{ + maImpl.DropGlyph(glyph_idx); +} + +void GraphiteWinLayout::Simplify( bool is_base ) +{ + maImpl.Simplify(is_base); +} +#endif // ENABLE_GRAPHITE // ======================================================================= SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel ) @@ -2766,6 +3041,11 @@ SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLe if( !(rArgs.mnFlags & SAL_LAYOUT_COMPLEX_DISABLED) && (aUspModule || (bUspEnabled && InitUSP())) ) // CTL layout engine { +#ifdef ENABLE_GRAPHITE + if (rFontFace.SupportsGraphite()) + pWinLayout = new GraphiteWinLayout(mhDC, rFontFace, rFontInstance); + else +#endif // ENABLE_GRAPHITE // script complexity is determined in upper layers pWinLayout = new UniscribeLayout( mhDC, rFontFace, rFontInstance ); // NOTE: it must be guaranteed that the WinSalGraphics lives longer than @@ -2788,7 +3068,12 @@ SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLe BYTE eCharSet = ANSI_CHARSET; if( mpLogFont ) eCharSet = mpLogFont->lfCharSet; - pWinLayout = new SimpleWinLayout( mhDC, eCharSet, rFontFace, rFontInstance ); +#ifdef ENABLE_GRAPHITE + if (rFontFace.SupportsGraphite()) + pWinLayout = new GraphiteWinLayout(mhDC, rFontFace, rFontInstance); + else +#endif // ENABLE_GRAPHITE + pWinLayout = new SimpleWinLayout( mhDC, eCharSet, rFontFace, rFontInstance ); } if( mfFontScale != 1.0 ) diff --git a/vcl/win/source/window/MAKEFILE.MK b/vcl/win/source/window/MAKEFILE.MK index 17e73db1e75e..67cb1bf3e080 100644 --- a/vcl/win/source/window/MAKEFILE.MK +++ b/vcl/win/source/window/MAKEFILE.MK @@ -60,6 +60,10 @@ SLOFILES= \ EXCEPTIONSFILES= $(SLO)$/salframe.obj .ENDIF +.IF "$(ENABLE_GRAPHITE)" == "TRUE" +CFLAGS+=-DENABLE_GRAPHITE +.ENDIF + # --- Targets ------------------------------------------------------ .INCLUDE : target.mk -- cgit v1.2.3 From e1649400975bb14df906b787262111be574159f4 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Tue, 18 Aug 2009 10:12:49 +0000 Subject: #i10000# build fix --- vcl/source/glyphs/graphite_textsrc.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vcl/source/glyphs/graphite_textsrc.cxx b/vcl/source/glyphs/graphite_textsrc.cxx index d2987e585281..adc2ae99c4f8 100644 --- a/vcl/source/glyphs/graphite_textsrc.cxx +++ b/vcl/source/glyphs/graphite_textsrc.cxx @@ -69,7 +69,7 @@ size_t TextSourceAdaptor::fetch(gr::toffset, size_t, gr::utf32 *) size_t TextSourceAdaptor::fetch(gr::toffset offset, size_t char_count, gr::utf16 * char_buffer) { - assert(char_buf); + assert(char_buffer); size_t copy_count = std::min(size_t(maLayoutArgs.mnLength), char_count); std::copy(maLayoutArgs.mpStr + offset, maLayoutArgs.mpStr + offset + copy_count, char_buffer); -- cgit v1.2.3 From af9e732c94a594dfa1b283bed80a9e66a2e94681 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Tue, 18 Aug 2009 15:00:01 +0000 Subject: #i10000# build fix --- vcl/source/glyphs/makefile.mk | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vcl/source/glyphs/makefile.mk b/vcl/source/glyphs/makefile.mk index 3c3ba62c49e6..13da4a64f1a0 100644 --- a/vcl/source/glyphs/makefile.mk +++ b/vcl/source/glyphs/makefile.mk @@ -55,17 +55,17 @@ SLOFILES=\ $(SLO)$/gcach_layout.obj \ $(SLO)$/gcach_ftyp.obj -.IF "$(ENABLE_GRAPHITE)" != "" -CFLAGS+=-DENABLE_GRAPHITE -SLOFILES+= $(SLO)$/graphite_adaptors.obj \ +#.IF "$(ENABLE_GRAPHITE)" != "" +#CFLAGS+=-DENABLE_GRAPHITE +#SLOFILES+= $(SLO)$/graphite_adaptors.obj \ $(SLO)$/graphite_features.obj \ $(SLO)$/graphite_cache.obj \ $(SLO)$/graphite_textsrc.obj \ $(SLO)$/graphite_serverfont.obj \ $(SLO)$/graphite_layout.obj -.ENDIF +#.ENDIF -.ELSE +#.ELSE .IF "$(ENABLE_GRAPHITE)" == "TRUE" # make use of stlport headerfiles EXT_USE_STLPORT=TRUE -- cgit v1.2.3 From 36053907a3d609b938e43b9842c3926ec522ff09 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Mon, 24 Aug 2009 08:33:42 +0000 Subject: #i10000# build fix --- vcl/source/glyphs/makefile.mk | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/vcl/source/glyphs/makefile.mk b/vcl/source/glyphs/makefile.mk index 13da4a64f1a0..3e79cdc63da2 100644 --- a/vcl/source/glyphs/makefile.mk +++ b/vcl/source/glyphs/makefile.mk @@ -49,24 +49,28 @@ CFLAGS+=-DUSE_FT_EMBOLDEN # --- Files -------------------------------------------------------- .IF "$(USE_BUILTIN_RASTERIZER)" != "" +# GlyphCache + FreeType support (only on UNX platforms currently) SLOFILES=\ $(SLO)$/glyphcache.obj \ $(SLO)$/gcach_rbmp.obj \ $(SLO)$/gcach_layout.obj \ $(SLO)$/gcach_ftyp.obj -#.IF "$(ENABLE_GRAPHITE)" != "" -#CFLAGS+=-DENABLE_GRAPHITE -#SLOFILES+= $(SLO)$/graphite_adaptors.obj \ +.IF "$(ENABLE_GRAPHITE)" != "" +# Graphite support using the glyphcache infrastructure +CFLAGS+=-DENABLE_GRAPHITE +SLOFILES+= $(SLO)$/graphite_adaptors.obj \ $(SLO)$/graphite_features.obj \ $(SLO)$/graphite_cache.obj \ $(SLO)$/graphite_textsrc.obj \ $(SLO)$/graphite_serverfont.obj \ $(SLO)$/graphite_layout.obj -#.ENDIF +.ENDIF + +.ELSE -#.ELSE .IF "$(ENABLE_GRAPHITE)" == "TRUE" +# Graphite support on non-UNX platforms # make use of stlport headerfiles EXT_USE_STLPORT=TRUE SLOFILES=\ -- cgit v1.2.3 From 8e77b635da36f48ca527960978a4e36332b538e7 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Mon, 24 Aug 2009 09:30:13 +0000 Subject: #i10000# build fix --- vcl/util/makefile.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vcl/util/makefile.mk b/vcl/util/makefile.mk index dd176374223d..4c0cd7dba656 100644 --- a/vcl/util/makefile.mk +++ b/vcl/util/makefile.mk @@ -213,7 +213,7 @@ LIB1FILES+= \ SHL1LIBS= $(LIB1TARGET) .IF "$(GUI)"!="UNX" .IF "$(COM)"!="GCC" -SHL1OBJS= $(SLO)$/salshl.obj +#SHL1OBJS= $(SLO)$/salshl.obj .ENDIF .ENDIF -- cgit v1.2.3 From b21aa9c44719d296b441c64609ab0e224845e966 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Tue, 25 Aug 2009 11:00:47 +0000 Subject: CWS-TOOLING: integrate CWS ooxml03 2009-08-11 12:16:50 +0200 kendy r274852 : CWS-TOOLING: rebase CWS ooxml03 to trunk@274622 (milestone: DEV300:m54) 2009-07-17 17:55:14 +0200 hbrinkm r274100 : resolved warning on unxlngi6.pro 2009-07-15 17:11:09 +0200 kendy r274015 : #i96319# With the disabled docx pieces, libmsword is not a UNO library. 2009-07-15 13:38:36 +0200 hbrinkm r274010 : removed unresolved symbols 2009-07-13 16:06:11 +0200 hbrinkm r273943 : resolved warnings 2009-07-10 14:01:03 +0200 hbrinkm r273889 : changes to make compile on Windows 2009-06-22 19:46:17 +0200 kendy r273252 : #i96319# Disable the DOCX export, it's not perfect yet... 2009-06-22 13:04:32 +0200 kendy r273219 : CWS-TOOLING: rebase CWS ooxml03 to trunk@272827 (milestone: DEV300:m50) 2009-06-11 17:11:39 +0200 kendy r272890 : #i96319# Fix regression in the Word 95 output of hyperlinks. 2009-06-05 17:53:08 +0200 kendy r272710 : #i96319# Fix regression in Word 95 output (wrong style number when nodes recurse). 2009-06-03 00:19:27 +0200 kendy r272529 : #i96319# Fix regression in output of the section breaks. 2009-05-29 18:30:19 +0200 kendy r272475 : CWS-TOOLING: rebase CWS ooxml03 to trunk@272291 (milestone: DEV300:m49) 2009-05-29 09:58:02 +0200 kendy r272435 : #i102354# Don't write the debug info directly to the document. 2009-05-28 15:57:01 +0200 kendy r272411 : #i102260# Revert another trivial fix. 2009-05-26 16:43:07 +0200 kendy r272310 : #i102260# Disable fix of FILLIN fields. 2009-05-26 14:14:09 +0200 kendy r272302 : #i96319# Fix regression in the calculation of size of cells. 2009-05-26 01:42:29 +0200 kendy r272274 : #i96319# Fix a regression - don't export RES_PARATR_LINESPACING and RES_UL_SPACE with every style. [And additionally some beautification.] 2009-05-23 00:37:44 +0200 thb r272212 : #i102156# added XFastSAXSerializable plus implementation 2009-05-22 16:43:09 +0200 kendy r272201 : CWS-TOOLING: rebase CWS ooxml03 to trunk@271830 (milestone: DEV300:m48) 2009-05-14 23:37:02 +0200 thb r271924 : #i10000# post-filter split fixes - make non-pro compile again 2009-05-14 22:35:54 +0200 thb r271923 : #i10000# post-svx split fixes - both librpt and librptui need libsvx 2009-05-14 21:39:08 +0200 thb r271922 : #i10000# post-svx split work - getting nonpro build working again 2009-05-11 09:11:23 +0200 kendy r271740 : #i99638# svxcore library is not a UNO library. 2009-04-29 17:31:45 +0200 kendy r271389 : #i96319# Fixed a corner case in docx export of nested tables. Actually, this even simplifies the code a bit :-) 2009-04-29 12:10:08 +0200 kendy r271364 : #i96319# Fix output of spacing in docx. 2009-04-29 10:56:43 +0200 kendy r271357 : #i96319# Fix an endless loop in the docx export of bookmarks. 2009-04-29 01:06:21 +0200 kendy r271348 : #i96319# Fix output of cell width and height. 2009-04-27 13:29:02 +0200 kendy r271264 : #i96319# Fix output of section columns (their number + widths) for docx. 2009-04-24 15:51:23 +0200 kendy r271219 : #i96319# Fix output of dates - xsi:type=... should be there only for dcterms. 2009-04-23 18:27:28 +0200 kendy r271190 : #i96319# Fix output of gridCol's. 2009-04-23 17:13:44 +0200 kendy r271184 : #i96319# Avoid incorrect double output of tcPr. 2009-04-22 15:58:10 +0200 kendy r271125 : #i96319# Fix the output of the nested tables after all the rebases. 2009-04-20 15:16:48 +0200 kendy r270989 : #i96319# More correct output of the nodes. 2009-04-20 13:27:06 +0200 kendy r270976 : #i96319# Make it build after the rebase to m46 again; maybe does not run yet. 2009-04-10 23:00:46 +0200 kendy r270725 : CWS-TOOLING: rebase CWS ooxml03 to trunk@270723 (milestone: DEV300:m46) 2009-04-09 17:31:44 +0200 kendy r270716 : #i96319# Fix output of headers/footers. 2009-04-09 16:42:13 +0200 kendy r270715 : #i99638# Fix visibility for the debug build of svx. 2009-04-03 10:27:50 +0200 kendy r270466 : #i99683# One forgotten gid_File_Filter_Emp -> gid_File_Filter_Sdfilt. 2009-03-06 16:19:03 +0100 kendy r269013 : #i99638# Remove SpecialProgress-related methods and members, not used any more, and breaks linking on Win32. 2009-03-06 09:43:55 +0100 kendy r268974 : #i99638# Resolve some more unresolved symbols on Win32. 2009-03-05 23:01:39 +0100 kendy r268946 : #i99638# Export less SdStyleSheetPool symbols. 2009-03-05 15:31:23 +0100 kendy r268910 : #i99638# MSVC needs struct WW8_PdAttrDesc declared, otherwise fails to link. 2009-03-04 14:15:23 +0100 kendy r268826 : #i99638# More Win32-related build fixes. 2009-03-04 13:47:48 +0100 kendy r268823 : #i99638# Disable pptx export again, brougth in by mistake. 2009-03-04 09:54:00 +0100 kendy r268786 : #i99638# Deliver also isvxcore.lib and isvxmsfilter.lib. 2009-03-03 17:42:25 +0100 kendy r268773 : #i99638# SdrModel::setUnoModel() should not be inline. 2009-03-03 17:25:59 +0100 kendy r268770 : #i99638# Ugh, revert. 2009-03-03 17:05:16 +0100 kendy r268765 : #i99638# Make ObjectContact dll private. 2009-03-03 15:35:41 +0100 kendy r268733 : #i99638# More destructors visible for Win32 linking. 2009-03-03 14:26:23 +0100 kendy r268726 : #i99638# Make some destructors visible, and change one static inline to static to Win32 linking happy. 2009-03-03 10:42:12 +0100 kendy r268712 : #i99638# More moving stuff around to make Win32 linking happy. 2009-03-03 09:48:17 +0100 kendy r268708 : #i99638# Reduce the includes, needed for Win32 linking. 2009-03-03 08:48:00 +0100 kendy r268705 : #i99638# ImpGetResStr() visibility markup moved to the header. 2009-03-02 16:30:17 +0100 kendy r268664 : #i99638# Fix visibility problems that appeared on x86. 2009-02-27 22:25:57 +0100 kendy r268618 : #i96319# Better definition of DBG in utils.hxx. 2009-02-27 21:53:17 +0100 kendy r268616 : #i96319# License for utils.hxx, define DBG only for the debug builds. 2009-02-27 21:44:25 +0100 kendy r268615 : #i96319# Fixed types for printf etc. parameters. 2009-02-27 17:23:17 +0100 kendy r268607 : #i96319# Fix build after the rebase. 2009-02-27 15:12:49 +0100 kendy r268597 : CWS-TOOLING: rebase CWS ooxml03 to trunk@268395 (milestone: DEV300:m42) 2009-02-27 12:37:57 +0100 kendy r268580 : #i96319# Fix build dependency in oox. 2009-02-26 22:02:06 +0100 kendy r268547 : #i99683# Move ppt import to a separate library. The ppt export is already separate, so it makes sense to give there the import as well. The current library 'emp' was renamed to 'scfilt', it links against svxmsfilter, and few symbols had to be made visible (28 of them). 2009-02-26 14:36:25 +0100 kendy r268520 : #i99638# Whitespace fixes. 2009-02-26 14:31:35 +0100 kendy r268518 : #i99638# Split svx into svxcore, svxmsfilter and the rest. SvxImportMSVBasic's SaveOrDelMSVBAStorage(), GetSaveWarningOfMSVBAStorage(), and GetMSBasicStorageName() must go to svxcore (because of Writer). 2009-02-26 00:16:32 +0100 kendy r268471 : #i99638# Split libsvx into 3 pieces - svxcore, svxmsfilter, and svx (the rest). This contains: - the split (based on inter-object dependencies) - svxcore is actually a closure on a graph where the objects are vertexes, and where there's an edge between 2 vertexes when one needs symbol from the second ;-) - maybe still could be split, but that will be most probably harder to achieve - svxmsfilter is a subset that is needed just by the filters of the MS Office formats - the new svx contains the rest that did not fit the above 2 - visibility for svxcore - some svxcore symbols had to be exposed for svxmsfilter or svx - adaption of modules linking against svx - in some cases, linking just against svxcore is enough 2009-02-25 23:35:03 +0100 kendy r268470 : #i99545# Get rid of struct ConstAsciiString, and use simple #define's instead - it's a pre-requisite for a svx split, and also saves memory on x86-64, and some symbol names. 2009-02-25 22:39:02 +0100 kendy r268468 : #i96319# Get rid of the now unneecessary debug class DOCX. 2009-02-17 20:35:29 +0100 kendy r268190 : #i96319# WW8 filter rework + docx export License header + whitespace fixes. 2009-02-17 20:02:39 +0100 kendy r268189 : #i96319# WW8 filter rework + docx export Add license header to preset-definitions-to-shape-types.pl. 2009-02-17 19:58:11 +0100 kendy r268188 : #i96319# WW8 filter rework + docx export oox does not have to depend on FASTSAXLIB. 2009-02-17 17:05:34 +0100 kendy r268182 : #i96319# WW8 filter rework + docx export Fix the sax compilation, apparently some of the changes were missing. 2009-02-17 13:04:14 +0100 kendy r268163 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Fix output of shape paths (point components can be either 16 or 32 bit). [And also implement a fallback for the missing shapes - treated as rectangle.] 2009-02-17 13:03:56 +0100 kendy r268162 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Correction of some values. Now the shapes seem to be good enough; time to abandon them ;-) 2009-02-17 13:03:37 +0100 kendy r268161 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Better detection of consts. 2009-02-17 13:03:19 +0100 kendy r268160 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Fixed the 'sun' shape. 2009-02-17 13:03:00 +0100 kendy r268159 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Better check for unneeded 'prod's. 2009-02-17 13:02:42 +0100 kendy r268158 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Fix the adj values. 2009-02-17 13:02:23 +0100 kendy r268157 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Fix pentagon and star5 shapes. 2009-02-17 13:02:04 +0100 kendy r268156 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Fix most of the 'star' shapes by preventing an overflow. 2009-02-17 13:01:41 +0100 kendy r268155 : #i96319# WW8 filter rework + docx export From: Radek Doulik * fixed build after resolving conflicts 2009-02-17 13:01:19 +0100 kendy r268154 : #i96319# WW8 filter rework + docx export From: Radek Doulik * added TODO comment 2009-02-17 13:00:59 +0100 kendy r268153 : #i96319# WW8 filter rework + docx export From: Radek Doulik * implemented adjustments export in custom shapes 2009-02-17 13:00:40 +0100 kendy r268152 : #i96319# WW8 filter rework + docx export From: Radek Doulik * partially refactored EscherPropertyContainer::CreateCustomShapeProperties extracted 3 helper functions, which are now used in ooxml export 2009-02-17 13:00:17 +0100 kendy r268151 : #i96319# WW8 filter rework + docx export From: Radek Doulik * make mAny member of DrawingML protected, so that ShapeExport can access it * export connector shape * added DrawingML::WriteConnectorConnections * fixed bezier shape outline export (regression fix) 2009-02-17 12:59:54 +0100 kendy r268150 : #i96319# WW8 filter rework + docx export From: Radek Doulik * make EscherConnectorListEntry structure public, so that it can be used by ooxml export 2009-02-17 12:59:34 +0100 kendy r268149 : #i96319# WW8 filter rework + docx export From: Radek Doulik * added mapping of shapes to shape IDs * cleaned a bit shape name generation 2009-02-17 12:59:13 +0100 kendy r268148 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Fixed some of the text shapes, 166/202. In the 202, I counted even shapes that are marked 'should not be used' (and their definition is missing) even in the documentation. The only really missing shapes are those that use general arcTo... 2009-02-17 12:58:53 +0100 kendy r268147 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Found missing shapes, now 159/202. 2009-02-17 12:58:36 +0100 kendy r268146 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Optimize the amount of formulas a bit. Adds one more shape that previously reached the top amount of formulas ;-) 2009-02-17 12:58:15 +0100 kendy r268145 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Implemented quadratic beziers, 144/202 now. I was unable to use 'qb', it did not produce good results, no idea why :-( Instead used 'c' - cubic bezier - and recounted the control points (mathematically equivalent representation). The downside is that for some shapes I run out of formulas :-( - TODO later. 2009-02-17 12:57:56 +0100 kendy r268144 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Fix presetShapeDefinitions.xml, there's an error there. 2009-02-17 12:57:31 +0100 kendy r268143 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Implemented cubicBezTo + few formulas, now 136/202. 2009-02-17 12:57:11 +0100 kendy r268142 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Fixed units of sin/cos, which makes it now 118/202. Realized that some of the shapes are 'too small' - like <10 units, insetad of ~21600; have to look at that. 2009-02-17 12:56:43 +0100 kendy r268141 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: More arcTo shapes, 116/202 now. 2009-02-17 12:56:21 +0100 kendy r268140 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Better conversion of */ (fixes some shapes). Implemented nostroke/nofill. 2009-02-17 12:56:01 +0100 kendy r268139 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: More formulas, and partially implemented 'arcTo' - 93/202 shapes now. 2009-02-17 12:55:39 +0100 kendy r268138 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Radically changed the conversion of formulas to be able to implement +/. [...and actually implemented it ;-), 60/202 shapes now.] 2009-02-17 12:55:19 +0100 kendy r268137 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Shape types generation plugged to the build, 53/202 shapes now. 2009-02-17 12:54:57 +0100 kendy r268136 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: More predefined shapes generated (thanks to 'pin' translation). 2009-02-17 12:54:36 +0100 kendy r268135 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Script that creates the predefined shape types + the definitions. The shape types themselves come from the OOXML documentation; the script just converts them from DrawingML to a VML representation in a C++ file. The converter is not feature-complete yet, resulting in some missing shapes. Also it is not yet part of the build (makefile.mk not modified yet). 2009-02-17 12:54:10 +0100 kendy r268134 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: + Fixed a regression on sections output + Columns break has to be postponed to the next paragraph + Implemented sections properly + Columns formatting properties exported 2009-02-17 12:53:49 +0100 kendy r268133 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat haven't I fixed those problems? 2009-02-17 12:53:29 +0100 kendy r268132 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: + table alignment is now exported 2009-02-17 12:53:07 +0100 kendy r268131 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Integrate VMLExport with Calc for Comment export. Few minor changes needed to VMLExport so that Calc could customize the behavior. Specifically, Calc needed to be able to: - Explicitly specify the //v:shape/@type attribute value so that Excel wouldn't show a diagonal "arrow" underneath the note text instead of showing an actual box. - Add custom Escher properties such as "hidden", etc. - Insert the //v:shape/x:ClientData element before //v:shape is closed. * oox/inc/oox/export/vmlexport.hxx, oox/source/export/vmlexport.cxx: - Make Commit(), StartShape(), and EndShape() protected so that Calc can override those methods - StartShape() is needed to add //v:shape/@type - Commit() is needed to add new Escher properties - EndShape() is needed to generate //v:shape/x:ClientData. - Add AddShapeAttribute() method, so Calc can set the //v:shape/@type value. - Output "visibility:hidden" for the ESCHER_Prop_fHidden property. 2009-02-17 12:52:46 +0100 kendy r268130 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Finish the transition of VMLExport from 'sw' to 'oox' + few trivial fixes. The VML export code is now accessible as oox::vml::VMLExport. The (not that related) fixes include SAL_DLLPUBLIC_EXPORT -> OOX_DLLPUBLIC change and few warning fixes. 2009-02-17 12:52:24 +0100 kendy r268129 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Moved vmlexport.[hc]xx to oox. 2009-02-17 12:52:04 +0100 kendy r268128 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Cleanup before we move to oox. 2009-02-17 12:51:41 +0100 kendy r268127 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: Some more features for tables export 2009-02-17 12:51:21 +0100 kendy r268126 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: + nested tables export refinement + export row height and table headers 2009-02-17 12:50:58 +0100 kendy r268125 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Initialize a local variable. 2009-02-17 12:50:34 +0100 kendy r268124 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: fixed table layout for nested tables. Fixed nested tables output 2009-02-17 12:50:13 +0100 kendy r268123 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: added support of nested tables. Still needs to be heavily tested. Some problems are occuring with the grid layout. 2009-02-17 12:49:49 +0100 kendy r268122 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Change SAL_DLLPUBLIC_EXPORT to SW_DLLPUBLIC which is more appropriate here. 2009-02-17 12:49:28 +0100 kendy r268121 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Fix line-callout-3 translation. The `line-callout-3' callout was being mapped to the `accentBorderCallout90' OOXML callout, which Excel didn't like at all. Changing this to `borderCallout3' produces OOXML that Excel will load. Not sure what mso-spt49 is supposed to be, but given the other mso-spt* values I think accentBorderCallout90 makes more sense (but cannot find such a value in the OOXML XSD files). 2009-02-17 12:49:05 +0100 kendy r268120 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Fix refactoring of DrawingML::WritePolyPolygon(). The original version only checked rPoly.GetFlags() for every item *after* the first item -- i.e. the first item was skipped. Change the `for' loop start index to follow this behavior. 2009-02-17 12:48:42 +0100 kendy r268119 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Fix Bezier output. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit The //a:cubicBezTo element (?5.1.11.7) requires that there be *three* //a:pt child elements. Ensure that this is the case (otherwise Excel yells at me about invalid DrawingML if I export a free-form shape). This also cleans up the code slightly, by moving out a `if(j==0)` block to before the for loop, and re-indenting the code to simplify understanding. 2009-02-17 12:48:22 +0100 kendy r268118 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Flush documentation. 2009-02-17 12:48:00 +0100 kendy r268117 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: + implemented table cell margins and fixed grid layout + reapplied missing patch from m34 about default spacing of paragraphs 2009-02-17 12:47:40 +0100 kendy r268116 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Migrate Calc to use ShapeExport. Minor snafu here: XML_nvPr is valid only within Impress, so if Calc exports it Excel doesn't like the resulting documents. Remove XML_nvPr output from ShapeExport and replace with calls to ShapeExport::WriteNonVisualProperties(). PowerPointShapeExport can thus override ShapeExport::WriteNonVisualProperties() to generate the required //p:nvPr elements. * oox/inc/oox/export/shapes.hxx: Declare ShapeExport::WriteNonVisualProperties(). * oox/source/export/shapes.cxx: * - Replace XML_nvPr generation with calls to WriteNonVisualProperties(). - Get the GraphicObject name property from the shape instead of generating "Picture N" values (if the shape has a Name property). - Generate a GraphicObject Description attribute, if present. - Remove unused method parameter names (to remove warnings). 2009-02-17 12:47:15 +0100 kendy r268114 : #i96319# WW8 filter rework + docx export From: Radek Doulik * fixed few shape names, which were missing Shape at the end * fixed mso-spt202 custom shape translation, which was causing problems with word wrapping * enabled wrap attribure for bodyPr tag * fixed 2 compiler warnings 2009-02-17 12:46:55 +0100 kendy r268113 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: column spans in tables are now exported 2009-02-17 12:46:33 +0100 kendy r268112 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx: + Fixed table structure output + Output table borders + Fixed borders output 2009-02-17 12:46:11 +0100 kendy r268111 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Excercise ShapeExport::WriteShape(). Refactor PowerPointExport::WriteShapeTree() to use ShapeExport::WriteShape(), overloading ShapeExport virtual Write* methods as appropriate to insert support for additional shapes. * oox/source/export/shapes.cxx: Correct the shape names (often by appending "Shape") so that the table lookup works as expected. 2009-02-17 12:45:49 +0100 kendy r268110 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Implement multiplexing ShapeExport::WriteShape(). What got me started on this whole "migrate large fractions of sd into oox" binge was PowerPointExport::WriteShapeTree(), which included a "multiplexer" -- a method that took the XShape's shape type and translated it into a (set of) member function(s) to call to convert the shape. I needed just such a multiplexer for Calc, and was loathe to copy/paste it. However, PowerPointExport::WriteShapeTree() is far more complicated for something to go into oox, dealing as it does with grouping and myriad other sd-specific details. Thus, an overhaul: All the ShapeExport::Write* methods are now virtual. The multiplexing ShapeExport::WriteShape() method will consult a string type -> member function lookup table, and if a matching member function is found it will be invoked. This allows subclasses to customize behavior. If no matching conversion member function is found, then ShapeExport::WriteUnknownShape() is invoked, allowing subclasses to transparently handle additional shapes w/o special-casing the WriteShape() call. * oox/inc/oox/export/shapes.hxx, oox/source/export/shapes.cxx: Make Write* methods virtual; Add WriteUnknownShape(); Replace the (non-functional) WriteShapeTree() with the multiplexing WriteShape(), and provide a hashtable mapping shape type to conversion method. 2009-02-17 12:45:28 +0100 kendy r268109 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Move Impress DrawingML Export code into oox::drawingml::ShapeExport. Begin moving sharable sd/source/filter/eppt/epptooxml.cxx DrawingML code into oox::drawingml::ShapeExport, so that DrawingML elements (w/ different namespaces) can use the same export code. WARNING: the migration makes the assumption that mXPropSet comes from mXShape, that is: Reference< XPropertySet > mXPropSet( mXShape, UNO_QUERY ); If this is wrong, things will obviously break. This *should* be correct, as the altered code path rooted in PowerPointExport::WriteShapeTree() calls PPTWriterBase::GetShapeByIndex(), which ensures that mXPropSet is the XPropertySet for the mXShape instance: Any aAny( mXShape->queryInterface( ::getCppuType( (const Reference< XPropertySet >*) 0 ) )); aAny >>= mXPropSet; * oox/inc/oox/export/shapes.hxx, oox/source/export/shapes.cxx: Sync with the above removed PowerPointExport methods. 2009-02-17 12:45:11 +0100 kendy r268108 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Deliver inc/oox/export/shapes.hxx. 2009-02-17 12:44:51 +0100 kendy r268107 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Abstract out sd's shape export code. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit DrawingML is an evil, evil thing -- it's highly duplicative. For example, the element has been duplicated no less than four times into different XML namespaces: ?4.4.1.12, ?5.1.2.1.8, ?5.2.2.3, ?5.6.2.8, i.e. in the following XML namespaces (from the XSD files): http://schemas.openxmlformats.org/drawingml/2006/chartDrawing http://schemas.openxmlformats.org/drawingml/2006/main http://schemas.openxmlformats.org/drawingml/2006/picture http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing http://schemas.openxmlformats.org/presentationml/2006/main In all these cases, they all have the same attributes, the same parent elements, and the same child elements. They are, for all intents and purposes, identica EXCEPT for the XML namespace. Instead of rampantly duplicating sd's shape export code and doing s/XML_p/XML_???/g (i.e. replace the namespace), I'm refactoring sd's export code into oox::drawingml::ShapeExport. The ShapeExport constructor takes the target XML namespace as a parameter, and generates all XML relative to this namespace. * inc/oox/export/drawingml.hxx: Add DrawingML::GetFB() and DrawingML::GetFS() accessor methods, which are needed by ShapeExport. * source/export/makefile.mk: Add shapes.cxx to the build. * inc/oox/export/shapes.hxx, source/export/shapes.cxx: Declare and implement oox::drawingml::ShapeExport. 2009-02-17 12:44:32 +0100 kendy r268106 : #i96319# WW8 filter rework + docx export From: Radek Doulik * extracted paragraph adjustment translation * added text wrap (commented out as it doesn't work flawlessly yet) 2009-02-17 12:44:12 +0100 kendy r268105 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: now able to export the tables structures 2009-02-17 12:43:53 +0100 kendy r268104 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Fixed a bug in doc table export. 2009-02-17 12:43:34 +0100 kendy r268103 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Fixed several build bugs: + strange integer conversion + unexported symbol dbg_out + Reintegrated missing patches from m34 + Reupdated scp2 module to flag libmsword as a uno component 2009-02-17 12:43:15 +0100 kendy r268102 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Change hardcoded numbers into sprm constants. 2009-02-17 12:42:58 +0100 kendy r268101 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Make the tables build even with the docx-related changes. 2009-02-17 12:42:38 +0100 kendy r268100 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Write shapes defined by paths. 2009-02-17 12:42:14 +0100 kendy r268099 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: implemented paraSnapToGrid & suppressAutoHyphens 2009-02-17 12:41:54 +0100 kendy r268098 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: Implemented ParaScriptSpace and its friends 2009-02-17 12:41:32 +0100 kendy r268097 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx export: Keep with next paragraph 2009-02-17 12:41:11 +0100 kendy r268096 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx: Fixed tab position export, left margin was missing 2009-02-17 12:40:48 +0100 kendy r268095 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat TOX export: + fixed export fields expression containing tabs + fixed the begin element of fields like TOX, Hyperlinks and index marks + implemented export of index marks (same missing things than binary filter) 2009-02-17 12:40:28 +0100 kendy r268094 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Export the core revision document property. The mapping between revision and getEditingCycles() was found by perusing the existing OLE Structured Storage output source. 2009-02-17 12:40:10 +0100 kendy r268093 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Preparations for the predefined shape types. 2009-02-17 12:39:50 +0100 kendy r268092 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Implemented the most interesting stroke properties. 2009-02-17 12:39:31 +0100 kendy r268091 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Minimal working TOX export, not fully tested yet. Implemented DocxExport::AppendBookmark method 2009-02-17 12:39:11 +0100 kendy r268090 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Implemented the most interesting fill properties. 2009-02-17 12:38:53 +0100 kendy r268089 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky VML: Output of lines. 2009-02-17 12:38:35 +0100 kendy r268088 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Thanks to kendy, dateToW3CDTF is now useless 2009-02-17 12:38:16 +0100 kendy r268087 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Uncomplete merge + change the timestamp generation with the use of strftime 2009-02-17 12:37:58 +0100 kendy r268086 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat + Fixes in core properties export: - the first keyword was duplicated, - the CreationTime in apps.xml was written several times + Refactored the fields output to prepare the place for TOX: now using a stack of fields to output + Refactored the Hyperlink export implementation to handle links with anchors in documents 2009-02-17 12:37:36 +0100 kendy r268085 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky MS Word begins to like the VML generated by the docx export :-) We can export basic groups, rects and ellipses now; TODO other shapes and lots of properties. 2009-02-17 12:37:18 +0100 kendy r268084 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Propagate bounding rectangle in EscherEx::Commit(). Ignored in EscherEx itself, but mandatory for the VML export. 2009-02-17 12:36:59 +0100 kendy r268083 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Comment out output of XML_TotalTime (xProperties->getEditingDuration()), breaks here. #i96319# WW8 filter rework + docx export confuses MS Office terribly. 2009-02-17 12:36:42 +0100 kendy r268082 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky The boost datetime conversion broke from time to time, no idea why :-( Now using the most trivial approach... 2009-02-17 12:36:24 +0100 kendy r268081 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Implementation of few basic VML shapes and properties. 2009-02-17 12:36:06 +0100 kendy r268080 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Add EscherPropertyContainer::GetOpts() to be able to get all the options at once. 2009-02-17 12:35:48 +0100 kendy r268079 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Include "tokens.hxx" instead of . The latter attempts to take the version from solver which is not there yet when building from scratch ;-) 2009-02-17 12:35:28 +0100 kendy r268078 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Forgot to remove an include. Compiler didn't crash on it... strange 2009-02-17 12:35:10 +0100 kendy r268077 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Merged the properties export code with the one of jonp. In fact, only the date formatting code of mine has been kept to replace jon's one. 2009-02-17 12:34:49 +0100 kendy r268076 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Export of core properties migrated to oox module 2009-02-17 12:34:23 +0100 kendy r268075 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Add some trace/debugging information. Some of the app/core properties are #ifdef'd, as I don't know what XDocumentProperties attribute is the appropriate mapping. My suspicion is that many of the remaining app/core properties may be found within the DocumentStatistics attribute, and thus I print out the document statistics found. (So far, I'm not seeing any from Calc, but this may bear some fruit with .docx or .pptx export...) 2009-02-17 12:34:01 +0100 kendy r268074 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Document Properties: skip empty elements. * xmlfilterbase.cxx (writeElement): Don't generate an element if the element has no value. 2009-02-17 12:33:35 +0100 kendy r268073 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Initial stab at exporting document properties. Short, short version: to export document properties call XmlFilterBase::exportDocumentProperties(Reference). * oox/inc/oox/core/xmlfilterbase.hxx, oox/source/core/xmlfilterbase.cxx: Add and implement XmlFilterBase::exportDocumentProperties(), which generates docProps/core.xml and docProps/app.xml. * oox/source/token/tokens.txt: Add XML_vt element. * sc/source/filter/excel/excdoc.cxx: call XmlFilterBase::exportDocumentProperties(). * sc/source/filter/excel/expop2.cxx: Remove sfx2::SaveOlePropertySet() call, as it isn't useful for OOXML output. 2009-02-17 12:33:17 +0100 kendy r268072 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Beginnings of the VML export. The shapes are exported, but with no attributes - so their position is not written yet, etc. 2009-02-17 12:32:54 +0100 kendy r268070 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Do more EscherEx methods virtual. We want to re-use EscherEx for the export of VML. For this, some of the methods have to be made virtual so that we can change them to do what we need ;-) 2009-02-17 12:32:26 +0100 kendy r268069 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Removed debug fprintf's 2009-02-17 12:32:09 +0100 kendy r268068 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx: bookmarks now exported 2009-02-17 12:31:52 +0100 kendy r268067 : #i96319# WW8 filter rework + docx export From: Radek Doulik * export polypolygons * export transformation defined by rectangle 2009-02-17 12:31:35 +0100 kendy r268066 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Split text runs to be able to insert bookmark tags 2009-02-17 12:31:18 +0100 kendy r268065 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Enum for specifying the document type to DrawingML. Various document types need it differently... 2009-02-17 12:30:57 +0100 kendy r268064 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Provide an appropriate //Relationship/@Target value. * oox/source/export/drawingml.cxx: The //Relationship/@Target value needs to be a path relative to the DrawingML document. For Excel, the DrawingML is in xl/drawings/drawing*.xml, while the embedded media is in xl/media/image*. Thus, to get from xl/drawings/drawing*.xml to xl/media/image*, we need "../media/image", not "media/image". Without this change, Excel throws an error when loading the Spreadsheet, as it can't find the resource. 2009-02-17 12:30:35 +0100 kendy r268063 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fixed output of the properties that are written at or time. Fixes the most annoying "the first run has strange properties" bug, and generally improves the quality of output of styles a lot. 2009-02-17 12:30:16 +0100 kendy r268062 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Generate valid DrawingML. The DrawingML is a hack, with hard-coded values in various places that have no business being hardcoded, but it is valid, and Excel does load the DrawingML without error. (It instead errors out because xl/drawings/_rels/drawing1.xml.rels contains an invalid file path. :-( * oox/inc/oox/export/drawingml.hxx, oox/source/export/drawingml.cxx: Add a WriteBlipFill() overload which takes the XML namespace as an argument. This is necessary because Excel wants a element, not , and I don't want to have to duplicate the rest of the WriteBlipFill() logic within sc. 2009-02-17 12:29:59 +0100 kendy r268061 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Remove one of the 2 fixes of the same problem ;-) 2009-02-17 12:29:32 +0100 kendy r268060 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Few whitespace fixes. 2009-02-17 12:29:12 +0100 kendy r268059 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Basic output of images works, both embedded as well as linked. Still some TODOs in FlyFrameGraphic(), to be solved later... 2009-02-17 12:28:51 +0100 kendy r268058 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Add TwipsToEMU() to oox/export/utils.hxx. 2009-02-17 12:28:30 +0100 kendy r268057 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Fix the build. DrawingML::WriteImage(const Graphic&) needs to have a Graphic type in scope. 2009-02-17 12:28:10 +0100 kendy r268056 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Change define FSEND -1 to const sal_Int32 FSEND = -1. The former can hide errors, like startElementNS( ..., "xyz" FSEND ), because it compiles without warning, but then gets part of the string, and we end up without a sentinel. 2009-02-17 12:27:50 +0100 kendy r268055 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Docx export: Dropdown field now exported 2009-02-17 12:27:28 +0100 kendy r268054 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Add the xdr token. The `xdr' token is used as the XML namespace in Spreadsheet DrawingML documents. 2009-02-17 12:27:08 +0100 kendy r268053 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky With a bit of cheating, images can be written... Everything (but the image itself) is hardcoded so far. 2009-02-17 12:26:47 +0100 kendy r268052 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Write the location of the image as media/image, not ../media/image. Hopefully it does not break pptx - but for docx it's necessary. 2009-02-17 12:26:24 +0100 kendy r268051 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Improved mergeTopMarks(). - instead of bool, it accepts MergeMarksEnum with values MERGE_MARKS_APPEND, MERGE_MARKS_PREPEND, and MERGE_MARKS_POSTPONE, which should be more readable - MERGE_MARKS_POSTPONE is a new thing, it allows to write output that is written with the next mergeTopMarks() - useful when you get some data too early and need to write them after the end of data that you are just writing. 2009-02-17 12:26:05 +0100 kendy r268050 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Output of images; framework is mostly done, but disabled due to problems with order. [So far it would be output inside rPr which is not what we want ;-)] 2009-02-17 12:25:41 +0100 kendy r268049 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Intoduced OUString DrawingML::WriteImage( const Graphic& rGraphic ). Additionally - added the possibility to write images to word/ subdir in the zip container, not just ppt/ - added 'wp' to the known tokens - fixed Graphic::GetLink() in vcl to be 'const' - added svx and vcl to the dependencies of oox 2009-02-17 12:25:18 +0100 kendy r268048 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat merged binary and ooxml filters export. 2009-02-17 12:24:55 +0100 kendy r268047 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Core properties created (still have to write the dates) 2009-02-17 12:24:32 +0100 kendy r268046 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Added support for GetExpression and SetExpression fields (only in text format). 2009-02-17 12:24:09 +0100 kendy r268045 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Some more fields supported 2009-02-17 12:23:49 +0100 kendy r268044 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Some more fields 2009-02-17 12:23:27 +0100 kendy r268043 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Write also numbering type "none". 2009-02-17 12:23:07 +0100 kendy r268041 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Numbering finished, implemented the rest of the level information. 2009-02-17 12:22:45 +0100 kendy r268040 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx fields exports: the start of the way 2009-02-17 12:22:23 +0100 kendy r268039 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Write abstract numbering definitions including the levels. Not all of the information is written yet, but will be soon ;-) 2009-02-17 12:22:00 +0100 kendy r268038 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Implementation of the abstract numbering definitions, not yet finished. 2009-02-17 12:21:39 +0100 kendy r268037 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Output numbering definition instances. Abstract numbering definitions are still TODO. 2009-02-17 12:21:21 +0100 kendy r268036 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename OutListTab() -> NumberingDefinitions(), and OutListTabLevels() -> AbstractNumberingDefinitions(). This is better aligned with what is used in the docx documentation. 2009-02-17 12:21:00 +0100 kendy r268035 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Changed the ColorToHex to support the "auto" value Code cleaning according to kendy's remarks 2009-02-17 12:20:37 +0100 kendy r268034 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat table horizontal merge 2009-02-17 12:20:15 +0100 kendy r268033 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky impl_convertColor() is not necessary, we already have impl_ColorToHex(). 2009-02-17 12:19:52 +0100 kendy r268032 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx Line numbering 2009-02-17 12:19:31 +0100 kendy r268031 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat docx: Implemented Section Types 2009-02-17 12:19:09 +0100 kendy r268030 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat FIX for borders: documents with no section border didn't wrote completely 2009-02-17 12:18:50 +0100 kendy r268029 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Fixed some output errors for paragraphs borders 2009-02-17 12:18:31 +0100 kendy r268028 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Fixed docx page border export problems and added color support 2009-02-17 12:18:13 +0100 kendy r268027 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Beginning of page borders implementation 2009-02-17 12:17:54 +0100 kendy r268026 : #i96319# WW8 filter rework + docx export From: Radek Doulik * export line arrow ends 2009-02-17 12:17:34 +0100 kendy r268025 : #i96319# WW8 filter rework + docx export From: Radek Doulik * make helper function GetLineArrow public so that it can be used in ooxml export put it in EscherPropertyContainer class (static method) 2009-02-17 12:17:16 +0100 kendy r268024 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat renamed AppendRelation to AddRelation. 2009-02-17 12:16:58 +0100 kendy r268023 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Fixed hyperlinks style. Fixed having a run of text before the hyperlink 2009-02-17 12:16:39 +0100 kendy r268022 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Initialize m_pHyperlinkAttrList to NULL. 2009-02-17 12:16:17 +0100 kendy r268021 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat Fixed the Hyperlink output Partly fixed the language Id output 2009-02-17 12:15:54 +0100 kendy r268020 : #i96319# WW8 filter rework + docx export From: Radek Doulik * fix type mismatch in gradient code * add flip and rotation parameters to shape transformation 2009-02-17 12:15:29 +0100 kendy r268019 : #i96319# WW8 filter rework + docx export From: Radek Doulik * finished gradient fill 2009-02-17 12:15:07 +0100 kendy r268018 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat + docx URL export: output is still wrong 2009-02-17 12:14:44 +0100 kendy r268017 : #i96319# WW8 filter rework + docx export From: Radek Doulik * export linear and axial gradients 2009-02-17 12:14:27 +0100 kendy r268016 : #i96319# WW8 filter rework + docx export From: Radek Doulik * export line joint type 2009-02-17 12:14:05 +0100 kendy r268015 : #i96319# WW8 filter rework + docx export From: Radek Doulik * export dashed lines 2009-02-17 12:13:48 +0100 kendy r268014 : #i96319# WW8 filter rework + docx export From: Cedric Bosdonnat cast problems fixed 2009-02-17 12:13:25 +0100 kendy r268013 : #i96319# WW8 filter rework + docx export From: Radek Doulik * added outline export * wrapped debug printfs in DBG * fix text color and typeface placement * do not write empty runs * do not write empty paragraph properties * added end paragraph properties - need to be filled later 2009-02-17 12:13:02 +0100 kendy r268012 : #i96319# WW8 filter rework + docx export From: Radek Doulik export language and fonts are now accepted by msppt 2009-02-17 12:12:44 +0100 kendy r268011 : #i96319# WW8 filter rework + docx export From: Radek Doulik re-enable pptx export - it was disabled by ooxml02 changes committed to git repo 2009-02-17 12:12:22 +0100 kendy r268010 : #i96319# WW8 filter rework + docx export From: Radek Doulik fix build 2009-02-17 12:12:04 +0100 kendy r268009 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Merge ooxml02 fixes. 2009-02-17 12:11:43 +0100 kendy r268008 : #i96319# WW8 filter rework + docx export From: Radek Doulik move drawingml export to oox/ from sd/ 2009-02-17 12:11:20 +0100 kendy r268007 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Revert commit 8b63649bf0a5d14703459bbf31e1599d592a5dff. It was already fixed easier way. 2009-02-17 12:11:00 +0100 kendy r268006 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor oox fixes to help sc compile... * inc/oox/core/contexthandler2.hxx, inc/oox/drawingml/chart/modelbase.hxx, inc/oox/drawingml/customshapeproperties.hxx, inc/oox/helper/attributelist.hxx, inc/oox/ppt/pptimport.hxx, inc/oox/ppt/slidepersist.hxx: #include not "tokens.hxx" as these files are deployed into solver, and there is no "tokens.hxx" in other modules (such as sc). * prj/d.lst: Deliver enough header files to let sc build some more... 2009-02-17 12:10:34 +0100 kendy r268005 : #i96319# WW8 filter rework + docx export From: Jonathan Pryor Deliver tablestylelist.hxx. * d.lst: Deliver inc/oox/drawingml/table/tablestylelist.hxx, as it's needed by sc export. 2009-02-17 12:10:13 +0100 kendy r268004 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fix few warnings in sw, and disable DocxExport::WriteNumbering() for now. 2009-02-17 12:09:56 +0100 kendy r268003 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Add empty implementations of 2 abstract import XmlFilterBase methods. To be able to instantiate DocxExportFilter again... 2009-02-17 12:09:35 +0100 kendy r268002 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Resolve an unresolved, forgotten chunk [GetAttr() -> GetFmtAttr()]. 2009-02-17 12:09:08 +0100 kendy r268001 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Field work seems to compile now. Contains also a rename of OutField() to OutputField() to match better the other changes. 2009-02-17 12:08:46 +0100 kendy r268000 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fix build, WriteOutliner() is now in WW8Export. 2009-02-17 12:08:26 +0100 kendy r267999 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky OutListTab() split into 2 methods [OutListTab() and OutListTabLevels()]. Also introduced a general WW8Export::WriteNumbering() which calls the needed methods. OutListTabLevels() is planned to be reused in docx export as well. 2009-02-17 12:08:09 +0100 kendy r267998 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky DupNumRuleWithLvlStart() renamed to DuplicateNumRule(). 2009-02-17 12:07:40 +0100 kendy r267997 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Check for max numbering level can be in ParaNumRule(). 2009-02-17 12:07:20 +0100 kendy r267996 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Few whitespace changes. 2009-02-17 12:06:49 +0100 kendy r267995 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky GetId( const SwNumRule& rNumRule ) should not be const. If the first thing it does is a const_cast<...>( this ), then something is wrong ;-) 2009-02-17 12:06:29 +0100 kendy r267994 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Redlining: Save author and date. 2009-02-17 12:06:07 +0100 kendy r267993 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Output redlining. So far just insertion and deletion of text, and without author and timestamp. 2009-02-17 12:05:45 +0100 kendy r267992 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Write the font table. 2009-02-17 12:05:27 +0100 kendy r267991 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Get ready to output the fonts. 2009-02-17 12:05:06 +0100 kendy r267990 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fix namespace of relation id, and output of headers and footers works now... It's r:id, not w:id ;-) 2009-02-17 12:04:40 +0100 kendy r267988 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Write actual headers and footers in docx. #i96319# WW8 filter rework + docx export 2009-02-17 12:04:17 +0100 kendy r267987 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky A small cleanup. 2009-02-17 12:04:00 +0100 kendy r267986 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fix the regression, caused by SetupSectionPositions() not being virtual (accidentally). 2009-02-17 12:03:40 +0100 kendy r267985 : #i96319# WW8 filter rework + docx export From: Fridrich Strba another iteration of numbering, utterly broken, but not crashing anything 2009-02-17 12:03:18 +0100 kendy r267984 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky SectionProperties() code is now common for binary and docx. Unfortunately binary output does not pass the tests now. 2009-02-17 12:02:49 +0100 kendy r267983 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Improving the SectionProperties() method to be shared between ww8 and docx. Not there yet, but getting closer ;-) The docx code is still a placeholder only. 2009-02-17 12:02:29 +0100 kendy r267982 : #i96319# WW8 filter rework + docx export From: Fridrich Strba some more work towards the numbering.xml 2009-02-17 12:02:08 +0100 kendy r267981 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Get rid of rLnNumInfo and aLineNum. 2009-02-17 12:01:44 +0100 kendy r267980 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky We are in attribute output already. 2009-02-17 12:01:21 +0100 kendy r267979 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Get rid of unsigned int nHdFtGroup. 2009-02-17 12:01:03 +0100 kendy r267978 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Introduce WW8AttributeOutput::SectionProperties(). The goal is to share this between ww8 and docx. 2009-02-17 12:00:45 +0100 kendy r267977 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Be careful, m_pSections/CurrentSectionInfo() might be NULL. 2009-02-17 12:00:22 +0100 kendy r267976 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Write section properties even for the last section. 2009-02-17 11:59:59 +0100 kendy r267975 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Output sections (w:sectPr) and columns. 2009-02-17 11:59:34 +0100 kendy r267974 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky WW8_SepInfo: Move to constructor, what belongs there. 2009-02-17 11:59:14 +0100 kendy r267973 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Remove an obsolete commented out piece. 2009-02-17 11:58:53 +0100 kendy r267972 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Output columns break (when the section has more columns). 2009-02-17 11:58:35 +0100 kendy r267971 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Hook the output of the docx sections to the right place. 2009-02-17 11:58:17 +0100 kendy r267970 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename OutputSfxBreakItems() to OutputSectionBreaks(). 2009-02-17 11:57:58 +0100 kendy r267969 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Remove an non-needed comment, add an interesting one. 2009-02-17 11:57:39 +0100 kendy r267968 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Get rid of OutputPageSectionBreaks(), dissolve it into other methods. 2009-02-17 11:57:19 +0100 kendy r267967 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fix regression in AttributeOutputBase::FormatBreak(). git bisect, thank you so much! :-) 2009-02-17 11:57:00 +0100 kendy r267966 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Move pDop and pFib to WW8Export. 2009-02-17 11:56:42 +0100 kendy r267965 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Implement DocxExport::PrepareNewPageDesc(). 2009-02-17 11:56:24 +0100 kendy r267964 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Improve WW8Export::PrepareNewPageDesc(). 2009-02-17 11:56:04 +0100 kendy r267963 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Move part of WW8_WrPlcSepx::OutHeaderFooter() to MSWordExportBase::WriteHeaderFooterText(). 2009-02-17 11:55:27 +0100 kendy r267961 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Share OutHeader() nad OutFooter() (remove copy'n'paste). 2009-02-17 11:55:06 +0100 kendy r267960 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename WriteKFTxt1() to WriteHeaderFooterText() and move it to MSWordExportBase. 2009-02-17 11:54:41 +0100 kendy r267959 : #i96319# WW8 filter rework + docx export From: Fridrich Strba extracting the ParaNumRule to MSWordExportBase 2009-02-17 11:54:20 +0100 kendy r267958 : #i96319# WW8 filter rework + docx export From: Fridrich Strba write out w:numPr node into document.xml + converting some tabs to 4 spaces 2009-02-17 11:53:56 +0100 kendy r267957 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky MSWordSections split into the base and WW8 specific (WW8_WrPlcSepx). [WW8_WrPlcSepx was the original name of MSWordSections - let it there to decrease confusion ;-)] 2009-02-17 11:53:31 +0100 kendy r267956 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fix docx export crash by initializing pSepx. 2009-02-17 11:53:11 +0100 kendy r267955 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky MSWordExportBase::OutputPageSectionBreaks() is now common for binary and docx. 2009-02-17 11:52:48 +0100 kendy r267954 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky AttributeOutputBase::FormatPageDescription() is now common for binary and docx. 2009-02-17 11:52:28 +0100 kendy r267953 : #i96319# WW8 filter rework + docx export From: Fridrich Strba write an empty numbering stream 2009-02-17 11:52:06 +0100 kendy r267952 : #i96319# WW8 filter rework + docx export From: Fridrich Strba some more of the spacing 2009-02-17 11:51:39 +0100 kendy r267951 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename WW8_WrPlcSepx to MSWordSections. 2009-02-17 11:51:19 +0100 kendy r267950 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Move pSepx initialization to the WW8_WrPlcSepx constructor. 2009-02-17 11:50:53 +0100 kendy r267949 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fixed styles id's (in styles.xml). Now the styles seem to work pretty well. 2009-02-17 11:50:33 +0100 kendy r267948 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename AttributeOutput's Style() to ParagraphStyle(), that is more correct. 2009-02-17 11:50:11 +0100 kendy r267947 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky FormatBreak() is now in the common AttributeOutputBase. And pageBreakBefore works now... 2009-02-17 11:49:49 +0100 kendy r267946 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Few obvious m_rWW8Export -> GetExport() in WW8AttributeOutput::FormatBreak(). 2009-02-17 11:49:28 +0100 kendy r267945 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Add PageBreakBefore() to AttrbuteOutput's. It's a preparation for moving FormatBreak() to the generic AttributeOutputBase, and also kills some copy and paste. 2009-02-17 11:49:08 +0100 kendy r267944 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Debug output of attributes is not needed any more, remove. 2009-02-17 11:48:46 +0100 kendy r267943 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Don't create a new AttributeOutput in WW8_WrPlcSepx::WriteKFTxt(). 2009-02-17 11:48:25 +0100 kendy r267942 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Move pEnd and pFtn from MSWordExportBase to WW8Export. 2009-02-17 11:48:03 +0100 kendy r267941 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Now outputting footnotes and endnotes. Their styles are not output correctly yet, thus the number of the footnote resp. endnote is not distinguished from the text of the paragraph. Another problem that is missing. 2009-02-17 11:47:42 +0100 kendy r267940 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Output of footnote/endnote references. And it's prepared for the output of footnote.xml resp. endnote.xml as well. 2009-02-17 11:47:21 +0100 kendy r267939 : #i96319# WW8 filter rework + docx export From: Fridrich Strba some more para properties: widows control, para-splitting and incomplete implementation of spacing 2009-02-17 11:46:59 +0100 kendy r267938 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Make a bit more obvious what's happenning with AttributeLists. 2009-02-17 11:46:38 +0100 kendy r267937 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Part of the footnote/endnote stuff is shared now between binary and docx. It is just a small part, but better than nothing ;-) I'm not sure that sharing more is possible/reasonable at all... 2009-02-17 11:46:16 +0100 kendy r267936 : #i96319# WW8 filter rework + docx export From: Fridrich Strba adding paragraph indentation 2009-02-17 11:45:56 +0100 kendy r267935 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename AddWordBookmark() -> AppendWordBookmark(). 2009-02-17 11:45:36 +0100 kendy r267934 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Remove 2nd param from AppendBookmark(), nobody was using that anyway. 2009-02-17 11:45:19 +0100 kendy r267933 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Readability improvements in WW8_WrPlcSubDoc::WriteGenericPlc(). 2009-02-17 11:44:53 +0100 kendy r267932 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Better readable WW8_WrPlcSubDoc::WriteGenericTxt(). 2009-02-17 11:44:35 +0100 kendy r267931 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Move WriteSpecialText() from WW8Export to MSWordExportBase. 2009-02-17 11:44:12 +0100 kendy r267930 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Support for color value 'auto' - used often in the styles. 2009-02-17 11:43:48 +0100 kendy r267929 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Comment the mark()/mergeTopMarks() magic for paragraphs + par. properties. 2009-02-17 11:43:31 +0100 kendy r267928 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Remove the styles debug output. 2009-02-17 11:43:14 +0100 kendy r267927 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Output of styles reworked. The ooxml stuff is implemented as well, but not tested yet. 2009-02-17 11:42:54 +0100 kendy r267926 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Output word/styles.xml - empty one for now. 2009-02-17 11:42:36 +0100 kendy r267925 : #i96319# WW8 filter rework + docx export From: Fridrich Strba Paragraph properties framework + tab stop + paragraph justification + converting some tabs to 4 spaces 2009-02-17 11:42:18 +0100 kendy r267924 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky More preparations for outputting the styles table in docx. 2009-02-17 11:41:56 +0100 kendy r267923 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Initialize pStyles even for docx. MSWordStyles was changed so that it can be initialized from any pDoc, it needs WW8Export just for writing ww8 styles. 2009-02-17 11:41:36 +0100 kendy r267922 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename WW8WrtStyle to MSWordStyles. 2009-02-17 11:41:14 +0100 kendy r267921 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Uncomment nStyleBeforeFly = GetId( lcl_getFormatCollection( *this, &rNode ) ); 2009-02-17 11:40:50 +0100 kendy r267920 : #i96319# WW8 filter rework + docx export From: Fridrich Strba oops, write actually the lang property 2009-02-17 11:40:24 +0100 kendy r267919 : #i96319# WW8 filter rework + docx export From: Fridrich Strba character kerning and character language 2009-02-17 11:40:06 +0100 kendy r267918 : #i96319# WW8 filter rework + docx export From: Fridrich Strba implement font names and also the asian layout part of run properties 2009-02-17 11:39:41 +0100 kendy r267917 : #i96319# WW8 filter rework + docx export From: Fridrich Strba this looks like a typo, it should be EndBracket for this one, I assume 2009-02-17 11:39:21 +0100 kendy r267916 : #i96319# WW8 filter rework + docx export From: Fridrich Strba removing some unnecessary warnings 2009-02-17 11:38:56 +0100 kendy r267915 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky OutputTableNode() finally moved to MSWordExportBase. EndTableRow() from *AttributeOutput gets too much parameters now, but unfortunately, at the moment it was the easiest solution. As more functionality will move to the actuall cell output, this will get a bit nicer I hope ;-) 2009-02-17 11:38:36 +0100 kendy r267913 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Trivial output of table cells. Still not complete, OutputTableNode() still contains some WW8-only stuff. 2009-02-17 11:38:10 +0100 kendy r267912 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Reduced code in DocxAttributeOutput::RunText()/impl_RunText(). 2009-02-17 11:37:51 +0100 kendy r267911 : #i96319# WW8 filter rework + docx export From: Fridrich Strba handle also tabs :) 2009-02-17 11:37:28 +0100 kendy r267910 : #i96319# WW8 filter rework + docx export From: Fridrich Strba generically filter out any character that is ascii < 0x20 from the string we write to the file 2009-02-17 11:37:10 +0100 kendy r267909 : #i96319# WW8 filter rework + docx export From: Fridrich Strba wrap debug output in #if #endif statements 2009-02-17 11:36:48 +0100 kendy r267908 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky StartTableRow(), EndTableRow(), and TableRowProperties() for *AttributeOutput. And the appropriate rework in OutputTableNode() (still no ooxml output yet, but getting closer. 2009-02-17 11:36:29 +0100 kendy r267907 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky StartTable() and EndTable() for *AttributeOutput. And the appropriate rework in OutputTableNode() [which is still let in WW8Export, but it's move to MSWordExportBase is close ;-)]. 2009-02-17 11:36:09 +0100 kendy r267906 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Improve readability in OutputTableNode; Out_SfxBreakItems -> MSWordExportBase. Out_SfxBreakItems was also renamed to OutputSfxBreakItems. 2009-02-17 11:35:50 +0100 kendy r267905 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Cosmetic change: OutputFlyFrameImpl() -> OutputFlyFrame_Impl(). 2009-02-17 11:35:30 +0100 kendy r267904 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Change WW8SaveData into SaveData() and RestoreData() methods. WW8SaveData was hard to extend to be able to handle WW8Export and DocxExport at the same time; so instead there are now SaveData() and RestoreData() virtual methods in MSWordExportBase, and the appropriate additions are solved directly in WW8Export (nothing for DocxExport [yet?]). 2009-02-17 11:35:12 +0100 kendy r267903 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Write line breaks. 2009-02-17 11:34:54 +0100 kendy r267902 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky More from WW8Export::ExportDocument_Impl() to MSWordExportBase::ExportDocument(). 2009-02-17 11:34:36 +0100 kendy r267901 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename StoreDoc() to ExportDocument(), and move it to MSWordExportBase. The format-dependant parts were moved to a virtual ExportDocument_Impl(). 2009-02-17 11:34:19 +0100 kendy r267900 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Explicitely default construct maMarkStack [to be safe ;-)]. 2009-02-17 11:34:01 +0100 kendy r267899 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fix few crashes in DocAttributeOutput.cxx (missing FSNS() in vararg). 2009-02-17 11:33:43 +0100 kendy r267898 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Rename writeMarked() to mergeTopMarks() and improve the implementation. Just writing the top mark is not enough; in more complex scenarios it would destroy the order completely. This way we have better control over what's happening, and can nest the mark()/mergeTopMarks()/mergeTopMarks( true ) as necessary directly in the start/end tags. 2009-02-17 11:33:25 +0100 kendy r267897 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Use serializer's mark() and writeMarked() to change order of and ... instead of using m_aText to remember the content of the text. That wouldn't work later anyway - we will probably need to change the order of the paragraph properties and text runs as well which will be done easily using mark() and writeMarked() as well. 2009-02-17 11:33:06 +0100 kendy r267896 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Outputting docx runs with attributes works now. 2009-02-17 11:32:48 +0100 kendy r267895 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky The msword filter compiles again. Added empty implementations of the virtual methods to DocxExport and DocxAttributeBase [printing 'TODO Blah::bleh()' ;-)]. The thing binary output still passes the testsuite, yay! 2009-02-17 11:32:30 +0100 kendy r267894 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky OutputTextNode() is not virtual any more and sits in MSWordExportBase. Lots of stuff has been moved around again - mostly from WW8Export to MSWordExportBase (for the gerenalized stuff) and to WW8AttributeOutput (for the 'hardcore' output of bytes/sprms/data/...) At the moment, it compiles, but the docx part of the filter does not link thanks to the missing implementation of DocxAttributeOutput methods (the new ones). 2009-02-17 11:32:11 +0100 kendy r267893 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Documentation updates. 2009-02-17 11:31:48 +0100 kendy r267892 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Change harcoded sprm ids to consts (reused from writerfilter). This adds a build dependency of sw on writerfilter - hopefully it's OK. 2009-02-17 11:31:28 +0100 kendy r267891 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Get rid of *NodeOutput classes, the code belongs directly to *Export. The callbacks I moved to newly created classes NodeOutputBase, WW8NodeOutput, or DocxNodeOutput respectively in fact should not be in separate classes, but directy in MSWordExportBase, WW8Export, or DocxExport respectively. This commit moves them accordingly. 2009-02-17 11:31:06 +0100 kendy r267890 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky bUnicode -> m_rWW8Export.bWrtWW8; it's the same in this context. 2009-02-17 11:30:44 +0100 kendy r267889 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Remove unnecessary {} block. 2009-02-17 11:30:24 +0100 kendy r267888 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Several German comments to English. 2009-02-17 11:30:08 +0100 kendy r267887 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Move pO cleanup directly into aAttrIter.OutAttr(). 2009-02-17 11:29:44 +0100 kendy r267886 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Shorten WW8NodeOutput::TextNode() by moving SwFmtDrop output to a separate method. 2009-02-17 11:29:22 +0100 kendy r267885 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Unified the use of m_rWW8Export.pO in WW8NodeOutput::TextNode(). In some cases, it was used as m_rWW8Export.pO, in the others as only pO (but meaning the same thing). Changed all the occurences to the simple pO to improve readability. 2009-02-17 11:29:00 +0100 kendy r267884 : #i96319# WW8 filter rework + docx export From: Fridrich Strba and other attributes coming in; we start to have all the more or less easy ones covered now 2009-02-17 11:28:43 +0100 kendy r267883 : #i96319# WW8 filter rework + docx export From: Fridrich Strba some more attributes are comming in 2009-02-17 11:28:26 +0100 kendy r267882 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Create DocxNodeOutput. The basic one with a trivial implementation of TexNode() method so that it at least outputs all the paragraphs as one text run. 2009-02-17 11:28:03 +0100 kendy r267881 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky WriteText() moved from WW8Export do MSWordExportBase. And some refactoring implied by the move. 2009-02-17 11:27:35 +0100 kendy r267880 : #i96319# WW8 filter rework + docx export From: Fridrich Strba some more character attributes implemented 2009-02-17 11:27:18 +0100 kendy r267879 : #i96319# WW8 filter rework + docx export From: Fridrich Strba some text attributes + build fixes (not very informative, but it is me) 2009-02-17 11:26:57 +0100 kendy r267878 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky WW8Export holds an instance of WW8NodeOutput. Instead of creating a new one with every call of WW8Export::WriteText(). 2009-02-17 11:26:35 +0100 kendy r267877 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Get rid of aWW8NodeFnTab callbacks. Introduce NodeOutputBase/WW8NodeOutput instead, and change the OutWW8_* functions to the WW8NodeOutput methods. 2009-02-17 11:26:13 +0100 kendy r267876 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky pCurPam and pOrigPam back to MSWordExportBase. Looks necessary there... 2009-02-17 11:25:52 +0100 kendy r267875 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky DocxAttributeOutput implementation. So far just bare bones printing TODO's to stderr + output of real and ; also nothing instantiates it yet. 2009-02-17 11:25:30 +0100 kendy r267874 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Fixed a problem that more attributes were exported than necessary. 2009-02-17 11:25:10 +0100 kendy r267873 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Moving more stuff from MSWordExportBase to WW8Export. pCurPam and pOrigPam, pO, and pTableStream and pDataStream. Hopefully I won't have to move them back at some stage ;-) 2009-02-17 11:24:49 +0100 kendy r267872 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Cosmetic. 2009-02-17 11:24:27 +0100 kendy r267871 : #i96319# WW8 filter rework + docx export From: Fridrich Strba fix nondebug build too 2009-02-17 11:24:07 +0100 kendy r267870 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky After rework - even saves a trivial document :-) 2009-02-17 11:23:45 +0100 kendy r267869 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky SwWW8Writer and the attributes rework compiles now. Of course, no idea yet if it works at all. 2009-02-17 11:23:25 +0100 kendy r267868 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Ancestor of MSWordExportBase for docx. Just a dump of the work, still just writing the 'Hello, world!' document [if it compiled, which it does not ;-)] 2009-02-17 11:23:03 +0100 kendy r267867 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Instead of callbacks, use virtual functions to output attributes. This is just a dump of the rewrite, for sure does not compile. All the SwWW8Out_ callbacks were moved to a class dedicated for output - WW8AttributeOutput. It is a descendant of AttributeOutputBase; there will be a separate implementation for the docx case. 2009-02-17 11:22:43 +0100 kendy r267866 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Partial split of SwWW8Writer. Introduced a new structure - the logic of the filter will be in class MSWordExportBase, from which we will derive WW8Export and DocxExport. SwWW8Writer has been split into WW8Export (for the logic) and SwWW8Writer (for the actual access to the stream). For most of the methods it means renaming SwWW8Writer::MethodName() to WW8Export::MethodName() + cleaning access to the attributes/other methods. All this is not finished yet, and does not even compile - but it is necessary to dump the current status ;-) 2009-02-17 11:22:25 +0100 kendy r267865 : #i96319# WW8 filter rework + docx export From: Fridrich Strba do the filter forwarding the pure UNO way (hell expensive, but no build dependency on anything) 2009-02-17 11:22:06 +0100 kendy r267864 : #i96319# WW8 filter rework + docx export From: Fridrich Strba yay, we have the same component doing the import and export for word 2007 2009-02-17 11:21:46 +0100 kendy r267863 : #i96319# WW8 filter rework + docx export From: Fridrich Strba more work towards having the import and export in the same component 2009-02-17 11:21:20 +0100 kendy r267862 : #i96319# WW8 filter rework + docx export From: Fridrich Strba starting to forward export in writerfilter 2009-02-17 11:20:58 +0100 kendy r267860 : #i96319# WW8 filter rework + docx export From: Fridrich Strba trying to fix some of the registration stuff 2009-02-17 11:20:35 +0100 kendy r267859 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Exporting a real document. So far just a hardcoded 'Hello, world!' of course ;-) 2009-02-17 11:20:13 +0100 kendy r267858 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Renamed DocxWriter to DocxExportFilter. (...and also the files that contain it) 2009-02-17 11:19:52 +0100 kendy r267857 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky The initial exporter. Can be chosen from the menu, but so far we can just get a SwDoc* in the exportDocument() method, and consequently the exported file has zero size. 2009-02-17 11:19:30 +0100 kendy r267854 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Simple output of the styles. As just the and attributes work for now, the output is not much helpful ;-) - but as a proof-of-concept, this must be enough... 2009-02-17 11:15:14 +0100 kendy r267852 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky The fonts are between and . 2009-02-17 11:11:06 +0100 kendy r267851 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Proof-of-concept saving the fonts (word/fontTable.xml). As with the previous commits, it is just dumped to stderr. 2009-02-17 11:08:36 +0100 kendy r267850 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Proof-of-concept saving attributes of the text runs. Still using the DOCX debug class, which will be gone in the real implementation. 2009-02-17 11:04:40 +0100 kendy r267848 : #i96319# WW8 filter rework + docx export From: Jan Holesovsky Proof-of-concept save of paragraphs/runs/text. The paragraph pieces of DOCX just get dumped to stdout while saving the 'normal' DOC. This is just a hacky way of doing it, will be cleaned up (and converted to actual output to a stream) when I get the attributes, and distinction between main document/headers/footers/etc. right. 2009-02-17 11:02:54 +0100 kendy r267847 : #i96319# WW8 filter rework + docx export From: Fridrich Strba Make writerfilter export filter too (at least formally) 2009-02-16 22:48:29 +0100 kendy r267840 : CWS-TOOLING: rebase CWS ooxml03 to trunk@267171 (milestone: DEV300:m41) --- sax/inc/sax/fshelper.hxx | 12 +++-- sax/source/tools/fastserializer.cxx | 87 +++++++++++++++++++++++-------------- sax/source/tools/fastserializer.hxx | 34 ++++++++++++--- sax/source/tools/fshelper.cxx | 10 ++++- vcl/inc/vcl/graph.hxx | 2 +- vcl/source/gdi/graph.cxx | 2 +- 6 files changed, 101 insertions(+), 46 deletions(-) diff --git a/sax/inc/sax/fshelper.hxx b/sax/inc/sax/fshelper.hxx index b1ce4ba39d1b..5223c253af91 100644 --- a/sax/inc/sax/fshelper.hxx +++ b/sax/inc/sax/fshelper.hxx @@ -39,11 +39,13 @@ #include #include "sax/dllapi.h" -#define FSNS(namespace, element) ((namespace << 16) | element) -#define FSEND -1 // same as XML_TOKEN_INVALID +#define FSNS(namespc, element) ((namespc << 16) | element) +const sal_Int32 FSEND = -1; // same as XML_TOKEN_INVALID namespace sax_fastparser { +enum MergeMarksEnum { MERGE_MARKS_APPEND = 0, MERGE_MARKS_PREPEND = 1, MERGE_MARKS_POSTPONE = 2 }; + typedef ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList > XFastAttributeListRef; class FastSaxSerializer; @@ -82,6 +84,10 @@ public: inline void singleElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, XFastAttributeListRef xAttrList) { singleElementV(FSNS( namespaceTokenId, elementTokenId), xAttrList); } + void startElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList); + inline void startElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, XFastAttributeListRef xAttrList) + { startElementV( FSNS( namespaceTokenId, elementTokenId ), xAttrList ); } + FastSerializerHelper* write(const char* value); FastSerializerHelper* write(const rtl::OUString& value); FastSerializerHelper* write(sal_Int32 value); @@ -99,7 +105,7 @@ public: FastAttributeList *createAttrList(); void mark(); - void mergeTopMarks( bool bPrepend = false ); + void mergeTopMarks( MergeMarksEnum eMergeType = MERGE_MARKS_APPEND ); private: diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx index 4603ceed3343..da4fdfb261db 100644 --- a/sax/source/tools/fastserializer.cxx +++ b/sax/source/tools/fastserializer.cxx @@ -326,43 +326,29 @@ namespace sax_fastparser { void FastSaxSerializer::mark() { - maMarkStack.push( Int8Sequence() ); + maMarkStack.push( ForMerge() ); } - void FastSaxSerializer::mergeTopMarks( bool bPrepend ) + void FastSaxSerializer::mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType ) { if ( maMarkStack.empty() ) return; if ( maMarkStack.size() == 1 ) { - mxOutputStream->writeBytes( maMarkStack.top() ); + mxOutputStream->writeBytes( maMarkStack.top().getData() ); maMarkStack.pop(); + return; } - else - { - const Int8Sequence aMerge( maMarkStack.top() ); - maMarkStack.pop(); - sal_Int32 nMergeLen = aMerge.getLength(); - if ( nMergeLen > 0 ) - { - Int8Sequence &rTop = maMarkStack.top(); - sal_Int32 nTopLen = rTop.getLength(); - - rTop.realloc( nTopLen + nMergeLen ); - if ( bPrepend ) - { - // prepend the aMerge to the rTop - memmove( rTop.getArray() + nMergeLen, rTop.getConstArray(), nTopLen ); - memcpy( rTop.getArray(), aMerge.getConstArray(), nMergeLen ); - } - else - { - // append the aMerge to the rTop - memcpy( rTop.getArray() + nTopLen, aMerge.getConstArray(), nMergeLen ); - } - } + const Int8Sequence aMerge( maMarkStack.top().getData() ); + maMarkStack.pop(); + + switch ( eMergeType ) + { + case MERGE_MARKS_APPEND: maMarkStack.top().append( aMerge ); break; + case MERGE_MARKS_PREPEND: maMarkStack.top().prepend( aMerge ); break; + case MERGE_MARKS_POSTPONE: maMarkStack.top().postpone( aMerge ); break; } } @@ -371,15 +357,50 @@ namespace sax_fastparser { if ( maMarkStack.empty() ) mxOutputStream->writeBytes( aData ); else + maMarkStack.top().append( aData ); + } + + FastSaxSerializer::Int8Sequence& FastSaxSerializer::ForMerge::getData() + { + merge( maData, maPostponed, true ); + maPostponed.realloc( 0 ); + + return maData; + } + + void FastSaxSerializer::ForMerge::prepend( const Int8Sequence &rWhat ) + { + merge( maData, rWhat, false ); + } + + void FastSaxSerializer::ForMerge::append( const Int8Sequence &rWhat ) + { + merge( maData, rWhat, true ); + } + + void FastSaxSerializer::ForMerge::postpone( const Int8Sequence &rWhat ) + { + merge( maPostponed, rWhat, true ); + } + + void FastSaxSerializer::ForMerge::merge( Int8Sequence &rTop, const Int8Sequence &rMerge, bool bAppend ) + { + sal_Int32 nMergeLen = rMerge.getLength(); + if ( nMergeLen > 0 ) { - sal_Int32 nDataLen = aData.getLength(); - if ( nDataLen > 0 ) - { - Int8Sequence &rTop = maMarkStack.top(); - sal_Int32 nTopLen = rTop.getLength(); + sal_Int32 nTopLen = rTop.getLength(); - rTop.realloc( nTopLen + nDataLen ); - memcpy( rTop.getArray() + nTopLen, aData.getConstArray(), nDataLen ); + rTop.realloc( nTopLen + nMergeLen ); + if ( bAppend ) + { + // append the rMerge to the rTop + memcpy( rTop.getArray() + nTopLen, rMerge.getConstArray(), nMergeLen ); + } + else + { + // prepend the rMerge to the rTop + memmove( rTop.getArray() + nMergeLen, rTop.getConstArray(), nTopLen ); + memcpy( rTop.getArray(), rMerge.getConstArray(), nMergeLen ); } } } diff --git a/sax/source/tools/fastserializer.hxx b/sax/source/tools/fastserializer.hxx index 132b495c0a8b..b0baf8af5df8 100644 --- a/sax/source/tools/fastserializer.hxx +++ b/sax/source/tools/fastserializer.hxx @@ -45,6 +45,7 @@ #include #include "sax/dllapi.h" +#include "sax/fshelper.hxx" #define SERIALIZER_IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.FastSerializer" #define SERIALIZER_SERVICE_NAME "com.sun.star.xml.sax.FastSerializer" @@ -112,23 +113,45 @@ public: /** Merge 2 topmost marks. - There are 2 possibilities - prepend the top before the second top-most - mark, or append it; prepending brings the possibility to switch parts - of the output. + There are 3 possibilities - prepend the top before the second top-most + mark, append it, or append it later; prepending brings the possibility + to switch parts of the output, appending later allows to write some + output in advance. Writes the result to the output stream if the mark stack becomes empty by the operation. + When the MERGE_MARKS_POSTPONE is specified, the merge happens just + before the next merge. + @see mark() */ - void mergeTopMarks( bool bPrepend = false ); + void mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType = sax_fastparser::MERGE_MARKS_APPEND ); private: ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > mxOutputStream; ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxFastTokenHandler; typedef ::com::sun::star::uno::Sequence< ::sal_Int8 > Int8Sequence; - ::std::stack< Int8Sequence > maMarkStack; + class ForMerge + { + Int8Sequence maData; + Int8Sequence maPostponed; + + public: + ForMerge() : maData(), maPostponed() {} + + Int8Sequence& getData(); + + void prepend( const Int8Sequence &rWhat ); + void append( const Int8Sequence &rWhat ); + void postpone( const Int8Sequence &rWhat ); + + private: + static void merge( Int8Sequence &rTop, const Int8Sequence &rMerge, bool bAppend ); + }; + + ::std::stack< ForMerge > maMarkStack; void writeFastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ); void write( const ::rtl::OUString& s ); @@ -144,4 +167,3 @@ protected: } // namespace sax_fastparser #endif - diff --git a/sax/source/tools/fshelper.cxx b/sax/source/tools/fshelper.cxx index 594a60ba1d76..743f499fb4f0 100644 --- a/sax/source/tools/fshelper.cxx +++ b/sax/source/tools/fshelper.cxx @@ -114,6 +114,12 @@ void FastSerializerHelper::endElement(sal_Int32 elementTokenId) mpSerializer->endFastElement(elementTokenId); } +void FastSerializerHelper::startElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList) +{ + mpSerializer->startFastElement(elementTokenId, xAttrList); +} + + void FastSerializerHelper::singleElement(const char* elementName, XFastAttributeListRef xAttrList) { mpSerializer->singleUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList); @@ -181,9 +187,9 @@ void FastSerializerHelper::mark() mpSerializer->mark(); } -void FastSerializerHelper::mergeTopMarks( bool bPrepend ) +void FastSerializerHelper::mergeTopMarks( MergeMarksEnum eMergeType ) { - mpSerializer->mergeTopMarks( bPrepend ); + mpSerializer->mergeTopMarks( eMergeType ); } FastAttributeList * FastSerializerHelper::createAttrList() diff --git a/vcl/inc/vcl/graph.hxx b/vcl/inc/vcl/graph.hxx index 9d70c67d3e55..5f5fa8eff6ce 100644 --- a/vcl/inc/vcl/graph.hxx +++ b/vcl/inc/vcl/graph.hxx @@ -206,7 +206,7 @@ public: BOOL IsSwapOut() const; void SetLink( const GfxLink& ); - GfxLink GetLink(); + GfxLink GetLink() const; BOOL IsLink() const; BOOL ExportNative( SvStream& rOStream ) const; diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx index 77f065912e5d..76e94e091ff7 100644 --- a/vcl/source/gdi/graph.cxx +++ b/vcl/source/gdi/graph.cxx @@ -775,7 +775,7 @@ void Graphic::SetLink( const GfxLink& rGfxLink ) // ------------------------------------------------------------------------ -GfxLink Graphic::GetLink() +GfxLink Graphic::GetLink() const { return mpImpGraphic->ImplGetLink(); } -- cgit v1.2.3 From a002f6d0433ef40e9a5fc16f6cf41818adced3ad Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Tue, 25 Aug 2009 13:07:56 +0000 Subject: CWS-TOOLING: integrate CWS sb110 2009-08-05 15:28:43 +0200 sb r274677 : CWS-TOOLING: rebase CWS sb110 to trunk@274622 (milestone: DEV300:m54) 2009-08-05 11:46:36 +0200 sb r274646 : #i104018# fixed previous svn changeset 271712 (from issue 101244) 2009-07-20 14:41:56 +0200 sb r274138 : CWS-TOOLING: rebase CWS sb110 to trunk@273858 (milestone: DEV300:m52) 2009-06-02 11:42:17 +0200 sb r272489 : CWS-TOOLING: rebase CWS sb110 to trunk@272291 (milestone: DEV300:m49) 2009-05-08 12:46:51 +0200 sb r271712 : #i101244# after DLLs have been moved from basis to brand layer on Windows, code that used SvtPathOptions::GetModulePath to located libraries had to be adapted 2009-05-08 10:10:43 +0200 sb r271703 : #i101244# for performance reasons, on Windows move DLLs from basis to brand layer (i.e., next to executables); consequently eliminated some library duplications across the layers; adapted various code to the move 2009-05-08 09:54:44 +0200 sb r271702 : #i101244# hardwire Python dynamic libraries and script files into base layer (even if other dynamic libraries will move to brand layer on Windows), mainly because the pyuno dynamic library is both linked against from other dynamic libraries (pythonloader.uno) and accessed via "import pyuno" from Python scripts 2009-05-07 17:18:30 +0200 sb r271686 : #i101244# support NativeServicesURLPrefix on individual files; to implement that, changed meaning of global unomaxservices 2009-05-07 17:15:24 +0200 sb r271685 : #i101244# take legacy_binfilters.rdb explicitly from $OOO_BASE_DIR/program (instead of implicitly next to some dynamic library); cleaned up dead code 2009-05-07 17:12:12 +0200 sb r271684 : #i101244# take senddoc.exe explicitly from $OOO_BASE_DIR/program (instead of implicitly next to some dynamic library) 2009-05-07 17:11:33 +0200 sb r271683 : #i101244# take odbcconfig.exe explicitly from $OOO_BASE_DIR/program (instead of implicitly next to some dynamic library) 2009-05-07 17:09:44 +0200 sb r271682 : #i101244# read configmgr ini file explicitly from $OOO_BASE_DIR/program (instead of next to configmgr dynamic library) --- svtools/source/filter.vcl/filter/filter.cxx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/svtools/source/filter.vcl/filter/filter.cxx b/svtools/source/filter.vcl/filter/filter.cxx index f87fabc7973d..3586ddd02ddd 100644 --- a/svtools/source/filter.vcl/filter/filter.cxx +++ b/svtools/source/filter.vcl/filter/filter.cxx @@ -74,8 +74,8 @@ #include #include #include -#include #include +#include #include #include "SvFilterOptionsDialog.hxx" @@ -1038,8 +1038,13 @@ void GraphicFilter::ImplInit() if( bUseConfig ) { - SvtPathOptions aPathOpt; - aFilterPath = aPathOpt.GetModulePath(); +#if defined WNT + rtl::OUString url(RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/program")); +#else + rtl::OUString url(RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/program")); +#endif + rtl::Bootstrap::expandMacros(url); //TODO: detect failure + utl::LocalFileHelper::ConvertURLToPhysicalName(url, aFilterPath); } pErrorEx = new FilterErrorEx; -- cgit v1.2.3 From 27a1e85b656bad222f113f650b03397aa3bc59d3 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Wed, 26 Aug 2009 13:11:27 +0000 Subject: CWS-TOOLING: integrate CWS gridcontrol_01 2009-08-13 07:53:28 +0200 tkr r274919 : #103210# remove mixed-line-endings 2009-08-13 07:36:19 +0200 tkr r274918 : #103210# remove mixed-line-endings 2009-08-06 14:02:11 +0200 tkr r274725 : #103210# build issues fixed 2009-08-06 12:11:52 +0200 tkr r274711 : #103210# build issues fixed 2009-08-06 12:03:32 +0200 tkr r274710 : #103210# add grid directory to d.lst 2009-08-05 17:00:11 +0200 misheto r274689 : CWS-TOOLING: rebase CWS gridcontrol_01 to trunk@274622 (milestone: DEV300:m54) 2009-08-05 14:31:42 +0200 tkr r274668 : #103210# remove add/removeMouseListener from XGridControl and use XWindow 2009-08-05 14:30:06 +0200 tkr r274667 : #103210# remove add/removeMouseListener from XGridControl and use XWindow 2009-08-05 14:29:09 +0200 tkr r274666 : #103210# remove add/removeMouseListener from XGridControl and use XWindow 2009-08-05 12:02:15 +0200 misheto r274649 : fox for HScroll problem 2009-08-05 11:37:22 +0200 misheto r274644 : CWS-TOOLING: rebase CWS gridcontrol_01 to trunk@274203 (milestone: DEV300:m53) 2009-08-03 10:12:50 +0200 tkr r274568 : #103210# Method getItemIndexPos() added 2009-07-31 18:25:42 +0200 misheto r274547 : fixed bug no cursor with NONE-selection, arrow keys cause selection disappear 2009-07-31 16:36:34 +0200 tkr r274541 : #103210# MouseListener added 2009-07-31 16:35:48 +0200 tkr r274540 : #103210# MouseListener added 2009-07-31 14:37:45 +0200 misheto r274533 : event handlers 2009-07-31 09:43:52 +0200 tkr r274513 : #103210# MouseListener added 2009-07-31 09:42:46 +0200 tkr r274512 : #103210# MouseListenerMultiplexer exported 2009-07-30 18:19:55 +0200 misheto r274501 : 2009-07-30 18:15:00 +0200 misheto r274500 : mouselistener changes 2009-07-30 15:23:03 +0200 tkr r274491 : #i103210# remove XItemListener and add XMouseListener 2009-07-30 15:22:01 +0200 tkr r274490 : #i103210# remove XItemListener and add XMouseListener 2009-07-28 16:47:37 +0200 misheto r274415 : fixed text left intented, removeAllScroll mode, selection mode, single selection 2009-07-28 16:45:32 +0200 misheto r274413 : 2009-07-28 14:56:33 +0200 tkr r274407 : #i103210# build issue fixed 2009-07-28 12:49:23 +0200 tkr r274397 : #i103210# use HScroll and VScroll for Scrolbarmode 2009-07-28 12:24:14 +0200 tkr r274396 : #i103210# use HScroll and VScroll for Scrolbarmode 2009-07-28 11:33:46 +0200 tkr r274393 : ##i103210# api changes 2009-07-28 11:32:48 +0200 tkr r274392 : ##i103210# add ItemListener 2009-07-28 11:31:49 +0200 tkr r274391 : ##i103210# add ItemListener 2009-07-28 08:30:30 +0200 tkr r274388 : #i103210# paint background color 2009-07-24 17:22:10 +0200 misheto r274314 : focus problem solved, single selection with keys UP DOWN 2009-07-22 11:43:24 +0200 misheto r274226 : removed vclxcontrol dependencies 2009-07-22 10:23:34 +0200 misheto r274220 : 2009-07-21 15:04:26 +0200 misheto r274200 : tablecontrol added items 2009-07-21 15:00:44 +0200 misheto r274198 : tablecontrol 2009-07-17 09:58:59 +0200 misheto r274082 : changes mihaela 2009-07-15 11:04:27 +0200 tkr r273999 : #i103210# api documentation added 2009-07-15 11:03:18 +0200 tkr r273998 : #i103210# adapt idl changes 2009-07-14 08:47:32 +0200 tkr r273959 : #i103210# Method removeRow added 2009-07-14 08:46:52 +0200 tkr r273958 : #i103210# Method removeRow added 2009-07-13 08:20:11 +0200 tkr r273914 : #i103210# XGridSelectionModel removed 2009-07-10 13:50:01 +0200 tkr r273888 : #i103210# selection support and listener added 2009-07-10 13:42:17 +0200 tkr r273887 : #i103210# selection support added 2009-07-06 10:21:51 +0200 tkr r273724 : #i103210# implement listener 2009-07-06 10:13:25 +0200 tkr r273723 : #i103210# remove wrong interfaces 2009-07-06 10:11:47 +0200 tkr r273722 : #i103210# interface changes 2009-07-02 15:28:50 +0200 tkr r273659 : #i103210# create new services 2009-07-02 15:26:21 +0200 tkr r273658 : #i103210# create new services 2009-07-02 12:00:39 +0200 tkr r273633 : #i103210# defaultgriddatamodel works now 2009-07-02 11:59:24 +0200 tkr r273631 : #i103210# now XGridDataModel inherits XComponent 2009-07-01 14:07:31 +0200 tkr r273579 : #i103210# initial implementation of the grid control data model 2009-07-01 13:14:21 +0200 tkr r273571 : #i103210# adding new service and some methods 2009-06-30 12:15:13 +0200 tkr r273500 : #i103210# change attribute names 2009-06-30 10:55:07 +0200 tkr r273496 : #i103210# create services and interfaces for the grid control 2009-06-30 10:47:26 +0200 tkr r273495 : #i103210# create services and interfaces for the grid control --- svtools/inc/svtools/table/abstracttablecontrol.hxx | 130 ++ svtools/inc/svtools/table/defaultinputhandler.hxx | 67 + svtools/inc/svtools/table/gridtablerenderer.hxx | 103 + svtools/inc/svtools/table/tablecontrol.hxx | 174 ++ svtools/inc/svtools/table/tabledatawindow.hxx | 75 + svtools/inc/svtools/table/tableinputhandler.hxx | 77 + svtools/inc/svtools/table/tablemodel.hxx | 454 +++++ svtools/inc/svtools/table/tablerenderer.hxx | 241 +++ svtools/inc/svtools/table/tabletypes.hxx | 75 + svtools/prj/build.lst | 3 +- svtools/source/items1/itemset.cxx | 2 +- svtools/source/table/defaultinputhandler.cxx | 210 ++ svtools/source/table/gridtablerenderer.cxx | 234 +++ svtools/source/table/makefile.mk | 59 + svtools/source/table/tablecontrol.cxx | 179 ++ svtools/source/table/tablecontrol_impl.cxx | 2003 ++++++++++++++++++++ svtools/source/table/tablecontrol_impl.hxx | 342 ++++ svtools/source/table/tabledatawindow.cxx | 81 + svtools/source/table/tablegeometry.cxx | 130 ++ svtools/source/table/tablegeometry.hxx | 161 ++ svtools/source/uno/makefile.mk | 3 +- svtools/source/uno/unocontroltablemodel.cxx | 812 ++++++++ svtools/source/uno/unocontroltablemodel.hxx | 179 ++ svtools/source/uno/unoiface.cxx | 20 +- svtools/uno/makefile.mk | 2 + svtools/util/makefile.mk | 1 + toolkit/inc/toolkit/helper/listenermultiplexer.hxx | 2 +- toolkit/inc/toolkit/helper/property.hxx | 8 +- toolkit/inc/toolkit/helper/servicenames.hxx | 6 + toolkit/prj/build.lst | 3 +- toolkit/source/controls/dialogcontrol.cxx | 4 + .../controls/grid/defaultgridcolumnmodel.cxx | 242 +++ .../controls/grid/defaultgridcolumnmodel.hxx | 96 + .../source/controls/grid/defaultgriddatamodel.cxx | 310 +++ .../source/controls/grid/defaultgriddatamodel.hxx | 99 + toolkit/source/controls/grid/gridcolumn.cxx | 166 ++ toolkit/source/controls/grid/gridcolumn.hxx | 85 + toolkit/source/controls/grid/gridcontrol.cxx | 273 +++ toolkit/source/controls/grid/gridcontrol.hxx | 124 ++ toolkit/source/controls/grid/makefile.mk | 54 + toolkit/source/helper/property.cxx | 9 +- toolkit/source/helper/registerservices.cxx | 17 + toolkit/source/helper/servicenames.cxx | 6 +- toolkit/util/makefile.mk | 1 + toolkit/util/toolkit.xml | 46 + 45 files changed, 7358 insertions(+), 10 deletions(-) create mode 100644 svtools/inc/svtools/table/abstracttablecontrol.hxx create mode 100644 svtools/inc/svtools/table/defaultinputhandler.hxx create mode 100644 svtools/inc/svtools/table/gridtablerenderer.hxx create mode 100644 svtools/inc/svtools/table/tablecontrol.hxx create mode 100644 svtools/inc/svtools/table/tabledatawindow.hxx create mode 100644 svtools/inc/svtools/table/tableinputhandler.hxx create mode 100644 svtools/inc/svtools/table/tablemodel.hxx create mode 100644 svtools/inc/svtools/table/tablerenderer.hxx create mode 100644 svtools/inc/svtools/table/tabletypes.hxx create mode 100644 svtools/source/table/defaultinputhandler.cxx create mode 100644 svtools/source/table/gridtablerenderer.cxx create mode 100644 svtools/source/table/makefile.mk create mode 100644 svtools/source/table/tablecontrol.cxx create mode 100644 svtools/source/table/tablecontrol_impl.cxx create mode 100644 svtools/source/table/tablecontrol_impl.hxx create mode 100644 svtools/source/table/tabledatawindow.cxx create mode 100644 svtools/source/table/tablegeometry.cxx create mode 100644 svtools/source/table/tablegeometry.hxx create mode 100644 svtools/source/uno/unocontroltablemodel.cxx create mode 100644 svtools/source/uno/unocontroltablemodel.hxx create mode 100644 toolkit/source/controls/grid/defaultgridcolumnmodel.cxx create mode 100644 toolkit/source/controls/grid/defaultgridcolumnmodel.hxx create mode 100644 toolkit/source/controls/grid/defaultgriddatamodel.cxx create mode 100644 toolkit/source/controls/grid/defaultgriddatamodel.hxx create mode 100644 toolkit/source/controls/grid/gridcolumn.cxx create mode 100644 toolkit/source/controls/grid/gridcolumn.hxx create mode 100644 toolkit/source/controls/grid/gridcontrol.cxx create mode 100644 toolkit/source/controls/grid/gridcontrol.hxx create mode 100644 toolkit/source/controls/grid/makefile.mk diff --git a/svtools/inc/svtools/table/abstracttablecontrol.hxx b/svtools/inc/svtools/table/abstracttablecontrol.hxx new file mode 100644 index 000000000000..03bc0a999f7a --- /dev/null +++ b/svtools/inc/svtools/table/abstracttablecontrol.hxx @@ -0,0 +1,130 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX +#define SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX + +#include +#include +#include +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + enum TableControlAction + { + /// moves the cursor in the table control one row up, if possible, by keeping the current column + cursorUp, + /// moves the cursor in the table control one row down, if possible, by keeping the current column + cursorDown, + /// moves the cursor in the table control one column to the left, if possible, by keeping the current row + cursorLeft, + /// moves the cursor in the table control one column to the right, if possible, by keeping the current row + cursorRight, + /// moves the cursor to the beginning of the current line + cursorToLineStart, + /// moves the cursor to the end of the current line + cursorToLineEnd, + /// moves the cursor to the first row, keeping the current column + cursorToFirstLine, + /// moves the cursor to the last row, keeping the current column + cursorToLastLine, + /// moves the cursor one page up, keeping the current column + cursorPageUp, + /// moves the cursor one page down, keeping the current column + cursorPageDown, + /// moves the cursor to the top-most, left-most cell + cursorTopLeft, + /// moves the cursor to the bottom-most, right-most cell + cursorBottomRight, + /// selects the row, where the actual cursor is + cursorSelectRow, + /// selects the rows, above the actual cursor is + cursorSelectRowUp, + /// selects the row, beneath the actual cursor is + cursorSelectRowDown, + /// selects the row, from the actual cursor till top + cursorSelectRowAreaTop, + /// selects the row, from the actual cursor till bottom + cursorSelectRowAreaBottom, + + + /// invalid and final enumeration value, not to be actually used + invalidTableControlAction + }; + + //==================================================================== + //= IAbstractTableControl + //==================================================================== + /** defines a callback interface to be implemented by a concrete table control + */ + class SAL_NO_VTABLE IAbstractTableControl + { + public: + /** hides the cell cursor + + The method cares for successive calls, that is, for every call to + ->hideCursor(), you need one call to ->showCursor. Only if the number + of both calls matches, the cursor is really shown. + + @see showCursor + */ + virtual void hideCursor() = 0; + + /** shows the cell cursor + + @see hideCursor + */ + virtual void showCursor() = 0; + + /** dispatches an action to the table control + + @return + if the action could be dispatched successfully, otherwise. Usual + failure conditions include some other instance vetoing the action, or impossibility + to execute the action at all (for instance moving up one row when already positioned + on the very first row). + + @see TableControlAction + */ + virtual bool dispatchAction( TableControlAction _eAction ) = 0; + /** to be called on mouse button up/down + @return + if the click was in the visible area of the table control, + otherwise.*/ + virtual bool isClickInVisibleArea( const Point& _rPoint ) = 0; + /** returns selection engine*/ + virtual SelectionEngine* getSelEngine() = 0; + virtual void setCursorAtCurrentCell(const Point& rPoint) = 0; + + virtual ~IAbstractTableControl() {}; + }; + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX diff --git a/svtools/inc/svtools/table/defaultinputhandler.hxx b/svtools/inc/svtools/table/defaultinputhandler.hxx new file mode 100644 index 000000000000..eb1c14b43a85 --- /dev/null +++ b/svtools/inc/svtools/table/defaultinputhandler.hxx @@ -0,0 +1,67 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX +#define SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX + +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + struct DefaultInputHandler_Impl; + + //==================================================================== + //= DefaultInputHandler + //==================================================================== + class DefaultInputHandler : public ITableInputHandler + { + friend class TableDataWindow; + private: + DefaultInputHandler_Impl* m_pImpl; + + public: + DefaultInputHandler(); + ~DefaultInputHandler(); + + virtual bool MouseMove ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ); + virtual bool MouseButtonDown ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ); + virtual bool MouseButtonUp ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ); + virtual bool KeyInput ( IAbstractTableControl& _rControl, const KeyEvent& rKEvt ); + virtual bool GetFocus ( IAbstractTableControl& _rControl ); + virtual bool LoseFocus ( IAbstractTableControl& _rControl ); + virtual bool RequestHelp ( IAbstractTableControl& _rControl, const HelpEvent& rHEvt ); + virtual bool Command ( IAbstractTableControl& _rControl, const CommandEvent& rCEvt ); + virtual bool PreNotify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt ); + virtual bool Notify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt ); + }; + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX diff --git a/svtools/inc/svtools/table/gridtablerenderer.hxx b/svtools/inc/svtools/table/gridtablerenderer.hxx new file mode 100644 index 000000000000..a935f6b7386e --- /dev/null +++ b/svtools/inc/svtools/table/gridtablerenderer.hxx @@ -0,0 +1,103 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX +#define SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX + +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + struct GridTableRenderer_Impl; + + //==================================================================== + //= GridTableRenderer + //==================================================================== + /** a default implementation for the ->ITableRenderer interface + + This class is able to paint a table grid, table headers, and cell + backgrounds according to the selected/active state of cells. + + TODO update the documentation when it's decided whether this renderer + also does value handling + */ + class GridTableRenderer : public ITableRenderer + { + private: + GridTableRenderer_Impl* m_pImpl; + + public: + /** creates a table renderer associated with the given model + + @param _rModel + the model which should be rendered. The caller is responsible + for lifetime control, that is, the model instance must live + at least as long as the renderer instance lives + */ + GridTableRenderer( ITableModel& _rModel ); + ~GridTableRenderer(); + + /** returns the index of the row currently being painted + + According to the ->ITableRenderer interface, one call is made + to the renderer with a row to prepare (->PrepareRow()), and subsequent + calls do not carry the row index anymore, but are relative to the + row which has previously been prepared. + + This method returns the index of the last row which has been prepared + */ + RowPos getCurrentRow(); + + protected: + // ITableRenderer overridables + virtual void PaintHeaderArea( + OutputDevice& _rDevice, const Rectangle& _rArea, + bool _bIsColHeaderArea, bool _bIsRowHeaderArea, + const StyleSettings& _rStyle ); + virtual void PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rArea, + const StyleSettings& _rStyle ); + virtual void PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rRowArea, + const StyleSettings& _rStyle ); + virtual void PaintRowHeader( + bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rArea, + const StyleSettings& _rStyle, rtl::OUString& _rText ); + virtual void PaintCell( ColPos _nColumn, + bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rArea, + const StyleSettings& _rStyle, rtl::OUString& _rText ); + virtual void ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect); + virtual void HideCellCursor( Window& _rView, const Rectangle& _rCursorRect); + }; +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX diff --git a/svtools/inc/svtools/table/tablecontrol.hxx b/svtools/inc/svtools/table/tablecontrol.hxx new file mode 100644 index 000000000000..98fddcb7d9e1 --- /dev/null +++ b/svtools/inc/svtools/table/tablecontrol.hxx @@ -0,0 +1,174 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_INC_TABLE_TABLECONTROL_HXX +#define SVTOOLS_INC_TABLE_TABLECONTROL_HXX + +#include +#include +#include +#include +//........................................................................ + +namespace svt { namespace table +{ +//........................................................................ + + class TableControl_Impl; + class TableDataWindow; + //==================================================================== + //= TableControl + //==================================================================== + /** a basic control which manages table-like data, i.e. a number of cells + organized in m rows and n columns. + + The control itself does not do any assumptions about the concrete data + it displays, this is encapsulated in an instance supporting the + ->ITableModel interface. + + Also, the control does not do any assumptions about how the model's + content is rendered. This is the responsibility of a component + supporting the ->ITableRenderer interface (the renderer is obtained from + the model). + + The control supports the concept of a current (or active + cell). + + // TODO: scrolling? + */ + class TableControl : public Control + { + private: + DECL_LINK( ImplMouseButtonDownHdl, MouseEvent* ); + DECL_LINK( ImplMouseButtonUpHdl, MouseEvent* ); + + TableControl_Impl* m_pImpl; + public: + TableControl( Window* _pParent, WinBits _nStyle ); + ~TableControl(); + + /// sets a new table model + void SetModel( PTableModel _pModel ); + /// retrieves the current table model + PTableModel GetModel() const; + + /// returns the top row, i.e. the first visible row + RowPos GetTopRow() const; + /// sets a new top row. The top row is the first visible row in the control + void SetTopRow( RowPos _nRow ); + + /** retrieves the current row + + The current row is the one which contains the active cell. + + @return + the row index of the active cell, or ->ROW_INVALID + if there is no active cell, e.g. because the table does + not contain any rows or columns. + */ + RowPos GetCurrentRow() const; + + /** returns the row, which contains the input point*/ + + RowPos GetCurrentRow (const Point& rPoint); + + /** retrieves the current column + + The current col is the one which contains the active cell. + + @return + the column index of the active cell, or ->COL_INVALID + if there is no active cell, e.g. because the table does + not contain any rows or columns. + */ + ColPos GetCurrentColumn() const; + + /** activates the cell at the given position + + @return + if the move was successful, otherwise. Usual + failure conditions include some other instance vetoing the move, + or impossibility to execute the move at all (for instance because + of invalid coordinates). + */ + bool GoTo( ColPos _nColumn, RowPos _nRow ); + + /** moves the active cell to the given column, by keeping the active row + + @return + if the move was successful, otherwise. Usual + failure conditions include some other instance vetoing the move, + or impossibility to execute the move at all (for instance because + of invalid coordinates). + */ + inline bool GoToColumn( ColPos _nColumn ) + { + return GoTo( _nColumn, GetCurrentRow() ); + } + + /** moves the active cell to the given row, by keeping the active column + + @return + if the move was successful, otherwise. Usual + failure conditions include some other instance vetoing the move, + or impossibility to execute the move at all (for instance because + of invalid coordinates). + */ + bool GoToRow( RowPos _nRow ) + { + return GoTo( GetCurrentColumn(), _nRow ); + } + virtual void Resize(); + + /**invalidates the table if table has been changed e.g. new row added + */ + void InvalidateDataWindow(RowPos _nRowStart, bool _bRemoved); + /**gets the vector, which contains the selected rows + */ + std::vector getSelectedRows(); + /**after removing a row, updates the vector which contains the selected rows + if the row, which should be removed, is selected, it will be erased from the vector + */ + void removeSelectedRow(RowPos _nRowPos); + SelectionEngine* getSelEngine(); + TableDataWindow* getDataWindow(); + // protected: + // Window overridables + virtual void GetFocus(); + virtual void LoseFocus(); + virtual void KeyInput( const KeyEvent& rKEvt ); + //virtual long Notify(NotifyEvent& rNEvt); + + private: + TableControl(); // never implemented + TableControl( const TableControl& ); // never implemented + TableControl& operator=( const TableControl& ); // never implemented + }; + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_INC_TABLE_TABLECONTROL_HXX diff --git a/svtools/inc/svtools/table/tabledatawindow.hxx b/svtools/inc/svtools/table/tabledatawindow.hxx new file mode 100644 index 000000000000..fddbfdcd4a3c --- /dev/null +++ b/svtools/inc/svtools/table/tabledatawindow.hxx @@ -0,0 +1,75 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX +#define SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX + +#ifndef _SV_WINDOW_HXX +#include +#endif +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + class TableControl_Impl; + class TableFunctionSet; + + + //==================================================================== + //= TableDataWindow + //==================================================================== + /** the window containing the content area (including headers) of + a table control + */ + class TableDataWindow : public Window + { + friend class TableFunctionSet; + private: + TableControl_Impl& m_rTableControl; + Link m_aMouseButtonDownHdl; + Link m_aMouseButtonUpHdl; + + public: + TableDataWindow( TableControl_Impl& _rTableControl ); + inline void SetMouseButtonDownHdl( const Link& rLink ) { m_aMouseButtonDownHdl = rLink; } + inline const Link& GetMouseButtonDownHdl() const { return m_aMouseButtonDownHdl; } + inline void SetMouseButtonUpHdl( const Link& rLink ) { m_aMouseButtonUpHdl = rLink; } + inline const Link& GetMouseButtonUpHdl() const { return m_aMouseButtonUpHdl; } + + // Window overridables + virtual void Paint( const Rectangle& rRect ); + virtual void MouseMove( const MouseEvent& rMEvt); + virtual void MouseButtonDown( const MouseEvent& rMEvt); + virtual void MouseButtonUp( const MouseEvent& rMEvt); + + }; +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX diff --git a/svtools/inc/svtools/table/tableinputhandler.hxx b/svtools/inc/svtools/table/tableinputhandler.hxx new file mode 100644 index 000000000000..c0d3a2b5c18a --- /dev/null +++ b/svtools/inc/svtools/table/tableinputhandler.hxx @@ -0,0 +1,77 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX +#define SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX + +#include + +class MouseEvent; +class KeyEvent; +class HelpEvent; +class CommandEvent; +class NotifyEvent; + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + class IAbstractTableControl; + + //==================================================================== + //= ITableInputHandler + //==================================================================== + /** interface for components handling input in a ->TableControl + */ + class ITableInputHandler + { + public: + // all those methods have the same semantics as the equal-named methods of ->Window, + // with the additional option to return a boolean value indicating whether + // the event should be further processed by the ->Window implementations (), + // or whether it has been sufficiently handled by the ->ITableInputHandler instance + // (). + + virtual bool MouseMove ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0; + virtual bool MouseButtonDown ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0; + virtual bool MouseButtonUp ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0; + virtual bool KeyInput ( IAbstractTableControl& _rControl, const KeyEvent& rKEvt ) = 0; + virtual bool GetFocus ( IAbstractTableControl& _rControl ) = 0; + virtual bool LoseFocus ( IAbstractTableControl& _rControl ) = 0; + virtual bool RequestHelp ( IAbstractTableControl& _rControl, const HelpEvent& rHEvt ) = 0; + virtual bool Command ( IAbstractTableControl& _rControl, const CommandEvent& rCEvt ) = 0; + virtual bool PreNotify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt ) = 0; + virtual bool Notify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt ) = 0; + + virtual ~ITableInputHandler() { } + }; + typedef ::boost::shared_ptr< ITableInputHandler > PTableInputHandler; + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX diff --git a/svtools/inc/svtools/table/tablemodel.hxx b/svtools/inc/svtools/table/tablemodel.hxx new file mode 100644 index 000000000000..a1af1e1750ed --- /dev/null +++ b/svtools/inc/svtools/table/tablemodel.hxx @@ -0,0 +1,454 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_INC_TABLE_TABLEMODEL_HXX +#define SVTOOLS_INC_TABLE_TABLEMODEL_HXX + +#include +#include +#include + +#include + +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + + //==================================================================== + //= cell data + //==================================================================== + struct CellEntryType + { + String m_aStr; + //Image m_aImage; + //Control m_aControl; + CellEntryType( const String& _rStr ) : + m_aStr( _rStr ) + {} + }; + + //typedef ::std::vector CellColumnContent; + //vector, which contains text data for each cell + typedef ::std::vector CellColumnContent; + //vector, which contains data for rows + typedef ::std::vector CellContent; + //==================================================================== + //= ScrollbarVisibility + //==================================================================== + enum ScrollbarVisibility + { + /** enumeration value denoting that a scrollbar should never be visible, even + if needed normally + */ + ScrollbarShowNever, + /** enumeration value denoting that a scrollbar should be visible when needed only + */ + ScrollbarShowSmart, + /** enumeration value denoting that a scrollbar should always be visible, even + if not needed normally + */ + ScrollbarShowAlways + }; + + //==================================================================== + //= ITableModelListener + //==================================================================== + /** declares an interface to be implemented by components interested in + changes in an ->ITableModel + */ + class SAL_NO_VTABLE ITableModelListener + { + public: + //virtual void onTableModelChanged(PTableModel pTableModel) = 0; + /** notifies the listener that one or more rows have been inserted into + the table + + @param first + the index of the first newly inserted row + @param last + the index of the last newly inserted row. Must not be smaller + than ->first + */ + virtual void rowsInserted( RowPos first, RowPos last ) = 0; + + /** notifies the listener that one or more rows have been removed from + the table + + @param first + the old index of the first removed row + @param last + the old index of the last removed row. Must not be smaller + than ->first + */ + virtual void rowsRemoved( RowPos first, RowPos last ) = 0; + + /** notifies the listener that one or more columns have been inserted into + the table + + @param first + the index of the first newly inserted row + @param last + the index of the last newly inserted row. Must not be smaller + than ->first + */ + virtual void columnsInserted( ColPos first, ColPos last ) = 0; + + /** notifies the listener that one or more columns have been removed from + the table + + @param first + the old index of the first removed row + @param last + the old index of the last removed row. Must not be smaller + than ->first + */ + virtual void columnsRemoved( ColPos first, ColPos last ) = 0; + + /** notifies the listener that a column in the table has moved + + @param oldIndex + the old index of the column within the model + @param newIndex + the new index of the column within the model + */ + virtual void columnMoved( ColPos oldIndex, ColPos newIndex ) = 0; + + /** notifies the listener that a rectangular cell range in the table + has been updated + + Listeners are required to discard any possibly cached information + they have about the cells in question, in particular any possibly + cached cell values. + */ + virtual void cellsUpdated( ColPos firstCol, ColPos lastCol, RowPos firstRow, RowPos lastRow ) = 0; + + /// deletes the listener instance + virtual ~ITableModelListener(){}; + }; + typedef ::boost::shared_ptr< ITableModelListener > PTableModelListener; + + //==================================================================== + //= IColumnModel + //==================================================================== + /** interface to be implemented by table column models + */ + class SAL_NO_VTABLE IColumnModel + { + public: + /** retrieves the ID of the column + + The semantics of a column id is not defined. It's up to the + implementor of the ->IColumnModel, respectively the ->ITableModel + which provides the column models, to define such a semantics. + + @return + the ID of the column. May be 0 if the table which the column + belongs to does not need and support column ids. + + @see setID + */ + virtual ColumnID getID() const = 0; + + /** sets a new column ID + + @return + if setting the new ID was successfull. A possible error + conditions is if you try to set an ID which is already used + by another column within the same table. + + @see getID + */ + virtual bool setID( const ColumnID _nID ) = 0; + + /** returns the name of the column + + Column names should be human-readable, but not necessarily unique + within a given table. + + @see setName + */ + virtual String getName() const = 0; + + /** sets a new name for the column + + @see getName + */ + virtual void setName( const String& _rName ) = 0; + + /** determines whether the column can be resized + + @see getMinWidth + @see getMaxWidth + @see getWidth + */ + virtual bool isResizable() const = 0; + + /** declares the column as resizable or fixed in width + + @see getMinWidth + @see getMaxWidth + @see getWidth + */ + virtual void setResizable( bool _bResizable ) = 0; + + /** returns the width of the column, in 1/100 millimeters + + The returned value must be a positive ->TableMetrics value. + + It can also be COLWIDTH_FIT_TO_VIEW, to indicate that the width of the column + should automatically be adjusted to completely fit the view. For instance, a + model's last column could return this value, to indicate that it is to occupy + all horizontal space remaining in the view, after all other columns have been + layouted. + + If there is more than one column with width COLWIDTH_FIT_TO_VIEW in a model, + they're all layouted equal-width. + + If the columns with a read width (i.e. other than COLWIDTH_FIT_TO_VIEW) are, + in sum, wider than the view, then the view is free to choose a real width for any + columns which return COLWIDTH_FIT_TO_VIEW here. + + @see setWidth + @see getMinWidth + @see getMaxWidth + @see COLWIDTH_FIT_TO_VIEW + */ + virtual TableMetrics getWidth() const = 0; + + /** sets a new width for the column + + @param _nWidth + the new width, in 1/100 millimeters + + @see getWidth + */ + virtual void setWidth( TableMetrics _nWidth ) = 0; + + /** returns the minimum width of the column, in 1/100 millimeters, or 0 if the column + does not have a minimal width + + @see setMinWidth + @see getMaxWidth + @see getWidth + */ + virtual TableMetrics getMinWidth() const = 0; + + /** sets the minimum width of the column, in 1/100 millimeters + + @see getMinWidth + @see setMaxWidth + @see setWidth + */ + virtual void setMinWidth( TableMetrics _nMinWidth ) = 0; + + /** returns the maximum width of the column, in 1/100 millimeters, or 0 if the column + does not have a minimal width + + @see setMaxWidth + @see getMinWidth + @see getWidth + */ + virtual TableMetrics getMaxWidth() const = 0; + + /** sets the maximum width of the column, in 1/100 millimeters + + @see getMaxWidth + @see setMinWidth + @see setWidth + */ + virtual void setMaxWidth( TableMetrics _nMaxWidth ) = 0; + + + /// deletes the column model instance + virtual ~IColumnModel() { } + }; + typedef ::boost::shared_ptr< IColumnModel > PColumnModel; + + //==================================================================== + //= ITableModel + //==================================================================== + /** declares the interface to implement by an abtract table model + */ + class SAL_NO_VTABLE ITableModel + { + public: + /** returns the number of columns in the table + */ + virtual TableSize getColumnCount() const = 0; + + /** returns the number of rows in the table + */ + virtual TableSize getRowCount() const = 0; + + virtual void setColumnCount(TableSize _nColCount) = 0; + virtual void setRowCount(TableSize _nRowCount) = 0; + + /** determines whether the table has column headers + + If this method returns , the renderer returned by + ->getRenderer must be able to render column headers. + + @see IColumnRenderer + */ + virtual bool hasColumnHeaders() const = 0; + /** sets whether the table should have row headers + @see IColumnRenderer + */ + virtual void setRowHeaders( bool rowHeaders) = 0; + + /** sets whether the table should have column headers + @see IColumnRenderer + */ + virtual void setColumnHeaders( bool columnHeaders) = 0; + + /** determines whether the table has row headers + + If this method returns , the renderer returned by + ->getRenderer must be able to render row headers. + + @see IColumnRenderer + */ + virtual bool hasRowHeaders() const = 0; + + /** determines whether the given cell is editable + + @see ICellEditor + @todo + */ + virtual bool isCellEditable( ColPos col, RowPos row ) const = 0; + + /** adds the given listener to the list of ->ITableModelListener's + */ + virtual void addTableModelListener( const PTableModelListener& listener ) = 0; + + /** revokes the given listener from the list of ->ITableModelListener's + */ + virtual void removeTableModelListener( const PTableModelListener& listener ) = 0; + + /** returns a model for a certain column + + @param column + the index of the column in question. Must be greater than or + equal 0, and smaller than the return value of ->getColumnCount() + + @return + the model of the column in question. Must not be + + @see getColumnModelByID + */ + virtual PColumnModel getColumnModel( ColPos column ) = 0; + + /** finds a column model by ID + + @param id + the id of the column which is to be looked up + @return + the column model with the given ID, or if there is + no such column + */ + virtual PColumnModel getColumnModelByID( ColumnID id ) = 0; + + /** returns a renderer which is able to paint the table represented + by this table model + + @return the renderer to use. Must not be + */ + virtual PTableRenderer getRenderer() const = 0; + + /** returns the component handling input in a view associated with the model + */ + virtual PTableInputHandler getInputHandler() const = 0; + + /** determines the height of rows in the table. + + @return + the logical height of rows in the table, in 1/100 millimeters. The height must be + greater 0. + */ + virtual TableMetrics getRowHeight() const = 0; + + virtual void setRowHeight(TableMetrics _nRowHeight) = 0; + + /** determines the height of the column header row + + This method is not to be called if ->hasColumnHeaders() + returned . + + @return + the logical height of the column header row, in 1/100 millimeters. + Must be greater than 0. + */ + virtual TableMetrics getColumnHeaderHeight() const = 0; + + /** determines the width of the row header column + + This method is not to be called if ->hasRowHeaders() + returned . + + @return + the logical width of the row header column, in 1/100 millimeters. + Must be greater than 0. + */ + virtual TableMetrics getRowHeaderWidth() const = 0; + + /** determines the visibility of the vertical scrollbar of the table control + @param overAllHeight the height of the table with all rows + @param actHeight the given height of the table + */ + virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight,int actHeight) const = 0; + + /** determines the visibility of the horizontal scrollbar of the table control + @param overAllWidth the width of the table with all columns + @param actWidth the given width of the table + */ + virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const = 0; + + /** fills cells with content + */ + virtual void setCellContent(std::vector > cellContent)=0; + /** gets the content of the cells + */ + virtual std::vector > getCellContent() = 0; + /**sets title of header rows + */ + virtual void setRowHeaderName(std::vector cellColumnContent)=0; + /** gets title of header rows + */ + virtual std::vector getRowHeaderName() = 0; + + /// destroys the table model instance + virtual ~ITableModel() { } + }; + typedef ::boost::shared_ptr< ITableModel > PTableModel; + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_INC_TABLE_TABLEMODEL_HXX diff --git a/svtools/inc/svtools/table/tablerenderer.hxx b/svtools/inc/svtools/table/tablerenderer.hxx new file mode 100644 index 000000000000..eb645ad574c4 --- /dev/null +++ b/svtools/inc/svtools/table/tablerenderer.hxx @@ -0,0 +1,241 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_INC_TABLE_TABLERENDERER_HXX +#define SVTOOLS_INC_TABLE_TABLERENDERER_HXX + +#include + +#include + +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + //==================================================================== + //= ITableRenderer + //==================================================================== + /** interface to implement by components rendering a ->TableControl + */ + class SAL_NO_VTABLE ITableRenderer + { + public: + /** paints a (part of) header area + + There are two header areas in a table control: +
  • The row containing all column headers, i.e. above all rows containing the data
  • +
  • The column containing all row headers. i.e. left of all columns containing the data
  • +
+ + A header area is more than the union of the single column/row headers. + + First, there might be less columns than fit into the view - in this case, right + beside the right-most column, there's still room which belongs to the column header + area, but is not occupied by any particular column header.
+ An equivalent statement holds for the row header area, if there are less rows than + fit into the view. + + Second, if the table control has both a row header and a column header, + the intersection between those both belongs to both the column header area and the + row header area, but not to any particular column or row header. + + There are two flags specifying whether the to-be-painted area is part of the column + and/or row header area. +
  • If both are , the intersection of both areas is to be painted.
  • +
  • If ->_bIsColHeaderArea is and ->_bIsRowHeaderArea is , + then ->_rArea denotes the column header area excluding the + intersection between row and column header area.
  • +
  • Equivalently for ->_bIsColHeaderArea being and ->_bIsRowHeaderArea + being
  • +
+ Note that it's not possible for both ->_bIsColHeaderArea and ->_bIsRowHeaderArea + to be at the same time. + + @param _rDevice + the device to paint onto + @param _rArea + the area to paint into + @param _bIsColHeaderArea + if and only if ->_rArea is part of the column header area. + @param _bIsRowHeaderArea + if and only if ->_rArea is part of the row header area. + @param _rStyle + the style to be used for drawing + */ + virtual void PaintHeaderArea( + OutputDevice& _rDevice, const Rectangle& _rArea, + bool _bIsColHeaderArea, bool _bIsRowHeaderArea, + const StyleSettings& _rStyle ) = 0; + + /** paints the header for a given column + + @param _nCol + the index of the column to paint + @param _bActive + if and only if the column whose column is to be painted + contains the active cell. + @param _bSelected + if and only if the column whose column is to be painted + is selected currently. + @param _rDevice + denotes the device to paint onto + @param _rArea + the are into which the column header should be painted + @param _rStyle + the style to be used for drawing + */ + virtual void PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rArea, + const StyleSettings& _rStyle ) = 0; + + /** prepares a row for painting + + Painting a table means painting rows as necessary, in an increasing + order. The assumption is that retrieving data for two different rows + is (potentially) more expensive than retrieving data for two different + columns. Thus, the renderer will get the chance to "seek" to a certain + row, and then has to render all cells in this row, before another + row is going to be painted. + + @param _nRow + the row which is going to be painted. The renderer should + at least remember this row, since subsequent calls to + ->PaintRowHeader(), ->PaintCell(), and ->FinishRow() will + not pass this parameter again. + + However, the renderer is also allowed to render any + cell-independent content of this row. + + @param _bActive + if and only if the row to be painted contains the + currently active cell. + @param _bSelected + if and only if the row to be prepared is + selected currently. + @param _rDevice + denotes the device to paint onto + @param _rRowArea + the are into which the row should be painted. This excludes + the row header area, if applicable. + @param _rStyle + the style to be used for drawing + */ + virtual void PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rRowArea, + const StyleSettings& _rStyle ) = 0; + + /** paints the header of a row + + The row to be painted is denoted by the most recent call to + ->PrepareRow. + + @param _bActive + if and only if the row to be painted contains the + currently active cell. +
+ Note that this flag is equal to the respective flag in the + previous ->PrepareRow call, it's passed here for convinience + only. + @param _bSelected + if and only if the row whose header cell is to be + painted is selected currently. +
+ Note that this flag is equal to the respective flag in the + previous ->PrepareRow call, it's passed here for convinience + only. + @param _rDevice + denotes the device to paint onto + @param _rArea + the are into which the row header should be painted + @param _rStyle + the style to be used for drawing + @param _rText + the title of the header row + */ + virtual void PaintRowHeader( + bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rArea, + const StyleSettings& _rStyle, rtl::OUString& _rText ) = 0; + + /** paints a certain cell + + The row to be painted is denoted by the most recent call to + ->PrepareRow. + + @param _bSelected + if and only if the cell to be painted is + selected currently. This is the case if either + the row or the column of the cell is currently selected. +
+ Note that this flag is equal to the respective flag in the + previous ->PrepareRow call, it's passed here for convinience + only. + @param _bActive + if the cell is currently active. +
+ Note that this flag is equal to the respective flag in the + previous ->PrepareRow call, it's passed here for convinience + only. + @param _rDevice + denotes the device to paint onto + @param _rArea + the are into which the cell should be painted + @param _rStyle + the style to be used for drawing + @param _rText + the content of the cell + */ + virtual void PaintCell( ColPos _nColumn, + bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rArea, + const StyleSettings& _rStyle, rtl::OUString& _rText ) = 0; + + /** draws a cell cursor in the given rectangle + + The cell cursor is used to indicate the active/current cell + of a table control. + */ + virtual void ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect) = 0; + + /** hides the cell cursor previously drawn into the given rectangle + + The cell cursor is used to indicate the active/current cell + of a table control. + */ + virtual void HideCellCursor( Window& _rView, const Rectangle& _rCursorRect) = 0; + + /// deletes the renderer instance + virtual ~ITableRenderer() { } + }; + typedef ::boost::shared_ptr< ITableRenderer > PTableRenderer; + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_INC_TABLE_TABLERENDERER_HXX diff --git a/svtools/inc/svtools/table/tabletypes.hxx b/svtools/inc/svtools/table/tabletypes.hxx new file mode 100644 index 000000000000..167e49cfd521 --- /dev/null +++ b/svtools/inc/svtools/table/tabletypes.hxx @@ -0,0 +1,75 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_INC_TABLE_TABLETYPES_HXX +#define SVTOOLS_INC_TABLE_TABLETYPES_HXX + +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + /// a value denoting the size of a table + typedef sal_Int32 TableSize; + + /// a value denoting a column position within a table + typedef sal_Int32 ColPos; + /// a value denoting a row position within a table + typedef sal_Int32 RowPos; + + /** a value denoting an arbitrary coordinate value of a position within + a table + + Values of this type are guaranteed to be large enough to hold column + positions as well as row positions. + */ + typedef sal_Int32 AnyPos; + + /// the ID of a column in a table + typedef sal_Int32 ColumnID; + + typedef sal_Int32 TableMetrics; +/** special column width value which indicates that the column should be + automatically resized to fit the view +*/ +#define COLWIDTH_FIT_TO_VIEW ((TableMetrics)-1) + +/// denotes the column containing the row headers +#define COL_ROW_HEADERS ((ColPos)-1) +/// denotes the row containing the column headers +#define ROW_COL_HEADERS ((RowPos)-1) + +/// denotes an invalid column index +#define COL_INVALID ((ColPos)-2) +/// denotes an invalid row index +#define ROW_INVALID ((RowPos)-2) + + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_INC_TABLE_TABLETYPES_HXX diff --git a/svtools/prj/build.lst b/svtools/prj/build.lst index a6a409055faa..a60199740561 100644 --- a/svtools/prj/build.lst +++ b/svtools/prj/build.lst @@ -38,13 +38,14 @@ st svtools\source\undo nmake - all st_undo st_inc NULL st svtools\source\plugapp nmake - all st_papp st_inc NULL st svtools\source\dialogs nmake - all st_dial st_inc NULL st svtools\source\edit nmake - all st_edit st_inc NULL +st svtools\source\table nmake - all st_table st_inc NULL st svtools\source\uno nmake - all st_uno st_inc NULL st svtools\source\svrtf nmake - all st_rtf st_inc NULL st svtools\source\svsql nmake - all st_sql st_inc NULL st svtools\source\svhtml nmake - all st_html st_inc NULL st svtools\source\syslocale nmake - all st_sysloc st_inc NULL st svtools\source\filepicker nmake - all st_filepick st_inc NULL -st svtools\util nmake - all st_util st__brw st__ctr st__dde st__item st__item1 st__misc st__misc1 st__url st_ctl st_dial st_edit st_file st_html st_papp st_rtf st_sql st_usdde.u st_psdde.p st_msdde.m st_msc.m st_undo st_uno st_vfilt st_vigif st_vixbm st_vixpm st_vjpeg st_vwmf st_sysloc st_filepick st_not st_conf st_mem st_num st_svtjava NULL +st svtools\util nmake - all st_util st__brw st__ctr st__dde st__item st__item1 st__misc st__misc1 st__url st_ctl st_dial st_edit st_file st_html st_papp st_rtf st_sql st_usdde.u st_psdde.p st_msdde.m st_msc.m st_undo st_table st_uno st_vfilt st_vigif st_vixbm st_vixpm st_vjpeg st_vwmf st_sysloc st_filepick st_not st_conf st_mem st_num st_svtjava NULL st svtools\source\fsstor nmake - all st_fsstor st_inc NULL st svtools\source\hatchwindow nmake - all st_hatchwin st_inc NULL st svtools\source\passwordcontainer nmake - all st_passcont st_inc NULL diff --git a/svtools/source/items1/itemset.cxx b/svtools/source/items1/itemset.cxx index 6edeffe6d250..fee00dca854a 100644 --- a/svtools/source/items1/itemset.cxx +++ b/svtools/source/items1/itemset.cxx @@ -541,7 +541,7 @@ SfxItemState SfxItemSet::GetItemState( USHORT nWhich, // Unterschiedlich vorhanden return SFX_ITEM_DONTCARE; - if ( (*ppFnd)->Type() == TYPE(SfxVoidItem) ) + if ( (*ppFnd)->Type() == TYPE(SfxVoidItem) ) return SFX_ITEM_DISABLED; if (ppItem) diff --git a/svtools/source/table/defaultinputhandler.cxx b/svtools/source/table/defaultinputhandler.cxx new file mode 100644 index 000000000000..17ee0222857f --- /dev/null +++ b/svtools/source/table/defaultinputhandler.cxx @@ -0,0 +1,210 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + +#include "svtools/table/defaultinputhandler.hxx" +#include "svtools/table/abstracttablecontrol.hxx" + +#include +#include +#include +#include "svtools/table/tabledatawindow.hxx" + +//........................................................................ +namespace svt { namespace table +{ +//....................................................................... + + struct DefaultInputHandler_Impl + { + }; + + //==================================================================== + //= DefaultInputHandler + //==================================================================== + //-------------------------------------------------------------------- + DefaultInputHandler::DefaultInputHandler() + :m_pImpl( new DefaultInputHandler_Impl ) + { + } + + //-------------------------------------------------------------------- + DefaultInputHandler::~DefaultInputHandler() + { + DELETEZ( m_pImpl ); + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::MouseMove( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt ) + { + (void)_rControl; + (void)_rMEvt; + return false; + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::MouseButtonDown( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt ) + { + bool bHandled = false; + Point aPoint = _rMEvt.GetPosPixel(); + if(_rControl.isClickInVisibleArea(aPoint)) + { + if(_rControl.getSelEngine()->GetSelectionMode() == NO_SELECTION) + { + LoseFocus(_rControl); + _rControl.setCursorAtCurrentCell(aPoint); + bHandled = true; + } + else + { + bHandled = _rControl.getSelEngine()->SelMouseButtonDown(_rMEvt); + } + } + return bHandled; + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::MouseButtonUp( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt ) + { + bool bHandled = false; + Point aPoint = _rMEvt.GetPosPixel(); + if(_rControl.isClickInVisibleArea(aPoint)) + { + if(_rControl.getSelEngine()->GetSelectionMode() == NO_SELECTION) + { + GetFocus(_rControl); + _rControl.setCursorAtCurrentCell(aPoint); + bHandled = true; + } + else + bHandled = _rControl.getSelEngine()->SelMouseButtonUp(_rMEvt); + } + return bHandled; + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::KeyInput( IAbstractTableControl& _rControl, const KeyEvent& rKEvt ) + { + bool bHandled = false; + + const KeyCode& rKeyCode = rKEvt.GetKeyCode(); + USHORT nKeyCode = rKeyCode.GetCode(); + + struct _ActionMapEntry + { + USHORT nKeyCode; + USHORT nKeyModifier; + TableControlAction eAction; + } + static aKnownActions[] = { + { KEY_DOWN, 0, cursorDown }, + { KEY_UP, 0, cursorUp }, + { KEY_LEFT, 0, cursorLeft }, + { KEY_RIGHT, 0, cursorRight }, + { KEY_HOME, 0, cursorToLineStart }, + { KEY_END, 0, cursorToLineEnd }, + { KEY_PAGEUP, 0, cursorPageUp }, + { KEY_PAGEDOWN, 0, cursorPageDown }, + { KEY_PAGEUP, KEY_MOD1, cursorToFirstLine }, + { KEY_PAGEDOWN, KEY_MOD1, cursorToLastLine }, + { KEY_HOME, KEY_MOD1, cursorTopLeft }, + { KEY_END, KEY_MOD1, cursorBottomRight }, + { KEY_SPACE, KEY_MOD1, cursorSelectRow }, + { KEY_UP, KEY_SHIFT, cursorSelectRowUp }, + { KEY_DOWN, KEY_SHIFT, cursorSelectRowDown }, + { KEY_END, KEY_SHIFT, cursorSelectRowAreaBottom }, + { KEY_HOME, KEY_SHIFT, cursorSelectRowAreaTop }, + + { 0, 0, invalidTableControlAction } + }; + + const _ActionMapEntry* pActions = aKnownActions; + for ( ; pActions->eAction != invalidTableControlAction; ++pActions ) + { + if ( ( pActions->nKeyCode == nKeyCode ) && ( pActions->nKeyModifier == rKeyCode.GetAllModifier() ) ) + { + bHandled = _rControl.dispatchAction( pActions->eAction ); + break; + } + } + + return bHandled; + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::GetFocus( IAbstractTableControl& _rControl ) + { + _rControl.showCursor(); + return false; // continue processing + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::LoseFocus( IAbstractTableControl& _rControl ) + { + _rControl.hideCursor(); + return false; // continue processing + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::RequestHelp( IAbstractTableControl& _rControl, const HelpEvent& _rHEvt ) + { + (void)_rControl; + (void)_rHEvt; + // TODO + return false; + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::Command( IAbstractTableControl& _rControl, const CommandEvent& _rCEvt ) + { + (void)_rControl; + (void)_rCEvt; + // TODO + return false; + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::PreNotify( IAbstractTableControl& _rControl, NotifyEvent& _rNEvt ) + { + (void)_rControl; + (void)_rNEvt; + // TODO + return false; + } + + //-------------------------------------------------------------------- + bool DefaultInputHandler::Notify( IAbstractTableControl& _rControl, NotifyEvent& _rNEvt ) + { + (void)_rControl; + (void)_rNEvt; + // TODO + return false; + } + +//........................................................................ +} } // namespace svt::table +//........................................................................ diff --git a/svtools/source/table/gridtablerenderer.cxx b/svtools/source/table/gridtablerenderer.cxx new file mode 100644 index 000000000000..2c4fda711009 --- /dev/null +++ b/svtools/source/table/gridtablerenderer.cxx @@ -0,0 +1,234 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + +#include "svtools/table/gridtablerenderer.hxx" + +#include +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + struct GridTableRenderer_Impl + { + ITableModel& rModel; + RowPos nCurrentRow; + + GridTableRenderer_Impl( ITableModel& _rModel ) + :rModel( _rModel ) + ,nCurrentRow( ROW_INVALID ) + { + } + }; + + //==================================================================== + //= GridTableRenderer + //==================================================================== + //-------------------------------------------------------------------- + GridTableRenderer::GridTableRenderer( ITableModel& _rModel ) + :m_pImpl( new GridTableRenderer_Impl( _rModel ) ) + { + } + + //-------------------------------------------------------------------- + GridTableRenderer::~GridTableRenderer() + { + DELETEZ( m_pImpl ); + } + + //-------------------------------------------------------------------- + RowPos GridTableRenderer::getCurrentRow() + { + return m_pImpl->nCurrentRow; + } + + //-------------------------------------------------------------------- + void GridTableRenderer::PaintHeaderArea( + OutputDevice& _rDevice, const Rectangle& _rArea, bool _bIsColHeaderArea, bool _bIsRowHeaderArea, + const StyleSettings& _rStyle ) + { + OSL_PRECOND( _bIsColHeaderArea || _bIsRowHeaderArea, + "GridTableRenderer::PaintHeaderArea: invalid area flags!" ); + + // fill the rows with alternating background colors + _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR ); + + _rDevice.SetLineColor(); + _rDevice.SetFillColor( _rStyle.GetDialogColor() ); + _rDevice.DrawRect( _rArea ); + + // delimiter lines at bottom/right + _rDevice.SetLineColor( _rStyle.GetDialogTextColor() ); + _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); + _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() ); + + _rDevice.Pop(); + (void)_bIsColHeaderArea; + (void)_bIsRowHeaderArea; + } + + //-------------------------------------------------------------------- + void GridTableRenderer::PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle ) + { + _rDevice.Push( PUSH_LINECOLOR ); + + _rDevice.SetLineColor( _rStyle.GetDialogTextColor() ); + _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() ); + + String sHeaderText; + + PColumnModel pColumn = m_pImpl->rModel.getColumnModel( _nCol ); + DBG_ASSERT( !!pColumn, "GridTableRenderer::PaintColumnHeader: invalid column model object!" ); + if ( !!pColumn ) + sHeaderText = pColumn->getName(); + Color aRowBackground = _rStyle.GetFieldColor(); + if ( _bSelected ) + { + aRowBackground = COL_BLUE; + } + _rDevice.DrawText( _rArea, sHeaderText, TEXT_DRAW_LEFT | TEXT_DRAW_TOP ); + _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); + _rDevice.Pop(); + + (void)_bActive; + // no special painting for the active column at the moment + + //(void)_bSelected; + // TODO: selection not yet implemented + } + + //-------------------------------------------------------------------- + void GridTableRenderer::PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected, + OutputDevice& _rDevice, const Rectangle& _rRowArea, const StyleSettings& _rStyle ) + { + // remember the row for subsequent calls to the other ->ITableRenderer methods + m_pImpl->nCurrentRow = _nRow; + + // fill the rows with alternating background colors + _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR ); + + _rDevice.SetLineColor(); + + Color aRowBackground = _rStyle.GetFieldColor(); + + _rDevice.SetFillColor( aRowBackground ); + + _rDevice.DrawRect( _rRowArea ); + + // TODO: active? selected? + + _rDevice.Pop(); + (void) _bSelected; + (void)_bActive; + + // no special painting for the active row at the moment + + //(void)_bSelected; + // TODO: selection not yet implemented + } + + //-------------------------------------------------------------------- + void GridTableRenderer::PaintRowHeader( bool _bActive, bool _bSelected, OutputDevice& _rDevice, const Rectangle& _rArea, + const StyleSettings& _rStyle, rtl::OUString& _rText ) + { + _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR ); + + _rDevice.SetLineColor( _rStyle.GetDialogTextColor() ); + _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); + _rDevice.DrawText( _rArea, _rText, TEXT_DRAW_LEFT); + // TODO: active? selected? + (void)_bActive; + (void)_bSelected; + + _rDevice.Pop(); + } + + //-------------------------------------------------------------------- + void GridTableRenderer::PaintCell( ColPos _nColumn, bool _bSelected, bool _bActive, + OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle, rtl::OUString& _rText ) + { + _rDevice.Push( PUSH_LINECOLOR ); + + // draw the grid + _rDevice.SetLineColor( COL_LIGHTGRAY ); + // TODO: the LIGHTGRAY should probably be a property/setting + _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() ); + _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() ); + + { + // TODO: remove those temporary place holders + Rectangle aRect( _rArea ); + ++aRect.Left(); --aRect.Right(); + ++aRect.Top(); --aRect.Bottom(); + + String sText; + if(_bSelected) + { + Color aRed(COL_BLUE); + _rDevice.SetFillColor( aRed ); + _rDevice.SetTextColor(COL_WHITE); + } + _rDevice.DrawRect( _rArea ); + (void)_nColumn; + _rDevice.DrawText( aRect, _rText, TEXT_DRAW_LEFT | TEXT_DRAW_TOP); + } + if(_bSelected) + { + _rDevice.SetFillColor( _rStyle.GetFieldColor() ); + _rDevice.SetTextColor(COL_BLACK); + } + + _rDevice.Pop(); + + (void)_bActive; +// // no special painting for the active cell at the moment + (void)_rStyle; +// // TODO: do we need this? + } + + //-------------------------------------------------------------------- + void GridTableRenderer::ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect) + { + _rView.ShowFocus( _rCursorRect ); + } + + //-------------------------------------------------------------------- + void GridTableRenderer::HideCellCursor( Window& _rView, const Rectangle& _rCursorRect) + { + (void)_rCursorRect; + _rView.HideFocus(); + + } + +//........................................................................ +} } // namespace svt::table +//........................................................................ + diff --git a/svtools/source/table/makefile.mk b/svtools/source/table/makefile.mk new file mode 100644 index 000000000000..8feb7fee10d8 --- /dev/null +++ b/svtools/source/table/makefile.mk @@ -0,0 +1,59 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2008 by Sun Microsystems, Inc. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.16 $ +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=..$/.. + +ENABLE_EXCEPTIONS=TRUE +PRJNAME=svtools +TARGET=table +#LIBTARGET=NO + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(PRJ)$/util$/svt.pmk + +# --- Files -------------------------------------------------------- + +SLOFILES=\ + $(SLO)$/tablecontrol.obj \ + $(SLO)$/tablecontrol_impl.obj \ + $(SLO)$/gridtablerenderer.obj \ + $(SLO)$/tablegeometry.obj \ + $(SLO)$/defaultinputhandler.obj \ + $(SLO)$/tabledatawindow.obj + +#LIB1TARGET= $(SLB)$/$(TARGET).lib +#LIB1OBJFILES= $(SLOFILES) + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk diff --git a/svtools/source/table/tablecontrol.cxx b/svtools/source/table/tablecontrol.cxx new file mode 100644 index 000000000000..c8895a19408d --- /dev/null +++ b/svtools/source/table/tablecontrol.cxx @@ -0,0 +1,179 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + +#include "svtools/table/tablecontrol.hxx" +#include "tablegeometry.hxx" +#include "tablecontrol_impl.hxx" +#include "svtools/table/tabledatawindow.hxx" +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + //==================================================================== + //= TableControl + //==================================================================== + //-------------------------------------------------------------------- + TableControl::TableControl( Window* _pParent, WinBits _nStyle ) + :Control( _pParent, _nStyle ) + ,m_pImpl( new TableControl_Impl( *this ) ) + { + m_pImpl->getDataWindow()->SetMouseButtonDownHdl( LINK( this, TableControl, ImplMouseButtonDownHdl ) ); + m_pImpl->getDataWindow()->SetMouseButtonUpHdl( LINK( this, TableControl, ImplMouseButtonUpHdl ) ); + } + + //-------------------------------------------------------------------- + TableControl::~TableControl() + { + DELETEZ( m_pImpl ); + } + + //-------------------------------------------------------------------- + void TableControl::GetFocus() + { + if ( !m_pImpl->getInputHandler()->GetFocus( *m_pImpl ) ) + { + Control::GetFocus(); + GrabFocus(); + } + } + + //-------------------------------------------------------------------- + void TableControl::LoseFocus() + { + if ( !m_pImpl->getInputHandler()->LoseFocus( *m_pImpl ) ) + Control::LoseFocus(); + } + + //-------------------------------------------------------------------- + void TableControl::KeyInput( const KeyEvent& rKEvt ) + { + if ( !m_pImpl->getInputHandler()->KeyInput( *m_pImpl, rKEvt ) ) + Control::KeyInput( rKEvt ); + } + //-------------------------------------------------------------------- + void TableControl::Resize() + { + Control::Resize(); + m_pImpl->onResize(); + } + + //-------------------------------------------------------------------- + void TableControl::SetModel( PTableModel _pModel ) + { + m_pImpl->setModel( _pModel ); + } + + //-------------------------------------------------------------------- + PTableModel TableControl::GetModel() const + { + return m_pImpl->getModel(); + } + + //-------------------------------------------------------------------- + RowPos TableControl::GetTopRow() const + { + return m_pImpl->getTopRow(); + } + + //-------------------------------------------------------------------- + void TableControl::SetTopRow( RowPos _nRow ) + { + // TODO + (void)_nRow; + } + + //-------------------------------------------------------------------- + RowPos TableControl::GetCurrentRow() const + { + return m_pImpl->getCurRow(); + } + + //-------------------------------------------------------------------- + ColPos TableControl::GetCurrentColumn() const + { + return m_pImpl->getCurColumn(); + } + + //-------------------------------------------------------------------- + bool TableControl::GoTo( ColPos _nColumn, RowPos _nRow ) + { + return m_pImpl->goTo( _nColumn, _nRow ); + } + //-------------------------------------------------------------------- + void TableControl::InvalidateDataWindow(RowPos _nRowStart, bool _bRemoved) + { + Rectangle _rRect; + if(_bRemoved) + return m_pImpl->invalidateRows(_nRowStart, _rRect); + else + return m_pImpl->invalidateRow(_nRowStart, _rRect); + } + //-------------------------------------------------------------------- + std::vector TableControl::getSelectedRows() + { + return m_pImpl->getSelectedRows(); + } + //-------------------------------------------------------------------- + void TableControl::removeSelectedRow(RowPos _nRowPos) + { + m_pImpl->removeSelectedRow(_nRowPos); + } + //-------------------------------------------------------------------- + + RowPos TableControl::GetCurrentRow(const Point& rPoint) + { + return m_pImpl->getCurrentRow( rPoint ); + } + + //-------------------------------------------------------------------- + + IMPL_LINK( TableControl, ImplMouseButtonDownHdl, MouseEvent*, pData ) + { + CallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, pData ); + return 1; + } + + IMPL_LINK( TableControl, ImplMouseButtonUpHdl, MouseEvent*, pData ) + { + CallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONUP, pData ); + return 1; + } + + SelectionEngine* TableControl::getSelEngine() + { + return m_pImpl->getSelEngine(); + } + + TableDataWindow* TableControl::getDataWindow() + { + return m_pImpl->getDataWindow(); + } +//........................................................................ +} } // namespace svt::table +//........................................................................ diff --git a/svtools/source/table/tablecontrol_impl.cxx b/svtools/source/table/tablecontrol_impl.cxx new file mode 100644 index 000000000000..e1ff3aeb7f2a --- /dev/null +++ b/svtools/source/table/tablecontrol_impl.cxx @@ -0,0 +1,2003 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + +#include "svtools/table/tablecontrol.hxx" +#include "svtools/table/defaultinputhandler.hxx" +#include "svtools/table/tablemodel.hxx" +#include "tablecontrol_impl.hxx" +#include "tablegeometry.hxx" +#include "svtools/table/tabledatawindow.hxx" + +#include +#include + +#include +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + //==================================================================== + //= TempHideCursor + //==================================================================== + class TempHideCursor + { + private: + IAbstractTableControl& m_rTable; + + public: + TempHideCursor( IAbstractTableControl& _rTable ) + :m_rTable( _rTable ) + { + m_rTable.hideCursor(); + } + ~TempHideCursor() + { + m_rTable.showCursor(); + } + }; + + //==================================================================== + //= EmptyTableModel + //==================================================================== + /** default implementation of an ->ITableModel, used as fallback when no + real model is present + + Instances of this class are static in any way, and provide the least + necessary default functionality for a table model. + */ + class EmptyTableModel : public ITableModel + { + public: + EmptyTableModel() + { + } + + // ITableModel overridables + virtual TableSize getColumnCount() const + { + return 0; + } + virtual TableSize getRowCount() const + { + return 0; + } + virtual bool hasColumnHeaders() const + { + return false; + } + virtual bool hasRowHeaders() const + { + return false; + } + virtual void setRowHeaders(bool _bRowHeaders) + { + (void)_bRowHeaders; + } + virtual void setColumnHeaders(bool _bColumnHeaders) + { + (void)_bColumnHeaders; + } + void setColumnCount(TableSize _nColCount) + { + (void) _nColCount; + } + void setRowCount(TableSize _nRowCount) + { + (void)_nRowCount; + } + virtual bool isCellEditable( ColPos col, RowPos row ) const + { + (void)col; + (void)row; + return false; + } + virtual void addTableModelListener( const PTableModelListener& listener ) + { + (void)listener; + // ignore + } + virtual void removeTableModelListener( const PTableModelListener& listener ) + { + (void)listener; + // ignore + } + virtual PColumnModel getColumnModel( ColPos column ) + { + DBG_ERROR( "EmptyTableModel::getColumnModel: invalid call!" ); + (void)column; + return PColumnModel(); + } + virtual PColumnModel getColumnModelByID( ColumnID id ) + { + DBG_ERROR( "EmptyTableModel::getColumnModel: invalid call!" ); + (void)id; + return PColumnModel(); + } + virtual PTableRenderer getRenderer() const + { + return PTableRenderer(); + } + virtual PTableInputHandler getInputHandler() const + { + return PTableInputHandler(); + } + virtual TableMetrics getRowHeight() const + { + return 5 * 100; + } + virtual void setRowHeight(TableMetrics _nRowHeight) + { + (void)_nRowHeight; + } + virtual TableMetrics getColumnHeaderHeight() const + { + return 0; + } + virtual TableMetrics getRowHeaderWidth() const + { + return 0; + } + virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const + { + (void)overAllHeight; + (void)actHeight; + return ScrollbarShowNever; + } + virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const + { + (void)overAllWidth; + (void)actWidth; + return ScrollbarShowNever; + } + virtual void setCellContent(std::vector > pCellEntryType) + { + (void)pCellEntryType; + } + virtual std::vector > getCellContent() + { + std::vector cCC; + cCC.push_back(rtl::OUString::createFromAscii("")); + std::vector > cC; + cC.push_back(cCC); + return cC; + } + virtual void setRowHeaderName(std::vector pCellEntryType) + { + (void)pCellEntryType; + } + virtual std::vector getRowHeaderName() + { + std::vector cCC; + cCC.push_back(rtl::OUString::createFromAscii("")); + return cCC; + } + }; + + + //==================================================================== + //= TableControl_Impl + //==================================================================== + DBG_NAME( TableControl_Impl ) + +#if DBG_UTIL + //==================================================================== + //= SuspendInvariants + //==================================================================== + class SuspendInvariants + { + private: + const TableControl_Impl& m_rTable; + sal_Int32 m_nSuspendFlags; + + public: + SuspendInvariants( const TableControl_Impl& _rTable, sal_Int32 _nSuspendFlags ) + :m_rTable( _rTable ) + ,m_nSuspendFlags( _nSuspendFlags ) + { + DBG_ASSERT( ( m_rTable.m_nRequiredInvariants & m_nSuspendFlags ) == m_nSuspendFlags, + "SuspendInvariants: cannot suspend what is already suspended!" ); + const_cast< TableControl_Impl& >( m_rTable ).m_nRequiredInvariants &= ~m_nSuspendFlags; + } + ~SuspendInvariants() + { + const_cast< TableControl_Impl& >( m_rTable ).m_nRequiredInvariants |= m_nSuspendFlags; + } + }; + #define DBG_SUSPEND_INV( flags ) \ + SuspendInvariants aSuspendInv( *this, flags ); +#else + #define DBG_SUSPEND_INV( flags ) +#endif + +#if DBG_UTIL + //==================================================================== + const char* TableControl_Impl_checkInvariants( const void* _pInstance ) + { + return static_cast< const TableControl_Impl* >( _pInstance )->impl_checkInvariants(); + } + + namespace + { + template< typename SCALAR_TYPE > + bool lcl_checkLimitsExclusive( SCALAR_TYPE _nValue, SCALAR_TYPE _nMin, SCALAR_TYPE _nMax ) + { + return ( _nValue > _nMin ) && ( _nValue < _nMax ); + } + + template< typename SCALAR_TYPE > + bool lcl_checkLimitsExclusive_OrDefault_OrFallback( SCALAR_TYPE _nValue, SCALAR_TYPE _nMin, SCALAR_TYPE _nMax, + PTableModel _pModel, SCALAR_TYPE _nDefaultOrFallback ) + { + if ( !_pModel ) + return _nValue == _nDefaultOrFallback; + if ( _nMax <= _nMin ) + return _nDefaultOrFallback == _nValue; + return lcl_checkLimitsExclusive( _nValue, _nMin, _nMax ); + } + } + + //-------------------------------------------------------------------- + const sal_Char* TableControl_Impl::impl_checkInvariants() const + { + if ( !m_pModel ) + return "no model, not even an EmptyTableModel"; + + if ( !m_pDataWindow ) + return "invalid data window!"; + + if ( m_pModel->getColumnCount() != m_nColumnCount ) + return "column counts are inconsistent!"; + + if ( m_pModel->getRowCount() != m_nRowCount ) + return "row counts are inconsistent!"; + + if ( ( m_nCurColumn != COL_INVALID ) && !m_aColumnWidthsPixel.empty() && ( m_nCurColumn < 0 ) || ( m_nCurColumn >= (ColPos)m_aColumnWidthsPixel.size() ) ) + return "current column is invalid!"; + + if ( m_aColumnWidthsPixel.size() != m_aAccColumnWidthsPixel.size() ) + return "columnd width caches are inconsistent!"; + + if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nTopRow, (RowPos)-1, m_nRowCount, getModel(), (RowPos)0 ) ) + return "invalid top row value!"; + + if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nCurRow, (RowPos)-1, m_nRowCount, getModel(), ROW_INVALID ) ) + return "invalid current row value!"; + + if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nLeftColumn, (ColPos)-1, m_nColumnCount, getModel(), (ColPos)0 ) ) + return "invalid current column value!"; + + if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nCurColumn, (ColPos)-1, m_nColumnCount, getModel(), COL_INVALID ) ) + return "invalid current column value!"; + + if ( m_pInputHandler != m_pModel->getInputHandler() ) + return "input handler is not the model-provided one!"; + + // m_nColHeaderHeightPixel consistent with the model's value? + { + TableMetrics nHeaderHeight = m_pModel->hasColumnHeaders() ? m_pModel->getColumnHeaderHeight() : 0; + nHeaderHeight = m_rAntiImpl.LogicToPixel( Size( 0, nHeaderHeight ), MAP_100TH_MM ).Height(); + if ( nHeaderHeight != m_nColHeaderHeightPixel ) + return "column header heights are inconsistent!"; + } + + bool isDummyModel = dynamic_cast< const EmptyTableModel* >( m_pModel.get() ) != NULL; + if ( !isDummyModel ) + { + TableMetrics nRowHeight = m_pModel->getRowHeight(); + nRowHeight = m_rAntiImpl.LogicToPixel( Size( 0, nRowHeight ), MAP_100TH_MM ).Height(); + if ( nRowHeight != m_nRowHeightPixel ) + return "row heights are inconsistent!"; + } + + // m_nRowHeaderWidthPixel consistent with the model's value? + { + TableMetrics nHeaderWidth = m_pModel->hasRowHeaders() ? m_pModel->getRowHeaderWidth() : 0; + nHeaderWidth = m_rAntiImpl.LogicToPixel( Size( nHeaderWidth, 0 ), MAP_100TH_MM ).Width(); + if ( nHeaderWidth != m_nRowHeaderWidthPixel ) + return "row header widths are inconsistent!"; + } + + // TODO: check m_aColumnWidthsPixel and m_aAccColumnWidthsPixel + + if ( m_nCursorHidden < 0 ) + return "invalid hidden count for the cursor!"; + + if ( ( m_nRequiredInvariants & INV_SCROLL_POSITION ) && m_pVScroll ) + { + DBG_SUSPEND_INV( INV_SCROLL_POSITION ); + // prevent infinite recursion + + if ( m_pVScroll->GetThumbPos() != m_nTopRow ) + return "vertical scroll bar |position| is incorrect!"; + if ( m_pVScroll->GetRange().Max() != m_nRowCount ) + return "vertical scroll bar |range| is incorrect!"; + if ( m_pVScroll->GetVisibleSize() != impl_getVisibleRows( false ) ) + return "vertical scroll bar |visible size| is incorrect!"; + } + + if ( ( m_nRequiredInvariants & INV_SCROLL_POSITION ) && m_pHScroll ) + { + DBG_SUSPEND_INV( INV_SCROLL_POSITION ); + // prevent infinite recursion + + if ( m_pHScroll->GetThumbPos() != m_nLeftColumn ) + return "horizontal scroll bar |position| is incorrect!"; + if ( m_pHScroll->GetRange().Max() != m_nColumnCount ) + return "horizontal scroll bar |range| is incorrect!"; + if ( m_pHScroll->GetVisibleSize() != impl_getVisibleColumns( false ) ) + return "horizontal scroll bar |visible size| is incorrect!"; + } + + return NULL; + } +#endif + +#define DBG_CHECK_ME() \ + DBG_CHKTHIS( TableControl_Impl, TableControl_Impl_checkInvariants ) + + //-------------------------------------------------------------------- + TableControl_Impl::TableControl_Impl( TableControl& _rAntiImpl ) + :m_rAntiImpl ( _rAntiImpl ) + ,m_pModel ( new EmptyTableModel ) + ,m_pInputHandler ( ) + ,m_nRowHeightPixel ( 15 ) + ,m_nColHeaderHeightPixel( 0 ) + ,m_nRowHeaderWidthPixel ( 0 ) + ,m_nColumnCount ( 0 ) + ,m_nRowCount ( 0 ) + ,m_nCurColumn ( COL_INVALID ) + ,m_nCurRow ( ROW_INVALID ) + ,m_nLeftColumn ( 0 ) + ,m_nTopRow ( 0 ) + ,m_nCursorHidden ( 1 ) + ,m_pDataWindow ( new TableDataWindow( *this ) ) + ,m_pVScroll ( NULL ) + ,m_pHScroll ( NULL ) + ,m_pScrollCorner ( NULL ) + ,m_pSelEngine ( ) + ,m_nRowSelected ( ) + ,m_pTableFunctionSet ( new TableFunctionSet(this ) ) + ,m_nAnchor (-1 ) +#if DBG_UTIL + ,m_nRequiredInvariants ( INV_SCROLL_POSITION ) +#endif + { + DBG_CTOR( TableControl_Impl, TableControl_Impl_checkInvariants ); + m_pSelEngine = new SelectionEngine(m_pDataWindow, m_pTableFunctionSet); + m_pSelEngine->SetSelectionMode(SINGLE_SELECTION); + m_pDataWindow->SetPosPixel( Point( 0, 0 ) ); + m_pDataWindow->Show(); + } + + //-------------------------------------------------------------------- + TableControl_Impl::~TableControl_Impl() + { + DBG_DTOR( TableControl_Impl, TableControl_Impl_checkInvariants ); + + DELETEZ( m_pVScroll ); + DELETEZ( m_pHScroll ); + DELETEZ( m_pScrollCorner ); + DELETEZ( m_pTableFunctionSet ); + DELETEZ( m_pSelEngine ); + DELETEZ( m_pDataWindow ); + } + + //-------------------------------------------------------------------- + PTableModel TableControl_Impl::getModel() const + { + if ( dynamic_cast< const EmptyTableModel* >( m_pModel.get() ) != NULL ) + // if it's an EmptyTableModel, pretend that there is no model + return PTableModel(); + + return m_pModel; + } + + //-------------------------------------------------------------------- + void TableControl_Impl::setModel( PTableModel _pModel ) + { + DBG_CHECK_ME(); + + TempHideCursor aHideCursor( *this ); + + // TODO: revoke as table listener from the model + + m_pModel = _pModel; + if ( !m_pModel ) + m_pModel.reset( new EmptyTableModel ); + + // TODO: register as table listener + //m_pModel->addTableModelListener(PTableModelListener(m_pTableModelListener)); + m_nCurRow = ROW_INVALID; + m_nCurColumn = COL_INVALID; + + // recalc some model-dependent cached info + impl_ni_updateCachedModelValues(); + + // completely invalidate + m_rAntiImpl.Invalidate(); + + // reset cursor to (0,0) + if ( m_nRowCount ) m_nCurRow = 0; + if ( m_nColumnCount ) m_nCurColumn = 0; + } + + //-------------------------------------------------------------------- + void TableControl_Impl::impl_getAllVisibleCellsArea( Rectangle& _rCellArea ) const + { + DBG_CHECK_ME(); + + _rCellArea.Left() = 0; + _rCellArea.Top() = 0; + + // determine the right-most border of the last column which is + // at least partially visible + _rCellArea.Right() = m_nRowHeaderWidthPixel; + if ( !m_aAccColumnWidthsPixel.empty() ) + { + // the number of pixels which are scroll out of the left hand + // side of the window + long nScrolledOutLeft = m_nLeftColumn == 0 ? 0 : m_aAccColumnWidthsPixel[ m_nLeftColumn - 1 ]; + + ArrayOfLong::const_reverse_iterator loop = m_aAccColumnWidthsPixel.rbegin(); + do + { + _rCellArea.Right() = *loop++ - nScrolledOutLeft + m_nRowHeaderWidthPixel; + } + while ( ( loop != m_aAccColumnWidthsPixel.rend() ) + && ( *loop - nScrolledOutLeft >= _rCellArea.Right() ) + ); + } + // so far, _rCellArea.Right() denotes the first pixel *after* the cell area + --_rCellArea.Right(); + + // determine the last row which is at least partially visible + _rCellArea.Bottom() = + m_nColHeaderHeightPixel + + impl_getVisibleRows( true ) * m_nRowHeightPixel + - 1; + } + + //-------------------------------------------------------------------- + void TableControl_Impl::impl_getAllVisibleDataCellArea( Rectangle& _rCellArea ) const + { + DBG_CHECK_ME(); + + impl_getAllVisibleCellsArea( _rCellArea ); + _rCellArea.Left() = m_nRowHeaderWidthPixel; + _rCellArea.Top() = m_nColHeaderHeightPixel; + } + + //-------------------------------------------------------------------- + void TableControl_Impl::impl_ni_updateCachedModelValues() + { + m_nRowHeightPixel = 15; + m_nColHeaderHeightPixel = 0; + m_nRowHeaderWidthPixel = 0; + m_pInputHandler.reset(); + m_nColumnCount = m_nRowCount = 0; + + m_nRowHeightPixel = m_rAntiImpl.LogicToPixel( Size( 0, m_pModel->getRowHeight() ), MAP_100TH_MM ).Height(); + if ( m_pModel->hasColumnHeaders() ) + m_nColHeaderHeightPixel = m_rAntiImpl.LogicToPixel( Size( 0, m_pModel->getColumnHeaderHeight() ), MAP_100TH_MM ).Height(); + if ( m_pModel->hasRowHeaders() ) + m_nRowHeaderWidthPixel = m_rAntiImpl.LogicToPixel( Size( m_pModel->getRowHeaderWidth(), 0 ), MAP_100TH_MM ).Width(); + + impl_ni_updateColumnWidths(); + + m_pInputHandler = m_pModel->getInputHandler(); + if ( !m_pInputHandler ) + m_pInputHandler.reset( new DefaultInputHandler ); + + m_nColumnCount = m_pModel->getColumnCount(); + m_nRowCount = m_pModel->getRowCount(); + } + + //-------------------------------------------------------------------- + void TableControl_Impl::impl_ni_updateColumnWidths() + { + m_aColumnWidthsPixel.resize( 0 ); + m_aAccColumnWidthsPixel.resize( 0 ); + if ( !m_pModel ) + return; + + TableSize colCount = m_pModel->getColumnCount(); + m_aColumnWidthsPixel.reserve( colCount ); + m_aAccColumnWidthsPixel.reserve( colCount ); + long accumulatedPixelWidth = 0; + for ( ColPos col = 0; col < colCount; ++col ) + { + PColumnModel pColumn = m_pModel->getColumnModel( col ); + DBG_ASSERT( !!pColumn, "TableControl_Impl::impl_ni_updateColumnWidths: invalid column returned by the model!" ); + if ( !pColumn ) + continue; + + TableMetrics colWidth = pColumn->getWidth(); + DBG_ASSERT( ( colWidth == COLWIDTH_FIT_TO_VIEW ) || ( colWidth > 0 ), + "TableControl_Impl::impl_ni_updateColumnWidths: invalid column width!" ); + + long pixelWidth = 0; + if ( colWidth == COLWIDTH_FIT_TO_VIEW ) + { + // TODO + DBG_ERROR( "TableControl_Impl::impl_ni_updateColumnWidths: COLWIDTH_FIT_TO_VIEW not implemented, yet!" ); + } + else + { + pixelWidth = m_rAntiImpl.LogicToPixel( Size( colWidth, 0 ), MAP_100TH_MM ).Width(); + } + + m_aColumnWidthsPixel.push_back( pixelWidth ); + + m_aAccColumnWidthsPixel.push_back( accumulatedPixelWidth += pixelWidth ); + } + } + + //-------------------------------------------------------------------- + namespace + { + //................................................................ + /// determines whether a scrollbar is needed for the given values + bool lcl_determineScrollbarNeed( ScrollbarVisibility _eVisibility, + long _nVisibleUnits, long _nRange ) + { + if ( _eVisibility == ScrollbarShowNever ) + return false; + if ( _eVisibility == ScrollbarShowAlways ) + return true; + return _nVisibleUnits > _nRange; + } + + //................................................................ + void lcl_setButtonRepeat( Window& _rWindow, ULONG _nDelay ) + { + AllSettings aSettings = _rWindow.GetSettings(); + MouseSettings aMouseSettings = aSettings.GetMouseSettings(); + + aMouseSettings.SetButtonRepeat( _nDelay ); + aSettings.SetMouseSettings( aMouseSettings ); + + _rWindow.SetSettings( aSettings, TRUE ); + } + + //................................................................ + void lcl_updateScrollbar( Window& _rParent, ScrollBar*& _rpBar, + ScrollbarVisibility _eVisibility, long _nVisibleUnits, + long _nPosition, long _nLineSize, long _nRange, + bool _bHorizontal, const Link& _rScrollHandler ) + { + // do we need the scrollbar? + bool bNeedBar = lcl_determineScrollbarNeed( _eVisibility, _nVisibleUnits, _nRange ); + + // do we currently have the scrollbar? + bool bHaveBar = _rpBar != NULL; + + // do we need to correct the scrollbar visibility? + if ( bHaveBar && !bNeedBar ) + { + DELETEZ( _rpBar ); + } + else if ( !bHaveBar && bNeedBar ) + { + _rpBar = new ScrollBar( + &_rParent, + WB_DRAG | ( _bHorizontal ? WB_HSCROLL : WB_VSCROLL ) + ); + _rpBar->SetScrollHdl( _rScrollHandler ); + // get some speed into the scrolling .... + lcl_setButtonRepeat( *_rpBar, 0 ); + } + + if ( _rpBar ) + { + _rpBar->SetRange( Range( 0, _nRange ) ); + _rpBar->SetVisibleSize( _nVisibleUnits ); + _rpBar->SetPageSize( _nVisibleUnits ); + _rpBar->SetLineSize( _nLineSize ); + _rpBar->SetThumbPos( _nPosition ); + _rpBar->Show(); + } + } + + //................................................................ + /** returns the number of rows fitting into the given range, + for the given row height. Partially fitting rows are counted, too, if the + respective parameter says so. + */ + TableSize lcl_getRowsFittingInto( long _nOverallHeight, long _nRowHeightPixel, bool _bAcceptPartialRow = false ) + { + return _bAcceptPartialRow + ? ( _nOverallHeight + ( _nRowHeightPixel - 1 ) ) / _nRowHeightPixel + : _nOverallHeight / _nRowHeightPixel; + } + + //................................................................ + /** returns the number of columns fitting into the given area, + with the first visible column as given. Partially fitting columns are counted, too, + if the respective parameter says so. + */ + TableSize lcl_getColumnsVisibleWithin( const Rectangle& _rArea, ColPos _nFirstVisibleColumn, + const TableControl_Impl& _rControl, bool _bAcceptPartialRow ) + { + TableSize visibleColumns = 0; + TableColumnGeometry aColumn( _rControl, _rArea, _nFirstVisibleColumn ); + while ( aColumn.isValid() ) + { + if ( !_bAcceptPartialRow ) + if ( aColumn.getRect().Right() > _rArea.Right() ) + // this column is only partially visible, and this is not allowed + break; + + aColumn.moveRight(); + ++visibleColumns; + } + return visibleColumns; + } + + } + + //-------------------------------------------------------------------- + void TableControl_Impl::impl_ni_updateScrollbars() + { + TempHideCursor aHideCursor( *this ); + + // the width/height of a scrollbar, needed several times below + long nScrollbarMetrics = m_rAntiImpl.GetSettings().GetStyleSettings().GetScrollBarSize(); + if ( m_rAntiImpl.IsZoom() ) + nScrollbarMetrics = (long)( nScrollbarMetrics * (double)m_rAntiImpl.GetZoom() ); + + // determine the playground for the data cells (excluding headers) + // TODO: what if the control is smaller than needed for the headers/scrollbars? + Rectangle aDataCellPlayground( Point( 0, 0 ), m_rAntiImpl.GetOutputSizePixel() ); + aDataCellPlayground.Left() = m_nRowHeaderWidthPixel; + aDataCellPlayground.Top() = m_nColHeaderHeightPixel; + + // do we need a vertical scrollbar? + bool bFirstRoundVScrollNeed = false; + if ( lcl_determineScrollbarNeed( + m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(), m_nRowHeightPixel*m_nRowCount), + lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ), + m_nRowCount ) ) + { + aDataCellPlayground.Right() -= nScrollbarMetrics; + bFirstRoundVScrollNeed = true; + } + // do we need a horizontal scrollbar? + if ( lcl_determineScrollbarNeed( + m_pModel->getHorizontalScrollbarVisibility(aDataCellPlayground.GetWidth(), m_aAccColumnWidthsPixel[m_nColumnCount-1]), + lcl_getColumnsVisibleWithin( aDataCellPlayground, m_nLeftColumn, *this, false ), + m_nColumnCount ) ) + { + aDataCellPlayground.Bottom() -= nScrollbarMetrics; + + // now that we just found that we need a horizontal scrollbar, + // the need for a vertical one may have changed, since the horizontal + // SB might just occupy enough space so that not all rows do fit + // anymore + if ( !bFirstRoundVScrollNeed && lcl_determineScrollbarNeed( + m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(),m_nRowHeightPixel*m_nRowCount), + lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ), + m_nRowCount ) ) + { + aDataCellPlayground.Right() -= nScrollbarMetrics; + } + } + else + { + Size regionWithoutHeader = m_rAntiImpl.PixelToLogic(Size(aDataCellPlayground.Right() - aDataCellPlayground.Left(),0),MAP_100TH_MM); + TableMetrics nColWidth = regionWithoutHeader.Width()/m_nColumnCount; + for ( ColPos col = 0; col < m_nColumnCount; ++col ) + m_pModel->getColumnModel(col)->setWidth(nColWidth); + m_rAntiImpl.SetModel(m_pModel); + } + + // create or destroy the vertical scrollbar, as needed + lcl_updateScrollbar( + m_rAntiImpl, + m_pVScroll, + m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(),m_nRowHeightPixel*m_nRowCount), + lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ), + // visible units + m_nTopRow, // current position + 1, // line size + m_nRowCount, // range + false, // vertical + LINK( this, TableControl_Impl, OnScroll ) // scroll handler + ); + // position it + if ( m_pVScroll ) + { + Rectangle aScrollbarArea( + Point( aDataCellPlayground.Right() + 1, 0 ), + Size( nScrollbarMetrics, aDataCellPlayground.Bottom() + 1 ) + ); + m_pVScroll->SetPosSizePixel( + aScrollbarArea.TopLeft(), aScrollbarArea.GetSize() ); + } + + // create or destroy the horizontal scrollbar, as needed + lcl_updateScrollbar( + m_rAntiImpl, + m_pHScroll, + m_pModel->getHorizontalScrollbarVisibility(aDataCellPlayground.GetWidth(), m_aAccColumnWidthsPixel[m_nColumnCount-1]), + lcl_getColumnsVisibleWithin( aDataCellPlayground, m_nLeftColumn, *this, false ), + // visible units + m_nLeftColumn, // current position + 1, // line size + m_nColumnCount, // range + true, // horizontal + LINK( this, TableControl_Impl, OnScroll ) // scroll handler + ); + // position it + if ( m_pHScroll ) + { + Rectangle aScrollbarArea( + Point( 0, aDataCellPlayground.Bottom() + 1 ), + Size( aDataCellPlayground.Right() + 1, nScrollbarMetrics ) + ); + m_pHScroll->SetPosSizePixel( + aScrollbarArea.TopLeft(), aScrollbarArea.GetSize() ); + } + + // the corner window connecting the two scrollbars in the lower right corner + bool bHaveScrollCorner = NULL != m_pScrollCorner; + bool bNeedScrollCorner = ( NULL != m_pHScroll ) && ( NULL != m_pVScroll ); + if ( bHaveScrollCorner && !bNeedScrollCorner ) + { + DELETEZ( m_pScrollCorner ); + } + else if ( !bHaveScrollCorner && bNeedScrollCorner ) + { + m_pScrollCorner = new ScrollBarBox( &m_rAntiImpl ); + m_pScrollCorner->SetSizePixel( Size( nScrollbarMetrics, nScrollbarMetrics ) ); + m_pScrollCorner->SetPosPixel( Point( aDataCellPlayground.Right() + 1, aDataCellPlayground.Bottom() + 1 ) ); + m_pScrollCorner->Show(); + } + + // resize the data window + m_pDataWindow->SetSizePixel( Size( + aDataCellPlayground.GetWidth() + m_nRowHeaderWidthPixel, + aDataCellPlayground.GetHeight() + m_nColHeaderHeightPixel + ) ); + } + + //-------------------------------------------------------------------- + void TableControl_Impl::onResize() + { + DBG_CHECK_ME(); + impl_ni_updateScrollbars(); + //Rectangle aAllCells; + // impl_getAllVisibleCellsArea( aAllCells ); + //m_pSelEngine->SetVisibleArea(aAllCells); + } + + //-------------------------------------------------------------------- + void TableControl_Impl::doPaintContent( const Rectangle& _rUpdateRect ) + { + DBG_CHECK_ME(); + + if ( !getModel() ) + return; + + PTableRenderer pRenderer = getModel()->getRenderer(); + DBG_ASSERT( !!pRenderer, "TableDataWindow::Paint: invalid renderer!" ); + if ( !pRenderer ) + return; + + // our current style settings, to be passed to the renderer + const StyleSettings& rStyle = m_rAntiImpl.GetSettings().GetStyleSettings(); + + // the area occupied by all (at least partially) visible cells, including + // headers + Rectangle aAllCellsWithHeaders; + impl_getAllVisibleCellsArea( aAllCellsWithHeaders ); + + m_nRowCount = m_pModel->getRowCount(); + // ............................ + // draw the header column area + if ( getModel()->hasColumnHeaders() ) + { + TableRowGeometry aHeaderRow( *this, Rectangle( Point( 0, 0 ), + aAllCellsWithHeaders.BottomRight() ), ROW_COL_HEADERS ); + pRenderer->PaintHeaderArea( + *m_pDataWindow, aHeaderRow.getRect(), true, false, rStyle + ); + // Note that strictly, aHeaderRow.getRect() also contains the intersection between column + // and row header area. However, below we go to paint this intersection, again, + // so this hopefully doesn't hurt if we already paint it here. + + for ( TableCellGeometry aCell( aHeaderRow, m_nLeftColumn ); + aCell.isValid(); + aCell.moveRight() + ) + { + if ( _rUpdateRect.GetIntersection( aCell.getRect() ).IsEmpty() ) + continue; + + bool isActiveColumn = ( aCell.getColumn() == getCurColumn() ); + bool isSelectedColumn = false; + pRenderer->PaintColumnHeader( aCell.getColumn(), isActiveColumn, isSelectedColumn, + *m_pDataWindow, aCell.getRect(), rStyle ); + } + } + + // the area occupied by the row header, if any + Rectangle aRowHeaderArea; + if ( getModel()->hasRowHeaders() ) + { + aRowHeaderArea = aAllCellsWithHeaders; + aRowHeaderArea.Right() = m_nRowHeaderWidthPixel - 1; + aRowHeaderArea.Bottom() = m_nRowHeightPixel * m_nRowCount + m_nColHeaderHeightPixel - 1; + pRenderer->PaintHeaderArea( + *m_pDataWindow, aRowHeaderArea, false, true, rStyle + ); + // Note that strictly, aRowHeaderArea also contains the intersection between column + // and row header area. However, below we go to paint this intersection, again, + // so this hopefully doesn't hurt if we already paint it here. + + if ( getModel()->hasColumnHeaders() ) + { + TableCellGeometry aIntersection( *this, Rectangle( Point( 0, 0 ), + aAllCellsWithHeaders.BottomRight() ), COL_ROW_HEADERS, ROW_COL_HEADERS ); + pRenderer->PaintHeaderArea( + *m_pDataWindow, aIntersection.getRect(), true, true, rStyle + ); + } + } + + // ............................ + // draw the table content row by row + + TableSize colCount = getModel()->getColumnCount(); + + // paint all rows + Rectangle aAllDataCellsArea; + impl_getAllVisibleDataCellArea( aAllDataCellsArea ); + + //get the vector, which contains row vectors, each containing the data for the cells in this row + std::vector > aCellContent = m_pModel->getCellContent(); + //if the vector is empty, fill it with empty data, so the table can be painted + if(aCellContent.empty()) + { + std::vector emptyCells; + while(m_nRowCount!=0) + { + aCellContent.push_back(emptyCells); + --m_nRowCount; + } + } + std::vector >::iterator it = aCellContent.begin()+m_nTopRow; + //get the vector, which contains the row header titles + std::vector aRowHeaderContent; + ::std::vector::iterator itRowName = aRowHeaderContent.begin(); + + if(m_pModel->hasRowHeaders()) + { + aRowHeaderContent = m_pModel->getRowHeaderName(); + //if the vector is empty, fill it with empty strings, so the table can be painted + if(aRowHeaderContent.empty()) + { + while(m_nRowCount!=0) + { + aRowHeaderContent.push_back(rtl::OUString::createFromAscii("")); + --m_nRowCount; + } + } + itRowName = aRowHeaderContent.begin()+m_nTopRow; + } + for ( TableRowGeometry aRowIterator( *this, aAllCellsWithHeaders, getTopRow() ); + aRowIterator.isValid(); + aRowIterator.moveDown() ) + { + if ( _rUpdateRect.GetIntersection( aRowIterator.getRect() ).IsEmpty() ) + { + if(m_pModel->hasRowHeaders()) + ++itRowName; + ++it; + continue; + } + bool isActiveRow = ( aRowIterator.getRow() == getCurRow() ); + bool isSelectedRow = false; + if(!m_nRowSelected.empty()) + { + for(std::vector::iterator itSel=m_nRowSelected.begin(); + itSel!=m_nRowSelected.end();++itSel) + { + if(*itSel == aRowIterator.getRow()) + isSelectedRow = true; + } + } + std::vector aCellData; + if(it != aCellContent.end()) + { + aCellData = *it; + ++it; + } + ::std::vector::iterator iter = aCellData.begin()+m_nLeftColumn; + + // give the redenderer a chance to prepare the row + pRenderer->PrepareRow( aRowIterator.getRow(), isActiveRow, isSelectedRow, + *m_pDataWindow, aRowIterator.getRect().GetIntersection( aAllDataCellsArea ), rStyle ); + + // paint the row header + if ( m_pModel->hasRowHeaders() ) + { + rtl::OUString rowHeaderName; + if(itRowName != aRowHeaderContent.end()) + { + rowHeaderName = *itRowName; + ++itRowName; + } + Rectangle aCurrentRowHeader( aRowHeaderArea.GetIntersection( aRowIterator.getRect() ) ); + pRenderer->PaintRowHeader( isActiveRow, isSelectedRow, *m_pDataWindow, aCurrentRowHeader, + rStyle, rowHeaderName ); + } + if ( !colCount ) + continue; + + // paint all cells in this row + for ( TableCellGeometry aCell( aRowIterator, m_nLeftColumn ); + aCell.isValid(); + aCell.moveRight() + ) + { + // if ( _rUpdateRect.GetIntersection( aCell.getRect() ).IsEmpty() ) + // continue; + + //bool isActiveCell = isActiveRow && ( aCell.getColumn() == getCurColumn() ); + bool isSelectedColumn = false; + rtl::OUString cellData; + if(aCellData.empty()) + cellData=rtl::OUString::createFromAscii(""); + else if(iter != aCellData.end()) + { + cellData = *iter; + ++iter; + } + pRenderer->PaintCell( aCell.getColumn(), isSelectedRow || isSelectedColumn, isActiveRow, + *m_pDataWindow, aCell.getRect(), rStyle, cellData ); + } + } + } + + //-------------------------------------------------------------------- + void TableControl_Impl::hideCursor() + { + DBG_CHECK_ME(); + + if ( ++m_nCursorHidden == 1 ) + impl_ni_doSwitchCursor( false ); + } + + //-------------------------------------------------------------------- + void TableControl_Impl::showCursor() + { + DBG_CHECK_ME(); + + DBG_ASSERT( m_nCursorHidden > 0, "TableControl_Impl::showCursor: cursor not hidden!" ); + if ( --m_nCursorHidden == 0 ) + impl_ni_doSwitchCursor( true ); + } + + //-------------------------------------------------------------------- + bool TableControl_Impl::dispatchAction( TableControlAction _eAction ) + { + DBG_CHECK_ME(); + + bool bSuccess = false; + Rectangle rCells; + switch ( _eAction ) + { + case cursorDown: + if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION) + { + //if other rows already selected, deselect them + if(m_nRowSelected.size()>0) + { + for(std::vector::iterator it=m_nRowSelected.begin(); + it!=m_nRowSelected.end();++it) + { + invalidateSelectedRow(*it,rCells); + m_pDataWindow->Invalidate(rCells); + } + m_nRowSelected.clear(); + } + if(m_nCurRow < m_nRowCount-1) + { + ++m_nCurRow; + m_nRowSelected.push_back(m_nCurRow); + } + else + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRow(m_nCurRow, rCells); + ensureVisible(m_nCurColumn,m_nCurRow,false); + bSuccess = true; + } + else + { + if ( m_nCurRow < m_nRowCount - 1 ) + bSuccess = goTo( m_nCurColumn, m_nCurRow + 1 ); + } + break; + + case cursorUp: + if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION) + { + if(m_nRowSelected.size()>0) + { + for(std::vector::iterator it=m_nRowSelected.begin(); + it!=m_nRowSelected.end();++it) + { + invalidateSelectedRow(*it,rCells); + m_pDataWindow->Invalidate(rCells); + } + m_nRowSelected.clear(); + } + if(m_nCurRow>0) + { + --m_nCurRow; + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRow(m_nCurRow, rCells); + } + else + { + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRow(m_nCurRow, rCells); + } + ensureVisible(m_nCurColumn,m_nCurRow,false); + bSuccess = true; + } + else + { + if ( m_nCurRow > 0 ) + bSuccess = goTo( m_nCurColumn, m_nCurRow - 1 ); + } + break; + case cursorLeft: + if ( m_nCurColumn > 0 ) + bSuccess = goTo( m_nCurColumn - 1, m_nCurRow ); + else + if ( ( m_nCurColumn == 0) && ( m_nCurRow > 0 ) ) + bSuccess = goTo( m_nColumnCount - 1, m_nCurRow - 1 ); + break; + + case cursorRight: + if ( m_nCurColumn < m_nColumnCount - 1 ) + bSuccess = goTo( m_nCurColumn + 1, m_nCurRow ); + else + if ( ( m_nCurColumn == m_nColumnCount - 1 ) && ( m_nCurRow < m_nRowCount - 1 ) ) + bSuccess = goTo( 0, m_nCurRow + 1 ); + break; + + case cursorToLineStart: + bSuccess = goTo( 0, m_nCurRow ); + break; + + case cursorToLineEnd: + bSuccess = goTo( m_nColumnCount - 1, m_nCurRow ); + break; + + case cursorToFirstLine: + bSuccess = goTo( m_nCurColumn, 0 ); + break; + + case cursorToLastLine: + bSuccess = goTo( m_nCurColumn, m_nRowCount - 1 ); + break; + + case cursorPageUp: + { + RowPos nNewRow = ::std::max( (RowPos)0, m_nCurRow - impl_getVisibleRows( false ) ); + bSuccess = goTo( m_nCurColumn, nNewRow ); + } + break; + + case cursorPageDown: + { + RowPos nNewRow = ::std::min( m_nRowCount - 1, m_nCurRow + impl_getVisibleRows( false ) ); + bSuccess = goTo( m_nCurColumn, nNewRow ); + } + break; + + case cursorTopLeft: + bSuccess = goTo( 0, 0 ); + break; + + case cursorBottomRight: + bSuccess = goTo( m_nColumnCount - 1, m_nRowCount - 1 ); + break; + + case cursorSelectRow: + { + if(m_pSelEngine->GetSelectionMode() == NO_SELECTION) + return bSuccess = false; + //pos is the position of the current row in the vector of selected rows, if current row is selected + int pos = getRowSelectedNumber(m_nRowSelected, m_nCurRow); + //if current row is selected, it should be deselected, when ALT+SPACE are pressed + if(pos>-1) + m_nRowSelected.erase(m_nRowSelected.begin()+pos); + //else select the row->put it in the vector + else + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRow(m_nCurRow, rCells); + bSuccess = true; + } + break; + case cursorSelectRowUp: + { + if(m_pSelEngine->GetSelectionMode() == NO_SELECTION) + return bSuccess = false; + else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION) + { + //if there are other selected rows, deselect them + return false; + } + else + { + //there are other selected rows + if(m_nRowSelected.size()>0) + { + //the anchor wasn't set -> a region is not selected, that's why clear all selection + //and select the current row + if(m_nAnchor==-1) + { + for(std::vector::iterator it=m_nRowSelected.begin(); + it!=m_nRowSelected.end();++it) + { + invalidateSelectedRow(*it,rCells); + m_pDataWindow->Invalidate(rCells); + } + m_nRowSelected.clear(); + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRow(m_nCurRow, rCells); + } + else + { + //a region is already selected, prevRow is last selected row and the row above - nextRow - should be selected + int prevRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow); + int nextRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow-1); + if(prevRow>-1) + { + //if m_nCurRow isn't the upper one, can move up, otherwise not + if(m_nCurRow>0) + m_nCurRow--; + else + return bSuccess = true; + //if nextRow already selected, deselect it, otherwise select it + if(m_nRowSelected[nextRow] == m_nCurRow) + { + m_nRowSelected.erase(m_nRowSelected.begin()+prevRow); + invalidateSelectedRow(m_nCurRow+1, rCells); + } + else + { + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRow(m_nCurRow, rCells); + } + } + } + } + else + { + //if nothing is selected and the current row isn't the upper one + //select the current and one row above + //otherwise select only the upper row + if(m_nCurRow>0) + { + m_nRowSelected.push_back(m_nCurRow); + m_nCurRow--; + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRegion(m_nCurRow+1, m_nCurRow, rCells); + } + else + { + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRow(m_nCurRow, rCells); + } + } + m_pSelEngine->SetAnchor(TRUE); + m_nAnchor = m_nCurRow; + ensureVisible(m_nCurColumn, m_nCurRow, false); + bSuccess = true; + } + } + break; + case cursorSelectRowDown: + { + if(m_pSelEngine->GetSelectionMode() == NO_SELECTION) + bSuccess = false; + else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION) + { + bSuccess = false; + } + else + { + if(m_nRowSelected.size()>0) + { + //the anchor wasn't set -> a region is not selected, that's why clear all selection + //and select the current row + if(m_nAnchor==-1) + { + for(std::vector::iterator it=m_nRowSelected.begin(); + it!=m_nRowSelected.end();++it) + { + invalidateSelectedRow(*it,rCells); + m_pDataWindow->Invalidate(rCells); + } + m_nRowSelected.clear(); + m_nRowSelected.push_back(m_nCurRow); + invalidateSelectedRow(m_nCurRow, rCells); + } + else + { + //a region is already selected, prevRow is last selected row and the row beneath - nextRow - should be selected + int prevRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow); + int nextRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow+1); + if(prevRow>-1) + { + //if m_nCurRow isn't the last one, can move down, otherwise not + if(m_nCurRowSetAnchor(TRUE); + m_nAnchor = m_nCurRow; + ensureVisible(m_nCurColumn, m_nCurRow, false); + bSuccess = true; + } + } + break; + case cursorSelectRowAreaTop: + { + if(m_pSelEngine->GetSelectionMode() == NO_SELECTION) + bSuccess = false; + else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION) + bSuccess = false; + else + { + //select the region between the current and the upper row + RowPos iter = m_nCurRow; + invalidateSelectedRegion(m_nCurRow, 0, rCells); + //put the rows in vector + while(iter>=0) + { + if(!isRowSelected(m_nRowSelected, iter)) + m_nRowSelected.push_back(iter); + --iter; + } + m_nCurRow = 0; + m_nAnchor = m_nCurRow; + m_pSelEngine->SetAnchor(TRUE); + ensureVisible(m_nCurColumn, 0, false); + bSuccess = true; + } + } + break; + case cursorSelectRowAreaBottom: + { + if(m_pSelEngine->GetSelectionMode() == NO_SELECTION) + return bSuccess = false; + else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION) + return bSuccess = false; + //select the region between the current and the last row + RowPos iter = m_nCurRow; + invalidateSelectedRegion(m_nCurRow, m_nRowCount-1, rCells); + //put the rows in the vector + while(iter<=m_nRowCount) + { + if(!isRowSelected(m_nRowSelected, iter)) + m_nRowSelected.push_back(iter); + ++iter; + } + m_nCurRow = m_nRowCount-1; + m_nAnchor = m_nCurRow; + m_pSelEngine->SetAnchor(TRUE); + ensureVisible(m_nCurColumn, m_nRowCount, false); + bSuccess = true; + } + break; + default: + DBG_ERROR( "TableControl_Impl::dispatchAction: unsupported action!" ); + } + return bSuccess; + } + + //-------------------------------------------------------------------- + void TableControl_Impl::impl_ni_doSwitchCursor( bool _bShow ) + { + PTableRenderer pRenderer = !!m_pModel ? m_pModel->getRenderer() : PTableRenderer(); + if ( !!pRenderer ) + { + Rectangle aCellRect; + impl_getCellRect( m_nCurColumn, m_nCurRow, aCellRect ); + + // const StyleSettings& rStyle = m_rAntiImpl.GetSettings().GetStyleSettings(); + if ( _bShow ) + { + pRenderer->ShowCellCursor( *m_pDataWindow, aCellRect); + } + else + { + pRenderer->HideCellCursor( *m_pDataWindow, aCellRect); + } + } + } + + //-------------------------------------------------------------------- + void TableControl_Impl::impl_getCellRect( ColPos _nColumn, RowPos _nRow, Rectangle& _rCellRect ) const + { + DBG_CHECK_ME(); + + if ( !m_pModel + || ( COL_INVALID == _nColumn ) + || ( ROW_INVALID == _nRow ) + ) + { + _rCellRect.SetEmpty(); + return; + } + + DBG_ASSERT( ( _nColumn >= 0 ) && ( _nColumn < m_pModel->getColumnCount() ), + "TableControl_Impl::impl_getCellRect: invalid column index!" ); + DBG_ASSERT( ( _nRow >= 0 ) && ( _nRow < m_pModel->getRowCount() ), + "TableControl_Impl::impl_getCellRect: invalid row index!" ); + + Rectangle aAllCells; + impl_getAllVisibleCellsArea( aAllCells ); + + TableCellGeometry aCell( *this, aAllCells, _nColumn, _nRow ); + _rCellRect = aCell.getRect(); + } + //------------------------------------------------------------------------------- + RowPos TableControl_Impl::getCurrentRow(const Point& rPoint) + { + DBG_CHECK_ME(); + Rectangle rCellRect; + RowPos newRowPos = -2;//-1 is HeaderRow + ColPos newColPos = 0; + //To Do: when only row position needed, the second loop isn't necessary, Please proove this!!! + for(int i=0;i= rCellRect.Left() && rPoint.X() <= rCellRect.Right()) && rPoint.Y() >= rCellRect.Top() && rPoint.Y() <= rCellRect.Bottom()) + { + newRowPos = i; + newColPos = j; + if(newColPos == -1) + m_nCurColumn = 0; + else + m_nCurColumn = newColPos; + return newRowPos; + } + } + } + return newRowPos; + } + //------------------------------------------------------------------------------- + void TableControl_Impl::setCursorAtCurrentCell(const Point& rPoint) + { + DBG_CHECK_ME(); + hideCursor(); + Rectangle rCellRect; + RowPos newRowPos = -2;//-1 is HeaderRow + ColPos newColPos = 0; + //To Do: when only row position needed, the second loop isn't necessary, Please proove this!!! + for(int i=0;i= rCellRect.Left() && rPoint.X() <= rCellRect.Right()) && rPoint.Y() >= rCellRect.Top() && rPoint.Y() <= rCellRect.Bottom()) + { + newRowPos = i; + m_nCurRow = newRowPos; + newColPos = j; + if(newColPos == -1) + m_nCurColumn = 0; + else + m_nCurColumn = newColPos; + } + } + } + showCursor(); + } + + //------------------------------------------------------------------------------- + void TableControl_Impl::invalidateSelectedRegion(RowPos _nPrevRow, RowPos _nCurRow, Rectangle& _rCellRect) + { + DBG_CHECK_ME(); + Rectangle aAllCells; + //get the visible area of the table control and set the Left and right border of the region to be repainted + impl_getAllVisibleCellsArea( aAllCells ); + _rCellRect.Left() = aAllCells.Left(); + _rCellRect.Right() = aAllCells.Right(); + Rectangle rCells; + //if only one row is selected + if(_nPrevRow == _nCurRow) + { + impl_getCellRect(m_nCurColumn,_nCurRow,rCells); + _rCellRect.Top()=rCells.Top(); + _rCellRect.Bottom()=rCells.Bottom(); + } + //if the region is above the current row + else if(_nPrevRow < _nCurRow ) + { + impl_getCellRect(m_nCurColumn,_nPrevRow,rCells); + _rCellRect.Top()=rCells.Top(); + impl_getCellRect(m_nCurColumn,_nCurRow,rCells); + _rCellRect.Bottom()=rCells.Bottom(); + } + //if the region is beneath the current row + else + { + impl_getCellRect(m_nCurColumn,_nCurRow,rCells); + _rCellRect.Top()=rCells.Top(); + impl_getCellRect(m_nCurColumn,_nPrevRow,rCells); + _rCellRect.Bottom()=rCells.Bottom(); + } + m_pDataWindow->Invalidate(_rCellRect); + } + + //------------------------------------------------------------------------------- + //To Do: not really needed, because in method above one row can be invalidate. Please Prove this!!! + void TableControl_Impl::invalidateSelectedRow(RowPos _nCurRow, Rectangle& _rCellRect) + { + DBG_CHECK_ME(); + Rectangle aAllCells; + impl_getAllVisibleCellsArea( aAllCells ); + _rCellRect.Left() = aAllCells.Left(); + _rCellRect.Right() = aAllCells.Right(); + Rectangle rCells; + impl_getCellRect(m_nCurColumn,_nCurRow,rCells); + _rCellRect.Top()=rCells.Top(); + _rCellRect.Bottom()=rCells.Bottom(); + m_pDataWindow->Invalidate(_rCellRect); + } + //------------------------------------------------------------------------------- + //this method is to be called, when a new row is added + void TableControl_Impl::invalidateRow(RowPos _nRowPos, Rectangle& _rCellRect) + { + //DBG_CHECK_ME(); + TempHideCursor aHideCursor( *this ); + impl_getAllVisibleCellsArea( _rCellRect ); + TableRowGeometry _rRow( *this, _rCellRect, _nRowPos); + impl_ni_updateScrollbars(); + m_pDataWindow->Invalidate(_rRow.getRect()); + } + + //------------------------------------------------------------------------------- + std::vector TableControl_Impl::getSelectedRows() + { + return m_nRowSelected; + } + + void TableControl_Impl::removeSelectedRow(RowPos _nRowPos) + { + int i =0; + //if the row is selected, remove it from the selection vector + if(isRowSelected(m_nRowSelected, _nRowPos)) + { + if(m_nRowSelected.size()>1) + m_nRowSelected.erase(m_nRowSelected.begin()+_nRowPos); + else + m_nRowSelected.clear(); + } + //after removing a row, row positions must be updated, so selected rows could stay selected + if(m_nRowSelected.size()>1) + { + for(std::vector::iterator it=m_nRowSelected.begin();it!=m_nRowSelected.end();++it) + { + if(*it > _nRowPos) + m_nRowSelected[i]=*it-1; + ++i; + } + } + if(_nRowPos == 0) + m_nCurRow = 0; + else + m_nCurRow = _nRowPos-1; + } + //------------------------------------------------------------------------------- + void TableControl_Impl::invalidateRows(RowPos _nRowStart, Rectangle& _rCellRect) + { + //DBG_CHECK_ME(); + (void)_nRowStart; + (void)_rCellRect; + /*TempHideCursor aHideCursor(*this); + Rectangle aAllCells; + impl_getAllVisibleCellsArea( aAllCells ); + TableRowGeometry _rRow( *this, aAllCells, _nRowStart); + _rCellRect = _rRow.getRect(); + Rectangle rCells1; + impl_getCellRect(m_nCurColumn,m_nRowCount,rCells1); + _rCellRect.Bottom() = rCells1.Bottom();*/ + /*if(_nRowStart != _nRowEnd) + { + TableRowGeometry _rRow( *this, aAllCells, _nRowEnd); + _rCellRect.Bottom() = _rRow.getRect().Bottom(); + } + */ + //_rCellRect.Right() = aAllCells.Right(); + //_rCellRect.Left() = aAllCells.Left(); + //Rectangle rCells1; + //impl_getCellRect(m_nCurColumn,_nRowStart,rCells1); + //_rCellRect.Top()=rCells1.Top(); + //Rectangle rCells2; + //impl_getCellRect(m_nCurColumn,_nRowEnd,rCells2); + //_rCellRect.Bottom()=rCells2.Bottom(); + impl_ni_updateScrollbars(); + //m_pDataWindow->Invalidate(_rCellRect); + m_pDataWindow->Invalidate(); + } + + + //------------------------------------------------------------------------------- + bool TableControl_Impl::isClickInVisibleArea(const Point& rPoint) + { + DBG_CHECK_ME(); + long nScrollbarMetrics = m_rAntiImpl.GetSettings().GetStyleSettings().GetScrollBarSize(); + //clickable area is in the visible table control area without the scrollbars + Rectangle aDataCellPlayground( Point( 0, 0 ), m_rAntiImpl.GetOutputSizePixel() ); + aDataCellPlayground.Top() = m_nColHeaderHeightPixel; + aDataCellPlayground.Right() -= nScrollbarMetrics; + aDataCellPlayground.Bottom() -= nScrollbarMetrics; + if((rPoint.X() >= aDataCellPlayground.Left() && rPoint.X() <= aDataCellPlayground.Right()) && rPoint.Y() >= aDataCellPlayground.Top() && rPoint.Y() <= aDataCellPlayground.Bottom()) + { + return true; + } + else + return false; + } + //-------------------------------------------------------------------- + TableSize TableControl_Impl::impl_getVisibleRows( bool _bAcceptPartialRow ) const + { + DBG_CHECK_ME(); + + DBG_ASSERT( m_pDataWindow, "TableControl_Impl::impl_getVisibleRows: no data window!" ); + + return lcl_getRowsFittingInto( + m_pDataWindow->GetOutputSizePixel().Height() - m_nColHeaderHeightPixel, + m_nRowHeightPixel, + _bAcceptPartialRow + ); + } + + //-------------------------------------------------------------------- + TableSize TableControl_Impl::impl_getVisibleColumns( bool _bAcceptPartialRow ) const + { + DBG_CHECK_ME(); + + DBG_ASSERT( m_pDataWindow, "TableControl_Impl::impl_getVisibleColumns: no data window!" ); + + return lcl_getColumnsVisibleWithin( + Rectangle( Point( 0, 0 ), m_pDataWindow->GetOutputSizePixel() ), + m_nLeftColumn, + *this, + _bAcceptPartialRow + ); + } + + //-------------------------------------------------------------------- + bool TableControl_Impl::goTo( ColPos _nColumn, RowPos _nRow ) + { + DBG_CHECK_ME(); + + // TODO: give veto listeners a chance + + if ( ( _nColumn < -1 ) || ( _nColumn >= m_nColumnCount ) + || ( _nRow < -1 ) || ( _nRow >= m_nRowCount ) + ) + return false; + + TempHideCursor aHideCursor( *this ); + m_nCurColumn = _nColumn; + m_nCurRow = _nRow; + + // ensure that the new cell is visible + ensureVisible( m_nCurColumn, m_nCurRow, false ); + + // TODO: invalidate all and new column/row header, if present, to enforce + // re-painting them + //if(!m_nRowSelected.empty()) + //{ + // Rectangle rCells; + // for(std::vector::iterator it=m_nRowSelected.begin(); + // it!=m_nRowSelected.end();++it) + // { + // invalidateSelectedRow(*it,rCells); + // } + // m_nRowSelected.clear(); + //} + // TODO: notify listeners about new position + return true; + } + + //-------------------------------------------------------------------- + void TableControl_Impl::ensureVisible( ColPos _nColumn, RowPos _nRow, bool _bAcceptPartialVisibility ) + { + DBG_CHECK_ME(); + DBG_ASSERT( ( _nColumn >= 0 ) && ( _nColumn < m_nColumnCount ) + && ( _nRow >= 0 ) && ( _nRow < m_nRowCount ), + "TableControl_Impl::ensureVisible: invalid coordinates!" ); + + TempHideCursor aHideCursor( *this ); + + if ( _nColumn < m_nLeftColumn ) + impl_ni_ScrollColumns( _nColumn - m_nLeftColumn ); + else + { + TableSize nVisibleColumns = impl_getVisibleColumns( _bAcceptPartialVisibility ); + if ( _nColumn > m_nLeftColumn + nVisibleColumns - 1 ) + { + impl_ni_ScrollColumns( _nColumn - ( m_nLeftColumn + nVisibleColumns - 1 ) ); + // TODO: since not all columns have the same width, this might in theory result + // in the column still not being visible. + } + } + + if ( _nRow < m_nTopRow ) + impl_ni_ScrollRows( _nRow - m_nTopRow ); + else + { + TableSize nVisibleRows = impl_getVisibleRows( _bAcceptPartialVisibility ); + if ( _nRow > m_nTopRow + nVisibleRows - 1 ) + impl_ni_ScrollRows( _nRow - ( m_nTopRow + nVisibleRows - 1 ) ); + } + } + + //-------------------------------------------------------------------- + TableSize TableControl_Impl::impl_ni_ScrollRows( TableSize _nRowDelta ) + { + // compute new top row + RowPos nNewTopRow = + ::std::max( + ::std::min( (RowPos)( m_nTopRow + _nRowDelta ), (RowPos)( m_nRowCount - 1 ) ), + (RowPos)0 + ); + + RowPos nOldTopRow = m_nTopRow; + m_nTopRow = nNewTopRow; + + // if updates are enabled currently, scroll the viewport + if ( m_rAntiImpl.IsUpdateMode() && ( m_nTopRow != nOldTopRow ) ) + { + DBG_SUSPEND_INV( INV_SCROLL_POSITION ); + TempHideCursor aHideCursor( *this ); + // TODO: call a onStartScroll at our listener (or better an own onStartScroll, + // which hides the cursor and then calls the listener) + // Same for onEndScroll + + // scroll the view port, if possible + long nPixelDelta = m_nRowHeightPixel * ( m_nTopRow - nOldTopRow ); + + Rectangle aDataArea( Point( 0, m_nColHeaderHeightPixel ), m_pDataWindow->GetOutputSizePixel() ); + + if ( m_pDataWindow->GetBackground().IsScrollable() + && abs( nPixelDelta ) < aDataArea.GetHeight() + ) + { + m_pDataWindow->Scroll( 0, (long)-nPixelDelta, aDataArea, SCROLL_CLIP | SCROLL_UPDATE ); + } + else + m_pDataWindow->Invalidate( INVALIDATE_UPDATE ); + + // update the position at the vertical scrollbar + m_pVScroll->SetThumbPos( m_nTopRow ); + } + + return (TableSize)( m_nTopRow - nOldTopRow ); + } + + //-------------------------------------------------------------------- + TableSize TableControl_Impl::impl_ni_ScrollColumns( TableSize _nColumnDelta ) + { + // compute new left column + ColPos nNewLeftColumn = + ::std::max( + ::std::min( (ColPos)( m_nLeftColumn + _nColumnDelta ), (ColPos)( m_nColumnCount - 1 ) ), + (ColPos)0 + ); + + ColPos nOldLeftColumn = m_nLeftColumn; + m_nLeftColumn = nNewLeftColumn; + + // if updates are enabled currently, scroll the viewport + if ( m_rAntiImpl.IsUpdateMode() && ( m_nLeftColumn != nOldLeftColumn ) ) + { + DBG_SUSPEND_INV( INV_SCROLL_POSITION ); + TempHideCursor aHideCursor( *this ); + // TODO: call a onStartScroll at our listener (or better an own onStartScroll, + // which hides the cursor and then calls the listener) + // Same for onEndScroll + + // scroll the view port, if possible + Rectangle aDataArea( Point( m_nRowHeaderWidthPixel, 0 ), m_pDataWindow->GetOutputSizePixel() ); + + long nPixelDelta = + ( m_nLeftColumn > 0 ? m_aAccColumnWidthsPixel[ m_nLeftColumn - 1 ] : 0 ) + - ( nOldLeftColumn > 0 ? m_aAccColumnWidthsPixel[ nOldLeftColumn - 1 ] : 0 ); + + if ( m_pDataWindow->GetBackground().IsScrollable() + && abs( nPixelDelta ) < aDataArea.GetWidth() + ) + { + m_pDataWindow->Scroll( (long)-nPixelDelta, 0, aDataArea, SCROLL_CLIP | SCROLL_UPDATE ); + } + else + m_pDataWindow->Invalidate( INVALIDATE_UPDATE ); + + // update the position at the horizontal scrollbar + m_pHScroll->SetThumbPos( m_nLeftColumn ); + } + + return (TableSize)( m_nLeftColumn - nOldLeftColumn ); + } + + SelectionEngine* TableControl_Impl::getSelEngine() + { + return m_pSelEngine; + } + TableDataWindow* TableControl_Impl::getDataWindow() + { + return m_pDataWindow; + } + BOOL TableControl_Impl::isRowSelected(::std::vector selectedRows, RowPos current) + { + for(::std::vector::iterator it=selectedRows.begin(); + it!=selectedRows.end();++it) + { + if(*it == current) + return TRUE; + } + return FALSE; + } + + int TableControl_Impl::getRowSelectedNumber(::std::vector selectedRows, RowPos current) + { + int pos = -1; + int i = 0; + for(std::vector::iterator it=selectedRows.begin();it!=selectedRows.end();++it) + { + if(*it == current) + return pos = i; + ++i; + } + return pos; + } + + void TableControl_Impl::setCellContent(CellEntryType* pCellEntryType) + { + (void)pCellEntryType; + } + + //-------------------------------------------------------------------- + IMPL_LINK( TableControl_Impl, OnScroll, ScrollBar*, _pScrollbar ) + { + DBG_ASSERT( ( _pScrollbar == m_pVScroll ) || ( _pScrollbar == m_pHScroll ), + "TableControl_Impl::OnScroll: where did this come from?" ); + + if ( _pScrollbar == m_pVScroll ) + impl_ni_ScrollRows( _pScrollbar->GetDelta() ); + else + impl_ni_ScrollColumns( _pScrollbar->GetDelta() ); + + return 0L; + } + + //--------------------------------------------------------------------------------------- + TableFunctionSet::TableFunctionSet(TableControl_Impl* _pTableControl): + m_pTableControl( _pTableControl) + ,m_nCurrentRow (-2) + { + } + + TableFunctionSet::~TableFunctionSet() + { + } + + void TableFunctionSet::BeginDrag() + { + } + + void TableFunctionSet::CreateAnchor() + { + m_pTableControl->m_nAnchor = m_pTableControl->m_nCurRow; + } + + void TableFunctionSet::DestroyAnchor() + { + m_pTableControl->m_nAnchor = -1; + } + + BOOL TableFunctionSet::SetCursorAtPoint(const Point& rPoint, BOOL bDontSelectAtCursor) + { + BOOL bHandled = FALSE; + Rectangle rCells; + //curRow is the row where the mouse click happened, m_nCurRow is the last selected row, before the mouse click + RowPos curRow = m_pTableControl->getCurrentRow(rPoint); + if(curRow == -2) + return FALSE; + if( bDontSelectAtCursor ) + { + if(m_pTableControl->m_nRowSelected.size()>1) + m_pTableControl->m_pSelEngine->AddAlways(TRUE); + bHandled = TRUE; + } + else if(m_pTableControl->m_nAnchor == m_pTableControl->m_nCurRow) + { + //selecting region, + int diff = m_pTableControl->m_nCurRow - curRow; + //bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor); + /* if(!isAlreadySelected && m_nCurrentRow != m_pTableControl->m_nCurRow) + m_pTableControl->m_nRowSelected.push_back(m_nAnchor);*/ + //selected region lies above the last selection + if( diff >= 0) + { + //put selected rows in vector + while(m_pTableControl->m_nAnchor>=curRow) + { + bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor); + //if row isn't selected, put it in vector, otherwise don't put it there, because it will be twice there + if(!isAlreadySelected) + m_pTableControl->m_nRowSelected.push_back(m_pTableControl->m_nAnchor); + m_pTableControl->m_nAnchor--; + diff--; + } + m_pTableControl->m_nAnchor++; + } + //selected region lies beneath the last selected row + else + { + while(m_pTableControl->m_nAnchor<=curRow) + { + bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor); + if(!isAlreadySelected) + m_pTableControl->m_nRowSelected.push_back(m_pTableControl->m_nAnchor); + m_pTableControl->m_nAnchor++; + diff++; + } + m_pTableControl->m_nAnchor--; + } + m_pTableControl->invalidateSelectedRegion(m_pTableControl->m_nCurRow, curRow, rCells); + bHandled = TRUE; + } + //no region selected + else + { + if(m_pTableControl->m_nRowSelected.empty()) + { + m_pTableControl->m_nRowSelected.push_back(curRow); + } + else + { + if(m_pTableControl->m_pSelEngine->GetSelectionMode()==SINGLE_SELECTION) + { + DeselectAll(); + m_pTableControl->m_nRowSelected.push_back(curRow); + } + else + { + bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, curRow); + if(!isAlreadySelected) + m_pTableControl->m_nRowSelected.push_back(curRow); + } + } + if(m_pTableControl->m_nRowSelected.size()>1 && m_pTableControl->m_pSelEngine->GetSelectionMode()!=SINGLE_SELECTION) + m_pTableControl->m_pSelEngine->AddAlways(TRUE); + m_pTableControl->invalidateSelectedRow(curRow,rCells); + bHandled = TRUE; + } + m_pTableControl->m_nCurRow = curRow; + m_pTableControl->ensureVisible(m_pTableControl->m_nCurColumn,m_pTableControl->m_nCurRow,false); + return bHandled; + } + + BOOL TableFunctionSet::IsSelectionAtPoint( const Point& rPoint ) + { + m_pTableControl->m_pSelEngine->AddAlways(FALSE); + if(m_pTableControl->m_nRowSelected.empty()) + return FALSE; + else + { + RowPos curRow = m_pTableControl->getCurrentRow(rPoint); + m_pTableControl->m_nAnchor = -1; + bool selected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, curRow); + m_nCurrentRow = curRow; + return selected; + } + } + + void TableFunctionSet::DeselectAtPoint( const Point& rPoint ) + { + (void)rPoint; + long pos = 0; + long i = 0; + Rectangle rCells; + for(std::vector::iterator it=m_pTableControl->m_nRowSelected.begin(); + it!=m_pTableControl->m_nRowSelected.end();++it) + { + if(*it == m_nCurrentRow) + { + pos = i; + m_pTableControl->invalidateSelectedRow(*it,rCells); + } + ++i; + } + m_pTableControl->m_nRowSelected.erase(m_pTableControl->m_nRowSelected.begin()+pos); + } + void TableFunctionSet::DeselectAll() + { + if(!m_pTableControl->m_nRowSelected.empty()) + { + Rectangle rCells; + for(std::vector::iterator it=m_pTableControl->m_nRowSelected.begin(); + it!=m_pTableControl->m_nRowSelected.end();++it) + { + m_pTableControl->invalidateSelectedRow(*it,rCells); + } + m_pTableControl->m_nRowSelected.clear(); + } + } + +//........................................................................ +} } // namespace svt::table +//........................................................................ diff --git a/svtools/source/table/tablecontrol_impl.hxx b/svtools/source/table/tablecontrol_impl.hxx new file mode 100644 index 000000000000..410bc8b4c3a1 --- /dev/null +++ b/svtools/source/table/tablecontrol_impl.hxx @@ -0,0 +1,342 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_TABLECONTROL_IMPL_HXX +#define SVTOOLS_TABLECONTROL_IMPL_HXX + +#ifndef SVTOOLS_INC_TABLE_TABLEMODEL_HXX +#include +#endif + +#ifndef SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX +#include +#endif + +#include +#include +#include + +class ScrollBar; +class ScrollBarBox; + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + typedef ::std::vector< long > ArrayOfLong; + + class TableControl; + class TableDataWindow; + class TableFunctionSet; + + //==================================================================== + //= TableControl_Impl + //==================================================================== + class TableControl_Impl : public IAbstractTableControl + { + friend class TableGeometry; + friend class TableRowGeometry; + friend class TableColumnGeometry; + friend class SuspendInvariants; + friend class TableFunctionSet; + private: + /// the control whose impl-instance we implemnt + TableControl& m_rAntiImpl; + /// the model of the table control + PTableModel m_pModel; + /// the input handler to use, usually the input handler as provided by ->m_pModel + PTableInputHandler m_pInputHandler; + /// the widths of the single columns, measured in pixel + ArrayOfLong m_aColumnWidthsPixel; + /** the accumulated widths of the single columns, i.e. their exclusive right borders, + counting the space for a possible row header column + */ + ArrayOfLong m_aAccColumnWidthsPixel; + /// the height of a single row in the table, measured in pixels + long m_nRowHeightPixel; + /// the height of the column header row in the table, measured in pixels + long m_nColHeaderHeightPixel; + /// the width of the row header column in the table, measured in pixels + long m_nRowHeaderWidthPixel; + + /// the number of columns in the table control. Cached model value. + TableSize m_nColumnCount; + /// the number of rows in the table control. Cached model value. + TableSize m_nRowCount; + + ColPos m_nCurColumn; + RowPos m_nCurRow; + ColPos m_nLeftColumn; + RowPos m_nTopRow; + + sal_Int32 m_nCursorHidden; + + /** the window to contain all data content, including header bars + + The window's upper left corner is at position (0,0), relative to the + table control, which is the direct parent of the data window. + */ + TableDataWindow* m_pDataWindow; + /// the vertical scrollbar, if any + ScrollBar* m_pVScroll; + /// the horizontal scrollbar, if any + ScrollBar* m_pHScroll; + ScrollBarBox* m_pScrollCorner; + //selection engine - for determining selection range, e.g. single, multiple + SelectionEngine* m_pSelEngine; + //vector which contains the selected rows + std::vector m_nRowSelected; + //part of selection engine + TableFunctionSet* m_pTableFunctionSet; + //part of selection engine + RowPos m_nAnchor; + + + +#if DBG_UTIL + #define INV_SCROLL_POSITION 1 + /** represents a bitmask of invariants to check + + Actually, impl_checkInvariants checks more invariants than denoted in this + bit mask, but only those present here can be disabled temporarily. + */ + sal_Int32 m_nRequiredInvariants; +#endif + + public: + + + PTableModel getModel() const; + void setModel( PTableModel _pModel ); + + inline const PTableInputHandler& getInputHandler() const { return m_pInputHandler; } + + inline ColPos getCurColumn() const { return m_nCurColumn; } + inline RowPos getCurRow() const { return m_nCurRow; } + inline void setCurRow(RowPos curRow){ m_nCurRow = curRow; } + inline RowPos getTopRow() const { return m_nTopRow; } + + inline long getColHeaderHightPixel() const { return m_nColHeaderHeightPixel; } + + inline const TableControl& getAntiImpl() const { return m_rAntiImpl; } + inline TableControl& getAntiImpl() { return m_rAntiImpl; } + void setCellContent(CellEntryType* pCellEntryType); + + public: + TableControl_Impl( TableControl& _rAntiImpl ); + ~TableControl_Impl(); + +#if DBG_UTIL + const sal_Char* impl_checkInvariants() const; +#endif + /** to be called when the anti-impl instance has been resized + */ + void onResize(); + + /** paints the table control content which intersects with the given rectangle + */ + void doPaintContent( const Rectangle& _rUpdateRect ); + + /** moves the cursor to the cell with the given coordinates + + To ease the caller's code, the coordinates must not necessarily denote a + valid position. If they don't, will be returned. + */ + bool goTo( ColPos _nColumn, RowPos _nRow ); + + /** ensures that the given coordinate is visible + @param _nColumn + the column position which should be visible. Must be non-negative, and smaller + than the column count. + @param _nRow + the row position which should be visibleMust be non-negative, and smaller + than the row count. + @param _bAcceptPartialVisibility + if it's okay that the given cooordinate is only partially visible + */ + void ensureVisible( ColPos _nColumn, RowPos _nRow, bool _bAcceptPartialVisibility ); + /** returns the row, which contains the input point*/ + RowPos getCurrentRow (const Point& rPoint); + + void setCursorAtCurrentCell(const Point& rPoint); + /** proves whether the vector with the selected rows contains the current row*/ + BOOL isRowSelected(::std::vector selectedRows, RowPos current); + /** returns the position of the current row in the selecttion vector */ + int getRowSelectedNumber(::std::vector selectedRows, RowPos current); + /** _rCellRect contains the region, which should be invalidate after some action e.g. selectiong row*/ + void invalidateSelectedRegion(RowPos _nPrevRow, RowPos _nCurRow, Rectangle& _rCellRect ); + /** _rCellRect contains the region, which should be invalidate after some action e.g. selectiong row*/ + //vielleicht kann man mit den anderen verschmelzen, mit einer Überprüfung ob prev==curr? + void invalidateSelectedRow( RowPos _nCurRow, Rectangle& _rCellRect ); + /** to be called when a new row is added to the control*/ + void invalidateRow(RowPos _nRowPos, Rectangle& _rCellRect ); + /** returns the vector, which contains the selected rows*/ + std::vector getSelectedRows(); + /** updates the vector, which contains the selected rows after removing the row nRowPos*/ + void removeSelectedRow(RowPos _nRowPos); + void invalidateRows(RowPos _nRowStart, Rectangle& _rCellRect ); + //virtual void DoubleClick(); + + // IAbstractTableControl + virtual void hideCursor(); + virtual void showCursor(); + virtual bool dispatchAction( TableControlAction _eAction ); + virtual bool isClickInVisibleArea(const Point& rPoint); + virtual SelectionEngine* getSelEngine(); + + TableDataWindow* getDataWindow(); + + private: + /** toggles the cursor visibility + + The method is not bound to the classes public invariants, as it's used in + situations where the they must not necessarily be fullfilled. + */ + void impl_ni_doSwitchCursor( bool _bOn ); + + /** retrieves the area occupied by the totality of (at least partially) visible cells + + The returned area includes row and column headers. Also, it takes into + account the the fact that there might be less columns than would normally + find room in the control. + + As a result of respecting the partial visibility of rows and columns, + the returned area might be larger than the data window's output size. + */ + void impl_getAllVisibleCellsArea( Rectangle& _rCellArea ) const; + + /** retrieves the area occupied by all (at least partially) visible data cells. + + Effectively, the returned area is the same as returned by ->impl_getAllVisibleCellsArea, + minus the row and column header areas. + */ + void impl_getAllVisibleDataCellArea( Rectangle& _rCellArea ) const; + + /** returns the number of visible rows. + + @param _bAcceptPartialRow + specifies whether a possible only partially visible last row is + counted, too. + */ + TableSize impl_getVisibleRows( bool _bAcceptPartialRow ) const; + + /** returns the number of visible columns + + The value may change with different horizontal scroll positions, as + different columns have different widths. For instance, if your control is + 100 pixels wide, and has three columns of width 50, 50, 100, respectively, + then this method will return either "2" or "1", depending on which column + is the first visible one. + + @param _bAcceptPartialRow + specifies whether a possible only partially visible last row is + counted, too. + */ + TableSize impl_getVisibleColumns( bool _bAcceptPartialRow ) const; + + /** determines the rectangle occupied by the given cell + */ + void impl_getCellRect( ColPos _nColumn, RowPos _nRow, Rectangle& _rCellRect ) const; + + /** updates all cached model values + + The method is not bound to the classes public invariants, as it's used in + situations where the they must not necessarily be fullfilled. + */ + void impl_ni_updateCachedModelValues(); + + /** updates ->m_aColumnWidthsPixel with the current pixel widths of all model columns + + The method takes into account the current zoom factor and map mode of the table + control, plus any possible COLWIDTH_FIT_TO_VIEW widths in the model columns. + + The method is not bound to the classes public invariants, as it's used in + situations where the they must not necessarily be fullfilled. + */ + void impl_ni_updateColumnWidths(); + + /** updates the scrollbars of the control + + The method is not bound to the classes public invariants, as it's used in + situations where the they must not necessarily be fullfilled. + + This includes both the existence of the scrollbars, and their + state. + */ + void impl_ni_updateScrollbars(); + + /** scrolls the view by the given number of rows + + The method is not bound to the classes public invariants, as it's used in + situations where the they must not necessarily be fullfilled. + + @return + the number of rows by which the viewport was scrolled. This may differ + from the given numbers to scroll in case the begin or the end of the + row range were reached. + */ + TableSize impl_ni_ScrollRows( TableSize _nRowDelta ); + + /** scrolls the view by the given number of columns + + The method is not bound to the classes public invariants, as it's used in + situations where the they must not necessarily be fullfilled. + + @return + the number of columns by which the viewport was scrolled. This may differ + from the given numbers to scroll in case the begin or the end of the + column range were reached. + */ + TableSize impl_ni_ScrollColumns( TableSize _nRowDelta ); + + DECL_LINK( OnScroll, ScrollBar* ); + }; + //see seleng.hxx, seleng.cxx, FunctionSet overwritables, part of selection engine + class TableFunctionSet : public FunctionSet + { + friend class TableDataWindow; + private: + TableControl_Impl* m_pTableControl; + RowPos m_nCurrentRow; + public: + TableFunctionSet(TableControl_Impl* _pTableControl); + virtual ~TableFunctionSet(); + + virtual void BeginDrag(); + virtual void CreateAnchor(); + virtual void DestroyAnchor(); + virtual BOOL SetCursorAtPoint(const Point& rPoint, BOOL bDontSelectAtCursor); + virtual BOOL IsSelectionAtPoint( const Point& rPoint ); + virtual void DeselectAtPoint( const Point& rPoint ); + virtual void DeselectAll(); + }; + + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_TABLECONTROL_IMPL_HXX diff --git a/svtools/source/table/tabledatawindow.cxx b/svtools/source/table/tabledatawindow.cxx new file mode 100644 index 000000000000..71a313bb2e00 --- /dev/null +++ b/svtools/source/table/tabledatawindow.cxx @@ -0,0 +1,81 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + +#include "svtools/table/tablecontrol.hxx" +#include "svtools/table/tabledatawindow.hxx" +#include "tablecontrol_impl.hxx" + +//........................................................................ +namespace svt { namespace table +{ + class TableControl_Impl; +//........................................................................ + + //==================================================================== + //= TableDataWindow + //==================================================================== + //-------------------------------------------------------------------- + TableDataWindow::TableDataWindow( TableControl_Impl& _rTableControl ) + :Window( &_rTableControl.getAntiImpl() ) + ,m_rTableControl ( _rTableControl ) + { + Color backgroundColor = m_rTableControl.getAntiImpl().GetSettings().GetStyleSettings().GetFieldColor(); + SetBackground( backgroundColor ); + SetControlBackground( backgroundColor ); + } + + //-------------------------------------------------------------------- + void TableDataWindow::Paint( const Rectangle& rUpdateRect ) + { + m_rTableControl.doPaintContent( rUpdateRect ); + } + void TableDataWindow::MouseMove( const MouseEvent& rMEvt ) + { + if ( !m_rTableControl.getInputHandler()->MouseMove( m_rTableControl, rMEvt ) ) + Window::MouseMove( rMEvt ); + } + void TableDataWindow::MouseButtonDown( const MouseEvent& rMEvt ) + { + if ( !m_rTableControl.getInputHandler()->MouseButtonDown( m_rTableControl, rMEvt ) ) + Window::MouseButtonDown( rMEvt ); + else + m_aMouseButtonDownHdl.Call( (MouseEvent*) &rMEvt); + m_rTableControl.getAntiImpl().LoseFocus(); + } + void TableDataWindow::MouseButtonUp( const MouseEvent& rMEvt ) + { + if ( !m_rTableControl.getInputHandler()->MouseButtonUp( m_rTableControl, rMEvt ) ) + Window::MouseButtonUp( rMEvt ); + else + m_aMouseButtonUpHdl.Call( (MouseEvent*) &rMEvt); + m_rTableControl.getAntiImpl().GetFocus(); + } + +//........................................................................ +} } // namespace svt::table +//........................................................................ diff --git a/svtools/source/table/tablegeometry.cxx b/svtools/source/table/tablegeometry.cxx new file mode 100644 index 000000000000..569e14c61726 --- /dev/null +++ b/svtools/source/table/tablegeometry.cxx @@ -0,0 +1,130 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + + +#include "tablegeometry.hxx" +#include "tablecontrol_impl.hxx" + +#include + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + //==================================================================== + //= TableRowGeometry + //==================================================================== + //-------------------------------------------------------------------- + TableRowGeometry::TableRowGeometry( const TableControl_Impl& _rControl, const Rectangle& _rBoundaries, + RowPos _nRow ) + :TableGeometry( _rControl, _rBoundaries ) + ,m_nRowPos( _nRow ) + { + if ( m_nRowPos == ROW_COL_HEADERS ) + { + DBG_ASSERT( m_rControl.m_pModel->hasColumnHeaders(), + "TableRowGeometry::TableRowGeometry: why asking for the geoemtry of the non-existent column header row?" ); + m_aRect.Top() = 0; + m_aRect.Bottom() = m_rControl.m_nColHeaderHeightPixel - 1; + } + else + { + if ( ( m_nRowPos >= m_rControl.m_nTopRow ) && ( m_nRowPos < m_rControl.m_pModel->getRowCount() ) ) + { + m_aRect.Top() = m_rControl.m_nColHeaderHeightPixel + ( m_nRowPos - m_rControl.m_nTopRow ) * m_rControl.m_nRowHeightPixel; + m_aRect.Bottom() = m_aRect.Top() + m_rControl.m_nRowHeightPixel - 1; + } + else + m_aRect.SetEmpty(); + } + } + + //-------------------------------------------------------------------- + bool TableRowGeometry::moveDown() + { + if ( ++m_nRowPos < m_rControl.m_pModel->getRowCount() ) + m_aRect.Move( 0, m_rControl.m_nRowHeightPixel ); + else + m_aRect.SetEmpty(); + return isValid(); + } + + //==================================================================== + //= TableColumnGeometry + //==================================================================== + //-------------------------------------------------------------------- + TableColumnGeometry::TableColumnGeometry( const TableControl_Impl& _rControl, const Rectangle& _rBoundaries, + ColPos _nCol ) + :TableGeometry( _rControl, _rBoundaries ) + ,m_nColPos( _nCol ) + { + if ( m_nColPos == COL_ROW_HEADERS ) + { + DBG_ASSERT( m_rControl.m_pModel->hasRowHeaders(), + "TableColumnGeometry::TableColumnGeometry: why asking for the geoemtry of the non-existent row header column?" ); + m_aRect.Left() = 0; + m_aRect.Right() = m_rControl.m_nRowHeaderWidthPixel - 1; + } + else + { + ColPos nLeftColumn = m_rControl.m_nLeftColumn; + if ( ( m_nColPos >= nLeftColumn ) && ( m_nColPos < (ColPos)m_rControl.m_aColumnWidthsPixel.size() ) ) + { + m_aRect.Left() = m_rControl.m_nRowHeaderWidthPixel; + // TODO: take into account any possibly frozen columns + + for ( ColPos col = nLeftColumn; col < m_nColPos; ++col ) + m_aRect.Left() += m_rControl.m_aColumnWidthsPixel[ col ]; + m_aRect.Right() = m_aRect.Left() + m_rControl.m_aColumnWidthsPixel[ m_nColPos ] - 1; + } + else + m_aRect.SetEmpty(); + } + } + + //-------------------------------------------------------------------- + bool TableColumnGeometry::moveRight() + { + DBG_ASSERT( m_nColPos != COL_ROW_HEADERS, "TableColumnGeometry::moveRight: cannot move the row header column!" ); + // what would be COL_ROW_HEADERS + 1? + + if ( ++m_nColPos < (ColPos)m_rControl.m_aColumnWidthsPixel.size() ) + { + m_aRect.Left() = m_aRect.Right() + 1; + m_aRect.Right() += m_rControl.m_aColumnWidthsPixel[ m_nColPos ]; + } + else + m_aRect.SetEmpty(); + + return isValid(); + } + +//........................................................................ +} } // namespace svt::table +//........................................................................ diff --git a/svtools/source/table/tablegeometry.hxx b/svtools/source/table/tablegeometry.hxx new file mode 100644 index 000000000000..18b40c1e3781 --- /dev/null +++ b/svtools/source/table/tablegeometry.hxx @@ -0,0 +1,161 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2009 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVTOOLS_TABLEGEOMETRY_HXX +#define SVTOOLS_TABLEGEOMETRY_HXX + +#ifndef SVTOOLS_INC_TABLE_TABLETYPES_HXX +#include +#endif + +#ifndef _SV_GEN_HXX +#include +#endif + +//........................................................................ +namespace svt { namespace table +{ +//........................................................................ + + class TableControl_Impl; + + //==================================================================== + //= TableGeometry + //==================================================================== + class TableGeometry + { + protected: + const TableControl_Impl& m_rControl; + const Rectangle& m_rBoundaries; + Rectangle m_aRect; + + protected: + TableGeometry( + const TableControl_Impl& _rControl, + const Rectangle& _rBoundaries + ) + :m_rControl( _rControl ) + ,m_rBoundaries( _rBoundaries ) + ,m_aRect( _rBoundaries ) + { + } + + public: + // attribute access + const TableControl_Impl& getControl() const { return m_rControl; } + + // status + const Rectangle& getRect() const { return m_aRect; } + bool isValid() const { return !m_aRect.GetIntersection( m_rBoundaries ).IsEmpty(); } + }; + + //==================================================================== + //= TableRowGeometry + //==================================================================== + class TableRowGeometry : public TableGeometry + { + protected: + RowPos m_nRowPos; + + public: + TableRowGeometry( + const TableControl_Impl& _rControl, + const Rectangle& _rBoundaries, + RowPos _nRow + ); + + // status + RowPos getRow() const { return m_nRowPos; } + // operations + bool moveDown(); + }; + + //==================================================================== + //= TableColumnGeometry + //==================================================================== + class TableColumnGeometry : public TableGeometry + { + protected: + ColPos m_nColPos; + + public: + TableColumnGeometry( + const TableControl_Impl& _rControl, + const Rectangle& _rBoundaries, + ColPos _nCol + ); + + // status + ColPos getCol() const { return m_nColPos; } + // operations + bool moveRight(); + }; + + //==================================================================== + //= TableCellGeometry + //==================================================================== + /** a helper representing geometry information of a cell + */ + class TableCellGeometry + { + private: + TableRowGeometry m_aRow; + TableColumnGeometry m_aCol; + + public: + TableCellGeometry( + const TableControl_Impl& _rControl, + const Rectangle& _rBoundaries, + ColPos _nCol, + RowPos _nRow + ) + :m_aRow( _rControl, _rBoundaries, _nRow ) + ,m_aCol( _rControl, _rBoundaries, _nCol ) + { + } + + TableCellGeometry( + const TableRowGeometry& _rRow, + ColPos _nCol + ) + :m_aRow( _rRow ) + ,m_aCol( _rRow.getControl(), _rRow.getRect(), _nCol ) + { + } + + inline Rectangle getRect() const { return m_aRow.getRect().GetIntersection( m_aCol.getRect() ); } + inline RowPos getRow() const { return m_aRow.getRow(); } + inline ColPos getColumn() const { return m_aCol.getCol(); } + inline bool isValid() const { return !getRect().IsEmpty(); } + + inline bool moveDown() {return m_aRow.moveDown(); } + inline bool moveRight() {return m_aCol.moveRight(); } + }; + +//........................................................................ +} } // namespace svt::table +//........................................................................ + +#endif // SVTOOLS_TABLEGEOMETRY_HXX diff --git a/svtools/source/uno/makefile.mk b/svtools/source/uno/makefile.mk index 76ab335d58d5..51e55a1f9123 100644 --- a/svtools/source/uno/makefile.mk +++ b/svtools/source/uno/makefile.mk @@ -1,4 +1,4 @@ - +#************************************************************************* # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # @@ -55,6 +55,7 @@ SLOFILES= \ $(SLO)$/genericunodialog.obj \ $(SLO)$/generictoolboxcontroller.obj \ $(SLO)$/treecontrolpeer.obj \ + $(SLO)$/unocontroltablemodel.obj \ $(SLO)$/registerservices.obj\ $(SLO)$/contextmenuhelper.obj diff --git a/svtools/source/uno/unocontroltablemodel.cxx b/svtools/source/uno/unocontroltablemodel.cxx new file mode 100644 index 000000000000..e322dbb8f96e --- /dev/null +++ b/svtools/source/uno/unocontroltablemodel.cxx @@ -0,0 +1,812 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: unocontroltablemodel.cxx,v $ + * $Revision: 1.32 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + +#include "unocontroltablemodel.hxx" +#include +#include "svtools/table/gridtablerenderer.hxx" +#include "svtools/table/defaultinputhandler.hxx" +#include "svtools/table/tablecontrol.hxx" +#include +#include +#include +#include +#include +#include + +using ::rtl::OUString; +using namespace ::svt::table; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt::grid; + +using namespace ::svt::table; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::view; +using namespace ::toolkit; + +class UnoControlTableColumn : public IColumnModel + { + private: + ColumnID m_nID; + String m_sName; + bool m_bIsResizable; + TableMetrics m_nWidth; + TableMetrics m_nMinWidth; + TableMetrics m_nMaxWidth; + + public: + UnoControlTableColumn(Reference); + + // IColumnModel overridables + virtual ColumnID getID() const; + virtual bool setID( const ColumnID _nID ); + virtual String getName() const; + virtual void setName( const String& _rName ); + virtual bool isResizable() const; + virtual void setResizable( bool _bResizable ); + virtual TableMetrics getWidth() const; + virtual void setWidth( TableMetrics _nWidth ); + virtual TableMetrics getMinWidth() const; + virtual void setMinWidth( TableMetrics _nMinWidth ); + virtual TableMetrics getMaxWidth() const; + virtual void setMaxWidth( TableMetrics _nMaxWidth ); + }; + + //-------------------------------------------------------------------- + UnoControlTableColumn::UnoControlTableColumn(Reference m_xGridColumn) + :m_nID( 0 ) + ,m_sName() + ,m_bIsResizable( false ) + ,m_nWidth( 10 * 100 ) // 1 cm + ,m_nMinWidth( 0 ) // no min width + ,m_nMaxWidth( 0 ) // no max width + { + //m_nID = m_xGridColumn->getIdentifier(); + //m_nWidth = m_xGridColumn->getColumnWidth(); + m_sName = m_xGridColumn->getTitle(); + } + + //-------------------------------------------------------------------- + ColumnID UnoControlTableColumn::getID() const + { + return m_nID; + } + + //-------------------------------------------------------------------- + bool UnoControlTableColumn::setID( const ColumnID _nID ) + { + // TODO: conflict check + + m_nID = _nID; + // TODO: notifications? + + return true; + } + + //-------------------------------------------------------------------- + String UnoControlTableColumn::getName() const + { + return m_sName; + } + + //-------------------------------------------------------------------- + void UnoControlTableColumn::setName( const String& _rName ) + { + m_sName = _rName; + // TODO: notifications? + } + + //-------------------------------------------------------------------- + bool UnoControlTableColumn::isResizable() const + { + return m_bIsResizable; + } + + //-------------------------------------------------------------------- + void UnoControlTableColumn::setResizable( bool _bResizable ) + { + m_bIsResizable = _bResizable; + // TODO: notifications? + } + + //-------------------------------------------------------------------- + TableMetrics UnoControlTableColumn::getWidth() const + { + return m_nWidth; + } + + //-------------------------------------------------------------------- + void UnoControlTableColumn::setWidth( TableMetrics _nWidth ) + { + m_nWidth = _nWidth; + // TODO: notifications? + } + + //-------------------------------------------------------------------- + TableMetrics UnoControlTableColumn::getMinWidth() const + { + return m_nMinWidth; + } + + //-------------------------------------------------------------------- + void UnoControlTableColumn::setMinWidth( TableMetrics _nMinWidth ) + { + m_nMinWidth = _nMinWidth; + // TODO: notifications? + } + + //-------------------------------------------------------------------- + TableMetrics UnoControlTableColumn::getMaxWidth() const + { + return m_nMaxWidth; + } + + //-------------------------------------------------------------------- + void UnoControlTableColumn::setMaxWidth( TableMetrics _nMaxWidth ) + { + m_nMaxWidth = _nMaxWidth; + // TODO: notifications? + } + + //==================================================================== + //= DefaultTableModel_Impl + //==================================================================== + struct UnoControlTableModel_Impl + { + ::std::vector< PColumnModel > aColumns; + TableSize nRowCount; + bool bHasColumnHeaders; + bool bHasRowHeaders; + PTableRenderer pRenderer; + PTableInputHandler pInputHandler; + TableMetrics nRowHeight; + TableMetrics nColumnHeaderHeight; + TableMetrics nRowHeaderWidth; + std::vector aRowHeadersTitle; + std::vector > aCellContent; + + UnoControlTableModel_Impl() + :nRowCount ( 0 ) + ,bHasColumnHeaders ( false ) + ,bHasRowHeaders ( false ) + ,pRenderer ( ) + ,pInputHandler ( ) + ,nRowHeight ( 4 * 100 ) // 40 mm + ,nColumnHeaderHeight( 5 * 100 ) // 50 mm + ,nRowHeaderWidth ( 10 * 100 ) // 50 mm + ,aRowHeadersTitle ( 0 ) + ,aCellContent ( 0 ) + { + } + }; + + //==================================================================== + //= UnoControlTableModel + //==================================================================== + //-------------------------------------------------------------------- + UnoControlTableModel::UnoControlTableModel() + :m_pImpl( new UnoControlTableModel_Impl ), + m_xDataModel(0), + m_xColumnModel(0), + m_bHasColumnHeaders(false), + m_bHasRowHeaders(false), + m_bVScroll(false), + m_bHScroll(false) + { + m_pImpl->bHasColumnHeaders = m_bHasColumnHeaders; + m_pImpl->bHasRowHeaders = m_bHasRowHeaders; + m_pImpl->pRenderer.reset( new GridTableRenderer( *this ) ); + m_pImpl->pInputHandler.reset( new DefaultInputHandler ); + } + + //-------------------------------------------------------------------- + UnoControlTableModel::~UnoControlTableModel() + { + DELETEZ( m_pImpl ); + } + + //-------------------------------------------------------------------- + TableSize UnoControlTableModel::getColumnCount() const + { + m_pImpl->aColumns.resize( m_xColumnModel->getColumnCount()); + return (TableSize)m_pImpl->aColumns.size(); + } + + //-------------------------------------------------------------------- + TableSize UnoControlTableModel::getRowCount() const + { + return m_pImpl->nRowCount; + } + + //-------------------------------------------------------------------- + bool UnoControlTableModel::hasColumnHeaders() const + { + return m_pImpl->bHasColumnHeaders; + } + + //-------------------------------------------------------------------- + bool UnoControlTableModel::hasRowHeaders() const + { + return m_pImpl->bHasRowHeaders; + } + + //-------------------------------------------------------------------- + void UnoControlTableModel::setRowHeaders(bool _bRowHeaders) + { + m_pImpl->bHasRowHeaders = _bRowHeaders; + } + //-------------------------------------------------------------------- + void UnoControlTableModel::setColumnHeaders(bool _bColumnHeaders) + { + m_pImpl->bHasColumnHeaders = _bColumnHeaders; + } + + void UnoControlTableModel::setColumnCount(TableSize _nColCount) + { + m_pImpl->aColumns.resize( _nColCount); + } + //-------------------------------------------------------------------- + void UnoControlTableModel::setRowCount(TableSize _nRowCount) + { + m_pImpl->nRowCount = _nRowCount; + } + //-------------------------------------------------------------------- + bool UnoControlTableModel::isCellEditable( ColPos col, RowPos row ) const + { + (void)col; + (void)row; + return false; + } + + //-------------------------------------------------------------------- + void UnoControlTableModel::addTableModelListener( const PTableModelListener& listener ) + { + (void) listener; + //listener->onTableModelChanged(PTableModel(this)); + // TODO + DBG_ERROR( "DefaultTableModel::addTableModelListener: not yet implemented!" ); + } + + //-------------------------------------------------------------------- + void UnoControlTableModel::removeTableModelListener( const PTableModelListener& listener ) + { + (void)listener; + // TODO + DBG_ERROR( "DefaultTableModel::removeTableModelListener: not yet implemented!" ); + } + + //-------------------------------------------------------------------- + PColumnModel UnoControlTableModel::getColumnModel( ColPos column ) + { + DBG_ASSERT( ( column >= 0 ) && ( column < getColumnCount() ), + "DefaultTableModel::getColumnModel: invalid index!" ); + return m_pImpl->aColumns[ column ]; + } + + //-------------------------------------------------------------------- + PColumnModel UnoControlTableModel::getColumnModelByID( ColumnID id ) + { + (void)id; + // TODO + DBG_ERROR( "DefaultTableModel::getColumnModelByID: not yet implemented!" ); + return PColumnModel(); + } + + //-------------------------------------------------------------------- + PTableRenderer UnoControlTableModel::getRenderer() const + { + return m_pImpl->pRenderer; + } + + //-------------------------------------------------------------------- + PTableInputHandler UnoControlTableModel::getInputHandler() const + { + return m_pImpl->pInputHandler; + } + + //-------------------------------------------------------------------- + TableMetrics UnoControlTableModel::getRowHeight() const + { + return m_pImpl->nRowHeight; + } + //-------------------------------------------------------------------- + void UnoControlTableModel::setRowHeight(TableMetrics _nRowHeight) + { + m_pImpl->nRowHeight = _nRowHeight; + } + + //-------------------------------------------------------------------- + TableMetrics UnoControlTableModel::getColumnHeaderHeight() const + { + DBG_ASSERT( hasColumnHeaders(), "DefaultTableModel::getColumnHeaderHeight: invalid call!" ); + return m_pImpl->nColumnHeaderHeight; + } + + //-------------------------------------------------------------------- + TableMetrics UnoControlTableModel::getRowHeaderWidth() const + { + DBG_ASSERT( hasRowHeaders(), "DefaultTableModel::getRowHeaderWidth: invalid call!" ); + return m_pImpl->nRowHeaderWidth; + } + + //-------------------------------------------------------------------- + void UnoControlTableModel::SetTitleHeight( TableMetrics _nHeight ) + { + DBG_ASSERT( _nHeight > 0, "DefaultTableModel::SetTitleHeight: invalid height value!" ); + m_pImpl->nColumnHeaderHeight = _nHeight; + // TODO: notification + } + + //-------------------------------------------------------------------- + void UnoControlTableModel::SetHandleWidth( TableMetrics _nWidth ) + { + DBG_ASSERT( _nWidth > 0, "DefaultTableModel::SetHandleWidth: invalid width value!" ); + m_pImpl->nRowHeaderWidth = _nWidth; + // TODO: notification + } + + //-------------------------------------------------------------------- + ScrollbarVisibility UnoControlTableModel::getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const + { + if(overAllHeight>=actHeight && !m_bVScroll) + return ScrollbarShowNever; + else + return ScrollbarShowAlways; + } + + //-------------------------------------------------------------------- + ScrollbarVisibility UnoControlTableModel::getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const + { + if(overAllWidth>=actWidth && !m_bHScroll) + return ScrollbarShowNever; + else + return ScrollbarShowAlways; + } + //-------------------------------------------------------------------- + void UnoControlTableModel::setCellContent(std::vector > cellContent) + { + if(cellContent.empty()) + { + unsigned int i = m_pImpl->aColumns.size(); + std::vector emptyCells; + while(i!=0) + { + cellContent.push_back(emptyCells); + --i; + } + } + std::vector cCC; + for(::std::vector >::iterator iter = cellContent.begin(); iter!= cellContent.end();++iter) + { + cCC = *iter; + m_pImpl->aCellContent.push_back(cCC); + } + } + + std::vector > UnoControlTableModel::getCellContent() + { + return m_pImpl->aCellContent; + } + + //-------------------------------------------------------------------- + void UnoControlTableModel::setRowHeaderName(std::vector cellColumnContent) + { + if(cellColumnContent.empty()) + { + unsigned int i = m_pImpl->aColumns.size(); + while(i!=0) + { + cellColumnContent.push_back(rtl::OUString::createFromAscii("")); + --i; + } + } + for(::std::vector::iterator iter = cellColumnContent.begin(); iter!= cellColumnContent.end();++iter) + { + rtl::OUString s = *iter; + m_pImpl->aRowHeadersTitle.push_back(*iter); + } + } + + std::vector UnoControlTableModel::getRowHeaderName() + { + return m_pImpl->aRowHeadersTitle; + } + +::com::sun::star::uno::Any UnoControlTableModel::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) +{ + ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, + SAL_STATIC_CAST( ::com::sun::star::awt::grid::XGridControl*, this ), + SAL_STATIC_CAST( ::com::sun::star::awt::grid::XGridDataListener*, this ), + //SAL_STATIC_CAST( com::sun::star::lang::XEventListener*, this ), + //SAL_STATIC_CAST( com::sun::star::awt::XMouseListener*, this ), + SAL_STATIC_CAST( ::com::sun::star::lang::XTypeProvider*, this ) ); + return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType )); +} + +// ::com::sun::star::lang::XTypeProvider +IMPL_XTYPEPROVIDER_START( UnoControlTableModel ) + getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridControl>* ) NULL ), + getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel>* ) NULL ), + getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener>* ) NULL ), + VCLXWindow::getTypes() +IMPL_XTYPEPROVIDER_END + +::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL UnoControlTableModel::getColumnModel( ) throw (::com::sun::star::uno::RuntimeException) +{ + return NULL; +} +void SAL_CALL UnoControlTableModel::setColumnModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >& model ) throw (::com::sun::star::uno::RuntimeException) +{ + (void)model; +} +::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL UnoControlTableModel::getDataModel( ) throw (::com::sun::star::uno::RuntimeException) +{ + return NULL; +} +void SAL_CALL UnoControlTableModel::setDataModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >& model ) throw (::com::sun::star::uno::RuntimeException) +{ + (void)model; +} +sal_Int32 SAL_CALL UnoControlTableModel::getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException) +{ + TableControl* pTableControl = (TableControl*)GetWindow(); + return pTableControl->GetCurrentRow( Point(x,y) ); +} + +/* +void SAL_CALL UnoControlTableModel::addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException) +{ + VCLXWindow::addMouseListener( listener ); +} + +void SAL_CALL UnoControlTableModel::removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException) +{ + VCLXWindow::removeMouseListener( listener ); +} +*/ +/* +void SAL_CALL UnoControlTableModel::mousePressed( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException) +{ + (void)rEvent; +} +void SAL_CALL UnoControlTableModel::mouseReleased( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException) +{ + (void)rEvent; +} +void SAL_CALL UnoControlTableModel::mouseEntered( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException) +{ + (void) rEvent; +} +void SAL_CALL UnoControlTableModel::mouseExited( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException) +{ + (void) rEvent; +} +*/ +void SAL_CALL UnoControlTableModel::addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException) +{ + (void)listener; +} + +void SAL_CALL UnoControlTableModel::removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException) +{ + (void) listener; +} + +void UnoControlTableModel::setProperty( const ::rtl::OUString& PropertyName, const Any& aValue) throw(RuntimeException) +{ + ::vos::OGuard aGuard( GetMutex() ); + + TableControl* pTableControl = (TableControl*)GetWindow(); + + switch( GetPropertyId( PropertyName ) ) + { + case BASEPROPERTY_GRID_SELECTIONMODE: + { + SelectionType eSelectionType; + if( aValue >>= eSelectionType ) + { + SelectionMode eSelMode; + switch( eSelectionType ) + { + case SelectionType_SINGLE: eSelMode = SINGLE_SELECTION; break; + case SelectionType_RANGE: eSelMode = RANGE_SELECTION; break; + case SelectionType_MULTI: eSelMode = MULTIPLE_SELECTION; break; + // case SelectionType_NONE: + default: eSelMode = NO_SELECTION; break; + } + if( pTableControl->getSelEngine()->GetSelectionMode() != eSelMode ) + pTableControl->getSelEngine()->SetSelectionMode( eSelMode ); + } + break; + } + case BASEPROPERTY_HSCROLL: + { + sal_Bool bHScroll = true; + if( aValue >>= bHScroll ) + { + m_bHScroll = bHScroll; + } + break; + } + case BASEPROPERTY_VSCROLL: + { + sal_Bool bVScroll = true; + if( aValue >>= bVScroll ) + { + m_bVScroll = bVScroll; + } + break; + } + case BASEPROPERTY_GRID_SHOWROWHEADER: + { + sal_Bool rowHeader = true; + if( aValue >>= rowHeader ) + { + setRowHeaders(rowHeader); + } + break; + } + + case BASEPROPERTY_GRID_SHOWCOLUMNHEADER: + { + sal_Bool colHeader = true; + if( aValue >>= colHeader ) + { + setColumnHeaders(colHeader); + } + break; + } + case BASEPROPERTY_GRID_DATAMODEL: + { + m_xDataModel = Reference< XGridDataModel >( aValue, UNO_QUERY ); + Sequence > cellData = m_xDataModel->getData(); + Sequence rowData(0); + for(int i = 0; i< m_xDataModel->getRowCount();++i) + { + rowData = cellData[i]; + std::vector newRow( + comphelper::sequenceToContainer< std::vector >(rowData)); + if(newRow.size()aColumns.size()) + newRow.resize(m_pImpl->aColumns.size(),rtl::OUString::createFromAscii("")); + m_pImpl->aCellContent.push_back(newRow); + } + Sequence< ::rtl::OUString > rowHeaders = m_xDataModel->getRowHeaders(); + std::vector< rtl::OUString > newRow( + comphelper::sequenceToContainer< std::vector >(rowHeaders)); + m_pImpl->nRowCount = m_xDataModel->getRowCount(); + setRowHeaderName(newRow); + break; + } + case BASEPROPERTY_GRID_COLUMNMODEL: + { + m_xColumnModel = Reference< XGridColumnModel >( aValue, UNO_QUERY ); + Sequence > columns = m_xColumnModel->getColumns(); + std::vector > aNewColumns( + comphelper::sequenceToContainer > >(columns)); + if(!m_pImpl->aColumns.empty()) + m_pImpl->aColumns.clear(); + for ( ::svt::table::ColPos col = 0; col < m_xColumnModel->getColumnCount(); ++col ) + { + UnoControlTableColumn* tableColumn = new UnoControlTableColumn(aNewColumns[col]); + m_pImpl->aColumns.push_back((PColumnModel)tableColumn); + } + break; + } + default: + VCLXWindow::setProperty( PropertyName, aValue ); + break; + } +} + +Any UnoControlTableModel::getProperty( const ::rtl::OUString& PropertyName ) throw(RuntimeException) +{ + ::vos::OGuard aGuard( GetMutex() ); + + const sal_uInt16 nPropId = GetPropertyId( PropertyName ); + TableControl* pTableControl = (TableControl*)GetWindow(); + if(pTableControl) + { + switch(nPropId) + { + case BASEPROPERTY_GRID_SELECTIONMODE: + { + SelectionType eSelectionType; + + SelectionMode eSelMode = pTableControl->getSelEngine()->GetSelectionMode(); + switch( eSelMode ) + { + case SINGLE_SELECTION: eSelectionType = SelectionType_SINGLE; break; + case RANGE_SELECTION: eSelectionType = SelectionType_RANGE; break; + case MULTIPLE_SELECTION:eSelectionType = SelectionType_MULTI; break; +// case NO_SELECTION: + default: eSelectionType = SelectionType_NONE; break; + } + return Any( eSelectionType ); + } + case BASEPROPERTY_GRID_SHOWROWHEADER: + { + return Any ((sal_Bool) pTableControl->GetModel()->hasRowHeaders()); + } + case BASEPROPERTY_GRID_SHOWCOLUMNHEADER: + return Any ((sal_Bool) pTableControl->GetModel()->hasColumnHeaders()); + case BASEPROPERTY_GRID_DATAMODEL: + return Any ( m_xDataModel ); + case BASEPROPERTY_GRID_COLUMNMODEL: + return Any ( m_xColumnModel); + case BASEPROPERTY_HSCROLL: + return Any ( m_bHScroll); + case BASEPROPERTY_VSCROLL: + return Any ( m_bVScroll); + } + } + return VCLXWindow::getProperty( PropertyName ); +} + +void UnoControlTableModel::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) +{ + PushPropertyIds( rIds, + BASEPROPERTY_GRID_SHOWROWHEADER, + BASEPROPERTY_GRID_SHOWCOLUMNHEADER, + BASEPROPERTY_GRID_DATAMODEL, + BASEPROPERTY_GRID_COLUMNMODEL, + BASEPROPERTY_GRID_SELECTIONMODE, + 0); + VCLXWindow::ImplGetPropertyIds( rIds, true ); +} +void SAL_CALL UnoControlTableModel::setVisible( sal_Bool bVisible ) throw(::com::sun::star::uno::RuntimeException) +{ + TableControl* pTable = (TableControl*)GetWindow(); + if ( pTable ) + { + pTable->SetModel(PTableModel(this)); + pTable->Show( bVisible ); + } +} +void SAL_CALL UnoControlTableModel::setFocus() throw(::com::sun::star::uno::RuntimeException) +{ + ::vos::OGuard aGuard( GetMutex() ); + if ( GetWindow()) + GetWindow()->GrabFocus(); +} +void SAL_CALL UnoControlTableModel::rowAdded(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException) +{ + std::vector aNewRow( + comphelper::sequenceToContainer< std::vector >(Event.rowData)); + if(aNewRow.size()aColumns.size()) + aNewRow.resize(m_pImpl->aColumns.size(),rtl::OUString::createFromAscii("")); + m_pImpl->aCellContent.push_back(aNewRow); + if(hasRowHeaders()) + m_pImpl->aRowHeadersTitle.push_back(Event.headerName); + m_pImpl->nRowCount=m_pImpl->aCellContent.size(); + TableControl* pTable = (TableControl*)GetWindow(); + pTable->InvalidateDataWindow(m_pImpl->nRowCount-1, false); + //pTable->GrabFocus(); +} + +void SAL_CALL UnoControlTableModel::rowRemoved(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException) +{ + TableControl* pTable = (TableControl*)GetWindow(); + //unsigned int rows =m_pImpl->aCellContent.size()-1; + if(Event.index == -1) + { + if(hasRowHeaders()) + m_pImpl->aRowHeadersTitle.clear(); + m_pImpl->aCellContent.clear(); + } + else + { + pTable->removeSelectedRow(Event.index); + if(m_pImpl->aCellContent.size()>1) + { + if(hasRowHeaders()) + m_pImpl->aRowHeadersTitle.erase(m_pImpl->aRowHeadersTitle.begin()+Event.index); + m_pImpl->aCellContent.erase(m_pImpl->aCellContent.begin()+Event.index); + + } + else + { + if(hasRowHeaders()) + m_pImpl->aRowHeadersTitle.clear(); + m_pImpl->aCellContent.clear(); + //m_pImpl->nRowCount=0; + } + } + //pTable->InvalidateDataWindow(Event.index, true); + setRowCount(m_pImpl->aCellContent.size()); + pTable->InvalidateDataWindow(Event.index, true); + //pTable->Invalidate(); +} + +void SAL_CALL UnoControlTableModel::dataChanged(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException) +{ + (void) Event; +} + + void SAL_CALL UnoControlTableModel::disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException) + { + VCLXWindow::disposing( Source ); + } + +::sal_Int32 SAL_CALL UnoControlTableModel::getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException) +{ + return 0; +} + +::sal_Int32 SAL_CALL UnoControlTableModel::getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException) +{ + return 0; +} + +void SAL_CALL UnoControlTableModel::insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException) +{ + (void)length; + (void)start; +} + +void SAL_CALL UnoControlTableModel::removeIndexIntervall(::sal_Int32 start, ::sal_Int32 end) throw (::com::sun::star::uno::RuntimeException) +{ + (void)end; + (void)start; +} + +::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL UnoControlTableModel::getSelection() throw (::com::sun::star::uno::RuntimeException) +{ + TableControl* pTable = (TableControl*)GetWindow(); + std::vector selectedRows = pTable->getSelectedRows(); + Sequence selectedRowsToSequence(comphelper::containerToSequence(selectedRows)); + return selectedRowsToSequence; +} + +::sal_Bool SAL_CALL UnoControlTableModel::isCellEditable() throw (::com::sun::star::uno::RuntimeException) +{ + return sal_False; +} + +::sal_Bool SAL_CALL UnoControlTableModel::isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException) +{ + return sal_False; +} + +::sal_Bool SAL_CALL UnoControlTableModel::isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException) +{ + (void)index; + return sal_False; +} + +void SAL_CALL UnoControlTableModel::selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException) +{ + (void)y; +} + +void SAL_CALL UnoControlTableModel::selectColumn(::sal_Int32 x) throw (::com::sun::star::uno::RuntimeException) +{ + (void)x; +} diff --git a/svtools/source/uno/unocontroltablemodel.hxx b/svtools/source/uno/unocontroltablemodel.hxx new file mode 100644 index 000000000000..5da9cc871756 --- /dev/null +++ b/svtools/source/uno/unocontroltablemodel.hxx @@ -0,0 +1,179 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: unocontroltablemodel.hxx,v $ + * $Revision: 1.32 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _UNOCONTROL_TABLEMODEL_HXX_ +#define _UNOCONTROL_TABLEMODEL_HXX_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + + +using namespace ::svt::table; + + struct UnoControlTableModel_Impl; + + class UnoControlTableModel : public ITableModel, public ::cppu::ImplInheritanceHelper2< VCLXWindow, ::com::sun::star::awt::grid::XGridControl, + ::com::sun::star::awt::grid::XGridDataListener> + { + private: + UnoControlTableModel_Impl* m_pImpl; + ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >m_xDataModel; + ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >m_xColumnModel; + bool m_bHasColumnHeaders; + bool m_bHasRowHeaders; + bool m_bVScroll; + bool m_bHScroll; + //MouseListenerMultiplexer m_aMouseListeners; + + public: + UnoControlTableModel(); + ~UnoControlTableModel(); + + /// returns the current row height, in 1/100 millimeters + inline TableMetrics GetRowHeight() const { return getRowHeight(); } + /// sets a new row height. + void setRowHeight( TableMetrics _nHeight ); + + /// returns the height of the title row (containing the column headers) + inline TableMetrics GetTitleHeight() const { return getColumnHeaderHeight(); } + /// sets a new height for the title row (containing the column headers) + void SetTitleHeight( TableMetrics _nHeight ); + + /// returns the width of the handle column (containing the row headers) + inline TableMetrics GetHandleWidth() const { return getRowHeaderWidth(); } + /// sets a new width for the handle column (containing the row headers) + void SetHandleWidth( TableMetrics _nWidth ); + + /// sets the width of a column + inline void SetColumnWidth( ColPos _nColumn, TableMetrics _nWidth100thMM ); + /// retrieves the width of a column, in 1/100th millimeters + inline TableMetrics GetColumnWidth( ColPos _nColumn ); + + // TODO: setters and getters for ID, Name, Resizable, MinWidth, MaxWidth + + public: + // ITableModel overridables + virtual TableSize getColumnCount() const; + virtual TableSize getRowCount() const; + virtual void setColumnCount(TableSize _nColCount); + virtual void setRowCount(TableSize _nRowCount); + virtual bool hasColumnHeaders() const; + virtual bool hasRowHeaders() const; + virtual void setRowHeaders(bool _bRowHeaders); + virtual void setColumnHeaders(bool _bColumnHeaders); + virtual bool isCellEditable( ColPos col, RowPos row ) const; + virtual void addTableModelListener( const PTableModelListener& listener ); + virtual void removeTableModelListener( const PTableModelListener& listener ); + virtual PColumnModel getColumnModel( ColPos column ); + virtual PColumnModel getColumnModelByID( ColumnID id ); + virtual PTableRenderer getRenderer() const; + virtual PTableInputHandler getInputHandler() const; + virtual TableMetrics getRowHeight() const; + virtual TableMetrics getColumnHeaderHeight() const; + virtual TableMetrics getRowHeaderWidth() const; + virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const; + virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const; + virtual void setCellContent(std::vector > cellContent); + virtual std::vector > getCellContent(); + virtual void setRowHeaderName(std::vector cellColumnContent); + virtual std::vector getRowHeaderName(); + + //XGridDataListener overridables + virtual void SAL_CALL rowAdded(const ::com::sun::star::awt::grid::GridDataEvent& Event) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL rowRemoved(const ::com::sun::star::awt::grid::GridDataEvent & Event) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL dataChanged(const ::com::sun::star::awt::grid::GridDataEvent & Event) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException); + + ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + void SAL_CALL acquire() throw() { VCLXWindow::acquire(); } + void SAL_CALL release() throw() { VCLXWindow::release(); } + + // ::com::sun::star::lang::XTypeProvider + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException); + ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException); + + //::com::sun::star::awt::grid::XGridControl + ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL getColumnModel( ) throw (::com::sun::star::uno::RuntimeException); + void SAL_CALL setColumnModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >& model ) throw (::com::sun::star::uno::RuntimeException); + ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL getDataModel( ) throw (::com::sun::star::uno::RuntimeException); + void SAL_CALL setDataModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >& model ) throw (::com::sun::star::uno::RuntimeException); + + virtual ::sal_Int32 SAL_CALL getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int32 SAL_CALL getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeIndexIntervall(::sal_Int32 start, ::sal_Int32 end) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL getSelection() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL isCellEditable() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL selectColumn(::sal_Int32 x) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int32 SAL_CALL getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException); + + //void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException); + //void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException); + //::com::sun::star::awt::XMouseListener + /* + virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException); + */ + + void SAL_CALL setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException); + ::com::sun::star::uno::Any SAL_CALL getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException); + static void ImplGetPropertyIds( std::list< sal_uInt16 > &aIds ); + void SAL_CALL setVisible(sal_Bool bVisible) throw(::com::sun::star::uno::RuntimeException); + void SAL_CALL setFocus() throw(::com::sun::star::uno::RuntimeException); + }; + + inline void UnoControlTableModel::SetColumnWidth( ColPos _nColumn, TableMetrics _nWidth100thMM ) + { + getColumnModel( _nColumn )->setWidth( _nWidth100thMM ); + } + + inline TableMetrics UnoControlTableModel::GetColumnWidth( ColPos _nColumn ) + { + return getColumnModel( _nColumn )->getWidth(); + } + #endif // _UNOCONTROL_TABLEMODEL_HXX_ diff --git a/svtools/source/uno/unoiface.cxx b/svtools/source/uno/unoiface.cxx index 91a6de4c404d..e6922aa4f099 100644 --- a/svtools/source/uno/unoiface.cxx +++ b/svtools/source/uno/unoiface.cxx @@ -54,6 +54,9 @@ #include #include "treecontrolpeer.hxx" +//#include "vclxgridcontrol.hxx" +#include "unocontroltablemodel.hxx" +#include namespace { @@ -83,8 +86,6 @@ SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com:: if ( pParent ) { pWindow = new MultiLineEdit( pParent, nWinBits|WB_IGNORETAB); - static_cast< MultiLineEdit* >( pWindow )->DisableSelectionOnFocus(); - // #i89821# / 2008-12-17 / frank.schoenheit@sun.com *ppNewComp = new VCLXMultiLineEdit; } else @@ -167,6 +168,21 @@ SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com:: return NULL; } } + else if ( aServiceName.EqualsIgnoreCaseAscii( "Grid" ) ) + { + if ( pParent ) + { + ::svt::table::TableControl* m_pTable = new ::svt::table::TableControl(pParent, nWinBits); + UnoControlTableModel* pModel = new UnoControlTableModel(); + *ppNewComp = pModel; + pWindow = m_pTable; + } + else + { + *ppNewComp = NULL; + return NULL; + } + } return pWindow; } diff --git a/svtools/uno/makefile.mk b/svtools/uno/makefile.mk index b572242f1d85..8f61c7100508 100644 --- a/svtools/uno/makefile.mk +++ b/svtools/uno/makefile.mk @@ -60,11 +60,13 @@ SHL1LIBS= \ SHL1STDLIBS=\ $(SVTOOLLIB) \ + $(TKLIB) \ $(VCLLIB) \ $(SVLLIB) \ $(UNOTOOLSLIB) \ $(TOOLSLIB) \ $(COMPHELPERLIB) \ + $(VOSLIB) \ $(CPPUHELPERLIB) \ $(CPPULIB) \ $(SALLIB) diff --git a/svtools/util/makefile.mk b/svtools/util/makefile.mk index d40195609115..80596d23e866 100644 --- a/svtools/util/makefile.mk +++ b/svtools/util/makefile.mk @@ -84,6 +84,7 @@ LIB7FILES= \ $(SLB)$/svhtml.lib \ $(SLB)$/svrtf.lib \ $(SLB)$/heavyconfig.lib \ + $(SLB)$/table.lib \ $(SLB)$/java.lib LIB8TARGET= $(SLB)$/svl.lib diff --git a/toolkit/inc/toolkit/helper/listenermultiplexer.hxx b/toolkit/inc/toolkit/helper/listenermultiplexer.hxx index 24a16d5868dd..543c8a85c401 100644 --- a/toolkit/inc/toolkit/helper/listenermultiplexer.hxx +++ b/toolkit/inc/toolkit/helper/listenermultiplexer.hxx @@ -129,7 +129,7 @@ DECL_LISTENERMULTIPLEXER_END // ---------------------------------------------------- // class MouseListenerMultiplexer // ---------------------------------------------------- -DECL_LISTENERMULTIPLEXER_START( MouseListenerMultiplexer, ::com::sun::star::awt::XMouseListener ) +DECL_LISTENERMULTIPLEXER_START_DLLPUB( MouseListenerMultiplexer, ::com::sun::star::awt::XMouseListener ) void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException); void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException); void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException); diff --git a/toolkit/inc/toolkit/helper/property.hxx b/toolkit/inc/toolkit/helper/property.hxx index f5e1b4ea3770..fbfe90494279 100644 --- a/toolkit/inc/toolkit/helper/property.hxx +++ b/toolkit/inc/toolkit/helper/property.hxx @@ -191,7 +191,13 @@ namespace rtl { #define BASEPROPERTY_IMAGE_SCALE_MODE 137 #define BASEPROPERTY_WRITING_MODE 138 #define BASEPROPERTY_CONTEXT_WRITING_MODE 139 -#define BASEPROPERTY_ENABLEVISIBLE 140 // sal_Bool +#define BASEPROPERTY_GRID_SHOWROWHEADER 140 +#define BASEPROPERTY_GRID_SHOWCOLUMNHEADER 141 +#define BASEPROPERTY_GRID_DATAMODEL 142 +#define BASEPROPERTY_GRID_COLUMNMODEL 143 +#define BASEPROPERTY_GRID_SELECTIONMODE 144 +#define BASEPROPERTY_ENABLEVISIBLE 145 // sal_Bool + // Keine gebundenen Properties, werden immer aus der Property BASEPROPERTY_FONTDESCRIPTOR entnommen. #define BASEPROPERTY_FONTDESCRIPTORPART_START 1000 diff --git a/toolkit/inc/toolkit/helper/servicenames.hxx b/toolkit/inc/toolkit/helper/servicenames.hxx index 31513f0f2358..89810ae69482 100644 --- a/toolkit/inc/toolkit/helper/servicenames.hxx +++ b/toolkit/inc/toolkit/helper/servicenames.hxx @@ -95,6 +95,12 @@ extern const sal_Char __FAR_DATA szServiceName_TreeControl[]; extern const sal_Char __FAR_DATA szServiceName_TreeControlModel[]; extern const sal_Char __FAR_DATA szServiceName_MutableTreeDataModel[]; +extern const sal_Char __FAR_DATA szServiceName_GridControl[]; +extern const sal_Char __FAR_DATA szServiceName_GridControlModel[]; +extern const sal_Char __FAR_DATA szServiceName_DefaultGridDataModel[]; +extern const sal_Char __FAR_DATA szServiceName_DefaultGridColumnModel[]; +extern const sal_Char __FAR_DATA szServiceName_GridColumn[]; + extern const sal_Char __FAR_DATA szServiceName_UnoSimpleAnimationControl[], szServiceName_UnoSimpleAnimationControlModel[]; extern const sal_Char __FAR_DATA szServiceName_UnoThrobberControl[], szServiceName_UnoThrobberControlModel[]; extern const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlink[], szServiceName_UnoControlFixedHyperlinkModel[]; diff --git a/toolkit/prj/build.lst b/toolkit/prj/build.lst index 7fa0efaded53..304d0e7c978f 100644 --- a/toolkit/prj/build.lst +++ b/toolkit/prj/build.lst @@ -7,6 +7,7 @@ ti toolkit\source\helper nmake - all ti_helper ti_inc NULL ti toolkit\source\awt nmake - all ti_awt ti_inc NULL ti toolkit\source\controls nmake - all ti_controls ti_inc NULL ti toolkit\source\controls\tree nmake - all ti_tree NULL +ti toolkit\source\controls\grid nmake - all ti_grid NULL ti toolkit\source\layout\core nmake - all ti_layout_core NULL ti toolkit\source\layout\vcl nmake - all ti_layout_vcl NULL -ti toolkit\util nmake - all ti_util ti_awt ti_controls ti_layout_core ti_helper ti_tree ti_layout_vcl NULL +ti toolkit\util nmake - all ti_util ti_awt ti_controls ti_layout_core ti_helper ti_tree ti_grid ti_layout_vcl NULL diff --git a/toolkit/source/controls/dialogcontrol.cxx b/toolkit/source/controls/dialogcontrol.cxx index 47028cc8e071..07d459a6111a 100644 --- a/toolkit/source/controls/dialogcontrol.cxx +++ b/toolkit/source/controls/dialogcontrol.cxx @@ -66,6 +66,7 @@ #include #include "tree/treecontrol.hxx" +#include "grid/gridcontrol.hxx" #include #include @@ -453,6 +454,8 @@ Reference< XInterface > UnoControlDialogModel::createInstance( const ::rtl::OUSt pNewModel = new OGeometryControlModel< UnoControlRoadmapModel >; else if ( aServiceSpecifier.compareToAscii( szServiceName_TreeControlModel ) == 0 ) pNewModel = new OGeometryControlModel< UnoTreeModel >; + else if ( aServiceSpecifier.compareToAscii( szServiceName_GridControlModel ) == 0 ) + pNewModel = new OGeometryControlModel< UnoGridModel >; if ( !pNewModel ) { @@ -515,6 +518,7 @@ Sequence< ::rtl::OUString > UnoControlDialogModel::getAvailableServiceNames() th pNames[18] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlFixedLineModel ); pNames[19] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlRoadmapModel ); pNames[20] = ::rtl::OUString::createFromAscii( szServiceName_TreeControlModel ); + pNames[20] = ::rtl::OUString::createFromAscii( szServiceName_GridControlModel ); } return *pNamesSeq; diff --git a/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx b/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx new file mode 100644 index 000000000000..bdd7fb475afe --- /dev/null +++ b/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx @@ -0,0 +1,242 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: treedatamodel.cxx,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_toolkit.hxx" +#include "defaultgridcolumnmodel.hxx" +#include +#include +#include + +using ::rtl::OUString; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt; +using namespace ::com::sun::star::awt::grid; +using namespace ::com::sun::star::lang; + +#define COLUMNSELECTIONALLOWED ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ColumnSelectionAllowed" )) + +namespace toolkit +{ + +/////////////////////////////////////////////////////////////////////// +// class DefaultGridColumnModel +/////////////////////////////////////////////////////////////////////// + +DefaultGridColumnModel::DefaultGridColumnModel() +: columns(std::vector< Reference< XGridColumn > >()) +{ +} + +//--------------------------------------------------------------------- + +DefaultGridColumnModel::~DefaultGridColumnModel() +{ +} + +//--------------------------------------------------------------------- + +void DefaultGridColumnModel::broadcast( broadcast_type eType, const GridColumnEvent& aEvent ) +{ + ::cppu::OInterfaceContainerHelper* pIter = BrdcstHelper.getContainer( XGridColumnListener::static_type() ); + if( pIter ) + { + ::cppu::OInterfaceIteratorHelper aListIter(*pIter); + while(aListIter.hasMoreElements()) + { + XGridColumnListener* pListener = static_cast(aListIter.next()); + switch( eType ) + { + case column_added: pListener->columnAdded(aEvent); break; + case column_removed: pListener->columnRemoved(aEvent); break; + case column_changed: pListener->columnChanged(aEvent); break; + } + } + } +} + +//--------------------------------------------------------------------- + +void DefaultGridColumnModel::broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue ) +{ + Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); + GridColumnEvent aEvent( xSource, name, oldValue, newValue, 0, NULL ); + broadcast( column_changed, aEvent); +} + +//--------------------------------------------------------------------- + +void DefaultGridColumnModel::broadcast_add( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn ) +{ + Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); + GridColumnEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, rColumn ); + broadcast( column_added, aEvent); +} + +//--------------------------------------------------------------------- + +void DefaultGridColumnModel::broadcast_remove( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn ) +{ + Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); + GridColumnEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, rColumn ); + broadcast( column_changed, aEvent); +} + +//--------------------------------------------------------------------- +// XDefaultGridColumnModel +//--------------------------------------------------------------------- +::sal_Bool SAL_CALL DefaultGridColumnModel::getColumnSelectionAllowed() throw (::com::sun::star::uno::RuntimeException) +{ + return selectionAllowed; +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridColumnModel::setColumnSelectionAllowed(::sal_Bool value) throw (::com::sun::star::uno::RuntimeException) +{ + sal_Bool oldValue = selectionAllowed; + selectionAllowed = value; + broadcast_changed( COLUMNSELECTIONALLOWED, Any(oldValue) , Any(selectionAllowed)); +} + +//--------------------------------------------------------------------- + +::sal_Int32 SAL_CALL DefaultGridColumnModel::getColumnCount() throw (::com::sun::star::uno::RuntimeException) +{ + return columns.size(); +} + +//--------------------------------------------------------------------- + +::sal_Int32 SAL_CALL DefaultGridColumnModel::addColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & column) throw (::com::sun::star::uno::RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + + columns.push_back(column); + + sal_Int32 index = columns.size() - 1; + broadcast_add(index, column ); + return index; +} + +//--------------------------------------------------------------------- + +::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > SAL_CALL DefaultGridColumnModel::getColumns() throw (::com::sun::star::uno::RuntimeException) +{ + return comphelper::containerToSequence(columns); +} + +//--------------------------------------------------------------------- + +::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > SAL_CALL DefaultGridColumnModel::getColumn(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException) +{ + if ( index >=0 && index < ((sal_Int32)columns.size())) + return columns[index]; + else + return Reference< XGridColumn >(); +} + +void SAL_CALL DefaultGridColumnModel::addColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException) +{ + BrdcstHelper.addListener( XGridColumnListener::static_type(), xListener ); +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridColumnModel::removeColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException) +{ + BrdcstHelper.removeListener( XGridColumnListener::static_type(), xListener ); +} + +//--------------------------------------------------------------------- +// XComponent +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridColumnModel::dispose() throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + + ::com::sun::star::lang::EventObject aEvent; + aEvent.Source.set( static_cast< ::cppu::OWeakObject* >( this ) ); + BrdcstHelper.aLC.disposeAndClear( aEvent ); + +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridColumnModel::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException) +{ + BrdcstHelper.addListener( XEventListener::static_type(), xListener ); +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridColumnModel::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException) +{ + BrdcstHelper.removeListener( XEventListener::static_type(), xListener ); +} + +//--------------------------------------------------------------------- +// XServiceInfo +//--------------------------------------------------------------------- + +::rtl::OUString SAL_CALL DefaultGridColumnModel::getImplementationName( ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.DefaultGridColumnModel" ) ); + return aImplName; +} + +//--------------------------------------------------------------------- + +sal_Bool SAL_CALL DefaultGridColumnModel::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + return ServiceName.equalsAscii( szServiceName_DefaultGridColumnModel ); +} + +//--------------------------------------------------------------------- + +::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridColumnModel::getSupportedServiceNames( ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + static const OUString aServiceName( OUString::createFromAscii( szServiceName_DefaultGridColumnModel ) ); + static const Sequence< OUString > aSeq( &aServiceName, 1 ); + return aSeq; +} + +} + +Reference< XInterface > SAL_CALL DefaultGridColumnModel_CreateInstance( const Reference< XMultiServiceFactory >& ) +{ + return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::DefaultGridColumnModel ); +} + diff --git a/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx b/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx new file mode 100644 index 000000000000..b230188f9107 --- /dev/null +++ b/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx @@ -0,0 +1,96 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: griddatamodel.hxx,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_toolkit.hxx" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using ::rtl::OUString; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt; +using namespace ::com::sun::star::awt::grid; +using namespace ::com::sun::star::lang; + +namespace toolkit +{ + +enum broadcast_type { column_added, column_removed, column_changed}; + +class DefaultGridColumnModel : public ::cppu::WeakImplHelper2< XGridColumnModel, XServiceInfo >, + public MutexAndBroadcastHelper +{ +public: + DefaultGridColumnModel(); + virtual ~DefaultGridColumnModel(); + + // XGridColumnModel + + virtual ::sal_Bool SAL_CALL getColumnSelectionAllowed() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setColumnSelectionAllowed(::sal_Bool the_value) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int32 SAL_CALL getColumnCount() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int32 SAL_CALL addColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & column) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > SAL_CALL getColumns() throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > SAL_CALL getColumn(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException); + virtual void SAL_CALL removeColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException); + + // XComponent + virtual void SAL_CALL dispose( ) throw (RuntimeException); + virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException); + virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); + +private: + + void broadcast( broadcast_type eType, const GridColumnEvent& aEvent ); + void broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue ); + void broadcast_add( sal_Int32 index,const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn ); + void broadcast_remove( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn ); + + std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > columns; + sal_Bool selectionAllowed; +}; + +} diff --git a/toolkit/source/controls/grid/defaultgriddatamodel.cxx b/toolkit/source/controls/grid/defaultgriddatamodel.cxx new file mode 100644 index 000000000000..865be80f55a7 --- /dev/null +++ b/toolkit/source/controls/grid/defaultgriddatamodel.cxx @@ -0,0 +1,310 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: treedatamodel.cxx,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_toolkit.hxx" +#include "defaultgriddatamodel.hxx" +#include +#include +#include + +using ::rtl::OUString; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt; +using namespace ::com::sun::star::awt::grid; +using namespace ::com::sun::star::lang; + +#define ROWHEIGHT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "RowHeight" )) +#define ROWHEADERS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "RowHeaders" )) + +namespace toolkit +{ + +/////////////////////////////////////////////////////////////////////// +// class DefaultGridDataModel +/////////////////////////////////////////////////////////////////////// + +DefaultGridDataModel::DefaultGridDataModel() +: rowHeight(0), + rowHeaders(std::vector< ::rtl::OUString >()) +{ +} + +//--------------------------------------------------------------------- + +DefaultGridDataModel::~DefaultGridDataModel() +{ +} + +void DefaultGridDataModel::broadcast( broadcast_type eType, const GridDataEvent& aEvent ) +{ + ::cppu::OInterfaceContainerHelper* pIter = BrdcstHelper.getContainer( XGridDataListener::static_type() ); + if( pIter ) + { + ::cppu::OInterfaceIteratorHelper aListIter(*pIter); + while(aListIter.hasMoreElements()) + { + XGridDataListener* pListener = static_cast(aListIter.next()); + switch( eType ) + { + case row_added: pListener->rowAdded(aEvent); break; + case row_removed: pListener->rowRemoved(aEvent); break; + case data_changed: pListener->dataChanged(aEvent); break; + } + } + } +} + +//--------------------------------------------------------------------- + +void DefaultGridDataModel::broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue ) +{ + Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); + GridDataEvent aEvent( xSource, name, oldValue, newValue, 0, ::rtl::OUString(), Sequence< ::rtl::OUString>() ); + broadcast( data_changed, aEvent); +} + +//--------------------------------------------------------------------- + +void DefaultGridDataModel::broadcast_add( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData ) +{ + Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); + GridDataEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, headerName, rowData ); + broadcast( row_added, aEvent); +} + +//--------------------------------------------------------------------- + +void DefaultGridDataModel::broadcast_remove( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData ) +{ + Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); + GridDataEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, headerName, rowData ); + broadcast( row_removed, aEvent); +} + +//--------------------------------------------------------------------- + +//--------------------------------------------------------------------- +// XDefaultGridDataModel +//--------------------------------------------------------------------- +::sal_Int32 SAL_CALL DefaultGridDataModel::getRowHeight() throw (::com::sun::star::uno::RuntimeException) +{ + return rowHeight; +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::setRowHeight(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException) +{ + sal_Int32 oldValue = rowHeight; + rowHeight = value; + + broadcast_changed( ROWHEIGHT, Any(oldValue), Any(value) ); +} + +//--------------------------------------------------------------------- + +::sal_Int32 SAL_CALL DefaultGridDataModel::getRowCount() throw (::com::sun::star::uno::RuntimeException) +{ + return data.size(); +} + +//--------------------------------------------------------------------- + +::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridDataModel::getRowHeaders() throw (::com::sun::star::uno::RuntimeException) +{ + return comphelper::containerToSequence(rowHeaders); +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::setRowHeaders(const ::com::sun::star::uno::Sequence< ::rtl::OUString > & value) throw (::com::sun::star::uno::RuntimeException) +{ + ::com::sun::star::uno::Sequence< ::rtl::OUString > oldValue( comphelper::containerToSequence(rowHeaders) ); + + std::vector< rtl::OUString>::iterator iterator; + int i = 0; + int sequenceSize = value.getLength(); + + for(iterator = rowHeaders.begin(); iterator != rowHeaders.end(); iterator++) + { + if ( sequenceSize > i ) + *iterator = value[i]; + else + *iterator = ::rtl::OUString(); + i++; + } + + broadcast_changed( ROWHEADERS, Any(oldValue), Any(comphelper::containerToSequence(rowHeaders)) ); +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::addRow(const ::rtl::OUString & headername, const ::com::sun::star::uno::Sequence< ::rtl::OUString > & rRowdata) throw (::com::sun::star::uno::RuntimeException) +{ + // store header name + rowHeaders.push_back(headername); + + + // store row data + std::vector< rtl::OUString > newRow( + comphelper::sequenceToContainer< std::vector >(rRowdata)); + + data.push_back( newRow ); + + broadcast_add( data.size()-1, headername, rRowdata); + +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::removeRow(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException) +{ + if ( index >= 0 && index <= getRowCount()-1) + { + /* if(Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectedIndex( index )) + { + ::com::sun::star::uno::Sequence<::sal_Int32> selectedRows = Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getSelection(); + selectedRow.erase(selectedRows.begin()+index); + }*/ + + ::rtl::OUString headerName( (::rtl::OUString) rowHeaders[index] ); + rowHeaders.erase(rowHeaders.begin() + index); + + Sequence< ::rtl::OUString >& rowData ( (Sequence< ::rtl::OUString >&)data[index] ); + data.erase(data.begin() + index); + broadcast_remove( index, headerName, rowData); + } + else + return; +} +//--------------------------------------------------------------------- +::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > SAL_CALL DefaultGridDataModel::getData() throw (::com::sun::star::uno::RuntimeException) +{ + + std::vector< std::vector< ::rtl::OUString > >::iterator iterator; + std::vector< Sequence< ::rtl::OUString > > dummyContainer(0); + + + for(iterator = data.begin(); iterator != data.end(); iterator++) + { + Sequence< ::rtl::OUString > cols(comphelper::containerToSequence(*iterator)); + dummyContainer.push_back( cols ); + } + Sequence< Sequence< ::rtl::OUString > > dataSequence(comphelper::containerToSequence(dummyContainer)); + + return dataSequence; +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::addDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException) +{ + BrdcstHelper.addListener( XGridDataListener::static_type(), xListener ); +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::removeDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException) +{ + BrdcstHelper.removeListener( XGridDataListener::static_type(), xListener ); +} + +void SAL_CALL DefaultGridDataModel::removeAll() throw (RuntimeException) +{ + rowHeaders.clear(); + data.clear(); + broadcast_remove( -1, ::rtl::OUString(), 0); +} + +//--------------------------------------------------------------------- +// XComponent +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::dispose() throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + + ::com::sun::star::lang::EventObject aEvent; + aEvent.Source.set( static_cast< ::cppu::OWeakObject* >( this ) ); + BrdcstHelper.aLC.disposeAndClear( aEvent ); + +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException) +{ + BrdcstHelper.addListener( XEventListener::static_type(), xListener ); +} + +//--------------------------------------------------------------------- + +void SAL_CALL DefaultGridDataModel::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException) +{ + BrdcstHelper.removeListener( XEventListener::static_type(), xListener ); +} +//--------------------------------------------------------------------- +// XServiceInfo +//--------------------------------------------------------------------- + +::rtl::OUString SAL_CALL DefaultGridDataModel::getImplementationName( ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.DefaultGridDataModel" ) ); + return aImplName; +} + +//--------------------------------------------------------------------- + +sal_Bool SAL_CALL DefaultGridDataModel::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + return ServiceName.equalsAscii( szServiceName_DefaultGridDataModel ); +} + +//--------------------------------------------------------------------- + +::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridDataModel::getSupportedServiceNames( ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + static const OUString aServiceName( OUString::createFromAscii( szServiceName_DefaultGridDataModel ) ); + static const Sequence< OUString > aSeq( &aServiceName, 1 ); + return aSeq; +} + +} + +Reference< XInterface > SAL_CALL DefaultGridDataModel_CreateInstance( const Reference< XMultiServiceFactory >& ) +{ + return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::DefaultGridDataModel ); +} + diff --git a/toolkit/source/controls/grid/defaultgriddatamodel.hxx b/toolkit/source/controls/grid/defaultgriddatamodel.hxx new file mode 100644 index 000000000000..18000c9f5a71 --- /dev/null +++ b/toolkit/source/controls/grid/defaultgriddatamodel.hxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: griddatamodel.hxx,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_toolkit.hxx" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using ::rtl::OUString; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt; +using namespace ::com::sun::star::awt::grid; +using namespace ::com::sun::star::lang; + +namespace toolkit +{ + +enum broadcast_type { row_added, row_removed, data_changed}; + +class DefaultGridDataModel : public ::cppu::WeakImplHelper2< XGridDataModel, XServiceInfo >, + public MutexAndBroadcastHelper +{ +public: + DefaultGridDataModel(); + virtual ~DefaultGridDataModel(); + + // XGridDataModel + virtual ::sal_Int32 SAL_CALL getRowHeight() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setRowHeight(::sal_Int32 the_value) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int32 SAL_CALL getRowCount() throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getRowHeaders() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setRowHeaders(const ::com::sun::star::uno::Sequence< ::rtl::OUString > & value) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > SAL_CALL getData() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addRow(const ::rtl::OUString & headername, const ::com::sun::star::uno::Sequence< ::rtl::OUString > & data) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeRow(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException); + virtual void SAL_CALL removeDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException); + virtual void SAL_CALL removeAll() throw (RuntimeException); + + // XComponent + virtual void SAL_CALL dispose( ) throw (RuntimeException); + virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException); + virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); + +private: + + void broadcast( broadcast_type eType, const GridDataEvent& aEvent ); + void broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue ); + void broadcast_add( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData ); + void broadcast_remove( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData ); + + sal_Int32 rowHeight; + std::vector< std::vector < ::rtl::OUString > > data; + std::vector< ::rtl::OUString > rowHeaders; +}; + +} diff --git a/toolkit/source/controls/grid/gridcolumn.cxx b/toolkit/source/controls/grid/gridcolumn.cxx new file mode 100644 index 000000000000..8b398b4aed58 --- /dev/null +++ b/toolkit/source/controls/grid/gridcolumn.cxx @@ -0,0 +1,166 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: treedatamodel.cxx,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_toolkit.hxx" +#include "gridcolumn.hxx" +#include +#include +#include + +using ::rtl::OUString; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt; +using namespace ::com::sun::star::awt::grid; +using namespace ::com::sun::star::lang; + +namespace toolkit +{ + +/////////////////////////////////////////////////////////////////////// +// class GridColumn +/////////////////////////////////////////////////////////////////////// + +GridColumn::GridColumn() +: identifier(Any()) +{ +} + +//--------------------------------------------------------------------- + +GridColumn::~GridColumn() +{ +} + +//--------------------------------------------------------------------- + +//--------------------------------------------------------------------- +// XGridColumn +//--------------------------------------------------------------------- + +::com::sun::star::uno::Any SAL_CALL GridColumn::getIdentifier() throw (::com::sun::star::uno::RuntimeException) +{ + return identifier; +} + +//--------------------------------------------------------------------- + +void SAL_CALL GridColumn::setIdentifier(const ::com::sun::star::uno::Any & value) throw (::com::sun::star::uno::RuntimeException) +{ + value >>= identifier; +} + +//-------------------------------------------------------------------- + +::sal_Int32 SAL_CALL GridColumn::getColumnWidth() throw (::com::sun::star::uno::RuntimeException) +{ + return columnWidth; +} + +//-------------------------------------------------------------------- + +void SAL_CALL GridColumn::setColumnWidth(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException) +{ + columnWidth = value; +} + +//-------------------------------------------------------------------- + +::rtl::OUString SAL_CALL GridColumn::getTitle() throw (::com::sun::star::uno::RuntimeException) +{ + return title; +} + +//-------------------------------------------------------------------- + +void SAL_CALL GridColumn::setTitle(const ::rtl::OUString & value) throw (::com::sun::star::uno::RuntimeException) +{ + title = value; +} + +//--------------------------------------------------------------------- +// XComponent +//--------------------------------------------------------------------- + +void SAL_CALL GridColumn::dispose() throw (RuntimeException) +{ +} + +//--------------------------------------------------------------------- + +void SAL_CALL GridColumn::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException) +{ + (void) xListener; +} + +//--------------------------------------------------------------------- + +void SAL_CALL GridColumn::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException) +{ + (void) xListener; +} + +//--------------------------------------------------------------------- +// XServiceInfo +//--------------------------------------------------------------------- + +::rtl::OUString SAL_CALL GridColumn::getImplementationName( ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.GridColumn" ) ); + return aImplName; +} + +//--------------------------------------------------------------------- + +sal_Bool SAL_CALL GridColumn::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + return ServiceName.equalsAscii( szServiceName_GridColumn ); +} + +//--------------------------------------------------------------------- + +::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL GridColumn::getSupportedServiceNames( ) throw (RuntimeException) +{ + ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); + static const OUString aServiceName( OUString::createFromAscii( szServiceName_GridColumn ) ); + static const Sequence< OUString > aSeq( &aServiceName, 1 ); + return aSeq; +} + +} + +Reference< XInterface > SAL_CALL GridColumn_CreateInstance( const Reference< XMultiServiceFactory >& ) +{ + return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::GridColumn ); +} + diff --git a/toolkit/source/controls/grid/gridcolumn.hxx b/toolkit/source/controls/grid/gridcolumn.hxx new file mode 100644 index 000000000000..a451054ce93f --- /dev/null +++ b/toolkit/source/controls/grid/gridcolumn.hxx @@ -0,0 +1,85 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: griddatamodel.hxx,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_toolkit.hxx" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using ::rtl::OUString; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt; +using namespace ::com::sun::star::awt::grid; +using namespace ::com::sun::star::lang; + +namespace toolkit +{ + +class GridColumn : public ::cppu::WeakImplHelper2< XGridColumn, XServiceInfo >, + public MutexAndBroadcastHelper +{ +public: + GridColumn(); + virtual ~GridColumn(); + + // XGridColumn + virtual ::com::sun::star::uno::Any SAL_CALL getIdentifier() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setIdentifier(const ::com::sun::star::uno::Any & value) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int32 SAL_CALL getColumnWidth() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setColumnWidth(::sal_Int32 the_value) throw (::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getTitle() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setTitle(const ::rtl::OUString & value) throw (::com::sun::star::uno::RuntimeException); + + // XComponent + virtual void SAL_CALL dispose( ) throw (RuntimeException); + virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException); + virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); + + +private: + Any identifier; + sal_Int32 columnWidth; + ::rtl::OUString title; +}; + +} diff --git a/toolkit/source/controls/grid/gridcontrol.cxx b/toolkit/source/controls/grid/gridcontrol.cxx new file mode 100644 index 000000000000..c642d8a0dcce --- /dev/null +++ b/toolkit/source/controls/grid/gridcontrol.cxx @@ -0,0 +1,273 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: gridcontrol.cxx,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_toolkit.hxx" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using ::rtl::OUString; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt::grid; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::container; +using namespace ::com::sun::star::view; + +namespace toolkit +{ +// ---------------------------------------------------- +// class UnoGridModel +// ---------------------------------------------------- +UnoGridModel::UnoGridModel() +{ + ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR ); + ImplRegisterProperty( BASEPROPERTY_BORDER ); + ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR ); + ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL ); + ImplRegisterProperty( BASEPROPERTY_ENABLED ); + ImplRegisterProperty( BASEPROPERTY_FILLCOLOR ); + ImplRegisterProperty( BASEPROPERTY_HELPTEXT ); + ImplRegisterProperty( BASEPROPERTY_HELPURL ); + ImplRegisterProperty( BASEPROPERTY_PRINTABLE ); + ImplRegisterProperty( BASEPROPERTY_SIZEABLE ); // resizeable + ImplRegisterProperty( BASEPROPERTY_HSCROLL ); + ImplRegisterProperty( BASEPROPERTY_VSCROLL ); + ImplRegisterProperty( BASEPROPERTY_GRID_SHOWROWHEADER ); + ImplRegisterProperty( BASEPROPERTY_GRID_SHOWCOLUMNHEADER ); + ImplRegisterProperty( BASEPROPERTY_GRID_DATAMODEL ); + ImplRegisterProperty( BASEPROPERTY_GRID_COLUMNMODEL ); + ImplRegisterProperty( BASEPROPERTY_GRID_SELECTIONMODE ); + +} + +UnoGridModel::UnoGridModel( const UnoGridModel& rModel ) +: UnoControlModel( rModel ) +{ +} + +UnoControlModel* UnoGridModel::Clone() const +{ + return new UnoGridModel( *this ); +} + +OUString UnoGridModel::getServiceName() throw(RuntimeException) +{ + return OUString::createFromAscii( szServiceName_GridControlModel ); +} + +Any UnoGridModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const +{ + switch( nPropId ) + { + case BASEPROPERTY_DEFAULTCONTROL: + return uno::makeAny( ::rtl::OUString::createFromAscii( szServiceName_GridControl ) ); + case BASEPROPERTY_GRID_SELECTIONMODE: + return uno::makeAny( SelectionType(1) ); + default: + return UnoControlModel::ImplGetDefaultValue( nPropId ); + } + +} + +::cppu::IPropertyArrayHelper& UnoGridModel::getInfoHelper() +{ + static UnoPropertyArrayHelper* pHelper = NULL; + if ( !pHelper ) + { + Sequence aIDs = ImplGetPropertyIds(); + pHelper = new UnoPropertyArrayHelper( aIDs ); + } + return *pHelper; +} + +// XMultiPropertySet +Reference< XPropertySetInfo > UnoGridModel::getPropertySetInfo( ) throw(RuntimeException) +{ + static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) ); + return xInfo; +} + + +// ---------------------------------------------------- +// class UnoGridControl +// ---------------------------------------------------- +UnoGridControl::UnoGridControl() +: mSelectionMode(SelectionType(1)) +{ +} + +OUString UnoGridControl::GetComponentServiceName() +{ + return OUString::createFromAscii( "Grid" ); +} + +void SAL_CALL UnoGridControl::dispose( ) throw(RuntimeException) +{ + UnoControl::dispose(); +} + +void UnoGridControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer > & rParentPeer ) throw(uno::RuntimeException) +{ + UnoControlBase::createPeer( rxToolkit, rParentPeer ); + + Reference< XGridControl > xGrid( getPeer(), UNO_QUERY_THROW ); + + Reference xListener ( getPeer(), UNO_QUERY_THROW ); + Reference xPropSet ( getModel(), UNO_QUERY_THROW ); + + Reference xGridDataModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "GridDataModel" )), UNO_QUERY_THROW ); + xGridDataModel->addDataListener(xListener); +} + + +// ------------------------------------------------------------------- +// XGridControl +// ------------------------------------------------------------------- + +::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL UnoGridControl::getColumnModel() throw (::com::sun::star::uno::RuntimeException) +{ + Reference xPropSet ( getModel(), UNO_QUERY_THROW ); + Reference xGridColumnModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "ColumnModel" )), UNO_QUERY_THROW ); + + return xGridColumnModel; +} + +void SAL_CALL UnoGridControl::setColumnModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > & model) throw (::com::sun::star::uno::RuntimeException) +{ + Reference xPropSet ( getModel(), UNO_QUERY_THROW ); + xPropSet->setPropertyValue(OUString::createFromAscii( "ColumnModel" ), Any (model)); +} + +::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL UnoGridControl::getDataModel() throw (::com::sun::star::uno::RuntimeException) +{ + Reference xPropSet ( getModel(), UNO_QUERY_THROW ); + Reference xGridDataModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "GridDataModel" )), UNO_QUERY_THROW ); + + return xGridDataModel; +} + +void SAL_CALL UnoGridControl::setDataModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > & model) throw (::com::sun::star::uno::RuntimeException) +{ + Reference xPropSet ( getModel(), UNO_QUERY_THROW ); + xPropSet->setPropertyValue(OUString::createFromAscii( "GridDataModel" ), Any(model)); +} + +::sal_Int32 UnoGridControl::getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException) +{ + return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getItemIndexAtPoint( x, y ); +} + +/* +void SAL_CALL UnoGridControl::addMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException) +{ + Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->addMouseListener( listener ); +} + +void SAL_CALL UnoGridControl::removeMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException) +{ + Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeMouseListener( listener ); +} +*/ +// ------------------------------------------------------------------- +// XGridSelection +// ------------------------------------------------------------------- + +::sal_Int32 SAL_CALL UnoGridControl::getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException) +{ + return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getMinSelectionIndex(); +} + +::sal_Int32 SAL_CALL UnoGridControl::getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException) +{ + return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getMaxSelectionIndex(); +} + +void SAL_CALL UnoGridControl::insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException) +{ + Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->insertIndexIntervall( start, length); +} + +void SAL_CALL UnoGridControl::removeIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException) +{ + Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeIndexIntervall( start, length ); +} + +::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL UnoGridControl::getSelection() throw (::com::sun::star::uno::RuntimeException) +{ + return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getSelection(); +} + +::sal_Bool SAL_CALL UnoGridControl::isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException) +{ + return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectionEmpty(); +} + +::sal_Bool SAL_CALL UnoGridControl::isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException) +{ + return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectedIndex( index ); +} + +void SAL_CALL UnoGridControl::selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException) +{ + Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->selectRow( y ); +} + +void SAL_CALL UnoGridControl::addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException) +{ + Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->addSelectionListener( listener ); +} + +void SAL_CALL UnoGridControl::removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException) +{ + Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeSelectionListener( listener ); +} +} + +Reference< XInterface > SAL_CALL GridControl_CreateInstance( const Reference< XMultiServiceFactory >& ) +{ + return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::UnoGridControl ); +} + +Reference< XInterface > SAL_CALL GridControlModel_CreateInstance( const Reference< XMultiServiceFactory >& ) +{ + return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::UnoGridModel ); +} diff --git a/toolkit/source/controls/grid/gridcontrol.hxx b/toolkit/source/controls/grid/gridcontrol.hxx new file mode 100644 index 000000000000..5648c812fbff --- /dev/null +++ b/toolkit/source/controls/grid/gridcontrol.hxx @@ -0,0 +1,124 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: gridcontrol.hxx,v $ + * $Revision: 1.3 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef TOOLKIT_GRID_CONTROL_HXX +#define TOOLKIT_GRID_CONTROL_HXX + +#include +#include +#include +#include +#include +#include + +#include + +namespace toolkit { + +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::awt; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::container; + +// =================================================================== +// = UnoGridModel +// =================================================================== +class UnoGridModel : public UnoControlModel +{ +protected: + Any ImplGetDefaultValue( sal_uInt16 nPropId ) const; + ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper(); + +public: + UnoGridModel(); + UnoGridModel( const UnoGridModel& rModel ); + + UnoControlModel* Clone() const; + + // ::com::sun::star::beans::XMultiPropertySet + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::io::XPersistObject + ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + DECLIMPL_SERVICEINFO_DERIVED( UnoGridModel, UnoControlModel, szServiceName_GridControlModel ) +}; + + +// =================================================================== +// = UnoGridControl +// =================================================================== +class UnoGridControl : public ::cppu::ImplInheritanceHelper1< UnoControlBase, ::com::sun::star::awt::grid::XGridControl > +{ +public: + UnoGridControl(); + ::rtl::OUString GetComponentServiceName(); + + // ::com::sun::star::lang::XComponent + void SAL_CALL dispose( ) throw(::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::awt::XControl + void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& Toolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& Parent ) throw(::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::awt::grid::XGridControl + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL getColumnModel() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setColumnModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > & model) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL getDataModel() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setDataModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > & model) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int32 SAL_CALL getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException); + //virtual void SAL_CALL addMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException); + //virtual void SAL_CALL removeMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::awt::grid::XGridSelection + + virtual ::sal_Int32 SAL_CALL getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int32 SAL_CALL getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL getSelection() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::lang::XServiceInfo + DECLIMPL_SERVICEINFO_DERIVED( UnoGridControl, UnoControlBase, szServiceName_GridControl ) + + using UnoControl::getPeer; +private: + ::com::sun::star::view::SelectionType mSelectionMode; +}; + +} // toolkit + +#endif // _TOOLKIT_TREE_CONTROL_HXX diff --git a/toolkit/source/controls/grid/makefile.mk b/toolkit/source/controls/grid/makefile.mk new file mode 100644 index 000000000000..7c904b3ef02e --- /dev/null +++ b/toolkit/source/controls/grid/makefile.mk @@ -0,0 +1,54 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2008 by Sun Microsystems, Inc. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.3 $ +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=..$/..$/.. + +PRJNAME=toolkit +TARGET=grid + +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(PRJ)$/util$/makefile.pmk + +# --- Files -------------------------------------------------------- + +SLOFILES= \ + $(SLO)$/gridcontrol.obj\ + $(SLO)$/defaultgriddatamodel.obj\ + $(SLO)$/defaultgridcolumnmodel.obj\ + $(SLO)$/gridcolumn.obj + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk diff --git a/toolkit/source/helper/property.cxx b/toolkit/source/helper/property.cxx index 0560afbd835f..e71c03bae47d 100644 --- a/toolkit/source/helper/property.cxx +++ b/toolkit/source/helper/property.cxx @@ -48,6 +48,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -252,7 +255,6 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount ) DECL_PROP_2 ( "ValueStep", VALUESTEP_DOUBLE, double, BOUND, MAYBEDEFAULT ), DECL_PROP_3 ( "VerticalAlign", VERTICALALIGN, VerticalAlignment, BOUND, MAYBEDEFAULT, MAYBEVOID ), DECL_DEP_PROP_3 ( "VisibleSize", VISIBLESIZE, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ), - DECL_PROP_2 ( "Activated", ACTIVATED, sal_Bool, BOUND, MAYBEDEFAULT ), DECL_PROP_2 ( "Complete", COMPLETE, sal_Bool, BOUND, MAYBEDEFAULT ), DECL_PROP_2 ( "CurrentItemID", CURRENTITEMID, sal_Int16, BOUND, MAYBEDEFAULT ), @@ -273,6 +275,11 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount ) DECL_PROP_2 ( "URL", URL, ::rtl::OUString, BOUND, MAYBEDEFAULT ), DECL_PROP_2 ( "WritingMode", WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT ), DECL_PROP_3 ( "ContextWritingMode", CONTEXT_WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT, TRANSIENT ), + DECL_PROP_2 ( "ShowRowHeader", GRID_SHOWROWHEADER, sal_Bool, BOUND, MAYBEDEFAULT ), + DECL_PROP_2 ( "ShowColumnHeader", GRID_SHOWCOLUMNHEADER, sal_Bool, BOUND, MAYBEDEFAULT ), + DECL_PROP_3 ( "GridDataModel", GRID_DATAMODEL, Reference< ::com::sun::star::awt::grid::XGridDataModel >, BOUND, MAYBEDEFAULT, MAYBEVOID ), + DECL_PROP_3 ( "ColumnModel", GRID_COLUMNMODEL, Reference< ::com::sun::star::awt::grid::XGridColumnModel >, BOUND, MAYBEDEFAULT, MAYBEVOID ), + DECL_PROP_3 ( "SelectionModel", GRID_SELECTIONMODE, ::com::sun::star::view::SelectionType, BOUND, MAYBEDEFAULT, MAYBEVOID ), DECL_PROP_2 ( "EnableVisible", ENABLEVISIBLE, sal_Bool, BOUND, MAYBEDEFAULT ) }; pPropertyInfos = aImplPropertyInfos; diff --git a/toolkit/source/helper/registerservices.cxx b/toolkit/source/helper/registerservices.cxx index d9264f22cb51..ea29c9810beb 100644 --- a/toolkit/source/helper/registerservices.cxx +++ b/toolkit/source/helper/registerservices.cxx @@ -202,6 +202,12 @@ IMPL_CREATEINSTANCE( UnoThrobberControlModel ) extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL TreeControl_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ); extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL TreeControlModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ); extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL MutableTreeDataModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ); +extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridControl_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ); +extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridControlModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ); +extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL DefaultGridDataModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ); +extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL DefaultGridColumnModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ); +extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridColumn_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ); + extern sal_Bool SAL_CALL comp_AsyncCallback_component_writeInfo( void * serviceManager, void * registryKey ); extern void * SAL_CALL comp_AsyncCallback_component_getFactory( const char * implName, void * serviceManager, void * registryKey ); @@ -287,6 +293,11 @@ TOOLKIT_DLLPUBLIC sal_Bool SAL_CALL component_writeInfo( void* _pServiceManager, registerServices( xRegistryKey, "UnoThrobberControl", szServiceName_UnoThrobberControl ); registerServices( xRegistryKey, "UnoFixedHyperlinkControl", szServiceName_UnoControlFixedHyperlink ); registerServices( xRegistryKey, "UnoControlFixedHyperlinkModel", szServiceName_UnoControlFixedHyperlinkModel ); + registerServices( xRegistryKey, "GridControl", szServiceName_GridControl ); + registerServices( xRegistryKey, "GridControlModel", szServiceName_GridControlModel ); + registerServices( xRegistryKey, "DefaultGridDataModel", szServiceName_DefaultGridDataModel ); + registerServices( xRegistryKey, "DefaultGridColumnModel", szServiceName_DefaultGridColumnModel ); + registerServices( xRegistryKey, "GridColumn", szServiceName_GridColumn ); comp_AsyncCallback_component_writeInfo( _pServiceManager, _pRegistryKey ); comp_Layout_component_writeInfo( _pServiceManager, _pRegistryKey ); @@ -369,6 +380,12 @@ TOOLKIT_DLLPUBLIC void* SAL_CALL component_getFactory( const sal_Char* sImplemen CHECKANDCREATEFACTORY( UnoThrobberControl, szServiceName_UnoThrobberControl, NULL ) CHECKANDCREATEFACTORY( UnoFixedHyperlinkControl, szServiceName_UnoControlFixedHyperlink, NULL ) CHECKANDCREATEFACTORY( UnoControlFixedHyperlinkModel, szServiceName_UnoControlFixedHyperlinkModel, NULL ) + CHECKANDCREATEFACTORY( GridControl, szServiceName_GridControl, NULL ); + CHECKANDCREATEFACTORY( GridControlModel, szServiceName_GridControlModel, NULL ); + CHECKANDCREATEFACTORY( DefaultGridDataModel, szServiceName_DefaultGridDataModel, NULL ); + CHECKANDCREATEFACTORY( DefaultGridColumnModel, szServiceName_DefaultGridColumnModel, NULL ); + CHECKANDCREATEFACTORY( GridColumn, szServiceName_GridColumn, NULL ); + if ( rtl_str_compare( sImplementationName, "com.sun.star.awt.comp.AsyncCallback" ) == 0 ) return comp_AsyncCallback_component_getFactory( sImplementationName, _pServiceManager, _pRegistryKey ); diff --git a/toolkit/source/helper/servicenames.cxx b/toolkit/source/helper/servicenames.cxx index 903f18f95eae..f00e7a2b09fa 100644 --- a/toolkit/source/helper/servicenames.cxx +++ b/toolkit/source/helper/servicenames.cxx @@ -101,4 +101,8 @@ const sal_Char __FAR_DATA szServiceName_UnoThrobberControlModel[] = "com.sun.sta const sal_Char __FAR_DATA szServiceName_UnoThrobberControl[] = "com.sun.star.awt.UnoThrobberControl"; const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlink[] = "com.sun.star.awt.UnoControlFixedHyperlink"; const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlinkModel[] = "com.sun.star.awt.UnoControlFixedHyperlinkModel"; - +const sal_Char __FAR_DATA szServiceName_GridControl[] = "com.sun.star.awt.grid.UnoControlGrid"; +const sal_Char __FAR_DATA szServiceName_GridControlModel[] = "com.sun.star.awt.grid.UnoControlGridModel"; +const sal_Char __FAR_DATA szServiceName_DefaultGridDataModel[] = "com.sun.star.awt.grid.DefaultGridDataModel"; +const sal_Char __FAR_DATA szServiceName_DefaultGridColumnModel[] = "com.sun.star.awt.grid.DefaultGridColumnModel"; +const sal_Char __FAR_DATA szServiceName_GridColumn[] = "com.sun.star.awt.grid.GridColumn"; diff --git a/toolkit/util/makefile.mk b/toolkit/util/makefile.mk index d6a1e5f15c65..a04bdcbdf801 100644 --- a/toolkit/util/makefile.mk +++ b/toolkit/util/makefile.mk @@ -52,6 +52,7 @@ USE_DEFFILE=TRUE LIB1TARGET= $(SLB)$/$(TARGET).lib LIB1FILES= $(SLB)$/awt.lib \ $(SLB)$/tree.lib \ + $(SLB)$/grid.lib \ $(SLB)$/controls.lib \ $(SLB)$/helper.lib\ $(SLB)$/layout-core.lib \ diff --git a/toolkit/util/toolkit.xml b/toolkit/util/toolkit.xml index 8ec1a48d440d..2fb4588550bc 100644 --- a/toolkit/util/toolkit.xml +++ b/toolkit/util/toolkit.xml @@ -701,4 +701,50 @@ com.sun.star.awt.tree.MutableTreeNode + + Tobias Krause + stardiv.Toolkit.UnoGridModel + specifies the model of a grid control + com.sun.star.loader.SharedLibrary + c++ + + com.sun.star.awt.grid.UnoControlGridModel + + + Tobias Krause + stardiv.Toolkit.UnoGridControl + specifies a grid control + com.sun.star.loader.SharedLibrary + c++ + + com.sun.star.awt.grid.UnoControlGrid + + + Tobias Krause + stardiv.Toolkit.DefaultGridDataModel + specifies the grid control default data model + com.sun.star.loader.SharedLibrary + c++ + + com.sun.star.awt.grid.DefaultGridDataModel + + + Tobias Krause + stardiv.Toolkit.DefaultGridColumnModel + specifies the grid control default column model + com.sun.star.loader.SharedLibrary + c++ + + com.sun.star.awt.grid.DefaultGridColumnModel + + + Tobias Krause + stardiv.Toolkit.GridColumn + specifies the grid coloumn model + com.sun.star.loader.SharedLibrary + c++ + + com.sun.star.awt.grid.GridColumn + + \ No newline at end of file -- cgit v1.2.3 From 0f5a6721731d28f0b5a7a3b3e5e274ec99e20e27 Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Wed, 26 Aug 2009 13:37:34 +0000 Subject: CWS-TOOLING: integrate CWS swa11y32_2nd 2009-08-13 13:04:09 +0200 mav r274936 : #i104204# remove support for Ctrl-Tab 2009-08-13 09:59:22 +0200 od r274924 : #i93269# method - emit also object:state-changed:focus, if cursor is inside object 2009-08-11 12:15:11 +0200 tl r274851 : CWS-TOOLING: rebase CWS swa11y32_2nd to trunk@274622 (milestone: DEV300:m54) 2009-07-14 17:35:03 +0200 tl r273982 : 2009-07-10 10:46:39 +0200 tl r273879 : CWS-TOOLING: rebase CWS swa11y32 to trunk@273468 (milestone: DEV300:m51) 2009-07-01 14:00:25 +0200 mav r273577 : #i102879# the text of the button should not change 2009-07-01 13:16:19 +0200 od r273574 : #159496# method - do not release the solar mutex 2009-06-29 15:29:10 +0200 od r273476 : #i95042# method - return instance for instance of type . note: is inherited from 2009-06-23 15:49:32 +0200 mav r273283 : #i101967# fix tab-control implementation 2009-06-22 13:56:22 +0200 od r273229 : #i100938# method - always provide start_offset and end_offset - do _not_ increment the end_offset provide by instance 2009-06-02 12:09:03 +0200 mav r272492 : #i101959# Let the additional dialog window add its childred to the parents tab-hierarchy 2009-06-02 09:55:39 +0200 mav r272484 : #i102015# allow to have indirect child windows in tab-hierarchy 2009-06-02 09:49:42 +0200 mav r272482 : #i102015# Let the windows containing the extension dialog controls add controls to the tab hierarchy 2009-05-27 15:45:33 +0200 od r272354 : #i101012# method - emit vcl event LISTBOX_SELECT only in case that the given entry is selected. 2009-05-27 09:54:36 +0200 od r272333 : #i92103# map UNO-API accessible events list box entry expanded/collapsed to corresponding atk events. 2009-05-27 09:52:15 +0200 od r272331 : #i92103# process list box entry expanded/collapsed events 2009-05-27 09:49:19 +0200 od r272330 : #i92103# emit vcl event list box entry expanded/collapsed 2009-05-26 10:42:05 +0200 od r272283 : #i93269# correct fix: check success of call 2009-05-04 15:52:04 +0200 od r271469 : #i92103# new vcl event ids VCLEVENT_LISTBOX_ENTRY_EXPANDED and VCLEVENT_LISTBOX_ENTRY_COLLAPSED 2009-05-04 15:10:20 +0200 od r271460 : #i92103# refine definition of new constants 2009-05-04 14:36:44 +0200 od r271454 : #i92103# new constants for indicating that a list box entry is expanded respectively collapsed. 2009-04-30 16:09:40 +0200 od r271421 : #i93269# method - emit text_caret_moved event for object, if cursor is inside the object. 2009-04-22 14:00:10 +0200 tl r271105 : warning-free code 2009-04-22 09:17:30 +0200 tl r271073 : CWS-TOOLING: rebase CWS swa11y32 to trunk@270723 (milestone: DEV300:m46) 2009-04-20 12:53:03 +0200 cd r270974 : #i83639# Check extendedhelp state to provide correct tool tip text 2009-04-03 13:07:13 +0200 tl r270471 : #i63983# changed accessible object names to empty strings 2009-04-01 15:52:09 +0200 tl r270336 : #i90991# accessible names and description for paragraphs should be empty 2009-04-01 15:12:42 +0200 tl r270333 : #i90991# accessible names and description for paragraphs should be empty 2009-04-01 15:10:34 +0200 tl r270331 : warning-free code 2009-04-01 12:54:44 +0200 tl r270319 : #i89176# Implementation of XAccessibleMultiLineText in EditEngine 2009-04-01 12:52:56 +0200 tl r270318 : #i89176# Implementation of XAccessibleMultiLineText in EditEngine 2009-03-27 18:31:01 +0100 tbe r270166 : #i92143# text getRangeExtents reports incorrect 'x' values for spreadsheet cells 2009-03-13 13:43:54 +0100 tl r269476 : #i94322# ImpEditView::ShowCursor and nPara == USHRT_MAX problem fixed 2009-03-12 10:27:30 +0100 tl r269366 : warning-free code; unresolved external dbg_out when compiling with debug=t 2009-03-11 12:40:31 +0100 tl r269312 : warning-free code Solaris x86 2009-03-10 15:49:01 +0100 tl r269279 : #i86443# handle GetColumnCount() == 0 2009-03-10 10:48:32 +0100 cl r269254 : #i91742# name cells for accessibility 2009-03-09 17:06:33 +0100 cl r269203 : #i91742# call init on accessible cells --- svtools/source/contnr/imivctl1.cxx | 8 ++++- svtools/source/contnr/svtabbx.cxx | 11 ++---- svtools/source/contnr/svtreebx.cxx | 16 +++++++++ toolkit/source/helper/unowrapper.cxx | 8 ++++- vcl/inc/vcl/vclevent.hxx | 4 +++ vcl/source/window/dlgctrl.cxx | 65 +++++++++++++++++++++++++++++++++--- vcl/source/window/taskpanelist.cxx | 28 ++++++++-------- vcl/unx/gtk/a11y/atklistener.cxx | 26 +++++++++++++++ vcl/unx/gtk/a11y/atktext.cxx | 11 ++++-- vcl/unx/gtk/a11y/atkutil.cxx | 31 +++++++++++++++++ 10 files changed, 178 insertions(+), 30 deletions(-) diff --git a/svtools/source/contnr/imivctl1.cxx b/svtools/source/contnr/imivctl1.cxx index da75608a38b3..954c8a7ca179 100644 --- a/svtools/source/contnr/imivctl1.cxx +++ b/svtools/source/contnr/imivctl1.cxx @@ -540,7 +540,13 @@ void SvxIconChoiceCtrl_Impl::EntrySelected( SvxIconChoiceCtrlEntry* pEntry, BOOL ShowCursor( TRUE ); } // if( bUpdateMode ) - CallEventListeners( VCLEVENT_LISTBOX_SELECT, pEntry ); + // --> OD 2009-05-27 #i101012# + // emit vcl event LISTBOX_SELECT only in case that the given entry is selected. + if ( bSelect ) + { + CallEventListeners( VCLEVENT_LISTBOX_SELECT, pEntry ); + } + // <-- } void SvxIconChoiceCtrl_Impl::ResetVirtSize() diff --git a/svtools/source/contnr/svtabbx.cxx b/svtools/source/contnr/svtabbx.cxx index fc02c85dfd25..1770810c7a5d 100644 --- a/svtools/source/contnr/svtabbx.cxx +++ b/svtools/source/contnr/svtabbx.cxx @@ -989,7 +989,7 @@ Reference< XAccessible > SvHeaderTabListBox::CreateAccessibleCell( sal_Int32 _nR m_aAccessibleChildren.assign( nCount, Reference< XAccessible >() ); } - nIndex = ( _nRow * GetColumnCount() ) + _nColumnPos + GetColumnCount(); + nIndex = ( _nRow * nColumnCount ) + _nColumnPos + nColumnCount; xChild = m_aAccessibleChildren[ nIndex ]; } @@ -1084,15 +1084,10 @@ sal_Bool SvHeaderTabListBox::ConvertPointToColumnHeader( sal_uInt16&, const Poin switch( _eType ) { case ::svt::BBTYPE_BROWSEBOX: - aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HeaderTabListBox" ) ); - break; - case ::svt::BBTYPE_TABLE: - aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HeaderTabListBoxTable" ) ); - break; - case ::svt::BBTYPE_COLUMNHEADERBAR: - aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ColumnHeaderBar of HeaderTabListBox" ) ); + // should be empty now (see #i63983) + aRetText = ::rtl::OUString(); break; case ::svt::BBTYPE_TABLECELL: diff --git a/svtools/source/contnr/svtreebx.cxx b/svtools/source/contnr/svtreebx.cxx index 200dd30eda1a..a697928842af 100644 --- a/svtools/source/contnr/svtreebx.cxx +++ b/svtools/source/contnr/svtreebx.cxx @@ -1040,6 +1040,14 @@ BOOL SvTreeListBox::Expand( SvLBoxEntry* pParent ) pParent->SetFlags( nFlags ); GetModel()->InvalidateEntry( pParent ); // neu zeichnen } + + // --> OD 2009-04-01 #i92103# + if ( bExpanded ) + { + pImp->CallEventListeners( VCLEVENT_LISTBOX_ENTRY_EXPANDED, pParent ); + } + // <-- + return bExpanded; } @@ -1059,6 +1067,14 @@ BOOL SvTreeListBox::Collapse( SvLBoxEntry* pParent ) pHdlEntry = pParent; ExpandedHdl(); } + + // --> OD 2009-04-01 #i92103# + if ( bCollapsed ) + { + pImp->CallEventListeners( VCLEVENT_LISTBOX_ENTRY_COLLAPSED, pParent ); + } + // <-- + return bCollapsed; } diff --git a/toolkit/source/helper/unowrapper.cxx b/toolkit/source/helper/unowrapper.cxx index a652d493e653..96b8908558a7 100644 --- a/toolkit/source/helper/unowrapper.cxx +++ b/toolkit/source/helper/unowrapper.cxx @@ -65,6 +65,13 @@ using namespace ::com::sun::star; case WINDOW_OKBUTTON: case WINDOW_CANCELBUTTON: return new VCLXButton; case WINDOW_CHECKBOX: return new VCLXCheckBox; + // --> OD 2009-06-29 #i95042# + // A Window of type is inherited from type . + // Thus, it does make more sense to return a instance + // instead of only a instance, especially regarding its + // corresponding accessibility API. + case WINDOW_METRICBOX: + // <-- case WINDOW_COMBOBOX: return new VCLXComboBox; case WINDOW_SPINFIELD: case WINDOW_NUMERICFIELD: @@ -109,7 +116,6 @@ using namespace ::com::sun::star; // case WINDOW_DATEBOX: // case WINDOW_GROUPBOX: // case WINDOW_LONGCURRENCYBOX: - // case WINDOW_METRICBOX: // case WINDOW_SPLITTER: // case WINDOW_STATUSBAR: // case WINDOW_TABCONTROL: diff --git a/vcl/inc/vcl/vclevent.hxx b/vcl/inc/vcl/vclevent.hxx index 88ad880e26ab..a28127dd6f82 100644 --- a/vcl/inc/vcl/vclevent.hxx +++ b/vcl/inc/vcl/vclevent.hxx @@ -146,6 +146,10 @@ class Menu; #define VCLEVENT_ROADMAP_ITEMSELECTED 1171 #define VCLEVENT_TOOLBOX_FORMATCHANGED 1172 // request new layout #define VCLEVENT_COMBOBOX_SETTEXT 1173 +// --> OD 2009-04-01 #i92103# +#define VCLEVENT_LISTBOX_ENTRY_EXPANDED 1174 +#define VCLEVENT_LISTBOX_ENTRY_COLLAPSED 1175 +// <-- // VclMenuEvent #define VCLEVENT_MENU_ACTIVATE 1200 diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx index 392c2ceaa478..c6f64d74c5fc 100644 --- a/vcl/source/window/dlgctrl.cxx +++ b/vcl/source/window/dlgctrl.cxx @@ -46,10 +46,41 @@ using namespace ::com::sun::star; // ======================================================================= +static BOOL ImplHasIndirectTabParent( Window* pWindow ) +{ + // The window has inderect tab parent if it is included in tab hierarchy + // of the indirect parent window + + return ( pWindow && pWindow->GetParent() + && ( pWindow->GetParent()->ImplGetWindow()->GetStyle() & WB_CHILDDLGCTRL ) ); +} + +// ----------------------------------------------------------------------- + +static Window* ImplGetTopParentOfTabHierarchy( Window* pParent ) +{ + // The method allows to find the most close parent containing all the + // window from the current tab-hierarchy + // The direct parent should be provided as a parameter here + + Window* pResult = pParent; + + if ( pResult ) + { + while ( pResult->GetParent() && ( pResult->ImplGetWindow()->GetStyle() & WB_CHILDDLGCTRL ) ) + pResult = pResult->GetParent(); + } + + return pResult; +} + +// ----------------------------------------------------------------------- + static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex ) { Window* pTabPage = NULL; Window* pFoundWindow = NULL; + Window* pWindow = pParent->GetWindow( WINDOW_FIRSTCHILD ); Window* pNextWindow = pWindow; while ( pWindow ) @@ -96,7 +127,8 @@ static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex } } } - else if ( pWindow->GetStyle() & WB_DIALOGCONTROL ) + else if ( ( pWindow->GetStyle() & WB_DIALOGCONTROL ) + || ( pWindow->GetStyle() & WB_CHILDDLGCTRL ) ) pFoundWindow = ImplGetSubChildWindow( pWindow, n, nIndex ); } @@ -122,6 +154,8 @@ static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex static Window* ImplGetChildWindow( Window* pParent, USHORT n, USHORT& nIndex, BOOL bTestEnable ) { + pParent = ImplGetTopParentOfTabHierarchy( pParent ); + nIndex = 0; Window* pWindow = ImplGetSubChildWindow( pParent, n, nIndex ); if ( bTestEnable ) @@ -284,14 +318,16 @@ static Window* ImplFindDlgCtrlWindow( Window* pParent, Window* pWindow, USHORT& USHORT nFormEnd; // Focus-Fenster in der Child-Liste suchen - pSWindow = ImplGetChildWindow( pParent, 0, i, FALSE ); + Window* pFirstChildWindow = pSWindow = ImplGetChildWindow( pParent, 0, i, FALSE ); if( pWindow == NULL ) pWindow = pSWindow; while ( pSWindow ) { - if ( pSWindow->ImplGetWindow()->IsDialogControlStart() ) + // the DialogControlStart mark is only accepted for the direct children + if ( !ImplHasIndirectTabParent( pSWindow ) + && pSWindow->ImplGetWindow()->IsDialogControlStart() ) nFormStart = i; // SecondWindow wegen zusammengesetzten Controls wie @@ -331,12 +367,33 @@ static Window* ImplFindDlgCtrlWindow( Window* pParent, Window* pWindow, USHORT& // Formularende suchen nFormEnd = nFormStart; pTempWindow = pSWindow; + sal_Int32 nIteration = 0; do { nFormEnd = i; pTempWindow = ImplGetNextWindow( pParent, i, i, FALSE ); - if ( !i || (pTempWindow && pTempWindow->ImplGetWindow()->IsDialogControlStart()) ) + + // the DialogControlStart mark is only accepted for the direct children + if ( !i + || ( pTempWindow && !ImplHasIndirectTabParent( pTempWindow ) + && pTempWindow->ImplGetWindow()->IsDialogControlStart() ) ) break; + + if ( pTempWindow && pTempWindow == pFirstChildWindow ) + { + // It is possible to go through the begin of hierarchy once + // while looking for DialogControlStart mark. + // If it happens second time, it looks like an endless loop, + // that should be impossible, but just for the case... + nIteration++; + if ( nIteration >= 2 ) + { + // this is an unexpected scenario + DBG_ASSERT( FALSE, "It seems to be an endless loop!" ); + rFormStart = 0; + break; + } + } } while ( pTempWindow ); rFormEnd = nFormEnd; diff --git a/vcl/source/window/taskpanelist.cxx b/vcl/source/window/taskpanelist.cxx index bae6d99430f0..d1e598532b88 100644 --- a/vcl/source/window/taskpanelist.cxx +++ b/vcl/source/window/taskpanelist.cxx @@ -197,18 +197,21 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent ) { // F6 cycles through everything and works always - // Ctrl-TAB cycles through Menubar, Toolbars and Floatingwindows only and is - // only active if one of those items has the focus - BOOL bF6 = FALSE; + + // MAV, #i104204# + // The old design was the following one: + // < Ctrl-TAB cycles through Menubar, Toolbars and Floatingwindows only and is + // < only active if one of those items has the focus + // + // Since the design of Ctrl-Tab looks to be inconsistent ( non-modal dialogs are not reachable + // and the shortcut conflicts with tab-control shortcut ), it is no more supported BOOL bSplitterOnly = FALSE; BOOL bFocusInList = FALSE; KeyCode aKeyCode = aKeyEvent.GetKeyCode(); BOOL bForward = !aKeyCode.IsShift(); - if( ( (aKeyCode.IsMod1() || aKeyCode.IsMod2()) && aKeyCode.GetCode() == KEY_TAB ) // Ctrl-TAB or Alt-TAB - || ( bF6 = ( aKeyCode.GetCode()) == KEY_F6 ) != FALSE // F6 - ) + if( aKeyCode.GetCode() == KEY_F6 ) // F6 { - bSplitterOnly = bF6 && aKeyCode.IsMod1() && aKeyCode.IsShift(); + bSplitterOnly = aKeyCode.IsMod1() && aKeyCode.IsShift(); // is the focus in the list ? ::std::vector< Window* >::iterator p = mTaskPanes.begin(); @@ -219,12 +222,8 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent ) { bFocusInList = TRUE; - // Ctrl-TAB does not work in Dialogs - if( !bF6 && pWin->IsDialog() ) - return FALSE; - // Ctrl-F6 goes directly to the document - if( !pWin->IsDialog() && bF6 && aKeyCode.IsMod1() && !aKeyCode.IsShift() ) + if( !pWin->IsDialog() && aKeyCode.IsMod1() && !aKeyCode.IsShift() ) { pWin->GrabFocusToDocument(); return TRUE; @@ -236,7 +235,8 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent ) if( bSplitterOnly ) pNextWin = FindNextSplitter( *p, TRUE ); else - pNextWin = bF6 ? FindNextFloat( *p, bForward ) : FindNextPane( *p, bForward ); + pNextWin = FindNextFloat( *p, bForward ); + if( pNextWin != pWin ) { ImplGetSVData()->maWinData.mbNoSaveFocus = TRUE; @@ -261,7 +261,7 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent ) } // the focus is not in the list: activate first float if F6 was pressed - if( !bFocusInList && bF6 ) + if( !bFocusInList ) { Window *pWin; if( bSplitterOnly ) diff --git a/vcl/unx/gtk/a11y/atklistener.cxx b/vcl/unx/gtk/a11y/atklistener.cxx index c3b2859f7c3f..f083e7cc584e 100644 --- a/vcl/unx/gtk/a11y/atklistener.cxx +++ b/vcl/unx/gtk/a11y/atklistener.cxx @@ -360,6 +360,32 @@ void AtkListener::notifyEvent( const accessibility::AccessibleEventObject& aEven break; } + // --> OD 2009-05-26 #i92103# + case accessibility::AccessibleEventId::LISTBOX_ENTRY_EXPANDED: + { + AtkObject *pChild = getObjFromAny( aEvent.NewValue ); + if( pChild ) + { + AtkStateType eExpandedState = ATK_STATE_EXPANDED; + atk_object_notify_state_change( pChild, eExpandedState, true ); + g_object_unref( pChild ); + } + break; + } + + case accessibility::AccessibleEventId::LISTBOX_ENTRY_COLLAPSED: + { + AtkObject *pChild = getObjFromAny( aEvent.NewValue ); + if( pChild ) + { + AtkStateType eExpandedState = ATK_STATE_EXPANDED; + atk_object_notify_state_change( pChild, eExpandedState, false ); + g_object_unref( pChild ); + } + break; + } + // <-- + // AtkAction signals ... case accessibility::AccessibleEventId::ACTION_CHANGED: g_signal_emit_by_name( G_OBJECT( atk_obj ), "property_change::accessible-actions"); diff --git a/vcl/unx/gtk/a11y/atktext.cxx b/vcl/unx/gtk/a11y/atktext.cxx index 1c839ed58839..8bdfe1706962 100644 --- a/vcl/unx/gtk/a11y/atktext.cxx +++ b/vcl/unx/gtk/a11y/atktext.cxx @@ -442,13 +442,20 @@ text_wrapper_get_run_attributes( AtkText *text, pTextAttributes->getRunAttributes( offset, uno::Sequence< rtl::OUString > () ); pSet = attribute_set_new_from_property_values( aAttributeList, true, text ); - if( pSet ) + // --> OD 2009-06-22 #i100938# + // - always provide start_offset and end_offset +// if( pSet ) + // <-- { accessibility::TextSegment aTextSegment = pText->getTextAtIndex(offset, accessibility::AccessibleTextType::ATTRIBUTE_RUN); *start_offset = aTextSegment.SegmentStart; - *end_offset = aTextSegment.SegmentEnd + 1; // FIXME: TESTME + // --> OD 2009-06-22 #i100938# + // Do _not_ increment the end_offset provide by instance +// *end_offset = aTextSegment.SegmentEnd + 1; // FIXME: TESTME + *end_offset = aTextSegment.SegmentEnd; + // <-- } } } diff --git a/vcl/unx/gtk/a11y/atkutil.cxx b/vcl/unx/gtk/a11y/atkutil.cxx index 91f4b3280448..5206c8ce87ca 100644 --- a/vcl/unx/gtk/a11y/atkutil.cxx +++ b/vcl/unx/gtk/a11y/atkutil.cxx @@ -36,6 +36,9 @@ #include #include #include +// --> OD 2009-04-14 #i93269# +#include +// <-- #include #include #include @@ -86,6 +89,34 @@ atk_wrapper_focus_idle_handler (gpointer data) fprintf(stderr, "notifying focus event for %p\n", atk_obj); #endif atk_focus_tracker_notify(atk_obj); + // --> OD 2009-04-14 #i93269# + // emit text_caret_moved event for object, + // if cursor is inside the object. + // also emit state-changed:focused event under the same condition. + { + AtkObjectWrapper* wrapper_obj = ATK_OBJECT_WRAPPER (atk_obj); + if( !wrapper_obj->mpText && wrapper_obj->mpContext ) + { + uno::Any any = wrapper_obj->mpContext->queryInterface( accessibility::XAccessibleText::static_type(NULL) ); + if ( typelib_TypeClass_INTERFACE == any.pType->eTypeClass && + any.pReserved != 0 ) + { + wrapper_obj->mpText = reinterpret_cast< accessibility::XAccessibleText * > (any.pReserved); + if ( wrapper_obj->mpText != 0 ) + { + wrapper_obj->mpText->acquire(); + gint caretPos = wrapper_obj->mpText->getCaretPosition(); + + if ( caretPos != -1 ) + { + atk_object_notify_state_change( atk_obj, ATK_STATE_FOCUSED, TRUE ); + g_signal_emit_by_name( atk_obj, "text_caret_moved", caretPos ); + } + } + } + } + } + // <-- g_object_unref(atk_obj); } } -- cgit v1.2.3 From 2e2d1273c23a84a0b5e5b297939333ca69f62b45 Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Wed, 26 Aug 2009 14:24:27 +0000 Subject: CWS-TOOLING: integrate CWS mh132 2009-08-06 12:20:52 +0200 mh r274712 : corrected error handling 2009-08-05 13:41:20 +0200 mh r274661 : #i93040# NetBSD compile issue 2009-08-05 13:40:32 +0200 mh r274660 : #i93040# NetBSD compile issue 2009-08-05 13:38:46 +0200 mh r274659 : #i93040# NetBSD compile issue 2009-08-05 13:29:15 +0200 mh r274658 : #i95193# increase includes limit 2009-08-05 13:22:07 +0200 mh r274657 : #i96811# honor return values of read calls 2009-08-05 13:16:47 +0200 mh r274654 : #i96802# honor return values of write calls 2009-08-05 13:07:06 +0200 mh r274653 : #i99835# do DestroyData 2009-08-05 13:01:42 +0200 mh r274651 : #i68557#: allow more dpi resolutions in scanner dialogue 2009-07-24 14:46:04 +0200 mh r274307 : #i103770# missing fclose added --- tools/workben/solar.c | 2 ++ vcl/util/makefile.mk | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/workben/solar.c b/tools/workben/solar.c index 91460614fe9b..05e9c103b8b4 100644 --- a/tools/workben/solar.c +++ b/tools/workben/solar.c @@ -352,6 +352,8 @@ void Description_Print( struct Description* pThis, char* name ) fprintf( f, "#define __SIZEOFDOUBLE\t%d\n", sizeof( double ) ); fprintf( f, "#define __IEEEDOUBLE\n" ); fprintf( f, "#define _SOLAR_NODESCRIPTION\n" ); + + fclose(f); } int diff --git a/vcl/util/makefile.mk b/vcl/util/makefile.mk index 4c0cd7dba656..5bb18f25ecd3 100644 --- a/vcl/util/makefile.mk +++ b/vcl/util/makefile.mk @@ -314,7 +314,7 @@ SHL2STDLIBS+=`pkg-config --libs xrender` .IF "$(GUIBASE)"=="unx" SHL2STDLIBS += -lXext -lSM -lICE -lX11 -.IF "$(OS)"!="MACOSX" && "$(OS)"!="FREEBSD" +.IF "$(OS)"!="MACOSX" && "$(OS)"!="FREEBSD" && "$(OS)"!="NETBSD" # needed by salprnpsp.cxx SHL2STDLIBS+= -ldl .ENDIF -- cgit v1.2.3 From 3c9734d18802d28b14887a8c2cdabb3da019c5f9 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Wed, 26 Aug 2009 14:41:39 +0000 Subject: CWS-TOOLING: integrate CWS aw075 2009-08-12 18:26:05 +0200 aw r274912 : #i97672# use SelectionMaximumLuminancePercent to limit the hilight color to be not too invisible 2009-08-12 18:25:53 +0200 aw r274911 : #i97672# use SelectionMaximumLuminancePercent to limit the hilight color to be not too invisible 2009-08-12 18:25:20 +0200 aw r274910 : #i97672# Added SelectionMaximumLuminancePercent to decide which maximum luminance for the selection color to accept from the system 2009-08-12 18:00:17 +0200 aw r274908 : #i97672# added SelectionMaximumLuminancePercent which limits the luminance of the system's selection color to a maximum luminance (default is 70) 2009-08-11 14:01:07 +0200 aw r274859 : #i104150# take over values from transparence percent field even when disabled 2009-08-11 13:59:33 +0200 aw r274858 : #i103500# corrected the transparent SC overlay pixel alignment 2009-08-11 12:42:46 +0200 jsk r274854 : #i103937# Added two new controls to options/view page for transparency and opacity 2009-08-10 16:20:02 +0200 aw r274823 : #i97672# Adapting MF_SELECTION to #i35956# 2009-08-04 17:50:42 +0200 aw r274626 : #i102109# need to use AlphaMask instead of Bitmap 2009-08-04 17:03:25 +0200 aw r274624 : #i103982# corrected OutlinerParaObject owvership in GetBackgroundTextForwarder() 2009-08-04 12:18:11 +0200 aw r274614 : #i97672# corrected warning due to member initialisation 2009-08-03 11:54:16 +0200 aw r274571 : #i99268# corrected SdrExchangeView::GetObjGraphic 2009-07-31 14:22:57 +0200 aw r274529 : #i101520# added support for not correct 3d polygons for 3D polygon object which is used over API from chart directly 2009-07-31 13:25:20 +0200 aw r274527 : #i97672# added disabling selection options when system does not support them; slightly corrected positions 2009-07-31 13:20:32 +0200 aw r274526 : #i102706# Do not merge closed polygons when converting MetaFiles to SdrObjects 2009-07-30 18:03:07 +0200 aw r274499 : #i102175# corrected 1870 degree rotation situation for MetaFile paints 2009-07-30 17:06:31 +0200 aw r274496 : #i103709# corrected HitTest for callouts and DrawingLayer text objects 2009-07-29 18:55:22 +0200 aw r274465 : #i102956# corrected CutFindProcessor to back-transform all found cuts to the starting 3D coordinate system 2009-07-29 13:38:40 +0200 aw r274448 : #i103720# corrected mpAsynchLoadEvent usage 2009-07-29 12:48:12 +0200 aw r274447 : #i96762# cleanup: spaces 2009-07-28 19:11:31 +0200 aw r274427 : #97672# first version of reworked selection with changeable transparency and frame 2009-07-28 19:09:39 +0200 aw r274425 : #97672# first version of reworked selection with changeable transparency and frame 2009-07-28 19:09:27 +0200 aw r274424 : #97672# first version of reworked selection with changeable transparency and frame 2009-07-28 19:09:14 +0200 aw r274423 : #97672# first version of reworked selection with changeable transparency and frame 2009-07-28 19:08:59 +0200 aw r274422 : #97672# first version of reworked selection with changeable transparency and frame 2009-07-28 19:08:47 +0200 aw r274421 : #97672# first version of reworked selection with changeable transparency and frame 2009-07-28 15:44:50 +0200 aw r274411 : #i102556# corrected TextLayouterDevice::getTextBoundRect implementation and usage; empty Rectangles were not handled correctly 2009-07-23 17:48:36 +0200 aw r274277 : #i102063# implemented in-between OLE content holder (SdrOleContentPrimitive2D) and it's decomposition. Cleaned up diverse OLE graphic preparations 2009-07-22 12:55:12 +0200 aw r274227 : #i102109# extended OutputDevice::DrawTransparent (the version with TransparenceGradient) to work correctly with AntiAliased content 2009-07-21 13:31:12 +0200 aw r274191 : #i102611# changed scaling of Z-Range for Z-Buffer for ZBufferProcessor3D 2009-07-20 20:06:46 +0200 aw r274155 : #i103500# moved OverlayObjectCell back to use discrete coordinates for rectangle list 2009-07-16 17:33:26 +0200 aw r274065 : #i103530# corrected parameter preparation for MetaFile::Rotate call --- svtools/inc/svtools/optionsdrawinglayer.hxx | 9 ++ svtools/source/config/optionsdrawinglayer.cxx | 197 +++++++++++++++++++++++++- vcl/source/gdi/outdev6.cxx | 144 +++++++++++++------ 3 files changed, 303 insertions(+), 47 deletions(-) diff --git a/svtools/inc/svtools/optionsdrawinglayer.hxx b/svtools/inc/svtools/optionsdrawinglayer.hxx index e0b287002f34..120cccfa4232 100644 --- a/svtools/inc/svtools/optionsdrawinglayer.hxx +++ b/svtools/inc/svtools/optionsdrawinglayer.hxx @@ -190,6 +190,15 @@ class SVL_DLLPUBLIC SvtOptionsDrawinglayer void SetQuadratic3DRenderLimit(sal_uInt32 nNew); void SetQuadraticFormControlRenderLimit(sal_uInt32 nNew); + // #i97672# selection settings + sal_Bool IsTransparentSelection() const; + sal_uInt16 GetTransparentSelectionPercent() const; + sal_uInt16 GetSelectionMaximumLuminancePercent() const; + + void SetTransparentSelection( sal_Bool bState ); + void SetTransparentSelectionPercent( sal_uInt16 nPercent ); + void SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent ); + //------------------------------------------------------------------------------------------------------------- // private methods //------------------------------------------------------------------------------------------------------------- diff --git a/svtools/source/config/optionsdrawinglayer.cxx b/svtools/source/config/optionsdrawinglayer.cxx index 125827d17faf..abb044c7863e 100644 --- a/svtools/source/config/optionsdrawinglayer.cxx +++ b/svtools/source/config/optionsdrawinglayer.cxx @@ -92,6 +92,11 @@ using namespace ::com::sun::star::uno ; #define DEFAULT_QUADRATIC3DRENDERLIMIT 1000000 #define DEFAULT_QUADRATICFORMCONTROLRENDERLIMIT 45000 +// #i97672# selection settings +#define DEFAULT_TRANSPARENTSELECTION sal_True +#define DEFAULT_TRANSPARENTSELECTIONPERCENT 75 +#define DEFAULT_SELECTIONMAXIMUMLUMINANCEPERCENT 70 + #define PROPERTYNAME_OVERLAYBUFFER OUString(RTL_CONSTASCII_USTRINGPARAM("OverlayBuffer" )) #define PROPERTYNAME_PAINTBUFFER OUString(RTL_CONSTASCII_USTRINGPARAM("PaintBuffer" )) #define PROPERTYNAME_STRIPE_COLOR_A OUString(RTL_CONSTASCII_USTRINGPARAM("StripeColorA" )) @@ -125,6 +130,11 @@ using namespace ::com::sun::star::uno ; #define PROPERTYNAME_QUADRATIC3DRENDERLIMIT OUString(RTL_CONSTASCII_USTRINGPARAM("Quadratic3DRenderLimit")) #define PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT OUString(RTL_CONSTASCII_USTRINGPARAM("QuadraticFormControlRenderLimit")) +// #i97672# selection settings +#define PROPERTYNAME_TRANSPARENTSELECTION OUString(RTL_CONSTASCII_USTRINGPARAM("TransparentSelection")) +#define PROPERTYNAME_TRANSPARENTSELECTIONPERCENT OUString(RTL_CONSTASCII_USTRINGPARAM("TransparentSelectionPercent")) +#define PROPERTYNAME_SELECTIONMAXIMUMLUMINANCEPERCENT OUString(RTL_CONSTASCII_USTRINGPARAM("SelectionMaximumLuminancePercent")) + #define PROPERTYHANDLE_OVERLAYBUFFER 0 #define PROPERTYHANDLE_PAINTBUFFER 1 #define PROPERTYHANDLE_STRIPE_COLOR_A 2 @@ -158,7 +168,12 @@ using namespace ::com::sun::star::uno ; #define PROPERTYHANDLE_QUADRATIC3DRENDERLIMIT 22 #define PROPERTYHANDLE_QUADRATICFORMCONTROLRENDERLIMIT 23 -#define PROPERTYCOUNT 24 +// #i97672# selection settings +#define PROPERTYHANDLE_TRANSPARENTSELECTION 24 +#define PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT 25 +#define PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT 26 + +#define PROPERTYCOUNT 27 class SvtOptionsDrawinglayer_Impl : public ConfigItem { @@ -248,6 +263,15 @@ public: void SetQuadratic3DRenderLimit(sal_uInt32 nNew); void SetQuadraticFormControlRenderLimit(sal_uInt32 nNew); + // #i97672# selection settings + sal_Bool IsTransparentSelection() const; + sal_uInt16 GetTransparentSelectionPercent() const; + sal_uInt16 GetSelectionMaximumLuminancePercent() const; + + void SetTransparentSelection( sal_Bool bState ); + void SetTransparentSelectionPercent( sal_uInt16 nPercent ); + void SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent ); + //------------------------------------------------------------------------------------------------------------- // private methods //------------------------------------------------------------------------------------------------------------- @@ -295,6 +319,11 @@ private: sal_uInt32 m_nQuadratic3DRenderLimit; sal_uInt32 m_nQuadraticFormControlRenderLimit; + // #i97672# selection settings + sal_uInt16 m_nTransparentSelectionPercent; + sal_uInt16 m_nSelectionMaximumLuminancePercent; + sal_Bool m_bTransparentSelection; + // local values bool m_bAllowAA : 1; bool m_bAllowAAChecked : 1; @@ -342,6 +371,11 @@ SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl() : m_nQuadratic3DRenderLimit(DEFAULT_QUADRATIC3DRENDERLIMIT), m_nQuadraticFormControlRenderLimit(DEFAULT_QUADRATICFORMCONTROLRENDERLIMIT), + // #i97672# selection settings + m_nTransparentSelectionPercent(DEFAULT_TRANSPARENTSELECTIONPERCENT), + m_nSelectionMaximumLuminancePercent(DEFAULT_SELECTIONMAXIMUMLUMINANCEPERCENT), + m_bTransparentSelection(DEFAULT_TRANSPARENTSELECTION), + // local values m_bAllowAA(true), m_bAllowAAChecked(false) @@ -537,6 +571,27 @@ SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl() : seqValues[nProperty] >>= m_nQuadraticFormControlRenderLimit; } break; + + // #i97672# selection settings + case PROPERTYHANDLE_TRANSPARENTSELECTION: + { + DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\TransparentSelection\"?" ); + seqValues[nProperty] >>= m_bTransparentSelection; + } + break; + + case PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT: + { + DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_SHORT), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\TransparentSelectionPercent\"?" ); + seqValues[nProperty] >>= m_nTransparentSelectionPercent; + } + + case PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT: + { + DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_SHORT), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\SelectionMaximumLuminancePercent\"?" ); + seqValues[nProperty] >>= m_nSelectionMaximumLuminancePercent; + } + break; } } } @@ -661,6 +716,19 @@ void SvtOptionsDrawinglayer_Impl::Commit() case PROPERTYHANDLE_QUADRATICFORMCONTROLRENDERLIMIT: aSeqValues[nProperty] <<= m_nQuadraticFormControlRenderLimit; break; + + // #i97672# selection settings + case PROPERTYHANDLE_TRANSPARENTSELECTION: + aSeqValues[nProperty] <<= m_bTransparentSelection; + break; + + case PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT: + aSeqValues[nProperty] <<= m_nTransparentSelectionPercent; + break; + + case PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT: + aSeqValues[nProperty] <<= m_nSelectionMaximumLuminancePercent; + break; } } @@ -1065,6 +1133,49 @@ void SvtOptionsDrawinglayer_Impl::SetQuadraticFormControlRenderLimit(sal_uInt32 } } +// #i97672# selection settings +sal_Bool SvtOptionsDrawinglayer_Impl::IsTransparentSelection() const +{ + return m_bTransparentSelection; +} + +void SvtOptionsDrawinglayer_Impl::SetTransparentSelection( sal_Bool bState ) +{ + if(m_bTransparentSelection != bState) + { + m_bTransparentSelection = bState; + SetModified(); + } +} + +void SvtOptionsDrawinglayer_Impl::SetTransparentSelectionPercent( sal_uInt16 nPercent ) +{ + if(m_nTransparentSelectionPercent != nPercent) + { + m_nTransparentSelectionPercent = nPercent; + SetModified(); + } +} + +sal_uInt16 SvtOptionsDrawinglayer_Impl::GetTransparentSelectionPercent() const +{ + return m_nTransparentSelectionPercent; +} + +void SvtOptionsDrawinglayer_Impl::SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent ) +{ + if(m_nSelectionMaximumLuminancePercent != nPercent) + { + m_nSelectionMaximumLuminancePercent = nPercent; + SetModified(); + } +} + +sal_uInt16 SvtOptionsDrawinglayer_Impl::GetSelectionMaximumLuminancePercent() const +{ + return m_nSelectionMaximumLuminancePercent; +} + //***************************************************************************************************************** // private method //***************************************************************************************************************** @@ -1104,7 +1215,12 @@ Sequence< OUString > SvtOptionsDrawinglayer_Impl::impl_GetPropertyNames() PROPERTYNAME_RENDERDECORATEDTEXTDIRECT, PROPERTYNAME_RENDERSIMPLETEXTDIRECT, PROPERTYNAME_QUADRATIC3DRENDERLIMIT, - PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT + PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT, + + // #i97672# selection settings + PROPERTYNAME_TRANSPARENTSELECTION, + PROPERTYNAME_TRANSPARENTSELECTIONPERCENT, + PROPERTYNAME_SELECTIONMAXIMUMLUMINANCEPERCENT }; // Initialize return sequence with these list ... @@ -1486,6 +1602,83 @@ void SvtOptionsDrawinglayer::SetQuadraticFormControlRenderLimit(sal_uInt32 nNew) m_pDataContainer->SetQuadraticFormControlRenderLimit( nNew ); } +// #i97672# selection settings +sal_Bool SvtOptionsDrawinglayer::IsTransparentSelection() const +{ + MutexGuard aGuard( GetOwnStaticMutex() ); + return m_pDataContainer->IsTransparentSelection(); +} + +void SvtOptionsDrawinglayer::SetTransparentSelection( sal_Bool bState ) +{ + MutexGuard aGuard( GetOwnStaticMutex() ); + m_pDataContainer->SetTransparentSelection( bState ); +} + +sal_uInt16 SvtOptionsDrawinglayer::GetTransparentSelectionPercent() const +{ + MutexGuard aGuard( GetOwnStaticMutex() ); + sal_uInt16 aRetval(m_pDataContainer->GetTransparentSelectionPercent()); + + // crop to range [10% .. 90%] + if(aRetval < 10) + { + aRetval = 10; + } + + if(aRetval > 90) + { + aRetval = 90; + } + + return aRetval; +} + +void SvtOptionsDrawinglayer::SetTransparentSelectionPercent( sal_uInt16 nPercent ) +{ + MutexGuard aGuard( GetOwnStaticMutex() ); + + // crop to range [10% .. 90%] + if(nPercent < 10) + { + nPercent = 10; + } + + if(nPercent > 90) + { + nPercent = 90; + } + + m_pDataContainer->SetTransparentSelectionPercent( nPercent ); +} + +sal_uInt16 SvtOptionsDrawinglayer::GetSelectionMaximumLuminancePercent() const +{ + MutexGuard aGuard( GetOwnStaticMutex() ); + sal_uInt16 aRetval(m_pDataContainer->GetSelectionMaximumLuminancePercent()); + + // crop to range [0% .. 100%] + if(aRetval > 90) + { + aRetval = 90; + } + + return aRetval; +} + +void SvtOptionsDrawinglayer::SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent ) +{ + MutexGuard aGuard( GetOwnStaticMutex() ); + + // crop to range [0% .. 100%] + if(nPercent > 90) + { + nPercent = 90; + } + + m_pDataContainer->SetSelectionMaximumLuminancePercent( nPercent ); +} + //***************************************************************************************************************** // private method //***************************************************************************************************************** diff --git a/vcl/source/gdi/outdev6.cxx b/vcl/source/gdi/outdev6.cxx index a11e276982f7..79986988afd7 100644 --- a/vcl/source/gdi/outdev6.cxx +++ b/vcl/source/gdi/outdev6.cxx @@ -642,51 +642,105 @@ void OutputDevice::DrawTransparent( const GDIMetaFile& rMtf, const Point& rPos, if( pVDev->SetOutputSizePixel( aDstRect.GetSize() ) ) { - Bitmap aPaint, aMask; - AlphaMask aAlpha; - MapMode aMap( GetMapMode() ); - Point aOutPos( PixelToLogic( aDstRect.TopLeft() ) ); - const BOOL bOldMap = mbMap; - - aMap.SetOrigin( Point( -aOutPos.X(), -aOutPos.Y() ) ); - pVDev->SetMapMode( aMap ); - const BOOL bVDevOldMap = pVDev->IsMapModeEnabled(); - - // create paint bitmap - ( (GDIMetaFile&) rMtf ).WindStart(); - ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize ); - ( (GDIMetaFile&) rMtf ).WindStart(); - pVDev->EnableMapMode( FALSE ); - aPaint = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() ); - pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here! - - // create mask bitmap - pVDev->SetLineColor( COL_BLACK ); - pVDev->SetFillColor( COL_BLACK ); - pVDev->DrawRect( Rectangle( pVDev->PixelToLogic( Point() ), pVDev->GetOutputSize() ) ); - pVDev->SetDrawMode( DRAWMODE_WHITELINE | DRAWMODE_WHITEFILL | DRAWMODE_WHITETEXT | - DRAWMODE_WHITEBITMAP | DRAWMODE_WHITEGRADIENT ); - ( (GDIMetaFile&) rMtf ).WindStart(); - ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize ); - ( (GDIMetaFile&) rMtf ).WindStart(); - pVDev->EnableMapMode( FALSE ); - aMask = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() ); - pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here! - - // create alpha mask from gradient - pVDev->SetDrawMode( DRAWMODE_GRAYGRADIENT ); - pVDev->DrawGradient( Rectangle( rPos, rSize ), rTransparenceGradient ); - pVDev->SetDrawMode( DRAWMODE_DEFAULT ); - pVDev->EnableMapMode( FALSE ); - pVDev->DrawMask( Point(), pVDev->GetOutputSizePixel(), aMask, Color( COL_WHITE ) ); - - aAlpha = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() ); - - delete pVDev; - - EnableMapMode( FALSE ); - DrawBitmapEx( aDstRect.TopLeft(), BitmapEx( aPaint, aAlpha ) ); - EnableMapMode( bOldMap ); + if(GetAntialiasing()) + { + // #i102109# + // For MetaFile replay (see task) it may now be neccessary to take + // into account that the content is AntiAlialised and needs to be masked + // like that. Instead of masking, i will use a copy-modify-paste cycle + // here (as i already use in the VclPrimiziveRenderer with successs) + pVDev->SetAntialiasing(GetAntialiasing()); + + // create MapMode for buffer (offset needed) and set + MapMode aMap(GetMapMode()); + const Point aOutPos(PixelToLogic(aDstRect.TopLeft())); + aMap.SetOrigin(Point(-aOutPos.X(), -aOutPos.Y())); + pVDev->SetMapMode(aMap); + + // copy MapMode state and disable for target + const bool bOrigMapModeEnabled(IsMapModeEnabled()); + EnableMapMode(false); + + // copy MapMode state and disable for buffer + const bool bBufferMapModeEnabled(pVDev->IsMapModeEnabled()); + pVDev->EnableMapMode(false); + + // copy content from original to buffer + pVDev->DrawOutDev( + aPoint, pVDev->GetOutputSizePixel(), // dest + aDstRect.TopLeft(), pVDev->GetOutputSizePixel(), // source + *this); + + // draw MetaFile to buffer + pVDev->EnableMapMode(bBufferMapModeEnabled); + ((GDIMetaFile&)rMtf).WindStart(); + ((GDIMetaFile&)rMtf).Play(pVDev, rPos, rSize); + ((GDIMetaFile&)rMtf).WindStart(); + + // get content bitmap from buffer + pVDev->EnableMapMode(false); + const Bitmap aPaint(pVDev->GetBitmap(aPoint, pVDev->GetOutputSizePixel())); + + // create alpha mask from gradient and get as Bitmap + pVDev->EnableMapMode(bBufferMapModeEnabled); + pVDev->SetDrawMode(DRAWMODE_GRAYGRADIENT); + pVDev->DrawGradient(Rectangle(rPos, rSize), rTransparenceGradient); + pVDev->SetDrawMode(DRAWMODE_DEFAULT); + pVDev->EnableMapMode(false); + const AlphaMask aAlpha(pVDev->GetBitmap(aPoint, pVDev->GetOutputSizePixel())); + + // draw masked content to target and restore MapMode + DrawBitmapEx(aDstRect.TopLeft(), BitmapEx(aPaint, aAlpha)); + EnableMapMode(bOrigMapModeEnabled); + } + else + { + Bitmap aPaint, aMask; + AlphaMask aAlpha; + MapMode aMap( GetMapMode() ); + Point aOutPos( PixelToLogic( aDstRect.TopLeft() ) ); + const BOOL bOldMap = mbMap; + + aMap.SetOrigin( Point( -aOutPos.X(), -aOutPos.Y() ) ); + pVDev->SetMapMode( aMap ); + const BOOL bVDevOldMap = pVDev->IsMapModeEnabled(); + + // create paint bitmap + ( (GDIMetaFile&) rMtf ).WindStart(); + ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize ); + ( (GDIMetaFile&) rMtf ).WindStart(); + pVDev->EnableMapMode( FALSE ); + aPaint = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() ); + pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here! + + // create mask bitmap + pVDev->SetLineColor( COL_BLACK ); + pVDev->SetFillColor( COL_BLACK ); + pVDev->DrawRect( Rectangle( pVDev->PixelToLogic( Point() ), pVDev->GetOutputSize() ) ); + pVDev->SetDrawMode( DRAWMODE_WHITELINE | DRAWMODE_WHITEFILL | DRAWMODE_WHITETEXT | + DRAWMODE_WHITEBITMAP | DRAWMODE_WHITEGRADIENT ); + ( (GDIMetaFile&) rMtf ).WindStart(); + ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize ); + ( (GDIMetaFile&) rMtf ).WindStart(); + pVDev->EnableMapMode( FALSE ); + aMask = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() ); + pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here! + + // create alpha mask from gradient + pVDev->SetDrawMode( DRAWMODE_GRAYGRADIENT ); + pVDev->DrawGradient( Rectangle( rPos, rSize ), rTransparenceGradient ); + pVDev->SetDrawMode( DRAWMODE_DEFAULT ); + pVDev->EnableMapMode( FALSE ); + pVDev->DrawMask( Point(), pVDev->GetOutputSizePixel(), aMask, Color( COL_WHITE ) ); + + aAlpha = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() ); + + delete pVDev; + + EnableMapMode( FALSE ); + DrawBitmapEx( aDstRect.TopLeft(), BitmapEx( aPaint, aAlpha ) ); + EnableMapMode( bOldMap ); + } } else delete pVDev; -- cgit v1.2.3 From 12d7db51687fa7316f99e3dfcb750bdb8125b05d Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Thu, 27 Aug 2009 01:14:49 +0000 Subject: CWS-TOOLING: integrate CWS gpc100 2009-08-07 20:21:15 +0200 ka r274784 : CWS-TOOLING: rebase CWS gpc100 to trunk@274622 (milestone: DEV300:m54) 2009-08-07 14:11:35 +0200 ka r274764 : #i75026#: removal of GPC dependency --- tools/inc/tools/poly.hxx | 1 - tools/source/generic/makefile.mk | 4 -- tools/source/generic/poly2.cxx | 114 +++++---------------------------------- tools/util/makefile.mk | 7 --- 4 files changed, 12 insertions(+), 114 deletions(-) diff --git a/tools/inc/tools/poly.hxx b/tools/inc/tools/poly.hxx index 606c9c91e879..a77782bc963c 100644 --- a/tools/inc/tools/poly.hxx +++ b/tools/inc/tools/poly.hxx @@ -260,7 +260,6 @@ private: ImplPolyPolygon* mpImplPolyPolygon; //#if 0 // _SOLAR__PRIVATE - TOOLS_DLLPRIVATE void *ImplCreateGPCPolygon() const; TOOLS_DLLPRIVATE void ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const; TOOLS_DLLPRIVATE void *ImplCreateArtVpath() const; TOOLS_DLLPRIVATE void ImplSetFromArtVpath( void *pVpath ); diff --git a/tools/source/generic/makefile.mk b/tools/source/generic/makefile.mk index 9562999bd5d7..6340e4daae08 100644 --- a/tools/source/generic/makefile.mk +++ b/tools/source/generic/makefile.mk @@ -39,10 +39,6 @@ TARGET=gen .INCLUDE : settings.mk .INCLUDE : $(PRJ)$/util$/makefile.pmk -.IF "$(WITH_GPC)"!="NO" -CDEFS+=-DHAVE_GPC_H -.ENDIF - # --- Files -------------------------------------------------------- EXCEPTIONSFILES = $(SLO)$/poly.obj $(OBJ)$/poly.obj diff --git a/tools/source/generic/poly2.cxx b/tools/source/generic/poly2.cxx index a560c961f481..ff97e6006a41 100644 --- a/tools/source/generic/poly2.cxx +++ b/tools/source/generic/poly2.cxx @@ -33,17 +33,10 @@ #define _SV_POLY2_CXX -extern "C" -{ -#if defined (HAVE_GPC_H) && !defined (__gpc_h) -# include -#else -# define GPC_INT 0 -# define GPC_UNION 1 -# define GPC_DIFF 2 -# define GPC_XOR 3 -#endif // HAVE_GPC_H -} +#define POLY_CLIP_INT 0 +#define POLY_CLIP_UNION 1 +#define POLY_CLIP_DIFF 2 +#define POLY_CLIP_XOR 3 #include #include @@ -389,113 +382,32 @@ void PolyPolygon::AdaptiveSubdivide( PolyPolygon& rResult, const double d ) cons void PolyPolygon::GetIntersection( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const { - ImplDoOperation( rPolyPoly, rResult, GPC_INT ); + ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_INT ); } // ----------------------------------------------------------------------- void PolyPolygon::GetUnion( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const { - ImplDoOperation( rPolyPoly, rResult, GPC_UNION ); + ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_UNION ); } // ----------------------------------------------------------------------- void PolyPolygon::GetDifference( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const { - ImplDoOperation( rPolyPoly, rResult, GPC_DIFF ); + ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_DIFF ); } // ----------------------------------------------------------------------- void PolyPolygon::GetXOR( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const { - ImplDoOperation( rPolyPoly, rResult, GPC_XOR ); -} - -// ----------------------------------------------------------------------- - -#ifdef HAVE_GPC_H - -void* PolyPolygon::ImplCreateGPCPolygon() const -{ - gpc_polygon* pRet = new gpc_polygon; - - pRet->num_contours = 0; - pRet->hole = NULL; - pRet->contour = NULL; - - for( USHORT i = 0, nCount = Count(); i < nCount; i++ ) - { - const Polygon& rPoly = GetObject( i ); - const USHORT nSize = rPoly.GetSize(); - - if( nSize > 1 ) - { - gpc_vertex_list aVertexList; - gpc_vertex* pVertex; - - aVertexList.num_vertices = nSize; - aVertexList.vertex = pVertex = new gpc_vertex[ nSize ]; - - for( USHORT nPos = 0; nPos < nSize; nPos++, pVertex++ ) - { - const Point& rPoint = rPoly[ nPos ]; - pVertex->x = rPoint.X(); - pVertex->y = rPoint.Y(); - } - - gpc_add_contour( pRet, &aVertexList, 0 ); - delete[] aVertexList.vertex; - } - } - - return pRet; + ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_XOR ); } // ----------------------------------------------------------------------- -void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const -{ - gpc_polygon* pGPCPoly1 = (gpc_polygon*) ImplCreateGPCPolygon(); - gpc_polygon* pGPCPoly2 = (gpc_polygon*) rPolyPoly.ImplCreateGPCPolygon(); - gpc_polygon* pResult = new gpc_polygon; - - pResult->num_contours = 0; - pResult->hole = NULL; - pResult->contour = NULL; - - gpc_polygon_clip( (gpc_op) nOperation, pGPCPoly1, pGPCPoly2, pResult ); - - rResult.Clear(); - - for( int i = 0; i < pResult->num_contours; i++ ) - { - gpc_vertex_list& rVertexList = pResult->contour[ i ]; - Polygon aPoly( ::sal::static_int_cast< USHORT >( rVertexList.num_vertices ) ); - - for( int j = 0; j < rVertexList.num_vertices; j++ ) - { - Point& rPt = aPoly[ ::sal::static_int_cast< USHORT >( j ) ]; - rPt.X() = FRound( rVertexList.vertex[ j ].x ); - rPt.Y() = FRound( rVertexList.vertex[ j ].y ); - } - - rResult.Insert( aPoly ); - } - - gpc_free_polygon( pGPCPoly1 ); - delete pGPCPoly1; - - gpc_free_polygon( pGPCPoly2 ); - delete pGPCPoly2; - - gpc_free_polygon( pResult ); - delete pResult; -} - -#else - void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const { // Convert to B2DPolyPolygon, temporarily. It might be @@ -514,21 +426,21 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR // All code extracted from svx/source/svdraw/svedtv2.cxx // ----------------------------------------------------- - case GPC_UNION: + case POLY_CLIP_UNION: { // merge A and B (OR) aMergePolyPolygonA = basegfx::tools::solvePolygonOperationOr(aMergePolyPolygonA, aMergePolyPolygonB); break; } - case GPC_DIFF: + case POLY_CLIP_DIFF: { // substract B from A (DIFF) aMergePolyPolygonA = basegfx::tools::solvePolygonOperationDiff(aMergePolyPolygonA, aMergePolyPolygonB); break; } - case GPC_XOR: + case POLY_CLIP_XOR: { // compute XOR between poly A and B aMergePolyPolygonA = basegfx::tools::solvePolygonOperationXor(aMergePolyPolygonA, aMergePolyPolygonB); @@ -536,7 +448,7 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR } default: - case GPC_INT: + case POLY_CLIP_INT: { // cut poly 1 against polys 2..n (AND) aMergePolyPolygonA = basegfx::tools::solvePolygonOperationAnd(aMergePolyPolygonA, aMergePolyPolygonB); @@ -547,8 +459,6 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR rResult = PolyPolygon( aMergePolyPolygonA ); } -#endif // HAVE_GPC_H - // ----------------------------------------------------------------------- USHORT PolyPolygon::Count() const diff --git a/tools/util/makefile.mk b/tools/util/makefile.mk index 546ef29a449a..d9ba720543e3 100644 --- a/tools/util/makefile.mk +++ b/tools/util/makefile.mk @@ -113,13 +113,6 @@ SHL1IMPLIB= itools SHL1USE_EXPORTS=name SHL1STDLIBS+= $(SALLIB) $(VOSLIB) $(BASEGFXLIB) $(I18NISOLANGLIB) $(COMPHELPERLIB) -.IF "$(WITH_LIBART)"=="YES" -SHL1STDLIBS+= $(LIBART_LIBS) -.ELSE -SHL1STDLIBS+= $(GPC3RDLIB) -.ENDIF - - .IF "$(GUI)"=="WNT" SHL1STDLIBS+= $(SHELL32LIB) \ $(MPRLIB) \ -- cgit v1.2.3 From 2d1f08d63942666c0094904f50ba8c512ab69b9d Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Thu, 27 Aug 2009 12:02:29 +0000 Subject: CWS-TOOLING: integrate CWS otf01 2009-08-26 15:25:19 +0200 hdu r275426 : #i10000# make ubuntu-8.10 buildbot happy 2009-08-21 11:58:07 +0200 hdu r275230 : #i43029# another compile fix for 64bit platforms 2009-08-21 09:00:26 +0200 hdu r275216 : #i43029# sal_Int32 is defined differently on some platforms 2009-08-19 13:41:07 +0200 hdu r275149 : #i43029# fix use of sft-based subsetting in centralized code 2009-08-19 10:42:23 +0200 hdu r275140 : #i43029# --amend previous commit with omitted files 2009-08-19 10:14:54 +0200 hdu r275137 : #i43029# finishing touches for CWS otf01 start to centralize the previously open-coded font-subset/font-embed requests do the rest when the SCM allows source-file moves and commits with finer granularity 2009-08-17 15:11:24 +0200 hdu r275057 : CWS-TOOLING: rebase CWS otf01 to trunk@275001 (milestone: DEV300:m55) 2009-08-14 17:07:06 +0200 hdu r274998 : #i43029# CFF-subsetting now works on all platforms for PDF-export and PS-printing 2009-08-14 15:13:23 +0200 hdu r274984 : #i43029# OOo-build-baseline allows avoiding brute-forcing codepoint coverage calculation 2009-08-14 14:33:36 +0200 hdu r274981 : #i43029# CmapResult becomes a class 2009-08-13 15:57:55 +0200 hdu r274948 : #i43029# start implementing glue-code for CFF-subsetting on WIN 2009-08-10 17:10:46 +0200 hdu r274828 : #100000# WAE: signedness-warning 2009-08-10 14:08:05 +0200 hdu r274810 : #100000# 2009-08-10 13:34:55 +0200 hdu r274807 : #i43029# update ParseCmap() as we need to handle glyph-mapping ourselves on win for non-sft-supported fonts 2009-07-11 11:32:37 +0200 hdu r273909 : CWS-TOOLING: rebase CWS otf01 to trunk@273858 (milestone: DEV300:m52) 2009-07-03 17:14:55 +0200 hdu r273714 : #i43029# last step before centralizing UNX fontsubset code into platform independent layer 2009-07-03 17:00:14 +0200 hdu r273712 : #i10000# remove compile warning when debug=t 2009-07-03 16:28:29 +0200 hdu r273710 : #i43029# another step to centralize fontsubset code 2009-07-03 15:23:45 +0200 hdu r273705 : #i43029# PDF-export on UNX now starts to support OTF/CFF 2009-07-02 16:19:46 +0200 hdu r273663 : #i43029# warn when subsetting encounters glyph with deprecated SEAC-like endchar 2009-06-25 11:40:55 +0200 hdu r273372 : #i43029# ensure validity of cff-subsetted glyph name 2009-06-24 10:22:13 +0200 hdu r273318 : #i43029# check validity of exported sfnt subtable 2009-06-23 16:25:54 +0200 hdu r273292 : #i43029# use direct CFF->PFA font subsetting 2009-06-23 16:24:33 +0200 hdu r273289 : #i43029# allow font subset directly into a provided FILE handle 2009-06-23 16:22:44 +0200 hdu r273286 : #i43029# implement direct CFF->PFA font subsetting 2009-06-19 17:13:02 +0200 hdu r273171 : #i43029# CFF subsetting starts to work for psprinting 2009-06-18 15:48:42 +0200 hdu r273122 : #i43029# psprint requires explicit control of font subset name 2009-06-18 15:43:21 +0200 hdu r273121 : #i43029# psprint requires explicit control of font subset name 2009-06-16 18:15:43 +0200 hdu r273033 : #i43029# minor reshuffling to prepare CFF->PS font uploading 2009-06-16 16:25:21 +0200 hdu r273025 : #i43029# minimal-invasive change to sft.cxx to access a SFNT's CFF subtable 2009-06-12 15:51:42 +0200 hdu r272925 : #i43029# support OT/CFF subsetting for our PDF export on MacOSX 2009-06-12 15:43:26 +0200 hdu r272924 : #i43029# provide subset metrics as required by subset requesters 2009-05-27 13:58:59 +0200 hdu r272342 : #i43029# TripleInt is already reserved by OSX Carbon 2009-05-27 13:41:12 +0200 hdu r272339 : #i43029# fix warnings and make it compile on different platforms 2009-05-26 18:18:38 +0200 hdu r272315 : #i43029# start moving font subsetting into specialized class 2009-05-26 17:23:55 +0200 hdu r272312 : #i43029# improve name for CFF->PFB subsetted font 2009-05-25 17:12:27 +0200 hdu r272264 : #i43029# PDF-export: get type1-subsetting of the ground 2009-05-25 11:15:39 +0200 hdu r272227 : #i43029# fix BlueValues/FontBBox topdict entries 2009-05-25 10:59:16 +0200 hdu r272222 : #i43029# better PFB-DICT entries for FontBBox and BlueValues 2009-05-25 10:26:46 +0200 hdu r272219 : #i43029# emit other PRIVDICT hints for CFF->PFB subsetting 2009-05-25 10:10:25 +0200 hdu r272218 : #i43029# sign-extend shortint/longint typeopts/dictops 2009-05-25 09:38:33 +0200 hdu r272217 : #i43029# better glyph names for CFF-subsetted PFB 2009-05-20 18:57:11 +0200 hdu r272147 : #i43029# a CFF-subsetter gets the Blues 2009-05-20 14:05:35 +0200 hdu r272127 : #i43029# implement CreateFontSubsetFromCff() 2009-05-18 12:33:05 +0200 hdu r272012 : #i43029# add and use CffSubsetterContext::writeCurveTo() 2009-05-15 11:38:08 +0200 hdu r271931 : CffTable: allow charwidth parameter for type2 endchar operator 2009-05-14 18:55:25 +0200 hdu r271916 : #i43029# implement flex/flex1/hflex/hflex1 typeop conversion, fix type1val writing 2009-05-11 09:53:26 +0200 hdu r271750 : #i101695# improve import of ghostscript-PDF font names 2009-05-07 11:35:12 +0200 hdu r271644 : #i43029# adusted whitespace conventions from previously private code 2009-05-06 12:33:11 +0200 hdu r271579 : #i43029# change copyright header, fix warnings on some compilers 2009-05-06 10:50:50 +0200 hdu r271576 : improve whitespace and constness in some POS code 2009-05-05 16:10:56 +0200 hdu r271532 : #i43029# makefile support for new cff subsetter code 2009-05-05 14:56:29 +0200 hdu r271519 : #i43029# start integrating my CFF->Type1 subsetter code 2009-05-04 17:07:14 +0200 hdu r271474 : #i100140# remove obsoleted tables used for encoding conversion 2009-05-04 17:05:20 +0200 hdu r271473 : #i100140# use generic encoding converters in xlat.cxx 2009-04-15 11:58:25 +0200 hdu r270829 : #i101102# remove build dependency to removed module psprint 2009-04-14 15:57:13 +0200 hdu r270788 : CWS-TOOLING: rebase CWS otf01 to trunk@270723 (milestone: DEV300:m46) 2009-03-11 14:49:56 +0100 hdu r269335 : CWS-TOOLING: rebase CWS otf01 to trunk@269297 (milestone: DEV300:m43) 2009-02-06 12:32:22 +0100 hdu r267451 : resync CWS across CVS->SVN change 2009-02-06 12:32:04 +0100 hdu r267450 : resync CWS across CVS->SVN change --- vcl/aqua/source/gdi/salatsuifontutils.cxx | 15 +- vcl/aqua/source/gdi/salgdi.cxx | 122 +- vcl/inc/list.h | 5 - vcl/inc/sft.hxx | 28 +- vcl/inc/vcl/fontmanager.hxx | 14 +- vcl/inc/vcl/fontsubset.hxx | 97 + vcl/inc/vcl/glyphcache.hxx | 3 +- vcl/inc/vcl/impfont.hxx | 44 +- vcl/inc/vcl/outfont.hxx | 17 +- vcl/inc/vcl/printergfx.hxx | 8 +- vcl/inc/vcl/salgdi.hxx | 2 +- vcl/inc/vcl/sallayout.hxx | 3 - vcl/source/fontsubset/cff.cxx | 2418 ++++++++++++++++++++++ vcl/source/fontsubset/fontsubset.cxx | 185 ++ vcl/source/fontsubset/makefile.mk | 2 + vcl/source/fontsubset/sft.cxx | 196 +- vcl/source/fontsubset/ttcr.cxx | 19 +- vcl/source/fontsubset/ttcr.hxx | 6 +- vcl/source/fontsubset/u2big5.inc | 1756 ---------------- vcl/source/fontsubset/u2johab.inc | 2174 -------------------- vcl/source/fontsubset/u2prc.inc | 3036 ---------------------------- vcl/source/fontsubset/u2shiftjis.inc | 967 --------- vcl/source/fontsubset/u2wansung.inc | 1071 ---------- vcl/source/fontsubset/xlat.cxx | 247 ++- vcl/source/fontsubset/xlat.hxx | 2 +- vcl/source/gdi/metric.cxx | 194 +- vcl/source/gdi/pdfwriter_impl.cxx | 112 +- vcl/source/gdi/pdfwriter_impl.hxx | 5 +- vcl/source/glyphs/gcach_ftyp.cxx | 84 +- vcl/source/glyphs/gcach_ftyp.hxx | 5 +- vcl/source/glyphs/gcach_layout.cxx | 3 - vcl/source/glyphs/gcach_rbmp.cxx | 3 - vcl/source/glyphs/gcach_vdev.cxx | 3 - vcl/source/glyphs/gcach_vdev.hxx | 3 - vcl/source/glyphs/glyphcache.cxx | 3 - vcl/unx/headless/svpprn.cxx | 6 +- vcl/unx/headless/svppspgraphics.cxx | 81 +- vcl/unx/headless/svppspgraphics.hxx | 7 - vcl/unx/headless/svptext.cxx | 35 +- vcl/unx/inc/pspgraphics.h | 10 - vcl/unx/kde/kdedata.cxx | 5 +- vcl/unx/source/fontmanager/fontcache.cxx | 3 +- vcl/unx/source/fontmanager/fontmanager.cxx | 108 +- vcl/unx/source/gdi/pspgraphics.cxx | 88 +- vcl/unx/source/gdi/salgdi3.cxx | 42 +- vcl/unx/source/printergfx/glyphset.cxx | 51 +- vcl/unx/source/printergfx/text_gfx.cxx | 14 +- vcl/win/source/gdi/salgdi3.cxx | 112 +- 48 files changed, 3673 insertions(+), 9741 deletions(-) create mode 100644 vcl/inc/vcl/fontsubset.hxx create mode 100644 vcl/source/fontsubset/cff.cxx create mode 100644 vcl/source/fontsubset/fontsubset.cxx delete mode 100644 vcl/source/fontsubset/u2big5.inc delete mode 100644 vcl/source/fontsubset/u2johab.inc delete mode 100644 vcl/source/fontsubset/u2prc.inc delete mode 100644 vcl/source/fontsubset/u2shiftjis.inc delete mode 100644 vcl/source/fontsubset/u2wansung.inc diff --git a/vcl/aqua/source/gdi/salatsuifontutils.cxx b/vcl/aqua/source/gdi/salatsuifontutils.cxx index 595b7d276a2a..8e38981a3c7c 100644 --- a/vcl/aqua/source/gdi/salatsuifontutils.cxx +++ b/vcl/aqua/source/gdi/salatsuifontutils.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: salatsuifontutils.cxx,v $ - * $Revision: 1.13.138.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -210,12 +207,8 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF rDFA.meItalic = ITALIC_NONE; rDFA.mbSymbolFlag = false; - // get the embeddable + subsettable status - // TODO: remove test after PS-OpenType subsetting is implemented - ATSFontRef rATSFontRef = FMGetATSFontRefFromFont( nFontID ); - ByteCount nGlyfLen = 0; - OSStatus rc = ATSFontGetTable( rATSFontRef, 0x676c7966/*glyf*/, 0, 0, NULL, &nGlyfLen); - rDFA.mbSubsettable = ((rc == noErr) && (nGlyfLen > 0)); + // all scalable fonts on this platform are subsettable + rDFA.mbSubsettable = true; rDFA.mbEmbeddable = false; // TODO: these members are needed only for our X11 platform targets rDFA.meAntiAlias = ANTIALIAS_DONTKNOW; @@ -223,7 +216,7 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF // prepare iterating over all name strings of the font ItemCount nFontNameCount = 0; - rc = ATSUCountFontNames( nFontID, &nFontNameCount ); + OSStatus rc = ATSUCountFontNames( nFontID, &nFontNameCount ); if( rc != noErr ) return false; int nBestNameValue = 0; @@ -269,7 +262,7 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF case 0x30A: nNameValue += 0; // Win-UCS-4 eEncoding = RTL_TEXTENCODING_UCS4; break; - case 0x100: nNameValue += 21; // Mac Roman + case 0x100: nNameValue += 21; // Mac Roman eEncoding = RTL_TEXTENCODING_APPLE_ROMAN; break; case 0x300: nNameValue = 0; // Win Symbol encoded name! diff --git a/vcl/aqua/source/gdi/salgdi.cxx b/vcl/aqua/source/gdi/salgdi.cxx index f8410a47dfd6..e0905fe1d377 100644 --- a/vcl/aqua/source/gdi/salgdi.cxx +++ b/vcl/aqua/source/gdi/salgdi.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: salgdi.cxx,v $ - * $Revision: 1.81.14.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -40,6 +37,7 @@ #include "salatsuifontutils.hxx" #include "vcl/impfont.hxx" +#include "vcl/fontsubset.hxx" #include "vcl/sysdata.hxx" #include "vcl/sallayout.hxx" #include "vcl/svapp.hxx" @@ -153,7 +151,7 @@ ImplFontCharMap* ImplMacFontData::GetImplFontCharMap() const if( !ParseCMAP( &aBuffer[0], nRawLength, aCmapResult ) ) return mpCharMap; - mpCharMap = new ImplFontCharMap( aCmapResult.mnPairCount, aCmapResult.mpPairCodes, aCmapResult.mpStartGlyphs ); + mpCharMap = new ImplFontCharMap( aCmapResult ); return mpCharMap; } @@ -175,8 +173,7 @@ void ImplMacFontData::ReadOs2Table( void ) const return; // allocate a buffer for the OS/2 raw data - ByteVector aBuffer; - aBuffer.resize( nBufSize ); + ByteVector aBuffer( nBufSize ); // get the OS/2 raw data ByteCount nRawLength = 0; @@ -215,8 +212,7 @@ void ImplMacFontData::ReadMacCmapEncoding( void ) const if( eStatus != noErr ) return; - ByteVector aBuffer; - aBuffer.resize( nBufSize ); + ByteVector aBuffer( nBufSize ); ByteCount nRawLength = 0; eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, nBufSize, (void*)&aBuffer[0], &nRawLength ); @@ -1990,15 +1986,30 @@ static void FakeDirEntry( FourCharCode eFCC, ByteCount nOfs, ByteCount nLen, } static bool GetRawFontData( const ImplFontData* pFontData, - ByteVector& rBuffer ) + ByteVector& rBuffer, bool* pJustCFF ) { const ImplMacFontData* pMacFont = static_cast(pFontData); const ATSUFontID nFontId = static_cast(pMacFont->GetFontId()); ATSFontRef rFont = FMGetATSFontRefFromFont( nFontId ); + ByteCount nCffLen = 0; + OSStatus eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, 0, NULL, &nCffLen); + if( pJustCFF != NULL ) + { + *pJustCFF = (eStatus == noErr) && (nCffLen > 0); + if( *pJustCFF ) + { + rBuffer.resize( nCffLen ); + eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, nCffLen, (void*)&rBuffer[0], &nCffLen); + if( (eStatus != noErr) || (nCffLen <= 0) ) + return false; + return true; + } + } + // get font table availability and size in bytes ByteCount nHeadLen = 0; - OSStatus eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, 0, NULL, &nHeadLen); + eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, 0, NULL, &nHeadLen); if( (eStatus != noErr) || (nHeadLen <= 0) ) return false; ByteCount nMaxpLen = 0; @@ -2009,14 +2020,6 @@ static bool GetRawFontData( const ImplFontData* pFontData, eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, 0, NULL, &nCmapLen); if( (eStatus != noErr) || (nCmapLen <= 0) ) return false; - ByteCount nLocaLen = 0; - eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, 0, NULL, &nLocaLen); - if( (eStatus != noErr) || (nLocaLen <= 0) ) - return false; - ByteCount nGlyfLen = 0; - eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, 0, NULL, &nGlyfLen); - if( (eStatus != noErr) || (nGlyfLen <= 0) ) - return false; ByteCount nNameLen = 0; eStatus = ATSFontGetTable( rFont, GetTag("name"), 0, 0, NULL, &nNameLen); if( (eStatus != noErr) || (nNameLen <= 0) ) @@ -2030,8 +2033,21 @@ static bool GetRawFontData( const ImplFontData* pFontData, if( (eStatus != noErr) || (nHmtxLen <= 0) ) return false; + // get the glyph outline tables + ByteCount nLocaLen = 0; + ByteCount nGlyfLen = 0; + if( (eStatus != noErr) || (nCffLen <= 0) ) + { + eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, 0, NULL, &nLocaLen); + if( (eStatus != noErr) || (nLocaLen <= 0) ) + return false; + eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, 0, NULL, &nGlyfLen); + if( (eStatus != noErr) || (nGlyfLen <= 0) ) + return false; + } + ByteCount nPrepLen=0, nCvtLen=0, nFpgmLen=0; - if( 1 ) // TODO: reduce PDF size by making hint subsetting optional + if( nGlyfLen ) // TODO: reduce PDF size by making hint subsetting optional { eStatus = ATSFontGetTable( rFont, GetTag("prep"), 0, 0, NULL, &nPrepLen); eStatus = ATSFontGetTable( rFont, GetTag("cvt "), 0, 0, NULL, &nCvtLen); @@ -2039,11 +2055,15 @@ static bool GetRawFontData( const ImplFontData* pFontData, } // prepare a byte buffer for a fake font - int nTableCount = 8; - nTableCount += (nPrepLen>0) + (nCvtLen>0) + (nFpgmLen>0); + int nTableCount = 7; + nTableCount += (nPrepLen>0) + (nCvtLen>0) + (nFpgmLen>0) + (nGlyfLen>0); const ByteCount nFdirLen = 12 + 16*nTableCount; ByteCount nTotalLen = nFdirLen; - nTotalLen += nHeadLen + nMaxpLen + nNameLen + nCmapLen + nLocaLen + nGlyfLen; + nTotalLen += nHeadLen + nMaxpLen + nNameLen + nCmapLen; + if( nGlyfLen ) + nTotalLen += nLocaLen + nGlyfLen; + else + nTotalLen += nCffLen; nTotalLen += nHheaLen + nHmtxLen; nTotalLen += nPrepLen + nCvtLen + nFpgmLen; rBuffer.resize( nTotalLen ); @@ -2076,9 +2096,18 @@ static bool GetRawFontData( const ImplFontData* pFontData, FakeDirEntry( GetTag("fpgm"), nOfs, nFpgmLen, &rBuffer[0], pFakeEntry ); nOfs += nFpgmLen; } - eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, nGlyfLen, (void*)&rBuffer[nOfs], &nGlyfLen); - FakeDirEntry( GetTag("glyf"), nOfs, nGlyfLen, &rBuffer[0], pFakeEntry ); - nOfs += nGlyfLen; + if( nCffLen ) { + eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, nCffLen, (void*)&rBuffer[nOfs], &nCffLen); + FakeDirEntry( GetTag("CFF "), nOfs, nCffLen, &rBuffer[0], pFakeEntry ); + nOfs += nGlyfLen; + } else { + eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, nGlyfLen, (void*)&rBuffer[nOfs], &nGlyfLen); + FakeDirEntry( GetTag("glyf"), nOfs, nGlyfLen, &rBuffer[0], pFakeEntry ); + nOfs += nGlyfLen; + eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, nLocaLen, (void*)&rBuffer[nOfs], &nLocaLen); + FakeDirEntry( GetTag("loca"), nOfs, nLocaLen, &rBuffer[0], pFakeEntry ); + nOfs += nLocaLen; + } eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, nHeadLen, (void*)&rBuffer[nOfs], &nHeadLen); FakeDirEntry( GetTag("head"), nOfs, nHeadLen, &rBuffer[0], pFakeEntry ); nOfs += nHeadLen; @@ -2088,9 +2117,6 @@ static bool GetRawFontData( const ImplFontData* pFontData, eStatus = ATSFontGetTable( rFont, GetTag("hmtx"), 0, nHmtxLen, (void*)&rBuffer[nOfs], &nHmtxLen); FakeDirEntry( GetTag("hmtx"), nOfs, nHmtxLen, &rBuffer[0], pFakeEntry ); nOfs += nHmtxLen; - eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, nLocaLen, (void*)&rBuffer[nOfs], &nLocaLen); - FakeDirEntry( GetTag("loca"), nOfs, nLocaLen, &rBuffer[0], pFakeEntry ); - nOfs += nLocaLen; eStatus = ATSFontGetTable( rFont, GetTag("maxp"), 0, nMaxpLen, (void*)&rBuffer[nOfs], &nMaxpLen); FakeDirEntry( GetTag("maxp"), nOfs, nMaxpLen, &rBuffer[0], pFakeEntry ); nOfs += nMaxpLen; @@ -2112,10 +2138,38 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, const ImplFontData* pFontData, long* pGlyphIDs, sal_uInt8* pEncoding, sal_Int32* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rInfo ) { + // TODO: move more of the functionality here into the generic subsetter code + + // prepare the requested file name for writing the font-subset file + rtl::OUString aSysPath; + if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) ) + return FALSE; + const rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding(); + const ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) ); + + // get the raw-bytes from the font to be subset ByteVector aBuffer; - if( !GetRawFontData( pFontData, aBuffer ) ) + bool bCffOnly = false; + if( !GetRawFontData( pFontData, aBuffer, &bCffOnly ) ) return sal_False; + // handle CFF-subsetting + if( bCffOnly ) + { + // provide the raw-CFF data to the subsetter + ByteCount nCffLen = aBuffer.size(); + rInfo.LoadFont( FontSubsetInfo::CFF_FONT, &aBuffer[0], nCffLen ); + + // NOTE: assuming that all glyphids requested on Aqua are fully translated + + // make the subsetter provide the requested subset + FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" ); + bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, NULL, + pGlyphIDs, pEncoding, nGlyphCount, pGlyphWidths ); + fclose( pOutFile ); + return bRC; + } + // TODO: modernize psprint's horrible fontsubset C-API // this probably only makes sense after the switch to another SCM // that can preserve change history after file renames @@ -2129,7 +2183,7 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, // get details about the subsetted font TTGlobalFontInfo aTTInfo; ::GetTTGlobalFontInfo( pSftFont, &aTTInfo ); - rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE; + rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; rInfo.m_aPSName = String( aTTInfo.psname, RTL_TEXTENCODING_UTF8 ); rInfo.m_aFontBBox = Rectangle( Point( aTTInfo.xMin, aTTInfo.yMin ), Point( aTTInfo.xMax, aTTInfo.yMax ) ); @@ -2207,11 +2261,6 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, free( pGlyphMetrics ); // write subset into destination file - rtl::OUString aSysPath; - if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) ) - return FALSE; - rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding(); - ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) ); nRC = ::CreateTTFromTTGlyphs( pSftFont, aToFile.GetBuffer(), aShortIDs, aTempEncs, nGlyphCount, 0, NULL, 0 ); ::CloseTTFont(pSftFont); @@ -2229,7 +2278,7 @@ void AquaSalGraphics::GetGlyphWidths( const ImplFontData* pFontData, bool bVerti if( pFontData->IsSubsettable() ) { ByteVector aBuffer; - if( !GetRawFontData( pFontData, aBuffer ) ) + if( !GetRawFontData( pFontData, aBuffer, NULL ) ) return; // TODO: modernize psprint's horrible fontsubset C-API @@ -2314,7 +2363,6 @@ const void* AquaSalGraphics::GetEmbedFontData( const ImplFontData* pFontData, FontSubsetInfo& rInfo, long* pDataLen ) { - // TODO: are the non-subsettable fonts on OSX that are embeddable? return NULL; } diff --git a/vcl/inc/list.h b/vcl/inc/list.h index b801b43d77eb..66bff6912bc0 100644 --- a/vcl/inc/list.h +++ b/vcl/inc/list.h @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: list.h,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -28,8 +25,6 @@ * ************************************************************************/ -/* $Id: list.h,v 1.4 2008-06-25 14:20:01 kz Exp $ */ - /*[]---------------------------------------------------[]*/ /*| |*/ /*| Implementation of the list data type |*/ diff --git a/vcl/inc/sft.hxx b/vcl/inc/sft.hxx index 5f22bc0a471f..e2252802ba18 100644 --- a/vcl/inc/sft.hxx +++ b/vcl/inc/sft.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: sft.h,v $ - * $Revision: 1.21 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -28,11 +25,7 @@ * ************************************************************************/ -/* $Id: sft.h,v 1.21 2008-06-25 14:20:49 kz Exp $ */ - /** - - * * @file sft.h * @brief Sun Font Tools * @author Alexander Gelfenbain @@ -245,9 +238,13 @@ namespace vcl sal_uInt32 ur3; /**< bits 64 - 95 of Unicode Range flags */ sal_uInt32 ur4; /**< bits 96 - 127 of Unicode Range flags */ sal_uInt8 panose[10]; /**< PANOSE classification number */ - sal_uInt16 typeFlags; /**< type flags (copyright information) */ + sal_uInt32 typeFlags; /**< type flags (copyright bits + PS-OpenType flag) */ } TTGlobalFontInfo; +#define TYPEFLAG_INVALID 0x8000000 +#define TYPEFLAG_COPYRIGHT_MASK 0x000000E +#define TYPEFLAG_PS_OPENTYPE 0x0010000 + /** Structure used by KernGlyphs() */ typedef struct { int x; /**< positive: right, negative: left */ @@ -569,6 +566,12 @@ namespace vcl */ int GetTTGlyphCount( TrueTypeFont* ttf ); +/** + * provide access to the raw data of a SFNT-container's subtable + */ + bool GetSfntTable( TrueTypeFont* ttf, int nSubtableIndex, + const sal_uInt8** ppRawBytes, int* pRawLength ); + /*- private definitions */ /*FOLD00*/ struct _TrueTypeFont { @@ -590,14 +593,14 @@ namespace vcl sal_uInt32 unitsPerEm; sal_uInt32 numberOfHMetrics; sal_uInt32 numOfLongVerMetrics; /* if this number is not 0, font has vertical metrics information */ - sal_uInt8 *cmap; + const sal_uInt8* cmap; int cmapType; sal_uInt32 (*mapper)(const sal_uInt8 *, sal_uInt32); /* character to glyphID translation function */ - sal_uInt8 **tables; /* array of pointers to raw subtables in SFNT file */ + const sal_uInt8 **tables; /* array of pointers to raw subtables in SFNT file */ sal_uInt32 *tlens; /* array of table lengths */ int kerntype; /* Defined in the KernType enum */ sal_uInt32 nkern; /* number of kern subtables */ - sal_uInt8 **kerntables; /* array of pointers to kern subtables */ + const sal_uInt8** kerntables; /* array of pointers to kern subtables */ void *pGSubstitution; /* info provided by GSUB for UseGSUB() */ }; @@ -619,7 +622,8 @@ namespace vcl #define O_prep 14 /* 'prep' - only used in TT->TT generation */ #define O_fpgm 15 /* 'fpgm' - only used in TT->TT generation */ #define O_gsub 16 /* 'GSUB' */ -#define NUM_TAGS 17 +#define O_CFF 17 /* 'CFF' */ +#define NUM_TAGS 18 } // namespace vcl diff --git a/vcl/inc/vcl/fontmanager.hxx b/vcl/inc/vcl/fontmanager.hxx index bdfd30d12f7f..edd7a787ae3d 100644 --- a/vcl/inc/vcl/fontmanager.hxx +++ b/vcl/inc/vcl/fontmanager.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: fontmanager.hxx,v $ - * $Revision: 1.36 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -51,6 +48,7 @@ // forward declarations namespace utl { class MultiAtomProvider; } // see unotools/atom.hxx +class FontSubsetInfo; namespace psp { class PPDParser; // see ppdparser.hxx @@ -166,6 +164,8 @@ struct FastPrintFontInfo rtl_TextEncoding m_aEncoding; fcstatus::type m_eEmbeddedbitmap; fcstatus::type m_eAntialias; + bool m_bSubsettable; + bool m_bEmbeddable; FastPrintFontInfo() : m_nID( 0 ), @@ -328,9 +328,9 @@ class VCL_DLLPUBLIC PrintFontManager rtl::OString m_aFontFile; // relative to directory rtl::OString m_aXLFD; // mainly for administration, contains the XLFD from fonts.dir int m_nCollectionEntry; // -1 for regular fonts, 0 to ... for fonts stemming from collections - unsigned int m_nTypeFlags; // from TrueType file; only known use is for copyright flags + unsigned int m_nTypeFlags; // copyright bits and PS-OpenType flag - TrueTypeFontFile() : PrintFont( fonttype::TrueType ), m_nDirectory( 0 ), m_nCollectionEntry(-1), m_nTypeFlags( 0x80000000 ) {} + TrueTypeFontFile(); virtual ~TrueTypeFontFile(); virtual bool queryMetricPage( int nPage, utl::MultiAtomProvider* pProvider ); }; @@ -648,7 +648,9 @@ public: // nGlyphs: number of glyphs in arrays // pCapHeight:: capital height of the produced font // pXMin, pYMin, pXMax, pYMax: outgoing font bounding box - bool createFontSubset( fontID nFont, + // TODO: callers of this method should use its FontSubsetInfo counterpart directly + bool createFontSubset( FontSubsetInfo&, + fontID nFont, const rtl::OUString& rOutFile, sal_Int32* pGlyphIDs, sal_uInt8* pNewEncoding, diff --git a/vcl/inc/vcl/fontsubset.hxx b/vcl/inc/vcl/fontsubset.hxx new file mode 100644 index 000000000000..3032490dcbab --- /dev/null +++ b/vcl/inc/vcl/fontsubset.hxx @@ -0,0 +1,97 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SV_FONTSUBSET_HXX +#define _SV_FONTSUBSET_HXX + +#include +#include +#include + +namespace vcl { struct _TrueTypeFont; } // SFT's idea of a TTF font + +class FontSubsetInfo +{ +public: + explicit FontSubsetInfo( void ); + virtual ~FontSubsetInfo( void ); + + enum FontType { + NO_FONT = 0, + SFNT_TTF = 1<<1, // SFNT container with TrueType glyphs + SFNT_CFF = 1<<2, // SFNT container with CFF-container + TYPE1_PFA = 1<<3, // PSType1 Postscript Font Ascii + TYPE1_PFB = 1<<4, // PSType1 Postscript Font Binary + CFF_FONT = 1<<5, // CFF-container with PSType2 glyphs + TYPE3_FONT = 1<<6, // PSType3 Postscript font + TYPE42_FONT = 1<<7, // PSType42 wrapper for an SFNT_TTF + ANY_SFNT = SFNT_TTF | SFNT_CFF, + ANY_TYPE1 = TYPE1_PFA | TYPE1_PFB, + ANY_FONT = 0xFF + }; + + bool LoadFont( FontType eInFontType, + const unsigned char* pFontBytes, int nByteLength ); + bool LoadFont( vcl::_TrueTypeFont* pSftTrueTypeFont ); + + bool CreateFontSubset( int nOutFontTypeMask, + FILE* pOutFile, const char* pOutFontName, + const long* pReqGlyphIds, const sal_uInt8* pEncodedIds, + int nReqGlyphCount, sal_Int32* pOutGlyphWidths = NULL ); + +public: // TODO: make subsetter results private and provide accessor methods instead + // subsetter-provided subset details needed by e.g. Postscript or PDF + String m_aPSName; + int m_nAscent; // all metrics in PS font units + int m_nDescent; + int m_nCapHeight; + Rectangle m_aFontBBox; + FontType m_nFontType; // font-type of subset result + +private: + // input-font-specific details + unsigned const char* mpInFontBytes; + int mnInByteLength; + FontType meInFontType; // allowed mask of input font-types + vcl::_TrueTypeFont* mpSftTTFont; + + // subset-request details + int mnReqFontTypeMask; // allowed subset-target font types + FILE* mpOutFile; + const char* mpReqFontName; + const long* mpReqGlyphIds; + const sal_uInt8* mpReqEncodedIds; + int mnReqGlyphCount; + +protected: + bool CreateFontSubsetFromCff( sal_Int32* pOutGlyphWidths = NULL ); + bool CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths = NULL ); + bool CreateFontSubsetFromType1( sal_Int32* pOutGlyphWidths = NULL ); +}; + +#endif // _SV_FONTSUBSET_HXX + diff --git a/vcl/inc/vcl/glyphcache.hxx b/vcl/inc/vcl/glyphcache.hxx index 637feee34839..33a7c80b7746 100644 --- a/vcl/inc/vcl/glyphcache.hxx +++ b/vcl/inc/vcl/glyphcache.hxx @@ -50,6 +50,7 @@ struct ImplKernPairData; namespace basegfx { class B2DPolyPolygon; } class RawBitmap; +class CmapResult; #include @@ -189,7 +190,7 @@ public: virtual void FetchFontMetric( ImplFontMetricData&, long& rFactor ) const = 0; virtual ULONG GetKernPairs( ImplKernPairData** ) const { return 0; } virtual int GetGlyphKernValue( int, int ) const { return 0; } - virtual ULONG GetFontCodeRanges( sal_uInt32* ) const { return 0; } + virtual bool GetFontCodeRanges( CmapResult& ) const { return false; } Point TransformPoint( const Point& ) const; GlyphData& GetGlyphData( int nGlyphIndex ); diff --git a/vcl/inc/vcl/impfont.hxx b/vcl/inc/vcl/impfont.hxx index 90d8793f513f..e2b1889e8e0e 100644 --- a/vcl/inc/vcl/impfont.hxx +++ b/vcl/inc/vcl/impfont.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: impfont.hxx,v $ - * $Revision: 1.3.134.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -140,14 +137,15 @@ public: // - ImplFontCharMap - // ------------------- +class CmapResult; + class VCL_DLLPUBLIC ImplFontCharMap { public: - ImplFontCharMap( int nRangePairs, - const sal_uInt32* pRangeCodes, - const int* pStartGlyphs = NULL ); + explicit ImplFontCharMap( const CmapResult& ); + + static ImplFontCharMap* GetDefaultMap( bool bSymbols=false); -static ImplFontCharMap* GetDefaultMap(); bool IsDefaultMap() const; bool HasChar( sal_uInt32 ) const; int CountCharsInRange( sal_uInt32 cMin, sal_uInt32 cMax ) const; @@ -165,34 +163,46 @@ static ImplFontCharMap* GetDefaultMap(); void AddReference(); void DeReference(); - int GetGlyphIndex( sal_uInt32 ); + int GetGlyphIndex( sal_uInt32 ) const; private: - ~ImplFontCharMap(); + /*virtual*/ ~ImplFontCharMap(); int ImplFindRangeIndex( sal_uInt32 ) const; // prevent assignment and copy construction - ImplFontCharMap( const ImplFontCharMap& ); + explicit ImplFontCharMap( const ImplFontCharMap& ); void operator=( const ImplFontCharMap& ); private: const sal_uInt32* mpRangeCodes; // pairs of StartCode/(EndCode+1) - const int* mpStartGlyphs; // index of the first glyph of the ranges + const int* mpStartGlyphs; // range-specific mapper to glyphs + const USHORT* mpGlyphIds; // individual glyphid mappings int mnRangeCount; int mnCharCount; int mnRefCount; }; // CmapResult is a normalized version of the many CMAP formats -struct CmapResult +class +#ifdef UNX + VCL_DLLPUBLIC // vcl-plugins need it +#endif // UNX +CmapResult { - sal_uInt32* mpPairCodes; - int* mpStartGlyphs; - int mnPairCount; - bool mbRecoded; - bool mbSymbolic; +public: + explicit CmapResult( bool bSymbolic = false, + const sal_uInt32* pRangeCodes = NULL, int nRangeCount = 0, + const int* pStartGlyphs = 0, const USHORT* pGlyphIds = NULL ); + + const sal_uInt32* mpRangeCodes; + const int* mpStartGlyphs; + const USHORT* mpGlyphIds; + int mnRangeCount; + bool mbSymbolic; + bool mbRecoded; }; bool ParseCMAP( const unsigned char* pRawData, int nRawLength, CmapResult& ); #endif // _SV_IMPFONT_HXX + diff --git a/vcl/inc/vcl/outfont.hxx b/vcl/inc/vcl/outfont.hxx index 86a5e59f6345..88316130cc3a 100644 --- a/vcl/inc/vcl/outfont.hxx +++ b/vcl/inc/vcl/outfont.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: outfont.hxx,v $ - * $Revision: 1.6.14.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -407,17 +404,5 @@ private: ImplMultiTextLineInfo& operator=( const ImplMultiTextLineInfo& ); }; -#define SAL_FONTSUBSETINFO_TYPE_TRUETYPE 0 -#define SAL_FONTSUBSETINFO_TYPE_TYPE1 1 - -struct FontSubsetInfo -{ - String m_aPSName; - int m_nFontType; - int m_nAscent; // all lengths in PS font units - int m_nDescent; - int m_nCapHeight; - Rectangle m_aFontBBox; -}; - #endif // _SV_OUTFONT_HXX + diff --git a/vcl/inc/vcl/printergfx.hxx b/vcl/inc/vcl/printergfx.hxx index 3bb242c802dd..e34a1ce78001 100644 --- a/vcl/inc/vcl/printergfx.hxx +++ b/vcl/inc/vcl/printergfx.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: printergfx.hxx,v $ - * $Revision: 1.19.18.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -32,6 +29,7 @@ #define _PSPRINT_PRINTERGFX_HXX_ #include "vcl/helper.hxx" +#include "vcl/sallayout.hxx" #include "osl/file.hxx" #include "tools/gen.hxx" @@ -325,7 +323,7 @@ public: const sal_Int32* pDeltaArray = NULL); void drawGlyphs( const Point& rPoint, - sal_uInt32* pGlyphIds, + sal_GlyphId* pGlyphIds, sal_Unicode* pUnicodes, sal_Int16 nLen, sal_Int32* pDeltaArray ); @@ -428,7 +426,7 @@ public: // for CTL void DrawGlyphs( const Point& rPoint, - sal_uInt32* pGlyphIds, + sal_GlyphId* pGlyphIds, sal_Unicode* pUnicodes, sal_Int16 nLen, sal_Int32* pDeltaArray ); diff --git a/vcl/inc/vcl/salgdi.hxx b/vcl/inc/vcl/salgdi.hxx index 5cf6e70f5114..55f8a0d03deb 100644 --- a/vcl/inc/vcl/salgdi.hxx +++ b/vcl/inc/vcl/salgdi.hxx @@ -53,7 +53,7 @@ class ImplFontCharMap; class SalLayout; class ImplLayoutArgs; class Rectangle; -struct FontSubsetInfo; +class FontSubsetInfo; class OutputDevice; class ServerFontLayout; struct SystemGraphicsData; diff --git a/vcl/inc/vcl/sallayout.hxx b/vcl/inc/vcl/sallayout.hxx index 3141381041c8..6934cdc182b6 100755 --- a/vcl/inc/vcl/sallayout.hxx +++ b/vcl/inc/vcl/sallayout.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: sallayout.hxx,v $ - * $Revision: 1.8.54.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/vcl/source/fontsubset/cff.cxx b/vcl/source/fontsubset/cff.cxx new file mode 100644 index 000000000000..7af7e7e9c9e0 --- /dev/null +++ b/vcl/source/fontsubset/cff.cxx @@ -0,0 +1,2418 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2009 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +#include +#include +#include + +#include + +//#define IGNORE_HINTS + +typedef unsigned char U8; +typedef unsigned short U16; +typedef long long S64; + +typedef sal_Int32 GlyphWidth; + +#include +typedef std::vector IntVector; + +// ==================================================================== + +static const char* pStringIds[] = { +/*0*/ ".notdef", "space", "exclam", "quotedbl", + "numbersign", "dollar", "percent", "ampersand", + "quoteright", "parenleft", "parenright", "asterisk", + "plus", "comma", "hyphen", "period", +/*16*/ "slash", "zero", "one", "two", + "three", "four", "five", "six", + "seven", "eight", "nine", "colon", + "semicolon", "less", "equal", "greater", +/*32*/ "question", "at", "A", "B", + "C", "D", "E", "F", + "G", "H", "I", "J", + "K", "L", "M", "N", +/*48*/ "O", "P", "Q", "R", + "S", "T", "U", "V", + "W", "X", "Y", "Z", + "bracketleft", "backslash", "bracketright", "asciicircum", +/*64*/ "underscore", "quoteleft", "a", "b", + "c", "d", "e", "f", + "g", "h", "i", "j", + "k", "l", "m", "n", +/*80*/ "o", "p", "q", "r", + "s", "t", "u", "v", + "w", "x", "y", "z", + "braceleft", "bar", "braceright", "asciitilde", +/*96*/ "exclamdown", "cent", "sterlin", "fraction", + "yen", "florin", "section", "currency", + "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", + "guilsinglright", "fi", "fl", "endash", +/*112*/ "dagger", "daggerdbl", "periodcentered", "paragraph", + "bullet", "quotesinglbase", "quotedblbase", "quotedblright", + "guillemotright", "ellipsis", "perthousand", "questiondown", + "grave", "acute", "circumflex", "tilde", +/*128*/ "macron", "breve", "dotaccent", "dieresis", + "ring", "cedilla", "hungarumlaut", "ogonek", + "caron", "endash", "AE", "ordfeminine", + "Lslash", "Oslash", "OE", "ordmasculine", +/*144*/ "ae", "dotlessi", "lslash", "oslash", + "oe", "germandbls", "onesuperior", "logicalnot", + "mu", "trademark", "Eth", "onehalf", + "plusminus", "Thorn", "onequarter", "divide", +/*160*/ "brokenbar", "degree", "thorn", "threequarters", + "twosuperior", "registered", "minus", "eth", + "multiply", "threesuperior", "copyright", "Aacute", + "Acircumflex", "Adieresis", "Agrave", "Aring", +/*176*/ "Atilde", "Ccedilla", "Eacute", "Ecircumflex", + "Edieresis", "Egrave", "Iacute", "Icircumflex", + "Idieresis", "Igrave", "Ntilde", "Oacute", + "Ocircumflex", "Odieresis", "Ograve", "Otilde", +/*192*/ "Scaron", "Uacute", "Ucircumflex", "Udieresis", + "Ugrave", "Yacute", "Ydieresis", "Zcaron", + "aacute", "acircumflex", "adieresis", "agrave", + "aring", "atilde", "ccedilla", "eacute", +/*208*/ "ecircumflex", "edieresis", "egrave", "iacute", + "icircumflex", "idieresis", "igrave", "ntilde", + "oacute", "ocircumflex", "odieresis", "ograve", + "otilde", "scaron", "uacute", "ucircumflex", +/*224*/ "udieresis", "ugrave", "yacute", "ydieresis", + "zcaron", "exclamsmall", "Hungarumlautsmall","dollaroldstyle", + "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", + "parenrightsuperior","twodotenleader", "onedotenleader", "zerooldstyle", +/*240*/ "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", + "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", + "nineoldstile", "commasuperior", "threequartersemdash","periodsuperior", + "questionsmall", "asuperior", "bsuperior", "centsuperior", +/*256*/ "dsuperior", "esuperior", "isuperior", "lsuperior", + "msuperior", "nsuperior", "osuperior", "rsuperior", + "ssuperior", "tsuperior", "ff", "ffi", + "ffl", "parenleftinferior","parenrightinferior","Circumflexsmall", +/*272*/ "hyphensuperior","Gravesmall", "Asmall", "Bsmall", + "Csmall", "Dsmall", "Esmall", "Fsmall", + "Gsmall", "Hsmall", "Ismall", "Jsmall", + "Ksmall", "Lsmall", "Msmall", "Nsmall", +/*288*/ "Osmall", "Psmall", "Qsmall", "Rsmall", + "Ssmall", "Tsmall", "Usmall", "Vsmall", + "Wsmall", "Xsmall", "Ysmall", "Zsmall", + "colonmonetary", "onefitted", "rupia", "Tildesmall", +/*304*/ "exclamdownsmall","centoldstyle", "Lslashsmall", "Scaronsmall", + "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", + "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", + "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", +/*320*/ "oneeight", "threeeights", "fiveeights", "seveneights", + "onethird", "twothirds", "zerosuperior", "foursuperior", + "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", + "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", +/*336*/ "threeinferior","fourinferior", "fiveinferior", "sixinferior", + "seveninferior", "eightinferior", "nineinferior", "centinferior", + "dollarinferior", "periodinferior", "commainferior", "Agravesmall", + "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", +/*352*/ "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", + "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", + "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", + "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", +/*368*/ "Otildesmall", "Odieressissmall", "OEsmall", "Oslashsmall", + "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", + "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", + "001.001", "001.002", "001.003", "Black", +/*384*/ "Bold", "Book", "Light", "Medium", + "Regular", "Roman", "Semibold" +}; + +// -------------------------------------------------------------------- + +#if 0 // TODO: use them +static const char* pStdEncNames[] = { + "ISOAdobe", "Expert", "ExpertSubSet" +}; +#endif + +// -------------------------------------------------------------------- + +// TOP DICT keywords (also covers PRIV DICT keywords) +static const char* pDictOps[] = { + "sVersion", "sNotice", "sFullName", "sFamilyName", + "sWeight", "aFontBBox", "dBlueValues", "dOtherBlues", + "dFamilyBlues", "dFamilyOtherBlues", "nStdHW", "nStdVW", + "xESC", "nUniqueID", "aXUID", "nCharset", + "nEncoding", "nCharStrings", "PPrivate", "nSubrs", + "nDefaultWidthX", "nNominalWidthX", NULL, NULL, + NULL, NULL, NULL, NULL, + "shortint", "longint", "BCD", NULL +}; + +// -------------------------------------------------------------------- + +// TOP DICT escapes (also covers PRIV DICT escapes) +static const char* pDictEscs[] = { + "sCopyright", "bIsFixedPitch", "nItalicAngle", "nUnderlinePosition", + "nUnderlineThickness", "nPaintType", "tCharstringType", "aFontMatrix", + "nStrokeWidth", "nBlueScale", "nBlueShift", "nBlueFuzz", + "dStemSnapH", "dStemSnapV", "bForceBold", NULL, + NULL, "nLanguageGroup", "nExpansionFactor", "nInitialRandomSeed", + "nSyntheticBase", "sPostScript", "sBaseFontName", "dBaseFontBlend", + NULL, NULL, NULL, NULL, + NULL, NULL, "rROS", "nCIDFontVersion", + "nCIDFontRevision", "nCIDFontType", "nCIDCount", "nUIDBase", + "nFDArray", "nFDSelect", "sFontName" +}; + +// -------------------------------------------------------------------- + +static const char* pType1Ops[] = { + NULL, "2hstem", NULL, "2vstem", + "1vmoveto", "Arlineto", "1hlineto", "1vlineto", + "Crrcurveto", "0closepath", "Lcallsubr", "0return", + "xT1ESC", "2hsbw", "0endchar", NULL, + NULL, NULL, NULL, NULL, + NULL, "2rmoveto", "1hmoveto", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, "4vhcurveto", "4hvcurveto" +}; + +// -------------------------------------------------------------------- + +static const char* pT1EscOps[] = { + "0dotsection", "6vstem3", "6hstem3", NULL, + NULL, NULL, "5seac", "4sbw", + NULL, "1abs", "2add", "2sub", + "2div", NULL, NULL, NULL, + "Gcallothersubr", "1pop", NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, "2setcurrentpoint" +}; + +// -------------------------------------------------------------------- + +struct TYPE1OP +{ + enum OPS + { + HSTEM=1, VSTEM=3, VMOVETO=4, RLINETO=5, + HLINETO=6, VLINETO=7, RCURVETO=8, CLOSEPATH=9, + CALLSUBR=10, RETURN=11, T1ESC=12, HSBW=13, + ENDCHAR=14, RMOVETO=21, HMOVETO=22, VHCURVETO=30, + HVCURVETO=31 + }; + + enum ESCS + { + DOTSECTION=0, VSTEM3=1, HSTEM3=2, SEAC=6, + SBW=7, ABS=9, ADD=10, SUB=11, + DIV=12, CALLOTHERSUBR=16, POP=17, SETCURRENTPOINT=33 + }; +}; + +// -------------------------------------------------------------------- + +static const char* pType2Ops[] = { + NULL, "hhstem", NULL, "vvstem", + "mvmoveto", "Arlineto", "Ehlineto", "Evlineto", + "Crrcurveto", NULL, "Lcallsubr", "Xreturn", + "xT2ESC", NULL, "eendchar", NULL, + NULL, NULL, "Hhstemhm", "Khintmask", + "Kcntrmask", "Mrmoveto", "mhmoveto", "Vvstemhm", + ".rcurveline", ".rlinecurve", ".vvcurveto", ".hhcurveto", + ".shortint", "Gcallgsubr", ".vhcurveto", ".hvcurveto" +}; + +// -------------------------------------------------------------------- + +static const char* pT2EscOps[] = { + NULL, NULL, NULL, "2and", + "2or", "1not", NULL, NULL, + NULL, "1abs", "2add", "2sub", + "2div", NULL, "1neg", "2eq", + NULL, NULL, "1drop", NULL, + "1put", "1get", "4ifelse", "0random", + "2mul", NULL, "1sqrt", "1dup", + "2exch", "Iindex", "Rroll", NULL, + NULL, NULL, "7hflex", "Fflex", + "9hflex1", "fflex1" +}; + +// -------------------------------------------------------------------- + +struct TYPE2OP +{ + enum OPS + { + HSTEM=1, VSTEM=3, VMOVETO=4, RLINETO=5, + HLINETO=6, VLINETO=7, RCURVETO=8, CALLSUBR=10, + RETURN=11, T2ESC=12, ENDCHAR=14, HSTEMHM=18, + HINTMASK=19, CNTRMASK=20, RMOVETO=21, HMOVETO=22, + VSTEMHM=23, RCURVELINE=24, RLINECURVE=25, VVCURVETO=26, + HHCURVETO=27, SHORTINT=28, CALLGSUBR=29, VHCURVETO=30, + HVCURVETO=31 + }; + + enum ESCS + { + AND=3, OR=4, NOT=5, ABS=9, + ADD=10, SUB=11, DIV=12, NEG=14, + EQ=15, DROP=18, PUT=20, GET=21, + IFELSE=22, RANDOM=23, MUL=24, SQRT=26, + DUP=27, EXCH=28, INDEX=29, ROLL=30, + HFLEX=34, FLEX=35, HFLEX1=36, FLEX1=37 + }; +}; + +// ==================================================================== + +struct CffGlobal +{ + explicit CffGlobal(); + + int mnNameIdxBase; + int mnNameIdxCount; + int mnStringIdxBase; + int mnStringIdxCount; + bool mbCIDFont; + int mnCharStrBase; + int mnCharStrCount; + int mnEncodingBase; + int mnCharsetBase; + int mnGlobalSubrBase; + int mnGlobalSubrCount; + int mnGlobalSubrBias; + int mnFDSelectBase; + int mnFontDictBase; + int mnFDAryCount; + + IntVector maFontBBox; + //FloatVector maFontMatrix; + + int mnFontNameSID; + int mnFullNameSID; + int mnFamilyNameSID; +}; + +// ==================================================================== + +struct CffLocal +{ + explicit CffLocal(); + + int mnPrivDictBase; + int mnPrivDictSize; + int mnLocalSubrOffs; + int mnLocalSubrBase; + int mnLocalSubrCount; + int mnLocalSubrBias; + int mnNominalWidth; + int mnDefaultWidth; + + // ATM hinting related values + int mnStemStdHW; + int mnStemStdVW; + IntVector maStemSnapH; + IntVector maStemSnapV; + IntVector maBlueValues; + IntVector maOtherBlues; + IntVector maFamilyBlues; + IntVector maFamilyOtherBlues; + double mfBlueScale; + double mfBlueShift; + double mfBlueFuzz; + double mfExpFactor; + int mnLangGroup; + bool mbForceBold; +}; + +// ==================================================================== + +class SubsetterContext +{ +public: + virtual ~SubsetterContext( void); + virtual bool emitAsType1( class Type1Emitter&, + const long* pGlyphIDs, const U8* pEncoding, + GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& ) = 0; +}; + +// -------------------------------------------------------------------- + +SubsetterContext::~SubsetterContext( void) +{} + +// ==================================================================== + +class CffSubsetterContext +: public SubsetterContext +, private CffGlobal +{ +public: + static const int NMAXSTACK = 48; // see CFF.appendixB + static const int NMAXHINTS = 2*96; // see CFF.appendixB + static const int NMAXTRANS = 32; // see CFF.appendixB +public: + explicit CffSubsetterContext( const U8* pBasePtr, int nBaseLen); + virtual ~CffSubsetterContext( void); + + void initialCffRead( void); + bool emitAsType1( class Type1Emitter&, + const long* pGlyphIDs, const U8* pEncoding, + GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& ); + + // used by charstring converter + void setCharStringType( int); + void fakeLocalSubrCount( int nLocalSubrs ) { maCffLocal[0].mnLocalSubrCount=nLocalSubrs;} + void readCharString( const U8* pTypeOps, int nTypeLen); +protected: + int convert2Type1Ops( CffLocal*, const U8* pType2Ops, int nType2Len, U8* pType1Ops); +private: + void readTypeOp( CffSubsetterContext&); + void convertOneTypeOp( void); + void convertOneTypeEsc( void); + void callType2Subr( bool bGlobal, int nSubrNumber); + long getReadOfs( void) const { return (long)(mpReadPtr - mpBasePtr);} + + const U8* mpBasePtr; + const U8* mpBaseEnd; + + const U8* mpReadPtr; + const U8* mpReadEnd; + + U8* mpWritePtr; + bool mbSawError; + bool mbNeedClose; + bool mbIgnoreHints; + long mnCntrMask; + +private: + int seekIndexData( int nIndexBase, int nDataIndex); + void seekIndexEnd( int nIndexBase); + +private: + const char** mpCharStringOps; + const char** mpCharStringEscs; + + CffLocal maCffLocal[16]; + CffLocal* mpCffLocal; + + void readDictOp( void); + double readRealVal( void); + const char* getString( int nStringID); + int getFDSelect( int nGlyphIndex) const; + int getGlyphSID( int nGlyphIndex) const; + const char* getGlyphName( int nGlyphIndex); + + void readTypeOp( void); + void read2push( void); + void pop2write( void); + void writeType1Val( int/*TODO: double*/ nVal); + void writeTypeOp( int nTypeOp); + void writeTypeEsc( int nTypeOp); + void writeCurveTo( int nStackPos, int nIX1, int nIY1, int nIX2, int nIY2, int nIX3, int nIY3); + void pop2MultiWrite( int nArgsPerTypo, int nTypeOp, int nTypeXor=0); + void popAll2Write( int nTypeOp); + +public: // TODO: is public really needed? + // accessing the value stack + // TODO: add more checks + void push( int nVal) { mnValStack[ mnStackIdx++] = nVal;} + int pop( void) { return ((mnStackIdx>0) ? mnValStack[ --mnStackIdx] : 0);} + int peek( void) { return ((mnStackIdx>0) ? mnValStack[ mnStackIdx-1] : 0);} + int get( int nIndex) { return mnValStack[ nIndex];} + int size( void) const { return mnStackIdx;} + bool empty( void) const { return !mnStackIdx;} + void clear( void) { mnStackIdx = 0;} + + // accessing the charstring hints + void addHints( bool bVerticalHints); + int getHorzHintCount( void) const { return (mnHorzHintSize/2);} + int getVertHintCount( void) const { return (mnHintSize-mnHorzHintSize)/2;} + void getHintPair( int nIndex, int* nMin, int* nEnd) const; + + // accessing other charstring specifics + bool hasCharWidth( void) const { return (mnCharWidth != -1);} + int getCharWidth( void) const { return mnCharWidth;} + void setNominalWidth( int nWidth) { mpCffLocal->mnNominalWidth = nWidth;} + void setDefaultWidth( int nWidth) { mpCffLocal->mnDefaultWidth = nWidth;} + void updateWidth( bool bUseFirstVal); + +private: + // typeop exceution context + int mnStackIdx; + int mnValStack[ NMAXSTACK]; + int mnTransVals[ NMAXTRANS]; + + int mnHintSize; + int mnHorzHintSize; + int mnHintStack[ NMAXHINTS]; + + int mnCharWidth; +}; + +// -------------------------------------------------------------------- + +CffSubsetterContext::CffSubsetterContext( const U8* pBasePtr, int nBaseLen) +: mpBasePtr( pBasePtr) +, mpBaseEnd( pBasePtr+nBaseLen) +, mnStackIdx(0) +, mnHintSize(0) +, mnHorzHintSize(0) +, mnCharWidth(-1) +{ +// setCharStringType( 1); + // TODO: new CffLocal[ mnFDAryCount]; + mpCffLocal = &maCffLocal[0]; +} + +// -------------------------------------------------------------------- + +CffSubsetterContext::~CffSubsetterContext( void) +{ + // TODO: delete[] maCffLocal; +} + +// -------------------------------------------------------------------- + +inline void CffSubsetterContext::updateWidth( bool bUseFirstVal) +{ +#if 1 // TODO: is this still needed? + // the first value is not a hint but the charwidth + if( hasCharWidth()) + return; +#endif + if( bUseFirstVal) { + mnCharWidth = mpCffLocal->mnNominalWidth + mnValStack[0]; + // remove bottom stack entry + --mnStackIdx; + for( int i = 0; i < mnStackIdx; ++i) + mnValStack[ i] = mnValStack[ i+1]; + } else { + mnCharWidth = mpCffLocal->mnDefaultWidth; + } +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::addHints( bool bVerticalHints) +{ + // the first charstring value may a charwidth instead of a charwidth + updateWidth( (mnStackIdx & 1) != 0); + // return early (e.g. no implicit hints for hintmask) + if( !mnStackIdx) + return; + + // copy the remaining values to the hint arrays + // assert( (mnStackIdx & 1) == 0); // depends on called subrs + if( mnStackIdx & 1) --mnStackIdx;//####### + // TODO: if( !bSubr) assert( mnStackIdx >= 2); + + assert( (mnHintSize + mnStackIdx) <= 2*NMAXHINTS); + +#ifdef IGNORE_HINTS + mnHorzHintSize += mnStackIdx; +#else + int nHintOfs = 0; + for( int i = 0; i < mnStackIdx; ++i) { + nHintOfs += mnValStack[ i]; + mnHintStack[ mnHintSize++] = nHintOfs; + } + if( !bVerticalHints) + mnHorzHintSize = mnHintSize; +#endif // IGNORE_HINTS + + // clear all values from the stack + mnStackIdx = 0; +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::getHintPair( int nIndex, int* pMin, int* pEnd) const +{ + nIndex *= 2; + assert( nIndex < mnHintSize); + assert( nIndex >= 0); + const int* pHint = &mnHintStack[ nIndex]; + *pMin = pHint[0]; + *pEnd = pHint[1]; +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::setCharStringType( int nVal) +{ + switch( nVal) { + case 1: mpCharStringOps=pType1Ops; mpCharStringEscs=pT1EscOps; break; + case 2: mpCharStringOps=pType2Ops; mpCharStringEscs=pT2EscOps; break; + default: fprintf( stderr, "Unknown CharstringType=%d\n",nVal); break; + } +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::readCharString( const U8* pTypeOps, int nTypeLen) +{ + mnStackIdx = 0; + mnHintSize = 0; + mnHorzHintSize = 0; + mnCharWidth = -1; + + assert( nTypeLen >= 0); +// assert( nEnd <= getLength()); + mpReadPtr = pTypeOps; + mpReadEnd = mpReadPtr + nTypeLen; + // reset the execution context + while( mpReadPtr < mpReadEnd) + readTypeOp(); +//### assert( tellRel() == nEnd); +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::readDictOp( void) +{ + int nVal = 0; + const U8 c = *mpReadPtr; + if( c <= 21 ) { + int nOpId = *(mpReadPtr++); + const char* pCmdName; + if( nOpId != 12) + pCmdName = pDictOps[ nOpId]; + else { + const U8 nExtId = *(mpReadPtr++); + pCmdName = pDictEscs[ nExtId]; + nOpId = 900 + nExtId; + } + + //TODO: if( nStackIdx > 0) + switch( *pCmdName) { + default: fprintf( stderr, "unsupported DictOp.type=\'%c\'\n", *pCmdName); break; + case 'b': // bool + nVal = pop(); + switch( nOpId) { + case 915: mpCffLocal->mbForceBold = nVal; break; // "ForceBold" + default: break; // TODO: handle more boolean dictops? + } + break; + case 'n': // dict-op number + nVal = pop(); + switch( nOpId) { + case 10: mpCffLocal->mnStemStdHW = nVal; break; // "StdHW" + case 11: mpCffLocal->mnStemStdVW = nVal; break; // "StdVW" + case 15: mnCharsetBase = nVal; break; // "charset" + case 16: mnEncodingBase = nVal; break; // "nEncoding" + case 17: mnCharStrBase = nVal; break; // "nCharStrings" + case 19: mpCffLocal->mnLocalSubrOffs = nVal; break;// "nSubrs" + case 20: setDefaultWidth( nVal); break; // "defaultWidthX" + case 21: setNominalWidth( nVal); break; // "nominalWidthX" + case 909: mpCffLocal->mfBlueScale = nVal; break; // "BlueScale" + case 910: mpCffLocal->mfBlueShift = nVal; break; // "BlueShift" + case 911: mpCffLocal->mfBlueFuzz = nVal; break; // "BlueFuzz" + case 912: mpCffLocal->mfExpFactor = nVal; break; // "ExpansionFactor" + case 917: mpCffLocal->mnLangGroup = nVal; break; // "LanguageGroup" + case 936: mnFontDictBase = nVal; break; // "nFDArray" + case 937: mnFDSelectBase = nVal; break; // "nFDSelect" + default: break; // TODO: handle more numeric dictops? + } + break; + case 'a': { // array + for( int i = 0; i < size(); ++i ) { + nVal = get(i); + switch( nOpId) { + case 5: maFontBBox.push_back( nVal); break; // "FontBBox" +#if 0 // TODO + case 907: maFontMatrix.push_back( nVal); break; // "FontMatrix" +#endif + default: break; // TODO: handle more array dictops? + } + } + clear(); + } break; + case 'd': { // delta array + nVal = 0; + for( int i = 0; i < size(); ++i ) { + nVal += get(i); + switch( nOpId) { + case 6: mpCffLocal->maBlueValues.push_back( nVal); break; // "BlueValues" + case 7: mpCffLocal->maOtherBlues.push_back( nVal); break; // "OtherBlues" + case 8: mpCffLocal->maFamilyBlues.push_back( nVal); break; // "FamilyBlues" + case 9: mpCffLocal->maFamilyOtherBlues.push_back( nVal); break;// "FamilyOtherBlues" + case 912: mpCffLocal->maStemSnapH.push_back( nVal); break; // "StemSnapH" + case 913: mpCffLocal->maStemSnapV.push_back( nVal); break; // "StemSnapV" + default: break; // TODO: handle more delta-array dictops? + } + } + clear(); + } break; + case 's': // stringid (SID) + nVal = pop(); + switch( nOpId) { + case 2: mnFullNameSID = nVal; break; // "FullName" + case 3: mnFamilyNameSID = nVal; break; // "FamilyName" + case 938: mnFontNameSID = nVal; break; // "FontName" + default: break; // TODO: handle more string dictops? + } + break; + case 'P': // private dict + mpCffLocal->mnPrivDictBase = pop(); + mpCffLocal->mnPrivDictSize = pop(); + break; + case 'r': { // ROS operands + int nSid1 = pop(); + int nSid2 = pop(); + (void)nSid1; // TODO: use + (void)nSid2; // TODO: use + nVal = pop(); + mbCIDFont = true; + } break; + case 't': // CharstringType + nVal = pop(); + setCharStringType( nVal); + break; + } + + return; + } + + if( (c >= 32) || (c == 28)) { +// --mpReadPtr; + read2push(); + } else if( c == 29) { // longint + ++mpReadPtr; // skip 29 + int nS32 = mpReadPtr[0] << 24; + nS32 += mpReadPtr[1] << 16; + nS32 += mpReadPtr[2] << 8; + nS32 += mpReadPtr[3] << 0; + if( (sizeof(nS32) != 4) && (nS32 & (1<<31))) + nS32 |= (~0U) << 31; // assuming 2s complement + mpReadPtr += 4; + nVal = nS32; + push( nVal); + } else if( c == 30) { // real number + ++mpReadPtr; // skip 30 + const double fReal = readRealVal(); + // push value onto stack + nVal = static_cast(fReal+0.5); //TODO!!! allow float on operand stack! + push( nVal); + } +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::readTypeOp( void) +{ + int nVal = 0; + const U8 c = *mpReadPtr; + if( (c <= 31) && (c != 28) ) { + const int nOpId = *(mpReadPtr++); + const char* pCmdName; + if( nOpId != 12) + pCmdName = mpCharStringOps[ nOpId]; + else { + const int nExtId = *(mpReadPtr++); + pCmdName = mpCharStringEscs[ nExtId]; + } + + if( !pCmdName ) + pCmdName = ".NULL"; + // handle typeop parameters + int nMinStack = -1, nMaxStack = -1; + switch( *pCmdName) { + default: fprintf( stderr, "unsupported TypeOp.type=\'%c\'\n", *pCmdName); break; + case '.': nMinStack = 0; nMaxStack = 999; break; + case '0': nMinStack = nMaxStack = 0; break; + case '1': nMinStack = nMaxStack = 1; break; + case '2': nMinStack = nMaxStack = 2; break; + case '4': nMinStack = nMaxStack = 4; break; + case '5': nMinStack = nMaxStack = 5; break; // not used for Type2 ops + case '6': nMinStack = nMaxStack = 6; break; + case '7': nMinStack = nMaxStack = 7; break; + case '9': nMinStack = nMaxStack = 9; break; + case 'f': nMinStack = nMaxStack = 11; break; + case 'F': nMinStack = nMaxStack = 13; break; + case 'A': nMinStack = 2; nMaxStack = 999; break; + case 'C': nMinStack = 6; nMaxStack = 999; break; + case 'E': nMinStack = 1; nMaxStack = 999; break; + case 'G': nMinStack = 1; nMaxStack = 999; // global subr + nVal = peek(); + // TODO global subr + break; + case 'L': // local subr + nMinStack = 1; nMaxStack = 999; + nVal = peek(); + // TODO local subr + break; + case 'I': // operands for "index" +#if 0 + nMinStack = nValStack[ nStackIdx-1]; + if( nMinStack < 0) nMinStack = 0; + nMinStack += 1; +#else + fprintf( stderr, "TODO: Iindex op\n"); +#endif + break; + case 'R': // operands for "rol" +#if 0 + nMinStack = nValStack[ nStackIdx-2]; +#else + fprintf( stderr, "TODO: Rrol op\n"); +#endif + case 'X': // operands for "return" + nMinStack = 0; + nMaxStack = /*### (!bInSubrs)? 0 :###*/999; + break; + case 'H': // "hstemhm" + case 'h': // "hstem" + addHints( false); + nMinStack = nMaxStack = 0; + break; + case 'V': // "vstemhm" + case 'v': // "vstem" + addHints( true); + nMinStack = nMaxStack = 0; + break; + case 'K': // "hintmask" or "cntrmask" + addHints( true); // implicit vstemhm + nMinStack = nMaxStack = 0; + break; + case 'e': // endchar + updateWidth( (size() >= 1) && (size() != 4)); + nMinStack = nMaxStack = 0; + if( size() == 4) + fprintf( stderr,"Deprecated SEAC-like endchar is not supported for CFF subsetting!\n"); // TODO: handle deprecated op + break; + case 'm': // hmoveto or vmoveto + updateWidth( size() > 1); + nMinStack = 1; + nMaxStack = nMinStack; + break; + case 'M': // rmoveto + updateWidth( size() > 2); + nMinStack = 2; + nMaxStack = nMinStack; + break; + } + + clear(); + return; + } + + if( (c >= 32) || (c == 28)) { +// --mpReadPtr; + read2push(); + } +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::read2push( void) +{ + int nVal = 0; + + const U8*& p = mpReadPtr; + const U8 c = *p; + if( c == 28) { + short nS16 = (p[1] << 8) + p[2]; + if( (sizeof(nS16) != 2) && (nS16 & (1<<15))) + nS16 |= (~0U) << 15; // assuming 2s complement + nVal = nS16; + p += 3; + } else if( c <= 246) { // -107..+107 + nVal = p[0] - 139; + p += 1; + } else if( c <= 250) { // +108..+1131 + nVal = ((p[0] << 8) + p[1]) - 63124; + p += 2; + } else if( c <= 254) { // -108..-1131 + nVal = 64148 - ((p[0] << 8) + p[1]); + p += 2; + } else /*if( c == 255)*/ { // Fixed16.16 + nVal = (p[1] << 8) + p[2]; + // TODO: read non-integer part + p += 5; + } + + push( nVal); +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::writeType1Val( int/*TODO: double*/ nVal) +{ + U8* pOut = mpWritePtr; + if( (nVal >= -107) && (nVal <= +107)) { + *(pOut++) = static_cast(nVal + 139); // -107..+107 + } else if( (nVal >= -1131) && (nVal <= +1131)) { + if( nVal >= 0) + nVal += 63124; // +108..+1131 + else + nVal = 64148 - nVal; // -108..-1131 + *(pOut++) = static_cast(nVal >> 8); + *(pOut++) = static_cast(nVal); + } else { + // numtype==255 means int32 for Type1, but 16.16 for Type2 charstrings!!! + *(pOut++) = 255; + *(pOut++) = static_cast(nVal >> 24); + *(pOut++) = static_cast(nVal >> 16); + *(pOut++) = static_cast(nVal >> 8); + *(pOut++) = static_cast(nVal); + } + + mpWritePtr = pOut; +} + +// -------------------------------------------------------------------- + +inline void CffSubsetterContext::pop2write( void) +{ + int nVal = pop(); + writeType1Val( nVal); +} + +// -------------------------------------------------------------------- + +inline void CffSubsetterContext::writeTypeOp( int nTypeOp) +{ + *(mpWritePtr++) = static_cast(nTypeOp); +} + +// -------------------------------------------------------------------- + +inline void CffSubsetterContext::writeTypeEsc( int nTypeEsc) +{ + *(mpWritePtr++) = TYPE1OP::T1ESC; + *(mpWritePtr++) = static_cast(nTypeEsc); +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::pop2MultiWrite( int nArgsPerTypo, int nTypeOp, int nTypeXor) +{ + for( int i = 0; i < mnStackIdx;) { + for( int j = 0; j < nArgsPerTypo; ++j) { + int nVal = mnValStack[i+j]; + writeType1Val( nVal); + } + i += nArgsPerTypo; + writeTypeOp( nTypeOp); + nTypeOp ^= nTypeXor; // for toggling vlineto/hlineto + } + clear(); +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::popAll2Write( int nTypeOp) +{ + // pop in reverse order, then write + for( int i = 0; i < mnStackIdx; ++i) { + int nVal = mnValStack[i]; + writeType1Val( nVal); + } + clear(); + writeTypeOp( nTypeOp); +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::writeCurveTo( int nStackPos, + int nIX1, int nIY1, int nIX2, int nIY2, int nIX3, int nIY3) +{ + // get the values from the stack + const int nDX1 = nIX1 ? mnValStack[ nStackPos+nIX1] : 0; + const int nDY1 = nIY1 ? mnValStack[ nStackPos+nIY1] : 0; + const int nDX2 = nIX2 ? mnValStack[ nStackPos+nIX2] : 0; + const int nDY2 = nIY2 ? mnValStack[ nStackPos+nIY2] : 0; + const int nDX3 = nIX3 ? mnValStack[ nStackPos+nIX3] : 0; + const int nDY3 = nIY3 ? mnValStack[ nStackPos+nIY3] : 0; + + // emit the curveto operator and operands + // TODO: determine the most efficient curveto operator + // TODO: depending on type1op or type2op target + writeType1Val( nDX1); + writeType1Val( nDY1); + writeType1Val( nDX2); + writeType1Val( nDY2); + writeType1Val( nDX3); + writeType1Val( nDY3); + writeTypeOp( TYPE1OP::RCURVETO); +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::convertOneTypeOp( void) +{ + const int nType2Op = *(mpReadPtr++); + + int i, nVal; // prevent WAE for declarations inside switch cases + // convert each T2op + switch( nType2Op) { + case TYPE2OP::T2ESC: + convertOneTypeEsc(); + break; + case TYPE2OP::HSTEM: + case TYPE2OP::VSTEM: + addHints( nType2Op == TYPE2OP::VSTEM); +#ifndef IGNORE_HINTS + for( i = 0; i < mnHintSize; i+=2) { + writeType1Val( mnHintStack[i]); + writeType1Val( mnHintStack[i+1] - mnHintStack[i]); + writeTypeOp( nType2Op); + } +#endif // IGNORE_HINTS + break; + case TYPE2OP::HSTEMHM: + case TYPE2OP::VSTEMHM: + addHints( nType2Op == TYPE2OP::VSTEMHM); + break; + case TYPE2OP::CNTRMASK: + // TODO: replace cntrmask with vstem3/hstem3 + addHints( true); +#ifdef IGNORE_HINTS + mpReadPtr += (mnHintSize + 15) / 16; + mbIgnoreHints = true; +#else + { + U8 nMaskBit = 0; + U8 nMaskByte = 0; + for( i = 0; i < mnHintSize; i+=2, nMaskBit>>=1) { + if( !nMaskBit) { + nMaskByte = *(mpReadPtr++); + nMaskBit = 0x80; + } + if( !(nMaskByte & nMaskBit)) + continue; + if( i >= 8*(int)sizeof(mnCntrMask)) + mbIgnoreHints = true; + if( mbIgnoreHints) + continue; + mnCntrMask |= (1U << i); + } + } +#endif + break; + case TYPE2OP::HINTMASK: + addHints( true); +#ifdef IGNORE_HINTS + mpReadPtr += (mnHintSize + 15) / 16; +#else + { + long nHintMask = 0; + int nCntrBits[2] = {0,0}; + U8 nMaskBit = 0; + U8 nMaskByte = 0; + for( i = 0; i < mnHintSize; i+=2, nMaskBit>>=1) { + if( !nMaskBit) { + nMaskByte = *(mpReadPtr++); + nMaskBit = 0x80; + } + if( !(nMaskByte & nMaskBit)) + continue; + if( i >= 8*(int)sizeof(nHintMask)) + mbIgnoreHints = true; + if( mbIgnoreHints) + continue; + nHintMask |= (1U << i); + nCntrBits[ i < mnHorzHintSize] += (mnCntrMask >> i) & 1; + } + + mbIgnoreHints |= (nCntrBits[0] && (nCntrBits[0] != 3)); + mbIgnoreHints |= (nCntrBits[1] && (nCntrBits[1] != 3)); + if( mbIgnoreHints) + break; + + for( i = 0; i < mnHintSize; i+=2) { + if( !(nHintMask & (1U << i))) + continue; + writeType1Val( mnHintStack[i]); + writeType1Val( mnHintStack[i+1] - mnHintStack[i]); + const bool bHorz = (i < mnHorzHintSize); + if( !nCntrBits[ bHorz]) + writeTypeOp( bHorz ? TYPE1OP::HSTEM : TYPE1OP::VSTEM); + else if( !--nCntrBits[ bHorz]) + writeTypeEsc( bHorz ? TYPE1OP::HSTEM3 : TYPE1OP::VSTEM3); + } + } +#endif + break; + case TYPE2OP::CALLSUBR: + case TYPE2OP::CALLGSUBR: + { + nVal = pop(); + const bool bGlobal = (nType2Op == TYPE2OP::CALLGSUBR); + callType2Subr( bGlobal, nVal); + } + break; + case TYPE2OP::RETURN: + // TODO: check that we are in a subroutine + return; + case TYPE2OP::VMOVETO: + case TYPE2OP::HMOVETO: + if( mbNeedClose) + writeTypeOp( TYPE1OP::CLOSEPATH); + else + updateWidth( size() > 1); + mbNeedClose = true; + pop2MultiWrite( 1, nType2Op); + break; + case TYPE2OP::VLINETO: + case TYPE2OP::HLINETO: + pop2MultiWrite( 1, nType2Op, + TYPE1OP::VLINETO ^ TYPE1OP::HLINETO); + break; + case TYPE2OP::RMOVETO: + // TODO: convert rmoveto to vlineto/hlineto if possible + if( mbNeedClose) + writeTypeOp( TYPE1OP::CLOSEPATH); + else + updateWidth( size() > 2); + mbNeedClose = true; + pop2MultiWrite( 2, nType2Op); + break; + case TYPE2OP::RLINETO: + // TODO: convert rlineto to vlineto/hlineto if possible + pop2MultiWrite( 2, nType2Op); + break; + case TYPE2OP::RCURVETO: + // TODO: convert rcurveto to vh/hv/hh/vv-curveto if possible + pop2MultiWrite( 6, nType2Op); + break; + case TYPE2OP::RCURVELINE: + i = 0; + while( (i += 6) <= mnStackIdx) + writeCurveTo( i, -6, -5, -4, -3, -2, -1 ); + i -= 6; + while( (i += 2) <= mnStackIdx) { + writeType1Val( mnValStack[i-2]); + writeType1Val( mnValStack[i-1]); + writeTypeOp( TYPE2OP::RLINETO); + } + clear(); + break; + case TYPE2OP::RLINECURVE: + i = 0; + while( (i += 2) <= mnStackIdx-6) { + writeType1Val( mnValStack[i-2]); + writeType1Val( mnValStack[i-1]); + writeTypeOp( TYPE2OP::RLINETO); + } + i -= 2; + while( (i += 6) <= mnStackIdx) + writeCurveTo( i, -6, -5, -4, -3, -2, -1 ); + clear(); + break; + case TYPE2OP::VHCURVETO: + case TYPE2OP::HVCURVETO: + { + bool bVert = (nType2Op == TYPE2OP::VHCURVETO); + i = 0; + nVal = 0; + if( mnStackIdx & 1) + nVal = mnValStack[ --mnStackIdx]; + while( (i += 4) <= mnStackIdx) { + // TODO: use writeCurveTo() + if( bVert) writeType1Val( 0); + writeType1Val( mnValStack[i-4]); + if( !bVert) writeType1Val( 0); + writeType1Val( mnValStack[i-3]); + writeType1Val( mnValStack[i-2]); + if( !bVert) writeType1Val( (i==mnStackIdx) ? nVal : 0); + writeType1Val( mnValStack[i-1]); + if( bVert) writeType1Val( (i==mnStackIdx) ? nVal : 0 ); + bVert = !bVert; + writeTypeOp( TYPE2OP::RCURVETO); + } + } + clear(); + break; + case TYPE2OP::HHCURVETO: + i = (mnStackIdx & 1); + while( (i += 4) <= mnStackIdx) { + if( i != 5) + writeCurveTo( i, -4, 0, -3, -2, -1, 0); + else + writeCurveTo( i, -4, -5, -3, -2, -1, 0); + } + clear(); + break; + case TYPE2OP::VVCURVETO: + i = (mnStackIdx & 1); + while( (i += 4) <= mnStackIdx) { + if( i != 5) + writeCurveTo( i, 0, -4, -3, -2, 0, -1); + else + writeCurveTo( i, -5, -4, -3, -2, 0, -1); + } + clear(); + break; + case TYPE2OP::ENDCHAR: + if( mbNeedClose) + writeTypeOp( TYPE1OP::CLOSEPATH); + else + updateWidth( size() >= 1); + // mbNeedClose = true; + writeTypeOp( TYPE1OP::ENDCHAR); + break; + default: + if( ((nType2Op >= 32) && (nType2Op <= 255)) || (nType2Op == 28)) { + --mpReadPtr; + read2push(); + } else { + popAll2Write( nType2Op); + assert( false); // TODO? + } + break; + } +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::convertOneTypeEsc( void) +{ + const int nType2Esc = *(mpReadPtr++); + int* pTop = &mnValStack[ mnStackIdx-1]; + // convert each T2op + switch( nType2Esc) { + case TYPE2OP::AND: + assert( mnStackIdx >= 2); + pTop[0] &= pTop[-1]; + --mnStackIdx; + break; + case TYPE2OP::OR: + assert( mnStackIdx >= 2); + pTop[0] |= pTop[-1]; + --mnStackIdx; + break; + case TYPE2OP::NOT: + assert( mnStackIdx >= 1); + pTop[0] = !pTop[0]; + break; + case TYPE2OP::ABS: + assert( mnStackIdx >= 1); + if( pTop[0] >= 0) + break; + // fall through + case TYPE2OP::NEG: + assert( mnStackIdx >= 1); + pTop[0] = -pTop[0]; + break; + case TYPE2OP::ADD: + assert( mnStackIdx >= 2); + pTop[0] += pTop[-1]; + --mnStackIdx; + break; + case TYPE2OP::SUB: + assert( mnStackIdx >= 2); + pTop[0] -= pTop[-1]; + --mnStackIdx; + break; + case TYPE2OP::MUL: + assert( mnStackIdx >= 2); + if( pTop[-1]) + pTop[0] *= pTop[-1]; + --mnStackIdx; + break; + case TYPE2OP::DIV: + assert( mnStackIdx >= 2); + if( pTop[-1]) + pTop[0] /= pTop[-1]; + --mnStackIdx; + break; + case TYPE2OP::EQ: + assert( mnStackIdx >= 2); + pTop[0] = (pTop[0] == pTop[-1]); + --mnStackIdx; + break; + case TYPE2OP::DROP: + assert( mnStackIdx >= 1); + --mnStackIdx; + break; + case TYPE2OP::PUT: { + assert( mnStackIdx >= 2); + const int nIdx = pTop[0]; + assert( nIdx >= 0); + assert( nIdx < NMAXTRANS); + mnTransVals[ nIdx] = pTop[-1]; + mnStackIdx -= 2; + break; + } + case TYPE2OP::GET: { + assert( mnStackIdx >= 1); + const int nIdx = pTop[0]; + assert( nIdx >= 0); + assert( nIdx < NMAXTRANS); + pTop[0] = mnTransVals[ nIdx]; + break; + } + case TYPE2OP::IFELSE: { + assert( mnStackIdx >= 4); + if( pTop[-1] > pTop[0]) + pTop[-3] = pTop[-2]; + mnStackIdx -= 3; + break; + } + case TYPE2OP::RANDOM: + pTop[+1] = 1234; // TODO + ++mnStackIdx; + break; + case TYPE2OP::SQRT: + // TODO: implement + break; + case TYPE2OP::DUP: + assert( mnStackIdx >= 1); + pTop[+1] = pTop[0]; + ++mnStackIdx; + break; + case TYPE2OP::EXCH: { + assert( mnStackIdx >= 2); + const int nVal = pTop[0]; + pTop[0] = pTop[-1]; + pTop[-1] = nVal; + break; + } + case TYPE2OP::INDEX: { + assert( mnStackIdx >= 1); + const int nVal = pTop[0]; + assert( nVal >= 0); + assert( nVal < mnStackIdx-1); + pTop[0] = pTop[-1-nVal]; + break; + } + case TYPE2OP::ROLL: { + assert( mnStackIdx >= 1); + const int nNum = pTop[0]; + assert( nNum >= 0); + assert( nNum < mnStackIdx-2); + (void)nNum; // TODO: implement + const int nOfs = pTop[-1]; + mnStackIdx -= 2; + (void)nOfs;// TODO: implement + break; + } + case TYPE2OP::HFLEX1: { + assert( mnStackIdx == 9); + writeCurveTo( mnStackIdx, -9, -8, -7, -6, -5, -6); + writeCurveTo( mnStackIdx, -4, -6, -3, -2, -1, -8); + mnStackIdx -= 9; + } + break; + case TYPE2OP::HFLEX: { + assert( mnStackIdx == 7); + writeCurveTo( mnStackIdx, -7, 0, -6, -5, -4, -5); + writeCurveTo( mnStackIdx, -3, -5, -2, 0, -1, 0); + mnStackIdx -= 7; + } + break; + case TYPE2OP::FLEX: { + assert( mnStackIdx == 13); + writeCurveTo( mnStackIdx, -13, -12, -11, -10, -9, -8); + writeCurveTo( mnStackIdx, -7, -6, -5, -4, -3, -2); + const int nFlexDepth = mnValStack[ mnStackIdx-1]; + (void)nFlexDepth; // ignoring nFlexDepth + mnStackIdx -= 13; + } + break; + case TYPE2OP::FLEX1: { + assert( mnStackIdx == 11); + // write the first part of the flex1-hinted curve + writeCurveTo( mnStackIdx, -11, -10, -9, -8, -7, -6); + + // determine if nD6 is horizontal or vertical + const int i = mnStackIdx; + int nDeltaX = mnValStack[i-11] + mnValStack[i-9] + mnValStack[i-7] + mnValStack[i-5] + mnValStack[i-3]; + if( nDeltaX < 0 ) nDeltaX = -nDeltaX; + int nDeltaY = mnValStack[i-10] + mnValStack[i-8] + mnValStack[i-6] + mnValStack[i-4] + mnValStack[i-2]; + if( nDeltaY < 0 ) nDeltaY = -nDeltaY; + const bool bVertD6 = (nDeltaY > nDeltaX); + + // write the second part of the flex1-hinted curve + if( !bVertD6 ) + writeCurveTo( mnStackIdx, -5, -4, -3, -2, -1, 0); + else + writeCurveTo( mnStackIdx, -5, -4, -3, -2, 0, -1); + mnStackIdx -= 11; + } + break; + default: + fprintf( stderr,"unhandled type2esc %d\n", nType2Esc); + assert( false); + break; + } +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::callType2Subr( bool bGlobal, int nSubrNumber) +{ + const U8* const pOldReadPtr = mpReadPtr; + const U8* const pOldReadEnd = mpReadEnd; + + int nLen = 0; + if( bGlobal ) { + nSubrNumber += mnGlobalSubrBias; + nLen = seekIndexData( mnGlobalSubrBase, nSubrNumber); + } else { + nSubrNumber += mpCffLocal->mnLocalSubrBias; + nLen = seekIndexData( mpCffLocal->mnLocalSubrBase, nSubrNumber); + } + + while( mpReadPtr < mpReadEnd) + convertOneTypeOp(); + + mpReadPtr = pOldReadPtr; + mpReadEnd = pOldReadEnd; +} + +// -------------------------------------------------------------------- + +static const int MAX_T1OPS_SIZE = 81920; // TODO: use dynamic value + +int CffSubsetterContext::convert2Type1Ops( CffLocal* pCffLocal, const U8* const pT2Ops, int nT2Len, U8* const pT1Ops) +{ + mpCffLocal = pCffLocal; + + // prepare the charstring conversion + mpWritePtr = pT1Ops; +#if 1 // TODO: update caller + U8 aType1Ops[ MAX_T1OPS_SIZE]; + if( !pT1Ops) + mpWritePtr = aType1Ops; + *const_cast(&pT1Ops) = mpWritePtr; +#else + assert( pT1Ops); +#endif + + // prepend random seed for T1crypt + *(mpWritePtr++) = 0x48; + *(mpWritePtr++) = 0x44; + *(mpWritePtr++) = 0x55; + *(mpWritePtr++) = ' '; +#if 1 // convert the Type2 charstring to Type1 + mpReadPtr = pT2Ops; + mpReadEnd = pT2Ops + nT2Len; + // prepend "hsbw" or "sbw" + // TODO: only emit hsbw when charwidth is known + // TODO: remove charwidth from T2 stack + writeType1Val( 0); // TODO: aSubsetterContext.getLeftSideBearing(); + writeType1Val( 1000/*###getCharWidth()###*/); + writeTypeOp( TYPE1OP::HSBW); +mbSawError = false; +mbNeedClose = false; +mbIgnoreHints = false; +mnHintSize=mnHorzHintSize=mnStackIdx=0; mnCharWidth=-1;//####### +mnCntrMask = 0; + while( mpReadPtr < mpReadEnd) + convertOneTypeOp(); +// if( bActivePath) +// writeTypeOp( TYPE1OP::CLOSEPATH); +// if( bSubRoutine) +// writeTypeOp( TYPE1OP::RETURN); +if( mbSawError) { + mpWritePtr = pT1Ops+4; + // create an "idiotproof" charstring + writeType1Val( 0); + writeType1Val( 800); + writeTypeOp( TYPE1OP::HSBW); + writeType1Val( 50); + writeTypeOp( TYPE1OP::HMOVETO); + writeType1Val( 650); + writeType1Val( 100); + writeTypeOp( TYPE1OP::RLINETO); + writeType1Val( -350); + writeType1Val( 700); + writeTypeOp( TYPE1OP::RLINETO); +#if 0 + writeType1Val( -300); + writeType1Val( -800); + writeTypeOp( TYPE1OP::RLINETO); +#else + writeTypeOp( TYPE1OP::CLOSEPATH); +#endif + writeTypeOp( TYPE1OP::ENDCHAR); +} +#else // useful for manually encoding charstrings + mpWritePtr = pT1Ops; + mpWritePtr += sprintf( (char*)mpWritePtr, "OOo_\x8b\x8c\x0c\x10\x0b"); +#endif + const int nType1Len = mpWritePtr - pT1Ops; + + // encrypt the Type1 charstring + int nRDCryptR = 4330; // TODO: mnRDCryptSeed; + for( U8* p = pT1Ops; p < mpWritePtr; ++p) { + *p ^= (nRDCryptR >> 8); + nRDCryptR = (*(U8*)p + nRDCryptR) * 52845 + 22719; + } + + return nType1Len; +} + +// -------------------------------------------------------------------- + +double CffSubsetterContext::readRealVal() +{ + // TODO: more thorough number validity test + bool bComma = false; + int nExpVal = 0; + int nExpSign = 0; + S64 nNumber = 0; + double fReal = +1.0; + for(;;){ + const U8 c = *(mpReadPtr++); // read nibbles + // parse high nibble + const U8 nH = c >> 4U; + if( nH <= 9) { + nNumber = nNumber * 10 + nH; + --nExpVal; + } else if( nH == 10) { // comma + nExpVal = 0; + bComma = true; + } else if( nH == 11) { // +exp + fReal *= nNumber; + nExpSign = +1; + nNumber = 0; + } else if( nH == 12) { // -exp + fReal *= nNumber; + nExpSign = -1; + nNumber = 0; + } else if( nH == 13) { // reserved + // TODO: ignore or error? + } else if( nH == 14) // minus + fReal = -fReal; + else if( nH == 15) // end + break; + // parse low nibble + const U8 nL = c & 0x0F; + if( nL <= 9) { + nNumber = nNumber * 10 + nL; + --nExpVal; + } else if( nL == 10) { // comma + nExpVal = 0; + bComma = true; + } else if( nL == 11) { // +exp + fReal *= nNumber; + nNumber = 0; + nExpSign = +1; + } else if( nL == 12) { // -exp + fReal *= nNumber; + nNumber = 0; + nExpSign = -1; + } else if( nL == 13) { // reserved + // TODO: ignore or error? + } else if( nL == 14) // minus + fReal = -fReal; + else if( nL == 15) // end + break; + } + + // merge exponents + if( !bComma) + nExpVal = 0; + if( !nExpSign) { fReal *= nNumber;} + else if( nExpSign > 0) { nExpVal += static_cast(nNumber);} + else if( nExpSign < 0) { nExpVal -= static_cast(nNumber);} + + // apply exponents + if( !nExpVal) { /*nothing to apply*/} + else if( nExpVal > 0) { while( --nExpVal >= 0) fReal *= 10.0;} + else if( nExpVal < 0) { while( ++nExpVal <= 0) fReal /= 10.0;} + return fReal; +} + +// -------------------------------------------------------------------- + +// prepare to access an element inside a CFF/CID index table +int CffSubsetterContext::seekIndexData( int nIndexBase, int nDataIndex) +{ + if( nDataIndex < 0) + return -1; + mpReadPtr = mpBasePtr + nIndexBase; + const int nDataCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; + if( nDataIndex >= nDataCount) + return -1; + const int nDataOfsSz = mpReadPtr[2]; + mpReadPtr += 3 + (nDataOfsSz * nDataIndex); + int nOfs1 = 0; + switch( nDataOfsSz) { + default: fprintf( stderr, "\tINVALID nDataOfsSz=%d\n\n", nDataOfsSz); return -1; + case 1: nOfs1 = mpReadPtr[0]; break; + case 2: nOfs1 = (mpReadPtr[0]<<8) + mpReadPtr[1]; break; + case 3: nOfs1 = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2]; break; + case 4: nOfs1 = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break; + } + mpReadPtr += nDataOfsSz; + + int nOfs2 = 0; + switch( nDataOfsSz) { + case 1: nOfs2 = mpReadPtr[0]; break; + case 2: nOfs2 = (mpReadPtr[0]<<8) + mpReadPtr[1]; break; + case 3: nOfs2 = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2]; break; + case 4: nOfs2 = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break; + } + + mpReadPtr = mpBasePtr + (nIndexBase + 2) + nDataOfsSz * (nDataCount + 1) + nOfs1; + mpReadEnd = mpReadPtr + (nOfs2 - nOfs1); + assert( nOfs1 >= 0); + assert( nOfs2 >= nOfs1); + assert( mpReadEnd <= mpBaseEnd); + return (nOfs2 - nOfs1); +} + +// -------------------------------------------------------------------- + +// skip over a CFF/CID index table +void CffSubsetterContext::seekIndexEnd( int nIndexBase) +{ + mpReadPtr = mpBasePtr + nIndexBase; + const int nDataCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; + const int nDataOfsSz = mpReadPtr[2]; + mpReadPtr += 3 + nDataOfsSz * nDataCount; + int nEndOfs = 0; + switch( nDataOfsSz) { + default: fprintf( stderr, "\tINVALID nDataOfsSz=%d\n\n", nDataOfsSz); return; + case 1: nEndOfs = mpReadPtr[0]; break; + case 2: nEndOfs = (mpReadPtr[0]<<8) + mpReadPtr[1]; break; + case 3: nEndOfs = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2];break; + case 4: nEndOfs = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break; + } + mpReadPtr += nDataOfsSz; + mpReadPtr += nEndOfs - 1; + mpReadEnd = mpBaseEnd; +} + +// ==================================================================== + +// initialize FONTDICT specific values +CffLocal::CffLocal( void) +: mnPrivDictBase( 0) +, mnPrivDictSize( 0) +, mnLocalSubrOffs( 0) +, mnLocalSubrBase( 0) +, mnLocalSubrCount( 0) +, mnLocalSubrBias( 0) +, mnNominalWidth( 0) +, mnDefaultWidth( 0) +, mnStemStdHW( 0) +, mnStemStdVW( 0) +, mfBlueScale( 0.0) +, mfBlueShift( 0.0) +, mfBlueFuzz( 0.0) +, mfExpFactor( 0.0) +, mnLangGroup( 0) +, mbForceBold( false) +{ + maStemSnapH.clear(); + maStemSnapV.clear(); + maBlueValues.clear(); + maOtherBlues.clear(); + maFamilyBlues.clear(); + maFamilyOtherBlues.clear(); +} + +// -------------------------------------------------------------------- + +CffGlobal::CffGlobal( void) +: mnNameIdxBase( 0) +, mnNameIdxCount( 0) +, mnStringIdxBase( 0) +, mnStringIdxCount( 0) +, mbCIDFont( false) +, mnCharStrBase( 0) +, mnCharStrCount( 0) +, mnEncodingBase( 0) +, mnCharsetBase( 0) +, mnGlobalSubrBase( 0) +, mnGlobalSubrCount( 0) +, mnGlobalSubrBias( 0) +, mnFDSelectBase( 0) +, mnFontDictBase( 0) +, mnFDAryCount( 1) +, mnFontNameSID( 0) +, mnFullNameSID( 0) +, mnFamilyNameSID( 0) +{ + maFontBBox.clear(); + // TODO; maFontMatrix.clear(); +} + +// -------------------------------------------------------------------- + +void CffSubsetterContext::initialCffRead( void) +{ + // get the CFFHeader + mpReadPtr = mpBasePtr; + const U8 nVerMajor = *(mpReadPtr++); + const U8 nVerMinor = *(mpReadPtr++); + const U8 nHeaderSize = *(mpReadPtr++); + const U8 nOffsetSize = *(mpReadPtr++); + // TODO: is the version number useful for anything else? + assert( (nVerMajor == 1) && (nVerMinor == 0)); + (void)(nVerMajor + nVerMinor + nOffsetSize); // avoid compiler warnings + + // prepare access to the NameIndex + mnNameIdxBase = nHeaderSize; + mpReadPtr = mpBasePtr + nHeaderSize; + mnNameIdxCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; + seekIndexEnd( mnNameIdxBase); + + // get the TopDict index + const long nTopDictBase = getReadOfs(); + const int nTopDictCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; + if( nTopDictCount) { + for( int i = 0; i < nTopDictCount; ++i) { + seekIndexData( nTopDictBase, i); + while( mpReadPtr < mpReadEnd) + readDictOp(); + assert( mpReadPtr == mpReadEnd); + } + } + + // prepare access to the String index + mnStringIdxBase = getReadOfs(); + mnStringIdxCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; + seekIndexEnd( mnStringIdxBase); + + // prepare access to the GlobalSubr index + mnGlobalSubrBase = getReadOfs(); + mnGlobalSubrCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; + mnGlobalSubrBias = (mnGlobalSubrCount<1240)?107:(mnGlobalSubrCount<33900)?1131:32768; + // skip past the last GlobalSubr entry +// seekIndexEnd( mnGlobalSubrBase); + + // get/skip the Encodings (we got mnEncodingBase from TOPDICT) +// seekEncodingsEnd( mnEncodingBase); + // get/skip the Charsets (we got mnCharsetBase from TOPDICT) +// seekCharsetsEnd( mnCharStrBase); + // get/skip FDSelect (CID only) data + + // prepare access to the CharStrings index (we got the base from TOPDICT) + mpReadPtr = mpBasePtr + mnCharStrBase; + mnCharStrCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; +// seekIndexEnd( mnCharStrBase); + + // read the FDArray index (CID only) + if( mbCIDFont) { +// assert( mnFontDictBase == tellRel()); + mpReadPtr = mpBasePtr + mnFontDictBase; + mnFDAryCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; + assert( mnFDAryCount < (int)(sizeof(maCffLocal)/sizeof(*maCffLocal))); + + // read FDArray details to get access to the PRIVDICTs + for( int i = 0; i < mnFDAryCount; ++i) { + mpCffLocal = &maCffLocal[i]; + seekIndexData( mnFontDictBase, i); + while( mpReadPtr < mpReadEnd) + readDictOp(); + assert( mpReadPtr == mpReadEnd); + } + } + + for( int i = 0; i < mnFDAryCount; ++i) { + mpCffLocal = &maCffLocal[i]; + + // get the PrivateDict index + // (we got mnPrivDictSize and mnPrivDictBase from TOPDICT or FDArray) + if( mpCffLocal->mnPrivDictSize != 0) { + assert( mpCffLocal->mnPrivDictSize > 0); + // get the PrivDict data + mpReadPtr = mpBasePtr + mpCffLocal->mnPrivDictBase; + mpReadEnd = mpReadPtr + mpCffLocal->mnPrivDictSize; + assert( mpReadEnd <= mpBaseEnd); + // read PrivDict details + while( mpReadPtr < mpReadEnd) + readDictOp(); + } + + // prepare access to the LocalSubrs (we got mnLocalSubrOffs from PRIVDICT) + if( mpCffLocal->mnLocalSubrOffs) { + // read LocalSubrs summary + mpCffLocal->mnLocalSubrBase = mpCffLocal->mnPrivDictBase + mpCffLocal->mnLocalSubrOffs; + mpReadPtr = mpBasePtr + mpCffLocal->mnLocalSubrBase; + const int nSubrCount = (mpReadPtr[0] << 8) + mpReadPtr[1]; + mpCffLocal->mnLocalSubrCount = nSubrCount; + mpCffLocal->mnLocalSubrBias = (nSubrCount<1240)?107:(nSubrCount<33900)?1131:32768; +// seekIndexEnd( mpCffLocal->mnLocalSubrBase); + } + } + + // ignore the Notices info +} + +// -------------------------------------------------------------------- + +// get a cstring from a StringID +const char* CffSubsetterContext::getString( int nStringID) +{ + // get a standard string if possible + const static int nStdStrings = sizeof(pStringIds)/sizeof(*pStringIds); + if( (nStringID >= 0) && (nStringID < nStdStrings)) + return pStringIds[ nStringID]; + + // else get the string from the StringIndex table + const U8* pReadPtr = mpReadPtr; + const U8* pReadEnd = mpReadEnd; + nStringID -= nStdStrings; + int nLen = seekIndexData( mnStringIdxBase, nStringID); + // assert( nLen >= 0); + // TODO: just return the undecorated name + // TODO: get rid of static char buffer + static char aNameBuf[ 2560]; + if( nLen < 0) { + sprintf( aNameBuf, "name[%d].notfound!", nStringID); + } else { + const int nMaxLen = sizeof(aNameBuf) - 1; + if( nLen >= nMaxLen) + nLen = nMaxLen; + for( int i = 0; i < nLen; ++i) + aNameBuf[i] = *(mpReadPtr++); + aNameBuf[ nLen] = '\0'; + } + mpReadPtr = pReadPtr; + mpReadEnd = pReadEnd; + return aNameBuf; +} + +// -------------------------------------------------------------------- + +// access a CID's FDSelect table +int CffSubsetterContext::getFDSelect( int nGlyphIndex) const +{ + assert( nGlyphIndex >= 0); + assert( nGlyphIndex < mnCharStrCount); + if( !mbCIDFont) + return 0; + + const U8* pReadPtr = mpBasePtr + mnFDSelectBase; + const U8 nFDSelFormat = *(pReadPtr++); + switch( nFDSelFormat) { + case 0: { // FDSELECT format 0 + pReadPtr += nGlyphIndex; + const U8 nFDIdx = *(pReadPtr++); + return nFDIdx; + } //break; + case 3: { // FDSELECT format 3 + const U16 nRangeCount = (pReadPtr[0]<<8) + pReadPtr[1]; + assert( nRangeCount > 0); + assert( nRangeCount <= mnCharStrCount); + U16 nPrev = (pReadPtr[2]<<8) + pReadPtr[3]; + assert( nPrev == 0); + pReadPtr += 4; + // TODO? binary search + for( int i = 0; i < nRangeCount; ++i) { + const U8 nFDIdx = pReadPtr[0]; + const U16 nNext = (pReadPtr[1]<<8) + pReadPtr[2]; + assert( nPrev < nNext); + if( nGlyphIndex < nNext) + return nFDIdx; + pReadPtr += 3; + nPrev = nNext; + } + } break; + default: // invalid FDselect format + fprintf( stderr, "invalid CFF.FdselType=%d\n", nFDSelFormat); + break; + } + + assert( false); + return -1; +} + +// -------------------------------------------------------------------- + +int CffSubsetterContext::getGlyphSID( int nGlyphIndex) const +{ + if( nGlyphIndex == 0) + return 0; // ".notdef" + assert( nGlyphIndex >= 0); + assert( nGlyphIndex < mnCharStrCount); + if( (nGlyphIndex < 0) || (nGlyphIndex >= mnCharStrCount)) + return -1; + + // get the SID/CID from the Charset table + const U8* pReadPtr = mpBasePtr + mnCharsetBase; + const U8 nCSetFormat = *(pReadPtr++); + int nGlyphsToSkip = nGlyphIndex - 1; + switch( nCSetFormat) { + case 0: // charset format 0 + pReadPtr += 2 * nGlyphsToSkip; + nGlyphsToSkip = 0; + break; + case 1: // charset format 1 + while( nGlyphsToSkip >= 0) { + const int nLeft = pReadPtr[2]; + if( nGlyphsToSkip <= nLeft) + break; + nGlyphsToSkip -= nLeft + 1; + pReadPtr += 3; + } + break; + case 2: // charset format 2 + while( nGlyphsToSkip >= 0) { + const int nLeft = (pReadPtr[2]<<8) + pReadPtr[3]; + if( nGlyphsToSkip <= nLeft) + break; + nGlyphsToSkip -= nLeft + 1; + pReadPtr += 4; + } + break; + default: + fprintf( stderr, "ILLEGAL CFF-Charset format %d\n", nCSetFormat); + return -2; + } + + int nSID = (pReadPtr[0]<<8) + pReadPtr[1]; + nSID += nGlyphsToSkip; + // NOTE: for CID-fonts the resulting SID is interpreted as CID + return nSID; +} + +// -------------------------------------------------------------------- + +// NOTE: the result becomes invalid with the next call to this method +const char* CffSubsetterContext::getGlyphName( int nGlyphIndex) +{ + // the first glyph is always the .notdef glyph + const char* pGlyphName = ".notdef"; + if( nGlyphIndex == 0) + return pGlyphName; + + // prepare a result buffer + // TODO: get rid of static buffer + static char aDefaultGlyphName[64]; + pGlyphName = aDefaultGlyphName; + + // get the glyph specific name + const int nSID = getGlyphSID( nGlyphIndex); + if( nSID < 0) // default glyph name + sprintf( aDefaultGlyphName, "gly%03d", nGlyphIndex); + else if( mbCIDFont) // default glyph name in CIDs + sprintf( aDefaultGlyphName, "cid%03d", nSID); + else { // glyph name from string table + const char* pSidName = getString( nSID); + // check validity of glyph name + if( pSidName) { + const char* p = pSidName; + while( (*p >= '0') && (*p <= 'z')) ++p; + if( (p >= pSidName+1) && (*p == '\0')) + pGlyphName = pSidName; + } + // if needed invent a fallback name + if( pGlyphName != pSidName) + sprintf( aDefaultGlyphName, "bad%03d", nSID); + } + + return pGlyphName; +} + +// -------------------------------------------------------------------- + +class Type1Emitter +{ +public: + explicit Type1Emitter( const char* pOutFileName, bool bPfbSubset = true); + explicit Type1Emitter( FILE* pOutFile, bool bPfbSubset = true); + /*virtual*/ ~Type1Emitter( void); + void setSubsetName( const char* ); + + void emitRawData( const char* pData, int nLength) const; + void emitAllRaw( void); + void emitAllHex( void); + void emitAllCrypted( void); + int tellPos( void) const; + void updateLen( int nTellPos, int nLength); + void emitIntVector( const char* pLineHead, const char* pLineTail, const IntVector&); +private: + FILE* mpFileOut; + bool mbCloseOutfile; + char maBuffer[MAX_T1OPS_SIZE]; // TODO: dynamic allocation + int mnEECryptR; +public: + char* mpPtr; + + char maSubsetName[256]; + bool mbPfbSubset; + int mnHexLineCol; +}; + +// -------------------------------------------------------------------- + +Type1Emitter::Type1Emitter( const char* pPfbFileName, bool bPfbSubset) +: mpFileOut( NULL) +, mbCloseOutfile( true) +, mnEECryptR( 55665) // default eexec seed, TODO: mnEECryptSeed +, mpPtr( maBuffer) +, mbPfbSubset( bPfbSubset) +, mnHexLineCol( 0) +{ + mpFileOut = fopen( pPfbFileName, "wb"); + maSubsetName[0] = '\0'; +} + +// -------------------------------------------------------------------- + +Type1Emitter::Type1Emitter( FILE* pOutFile, bool bPfbSubset) +: mpFileOut( pOutFile) +, mbCloseOutfile( false) +, mnEECryptR( 55665) // default eexec seed, TODO: mnEECryptSeed +, mpPtr( maBuffer) +, mbPfbSubset( bPfbSubset) +, mnHexLineCol( 0) +{ + maSubsetName[0] = '\0'; +} + +// -------------------------------------------------------------------- + +Type1Emitter::~Type1Emitter( void) +{ + if( !mpFileOut) + return; + if( mbCloseOutfile ) + fclose( mpFileOut); + mpFileOut = NULL; +} + +// -------------------------------------------------------------------- + +void Type1Emitter::setSubsetName( const char* pSubsetName) +{ + maSubsetName[0] = '\0'; + if( pSubsetName) + strncpy( maSubsetName, pSubsetName, sizeof(maSubsetName)); + maSubsetName[sizeof(maSubsetName)-1] = '\0'; +} + +// -------------------------------------------------------------------- + +int Type1Emitter::tellPos( void) const +{ + int nTellPos = ftell( mpFileOut); + return nTellPos; +} + +// -------------------------------------------------------------------- + +void Type1Emitter::updateLen( int nTellPos, int nLength) +{ + // update PFB segment header length + U8 cData[4]; + cData[0] = static_cast(nLength >> 0); + cData[1] = static_cast(nLength >> 8); + cData[2] = static_cast(nLength >> 16); + cData[3] = static_cast(nLength >> 24); + const int nCurrPos = ftell( mpFileOut); + fseek( mpFileOut, nTellPos, SEEK_SET); + fwrite( cData, 1, sizeof(cData), mpFileOut); + fseek( mpFileOut, nCurrPos, SEEK_SET); +} + +// -------------------------------------------------------------------- + +inline void Type1Emitter::emitRawData( const char* pData, int nLength) const +{ + fwrite( pData, 1, nLength, mpFileOut); +} + +// -------------------------------------------------------------------- + +inline void Type1Emitter::emitAllRaw( void) +{ + // writeout raw data + assert( (mpPtr - maBuffer) < (int)sizeof(maBuffer)); + emitRawData( maBuffer, mpPtr - maBuffer); + // reset the raw buffer + mpPtr = maBuffer; +} + +// -------------------------------------------------------------------- + +inline void Type1Emitter::emitAllHex( void) +{ + assert( (mpPtr - maBuffer) < (int)sizeof(maBuffer)); + for( const char* p = maBuffer; p < mpPtr;) { + // convert binary chunk to hex + char aHexBuf[0x4000]; + char* pOut = aHexBuf; + while( (p < mpPtr) && (pOut < aHexBuf+sizeof(aHexBuf)-4)) { + // convert each byte to hex + char cNibble = (*p >> 4) & 0x0F; + cNibble += (cNibble < 10) ? '0' : 'A'-10; + *(pOut++) = cNibble; + cNibble = *(p++) & 0x0F; + cNibble += (cNibble < 10) ? '0' : 'A'-10; + *(pOut++) = cNibble; + // limit the line length + if( (++mnHexLineCol & 0x3F) == 0) + *(pOut++) = '\n'; + } + // writeout hex-converted chunk + emitRawData( aHexBuf, pOut-aHexBuf); + } + // reset the raw buffer + mpPtr = maBuffer; +} + +// -------------------------------------------------------------------- + +void Type1Emitter::emitAllCrypted( void) +{ + // apply t1crypt + for( char* p = maBuffer; p < mpPtr; ++p) { + *p ^= (mnEECryptR >> 8); + mnEECryptR = (*(U8*)p + mnEECryptR) * 52845 + 22719; + } + + // emit the t1crypt result + if( mbPfbSubset) + emitAllRaw(); + else + emitAllHex(); +} + +// -------------------------------------------------------------------- + +void Type1Emitter::emitIntVector( const char* pLineHead, const char* pLineTail, + const IntVector& rVector) +{ + // ignore empty vectors + if( rVector.empty()) + return; + + // emit the line head + mpPtr += sprintf( mpPtr, pLineHead); + // emit the vector values + IntVector::value_type nVal = 0; + for( IntVector::const_iterator it = rVector.begin();;) { + nVal = *it; + if( ++it == rVector.end() ) + break; + mpPtr += sprintf( mpPtr, "%d ", nVal); + } + // emit the last value + mpPtr += sprintf( mpPtr, "%d", nVal); + // emit the line tail + mpPtr += sprintf( mpPtr, pLineTail); +} + +// -------------------------------------------------------------------- + +bool CffSubsetterContext::emitAsType1( Type1Emitter& rEmitter, + const long* pReqGlyphIDs, const U8* pReqEncoding, + GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rFSInfo) +{ + // prepare some fontdirectory details + static const int nUniqueIdBase = 4100000; // using private-interchange UniqueIds + static int nUniqueId = nUniqueIdBase; + ++nUniqueId; + + char* pFontName = rEmitter.maSubsetName; + if( !*pFontName ) { + if( mnFontNameSID) { + // get the fontname directly if available + strncpy( pFontName, getString( mnFontNameSID), sizeof(rEmitter.maSubsetName)); + } else if( mnFullNameSID) { + // approximate fontname as fullname-whitespace + const char* pI = getString( mnFullNameSID); + char* pO = pFontName; + const char* pLimit = pFontName + sizeof(rEmitter.maSubsetName) - 1; + while( pO < pLimit) { + const char c = *(pI++); + if( c != ' ') + *(pO++) = c; + if( !c) + break; + } + *pO = '\0'; + } else { + // fallback name of last resort + strncpy( pFontName, "DummyName", sizeof(rEmitter.maSubsetName)); + } + } + const char* pFullName = pFontName; + const char* pFamilyName = pFontName; + + char*& pOut = rEmitter.mpPtr; // convenience reference, TODO: cleanup + + // create a PFB+Type1 header + if( rEmitter.mbPfbSubset ) { + static const char aPfbHeader[] = "\x80\x01\x00\x00\x00\x00"; + rEmitter.emitRawData( aPfbHeader, sizeof(aPfbHeader)-1); + } + + pOut += sprintf( pOut, "%%!FontType1-1.0: %s 001.003\n", rEmitter.maSubsetName); + // emit TOPDICT +#if 0 // improve PS Type1 caching? + nOfs += sprintf( &aT1Str[nOfs], + "FontDirectory/%s known{/%s findfont dup/UniqueID known{dup\n" + "/UniqueID get %d eq exch/FontType get 1 eq and}{pop false}ifelse\n" + "{save true}{false}ifelse}\n{false}ifelse\n", + pFamilyName, pFamilyName, nUniqueId); +#endif + pOut += sprintf( pOut, + "11 dict begin\n" // TODO: dynamic entry count for TOPDICT + "/FontType 1 def\n" + "/PaintType 0 def\n"); + pOut += sprintf( pOut, "/FontName /%s def\n", rEmitter.maSubsetName); + pOut += sprintf( pOut, "/UniqueID %d def\n", nUniqueId); + pOut += sprintf( pOut, "/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def\n"); + if( maFontBBox.size() == 4) + pOut += sprintf( pOut, "/FontBBox [%d %d %d %d ]readonly def\n", + maFontBBox[0], maFontBBox[1], maFontBBox[2], maFontBBox[3]); + else + pOut += sprintf( pOut, "/FontBBox [0 0 999 999]readonly def\n"); + // emit FONTINFO into TOPDICT + pOut += sprintf( pOut, + "/FontInfo 2 dict dup begin\n" // TODO: check fontinfo entry count + " /FullName (%s) readonly def\n" + " /FamilyName (%s) readonly def\n" + "end readonly def\n", + pFullName, pFamilyName); +#if 0 // TODO: use an standard Type1 encoding if possible + pOut += sprintf( pOut, + "/Encoding StandardEncoding def\n"); +#else + pOut += sprintf( pOut, + "/Encoding 256 array\n" + "0 1 255 {1 index exch /.notdef put} for\n"); + for( int i = 1; (i < nGlyphCount) && (i < 256); ++i) { + const char* pGlyphName = getGlyphName( pReqGlyphIDs[i]); + pOut += sprintf( pOut, "dup %d /%s put\n", pReqEncoding[i], pGlyphName); + } + pOut += sprintf( pOut, "readonly def\n"); +#endif + pOut += sprintf( pOut, + // TODO: more topdict entries + "currentdict end\n" + "currentfile eexec\n"); + + // emit PFB header + rEmitter.emitAllRaw(); + if( rEmitter.mbPfbSubset) { + // update PFB header segment + const int nPfbHeaderLen = rEmitter.tellPos() - 6; + rEmitter.updateLen( 2, nPfbHeaderLen); + + // prepare start of eexec segment + rEmitter.emitRawData( "\x80\x02\x00\x00\x00\x00", 6); // segment start + } + const int nEExecSegTell = rEmitter.tellPos(); + + // which always starts with a privdict + // count the privdict entries + int nPrivEntryCount = 9; +#if !defined(IGNORE_HINTS) + // emit blue hints only if non-default values + nPrivEntryCount += !mpCffLocal->maOtherBlues.empty(); + nPrivEntryCount += !mpCffLocal->maFamilyBlues.empty(); + nPrivEntryCount += !mpCffLocal->maFamilyOtherBlues.empty(); + nPrivEntryCount += (mpCffLocal->mfBlueScale != 0.0); + nPrivEntryCount += (mpCffLocal->mfBlueShift != 0.0); + nPrivEntryCount += (mpCffLocal->mfBlueFuzz != 0.0); + // emit stem hints only if non-default values + nPrivEntryCount += (mpCffLocal->mnStemStdHW != 0); + nPrivEntryCount += (mpCffLocal->mnStemStdVW != 0); + nPrivEntryCount += !mpCffLocal->maStemSnapH.empty(); + nPrivEntryCount += !mpCffLocal->maStemSnapV.empty(); + // emit other hints only if non-default values + nPrivEntryCount += (mpCffLocal->mfExpFactor != 0.0); + nPrivEntryCount += (mpCffLocal->mnLangGroup != 0); + nPrivEntryCount += (mpCffLocal->mnLangGroup == 1); + nPrivEntryCount += (mpCffLocal->mbForceBold != false); +#endif // IGNORE_HINTS + // emit the privdict header + pOut += sprintf( pOut, + "\110\104\125 " + "dup\n/Private %d dict dup begin\n" + "/RD{string currentfile exch readstring pop}executeonly def\n" + "/ND{noaccess def}executeonly def\n" + "/NP{noaccess put}executeonly def\n" + "/MinFeature{16 16}ND\n" + "/password 5839 def\n", // TODO: mnRDCryptSeed? + nPrivEntryCount); + +#if defined(IGNORE_HINTS) + pOut += sprintf( pOut, "/BlueValues []ND\n"); // BlueValues are mandatory +#else + // emit blue hint related privdict entries + if( !mpCffLocal->maBlueValues.empty()) + rEmitter.emitIntVector( "/BlueValues [", "]ND\n", mpCffLocal->maBlueValues); + else + pOut += sprintf( pOut, "/BlueValues []ND\n"); // default to empty BlueValues + rEmitter.emitIntVector( "/OtherBlues [", "]ND\n", mpCffLocal->maOtherBlues); + rEmitter.emitIntVector( "/FamilyBlues [", "]ND\n", mpCffLocal->maFamilyBlues); + rEmitter.emitIntVector( "/FamilyOtherBlues [", "]ND\n", mpCffLocal->maFamilyOtherBlues); + + if( mpCffLocal->mfBlueScale) + pOut += sprintf( pOut, "/BlueScale %.6f def\n", mpCffLocal->mfBlueScale); + if( mpCffLocal->mfBlueShift) // default BlueShift==7 + pOut += sprintf( pOut, "/BlueShift %.1f def\n", mpCffLocal->mfBlueShift); + if( mpCffLocal->mfBlueFuzz) // default BlueFuzz==1 + pOut += sprintf( pOut, "/BlueFuzz %.1f def\n", mpCffLocal->mfBlueFuzz); + + // emit stem hint related privdict entries + if( mpCffLocal->mnStemStdHW) + pOut += sprintf( pOut, "/StdHW [%d] def\n", mpCffLocal->mnStemStdHW); + if( mpCffLocal->mnStemStdVW) + pOut += sprintf( pOut, "/StdVW [%d] def\n", mpCffLocal->mnStemStdVW); + rEmitter.emitIntVector( "/StemSnapH [", "]ND\n", mpCffLocal->maStemSnapH); + rEmitter.emitIntVector( "/StemSnapV [", "]ND\n", mpCffLocal->maStemSnapV); + + // emit other hints + if( mpCffLocal->mbForceBold) + pOut += sprintf( pOut, "/ForceBold true def\n"); + if( mpCffLocal->mnLangGroup != 0) + pOut += sprintf( pOut, "/LanguageGroup %d def\n", mpCffLocal->mnLangGroup); + if( mpCffLocal->mnLangGroup == 1) // compatibility with ancient printers + pOut += sprintf( pOut, "/RndStemUp false def\n"); + if( mpCffLocal->mfExpFactor) + pOut += sprintf( pOut, "/ExpansionFactor %.2f def\n", mpCffLocal->mfExpFactor); +#endif // IGNORE_HINTS + + // emit remaining privdict entries + pOut += sprintf( pOut, "/UniqueID %d def\n", nUniqueId); + // TODO?: more privdict entries? + + static const char aOtherSubrs[] = + "/OtherSubrs\n" + "% Dummy code for faking flex hints\n" + "[ {} {} {} {systemdict /internaldict known not {pop 3}\n" + "{1183615869 systemdict /internaldict get exec\n" + "dup /startlock known\n" + "{/startlock get exec}\n" + "{dup /strtlck known\n" + "{/strtlck get exec}\n" + "{pop 3}\nifelse}\nifelse}\nifelse\n} executeonly\n" + "] ND\n"; + memcpy( pOut, aOtherSubrs, sizeof(aOtherSubrs)-1); + pOut += sizeof(aOtherSubrs)-1; + + // emit used GlobalSubr charstrings + // these are the just the default subrs + static const char aSubrs[] = + "/Subrs 5 array\n" + "dup 0 15 RD \x5F\x3D\x6B\xAC\x3C\xBD\x74\x3D\x3E\x17\xA0\x86\x58\x08\x85 NP\n" + "dup 1 9 RD \x5F\x3D\x6B\xD8\xA6\xB5\x68\xB6\xA2 NP\n" + "dup 2 9 RD \x5F\x3D\x6B\xAC\x39\x46\xB9\x43\xF9 NP\n" + "dup 3 5 RD \x5F\x3D\x6B\xAC\xB9 NP\n" + "dup 4 12 RD \x5F\x3D\x6B\xAC\x3E\x5D\x48\x54\x62\x76\x39\x03 NP\n" + "ND\n"; + memcpy( pOut, aSubrs, sizeof(aSubrs)-1); + pOut += sizeof(aSubrs)-1; + + // TODO: emit more GlobalSubr charstrings? + // TODO: emit used LocalSubr charstrings? + + // emit the CharStrings for the requested glyphs + pOut += sprintf( pOut, + "2 index /CharStrings %d dict dup begin\n", nGlyphCount); + rEmitter.emitAllCrypted(); + for( int i = 0; i < nGlyphCount; ++i) { + const int nGlyphId = pReqGlyphIDs[i]; + assert( (nGlyphId >= 0) && (nGlyphId < mnCharStrCount)); + // get privdict context matching to the glyph + const int nFDSelect = getFDSelect( nGlyphId); + mpCffLocal = &maCffLocal[ nFDSelect]; + // convert the Type2op charstring to its Type1op counterpart + const int nT2Len = seekIndexData( mnCharStrBase, nGlyphId); + assert( nT2Len > 0); + U8 aType1Ops[ MAX_T1OPS_SIZE]; // TODO: dynamic allocation + const int nT1Len = convert2Type1Ops( mpCffLocal, mpReadPtr, nT2Len, aType1Ops); + // get the glyph name + const char* pGlyphName = getGlyphName( nGlyphId); + // emit the encrypted Type1op charstring + pOut += sprintf( pOut, "/%s %d RD ", pGlyphName, nT1Len); + memcpy( pOut, aType1Ops, nT1Len); + pOut += nT1Len; + pOut += sprintf( pOut, " ND\n"); + rEmitter.emitAllCrypted(); + // provide individual glyphwidths if requested + if( pGlyphWidths ) + pGlyphWidths[i] = getCharWidth(); + } + pOut += sprintf( pOut, "end end\nreadonly put\nput\n"); + pOut += sprintf( pOut, "dup/FontName get exch definefont pop\n"); + pOut += sprintf( pOut, "mark currentfile closefile\n"); + rEmitter.emitAllCrypted(); + + // mark stop of eexec encryption + if( rEmitter.mbPfbSubset) { + const int nEExecLen = rEmitter.tellPos() - nEExecSegTell; + rEmitter.updateLen( nEExecSegTell-4, nEExecLen); + } + + // create PFB footer + static const char aPfxFooter[] = "\x80\x01\x14\x02\x00\x00\n" // TODO: check segment len + "0000000000000000000000000000000000000000000000000000000000000000\n" + "0000000000000000000000000000000000000000000000000000000000000000\n" + "0000000000000000000000000000000000000000000000000000000000000000\n" + "0000000000000000000000000000000000000000000000000000000000000000\n" + "0000000000000000000000000000000000000000000000000000000000000000\n" + "0000000000000000000000000000000000000000000000000000000000000000\n" + "0000000000000000000000000000000000000000000000000000000000000000\n" + "0000000000000000000000000000000000000000000000000000000000000000\n" + "cleartomark\n" + "\x80\x03"; + if( rEmitter.mbPfbSubset) + rEmitter.emitRawData( aPfxFooter, sizeof(aPfxFooter)-1); + else + rEmitter.emitRawData( aPfxFooter+6, sizeof(aPfxFooter)-9); + + // provide details to the subset requesters, TODO: move into own method? + // note: Top and Bottom are flipped between Type1 and VCL + rFSInfo.m_aFontBBox = Rectangle( Point( maFontBBox[0], maFontBBox[1] ), Point( maFontBBox[2], maFontBBox[3] ) ); + // PDF-Spec says the values below mean the ink bounds! + // TODO: use better approximations for these ink bounds + rFSInfo.m_nAscent = +rFSInfo.m_aFontBBox.Bottom(); // for capital letters + rFSInfo.m_nDescent = -rFSInfo.m_aFontBBox.Top(); // for all letters + rFSInfo.m_nCapHeight = rFSInfo.m_nAscent; // for top-flat capital letters + + rFSInfo.m_nFontType = rEmitter.mbPfbSubset ? FontSubsetInfo::TYPE1_PFB : FontSubsetInfo::TYPE1_PFA; + rFSInfo.m_aPSName = String( rEmitter.maSubsetName, RTL_TEXTENCODING_UTF8 ); + + return true; +} + +// ==================================================================== + +bool FontSubsetInfo::CreateFontSubsetFromCff( GlyphWidth* pOutGlyphWidths ) +{ + CffSubsetterContext aCff( mpInFontBytes, mnInByteLength); + aCff.initialCffRead(); + + // emit Type1 subset from the CFF input + // TODO: also support CFF->CFF subsetting (when PDF-export and PS-printing need it) + const bool bPfbSubset = (0 != (mnReqFontTypeMask & FontSubsetInfo::TYPE1_PFB)); + Type1Emitter aType1Emitter( mpOutFile, bPfbSubset); + aType1Emitter.setSubsetName( mpReqFontName); + bool bRC = aCff.emitAsType1( aType1Emitter, + mpReqGlyphIds, mpReqEncodedIds, + pOutGlyphWidths, mnReqGlyphCount, *this); + return bRC; +} + +// ==================================================================== + diff --git a/vcl/source/fontsubset/fontsubset.cxx b/vcl/source/fontsubset/fontsubset.cxx new file mode 100644 index 000000000000..e203feed1645 --- /dev/null +++ b/vcl/source/fontsubset/fontsubset.cxx @@ -0,0 +1,185 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +#include +#include +#include + +// ==================================================================== + +FontSubsetInfo::FontSubsetInfo() +: m_nAscent( 0) +, m_nDescent( 0) +, m_nCapHeight( 0) +, m_nFontType( FontSubsetInfo::NO_FONT) +, mpInFontBytes( NULL) +, mnInByteLength( NULL) +, meInFontType( FontSubsetInfo::NO_FONT) +, mpSftTTFont( NULL) +{} + +// -------------------------------------------------------------------- + +FontSubsetInfo::~FontSubsetInfo() +{} + +// -------------------------------------------------------------------- + +// prepare subsetting for fonts where the input font file is mapped +bool FontSubsetInfo::LoadFont( + FontSubsetInfo::FontType eInFontType, + const unsigned char* pInFontBytes, int nInByteLength) +{ + DBG_ASSERT( (mpSftTTFont == NULL), "Subset from SFT and from mapped font-file requested"); + meInFontType = eInFontType; + mpInFontBytes = pInFontBytes; + mnInByteLength = nInByteLength; + return (mnInByteLength > 0); +} + +// -------------------------------------------------------------------- + +// prepare subsetting for fonts that are known to the SFT-parser +bool FontSubsetInfo::LoadFont( vcl::_TrueTypeFont* pSftTTFont ) +{ + DBG_ASSERT( (mpInFontBytes == NULL), "Subset from SFT and from mapped font-file requested"); + mpSftTTFont = pSftTTFont; + meInFontType = ANY_SFNT; + return (mpSftTTFont == NULL); +} + +// -------------------------------------------------------------------- + +bool FontSubsetInfo::CreateFontSubset( + int nReqFontTypeMask, + FILE* pOutFile, const char* pReqFontName, + const long* pReqGlyphIds, const sal_uInt8* pReqEncodedIds, int nReqGlyphCount, + sal_Int32* pOutGlyphWidths) +{ + // prepare request details needed by all underlying subsetters + mnReqFontTypeMask = nReqFontTypeMask; + mpOutFile = pOutFile; + mpReqFontName = pReqFontName; + mpReqGlyphIds = pReqGlyphIds; + mpReqEncodedIds = pReqEncodedIds; + mnReqGlyphCount = nReqGlyphCount; + + // TODO: move the glyphid/encid/notdef reshuffling from the callers to here + + // dispatch to underlying subsetters + bool bOK = false; + + // TODO: better match available input-type to possible subset-types + switch( meInFontType) { + case SFNT_TTF: + case SFNT_CFF: + case ANY_SFNT: + bOK = CreateFontSubsetFromSfnt( pOutGlyphWidths); + break; + case CFF_FONT: + bOK = CreateFontSubsetFromCff( pOutGlyphWidths); + break; + case TYPE1_PFA: + case TYPE1_PFB: + case ANY_TYPE1: + bOK = CreateFontSubsetFromType1( pOutGlyphWidths); + break; + // fall trough + case NO_FONT: + // fall trough + default: + DBG_ERROR( "unhandled type in CreateFontSubset()"); + break; + } + + return bOK; +} + +// -------------------------------------------------------------------- + +// TODO: move function to sft.cxx to replace dummy implementation +bool FontSubsetInfo::CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths ) +{ + // handle SFNT_CFF fonts + int nCffLength = 0; + const sal_uInt8* pCffBytes = NULL; + if( GetSfntTable( mpSftTTFont, O_CFF, &pCffBytes, &nCffLength)) + { + LoadFont( CFF_FONT, pCffBytes, nCffLength); + const bool bOK = CreateFontSubsetFromCff( pOutGlyphWidths); + return bOK; + } + + // handle SFNT_TTF fonts + // by forwarding the subset request to AG's sft subsetter +#if 1 // TODO: remove conversion tp 16bit glyphids when sft-subsetter has been updated + sal_uInt16 aShortGlyphIds[256]; + for( int i = 0; i < mnReqGlyphCount; ++i) + aShortGlyphIds[i] = (sal_uInt16)mpReqGlyphIds[i]; + // remove const_cast when sft-subsetter is const-correct + sal_uInt8* pEncArray = const_cast( mpReqEncodedIds ); +#endif + int nSFTErr = vcl::SF_BADARG; + if( (mnReqFontTypeMask & TYPE42_FONT) != 0 ) + { + nSFTErr = CreateT42FromTTGlyphs( mpSftTTFont, mpOutFile, mpReqFontName, + aShortGlyphIds, pEncArray, mnReqGlyphCount ); + } + else if( (mnReqFontTypeMask & TYPE3_FONT) != 0 ) + { + nSFTErr = CreateT3FromTTGlyphs( mpSftTTFont, mpOutFile, mpReqFontName, + aShortGlyphIds, pEncArray, mnReqGlyphCount, + 0 /* 0 = horizontal, 1 = vertical */ ); + } + else if( (mnReqFontTypeMask & SFNT_TTF) != 0 ) + { + // TODO: use CreateTTFromTTGlyphs() + // TODO: move functionality from callers here + } + + return (nSFTErr != vcl::SF_OK); +} + +// -------------------------------------------------------------------- + +// TODO: replace dummy implementation +bool FontSubsetInfo::CreateFontSubsetFromType1( sal_Int32* pOutGlyphWidths) +{ +#if 0 + // TODO: replace dummy implementation when someone needs this +#else + (void)pOutGlyphWidths; + fprintf(stderr,"CreateFontSubsetFromType1: replace dummy implementation\n"); +#endif + return false; +} + +// ==================================================================== + diff --git a/vcl/source/fontsubset/makefile.mk b/vcl/source/fontsubset/makefile.mk index b7d719f3c912..95cc12bccfaa 100644 --- a/vcl/source/fontsubset/makefile.mk +++ b/vcl/source/fontsubset/makefile.mk @@ -40,6 +40,8 @@ ENABLE_EXCEPTIONS=true SLOFILES=\ $(SLO)$/list.obj \ $(SLO)$/sft.obj \ + $(SLO)$/cff.obj \ + $(SLO)$/fontsubset.obj \ $(SLO)$/xlat.obj \ $(SLO)$/ttcr.obj \ $(SLO)$/gsub.obj diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx index 7744b2f9a59c..0accc42af968 100644 --- a/vcl/source/fontsubset/sft.cxx +++ b/vcl/source/fontsubset/sft.cxx @@ -25,6 +25,9 @@ * ************************************************************************/ +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + /* * Sun Font Tools * @@ -131,6 +134,7 @@ static const sal_uInt32 TTFontClassTag = 0x74746663; /* 'ttfc' */ static const sal_uInt32 T_true = 0x74727565; /* 'true' */ static const sal_uInt32 T_ttcf = 0x74746366; /* 'ttcf' */ +static const sal_uInt32 T_otto = 0x4f54544f; /* 'OTTO' */ /* standard TrueType table tags */ #define T_maxp 0x6D617870 @@ -150,6 +154,7 @@ static const sal_uInt32 T_ttcf = 0x74746366; /* 'ttcf' */ #define T_prep 0x70726570 #define T_fpgm 0x6670676D #define T_gsub 0x47535542 +#define T_CFF 0x43464620 #define LAST_URANGE_BIT 69 const char *ulcodes[LAST_URANGE_BIT+2] = { @@ -416,7 +421,7 @@ _inline const char *UnicodeRangeName(sal_uInt16 bit) return ulcodes[bit]; } -_inline sal_uInt8 *getTable(TrueTypeFont *ttf, sal_uInt32 ord) +_inline const sal_uInt8* getTable( TrueTypeFont *ttf, sal_uInt32 ord) { return (sal_uInt8*)ttf->tables[ord]; } @@ -496,7 +501,7 @@ static void HexFmtBlockWrite(HexFmt *_this, const void *ptr, sal_uInt32 size) /* fills the aw and lsb entries of the TTGlyphMetrics structure from hmtx table -*/ static void GetMetrics(TrueTypeFont *ttf, sal_uInt32 glyphID, TTGlyphMetrics *metrics) { - sal_uInt8 *table = getTable(ttf, O_hmtx); + const sal_uInt8* table = getTable( ttf, O_hmtx ); metrics->aw = metrics->lsb = metrics->ah = metrics->tsb = 0; if (!table || !ttf->numberOfHMetrics) return; @@ -510,7 +515,8 @@ static void GetMetrics(TrueTypeFont *ttf, sal_uInt32 glyphID, TTGlyphMetrics *me } table = getTable(ttf, O_vmtx); - if (!table || !ttf->numOfLongVerMetrics) return; + if( !table || !ttf->numOfLongVerMetrics ) + return; if (glyphID < ttf->numOfLongVerMetrics) { metrics->ah = GetUInt16(table, 4 * glyphID, 1); @@ -526,19 +532,21 @@ static int GetTTGlyphOutline(TrueTypeFont *, sal_uInt32 , ControlPoint **, TTGly /* returns the number of control points, allocates the pointArray */ static int GetSimpleTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray, TTGlyphMetrics *metrics) /*FOLD02*/ { - sal_uInt8 *table = getTable(ttf, O_glyf); - sal_uInt8 *ptr, *p, flag, n; - sal_Int16 numberOfContours; - sal_uInt16 t, instLen, lastPoint=0; + const sal_uInt8* table = getTable( ttf, O_glyf ); + sal_uInt8 flag, n; + sal_uInt16 t, lastPoint=0; int i, j, z; *pointArray = 0; /* printf("GetSimpleTTOutline(%d)\n", glyphID); */ - if (glyphID >= ttf->nglyphs) return 0; /*- glyph is not present in the font */ - ptr = table + ttf->goffsets[glyphID]; - if ((numberOfContours = GetInt16(ptr, 0, 1)) <= 0) return 0; /*- glyph is not simple */ + if( glyphID >= ttf->nglyphs ) /*- glyph is not present in the font */ + return 0; + const sal_uInt8* ptr = table + ttf->goffsets[glyphID]; + const sal_Int16 numberOfContours = GetInt16(ptr, 0, 1); + if( numberOfContours <= 0 ) /*- glyph is not simple */ + return 0; if (metrics) { /*- GetCompoundTTOutline() calls this function with NULL metrics -*/ metrics->xMin = GetInt16(ptr, 2, 1); @@ -554,8 +562,8 @@ static int GetSimpleTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoin if ((t = GetUInt16(ptr, 10+i*2, 1)) > lastPoint) lastPoint = t; } - instLen = GetUInt16(ptr, 10 + numberOfContours*2, 1); - p = ptr + 10 + 2 * numberOfContours + 2 + instLen; + sal_uInt16 instLen = GetUInt16(ptr, 10 + numberOfContours*2, 1); + const sal_uInt8* p = ptr + 10 + 2 * numberOfContours + 2 + instLen; ControlPoint* pa = (ControlPoint*)calloc(lastPoint+1, sizeof(ControlPoint)); i = 0; @@ -617,8 +625,7 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo { sal_uInt16 flags, index; sal_Int16 e, f, numberOfContours; - sal_uInt8 *table = getTable(ttf, O_glyf); - sal_uInt8 *ptr; + const sal_uInt8* table = getTable( ttf, O_glyf ); std::vector myPoints; ControlPoint *nextComponent, *pa; int i, np; @@ -627,13 +634,12 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo *pointArray = 0; /* printf("GetCompoundTTOutline(%d)\n", glyphID); */ - if (glyphID >= ttf->nglyphs) { /*- incorrect glyphID */ + if (glyphID >= ttf->nglyphs) /*- incorrect glyphID */ return 0; - } - ptr = table + ttf->goffsets[glyphID]; - if ((numberOfContours = GetInt16(ptr, 0, 1)) != -1) { /*- glyph is not compound */ + + const sal_uInt8* ptr = table + ttf->goffsets[glyphID]; + if ((numberOfContours = GetInt16(ptr, 0, 1)) != -1) /*- glyph is not compound */ return 0; - } if (metrics) { metrics->xMin = GetInt16(ptr, 2, 1); @@ -819,9 +825,8 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo */ static int GetTTGlyphOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray, TTGlyphMetrics *metrics, std::vector< sal_uInt32 >* glyphlist) { - sal_uInt8 *ptr, *table = getTable(ttf, O_glyf); + const sal_uInt8 *table = getTable( ttf, O_glyf ); sal_Int16 numberOfContours; - int length; int res; *pointArray = 0; @@ -831,8 +836,8 @@ static int GetTTGlyphOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint if (glyphID >= ttf->nglyphs) return -1; /**/ - ptr = table + ttf->goffsets[glyphID]; - length = ttf->goffsets[glyphID+1] - ttf->goffsets[glyphID]; + const sal_uInt8* ptr = table + ttf->goffsets[glyphID]; + int length = ttf->goffsets[glyphID+1] - ttf->goffsets[glyphID]; if (length == 0) { /*- empty glyphs still have hmtx and vmtx metrics values */ if (metrics) GetMetrics(ttf, glyphID, metrics); @@ -1005,15 +1010,15 @@ static int BSplineToPSPath(ControlPoint *srcA, int srcCount, PSPathElement **pat /*- Extracts a string from the name table and allocates memory for it -*/ -static char *nameExtract(sal_uInt8 *name, int nTableSize, int n, int dbFlag, sal_uInt16** ucs2result ) +static char *nameExtract( const sal_uInt8* name, int nTableSize, int n, int dbFlag, sal_uInt16** ucs2result ) { int i; char *res; - sal_uInt8 *ptr = name + GetUInt16(name, 4, 1) + GetUInt16(name + 6, 12 * n + 10, 1); + const sal_uInt8* ptr = name + GetUInt16(name, 4, 1) + GetUInt16(name + 6, 12 * n + 10, 1); int len = GetUInt16(name+6, 12 * n + 8, 1); // sanity check - if( ! len || ptr >= (name+nTableSize-len) ) + if( (len <= 0) || ((ptr+len) > (name+nTableSize)) ) { if( ucs2result ) *ucs2result = NULL; @@ -1043,7 +1048,8 @@ static char *nameExtract(sal_uInt8 *name, int nTableSize, int n, int dbFlag, sal return res; } -static int findname(sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID, sal_uInt16 encodingID, sal_uInt16 languageID, sal_uInt16 nameID) +static int findname( const sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID, + sal_uInt16 encodingID, sal_uInt16 languageID, sal_uInt16 nameID ) { int l = 0, r = n-1, i; sal_uInt32 t1, t2; @@ -1085,7 +1091,7 @@ static int findname(sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID, sal_uI static void GetNames(TrueTypeFont *t) { - sal_uInt8 *table = getTable(t, O_name); + const sal_uInt8* table = getTable( t, O_name ); int nTableSize = getTableSize(t, O_name); sal_uInt16 n = GetUInt16(table, 2, 1); @@ -1107,6 +1113,11 @@ static void GetNames(TrueTypeFont *t) // some symbol fonts like Marlett have a 3,0 name! t->psname = nameExtract(table, nTableSize, r, 1, NULL); } + // for embedded font in Ghostscript PDFs + if ( ! t->psname && (r = findname(table, n, 2, 2, 0, 6)) != -1) + { + t->psname = nameExtract(table, nTableSize, r, 0, NULL); + } if ( ! t->psname ) { if ( t->fname ) @@ -1374,7 +1385,7 @@ static sal_uInt32 getGlyph12(const sal_uInt8 *pCmap, sal_uInt32 cChar) { static void FindCmap(TrueTypeFont *ttf) { - sal_uInt8 *table = getTable(ttf, O_cmap); + const sal_uInt8* table = getTable(ttf, O_cmap); sal_uInt32 table_size = getTableSize(ttf, O_cmap); sal_uInt16 ncmaps = GetUInt16(table, 2, 1); unsigned int i; @@ -1468,24 +1479,20 @@ static void FindCmap(TrueTypeFont *ttf) static void GetKern(TrueTypeFont *ttf) { - sal_uInt8 *table = getTable(ttf, O_kern); - sal_uInt8 *ptr; - sal_uInt32 i; - /* - sal_uInt16 v1; - sal_uInt32 v2; - */ + const sal_uInt8* table = getTable(ttf, O_kern); + const sal_uInt8 *ptr; - if (!table) goto badtable; + if( !table ) + goto badtable; if (GetUInt16(table, 0, 1) == 0) { /* Traditional Microsoft style table with USHORT version and nTables fields */ ttf->nkern = GetUInt16(table, 2, 1); - ttf->kerntables = (sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8 *)); + ttf->kerntables = (const sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8 *)); assert(ttf->kerntables != 0); memset(ttf->kerntables, 0, ttf->nkern * sizeof(sal_uInt8 *)); ttf->kerntype = KT_MICROSOFT; ptr = table + 4; - for (i=0; i < ttf->nkern; i++) { + for( unsigned i = 0; i < ttf->nkern; ++i) { ttf->kerntables[i] = ptr; ptr += GetUInt16(ptr, 2, 1); /* sanity check */ @@ -1500,12 +1507,12 @@ static void GetKern(TrueTypeFont *ttf) if (GetUInt32(table, 0, 1) == 0x00010000) { /* MacOS style kern tables: fixed32 version and sal_uInt32 nTables fields */ ttf->nkern = GetUInt32(table, 4, 1); - ttf->kerntables = (sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8*)); + ttf->kerntables = (const sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8*)); assert(ttf->kerntables != 0); memset(ttf->kerntables, 0, ttf->nkern * sizeof(sal_uInt8 *)); ttf->kerntype = KT_APPLE_NEW; ptr = table + 8; - for (i = 0; i < ttf->nkern; i++) { + for( unsigned i = 0; i < ttf->nkern; ++i) { ttf->kerntables[i] = ptr; ptr += GetUInt32(ptr, 0, 1); /* sanity check; there are some fonts that are broken in this regard */ @@ -1717,7 +1724,9 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t ) if ((version == 0x00010000) || (version == T_true)) { tdoffset = 0; - } else if (version == T_ttcf) { /*- TrueType collection */ + } else if (version == T_otto) { /* PS-OpenType font */ + tdoffset = 0; + } else if (version == T_ttcf) { /* TrueType collection */ if (GetUInt32(t->ptr, 4, 1) != 0x00010000) { CloseTTFont(t); return SF_TTFORMAT; @@ -1743,7 +1752,7 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t ) if( t->ntables >= 128 ) return SF_TTFORMAT; - t->tables = (sal_uInt8**)calloc(NUM_TAGS, sizeof(sal_uInt8*)); + t->tables = (const sal_uInt8**)calloc(NUM_TAGS, sizeof(sal_uInt8*)); assert(t->tables != 0); t->tlens = (sal_uInt32*)calloc(NUM_TAGS, sizeof(sal_uInt32)); assert(t->tlens != 0); @@ -1773,6 +1782,7 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t ) case T_prep: nIndex = O_prep; break; case T_fpgm: nIndex = O_fpgm; break; case T_gsub: nIndex = O_gsub; break; + case T_CFF: nIndex = O_CFF; break; default: nIndex = -1; break; } if( nIndex >= 0 ) { @@ -1817,11 +1827,12 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t ) if( (sal_uInt8*)t->tables[i] < t->ptr ) { - t->tlens[i] = 0; - t->tables[i] = NULL; #if OSL_DEBUG_LEVEL > 1 - fprintf( stderr, "font file %s has bad table offset (tagnum=%d)\n", t->fname, i ); + if( t->tables[i] ) + fprintf( stderr, "font file %s has bad table offset %d (tagnum=%d)\n", t->fname, (sal_uInt8*)t->tables[i]-t->ptr, i ); #endif + t->tlens[i] = 0; + t->tables[i] = NULL; } else if( (sal_uInt8*)t->tables[i] + t->tlens[i] > t->ptr + t->fsize ) { @@ -1839,15 +1850,15 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t ) and read the basic font properties */ /* The following tables are absolutely required: - * maxp, head, glyf, loca, name, cmap + * maxp, head, name, cmap */ - if (!(getTable(t, O_maxp) && getTable(t, O_head) && getTable(t, O_glyf) && getTable(t, O_loca) && getTable(t, O_name) && getTable(t, O_cmap) )) { + if( !(getTable(t, O_maxp) && getTable(t, O_head) && getTable(t, O_name) && getTable(t, O_cmap)) ) { CloseTTFont(t); return SF_TTFORMAT; } - sal_uInt8* table = getTable(t, O_maxp); + const sal_uInt8* table = getTable(t, O_maxp); t->nglyphs = GetUInt16(table, 4, 1); table = getTable(t, O_head); @@ -1859,16 +1870,24 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t ) return SF_TTFORMAT; } - k = (getTableSize(t, O_loca) / (indexfmt ? 4 : 2)) - 1; - if (k < (int)t->nglyphs) t->nglyphs = k; /* Hack for broken Chinese fonts */ - - table = getTable(t, O_loca); + if( getTable(t, O_glyf) && getTable(t, O_loca) ) { /* TTF or TTF-OpenType */ + k = (getTableSize(t, O_loca) / (indexfmt ? 4 : 2)) - 1; + if( k < (int)t->nglyphs ) /* Hack for broken Chinese fonts */ + t->nglyphs = k; - t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32)); - assert(t->goffsets != 0); + table = getTable(t, O_loca); + t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32)); + assert(t->goffsets != 0); - for (i = 0; i <= (int)t->nglyphs; i++) { - t->goffsets[i] = indexfmt ? GetUInt32(table, i << 2, 1) : (sal_uInt32)GetUInt16(table, i << 1, 1) << 1; + for( i = 0; i <= (int)t->nglyphs; ++i ) + t->goffsets[i] = indexfmt ? GetUInt32(table, i << 2, 1) : (sal_uInt32)GetUInt16(table, i << 1, 1) << 1; + } else if( getTable(t, O_CFF) ) { /* PS-OpenType */ + t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32)); + /* TODO: implement to get subsetting */ + assert(t->goffsets != 0); + } else { + CloseTTFont(t); + return SF_TTFORMAT; } table = getTable(t, O_hhea); @@ -1919,11 +1938,13 @@ int GetTTGlyphPoints(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **point int GetTTGlyphComponents(TrueTypeFont *ttf, sal_uInt32 glyphID, std::vector< sal_uInt32 >& glyphlist) { - sal_uInt8 *ptr, *glyf = getTable(ttf, O_glyf); int n = 1; - if (glyphID >= ttf->nglyphs) return 0; - ptr = glyf + ttf->goffsets[glyphID]; + if( glyphID >= ttf->nglyphs ) + return 0; + + const sal_uInt8* glyf = getTable(ttf, O_glyf); + const sal_uInt8* ptr = glyf + ttf->goffsets[glyphID]; glyphlist.push_back( glyphID ); @@ -1964,7 +1985,7 @@ int CreateT3FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *fname, /*FO ControlPoint *pa; PSPathElement *path; int i, j, r, n; - sal_uInt8 *table = getTable(ttf, O_head); + const sal_uInt8* table = getTable(ttf, O_head); TTGlyphMetrics metrics; int UPEm = ttf->unitsPerEm; @@ -2123,7 +2144,6 @@ int CreateTTFromTTGlyphs(TrueTypeFont *ttf, { TrueTypeCreator *ttcr; TrueTypeTable *head=0, *hhea=0, *maxp=0, *cvt=0, *prep=0, *glyf=0, *fpgm=0, *cmap=0, *name=0, *post = 0, *os2 = 0; - sal_uInt8 *p; int i; int res; @@ -2173,7 +2193,7 @@ int CreateTTFromTTGlyphs(TrueTypeFont *ttf, maxp = TrueTypeTableNew_maxp(getTable(ttf, O_maxp), getTableSize(ttf, O_maxp)); /** hhea **/ - p = getTable(ttf, O_hhea); + const sal_uInt8* p = getTable(ttf, O_hhea); if (p) { hhea = TrueTypeTableNew_hhea(GetUInt16(p, 4, 1), GetUInt16(p, 6, 1), GetUInt16(p, 8, 1), GetUInt16(p, 18, 1), GetUInt16(p, 20, 1)); } else { @@ -2356,12 +2376,10 @@ int CreateT42FromTTGlyphs(TrueTypeFont *ttf, { TrueTypeCreator *ttcr; TrueTypeTable *head=0, *hhea=0, *maxp=0, *cvt=0, *prep=0, *glyf=0, *fpgm=0; - sal_uInt8 *p; int i; int res; sal_uInt32 ver, rev; - sal_uInt8 *headP; sal_uInt8 *sfntP; sal_uInt32 sfntLen; @@ -2374,7 +2392,8 @@ int CreateT42FromTTGlyphs(TrueTypeFont *ttf, TrueTypeCreatorNewEmpty(T_true, &ttcr); /* head */ - headP = p = getTable(ttf, O_head); + const sal_uInt8* p = getTable(ttf, O_head); + const sal_uInt8* headP = p; assert(p != 0); head = TrueTypeTableNew_head(GetUInt32(p, 4, 1), GetUInt16(p, 16, 1), GetUInt16(p, 18, 1), p+20, GetUInt16(p, 44, 1), GetUInt16(p, 46, 1), GetInt16(p, 48, 1)); ver = GetUInt32(p, 0, 1); @@ -2551,13 +2570,21 @@ int GetTTGlyphCount( TrueTypeFont* ttf ) return ttf->nglyphs; } +bool GetSfntTable( TrueTypeFont* ttf, int nSubtableIndex, + const sal_uInt8** ppRawBytes, int* pRawLength ) +{ + if( (nSubtableIndex < 0) || (nSubtableIndex >= NUM_TAGS) ) + return false; + *pRawLength = ttf->tlens[ nSubtableIndex ]; + *ppRawBytes = ttf->tables[ nSubtableIndex ]; + bool bOk = (*pRawLength > 0) && (ppRawBytes != NULL); + return bOk; +} + TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *glyphArray, int nGlyphs, int mode) { - sal_uInt8* pTable; - int i; - sal_uInt16 glyphID; + const sal_uInt8* pTable; sal_uInt32 n; - int UPEm = ttf->unitsPerEm; int nTableSize; if (mode == 0) { @@ -2576,9 +2603,10 @@ TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *gly TTSimpleGlyphMetrics* res = (TTSimpleGlyphMetrics*)calloc(nGlyphs, sizeof(TTSimpleGlyphMetrics)); assert(res != 0); - for (i=0; iunitsPerEm; + for( int i = 0; i < nGlyphs; ++i) { int nAdvOffset, nLsbOffset; - glyphID = glyphArray[i]; + sal_uInt16 glyphID = glyphArray[i]; if (glyphID < n) { nAdvOffset = 4 * glyphID; @@ -2629,7 +2657,6 @@ TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont * ttf, sal_uInt16 firs void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info) { - sal_uInt8 *table; int UPEm = ttf->unitsPerEm; memset(info, 0, sizeof(TTGlobalFontInfo)); @@ -2641,7 +2668,7 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info) info->psname = ttf->psname; info->symbolEncoded = (ttf->cmapType == CMAP_MS_Symbol); - table = getTable(ttf, O_OS2); + const sal_uInt8* table = getTable(ttf, O_OS2); if (table) { info->weight = GetUInt16(table, 4, 1); info->width = GetUInt16(table, 6, 1); @@ -2670,6 +2697,8 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info) } memcpy(info->panose, table + 32, 10); info->typeFlags = GetUInt16( table, 8, 1 ); + if( getTable(ttf, O_CFF) ) + info->typeFlags |= TYPEFLAG_PS_OPENTYPE; } table = getTable(ttf, O_post); @@ -2718,17 +2747,15 @@ void KernGlyphs(TrueTypeFont *ttf, sal_uInt16 *glyphs, int nglyphs, int wmode, K GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID) { - sal_uInt8 *glyf = getTable(ttf, O_glyf); - sal_uInt8 *hmtx = getTable(ttf, O_hmtx); - sal_uInt32 length; - ControlPoint *cp; + const sal_uInt8* glyf = getTable(ttf, O_glyf); + const sal_uInt8* hmtx = getTable(ttf, O_hmtx); int i, n, m; if( glyphID >= ttf->nglyphs ) return 0; /* #127161# check the glyph offsets */ - length = getTableSize( ttf, O_glyf ); + sal_uInt32 length = getTableSize( ttf, O_glyf ); if( length < ttf->goffsets[ glyphID+1 ] ) return 0; @@ -2737,7 +2764,7 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID) GlyphData* d = (GlyphData*)malloc(sizeof(GlyphData)); assert(d != 0); if (length > 0) { - sal_uInt8 *srcptr = glyf + ttf->goffsets[glyphID]; + const sal_uInt8* srcptr = glyf + ttf->goffsets[glyphID]; d->ptr = (sal_uInt8*)malloc((length + 1) & ~1); assert(d->ptr != 0); memcpy( d->ptr, srcptr, length ); d->compflag = (GetInt16( srcptr, 0, 1 ) < 0); @@ -2750,6 +2777,7 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID) d->nbytes = (sal_uInt16)((length + 1) & ~1); /* now calculate npoints and ncontours */ + ControlPoint *cp; n = GetTTGlyphPoints(ttf, glyphID, &cp); if (n != -1) { m = 0; @@ -2778,18 +2806,16 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID) int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr) { - sal_uInt8 *table = getTable(ttf, O_name); + const sal_uInt8* table = getTable(ttf, O_name); int nTableSize = getTableSize(ttf, O_name ); sal_uInt16 n = GetUInt16(table, 2, 1); - sal_uInt8* rec_string = NULL; int nStrBase = GetUInt16(table, 4, 1); - NameRecord *rec; int i; *nr = 0; if (n == 0) return 0; - rec = (NameRecord*)calloc(n, sizeof(NameRecord)); + NameRecord* rec = (NameRecord*)calloc(n, sizeof(NameRecord)); for (i = 0; i < n; i++) { int nStrOffset = GetUInt16(table + 6, 10 + 12 * i, 1); @@ -2805,7 +2831,7 @@ int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr) continue; } - rec_string = table + nStrBase + nStrOffset; + const sal_uInt8* rec_string = table + nStrBase + nStrOffset; // sanity check if( rec_string > (sal_uInt8*)ttf->ptr && rec_string < ((sal_uInt8*)ttf->ptr + ttf->fsize - rec[i].slen ) ) { diff --git a/vcl/source/fontsubset/ttcr.cxx b/vcl/source/fontsubset/ttcr.cxx index 7f9ae796142b..ebd00c1e7c50 100644 --- a/vcl/source/fontsubset/ttcr.cxx +++ b/vcl/source/fontsubset/ttcr.cxx @@ -32,10 +32,6 @@ * */ -#include -#include -#include - #if OSL_DEBUG_LEVEL == 0 # ifndef NDEBUG # define NDEBUG @@ -45,6 +41,7 @@ #include "ttcr.hxx" #include "list.h" +#include "string.h" @@ -96,7 +93,7 @@ _inline sal_uInt32 mkTag(sal_uInt8 a, sal_uInt8 b, sal_uInt8 c, sal_uInt8 d) { } /*- Data access macros for data stored in big-endian or little-endian format */ -_inline sal_Int16 GetInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian) +_inline sal_Int16 GetInt16( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian) { sal_Int16 t; assert(ptr != 0); @@ -110,7 +107,7 @@ _inline sal_Int16 GetInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendia return t; } -_inline sal_uInt16 GetUInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian) +_inline sal_uInt16 GetUInt16( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian) { sal_uInt16 t; assert(ptr != 0); @@ -124,7 +121,7 @@ _inline sal_uInt16 GetUInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigend return t; } -_inline sal_Int32 GetInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian) +_inline sal_Int32 GetInt32( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian) { sal_Int32 t; assert(ptr != 0); @@ -140,7 +137,7 @@ _inline sal_Int32 GetInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendi return t; } -_inline sal_uInt32 GetUInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian) +_inline sal_uInt32 GetUInt32( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian) { sal_uInt32 t; assert(ptr != 0); @@ -968,7 +965,7 @@ static struct { TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag, sal_uInt32 nbytes, - sal_uInt8 *ptr) + const sal_uInt8* ptr) { TrueTypeTable* table = (TrueTypeTable*)smalloc(sizeof(TrueTypeTable)); tdata_generic* pdata = (tdata_generic*)smalloc(sizeof(tdata_generic)); @@ -991,7 +988,7 @@ TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag, TrueTypeTable *TrueTypeTableNew_head(sal_uInt32 fontRevision, sal_uInt16 flags, sal_uInt16 unitsPerEm, - sal_uInt8 *created, + const sal_uInt8* created, sal_uInt16 macStyle, sal_uInt16 lowestRecPPEM, sal_Int16 fontDirectionHint) @@ -1064,7 +1061,7 @@ TrueTypeTable *TrueTypeTableNew_loca(void) return table; } -TrueTypeTable *TrueTypeTableNew_maxp(sal_uInt8 *maxp, int size) +TrueTypeTable *TrueTypeTableNew_maxp( const sal_uInt8* maxp, int size) { TrueTypeTable* table = (TrueTypeTable*)smalloc(sizeof(TrueTypeTable)); table->data = ttmalloc(TABLESIZE_maxp); diff --git a/vcl/source/fontsubset/ttcr.hxx b/vcl/source/fontsubset/ttcr.hxx index 5b47f09d552a..04c617efc944 100644 --- a/vcl/source/fontsubset/ttcr.hxx +++ b/vcl/source/fontsubset/ttcr.hxx @@ -138,7 +138,7 @@ namespace vcl */ TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag, sal_uInt32 nbytes, - sal_uInt8 *ptr); + const sal_uInt8* ptr); /** * Creates a new 'head' table for a TrueType font. @@ -149,7 +149,7 @@ namespace vcl TrueTypeTable *TrueTypeTableNew_head(sal_uInt32 fontRevision, sal_uInt16 flags, sal_uInt16 unitsPerEm, - sal_uInt8 *created, + const sal_uInt8 *created, sal_uInt16 macStyle, sal_uInt16 lowestRecPPEM, sal_Int16 fontDirectionHint); @@ -177,7 +177,7 @@ namespace vcl * size specifies the size of existing maxp table for * error-checking purposes */ - TrueTypeTable *TrueTypeTableNew_maxp(sal_uInt8 *maxp, int size); + TrueTypeTable *TrueTypeTableNew_maxp( const sal_uInt8* maxp, int size); /** * Creates a new empty 'glyf' table. diff --git a/vcl/source/fontsubset/u2big5.inc b/vcl/source/fontsubset/u2big5.inc deleted file mode 100644 index 951b65cffc25..000000000000 --- a/vcl/source/fontsubset/u2big5.inc +++ /dev/null @@ -1,1756 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// TODO: use generic RTL_TEXTENCODING_BIG5 to get rid of this file - -sal_uInt16pair xlat_1_3[13798] = { - {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027}, - {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F}, - {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037}, - {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F}, - {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047}, - {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F}, - {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057}, - {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F}, - {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067}, - {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F}, - {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077}, - {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A2, 0xA246}, - {0x00A3, 0xA247},{0x00A5, 0xA244},{0x00A7, 0xA1B1},{0x00B0, 0xA258},{0x00B1, 0xA1D3},{0x00B7, 0xA150},{0x00D7, 0xA1D1},{0x00F7, 0xA1D2}, - {0x02C7, 0xA3BE},{0x02C9, 0xA3BC},{0x02CA, 0xA3BD},{0x02CB, 0xA3BF},{0x02D9, 0xA3BB},{0x0391, 0xA344},{0x0392, 0xA345},{0x0393, 0xA346}, - {0x0394, 0xA347},{0x0395, 0xA348},{0x0396, 0xA349},{0x0397, 0xA34A},{0x0398, 0xA34B},{0x0399, 0xA34C},{0x039A, 0xA34D},{0x039B, 0xA34E}, - {0x039C, 0xA34F},{0x039D, 0xA350},{0x039E, 0xA351},{0x039F, 0xA352},{0x03A0, 0xA353},{0x03A1, 0xA354},{0x03A3, 0xA355},{0x03A4, 0xA356}, - {0x03A5, 0xA357},{0x03A6, 0xA358},{0x03A7, 0xA359},{0x03A8, 0xA35A},{0x03A9, 0xA35B},{0x03B1, 0xA35C},{0x03B2, 0xA35D},{0x03B3, 0xA35E}, - {0x03B4, 0xA35F},{0x03B5, 0xA360},{0x03B6, 0xA361},{0x03B7, 0xA362},{0x03B8, 0xA363},{0x03B9, 0xA364},{0x03BA, 0xA365},{0x03BB, 0xA366}, - {0x03BC, 0xA367},{0x03BD, 0xA368},{0x03BE, 0xA369},{0x03BF, 0xA36A},{0x03C0, 0xA36B},{0x03C1, 0xA36C},{0x03C3, 0xA36D},{0x03C4, 0xA36E}, - {0x03C5, 0xA36F},{0x03C6, 0xA370},{0x03C7, 0xA371},{0x03C8, 0xA372},{0x03C9, 0xA373},{0x0401, 0xC7B3},{0x0414, 0xC7B1},{0x0415, 0xC7B2}, - {0x0416, 0xC7B4},{0x0417, 0xC7B5},{0x0418, 0xC7B6},{0x0419, 0xC7B7},{0x041A, 0xC7B8},{0x041B, 0xC7B9},{0x041C, 0xC7BA},{0x0423, 0xC7BB}, - {0x0424, 0xC7BC},{0x0425, 0xC7BD},{0x0426, 0xC7BE},{0x0427, 0xC7BF},{0x0428, 0xC7C0},{0x0429, 0xC7C1},{0x042A, 0xC7C2},{0x042B, 0xC7C3}, - {0x042C, 0xC7C4},{0x042D, 0xC7C5},{0x042E, 0xC7C6},{0x042F, 0xC7C7},{0x0430, 0xC7C8},{0x0431, 0xC7C9},{0x0432, 0xC7CA},{0x0433, 0xC7CB}, - {0x0434, 0xC7CC},{0x0435, 0xC7CD},{0x0436, 0xC7CF},{0x0437, 0xC7D0},{0x0438, 0xC7D1},{0x0439, 0xC7D2},{0x043A, 0xC7D3},{0x043B, 0xC7D4}, - {0x043C, 0xC7D5},{0x043D, 0xC7D6},{0x043E, 0xC7D7},{0x043F, 0xC7D8},{0x0440, 0xC7D9},{0x0441, 0xC7DA},{0x0442, 0xC7DB},{0x0443, 0xC7DC}, - {0x0444, 0xC7DD},{0x0445, 0xC7DE},{0x0446, 0xC7DF},{0x0447, 0xC7E0},{0x0448, 0xC7E1},{0x0449, 0xC7E2},{0x044A, 0xC7E3},{0x044B, 0xC7E4}, - {0x044C, 0xC7E5},{0x044D, 0xC7E6},{0x044E, 0xC7E7},{0x044F, 0xC7E8},{0x0451, 0xC7CE},{0x2013, 0xA156},{0x2014, 0xA158},{0x2018, 0xA1A5}, - {0x2019, 0xA1A6},{0x201C, 0xA1A7},{0x201D, 0xA1A8},{0x2022, 0xA145},{0x2025, 0xA14C},{0x2026, 0xA14B},{0x2032, 0xA1AC},{0x2035, 0xA1AB}, - {0x203B, 0xA1B0},{0x203E, 0xA1C2},{0x2103, 0xA24A},{0x2105, 0xA1C1},{0x2109, 0xA24B},{0x2160, 0xA2B9},{0x2161, 0xA2BA},{0x2162, 0xA2BB}, - {0x2163, 0xA2BC},{0x2164, 0xA2BD},{0x2165, 0xA2BE},{0x2166, 0xA2BF},{0x2167, 0xA2C0},{0x2168, 0xA2C1},{0x2169, 0xA2C2},{0x2190, 0xA1F6}, - {0x2191, 0xA1F4},{0x2192, 0xA1F7},{0x2193, 0xA1F5},{0x2196, 0xA1F8},{0x2197, 0xA1F9},{0x2198, 0xA1FB},{0x2199, 0xA1FA},{0x221A, 0xA1D4}, - {0x221E, 0xA1DB},{0x221F, 0xA1E8},{0x2220, 0xA1E7},{0x2223, 0xA1FD},{0x2225, 0xA1FC},{0x2229, 0xA1E4},{0x222A, 0xA1E5},{0x222B, 0xA1EC}, - {0x222E, 0xA1ED},{0x2234, 0xA1EF},{0x2235, 0xA1EE},{0x223C, 0xA1E3},{0x2252, 0xA1DC},{0x2260, 0xA1DA},{0x2261, 0xA1DD},{0x2266, 0xA1D8}, - {0x2267, 0xA1D9},{0x22A5, 0xA1E6},{0x22BF, 0xA1E9},{0x2460, 0xC7E9},{0x2461, 0xC7EA},{0x2462, 0xC7EB},{0x2463, 0xC7EC},{0x2464, 0xC7ED}, - {0x2465, 0xC7EE},{0x2466, 0xC7EF},{0x2467, 0xC7F0},{0x2468, 0xC7F1},{0x2469, 0xC7F2},{0x2474, 0xC7F3},{0x2475, 0xC7F4},{0x2476, 0xC7F5}, - {0x2477, 0xC7F6},{0x2478, 0xC7F7},{0x2479, 0xC7F8},{0x247A, 0xC7F9},{0x247B, 0xC7FA},{0x247C, 0xC7FB},{0x247D, 0xC7FC},{0x2500, 0xA277}, - {0x2502, 0xA278},{0x250C, 0xA27A},{0x2510, 0xA27B},{0x2514, 0xA27C},{0x2518, 0xA27D},{0x251C, 0xA275},{0x2524, 0xA274},{0x252C, 0xA273}, - {0x2534, 0xA272},{0x253C, 0xA271},{0x2550, 0xA2A4},{0x255E, 0xA2A5},{0x2561, 0xA2A7},{0x256A, 0xA2A6},{0x256D, 0xA27E},{0x256E, 0xA2A1}, - {0x256F, 0xA2A3},{0x2570, 0xA2A2},{0x2571, 0xA2AC},{0x2572, 0xA2AD},{0x2573, 0xA2AE},{0x2581, 0xA262},{0x2582, 0xA263},{0x2583, 0xA264}, - {0x2584, 0xA265},{0x2585, 0xA266},{0x2586, 0xA267},{0x2587, 0xA268},{0x2588, 0xA269},{0x2589, 0xA270},{0x258A, 0xA26F},{0x258B, 0xA26E}, - {0x258C, 0xA26D},{0x258D, 0xA26C},{0x258E, 0xA26B},{0x258F, 0xA26A},{0x2594, 0xA276},{0x2595, 0xA279},{0x25A0, 0xA1BD},{0x25A1, 0xA1BC}, - {0x25B2, 0xA1B6},{0x25B3, 0xA1B5},{0x25BC, 0xA1BF},{0x25BD, 0xA1BE},{0x25C6, 0xA1BB},{0x25C7, 0xA1BA},{0x25CB, 0xA1B3},{0x25CE, 0xA1B7}, - {0x25CF, 0xA1B4},{0x25E2, 0xA2A8},{0x25E3, 0xA2A9},{0x25E4, 0xA2AB},{0x25E5, 0xA2AA},{0x2605, 0xA1B9},{0x2606, 0xA1B8},{0x2609, 0xA1F3}, - {0x2640, 0xA1F0},{0x2641, 0xA1F2},{0x2642, 0xA1F1},{0x3000, 0xA140},{0x3001, 0xA142},{0x3002, 0xA143},{0x3003, 0xA1B2},{0x3005, 0xC6A4}, - {0x3008, 0xA171},{0x3009, 0xA172},{0x300A, 0xA16D},{0x300B, 0xA16E},{0x300C, 0xA175},{0x300D, 0xA176},{0x300E, 0xA179},{0x300F, 0xA17A}, - {0x3010, 0xA169},{0x3011, 0xA16A},{0x3012, 0xA245},{0x3014, 0xA165},{0x3015, 0xA166},{0x301D, 0xA1A9},{0x301E, 0xA1AA},{0x3021, 0xA2C3}, - {0x3022, 0xA2C4},{0x3023, 0xA2C5},{0x3024, 0xA2C6},{0x3025, 0xA2C7},{0x3026, 0xA2C8},{0x3027, 0xA2C9},{0x3028, 0xA2CA},{0x3029, 0xA2CB}, - {0x3041, 0xC6A5},{0x3042, 0xC6A6},{0x3043, 0xC6A7},{0x3044, 0xC6A8},{0x3045, 0xC6A9},{0x3046, 0xC6AA},{0x3047, 0xC6AB},{0x3048, 0xC6AC}, - {0x3049, 0xC6AD},{0x304A, 0xC6AE},{0x304B, 0xC6AF},{0x304C, 0xC6B0},{0x304D, 0xC6B1},{0x304E, 0xC6B2},{0x304F, 0xC6B3},{0x3050, 0xC6B4}, - {0x3051, 0xC6B5},{0x3052, 0xC6B6},{0x3053, 0xC6B7},{0x3054, 0xC6B8},{0x3055, 0xC6B9},{0x3056, 0xC6BA},{0x3057, 0xC6BB},{0x3058, 0xC6BC}, - {0x3059, 0xC6BD},{0x305A, 0xC6BE},{0x305B, 0xC6BF},{0x305C, 0xC6C0},{0x305D, 0xC6C1},{0x305E, 0xC6C2},{0x305F, 0xC6C3},{0x3060, 0xC6C4}, - {0x3061, 0xC6C5},{0x3062, 0xC6C6},{0x3063, 0xC6C7},{0x3064, 0xC6C8},{0x3065, 0xC6C9},{0x3066, 0xC6CA},{0x3067, 0xC6CB},{0x3068, 0xC6CC}, - {0x3069, 0xC6CD},{0x306A, 0xC6CE},{0x306B, 0xC6CF},{0x306C, 0xC6D0},{0x306D, 0xC6D1},{0x306E, 0xC6D2},{0x306F, 0xC6D3},{0x3070, 0xC6D4}, - {0x3071, 0xC6D5},{0x3072, 0xC6D6},{0x3073, 0xC6D7},{0x3074, 0xC6D8},{0x3075, 0xC6D9},{0x3076, 0xC6DA},{0x3077, 0xC6DB},{0x3078, 0xC6DC}, - {0x3079, 0xC6DD},{0x307A, 0xC6DE},{0x307B, 0xC6DF},{0x307C, 0xC6E0},{0x307D, 0xC6E1},{0x307E, 0xC6E2},{0x307F, 0xC6E3},{0x3080, 0xC6E4}, - {0x3081, 0xC6E5},{0x3082, 0xC6E6},{0x3083, 0xC6E7},{0x3084, 0xC6E8},{0x3085, 0xC6E9},{0x3086, 0xC6EA},{0x3087, 0xC6EB},{0x3088, 0xC6EC}, - {0x3089, 0xC6ED},{0x308A, 0xC6EE},{0x308B, 0xC6EF},{0x308C, 0xC6F0},{0x308D, 0xC6F1},{0x308E, 0xC6F2},{0x308F, 0xC6F3},{0x3090, 0xC6F4}, - {0x3091, 0xC6F5},{0x3092, 0xC6F6},{0x3093, 0xC6F7},{0x309D, 0xC6A2},{0x309E, 0xC6A3},{0x30A1, 0xC6F8},{0x30A2, 0xC6F9},{0x30A3, 0xC6FA}, - {0x30A4, 0xC6FB},{0x30A5, 0xC6FC},{0x30A6, 0xC6FD},{0x30A7, 0xC6FE},{0x30A8, 0xC740},{0x30A9, 0xC741},{0x30AA, 0xC742},{0x30AB, 0xC743}, - {0x30AC, 0xC744},{0x30AD, 0xC745},{0x30AE, 0xC746},{0x30AF, 0xC747},{0x30B0, 0xC748},{0x30B1, 0xC749},{0x30B2, 0xC74A},{0x30B3, 0xC74B}, - {0x30B4, 0xC74C},{0x30B5, 0xC74D},{0x30B6, 0xC74E},{0x30B7, 0xC74F},{0x30B8, 0xC750},{0x30B9, 0xC751},{0x30BA, 0xC752},{0x30BB, 0xC753}, - {0x30BC, 0xC754},{0x30BD, 0xC755},{0x30BE, 0xC756},{0x30BF, 0xC757},{0x30C0, 0xC758},{0x30C1, 0xC759},{0x30C2, 0xC75A},{0x30C3, 0xC75B}, - {0x30C4, 0xC75C},{0x30C5, 0xC75D},{0x30C6, 0xC75E},{0x30C7, 0xC75F},{0x30C8, 0xC760},{0x30C9, 0xC761},{0x30CA, 0xC762},{0x30CB, 0xC763}, - {0x30CC, 0xC764},{0x30CD, 0xC765},{0x30CE, 0xC766},{0x30CF, 0xC767},{0x30D0, 0xC768},{0x30D1, 0xC769},{0x30D2, 0xC76A},{0x30D3, 0xC76B}, - {0x30D4, 0xC76C},{0x30D5, 0xC76D},{0x30D6, 0xC76E},{0x30D7, 0xC76F},{0x30D8, 0xC770},{0x30D9, 0xC771},{0x30DA, 0xC772},{0x30DB, 0xC773}, - {0x30DC, 0xC774},{0x30DD, 0xC775},{0x30DE, 0xC776},{0x30DF, 0xC777},{0x30E0, 0xC778},{0x30E1, 0xC779},{0x30E2, 0xC77A},{0x30E3, 0xC77B}, - {0x30E4, 0xC77C},{0x30E5, 0xC77D},{0x30E6, 0xC77E},{0x30E7, 0xC7A1},{0x30E8, 0xC7A2},{0x30E9, 0xC7A3},{0x30EA, 0xC7A4},{0x30EB, 0xC7A5}, - {0x30EC, 0xC7A6},{0x30ED, 0xC7A7},{0x30EE, 0xC7A8},{0x30EF, 0xC7A9},{0x30F0, 0xC7AA},{0x30F1, 0xC7AB},{0x30F2, 0xC7AC},{0x30F3, 0xC7AD}, - {0x30F4, 0xC7AE},{0x30F5, 0xC7AF},{0x30F6, 0xC7B0},{0x30FE, 0xC6A1},{0x3105, 0xA374},{0x3106, 0xA375},{0x3107, 0xA376},{0x3108, 0xA377}, - {0x3109, 0xA378},{0x310A, 0xA379},{0x310B, 0xA37A},{0x310C, 0xA37B},{0x310D, 0xA37C},{0x310E, 0xA37D},{0x310F, 0xA37E},{0x3110, 0xA3A1}, - {0x3111, 0xA3A2},{0x3112, 0xA3A3},{0x3113, 0xA3A4},{0x3114, 0xA3A5},{0x3115, 0xA3A6},{0x3116, 0xA3A7},{0x3117, 0xA3A8},{0x3118, 0xA3A9}, - {0x3119, 0xA3AA},{0x311A, 0xA3AB},{0x311B, 0xA3AC},{0x311C, 0xA3AD},{0x311D, 0xA3AE},{0x311E, 0xA3AF},{0x311F, 0xA3B0},{0x3120, 0xA3B1}, - {0x3121, 0xA3B2},{0x3122, 0xA3B3},{0x3123, 0xA3B4},{0x3124, 0xA3B5},{0x3125, 0xA3B6},{0x3126, 0xA3B7},{0x3127, 0xA3B8},{0x3128, 0xA3B9}, - {0x3129, 0xA3BA},{0x32A3, 0xA1C0},{0x338E, 0xA255},{0x338F, 0xA256},{0x339C, 0xA250},{0x339D, 0xA251},{0x339E, 0xA252},{0x33A1, 0xA254}, - {0x33C4, 0xA257},{0x33CE, 0xA253},{0x33D1, 0xA1EB},{0x33D2, 0xA1EA},{0x33D5, 0xA24F},{0x4E00, 0xA440},{0x4E01, 0xA442},{0x4E03, 0xA443}, - {0x4E07, 0xC945},{0x4E08, 0xA456},{0x4E09, 0xA454},{0x4E0A, 0xA457},{0x4E0B, 0xA455},{0x4E0C, 0xC946},{0x4E0D, 0xA4A3},{0x4E0E, 0xC94F}, - {0x4E0F, 0xC94D},{0x4E10, 0xA4A2},{0x4E11, 0xA4A1},{0x4E14, 0xA542},{0x4E15, 0xA541},{0x4E16, 0xA540},{0x4E18, 0xA543},{0x4E19, 0xA4FE}, - {0x4E1E, 0xA5E0},{0x4E1F, 0xA5E1},{0x4E26, 0xA8C3},{0x4E2B, 0xA458},{0x4E2D, 0xA4A4},{0x4E2E, 0xC950},{0x4E30, 0xA4A5},{0x4E31, 0xC963}, - {0x4E32, 0xA6EA},{0x4E33, 0xCBB1},{0x4E38, 0xA459},{0x4E39, 0xA4A6},{0x4E3B, 0xA544},{0x4E3C, 0xC964},{0x4E42, 0xC940},{0x4E43, 0xA444}, - {0x4E45, 0xA45B},{0x4E47, 0xC947},{0x4E48, 0xA45C},{0x4E4B, 0xA4A7},{0x4E4D, 0xA545},{0x4E4E, 0xA547},{0x4E4F, 0xA546},{0x4E52, 0xA5E2}, - {0x4E53, 0xA5E3},{0x4E56, 0xA8C4},{0x4E58, 0xADBC},{0x4E59, 0xA441},{0x4E5C, 0xC941},{0x4E5D, 0xA445},{0x4E5E, 0xA45E},{0x4E5F, 0xA45D}, - {0x4E69, 0xA5E4},{0x4E73, 0xA8C5},{0x4E7E, 0xB0AE},{0x4E7F, 0xD44B},{0x4E82, 0xB6C3},{0x4E83, 0xDCB1},{0x4E84, 0xDCB2},{0x4E86, 0xA446}, - {0x4E88, 0xA4A9},{0x4E8B, 0xA8C6},{0x4E8C, 0xA447},{0x4E8D, 0xC948},{0x4E8E, 0xA45F},{0x4E91, 0xA4AA},{0x4E92, 0xA4AC},{0x4E93, 0xC951}, - {0x4E94, 0xA4AD},{0x4E95, 0xA4AB},{0x4E99, 0xA5E5},{0x4E9B, 0xA8C7},{0x4E9E, 0xA8C8},{0x4E9F, 0xAB45},{0x4EA1, 0xA460},{0x4EA2, 0xA4AE}, - {0x4EA4, 0xA5E6},{0x4EA5, 0xA5E8},{0x4EA6, 0xA5E7},{0x4EA8, 0xA6EB},{0x4EAB, 0xA8C9},{0x4EAC, 0xA8CA},{0x4EAD, 0xAB46},{0x4EAE, 0xAB47}, - {0x4EB3, 0xADBD},{0x4EB6, 0xDCB3},{0x4EB9, 0xF6D6},{0x4EBA, 0xA448},{0x4EC0, 0xA4B0},{0x4EC1, 0xA4AF},{0x4EC2, 0xC952},{0x4EC3, 0xA4B1}, - {0x4EC4, 0xA4B7},{0x4EC6, 0xA4B2},{0x4EC7, 0xA4B3},{0x4EC8, 0xC954},{0x4EC9, 0xC953},{0x4ECA, 0xA4B5},{0x4ECB, 0xA4B6},{0x4ECD, 0xA4B4}, - {0x4ED4, 0xA54A},{0x4ED5, 0xA54B},{0x4ED6, 0xA54C},{0x4ED7, 0xA54D},{0x4ED8, 0xA549},{0x4ED9, 0xA550},{0x4EDA, 0xC96A},{0x4EDC, 0xC966}, - {0x4EDD, 0xC969},{0x4EDE, 0xA551},{0x4EDF, 0xA561},{0x4EE1, 0xC968},{0x4EE3, 0xA54E},{0x4EE4, 0xA54F},{0x4EE5, 0xA548},{0x4EE8, 0xC965}, - {0x4EE9, 0xC967},{0x4EF0, 0xA5F5},{0x4EF1, 0xC9B0},{0x4EF2, 0xA5F2},{0x4EF3, 0xA5F6},{0x4EF4, 0xC9BA},{0x4EF5, 0xC9AE},{0x4EF6, 0xA5F3}, - {0x4EF7, 0xC9B2},{0x4EFB, 0xA5F4},{0x4EFD, 0xA5F7},{0x4EFF, 0xA5E9},{0x4F00, 0xC9B1},{0x4F01, 0xA5F8},{0x4F02, 0xC9B5},{0x4F04, 0xC9B9}, - {0x4F05, 0xC9B6},{0x4F08, 0xC9B3},{0x4F09, 0xA5EA},{0x4F0A, 0xA5EC},{0x4F0B, 0xA5F9},{0x4F0D, 0xA5EE},{0x4F0E, 0xC9AB},{0x4F0F, 0xA5F1}, - {0x4F10, 0xA5EF},{0x4F11, 0xA5F0},{0x4F12, 0xC9BB},{0x4F13, 0xC9B8},{0x4F14, 0xC9AF},{0x4F15, 0xA5ED},{0x4F18, 0xC9AC},{0x4F19, 0xA5EB}, - {0x4F1D, 0xC9B4},{0x4F22, 0xC9B7},{0x4F2C, 0xC9AD},{0x4F2D, 0xCA66},{0x4F2F, 0xA742},{0x4F30, 0xA6F4},{0x4F33, 0xCA67},{0x4F34, 0xA6F1}, - {0x4F36, 0xA744},{0x4F38, 0xA6F9},{0x4F3A, 0xA6F8},{0x4F3B, 0xCA5B},{0x4F3C, 0xA6FC},{0x4F3D, 0xA6F7},{0x4F3E, 0xCA60},{0x4F3F, 0xCA68}, - {0x4F41, 0xCA64},{0x4F43, 0xA6FA},{0x4F46, 0xA6FD},{0x4F47, 0xA6EE},{0x4F48, 0xA747},{0x4F49, 0xCA5D},{0x4F4C, 0xCBBD},{0x4F4D, 0xA6EC}, - {0x4F4E, 0xA743},{0x4F4F, 0xA6ED},{0x4F50, 0xA6F5},{0x4F51, 0xA6F6},{0x4F52, 0xCA62},{0x4F53, 0xCA5E},{0x4F54, 0xA6FB},{0x4F55, 0xA6F3}, - {0x4F56, 0xCA5A},{0x4F57, 0xA6EF},{0x4F58, 0xCA65},{0x4F59, 0xA745},{0x4F5A, 0xA748},{0x4F5B, 0xA6F2},{0x4F5C, 0xA740},{0x4F5D, 0xA746}, - {0x4F5E, 0xA6F0},{0x4F5F, 0xCA63},{0x4F60, 0xA741},{0x4F61, 0xCA69},{0x4F62, 0xCA5C},{0x4F63, 0xA6FE},{0x4F64, 0xCA5F},{0x4F67, 0xCA61}, - {0x4F69, 0xA8D8},{0x4F6A, 0xCBBF},{0x4F6B, 0xCBCB},{0x4F6C, 0xA8D0},{0x4F6E, 0xCBCC},{0x4F6F, 0xA8CB},{0x4F70, 0xA8D5},{0x4F73, 0xA8CE}, - {0x4F74, 0xCBB9},{0x4F75, 0xA8D6},{0x4F76, 0xCBB8},{0x4F77, 0xCBBC},{0x4F78, 0xCBC3},{0x4F79, 0xCBC1},{0x4F7A, 0xA8DE},{0x4F7B, 0xA8D9}, - {0x4F7C, 0xCBB3},{0x4F7D, 0xCBB5},{0x4F7E, 0xA8DB},{0x4F7F, 0xA8CF},{0x4F80, 0xCBB6},{0x4F81, 0xCBC2},{0x4F82, 0xCBC9},{0x4F83, 0xA8D4}, - {0x4F84, 0xCBBB},{0x4F85, 0xCBB4},{0x4F86, 0xA8D3},{0x4F87, 0xCBB7},{0x4F88, 0xA8D7},{0x4F89, 0xCBBA},{0x4F8B, 0xA8D2},{0x4F8D, 0xA8CD}, - {0x4F8F, 0xA8DC},{0x4F90, 0xCBC4},{0x4F91, 0xA8DD},{0x4F92, 0xCBC8},{0x4F94, 0xCBC6},{0x4F95, 0xCBCA},{0x4F96, 0xA8DA},{0x4F97, 0xCBBE}, - {0x4F98, 0xCBB2},{0x4F9A, 0xCBC0},{0x4F9B, 0xA8D1},{0x4F9C, 0xCBC5},{0x4F9D, 0xA8CC},{0x4F9E, 0xCBC7},{0x4FAE, 0xAB56},{0x4FAF, 0xAB4A}, - {0x4FB2, 0xCDE0},{0x4FB3, 0xCDE8},{0x4FB5, 0xAB49},{0x4FB6, 0xAB51},{0x4FB7, 0xAB5D},{0x4FB9, 0xCDEE},{0x4FBA, 0xCDEC},{0x4FBB, 0xCDE7}, - {0x4FBF, 0xAB4B},{0x4FC0, 0xCDED},{0x4FC1, 0xCDE3},{0x4FC2, 0xAB59},{0x4FC3, 0xAB50},{0x4FC4, 0xAB58},{0x4FC5, 0xCDDE},{0x4FC7, 0xCDEA}, - {0x4FC9, 0xCDE1},{0x4FCA, 0xAB54},{0x4FCB, 0xCDE2},{0x4FCD, 0xCDDD},{0x4FCE, 0xAB5B},{0x4FCF, 0xAB4E},{0x4FD0, 0xAB57},{0x4FD1, 0xAB4D}, - {0x4FD3, 0xCDDF},{0x4FD4, 0xCDE4},{0x4FD6, 0xCDEB},{0x4FD7, 0xAB55},{0x4FD8, 0xAB52},{0x4FD9, 0xCDE6},{0x4FDA, 0xAB5A},{0x4FDB, 0xCDE9}, - {0x4FDC, 0xCDE5},{0x4FDD, 0xAB4F},{0x4FDE, 0xAB5C},{0x4FDF, 0xAB53},{0x4FE0, 0xAB4C},{0x4FE1, 0xAB48},{0x4FEC, 0xCDEF},{0x4FEE, 0xADD7}, - {0x4FEF, 0xADC1},{0x4FF1, 0xADD1},{0x4FF3, 0xADD6},{0x4FF4, 0xD0D0},{0x4FF5, 0xD0CF},{0x4FF6, 0xD0D4},{0x4FF7, 0xD0D5},{0x4FF8, 0xADC4}, - {0x4FFA, 0xADCD},{0x4FFE, 0xADDA},{0x5000, 0xADCE},{0x5005, 0xD0C9},{0x5006, 0xADC7},{0x5007, 0xD0CA},{0x5009, 0xADDC},{0x500B, 0xADD3}, - {0x500C, 0xADBE},{0x500D, 0xADBF},{0x500E, 0xD0DD},{0x500F, 0xB0BF},{0x5011, 0xADCC},{0x5012, 0xADCB},{0x5013, 0xD0CB},{0x5014, 0xADCF}, - {0x5015, 0xD45B},{0x5016, 0xADC6},{0x5017, 0xD0D6},{0x5018, 0xADD5},{0x5019, 0xADD4},{0x501A, 0xADCA},{0x501B, 0xD0CE},{0x501C, 0xD0D7}, - {0x501E, 0xD0C8},{0x501F, 0xADC9},{0x5020, 0xD0D8},{0x5021, 0xADD2},{0x5022, 0xD0CC},{0x5023, 0xADC0},{0x5025, 0xADC3},{0x5026, 0xADC2}, - {0x5027, 0xD0D9},{0x5028, 0xADD0},{0x5029, 0xADC5},{0x502A, 0xADD9},{0x502B, 0xADDB},{0x502C, 0xD0D3},{0x502D, 0xADD8},{0x502F, 0xD0DB}, - {0x5030, 0xD0CD},{0x5031, 0xD0DC},{0x5033, 0xD0D1},{0x5035, 0xD0DA},{0x5037, 0xD0D2},{0x503C, 0xADC8},{0x5040, 0xD463},{0x5041, 0xD457}, - {0x5043, 0xB0B3},{0x5045, 0xD45C},{0x5046, 0xD462},{0x5047, 0xB0B2},{0x5048, 0xD455},{0x5049, 0xB0B6},{0x504A, 0xD459},{0x504B, 0xD452}, - {0x504C, 0xB0B4},{0x504D, 0xD456},{0x504E, 0xB0B9},{0x504F, 0xB0BE},{0x5051, 0xD467},{0x5053, 0xD451},{0x5055, 0xB0BA},{0x5057, 0xD466}, - {0x505A, 0xB0B5},{0x505B, 0xD458},{0x505C, 0xB0B1},{0x505D, 0xD453},{0x505E, 0xD44F},{0x505F, 0xD45D},{0x5060, 0xD450},{0x5061, 0xD44E}, - {0x5062, 0xD45A},{0x5063, 0xD460},{0x5064, 0xD461},{0x5065, 0xB0B7},{0x5068, 0xD85B},{0x5069, 0xD45E},{0x506A, 0xD44D},{0x506B, 0xD45F}, - {0x506D, 0xB0C1},{0x506E, 0xD464},{0x506F, 0xB0C0},{0x5070, 0xD44C},{0x5072, 0xD454},{0x5073, 0xD465},{0x5074, 0xB0BC},{0x5075, 0xB0BB}, - {0x5076, 0xB0B8},{0x5077, 0xB0BD},{0x507A, 0xB0AF},{0x507D, 0xB0B0},{0x5080, 0xB3C8},{0x5082, 0xD85E},{0x5083, 0xD857},{0x5085, 0xB3C5}, - {0x5087, 0xD85F},{0x508B, 0xD855},{0x508C, 0xD858},{0x508D, 0xB3C4},{0x508E, 0xD859},{0x5091, 0xB3C7},{0x5092, 0xD85D},{0x5094, 0xD853}, - {0x5095, 0xD852},{0x5096, 0xB3C9},{0x5098, 0xB3CA},{0x5099, 0xB3C6},{0x509A, 0xB3CB},{0x509B, 0xD851},{0x509C, 0xD85C},{0x509D, 0xD85A}, - {0x509E, 0xD854},{0x50A2, 0xB3C3},{0x50A3, 0xD856},{0x50AC, 0xB6CA},{0x50AD, 0xB6C4},{0x50AE, 0xDCB7},{0x50AF, 0xB6CD},{0x50B0, 0xDCBD}, - {0x50B1, 0xDCC0},{0x50B2, 0xB6C6},{0x50B3, 0xB6C7},{0x50B4, 0xDCBA},{0x50B5, 0xB6C5},{0x50B6, 0xDCC3},{0x50B7, 0xB6CB},{0x50B8, 0xDCC4}, - {0x50BA, 0xDCBF},{0x50BB, 0xB6CC},{0x50BD, 0xDCB4},{0x50BE, 0xB6C9},{0x50BF, 0xDCB5},{0x50C1, 0xDCBE},{0x50C2, 0xDCBC},{0x50C4, 0xDCB8}, - {0x50C5, 0xB6C8},{0x50C6, 0xDCB6},{0x50C7, 0xB6CE},{0x50C8, 0xDCBB},{0x50C9, 0xDCC2},{0x50CA, 0xDCB9},{0x50CB, 0xDCC1},{0x50CE, 0xB9B6}, - {0x50CF, 0xB9B3},{0x50D1, 0xB9B4},{0x50D3, 0xE0F9},{0x50D4, 0xE0F1},{0x50D5, 0xB9B2},{0x50D6, 0xB9AF},{0x50D7, 0xE0F2},{0x50DA, 0xB9B1}, - {0x50DB, 0xE0F5},{0x50DD, 0xE0F7},{0x50E0, 0xE0FE},{0x50E3, 0xE0FD},{0x50E4, 0xE0F8},{0x50E5, 0xB9AE},{0x50E6, 0xE0F0},{0x50E7, 0xB9AC}, - {0x50E8, 0xE0F3},{0x50E9, 0xB9B7},{0x50EA, 0xE0F6},{0x50EC, 0xE0FA},{0x50ED, 0xB9B0},{0x50EE, 0xB9AD},{0x50EF, 0xE0FC},{0x50F0, 0xE0FB}, - {0x50F1, 0xB9B5},{0x50F3, 0xE0F4},{0x50F5, 0xBBF8},{0x50F6, 0xE4EC},{0x50F8, 0xE4E9},{0x50F9, 0xBBF9},{0x50FB, 0xBBF7},{0x50FD, 0xE4F0}, - {0x50FE, 0xE4ED},{0x50FF, 0xE4E6},{0x5100, 0xBBF6},{0x5102, 0xBBFA},{0x5103, 0xE4E7},{0x5104, 0xBBF5},{0x5105, 0xBBFD},{0x5106, 0xE4EA}, - {0x5107, 0xE4EB},{0x5108, 0xBBFB},{0x5109, 0xBBFC},{0x510A, 0xE4F1},{0x510B, 0xE4EE},{0x510C, 0xE4EF},{0x5110, 0xBEAA},{0x5111, 0xE8F8}, - {0x5112, 0xBEA7},{0x5113, 0xE8F5},{0x5114, 0xBEA9},{0x5115, 0xBEAB},{0x5117, 0xE8F6},{0x5118, 0xBEA8},{0x511A, 0xE8F7},{0x511C, 0xE8F4}, - {0x511F, 0xC076},{0x5120, 0xECBD},{0x5121, 0xC077},{0x5122, 0xECBB},{0x5124, 0xECBC},{0x5125, 0xECBA},{0x5126, 0xECB9},{0x5129, 0xECBE}, - {0x512A, 0xC075},{0x512D, 0xEFB8},{0x512E, 0xEFB9},{0x5130, 0xE4E8},{0x5131, 0xEFB7},{0x5132, 0xC078},{0x5133, 0xC35F},{0x5134, 0xF1EB}, - {0x5135, 0xF1EC},{0x5137, 0xC4D7},{0x5138, 0xC4D8},{0x5139, 0xF5C1},{0x513A, 0xF5C0},{0x513B, 0xC56C},{0x513C, 0xC56B},{0x513D, 0xF7D0}, - {0x513F, 0xA449},{0x5140, 0xA461},{0x5141, 0xA4B9},{0x5143, 0xA4B8},{0x5144, 0xA553},{0x5145, 0xA552},{0x5146, 0xA5FC},{0x5147, 0xA5FB}, - {0x5148, 0xA5FD},{0x5149, 0xA5FA},{0x514B, 0xA74A},{0x514C, 0xA749},{0x514D, 0xA74B},{0x5152, 0xA8E0},{0x5154, 0xA8DF},{0x5155, 0xA8E1}, - {0x5157, 0xAB5E},{0x5159, 0xA259},{0x515A, 0xD0DE},{0x515B, 0xA25A},{0x515C, 0xB0C2},{0x515D, 0xA25C},{0x515E, 0xA25B},{0x515F, 0xD860}, - {0x5161, 0xA25D},{0x5162, 0xB9B8},{0x5163, 0xA25E},{0x5165, 0xA44A},{0x5167, 0xA4BA},{0x5168, 0xA5FE},{0x5169, 0xA8E2},{0x516B, 0xA44B}, - {0x516C, 0xA4BD},{0x516D, 0xA4BB},{0x516E, 0xA4BC},{0x5171, 0xA640},{0x5175, 0xA74C},{0x5176, 0xA8E4},{0x5177, 0xA8E3},{0x5178, 0xA8E5}, - {0x517C, 0xADDD},{0x5180, 0xBEAC},{0x5187, 0xC94E},{0x5189, 0xA554},{0x518A, 0xA555},{0x518D, 0xA641},{0x518F, 0xCA6A},{0x5191, 0xAB60}, - {0x5192, 0xAB5F},{0x5193, 0xD0E0},{0x5194, 0xD0DF},{0x5195, 0xB0C3},{0x5197, 0xA4BE},{0x5198, 0xC955},{0x519E, 0xCBCD},{0x51A0, 0xAB61}, - {0x51A2, 0xADE0},{0x51A4, 0xADDE},{0x51A5, 0xADDF},{0x51AA, 0xBEAD},{0x51AC, 0xA556},{0x51B0, 0xA642},{0x51B1, 0xC9BC},{0x51B6, 0xA74D}, - {0x51B7, 0xA74E},{0x51B9, 0xCA6B},{0x51BC, 0xCBCE},{0x51BD, 0xA8E6},{0x51BE, 0xCBCF},{0x51C4, 0xD0E2},{0x51C5, 0xD0E3},{0x51C6, 0xADE3}, - {0x51C8, 0xD0E4},{0x51CA, 0xD0E1},{0x51CB, 0xADE4},{0x51CC, 0xADE2},{0x51CD, 0xADE1},{0x51CE, 0xD0E5},{0x51D0, 0xD468},{0x51D4, 0xD861}, - {0x51D7, 0xDCC5},{0x51D8, 0xE140},{0x51DC, 0xBBFE},{0x51DD, 0xBEAE},{0x51DE, 0xE8F9},{0x51E0, 0xA44C},{0x51E1, 0xA45A},{0x51F0, 0xB0C4}, - {0x51F1, 0xB3CD},{0x51F3, 0xB9B9},{0x51F5, 0xC942},{0x51F6, 0xA4BF},{0x51F8, 0xA559},{0x51F9, 0xA557},{0x51FA, 0xA558},{0x51FD, 0xA8E7}, - {0x5200, 0xA44D},{0x5201, 0xA44E},{0x5203, 0xA462},{0x5206, 0xA4C0},{0x5207, 0xA4C1},{0x5208, 0xA4C2},{0x5209, 0xC9BE},{0x520A, 0xA55A}, - {0x520C, 0xC96B},{0x520E, 0xA646},{0x5210, 0xC9BF},{0x5211, 0xA644},{0x5212, 0xA645},{0x5213, 0xC9BD},{0x5216, 0xA647},{0x5217, 0xA643}, - {0x521C, 0xCA6C},{0x521D, 0xAAEC},{0x521E, 0xCA6D},{0x5221, 0xCA6E},{0x5224, 0xA750},{0x5225, 0xA74F},{0x5228, 0xA753},{0x5229, 0xA751}, - {0x522A, 0xA752},{0x522E, 0xA8ED},{0x5230, 0xA8EC},{0x5231, 0xCBD4},{0x5232, 0xCBD1},{0x5233, 0xCBD2},{0x5235, 0xCBD0},{0x5236, 0xA8EE}, - {0x5237, 0xA8EA},{0x5238, 0xA8E9},{0x523A, 0xA8EB},{0x523B, 0xA8E8},{0x5241, 0xA8EF},{0x5243, 0xAB63},{0x5244, 0xCDF0},{0x5246, 0xCBD3}, - {0x5247, 0xAB68},{0x5249, 0xCDF1},{0x524A, 0xAB64},{0x524B, 0xAB67},{0x524C, 0xAB66},{0x524D, 0xAB65},{0x524E, 0xAB62},{0x5252, 0xD0E8}, - {0x5254, 0xADE7},{0x5255, 0xD0EB},{0x5256, 0xADE5},{0x525A, 0xD0E7},{0x525B, 0xADE8},{0x525C, 0xADE6},{0x525D, 0xADE9},{0x525E, 0xD0E9}, - {0x525F, 0xD0EA},{0x5261, 0xD0E6},{0x5262, 0xD0EC},{0x5269, 0xB3D1},{0x526A, 0xB0C5},{0x526B, 0xD469},{0x526C, 0xD46B},{0x526D, 0xD46A}, - {0x526E, 0xD46C},{0x526F, 0xB0C6},{0x5272, 0xB3CE},{0x5274, 0xB3CF},{0x5275, 0xB3D0},{0x5277, 0xB6D0},{0x5278, 0xDCC7},{0x527A, 0xDCC6}, - {0x527B, 0xDCC8},{0x527C, 0xDCC9},{0x527D, 0xB6D1},{0x527F, 0xB6CF},{0x5280, 0xE141},{0x5281, 0xE142},{0x5282, 0xB9BB},{0x5283, 0xB9BA}, - {0x5284, 0xE35A},{0x5287, 0xBC40},{0x5288, 0xBC41},{0x5289, 0xBC42},{0x528A, 0xBC44},{0x528B, 0xE4F2},{0x528C, 0xE4F3},{0x528D, 0xBC43}, - {0x5291, 0xBEAF},{0x5293, 0xBEB0},{0x5296, 0xF1ED},{0x5297, 0xF5C3},{0x5298, 0xF5C2},{0x5299, 0xF7D1},{0x529B, 0xA44F},{0x529F, 0xA55C}, - {0x52A0, 0xA55B},{0x52A3, 0xA648},{0x52A6, 0xC9C0},{0x52A9, 0xA755},{0x52AA, 0xA756},{0x52AB, 0xA754},{0x52AC, 0xA757},{0x52AD, 0xCA6F}, - {0x52AE, 0xCA70},{0x52BB, 0xA8F1},{0x52BC, 0xCBD5},{0x52BE, 0xA8F0},{0x52C0, 0xCDF2},{0x52C1, 0xAB6C},{0x52C2, 0xCDF3},{0x52C3, 0xAB6B}, - {0x52C7, 0xAB69},{0x52C9, 0xAB6A},{0x52CD, 0xD0ED},{0x52D2, 0xB0C7},{0x52D3, 0xD46E},{0x52D5, 0xB0CA},{0x52D6, 0xD46D},{0x52D7, 0xB1E5}, - {0x52D8, 0xB0C9},{0x52D9, 0xB0C8},{0x52DB, 0xB3D4},{0x52DD, 0xB3D3},{0x52DE, 0xB3D2},{0x52DF, 0xB6D2},{0x52E2, 0xB6D5},{0x52E3, 0xB6D6}, - {0x52E4, 0xB6D4},{0x52E6, 0xB6D3},{0x52E9, 0xE143},{0x52EB, 0xE144},{0x52EF, 0xE4F5},{0x52F0, 0xBC45},{0x52F1, 0xE4F4},{0x52F3, 0xBEB1}, - {0x52F4, 0xECBF},{0x52F5, 0xC079},{0x52F7, 0xF1EE},{0x52F8, 0xC455},{0x52FA, 0xA463},{0x52FB, 0xA4C3},{0x52FC, 0xC956},{0x52FE, 0xA4C4}, - {0x52FF, 0xA4C5},{0x5305, 0xA55D},{0x5306, 0xA55E},{0x5308, 0xA649},{0x5309, 0xCA71},{0x530A, 0xCBD6},{0x530B, 0xCBD7},{0x530D, 0xAB6D}, - {0x530E, 0xD0EE},{0x530F, 0xB0CC},{0x5310, 0xB0CB},{0x5311, 0xD863},{0x5312, 0xD862},{0x5315, 0xA450},{0x5316, 0xA4C6},{0x5317, 0xA55F}, - {0x5319, 0xB0CD},{0x531A, 0xC943},{0x531C, 0xC96C},{0x531D, 0xA560},{0x531F, 0xC9C2},{0x5320, 0xA64B},{0x5321, 0xA64A},{0x5322, 0xC9C1}, - {0x5323, 0xA758},{0x532A, 0xADEA},{0x532D, 0xD46F},{0x532F, 0xB6D7},{0x5330, 0xE145},{0x5331, 0xB9BC},{0x5334, 0xE8FA},{0x5337, 0xF3FD}, - {0x5339, 0xA4C7},{0x533C, 0xCBD8},{0x533D, 0xCDF4},{0x533E, 0xB0D0},{0x533F, 0xB0CE},{0x5340, 0xB0CF},{0x5341, 0xA451},{0x5343, 0xA464}, - {0x5344, 0xA2CD},{0x5345, 0xA4CA},{0x5347, 0xA4C9},{0x5348, 0xA4C8},{0x5349, 0xA563},{0x534A, 0xA562},{0x534C, 0xC96D},{0x534D, 0xC9C3}, - {0x5351, 0xA8F5},{0x5352, 0xA8F2},{0x5353, 0xA8F4},{0x5354, 0xA8F3},{0x5357, 0xAB6E},{0x535A, 0xB3D5},{0x535C, 0xA452},{0x535E, 0xA4CB}, - {0x5360, 0xA565},{0x5361, 0xA564},{0x5363, 0xCA72},{0x5366, 0xA8F6},{0x536C, 0xC957},{0x536E, 0xA567},{0x536F, 0xA566},{0x5370, 0xA64C}, - {0x5371, 0xA64D},{0x5372, 0xCA73},{0x5373, 0xA759},{0x5375, 0xA75A},{0x5377, 0xA8F7},{0x5378, 0xA8F8},{0x5379, 0xA8F9},{0x537B, 0xAB6F}, - {0x537C, 0xCDF5},{0x537F, 0xADEB},{0x5382, 0xC944},{0x5384, 0xA4CC},{0x538A, 0xC9C4},{0x538E, 0xCA74},{0x538F, 0xCA75},{0x5392, 0xCBD9}, - {0x5394, 0xCBDA},{0x5396, 0xCDF7},{0x5397, 0xCDF6},{0x5398, 0xCDF9},{0x5399, 0xCDF8},{0x539A, 0xAB70},{0x539C, 0xD470},{0x539D, 0xADED}, - {0x539E, 0xD0EF},{0x539F, 0xADEC},{0x53A4, 0xD864},{0x53A5, 0xB3D6},{0x53A7, 0xD865},{0x53AC, 0xE146},{0x53AD, 0xB9BD},{0x53B2, 0xBC46}, - {0x53B4, 0xF1EF},{0x53B9, 0xC958},{0x53BB, 0xA568},{0x53C3, 0xB0D1},{0x53C8, 0xA453},{0x53C9, 0xA465},{0x53CA, 0xA4CE},{0x53CB, 0xA4CD}, - {0x53CD, 0xA4CF},{0x53D4, 0xA8FB},{0x53D6, 0xA8FA},{0x53D7, 0xA8FC},{0x53DB, 0xAB71},{0x53DF, 0xADEE},{0x53E1, 0xE8FB},{0x53E2, 0xC24F}, - {0x53E3, 0xA466},{0x53E4, 0xA56A},{0x53E5, 0xA579},{0x53E6, 0xA574},{0x53E8, 0xA56F},{0x53E9, 0xA56E},{0x53EA, 0xA575},{0x53EB, 0xA573}, - {0x53EC, 0xA56C},{0x53ED, 0xA57A},{0x53EE, 0xA56D},{0x53EF, 0xA569},{0x53F0, 0xA578},{0x53F1, 0xA577},{0x53F2, 0xA576},{0x53F3, 0xA56B}, - {0x53F5, 0xA572},{0x53F8, 0xA571},{0x53FB, 0xA57B},{0x53FC, 0xA570},{0x5401, 0xA653},{0x5403, 0xA659},{0x5404, 0xA655},{0x5406, 0xA65B}, - {0x5407, 0xC9C5},{0x5408, 0xA658},{0x5409, 0xA64E},{0x540A, 0xA651},{0x540B, 0xA654},{0x540C, 0xA650},{0x540D, 0xA657},{0x540E, 0xA65A}, - {0x540F, 0xA64F},{0x5410, 0xA652},{0x5411, 0xA656},{0x5412, 0xA65C},{0x5418, 0xCA7E},{0x5419, 0xCA7B},{0x541B, 0xA767},{0x541C, 0xCA7C}, - {0x541D, 0xA75B},{0x541E, 0xA75D},{0x541F, 0xA775},{0x5420, 0xA770},{0x5424, 0xCAA5},{0x5425, 0xCA7D},{0x5426, 0xA75F},{0x5427, 0xA761}, - {0x5428, 0xCAA4},{0x5429, 0xA768},{0x542A, 0xCA78},{0x542B, 0xA774},{0x542C, 0xA776},{0x542D, 0xA75C},{0x542E, 0xA76D},{0x5430, 0xCA76}, - {0x5431, 0xA773},{0x5433, 0xA764},{0x5435, 0xA76E},{0x5436, 0xA76F},{0x5437, 0xCA77},{0x5438, 0xA76C},{0x5439, 0xA76A},{0x543B, 0xA76B}, - {0x543C, 0xA771},{0x543D, 0xCAA1},{0x543E, 0xA75E},{0x5440, 0xA772},{0x5441, 0xCAA3},{0x5442, 0xA766},{0x5443, 0xA763},{0x5445, 0xCA7A}, - {0x5446, 0xA762},{0x5447, 0xCAA6},{0x5448, 0xA765},{0x544A, 0xA769},{0x544E, 0xA760},{0x544F, 0xCAA2},{0x5454, 0xCA79},{0x5460, 0xCBEB}, - {0x5461, 0xCBEA},{0x5462, 0xA94F},{0x5463, 0xCBED},{0x5464, 0xCBEF},{0x5465, 0xCBE4},{0x5466, 0xCBE7},{0x5467, 0xCBEE},{0x5468, 0xA950}, - {0x546B, 0xCBE1},{0x546C, 0xCBE5},{0x546F, 0xCBE9},{0x5470, 0xCE49},{0x5471, 0xA94B},{0x5472, 0xCE4D},{0x5473, 0xA8FD},{0x5474, 0xCBE6}, - {0x5475, 0xA8FE},{0x5476, 0xA94C},{0x5477, 0xA945},{0x5478, 0xA941},{0x547A, 0xCBE2},{0x547B, 0xA944},{0x547C, 0xA949},{0x547D, 0xA952}, - {0x547E, 0xCBE3},{0x547F, 0xCBDC},{0x5480, 0xA943},{0x5481, 0xCBDD},{0x5482, 0xCBDF},{0x5484, 0xA946},{0x5486, 0xA948},{0x5487, 0xCBDB}, - {0x5488, 0xCBE0},{0x548B, 0xA951},{0x548C, 0xA94D},{0x548D, 0xCBE8},{0x548E, 0xA953},{0x5490, 0xA94A},{0x5491, 0xCBDE},{0x5492, 0xA947}, - {0x5495, 0xA942},{0x5496, 0xA940},{0x5498, 0xCBEC},{0x549A, 0xA94E},{0x54A0, 0xCE48},{0x54A1, 0xCDFB},{0x54A2, 0xCE4B},{0x54A5, 0xCDFD}, - {0x54A6, 0xAB78},{0x54A7, 0xABA8},{0x54A8, 0xAB74},{0x54A9, 0xABA7},{0x54AA, 0xAB7D},{0x54AB, 0xABA4},{0x54AC, 0xAB72},{0x54AD, 0xCDFC}, - {0x54AE, 0xCE43},{0x54AF, 0xABA3},{0x54B0, 0xCE4F},{0x54B1, 0xABA5},{0x54B3, 0xAB79},{0x54B6, 0xCE45},{0x54B7, 0xCE42},{0x54B8, 0xAB77}, - {0x54BA, 0xCDFA},{0x54BB, 0xABA6},{0x54BC, 0xCE4A},{0x54BD, 0xAB7C},{0x54BE, 0xCE4C},{0x54BF, 0xABA9},{0x54C0, 0xAB73},{0x54C1, 0xAB7E}, - {0x54C2, 0xAB7B},{0x54C3, 0xCE40},{0x54C4, 0xABA1},{0x54C5, 0xCE46},{0x54C6, 0xCE47},{0x54C7, 0xAB7A},{0x54C8, 0xABA2},{0x54C9, 0xAB76}, - {0x54CE, 0xAB75},{0x54CF, 0xCDFE},{0x54D6, 0xCE44},{0x54DE, 0xCE4E},{0x54E0, 0xD144},{0x54E1, 0xADFB},{0x54E2, 0xD0F1},{0x54E4, 0xD0F6}, - {0x54E5, 0xADF4},{0x54E6, 0xAE40},{0x54E7, 0xD0F4},{0x54E8, 0xADEF},{0x54E9, 0xADF9},{0x54EA, 0xADFE},{0x54EB, 0xD0FB},{0x54ED, 0xADFA}, - {0x54EE, 0xADFD},{0x54F1, 0xD0FE},{0x54F2, 0xADF5},{0x54F3, 0xD0F5},{0x54F7, 0xD142},{0x54F8, 0xD143},{0x54FA, 0xADF7},{0x54FB, 0xD141}, - {0x54FC, 0xADF3},{0x54FD, 0xAE43},{0x54FF, 0xD0F8},{0x5501, 0xADF1},{0x5503, 0xD146},{0x5504, 0xD0F9},{0x5505, 0xD0FD},{0x5506, 0xADF6}, - {0x5507, 0xAE42},{0x5508, 0xD0FA},{0x5509, 0xADFC},{0x550A, 0xD140},{0x550B, 0xD147},{0x550C, 0xD4A1},{0x550E, 0xD145},{0x550F, 0xAE44}, - {0x5510, 0xADF0},{0x5511, 0xD0FC},{0x5512, 0xD0F3},{0x5514, 0xADF8},{0x5517, 0xD0F2},{0x551A, 0xD0F7},{0x5526, 0xD0F0},{0x5527, 0xAE41}, - {0x552A, 0xD477},{0x552C, 0xB0E4},{0x552D, 0xD4A7},{0x552E, 0xB0E2},{0x552F, 0xB0DF},{0x5530, 0xD47C},{0x5531, 0xB0DB},{0x5532, 0xD4A2}, - {0x5533, 0xB0E6},{0x5534, 0xD476},{0x5535, 0xD47B},{0x5536, 0xD47A},{0x5537, 0xADF2},{0x5538, 0xB0E1},{0x5539, 0xD4A5},{0x553B, 0xD4A8}, - {0x553C, 0xD473},{0x553E, 0xB3E8},{0x5540, 0xD4A9},{0x5541, 0xB0E7},{0x5543, 0xB0D9},{0x5544, 0xB0D6},{0x5545, 0xD47E},{0x5546, 0xB0D3}, - {0x5548, 0xD4A6},{0x554A, 0xB0DA},{0x554B, 0xD4AA},{0x554D, 0xD474},{0x554E, 0xD4A4},{0x554F, 0xB0DD},{0x5550, 0xD475},{0x5551, 0xD478}, - {0x5552, 0xD47D},{0x5555, 0xB0DE},{0x5556, 0xB0DC},{0x5557, 0xB0E8},{0x555C, 0xB0E3},{0x555E, 0xB0D7},{0x555F, 0xB1D2},{0x5561, 0xB0D8}, - {0x5562, 0xD479},{0x5563, 0xB0E5},{0x5564, 0xB0E0},{0x5565, 0xD4A3},{0x5566, 0xB0D5},{0x556A, 0xB0D4},{0x5575, 0xD471},{0x5576, 0xD472}, - {0x5577, 0xD86A},{0x557B, 0xB3D7},{0x557C, 0xB3DA},{0x557D, 0xD875},{0x557E, 0xB3EE},{0x557F, 0xD878},{0x5580, 0xB3D8},{0x5581, 0xD871}, - {0x5582, 0xB3DE},{0x5583, 0xB3E4},{0x5584, 0xB5BD},{0x5587, 0xB3E2},{0x5588, 0xD86E},{0x5589, 0xB3EF},{0x558A, 0xB3DB},{0x558B, 0xB3E3}, - {0x558C, 0xD876},{0x558D, 0xDCD7},{0x558E, 0xD87B},{0x558F, 0xD86F},{0x5591, 0xD866},{0x5592, 0xD873},{0x5593, 0xD86D},{0x5594, 0xB3E1}, - {0x5595, 0xD879},{0x5598, 0xB3DD},{0x5599, 0xB3F1},{0x559A, 0xB3EA},{0x559C, 0xB3DF},{0x559D, 0xB3DC},{0x559F, 0xB3E7},{0x55A1, 0xD87A}, - {0x55A2, 0xD86C},{0x55A3, 0xD872},{0x55A4, 0xD874},{0x55A5, 0xD868},{0x55A6, 0xD877},{0x55A7, 0xB3D9},{0x55A8, 0xD867},{0x55AA, 0xB3E0}, - {0x55AB, 0xB3F0},{0x55AC, 0xB3EC},{0x55AD, 0xD869},{0x55AE, 0xB3E6},{0x55B1, 0xB3ED},{0x55B2, 0xB3E9},{0x55B3, 0xB3E5},{0x55B5, 0xD870}, - {0x55BB, 0xB3EB},{0x55BF, 0xDCD5},{0x55C0, 0xDCD1},{0x55C2, 0xDCE0},{0x55C3, 0xDCCA},{0x55C4, 0xDCD3},{0x55C5, 0xB6E5},{0x55C6, 0xB6E6}, - {0x55C7, 0xB6DE},{0x55C8, 0xDCDC},{0x55C9, 0xB6E8},{0x55CA, 0xDCCF},{0x55CB, 0xDCCE},{0x55CC, 0xDCCC},{0x55CD, 0xDCDE},{0x55CE, 0xB6DC}, - {0x55CF, 0xDCD8},{0x55D0, 0xDCCD},{0x55D1, 0xB6DF},{0x55D2, 0xDCD6},{0x55D3, 0xB6DA},{0x55D4, 0xDCD2},{0x55D5, 0xDCD9},{0x55D6, 0xDCDB}, - {0x55D9, 0xDCDF},{0x55DA, 0xB6E3},{0x55DB, 0xDCCB},{0x55DC, 0xB6DD},{0x55DD, 0xDCD0},{0x55DF, 0xB6D8},{0x55E1, 0xB6E4},{0x55E2, 0xDCDA}, - {0x55E3, 0xB6E0},{0x55E4, 0xB6E1},{0x55E5, 0xB6E7},{0x55E6, 0xB6DB},{0x55E7, 0xA25F},{0x55E8, 0xB6D9},{0x55E9, 0xDCD4},{0x55EF, 0xB6E2}, - {0x55F2, 0xDCDD},{0x55F6, 0xB9CD},{0x55F7, 0xB9C8},{0x55F9, 0xE155},{0x55FA, 0xE151},{0x55FC, 0xE14B},{0x55FD, 0xB9C2},{0x55FE, 0xB9BE}, - {0x55FF, 0xE154},{0x5600, 0xB9BF},{0x5601, 0xE14E},{0x5602, 0xE150},{0x5604, 0xE153},{0x5606, 0xB9C4},{0x5608, 0xB9CB},{0x5609, 0xB9C5}, - {0x560C, 0xE149},{0x560D, 0xB9C6},{0x560E, 0xB9C7},{0x560F, 0xE14C},{0x5610, 0xB9CC},{0x5612, 0xE14A},{0x5613, 0xE14F},{0x5614, 0xB9C3}, - {0x5615, 0xE148},{0x5616, 0xB9C9},{0x5617, 0xB9C1},{0x561B, 0xB9C0},{0x561C, 0xE14D},{0x561D, 0xE152},{0x561F, 0xB9CA},{0x5627, 0xE147}, - {0x5629, 0xBC4D},{0x562A, 0xE547},{0x562C, 0xE544},{0x562E, 0xBC47},{0x562F, 0xBC53},{0x5630, 0xBC54},{0x5632, 0xBC4A},{0x5633, 0xE542}, - {0x5634, 0xBC4C},{0x5635, 0xE4F9},{0x5636, 0xBC52},{0x5638, 0xE546},{0x5639, 0xBC49},{0x563A, 0xE548},{0x563B, 0xBC48},{0x563D, 0xE543}, - {0x563E, 0xE545},{0x563F, 0xBC4B},{0x5640, 0xE541},{0x5641, 0xE4FA},{0x5642, 0xE4F7},{0x5645, 0xD86B},{0x5646, 0xE4FD},{0x5648, 0xE4F6}, - {0x5649, 0xE4FC},{0x564A, 0xE4FB},{0x564C, 0xE4F8},{0x564E, 0xBC4F},{0x5653, 0xBC4E},{0x5657, 0xBC50},{0x5658, 0xE4FE},{0x5659, 0xBEB2}, - {0x565A, 0xE540},{0x565E, 0xE945},{0x5660, 0xE8FD},{0x5662, 0xBEBE},{0x5663, 0xE942},{0x5664, 0xBEB6},{0x5665, 0xBEBA},{0x5666, 0xE941}, - {0x5668, 0xBEB9},{0x5669, 0xBEB5},{0x566A, 0xBEB8},{0x566B, 0xBEB3},{0x566C, 0xBEBD},{0x566D, 0xE943},{0x566E, 0xE8FE},{0x566F, 0xBEBC}, - {0x5670, 0xE8FC},{0x5671, 0xBEBB},{0x5672, 0xE944},{0x5673, 0xE940},{0x5674, 0xBC51},{0x5676, 0xBEBF},{0x5677, 0xE946},{0x5678, 0xBEB7}, - {0x5679, 0xBEB4},{0x567E, 0xECC6},{0x567F, 0xECC8},{0x5680, 0xC07B},{0x5681, 0xECC9},{0x5682, 0xECC7},{0x5683, 0xECC5},{0x5684, 0xECC4}, - {0x5685, 0xC07D},{0x5686, 0xECC3},{0x5687, 0xC07E},{0x568C, 0xECC1},{0x568D, 0xECC2},{0x568E, 0xC07A},{0x568F, 0xC0A1},{0x5690, 0xC07C}, - {0x5693, 0xECC0},{0x5695, 0xC250},{0x5697, 0xEFBC},{0x5698, 0xEFBA},{0x5699, 0xEFBF},{0x569A, 0xEFBD},{0x569C, 0xEFBB},{0x569D, 0xEFBE}, - {0x56A5, 0xC360},{0x56A6, 0xF1F2},{0x56A7, 0xF1F3},{0x56A8, 0xC456},{0x56AA, 0xF1F4},{0x56AB, 0xF1F0},{0x56AC, 0xF1F5},{0x56AD, 0xF1F1}, - {0x56AE, 0xC251},{0x56B2, 0xF3FE},{0x56B3, 0xF441},{0x56B4, 0xC459},{0x56B5, 0xF440},{0x56B6, 0xC458},{0x56B7, 0xC457},{0x56BC, 0xC45A}, - {0x56BD, 0xF5C5},{0x56BE, 0xF5C6},{0x56C0, 0xC4DA},{0x56C1, 0xC4D9},{0x56C2, 0xC4DB},{0x56C3, 0xF5C4},{0x56C5, 0xF6D8},{0x56C6, 0xF6D7}, - {0x56C8, 0xC56D},{0x56C9, 0xC56F},{0x56CA, 0xC56E},{0x56CB, 0xF6D9},{0x56CC, 0xC5C8},{0x56CD, 0xF8A6},{0x56D1, 0xC5F1},{0x56D3, 0xF8A5}, - {0x56D4, 0xF8EE},{0x56D7, 0xC949},{0x56DA, 0xA57D},{0x56DB, 0xA57C},{0x56DD, 0xA65F},{0x56DE, 0xA65E},{0x56DF, 0xC9C7},{0x56E0, 0xA65D}, - {0x56E1, 0xC9C6},{0x56E4, 0xA779},{0x56E5, 0xCAA9},{0x56E7, 0xCAA8},{0x56EA, 0xA777},{0x56EB, 0xA77A},{0x56EE, 0xCAA7},{0x56F0, 0xA778}, - {0x56F7, 0xCBF0},{0x56F9, 0xCBF1},{0x56FA, 0xA954},{0x56FF, 0xABAA},{0x5701, 0xD148},{0x5702, 0xD149},{0x5703, 0xAE45},{0x5704, 0xAE46}, - {0x5707, 0xD4AC},{0x5708, 0xB0E9},{0x5709, 0xB0EB},{0x570A, 0xD4AB},{0x570B, 0xB0EA},{0x570C, 0xD87C},{0x570D, 0xB3F2},{0x5712, 0xB6E9}, - {0x5713, 0xB6EA},{0x5714, 0xDCE1},{0x5716, 0xB9CF},{0x5718, 0xB9CE},{0x571A, 0xE549},{0x571B, 0xE948},{0x571C, 0xE947},{0x571E, 0xF96B}, - {0x571F, 0xA467},{0x5720, 0xC959},{0x5722, 0xC96E},{0x5723, 0xC96F},{0x5728, 0xA662},{0x5729, 0xA666},{0x572A, 0xC9C9},{0x572C, 0xA664}, - {0x572D, 0xA663},{0x572E, 0xC9C8},{0x572F, 0xA665},{0x5730, 0xA661},{0x5733, 0xA660},{0x5734, 0xC9CA},{0x573B, 0xA7A6},{0x573E, 0xA7A3}, - {0x5740, 0xA77D},{0x5741, 0xCAAA},{0x5745, 0xCAAB},{0x5747, 0xA7A1},{0x5749, 0xCAAD},{0x574A, 0xA77B},{0x574B, 0xCAAE},{0x574C, 0xCAAC}, - {0x574D, 0xA77E},{0x574E, 0xA7A2},{0x574F, 0xA7A5},{0x5750, 0xA7A4},{0x5751, 0xA77C},{0x5752, 0xCAAF},{0x5761, 0xA959},{0x5762, 0xCBFE}, - {0x5764, 0xA95B},{0x5766, 0xA95A},{0x5768, 0xCC40},{0x5769, 0xA958},{0x576A, 0xA957},{0x576B, 0xCBF5},{0x576D, 0xCBF4},{0x576F, 0xCBF2}, - {0x5770, 0xCBF7},{0x5771, 0xCBF6},{0x5772, 0xCBF3},{0x5773, 0xCBFC},{0x5774, 0xCBFD},{0x5775, 0xCBFA},{0x5776, 0xCBF8},{0x5777, 0xA956}, - {0x577B, 0xCBFB},{0x577C, 0xA95C},{0x577D, 0xCC41},{0x5780, 0xCBF9},{0x5782, 0xABAB},{0x5783, 0xA955},{0x578B, 0xABAC},{0x578C, 0xCE54}, - {0x578F, 0xCE5A},{0x5793, 0xABB2},{0x5794, 0xCE58},{0x5795, 0xCE5E},{0x5797, 0xCE55},{0x5798, 0xCE59},{0x5799, 0xCE5B},{0x579A, 0xCE5D}, - {0x579B, 0xCE57},{0x579D, 0xCE56},{0x579E, 0xCE51},{0x579F, 0xCE52},{0x57A0, 0xABAD},{0x57A2, 0xABAF},{0x57A3, 0xABAE},{0x57A4, 0xCE53}, - {0x57A5, 0xCE5C},{0x57AE, 0xABB1},{0x57B5, 0xCE50},{0x57B6, 0xD153},{0x57B8, 0xD152},{0x57B9, 0xD157},{0x57BA, 0xD14E},{0x57BC, 0xD151}, - {0x57BD, 0xD150},{0x57BF, 0xD154},{0x57C1, 0xD158},{0x57C2, 0xAE47},{0x57C3, 0xAE4A},{0x57C6, 0xD14F},{0x57C7, 0xD155},{0x57CB, 0xAE49}, - {0x57CC, 0xD14A},{0x57CE, 0xABB0},{0x57CF, 0xD4BA},{0x57D0, 0xD156},{0x57D2, 0xD14D},{0x57D4, 0xAE48},{0x57D5, 0xD14C},{0x57DC, 0xD4B1}, - {0x57DF, 0xB0EC},{0x57E0, 0xB0F0},{0x57E1, 0xD4C1},{0x57E2, 0xD4AF},{0x57E3, 0xD4BD},{0x57E4, 0xB0F1},{0x57E5, 0xD4BF},{0x57E7, 0xD4C5}, - {0x57E9, 0xD4C9},{0x57EC, 0xD4C0},{0x57ED, 0xD4B4},{0x57EE, 0xD4BC},{0x57F0, 0xD4CA},{0x57F1, 0xD4C8},{0x57F2, 0xD4BE},{0x57F3, 0xD4B9}, - {0x57F4, 0xD4B2},{0x57F5, 0xD8A6},{0x57F6, 0xD4B0},{0x57F7, 0xB0F5},{0x57F8, 0xD4B7},{0x57F9, 0xB0F6},{0x57FA, 0xB0F2},{0x57FB, 0xD4AD}, - {0x57FC, 0xD4C3},{0x57FD, 0xD4B5},{0x5800, 0xD4B3},{0x5801, 0xD4C6},{0x5802, 0xB0F3},{0x5804, 0xD4CC},{0x5805, 0xB0ED},{0x5806, 0xB0EF}, - {0x5807, 0xD4BB},{0x5808, 0xD4B6},{0x5809, 0xAE4B},{0x580A, 0xB0EE},{0x580B, 0xD4B8},{0x580C, 0xD4C7},{0x580D, 0xD4CB},{0x580E, 0xD4C2}, - {0x5810, 0xD4C4},{0x5814, 0xD4AE},{0x5819, 0xD8A1},{0x581B, 0xD8AA},{0x581C, 0xD8A9},{0x581D, 0xB3FA},{0x581E, 0xD8A2},{0x5820, 0xB3FB}, - {0x5821, 0xB3F9},{0x5823, 0xD8A4},{0x5824, 0xB3F6},{0x5825, 0xD8A8},{0x5827, 0xD8A3},{0x5828, 0xD8A5},{0x5829, 0xD87D},{0x582A, 0xB3F4}, - {0x582C, 0xD8B2},{0x582D, 0xD8B1},{0x582E, 0xD8AE},{0x582F, 0xB3F3},{0x5830, 0xB3F7},{0x5831, 0xB3F8},{0x5832, 0xD14B},{0x5833, 0xD8AB}, - {0x5834, 0xB3F5},{0x5835, 0xB0F4},{0x5836, 0xD8AD},{0x5837, 0xD87E},{0x5838, 0xD8B0},{0x5839, 0xD8AF},{0x583B, 0xD8B3},{0x583D, 0xDCEF}, - {0x583F, 0xD8AC},{0x5848, 0xD8A7},{0x5849, 0xDCE7},{0x584A, 0xB6F4},{0x584B, 0xB6F7},{0x584C, 0xB6F2},{0x584D, 0xDCE6},{0x584E, 0xDCEA}, - {0x584F, 0xDCE5},{0x5851, 0xB6EC},{0x5852, 0xB6F6},{0x5853, 0xDCE2},{0x5854, 0xB6F0},{0x5855, 0xDCE9},{0x5857, 0xB6EE},{0x5858, 0xB6ED}, - {0x5859, 0xDCEC},{0x585A, 0xB6EF},{0x585B, 0xDCEE},{0x585D, 0xDCEB},{0x585E, 0xB6EB},{0x5862, 0xB6F5},{0x5863, 0xDCF0},{0x5864, 0xDCE4}, - {0x5865, 0xDCED},{0x5868, 0xDCE3},{0x586B, 0xB6F1},{0x586D, 0xB6F3},{0x586F, 0xDCE8},{0x5871, 0xDCF1},{0x5874, 0xE15D},{0x5875, 0xB9D0}, - {0x5876, 0xE163},{0x5879, 0xB9D5},{0x587A, 0xE15F},{0x587B, 0xE166},{0x587C, 0xE157},{0x587D, 0xB9D7},{0x587E, 0xB9D1},{0x587F, 0xE15C}, - {0x5880, 0xBC55},{0x5881, 0xE15B},{0x5882, 0xE164},{0x5883, 0xB9D2},{0x5885, 0xB9D6},{0x5886, 0xE15A},{0x5887, 0xE160},{0x5888, 0xE165}, - {0x5889, 0xE156},{0x588A, 0xB9D4},{0x588B, 0xE15E},{0x588E, 0xE162},{0x588F, 0xE168},{0x5890, 0xE158},{0x5891, 0xE161},{0x5893, 0xB9D3}, - {0x5894, 0xE167},{0x5898, 0xE159},{0x589C, 0xBC59},{0x589D, 0xE54B},{0x589E, 0xBC57},{0x589F, 0xBC56},{0x58A0, 0xE54D},{0x58A1, 0xE552}, - {0x58A3, 0xE54E},{0x58A5, 0xE551},{0x58A6, 0xBC5C},{0x58A8, 0xBEA5},{0x58A9, 0xBC5B},{0x58AB, 0xE54A},{0x58AC, 0xE550},{0x58AE, 0xBC5A}, - {0x58AF, 0xE54F},{0x58B1, 0xE54C},{0x58B3, 0xBC58},{0x58BA, 0xE94D},{0x58BC, 0xE94F},{0x58BD, 0xE94A},{0x58BE, 0xBEC1},{0x58BF, 0xE94C}, - {0x58C1, 0xBEC0},{0x58C2, 0xE94E},{0x58C5, 0xBEC3},{0x58C6, 0xE950},{0x58C7, 0xBEC2},{0x58C8, 0xE949},{0x58C9, 0xE94B},{0x58CE, 0xC0A5}, - {0x58CF, 0xECCC},{0x58D1, 0xC0A4},{0x58D2, 0xECCD},{0x58D3, 0xC0A3},{0x58D4, 0xECCB},{0x58D5, 0xC0A2},{0x58D6, 0xECCA},{0x58D8, 0xC253}, - {0x58D9, 0xC252},{0x58DA, 0xF1F6},{0x58DB, 0xF1F8},{0x58DD, 0xF1F7},{0x58DE, 0xC361},{0x58DF, 0xC362},{0x58E2, 0xC363},{0x58E3, 0xF442}, - {0x58E4, 0xC45B},{0x58E7, 0xF7D3},{0x58E8, 0xF7D2},{0x58E9, 0xC5F2},{0x58EB, 0xA468},{0x58EC, 0xA4D0},{0x58EF, 0xA7A7},{0x58F4, 0xCE5F}, - {0x58F9, 0xB3FC},{0x58FA, 0xB3FD},{0x58FC, 0xDCF2},{0x58FD, 0xB9D8},{0x58FE, 0xE169},{0x58FF, 0xE553},{0x5903, 0xC95A},{0x5906, 0xCAB0}, - {0x590C, 0xCC42},{0x590D, 0xCE60},{0x590E, 0xD159},{0x590F, 0xAE4C},{0x5912, 0xF1F9},{0x5914, 0xC4DC},{0x5915, 0xA469},{0x5916, 0xA57E}, - {0x5917, 0xC970},{0x5919, 0xA667},{0x591A, 0xA668},{0x591C, 0xA95D},{0x5920, 0xB0F7},{0x5922, 0xB9DA},{0x5924, 0xB9DB},{0x5925, 0xB9D9}, - {0x5927, 0xA46A},{0x5929, 0xA4D1},{0x592A, 0xA4D3},{0x592B, 0xA4D2},{0x592C, 0xC95B},{0x592D, 0xA4D4},{0x592E, 0xA5A1},{0x592F, 0xC971}, - {0x5931, 0xA5A2},{0x5937, 0xA669},{0x5938, 0xA66A},{0x593C, 0xC9CB},{0x593E, 0xA7A8},{0x5940, 0xCAB1},{0x5944, 0xA961},{0x5945, 0xCC43}, - {0x5947, 0xA95F},{0x5948, 0xA960},{0x5949, 0xA95E},{0x594A, 0xD15A},{0x594E, 0xABB6},{0x594F, 0xABB5},{0x5950, 0xABB7},{0x5951, 0xABB4}, - {0x5953, 0xCE61},{0x5954, 0xA962},{0x5955, 0xABB3},{0x5957, 0xAE4D},{0x5958, 0xAE4E},{0x595A, 0xAE4F},{0x595C, 0xD4CD},{0x5960, 0xB3FE}, - {0x5961, 0xD8B4},{0x5962, 0xB0F8},{0x5967, 0xB6F8},{0x5969, 0xB9DD},{0x596A, 0xB9DC},{0x596B, 0xE16A},{0x596D, 0xBC5D},{0x596E, 0xBEC4}, - {0x5970, 0xEFC0},{0x5971, 0xF6DA},{0x5972, 0xF7D4},{0x5973, 0xA46B},{0x5974, 0xA5A3},{0x5976, 0xA5A4},{0x5977, 0xC9D1},{0x5978, 0xA66C}, - {0x5979, 0xA66F},{0x597B, 0xC9CF},{0x597C, 0xC9CD},{0x597D, 0xA66E},{0x597E, 0xC9D0},{0x597F, 0xC9D2},{0x5980, 0xC9CC},{0x5981, 0xA671}, - {0x5982, 0xA670},{0x5983, 0xA66D},{0x5984, 0xA66B},{0x5985, 0xC9CE},{0x598A, 0xA7B3},{0x598D, 0xA7B0},{0x598E, 0xCAB6},{0x598F, 0xCAB9}, - {0x5990, 0xCAB8},{0x5992, 0xA7AA},{0x5993, 0xA7B2},{0x5996, 0xA7AF},{0x5997, 0xCAB5},{0x5998, 0xCAB3},{0x5999, 0xA7AE},{0x599D, 0xA7A9}, - {0x599E, 0xA7AC},{0x59A0, 0xCAB4},{0x59A1, 0xCABB},{0x59A2, 0xCAB7},{0x59A3, 0xA7AD},{0x59A4, 0xA7B1},{0x59A5, 0xA7B4},{0x59A6, 0xCAB2}, - {0x59A7, 0xCABA},{0x59A8, 0xA7AB},{0x59AE, 0xA967},{0x59AF, 0xA96F},{0x59B1, 0xCC4F},{0x59B2, 0xCC48},{0x59B3, 0xA970},{0x59B4, 0xCC53}, - {0x59B5, 0xCC44},{0x59B6, 0xCC4B},{0x59B9, 0xA966},{0x59BA, 0xCC45},{0x59BB, 0xA964},{0x59BC, 0xCC4C},{0x59BD, 0xCC50},{0x59BE, 0xA963}, - {0x59C0, 0xCC51},{0x59C1, 0xCC4A},{0x59C3, 0xCC4D},{0x59C5, 0xA972},{0x59C6, 0xA969},{0x59C7, 0xCC54},{0x59C8, 0xCC52},{0x59CA, 0xA96E}, - {0x59CB, 0xA96C},{0x59CC, 0xCC49},{0x59CD, 0xA96B},{0x59CE, 0xCC47},{0x59CF, 0xCC46},{0x59D0, 0xA96A},{0x59D1, 0xA968},{0x59D2, 0xA971}, - {0x59D3, 0xA96D},{0x59D4, 0xA965},{0x59D6, 0xCC4E},{0x59D8, 0xABB9},{0x59DA, 0xABC0},{0x59DB, 0xCE6F},{0x59DC, 0xABB8},{0x59DD, 0xCE67}, - {0x59DE, 0xCE63},{0x59E0, 0xCE73},{0x59E1, 0xCE62},{0x59E3, 0xABBB},{0x59E4, 0xCE6C},{0x59E5, 0xABBE},{0x59E6, 0xABC1},{0x59E8, 0xABBC}, - {0x59E9, 0xCE70},{0x59EA, 0xABBF},{0x59EC, 0xAE56},{0x59ED, 0xCE76},{0x59EE, 0xCE64},{0x59F1, 0xCE66},{0x59F2, 0xCE6D},{0x59F3, 0xCE71}, - {0x59F4, 0xCE75},{0x59F5, 0xCE72},{0x59F6, 0xCE6B},{0x59F7, 0xCE6E},{0x59FA, 0xCE68},{0x59FB, 0xABC3},{0x59FC, 0xCE6A},{0x59FD, 0xCE69}, - {0x59FE, 0xCE74},{0x59FF, 0xABBA},{0x5A00, 0xCE65},{0x5A01, 0xABC2},{0x5A03, 0xABBD},{0x5A09, 0xAE5C},{0x5A0A, 0xD162},{0x5A0C, 0xAE5B}, - {0x5A0F, 0xD160},{0x5A11, 0xAE50},{0x5A13, 0xAE55},{0x5A15, 0xD15F},{0x5A16, 0xD15C},{0x5A17, 0xD161},{0x5A18, 0xAE51},{0x5A19, 0xD15B}, - {0x5A1B, 0xAE54},{0x5A1C, 0xAE52},{0x5A1E, 0xD163},{0x5A1F, 0xAE53},{0x5A20, 0xAE57},{0x5A23, 0xAE58},{0x5A25, 0xAE5A},{0x5A29, 0xAE59}, - {0x5A2D, 0xD15D},{0x5A2E, 0xD15E},{0x5A33, 0xD164},{0x5A35, 0xD4D4},{0x5A36, 0xB0F9},{0x5A37, 0xD8C2},{0x5A38, 0xD4D3},{0x5A39, 0xD4E6}, - {0x5A3C, 0xB140},{0x5A3E, 0xD4E4},{0x5A40, 0xB0FE},{0x5A41, 0xB0FA},{0x5A42, 0xD4ED},{0x5A43, 0xD4DD},{0x5A44, 0xD4E0},{0x5A46, 0xB143}, - {0x5A47, 0xD4EA},{0x5A48, 0xD4E2},{0x5A49, 0xB0FB},{0x5A4A, 0xB144},{0x5A4C, 0xD4E7},{0x5A4D, 0xD4E5},{0x5A50, 0xD4D6},{0x5A51, 0xD4EB}, - {0x5A52, 0xD4DF},{0x5A53, 0xD4DA},{0x5A55, 0xD4D0},{0x5A56, 0xD4EC},{0x5A57, 0xD4DC},{0x5A58, 0xD4CF},{0x5A5A, 0xB142},{0x5A5B, 0xD4E1}, - {0x5A5C, 0xD4EE},{0x5A5D, 0xD4DE},{0x5A5E, 0xD4D2},{0x5A5F, 0xD4D7},{0x5A60, 0xD4CE},{0x5A62, 0xB141},{0x5A64, 0xD4DB},{0x5A65, 0xD4D8}, - {0x5A66, 0xB0FC},{0x5A67, 0xD4D1},{0x5A69, 0xD4E9},{0x5A6A, 0xB0FD},{0x5A6C, 0xD4D9},{0x5A6D, 0xD4D5},{0x5A70, 0xD4E8},{0x5A77, 0xB440}, - {0x5A78, 0xD8BB},{0x5A7A, 0xD8B8},{0x5A7B, 0xD8C9},{0x5A7C, 0xD8BD},{0x5A7D, 0xD8CA},{0x5A7F, 0xB442},{0x5A83, 0xD8C6},{0x5A84, 0xD8C3}, - {0x5A8A, 0xD8C4},{0x5A8B, 0xD8C7},{0x5A8C, 0xD8CB},{0x5A8E, 0xD4E3},{0x5A8F, 0xD8CD},{0x5A90, 0xDD47},{0x5A92, 0xB443},{0x5A93, 0xD8CE}, - {0x5A94, 0xD8B6},{0x5A95, 0xD8C0},{0x5A97, 0xD8C5},{0x5A9A, 0xB441},{0x5A9B, 0xB444},{0x5A9C, 0xD8CC},{0x5A9D, 0xD8CF},{0x5A9E, 0xD8BA}, - {0x5A9F, 0xD8B7},{0x5AA2, 0xD8B9},{0x5AA5, 0xD8BE},{0x5AA6, 0xD8BC},{0x5AA7, 0xB445},{0x5AA9, 0xD8C8},{0x5AAC, 0xD8BF},{0x5AAE, 0xD8C1}, - {0x5AAF, 0xD8B5},{0x5AB0, 0xDCFA},{0x5AB1, 0xDCF8},{0x5AB2, 0xB742},{0x5AB3, 0xB740},{0x5AB4, 0xDD43},{0x5AB5, 0xDCF9},{0x5AB6, 0xDD44}, - {0x5AB7, 0xDD40},{0x5AB8, 0xDCF7},{0x5AB9, 0xDD46},{0x5ABA, 0xDCF6},{0x5ABB, 0xDCFD},{0x5ABC, 0xB6FE},{0x5ABD, 0xB6FD},{0x5ABE, 0xB6FC}, - {0x5ABF, 0xDCFB},{0x5AC0, 0xDD41},{0x5AC1, 0xB6F9},{0x5AC2, 0xB741},{0x5AC4, 0xDCF4},{0x5AC6, 0xDCFE},{0x5AC7, 0xDCF3},{0x5AC8, 0xDCFC}, - {0x5AC9, 0xB6FA},{0x5ACA, 0xDD42},{0x5ACB, 0xDCF5},{0x5ACC, 0xB6FB},{0x5ACD, 0xDD45},{0x5AD5, 0xE16E},{0x5AD6, 0xB9E2},{0x5AD7, 0xB9E1}, - {0x5AD8, 0xB9E3},{0x5AD9, 0xE17A},{0x5ADA, 0xE170},{0x5ADB, 0xE176},{0x5ADC, 0xE16B},{0x5ADD, 0xE179},{0x5ADE, 0xE178},{0x5ADF, 0xE17C}, - {0x5AE0, 0xE175},{0x5AE1, 0xB9DE},{0x5AE2, 0xE174},{0x5AE3, 0xB9E4},{0x5AE5, 0xE16D},{0x5AE6, 0xB9DF},{0x5AE8, 0xE17B},{0x5AE9, 0xB9E0}, - {0x5AEA, 0xE16F},{0x5AEB, 0xE172},{0x5AEC, 0xE177},{0x5AED, 0xE171},{0x5AEE, 0xE16C},{0x5AF3, 0xE173},{0x5AF4, 0xE555},{0x5AF5, 0xBC61}, - {0x5AF6, 0xE558},{0x5AF7, 0xE557},{0x5AF8, 0xE55A},{0x5AF9, 0xE55C},{0x5AFB, 0xBC5F},{0x5AFD, 0xE556},{0x5AFF, 0xE554},{0x5B01, 0xE55D}, - {0x5B02, 0xE55B},{0x5B03, 0xE559},{0x5B05, 0xE55F},{0x5B07, 0xE55E},{0x5B08, 0xBC63},{0x5B09, 0xBC5E},{0x5B0B, 0xBC60},{0x5B0C, 0xBC62}, - {0x5B0F, 0xE560},{0x5B10, 0xE957},{0x5B13, 0xE956},{0x5B14, 0xE955},{0x5B16, 0xE958},{0x5B17, 0xE951},{0x5B19, 0xE952},{0x5B1A, 0xE95A}, - {0x5B1B, 0xE953},{0x5B1D, 0xBEC5},{0x5B1E, 0xE95C},{0x5B20, 0xE95B},{0x5B21, 0xE954},{0x5B23, 0xECD1},{0x5B24, 0xC0A8},{0x5B25, 0xECCF}, - {0x5B26, 0xECD4},{0x5B27, 0xECD3},{0x5B28, 0xE959},{0x5B2A, 0xC0A7},{0x5B2C, 0xECD2},{0x5B2D, 0xECCE},{0x5B2E, 0xECD6},{0x5B2F, 0xECD5}, - {0x5B30, 0xC0A6},{0x5B32, 0xECD0},{0x5B34, 0xBEC6},{0x5B38, 0xC254},{0x5B3C, 0xEFC1},{0x5B3D, 0xF1FA},{0x5B3E, 0xF1FB},{0x5B3F, 0xF1FC}, - {0x5B40, 0xC45C},{0x5B43, 0xC45D},{0x5B45, 0xF443},{0x5B47, 0xF5C8},{0x5B48, 0xF5C7},{0x5B4B, 0xF6DB},{0x5B4C, 0xF6DC},{0x5B4D, 0xF7D5}, - {0x5B4E, 0xF8A7},{0x5B50, 0xA46C},{0x5B51, 0xA46D},{0x5B53, 0xA46E},{0x5B54, 0xA4D5},{0x5B55, 0xA5A5},{0x5B56, 0xC9D3},{0x5B57, 0xA672}, - {0x5B58, 0xA673},{0x5B5A, 0xA7B7},{0x5B5B, 0xA7B8},{0x5B5C, 0xA7B6},{0x5B5D, 0xA7B5},{0x5B5F, 0xA973},{0x5B62, 0xCC55},{0x5B63, 0xA975}, - {0x5B64, 0xA974},{0x5B65, 0xCC56},{0x5B69, 0xABC4},{0x5B6B, 0xAE5D},{0x5B6C, 0xD165},{0x5B6E, 0xD4F0},{0x5B70, 0xB145},{0x5B71, 0xB447}, - {0x5B72, 0xD4EF},{0x5B73, 0xB446},{0x5B75, 0xB9E5},{0x5B77, 0xE17D},{0x5B78, 0xBEC7},{0x5B7A, 0xC0A9},{0x5B7B, 0xECD7},{0x5B7D, 0xC45E}, - {0x5B7F, 0xC570},{0x5B81, 0xC972},{0x5B83, 0xA5A6},{0x5B84, 0xC973},{0x5B85, 0xA676},{0x5B87, 0xA674},{0x5B88, 0xA675},{0x5B89, 0xA677}, - {0x5B8B, 0xA7BA},{0x5B8C, 0xA7B9},{0x5B8E, 0xCABC},{0x5B8F, 0xA7BB},{0x5B92, 0xCABD},{0x5B93, 0xCC57},{0x5B95, 0xCC58},{0x5B97, 0xA976}, - {0x5B98, 0xA978},{0x5B99, 0xA97A},{0x5B9A, 0xA977},{0x5B9B, 0xA97B},{0x5B9C, 0xA979},{0x5BA2, 0xABC8},{0x5BA3, 0xABC5},{0x5BA4, 0xABC7}, - {0x5BA5, 0xABC9},{0x5BA6, 0xABC6},{0x5BA7, 0xD166},{0x5BA8, 0xCE77},{0x5BAC, 0xD168},{0x5BAD, 0xD167},{0x5BAE, 0xAE63},{0x5BB0, 0xAE5F}, - {0x5BB3, 0xAE60},{0x5BB4, 0xAE62},{0x5BB5, 0xAE64},{0x5BB6, 0xAE61},{0x5BB8, 0xAE66},{0x5BB9, 0xAE65},{0x5BBF, 0xB14A},{0x5BC0, 0xD4F2}, - {0x5BC1, 0xD4F1},{0x5BC2, 0xB149},{0x5BC4, 0xB148},{0x5BC5, 0xB147},{0x5BC6, 0xB14B},{0x5BC7, 0xB146},{0x5BCA, 0xD8D5},{0x5BCB, 0xD8D2}, - {0x5BCC, 0xB449},{0x5BCD, 0xD8D1},{0x5BCE, 0xD8D6},{0x5BD0, 0xB44B},{0x5BD1, 0xD8D4},{0x5BD2, 0xB448},{0x5BD3, 0xB44A},{0x5BD4, 0xD8D3}, - {0x5BD6, 0xDD48},{0x5BD8, 0xDD49},{0x5BD9, 0xDD4A},{0x5BDE, 0xB9E6},{0x5BDF, 0xB9EE},{0x5BE0, 0xE17E},{0x5BE1, 0xB9E8},{0x5BE2, 0xB9EC}, - {0x5BE3, 0xE1A1},{0x5BE4, 0xB9ED},{0x5BE5, 0xB9E9},{0x5BE6, 0xB9EA},{0x5BE7, 0xB9E7},{0x5BE8, 0xB9EB},{0x5BE9, 0xBC66},{0x5BEA, 0xD8D0}, - {0x5BEB, 0xBC67},{0x5BEC, 0xBC65},{0x5BEE, 0xBC64},{0x5BEF, 0xE95D},{0x5BF0, 0xBEC8},{0x5BF1, 0xECD8},{0x5BF2, 0xECD9},{0x5BF5, 0xC364}, - {0x5BF6, 0xC45F},{0x5BF8, 0xA46F},{0x5BFA, 0xA678},{0x5C01, 0xABCA},{0x5C03, 0xD169},{0x5C04, 0xAE67},{0x5C07, 0xB14E},{0x5C08, 0xB14D}, - {0x5C09, 0xB14C},{0x5C0A, 0xB44C},{0x5C0B, 0xB44D},{0x5C0C, 0xD8D7},{0x5C0D, 0xB9EF},{0x5C0E, 0xBEC9},{0x5C0F, 0xA470},{0x5C10, 0xC95C}, - {0x5C11, 0xA4D6},{0x5C12, 0xC974},{0x5C15, 0xC9D4},{0x5C16, 0xA679},{0x5C1A, 0xA97C},{0x5C1F, 0xDD4B},{0x5C22, 0xA471},{0x5C24, 0xA4D7}, - {0x5C25, 0xC9D5},{0x5C28, 0xCABE},{0x5C2A, 0xCABF},{0x5C2C, 0xA7BC},{0x5C30, 0xD8D8},{0x5C31, 0xB44E},{0x5C33, 0xDD4C},{0x5C37, 0xC0AA}, - {0x5C38, 0xA472},{0x5C39, 0xA4A8},{0x5C3A, 0xA4D8},{0x5C3B, 0xC975},{0x5C3C, 0xA5A7},{0x5C3E, 0xA7C0},{0x5C3F, 0xA7BF},{0x5C40, 0xA7BD}, - {0x5C41, 0xA7BE},{0x5C44, 0xCC59},{0x5C45, 0xA97E},{0x5C46, 0xA9A1},{0x5C47, 0xCC5A},{0x5C48, 0xA97D},{0x5C4B, 0xABCE},{0x5C4C, 0xCE78}, - {0x5C4D, 0xABCD},{0x5C4E, 0xABCB},{0x5C4F, 0xABCC},{0x5C50, 0xAE6A},{0x5C51, 0xAE68},{0x5C54, 0xD16B},{0x5C55, 0xAE69},{0x5C56, 0xD16A}, - {0x5C58, 0xAE5E},{0x5C59, 0xD4F3},{0x5C5C, 0xB150},{0x5C5D, 0xB151},{0x5C60, 0xB14F},{0x5C62, 0xB9F0},{0x5C63, 0xE1A2},{0x5C64, 0xBC68}, - {0x5C65, 0xBC69},{0x5C67, 0xE561},{0x5C68, 0xC0AB},{0x5C69, 0xEFC2},{0x5C6A, 0xEFC3},{0x5C6C, 0xC4DD},{0x5C6D, 0xF8A8},{0x5C6E, 0xC94B}, - {0x5C6F, 0xA4D9},{0x5C71, 0xA473},{0x5C73, 0xC977},{0x5C74, 0xC976},{0x5C79, 0xA67A},{0x5C7A, 0xC9D7},{0x5C7B, 0xC9D8},{0x5C7C, 0xC9D6}, - {0x5C7E, 0xC9D9},{0x5C86, 0xCAC7},{0x5C88, 0xCAC2},{0x5C89, 0xCAC4},{0x5C8A, 0xCAC6},{0x5C8B, 0xCAC3},{0x5C8C, 0xA7C4},{0x5C8D, 0xCAC0}, - {0x5C8F, 0xCAC1},{0x5C90, 0xA7C1},{0x5C91, 0xA7C2},{0x5C92, 0xCAC5},{0x5C93, 0xCAC8},{0x5C94, 0xA7C3},{0x5C95, 0xCAC9},{0x5C9D, 0xCC68}, - {0x5C9F, 0xCC62},{0x5CA0, 0xCC5D},{0x5CA1, 0xA9A3},{0x5CA2, 0xCC65},{0x5CA3, 0xCC63},{0x5CA4, 0xCC5C},{0x5CA5, 0xCC69},{0x5CA6, 0xCC6C}, - {0x5CA7, 0xCC67},{0x5CA8, 0xCC60},{0x5CA9, 0xA9A5},{0x5CAA, 0xCC66},{0x5CAB, 0xA9A6},{0x5CAC, 0xCC61},{0x5CAD, 0xCC64},{0x5CAE, 0xCC5B}, - {0x5CAF, 0xCC5F},{0x5CB0, 0xCC6B},{0x5CB1, 0xA9A7},{0x5CB3, 0xA9A8},{0x5CB5, 0xCC5E},{0x5CB6, 0xCC6A},{0x5CB7, 0xA9A2},{0x5CB8, 0xA9A4}, - {0x5CC6, 0xCEAB},{0x5CC7, 0xCEA4},{0x5CC8, 0xCEAA},{0x5CC9, 0xCEA3},{0x5CCA, 0xCEA5},{0x5CCB, 0xCE7D},{0x5CCC, 0xCE7B},{0x5CCE, 0xCEAC}, - {0x5CCF, 0xCEA9},{0x5CD0, 0xCE79},{0x5CD2, 0xABD0},{0x5CD3, 0xCEA7},{0x5CD4, 0xCEA8},{0x5CD6, 0xCEA6},{0x5CD7, 0xCE7C},{0x5CD8, 0xCE7A}, - {0x5CD9, 0xABCF},{0x5CDA, 0xCEA2},{0x5CDB, 0xCE7E},{0x5CDE, 0xCEA1},{0x5CDF, 0xCEAD},{0x5CE8, 0xAE6F},{0x5CEA, 0xAE6E},{0x5CEC, 0xD16C}, - {0x5CED, 0xAE6B},{0x5CEE, 0xD16E},{0x5CF0, 0xAE70},{0x5CF1, 0xD16F},{0x5CF4, 0xAE73},{0x5CF6, 0xAE71},{0x5CF7, 0xD170},{0x5CF8, 0xCEAE}, - {0x5CF9, 0xD172},{0x5CFB, 0xAE6D},{0x5CFD, 0xAE6C},{0x5CFF, 0xD16D},{0x5D00, 0xD171},{0x5D01, 0xAE72},{0x5D06, 0xB153},{0x5D07, 0xB152}, - {0x5D0B, 0xD4F5},{0x5D0C, 0xD4F9},{0x5D0D, 0xD4FB},{0x5D0E, 0xB154},{0x5D0F, 0xD4FE},{0x5D11, 0xB158},{0x5D12, 0xD541},{0x5D14, 0xB15A}, - {0x5D16, 0xB156},{0x5D17, 0xB15E},{0x5D19, 0xB15B},{0x5D1A, 0xD4F7},{0x5D1B, 0xB155},{0x5D1D, 0xD4F6},{0x5D1E, 0xD4F4},{0x5D1F, 0xD543}, - {0x5D20, 0xD4F8},{0x5D22, 0xB157},{0x5D23, 0xD542},{0x5D24, 0xB15C},{0x5D25, 0xD4FD},{0x5D26, 0xD4FC},{0x5D27, 0xB15D},{0x5D28, 0xD4FA}, - {0x5D29, 0xB159},{0x5D2E, 0xD544},{0x5D30, 0xD540},{0x5D31, 0xD8E7},{0x5D32, 0xD8EE},{0x5D33, 0xD8E3},{0x5D34, 0xB451},{0x5D35, 0xD8DF}, - {0x5D36, 0xD8EF},{0x5D37, 0xD8D9},{0x5D38, 0xD8EC},{0x5D39, 0xD8EA},{0x5D3A, 0xD8E4},{0x5D3C, 0xD8ED},{0x5D3D, 0xD8E6},{0x5D3F, 0xD8DE}, - {0x5D40, 0xD8F0},{0x5D41, 0xD8DC},{0x5D42, 0xD8E9},{0x5D43, 0xD8DA},{0x5D45, 0xD8F1},{0x5D47, 0xB452},{0x5D49, 0xD8EB},{0x5D4A, 0xDD4F}, - {0x5D4B, 0xD8DD},{0x5D4C, 0xB44F},{0x5D4E, 0xD8E1},{0x5D50, 0xB450},{0x5D51, 0xD8E0},{0x5D52, 0xD8E5},{0x5D55, 0xD8E2},{0x5D59, 0xD8E8}, - {0x5D5E, 0xDD53},{0x5D62, 0xDD56},{0x5D63, 0xDD4E},{0x5D65, 0xDD50},{0x5D67, 0xDD55},{0x5D68, 0xDD54},{0x5D69, 0xB743},{0x5D6B, 0xD8DB}, - {0x5D6C, 0xDD52},{0x5D6F, 0xB744},{0x5D71, 0xDD4D},{0x5D72, 0xDD51},{0x5D77, 0xE1A9},{0x5D79, 0xE1B0},{0x5D7A, 0xE1A7},{0x5D7C, 0xE1AE}, - {0x5D7D, 0xE1A5},{0x5D7E, 0xE1AD},{0x5D7F, 0xE1B1},{0x5D80, 0xE1A4},{0x5D81, 0xE1A8},{0x5D82, 0xE1A3},{0x5D84, 0xB9F1},{0x5D86, 0xE1A6}, - {0x5D87, 0xB9F2},{0x5D88, 0xE1AC},{0x5D89, 0xE1AB},{0x5D8A, 0xE1AA},{0x5D8D, 0xE1AF},{0x5D92, 0xE565},{0x5D93, 0xE567},{0x5D94, 0xBC6B}, - {0x5D95, 0xE568},{0x5D97, 0xE563},{0x5D99, 0xE562},{0x5D9A, 0xE56C},{0x5D9C, 0xE56A},{0x5D9D, 0xBC6A},{0x5D9E, 0xE56D},{0x5D9F, 0xE564}, - {0x5DA0, 0xE569},{0x5DA1, 0xE56B},{0x5DA2, 0xE566},{0x5DA7, 0xE961},{0x5DA8, 0xE966},{0x5DA9, 0xE960},{0x5DAA, 0xE965},{0x5DAC, 0xE95E}, - {0x5DAD, 0xE968},{0x5DAE, 0xE964},{0x5DAF, 0xE969},{0x5DB0, 0xE963},{0x5DB1, 0xE95F},{0x5DB2, 0xE967},{0x5DB4, 0xE96A},{0x5DB5, 0xE962}, - {0x5DB7, 0xECDA},{0x5DB8, 0xC0AF},{0x5DBA, 0xC0AD},{0x5DBC, 0xC0AC},{0x5DBD, 0xC0AE},{0x5DC0, 0xEFC4},{0x5DC2, 0xF172},{0x5DC3, 0xF1FD}, - {0x5DC6, 0xF444},{0x5DC7, 0xF445},{0x5DC9, 0xC460},{0x5DCB, 0xF5C9},{0x5DCD, 0xC4DE},{0x5DCF, 0xF5CA},{0x5DD1, 0xF6DE},{0x5DD2, 0xC572}, - {0x5DD4, 0xC571},{0x5DD5, 0xF6DD},{0x5DD6, 0xC5C9},{0x5DD8, 0xF7D6},{0x5DDD, 0xA474},{0x5DDE, 0xA67B},{0x5DDF, 0xC9DA},{0x5DE0, 0xCACA}, - {0x5DE1, 0xA8B5},{0x5DE2, 0xB15F},{0x5DE5, 0xA475},{0x5DE6, 0xA5AA},{0x5DE7, 0xA5A9},{0x5DE8, 0xA5A8},{0x5DEB, 0xA7C5},{0x5DEE, 0xAE74}, - {0x5DF0, 0xDD57},{0x5DF1, 0xA476},{0x5DF2, 0xA477},{0x5DF3, 0xA478},{0x5DF4, 0xA4DA},{0x5DF7, 0xABD1},{0x5DF9, 0xCEAF},{0x5DFD, 0xB453}, - {0x5DFE, 0xA479},{0x5DFF, 0xC95D},{0x5E02, 0xA5AB},{0x5E03, 0xA5AC},{0x5E04, 0xC978},{0x5E06, 0xA67C},{0x5E0A, 0xCACB},{0x5E0C, 0xA7C6}, - {0x5E0E, 0xCACC},{0x5E11, 0xA9AE},{0x5E14, 0xCC6E},{0x5E15, 0xA9AC},{0x5E16, 0xA9AB},{0x5E17, 0xCC6D},{0x5E18, 0xA9A9},{0x5E19, 0xCC6F}, - {0x5E1A, 0xA9AA},{0x5E1B, 0xA9AD},{0x5E1D, 0xABD2},{0x5E1F, 0xABD4},{0x5E20, 0xCEB3},{0x5E21, 0xCEB0},{0x5E22, 0xCEB1},{0x5E23, 0xCEB2}, - {0x5E24, 0xCEB4},{0x5E25, 0xABD3},{0x5E28, 0xD174},{0x5E29, 0xD173},{0x5E2B, 0xAE76},{0x5E2D, 0xAE75},{0x5E33, 0xB162},{0x5E34, 0xD546}, - {0x5E36, 0xB161},{0x5E37, 0xB163},{0x5E38, 0xB160},{0x5E3D, 0xB455},{0x5E3E, 0xD545},{0x5E40, 0xB456},{0x5E41, 0xD8F3},{0x5E43, 0xB457}, - {0x5E44, 0xD8F2},{0x5E45, 0xB454},{0x5E4A, 0xDD5A},{0x5E4B, 0xDD5C},{0x5E4C, 0xB745},{0x5E4D, 0xDD5B},{0x5E4E, 0xDD59},{0x5E4F, 0xDD58}, - {0x5E53, 0xE1B4},{0x5E54, 0xB9F7},{0x5E55, 0xB9F5},{0x5E57, 0xB9F6},{0x5E58, 0xE1B2},{0x5E59, 0xE1B3},{0x5E5B, 0xB9F3},{0x5E5C, 0xE571}, - {0x5E5D, 0xE56F},{0x5E5F, 0xBC6D},{0x5E60, 0xE570},{0x5E61, 0xBC6E},{0x5E62, 0xBC6C},{0x5E63, 0xB9F4},{0x5E66, 0xE96D},{0x5E67, 0xE96B}, - {0x5E68, 0xE96C},{0x5E69, 0xE56E},{0x5E6A, 0xECDC},{0x5E6B, 0xC0B0},{0x5E6C, 0xECDB},{0x5E6D, 0xEFC5},{0x5E6E, 0xEFC6},{0x5E6F, 0xE96E}, - {0x5E70, 0xF1FE},{0x5E72, 0xA47A},{0x5E73, 0xA5AD},{0x5E74, 0xA67E},{0x5E75, 0xC9DB},{0x5E76, 0xA67D},{0x5E78, 0xA9AF},{0x5E79, 0xB746}, - {0x5E7B, 0xA4DB},{0x5E7C, 0xA5AE},{0x5E7D, 0xABD5},{0x5E7E, 0xB458},{0x5E80, 0xC979},{0x5E82, 0xC97A},{0x5E84, 0xC9DC},{0x5E87, 0xA7C8}, - {0x5E88, 0xCAD0},{0x5E89, 0xCACE},{0x5E8A, 0xA7C9},{0x5E8B, 0xCACD},{0x5E8C, 0xCACF},{0x5E8D, 0xCAD1},{0x5E8F, 0xA7C7},{0x5E95, 0xA9B3}, - {0x5E96, 0xA9B4},{0x5E97, 0xA9B1},{0x5E9A, 0xA9B0},{0x5E9B, 0xCEB8},{0x5E9C, 0xA9B2},{0x5EA0, 0xABD6},{0x5EA2, 0xCEB7},{0x5EA3, 0xCEB9}, - {0x5EA4, 0xCEB6},{0x5EA5, 0xCEBA},{0x5EA6, 0xABD7},{0x5EA7, 0xAE79},{0x5EA8, 0xD175},{0x5EAA, 0xD177},{0x5EAB, 0xAE77},{0x5EAC, 0xD178}, - {0x5EAD, 0xAE78},{0x5EAE, 0xD176},{0x5EB0, 0xCEB5},{0x5EB1, 0xD547},{0x5EB2, 0xD54A},{0x5EB3, 0xD54B},{0x5EB4, 0xD548},{0x5EB5, 0xB167}, - {0x5EB6, 0xB166},{0x5EB7, 0xB164},{0x5EB8, 0xB165},{0x5EB9, 0xD549},{0x5EBE, 0xB168},{0x5EC1, 0xB45A},{0x5EC2, 0xB45B},{0x5EC4, 0xB45C}, - {0x5EC5, 0xDD5D},{0x5EC6, 0xDD5F},{0x5EC7, 0xDD61},{0x5EC8, 0xB748},{0x5EC9, 0xB747},{0x5ECA, 0xB459},{0x5ECB, 0xDD60},{0x5ECC, 0xDD5E}, - {0x5ECE, 0xE1B8},{0x5ED1, 0xE1B6},{0x5ED2, 0xE1BC},{0x5ED3, 0xB9F8},{0x5ED4, 0xE1BD},{0x5ED5, 0xE1BA},{0x5ED6, 0xB9F9},{0x5ED7, 0xE1B7}, - {0x5ED8, 0xE1B5},{0x5ED9, 0xE1BB},{0x5EDA, 0xBC70},{0x5EDB, 0xE573},{0x5EDC, 0xE1B9},{0x5EDD, 0xBC72},{0x5EDE, 0xE574},{0x5EDF, 0xBC71}, - {0x5EE0, 0xBC74},{0x5EE1, 0xE575},{0x5EE2, 0xBC6F},{0x5EE3, 0xBC73},{0x5EE5, 0xE973},{0x5EE6, 0xE971},{0x5EE7, 0xE970},{0x5EE8, 0xE972}, - {0x5EE9, 0xE96F},{0x5EEC, 0xC366},{0x5EEE, 0xF446},{0x5EEF, 0xF447},{0x5EF1, 0xF5CB},{0x5EF2, 0xF6DF},{0x5EF3, 0xC655},{0x5EF6, 0xA9B5}, - {0x5EF7, 0xA7CA},{0x5EFA, 0xABD8},{0x5EFE, 0xA47B},{0x5EFF, 0xA4DC},{0x5F01, 0xA5AF},{0x5F02, 0xC9DD},{0x5F04, 0xA7CB},{0x5F05, 0xCAD2}, - {0x5F07, 0xCEBB},{0x5F08, 0xABD9},{0x5F0A, 0xB9FA},{0x5F0B, 0xA47C},{0x5F0F, 0xA6A1},{0x5F12, 0xB749},{0x5F13, 0xA47D},{0x5F14, 0xA4DD}, - {0x5F15, 0xA4DE},{0x5F17, 0xA5B1},{0x5F18, 0xA5B0},{0x5F1A, 0xC9DE},{0x5F1B, 0xA6A2},{0x5F1D, 0xCAD3},{0x5F1F, 0xA7CC},{0x5F22, 0xCC71}, - {0x5F23, 0xCC72},{0x5F24, 0xCC73},{0x5F26, 0xA9B6},{0x5F27, 0xA9B7},{0x5F28, 0xCC70},{0x5F29, 0xA9B8},{0x5F2D, 0xABDA},{0x5F2E, 0xCEBC}, - {0x5F30, 0xD17A},{0x5F31, 0xAE7A},{0x5F33, 0xD179},{0x5F35, 0xB169},{0x5F36, 0xD54C},{0x5F37, 0xB16A},{0x5F38, 0xD54D},{0x5F3C, 0xB45D}, - {0x5F40, 0xDD62},{0x5F43, 0xE1BF},{0x5F44, 0xE1BE},{0x5F46, 0xB9FB},{0x5F48, 0xBC75},{0x5F49, 0xE576},{0x5F4A, 0xBECA},{0x5F4B, 0xE974}, - {0x5F4C, 0xC0B1},{0x5F4E, 0xC573},{0x5F4F, 0xF7D8},{0x5F54, 0xCC74},{0x5F56, 0xCEBD},{0x5F57, 0xB16B},{0x5F58, 0xD8F4},{0x5F59, 0xB74A}, - {0x5F5D, 0xC255},{0x5F62, 0xA7CE},{0x5F64, 0xA7CD},{0x5F65, 0xABDB},{0x5F67, 0xD17B},{0x5F69, 0xB16D},{0x5F6A, 0xB343},{0x5F6B, 0xB16E}, - {0x5F6C, 0xB16C},{0x5F6D, 0xB45E},{0x5F6F, 0xE1C0},{0x5F70, 0xB9FC},{0x5F71, 0xBC76},{0x5F73, 0xC94C},{0x5F74, 0xC9DF},{0x5F76, 0xCAD5}, - {0x5F77, 0xA7CF},{0x5F78, 0xCAD4},{0x5F79, 0xA7D0},{0x5F7C, 0xA9BC},{0x5F7D, 0xCC77},{0x5F7E, 0xCC76},{0x5F7F, 0xA9BB},{0x5F80, 0xA9B9}, - {0x5F81, 0xA9BA},{0x5F82, 0xCC75},{0x5F85, 0xABDD},{0x5F86, 0xCEBE},{0x5F87, 0xABE0},{0x5F88, 0xABDC},{0x5F89, 0xABE2},{0x5F8A, 0xABDE}, - {0x5F8B, 0xABDF},{0x5F8C, 0xABE1},{0x5F90, 0xAE7D},{0x5F91, 0xAE7C},{0x5F92, 0xAE7B},{0x5F96, 0xD54F},{0x5F97, 0xB16F},{0x5F98, 0xB172}, - {0x5F99, 0xB170},{0x5F9B, 0xD54E},{0x5F9C, 0xB175},{0x5F9E, 0xB171},{0x5F9F, 0xD550},{0x5FA0, 0xB174},{0x5FA1, 0xB173},{0x5FA5, 0xD8F6}, - {0x5FA6, 0xD8F5},{0x5FA8, 0xB461},{0x5FA9, 0xB45F},{0x5FAA, 0xB460},{0x5FAB, 0xD8F7},{0x5FAC, 0xB74B},{0x5FAD, 0xDD64},{0x5FAE, 0xB74C}, - {0x5FAF, 0xDD63},{0x5FB2, 0xE577},{0x5FB5, 0xBC78},{0x5FB6, 0xE1C1},{0x5FB7, 0xBC77},{0x5FB9, 0xB9FD},{0x5FBB, 0xECDE},{0x5FBC, 0xE975}, - {0x5FBD, 0xC0B2},{0x5FBE, 0xECDD},{0x5FBF, 0xF240},{0x5FC0, 0xF448},{0x5FC1, 0xF449},{0x5FC3, 0xA4DF},{0x5FC5, 0xA5B2},{0x5FC9, 0xC97B}, - {0x5FCC, 0xA7D2},{0x5FCD, 0xA7D4},{0x5FCF, 0xC9E2},{0x5FD0, 0xCAD8},{0x5FD1, 0xCAD7},{0x5FD2, 0xCAD6},{0x5FD4, 0xC9E1},{0x5FD5, 0xC9E0}, - {0x5FD6, 0xA6A4},{0x5FD7, 0xA7D3},{0x5FD8, 0xA7D1},{0x5FD9, 0xA6A3},{0x5FDD, 0xA9BD},{0x5FDE, 0xCC78},{0x5FE0, 0xA9BE},{0x5FE1, 0xCADD}, - {0x5FE3, 0xCADF},{0x5FE4, 0xCADE},{0x5FE5, 0xCC79},{0x5FE8, 0xCADA},{0x5FEA, 0xA7D8},{0x5FEB, 0xA7D6},{0x5FED, 0xCAD9},{0x5FEE, 0xCADB}, - {0x5FEF, 0xCAE1},{0x5FF1, 0xA7D5},{0x5FF3, 0xCADC},{0x5FF4, 0xCAE5},{0x5FF5, 0xA9C0},{0x5FF7, 0xCAE2},{0x5FF8, 0xA7D7},{0x5FFA, 0xCAE0}, - {0x5FFB, 0xCAE3},{0x5FFD, 0xA9BF},{0x5FFF, 0xA9C1},{0x6000, 0xCAE4},{0x6009, 0xCCAF},{0x600A, 0xCCA2},{0x600B, 0xCC7E},{0x600C, 0xCCAE}, - {0x600D, 0xCCA9},{0x600E, 0xABE7},{0x600F, 0xA9C2},{0x6010, 0xCCAA},{0x6011, 0xCCAD},{0x6012, 0xABE3},{0x6013, 0xCCAC},{0x6014, 0xA9C3}, - {0x6015, 0xA9C8},{0x6016, 0xA9C6},{0x6017, 0xCCA3},{0x6019, 0xCC7C},{0x601A, 0xCCA5},{0x601B, 0xA9CD},{0x601C, 0xCCB0},{0x601D, 0xABE4}, - {0x601E, 0xCCA6},{0x6020, 0xABE5},{0x6021, 0xA9C9},{0x6022, 0xCCA8},{0x6024, 0xCECD},{0x6025, 0xABE6},{0x6026, 0xCC7B},{0x6027, 0xA9CA}, - {0x6028, 0xABE8},{0x6029, 0xA9CB},{0x602A, 0xA9C7},{0x602B, 0xA9CC},{0x602C, 0xCCA7},{0x602D, 0xCC7A},{0x602E, 0xCCAB},{0x602F, 0xA9C4}, - {0x6032, 0xCC7D},{0x6033, 0xCCA4},{0x6034, 0xCCA1},{0x6035, 0xA9C5},{0x6037, 0xCEBF},{0x6039, 0xCEC0},{0x6040, 0xCECA},{0x6041, 0xD1A1}, - {0x6042, 0xCECB},{0x6043, 0xABEE},{0x6044, 0xCECE},{0x6045, 0xCEC4},{0x6046, 0xABED},{0x6047, 0xCEC6},{0x6049, 0xCEC7},{0x604C, 0xCEC9}, - {0x604D, 0xABE9},{0x6050, 0xAEA3},{0x6053, 0xCEC5},{0x6054, 0xCEC1},{0x6055, 0xAEA4},{0x6058, 0xCECF},{0x6059, 0xAE7E},{0x605A, 0xD17D}, - {0x605B, 0xCEC8},{0x605D, 0xD17C},{0x605E, 0xCEC3},{0x605F, 0xCECC},{0x6062, 0xABEC},{0x6063, 0xAEA1},{0x6064, 0xABF2},{0x6065, 0xAEA2}, - {0x6066, 0xCED0},{0x6067, 0xD17E},{0x6068, 0xABEB},{0x6069, 0xAEA6},{0x606A, 0xABF1},{0x606B, 0xABF0},{0x606C, 0xABEF},{0x606D, 0xAEA5}, - {0x606E, 0xCED1},{0x606F, 0xAEA7},{0x6070, 0xABEA},{0x6072, 0xCEC2},{0x607F, 0xB176},{0x6080, 0xD1A4},{0x6081, 0xD1A6},{0x6083, 0xD1A8}, - {0x6084, 0xAEA8},{0x6085, 0xAEAE},{0x6086, 0xD553},{0x6087, 0xD1AC},{0x6088, 0xD1A3},{0x6089, 0xB178},{0x608A, 0xD551},{0x608C, 0xAEAD}, - {0x608D, 0xAEAB},{0x608E, 0xD1AE},{0x6090, 0xD552},{0x6092, 0xD1A5},{0x6094, 0xAEAC},{0x6095, 0xD1A9},{0x6096, 0xAEAF},{0x6097, 0xD1AB}, - {0x609A, 0xAEAA},{0x609B, 0xD1AA},{0x609C, 0xD1AD},{0x609D, 0xD1A7},{0x609F, 0xAEA9},{0x60A0, 0xB179},{0x60A2, 0xD1A2},{0x60A3, 0xB177}, - {0x60A8, 0xB17A},{0x60B0, 0xD555},{0x60B1, 0xD55E},{0x60B2, 0xB464},{0x60B4, 0xB17C},{0x60B5, 0xB1A3},{0x60B6, 0xB465},{0x60B7, 0xD560}, - {0x60B8, 0xB1AA},{0x60B9, 0xD8F9},{0x60BA, 0xD556},{0x60BB, 0xB1A2},{0x60BC, 0xB1A5},{0x60BD, 0xB17E},{0x60BE, 0xD554},{0x60BF, 0xD562}, - {0x60C0, 0xD565},{0x60C1, 0xD949},{0x60C3, 0xD563},{0x60C4, 0xD8FD},{0x60C5, 0xB1A1},{0x60C6, 0xB1A8},{0x60C7, 0xB1AC},{0x60C8, 0xD55D}, - {0x60C9, 0xD8F8},{0x60CA, 0xD561},{0x60CB, 0xB17B},{0x60CC, 0xD8FA},{0x60CD, 0xD564},{0x60CE, 0xD8FC},{0x60CF, 0xD559},{0x60D1, 0xB462}, - {0x60D3, 0xD557},{0x60D4, 0xD558},{0x60D5, 0xB1A7},{0x60D8, 0xB1A6},{0x60D9, 0xD55B},{0x60DA, 0xB1AB},{0x60DB, 0xD55F},{0x60DC, 0xB1A4}, - {0x60DD, 0xD55C},{0x60DF, 0xB1A9},{0x60E0, 0xB466},{0x60E1, 0xB463},{0x60E2, 0xD8FB},{0x60E4, 0xD55A},{0x60E6, 0xB17D},{0x60F0, 0xB46B}, - {0x60F1, 0xB46F},{0x60F2, 0xD940},{0x60F3, 0xB751},{0x60F4, 0xB46D},{0x60F5, 0xD944},{0x60F6, 0xB471},{0x60F7, 0xDD65},{0x60F8, 0xD946}, - {0x60F9, 0xB753},{0x60FA, 0xB469},{0x60FB, 0xB46C},{0x60FC, 0xD947},{0x60FE, 0xD948},{0x60FF, 0xD94E},{0x6100, 0xB473},{0x6101, 0xB754}, - {0x6103, 0xD94A},{0x6104, 0xD94F},{0x6105, 0xD943},{0x6106, 0xB75E},{0x6108, 0xB755},{0x6109, 0xB472},{0x610A, 0xD941},{0x610B, 0xD950}, - {0x610D, 0xB75D},{0x610E, 0xB470},{0x610F, 0xB74E},{0x6110, 0xD94D},{0x6112, 0xB474},{0x6113, 0xD945},{0x6114, 0xD8FE},{0x6115, 0xB46A}, - {0x6116, 0xD942},{0x6118, 0xD94B},{0x611A, 0xB74D},{0x611B, 0xB752},{0x611C, 0xB467},{0x611D, 0xD94C},{0x611F, 0xB750},{0x6123, 0xB468}, - {0x6127, 0xB75C},{0x6128, 0xE1C3},{0x6129, 0xDD70},{0x612B, 0xDD68},{0x612C, 0xE1C2},{0x612E, 0xDD6C},{0x612F, 0xDD6E},{0x6132, 0xDD6B}, - {0x6134, 0xB75B},{0x6136, 0xDD6A},{0x6137, 0xB75F},{0x613B, 0xE1D2},{0x613E, 0xB75A},{0x613F, 0xBA40},{0x6140, 0xDD71},{0x6141, 0xE1C4}, - {0x6144, 0xB758},{0x6145, 0xDD69},{0x6146, 0xDD6D},{0x6147, 0xB9FE},{0x6148, 0xB74F},{0x6149, 0xDD66},{0x614A, 0xDD67},{0x614B, 0xBA41}, - {0x614C, 0xB757},{0x614D, 0xB759},{0x614E, 0xB756},{0x614F, 0xDD6F},{0x6152, 0xE1C8},{0x6153, 0xE1C9},{0x6154, 0xE1CE},{0x6155, 0xBC7D}, - {0x6156, 0xE1D5},{0x6158, 0xBA47},{0x615A, 0xBA46},{0x615B, 0xE1D0},{0x615D, 0xBC7C},{0x615E, 0xE1C5},{0x615F, 0xBA45},{0x6161, 0xE1D4}, - {0x6162, 0xBA43},{0x6163, 0xBA44},{0x6165, 0xE1D1},{0x6166, 0xE5AA},{0x6167, 0xBC7A},{0x6168, 0xB46E},{0x616A, 0xE1D3},{0x616B, 0xBCA3}, - {0x616C, 0xE1CB},{0x616E, 0xBC7B},{0x6170, 0xBCA2},{0x6171, 0xE1C6},{0x6172, 0xE1CA},{0x6173, 0xE1C7},{0x6174, 0xE1CD},{0x6175, 0xBA48}, - {0x6176, 0xBC79},{0x6177, 0xBA42},{0x6179, 0xE57A},{0x617A, 0xE1CF},{0x617C, 0xBCA1},{0x617E, 0xBCA4},{0x6180, 0xE1CC},{0x6182, 0xBC7E}, - {0x6183, 0xE579},{0x6189, 0xE57E},{0x618A, 0xBECE},{0x618B, 0xE578},{0x618C, 0xE9A3},{0x618D, 0xE5A9},{0x618E, 0xBCA8},{0x6190, 0xBCA6}, - {0x6191, 0xBECC},{0x6192, 0xE5A6},{0x6193, 0xE5A2},{0x6194, 0xBCAC},{0x6196, 0xE978},{0x619A, 0xBCAA},{0x619B, 0xE5A1},{0x619D, 0xE976}, - {0x619F, 0xE5A5},{0x61A1, 0xE5A8},{0x61A2, 0xE57D},{0x61A4, 0xBCAB},{0x61A7, 0xBCA5},{0x61A8, 0xE977},{0x61A9, 0xBECD},{0x61AA, 0xE5A7}, - {0x61AB, 0xBCA7},{0x61AC, 0xBCA9},{0x61AD, 0xE5A4},{0x61AE, 0xBCAD},{0x61AF, 0xE5A3},{0x61B0, 0xE57C},{0x61B1, 0xE57B},{0x61B2, 0xBECB}, - {0x61B3, 0xE5AB},{0x61B4, 0xE97A},{0x61B5, 0xECE0},{0x61B6, 0xBED0},{0x61B8, 0xE9A2},{0x61BA, 0xE97E},{0x61BC, 0xECE1},{0x61BE, 0xBED1}, - {0x61BF, 0xE9A1},{0x61C1, 0xE97C},{0x61C2, 0xC0B4},{0x61C3, 0xECDF},{0x61C5, 0xE979},{0x61C6, 0xE97B},{0x61C7, 0xC0B5},{0x61C8, 0xBED3}, - {0x61C9, 0xC0B3},{0x61CA, 0xBED2},{0x61CB, 0xC0B7},{0x61CC, 0xE97D},{0x61CD, 0xBECF},{0x61D6, 0xEFCF},{0x61D8, 0xEFC7},{0x61DE, 0xECE7}, - {0x61DF, 0xEFC8},{0x61E0, 0xECE3},{0x61E3, 0xC256},{0x61E4, 0xECE5},{0x61E5, 0xECE4},{0x61E6, 0xC0B6},{0x61E7, 0xECE2},{0x61E8, 0xECE6}, - {0x61E9, 0xEFD0},{0x61EA, 0xEFCC},{0x61EB, 0xEFCE},{0x61ED, 0xEFC9},{0x61EE, 0xEFCA},{0x61F0, 0xEFCD},{0x61F1, 0xEFCB},{0x61F2, 0xC367}, - {0x61F5, 0xC36A},{0x61F6, 0xC369},{0x61F7, 0xC368},{0x61F8, 0xC461},{0x61F9, 0xF44A},{0x61FA, 0xC462},{0x61FB, 0xF241},{0x61FC, 0xC4DF}, - {0x61FD, 0xF5CC},{0x61FE, 0xC4E0},{0x61FF, 0xC574},{0x6200, 0xC5CA},{0x6201, 0xF7D9},{0x6203, 0xF7DA},{0x6204, 0xF7DB},{0x6207, 0xF9BA}, - {0x6208, 0xA4E0},{0x6209, 0xC97C},{0x620A, 0xA5B3},{0x620C, 0xA6A6},{0x620D, 0xA6A7},{0x620E, 0xA6A5},{0x6210, 0xA6A8},{0x6211, 0xA7DA}, - {0x6212, 0xA7D9},{0x6214, 0xCCB1},{0x6215, 0xA9CF},{0x6216, 0xA9CE},{0x6219, 0xD1AF},{0x621A, 0xB1AD},{0x621B, 0xB1AE},{0x621F, 0xB475}, - {0x6220, 0xDD72},{0x6221, 0xB760},{0x6222, 0xB761},{0x6223, 0xDD74},{0x6224, 0xDD76},{0x6225, 0xDD75},{0x6227, 0xE1D7},{0x6229, 0xE1D6}, - {0x622A, 0xBA49},{0x622B, 0xE1D8},{0x622D, 0xE5AC},{0x622E, 0xBCAE},{0x6230, 0xBED4},{0x6232, 0xC0B8},{0x6233, 0xC257},{0x6234, 0xC0B9}, - {0x6236, 0xA4E1},{0x623A, 0xCAE6},{0x623D, 0xCCB2},{0x623E, 0xA9D1},{0x623F, 0xA9D0},{0x6240, 0xA9D2},{0x6241, 0xABF3},{0x6242, 0xCED2}, - {0x6243, 0xCED3},{0x6246, 0xD1B0},{0x6247, 0xAEB0},{0x6248, 0xB1AF},{0x6249, 0xB476},{0x624A, 0xD951},{0x624B, 0xA4E2},{0x624D, 0xA47E}, - {0x624E, 0xA4E3},{0x6250, 0xC97D},{0x6251, 0xA5B7},{0x6252, 0xA5B6},{0x6253, 0xA5B4},{0x6254, 0xA5B5},{0x6258, 0xA6AB},{0x6259, 0xC9E9}, - {0x625A, 0xC9EB},{0x625B, 0xA6AA},{0x625C, 0xC9E3},{0x625E, 0xC9E4},{0x6260, 0xC9EA},{0x6261, 0xC9E6},{0x6262, 0xC9E8},{0x6263, 0xA6A9}, - {0x6264, 0xC9E5},{0x6265, 0xC9EC},{0x6266, 0xC9E7},{0x626D, 0xA7E1},{0x626E, 0xA7EA},{0x626F, 0xA7E8},{0x6270, 0xCAF0},{0x6271, 0xCAED}, - {0x6272, 0xCAF5},{0x6273, 0xA7E6},{0x6274, 0xCAF6},{0x6276, 0xA7DF},{0x6277, 0xCAF3},{0x6279, 0xA7E5},{0x627A, 0xCAEF},{0x627B, 0xCAEE}, - {0x627C, 0xA7E3},{0x627D, 0xCAF4},{0x627E, 0xA7E4},{0x627F, 0xA9D3},{0x6280, 0xA7DE},{0x6281, 0xCAF1},{0x6283, 0xCAE7},{0x6284, 0xA7DB}, - {0x6286, 0xA7EE},{0x6287, 0xCAEC},{0x6288, 0xCAF2},{0x6289, 0xA7E0},{0x628A, 0xA7E2},{0x628C, 0xCAE8},{0x628E, 0xCAE9},{0x628F, 0xCAEA}, - {0x6291, 0xA7ED},{0x6292, 0xA7E7},{0x6293, 0xA7EC},{0x6294, 0xCAEB},{0x6295, 0xA7EB},{0x6296, 0xA7DD},{0x6297, 0xA7DC},{0x6298, 0xA7E9}, - {0x62A8, 0xA9E1},{0x62A9, 0xCCBE},{0x62AA, 0xCCB7},{0x62AB, 0xA9DC},{0x62AC, 0xA9EF},{0x62AD, 0xCCB3},{0x62AE, 0xCCBA},{0x62AF, 0xCCBC}, - {0x62B0, 0xCCBF},{0x62B1, 0xA9EA},{0x62B3, 0xCCBB},{0x62B4, 0xCCB4},{0x62B5, 0xA9E8},{0x62B6, 0xCCB8},{0x62B8, 0xCCC0},{0x62B9, 0xA9D9}, - {0x62BB, 0xCCBD},{0x62BC, 0xA9E3},{0x62BD, 0xA9E2},{0x62BE, 0xCCB6},{0x62BF, 0xA9D7},{0x62C2, 0xA9D8},{0x62C4, 0xA9D6},{0x62C6, 0xA9EE}, - {0x62C7, 0xA9E6},{0x62C8, 0xA9E0},{0x62C9, 0xA9D4},{0x62CA, 0xCCB9},{0x62CB, 0xA9DF},{0x62CC, 0xA9D5},{0x62CD, 0xA9E7},{0x62CE, 0xA9F0}, - {0x62CF, 0xCED4},{0x62D0, 0xA9E4},{0x62D1, 0xCCB5},{0x62D2, 0xA9DA},{0x62D3, 0xA9DD},{0x62D4, 0xA9DE},{0x62D6, 0xA9EC},{0x62D7, 0xA9ED}, - {0x62D8, 0xA9EB},{0x62D9, 0xA9E5},{0x62DA, 0xA9E9},{0x62DB, 0xA9DB},{0x62DC, 0xABF4},{0x62EB, 0xCEDA},{0x62EC, 0xAC41},{0x62ED, 0xABF8}, - {0x62EE, 0xABFA},{0x62EF, 0xAC40},{0x62F0, 0xCEE6},{0x62F1, 0xABFD},{0x62F2, 0xD1B1},{0x62F3, 0xAEB1},{0x62F4, 0xAC43},{0x62F5, 0xCED7}, - {0x62F6, 0xCEDF},{0x62F7, 0xABFE},{0x62F8, 0xCEDE},{0x62F9, 0xCEDB},{0x62FA, 0xCEE3},{0x62FB, 0xCEE5},{0x62FC, 0xABF7},{0x62FD, 0xABFB}, - {0x62FE, 0xAC42},{0x62FF, 0xAEB3},{0x6300, 0xCEE0},{0x6301, 0xABF9},{0x6302, 0xAC45},{0x6303, 0xCED9},{0x6307, 0xABFC},{0x6308, 0xAEB2}, - {0x6309, 0xABF6},{0x630B, 0xCED6},{0x630C, 0xCEDD},{0x630D, 0xCED5},{0x630E, 0xCED8},{0x630F, 0xCEDC},{0x6310, 0xD1B2},{0x6311, 0xAC44}, - {0x6313, 0xCEE1},{0x6314, 0xCEE2},{0x6315, 0xCEE4},{0x6316, 0xABF5},{0x6328, 0xAEC1},{0x6329, 0xD1BE},{0x632A, 0xAEBF},{0x632B, 0xAEC0}, - {0x632C, 0xD1B4},{0x632D, 0xD1C4},{0x632F, 0xAEB6},{0x6332, 0xD566},{0x6333, 0xD1C6},{0x6334, 0xD1C0},{0x6336, 0xD1B7},{0x6338, 0xD1C9}, - {0x6339, 0xD1BA},{0x633A, 0xAEBC},{0x633B, 0xD57D},{0x633C, 0xD1BD},{0x633D, 0xAEBE},{0x633E, 0xAEB5},{0x6340, 0xD1CB},{0x6341, 0xD1BF}, - {0x6342, 0xAEB8},{0x6343, 0xD1B8},{0x6344, 0xD1B5},{0x6345, 0xD1B6},{0x6346, 0xAEB9},{0x6347, 0xD1C5},{0x6348, 0xD1CC},{0x6349, 0xAEBB}, - {0x634A, 0xD1BC},{0x634B, 0xD1BB},{0x634C, 0xAEC3},{0x634D, 0xAEC2},{0x634E, 0xAEB4},{0x634F, 0xAEBA},{0x6350, 0xAEBD},{0x6351, 0xD1C8}, - {0x6354, 0xD1C2},{0x6355, 0xAEB7},{0x6356, 0xD1B3},{0x6357, 0xD1CA},{0x6358, 0xD1C1},{0x6359, 0xD1C3},{0x635A, 0xD1C7},{0x6365, 0xD567}, - {0x6367, 0xB1B7},{0x6368, 0xB1CB},{0x6369, 0xB1CA},{0x636B, 0xB1BF},{0x636D, 0xD579},{0x636E, 0xD575},{0x636F, 0xD572},{0x6370, 0xD5A6}, - {0x6371, 0xB1BA},{0x6372, 0xB1B2},{0x6375, 0xD577},{0x6376, 0xB4A8},{0x6377, 0xB1B6},{0x6378, 0xD5A1},{0x637A, 0xB1CC},{0x637B, 0xB1C9}, - {0x637C, 0xD57B},{0x637D, 0xD56A},{0x6380, 0xB1C8},{0x6381, 0xD5A3},{0x6382, 0xD569},{0x6383, 0xB1BD},{0x6384, 0xB1C1},{0x6385, 0xD5A2}, - {0x6387, 0xD573},{0x6388, 0xB1C2},{0x6389, 0xB1BC},{0x638A, 0xD568},{0x638C, 0xB478},{0x638D, 0xD5A5},{0x638E, 0xD571},{0x638F, 0xB1C7}, - {0x6390, 0xD574},{0x6391, 0xD5A4},{0x6392, 0xB1C6},{0x6394, 0xD952},{0x6396, 0xB1B3},{0x6397, 0xD56F},{0x6398, 0xB1B8},{0x6399, 0xB1C3}, - {0x639B, 0xB1BE},{0x639C, 0xD578},{0x639D, 0xD56E},{0x639E, 0xD56C},{0x639F, 0xD57E},{0x63A0, 0xB1B0},{0x63A1, 0xB1C4},{0x63A2, 0xB1B4}, - {0x63A3, 0xB477},{0x63A4, 0xD57C},{0x63A5, 0xB1B5},{0x63A7, 0xB1B1},{0x63A8, 0xB1C0},{0x63A9, 0xB1BB},{0x63AA, 0xB1B9},{0x63AB, 0xD570}, - {0x63AC, 0xB1C5},{0x63AD, 0xD56D},{0x63AE, 0xD57A},{0x63AF, 0xD576},{0x63B0, 0xD954},{0x63B1, 0xD953},{0x63BD, 0xD56B},{0x63BE, 0xD964}, - {0x63C0, 0xB47A},{0x63C2, 0xD96A},{0x63C3, 0xD959},{0x63C4, 0xD967},{0x63C5, 0xDD77},{0x63C6, 0xB47D},{0x63C7, 0xD96B},{0x63C8, 0xD96E}, - {0x63C9, 0xB47C},{0x63CA, 0xD95C},{0x63CB, 0xD96D},{0x63CC, 0xD96C},{0x63CD, 0xB47E},{0x63CE, 0xD955},{0x63CF, 0xB479},{0x63D0, 0xB4A3}, - {0x63D2, 0xB4A1},{0x63D3, 0xD969},{0x63D5, 0xD95F},{0x63D6, 0xB4A5},{0x63D7, 0xD970},{0x63D8, 0xD968},{0x63D9, 0xD971},{0x63DA, 0xB4AD}, - {0x63DB, 0xB4AB},{0x63DC, 0xD966},{0x63DD, 0xD965},{0x63DF, 0xD963},{0x63E0, 0xD95D},{0x63E1, 0xB4A4},{0x63E3, 0xB4A2},{0x63E4, 0xD1B9}, - {0x63E5, 0xD956},{0x63E7, 0xDDB7},{0x63E8, 0xD957},{0x63E9, 0xB47B},{0x63EA, 0xB4AA},{0x63EB, 0xDD79},{0x63ED, 0xB4A6},{0x63EE, 0xB4A7}, - {0x63EF, 0xD958},{0x63F0, 0xD96F},{0x63F1, 0xDD78},{0x63F2, 0xD960},{0x63F3, 0xD95B},{0x63F4, 0xB4A9},{0x63F5, 0xD961},{0x63F6, 0xD95E}, - {0x63F9, 0xB4AE},{0x6406, 0xB770},{0x6409, 0xDD7C},{0x640A, 0xDDB1},{0x640B, 0xDDB6},{0x640C, 0xDDAA},{0x640D, 0xB76C},{0x640E, 0xDDBB}, - {0x640F, 0xB769},{0x6410, 0xDD7A},{0x6412, 0xDD7B},{0x6413, 0xB762},{0x6414, 0xB76B},{0x6415, 0xDDA4},{0x6416, 0xB76E},{0x6417, 0xB76F}, - {0x6418, 0xDDA5},{0x641A, 0xDDB2},{0x641B, 0xDDB8},{0x641C, 0xB76A},{0x641E, 0xB764},{0x641F, 0xDDA3},{0x6420, 0xDD7D},{0x6421, 0xDDBA}, - {0x6422, 0xDDA8},{0x6423, 0xDDA9},{0x6424, 0xDD7E},{0x6425, 0xDDB4},{0x6426, 0xDDAB},{0x6427, 0xDDB5},{0x6428, 0xDDAD},{0x642A, 0xB765}, - {0x642B, 0xE1D9},{0x642C, 0xB768},{0x642D, 0xB766},{0x642E, 0xDDB9},{0x642F, 0xDDB0},{0x6430, 0xDDAC},{0x6433, 0xDDA1},{0x6434, 0xBA53}, - {0x6435, 0xDDAF},{0x6436, 0xB76D},{0x6437, 0xDDA7},{0x6439, 0xDDA6},{0x643D, 0xB767},{0x643E, 0xB763},{0x643F, 0xE1EE},{0x6440, 0xDDB3}, - {0x6441, 0xDDAE},{0x6443, 0xDDA2},{0x644B, 0xE1E9},{0x644D, 0xE1DA},{0x644E, 0xE1E5},{0x6450, 0xE1EC},{0x6451, 0xBA51},{0x6452, 0xB4AC}, - {0x6453, 0xE1EA},{0x6454, 0xBA4C},{0x6458, 0xBA4B},{0x6459, 0xE1F1},{0x645B, 0xE1DB},{0x645C, 0xE1E8},{0x645D, 0xE1DC},{0x645E, 0xE1E7}, - {0x645F, 0xBA4F},{0x6460, 0xE1EB},{0x6461, 0xD962},{0x6465, 0xE1F2},{0x6466, 0xE1E3},{0x6467, 0xBA52},{0x6468, 0xE5BA},{0x6469, 0xBCAF}, - {0x646B, 0xE1F0},{0x646C, 0xE1EF},{0x646D, 0xBA54},{0x646E, 0xE5AD},{0x646F, 0xBCB0},{0x6470, 0xE5AE},{0x6472, 0xE1DF},{0x6473, 0xE1E0}, - {0x6474, 0xE1DD},{0x6475, 0xE1E2},{0x6476, 0xE1DE},{0x6477, 0xE1F3},{0x6478, 0xBA4E},{0x6479, 0xBCB1},{0x647A, 0xBA50},{0x647B, 0xBA55}, - {0x647D, 0xE1E1},{0x647F, 0xE1ED},{0x6482, 0xE1E6},{0x6485, 0xE5B1},{0x6487, 0xBA4A},{0x6488, 0xBCB4},{0x6489, 0xE9AA},{0x648A, 0xE5B6}, - {0x648B, 0xE5B5},{0x648C, 0xE5B7},{0x648F, 0xE5B4},{0x6490, 0xBCB5},{0x6492, 0xBCBB},{0x6493, 0xBCB8},{0x6495, 0xBCB9},{0x6496, 0xE5AF}, - {0x6497, 0xE5B2},{0x6498, 0xE5BC},{0x6499, 0xBCC1},{0x649A, 0xBCBF},{0x649C, 0xE5B3},{0x649D, 0xD95A},{0x649E, 0xBCB2},{0x649F, 0xE5B9}, - {0x64A0, 0xE5B0},{0x64A2, 0xBCC2},{0x64A3, 0xE5B8},{0x64A4, 0xBA4D},{0x64A5, 0xBCB7},{0x64A6, 0xE1E4},{0x64A9, 0xBCBA},{0x64AB, 0xBCBE}, - {0x64AC, 0xBCC0},{0x64AD, 0xBCBD},{0x64AE, 0xBCBC},{0x64B0, 0xBCB6},{0x64B1, 0xE5BB},{0x64B2, 0xBCB3},{0x64B3, 0xBCC3},{0x64BB, 0xBED8}, - {0x64BC, 0xBED9},{0x64BD, 0xE9A9},{0x64BE, 0xBEE2},{0x64BF, 0xBEDF},{0x64C1, 0xBED6},{0x64C2, 0xBEDD},{0x64C3, 0xE9AB},{0x64C4, 0xBEDB}, - {0x64C5, 0xBED5},{0x64C7, 0xBEDC},{0x64C9, 0xE9A8},{0x64CA, 0xC0BB},{0x64CB, 0xBED7},{0x64CD, 0xBEDE},{0x64CE, 0xC0BA},{0x64CF, 0xE9A7}, - {0x64D0, 0xE9A6},{0x64D2, 0xBEE0},{0x64D4, 0xBEE1},{0x64D6, 0xE9A5},{0x64D7, 0xE9A4},{0x64D8, 0xC0BC},{0x64D9, 0xE9AE},{0x64DA, 0xBEDA}, - {0x64DB, 0xE9AC},{0x64E0, 0xC0BD},{0x64E2, 0xC0C2},{0x64E3, 0xECEA},{0x64E4, 0xECEC},{0x64E6, 0xC0BF},{0x64E8, 0xECED},{0x64E9, 0xECE9}, - {0x64EB, 0xECEB},{0x64EC, 0xC0C0},{0x64ED, 0xC0C3},{0x64EF, 0xECE8},{0x64F0, 0xC0BE},{0x64F1, 0xC0C1},{0x64F2, 0xC259},{0x64F3, 0xE9AD}, - {0x64F4, 0xC258},{0x64F7, 0xC25E},{0x64F8, 0xEFD4},{0x64FA, 0xC25C},{0x64FB, 0xC25D},{0x64FC, 0xEFD7},{0x64FD, 0xEFD3},{0x64FE, 0xC25A}, - {0x64FF, 0xEFD1},{0x6500, 0xC36B},{0x6501, 0xEFD5},{0x6503, 0xEFD6},{0x6504, 0xEFD2},{0x6506, 0xC25B},{0x6507, 0xF242},{0x6509, 0xF245}, - {0x650C, 0xF246},{0x650D, 0xF244},{0x650E, 0xF247},{0x650F, 0xC36C},{0x6510, 0xF243},{0x6513, 0xF44E},{0x6514, 0xC464},{0x6515, 0xF44D}, - {0x6516, 0xF44C},{0x6517, 0xF44B},{0x6518, 0xC463},{0x6519, 0xC465},{0x651B, 0xF5CD},{0x651C, 0xC4E2},{0x651D, 0xC4E1},{0x6520, 0xF6E1}, - {0x6521, 0xF6E0},{0x6522, 0xF6E3},{0x6523, 0xC5CB},{0x6524, 0xC575},{0x6525, 0xF7DD},{0x6526, 0xF6E2},{0x6529, 0xF7DC},{0x652A, 0xC5CD}, - {0x652B, 0xC5CC},{0x652C, 0xC5F3},{0x652D, 0xF8A9},{0x652E, 0xF8EF},{0x652F, 0xA4E4},{0x6532, 0xD972},{0x6533, 0xE9AF},{0x6536, 0xA6AC}, - {0x6537, 0xCAF7},{0x6538, 0xA7F1},{0x6539, 0xA7EF},{0x653B, 0xA7F0},{0x653D, 0xCCC1},{0x653E, 0xA9F1},{0x653F, 0xAC46},{0x6541, 0xCEE7}, - {0x6543, 0xCEE8},{0x6545, 0xAC47},{0x6546, 0xD1CE},{0x6548, 0xAEC4},{0x6549, 0xAEC5},{0x654A, 0xD1CD},{0x654F, 0xB1D3},{0x6551, 0xB1CF}, - {0x6553, 0xD5A7},{0x6554, 0xB1D6},{0x6555, 0xB1D5},{0x6556, 0xB1CE},{0x6557, 0xB1D1},{0x6558, 0xB1D4},{0x6559, 0xB1D0},{0x655C, 0xD976}, - {0x655D, 0xB1CD},{0x655E, 0xB4AF},{0x6562, 0xB4B1},{0x6563, 0xB4B2},{0x6564, 0xD975},{0x6565, 0xD978},{0x6566, 0xB4B0},{0x6567, 0xD973}, - {0x6568, 0xD977},{0x656A, 0xD974},{0x656C, 0xB771},{0x656F, 0xDDBC},{0x6572, 0xBA56},{0x6573, 0xE1F4},{0x6574, 0xBEE3},{0x6575, 0xBCC4}, - {0x6576, 0xE5BD},{0x6577, 0xBCC5},{0x6578, 0xBCC6},{0x6579, 0xE5BF},{0x657A, 0xE5BE},{0x657B, 0xE5C0},{0x657C, 0xE9B1},{0x657F, 0xE9B0}, - {0x6580, 0xECEF},{0x6581, 0xECEE},{0x6582, 0xC0C4},{0x6583, 0xC0C5},{0x6584, 0xF248},{0x6587, 0xA4E5},{0x658C, 0xD979},{0x6590, 0xB4B4}, - {0x6591, 0xB4B3},{0x6592, 0xDDBD},{0x6594, 0xEFD8},{0x6595, 0xC4E3},{0x6596, 0xF7DE},{0x6597, 0xA4E6},{0x6599, 0xAEC6},{0x659B, 0xB1D8}, - {0x659C, 0xB1D7},{0x659D, 0xD97A},{0x659E, 0xD97B},{0x659F, 0xB772},{0x65A0, 0xE1F5},{0x65A1, 0xBA57},{0x65A2, 0xE9B2},{0x65A4, 0xA4E7}, - {0x65A5, 0xA5B8},{0x65A7, 0xA9F2},{0x65A8, 0xCCC2},{0x65AA, 0xCEE9},{0x65AB, 0xAC48},{0x65AC, 0xB1D9},{0x65AE, 0xD97C},{0x65AF, 0xB4B5}, - {0x65B0, 0xB773},{0x65B2, 0xE5C1},{0x65B3, 0xE5C2},{0x65B6, 0xECF0},{0x65B7, 0xC25F},{0x65B8, 0xF8F0},{0x65B9, 0xA4E8},{0x65BB, 0xCCC3}, - {0x65BC, 0xA9F3},{0x65BD, 0xAC49},{0x65BF, 0xCEEA},{0x65C1, 0xAEC7},{0x65C2, 0xD1D2},{0x65C3, 0xD1D0},{0x65C4, 0xD1D1},{0x65C5, 0xAEC8}, - {0x65C6, 0xD1CF},{0x65CB, 0xB1DB},{0x65CC, 0xB1DC},{0x65CD, 0xD5A8},{0x65CE, 0xB1DD},{0x65CF, 0xB1DA},{0x65D0, 0xD97D},{0x65D2, 0xD97E}, - {0x65D3, 0xDDBE},{0x65D6, 0xBA59},{0x65D7, 0xBA58},{0x65DA, 0xECF1},{0x65DB, 0xEFD9},{0x65DD, 0xF24A},{0x65DE, 0xF249},{0x65DF, 0xF44F}, - {0x65E1, 0xC95E},{0x65E2, 0xAC4A},{0x65E5, 0xA4E9},{0x65E6, 0xA5B9},{0x65E8, 0xA6AE},{0x65E9, 0xA6AD},{0x65EC, 0xA6AF},{0x65ED, 0xA6B0}, - {0x65EE, 0xC9EE},{0x65EF, 0xC9ED},{0x65F0, 0xCAF8},{0x65F1, 0xA7F2},{0x65F2, 0xCAFB},{0x65F3, 0xCAFA},{0x65F4, 0xCAF9},{0x65F5, 0xCAFC}, - {0x65FA, 0xA9F4},{0x65FB, 0xCCC9},{0x65FC, 0xCCC5},{0x65FD, 0xCCCE},{0x6600, 0xA9FB},{0x6602, 0xA9F9},{0x6603, 0xCCCA},{0x6604, 0xCCC6}, - {0x6605, 0xCCCD},{0x6606, 0xA9F8},{0x6607, 0xAA40},{0x6608, 0xCCC8},{0x6609, 0xCCC4},{0x660A, 0xA9FE},{0x660B, 0xCCCB},{0x660C, 0xA9F7}, - {0x660D, 0xCCCC},{0x660E, 0xA9FA},{0x660F, 0xA9FC},{0x6610, 0xCCD0},{0x6611, 0xCCCF},{0x6612, 0xCCC7},{0x6613, 0xA9F6},{0x6614, 0xA9F5}, - {0x6615, 0xA9FD},{0x661C, 0xCEEF},{0x661D, 0xCEF5},{0x661F, 0xAC50},{0x6620, 0xAC4D},{0x6621, 0xCEEC},{0x6622, 0xCEF1},{0x6624, 0xAC53}, - {0x6625, 0xAC4B},{0x6626, 0xCEF0},{0x6627, 0xAC4E},{0x6628, 0xAC51},{0x662B, 0xCEF3},{0x662D, 0xAC4C},{0x662E, 0xCEF8},{0x662F, 0xAC4F}, - {0x6631, 0xAC52},{0x6632, 0xCEED},{0x6633, 0xCEF2},{0x6634, 0xCEF6},{0x6635, 0xCEEE},{0x6636, 0xCEEB},{0x6639, 0xCEF7},{0x663A, 0xCEF4}, - {0x6641, 0xAED0},{0x6642, 0xAEC9},{0x6643, 0xAECC},{0x6645, 0xAECF},{0x6647, 0xD1D5},{0x6649, 0xAECA},{0x664A, 0xD1D3},{0x664C, 0xAECE}, - {0x664F, 0xAECB},{0x6651, 0xD1D6},{0x6652, 0xAECD},{0x6659, 0xD5AC},{0x665A, 0xB1DF},{0x665B, 0xD5AB},{0x665C, 0xD5AD},{0x665D, 0xB1DE}, - {0x665E, 0xB1E3},{0x665F, 0xD1D4},{0x6661, 0xD5AA},{0x6662, 0xD5AE},{0x6664, 0xB1E0},{0x6665, 0xD5A9},{0x6666, 0xB1E2},{0x6668, 0xB1E1}, - {0x666A, 0xD9A7},{0x666C, 0xD9A2},{0x666E, 0xB4B6},{0x666F, 0xB4BA},{0x6670, 0xB4B7},{0x6671, 0xD9A5},{0x6672, 0xD9A8},{0x6674, 0xB4B8}, - {0x6676, 0xB4B9},{0x6677, 0xB4BE},{0x6678, 0xDDC7},{0x6679, 0xD9A6},{0x667A, 0xB4BC},{0x667B, 0xD9A3},{0x667C, 0xD9A1},{0x667E, 0xB4BD}, - {0x6680, 0xD9A4},{0x6684, 0xB779},{0x6686, 0xDDBF},{0x6687, 0xB776},{0x6688, 0xB777},{0x6689, 0xB775},{0x668A, 0xDDC4},{0x668B, 0xDDC3}, - {0x668C, 0xDDC0},{0x668D, 0xB77B},{0x6690, 0xDDC2},{0x6691, 0xB4BB},{0x6694, 0xDDC6},{0x6695, 0xDDC1},{0x6696, 0xB778},{0x6697, 0xB774}, - {0x6698, 0xB77A},{0x6699, 0xDDC5},{0x669D, 0xBA5C},{0x669F, 0xE1F8},{0x66A0, 0xE1F7},{0x66A1, 0xE1F6},{0x66A2, 0xBA5A},{0x66A8, 0xBA5B}, - {0x66A9, 0xE5C5},{0x66AA, 0xE5C8},{0x66AB, 0xBCC8},{0x66AE, 0xBCC7},{0x66AF, 0xE5C9},{0x66B0, 0xE5C4},{0x66B1, 0xBCCA},{0x66B2, 0xE5C6}, - {0x66B4, 0xBCC9},{0x66B5, 0xE5C3},{0x66B7, 0xE5C7},{0x66B8, 0xBEE9},{0x66B9, 0xBEE6},{0x66BA, 0xE9BB},{0x66BB, 0xE9BA},{0x66BD, 0xE9B9}, - {0x66BE, 0xE9B4},{0x66C0, 0xE9B5},{0x66C4, 0xBEE7},{0x66C6, 0xBEE4},{0x66C7, 0xBEE8},{0x66C8, 0xE9B3},{0x66C9, 0xBEE5},{0x66CA, 0xE9B6}, - {0x66CB, 0xE9B7},{0x66CC, 0xE9BC},{0x66CF, 0xE9B8},{0x66D2, 0xECF2},{0x66D6, 0xC0C7},{0x66D8, 0xEFDC},{0x66D9, 0xC0C6},{0x66DA, 0xEFDA}, - {0x66DB, 0xEFDB},{0x66DC, 0xC260},{0x66DD, 0xC36E},{0x66DE, 0xF24B},{0x66E0, 0xC36D},{0x66E3, 0xF451},{0x66E4, 0xF452},{0x66E6, 0xC466}, - {0x66E8, 0xF450},{0x66E9, 0xC4E4},{0x66EB, 0xF7DF},{0x66EC, 0xC5CE},{0x66ED, 0xF8AA},{0x66EE, 0xF8AB},{0x66F0, 0xA4EA},{0x66F2, 0xA6B1}, - {0x66F3, 0xA6B2},{0x66F4, 0xA7F3},{0x66F6, 0xCCD1},{0x66F7, 0xAC54},{0x66F8, 0xAED1},{0x66F9, 0xB1E4},{0x66FC, 0xB0D2},{0x66FE, 0xB4BF}, - {0x66FF, 0xB4C0},{0x6700, 0xB3CC},{0x6701, 0xD9A9},{0x6703, 0xB77C},{0x6704, 0xE1FA},{0x6705, 0xE1F9},{0x6708, 0xA4EB},{0x6709, 0xA6B3}, - {0x670A, 0xCCD2},{0x670B, 0xAA42},{0x670D, 0xAA41},{0x670F, 0xCEF9},{0x6710, 0xCEFA},{0x6712, 0xD1D7},{0x6713, 0xD1D8},{0x6714, 0xAED2}, - {0x6715, 0xAED3},{0x6717, 0xAED4},{0x6718, 0xD5AF},{0x671B, 0xB1E6},{0x671D, 0xB4C2},{0x671F, 0xB4C1},{0x6720, 0xDDC8},{0x6721, 0xDF7A}, - {0x6722, 0xE1FB},{0x6723, 0xE9BD},{0x6726, 0xC261},{0x6727, 0xC467},{0x6728, 0xA4EC},{0x672A, 0xA5BC},{0x672B, 0xA5BD},{0x672C, 0xA5BB}, - {0x672D, 0xA5BE},{0x672E, 0xA5BA},{0x6731, 0xA6B6},{0x6733, 0xC9F6},{0x6734, 0xA6B5},{0x6735, 0xA6B7},{0x6738, 0xC9F1},{0x6739, 0xC9F0}, - {0x673A, 0xC9F3},{0x673B, 0xC9F2},{0x673C, 0xC9F5},{0x673D, 0xA6B4},{0x673E, 0xC9EF},{0x673F, 0xC9F4},{0x6745, 0xCAFD},{0x6746, 0xA7FD}, - {0x6747, 0xCAFE},{0x6748, 0xCB43},{0x6749, 0xA7FC},{0x674B, 0xCB47},{0x674C, 0xCB42},{0x674D, 0xCB45},{0x674E, 0xA7F5},{0x674F, 0xA7F6}, - {0x6750, 0xA7F7},{0x6751, 0xA7F8},{0x6753, 0xA840},{0x6755, 0xCB41},{0x6756, 0xA7FA},{0x6757, 0xA841},{0x6759, 0xCB40},{0x675A, 0xCB46}, - {0x675C, 0xA7F9},{0x675D, 0xCB44},{0x675E, 0xA7FB},{0x675F, 0xA7F4},{0x6760, 0xA7FE},{0x676A, 0xAA57},{0x676C, 0xCCD4},{0x676D, 0xAA43}, - {0x676F, 0xAA4D},{0x6770, 0xAA4E},{0x6771, 0xAA46},{0x6772, 0xAA58},{0x6773, 0xAA48},{0x6774, 0xCCDC},{0x6775, 0xAA53},{0x6776, 0xCCD7}, - {0x6777, 0xAA49},{0x6778, 0xCCE6},{0x6779, 0xCCE7},{0x677A, 0xCCDF},{0x677B, 0xCCD8},{0x677C, 0xAA56},{0x677D, 0xCCE4},{0x677E, 0xAA51}, - {0x677F, 0xAA4F},{0x6781, 0xCCE5},{0x6783, 0xCCE3},{0x6784, 0xCCDB},{0x6785, 0xCCD3},{0x6786, 0xCCDA},{0x6787, 0xAA4A},{0x6789, 0xAA50}, - {0x678B, 0xAA44},{0x678C, 0xCCDE},{0x678D, 0xCCDD},{0x678E, 0xCCD5},{0x6790, 0xAA52},{0x6791, 0xCCE1},{0x6792, 0xCCD6},{0x6793, 0xAA55}, - {0x6794, 0xCCE8},{0x6795, 0xAA45},{0x6797, 0xAA4C},{0x6798, 0xCCD9},{0x6799, 0xCCE2},{0x679A, 0xAA54},{0x679C, 0xAA47},{0x679D, 0xAA4B}, - {0x679F, 0xCCE0},{0x67AE, 0xCF5B},{0x67AF, 0xAC5C},{0x67B0, 0xAC69},{0x67B2, 0xCF56},{0x67B3, 0xCF4C},{0x67B4, 0xAC62},{0x67B5, 0xCF4A}, - {0x67B6, 0xAC5B},{0x67B7, 0xCF45},{0x67B8, 0xAC65},{0x67B9, 0xCF52},{0x67BA, 0xCEFE},{0x67BB, 0xCF41},{0x67C0, 0xCF44},{0x67C1, 0xCEFB}, - {0x67C2, 0xCF51},{0x67C3, 0xCF61},{0x67C4, 0xAC60},{0x67C5, 0xCF46},{0x67C6, 0xCF58},{0x67C8, 0xCEFD},{0x67C9, 0xCF5F},{0x67CA, 0xCF60}, - {0x67CB, 0xCF63},{0x67CC, 0xCF5A},{0x67CD, 0xCF4B},{0x67CE, 0xCF53},{0x67CF, 0xAC66},{0x67D0, 0xAC59},{0x67D1, 0xAC61},{0x67D2, 0xAC6D}, - {0x67D3, 0xAC56},{0x67D4, 0xAC58},{0x67D8, 0xCF43},{0x67D9, 0xAC6A},{0x67DA, 0xAC63},{0x67DB, 0xCF5D},{0x67DC, 0xCF40},{0x67DD, 0xAC6C}, - {0x67DE, 0xAC67},{0x67DF, 0xCF49},{0x67E2, 0xAC6B},{0x67E3, 0xCF50},{0x67E4, 0xCF48},{0x67E5, 0xAC64},{0x67E6, 0xCF5C},{0x67E7, 0xCF54}, - {0x67E9, 0xAC5E},{0x67EA, 0xCF62},{0x67EB, 0xCF47},{0x67EC, 0xAC5A},{0x67ED, 0xCF59},{0x67EE, 0xCF4F},{0x67EF, 0xAC5F},{0x67F0, 0xCF55}, - {0x67F1, 0xAC57},{0x67F2, 0xCEFC},{0x67F3, 0xAC68},{0x67F4, 0xAEE3},{0x67F5, 0xAC5D},{0x67F6, 0xCF4E},{0x67F7, 0xCF4D},{0x67F8, 0xCF42}, - {0x67FA, 0xCF5E},{0x67FC, 0xCF57},{0x67FF, 0xAC55},{0x6812, 0xD1EC},{0x6813, 0xAEEA},{0x6814, 0xD1ED},{0x6816, 0xD1E1},{0x6817, 0xAEDF}, - {0x6818, 0xAEEB},{0x681A, 0xD1DA},{0x681C, 0xD1E3},{0x681D, 0xD1EB},{0x681F, 0xD1D9},{0x6820, 0xD1F4},{0x6821, 0xAED5},{0x6825, 0xD1F3}, - {0x6826, 0xD1EE},{0x6828, 0xD1EF},{0x6829, 0xAEDD},{0x682A, 0xAEE8},{0x682B, 0xD1E5},{0x682D, 0xD1E6},{0x682E, 0xD1F0},{0x682F, 0xD1E7}, - {0x6831, 0xD1E2},{0x6832, 0xD1DC},{0x6833, 0xD1DD},{0x6834, 0xD1EA},{0x6835, 0xD1E4},{0x6838, 0xAED6},{0x6839, 0xAEDA},{0x683A, 0xD1F2}, - {0x683B, 0xD1DE},{0x683C, 0xAEE6},{0x683D, 0xAEE2},{0x6840, 0xAEE5},{0x6841, 0xAEEC},{0x6842, 0xAEDB},{0x6843, 0xAEE7},{0x6844, 0xD1E9}, - {0x6845, 0xAEE9},{0x6846, 0xAED8},{0x6848, 0xAED7},{0x6849, 0xD1DB},{0x684B, 0xD1DF},{0x684C, 0xAEE0},{0x684D, 0xD1F1},{0x684E, 0xD1E8}, - {0x684F, 0xD1E0},{0x6850, 0xAEE4},{0x6851, 0xAEE1},{0x6853, 0xAED9},{0x6854, 0xAEDC},{0x686B, 0xD5C4},{0x686D, 0xD5B4},{0x686E, 0xD5B5}, - {0x686F, 0xD5B9},{0x6871, 0xD5C8},{0x6872, 0xD5C5},{0x6874, 0xD5BE},{0x6875, 0xD5BD},{0x6876, 0xB1ED},{0x6877, 0xD5C1},{0x6878, 0xD5D0}, - {0x6879, 0xD5B0},{0x687B, 0xD5D1},{0x687C, 0xD5C3},{0x687D, 0xD5D5},{0x687E, 0xD5C9},{0x687F, 0xB1EC},{0x6880, 0xD5C7},{0x6881, 0xB1E7}, - {0x6882, 0xB1FC},{0x6883, 0xB1F2},{0x6885, 0xB1F6},{0x6886, 0xB1F5},{0x6887, 0xD5B1},{0x6889, 0xD5CE},{0x688A, 0xD5D4},{0x688B, 0xD5CC}, - {0x688C, 0xD5D3},{0x688F, 0xD5C0},{0x6890, 0xD5B2},{0x6891, 0xD5D2},{0x6892, 0xD5C2},{0x6893, 0xB1EA},{0x6894, 0xB1F7},{0x6896, 0xD5CB}, - {0x6897, 0xB1F0},{0x689B, 0xD5CA},{0x689C, 0xD5B3},{0x689D, 0xB1F8},{0x689F, 0xB1FA},{0x68A0, 0xD5CD},{0x68A1, 0xB1FB},{0x68A2, 0xB1E9}, - {0x68A3, 0xD5BA},{0x68A4, 0xD5CF},{0x68A7, 0xB1EF},{0x68A8, 0xB1F9},{0x68A9, 0xD5BC},{0x68AA, 0xD5C6},{0x68AB, 0xD5B7},{0x68AC, 0xD5BB}, - {0x68AD, 0xB1F4},{0x68AE, 0xD5B6},{0x68AF, 0xB1E8},{0x68B0, 0xB1F1},{0x68B1, 0xB1EE},{0x68B2, 0xD5BF},{0x68B3, 0xAEDE},{0x68B4, 0xD9C0}, - {0x68B5, 0xB1EB},{0x68C4, 0xB1F3},{0x68C6, 0xD9C3},{0x68C7, 0xD9D9},{0x68C8, 0xD9CE},{0x68C9, 0xB4D6},{0x68CB, 0xB4D1},{0x68CC, 0xD9BD}, - {0x68CD, 0xB4D2},{0x68CE, 0xD9CD},{0x68D0, 0xD9C6},{0x68D1, 0xD9D3},{0x68D2, 0xB4CE},{0x68D3, 0xD9AB},{0x68D4, 0xD9D5},{0x68D5, 0xB4C4}, - {0x68D6, 0xD9B3},{0x68D7, 0xB4C7},{0x68D8, 0xB4C6},{0x68DA, 0xB4D7},{0x68DC, 0xD9AD},{0x68DD, 0xD9CF},{0x68DE, 0xD9D0},{0x68DF, 0xB4C9}, - {0x68E0, 0xB4C5},{0x68E1, 0xD9BB},{0x68E3, 0xB4D0},{0x68E4, 0xD9B6},{0x68E6, 0xD9D1},{0x68E7, 0xB4CC},{0x68E8, 0xD9C9},{0x68E9, 0xD9D6}, - {0x68EA, 0xD9B0},{0x68EB, 0xD9B5},{0x68EC, 0xD9AF},{0x68EE, 0xB4CB},{0x68EF, 0xD9C2},{0x68F0, 0xDDDE},{0x68F1, 0xD9B1},{0x68F2, 0xB4CF}, - {0x68F3, 0xD9BA},{0x68F4, 0xD9D2},{0x68F5, 0xB4CA},{0x68F6, 0xD9B7},{0x68F7, 0xD9B4},{0x68F8, 0xD9C5},{0x68F9, 0xB4CD},{0x68FA, 0xB4C3}, - {0x68FB, 0xB4D9},{0x68FC, 0xD9C8},{0x68FD, 0xD9C7},{0x6904, 0xD9AC},{0x6905, 0xB4C8},{0x6906, 0xD9D4},{0x6907, 0xD9BC},{0x6908, 0xD9BE}, - {0x690A, 0xD9CB},{0x690B, 0xD9CA},{0x690C, 0xD9AA},{0x690D, 0xB4D3},{0x690E, 0xB4D5},{0x690F, 0xD9B2},{0x6910, 0xD9B9},{0x6911, 0xD9C1}, - {0x6912, 0xB4D4},{0x6913, 0xD9B8},{0x6914, 0xD9C4},{0x6915, 0xD9D7},{0x6917, 0xD9CC},{0x6925, 0xD9D8},{0x692A, 0xD9AE},{0x692F, 0xDDF2}, - {0x6930, 0xB7A6},{0x6932, 0xDDF0},{0x6933, 0xDDDB},{0x6934, 0xDDE0},{0x6935, 0xDDD9},{0x6937, 0xDDEC},{0x6938, 0xDDCB},{0x6939, 0xDDD2}, - {0x693B, 0xDDEA},{0x693C, 0xDDF4},{0x693D, 0xDDDC},{0x693F, 0xDDCF},{0x6940, 0xDDE2},{0x6941, 0xDDE7},{0x6942, 0xDDD3},{0x6944, 0xDDE4}, - {0x6945, 0xDDD0},{0x6948, 0xDDD7},{0x6949, 0xDDD8},{0x694A, 0xB7A8},{0x694B, 0xDDEB},{0x694C, 0xDDE9},{0x694E, 0xDDCC},{0x694F, 0xDDEE}, - {0x6951, 0xDDEF},{0x6952, 0xDDF1},{0x6953, 0xB7AC},{0x6954, 0xB7A4},{0x6956, 0xD5B8},{0x6957, 0xDDD4},{0x6958, 0xDDE6},{0x6959, 0xDDD5}, - {0x695A, 0xB7A1},{0x695B, 0xB7B1},{0x695C, 0xDDED},{0x695D, 0xB7AF},{0x695E, 0xB7AB},{0x695F, 0xDDCA},{0x6960, 0xB7A3},{0x6962, 0xDDCD}, - {0x6963, 0xB7B0},{0x6965, 0xDDDD},{0x6966, 0xDDC9},{0x6968, 0xB7A9},{0x6969, 0xDDE1},{0x696A, 0xDDD1},{0x696B, 0xB7AA},{0x696C, 0xDDDA}, - {0x696D, 0xB77E},{0x696E, 0xB4D8},{0x696F, 0xDDE3},{0x6970, 0xD9BF},{0x6971, 0xDDCE},{0x6974, 0xDDE8},{0x6975, 0xB7A5},{0x6976, 0xDDE5}, - {0x6977, 0xB7A2},{0x6978, 0xDDDF},{0x6979, 0xB7AD},{0x697A, 0xDDD6},{0x697B, 0xDDF3},{0x6982, 0xB7A7},{0x6983, 0xDEC6},{0x6986, 0xB7AE}, - {0x698D, 0xE24A},{0x698E, 0xE248},{0x6990, 0xE25E},{0x6991, 0xE246},{0x6993, 0xE258},{0x6994, 0xB77D},{0x6995, 0xBA5F},{0x6996, 0xE242}, - {0x6997, 0xE25D},{0x6999, 0xE247},{0x699A, 0xE255},{0x699B, 0xBA64},{0x699C, 0xBA5D},{0x699E, 0xE25B},{0x69A0, 0xE240},{0x69A1, 0xE25A}, - {0x69A3, 0xBA6F},{0x69A4, 0xE251},{0x69A5, 0xE261},{0x69A6, 0xBA6D},{0x69A7, 0xE249},{0x69A8, 0xBA5E},{0x69A9, 0xE24B},{0x69AA, 0xE259}, - {0x69AB, 0xBA67},{0x69AC, 0xE244},{0x69AD, 0xBA6B},{0x69AE, 0xBA61},{0x69AF, 0xE24D},{0x69B0, 0xE243},{0x69B1, 0xE1FC},{0x69B3, 0xE257}, - {0x69B4, 0xBA68},{0x69B5, 0xE260},{0x69B6, 0xE1FD},{0x69B7, 0xBA65},{0x69B9, 0xE253},{0x69BB, 0xBA66},{0x69BC, 0xE245},{0x69BD, 0xE250}, - {0x69BE, 0xE24C},{0x69BF, 0xE24E},{0x69C1, 0xBA60},{0x69C2, 0xE25F},{0x69C3, 0xBA6E},{0x69C4, 0xE24F},{0x69C6, 0xE262},{0x69C9, 0xE1FE}, - {0x69CA, 0xE254},{0x69CB, 0xBA63},{0x69CC, 0xBA6C},{0x69CD, 0xBA6A},{0x69CE, 0xE241},{0x69CF, 0xE256},{0x69D0, 0xBA69},{0x69D3, 0xBA62}, - {0x69D4, 0xE252},{0x69D9, 0xE25C},{0x69E2, 0xE5D5},{0x69E4, 0xE5D1},{0x69E5, 0xE5CD},{0x69E6, 0xE5E1},{0x69E7, 0xE5DE},{0x69E8, 0xBCCD}, - {0x69EB, 0xE5E5},{0x69EC, 0xE5D4},{0x69ED, 0xBCD8},{0x69EE, 0xE5DB},{0x69F1, 0xE5D0},{0x69F2, 0xE5DA},{0x69F3, 0xBCD5},{0x69F4, 0xE5EE}, - {0x69F6, 0xE5EB},{0x69F7, 0xE5DD},{0x69F8, 0xE5CE},{0x69FB, 0xE5E2},{0x69FC, 0xE5E4},{0x69FD, 0xBCD1},{0x69FE, 0xE5D8},{0x69FF, 0xE5D3}, - {0x6A00, 0xE5CA},{0x6A01, 0xBCCE},{0x6A02, 0xBCD6},{0x6A04, 0xE5E7},{0x6A05, 0xBCD7},{0x6A06, 0xE5CB},{0x6A07, 0xE5ED},{0x6A08, 0xE5E0}, - {0x6A09, 0xE5E6},{0x6A0A, 0xBCD4},{0x6A0D, 0xE5E3},{0x6A0F, 0xE5EA},{0x6A11, 0xBCD9},{0x6A13, 0xBCD3},{0x6A14, 0xE5DC},{0x6A15, 0xE5CF}, - {0x6A16, 0xE5EF},{0x6A17, 0xE5CC},{0x6A18, 0xE5E8},{0x6A19, 0xBCD0},{0x6A1B, 0xE5D6},{0x6A1D, 0xE5D7},{0x6A1E, 0xBCCF},{0x6A1F, 0xBCCC}, - {0x6A20, 0xE5D2},{0x6A21, 0xBCD2},{0x6A23, 0xBCCB},{0x6A25, 0xE5E9},{0x6A26, 0xE5EC},{0x6A27, 0xE5D9},{0x6A28, 0xE9CA},{0x6A32, 0xE9C2}, - {0x6A34, 0xE9BE},{0x6A35, 0xBEF6},{0x6A38, 0xBEEB},{0x6A39, 0xBEF0},{0x6A3A, 0xBEEC},{0x6A3B, 0xE9CC},{0x6A3C, 0xE9D7},{0x6A3D, 0xBEEA}, - {0x6A3E, 0xE9C4},{0x6A3F, 0xE9CD},{0x6A40, 0xE5DF},{0x6A41, 0xE9CE},{0x6A44, 0xBEF1},{0x6A46, 0xE9DD},{0x6A47, 0xBEF5},{0x6A48, 0xBEF8}, - {0x6A49, 0xE9C0},{0x6A4B, 0xBEF4},{0x6A4D, 0xE9DB},{0x6A4E, 0xE9DC},{0x6A4F, 0xE9D2},{0x6A50, 0xE9D1},{0x6A51, 0xE9C9},{0x6A54, 0xE9D3}, - {0x6A55, 0xE9DA},{0x6A56, 0xE9D9},{0x6A58, 0xBEEF},{0x6A59, 0xBEED},{0x6A5A, 0xE9CB},{0x6A5B, 0xE9C8},{0x6A5D, 0xE9C5},{0x6A5E, 0xE9D8}, - {0x6A5F, 0xBEF7},{0x6A60, 0xE9D6},{0x6A61, 0xBEF3},{0x6A62, 0xBEF2},{0x6A64, 0xE9D0},{0x6A66, 0xE9BF},{0x6A67, 0xE9C1},{0x6A68, 0xE9C3}, - {0x6A69, 0xE9D5},{0x6A6A, 0xE9CF},{0x6A6B, 0xBEEE},{0x6A6D, 0xE9C6},{0x6A6F, 0xE9D4},{0x6A76, 0xE9C7},{0x6A7E, 0xC0CF},{0x6A7F, 0xED45}, - {0x6A80, 0xC0C8},{0x6A81, 0xECF5},{0x6A83, 0xED41},{0x6A84, 0xC0CA},{0x6A85, 0xED48},{0x6A87, 0xECFC},{0x6A89, 0xECF7},{0x6A8C, 0xED49}, - {0x6A8D, 0xECF3},{0x6A8E, 0xECFE},{0x6A90, 0xC0D1},{0x6A91, 0xED44},{0x6A92, 0xED4A},{0x6A93, 0xECFD},{0x6A94, 0xC0C9},{0x6A95, 0xED40}, - {0x6A96, 0xECF4},{0x6A97, 0xC0D0},{0x6A9A, 0xED47},{0x6A9B, 0xECF9},{0x6A9C, 0xC0CC},{0x6A9E, 0xECFB},{0x6A9F, 0xECF8},{0x6AA0, 0xC0D2}, - {0x6AA1, 0xECFA},{0x6AA2, 0xC0CB},{0x6AA3, 0xC0CE},{0x6AA4, 0xED43},{0x6AA5, 0xECF6},{0x6AA6, 0xED46},{0x6AA8, 0xED42},{0x6AAC, 0xC263}, - {0x6AAD, 0xEFE7},{0x6AAE, 0xC268},{0x6AAF, 0xC269},{0x6AB3, 0xC262},{0x6AB4, 0xEFE6},{0x6AB6, 0xEFE3},{0x6AB7, 0xEFE4},{0x6AB8, 0xC266}, - {0x6AB9, 0xEFDE},{0x6ABA, 0xEFE2},{0x6ABB, 0xC265},{0x6ABD, 0xEFDF},{0x6AC2, 0xC267},{0x6AC3, 0xC264},{0x6AC5, 0xEFDD},{0x6AC6, 0xEFE1}, - {0x6AC7, 0xEFE5},{0x6ACB, 0xF251},{0x6ACC, 0xF24E},{0x6ACD, 0xF257},{0x6ACF, 0xF256},{0x6AD0, 0xF254},{0x6AD1, 0xF24F},{0x6AD3, 0xC372}, - {0x6AD9, 0xF250},{0x6ADA, 0xC371},{0x6ADB, 0xC0CD},{0x6ADC, 0xF253},{0x6ADD, 0xC370},{0x6ADE, 0xF258},{0x6ADF, 0xF252},{0x6AE0, 0xF24D}, - {0x6AE1, 0xEFE0},{0x6AE5, 0xC36F},{0x6AE7, 0xF24C},{0x6AE8, 0xF456},{0x6AEA, 0xF455},{0x6AEB, 0xF255},{0x6AEC, 0xC468},{0x6AEE, 0xF459}, - {0x6AEF, 0xF45A},{0x6AF0, 0xF454},{0x6AF1, 0xF458},{0x6AF3, 0xF453},{0x6AF8, 0xF5D1},{0x6AF9, 0xF457},{0x6AFA, 0xC4E7},{0x6AFB, 0xC4E5}, - {0x6AFC, 0xF5CF},{0x6B00, 0xF5D2},{0x6B02, 0xF5CE},{0x6B03, 0xF5D0},{0x6B04, 0xC4E6},{0x6B08, 0xF6E5},{0x6B09, 0xF6E6},{0x6B0A, 0xC576}, - {0x6B0B, 0xF6E4},{0x6B0F, 0xF7E2},{0x6B10, 0xC5CF},{0x6B11, 0xF7E0},{0x6B12, 0xF7E1},{0x6B13, 0xF8AC},{0x6B16, 0xC656},{0x6B17, 0xF8F3}, - {0x6B18, 0xF8F1},{0x6B19, 0xF8F2},{0x6B1A, 0xF8F4},{0x6B1E, 0xF9BB},{0x6B20, 0xA4ED},{0x6B21, 0xA6B8},{0x6B23, 0xAA59},{0x6B25, 0xCCE9}, - {0x6B28, 0xCF64},{0x6B2C, 0xD1F5},{0x6B2D, 0xD1F7},{0x6B2F, 0xD1F6},{0x6B31, 0xD1F8},{0x6B32, 0xB1FD},{0x6B33, 0xD5D7},{0x6B34, 0xD1F9}, - {0x6B36, 0xD5D6},{0x6B37, 0xD5D8},{0x6B38, 0xD5D9},{0x6B39, 0xD9DA},{0x6B3A, 0xB4DB},{0x6B3B, 0xD9DB},{0x6B3C, 0xD9DD},{0x6B3D, 0xB4DC}, - {0x6B3E, 0xB4DA},{0x6B3F, 0xD9DC},{0x6B41, 0xDDFA},{0x6B42, 0xDDF8},{0x6B43, 0xDDF7},{0x6B45, 0xDDF6},{0x6B46, 0xDDF5},{0x6B47, 0xB7B2}, - {0x6B48, 0xDDF9},{0x6B49, 0xBA70},{0x6B4A, 0xE263},{0x6B4B, 0xE265},{0x6B4C, 0xBA71},{0x6B4D, 0xE264},{0x6B4E, 0xBCDB},{0x6B50, 0xBCDA}, - {0x6B51, 0xE5F0},{0x6B54, 0xE9DF},{0x6B55, 0xE9DE},{0x6B56, 0xE9E0},{0x6B59, 0xBEF9},{0x6B5B, 0xED4B},{0x6B5C, 0xC0D3},{0x6B5E, 0xEFE8}, - {0x6B5F, 0xC26A},{0x6B60, 0xF259},{0x6B61, 0xC577},{0x6B62, 0xA4EE},{0x6B63, 0xA5BF},{0x6B64, 0xA6B9},{0x6B65, 0xA842},{0x6B66, 0xAA5A}, - {0x6B67, 0xAA5B},{0x6B6A, 0xAC6E},{0x6B6D, 0xD1FA},{0x6B72, 0xB7B3},{0x6B76, 0xE6D1},{0x6B77, 0xBEFA},{0x6B78, 0xC26B},{0x6B79, 0xA4EF}, - {0x6B7B, 0xA6BA},{0x6B7E, 0xCCEB},{0x6B7F, 0xAA5C},{0x6B80, 0xCCEA},{0x6B82, 0xCF65},{0x6B83, 0xAC6F},{0x6B84, 0xCF66},{0x6B86, 0xAC70}, - {0x6B88, 0xD1FC},{0x6B89, 0xAEEE},{0x6B8A, 0xAEED},{0x6B8C, 0xD5DE},{0x6B8D, 0xD5DC},{0x6B8E, 0xD5DD},{0x6B8F, 0xD5DB},{0x6B91, 0xD5DA}, - {0x6B94, 0xD9DE},{0x6B95, 0xD9E1},{0x6B96, 0xB4DE},{0x6B97, 0xD9DF},{0x6B98, 0xB4DD},{0x6B99, 0xD9E0},{0x6B9B, 0xDDFB},{0x6B9E, 0xE266}, - {0x6B9F, 0xE267},{0x6BA0, 0xE268},{0x6BA2, 0xE5F3},{0x6BA3, 0xE5F2},{0x6BA4, 0xBCDC},{0x6BA5, 0xE5F1},{0x6BA6, 0xE5F4},{0x6BA7, 0xE9E1}, - {0x6BAA, 0xE9E2},{0x6BAB, 0xE9E3},{0x6BAD, 0xED4C},{0x6BAE, 0xC0D4},{0x6BAF, 0xC26C},{0x6BB0, 0xF25A},{0x6BB2, 0xC4E8},{0x6BB3, 0xC95F}, - {0x6BB5, 0xAC71},{0x6BB6, 0xCF67},{0x6BB7, 0xAEEF},{0x6BBA, 0xB1FE},{0x6BBC, 0xB4DF},{0x6BBD, 0xD9E2},{0x6BBF, 0xB7B5},{0x6BC0, 0xB7B4}, - {0x6BC3, 0xE269},{0x6BC4, 0xE26A},{0x6BC5, 0xBCDD},{0x6BC6, 0xBCDE},{0x6BC7, 0xE9E5},{0x6BC8, 0xE9E4},{0x6BC9, 0xEFE9},{0x6BCA, 0xF7E3}, - {0x6BCB, 0xA4F0},{0x6BCC, 0xC960},{0x6BCD, 0xA5C0},{0x6BCF, 0xA843},{0x6BD0, 0xCB48},{0x6BD2, 0xAC72},{0x6BD3, 0xB7B6},{0x6BD4, 0xA4F1}, - {0x6BD6, 0xCF68},{0x6BD7, 0xAC73},{0x6BD8, 0xCF69},{0x6BDA, 0xC0D5},{0x6BDB, 0xA4F2},{0x6BDE, 0xCCEC},{0x6BE0, 0xCF6A},{0x6BE2, 0xD242}, - {0x6BE3, 0xD241},{0x6BE4, 0xD1FE},{0x6BE6, 0xD1FD},{0x6BE7, 0xD243},{0x6BE8, 0xD240},{0x6BEB, 0xB240},{0x6BEC, 0xB241},{0x6BEF, 0xB4E0}, - {0x6BF0, 0xD9E3},{0x6BF2, 0xD9E4},{0x6BF3, 0xD9E5},{0x6BF7, 0xDE41},{0x6BF8, 0xDE42},{0x6BF9, 0xDE40},{0x6BFB, 0xDDFD},{0x6BFC, 0xDDFE}, - {0x6BFD, 0xB7B7},{0x6BFE, 0xE26B},{0x6BFF, 0xE5F7},{0x6C00, 0xE5F6},{0x6C01, 0xE5F5},{0x6C02, 0xE5F8},{0x6C03, 0xE9E7},{0x6C04, 0xE9E6}, - {0x6C05, 0xBEFB},{0x6C06, 0xE9E8},{0x6C08, 0xC0D6},{0x6C09, 0xED4D},{0x6C0B, 0xEFEA},{0x6C0C, 0xF25B},{0x6C0D, 0xF6E7},{0x6C0F, 0xA4F3}, - {0x6C10, 0xA5C2},{0x6C11, 0xA5C1},{0x6C13, 0xAA5D},{0x6C14, 0xC961},{0x6C15, 0xC97E},{0x6C16, 0xA6BB},{0x6C18, 0xC9F7},{0x6C19, 0xCB49}, - {0x6C1A, 0xCB4A},{0x6C1B, 0xAA5E},{0x6C1D, 0xCCED},{0x6C1F, 0xAC74},{0x6C20, 0xCF6B},{0x6C21, 0xCF6C},{0x6C23, 0xAEF0},{0x6C24, 0xAEF4}, - {0x6C25, 0xD244},{0x6C26, 0xAEF3},{0x6C27, 0xAEF1},{0x6C28, 0xAEF2},{0x6C2A, 0xD5DF},{0x6C2B, 0xB242},{0x6C2C, 0xB4E3},{0x6C2E, 0xB4E1}, - {0x6C2F, 0xB4E2},{0x6C30, 0xD9E6},{0x6C33, 0xBA72},{0x6C34, 0xA4F4},{0x6C36, 0xC9A1},{0x6C38, 0xA5C3},{0x6C3B, 0xC9A4},{0x6C3E, 0xA5C6}, - {0x6C3F, 0xC9A3},{0x6C40, 0xA5C5},{0x6C41, 0xA5C4},{0x6C42, 0xA844},{0x6C43, 0xC9A2},{0x6C46, 0xC9F8},{0x6C4A, 0xC9FC},{0x6C4B, 0xC9FE}, - {0x6C4C, 0xCA40},{0x6C4D, 0xA6C5},{0x6C4E, 0xA6C6},{0x6C4F, 0xC9FB},{0x6C50, 0xA6C1},{0x6C52, 0xC9F9},{0x6C54, 0xC9FD},{0x6C55, 0xA6C2}, - {0x6C57, 0xA6BD},{0x6C59, 0xA6BE},{0x6C5B, 0xA6C4},{0x6C5C, 0xC9FA},{0x6C5D, 0xA6BC},{0x6C5E, 0xA845},{0x6C5F, 0xA6BF},{0x6C60, 0xA6C0}, - {0x6C61, 0xA6C3},{0x6C65, 0xCB5B},{0x6C66, 0xCB59},{0x6C67, 0xCB4C},{0x6C68, 0xA851},{0x6C69, 0xCB53},{0x6C6A, 0xA84C},{0x6C6B, 0xCB4D}, - {0x6C6D, 0xCB55},{0x6C6F, 0xCB52},{0x6C70, 0xA84F},{0x6C71, 0xCB51},{0x6C72, 0xA856},{0x6C73, 0xCB5A},{0x6C74, 0xA858},{0x6C76, 0xA85A}, - {0x6C78, 0xCB4B},{0x6C7A, 0xA84D},{0x6C7B, 0xCB5C},{0x6C7D, 0xA854},{0x6C7E, 0xA857},{0x6C80, 0xCD45},{0x6C81, 0xA847},{0x6C82, 0xA85E}, - {0x6C83, 0xA855},{0x6C84, 0xCB4E},{0x6C85, 0xA84A},{0x6C86, 0xA859},{0x6C87, 0xCB56},{0x6C88, 0xA848},{0x6C89, 0xA849},{0x6C8A, 0xCD43}, - {0x6C8B, 0xCB4F},{0x6C8C, 0xA850},{0x6C8D, 0xA85B},{0x6C8E, 0xCB5D},{0x6C8F, 0xCB50},{0x6C90, 0xA84E},{0x6C92, 0xA853},{0x6C93, 0xCCEE}, - {0x6C94, 0xA85C},{0x6C95, 0xCB57},{0x6C96, 0xA852},{0x6C98, 0xA85D},{0x6C99, 0xA846},{0x6C9A, 0xCB54},{0x6C9B, 0xA84B},{0x6C9C, 0xCB58}, - {0x6C9D, 0xCD44},{0x6CAB, 0xAA6A},{0x6CAC, 0xAA7A},{0x6CAD, 0xCCF5},{0x6CAE, 0xAA71},{0x6CB0, 0xCD4B},{0x6CB1, 0xAA62},{0x6CB3, 0xAA65}, - {0x6CB4, 0xCD42},{0x6CB6, 0xCCF3},{0x6CB7, 0xCCF7},{0x6CB8, 0xAA6D},{0x6CB9, 0xAA6F},{0x6CBA, 0xCCFA},{0x6CBB, 0xAA76},{0x6CBC, 0xAA68}, - {0x6CBD, 0xAA66},{0x6CBE, 0xAA67},{0x6CBF, 0xAA75},{0x6CC0, 0xCD47},{0x6CC1, 0xAA70},{0x6CC2, 0xCCF9},{0x6CC3, 0xCCFB},{0x6CC4, 0xAA6E}, - {0x6CC5, 0xAA73},{0x6CC6, 0xCCFC},{0x6CC7, 0xCD4A},{0x6CC9, 0xAC75},{0x6CCA, 0xAA79},{0x6CCC, 0xAA63},{0x6CCD, 0xCD49},{0x6CCF, 0xCD4D}, - {0x6CD0, 0xCCF8},{0x6CD1, 0xCD4F},{0x6CD2, 0xCD40},{0x6CD3, 0xAA6C},{0x6CD4, 0xCCF4},{0x6CD5, 0xAA6B},{0x6CD6, 0xAA7D},{0x6CD7, 0xAA72}, - {0x6CD9, 0xCCF2},{0x6CDA, 0xCF75},{0x6CDB, 0xAA78},{0x6CDC, 0xAA7C},{0x6CDD, 0xCD41},{0x6CDE, 0xCD46},{0x6CE0, 0xAA7E},{0x6CE1, 0xAA77}, - {0x6CE2, 0xAA69},{0x6CE3, 0xAA5F},{0x6CE5, 0xAA64},{0x6CE7, 0xCCF6},{0x6CE8, 0xAA60},{0x6CE9, 0xCD4E},{0x6CEB, 0xCCF0},{0x6CEC, 0xCCEF}, - {0x6CED, 0xCCFD},{0x6CEE, 0xCCF1},{0x6CEF, 0xAA7B},{0x6CF0, 0xAEF5},{0x6CF1, 0xAA74},{0x6CF2, 0xCCFE},{0x6CF3, 0xAA61},{0x6CF5, 0xACA6}, - {0x6CF9, 0xCD4C},{0x6D00, 0xCF7C},{0x6D01, 0xCFA1},{0x6D03, 0xCFA4},{0x6D04, 0xCF77},{0x6D07, 0xCFA7},{0x6D08, 0xCFAA},{0x6D09, 0xCFAC}, - {0x6D0A, 0xCF74},{0x6D0B, 0xAC76},{0x6D0C, 0xAC7B},{0x6D0D, 0xD249},{0x6D0E, 0xACAD},{0x6D0F, 0xCFA5},{0x6D10, 0xCFAD},{0x6D11, 0xCF7B}, - {0x6D12, 0xCF73},{0x6D16, 0xD264},{0x6D17, 0xAC7E},{0x6D18, 0xCFA2},{0x6D19, 0xCF78},{0x6D1A, 0xCF7A},{0x6D1B, 0xACA5},{0x6D1D, 0xCF7D}, - {0x6D1E, 0xAC7D},{0x6D1F, 0xCF70},{0x6D20, 0xCFA8},{0x6D22, 0xCFAB},{0x6D25, 0xAC7A},{0x6D27, 0xACA8},{0x6D28, 0xCF6D},{0x6D29, 0xACAA}, - {0x6D2A, 0xAC78},{0x6D2B, 0xACAE},{0x6D2C, 0xCFA9},{0x6D2D, 0xCF6F},{0x6D2E, 0xACAB},{0x6D2F, 0xD25E},{0x6D30, 0xCD48},{0x6D31, 0xAC7C}, - {0x6D32, 0xAC77},{0x6D33, 0xCF76},{0x6D34, 0xCF6E},{0x6D35, 0xACAC},{0x6D36, 0xACA4},{0x6D37, 0xCFA3},{0x6D38, 0xACA9},{0x6D39, 0xACA7}, - {0x6D3A, 0xCF79},{0x6D3B, 0xACA1},{0x6D3C, 0xCF71},{0x6D3D, 0xACA2},{0x6D3E, 0xACA3},{0x6D3F, 0xCF72},{0x6D40, 0xCFA6},{0x6D41, 0xAC79}, - {0x6D42, 0xCF7E},{0x6D58, 0xD24C},{0x6D59, 0xAEFD},{0x6D5A, 0xAF43},{0x6D5E, 0xD255},{0x6D5F, 0xD25B},{0x6D60, 0xD257},{0x6D61, 0xD24A}, - {0x6D62, 0xD24D},{0x6D63, 0xD246},{0x6D64, 0xD247},{0x6D65, 0xAF4A},{0x6D66, 0xAEFA},{0x6D67, 0xD256},{0x6D68, 0xD25F},{0x6D69, 0xAF45}, - {0x6D6A, 0xAEF6},{0x6D6C, 0xAF40},{0x6D6D, 0xD24E},{0x6D6E, 0xAF42},{0x6D6F, 0xD24F},{0x6D70, 0xD259},{0x6D74, 0xAF44},{0x6D75, 0xD268}, - {0x6D76, 0xD248},{0x6D77, 0xAEFC},{0x6D78, 0xAEFB},{0x6D79, 0xAF48},{0x6D7A, 0xD245},{0x6D7B, 0xD266},{0x6D7C, 0xD25A},{0x6D7D, 0xD267}, - {0x6D7E, 0xD261},{0x6D7F, 0xD253},{0x6D80, 0xD262},{0x6D82, 0xD25C},{0x6D83, 0xD265},{0x6D84, 0xD263},{0x6D85, 0xAF49},{0x6D86, 0xD254}, - {0x6D87, 0xAEF9},{0x6D88, 0xAEF8},{0x6D89, 0xAF41},{0x6D8A, 0xAF47},{0x6D8B, 0xD260},{0x6D8C, 0xAF46},{0x6D8D, 0xD251},{0x6D8E, 0xB243}, - {0x6D90, 0xD269},{0x6D91, 0xD250},{0x6D92, 0xD24B},{0x6D93, 0xAEFE},{0x6D94, 0xAF4B},{0x6D95, 0xAEF7},{0x6D97, 0xD258},{0x6D98, 0xD25D}, - {0x6DAA, 0xB265},{0x6DAB, 0xD5E1},{0x6DAC, 0xD5E5},{0x6DAE, 0xB252},{0x6DAF, 0xB250},{0x6DB2, 0xB247},{0x6DB3, 0xD5E3},{0x6DB4, 0xD5E2}, - {0x6DB5, 0xB25B},{0x6DB7, 0xD5E8},{0x6DB8, 0xB255},{0x6DBA, 0xD5FA},{0x6DBB, 0xD647},{0x6DBC, 0xB244},{0x6DBD, 0xD5F7},{0x6DBE, 0xD5F0}, - {0x6DBF, 0xB267},{0x6DC0, 0xD5E0},{0x6DC2, 0xD5FC},{0x6DC4, 0xB264},{0x6DC5, 0xB258},{0x6DC6, 0xB263},{0x6DC7, 0xB24E},{0x6DC8, 0xD5EC}, - {0x6DC9, 0xD5FE},{0x6DCA, 0xD5F6},{0x6DCB, 0xB24F},{0x6DCC, 0xB249},{0x6DCD, 0xD645},{0x6DCF, 0xD5FD},{0x6DD0, 0xD640},{0x6DD1, 0xB251}, - {0x6DD2, 0xB259},{0x6DD3, 0xD642},{0x6DD4, 0xD5EA},{0x6DD5, 0xD5FB},{0x6DD6, 0xD5EF},{0x6DD7, 0xD644},{0x6DD8, 0xB25E},{0x6DD9, 0xB246}, - {0x6DDA, 0xB25C},{0x6DDB, 0xD5F4},{0x6DDC, 0xD5F2},{0x6DDD, 0xD5F3},{0x6DDE, 0xB253},{0x6DDF, 0xD5EE},{0x6DE0, 0xD5ED},{0x6DE1, 0xB248}, - {0x6DE2, 0xD5E7},{0x6DE3, 0xD646},{0x6DE4, 0xB24A},{0x6DE5, 0xD5F1},{0x6DE6, 0xB268},{0x6DE8, 0xB262},{0x6DE9, 0xD5E6},{0x6DEA, 0xB25F}, - {0x6DEB, 0xB25D},{0x6DEC, 0xB266},{0x6DED, 0xD5F8},{0x6DEE, 0xB261},{0x6DEF, 0xD252},{0x6DF0, 0xD5F9},{0x6DF1, 0xB260},{0x6DF2, 0xD641}, - {0x6DF3, 0xB245},{0x6DF4, 0xD5F5},{0x6DF5, 0xB257},{0x6DF6, 0xD5E9},{0x6DF7, 0xB256},{0x6DF9, 0xB254},{0x6DFA, 0xB24C},{0x6DFB, 0xB24B}, - {0x6DFC, 0xD9E7},{0x6DFD, 0xD643},{0x6E00, 0xD5EB},{0x6E03, 0xD9FC},{0x6E05, 0xB24D},{0x6E19, 0xB541},{0x6E1A, 0xB25A},{0x6E1B, 0xB4EE}, - {0x6E1C, 0xD9F6},{0x6E1D, 0xB4FC},{0x6E1F, 0xD9EA},{0x6E20, 0xB4EB},{0x6E21, 0xB4E7},{0x6E22, 0xDA49},{0x6E23, 0xB4ED},{0x6E24, 0xB4F1}, - {0x6E25, 0xB4EC},{0x6E26, 0xB4F5},{0x6E27, 0xDA4D},{0x6E28, 0xDA44},{0x6E2B, 0xD9F1},{0x6E2C, 0xB4FA},{0x6E2D, 0xB4F4},{0x6E2E, 0xD9FD}, - {0x6E2F, 0xB4E4},{0x6E30, 0xDA4A},{0x6E31, 0xDA43},{0x6E32, 0xB4E8},{0x6E33, 0xD9F7},{0x6E34, 0xB4F7},{0x6E35, 0xDA55},{0x6E36, 0xDA56}, - {0x6E38, 0xB4E5},{0x6E39, 0xDA48},{0x6E3A, 0xB4F9},{0x6E3B, 0xD9FB},{0x6E3C, 0xD9ED},{0x6E3D, 0xD9EE},{0x6E3E, 0xB4FD},{0x6E3F, 0xD9F2}, - {0x6E40, 0xD9F9},{0x6E41, 0xD9F3},{0x6E43, 0xB4FB},{0x6E44, 0xB544},{0x6E45, 0xD9EF},{0x6E46, 0xD9E8},{0x6E47, 0xD9E9},{0x6E49, 0xD9EB}, - {0x6E4A, 0xB4EA},{0x6E4B, 0xD9F8},{0x6E4D, 0xB4F8},{0x6E4E, 0xB542},{0x6E51, 0xD9FA},{0x6E52, 0xDA53},{0x6E53, 0xDA4B},{0x6E54, 0xB4E6}, - {0x6E55, 0xDA51},{0x6E56, 0xB4F2},{0x6E58, 0xB4F0},{0x6E5A, 0xDA57},{0x6E5B, 0xB4EF},{0x6E5C, 0xDA41},{0x6E5D, 0xD9F4},{0x6E5E, 0xD9FE}, - {0x6E5F, 0xB547},{0x6E60, 0xDA45},{0x6E61, 0xDA42},{0x6E62, 0xD9F0},{0x6E63, 0xB543},{0x6E64, 0xDA4F},{0x6E65, 0xDA4C},{0x6E66, 0xDA54}, - {0x6E67, 0xB4E9},{0x6E68, 0xDA40},{0x6E69, 0xB546},{0x6E6B, 0xDA47},{0x6E6E, 0xB4F3},{0x6E6F, 0xB4F6},{0x6E71, 0xDA46},{0x6E72, 0xB545}, - {0x6E73, 0xD9F5},{0x6E74, 0xD5E4},{0x6E77, 0xDA50},{0x6E78, 0xDA4E},{0x6E79, 0xDA52},{0x6E88, 0xD9EC},{0x6E89, 0xB540},{0x6E8D, 0xDE61}, - {0x6E8E, 0xDE60},{0x6E8F, 0xDE46},{0x6E90, 0xB7BD},{0x6E92, 0xDE5F},{0x6E93, 0xDE49},{0x6E94, 0xDE4A},{0x6E96, 0xB7C7},{0x6E97, 0xDE68}, - {0x6E98, 0xB7C2},{0x6E99, 0xDE5E},{0x6E9B, 0xDE43},{0x6E9C, 0xB7C8},{0x6E9D, 0xB7BE},{0x6E9E, 0xDE52},{0x6E9F, 0xDE48},{0x6EA0, 0xDE4B}, - {0x6EA1, 0xDE63},{0x6EA2, 0xB7B8},{0x6EA3, 0xDE6A},{0x6EA4, 0xDE62},{0x6EA5, 0xB7C1},{0x6EA6, 0xDE57},{0x6EA7, 0xB7CC},{0x6EAA, 0xB7CB}, - {0x6EAB, 0xB7C5},{0x6EAE, 0xDE69},{0x6EAF, 0xB7B9},{0x6EB0, 0xDE55},{0x6EB1, 0xDE4C},{0x6EB2, 0xDE59},{0x6EB3, 0xDE65},{0x6EB4, 0xB7CD}, - {0x6EB6, 0xB7BB},{0x6EB7, 0xDE54},{0x6EB9, 0xDE4D},{0x6EBA, 0xB7C4},{0x6EBC, 0xB7C3},{0x6EBD, 0xDE50},{0x6EBE, 0xDE5A},{0x6EBF, 0xDE64}, - {0x6EC0, 0xDE47},{0x6EC1, 0xDE51},{0x6EC2, 0xB7BC},{0x6EC3, 0xDE5B},{0x6EC4, 0xB7C9},{0x6EC5, 0xB7C0},{0x6EC6, 0xDE4E},{0x6EC7, 0xB7BF}, - {0x6EC8, 0xDE45},{0x6EC9, 0xDE53},{0x6ECA, 0xDE67},{0x6ECB, 0xB4FE},{0x6ECC, 0xBAB0},{0x6ECD, 0xDE56},{0x6ECE, 0xE26C},{0x6ECF, 0xDE58}, - {0x6ED0, 0xDE66},{0x6ED1, 0xB7C6},{0x6ED2, 0xDE4F},{0x6ED3, 0xB7BA},{0x6ED4, 0xB7CA},{0x6ED5, 0xBCF0},{0x6ED6, 0xDE44},{0x6ED8, 0xDE5D}, - {0x6EDC, 0xDE5C},{0x6EEB, 0xE2AA},{0x6EEC, 0xBAAD},{0x6EED, 0xE27D},{0x6EEE, 0xE2A4},{0x6EEF, 0xBAA2},{0x6EF1, 0xE26E},{0x6EF2, 0xBAAF}, - {0x6EF4, 0xBA77},{0x6EF5, 0xE26D},{0x6EF6, 0xE2B0},{0x6EF7, 0xBAB1},{0x6EF8, 0xE271},{0x6EF9, 0xE2A3},{0x6EFB, 0xE273},{0x6EFC, 0xE2B3}, - {0x6EFD, 0xE2AF},{0x6EFE, 0xBA75},{0x6EFF, 0xBAA1},{0x6F00, 0xE653},{0x6F01, 0xBAAE},{0x6F02, 0xBA7D},{0x6F03, 0xE26F},{0x6F05, 0xE2AE}, - {0x6F06, 0xBAA3},{0x6F07, 0xE2AB},{0x6F08, 0xE2B8},{0x6F09, 0xE275},{0x6F0A, 0xE27E},{0x6F0D, 0xE2B6},{0x6F0E, 0xE2AC},{0x6F0F, 0xBA7C}, - {0x6F12, 0xE27C},{0x6F13, 0xBA76},{0x6F14, 0xBA74},{0x6F15, 0xBAA8},{0x6F18, 0xE27A},{0x6F19, 0xE277},{0x6F1A, 0xE278},{0x6F1C, 0xE2B2}, - {0x6F1E, 0xE2B7},{0x6F1F, 0xE2B5},{0x6F20, 0xBA7A},{0x6F21, 0xE2B9},{0x6F22, 0xBA7E},{0x6F23, 0xBAA7},{0x6F25, 0xE270},{0x6F26, 0xE5FA}, - {0x6F27, 0xE279},{0x6F29, 0xBA78},{0x6F2A, 0xBAAC},{0x6F2B, 0xBAA9},{0x6F2C, 0xBA7B},{0x6F2D, 0xE2A5},{0x6F2E, 0xE274},{0x6F2F, 0xBAAA}, - {0x6F30, 0xE2A7},{0x6F31, 0xBAA4},{0x6F32, 0xBAA6},{0x6F33, 0xBA73},{0x6F35, 0xE2A9},{0x6F36, 0xE2A1},{0x6F37, 0xE272},{0x6F38, 0xBAA5}, - {0x6F39, 0xE2B1},{0x6F3A, 0xE2B4},{0x6F3B, 0xE27B},{0x6F3C, 0xE2A8},{0x6F3E, 0xBA79},{0x6F3F, 0xBCDF},{0x6F40, 0xE2A6},{0x6F41, 0xE5F9}, - {0x6F43, 0xE2AD},{0x6F4E, 0xE276},{0x6F4F, 0xE644},{0x6F50, 0xE64E},{0x6F51, 0xBCE2},{0x6F52, 0xE64D},{0x6F53, 0xE659},{0x6F54, 0xBCE4}, - {0x6F55, 0xE64B},{0x6F57, 0xE64F},{0x6F58, 0xBCEF},{0x6F5A, 0xE646},{0x6F5B, 0xBCE7},{0x6F5D, 0xE652},{0x6F5E, 0xE9F0},{0x6F5F, 0xBCF3}, - {0x6F60, 0xBCF2},{0x6F61, 0xE654},{0x6F62, 0xE643},{0x6F63, 0xE65E},{0x6F64, 0xBCED},{0x6F66, 0xBCE3},{0x6F67, 0xE657},{0x6F69, 0xE65B}, - {0x6F6A, 0xE660},{0x6F6B, 0xE655},{0x6F6C, 0xE649},{0x6F6D, 0xBCE6},{0x6F6E, 0xBCE9},{0x6F6F, 0xBCF1},{0x6F70, 0xBCEC},{0x6F72, 0xE64C}, - {0x6F73, 0xE2A2},{0x6F76, 0xE648},{0x6F77, 0xE65F},{0x6F78, 0xBCE8},{0x6F7A, 0xBCEB},{0x6F7B, 0xE661},{0x6F7C, 0xBCE0},{0x6F7D, 0xE656}, - {0x6F7E, 0xE5FB},{0x6F7F, 0xE65C},{0x6F80, 0xC0DF},{0x6F82, 0xE64A},{0x6F84, 0xBCE1},{0x6F85, 0xE645},{0x6F86, 0xBCE5},{0x6F87, 0xE5FC}, - {0x6F88, 0xBAAB},{0x6F89, 0xE641},{0x6F8B, 0xE65A},{0x6F8C, 0xE642},{0x6F8D, 0xE640},{0x6F8E, 0xBCEA},{0x6F90, 0xE658},{0x6F92, 0xE5FE}, - {0x6F93, 0xE651},{0x6F94, 0xE650},{0x6F95, 0xE65D},{0x6F96, 0xE647},{0x6F97, 0xBCEE},{0x6F9E, 0xE9F3},{0x6FA0, 0xBF49},{0x6FA1, 0xBEFE}, - {0x6FA2, 0xEA40},{0x6FA3, 0xE9EB},{0x6FA4, 0xBF41},{0x6FA5, 0xE9F7},{0x6FA6, 0xBF48},{0x6FA7, 0xBF43},{0x6FA8, 0xE9F5},{0x6FA9, 0xED4F}, - {0x6FAA, 0xE9FB},{0x6FAB, 0xEA42},{0x6FAC, 0xE9FA},{0x6FAD, 0xE9E9},{0x6FAE, 0xE9F8},{0x6FAF, 0xEA44},{0x6FB0, 0xEA46},{0x6FB1, 0xBEFD}, - {0x6FB2, 0xEA45},{0x6FB3, 0xBF44},{0x6FB4, 0xBF4A},{0x6FB6, 0xBF47},{0x6FB8, 0xE9FE},{0x6FB9, 0xBF46},{0x6FBA, 0xE9F9},{0x6FBC, 0xE9ED}, - {0x6FBD, 0xE9F2},{0x6FBF, 0xE9FD},{0x6FC0, 0xBF45},{0x6FC1, 0xBF42},{0x6FC2, 0xBEFC},{0x6FC3, 0xBF40},{0x6FC4, 0xE9F1},{0x6FC6, 0xE5FD}, - {0x6FC7, 0xE9EC},{0x6FC8, 0xE9EF},{0x6FC9, 0xEA41},{0x6FCA, 0xE9F4},{0x6FCB, 0xE9EA},{0x6FCC, 0xED4E},{0x6FCD, 0xEA43},{0x6FCE, 0xE9EE}, - {0x6FCF, 0xE9FC},{0x6FD4, 0xED51},{0x6FD5, 0xC0E3},{0x6FD8, 0xC0D7},{0x6FDB, 0xC0DB},{0x6FDC, 0xED53},{0x6FDD, 0xED59},{0x6FDE, 0xED57}, - {0x6FDF, 0xC0D9},{0x6FE0, 0xC0DA},{0x6FE1, 0xC0E1},{0x6FE2, 0xED5A},{0x6FE3, 0xED52},{0x6FE4, 0xC0DC},{0x6FE6, 0xED56},{0x6FE7, 0xED55}, - {0x6FE8, 0xED5B},{0x6FE9, 0xC0E2},{0x6FEB, 0xC0DD},{0x6FEC, 0xC0E0},{0x6FED, 0xED54},{0x6FEE, 0xC0E4},{0x6FEF, 0xC0DE},{0x6FF0, 0xC0E5}, - {0x6FF1, 0xC0D8},{0x6FF2, 0xED58},{0x6FF4, 0xED50},{0x6FF7, 0xEFF7},{0x6FFA, 0xC271},{0x6FFB, 0xEFF4},{0x6FFC, 0xEFF6},{0x6FFE, 0xC26F}, - {0x6FFF, 0xEFF2},{0x7000, 0xEFF3},{0x7001, 0xEFEE},{0x7004, 0xE9F6},{0x7005, 0xEFEF},{0x7006, 0xC270},{0x7007, 0xEFEB},{0x7009, 0xC26D}, - {0x700A, 0xEFF8},{0x700B, 0xC26E},{0x700C, 0xEFEC},{0x700D, 0xEFED},{0x700E, 0xEFF1},{0x700F, 0xC273},{0x7011, 0xC272},{0x7014, 0xEFF0}, - {0x7015, 0xC378},{0x7016, 0xF25F},{0x7017, 0xF265},{0x7018, 0xC379},{0x7019, 0xF25C},{0x701A, 0xC376},{0x701B, 0xC373},{0x701C, 0xF267}, - {0x701D, 0xC377},{0x701F, 0xC374},{0x7020, 0xF25E},{0x7021, 0xF261},{0x7022, 0xF262},{0x7023, 0xF263},{0x7024, 0xF266},{0x7026, 0xEFF5}, - {0x7027, 0xF25D},{0x7028, 0xC375},{0x7029, 0xF264},{0x702A, 0xF268},{0x702B, 0xF260},{0x702F, 0xF45D},{0x7030, 0xC46A},{0x7031, 0xF460}, - {0x7032, 0xC46B},{0x7033, 0xF468},{0x7034, 0xF45F},{0x7035, 0xF45C},{0x7037, 0xF45E},{0x7038, 0xF462},{0x7039, 0xF465},{0x703A, 0xF464}, - {0x703B, 0xF467},{0x703C, 0xF45B},{0x703E, 0xC469},{0x703F, 0xF463},{0x7040, 0xF466},{0x7041, 0xF469},{0x7042, 0xF461},{0x7043, 0xF5D3}, - {0x7044, 0xF5D4},{0x7045, 0xF5D8},{0x7046, 0xF5D9},{0x7048, 0xF5D6},{0x7049, 0xF5D7},{0x704A, 0xF5D5},{0x704C, 0xC4E9},{0x7051, 0xC578}, - {0x7052, 0xF6EB},{0x7055, 0xF6E8},{0x7056, 0xF6E9},{0x7057, 0xF6EA},{0x7058, 0xC579},{0x705A, 0xF7E5},{0x705B, 0xF7E4},{0x705D, 0xF8AF}, - {0x705E, 0xC5F4},{0x705F, 0xF8AD},{0x7060, 0xF8B0},{0x7061, 0xF8AE},{0x7062, 0xF8F5},{0x7063, 0xC657},{0x7064, 0xC665},{0x7065, 0xF9A3}, - {0x7066, 0xF96C},{0x7068, 0xF9A2},{0x7069, 0xF9D0},{0x706A, 0xF9D1},{0x706B, 0xA4F5},{0x7070, 0xA6C7},{0x7071, 0xCA41},{0x7074, 0xCB5E}, - {0x7076, 0xA85F},{0x7078, 0xA862},{0x707A, 0xCB5F},{0x707C, 0xA860},{0x707D, 0xA861},{0x7082, 0xCD58},{0x7083, 0xCD5A},{0x7084, 0xCD55}, - {0x7085, 0xCD52},{0x7086, 0xCD54},{0x708A, 0xAAA4},{0x708E, 0xAAA2},{0x7091, 0xCD56},{0x7092, 0xAAA3},{0x7093, 0xCD53},{0x7094, 0xCD50}, - {0x7095, 0xAAA1},{0x7096, 0xCD57},{0x7098, 0xCD51},{0x7099, 0xAAA5},{0x709A, 0xCD59},{0x709F, 0xCFAF},{0x70A1, 0xCFB3},{0x70A4, 0xACB7}, - {0x70A9, 0xCFB6},{0x70AB, 0xACAF},{0x70AC, 0xACB2},{0x70AD, 0xACB4},{0x70AE, 0xACB6},{0x70AF, 0xACB3},{0x70B0, 0xCFB2},{0x70B1, 0xCFB1}, - {0x70B3, 0xACB1},{0x70B4, 0xCFB4},{0x70B5, 0xCFB5},{0x70B7, 0xCFAE},{0x70B8, 0xACB5},{0x70BA, 0xACB0},{0x70BE, 0xCFB0},{0x70C5, 0xD277}, - {0x70C6, 0xD278},{0x70C7, 0xD279},{0x70C8, 0xAF50},{0x70CA, 0xAF4C},{0x70CB, 0xD26E},{0x70CD, 0xD276},{0x70CE, 0xD27B},{0x70CF, 0xAF51}, - {0x70D1, 0xD26C},{0x70D2, 0xD272},{0x70D3, 0xD26B},{0x70D4, 0xD275},{0x70D7, 0xD271},{0x70D8, 0xAF4D},{0x70D9, 0xAF4F},{0x70DA, 0xD27A}, - {0x70DC, 0xD26A},{0x70DD, 0xD26D},{0x70DE, 0xD273},{0x70E0, 0xD274},{0x70E1, 0xD27C},{0x70E2, 0xD270},{0x70E4, 0xAF4E},{0x70EF, 0xB26D}, - {0x70F0, 0xD64E},{0x70F3, 0xD650},{0x70F4, 0xD64C},{0x70F6, 0xD658},{0x70F7, 0xD64A},{0x70F8, 0xD657},{0x70F9, 0xB269},{0x70FA, 0xD648}, - {0x70FB, 0xDA5B},{0x70FC, 0xD652},{0x70FD, 0xB26C},{0x70FF, 0xD653},{0x7100, 0xD656},{0x7102, 0xD65A},{0x7104, 0xD64F},{0x7106, 0xD654}, - {0x7109, 0xB26A},{0x710A, 0xB26B},{0x710B, 0xD659},{0x710C, 0xD64D},{0x710D, 0xD649},{0x710E, 0xD65B},{0x7110, 0xD651},{0x7113, 0xD655}, - {0x7117, 0xD64B},{0x7119, 0xB548},{0x711A, 0xB549},{0x711B, 0xDA65},{0x711C, 0xB54F},{0x711E, 0xDA59},{0x711F, 0xDA62},{0x7120, 0xDA58}, - {0x7121, 0xB54C},{0x7122, 0xDA60},{0x7123, 0xDA5E},{0x7125, 0xDA5F},{0x7126, 0xB54A},{0x7128, 0xDA63},{0x712E, 0xDA5C},{0x712F, 0xDA5A}, - {0x7130, 0xB54B},{0x7131, 0xDA5D},{0x7132, 0xDA61},{0x7136, 0xB54D},{0x713A, 0xDA64},{0x7141, 0xDE70},{0x7142, 0xDE77},{0x7143, 0xDE79}, - {0x7144, 0xDEA1},{0x7146, 0xB7DA},{0x7147, 0xDE6B},{0x7149, 0xB7D2},{0x714B, 0xDE7A},{0x714C, 0xB7D7},{0x714D, 0xDEA2},{0x714E, 0xB7CE}, - {0x7150, 0xDE7D},{0x7152, 0xDE6D},{0x7153, 0xDE7E},{0x7154, 0xDE6C},{0x7156, 0xB7DC},{0x7158, 0xDE78},{0x7159, 0xB7CF},{0x715A, 0xDEA3}, - {0x715C, 0xB7D4},{0x715D, 0xDE71},{0x715E, 0xB7D9},{0x715F, 0xDE7C},{0x7160, 0xDE6F},{0x7161, 0xDE76},{0x7162, 0xDE72},{0x7163, 0xDE6E}, - {0x7164, 0xB7D1},{0x7165, 0xB7D8},{0x7166, 0xB7D6},{0x7167, 0xB7D3},{0x7168, 0xB7DB},{0x7169, 0xB7D0},{0x716A, 0xDE75},{0x716C, 0xB7D5}, - {0x716E, 0xB54E},{0x7170, 0xDE7B},{0x7172, 0xDE73},{0x7178, 0xDE74},{0x717B, 0xE2C1},{0x717D, 0xBAB4},{0x7180, 0xE2BD},{0x7181, 0xE2C3}, - {0x7182, 0xE2BF},{0x7184, 0xBAB6},{0x7185, 0xE2BE},{0x7186, 0xE2C2},{0x7187, 0xE2BA},{0x7189, 0xE2BC},{0x718A, 0xBAB5},{0x718F, 0xE2C0}, - {0x7190, 0xE2BB},{0x7192, 0xBAB7},{0x7194, 0xBAB2},{0x7197, 0xE2C4},{0x7199, 0xBAB3},{0x719A, 0xE667},{0x719B, 0xE664},{0x719C, 0xE670}, - {0x719D, 0xE66A},{0x719E, 0xE66C},{0x719F, 0xBCF4},{0x71A0, 0xE666},{0x71A1, 0xE66E},{0x71A4, 0xE66D},{0x71A5, 0xE66B},{0x71A7, 0xE671}, - {0x71A8, 0xBCF7},{0x71A9, 0xE668},{0x71AA, 0xE66F},{0x71AC, 0xBCF5},{0x71AF, 0xE663},{0x71B0, 0xE665},{0x71B1, 0xBCF6},{0x71B2, 0xE662}, - {0x71B3, 0xE672},{0x71B5, 0xE669},{0x71B8, 0xEA4A},{0x71B9, 0xBF51},{0x71BC, 0xEA55},{0x71BD, 0xEA53},{0x71BE, 0xBF4B},{0x71BF, 0xEA49}, - {0x71C0, 0xEA4C},{0x71C1, 0xEA4D},{0x71C2, 0xEA48},{0x71C3, 0xBF55},{0x71C4, 0xBF56},{0x71C5, 0xEA47},{0x71C6, 0xEA56},{0x71C7, 0xEA51}, - {0x71C8, 0xBF4F},{0x71C9, 0xBF4C},{0x71CA, 0xEA50},{0x71CB, 0xEA4E},{0x71CE, 0xBF52},{0x71CF, 0xEA52},{0x71D0, 0xBF4D},{0x71D2, 0xBF4E}, - {0x71D4, 0xEA4F},{0x71D5, 0xBF50},{0x71D6, 0xEA4B},{0x71D8, 0xEA54},{0x71D9, 0xBF53},{0x71DA, 0xEA57},{0x71DB, 0xEA58},{0x71DC, 0xBF54}, - {0x71DF, 0xC0E7},{0x71E0, 0xC0EE},{0x71E1, 0xED5C},{0x71E2, 0xED62},{0x71E4, 0xED60},{0x71E5, 0xC0EA},{0x71E6, 0xC0E9},{0x71E7, 0xC0E6}, - {0x71E8, 0xED5E},{0x71EC, 0xC0EC},{0x71ED, 0xC0EB},{0x71EE, 0xC0E8},{0x71F0, 0xED61},{0x71F1, 0xED5D},{0x71F2, 0xED5F},{0x71F4, 0xC0ED}, - {0x71F8, 0xC277},{0x71F9, 0xEFFB},{0x71FB, 0xC274},{0x71FC, 0xC275},{0x71FD, 0xEFFD},{0x71FE, 0xC276},{0x71FF, 0xEFFA},{0x7201, 0xEFF9}, - {0x7202, 0xF26C},{0x7203, 0xEFFC},{0x7205, 0xF26D},{0x7206, 0xC37A},{0x7207, 0xF26B},{0x720A, 0xF26A},{0x720C, 0xF269},{0x720D, 0xC37B}, - {0x7210, 0xC46C},{0x7213, 0xF46A},{0x7214, 0xF46B},{0x7219, 0xF5DC},{0x721A, 0xF5DB},{0x721B, 0xC4EA},{0x721D, 0xF5DA},{0x721E, 0xF6EC}, - {0x721F, 0xF6ED},{0x7222, 0xF7E6},{0x7223, 0xF8B1},{0x7226, 0xF8F6},{0x7227, 0xF9BC},{0x7228, 0xC679},{0x7229, 0xF9C6},{0x722A, 0xA4F6}, - {0x722C, 0xAAA6},{0x722D, 0xAAA7},{0x7230, 0xACB8},{0x7235, 0xC0EF},{0x7236, 0xA4F7},{0x7238, 0xAAA8},{0x7239, 0xAF52},{0x723A, 0xB7DD}, - {0x723B, 0xA4F8},{0x723D, 0xB26E},{0x723E, 0xBAB8},{0x723F, 0xC962},{0x7241, 0xCFB7},{0x7242, 0xD27D},{0x7244, 0xE2C5},{0x7246, 0xC0F0}, - {0x7247, 0xA4F9},{0x7248, 0xAAA9},{0x7249, 0xCFB8},{0x724A, 0xCFB9},{0x724B, 0xDA66},{0x724C, 0xB550},{0x724F, 0xDEA4},{0x7252, 0xB7DE}, - {0x7253, 0xE2C6},{0x7256, 0xBCF8},{0x7258, 0xC37C},{0x7259, 0xA4FA},{0x725A, 0xDA67},{0x725B, 0xA4FB},{0x725D, 0xA6C9},{0x725E, 0xCA42}, - {0x725F, 0xA6C8},{0x7260, 0xA865},{0x7261, 0xA864},{0x7262, 0xA863},{0x7263, 0xCB60},{0x7267, 0xAAAA},{0x7269, 0xAAAB},{0x726A, 0xCD5B}, - {0x726C, 0xCFBA},{0x726E, 0xCFBD},{0x726F, 0xACBA},{0x7270, 0xCFBB},{0x7272, 0xACB9},{0x7273, 0xCFBC},{0x7274, 0xACBB},{0x7276, 0xD2A2}, - {0x7277, 0xD2A1},{0x7278, 0xD27E},{0x7279, 0xAF53},{0x727B, 0xD65D},{0x727C, 0xD65E},{0x727D, 0xB26F},{0x727E, 0xD65C},{0x727F, 0xD65F}, - {0x7280, 0xB552},{0x7281, 0xB270},{0x7284, 0xB551},{0x7285, 0xDA6B},{0x7286, 0xDA6A},{0x7288, 0xDA68},{0x7289, 0xDA69},{0x728B, 0xDA6C}, - {0x728C, 0xDEA6},{0x728D, 0xDEA5},{0x728E, 0xDEA9},{0x7290, 0xDEA8},{0x7291, 0xDEA7},{0x7292, 0xBAB9},{0x7293, 0xE2C9},{0x7295, 0xE2C8}, - {0x7296, 0xBABA},{0x7297, 0xE2C7},{0x7298, 0xE673},{0x729A, 0xE674},{0x729B, 0xBCF9},{0x729D, 0xEA59},{0x729E, 0xEA5A},{0x72A1, 0xF272}, - {0x72A2, 0xC37D},{0x72A3, 0xF271},{0x72A4, 0xF270},{0x72A5, 0xF26E},{0x72A6, 0xF26F},{0x72A7, 0xC4EB},{0x72A8, 0xF46C},{0x72A9, 0xF6EE}, - {0x72AA, 0xF8F7},{0x72AC, 0xA4FC},{0x72AE, 0xC9A5},{0x72AF, 0xA5C7},{0x72B0, 0xC9A6},{0x72B4, 0xCA43},{0x72B5, 0xCA44},{0x72BA, 0xCB66}, - {0x72BD, 0xCB62},{0x72BF, 0xCB61},{0x72C0, 0xAAAC},{0x72C1, 0xCB65},{0x72C2, 0xA867},{0x72C3, 0xCB63},{0x72C4, 0xA866},{0x72C5, 0xCB67}, - {0x72C6, 0xCB64},{0x72C9, 0xCD5F},{0x72CA, 0xCFBE},{0x72CB, 0xCD5D},{0x72CC, 0xCD64},{0x72CE, 0xAAAD},{0x72D0, 0xAAB0},{0x72D1, 0xCD65}, - {0x72D2, 0xCD61},{0x72D4, 0xCD62},{0x72D6, 0xCD5C},{0x72D7, 0xAAAF},{0x72D8, 0xCD5E},{0x72D9, 0xAAAE},{0x72DA, 0xCD63},{0x72DC, 0xCD60}, - {0x72DF, 0xCFC2},{0x72E0, 0xACBD},{0x72E1, 0xACBE},{0x72E3, 0xCFC5},{0x72E4, 0xCFBF},{0x72E6, 0xCFC4},{0x72E8, 0xCFC0},{0x72E9, 0xACBC}, - {0x72EA, 0xCFC3},{0x72EB, 0xCFC1},{0x72F3, 0xD2A8},{0x72F4, 0xD2A5},{0x72F6, 0xD2A7},{0x72F7, 0xAF58},{0x72F8, 0xAF57},{0x72F9, 0xAF55}, - {0x72FA, 0xD2A4},{0x72FB, 0xD2A9},{0x72FC, 0xAF54},{0x72FD, 0xAF56},{0x72FE, 0xD2A6},{0x72FF, 0xD667},{0x7300, 0xD2A3},{0x7301, 0xD2AA}, - {0x7307, 0xD662},{0x7308, 0xD666},{0x730A, 0xD665},{0x730B, 0xDA6E},{0x730C, 0xDA79},{0x730F, 0xD668},{0x7311, 0xD663},{0x7312, 0xDA6D}, - {0x7313, 0xB274},{0x7316, 0xB273},{0x7317, 0xD661},{0x7318, 0xD664},{0x7319, 0xB275},{0x731B, 0xB272},{0x731C, 0xB271},{0x731D, 0xD660}, - {0x731E, 0xD669},{0x7322, 0xDA70},{0x7323, 0xDA77},{0x7325, 0xB554},{0x7326, 0xDA76},{0x7327, 0xDA73},{0x7329, 0xB556},{0x732D, 0xDA75}, - {0x7330, 0xDA6F},{0x7331, 0xDA71},{0x7332, 0xDA74},{0x7333, 0xDA72},{0x7334, 0xB555},{0x7335, 0xDA78},{0x7336, 0xB553},{0x7337, 0xB7DF}, - {0x733A, 0xDEAD},{0x733B, 0xDEAC},{0x733C, 0xDEAA},{0x733E, 0xB7E2},{0x733F, 0xB7E1},{0x7340, 0xDEAE},{0x7342, 0xDEAB},{0x7343, 0xE2CA}, - {0x7344, 0xBABB},{0x7345, 0xB7E0},{0x7349, 0xDEB0},{0x734A, 0xDEAF},{0x734C, 0xE2CD},{0x734D, 0xE2CB},{0x734E, 0xBCFA},{0x7350, 0xBABC}, - {0x7351, 0xE2CC},{0x7352, 0xE676},{0x7357, 0xBCFB},{0x7358, 0xE675},{0x7359, 0xE67E},{0x735A, 0xE67D},{0x735B, 0xE67B},{0x735D, 0xE67A}, - {0x735E, 0xE677},{0x735F, 0xE678},{0x7360, 0xE679},{0x7361, 0xE67C},{0x7362, 0xE6A1},{0x7365, 0xEA5F},{0x7366, 0xEA5C},{0x7367, 0xEA5D}, - {0x7368, 0xBF57},{0x7369, 0xEA5B},{0x736A, 0xEA61},{0x736B, 0xEA60},{0x736C, 0xEA5E},{0x736E, 0xED64},{0x736F, 0xED65},{0x7370, 0xC0F1}, - {0x7372, 0xC0F2},{0x7373, 0xED63},{0x7375, 0xC279},{0x7376, 0xEFFE},{0x7377, 0xC278},{0x7378, 0xC37E},{0x737A, 0xC3A1},{0x737B, 0xC46D}, - {0x737C, 0xF46E},{0x737D, 0xF46D},{0x737E, 0xF5DD},{0x737F, 0xF6EF},{0x7380, 0xC57A},{0x7381, 0xF7E8},{0x7382, 0xF7E7},{0x7383, 0xF7E9}, - {0x7384, 0xA5C8},{0x7385, 0xCFC6},{0x7386, 0xAF59},{0x7387, 0xB276},{0x7388, 0xD66A},{0x7389, 0xA5C9},{0x738A, 0xC9A7},{0x738B, 0xA4FD}, - {0x738E, 0xCA45},{0x7392, 0xCB6C},{0x7393, 0xCB6A},{0x7394, 0xCB6B},{0x7395, 0xCB68},{0x7396, 0xA868},{0x7397, 0xCB69},{0x739D, 0xCD6D}, - {0x739F, 0xAAB3},{0x73A0, 0xCD6B},{0x73A1, 0xCD67},{0x73A2, 0xCD6A},{0x73A4, 0xCD66},{0x73A5, 0xAAB5},{0x73A6, 0xCD69},{0x73A8, 0xAAB2}, - {0x73A9, 0xAAB1},{0x73AB, 0xAAB4},{0x73AC, 0xCD6C},{0x73AD, 0xCD68},{0x73B2, 0xACC2},{0x73B3, 0xACC5},{0x73B4, 0xCFCE},{0x73B5, 0xCFCD}, - {0x73B6, 0xCFCC},{0x73B7, 0xACBF},{0x73B8, 0xCFD5},{0x73B9, 0xCFCB},{0x73BB, 0xACC1},{0x73BC, 0xD2AF},{0x73BE, 0xCFD2},{0x73BF, 0xCFD0}, - {0x73C0, 0xACC4},{0x73C2, 0xCFC8},{0x73C3, 0xCFD3},{0x73C5, 0xCFCA},{0x73C6, 0xCFD4},{0x73C7, 0xCFD1},{0x73C8, 0xCFC9},{0x73CA, 0xACC0}, - {0x73CB, 0xCFD6},{0x73CC, 0xCFC7},{0x73CD, 0xACC3},{0x73D2, 0xD2B4},{0x73D3, 0xD2AB},{0x73D4, 0xD2B6},{0x73D6, 0xD2AE},{0x73D7, 0xD2B9}, - {0x73D8, 0xD2BA},{0x73D9, 0xD2AC},{0x73DA, 0xD2B8},{0x73DB, 0xD2B5},{0x73DC, 0xD2B3},{0x73DD, 0xD2B7},{0x73DE, 0xAF5F},{0x73E0, 0xAF5D}, - {0x73E3, 0xD2B1},{0x73E5, 0xD2AD},{0x73E7, 0xD2B0},{0x73E8, 0xD2BB},{0x73E9, 0xD2B2},{0x73EA, 0xAF5E},{0x73EB, 0xCFCF},{0x73ED, 0xAF5A}, - {0x73EE, 0xAF5C},{0x73F4, 0xD678},{0x73F5, 0xD66D},{0x73F6, 0xD66B},{0x73F8, 0xD66C},{0x73FA, 0xD673},{0x73FC, 0xD674},{0x73FD, 0xD670}, - {0x73FE, 0xB27B},{0x73FF, 0xD675},{0x7400, 0xD672},{0x7401, 0xD66F},{0x7403, 0xB279},{0x7404, 0xD66E},{0x7405, 0xB277},{0x7406, 0xB27A}, - {0x7407, 0xD671},{0x7408, 0xD679},{0x7409, 0xAF5B},{0x740A, 0xB278},{0x740B, 0xD677},{0x740C, 0xD676},{0x740D, 0xB27C},{0x7416, 0xDA7E}, - {0x741A, 0xDAA1},{0x741B, 0xB560},{0x741D, 0xDAA7},{0x7420, 0xDAA9},{0x7421, 0xDAA2},{0x7422, 0xB55A},{0x7423, 0xDAA6},{0x7424, 0xDAA5}, - {0x7425, 0xB55B},{0x7426, 0xB561},{0x7428, 0xB562},{0x7429, 0xDAA8},{0x742A, 0xB558},{0x742B, 0xDA7D},{0x742C, 0xDA7B},{0x742D, 0xDAA3}, - {0x742E, 0xDA7A},{0x742F, 0xB55F},{0x7430, 0xDA7C},{0x7431, 0xDAA4},{0x7432, 0xDAAA},{0x7433, 0xB559},{0x7434, 0xB55E},{0x7435, 0xB55C}, - {0x7436, 0xB55D},{0x743A, 0xB557},{0x743F, 0xB7E9},{0x7440, 0xDEB7},{0x7441, 0xB7E8},{0x7442, 0xDEBB},{0x7444, 0xDEB1},{0x7446, 0xDEBC}, - {0x744A, 0xDEB2},{0x744B, 0xDEB3},{0x744D, 0xDEBD},{0x744E, 0xDEBA},{0x744F, 0xDEB8},{0x7450, 0xDEB9},{0x7451, 0xDEB5},{0x7452, 0xDEB4}, - {0x7454, 0xDEBE},{0x7455, 0xB7E5},{0x7457, 0xDEB6},{0x7459, 0xB7EA},{0x745A, 0xB7E4},{0x745B, 0xB7EB},{0x745C, 0xB7EC},{0x745E, 0xB7E7}, - {0x745F, 0xB7E6},{0x7462, 0xE2CE},{0x7463, 0xBABE},{0x7464, 0xBABD},{0x7467, 0xE2D3},{0x7469, 0xBCFC},{0x746A, 0xBABF},{0x746D, 0xBAC1}, - {0x746E, 0xE2D4},{0x746F, 0xB7E3},{0x7470, 0xBAC0},{0x7471, 0xE2D0},{0x7472, 0xE2D2},{0x7473, 0xE2CF},{0x7475, 0xE2D1},{0x7479, 0xE6AB}, - {0x747C, 0xE6AA},{0x747D, 0xE6A7},{0x747E, 0xBD40},{0x747F, 0xEA62},{0x7480, 0xBD41},{0x7481, 0xE6A6},{0x7483, 0xBCFE},{0x7485, 0xE6A8}, - {0x7486, 0xE6A5},{0x7487, 0xE6A2},{0x7488, 0xE6A9},{0x7489, 0xE6A3},{0x748A, 0xE6A4},{0x748B, 0xBCFD},{0x7490, 0xED69},{0x7492, 0xEA66}, - {0x7494, 0xEA65},{0x7495, 0xEA67},{0x7497, 0xED66},{0x7498, 0xBF5A},{0x749A, 0xEA63},{0x749C, 0xBF58},{0x749E, 0xBF5C},{0x749F, 0xBF5B}, - {0x74A0, 0xEA64},{0x74A1, 0xEA68},{0x74A3, 0xBF59},{0x74A5, 0xED6D},{0x74A6, 0xC0F5},{0x74A7, 0xC27A},{0x74A8, 0xC0F6},{0x74A9, 0xC0F3}, - {0x74AA, 0xED6A},{0x74AB, 0xED68},{0x74AD, 0xED6B},{0x74AF, 0xED6E},{0x74B0, 0xC0F4},{0x74B1, 0xED6C},{0x74B2, 0xED67},{0x74B5, 0xF042}, - {0x74B6, 0xF045},{0x74B7, 0xF275},{0x74B8, 0xF040},{0x74BA, 0xF46F},{0x74BB, 0xF046},{0x74BD, 0xC3A2},{0x74BE, 0xF044},{0x74BF, 0xC27B}, - {0x74C0, 0xF041},{0x74C1, 0xF043},{0x74C2, 0xF047},{0x74C3, 0xF276},{0x74C5, 0xF274},{0x74CA, 0xC3A3},{0x74CB, 0xF273},{0x74CF, 0xC46E}, - {0x74D4, 0xC4ED},{0x74D5, 0xF6F1},{0x74D6, 0xC4EC},{0x74D7, 0xF6F3},{0x74D8, 0xF6F0},{0x74D9, 0xF6F2},{0x74DA, 0xC5D0},{0x74DB, 0xF8B2}, - {0x74DC, 0xA5CA},{0x74DD, 0xCD6E},{0x74DE, 0xD2BC},{0x74DF, 0xD2BD},{0x74E0, 0xB27D},{0x74E1, 0xDEBF},{0x74E2, 0xBF5D},{0x74E3, 0xC3A4}, - {0x74E4, 0xC57B},{0x74E5, 0xF8B3},{0x74E6, 0xA5CB},{0x74E8, 0xCD6F},{0x74E9, 0xA260},{0x74EC, 0xCFD7},{0x74EE, 0xCFD8},{0x74F4, 0xD2BE}, - {0x74F5, 0xD2BF},{0x74F6, 0xB27E},{0x74F7, 0xB2A1},{0x74FB, 0xDAAB},{0x74FD, 0xDEC2},{0x74FE, 0xDEC1},{0x74FF, 0xDEC0},{0x7500, 0xE2D5}, - {0x7502, 0xE2D6},{0x7503, 0xE2D7},{0x7504, 0xBAC2},{0x7507, 0xE6AD},{0x7508, 0xE6AC},{0x750B, 0xEA69},{0x750C, 0xBF5E},{0x750D, 0xBF5F}, - {0x750F, 0xED72},{0x7510, 0xED6F},{0x7511, 0xED70},{0x7512, 0xED71},{0x7513, 0xF049},{0x7514, 0xF048},{0x7515, 0xC27C},{0x7516, 0xF277}, - {0x7517, 0xF5DE},{0x7518, 0xA5CC},{0x751A, 0xACC6},{0x751C, 0xB2A2},{0x751D, 0xDEC3},{0x751F, 0xA5CD},{0x7521, 0xD2C0},{0x7522, 0xB2A3}, - {0x7525, 0xB563},{0x7526, 0xB564},{0x7528, 0xA5CE},{0x7529, 0xA5CF},{0x752A, 0xCA46},{0x752B, 0xA86A},{0x752C, 0xA869},{0x752D, 0xACC7}, - {0x752E, 0xCFD9},{0x752F, 0xDAAC},{0x7530, 0xA5D0},{0x7531, 0xA5D1},{0x7532, 0xA5D2},{0x7533, 0xA5D3},{0x7537, 0xA86B},{0x7538, 0xA86C}, - {0x7539, 0xCB6E},{0x753A, 0xCB6D},{0x753D, 0xAAB6},{0x753E, 0xCD72},{0x753F, 0xCD70},{0x7540, 0xCD71},{0x7547, 0xCFDA},{0x7548, 0xCFDB}, - {0x754B, 0xACCB},{0x754C, 0xACC9},{0x754E, 0xACCA},{0x754F, 0xACC8},{0x7554, 0xAF60},{0x7559, 0xAF64},{0x755A, 0xAF63},{0x755B, 0xD2C1}, - {0x755C, 0xAF62},{0x755D, 0xAF61},{0x755F, 0xD2C2},{0x7562, 0xB2A6},{0x7563, 0xD67B},{0x7564, 0xD67A},{0x7565, 0xB2A4},{0x7566, 0xB2A5}, - {0x756A, 0xB566},{0x756B, 0xB565},{0x756C, 0xDAAE},{0x756F, 0xDAAD},{0x7570, 0xB2A7},{0x7576, 0xB7ED},{0x7577, 0xDEC5},{0x7578, 0xB7EE}, - {0x7579, 0xDEC4},{0x757D, 0xE2D8},{0x757E, 0xE6AE},{0x757F, 0xBD42},{0x7580, 0xEA6A},{0x7584, 0xED73},{0x7586, 0xC3A6},{0x7587, 0xC3A5}, - {0x758A, 0xC57C},{0x758B, 0xA5D4},{0x758C, 0xCD73},{0x758F, 0xB2A8},{0x7590, 0xE2D9},{0x7591, 0xBAC3},{0x7594, 0xCB6F},{0x7595, 0xCB70}, - {0x7598, 0xCD74},{0x7599, 0xAAB8},{0x759A, 0xAAB9},{0x759D, 0xAAB7},{0x75A2, 0xACCF},{0x75A3, 0xACD0},{0x75A4, 0xACCD},{0x75A5, 0xACCE}, - {0x75A7, 0xCFDC},{0x75AA, 0xCFDD},{0x75AB, 0xACCC},{0x75B0, 0xD2C3},{0x75B2, 0xAF68},{0x75B3, 0xAF69},{0x75B5, 0xB2AB},{0x75B6, 0xD2C9}, - {0x75B8, 0xAF6E},{0x75B9, 0xAF6C},{0x75BA, 0xD2CA},{0x75BB, 0xD2C5},{0x75BC, 0xAF6B},{0x75BD, 0xAF6A},{0x75BE, 0xAF65},{0x75BF, 0xD2C8}, - {0x75C0, 0xD2C7},{0x75C1, 0xD2C4},{0x75C2, 0xAF6D},{0x75C4, 0xD2C6},{0x75C5, 0xAF66},{0x75C7, 0xAF67},{0x75CA, 0xB2AC},{0x75CB, 0xD6A1}, - {0x75CC, 0xD6A2},{0x75CD, 0xB2AD},{0x75CE, 0xD67C},{0x75CF, 0xD67E},{0x75D0, 0xD6A4},{0x75D1, 0xD6A3},{0x75D2, 0xD67D},{0x75D4, 0xB2A9}, - {0x75D5, 0xB2AA},{0x75D7, 0xDAB6},{0x75D8, 0xB56B},{0x75D9, 0xB56A},{0x75DA, 0xDAB0},{0x75DB, 0xB568},{0x75DD, 0xDAB3},{0x75DE, 0xB56C}, - {0x75DF, 0xDAB4},{0x75E0, 0xB56D},{0x75E1, 0xDAB1},{0x75E2, 0xB567},{0x75E3, 0xB569},{0x75E4, 0xDAB5},{0x75E6, 0xDAB2},{0x75E7, 0xDAAF}, - {0x75ED, 0xDED2},{0x75EF, 0xDEC7},{0x75F0, 0xB7F0},{0x75F1, 0xB7F3},{0x75F2, 0xB7F2},{0x75F3, 0xB7F7},{0x75F4, 0xB7F6},{0x75F5, 0xDED3}, - {0x75F6, 0xDED1},{0x75F7, 0xDECA},{0x75F8, 0xDECE},{0x75F9, 0xDECD},{0x75FA, 0xB7F4},{0x75FB, 0xDED0},{0x75FC, 0xDECC},{0x75FD, 0xDED4}, - {0x75FE, 0xDECB},{0x75FF, 0xB7F5},{0x7600, 0xB7EF},{0x7601, 0xB7F1},{0x7603, 0xDEC9},{0x7608, 0xE2DB},{0x7609, 0xBAC7},{0x760A, 0xE2DF}, - {0x760B, 0xBAC6},{0x760C, 0xE2DC},{0x760D, 0xBAC5},{0x760F, 0xDEC8},{0x7610, 0xDECF},{0x7611, 0xE2DE},{0x7613, 0xBAC8},{0x7614, 0xE2E0}, - {0x7615, 0xE2DD},{0x7616, 0xE2DA},{0x7619, 0xE6B1},{0x761A, 0xE6B5},{0x761B, 0xE6B7},{0x761C, 0xE6B3},{0x761D, 0xE6B2},{0x761E, 0xE6B0}, - {0x761F, 0xBD45},{0x7620, 0xBD43},{0x7621, 0xBD48},{0x7622, 0xBD49},{0x7623, 0xE6B4},{0x7624, 0xBD46},{0x7625, 0xE6AF},{0x7626, 0xBD47}, - {0x7627, 0xBAC4},{0x7628, 0xE6B6},{0x7629, 0xBD44},{0x762D, 0xEA6C},{0x762F, 0xEA6B},{0x7630, 0xEA73},{0x7631, 0xEA6D},{0x7632, 0xEA72}, - {0x7633, 0xEA6F},{0x7634, 0xBF60},{0x7635, 0xEA71},{0x7638, 0xBF61},{0x763A, 0xBF62},{0x763C, 0xEA70},{0x763D, 0xEA6E},{0x7642, 0xC0F8}, - {0x7643, 0xED74},{0x7646, 0xC0F7},{0x7647, 0xED77},{0x7648, 0xED75},{0x7649, 0xED76},{0x764C, 0xC0F9},{0x7650, 0xF04D},{0x7652, 0xC2A1}, - {0x7653, 0xF04E},{0x7656, 0xC27D},{0x7657, 0xF04F},{0x7658, 0xC27E},{0x7659, 0xF04C},{0x765A, 0xF050},{0x765C, 0xF04A},{0x765F, 0xC3A7}, - {0x7660, 0xF278},{0x7661, 0xC3A8},{0x7662, 0xC46F},{0x7664, 0xF04B},{0x7665, 0xC470},{0x7669, 0xC4EE},{0x766A, 0xF5DF},{0x766C, 0xC57E}, - {0x766D, 0xF6F4},{0x766E, 0xC57D},{0x7670, 0xF7EA},{0x7671, 0xC5F5},{0x7672, 0xC5F6},{0x7675, 0xF9CC},{0x7678, 0xACD1},{0x7679, 0xCFDE}, - {0x767B, 0xB56E},{0x767C, 0xB56F},{0x767D, 0xA5D5},{0x767E, 0xA6CA},{0x767F, 0xCA47},{0x7681, 0xCB71},{0x7682, 0xA86D},{0x7684, 0xAABA}, - {0x7686, 0xACD2},{0x7687, 0xACD3},{0x7688, 0xACD4},{0x7689, 0xD6A6},{0x768A, 0xD2CB},{0x768B, 0xAF6F},{0x768E, 0xB2AE},{0x768F, 0xD6A5}, - {0x7692, 0xDAB8},{0x7693, 0xB571},{0x7695, 0xDAB7},{0x7696, 0xB570},{0x7699, 0xDED5},{0x769A, 0xBD4A},{0x769B, 0xE6BB},{0x769C, 0xE6B8}, - {0x769D, 0xE6B9},{0x769E, 0xE6BA},{0x76A4, 0xED78},{0x76A6, 0xF051},{0x76AA, 0xF471},{0x76AB, 0xF470},{0x76AD, 0xF6F5},{0x76AE, 0xA5D6}, - {0x76AF, 0xCD75},{0x76B0, 0xAF70},{0x76B4, 0xB572},{0x76B5, 0xDED6},{0x76B8, 0xE2E1},{0x76BA, 0xBD4B},{0x76BB, 0xEA74},{0x76BD, 0xF052}, - {0x76BE, 0xF472},{0x76BF, 0xA5D7},{0x76C2, 0xAABB},{0x76C3, 0xACD7},{0x76C4, 0xCFDF},{0x76C5, 0xACD8},{0x76C6, 0xACD6},{0x76C8, 0xACD5}, - {0x76C9, 0xD2CC},{0x76CA, 0xAF71},{0x76CD, 0xAF72},{0x76CE, 0xAF73},{0x76D2, 0xB2B0},{0x76D3, 0xD6A7},{0x76D4, 0xB2AF},{0x76DA, 0xDAB9}, - {0x76DB, 0xB2B1},{0x76DC, 0xB573},{0x76DD, 0xDED7},{0x76DE, 0xB7F8},{0x76DF, 0xB7F9},{0x76E1, 0xBAC9},{0x76E3, 0xBACA},{0x76E4, 0xBD4C}, - {0x76E5, 0xBF64},{0x76E6, 0xEA75},{0x76E7, 0xBF63},{0x76E9, 0xED79},{0x76EA, 0xC0FA},{0x76EC, 0xF053},{0x76ED, 0xF473},{0x76EE, 0xA5D8}, - {0x76EF, 0xA86E},{0x76F0, 0xCD78},{0x76F1, 0xCD77},{0x76F2, 0xAABC},{0x76F3, 0xCD76},{0x76F4, 0xAABD},{0x76F5, 0xCD79},{0x76F7, 0xCFE5}, - {0x76F8, 0xACDB},{0x76F9, 0xACDA},{0x76FA, 0xCFE7},{0x76FB, 0xCFE6},{0x76FC, 0xACDF},{0x76FE, 0xACDE},{0x7701, 0xACD9},{0x7703, 0xCFE1}, - {0x7704, 0xCFE2},{0x7705, 0xCFE3},{0x7707, 0xACE0},{0x7708, 0xCFE0},{0x7709, 0xACDC},{0x770A, 0xCFE4},{0x770B, 0xACDD},{0x7710, 0xD2CF}, - {0x7711, 0xD2D3},{0x7712, 0xD2D1},{0x7713, 0xD2D0},{0x7715, 0xD2D4},{0x7719, 0xD2D5},{0x771A, 0xD2D6},{0x771B, 0xD2CE},{0x771D, 0xD2CD}, - {0x771F, 0xAF75},{0x7720, 0xAF76},{0x7722, 0xD2D7},{0x7723, 0xD2D2},{0x7725, 0xD6B0},{0x7727, 0xD2D8},{0x7728, 0xAF77},{0x7729, 0xAF74}, - {0x772D, 0xD6AA},{0x772F, 0xD6A9},{0x7731, 0xD6AB},{0x7732, 0xD6AC},{0x7733, 0xD6AE},{0x7734, 0xD6AD},{0x7735, 0xD6B2},{0x7736, 0xB2B5}, - {0x7737, 0xB2B2},{0x7738, 0xB2B6},{0x7739, 0xD6A8},{0x773A, 0xB2B7},{0x773B, 0xD6B1},{0x773C, 0xB2B4},{0x773D, 0xD6AF},{0x773E, 0xB2B3}, - {0x7744, 0xDABC},{0x7745, 0xDABE},{0x7746, 0xDABA},{0x7747, 0xDABB},{0x774A, 0xDABF},{0x774B, 0xDAC1},{0x774C, 0xDAC2},{0x774D, 0xDABD}, - {0x774E, 0xDAC0},{0x774F, 0xB574},{0x7752, 0xDEDB},{0x7754, 0xDEE0},{0x7755, 0xDED8},{0x7756, 0xDEDC},{0x7759, 0xDEE1},{0x775A, 0xDEDD}, - {0x775B, 0xB7FA},{0x775C, 0xB843},{0x775E, 0xB7FD},{0x775F, 0xDED9},{0x7760, 0xDEDA},{0x7761, 0xBACE},{0x7762, 0xB846},{0x7763, 0xB7FE}, - {0x7765, 0xB844},{0x7766, 0xB7FC},{0x7767, 0xDEDF},{0x7768, 0xB845},{0x7769, 0xDEDE},{0x776A, 0xB841},{0x776B, 0xB7FB},{0x776C, 0xB842}, - {0x776D, 0xDEE2},{0x776E, 0xE2E6},{0x776F, 0xE2E8},{0x7779, 0xB840},{0x777C, 0xE2E3},{0x777D, 0xBACC},{0x777E, 0xE2E9},{0x777F, 0xBACD}, - {0x7780, 0xE2E7},{0x7781, 0xE2E2},{0x7782, 0xE2E5},{0x7783, 0xE2EA},{0x7784, 0xBACB},{0x7785, 0xE2E4},{0x7787, 0xBD4E},{0x7788, 0xE6BF}, - {0x7789, 0xE6BE},{0x778B, 0xBD51},{0x778C, 0xBD4F},{0x778D, 0xE6BC},{0x778E, 0xBD4D},{0x778F, 0xE6BD},{0x7791, 0xBD50},{0x7795, 0xEA7D}, - {0x7797, 0xEAA1},{0x7799, 0xEA7E},{0x779A, 0xEA76},{0x779B, 0xEA7A},{0x779C, 0xEA79},{0x779D, 0xEA77},{0x779E, 0xBF66},{0x779F, 0xBF67}, - {0x77A0, 0xBF65},{0x77A1, 0xEA78},{0x77A2, 0xEA7B},{0x77A3, 0xEA7C},{0x77A5, 0xBF68},{0x77A7, 0xC140},{0x77A8, 0xEDA3},{0x77AA, 0xC0FC}, - {0x77AB, 0xED7B},{0x77AC, 0xC0FE},{0x77AD, 0xC141},{0x77B0, 0xC0FD},{0x77B1, 0xEDA2},{0x77B2, 0xED7C},{0x77B3, 0xC0FB},{0x77B4, 0xEDA1}, - {0x77B5, 0xED7A},{0x77B6, 0xED7E},{0x77B7, 0xED7D},{0x77BA, 0xF055},{0x77BB, 0xC2A4},{0x77BC, 0xC2A5},{0x77BD, 0xC2A2},{0x77BF, 0xC2A3}, - {0x77C2, 0xF054},{0x77C4, 0xF27B},{0x77C7, 0xC3A9},{0x77C9, 0xF279},{0x77CA, 0xF27A},{0x77CC, 0xF474},{0x77CD, 0xF477},{0x77CE, 0xF475}, - {0x77CF, 0xF476},{0x77D0, 0xF5E0},{0x77D3, 0xC4EF},{0x77D4, 0xF7EB},{0x77D5, 0xF8B4},{0x77D7, 0xC5F7},{0x77D8, 0xF8F8},{0x77D9, 0xF8F9}, - {0x77DA, 0xC666},{0x77DB, 0xA5D9},{0x77DC, 0xACE1},{0x77DE, 0xDAC3},{0x77E0, 0xDEE3},{0x77E2, 0xA5DA},{0x77E3, 0xA86F},{0x77E5, 0xAABE}, - {0x77E7, 0xCFE8},{0x77E8, 0xCFE9},{0x77E9, 0xAF78},{0x77EC, 0xDAC4},{0x77ED, 0xB575},{0x77EE, 0xB847},{0x77EF, 0xC142},{0x77F0, 0xEDA4}, - {0x77F1, 0xF27C},{0x77F2, 0xF478},{0x77F3, 0xA5DB},{0x77F7, 0xCDA1},{0x77F8, 0xCD7A},{0x77F9, 0xCD7C},{0x77FA, 0xCD7E},{0x77FB, 0xCD7D}, - {0x77FC, 0xCD7B},{0x77FD, 0xAABF},{0x7802, 0xACE2},{0x7803, 0xCFF2},{0x7805, 0xCFED},{0x7806, 0xCFEA},{0x7809, 0xCFF1},{0x780C, 0xACE4}, - {0x780D, 0xACE5},{0x780E, 0xCFF0},{0x780F, 0xCFEF},{0x7810, 0xCFEE},{0x7811, 0xCFEB},{0x7812, 0xCFEC},{0x7813, 0xCFF3},{0x7814, 0xACE3}, - {0x781D, 0xAF7C},{0x781F, 0xAFA4},{0x7820, 0xAFA3},{0x7821, 0xD2E1},{0x7822, 0xD2DB},{0x7823, 0xD2D9},{0x7825, 0xAFA1},{0x7826, 0xD6B9}, - {0x7827, 0xAF7A},{0x7828, 0xD2DE},{0x7829, 0xD2E2},{0x782A, 0xD2E4},{0x782B, 0xD2E0},{0x782C, 0xD2DA},{0x782D, 0xAFA2},{0x782E, 0xD2DF}, - {0x782F, 0xD2DD},{0x7830, 0xAF79},{0x7831, 0xD2E5},{0x7832, 0xAFA5},{0x7833, 0xD2E3},{0x7834, 0xAF7D},{0x7835, 0xD2DC},{0x7837, 0xAF7E}, - {0x7838, 0xAF7B},{0x7843, 0xB2B9},{0x7845, 0xD6BA},{0x7848, 0xD6B3},{0x7849, 0xD6B5},{0x784A, 0xD6B7},{0x784C, 0xD6B8},{0x784D, 0xD6B6}, - {0x784E, 0xB2BA},{0x7850, 0xD6BB},{0x7852, 0xD6B4},{0x785C, 0xDAC8},{0x785D, 0xB576},{0x785E, 0xDAD0},{0x7860, 0xDAC5},{0x7862, 0xDAD1}, - {0x7864, 0xDAC6},{0x7865, 0xDAC7},{0x7868, 0xDACF},{0x7869, 0xDACE},{0x786A, 0xDACB},{0x786B, 0xB2B8},{0x786C, 0xB577},{0x786D, 0xDAC9}, - {0x786E, 0xDACC},{0x786F, 0xB578},{0x7870, 0xDACD},{0x7871, 0xDACA},{0x7879, 0xDEEE},{0x787B, 0xDEF2},{0x787C, 0xB84E},{0x787E, 0xE2F0}, - {0x787F, 0xB851},{0x7880, 0xDEF0},{0x7883, 0xDEED},{0x7884, 0xDEE8},{0x7885, 0xDEEA},{0x7886, 0xDEEB},{0x7887, 0xDEE4},{0x7889, 0xB84D}, - {0x788C, 0xB84C},{0x788E, 0xB848},{0x788F, 0xDEE7},{0x7891, 0xB84F},{0x7893, 0xB850},{0x7894, 0xDEE6},{0x7895, 0xDEE9},{0x7896, 0xDEF1}, - {0x7897, 0xB84A},{0x7898, 0xB84B},{0x7899, 0xDEEF},{0x789A, 0xDEE5},{0x789E, 0xE2F2},{0x789F, 0xBAD0},{0x78A0, 0xE2F4},{0x78A1, 0xDEEC}, - {0x78A2, 0xE2F6},{0x78A3, 0xBAD4},{0x78A4, 0xE2F7},{0x78A5, 0xE2F3},{0x78A7, 0xBAD1},{0x78A8, 0xE2EF},{0x78A9, 0xBAD3},{0x78AA, 0xE2EC}, - {0x78AB, 0xE2F1},{0x78AC, 0xE2F5},{0x78AD, 0xE2EE},{0x78B0, 0xB849},{0x78B2, 0xE2EB},{0x78B3, 0xBAD2},{0x78B4, 0xE2ED},{0x78BA, 0xBD54}, - {0x78BB, 0xE6C1},{0x78BC, 0xBD58},{0x78BE, 0xBD56},{0x78C1, 0xBACF},{0x78C3, 0xE6C8},{0x78C4, 0xE6C9},{0x78C5, 0xBD53},{0x78C8, 0xE6C7}, - {0x78C9, 0xE6CA},{0x78CA, 0xBD55},{0x78CB, 0xBD52},{0x78CC, 0xE6C3},{0x78CD, 0xE6C0},{0x78CE, 0xE6C5},{0x78CF, 0xE6C2},{0x78D0, 0xBD59}, - {0x78D1, 0xE6C4},{0x78D4, 0xE6C6},{0x78D5, 0xBD57},{0x78DA, 0xBF6A},{0x78DB, 0xEAA8},{0x78DD, 0xEAA2},{0x78DE, 0xEAA6},{0x78DF, 0xEAAC}, - {0x78E0, 0xEAAD},{0x78E1, 0xEAA9},{0x78E2, 0xEAAA},{0x78E3, 0xEAA7},{0x78E5, 0xEAA4},{0x78E7, 0xBF6C},{0x78E8, 0xBF69},{0x78E9, 0xEAA3}, - {0x78EA, 0xEAA5},{0x78EC, 0xBF6B},{0x78ED, 0xEAAB},{0x78EF, 0xC146},{0x78F2, 0xEDAA},{0x78F3, 0xEDA5},{0x78F4, 0xC145},{0x78F7, 0xC143}, - {0x78F9, 0xEDAC},{0x78FA, 0xC144},{0x78FB, 0xEDA8},{0x78FC, 0xEDA9},{0x78FD, 0xEDA6},{0x78FE, 0xEDAD},{0x78FF, 0xF056},{0x7901, 0xC147}, - {0x7902, 0xEDA7},{0x7904, 0xEDAE},{0x7905, 0xEDAB},{0x7909, 0xF05A},{0x790C, 0xF057},{0x790E, 0xC2A6},{0x7910, 0xF05B},{0x7911, 0xF05D}, - {0x7912, 0xF05C},{0x7913, 0xF058},{0x7914, 0xF059},{0x7917, 0xF2A3},{0x7919, 0xC3AA},{0x791B, 0xF27E},{0x791C, 0xF2A2},{0x791D, 0xF27D}, - {0x791E, 0xF2A4},{0x7921, 0xF2A1},{0x7923, 0xF47A},{0x7924, 0xF47D},{0x7925, 0xF479},{0x7926, 0xC471},{0x7927, 0xF47B},{0x7928, 0xF47C}, - {0x7929, 0xF47E},{0x792A, 0xC472},{0x792B, 0xC474},{0x792C, 0xC473},{0x792D, 0xF5E1},{0x792F, 0xF5E3},{0x7931, 0xF5E2},{0x7935, 0xF6F6}, - {0x7938, 0xF8B5},{0x7939, 0xF8FA},{0x793A, 0xA5DC},{0x793D, 0xCB72},{0x793E, 0xAAC0},{0x793F, 0xCDA3},{0x7940, 0xAAC1},{0x7941, 0xAAC2}, - {0x7942, 0xCDA2},{0x7944, 0xCFF8},{0x7945, 0xCFF7},{0x7946, 0xACE6},{0x7947, 0xACE9},{0x7948, 0xACE8},{0x7949, 0xACE7},{0x794A, 0xCFF4}, - {0x794B, 0xCFF6},{0x794C, 0xCFF5},{0x794F, 0xD2E8},{0x7950, 0xAFA7},{0x7951, 0xD2EC},{0x7952, 0xD2EB},{0x7953, 0xD2EA},{0x7954, 0xD2E6}, - {0x7955, 0xAFA6},{0x7956, 0xAFAA},{0x7957, 0xAFAD},{0x795A, 0xAFAE},{0x795B, 0xD2E7},{0x795C, 0xD2E9},{0x795D, 0xAFAC},{0x795E, 0xAFAB}, - {0x795F, 0xAFA9},{0x7960, 0xAFA8},{0x7961, 0xD6C2},{0x7963, 0xD6C0},{0x7964, 0xD6BC},{0x7965, 0xB2BB},{0x7967, 0xD6BD},{0x7968, 0xB2BC}, - {0x7969, 0xD6BE},{0x796A, 0xD6BF},{0x796B, 0xD6C1},{0x796D, 0xB2BD},{0x7970, 0xDAD5},{0x7972, 0xDAD4},{0x7973, 0xDAD3},{0x7974, 0xDAD2}, - {0x7979, 0xDEF6},{0x797A, 0xB852},{0x797C, 0xDEF3},{0x797D, 0xDEF5},{0x797F, 0xB853},{0x7981, 0xB854},{0x7982, 0xDEF4},{0x7988, 0xE341}, - {0x798A, 0xE2F9},{0x798B, 0xE2FA},{0x798D, 0xBAD7},{0x798E, 0xBAD5},{0x798F, 0xBAD6},{0x7990, 0xE343},{0x7992, 0xE342},{0x7993, 0xE2FE}, - {0x7994, 0xE2FD},{0x7995, 0xE2FC},{0x7996, 0xE2FB},{0x7997, 0xE340},{0x7998, 0xE2F8},{0x799A, 0xE6CB},{0x799B, 0xE6D0},{0x799C, 0xE6CE}, - {0x79A0, 0xE6CD},{0x79A1, 0xE6CC},{0x79A2, 0xE6CF},{0x79A4, 0xEAAE},{0x79A6, 0xBF6D},{0x79A7, 0xC148},{0x79A8, 0xEDB0},{0x79AA, 0xC149}, - {0x79AB, 0xEDAF},{0x79AC, 0xF05F},{0x79AD, 0xF05E},{0x79AE, 0xC2A7},{0x79B0, 0xF2A5},{0x79B1, 0xC3AB},{0x79B2, 0xF4A1},{0x79B3, 0xC5A1}, - {0x79B4, 0xF6F7},{0x79B6, 0xF8B7},{0x79B7, 0xF8B6},{0x79B8, 0xC9A8},{0x79B9, 0xACEA},{0x79BA, 0xACEB},{0x79BB, 0xD6C3},{0x79BD, 0xB856}, - {0x79BE, 0xA5DD},{0x79BF, 0xA872},{0x79C0, 0xA871},{0x79C1, 0xA870},{0x79C5, 0xCDA4},{0x79C8, 0xAAC4},{0x79C9, 0xAAC3},{0x79CB, 0xACEE}, - {0x79CD, 0xCFFA},{0x79CE, 0xCFFD},{0x79CF, 0xCFFB},{0x79D1, 0xACEC},{0x79D2, 0xACED},{0x79D5, 0xCFF9},{0x79D6, 0xCFFC},{0x79D8, 0xAFB5}, - {0x79DC, 0xD2F3},{0x79DD, 0xD2F5},{0x79DE, 0xD2F4},{0x79DF, 0xAFB2},{0x79E0, 0xD2EF},{0x79E3, 0xAFB0},{0x79E4, 0xAFAF},{0x79E6, 0xAFB3}, - {0x79E7, 0xAFB1},{0x79E9, 0xAFB4},{0x79EA, 0xD2F2},{0x79EB, 0xD2ED},{0x79EC, 0xD2EE},{0x79ED, 0xD2F1},{0x79EE, 0xD2F0},{0x79F6, 0xD6C6}, - {0x79F7, 0xD6C7},{0x79F8, 0xD6C5},{0x79FA, 0xD6C4},{0x79FB, 0xB2BE},{0x7A00, 0xB57D},{0x7A02, 0xDAD6},{0x7A03, 0xDAD8},{0x7A04, 0xDADA}, - {0x7A05, 0xB57C},{0x7A08, 0xB57A},{0x7A0A, 0xDAD7},{0x7A0B, 0xB57B},{0x7A0C, 0xDAD9},{0x7A0D, 0xB579},{0x7A10, 0xDF41},{0x7A11, 0xDEF7}, - {0x7A12, 0xDEFA},{0x7A13, 0xDEFE},{0x7A14, 0xB85A},{0x7A15, 0xDEFC},{0x7A17, 0xDEFB},{0x7A18, 0xDEF8},{0x7A19, 0xDEF9},{0x7A1A, 0xB858}, - {0x7A1B, 0xDF40},{0x7A1C, 0xB857},{0x7A1E, 0xB85C},{0x7A1F, 0xB85B},{0x7A20, 0xB859},{0x7A22, 0xDEFD},{0x7A26, 0xE349},{0x7A28, 0xE348}, - {0x7A2B, 0xE344},{0x7A2E, 0xBAD8},{0x7A2F, 0xE347},{0x7A30, 0xE346},{0x7A31, 0xBAD9},{0x7A37, 0xBD5E},{0x7A39, 0xE6D2},{0x7A3B, 0xBD5F}, - {0x7A3C, 0xBD5B},{0x7A3D, 0xBD5D},{0x7A3F, 0xBD5A},{0x7A40, 0xBD5C},{0x7A44, 0xEAAF},{0x7A46, 0xBF70},{0x7A47, 0xEAB1},{0x7A48, 0xEAB0}, - {0x7A4A, 0xE345},{0x7A4B, 0xBF72},{0x7A4C, 0xBF71},{0x7A4D, 0xBF6E},{0x7A4E, 0xBF6F},{0x7A54, 0xEDB5},{0x7A56, 0xEDB3},{0x7A57, 0xC14A}, - {0x7A58, 0xEDB4},{0x7A5A, 0xEDB6},{0x7A5B, 0xEDB2},{0x7A5C, 0xEDB1},{0x7A5F, 0xF060},{0x7A60, 0xC2AA},{0x7A61, 0xC2A8},{0x7A62, 0xC2A9}, - {0x7A67, 0xF2A6},{0x7A68, 0xF2A7},{0x7A69, 0xC3AD},{0x7A6B, 0xC3AC},{0x7A6C, 0xF4A3},{0x7A6D, 0xF4A4},{0x7A6E, 0xF4A2},{0x7A70, 0xF6F8}, - {0x7A71, 0xF6F9},{0x7A74, 0xA5DE},{0x7A75, 0xCA48},{0x7A76, 0xA873},{0x7A78, 0xCDA5},{0x7A79, 0xAAC6},{0x7A7A, 0xAAC5},{0x7A7B, 0xCDA6}, - {0x7A7E, 0xD040},{0x7A7F, 0xACEF},{0x7A80, 0xCFFE},{0x7A81, 0xACF0},{0x7A84, 0xAFB6},{0x7A85, 0xD2F8},{0x7A86, 0xD2F6},{0x7A87, 0xD2FC}, - {0x7A88, 0xAFB7},{0x7A89, 0xD2F7},{0x7A8A, 0xD2FB},{0x7A8B, 0xD2F9},{0x7A8C, 0xD2FA},{0x7A8F, 0xD6C8},{0x7A90, 0xD6CA},{0x7A92, 0xB2BF}, - {0x7A94, 0xD6C9},{0x7A95, 0xB2C0},{0x7A96, 0xB5A2},{0x7A97, 0xB5A1},{0x7A98, 0xB57E},{0x7A99, 0xDADB},{0x7A9E, 0xDF44},{0x7A9F, 0xB85D}, - {0x7AA0, 0xB85E},{0x7AA2, 0xDF43},{0x7AA3, 0xDF42},{0x7AA8, 0xE34A},{0x7AA9, 0xBADB},{0x7AAA, 0xBADA},{0x7AAB, 0xE34B},{0x7AAC, 0xE34C}, - {0x7AAE, 0xBD61},{0x7AAF, 0xBD60},{0x7AB1, 0xEAB5},{0x7AB2, 0xE6D3},{0x7AB3, 0xE6D5},{0x7AB4, 0xE6D4},{0x7AB5, 0xEAB4},{0x7AB6, 0xEAB2}, - {0x7AB7, 0xEAB6},{0x7AB8, 0xEAB3},{0x7ABA, 0xBF73},{0x7ABE, 0xEDB7},{0x7ABF, 0xC14B},{0x7AC0, 0xEDB8},{0x7AC1, 0xEDB9},{0x7AC4, 0xC2AB}, - {0x7AC5, 0xC2AC},{0x7AC7, 0xC475},{0x7ACA, 0xC5D1},{0x7ACB, 0xA5DF},{0x7AD1, 0xD041},{0x7AD8, 0xD2FD},{0x7AD9, 0xAFB8},{0x7ADF, 0xB3BA}, - {0x7AE0, 0xB3B9},{0x7AE3, 0xB5A4},{0x7AE4, 0xDADD},{0x7AE5, 0xB5A3},{0x7AE6, 0xDADC},{0x7AEB, 0xDF45},{0x7AED, 0xBADC},{0x7AEE, 0xE34D}, - {0x7AEF, 0xBADD},{0x7AF6, 0xC476},{0x7AF7, 0xF4A5},{0x7AF9, 0xA6CB},{0x7AFA, 0xAAC7},{0x7AFB, 0xCDA7},{0x7AFD, 0xACF2},{0x7AFF, 0xACF1}, - {0x7B00, 0xD042},{0x7B01, 0xD043},{0x7B04, 0xD340},{0x7B05, 0xD342},{0x7B06, 0xAFB9},{0x7B08, 0xD344},{0x7B09, 0xD347},{0x7B0A, 0xD345}, - {0x7B0E, 0xD346},{0x7B0F, 0xD343},{0x7B10, 0xD2FE},{0x7B11, 0xAFBA},{0x7B12, 0xD348},{0x7B13, 0xD341},{0x7B18, 0xD6D3},{0x7B19, 0xB2C6}, - {0x7B1A, 0xD6DC},{0x7B1B, 0xB2C3},{0x7B1D, 0xD6D5},{0x7B1E, 0xB2C7},{0x7B20, 0xB2C1},{0x7B22, 0xD6D0},{0x7B23, 0xD6DD},{0x7B24, 0xD6D1}, - {0x7B25, 0xD6CE},{0x7B26, 0xB2C5},{0x7B28, 0xB2C2},{0x7B2A, 0xD6D4},{0x7B2B, 0xD6D7},{0x7B2C, 0xB2C4},{0x7B2D, 0xD6D8},{0x7B2E, 0xB2C8}, - {0x7B2F, 0xD6D9},{0x7B30, 0xD6CF},{0x7B31, 0xD6D6},{0x7B32, 0xD6DA},{0x7B33, 0xD6D2},{0x7B34, 0xD6CD},{0x7B35, 0xD6CB},{0x7B38, 0xD6DB}, - {0x7B3B, 0xDADF},{0x7B40, 0xDAE4},{0x7B44, 0xDAE0},{0x7B45, 0xDAE6},{0x7B46, 0xB5A7},{0x7B47, 0xD6CC},{0x7B48, 0xDAE1},{0x7B49, 0xB5A5}, - {0x7B4A, 0xDADE},{0x7B4B, 0xB5AC},{0x7B4C, 0xDAE2},{0x7B4D, 0xB5AB},{0x7B4E, 0xDAE3},{0x7B4F, 0xB5AD},{0x7B50, 0xB5A8},{0x7B51, 0xB5AE}, - {0x7B52, 0xB5A9},{0x7B54, 0xB5AA},{0x7B56, 0xB5A6},{0x7B58, 0xDAE5},{0x7B60, 0xB861},{0x7B61, 0xDF50},{0x7B63, 0xDF53},{0x7B64, 0xDF47}, - {0x7B65, 0xDF4C},{0x7B66, 0xDF46},{0x7B67, 0xB863},{0x7B69, 0xDF4A},{0x7B6D, 0xDF48},{0x7B6E, 0xB862},{0x7B70, 0xDF4F},{0x7B71, 0xDF4E}, - {0x7B72, 0xDF4B},{0x7B73, 0xDF4D},{0x7B74, 0xDF49},{0x7B75, 0xBAE1},{0x7B76, 0xDF52},{0x7B77, 0xB85F},{0x7B78, 0xDF51},{0x7B82, 0xE35D}, - {0x7B84, 0xBAE8},{0x7B85, 0xE358},{0x7B87, 0xBAE7},{0x7B88, 0xE34E},{0x7B8A, 0xE350},{0x7B8B, 0xBAE0},{0x7B8C, 0xE355},{0x7B8D, 0xE354}, - {0x7B8E, 0xE357},{0x7B8F, 0xBAE5},{0x7B90, 0xE352},{0x7B91, 0xE351},{0x7B94, 0xBAE4},{0x7B95, 0xBADF},{0x7B96, 0xE353},{0x7B97, 0xBAE2}, - {0x7B98, 0xE359},{0x7B99, 0xE35B},{0x7B9B, 0xE356},{0x7B9C, 0xE34F},{0x7B9D, 0xBAE3},{0x7BA0, 0xBD69},{0x7BA1, 0xBADE},{0x7BA4, 0xE35C}, - {0x7BAC, 0xE6D9},{0x7BAD, 0xBD62},{0x7BAF, 0xE6DB},{0x7BB1, 0xBD63},{0x7BB4, 0xBD65},{0x7BB5, 0xE6DE},{0x7BB7, 0xE6D6},{0x7BB8, 0xBAE6}, - {0x7BB9, 0xE6DC},{0x7BBE, 0xE6D8},{0x7BC0, 0xB860},{0x7BC1, 0xBD68},{0x7BC4, 0xBD64},{0x7BC6, 0xBD66},{0x7BC7, 0xBD67},{0x7BC9, 0xBF76}, - {0x7BCA, 0xE6DD},{0x7BCB, 0xE6D7},{0x7BCC, 0xBD6A},{0x7BCE, 0xE6DA},{0x7BD4, 0xEAC0},{0x7BD5, 0xEABB},{0x7BD8, 0xEAC5},{0x7BD9, 0xBF74}, - {0x7BDA, 0xEABD},{0x7BDB, 0xBF78},{0x7BDC, 0xEAC3},{0x7BDD, 0xEABA},{0x7BDE, 0xEAB7},{0x7BDF, 0xEAC6},{0x7BE0, 0xC151},{0x7BE1, 0xBF79}, - {0x7BE2, 0xEAC2},{0x7BE3, 0xEAB8},{0x7BE4, 0xBF77},{0x7BE5, 0xEABC},{0x7BE6, 0xBF7B},{0x7BE7, 0xEAB9},{0x7BE8, 0xEABE},{0x7BE9, 0xBF7A}, - {0x7BEA, 0xEAC1},{0x7BEB, 0xEAC4},{0x7BF0, 0xEDCB},{0x7BF1, 0xEDCC},{0x7BF2, 0xEDBC},{0x7BF3, 0xEDC3},{0x7BF4, 0xEDC1},{0x7BF7, 0xC14F}, - {0x7BF8, 0xEDC8},{0x7BF9, 0xEABF},{0x7BFB, 0xEDBF},{0x7BFD, 0xEDC9},{0x7BFE, 0xC14E},{0x7BFF, 0xEDBE},{0x7C00, 0xEDBD},{0x7C01, 0xEDC7}, - {0x7C02, 0xEDC4},{0x7C03, 0xEDC6},{0x7C05, 0xEDBA},{0x7C06, 0xEDCA},{0x7C07, 0xC14C},{0x7C09, 0xEDC5},{0x7C0A, 0xEDCE},{0x7C0B, 0xEDC2}, - {0x7C0C, 0xC150},{0x7C0D, 0xC14D},{0x7C0E, 0xEDC0},{0x7C0F, 0xEDBB},{0x7C10, 0xEDCD},{0x7C11, 0xBF75},{0x7C19, 0xF063},{0x7C1C, 0xF061}, - {0x7C1D, 0xF067},{0x7C1E, 0xC2B0},{0x7C1F, 0xF065},{0x7C20, 0xF064},{0x7C21, 0xC2B2},{0x7C22, 0xF06A},{0x7C23, 0xC2B1},{0x7C25, 0xF06B}, - {0x7C26, 0xF068},{0x7C27, 0xC2AE},{0x7C28, 0xF069},{0x7C29, 0xF062},{0x7C2A, 0xC2AF},{0x7C2B, 0xC2AD},{0x7C2C, 0xF2AB},{0x7C2D, 0xF066}, - {0x7C30, 0xF06C},{0x7C33, 0xF2A8},{0x7C37, 0xC3B2},{0x7C38, 0xC3B0},{0x7C39, 0xF2AA},{0x7C3B, 0xF2AC},{0x7C3C, 0xF2A9},{0x7C3D, 0xC3B1}, - {0x7C3E, 0xC3AE},{0x7C3F, 0xC3AF},{0x7C40, 0xC3B3},{0x7C43, 0xC478},{0x7C45, 0xF4AA},{0x7C47, 0xF4A9},{0x7C48, 0xF4A7},{0x7C49, 0xF4A6}, - {0x7C4A, 0xF4A8},{0x7C4C, 0xC477},{0x7C4D, 0xC479},{0x7C50, 0xC4F0},{0x7C53, 0xF5E5},{0x7C54, 0xF5E4},{0x7C57, 0xF6FA},{0x7C59, 0xF6FC}, - {0x7C5A, 0xF6FE},{0x7C5B, 0xF6FD},{0x7C5C, 0xF6FB},{0x7C5F, 0xC5A3},{0x7C60, 0xC5A2},{0x7C63, 0xC5D3},{0x7C64, 0xC5D2},{0x7C65, 0xC5D4}, - {0x7C66, 0xF7ED},{0x7C67, 0xF7EC},{0x7C69, 0xF8FB},{0x7C6A, 0xF8B8},{0x7C6B, 0xF8FC},{0x7C6C, 0xC658},{0x7C6E, 0xC659},{0x7C6F, 0xF96D}, - {0x7C72, 0xC67E},{0x7C73, 0xA6CC},{0x7C75, 0xCDA8},{0x7C78, 0xD045},{0x7C79, 0xD046},{0x7C7A, 0xD044},{0x7C7D, 0xACF3},{0x7C7F, 0xD047}, - {0x7C80, 0xD048},{0x7C81, 0xD049},{0x7C84, 0xD349},{0x7C85, 0xD34F},{0x7C88, 0xD34D},{0x7C89, 0xAFBB},{0x7C8A, 0xD34B},{0x7C8C, 0xD34C}, - {0x7C8D, 0xD34E},{0x7C91, 0xD34A},{0x7C92, 0xB2C9},{0x7C94, 0xD6DE},{0x7C95, 0xB2CB},{0x7C96, 0xD6E0},{0x7C97, 0xB2CA},{0x7C98, 0xD6DF}, - {0x7C9E, 0xDAE8},{0x7C9F, 0xB5AF},{0x7CA1, 0xDAEA},{0x7CA2, 0xDAE7},{0x7CA3, 0xD6E1},{0x7CA5, 0xB5B0},{0x7CA8, 0xDAE9},{0x7CAF, 0xDF56}, - {0x7CB1, 0xB864},{0x7CB2, 0xDF54},{0x7CB3, 0xB865},{0x7CB4, 0xDF55},{0x7CB5, 0xB866},{0x7CB9, 0xBAE9},{0x7CBA, 0xE361},{0x7CBB, 0xE35E}, - {0x7CBC, 0xE360},{0x7CBD, 0xBAEA},{0x7CBE, 0xBAEB},{0x7CBF, 0xE35F},{0x7CC5, 0xE6DF},{0x7CC8, 0xE6E0},{0x7CCA, 0xBD6B},{0x7CCB, 0xE6E2}, - {0x7CCC, 0xE6E1},{0x7CCE, 0xA261},{0x7CD0, 0xEACA},{0x7CD1, 0xEACB},{0x7CD2, 0xEAC7},{0x7CD4, 0xEAC8},{0x7CD5, 0xBF7C},{0x7CD6, 0xBF7D}, - {0x7CD7, 0xEAC9},{0x7CD9, 0xC157},{0x7CDC, 0xC153},{0x7CDD, 0xC158},{0x7CDE, 0xC154},{0x7CDF, 0xC156},{0x7CE0, 0xC152},{0x7CE2, 0xC155}, - {0x7CE7, 0xC2B3},{0x7CE8, 0xEDCF},{0x7CEA, 0xF2AE},{0x7CEC, 0xF2AD},{0x7CEE, 0xF4AB},{0x7CEF, 0xC47A},{0x7CF0, 0xC47B},{0x7CF1, 0xF741}, - {0x7CF2, 0xF5E6},{0x7CF4, 0xF740},{0x7CF6, 0xF8FD},{0x7CF7, 0xF9A4},{0x7CF8, 0xA6CD},{0x7CFB, 0xA874},{0x7CFD, 0xCDA9},{0x7CFE, 0xAAC8}, - {0x7D00, 0xACF6},{0x7D01, 0xD04C},{0x7D02, 0xACF4},{0x7D03, 0xD04A},{0x7D04, 0xACF9},{0x7D05, 0xACF5},{0x7D06, 0xACFA},{0x7D07, 0xACF8}, - {0x7D08, 0xD04B},{0x7D09, 0xACF7},{0x7D0A, 0xAFBF},{0x7D0B, 0xAFBE},{0x7D0C, 0xD35A},{0x7D0D, 0xAFC7},{0x7D0E, 0xD353},{0x7D0F, 0xD359}, - {0x7D10, 0xAFC3},{0x7D11, 0xD352},{0x7D12, 0xD358},{0x7D13, 0xD356},{0x7D14, 0xAFC2},{0x7D15, 0xAFC4},{0x7D16, 0xD355},{0x7D17, 0xAFBD}, - {0x7D18, 0xD354},{0x7D19, 0xAFC8},{0x7D1A, 0xAFC5},{0x7D1B, 0xAFC9},{0x7D1C, 0xAFC6},{0x7D1D, 0xD351},{0x7D1E, 0xD350},{0x7D1F, 0xD357}, - {0x7D20, 0xAFC0},{0x7D21, 0xAFBC},{0x7D22, 0xAFC1},{0x7D28, 0xD6F0},{0x7D29, 0xD6E9},{0x7D2B, 0xB5B5},{0x7D2C, 0xD6E8},{0x7D2E, 0xB2CF}, - {0x7D2F, 0xB2D6},{0x7D30, 0xB2D3},{0x7D31, 0xB2D9},{0x7D32, 0xB2D8},{0x7D33, 0xB2D4},{0x7D35, 0xD6E2},{0x7D36, 0xD6E5},{0x7D38, 0xD6E4}, - {0x7D39, 0xB2D0},{0x7D3A, 0xD6E6},{0x7D3B, 0xD6EF},{0x7D3C, 0xB2D1},{0x7D3D, 0xD6E3},{0x7D3E, 0xD6EC},{0x7D3F, 0xD6ED},{0x7D40, 0xB2D2}, - {0x7D41, 0xD6EA},{0x7D42, 0xB2D7},{0x7D43, 0xB2CD},{0x7D44, 0xB2D5},{0x7D45, 0xD6E7},{0x7D46, 0xB2CC},{0x7D47, 0xD6EB},{0x7D4A, 0xD6EE}, - {0x7D4E, 0xDAFB},{0x7D4F, 0xDAF2},{0x7D50, 0xB5B2},{0x7D51, 0xDAF9},{0x7D52, 0xDAF6},{0x7D53, 0xDAEE},{0x7D54, 0xDAF7},{0x7D55, 0xB5B4}, - {0x7D56, 0xDAEF},{0x7D58, 0xDAEB},{0x7D5B, 0xB86C},{0x7D5C, 0xDAF4},{0x7D5E, 0xB5B1},{0x7D5F, 0xDAFA},{0x7D61, 0xB5B8},{0x7D62, 0xB5BA}, - {0x7D63, 0xDAED},{0x7D66, 0xB5B9},{0x7D67, 0xDAF0},{0x7D68, 0xB5B3},{0x7D69, 0xDAF8},{0x7D6A, 0xDAF1},{0x7D6B, 0xDAF5},{0x7D6D, 0xDAF3}, - {0x7D6E, 0xB5B6},{0x7D6F, 0xDAEC},{0x7D70, 0xB5BB},{0x7D71, 0xB2CE},{0x7D72, 0xB5B7},{0x7D73, 0xB5BC},{0x7D79, 0xB868},{0x7D7A, 0xDF5D}, - {0x7D7B, 0xDF5F},{0x7D7C, 0xDF61},{0x7D7D, 0xDF65},{0x7D7F, 0xDF5B},{0x7D80, 0xDF59},{0x7D81, 0xB86A},{0x7D83, 0xDF60},{0x7D84, 0xDF64}, - {0x7D85, 0xDF5C},{0x7D86, 0xDF58},{0x7D88, 0xDF57},{0x7D8C, 0xDF62},{0x7D8D, 0xDF5A},{0x7D8E, 0xDF5E},{0x7D8F, 0xB86B},{0x7D91, 0xB869}, - {0x7D92, 0xDF66},{0x7D93, 0xB867},{0x7D94, 0xDF63},{0x7D96, 0xE372},{0x7D9C, 0xBAEE},{0x7D9D, 0xE36A},{0x7D9E, 0xBD78},{0x7D9F, 0xE374}, - {0x7DA0, 0xBAF1},{0x7DA1, 0xE378},{0x7DA2, 0xBAF7},{0x7DA3, 0xE365},{0x7DA6, 0xE375},{0x7DA7, 0xE362},{0x7DA9, 0xE377},{0x7DAA, 0xE366}, - {0x7DAC, 0xBAFE},{0x7DAD, 0xBAFB},{0x7DAE, 0xE376},{0x7DAF, 0xE370},{0x7DB0, 0xBAED},{0x7DB1, 0xBAF5},{0x7DB2, 0xBAF4},{0x7DB4, 0xBAF3}, - {0x7DB5, 0xBAF9},{0x7DB7, 0xE363},{0x7DB8, 0xBAFA},{0x7DB9, 0xE371},{0x7DBA, 0xBAF6},{0x7DBB, 0xBAEC},{0x7DBC, 0xE373},{0x7DBD, 0xBAEF}, - {0x7DBE, 0xBAF0},{0x7DBF, 0xBAF8},{0x7DC0, 0xE368},{0x7DC1, 0xE367},{0x7DC2, 0xE364},{0x7DC4, 0xE36C},{0x7DC5, 0xE369},{0x7DC6, 0xE36D}, - {0x7DC7, 0xBAFD},{0x7DC9, 0xE379},{0x7DCA, 0xBAF2},{0x7DCB, 0xE36E},{0x7DCC, 0xE36F},{0x7DCE, 0xE36B},{0x7DD2, 0xBAFC},{0x7DD7, 0xE6E7}, - {0x7DD8, 0xBD70},{0x7DD9, 0xBD79},{0x7DDA, 0xBD75},{0x7DDB, 0xE6E4},{0x7DDD, 0xBD72},{0x7DDE, 0xBD76},{0x7DDF, 0xE6F0},{0x7DE0, 0xBD6C}, - {0x7DE1, 0xE6E8},{0x7DE3, 0xBD74},{0x7DE6, 0xE6EB},{0x7DE7, 0xE6E6},{0x7DE8, 0xBD73},{0x7DE9, 0xBD77},{0x7DEA, 0xE6E5},{0x7DEC, 0xBD71}, - {0x7DEE, 0xE6EF},{0x7DEF, 0xBD6E},{0x7DF0, 0xE6EE},{0x7DF1, 0xE6ED},{0x7DF2, 0xBD7A},{0x7DF3, 0xE572},{0x7DF4, 0xBD6D},{0x7DF6, 0xE6EC}, - {0x7DF7, 0xE6E3},{0x7DF9, 0xBD7B},{0x7DFA, 0xE6EA},{0x7DFB, 0xBD6F},{0x7E03, 0xE6E9},{0x7E08, 0xBFA2},{0x7E09, 0xBFA7},{0x7E0A, 0xBF7E}, - {0x7E0B, 0xEAD8},{0x7E0C, 0xEACF},{0x7E0D, 0xEADB},{0x7E0E, 0xEAD3},{0x7E0F, 0xEAD9},{0x7E10, 0xBFA8},{0x7E11, 0xBFA1},{0x7E12, 0xEACC}, - {0x7E13, 0xEAD2},{0x7E14, 0xEADC},{0x7E15, 0xEAD5},{0x7E16, 0xEADA},{0x7E17, 0xEACE},{0x7E1A, 0xEAD6},{0x7E1B, 0xBFA3},{0x7E1C, 0xEAD4}, - {0x7E1D, 0xBFA6},{0x7E1E, 0xBFA5},{0x7E1F, 0xEAD0},{0x7E20, 0xEAD1},{0x7E21, 0xEACD},{0x7E22, 0xEAD7},{0x7E23, 0xBFA4},{0x7E24, 0xEADE}, - {0x7E25, 0xEADD},{0x7E29, 0xEDDA},{0x7E2A, 0xEDD6},{0x7E2B, 0xC15F},{0x7E2D, 0xEDD0},{0x7E2E, 0xC159},{0x7E2F, 0xC169},{0x7E30, 0xEDDC}, - {0x7E31, 0xC161},{0x7E32, 0xC15D},{0x7E33, 0xEDD3},{0x7E34, 0xC164},{0x7E35, 0xC167},{0x7E36, 0xEDDE},{0x7E37, 0xC15C},{0x7E38, 0xEDD5}, - {0x7E39, 0xC165},{0x7E3A, 0xEDE0},{0x7E3B, 0xEDDD},{0x7E3C, 0xEDD1},{0x7E3D, 0xC160},{0x7E3E, 0xC15A},{0x7E3F, 0xC168},{0x7E40, 0xEDD8}, - {0x7E41, 0xC163},{0x7E42, 0xEDD2},{0x7E43, 0xC15E},{0x7E44, 0xEDDF},{0x7E45, 0xC162},{0x7E46, 0xC15B},{0x7E47, 0xEDD9},{0x7E48, 0xC166}, - {0x7E49, 0xEDD7},{0x7E4C, 0xEDDB},{0x7E50, 0xF06E},{0x7E51, 0xF074},{0x7E52, 0xC2B9},{0x7E53, 0xF077},{0x7E54, 0xC2B4},{0x7E55, 0xC2B5}, - {0x7E56, 0xF06F},{0x7E57, 0xF076},{0x7E58, 0xF071},{0x7E59, 0xC2BA},{0x7E5A, 0xC2B7},{0x7E5C, 0xF06D},{0x7E5E, 0xC2B6},{0x7E5F, 0xF073}, - {0x7E60, 0xF075},{0x7E61, 0xC2B8},{0x7E62, 0xF072},{0x7E63, 0xF070},{0x7E68, 0xF2B8},{0x7E69, 0xC3B7},{0x7E6A, 0xC3B8},{0x7E6B, 0xC3B4}, - {0x7E6D, 0xC3B5},{0x7E6F, 0xF2B4},{0x7E70, 0xF2B2},{0x7E72, 0xF2B6},{0x7E73, 0xC3BA},{0x7E74, 0xF2B7},{0x7E75, 0xF2B0},{0x7E76, 0xF2AF}, - {0x7E77, 0xF2B3},{0x7E78, 0xF2B1},{0x7E79, 0xC3B6},{0x7E7A, 0xF2B5},{0x7E7B, 0xF4AC},{0x7E7C, 0xC47E},{0x7E7D, 0xC47D},{0x7E7E, 0xF4AD}, - {0x7E80, 0xF4AF},{0x7E81, 0xF4AE},{0x7E82, 0xC4A1},{0x7E86, 0xF5EB},{0x7E87, 0xF5E8},{0x7E88, 0xF5E9},{0x7E8A, 0xF5E7},{0x7E8B, 0xF5EA}, - {0x7E8C, 0xC4F2},{0x7E8D, 0xF5EC},{0x7E8F, 0xC4F1},{0x7E91, 0xF742},{0x7E93, 0xC5D5},{0x7E94, 0xC5D7},{0x7E95, 0xF7EE},{0x7E96, 0xC5D6}, - {0x7E97, 0xF8B9},{0x7E98, 0xF940},{0x7E99, 0xF942},{0x7E9A, 0xF8FE},{0x7E9B, 0xF941},{0x7E9C, 0xC66C},{0x7F36, 0xA6CE},{0x7F38, 0xACFB}, - {0x7F39, 0xD26F},{0x7F3A, 0xAFCA},{0x7F3D, 0xB2DA},{0x7F3E, 0xDAFC},{0x7F3F, 0xDAFD},{0x7F43, 0xEADF},{0x7F44, 0xC16A},{0x7F45, 0xEDE1}, - {0x7F48, 0xC2BB},{0x7F4A, 0xF2BA},{0x7F4B, 0xF2B9},{0x7F4C, 0xC4A2},{0x7F4D, 0xF5ED},{0x7F4F, 0xF743},{0x7F50, 0xC5F8},{0x7F51, 0xCA49}, - {0x7F54, 0xAAC9},{0x7F55, 0xA875},{0x7F58, 0xD04D},{0x7F5B, 0xD360},{0x7F5C, 0xD35B},{0x7F5D, 0xD35F},{0x7F5E, 0xD35D},{0x7F5F, 0xAFCB}, - {0x7F60, 0xD35E},{0x7F61, 0xD35C},{0x7F63, 0xD6F1},{0x7F65, 0xDAFE},{0x7F66, 0xDB40},{0x7F67, 0xDF69},{0x7F68, 0xDF6A},{0x7F69, 0xB86E}, - {0x7F6A, 0xB86F},{0x7F6B, 0xDF68},{0x7F6C, 0xDF6B},{0x7F6D, 0xDF67},{0x7F6E, 0xB86D},{0x7F70, 0xBB40},{0x7F72, 0xB870},{0x7F73, 0xE37A}, - {0x7F75, 0xBD7C},{0x7F76, 0xE6F1},{0x7F77, 0xBD7D},{0x7F79, 0xBFA9},{0x7F7A, 0xEAE2},{0x7F7B, 0xEAE0},{0x7F7C, 0xEAE1},{0x7F7D, 0xEDE4}, - {0x7F7E, 0xEDE3},{0x7F7F, 0xEDE2},{0x7F83, 0xF2BB},{0x7F85, 0xC3B9},{0x7F86, 0xF2BC},{0x7F87, 0xF744},{0x7F88, 0xC5F9},{0x7F89, 0xF8BA}, - {0x7F8A, 0xA6CF},{0x7F8B, 0xAACB},{0x7F8C, 0xAACA},{0x7F8D, 0xD04F},{0x7F8E, 0xACFC},{0x7F91, 0xD04E},{0x7F92, 0xD362},{0x7F94, 0xAFCC}, - {0x7F95, 0xD6F2},{0x7F96, 0xD361},{0x7F9A, 0xB2DC},{0x7F9B, 0xD6F5},{0x7F9C, 0xD6F3},{0x7F9D, 0xD6F4},{0x7F9E, 0xB2DB},{0x7FA0, 0xDB42}, - {0x7FA1, 0xDB43},{0x7FA2, 0xDB41},{0x7FA4, 0xB873},{0x7FA5, 0xDF6D},{0x7FA6, 0xDF6C},{0x7FA7, 0xDF6E},{0x7FA8, 0xB872},{0x7FA9, 0xB871}, - {0x7FAC, 0xE6F2},{0x7FAD, 0xE6F4},{0x7FAF, 0xBD7E},{0x7FB0, 0xE6F3},{0x7FB1, 0xEAE3},{0x7FB2, 0xBFAA},{0x7FB3, 0xF079},{0x7FB5, 0xF078}, - {0x7FB6, 0xC3BB},{0x7FB7, 0xF2BD},{0x7FB8, 0xC3BD},{0x7FB9, 0xC3BC},{0x7FBA, 0xF4B0},{0x7FBB, 0xF5EE},{0x7FBC, 0xC4F3},{0x7FBD, 0xA6D0}, - {0x7FBE, 0xD050},{0x7FBF, 0xACFD},{0x7FC0, 0xD365},{0x7FC1, 0xAFCE},{0x7FC2, 0xD364},{0x7FC3, 0xD363},{0x7FC5, 0xAFCD},{0x7FC7, 0xD6FB}, - {0x7FC9, 0xD6FD},{0x7FCA, 0xD6F6},{0x7FCB, 0xD6F7},{0x7FCC, 0xB2DD},{0x7FCD, 0xD6F8},{0x7FCE, 0xB2DE},{0x7FCF, 0xD6FC},{0x7FD0, 0xD6F9}, - {0x7FD1, 0xD6FA},{0x7FD2, 0xB2DF},{0x7FD4, 0xB5BE},{0x7FD5, 0xB5BF},{0x7FD7, 0xDB44},{0x7FDB, 0xDF6F},{0x7FDC, 0xDF70},{0x7FDE, 0xE37E}, - {0x7FDF, 0xBB43},{0x7FE0, 0xBB41},{0x7FE1, 0xBB42},{0x7FE2, 0xE37B},{0x7FE3, 0xE37C},{0x7FE5, 0xE37D},{0x7FE6, 0xE6F9},{0x7FE8, 0xE6FA}, - {0x7FE9, 0xBDA1},{0x7FEA, 0xE6F7},{0x7FEB, 0xE6F6},{0x7FEC, 0xE6F8},{0x7FED, 0xE6F5},{0x7FEE, 0xBFAD},{0x7FEF, 0xEAE4},{0x7FF0, 0xBFAB}, - {0x7FF1, 0xBFAC},{0x7FF2, 0xEDE6},{0x7FF3, 0xC16B},{0x7FF4, 0xEDE5},{0x7FF5, 0xEFA8},{0x7FF7, 0xF07A},{0x7FF8, 0xF07B},{0x7FF9, 0xC2BC}, - {0x7FFB, 0xC2BD},{0x7FFC, 0xC16C},{0x7FFD, 0xF2BE},{0x7FFE, 0xF2BF},{0x7FFF, 0xF4B1},{0x8000, 0xC4A3},{0x8001, 0xA6D1},{0x8003, 0xA6D2}, - {0x8004, 0xACFE},{0x8005, 0xAACC},{0x8006, 0xAFCF},{0x8007, 0xD051},{0x800B, 0xB5C0},{0x800C, 0xA6D3},{0x800D, 0xAD41},{0x800E, 0xD052}, - {0x800F, 0xD053},{0x8010, 0xAD40},{0x8011, 0xAD42},{0x8012, 0xA6D4},{0x8014, 0xD054},{0x8015, 0xAFD1},{0x8016, 0xD366},{0x8017, 0xAFD3}, - {0x8018, 0xAFD0},{0x8019, 0xAFD2},{0x801B, 0xD741},{0x801C, 0xB2E0},{0x801E, 0xD740},{0x801F, 0xD6FE},{0x8021, 0xDF71},{0x8024, 0xE3A1}, - {0x8026, 0xBDA2},{0x8028, 0xBFAE},{0x8029, 0xEAE6},{0x802A, 0xEAE5},{0x802C, 0xEDE7},{0x8030, 0xF5EF},{0x8033, 0xA6D5},{0x8034, 0xCB73}, - {0x8035, 0xCDAA},{0x8036, 0xAD43},{0x8037, 0xD055},{0x8039, 0xD368},{0x803D, 0xAFD4},{0x803E, 0xD367},{0x803F, 0xAFD5},{0x8043, 0xD743}, - {0x8046, 0xB2E2},{0x8047, 0xD742},{0x8048, 0xD744},{0x804A, 0xB2E1},{0x804F, 0xDB46},{0x8050, 0xDB47},{0x8051, 0xDB45},{0x8052, 0xB5C1}, - {0x8056, 0xB874},{0x8058, 0xB875},{0x805A, 0xBB45},{0x805C, 0xE3A3},{0x805D, 0xE3A2},{0x805E, 0xBB44},{0x8064, 0xE6FB},{0x8067, 0xE6FC}, - {0x806C, 0xEAE7},{0x806F, 0xC170},{0x8070, 0xC16F},{0x8071, 0xC16D},{0x8072, 0xC16E},{0x8073, 0xC171},{0x8075, 0xF07C},{0x8076, 0xC2BF}, - {0x8077, 0xC2BE},{0x8078, 0xF2C0},{0x8079, 0xF4B2},{0x807D, 0xC5A5},{0x807E, 0xC5A4},{0x807F, 0xA6D6},{0x8082, 0xD1FB},{0x8084, 0xB877}, - {0x8085, 0xB5C2},{0x8086, 0xB876},{0x8087, 0xBB46},{0x8089, 0xA6D7},{0x808A, 0xC9A9},{0x808B, 0xA6D8},{0x808C, 0xA6D9},{0x808F, 0xCDAB}, - {0x8090, 0xCB76},{0x8092, 0xCB77},{0x8093, 0xA877},{0x8095, 0xCB74},{0x8096, 0xA876},{0x8098, 0xA879},{0x8099, 0xCB75},{0x809A, 0xA87B}, - {0x809B, 0xA87A},{0x809C, 0xCB78},{0x809D, 0xA878},{0x80A1, 0xAAD1},{0x80A2, 0xAACF},{0x80A3, 0xCDAD},{0x80A5, 0xAACE},{0x80A9, 0xAAD3}, - {0x80AA, 0xAAD5},{0x80AB, 0xAAD2},{0x80AD, 0xCDB0},{0x80AE, 0xCDAC},{0x80AF, 0xAAD6},{0x80B1, 0xAAD0},{0x80B2, 0xA87C},{0x80B4, 0xAAD4}, - {0x80B5, 0xCDAF},{0x80B8, 0xCDAE},{0x80BA, 0xAACD},{0x80C2, 0xD05B},{0x80C3, 0xAD47},{0x80C4, 0xAD48},{0x80C5, 0xD05D},{0x80C7, 0xD057}, - {0x80C8, 0xD05A},{0x80C9, 0xD063},{0x80CA, 0xD061},{0x80CC, 0xAD49},{0x80CD, 0xD067},{0x80CE, 0xAD4C},{0x80CF, 0xD064},{0x80D0, 0xD05C}, - {0x80D1, 0xD059},{0x80D4, 0xDB49},{0x80D5, 0xD062},{0x80D6, 0xAD44},{0x80D7, 0xD065},{0x80D8, 0xD056},{0x80D9, 0xD05F},{0x80DA, 0xAD46}, - {0x80DB, 0xAD4B},{0x80DC, 0xD060},{0x80DD, 0xAD4F},{0x80DE, 0xAD4D},{0x80E0, 0xD058},{0x80E1, 0xAD4A},{0x80E3, 0xD05E},{0x80E4, 0xAD4E}, - {0x80E5, 0xAD45},{0x80E6, 0xD066},{0x80ED, 0xAFDA},{0x80EF, 0xAFE3},{0x80F0, 0xAFD8},{0x80F1, 0xAFD6},{0x80F2, 0xD36A},{0x80F3, 0xAFDE}, - {0x80F4, 0xAFDB},{0x80F5, 0xD36C},{0x80F8, 0xAFDD},{0x80F9, 0xD36B},{0x80FA, 0xD369},{0x80FB, 0xD36E},{0x80FC, 0xAFE2},{0x80FD, 0xAFE0}, - {0x80FE, 0xDB48},{0x8100, 0xD36F},{0x8101, 0xD36D},{0x8102, 0xAFD7},{0x8105, 0xAFD9},{0x8106, 0xAFDC},{0x8108, 0xAFDF},{0x810A, 0xAFE1}, - {0x8115, 0xD74E},{0x8116, 0xB2E4},{0x8118, 0xD745},{0x8119, 0xD747},{0x811B, 0xD748},{0x811D, 0xD750},{0x811E, 0xD74C},{0x811F, 0xD74A}, - {0x8121, 0xD74D},{0x8122, 0xD751},{0x8123, 0xB2E5},{0x8124, 0xB2E9},{0x8125, 0xD746},{0x8127, 0xD74F},{0x8129, 0xB2E7},{0x812B, 0xB2E6}, - {0x812C, 0xD74B},{0x812D, 0xD749},{0x812F, 0xB2E3},{0x8130, 0xB2E8},{0x8139, 0xB5C8},{0x813A, 0xDB51},{0x813D, 0xDB4F},{0x813E, 0xB5CA}, - {0x8143, 0xDB4A},{0x8144, 0xDFA1},{0x8146, 0xB5C9},{0x8147, 0xDB4E},{0x814A, 0xDB4B},{0x814B, 0xB5C5},{0x814C, 0xB5CB},{0x814D, 0xDB50}, - {0x814E, 0xB5C7},{0x814F, 0xDB4D},{0x8150, 0xBB47},{0x8151, 0xB5C6},{0x8152, 0xDB4C},{0x8153, 0xB5CC},{0x8154, 0xB5C4},{0x8155, 0xB5C3}, - {0x815B, 0xDF77},{0x815C, 0xDF75},{0x815E, 0xDF7B},{0x8160, 0xDF73},{0x8161, 0xDFA2},{0x8162, 0xDF78},{0x8164, 0xDF72},{0x8165, 0xB87B}, - {0x8166, 0xB8A3},{0x8167, 0xDF7D},{0x8169, 0xDF76},{0x816B, 0xB87E},{0x816E, 0xB87C},{0x816F, 0xDF7E},{0x8170, 0xB879},{0x8171, 0xB878}, - {0x8172, 0xDF79},{0x8173, 0xB87D},{0x8174, 0xB5CD},{0x8176, 0xDF7C},{0x8177, 0xDF74},{0x8178, 0xB87A},{0x8179, 0xB8A1},{0x817A, 0xB8A2}, - {0x817F, 0xBB4C},{0x8180, 0xBB48},{0x8182, 0xBB4D},{0x8183, 0xE3A6},{0x8186, 0xE3A5},{0x8187, 0xE3A7},{0x8188, 0xBB4A},{0x8189, 0xE3A4}, - {0x818A, 0xBB4B},{0x818B, 0xE3AA},{0x818C, 0xE3A9},{0x818D, 0xE3A8},{0x818F, 0xBB49},{0x8195, 0xE741},{0x8197, 0xE744},{0x8198, 0xBDA8}, - {0x8199, 0xE743},{0x819A, 0xBDA7},{0x819B, 0xBDA3},{0x819C, 0xBDA4},{0x819D, 0xBDA5},{0x819E, 0xE740},{0x819F, 0xE6FE},{0x81A0, 0xBDA6}, - {0x81A2, 0xE742},{0x81A3, 0xE6FD},{0x81A6, 0xEAE9},{0x81A7, 0xEAF3},{0x81A8, 0xBFB1},{0x81A9, 0xBFB0},{0x81AB, 0xEAED},{0x81AC, 0xEAEF}, - {0x81AE, 0xEAEA},{0x81B0, 0xEAEE},{0x81B1, 0xEAE8},{0x81B2, 0xEAF1},{0x81B3, 0xBFAF},{0x81B4, 0xEAF0},{0x81B5, 0xEAEC},{0x81B7, 0xEAF2}, - {0x81B9, 0xEAEB},{0x81BA, 0xC174},{0x81BB, 0xEDE8},{0x81BC, 0xEDEE},{0x81BD, 0xC178},{0x81BE, 0xC17A},{0x81BF, 0xC177},{0x81C0, 0xC176}, - {0x81C2, 0xC175},{0x81C3, 0xC173},{0x81C4, 0xEDE9},{0x81C5, 0xEDEC},{0x81C6, 0xC172},{0x81C7, 0xEDED},{0x81C9, 0xC179},{0x81CA, 0xEDEB}, - {0x81CC, 0xEDEA},{0x81CD, 0xC2C0},{0x81CF, 0xC2C1},{0x81D0, 0xF0A1},{0x81D1, 0xF07D},{0x81D2, 0xF07E},{0x81D5, 0xF2C2},{0x81D7, 0xF2C1}, - {0x81D8, 0xC3BE},{0x81D9, 0xF4B4},{0x81DA, 0xC4A4},{0x81DB, 0xF4B3},{0x81DD, 0xF5F0},{0x81DE, 0xF745},{0x81DF, 0xC5A6},{0x81E0, 0xF943}, - {0x81E1, 0xF944},{0x81E2, 0xC5D8},{0x81E3, 0xA6DA},{0x81E5, 0xAAD7},{0x81E6, 0xDB52},{0x81E7, 0xBB4E},{0x81E8, 0xC17B},{0x81E9, 0xEDEF}, - {0x81EA, 0xA6DB},{0x81EC, 0xAFE5},{0x81ED, 0xAFE4},{0x81EE, 0xDB53},{0x81F2, 0xEAF4},{0x81F3, 0xA6DC},{0x81F4, 0xAD50},{0x81F7, 0xDB54}, - {0x81F8, 0xDB55},{0x81F9, 0xDB56},{0x81FA, 0xBB4F},{0x81FB, 0xBFB2},{0x81FC, 0xA6DD},{0x81FE, 0xAAD8},{0x81FF, 0xD068},{0x8200, 0xAFE6}, - {0x8201, 0xD370},{0x8202, 0xB2EA},{0x8204, 0xDB57},{0x8205, 0xB8A4},{0x8207, 0xBB50},{0x8208, 0xBFB3},{0x8209, 0xC17C},{0x820A, 0xC2C2}, - {0x820B, 0xF4B5},{0x820C, 0xA6DE},{0x820D, 0xAAD9},{0x8210, 0xAFE7},{0x8211, 0xD752},{0x8212, 0xB5CE},{0x8214, 0xBB51},{0x8215, 0xE3AB}, - {0x8216, 0xE745},{0x821B, 0xA6DF},{0x821C, 0xB5CF},{0x821D, 0xDFA3},{0x821E, 0xBB52},{0x821F, 0xA6E0},{0x8220, 0xCDB1},{0x8221, 0xD069}, - {0x8222, 0xAD51},{0x8225, 0xD372},{0x8228, 0xAFEA},{0x822A, 0xAFE8},{0x822B, 0xAFE9},{0x822C, 0xAFEB},{0x822F, 0xD371},{0x8232, 0xD757}, - {0x8233, 0xD754},{0x8234, 0xD756},{0x8235, 0xB2EB},{0x8236, 0xB2ED},{0x8237, 0xB2EC},{0x8238, 0xD753},{0x8239, 0xB2EE},{0x823A, 0xD755}, - {0x823C, 0xDB58},{0x823D, 0xDB59},{0x823F, 0xDB5A},{0x8240, 0xDFA6},{0x8242, 0xDFA7},{0x8244, 0xDFA5},{0x8245, 0xDFA8},{0x8247, 0xB8A5}, - {0x8249, 0xDFA4},{0x824B, 0xBB53},{0x824E, 0xE74A},{0x824F, 0xE746},{0x8250, 0xE749},{0x8251, 0xE74B},{0x8252, 0xE748},{0x8253, 0xE747}, - {0x8255, 0xEAF5},{0x8256, 0xEAF6},{0x8257, 0xEAF7},{0x8258, 0xBFB4},{0x8259, 0xBFB5},{0x825A, 0xEDF1},{0x825B, 0xEDF0},{0x825C, 0xEDF2}, - {0x825E, 0xF0A3},{0x825F, 0xF0A2},{0x8261, 0xF2C4},{0x8263, 0xF2C5},{0x8264, 0xF2C3},{0x8266, 0xC4A5},{0x8268, 0xF4B6},{0x8269, 0xF4B7}, - {0x826B, 0xF746},{0x826C, 0xF7EF},{0x826D, 0xF8BB},{0x826E, 0xA6E1},{0x826F, 0xA87D},{0x8271, 0xC17D},{0x8272, 0xA6E2},{0x8274, 0xD758}, - {0x8275, 0xDB5B},{0x8277, 0xC641},{0x8278, 0xCA4A},{0x827C, 0xCA4B},{0x827D, 0xCA4D},{0x827E, 0xA6E3},{0x827F, 0xCA4E},{0x8280, 0xCA4C}, - {0x8283, 0xCBA2},{0x8284, 0xCBA3},{0x8285, 0xCB7B},{0x828A, 0xCBA1},{0x828B, 0xA8A1},{0x828D, 0xA8A2},{0x828E, 0xCB7C},{0x828F, 0xCB7A}, - {0x8290, 0xCB79},{0x8291, 0xCB7D},{0x8292, 0xA87E},{0x8293, 0xCB7E},{0x8294, 0xD06A},{0x8298, 0xCDB6},{0x8299, 0xAADC},{0x829A, 0xCDB5}, - {0x829B, 0xCDB7},{0x829D, 0xAADB},{0x829E, 0xCDBC},{0x829F, 0xAADF},{0x82A0, 0xCDB2},{0x82A1, 0xCDC0},{0x82A2, 0xCDC6},{0x82A3, 0xAAE6}, - {0x82A4, 0xCDC3},{0x82A5, 0xAAE3},{0x82A7, 0xCDB9},{0x82A8, 0xCDBF},{0x82A9, 0xCDC1},{0x82AB, 0xCDB4},{0x82AC, 0xAAE2},{0x82AD, 0xAADD}, - {0x82AE, 0xCDBA},{0x82AF, 0xAAE4},{0x82B0, 0xAAE7},{0x82B1, 0xAAE1},{0x82B3, 0xAADA},{0x82B4, 0xCDBE},{0x82B5, 0xCDB8},{0x82B6, 0xCDC5}, - {0x82B7, 0xAAE9},{0x82B8, 0xAAE5},{0x82B9, 0xAAE0},{0x82BA, 0xCDBD},{0x82BB, 0xAFEC},{0x82BC, 0xCDBB},{0x82BD, 0xAADE},{0x82BE, 0xAAE8}, - {0x82C0, 0xCDB3},{0x82C2, 0xCDC2},{0x82C3, 0xCDC4},{0x82D1, 0xAD62},{0x82D2, 0xAD5C},{0x82D3, 0xAD64},{0x82D4, 0xAD61},{0x82D5, 0xD071}, - {0x82D6, 0xD074},{0x82D7, 0xAD5D},{0x82D9, 0xD06B},{0x82DB, 0xAD56},{0x82DC, 0xAD60},{0x82DE, 0xAD63},{0x82DF, 0xAD65},{0x82E0, 0xD0A2}, - {0x82E1, 0xD077},{0x82E3, 0xAD55},{0x82E4, 0xD0A1},{0x82E5, 0xAD59},{0x82E6, 0xAD57},{0x82E7, 0xAD52},{0x82E8, 0xD06F},{0x82EA, 0xD07E}, - {0x82EB, 0xD073},{0x82EC, 0xD076},{0x82ED, 0xD0A5},{0x82EF, 0xAD66},{0x82F0, 0xD07D},{0x82F1, 0xAD5E},{0x82F2, 0xD078},{0x82F3, 0xD0A4}, - {0x82F4, 0xD075},{0x82F5, 0xD079},{0x82F6, 0xD07C},{0x82F9, 0xD06D},{0x82FA, 0xD0A3},{0x82FB, 0xD07B},{0x82FE, 0xD06C},{0x8300, 0xD070}, - {0x8301, 0xAD5F},{0x8302, 0xAD5A},{0x8303, 0xAD53},{0x8304, 0xAD58},{0x8305, 0xAD54},{0x8306, 0xAD67},{0x8307, 0xD06E},{0x8308, 0xD3A5}, - {0x8309, 0xAD5B},{0x830C, 0xD07A},{0x830D, 0xCE41},{0x8316, 0xD3A8},{0x8317, 0xAFFA},{0x8319, 0xD376},{0x831B, 0xD3A3},{0x831C, 0xD37D}, - {0x831E, 0xD3B2},{0x8320, 0xD3AA},{0x8322, 0xD37E},{0x8324, 0xD3A9},{0x8325, 0xD378},{0x8326, 0xD37C},{0x8327, 0xD3B5},{0x8328, 0xAFFD}, - {0x8329, 0xD3AD},{0x832A, 0xD3A4},{0x832B, 0xAFED},{0x832C, 0xD3B3},{0x832D, 0xD374},{0x832F, 0xD3AC},{0x8331, 0xAFFC},{0x8332, 0xAFF7}, - {0x8333, 0xD373},{0x8334, 0xAFF5},{0x8335, 0xAFF4},{0x8336, 0xAFF9},{0x8337, 0xD3AB},{0x8338, 0xAFF1},{0x8339, 0xAFF8},{0x833A, 0xD072}, - {0x833B, 0xDB5C},{0x833C, 0xD3A6},{0x833F, 0xD37A},{0x8340, 0xAFFB},{0x8341, 0xD37B},{0x8342, 0xD3A1},{0x8343, 0xAFFE},{0x8344, 0xD375}, - {0x8345, 0xD3AF},{0x8347, 0xD3AE},{0x8348, 0xD3B6},{0x8349, 0xAFF3},{0x834A, 0xAFF0},{0x834B, 0xD3B4},{0x834C, 0xD3B0},{0x834D, 0xD3A7}, - {0x834E, 0xD3A2},{0x834F, 0xAFF6},{0x8350, 0xAFF2},{0x8351, 0xD377},{0x8352, 0xAFEE},{0x8353, 0xD3B1},{0x8354, 0xAFEF},{0x8356, 0xD379}, - {0x8373, 0xD75E},{0x8374, 0xD760},{0x8375, 0xD765},{0x8376, 0xD779},{0x8377, 0xB2FC},{0x8378, 0xB2F2},{0x837A, 0xD75D},{0x837B, 0xB2FD}, - {0x837C, 0xB2FE},{0x837D, 0xD768},{0x837E, 0xD76F},{0x837F, 0xD775},{0x8381, 0xD762},{0x8383, 0xD769},{0x8386, 0xB340},{0x8387, 0xD777}, - {0x8388, 0xD772},{0x8389, 0xB2FA},{0x838A, 0xB2F8},{0x838B, 0xD76E},{0x838C, 0xD76A},{0x838D, 0xD75C},{0x838E, 0xB2EF},{0x838F, 0xD761}, - {0x8390, 0xD759},{0x8392, 0xB2F7},{0x8393, 0xB2F9},{0x8394, 0xD766},{0x8395, 0xD763},{0x8396, 0xB2F4},{0x8397, 0xD773},{0x8398, 0xB2F1}, - {0x8399, 0xD764},{0x839A, 0xD77A},{0x839B, 0xD76C},{0x839D, 0xD76B},{0x839E, 0xB2F0},{0x83A0, 0xB2FB},{0x83A2, 0xB2F3},{0x83A3, 0xD75A}, - {0x83A4, 0xD75F},{0x83A5, 0xD770},{0x83A6, 0xD776},{0x83A7, 0xB341},{0x83A8, 0xD75B},{0x83A9, 0xD767},{0x83AA, 0xD76D},{0x83AB, 0xB2F6}, - {0x83AE, 0xD778},{0x83AF, 0xD771},{0x83B0, 0xD774},{0x83BD, 0xB2F5},{0x83BF, 0xDB6C},{0x83C0, 0xDB60},{0x83C1, 0xB5D7},{0x83C2, 0xDB7D}, - {0x83C3, 0xDBA7},{0x83C4, 0xDBAA},{0x83C5, 0xB5D5},{0x83C6, 0xDB68},{0x83C7, 0xDBA3},{0x83C8, 0xDB69},{0x83C9, 0xDB77},{0x83CA, 0xB5E2}, - {0x83CB, 0xDB73},{0x83CC, 0xB5DF},{0x83CE, 0xDB74},{0x83CF, 0xDB5D},{0x83D1, 0xDBA4},{0x83D4, 0xB5E8},{0x83D5, 0xDBA1},{0x83D6, 0xDB75}, - {0x83D7, 0xDBAC},{0x83D8, 0xDB70},{0x83D9, 0xDFC8},{0x83DB, 0xDBAF},{0x83DC, 0xB5E6},{0x83DD, 0xDB6E},{0x83DE, 0xDB7A},{0x83DF, 0xB5E9}, - {0x83E0, 0xB5D4},{0x83E1, 0xDB72},{0x83E2, 0xDBAD},{0x83E3, 0xDB6B},{0x83E4, 0xDB64},{0x83E5, 0xDB6F},{0x83E7, 0xDB63},{0x83E8, 0xDB61}, - {0x83E9, 0xB5D0},{0x83EA, 0xDBA5},{0x83EB, 0xDB6A},{0x83EC, 0xDBA8},{0x83EE, 0xDBA9},{0x83EF, 0xB5D8},{0x83F0, 0xB5DD},{0x83F1, 0xB5D9}, - {0x83F2, 0xB5E1},{0x83F3, 0xDB7E},{0x83F4, 0xB5DA},{0x83F5, 0xDB76},{0x83F6, 0xDB66},{0x83F8, 0xB5D2},{0x83F9, 0xDB5E},{0x83FA, 0xDBA2}, - {0x83FB, 0xDBAB},{0x83FC, 0xDB65},{0x83FD, 0xB5E0},{0x83FE, 0xDBB0},{0x83FF, 0xDB71},{0x8401, 0xDB6D},{0x8403, 0xB5D1},{0x8404, 0xB5E5}, - {0x8406, 0xDB7C},{0x8407, 0xB5E7},{0x8409, 0xDB78},{0x840A, 0xB5DC},{0x840B, 0xB5D6},{0x840C, 0xB5DE},{0x840D, 0xB5D3},{0x840E, 0xB5E4}, - {0x840F, 0xDB79},{0x8410, 0xDB67},{0x8411, 0xDB7B},{0x8412, 0xDB62},{0x8413, 0xDBA6},{0x841B, 0xDBAE},{0x8423, 0xDB5F},{0x8429, 0xDFC7}, - {0x842B, 0xDFDD},{0x842C, 0xB855},{0x842D, 0xDFCC},{0x842F, 0xDFCA},{0x8430, 0xDFB5},{0x8431, 0xB8A9},{0x8432, 0xDFC5},{0x8433, 0xDFD9}, - {0x8434, 0xDFC1},{0x8435, 0xB8B1},{0x8436, 0xDFD8},{0x8437, 0xDFBF},{0x8438, 0xB5E3},{0x8439, 0xDFCF},{0x843A, 0xDFC0},{0x843B, 0xDFD6}, - {0x843C, 0xB8B0},{0x843D, 0xB8A8},{0x843F, 0xDFAA},{0x8440, 0xDFB2},{0x8442, 0xDFCB},{0x8443, 0xDFC3},{0x8444, 0xDFDC},{0x8445, 0xDFC6}, - {0x8446, 0xB8B6},{0x8447, 0xDFD7},{0x8449, 0xB8AD},{0x844B, 0xDFC9},{0x844C, 0xDFD1},{0x844D, 0xDFB6},{0x844E, 0xDFD0},{0x8450, 0xDFE1}, - {0x8451, 0xDFB1},{0x8452, 0xDFD2},{0x8454, 0xDFDF},{0x8456, 0xDFAB},{0x8457, 0xB5DB},{0x8459, 0xDFB9},{0x845A, 0xDFB8},{0x845B, 0xB8AF}, - {0x845D, 0xDFBC},{0x845E, 0xDFBE},{0x845F, 0xDFCD},{0x8460, 0xDFDE},{0x8461, 0xB8B2},{0x8463, 0xB8B3},{0x8465, 0xDFB0},{0x8466, 0xB8AB}, - {0x8467, 0xDFB4},{0x8468, 0xDFDA},{0x8469, 0xB8B4},{0x846B, 0xB8AC},{0x846C, 0xB8AE},{0x846D, 0xB8B5},{0x846E, 0xDFE0},{0x846F, 0xDFD3}, - {0x8470, 0xDFCE},{0x8473, 0xDFBB},{0x8474, 0xDFBA},{0x8475, 0xB8AA},{0x8476, 0xDFAC},{0x8477, 0xB8A7},{0x8478, 0xDFC4},{0x8479, 0xDFAD}, - {0x847A, 0xDFC2},{0x847D, 0xDFB7},{0x847E, 0xDFDB},{0x8482, 0xB8A6},{0x8486, 0xDFB3},{0x848D, 0xDFAF},{0x848E, 0xDFD5},{0x848F, 0xDFAE}, - {0x8490, 0xBB60},{0x8491, 0xE3D3},{0x8494, 0xE3C2},{0x8497, 0xE3AC},{0x8498, 0xE3CA},{0x8499, 0xBB58},{0x849A, 0xE3BB},{0x849B, 0xE3C5}, - {0x849C, 0xBB5B},{0x849D, 0xE3BE},{0x849E, 0xBB59},{0x849F, 0xE3AF},{0x84A0, 0xE3CD},{0x84A1, 0xE3AE},{0x84A2, 0xE3C1},{0x84A4, 0xE3AD}, - {0x84A7, 0xE3BF},{0x84A8, 0xE3C8},{0x84A9, 0xE3C6},{0x84AA, 0xE3BA},{0x84AB, 0xE3B5},{0x84AC, 0xE3B3},{0x84AE, 0xE3B4},{0x84AF, 0xE3C7}, - {0x84B0, 0xE3D2},{0x84B1, 0xE3BC},{0x84B2, 0xBB5A},{0x84B4, 0xE3B7},{0x84B6, 0xE3CB},{0x84B8, 0xBB5D},{0x84B9, 0xE3B6},{0x84BA, 0xE3B0}, - {0x84BB, 0xE3C0},{0x84BC, 0xBB61},{0x84BF, 0xBB55},{0x84C0, 0xBB5E},{0x84C1, 0xE3B8},{0x84C2, 0xE3B2},{0x84C4, 0xBB57},{0x84C5, 0xDFD4}, - {0x84C6, 0xBB56},{0x84C7, 0xE3C3},{0x84C9, 0xBB54},{0x84CA, 0xBB63},{0x84CB, 0xBB5C},{0x84CC, 0xE3C4},{0x84CD, 0xE3B9},{0x84CE, 0xE3B1}, - {0x84CF, 0xE3CC},{0x84D0, 0xE3BD},{0x84D1, 0xBB62},{0x84D2, 0xE3D0},{0x84D3, 0xBB5F},{0x84D4, 0xE3CF},{0x84D6, 0xE3C9},{0x84D7, 0xE3CE}, - {0x84DB, 0xE3D1},{0x84E7, 0xE773},{0x84E8, 0xE774},{0x84E9, 0xE767},{0x84EA, 0xE766},{0x84EB, 0xE762},{0x84EC, 0xBDB4},{0x84EE, 0xBDAC}, - {0x84EF, 0xE776},{0x84F0, 0xE775},{0x84F1, 0xDFA9},{0x84F2, 0xE75F},{0x84F3, 0xE763},{0x84F4, 0xE75D},{0x84F6, 0xE770},{0x84F7, 0xE761}, - {0x84F9, 0xE777},{0x84FA, 0xE75A},{0x84FB, 0xE758},{0x84FC, 0xE764},{0x84FD, 0xE76E},{0x84FE, 0xE769},{0x84FF, 0xBDB6},{0x8500, 0xE74F}, - {0x8502, 0xE76D},{0x8506, 0xBDB7},{0x8507, 0xDFBD},{0x8508, 0xE75B},{0x8509, 0xE752},{0x850A, 0xE755},{0x850B, 0xE77B},{0x850C, 0xE75C}, - {0x850D, 0xE753},{0x850E, 0xE751},{0x850F, 0xE74E},{0x8511, 0xBDB0},{0x8512, 0xE765},{0x8513, 0xBDAF},{0x8514, 0xBDB3},{0x8515, 0xE760}, - {0x8516, 0xE768},{0x8517, 0xBDA9},{0x8518, 0xE778},{0x8519, 0xE77C},{0x851A, 0xBDAB},{0x851C, 0xE757},{0x851D, 0xE76B},{0x851E, 0xE76F}, - {0x851F, 0xE754},{0x8520, 0xE779},{0x8521, 0xBDB2},{0x8523, 0xBDB1},{0x8524, 0xE74C},{0x8525, 0xBDB5},{0x8526, 0xE772},{0x8527, 0xE756}, - {0x8528, 0xE76A},{0x8529, 0xE750},{0x852A, 0xE75E},{0x852B, 0xE759},{0x852C, 0xBDAD},{0x852D, 0xBDAE},{0x852E, 0xE76C},{0x852F, 0xE77D}, - {0x8530, 0xE77A},{0x8531, 0xE771},{0x853B, 0xE74D},{0x853D, 0xBDAA},{0x853E, 0xEB49},{0x8540, 0xEB40},{0x8541, 0xEB43},{0x8543, 0xBFBB}, - {0x8544, 0xEB45},{0x8545, 0xEAF9},{0x8546, 0xEB41},{0x8547, 0xEB47},{0x8548, 0xBFB8},{0x8549, 0xBFBC},{0x854A, 0xBFB6},{0x854D, 0xEAFB}, - {0x854E, 0xEB4C},{0x8551, 0xEB46},{0x8553, 0xEAFC},{0x8554, 0xEB55},{0x8555, 0xEB4F},{0x8556, 0xEAF8},{0x8557, 0xEE46},{0x8558, 0xEAFE}, - {0x8559, 0xBFB7},{0x855B, 0xEB4A},{0x855D, 0xEB54},{0x855E, 0xBFBF},{0x8560, 0xEB51},{0x8561, 0xEAFD},{0x8562, 0xEB44},{0x8563, 0xEB48}, - {0x8564, 0xEB42},{0x8565, 0xEB56},{0x8566, 0xEB53},{0x8567, 0xEB50},{0x8568, 0xBFB9},{0x8569, 0xBFBA},{0x856A, 0xBFBE},{0x856B, 0xEAFA}, - {0x856C, 0xEB57},{0x856D, 0xBFBD},{0x856E, 0xEB4D},{0x8571, 0xEB4B},{0x8575, 0xEB4E},{0x8576, 0xEE53},{0x8577, 0xEE40},{0x8578, 0xEE45}, - {0x8579, 0xEE52},{0x857A, 0xEE44},{0x857B, 0xEDFB},{0x857C, 0xEE41},{0x857E, 0xC1A2},{0x8580, 0xEDF4},{0x8581, 0xEE4D},{0x8582, 0xEE4F}, - {0x8583, 0xEDF3},{0x8584, 0xC1A1},{0x8585, 0xEE51},{0x8586, 0xEE49},{0x8587, 0xC1A8},{0x8588, 0xEE50},{0x8589, 0xEE42},{0x858A, 0xC1AA}, - {0x858B, 0xEDF9},{0x858C, 0xEB52},{0x858D, 0xEE4A},{0x858E, 0xEE47},{0x858F, 0xEDF5},{0x8590, 0xEE55},{0x8591, 0xC1A4},{0x8594, 0xC1A5}, - {0x8595, 0xEDF7},{0x8596, 0xEE48},{0x8598, 0xEE54},{0x8599, 0xEE4B},{0x859A, 0xEDFD},{0x859B, 0xC1A7},{0x859C, 0xC1A3},{0x859D, 0xEE4C}, - {0x859E, 0xEDFE},{0x859F, 0xEE56},{0x85A0, 0xEDF8},{0x85A1, 0xEE43},{0x85A2, 0xEE4E},{0x85A3, 0xEDFA},{0x85A4, 0xEDFC},{0x85A6, 0xC2CB}, - {0x85A7, 0xEDF6},{0x85A8, 0xC1A9},{0x85A9, 0xC2C4},{0x85AA, 0xC17E},{0x85AF, 0xC1A6},{0x85B0, 0xC2C8},{0x85B1, 0xF0B3},{0x85B3, 0xF0A9}, - {0x85B4, 0xF0A4},{0x85B5, 0xF0AA},{0x85B6, 0xF0B4},{0x85B7, 0xF0B8},{0x85B8, 0xF0B7},{0x85B9, 0xC2CA},{0x85BA, 0xC2C9},{0x85BD, 0xF0AB}, - {0x85BE, 0xF0B9},{0x85BF, 0xF0AE},{0x85C0, 0xF0A6},{0x85C2, 0xF0A8},{0x85C3, 0xF0A7},{0x85C4, 0xF0AD},{0x85C5, 0xF0B2},{0x85C6, 0xF0A5}, - {0x85C7, 0xF0AC},{0x85C8, 0xF0B1},{0x85C9, 0xC2C7},{0x85CB, 0xF0AF},{0x85CD, 0xC2C5},{0x85CE, 0xF0B0},{0x85CF, 0xC2C3},{0x85D0, 0xC2C6}, - {0x85D1, 0xF2D5},{0x85D2, 0xF0B5},{0x85D5, 0xC3C2},{0x85D7, 0xF2CD},{0x85D8, 0xF2D1},{0x85D9, 0xF2C9},{0x85DA, 0xF2CC},{0x85DC, 0xF2D4}, - {0x85DD, 0xC3C0},{0x85DE, 0xF2D9},{0x85DF, 0xF2D2},{0x85E1, 0xF2CA},{0x85E2, 0xF2DA},{0x85E3, 0xF2D3},{0x85E4, 0xC3C3},{0x85E5, 0xC3C4}, - {0x85E6, 0xF2D7},{0x85E8, 0xF2CB},{0x85E9, 0xC3BF},{0x85EA, 0xC3C1},{0x85EB, 0xF2C6},{0x85EC, 0xF2CE},{0x85ED, 0xF2C8},{0x85EF, 0xF2D8}, - {0x85F0, 0xF2D6},{0x85F1, 0xF2C7},{0x85F2, 0xF2CF},{0x85F6, 0xF4BE},{0x85F7, 0xC3C5},{0x85F8, 0xF2D0},{0x85F9, 0xC4A7},{0x85FA, 0xC4A9}, - {0x85FB, 0xC4A6},{0x85FD, 0xF4C3},{0x85FE, 0xF4BB},{0x85FF, 0xF4B9},{0x8600, 0xF4BD},{0x8601, 0xF4BA},{0x8604, 0xF4BF},{0x8605, 0xF4C1}, - {0x8606, 0xC4AA},{0x8607, 0xC4AC},{0x8609, 0xF4C0},{0x860A, 0xC4AD},{0x860B, 0xC4AB},{0x860C, 0xF4C2},{0x8611, 0xC4A8},{0x8617, 0xC4F4}, - {0x8618, 0xF5F1},{0x8619, 0xF5F7},{0x861A, 0xC4F6},{0x861B, 0xF4BC},{0x861C, 0xF5F6},{0x861E, 0xF5FD},{0x861F, 0xF5F4},{0x8620, 0xF5FB}, - {0x8621, 0xF5FA},{0x8622, 0xF4B8},{0x8623, 0xF5F5},{0x8624, 0xF0B6},{0x8625, 0xF5FE},{0x8626, 0xF5F3},{0x8627, 0xF5F8},{0x8629, 0xF5FC}, - {0x862A, 0xF5F2},{0x862C, 0xF74A},{0x862D, 0xC4F5},{0x862E, 0xF5F9},{0x8631, 0xF7F4},{0x8632, 0xF74B},{0x8633, 0xF749},{0x8634, 0xF747}, - {0x8635, 0xF748},{0x8636, 0xF74C},{0x8638, 0xC5D9},{0x8639, 0xF7F2},{0x863A, 0xF7F0},{0x863B, 0xF7F5},{0x863C, 0xF7F3},{0x863E, 0xF7F6}, - {0x863F, 0xC5DA},{0x8640, 0xF7F1},{0x8643, 0xF8BC},{0x8646, 0xF945},{0x8647, 0xF946},{0x8648, 0xF947},{0x864B, 0xF9C7},{0x864C, 0xF9BD}, - {0x864D, 0xCA4F},{0x864E, 0xAAEA},{0x8650, 0xAD68},{0x8652, 0xD3B8},{0x8653, 0xD3B7},{0x8654, 0xB040},{0x8655, 0xB342},{0x8656, 0xD77C}, - {0x8659, 0xD77B},{0x865B, 0xB5EA},{0x865C, 0xB8B8},{0x865E, 0xB8B7},{0x865F, 0xB8B9},{0x8661, 0xE3D4},{0x8662, 0xE77E},{0x8663, 0xEB58}, - {0x8664, 0xEB5A},{0x8665, 0xEB59},{0x8667, 0xC1AB},{0x8668, 0xEE57},{0x8669, 0xF0BA},{0x866A, 0xF9A5},{0x866B, 0xA6E4},{0x866D, 0xCDC9}, - {0x866E, 0xCDCA},{0x866F, 0xCDC8},{0x8670, 0xCDC7},{0x8671, 0xAAEB},{0x8673, 0xD0A9},{0x8674, 0xD0A7},{0x8677, 0xD0A6},{0x8679, 0xAD69}, - {0x867A, 0xAD6B},{0x867B, 0xAD6A},{0x867C, 0xD0A8},{0x8685, 0xD3C4},{0x8686, 0xD3C1},{0x8687, 0xD3BF},{0x868A, 0xB041},{0x868B, 0xD3C2}, - {0x868C, 0xB046},{0x868D, 0xD3BC},{0x868E, 0xD3CB},{0x8690, 0xD3CD},{0x8691, 0xD3BD},{0x8693, 0xB043},{0x8694, 0xD3CE},{0x8695, 0xD3C9}, - {0x8696, 0xD3BB},{0x8697, 0xD3C0},{0x8698, 0xD3CA},{0x8699, 0xD3C6},{0x869A, 0xD3C3},{0x869C, 0xB048},{0x869D, 0xD3CC},{0x869E, 0xD3BE}, - {0x86A1, 0xD3C7},{0x86A2, 0xD3B9},{0x86A3, 0xB047},{0x86A4, 0xB044},{0x86A5, 0xD3C5},{0x86A7, 0xD3C8},{0x86A8, 0xD3BA},{0x86A9, 0xB045}, - {0x86AA, 0xB042},{0x86AF, 0xB34C},{0x86B0, 0xD7A5},{0x86B1, 0xB34B},{0x86B3, 0xD7A8},{0x86B4, 0xD7AB},{0x86B5, 0xB348},{0x86B6, 0xB346}, - {0x86B7, 0xD77E},{0x86B8, 0xD7A9},{0x86B9, 0xD7A7},{0x86BA, 0xD7A4},{0x86BB, 0xD7AC},{0x86BC, 0xD7AD},{0x86BD, 0xD7AF},{0x86BE, 0xD7B0}, - {0x86BF, 0xD77D},{0x86C0, 0xB345},{0x86C1, 0xD7A2},{0x86C2, 0xD7A1},{0x86C3, 0xD7AE},{0x86C4, 0xB347},{0x86C5, 0xD7A3},{0x86C6, 0xB349}, - {0x86C7, 0xB344},{0x86C8, 0xD7A6},{0x86C9, 0xB34D},{0x86CB, 0xB34A},{0x86CC, 0xD7AA},{0x86D0, 0xB5F1},{0x86D1, 0xDBBF},{0x86D3, 0xDBB4}, - {0x86D4, 0xB5EE},{0x86D6, 0xDFE7},{0x86D7, 0xDBBD},{0x86D8, 0xDBB1},{0x86D9, 0xB5EC},{0x86DA, 0xDBB6},{0x86DB, 0xB5EF},{0x86DC, 0xDBBA}, - {0x86DD, 0xDBB8},{0x86DE, 0xB5F2},{0x86DF, 0xB5EB},{0x86E2, 0xDBB2},{0x86E3, 0xDBB5},{0x86E4, 0xB5F0},{0x86E6, 0xDBB3},{0x86E8, 0xDBBE}, - {0x86E9, 0xDBBC},{0x86EA, 0xDBB7},{0x86EB, 0xDBB9},{0x86EC, 0xDBBB},{0x86ED, 0xB5ED},{0x86F5, 0xDFE8},{0x86F6, 0xDFEE},{0x86F7, 0xDFE4}, - {0x86F8, 0xDFEA},{0x86F9, 0xB8BA},{0x86FA, 0xDFE6},{0x86FB, 0xB8C0},{0x86FE, 0xB8BF},{0x8700, 0xB8BE},{0x8701, 0xDFED},{0x8702, 0xB8C1}, - {0x8703, 0xB8C2},{0x8704, 0xDFE3},{0x8705, 0xDFF0},{0x8706, 0xB8C3},{0x8707, 0xB8BD},{0x8708, 0xB8BC},{0x8709, 0xDFEC},{0x870A, 0xB8C4}, - {0x870B, 0xDFE2},{0x870C, 0xDFE5},{0x870D, 0xDFEF},{0x870E, 0xDFEB},{0x8711, 0xE3F4},{0x8712, 0xE3E9},{0x8713, 0xB8BB},{0x8718, 0xBB6A}, - {0x8719, 0xE3DD},{0x871A, 0xE3F2},{0x871B, 0xE3DE},{0x871C, 0xBB65},{0x871E, 0xE3DB},{0x8720, 0xE3E4},{0x8721, 0xE3DC},{0x8722, 0xBB67}, - {0x8723, 0xE3D6},{0x8724, 0xE3F1},{0x8725, 0xBB68},{0x8726, 0xE3EE},{0x8727, 0xE3EF},{0x8728, 0xE3D7},{0x8729, 0xBB6D},{0x872A, 0xE3E6}, - {0x872C, 0xE3E0},{0x872D, 0xE3E7},{0x872E, 0xE3DA},{0x8730, 0xE3F3},{0x8731, 0xE3EB},{0x8732, 0xE3E5},{0x8733, 0xE3D5},{0x8734, 0xBB69}, - {0x8735, 0xE3EC},{0x8737, 0xBB6C},{0x8738, 0xE3F0},{0x873A, 0xE3EA},{0x873B, 0xBB66},{0x873C, 0xE3E8},{0x873E, 0xE3E2},{0x873F, 0xBB64}, - {0x8740, 0xE3D9},{0x8741, 0xE3E1},{0x8742, 0xE3ED},{0x8743, 0xE3DF},{0x8746, 0xE3E3},{0x874C, 0xBDC1},{0x874D, 0xDFE9},{0x874E, 0xE7B2}, - {0x874F, 0xE7BB},{0x8750, 0xE7B1},{0x8751, 0xE7AD},{0x8752, 0xE7AA},{0x8753, 0xBDC2},{0x8754, 0xE7A8},{0x8755, 0xBB6B},{0x8756, 0xE7A1}, - {0x8757, 0xBDC0},{0x8758, 0xE7A7},{0x8759, 0xBDBF},{0x875A, 0xE7AC},{0x875B, 0xE7A9},{0x875C, 0xE7B9},{0x875D, 0xE7B4},{0x875E, 0xE7AE}, - {0x875F, 0xE7B3},{0x8760, 0xBDBB},{0x8761, 0xE7AB},{0x8762, 0xE7BE},{0x8763, 0xE7A2},{0x8764, 0xE7A3},{0x8765, 0xE7BA},{0x8766, 0xBDBC}, - {0x8767, 0xE7BF},{0x8768, 0xBDBE},{0x8769, 0xE7C0},{0x876A, 0xE7B0},{0x876B, 0xE3D8},{0x876C, 0xE7B6},{0x876D, 0xE7AF},{0x876E, 0xE7B8}, - {0x876F, 0xE7B5},{0x8773, 0xE7A6},{0x8774, 0xBDB9},{0x8775, 0xE7BD},{0x8776, 0xBDBA},{0x8777, 0xE7A4},{0x8778, 0xBDBD},{0x8779, 0xEB64}, - {0x877A, 0xE7B7},{0x877B, 0xE7BC},{0x8781, 0xEB61},{0x8782, 0xBDB8},{0x8783, 0xBFC0},{0x8784, 0xEB6B},{0x8785, 0xEB67},{0x8787, 0xEB65}, - {0x8788, 0xEB60},{0x8789, 0xEB6F},{0x878D, 0xBFC4},{0x878F, 0xEB5C},{0x8790, 0xEB68},{0x8791, 0xEB69},{0x8792, 0xEB5F},{0x8793, 0xEB5E}, - {0x8794, 0xEB6C},{0x8796, 0xEB62},{0x8797, 0xEB5D},{0x8798, 0xEB63},{0x879A, 0xEB6E},{0x879B, 0xEB5B},{0x879C, 0xEB6D},{0x879D, 0xEB6A}, - {0x879E, 0xBFC2},{0x879F, 0xBFC1},{0x87A2, 0xBFC3},{0x87A3, 0xEB66},{0x87A4, 0xF0CB},{0x87AA, 0xEE59},{0x87AB, 0xC1B1},{0x87AC, 0xEE5D}, - {0x87AD, 0xEE5A},{0x87AE, 0xEE61},{0x87AF, 0xEE67},{0x87B0, 0xEE5C},{0x87B2, 0xEE70},{0x87B3, 0xC1AE},{0x87B4, 0xEE6A},{0x87B5, 0xEE5F}, - {0x87B6, 0xEE6B},{0x87B7, 0xEE66},{0x87B8, 0xEE6D},{0x87B9, 0xEE5E},{0x87BA, 0xC1B3},{0x87BB, 0xC1B2},{0x87BC, 0xEE60},{0x87BD, 0xEE6E}, - {0x87BE, 0xEE58},{0x87BF, 0xEE6C},{0x87C0, 0xC1AC},{0x87C2, 0xEE64},{0x87C3, 0xEE63},{0x87C4, 0xEE68},{0x87C5, 0xEE5B},{0x87C6, 0xC1B0}, - {0x87C8, 0xC1B4},{0x87C9, 0xEE62},{0x87CA, 0xEE69},{0x87CB, 0xC1B5},{0x87CC, 0xEE65},{0x87D1, 0xC1AD},{0x87D2, 0xC1AF},{0x87D3, 0xF0C7}, - {0x87D4, 0xF0C5},{0x87D7, 0xF0CC},{0x87D8, 0xF0C9},{0x87D9, 0xF0CD},{0x87DB, 0xF0BE},{0x87DC, 0xF0C6},{0x87DD, 0xF0D1},{0x87DE, 0xEE6F}, - {0x87DF, 0xF0C2},{0x87E0, 0xC2CF},{0x87E1, 0xE7A5},{0x87E2, 0xF0BD},{0x87E3, 0xF0CA},{0x87E4, 0xF0C4},{0x87E5, 0xF0C1},{0x87E6, 0xF0BC}, - {0x87E7, 0xF0BB},{0x87E8, 0xF0D0},{0x87EA, 0xF0C0},{0x87EB, 0xF0BF},{0x87EC, 0xC2CD},{0x87ED, 0xF0C8},{0x87EF, 0xC2CC},{0x87F2, 0xC2CE}, - {0x87F3, 0xF0C3},{0x87F4, 0xF0CF},{0x87F6, 0xF2DE},{0x87F7, 0xF2DF},{0x87F9, 0xC3C9},{0x87FA, 0xF2DC},{0x87FB, 0xC3C6},{0x87FC, 0xF2E4}, - {0x87FE, 0xC3CA},{0x87FF, 0xF2E6},{0x8800, 0xF2DB},{0x8801, 0xF0CE},{0x8802, 0xF2E8},{0x8803, 0xF2DD},{0x8805, 0xC3C7},{0x8806, 0xF2E3}, - {0x8808, 0xF2E5},{0x8809, 0xF2E0},{0x880A, 0xF2E7},{0x880B, 0xF2E2},{0x880C, 0xF2E1},{0x880D, 0xC3C8},{0x8810, 0xF4C5},{0x8811, 0xF4C6}, - {0x8813, 0xF4C8},{0x8814, 0xC4AE},{0x8815, 0xC4AF},{0x8816, 0xF4C9},{0x8817, 0xF4C7},{0x8819, 0xF4C4},{0x881B, 0xF642},{0x881C, 0xF645}, - {0x881D, 0xF641},{0x881F, 0xC4FA},{0x8820, 0xF643},{0x8821, 0xC4F9},{0x8822, 0xC4F8},{0x8823, 0xC4F7},{0x8824, 0xF644},{0x8825, 0xF751}, - {0x8826, 0xF74F},{0x8828, 0xF74E},{0x8829, 0xF640},{0x882A, 0xF750},{0x882B, 0xF646},{0x882C, 0xF74D},{0x882E, 0xF7F9},{0x882F, 0xF7D7}, - {0x8830, 0xF7F7},{0x8831, 0xC5DB},{0x8832, 0xF7F8},{0x8833, 0xF7FA},{0x8835, 0xF8BF},{0x8836, 0xC5FA},{0x8837, 0xF8BE},{0x8838, 0xF8BD}, - {0x8839, 0xC5FB},{0x883B, 0xC65A},{0x883C, 0xF96E},{0x883D, 0xF9A7},{0x883E, 0xF9A6},{0x883F, 0xF9A8},{0x8840, 0xA6E5},{0x8841, 0xD0AA}, - {0x8843, 0xD3CF},{0x8844, 0xD3D0},{0x8848, 0xDBC0},{0x884A, 0xF647},{0x884B, 0xF8C0},{0x884C, 0xA6E6},{0x884D, 0xAD6C},{0x884E, 0xD0AB}, - {0x8852, 0xD7B1},{0x8853, 0xB34E},{0x8855, 0xDBC2},{0x8856, 0xDBC1},{0x8857, 0xB5F3},{0x8859, 0xB8C5},{0x885A, 0xE7C1},{0x885B, 0xBDC3}, - {0x885D, 0xBDC4},{0x8861, 0xBFC5},{0x8862, 0xC5FC},{0x8863, 0xA6E7},{0x8867, 0xD0AC},{0x8868, 0xAAED},{0x8869, 0xD0AE},{0x886A, 0xD0AD}, - {0x886B, 0xAD6D},{0x886D, 0xD3D1},{0x886F, 0xD3D8},{0x8870, 0xB049},{0x8871, 0xD3D6},{0x8872, 0xD3D4},{0x8874, 0xD3DB},{0x8875, 0xD3D2}, - {0x8876, 0xD3D3},{0x8877, 0xB04A},{0x8879, 0xB04E},{0x887C, 0xD3DC},{0x887D, 0xB04D},{0x887E, 0xD3DA},{0x887F, 0xD3D7},{0x8880, 0xD3D5}, - {0x8881, 0xB04B},{0x8882, 0xB04C},{0x8883, 0xD3D9},{0x8888, 0xB350},{0x8889, 0xD7B2},{0x888B, 0xB355},{0x888C, 0xD7C2},{0x888D, 0xB354}, - {0x888E, 0xD7C4},{0x8891, 0xD7B8},{0x8892, 0xB352},{0x8893, 0xD7C3},{0x8895, 0xD7B3},{0x8896, 0xB353},{0x8897, 0xD7BF},{0x8898, 0xD7BB}, - {0x8899, 0xD7BD},{0x889A, 0xD7B7},{0x889B, 0xD7BE},{0x889E, 0xB34F},{0x889F, 0xD7BA},{0x88A1, 0xD7B9},{0x88A2, 0xD7B5},{0x88A4, 0xD7C0}, - {0x88A7, 0xD7BC},{0x88A8, 0xD7B4},{0x88AA, 0xD7B6},{0x88AB, 0xB351},{0x88AC, 0xD7C1},{0x88B1, 0xB5F6},{0x88B2, 0xDBCD},{0x88B6, 0xDBC9}, - {0x88B7, 0xDBCB},{0x88B8, 0xDBC6},{0x88B9, 0xDBC5},{0x88BA, 0xDBC3},{0x88BC, 0xDBCA},{0x88BD, 0xDBCC},{0x88BE, 0xDBC8},{0x88C0, 0xDBC7}, - {0x88C1, 0xB5F4},{0x88C2, 0xB5F5},{0x88C9, 0xDBCF},{0x88CA, 0xB8CD},{0x88CB, 0xDFF2},{0x88CC, 0xDFF8},{0x88CD, 0xDFF3},{0x88CE, 0xDFF4}, - {0x88D0, 0xDFF9},{0x88D2, 0xB8CF},{0x88D4, 0xB8C7},{0x88D5, 0xB8CE},{0x88D6, 0xDFF1},{0x88D7, 0xDBC4},{0x88D8, 0xB8CA},{0x88D9, 0xB8C8}, - {0x88DA, 0xDFF7},{0x88DB, 0xDFF6},{0x88DC, 0xB8C9},{0x88DD, 0xB8CB},{0x88DE, 0xDFF5},{0x88DF, 0xB8C6},{0x88E1, 0xB8CC},{0x88E7, 0xE3F6}, - {0x88E8, 0xBB74},{0x88EB, 0xE442},{0x88EC, 0xE441},{0x88EE, 0xE3FB},{0x88EF, 0xBB76},{0x88F0, 0xE440},{0x88F1, 0xE3F7},{0x88F2, 0xE3F8}, - {0x88F3, 0xBB6E},{0x88F4, 0xBB70},{0x88F6, 0xE3FD},{0x88F7, 0xE3F5},{0x88F8, 0xBB72},{0x88F9, 0xBB71},{0x88FA, 0xE3F9},{0x88FB, 0xE3FE}, - {0x88FC, 0xE3FC},{0x88FD, 0xBB73},{0x88FE, 0xE3FA},{0x8901, 0xDBCE},{0x8902, 0xBB6F},{0x8905, 0xE7C2},{0x8906, 0xE7C9},{0x8907, 0xBDC6}, - {0x8909, 0xE7CD},{0x890A, 0xBDCA},{0x890B, 0xE7C5},{0x890C, 0xE7C3},{0x890E, 0xE7CC},{0x8910, 0xBDC5},{0x8911, 0xE7CB},{0x8912, 0xBDC7}, - {0x8913, 0xBDC8},{0x8914, 0xE7C4},{0x8915, 0xBDC9},{0x8916, 0xE7CA},{0x8917, 0xE7C6},{0x8918, 0xE7C7},{0x8919, 0xE7C8},{0x891A, 0xBB75}, - {0x891E, 0xEB70},{0x891F, 0xEB7C},{0x8921, 0xBFCA},{0x8922, 0xEB77},{0x8923, 0xEB79},{0x8925, 0xBFC8},{0x8926, 0xEB71},{0x8927, 0xEB75}, - {0x8929, 0xEB78},{0x892A, 0xBFC6},{0x892B, 0xBFC9},{0x892C, 0xEB7B},{0x892D, 0xEB73},{0x892E, 0xEB74},{0x892F, 0xEB7A},{0x8930, 0xEB72}, - {0x8931, 0xEB76},{0x8932, 0xBFC7},{0x8933, 0xEE72},{0x8935, 0xEE71},{0x8936, 0xC1B7},{0x8937, 0xEE77},{0x8938, 0xC1B9},{0x893B, 0xC1B6}, - {0x893C, 0xEE73},{0x893D, 0xC1BA},{0x893E, 0xEE74},{0x8941, 0xEE75},{0x8942, 0xEE78},{0x8944, 0xC1B8},{0x8946, 0xF0D6},{0x8949, 0xF0D9}, - {0x894B, 0xF0D3},{0x894C, 0xF0D5},{0x894F, 0xF0D4},{0x8950, 0xF0D7},{0x8951, 0xF0D8},{0x8952, 0xEE76},{0x8953, 0xF0D2},{0x8956, 0xC3CD}, - {0x8957, 0xF2EC},{0x8958, 0xF2EF},{0x8959, 0xF2F1},{0x895A, 0xF2EA},{0x895B, 0xF2EB},{0x895C, 0xF2EE},{0x895D, 0xF2F0},{0x895E, 0xC3CE}, - {0x895F, 0xC3CC},{0x8960, 0xC3CB},{0x8961, 0xF2ED},{0x8962, 0xF2E9},{0x8963, 0xF4CA},{0x8964, 0xC4B0},{0x8966, 0xF4CB},{0x8969, 0xF649}, - {0x896A, 0xC4FB},{0x896B, 0xF64B},{0x896C, 0xC4FC},{0x896D, 0xF648},{0x896E, 0xF64A},{0x896F, 0xC5A8},{0x8971, 0xF752},{0x8972, 0xC5A7}, - {0x8973, 0xF7FD},{0x8974, 0xF7FC},{0x8976, 0xF7FB},{0x8979, 0xF948},{0x897A, 0xF949},{0x897B, 0xF94B},{0x897C, 0xF94A},{0x897E, 0xCA50}, - {0x897F, 0xA6E8},{0x8981, 0xAD6E},{0x8982, 0xD7C5},{0x8983, 0xB5F7},{0x8985, 0xDFFA},{0x8986, 0xC2D0},{0x8988, 0xF2F2},{0x898B, 0xA8A3}, - {0x898F, 0xB357},{0x8993, 0xB356},{0x8995, 0xDBD0},{0x8996, 0xB5F8},{0x8997, 0xDBD2},{0x8998, 0xDBD1},{0x899B, 0xDFFB},{0x899C, 0xB8D0}, - {0x899D, 0xE443},{0x899E, 0xE446},{0x899F, 0xE445},{0x89A1, 0xE444},{0x89A2, 0xE7CE},{0x89A3, 0xE7D0},{0x89A4, 0xE7CF},{0x89A6, 0xBFCC}, - {0x89AA, 0xBFCB},{0x89AC, 0xC1BB},{0x89AD, 0xEE79},{0x89AE, 0xEE7B},{0x89AF, 0xEE7A},{0x89B2, 0xC2D1},{0x89B6, 0xF2F4},{0x89B7, 0xF2F3}, - {0x89B9, 0xF4CC},{0x89BA, 0xC4B1},{0x89BD, 0xC4FD},{0x89BE, 0xF754},{0x89BF, 0xF753},{0x89C0, 0xC65B},{0x89D2, 0xA8A4},{0x89D3, 0xD0AF}, - {0x89D4, 0xAD6F},{0x89D5, 0xD7C8},{0x89D6, 0xD7C6},{0x89D9, 0xD7C7},{0x89DA, 0xDBD4},{0x89DB, 0xDBD5},{0x89DC, 0xE043},{0x89DD, 0xDBD3}, - {0x89DF, 0xDFFC},{0x89E0, 0xE041},{0x89E1, 0xE040},{0x89E2, 0xE042},{0x89E3, 0xB8D1},{0x89E4, 0xDFFE},{0x89E5, 0xDFFD},{0x89E6, 0xE044}, - {0x89E8, 0xE449},{0x89E9, 0xE447},{0x89EB, 0xE448},{0x89EC, 0xE7D3},{0x89ED, 0xE7D1},{0x89F0, 0xE7D2},{0x89F1, 0xEB7D},{0x89F2, 0xEE7C}, - {0x89F3, 0xEE7D},{0x89F4, 0xC2D2},{0x89F6, 0xF2F5},{0x89F7, 0xF4CD},{0x89F8, 0xC4B2},{0x89FA, 0xF64C},{0x89FB, 0xF755},{0x89FC, 0xC5A9}, - {0x89FE, 0xF7FE},{0x89FF, 0xF94C},{0x8A00, 0xA8A5},{0x8A02, 0xAD71},{0x8A03, 0xAD72},{0x8A04, 0xD0B0},{0x8A07, 0xD0B1},{0x8A08, 0xAD70}, - {0x8A0A, 0xB054},{0x8A0C, 0xB052},{0x8A0E, 0xB051},{0x8A0F, 0xB058},{0x8A10, 0xB050},{0x8A11, 0xB059},{0x8A12, 0xD3DD},{0x8A13, 0xB056}, - {0x8A15, 0xB053},{0x8A16, 0xB057},{0x8A17, 0xB055},{0x8A18, 0xB04F},{0x8A1B, 0xB35F},{0x8A1D, 0xB359},{0x8A1E, 0xD7CC},{0x8A1F, 0xB35E}, - {0x8A22, 0xB360},{0x8A23, 0xB35A},{0x8A25, 0xB35B},{0x8A27, 0xD7CA},{0x8A2A, 0xB358},{0x8A2C, 0xD7CB},{0x8A2D, 0xB35D},{0x8A30, 0xD7C9}, - {0x8A31, 0xB35C},{0x8A34, 0xB644},{0x8A36, 0xB646},{0x8A39, 0xDBD8},{0x8A3A, 0xB645},{0x8A3B, 0xB5F9},{0x8A3C, 0xB5FD},{0x8A3E, 0xB8E4}, - {0x8A3F, 0xE049},{0x8A40, 0xDBDA},{0x8A41, 0xB5FE},{0x8A44, 0xDBDD},{0x8A45, 0xDBDE},{0x8A46, 0xB643},{0x8A48, 0xDBE0},{0x8A4A, 0xDBE2}, - {0x8A4C, 0xDBE3},{0x8A4D, 0xDBD7},{0x8A4E, 0xDBD6},{0x8A4F, 0xDBE4},{0x8A50, 0xB642},{0x8A51, 0xDBE1},{0x8A52, 0xDBDF},{0x8A54, 0xB640}, - {0x8A55, 0xB5FB},{0x8A56, 0xB647},{0x8A57, 0xDBDB},{0x8A58, 0xDBDC},{0x8A59, 0xDBD9},{0x8A5B, 0xB641},{0x8A5E, 0xB5FC},{0x8A60, 0xB5FA}, - {0x8A61, 0xE048},{0x8A62, 0xB8DF},{0x8A63, 0xB8DA},{0x8A66, 0xB8D5},{0x8A68, 0xB8E5},{0x8A69, 0xB8D6},{0x8A6B, 0xB8D2},{0x8A6C, 0xB8E1}, - {0x8A6D, 0xB8DE},{0x8A6E, 0xB8E0},{0x8A70, 0xB8D7},{0x8A71, 0xB8DC},{0x8A72, 0xB8D3},{0x8A73, 0xB8D4},{0x8A74, 0xE050},{0x8A75, 0xE04D}, - {0x8A76, 0xE045},{0x8A77, 0xE04A},{0x8A79, 0xB8E2},{0x8A7A, 0xE051},{0x8A7B, 0xB8E3},{0x8A7C, 0xB8D9},{0x8A7F, 0xE047},{0x8A81, 0xE04F}, - {0x8A82, 0xE04B},{0x8A83, 0xE04E},{0x8A84, 0xE04C},{0x8A85, 0xB8DD},{0x8A86, 0xE046},{0x8A87, 0xB8D8},{0x8A8B, 0xE44C},{0x8A8C, 0xBB78}, - {0x8A8D, 0xBB7B},{0x8A8F, 0xE44E},{0x8A91, 0xBBA5},{0x8A92, 0xE44D},{0x8A93, 0xBB7D},{0x8A95, 0xBDCF},{0x8A96, 0xE44F},{0x8A98, 0xBBA4}, - {0x8A99, 0xE44B},{0x8A9A, 0xBBA6},{0x8A9E, 0xBB79},{0x8AA0, 0xB8DB},{0x8AA1, 0xBB7C},{0x8AA3, 0xBB7A},{0x8AA4, 0xBB7E},{0x8AA5, 0xBBA2}, - {0x8AA6, 0xBB77},{0x8AA7, 0xBBA7},{0x8AA8, 0xBBA3},{0x8AAA, 0xBBA1},{0x8AAB, 0xE44A},{0x8AB0, 0xBDD6},{0x8AB2, 0xBDD2},{0x8AB6, 0xBDD9}, - {0x8AB8, 0xE7D6},{0x8AB9, 0xBDDA},{0x8ABA, 0xE7E2},{0x8ABB, 0xE7DB},{0x8ABC, 0xBDCB},{0x8ABD, 0xE7E3},{0x8ABE, 0xE7DD},{0x8ABF, 0xBDD5}, - {0x8AC0, 0xE7DE},{0x8AC2, 0xBDD4},{0x8AC3, 0xE7E1},{0x8AC4, 0xBDCE},{0x8AC5, 0xE7DF},{0x8AC6, 0xE7D5},{0x8AC7, 0xBDCD},{0x8AC8, 0xEBAA}, - {0x8AC9, 0xBDD3},{0x8ACB, 0xBDD0},{0x8ACD, 0xBDD8},{0x8ACF, 0xE7D4},{0x8AD1, 0xE7D8},{0x8AD2, 0xBDCC},{0x8AD3, 0xE7D7},{0x8AD4, 0xE7D9}, - {0x8AD5, 0xE7DA},{0x8AD6, 0xBDD7},{0x8AD7, 0xE7DC},{0x8AD8, 0xE7E0},{0x8AD9, 0xE7E4},{0x8ADB, 0xBDDB},{0x8ADC, 0xBFD2},{0x8ADD, 0xEBA5}, - {0x8ADE, 0xEBAB},{0x8ADF, 0xEBA8},{0x8AE0, 0xEB7E},{0x8AE1, 0xEBAC},{0x8AE2, 0xEBA1},{0x8AE4, 0xEBA7},{0x8AE6, 0xBFCD},{0x8AE7, 0xBFD3}, - {0x8AE8, 0xEBAD},{0x8AEB, 0xBFCF},{0x8AED, 0xBFD9},{0x8AEE, 0xBFD4},{0x8AEF, 0xEBAF},{0x8AF0, 0xEBA9},{0x8AF1, 0xBFD0},{0x8AF2, 0xEBA2}, - {0x8AF3, 0xBFDA},{0x8AF4, 0xEBA3},{0x8AF5, 0xEBA4},{0x8AF6, 0xBFDB},{0x8AF7, 0xBFD8},{0x8AF8, 0xBDD1},{0x8AFA, 0xBFCE},{0x8AFB, 0xEBB0}, - {0x8AFC, 0xBFDC},{0x8AFE, 0xBFD5},{0x8AFF, 0xEBAE},{0x8B00, 0xBFD1},{0x8B01, 0xBFD6},{0x8B02, 0xBFD7},{0x8B04, 0xC1C3},{0x8B05, 0xEEA4}, - {0x8B06, 0xEEAD},{0x8B07, 0xEEAA},{0x8B08, 0xEEAC},{0x8B0A, 0xC1C0},{0x8B0B, 0xEEA5},{0x8B0D, 0xEEAB},{0x8B0E, 0xC1BC},{0x8B0F, 0xEEA7}, - {0x8B10, 0xC1C4},{0x8B11, 0xEEA3},{0x8B12, 0xEEA8},{0x8B13, 0xEEAF},{0x8B14, 0xEBA6},{0x8B15, 0xEEA9},{0x8B16, 0xEEA2},{0x8B17, 0xC1BD}, - {0x8B18, 0xEEA1},{0x8B19, 0xC1BE},{0x8B1A, 0xEEB0},{0x8B1B, 0xC1BF},{0x8B1C, 0xEEAE},{0x8B1D, 0xC1C2},{0x8B1E, 0xEE7E},{0x8B20, 0xC1C1}, - {0x8B22, 0xEEA6},{0x8B23, 0xF0DC},{0x8B24, 0xF0EA},{0x8B25, 0xF0E5},{0x8B26, 0xF0E7},{0x8B27, 0xF0DB},{0x8B28, 0xC2D3},{0x8B2A, 0xF0DA}, - {0x8B2B, 0xC2D6},{0x8B2C, 0xC2D5},{0x8B2E, 0xF0E9},{0x8B2F, 0xF0E1},{0x8B30, 0xF0DE},{0x8B31, 0xF0E4},{0x8B33, 0xF0DD},{0x8B35, 0xF0DF}, - {0x8B36, 0xF0E8},{0x8B37, 0xF0E6},{0x8B39, 0xC2D4},{0x8B3A, 0xF0ED},{0x8B3B, 0xF0EB},{0x8B3C, 0xF0E2},{0x8B3D, 0xF0EC},{0x8B3E, 0xF0E3}, - {0x8B40, 0xF2F9},{0x8B41, 0xC3CF},{0x8B42, 0xF341},{0x8B45, 0xF64F},{0x8B46, 0xC3D6},{0x8B47, 0xF0E0},{0x8B48, 0xF2F7},{0x8B49, 0xC3D2}, - {0x8B4A, 0xF2F8},{0x8B4B, 0xF2FD},{0x8B4E, 0xC3D4},{0x8B4F, 0xC3D5},{0x8B50, 0xF2F6},{0x8B51, 0xF340},{0x8B52, 0xF342},{0x8B53, 0xF2FA}, - {0x8B54, 0xF2FC},{0x8B55, 0xF2FE},{0x8B56, 0xF2FB},{0x8B57, 0xF343},{0x8B58, 0xC3D1},{0x8B59, 0xC3D7},{0x8B5A, 0xC3D3},{0x8B5C, 0xC3D0}, - {0x8B5D, 0xF4D0},{0x8B5F, 0xC4B7},{0x8B60, 0xF4CE},{0x8B63, 0xF4D2},{0x8B65, 0xF4D3},{0x8B66, 0xC4B5},{0x8B67, 0xF4D4},{0x8B68, 0xF4D1}, - {0x8B6A, 0xF4CF},{0x8B6B, 0xC4B8},{0x8B6C, 0xC4B4},{0x8B6D, 0xF4D5},{0x8B6F, 0xC4B6},{0x8B70, 0xC4B3},{0x8B74, 0xC4FE},{0x8B77, 0xC540}, - {0x8B78, 0xF64E},{0x8B79, 0xF64D},{0x8B7A, 0xF650},{0x8B7B, 0xF651},{0x8B7D, 0xC541},{0x8B7E, 0xF756},{0x8B7F, 0xF75B},{0x8B80, 0xC5AA}, - {0x8B82, 0xF758},{0x8B84, 0xF757},{0x8B85, 0xF75A},{0x8B86, 0xF759},{0x8B88, 0xF843},{0x8B8A, 0xC5DC},{0x8B8B, 0xF842},{0x8B8C, 0xF840}, - {0x8B8E, 0xF841},{0x8B92, 0xC5FE},{0x8B93, 0xC5FD},{0x8B94, 0xF8C1},{0x8B95, 0xF8C2},{0x8B96, 0xC640},{0x8B98, 0xF94D},{0x8B99, 0xF94E}, - {0x8B9A, 0xC667},{0x8B9C, 0xC66D},{0x8B9E, 0xF9A9},{0x8B9F, 0xF9C8},{0x8C37, 0xA8A6},{0x8C39, 0xD7CD},{0x8C3B, 0xD7CE},{0x8C3C, 0xE052}, - {0x8C3D, 0xE450},{0x8C3E, 0xE7E5},{0x8C3F, 0xC1C6},{0x8C41, 0xC1C5},{0x8C42, 0xF0EE},{0x8C43, 0xF344},{0x8C45, 0xF844},{0x8C46, 0xA8A7}, - {0x8C47, 0xD3DE},{0x8C48, 0xB05A},{0x8C49, 0xB361},{0x8C4A, 0xE054},{0x8C4B, 0xE053},{0x8C4C, 0xBDDC},{0x8C4D, 0xE7E6},{0x8C4E, 0xBDDD}, - {0x8C4F, 0xEEB1},{0x8C50, 0xC2D7},{0x8C54, 0xC676},{0x8C55, 0xA8A8},{0x8C56, 0xCDCB},{0x8C57, 0xD3DF},{0x8C5A, 0xB362},{0x8C5C, 0xD7CF}, - {0x8C5D, 0xD7D0},{0x8C5F, 0xDBE5},{0x8C61, 0xB648},{0x8C62, 0xB8E6},{0x8C64, 0xE056},{0x8C65, 0xE055},{0x8C66, 0xE057},{0x8C68, 0xE451}, - {0x8C69, 0xE452},{0x8C6A, 0xBBA8},{0x8C6B, 0xBFDD},{0x8C6C, 0xBDDE},{0x8C6D, 0xBFDE},{0x8C6F, 0xEEB5},{0x8C70, 0xEEB2},{0x8C71, 0xEEB4}, - {0x8C72, 0xEEB3},{0x8C73, 0xC1C7},{0x8C75, 0xF0EF},{0x8C76, 0xF346},{0x8C77, 0xF345},{0x8C78, 0xCBA4},{0x8C79, 0xB05C},{0x8C7A, 0xB05B}, - {0x8C7B, 0xD3E0},{0x8C7D, 0xD7D1},{0x8C80, 0xDBE7},{0x8C81, 0xDBE6},{0x8C82, 0xB649},{0x8C84, 0xE059},{0x8C85, 0xE05A},{0x8C86, 0xE058}, - {0x8C89, 0xB8E8},{0x8C8A, 0xB8E7},{0x8C8C, 0xBBAA},{0x8C8D, 0xBBA9},{0x8C8F, 0xE7E7},{0x8C90, 0xEBB3},{0x8C91, 0xEBB1},{0x8C92, 0xEBB2}, - {0x8C93, 0xBFDF},{0x8C94, 0xEEB7},{0x8C95, 0xEEB6},{0x8C97, 0xF0F2},{0x8C98, 0xF0F1},{0x8C99, 0xF0F0},{0x8C9A, 0xF347},{0x8C9C, 0xF9AA}, - {0x8C9D, 0xA8A9},{0x8C9E, 0xAD73},{0x8CA0, 0xAD74},{0x8CA1, 0xB05D},{0x8CA2, 0xB05E},{0x8CA3, 0xD3E2},{0x8CA4, 0xD3E1},{0x8CA5, 0xD7D2}, - {0x8CA7, 0xB368},{0x8CA8, 0xB366},{0x8CA9, 0xB363},{0x8CAA, 0xB367},{0x8CAB, 0xB365},{0x8CAC, 0xB364},{0x8CAF, 0xB64A},{0x8CB0, 0xDBEA}, - {0x8CB2, 0xB8ED},{0x8CB3, 0xB64C},{0x8CB4, 0xB651},{0x8CB5, 0xDBEC},{0x8CB6, 0xB653},{0x8CB7, 0xB652},{0x8CB8, 0xB655},{0x8CB9, 0xDBEB}, - {0x8CBA, 0xDBE8},{0x8CBB, 0xB64F},{0x8CBC, 0xB64B},{0x8CBD, 0xB64D},{0x8CBE, 0xDBE9},{0x8CBF, 0xB654},{0x8CC0, 0xB650},{0x8CC1, 0xB64E}, - {0x8CC2, 0xB8EF},{0x8CC3, 0xB8EE},{0x8CC4, 0xB8EC},{0x8CC5, 0xB8F0},{0x8CC7, 0xB8EA},{0x8CC8, 0xB8EB},{0x8CCA, 0xB8E9},{0x8CCC, 0xE05B}, - {0x8CCF, 0xE454},{0x8CD1, 0xBBAC},{0x8CD2, 0xBBAD},{0x8CD3, 0xBBAB},{0x8CD5, 0xE453},{0x8CD7, 0xE455},{0x8CD9, 0xE7EA},{0x8CDA, 0xE7EC}, - {0x8CDC, 0xBDE7},{0x8CDD, 0xE7ED},{0x8CDE, 0xBDE0},{0x8CDF, 0xE7E9},{0x8CE0, 0xBDDF},{0x8CE1, 0xBDE9},{0x8CE2, 0xBDE5},{0x8CE3, 0xBDE6}, - {0x8CE4, 0xBDE2},{0x8CE5, 0xE7E8},{0x8CE6, 0xBDE1},{0x8CE7, 0xE7EE},{0x8CE8, 0xE7EB},{0x8CEA, 0xBDE8},{0x8CEC, 0xBDE3},{0x8CED, 0xBDE4}, - {0x8CEE, 0xEBB5},{0x8CF0, 0xEBB7},{0x8CF1, 0xEBB6},{0x8CF3, 0xEBB8},{0x8CF4, 0xBFE0},{0x8CF5, 0xEBB4},{0x8CF8, 0xC1CB},{0x8CF9, 0xEEB8}, - {0x8CFA, 0xC1C8},{0x8CFB, 0xC1CC},{0x8CFC, 0xC1CA},{0x8CFD, 0xC1C9},{0x8CFE, 0xF0F3},{0x8D00, 0xF0F6},{0x8D02, 0xF0F5},{0x8D04, 0xF0F4}, - {0x8D05, 0xC2D8},{0x8D06, 0xF348},{0x8D07, 0xF349},{0x8D08, 0xC3D8},{0x8D09, 0xF34A},{0x8D0A, 0xC3D9},{0x8D0D, 0xC4BA},{0x8D0F, 0xC4B9}, - {0x8D10, 0xF652},{0x8D13, 0xC542},{0x8D14, 0xF653},{0x8D15, 0xF75C},{0x8D16, 0xC5AB},{0x8D17, 0xC5AC},{0x8D19, 0xF845},{0x8D1B, 0xC642}, - {0x8D64, 0xA8AA},{0x8D66, 0xB36A},{0x8D67, 0xB369},{0x8D68, 0xE05C},{0x8D69, 0xE05D},{0x8D6B, 0xBBAE},{0x8D6C, 0xEBB9},{0x8D6D, 0xBDEA}, - {0x8D6E, 0xEBBA},{0x8D6F, 0xEEB9},{0x8D70, 0xA8AB},{0x8D72, 0xD0B2},{0x8D73, 0xAD76},{0x8D74, 0xAD75},{0x8D76, 0xD3E3},{0x8D77, 0xB05F}, - {0x8D78, 0xD3E4},{0x8D79, 0xD7D5},{0x8D7B, 0xD7D4},{0x8D7D, 0xD7D3},{0x8D80, 0xDBEE},{0x8D81, 0xB658},{0x8D84, 0xDBED},{0x8D85, 0xB657}, - {0x8D89, 0xDBEF},{0x8D8A, 0xB656},{0x8D8C, 0xE05F},{0x8D8D, 0xE062},{0x8D8E, 0xE060},{0x8D8F, 0xE061},{0x8D90, 0xE065},{0x8D91, 0xE05E}, - {0x8D92, 0xE066},{0x8D93, 0xE063},{0x8D94, 0xE064},{0x8D95, 0xBBB0},{0x8D96, 0xE456},{0x8D99, 0xBBAF},{0x8D9B, 0xE7F2},{0x8D9C, 0xE7F0}, - {0x8D9F, 0xBDEB},{0x8DA0, 0xE7EF},{0x8DA1, 0xE7F1},{0x8DA3, 0xBDEC},{0x8DA5, 0xEBBB},{0x8DA7, 0xEBBC},{0x8DA8, 0xC1CD},{0x8DAA, 0xF34C}, - {0x8DAB, 0xF34E},{0x8DAC, 0xF34B},{0x8DAD, 0xF34D},{0x8DAE, 0xF4D6},{0x8DAF, 0xF654},{0x8DB2, 0xF96F},{0x8DB3, 0xA8AC},{0x8DB4, 0xAD77}, - {0x8DB5, 0xD3E5},{0x8DB6, 0xD3E7},{0x8DB7, 0xD3E6},{0x8DB9, 0xD7D8},{0x8DBA, 0xB36C},{0x8DBC, 0xD7D6},{0x8DBE, 0xB36B},{0x8DBF, 0xD7D9}, - {0x8DC1, 0xD7DA},{0x8DC2, 0xD7D7},{0x8DC5, 0xDBFB},{0x8DC6, 0xB660},{0x8DC7, 0xDBF3},{0x8DC8, 0xDBF9},{0x8DCB, 0xB65B},{0x8DCC, 0xB65E}, - {0x8DCD, 0xDBF2},{0x8DCE, 0xB659},{0x8DCF, 0xDBF6},{0x8DD0, 0xE06C},{0x8DD1, 0xB65D},{0x8DD3, 0xDBF1},{0x8DD5, 0xDBF7},{0x8DD6, 0xDBF4}, - {0x8DD7, 0xDBFA},{0x8DD8, 0xDBF0},{0x8DD9, 0xDBF8},{0x8DDA, 0xB65C},{0x8DDB, 0xB65F},{0x8DDC, 0xDBF5},{0x8DDD, 0xB65A},{0x8DDF, 0xB8F2}, - {0x8DE0, 0xE068},{0x8DE1, 0xB8F1},{0x8DE2, 0xE06F},{0x8DE3, 0xE06E},{0x8DE4, 0xB8F8},{0x8DE6, 0xB8F9},{0x8DE7, 0xE070},{0x8DE8, 0xB8F3}, - {0x8DE9, 0xE06D},{0x8DEA, 0xB8F7},{0x8DEB, 0xE072},{0x8DEC, 0xE069},{0x8DEE, 0xE06B},{0x8DEF, 0xB8F4},{0x8DF0, 0xE067},{0x8DF1, 0xE06A}, - {0x8DF2, 0xE071},{0x8DF3, 0xB8F5},{0x8DF4, 0xE073},{0x8DFA, 0xB8F6},{0x8DFC, 0xBBB1},{0x8DFD, 0xE45B},{0x8DFE, 0xE461},{0x8DFF, 0xE459}, - {0x8E00, 0xE462},{0x8E02, 0xE458},{0x8E03, 0xE45D},{0x8E04, 0xE463},{0x8E05, 0xE460},{0x8E06, 0xE45F},{0x8E07, 0xE45E},{0x8E09, 0xE457}, - {0x8E0A, 0xE45C},{0x8E0D, 0xE45A},{0x8E0F, 0xBDF1},{0x8E10, 0xBDEE},{0x8E11, 0xE7FB},{0x8E12, 0xE841},{0x8E13, 0xE843},{0x8E14, 0xE840}, - {0x8E15, 0xE7F8},{0x8E16, 0xE7FA},{0x8E17, 0xE845},{0x8E18, 0xE842},{0x8E19, 0xE7FC},{0x8E1A, 0xE846},{0x8E1B, 0xE7F9},{0x8E1C, 0xE844}, - {0x8E1D, 0xBDEF},{0x8E1E, 0xBDF5},{0x8E1F, 0xBDF3},{0x8E20, 0xE7F3},{0x8E21, 0xBDF4},{0x8E22, 0xBDF0},{0x8E23, 0xE7F4},{0x8E24, 0xE7F6}, - {0x8E25, 0xE7F5},{0x8E26, 0xE7FD},{0x8E27, 0xE7FE},{0x8E29, 0xBDF2},{0x8E2B, 0xBDED},{0x8E2E, 0xE7F7},{0x8E30, 0xEBC6},{0x8E31, 0xBFE2}, - {0x8E33, 0xEBBD},{0x8E34, 0xBFE3},{0x8E35, 0xBFE6},{0x8E36, 0xEBC2},{0x8E38, 0xEBBF},{0x8E39, 0xBFE5},{0x8E3C, 0xEBC3},{0x8E3D, 0xEBC4}, - {0x8E3E, 0xEBBE},{0x8E3F, 0xEBC7},{0x8E40, 0xEBC0},{0x8E41, 0xEBC5},{0x8E42, 0xBFE4},{0x8E44, 0xBFE1},{0x8E45, 0xEBC1},{0x8E47, 0xEEBF}, - {0x8E48, 0xC1D0},{0x8E49, 0xC1CE},{0x8E4A, 0xC1D1},{0x8E4B, 0xC1CF},{0x8E4C, 0xEEBE},{0x8E4D, 0xEEBB},{0x8E4E, 0xEEBA},{0x8E50, 0xEEBD}, - {0x8E53, 0xEEBC},{0x8E54, 0xF145},{0x8E55, 0xC2DE},{0x8E56, 0xF0FB},{0x8E57, 0xF0FA},{0x8E59, 0xC2D9},{0x8E5A, 0xF141},{0x8E5B, 0xF140}, - {0x8E5C, 0xF0F7},{0x8E5D, 0xF143},{0x8E5E, 0xF0FC},{0x8E5F, 0xC2DD},{0x8E60, 0xF0F9},{0x8E61, 0xF142},{0x8E62, 0xF0F8},{0x8E63, 0xC2DA}, - {0x8E64, 0xC2DC},{0x8E65, 0xF0FD},{0x8E66, 0xC2DB},{0x8E67, 0xF0FE},{0x8E69, 0xF144},{0x8E6A, 0xF352},{0x8E6C, 0xC3DE},{0x8E6D, 0xF34F}, - {0x8E6F, 0xF353},{0x8E72, 0xC3DB},{0x8E73, 0xF351},{0x8E74, 0xC3E0},{0x8E76, 0xC3DD},{0x8E78, 0xF350},{0x8E7A, 0xC3DF},{0x8E7B, 0xF354}, - {0x8E7C, 0xC3DA},{0x8E81, 0xC4BC},{0x8E82, 0xC4BE},{0x8E84, 0xF4D9},{0x8E85, 0xC4BD},{0x8E86, 0xF4D7},{0x8E87, 0xC3DC},{0x8E88, 0xF4D8}, - {0x8E89, 0xC4BB},{0x8E8A, 0xC543},{0x8E8B, 0xC545},{0x8E8C, 0xF656},{0x8E8D, 0xC544},{0x8E8E, 0xF655},{0x8E90, 0xF761},{0x8E91, 0xC5AD}, - {0x8E92, 0xF760},{0x8E93, 0xC5AE},{0x8E94, 0xF75E},{0x8E95, 0xF75D},{0x8E96, 0xF762},{0x8E97, 0xF763},{0x8E98, 0xF846},{0x8E9A, 0xF75F}, - {0x8E9D, 0xF8C6},{0x8E9E, 0xF8C3},{0x8E9F, 0xF8C4},{0x8EA0, 0xF8C5},{0x8EA1, 0xC65C},{0x8EA3, 0xF951},{0x8EA4, 0xF950},{0x8EA5, 0xF94F}, - {0x8EA6, 0xF970},{0x8EA8, 0xF9BE},{0x8EA9, 0xF9AB},{0x8EAA, 0xC66E},{0x8EAB, 0xA8AD},{0x8EAC, 0xB060},{0x8EB2, 0xB8FA},{0x8EBA, 0xBDF6}, - {0x8EBD, 0xEBC8},{0x8EC0, 0xC2DF},{0x8EC2, 0xF355},{0x8EC9, 0xF9AC},{0x8ECA, 0xA8AE},{0x8ECB, 0xAAEE},{0x8ECC, 0xAD79},{0x8ECD, 0xAD78}, - {0x8ECF, 0xB063},{0x8ED1, 0xD3E8},{0x8ED2, 0xB061},{0x8ED3, 0xD3E9},{0x8ED4, 0xB062},{0x8ED7, 0xD7DF},{0x8ED8, 0xD7DB},{0x8EDB, 0xB36D}, - {0x8EDC, 0xD7DE},{0x8EDD, 0xD7DD},{0x8EDE, 0xD7DC},{0x8EDF, 0xB36E},{0x8EE0, 0xD7E0},{0x8EE1, 0xD7E1},{0x8EE5, 0xDC43},{0x8EE6, 0xDC41}, - {0x8EE7, 0xDC45},{0x8EE8, 0xDC46},{0x8EE9, 0xDC4C},{0x8EEB, 0xDC48},{0x8EEC, 0xDC4A},{0x8EEE, 0xDC42},{0x8EEF, 0xDBFC},{0x8EF1, 0xDC49}, - {0x8EF4, 0xDC4B},{0x8EF5, 0xDC44},{0x8EF6, 0xDC47},{0x8EF7, 0xDBFD},{0x8EF8, 0xB662},{0x8EF9, 0xDC40},{0x8EFA, 0xDBFE},{0x8EFB, 0xB661}, - {0x8EFC, 0xB663},{0x8EFE, 0xB8FD},{0x8EFF, 0xE075},{0x8F00, 0xE077},{0x8F01, 0xE076},{0x8F02, 0xE07B},{0x8F03, 0xB8FB},{0x8F05, 0xE078}, - {0x8F06, 0xE074},{0x8F07, 0xE079},{0x8F08, 0xE07A},{0x8F09, 0xB8FC},{0x8F0A, 0xB8FE},{0x8F0B, 0xE07C},{0x8F0D, 0xE467},{0x8F0E, 0xE466}, - {0x8F10, 0xE464},{0x8F11, 0xE465},{0x8F12, 0xBBB3},{0x8F13, 0xBBB5},{0x8F14, 0xBBB2},{0x8F15, 0xBBB4},{0x8F16, 0xE84D},{0x8F17, 0xE84E}, - {0x8F18, 0xE849},{0x8F1A, 0xE84A},{0x8F1B, 0xBDF8},{0x8F1C, 0xBDFD},{0x8F1D, 0xBDF7},{0x8F1E, 0xBDFE},{0x8F1F, 0xBDF9},{0x8F20, 0xE84B}, - {0x8F23, 0xE84C},{0x8F24, 0xE848},{0x8F25, 0xBE40},{0x8F26, 0xBDFB},{0x8F29, 0xBDFA},{0x8F2A, 0xBDFC},{0x8F2C, 0xE847},{0x8F2E, 0xEBCA}, - {0x8F2F, 0xBFE8},{0x8F32, 0xEBCC},{0x8F33, 0xBFEA},{0x8F34, 0xEBCF},{0x8F35, 0xEBCB},{0x8F36, 0xEBC9},{0x8F37, 0xEBCE},{0x8F38, 0xBFE9}, - {0x8F39, 0xEBCD},{0x8F3B, 0xBFE7},{0x8F3E, 0xC1D3},{0x8F3F, 0xC1D6},{0x8F40, 0xEEC1},{0x8F42, 0xC1D4},{0x8F43, 0xEEC0},{0x8F44, 0xC1D2}, - {0x8F45, 0xC1D5},{0x8F46, 0xF146},{0x8F47, 0xF147},{0x8F48, 0xF148},{0x8F49, 0xC2E0},{0x8F4B, 0xF149},{0x8F4D, 0xC2E1},{0x8F4E, 0xC3E2}, - {0x8F4F, 0xF358},{0x8F50, 0xF359},{0x8F51, 0xF357},{0x8F52, 0xF356},{0x8F53, 0xF35A},{0x8F54, 0xC3E1},{0x8F55, 0xF4DD},{0x8F56, 0xF4DB}, - {0x8F57, 0xF4DC},{0x8F58, 0xF4DE},{0x8F59, 0xF4DA},{0x8F5A, 0xF4DF},{0x8F5B, 0xF658},{0x8F5D, 0xF659},{0x8F5E, 0xF657},{0x8F5F, 0xC546}, - {0x8F60, 0xF764},{0x8F61, 0xC5AF},{0x8F62, 0xF765},{0x8F63, 0xF848},{0x8F64, 0xF847},{0x8F9B, 0xA8AF},{0x8F9C, 0xB664},{0x8F9F, 0xB940}, - {0x8FA3, 0xBBB6},{0x8FA6, 0xBFEC},{0x8FA8, 0xBFEB},{0x8FAD, 0xC3E3},{0x8FAE, 0xC47C},{0x8FAF, 0xC547},{0x8FB0, 0xA8B0},{0x8FB1, 0xB064}, - {0x8FB2, 0xB941},{0x8FB4, 0xF35B},{0x8FBF, 0xCBA6},{0x8FC2, 0xA8B1},{0x8FC4, 0xA8B4},{0x8FC5, 0xA8B3},{0x8FC6, 0xA8B2},{0x8FC9, 0xCBA5}, - {0x8FCB, 0xCDCD},{0x8FCD, 0xCDCF},{0x8FCE, 0xAAEF},{0x8FD1, 0xAAF1},{0x8FD2, 0xCDCC},{0x8FD3, 0xCDCE},{0x8FD4, 0xAAF0},{0x8FD5, 0xCDD1}, - {0x8FD6, 0xCDD0},{0x8FD7, 0xCDD2},{0x8FE0, 0xD0B6},{0x8FE1, 0xD0B4},{0x8FE2, 0xAD7C},{0x8FE3, 0xD0B3},{0x8FE4, 0xADA3},{0x8FE5, 0xAD7E}, - {0x8FE6, 0xAD7B},{0x8FE8, 0xADA4},{0x8FEA, 0xAD7D},{0x8FEB, 0xADA2},{0x8FED, 0xADA1},{0x8FEE, 0xD0B5},{0x8FF0, 0xAD7A},{0x8FF4, 0xB06A}, - {0x8FF5, 0xD3EB},{0x8FF6, 0xD3F1},{0x8FF7, 0xB067},{0x8FF8, 0xB06E},{0x8FFA, 0xB069},{0x8FFB, 0xD3EE},{0x8FFC, 0xD3F0},{0x8FFD, 0xB06C}, - {0x8FFE, 0xD3EA},{0x8FFF, 0xD3ED},{0x9000, 0xB068},{0x9001, 0xB065},{0x9002, 0xD3EC},{0x9003, 0xB06B},{0x9004, 0xD3EF},{0x9005, 0xB06D}, - {0x9006, 0xB066},{0x900B, 0xD7E3},{0x900C, 0xD7E6},{0x900D, 0xB370},{0x900F, 0xB37A},{0x9010, 0xB376},{0x9011, 0xD7E4},{0x9014, 0xB37E}, - {0x9015, 0xB377},{0x9016, 0xB37C},{0x9017, 0xB372},{0x9019, 0xB36F},{0x901A, 0xB371},{0x901B, 0xB37D},{0x901C, 0xD7E5},{0x901D, 0xB375}, - {0x901E, 0xB378},{0x901F, 0xB374},{0x9020, 0xB379},{0x9021, 0xD7E7},{0x9022, 0xB37B},{0x9023, 0xB373},{0x9024, 0xD7E2},{0x902D, 0xDC4D}, - {0x902E, 0xB665},{0x902F, 0xDC4F},{0x9031, 0xB667},{0x9032, 0xB669},{0x9034, 0xDC4E},{0x9035, 0xB666},{0x9036, 0xB66A},{0x9038, 0xB668}, - {0x903C, 0xB947},{0x903D, 0xE0A3},{0x903E, 0xB94F},{0x903F, 0xE07E},{0x9041, 0xB950},{0x9042, 0xB945},{0x9044, 0xE0A1},{0x9047, 0xB94A}, - {0x9049, 0xE0A2},{0x904A, 0xB943},{0x904B, 0xB942},{0x904D, 0xB94D},{0x904E, 0xB94C},{0x904F, 0xB94B},{0x9050, 0xB949},{0x9051, 0xB94E}, - {0x9052, 0xE07D},{0x9053, 0xB944},{0x9054, 0xB946},{0x9055, 0xB948},{0x9058, 0xBBB8},{0x9059, 0xBBBB},{0x905B, 0xBBBF},{0x905C, 0xBBB9}, - {0x905D, 0xBBBE},{0x905E, 0xBBBC},{0x9060, 0xBBB7},{0x9062, 0xBBBD},{0x9063, 0xBBBA},{0x9067, 0xE852},{0x9068, 0xBE43},{0x9069, 0xBE41}, - {0x906B, 0xE853},{0x906D, 0xBE44},{0x906E, 0xBE42},{0x906F, 0xE851},{0x9070, 0xE850},{0x9072, 0xBFF0},{0x9073, 0xE84F},{0x9074, 0xBFEE}, - {0x9075, 0xBFED},{0x9076, 0xEBD0},{0x9077, 0xBE45},{0x9078, 0xBFEF},{0x9079, 0xEBD1},{0x907A, 0xBFF2},{0x907B, 0xEBD2},{0x907C, 0xBFF1}, - {0x907D, 0xC1D8},{0x907E, 0xEEC3},{0x907F, 0xC1D7},{0x9080, 0xC1DC},{0x9081, 0xC1DA},{0x9082, 0xC1DB},{0x9083, 0xC2E3},{0x9084, 0xC1D9}, - {0x9085, 0xEEC2},{0x9086, 0xEBD3},{0x9087, 0xC2E2},{0x9088, 0xC2E4},{0x908A, 0xC3E4},{0x908B, 0xC3E5},{0x908D, 0xF4E0},{0x908F, 0xC5DE}, - {0x9090, 0xC5DD},{0x9091, 0xA8B6},{0x9094, 0xCA55},{0x9095, 0xB06F},{0x9097, 0xCA52},{0x9098, 0xCA53},{0x9099, 0xCA51},{0x909B, 0xCA54}, - {0x909E, 0xCBAA},{0x909F, 0xCBA7},{0x90A0, 0xCBAC},{0x90A1, 0xCBA8},{0x90A2, 0xA8B7},{0x90A3, 0xA8BA},{0x90A5, 0xCBA9},{0x90A6, 0xA8B9}, - {0x90A7, 0xCBAB},{0x90AA, 0xA8B8},{0x90AF, 0xCDD5},{0x90B0, 0xCDD7},{0x90B1, 0xAAF4},{0x90B2, 0xCDD3},{0x90B3, 0xCDD6},{0x90B4, 0xCDD4}, - {0x90B5, 0xAAF2},{0x90B6, 0xAAF5},{0x90B8, 0xAAF3},{0x90BD, 0xD0B8},{0x90BE, 0xD0BC},{0x90BF, 0xD0B9},{0x90C1, 0xADA7},{0x90C3, 0xADA8}, - {0x90C5, 0xD0BB},{0x90C7, 0xD0BD},{0x90C8, 0xD0BF},{0x90CA, 0xADA5},{0x90CB, 0xD0BE},{0x90CE, 0xADA6},{0x90D4, 0xD7EE},{0x90D5, 0xD0BA}, - {0x90D6, 0xD3F2},{0x90D7, 0xD3FB},{0x90D8, 0xD3F9},{0x90D9, 0xD3F4},{0x90DA, 0xD3F5},{0x90DB, 0xD3FA},{0x90DC, 0xD3FC},{0x90DD, 0xB071}, - {0x90DF, 0xD3F7},{0x90E0, 0xD3F3},{0x90E1, 0xB070},{0x90E2, 0xB072},{0x90E3, 0xD3F6},{0x90E4, 0xD3FD},{0x90E5, 0xD3F8},{0x90E8, 0xB3A1}, - {0x90E9, 0xD7F1},{0x90EA, 0xD7E9},{0x90EB, 0xD7EF},{0x90EC, 0xD7F0},{0x90ED, 0xB3A2},{0x90EF, 0xD7E8},{0x90F0, 0xD7EA},{0x90F1, 0xD0B7}, - {0x90F2, 0xD7EC},{0x90F3, 0xD7ED},{0x90F4, 0xD7EB},{0x90F5, 0xB66C},{0x90F9, 0xDC56},{0x90FA, 0xEBD4},{0x90FB, 0xDC57},{0x90FC, 0xDC54}, - {0x90FD, 0xB3A3},{0x90FE, 0xB66E},{0x90FF, 0xDC53},{0x9100, 0xDC59},{0x9101, 0xDC58},{0x9102, 0xB66B},{0x9103, 0xDC5C},{0x9104, 0xDC52}, - {0x9105, 0xDC5B},{0x9106, 0xDC50},{0x9107, 0xDC5A},{0x9108, 0xDC55},{0x9109, 0xB66D},{0x910B, 0xE0AA},{0x910D, 0xE0A5},{0x910E, 0xE0AB}, - {0x910F, 0xE0A6},{0x9110, 0xE0A4},{0x9111, 0xE0A7},{0x9112, 0xB951},{0x9114, 0xE0A9},{0x9116, 0xE0A8},{0x9117, 0xB952},{0x9118, 0xBBC1}, - {0x9119, 0xBBC0},{0x911A, 0xE46E},{0x911B, 0xE471},{0x911C, 0xE469},{0x911D, 0xE46D},{0x911E, 0xBBC2},{0x911F, 0xE46C},{0x9120, 0xE46A}, - {0x9121, 0xE470},{0x9122, 0xE46B},{0x9123, 0xE468},{0x9124, 0xE46F},{0x9126, 0xE859},{0x9127, 0xBE48},{0x9128, 0xF14A},{0x9129, 0xE856}, - {0x912A, 0xE857},{0x912B, 0xE855},{0x912C, 0xDC51},{0x912D, 0xBE47},{0x912E, 0xE85A},{0x912F, 0xE854},{0x9130, 0xBE46},{0x9131, 0xBE49}, - {0x9132, 0xE858},{0x9133, 0xEBD5},{0x9134, 0xBFF3},{0x9135, 0xEBD6},{0x9136, 0xEBD7},{0x9138, 0xEEC4},{0x9139, 0xC1DD},{0x913A, 0xF14B}, - {0x913B, 0xF14C},{0x913E, 0xF14D},{0x913F, 0xF35D},{0x9140, 0xF35C},{0x9141, 0xF4E2},{0x9143, 0xF4E1},{0x9144, 0xF65B},{0x9145, 0xF65C}, - {0x9146, 0xF65A},{0x9147, 0xF766},{0x9148, 0xC5B0},{0x9149, 0xA8BB},{0x914A, 0xADAA},{0x914B, 0xADA9},{0x914C, 0xB075},{0x914D, 0xB074}, - {0x914E, 0xD440},{0x914F, 0xD441},{0x9150, 0xD3FE},{0x9152, 0xB073},{0x9153, 0xD7F5},{0x9155, 0xD7F6},{0x9156, 0xD7F2},{0x9157, 0xB3A4}, - {0x9158, 0xD7F3},{0x915A, 0xD7F4},{0x915F, 0xDC5F},{0x9160, 0xDC61},{0x9161, 0xDC5D},{0x9162, 0xDC60},{0x9163, 0xB66F},{0x9164, 0xDC5E}, - {0x9165, 0xB670},{0x9168, 0xDD73},{0x9169, 0xB955},{0x916A, 0xB954},{0x916C, 0xB953},{0x916E, 0xE0AC},{0x916F, 0xE0AD},{0x9172, 0xE473}, - {0x9173, 0xE475},{0x9174, 0xBBC6},{0x9175, 0xBBC3},{0x9177, 0xBBC5},{0x9178, 0xBBC4},{0x9179, 0xE474},{0x917A, 0xE472},{0x9180, 0xE861}, - {0x9181, 0xE85E},{0x9182, 0xE85F},{0x9183, 0xBE4D},{0x9184, 0xE860},{0x9185, 0xE85B},{0x9186, 0xE85C},{0x9187, 0xBE4A},{0x9189, 0xBE4B}, - {0x918A, 0xE85D},{0x918B, 0xBE4C},{0x918D, 0xEBDB},{0x918F, 0xEBDC},{0x9190, 0xEBD9},{0x9191, 0xEBDA},{0x9192, 0xBFF4},{0x9193, 0xEBD8}, - {0x9199, 0xEEC8},{0x919A, 0xEEC5},{0x919B, 0xEEC7},{0x919C, 0xC1E0},{0x919D, 0xEECB},{0x919E, 0xC1DF},{0x919F, 0xEEC9},{0x91A0, 0xEECC}, - {0x91A1, 0xEECA},{0x91A2, 0xEEC6},{0x91A3, 0xC1DE},{0x91A5, 0xF14F},{0x91A7, 0xF150},{0x91A8, 0xF14E},{0x91AA, 0xF152},{0x91AB, 0xC2E5}, - {0x91AC, 0xC2E6},{0x91AD, 0xF35F},{0x91AE, 0xC3E7},{0x91AF, 0xF151},{0x91B0, 0xF35E},{0x91B1, 0xC3E6},{0x91B2, 0xF4E5},{0x91B3, 0xF4E6}, - {0x91B4, 0xC4BF},{0x91B5, 0xF4E4},{0x91B7, 0xF4E3},{0x91B9, 0xF65D},{0x91BA, 0xC548},{0x91BC, 0xF849},{0x91BD, 0xF8C8},{0x91BE, 0xF8C7}, - {0x91C0, 0xC643},{0x91C1, 0xC65D},{0x91C2, 0xF8C9},{0x91C3, 0xF971},{0x91C5, 0xC66F},{0x91C6, 0xA8BC},{0x91C7, 0xAAF6},{0x91C9, 0xB956}, - {0x91CB, 0xC4C0},{0x91CC, 0xA8BD},{0x91CD, 0xADAB},{0x91CE, 0xB3A5},{0x91CF, 0xB671},{0x91D0, 0xC2E7},{0x91D1, 0xAAF7},{0x91D3, 0xD0C1}, - {0x91D4, 0xD0C0},{0x91D5, 0xD442},{0x91D7, 0xB078},{0x91D8, 0xB076},{0x91D9, 0xB07A},{0x91DA, 0xD444},{0x91DC, 0xB079},{0x91DD, 0xB077}, - {0x91E2, 0xD443},{0x91E3, 0xB3A8},{0x91E4, 0xD7FC},{0x91E6, 0xB3A7},{0x91E7, 0xB3A9},{0x91E8, 0xD842},{0x91E9, 0xB3AB},{0x91EA, 0xD7FE}, - {0x91EB, 0xD840},{0x91EC, 0xD7F7},{0x91ED, 0xB3AA},{0x91EE, 0xD843},{0x91F1, 0xD7F9},{0x91F3, 0xD7FA},{0x91F4, 0xD7F8},{0x91F5, 0xB3A6}, - {0x91F7, 0xD841},{0x91F8, 0xD7FB},{0x91F9, 0xD7FD},{0x91FD, 0xDC6D},{0x91FF, 0xDC6C},{0x9200, 0xDC6A},{0x9201, 0xDC62},{0x9202, 0xDC71}, - {0x9203, 0xDC65},{0x9204, 0xDC6F},{0x9205, 0xDC76},{0x9206, 0xDC6E},{0x9207, 0xB679},{0x9209, 0xB675},{0x920A, 0xDC63},{0x920C, 0xDC69}, - {0x920D, 0xB677},{0x920F, 0xDC68},{0x9210, 0xB678},{0x9211, 0xB67A},{0x9212, 0xDC6B},{0x9214, 0xB672},{0x9215, 0xB673},{0x9216, 0xDC77}, - {0x9217, 0xDC75},{0x9219, 0xDC74},{0x921A, 0xDC66},{0x921C, 0xDC72},{0x921E, 0xB676},{0x9223, 0xB674},{0x9224, 0xDC73},{0x9225, 0xDC64}, - {0x9226, 0xDC67},{0x9227, 0xDC70},{0x922D, 0xE4BA},{0x922E, 0xE0B7},{0x9230, 0xE0B0},{0x9231, 0xE0C3},{0x9232, 0xE0CC},{0x9233, 0xE0B3}, - {0x9234, 0xB961},{0x9236, 0xE0C0},{0x9237, 0xB957},{0x9238, 0xB959},{0x9239, 0xB965},{0x923A, 0xE0B1},{0x923D, 0xB95A},{0x923E, 0xB95C}, - {0x923F, 0xB966},{0x9240, 0xB95B},{0x9245, 0xB964},{0x9246, 0xE0B9},{0x9248, 0xE0AE},{0x9249, 0xB962},{0x924A, 0xE0B8},{0x924B, 0xB95E}, - {0x924C, 0xE0CA},{0x924D, 0xB963},{0x924E, 0xE0C8},{0x924F, 0xE0BC},{0x9250, 0xE0C6},{0x9251, 0xB960},{0x9252, 0xE0AF},{0x9253, 0xE0C9}, - {0x9254, 0xE0C4},{0x9256, 0xE0CB},{0x9257, 0xB958},{0x925A, 0xB967},{0x925B, 0xB95D},{0x925E, 0xE0B5},{0x9260, 0xE0BD},{0x9261, 0xE0C1}, - {0x9263, 0xE0C5},{0x9264, 0xB95F},{0x9265, 0xE0B4},{0x9266, 0xE0B2},{0x9267, 0xE0BE},{0x926C, 0xE0BB},{0x926D, 0xE0BA},{0x926F, 0xE0BF}, - {0x9270, 0xE0C2},{0x9272, 0xE0C7},{0x9276, 0xE478},{0x9278, 0xBBC7},{0x9279, 0xE4A4},{0x927A, 0xE47A},{0x927B, 0xBBCC},{0x927C, 0xBBD0}, - {0x927D, 0xE4AD},{0x927E, 0xE4B5},{0x927F, 0xE4A6},{0x9280, 0xBBC8},{0x9282, 0xE4AA},{0x9283, 0xE0B6},{0x9285, 0xBBC9},{0x9286, 0xE4B1}, - {0x9287, 0xE4B6},{0x9288, 0xE4AE},{0x928A, 0xE4B0},{0x928B, 0xE4B9},{0x928C, 0xE4B2},{0x928D, 0xE47E},{0x928E, 0xE4A9},{0x9291, 0xBBD1}, - {0x9293, 0xBBCD},{0x9294, 0xE47C},{0x9295, 0xE4AB},{0x9296, 0xBBCB},{0x9297, 0xE4A5},{0x9298, 0xBBCA},{0x9299, 0xE4B3},{0x929A, 0xE4A2}, - {0x929B, 0xE479},{0x929C, 0xBBCE},{0x929D, 0xE4B8},{0x92A0, 0xE47B},{0x92A1, 0xE4AF},{0x92A2, 0xE4AC},{0x92A3, 0xE4A7},{0x92A4, 0xE477}, - {0x92A5, 0xE476},{0x92A6, 0xE4A1},{0x92A7, 0xE4B4},{0x92A8, 0xBBCF},{0x92A9, 0xE4B7},{0x92AA, 0xE47D},{0x92AB, 0xE4A3},{0x92AC, 0xBE52}, - {0x92B2, 0xBE5A},{0x92B3, 0xBE55},{0x92B4, 0xE8A4},{0x92B5, 0xE8A1},{0x92B6, 0xE867},{0x92B7, 0xBE50},{0x92BB, 0xBE4F},{0x92BC, 0xBE56}, - {0x92C0, 0xE865},{0x92C1, 0xBE54},{0x92C2, 0xE871},{0x92C3, 0xE863},{0x92C4, 0xE864},{0x92C5, 0xBE4E},{0x92C6, 0xE8A3},{0x92C7, 0xBE58}, - {0x92C8, 0xE874},{0x92C9, 0xE879},{0x92CA, 0xE873},{0x92CB, 0xEBEE},{0x92CC, 0xE86F},{0x92CD, 0xE877},{0x92CE, 0xE875},{0x92CF, 0xE868}, - {0x92D0, 0xE862},{0x92D1, 0xE87D},{0x92D2, 0xBE57},{0x92D3, 0xE87E},{0x92D5, 0xE878},{0x92D7, 0xE86D},{0x92D8, 0xE86B},{0x92D9, 0xE866}, - {0x92DD, 0xE86E},{0x92DE, 0xE87B},{0x92DF, 0xE86A},{0x92E0, 0xE87A},{0x92E1, 0xE8A2},{0x92E4, 0xBE53},{0x92E6, 0xE876},{0x92E7, 0xE87C}, - {0x92E8, 0xE872},{0x92E9, 0xE86C},{0x92EA, 0xBE51},{0x92EE, 0xE4A8},{0x92EF, 0xE870},{0x92F0, 0xBE59},{0x92F1, 0xE869},{0x92F7, 0xEBF4}, - {0x92F8, 0xBFF7},{0x92F9, 0xEBF3},{0x92FA, 0xEBF0},{0x92FB, 0xEC44},{0x92FC, 0xBFFB},{0x92FE, 0xEC41},{0x92FF, 0xEBF8},{0x9300, 0xEC43}, - {0x9301, 0xEBE9},{0x9302, 0xEBF6},{0x9304, 0xBFFD},{0x9306, 0xEBE1},{0x9308, 0xEBDF},{0x9309, 0xEC42},{0x930B, 0xEC40},{0x930C, 0xEBFE}, - {0x930D, 0xEBED},{0x930E, 0xEBEC},{0x930F, 0xEBE2},{0x9310, 0xC040},{0x9312, 0xEBE8},{0x9313, 0xEBF2},{0x9314, 0xEBFD},{0x9315, 0xC043}, - {0x9316, 0xEC45},{0x9318, 0xC1E8},{0x9319, 0xC045},{0x931A, 0xBFFE},{0x931B, 0xEBE6},{0x931D, 0xEBEF},{0x931E, 0xEBDE},{0x931F, 0xEBE0}, - {0x9320, 0xBFF5},{0x9321, 0xC042},{0x9322, 0xBFFA},{0x9323, 0xEBE7},{0x9324, 0xEBF7},{0x9325, 0xEBF1},{0x9326, 0xC041},{0x9327, 0xEBDD}, - {0x9328, 0xC1E3},{0x9329, 0xEBF9},{0x932A, 0xEBFC},{0x932B, 0xBFFC},{0x932D, 0xEBEB},{0x932E, 0xC044},{0x932F, 0xBFF9},{0x9333, 0xBFF8}, - {0x9334, 0xEBF5},{0x9335, 0xEBFB},{0x9336, 0xBFF6},{0x9338, 0xEBE4},{0x9339, 0xEBFA},{0x933C, 0xEBE5},{0x9346, 0xEBEA},{0x9347, 0xEED2}, - {0x9349, 0xEED7},{0x934A, 0xC1E5},{0x934B, 0xC1E7},{0x934C, 0xEEDD},{0x934D, 0xC1E1},{0x934E, 0xEEEC},{0x934F, 0xEEE3},{0x9350, 0xEED8}, - {0x9351, 0xEED9},{0x9352, 0xEEE2},{0x9354, 0xC1EE},{0x9355, 0xEEE1},{0x9356, 0xEED1},{0x9357, 0xEEE0},{0x9358, 0xEED4},{0x9359, 0xEEED}, - {0x935A, 0xC1ED},{0x935B, 0xC1EB},{0x935C, 0xEED5},{0x935E, 0xEEE8},{0x9360, 0xEEDA},{0x9361, 0xEEE7},{0x9363, 0xEEE9},{0x9364, 0xEED0}, - {0x9365, 0xC1E6},{0x9367, 0xEEEA},{0x936A, 0xEEDE},{0x936C, 0xC1EA},{0x936D, 0xEEDB},{0x9370, 0xC1EC},{0x9371, 0xEEE4},{0x9375, 0xC1E4}, - {0x9376, 0xEED6},{0x9377, 0xEEE5},{0x9379, 0xEEDF},{0x937A, 0xEBE3},{0x937B, 0xEEE6},{0x937C, 0xEED3},{0x937E, 0xC1E9},{0x9380, 0xEEEB}, - {0x9382, 0xC1E2},{0x9383, 0xEECE},{0x9388, 0xF160},{0x9389, 0xF159},{0x938A, 0xC2E9},{0x938C, 0xF154},{0x938D, 0xF163},{0x938E, 0xF15B}, - {0x938F, 0xEEDC},{0x9391, 0xF165},{0x9392, 0xF155},{0x9394, 0xC2E8},{0x9395, 0xF15F},{0x9396, 0xC2EA},{0x9397, 0xC2F2},{0x9398, 0xC2F0}, - {0x9399, 0xF161},{0x939A, 0xC2F1},{0x939B, 0xF157},{0x939D, 0xF158},{0x939E, 0xF15D},{0x939F, 0xF162},{0x93A1, 0xEECD},{0x93A2, 0xC2EB}, - {0x93A3, 0xF16A},{0x93A4, 0xF167},{0x93A5, 0xF16B},{0x93A6, 0xF15E},{0x93A7, 0xF15A},{0x93A8, 0xF168},{0x93A9, 0xF36A},{0x93AA, 0xF15C}, - {0x93AC, 0xC2EE},{0x93AE, 0xC2ED},{0x93AF, 0xEECF},{0x93B0, 0xC2EF},{0x93B1, 0xF164},{0x93B2, 0xF166},{0x93B3, 0xC2EC},{0x93B4, 0xF169}, - {0x93B5, 0xF153},{0x93B7, 0xF156},{0x93C0, 0xF373},{0x93C2, 0xF363},{0x93C3, 0xC3EB},{0x93C4, 0xF371},{0x93C7, 0xF361},{0x93C8, 0xC3EC}, - {0x93CA, 0xF36C},{0x93CC, 0xF368},{0x93CD, 0xC3F1},{0x93CE, 0xF372},{0x93CF, 0xF362},{0x93D0, 0xF365},{0x93D1, 0xC3E9},{0x93D2, 0xF374}, - {0x93D4, 0xF36D},{0x93D5, 0xF370},{0x93D6, 0xC3EF},{0x93D7, 0xC3F4},{0x93D8, 0xC3F2},{0x93D9, 0xF369},{0x93DA, 0xF364},{0x93DC, 0xC3ED}, - {0x93DD, 0xC3EE},{0x93DE, 0xF360},{0x93DF, 0xC3EA},{0x93E1, 0xC3E8},{0x93E2, 0xC3F0},{0x93E3, 0xF36F},{0x93E4, 0xC3F3},{0x93E6, 0xF36B}, - {0x93E7, 0xF375},{0x93E8, 0xC3F5},{0x93EC, 0xF367},{0x93EE, 0xF36E},{0x93F5, 0xF4F3},{0x93F6, 0xF542},{0x93F7, 0xF4F5},{0x93F8, 0xF4FC}, - {0x93F9, 0xF366},{0x93FA, 0xF4FA},{0x93FB, 0xF4E9},{0x93FC, 0xF540},{0x93FD, 0xC4C3},{0x93FE, 0xF4ED},{0x93FF, 0xF4FE},{0x9400, 0xF4F4}, - {0x9403, 0xC4C2},{0x9406, 0xF544},{0x9407, 0xF4F6},{0x9409, 0xF4FB},{0x940A, 0xF4FD},{0x940B, 0xF4E7},{0x940C, 0xF541},{0x940D, 0xF4F2}, - {0x940E, 0xF4F7},{0x940F, 0xF4EB},{0x9410, 0xF4EF},{0x9411, 0xF543},{0x9412, 0xF4F9},{0x9413, 0xF4E8},{0x9414, 0xF4EC},{0x9415, 0xF4EE}, - {0x9416, 0xF4F8},{0x9418, 0xC4C1},{0x9419, 0xF4F1},{0x9420, 0xF4EA},{0x9428, 0xF4F0},{0x9429, 0xF661},{0x942A, 0xF666},{0x942B, 0xC54F}, - {0x942C, 0xF668},{0x942E, 0xC549},{0x9430, 0xF664},{0x9431, 0xF66A},{0x9432, 0xC54E},{0x9433, 0xC54A},{0x9435, 0xC54B},{0x9436, 0xF660}, - {0x9437, 0xF667},{0x9438, 0xC54D},{0x9439, 0xF665},{0x943A, 0xC54C},{0x943B, 0xF65F},{0x943C, 0xF663},{0x943D, 0xF662},{0x943F, 0xF65E}, - {0x9440, 0xF669},{0x9444, 0xC5B1},{0x9445, 0xF76D},{0x9446, 0xF770},{0x9447, 0xF76C},{0x9448, 0xF76E},{0x9449, 0xF76F},{0x944A, 0xF769}, - {0x944B, 0xF76A},{0x944C, 0xF767},{0x944F, 0xF76B},{0x9450, 0xF768},{0x9451, 0xC5B2},{0x9452, 0xC5B3},{0x9455, 0xF84B},{0x9457, 0xF84D}, - {0x945D, 0xF84C},{0x945E, 0xF84E},{0x9460, 0xC5E0},{0x9462, 0xF84A},{0x9463, 0xC5DF},{0x9464, 0xC5E1},{0x9468, 0xF8CB},{0x9469, 0xF8CC}, - {0x946A, 0xC644},{0x946B, 0xF8CA},{0x946D, 0xF953},{0x946E, 0xF952},{0x946F, 0xF954},{0x9470, 0xC65F},{0x9471, 0xF955},{0x9472, 0xC65E}, - {0x9473, 0xF956},{0x9474, 0xF972},{0x9475, 0xF975},{0x9476, 0xF974},{0x9477, 0xC668},{0x9478, 0xF973},{0x947C, 0xC672},{0x947D, 0xC670}, - {0x947E, 0xC671},{0x947F, 0xC677},{0x9480, 0xF9C0},{0x9481, 0xF9C1},{0x9482, 0xF9BF},{0x9483, 0xF9C9},{0x9577, 0xAAF8},{0x957A, 0xD844}, - {0x957B, 0xDC78},{0x957C, 0xE8A5},{0x957D, 0xF376},{0x9580, 0xAAF9},{0x9582, 0xADAC},{0x9583, 0xB07B},{0x9586, 0xD845},{0x9588, 0xD846}, - {0x9589, 0xB3AC},{0x958B, 0xB67D},{0x958C, 0xDC7A},{0x958D, 0xDC79},{0x958E, 0xB6A3},{0x958F, 0xB67C},{0x9590, 0xDC7B},{0x9591, 0xB67E}, - {0x9592, 0xB6A2},{0x9593, 0xB6A1},{0x9594, 0xB67B},{0x9598, 0xB968},{0x959B, 0xE0D0},{0x959C, 0xE0CE},{0x959E, 0xE0CF},{0x959F, 0xE0CD}, - {0x95A1, 0xBBD2},{0x95A3, 0xBBD5},{0x95A4, 0xBBD7},{0x95A5, 0xBBD6},{0x95A8, 0xBBD3},{0x95A9, 0xBBD4},{0x95AB, 0xE8A7},{0x95AC, 0xE8A6}, - {0x95AD, 0xBE5B},{0x95AE, 0xE8A8},{0x95B0, 0xE8A9},{0x95B1, 0xBE5C},{0x95B5, 0xEC4D},{0x95B6, 0xEC4B},{0x95B7, 0xEEF3},{0x95B9, 0xEC49}, - {0x95BA, 0xEC4A},{0x95BB, 0xC046},{0x95BC, 0xEC46},{0x95BD, 0xEC4E},{0x95BE, 0xEC48},{0x95BF, 0xEC4C},{0x95C0, 0xEEEF},{0x95C3, 0xEEF1}, - {0x95C5, 0xEEF2},{0x95C6, 0xC1F3},{0x95C7, 0xEEEE},{0x95C8, 0xC1F2},{0x95C9, 0xEEF0},{0x95CA, 0xC1EF},{0x95CB, 0xC1F0},{0x95CC, 0xC1F1}, - {0x95CD, 0xEC47},{0x95D0, 0xC2F5},{0x95D1, 0xF16E},{0x95D2, 0xF16C},{0x95D3, 0xF16D},{0x95D4, 0xC2F3},{0x95D5, 0xC2F6},{0x95D6, 0xC2F4}, - {0x95DA, 0xF377},{0x95DB, 0xF378},{0x95DC, 0xC3F6},{0x95DE, 0xF545},{0x95DF, 0xF547},{0x95E0, 0xF546},{0x95E1, 0xC4C4},{0x95E2, 0xC550}, - {0x95E3, 0xF66D},{0x95E4, 0xF66C},{0x95E5, 0xF66B},{0x961C, 0xAAFA},{0x961E, 0xC9AA},{0x9620, 0xCA58},{0x9621, 0xA6E9},{0x9622, 0xCA56}, - {0x9623, 0xCA59},{0x9624, 0xCA57},{0x9628, 0xCBAE},{0x962A, 0xA8C1},{0x962C, 0xA8C2},{0x962D, 0xCBB0},{0x962E, 0xA8BF},{0x962F, 0xCBAF}, - {0x9630, 0xCBAD},{0x9631, 0xA8C0},{0x9632, 0xA8BE},{0x9639, 0xCDD8},{0x963A, 0xCDDB},{0x963B, 0xAAFD},{0x963C, 0xCDDA},{0x963D, 0xCDD9}, - {0x963F, 0xAAFC},{0x9640, 0xAAFB},{0x9642, 0xAB40},{0x9643, 0xCDDC},{0x9644, 0xAAFE},{0x964A, 0xD0C6},{0x964B, 0xADAE},{0x964C, 0xADAF}, - {0x964D, 0xADB0},{0x964E, 0xD0C7},{0x964F, 0xD0C3},{0x9650, 0xADAD},{0x9651, 0xD0C4},{0x9653, 0xD0C5},{0x9654, 0xD0C2},{0x9658, 0xB0A4}, - {0x965B, 0xB0A1},{0x965C, 0xD445},{0x965D, 0xB0A2},{0x965E, 0xB0A5},{0x965F, 0xD446},{0x9661, 0xB07E},{0x9662, 0xB07C},{0x9663, 0xB07D}, - {0x9664, 0xB0A3},{0x966A, 0xB3AD},{0x966B, 0xD849},{0x966C, 0xB3B5},{0x966D, 0xD848},{0x966F, 0xD84B},{0x9670, 0xB3B1},{0x9671, 0xD84A}, - {0x9672, 0xB6AB},{0x9673, 0xB3AF},{0x9674, 0xB3B2},{0x9675, 0xB3AE},{0x9676, 0xB3B3},{0x9677, 0xB3B4},{0x9678, 0xB3B0},{0x967C, 0xD847}, - {0x967D, 0xB6A7},{0x967E, 0xDC7D},{0x9680, 0xDCA3},{0x9683, 0xDCA2},{0x9684, 0xB6AC},{0x9685, 0xB6A8},{0x9686, 0xB6A9},{0x9687, 0xDC7C}, - {0x9688, 0xDC7E},{0x9689, 0xDCA1},{0x968A, 0xB6A4},{0x968B, 0xB6A6},{0x968D, 0xB6AA},{0x968E, 0xB6A5},{0x9691, 0xE0D3},{0x9692, 0xE0D1}, - {0x9693, 0xE0D2},{0x9694, 0xB96A},{0x9695, 0xB96B},{0x9697, 0xE0D4},{0x9698, 0xB969},{0x9699, 0xBBD8},{0x969B, 0xBBDA},{0x969C, 0xBBD9}, - {0x969E, 0xE4BB},{0x96A1, 0xE4BC},{0x96A2, 0xE8AB},{0x96A4, 0xE8AA},{0x96A7, 0xC047},{0x96A8, 0xC048},{0x96A9, 0xEC4F},{0x96AA, 0xC049}, - {0x96AC, 0xEEF6},{0x96AE, 0xEEF4},{0x96B0, 0xEEF5},{0x96B1, 0xC1F4},{0x96B3, 0xF16F},{0x96B4, 0xC3F7},{0x96B8, 0xC1F5},{0x96B9, 0xAB41}, - {0x96BB, 0xB0A6},{0x96BC, 0xD447},{0x96BF, 0xD84C},{0x96C0, 0xB3B6},{0x96C1, 0xB6AD},{0x96C2, 0xDCA4},{0x96C3, 0xDCA6},{0x96C4, 0xB6AF}, - {0x96C5, 0xB6AE},{0x96C6, 0xB6B0},{0x96C7, 0xB6B1},{0x96C8, 0xDCA5},{0x96C9, 0xB96E},{0x96CA, 0xB96F},{0x96CB, 0xB96D},{0x96CC, 0xBBDB}, - {0x96CD, 0xB96C},{0x96CE, 0xE0D5},{0x96D2, 0xBBDC},{0x96D3, 0xE8AC},{0x96D4, 0xEC50},{0x96D5, 0xC04A},{0x96D6, 0xC1F6},{0x96D7, 0xF170}, - {0x96D8, 0xF174},{0x96D9, 0xC2F9},{0x96DA, 0xF171},{0x96DB, 0xC2FA},{0x96DC, 0xC2F8},{0x96DD, 0xF175},{0x96DE, 0xC2FB},{0x96DF, 0xF173}, - {0x96E1, 0xF379},{0x96E2, 0xC2F7},{0x96E3, 0xC3F8},{0x96E5, 0xF8CD},{0x96E8, 0xAB42},{0x96E9, 0xB3B8},{0x96EA, 0xB3B7},{0x96EF, 0xB6B2}, - {0x96F0, 0xDCA8},{0x96F1, 0xDCA7},{0x96F2, 0xB6B3},{0x96F5, 0xE0D9},{0x96F6, 0xB973},{0x96F7, 0xB970},{0x96F8, 0xE0D8},{0x96F9, 0xB972}, - {0x96FA, 0xE0D6},{0x96FB, 0xB971},{0x96FD, 0xE0D7},{0x96FF, 0xE4BD},{0x9700, 0xBBDD},{0x9702, 0xE8AF},{0x9704, 0xBE5D},{0x9705, 0xE8AD}, - {0x9706, 0xBE5E},{0x9707, 0xBE5F},{0x9708, 0xE8AE},{0x9709, 0xBE60},{0x970B, 0xEC51},{0x970D, 0xC04E},{0x970E, 0xC04B},{0x970F, 0xC050}, - {0x9710, 0xEC53},{0x9711, 0xC04C},{0x9712, 0xEC52},{0x9713, 0xC04F},{0x9716, 0xC04D},{0x9718, 0xEEF9},{0x9719, 0xEEFB},{0x971C, 0xC1F7}, - {0x971D, 0xEEFA},{0x971E, 0xC1F8},{0x971F, 0xEEF8},{0x9720, 0xEEF7},{0x9722, 0xF177},{0x9723, 0xF176},{0x9724, 0xC2FC},{0x9725, 0xF178}, - {0x9726, 0xF37E},{0x9727, 0xC3FA},{0x9728, 0xF37D},{0x9729, 0xF37A},{0x972A, 0xC3F9},{0x972B, 0xF37B},{0x972C, 0xF37C},{0x972E, 0xF548}, - {0x972F, 0xF549},{0x9730, 0xC4C5},{0x9732, 0xC553},{0x9735, 0xF66E},{0x9738, 0xC551},{0x9739, 0xC552},{0x973A, 0xF66F},{0x973D, 0xC5B4}, - {0x973E, 0xC5B5},{0x973F, 0xF771},{0x9742, 0xC645},{0x9743, 0xF8CF},{0x9744, 0xC647},{0x9746, 0xF8CE},{0x9747, 0xF8D0},{0x9748, 0xC646}, - {0x9749, 0xF957},{0x974B, 0xF9AD},{0x9752, 0xAB43},{0x9756, 0xB974},{0x9758, 0xE4BE},{0x975A, 0xE8B0},{0x975B, 0xC051},{0x975C, 0xC052}, - {0x975E, 0xAB44},{0x9760, 0xBE61},{0x9761, 0xC3FB},{0x9762, 0xADB1},{0x9766, 0xC053},{0x9768, 0xC5E2},{0x9769, 0xADB2},{0x976A, 0xD84D}, - {0x976C, 0xDCA9},{0x976E, 0xDCAB},{0x9770, 0xDCAA},{0x9772, 0xE0DD},{0x9773, 0xE0DA},{0x9774, 0xB975},{0x9776, 0xB976},{0x9777, 0xE0DB}, - {0x9778, 0xE0DC},{0x977A, 0xE4C0},{0x977B, 0xE4C5},{0x977C, 0xBBDE},{0x977D, 0xE4BF},{0x977E, 0xE4C1},{0x977F, 0xE4C8},{0x9780, 0xE4C3}, - {0x9781, 0xE4C7},{0x9782, 0xE4C4},{0x9783, 0xE4C2},{0x9784, 0xE4C6},{0x9785, 0xBBDF},{0x9788, 0xE8B3},{0x978A, 0xE8B1},{0x978B, 0xBE63}, - {0x978D, 0xBE62},{0x978E, 0xE8B2},{0x978F, 0xBE64},{0x9794, 0xEC56},{0x9797, 0xEC55},{0x9798, 0xC054},{0x9799, 0xEC54},{0x979A, 0xEEFC}, - {0x979C, 0xEEFE},{0x979D, 0xEF41},{0x979E, 0xEF40},{0x97A0, 0xC1F9},{0x97A1, 0xEEFD},{0x97A2, 0xF1A1},{0x97A3, 0xC2FD},{0x97A4, 0xF17D}, - {0x97A5, 0xF1A2},{0x97A6, 0xC2FE},{0x97A8, 0xF17B},{0x97AA, 0xF17E},{0x97AB, 0xF17C},{0x97AC, 0xF179},{0x97AD, 0xC340},{0x97AE, 0xF17A}, - {0x97B3, 0xF3A1},{0x97B6, 0xF3A3},{0x97B7, 0xF3A2},{0x97B9, 0xF54A},{0x97BB, 0xF54B},{0x97BF, 0xF670},{0x97C1, 0xC5B7},{0x97C3, 0xC5B6}, - {0x97C4, 0xF84F},{0x97C5, 0xF850},{0x97C6, 0xC648},{0x97C7, 0xF8D1},{0x97C9, 0xC669},{0x97CB, 0xADB3},{0x97CC, 0xB6B4},{0x97CD, 0xE4CA}, - {0x97CE, 0xE4C9},{0x97CF, 0xE8B5},{0x97D0, 0xE8B4},{0x97D3, 0xC1FA},{0x97D4, 0xEF43},{0x97D5, 0xEF42},{0x97D6, 0xF1A5},{0x97D7, 0xF1A3}, - {0x97D8, 0xF1A6},{0x97D9, 0xF1A4},{0x97DC, 0xC3FC},{0x97DD, 0xF3A4},{0x97DE, 0xF3A5},{0x97DF, 0xF3A6},{0x97E1, 0xF671},{0x97E3, 0xF772}, - {0x97E5, 0xF8D2},{0x97ED, 0xADB4},{0x97F0, 0xEC57},{0x97F1, 0xEF44},{0x97F3, 0xADB5},{0x97F6, 0xBBE0},{0x97F8, 0xEC58},{0x97F9, 0xC341}, - {0x97FA, 0xF1A7},{0x97FB, 0xC3FD},{0x97FD, 0xF54C},{0x97FE, 0xF54D},{0x97FF, 0xC554},{0x9800, 0xF851},{0x9801, 0xADB6},{0x9802, 0xB3BB}, - {0x9803, 0xB3BC},{0x9804, 0xD84E},{0x9805, 0xB6B5},{0x9806, 0xB6B6},{0x9807, 0xDCAC},{0x9808, 0xB6B7},{0x980A, 0xB97A},{0x980C, 0xB97C}, - {0x980D, 0xE0DF},{0x980E, 0xE0E0},{0x980F, 0xE0DE},{0x9810, 0xB977},{0x9811, 0xB978},{0x9812, 0xB97B},{0x9813, 0xB979},{0x9816, 0xE4CB}, - {0x9817, 0xBBE1},{0x9818, 0xBBE2},{0x981B, 0xE8BC},{0x981C, 0xBE67},{0x981D, 0xE8B7},{0x981E, 0xE8B6},{0x9820, 0xE8BB},{0x9821, 0xBE65}, - {0x9824, 0xC05B},{0x9826, 0xE8B8},{0x9827, 0xE8BD},{0x9828, 0xE8BA},{0x9829, 0xE8B9},{0x982B, 0xBE66},{0x982D, 0xC059},{0x982F, 0xEC5A}, - {0x9830, 0xC055},{0x9832, 0xEC5B},{0x9835, 0xEC59},{0x9837, 0xC058},{0x9838, 0xC056},{0x9839, 0xC05A},{0x983B, 0xC057},{0x9841, 0xEF45}, - {0x9843, 0xEF4A},{0x9844, 0xEF46},{0x9845, 0xEF49},{0x9846, 0xC1FB},{0x9848, 0xEDD4},{0x9849, 0xEF48},{0x984A, 0xEF47},{0x984C, 0xC344}, - {0x984D, 0xC342},{0x984E, 0xC345},{0x984F, 0xC343},{0x9850, 0xF1A8},{0x9851, 0xF1A9},{0x9852, 0xF1AA},{0x9853, 0xC346},{0x9857, 0xF3AA}, - {0x9858, 0xC440},{0x9859, 0xF3A8},{0x985B, 0xC441},{0x985C, 0xF3A7},{0x985D, 0xF3A9},{0x985E, 0xC3FE},{0x985F, 0xF551},{0x9860, 0xF54E}, - {0x9862, 0xF54F},{0x9863, 0xF550},{0x9864, 0xF672},{0x9865, 0xC556},{0x9867, 0xC555},{0x9869, 0xF774},{0x986A, 0xF773},{0x986B, 0xC5B8}, - {0x986F, 0xC5E3},{0x9870, 0xC649},{0x9871, 0xC660},{0x9872, 0xF958},{0x9873, 0xF9AE},{0x9874, 0xF9AF},{0x98A8, 0xADB7},{0x98A9, 0xDCAD}, - {0x98AC, 0xE0E1},{0x98AD, 0xE4CC},{0x98AE, 0xE4CD},{0x98AF, 0xBBE3},{0x98B1, 0xBBE4},{0x98B2, 0xE8BE},{0x98B3, 0xBE68},{0x98B6, 0xC1FC}, - {0x98B8, 0xF1AB},{0x98BA, 0xC347},{0x98BB, 0xF3AD},{0x98BC, 0xC442},{0x98BD, 0xF3AC},{0x98BE, 0xF3AE},{0x98BF, 0xF3AB},{0x98C0, 0xF675}, - {0x98C1, 0xF552},{0x98C2, 0xF553},{0x98C4, 0xC4C6},{0x98C6, 0xF674},{0x98C9, 0xF673},{0x98CB, 0xF775},{0x98CC, 0xF9B0},{0x98DB, 0xADB8}, - {0x98DF, 0xADB9},{0x98E2, 0xB0A7},{0x98E3, 0xD448},{0x98E5, 0xD84F},{0x98E7, 0xB6B8},{0x98E9, 0xB6BB},{0x98EA, 0xB6B9},{0x98EB, 0xDCAE}, - {0x98ED, 0xB6BD},{0x98EF, 0xB6BA},{0x98F2, 0xB6BC},{0x98F4, 0xB97E},{0x98F6, 0xE0E2},{0x98F9, 0xE0E3},{0x98FA, 0xE8C0},{0x98FC, 0xB97D}, - {0x98FD, 0xB9A1},{0x98FE, 0xB9A2},{0x9900, 0xE4CF},{0x9902, 0xE4CE},{0x9903, 0xBBE5},{0x9905, 0xBBE6},{0x9907, 0xE4D0},{0x9908, 0xE8BF}, - {0x9909, 0xBBE8},{0x990A, 0xBE69},{0x990C, 0xBBE7},{0x9910, 0xC05C},{0x9911, 0xE8C1},{0x9912, 0xBE6B},{0x9913, 0xBE6A},{0x9914, 0xE8C2}, - {0x9915, 0xE8C5},{0x9916, 0xE8C3},{0x9917, 0xE8C4},{0x9918, 0xBE6C},{0x991A, 0xC061},{0x991B, 0xC05F},{0x991E, 0xC05E},{0x991F, 0xEC5D}, - {0x9921, 0xC060},{0x9924, 0xEC5C},{0x9925, 0xEF4B},{0x9927, 0xEC5E},{0x9928, 0xC05D},{0x9929, 0xEC5F},{0x992A, 0xEF4E},{0x992B, 0xEF4C}, - {0x992C, 0xEF4D},{0x992D, 0xEF52},{0x992E, 0xC34B},{0x992F, 0xEF51},{0x9930, 0xEF54},{0x9931, 0xEF53},{0x9932, 0xEF50},{0x9933, 0xEF4F}, - {0x9935, 0xC1FD},{0x993A, 0xF1AE},{0x993C, 0xF1AD},{0x993D, 0xC34A},{0x993E, 0xC348},{0x993F, 0xC349},{0x9941, 0xF1AC},{0x9943, 0xF3B1}, - {0x9945, 0xC443},{0x9947, 0xF3B0},{0x9948, 0xF3AF},{0x9949, 0xC444},{0x994B, 0xF558},{0x994C, 0xF557},{0x994E, 0xF555},{0x9950, 0xF554}, - {0x9951, 0xC4C8},{0x9952, 0xC4C7},{0x9953, 0xF559},{0x9954, 0xF776},{0x9955, 0xC5B9},{0x9956, 0xF677},{0x9957, 0xC557},{0x9958, 0xF676}, - {0x9959, 0xF556},{0x995B, 0xF777},{0x995C, 0xC5E4},{0x995E, 0xC661},{0x995F, 0xF959},{0x9961, 0xF9B1},{0x9996, 0xADBA},{0x9997, 0xD850}, - {0x9998, 0xEF55},{0x9999, 0xADBB},{0x999C, 0xE4D2},{0x999D, 0xE4D1},{0x999E, 0xEC60},{0x99A1, 0xEF57},{0x99A3, 0xEF56},{0x99A5, 0xC34C}, - {0x99A6, 0xF3B2},{0x99A7, 0xF3B3},{0x99A8, 0xC4C9},{0x99AB, 0xF9B2},{0x99AC, 0xB0A8},{0x99AD, 0xB6BF},{0x99AE, 0xB6BE},{0x99AF, 0xE0E4}, - {0x99B0, 0xE0E6},{0x99B1, 0xB9A4},{0x99B2, 0xE0E5},{0x99B3, 0xB9A3},{0x99B4, 0xB9A5},{0x99B5, 0xE0E7},{0x99B9, 0xE4D4},{0x99BA, 0xE4D6}, - {0x99BB, 0xE4D5},{0x99BD, 0xE4D8},{0x99C1, 0xBBE9},{0x99C2, 0xE4D7},{0x99C3, 0xE4D3},{0x99C7, 0xE4D9},{0x99C9, 0xE8CC},{0x99CB, 0xE8CF}, - {0x99CC, 0xE8D1},{0x99CD, 0xE8C7},{0x99CE, 0xE8CB},{0x99CF, 0xE8C8},{0x99D0, 0xBE6E},{0x99D1, 0xBE71},{0x99D2, 0xBE73},{0x99D3, 0xE8C9}, - {0x99D4, 0xE8CA},{0x99D5, 0xBE72},{0x99D6, 0xE8CD},{0x99D7, 0xE8D0},{0x99D8, 0xE8CE},{0x99D9, 0xBE74},{0x99DB, 0xBE70},{0x99DC, 0xE8C6}, - {0x99DD, 0xBE6D},{0x99DF, 0xBE6F},{0x99E2, 0xC063},{0x99E3, 0xEC66},{0x99E4, 0xEC64},{0x99E5, 0xEC63},{0x99E7, 0xEC69},{0x99E9, 0xEC68}, - {0x99EA, 0xEC67},{0x99EC, 0xEC62},{0x99ED, 0xC062},{0x99EE, 0xEC61},{0x99F0, 0xEC65},{0x99F1, 0xC064},{0x99F4, 0xEF5A},{0x99F6, 0xEF5E}, - {0x99F7, 0xEF5B},{0x99F8, 0xEF5D},{0x99F9, 0xEF5C},{0x99FA, 0xEF59},{0x99FB, 0xEF5F},{0x99FC, 0xEF62},{0x99FD, 0xEF60},{0x99FE, 0xEF61}, - {0x99FF, 0xC240},{0x9A01, 0xC1FE},{0x9A02, 0xEF58},{0x9A03, 0xEF63},{0x9A04, 0xF1B3},{0x9A05, 0xF1B6},{0x9A06, 0xF1B8},{0x9A07, 0xF1B7}, - {0x9A09, 0xF1B1},{0x9A0A, 0xF1B5},{0x9A0B, 0xF1B0},{0x9A0D, 0xF1B2},{0x9A0E, 0xC34D},{0x9A0F, 0xF1AF},{0x9A11, 0xF1B4},{0x9A14, 0xF3C0}, - {0x9A15, 0xF3B5},{0x9A16, 0xC445},{0x9A19, 0xC446},{0x9A1A, 0xF3B4},{0x9A1B, 0xF3B9},{0x9A1C, 0xF3BF},{0x9A1D, 0xF3B7},{0x9A1E, 0xF3BE}, - {0x9A20, 0xF3BB},{0x9A22, 0xF3BA},{0x9A23, 0xF3BD},{0x9A24, 0xF3B8},{0x9A25, 0xF3B6},{0x9A27, 0xF3BC},{0x9A29, 0xF560},{0x9A2A, 0xF55E}, - {0x9A2B, 0xC4CA},{0x9A2C, 0xF55D},{0x9A2D, 0xF563},{0x9A2E, 0xF561},{0x9A30, 0xC4CB},{0x9A31, 0xF55C},{0x9A32, 0xF55A},{0x9A34, 0xF55B}, - {0x9A35, 0xC4CD},{0x9A36, 0xF55F},{0x9A37, 0xC4CC},{0x9A38, 0xF562},{0x9A39, 0xF678},{0x9A3A, 0xF67E},{0x9A3D, 0xF679},{0x9A3E, 0xC55B}, - {0x9A3F, 0xF6A1},{0x9A40, 0xC55A},{0x9A41, 0xF67D},{0x9A42, 0xF67C},{0x9A43, 0xC559},{0x9A44, 0xF67B},{0x9A45, 0xC558},{0x9A46, 0xF67A}, - {0x9A48, 0xF77D},{0x9A49, 0xF7A1},{0x9A4A, 0xF77E},{0x9A4C, 0xF77B},{0x9A4D, 0xC5BB},{0x9A4E, 0xF778},{0x9A4F, 0xF77C},{0x9A50, 0xF7A3}, - {0x9A52, 0xF7A2},{0x9A53, 0xF779},{0x9A54, 0xF77A},{0x9A55, 0xC5BA},{0x9A56, 0xF852},{0x9A57, 0xC5E7},{0x9A59, 0xF853},{0x9A5A, 0xC5E5}, - {0x9A5B, 0xC5E6},{0x9A5E, 0xF8D3},{0x9A5F, 0xC64A},{0x9A60, 0xF976},{0x9A62, 0xC66A},{0x9A64, 0xF9B3},{0x9A65, 0xC66B},{0x9A66, 0xF9B4}, - {0x9A67, 0xF9B5},{0x9A68, 0xF9C3},{0x9A69, 0xF9C2},{0x9A6A, 0xC67A},{0x9A6B, 0xF9CD},{0x9AA8, 0xB0A9},{0x9AAB, 0xE0E9},{0x9AAD, 0xE0E8}, - {0x9AAF, 0xBBEA},{0x9AB0, 0xBBEB},{0x9AB1, 0xE4DA},{0x9AB3, 0xE8D2},{0x9AB4, 0xEC6C},{0x9AB7, 0xBE75},{0x9AB8, 0xC065},{0x9AB9, 0xEC6A}, - {0x9ABB, 0xEC6D},{0x9ABC, 0xC066},{0x9ABE, 0xEF64},{0x9ABF, 0xEC6B},{0x9AC0, 0xF1B9},{0x9AC1, 0xC34E},{0x9AC2, 0xF3C1},{0x9AC6, 0xF566}, - {0x9AC7, 0xF564},{0x9ACA, 0xF565},{0x9ACD, 0xF6A2},{0x9ACF, 0xC55C},{0x9AD0, 0xF7A4},{0x9AD1, 0xC5EA},{0x9AD2, 0xC5BC},{0x9AD3, 0xC5E8}, - {0x9AD4, 0xC5E9},{0x9AD5, 0xF8D4},{0x9AD6, 0xC662},{0x9AD8, 0xB0AA},{0x9ADC, 0xF1BA},{0x9ADF, 0xD449},{0x9AE1, 0xB9A6},{0x9AE3, 0xE4DB}, - {0x9AE6, 0xBBEC},{0x9AE7, 0xE4DC},{0x9AEB, 0xE8D4},{0x9AEC, 0xE8D3},{0x9AED, 0xC068},{0x9AEE, 0xBE76},{0x9AEF, 0xBE77},{0x9AF1, 0xE8D7}, - {0x9AF2, 0xE8D6},{0x9AF3, 0xE8D5},{0x9AF6, 0xEC6E},{0x9AF7, 0xEC71},{0x9AF9, 0xEC70},{0x9AFA, 0xEC6F},{0x9AFB, 0xC067},{0x9AFC, 0xEF68}, - {0x9AFD, 0xEF66},{0x9AFE, 0xEF65},{0x9B01, 0xEF67},{0x9B03, 0xC34F},{0x9B04, 0xF1BC},{0x9B05, 0xF1BD},{0x9B06, 0xC350},{0x9B08, 0xF1BB}, - {0x9B0A, 0xF3C3},{0x9B0B, 0xF3C2},{0x9B0C, 0xF3C5},{0x9B0D, 0xC447},{0x9B0E, 0xF3C4},{0x9B10, 0xF567},{0x9B11, 0xF569},{0x9B12, 0xF568}, - {0x9B15, 0xF6A3},{0x9B16, 0xF6A6},{0x9B17, 0xF6A4},{0x9B18, 0xF6A5},{0x9B19, 0xF7A5},{0x9B1A, 0xC5BD},{0x9B1E, 0xF854},{0x9B1F, 0xF855}, - {0x9B20, 0xF856},{0x9B22, 0xC64B},{0x9B23, 0xC663},{0x9B24, 0xF9B6},{0x9B25, 0xB0AB},{0x9B27, 0xBE78},{0x9B28, 0xC069},{0x9B29, 0xF1BE}, - {0x9B2B, 0xF7A6},{0x9B2E, 0xF9C4},{0x9B2F, 0xD44A},{0x9B31, 0xC67B},{0x9B32, 0xB0AC},{0x9B33, 0xEC72},{0x9B35, 0xF1BF},{0x9B37, 0xF3C6}, - {0x9B3A, 0xF6A7},{0x9B3B, 0xF7A7},{0x9B3C, 0xB0AD},{0x9B3E, 0xE4DD},{0x9B3F, 0xE4DE},{0x9B41, 0xBBED},{0x9B42, 0xBBEE},{0x9B43, 0xE8D9}, - {0x9B44, 0xBE7A},{0x9B45, 0xBE79},{0x9B46, 0xE8D8},{0x9B48, 0xEF69},{0x9B4A, 0xF1C0},{0x9B4B, 0xF1C2},{0x9B4C, 0xF1C1},{0x9B4D, 0xC353}, - {0x9B4E, 0xC352},{0x9B4F, 0xC351},{0x9B51, 0xC55E},{0x9B52, 0xF6A8},{0x9B54, 0xC55D},{0x9B55, 0xF7A9},{0x9B56, 0xF7A8},{0x9B58, 0xC64C}, - {0x9B59, 0xF8D5},{0x9B5A, 0xB3BD},{0x9B5B, 0xE0EA},{0x9B5F, 0xE4E1},{0x9B60, 0xE4DF},{0x9B61, 0xE4E0},{0x9B64, 0xE8E2},{0x9B66, 0xE8DD}, - {0x9B67, 0xE8DA},{0x9B68, 0xE8E1},{0x9B6C, 0xE8E3},{0x9B6F, 0xBE7C},{0x9B70, 0xE8E0},{0x9B71, 0xE8DC},{0x9B74, 0xE8DB},{0x9B75, 0xE8DF}, - {0x9B76, 0xE8DE},{0x9B77, 0xBE7B},{0x9B7A, 0xEC7D},{0x9B7B, 0xEC78},{0x9B7C, 0xEC76},{0x9B7D, 0xECA1},{0x9B7E, 0xEC77},{0x9B80, 0xEC73}, - {0x9B82, 0xEC79},{0x9B85, 0xEC74},{0x9B86, 0xEF72},{0x9B87, 0xEC75},{0x9B88, 0xECA2},{0x9B90, 0xEC7C},{0x9B91, 0xC06A},{0x9B92, 0xEC7B}, - {0x9B93, 0xEC7A},{0x9B95, 0xEC7E},{0x9B9A, 0xEF6A},{0x9B9B, 0xEF6D},{0x9B9E, 0xEF6C},{0x9BA0, 0xEF74},{0x9BA1, 0xEF6F},{0x9BA2, 0xEF73}, - {0x9BA4, 0xEF71},{0x9BA5, 0xEF70},{0x9BA6, 0xEF6E},{0x9BA8, 0xEF6B},{0x9BAA, 0xC243},{0x9BAB, 0xC242},{0x9BAD, 0xC244},{0x9BAE, 0xC241}, - {0x9BAF, 0xEF75},{0x9BB5, 0xF1C8},{0x9BB6, 0xF1CB},{0x9BB8, 0xF1C9},{0x9BB9, 0xF1CD},{0x9BBD, 0xF1CE},{0x9BBF, 0xF1C6},{0x9BC0, 0xC358}, - {0x9BC1, 0xF1C7},{0x9BC3, 0xF1C5},{0x9BC4, 0xF1CC},{0x9BC6, 0xF1C4},{0x9BC7, 0xF1C3},{0x9BC8, 0xC357},{0x9BC9, 0xC355},{0x9BCA, 0xC354}, - {0x9BD3, 0xF1CA},{0x9BD4, 0xF3CF},{0x9BD5, 0xF3D5},{0x9BD6, 0xC44A},{0x9BD7, 0xF3D0},{0x9BD9, 0xF3D3},{0x9BDA, 0xF3D7},{0x9BDB, 0xC44B}, - {0x9BDC, 0xF3D2},{0x9BDE, 0xF3CA},{0x9BE0, 0xF3C9},{0x9BE1, 0xF3D6},{0x9BE2, 0xF3CD},{0x9BE4, 0xF3CB},{0x9BE5, 0xF3D4},{0x9BE6, 0xF3CC}, - {0x9BE7, 0xC449},{0x9BE8, 0xC448},{0x9BEA, 0xF3C7},{0x9BEB, 0xF3C8},{0x9BEC, 0xF3D1},{0x9BF0, 0xF3CE},{0x9BF7, 0xF56C},{0x9BF8, 0xF56F}, - {0x9BFD, 0xC356},{0x9C05, 0xF56D},{0x9C06, 0xF573},{0x9C07, 0xF571},{0x9C08, 0xF56B},{0x9C09, 0xF576},{0x9C0B, 0xF56A},{0x9C0D, 0xC4CF}, - {0x9C0E, 0xF572},{0x9C12, 0xF56E},{0x9C13, 0xC4CE},{0x9C14, 0xF575},{0x9C17, 0xF574},{0x9C1C, 0xF6AB},{0x9C1D, 0xF6AA},{0x9C21, 0xF6B1}, - {0x9C23, 0xF6AD},{0x9C24, 0xF6B0},{0x9C25, 0xC560},{0x9C28, 0xF6AE},{0x9C29, 0xF6AF},{0x9C2B, 0xF6A9},{0x9C2C, 0xF6AC},{0x9C2D, 0xC55F}, - {0x9C31, 0xC5BF},{0x9C32, 0xF7B4},{0x9C33, 0xF7AF},{0x9C34, 0xF7B3},{0x9C36, 0xF7B6},{0x9C37, 0xF7B2},{0x9C39, 0xF7AE},{0x9C3B, 0xC5C1}, - {0x9C3C, 0xF7B1},{0x9C3D, 0xF7B5},{0x9C3E, 0xC5C0},{0x9C3F, 0xF7AC},{0x9C40, 0xF570},{0x9C41, 0xF7B0},{0x9C44, 0xF7AD},{0x9C46, 0xF7AA}, - {0x9C48, 0xF7AB},{0x9C49, 0xC5BE},{0x9C4A, 0xF85A},{0x9C4B, 0xF85C},{0x9C4C, 0xF85F},{0x9C4D, 0xF85B},{0x9C4E, 0xF860},{0x9C50, 0xF859}, - {0x9C52, 0xF857},{0x9C54, 0xC5EB},{0x9C55, 0xF85D},{0x9C56, 0xC5ED},{0x9C57, 0xC5EC},{0x9C58, 0xF858},{0x9C59, 0xF85E},{0x9C5E, 0xF8DA}, - {0x9C5F, 0xC64D},{0x9C60, 0xF8DB},{0x9C62, 0xF8D9},{0x9C63, 0xF8D6},{0x9C66, 0xF8D8},{0x9C67, 0xF8D7},{0x9C68, 0xF95A},{0x9C6D, 0xF95C}, - {0x9C6E, 0xF95B},{0x9C71, 0xF979},{0x9C73, 0xF978},{0x9C74, 0xF977},{0x9C75, 0xF97A},{0x9C77, 0xC673},{0x9C78, 0xC674},{0x9C79, 0xF9CA}, - {0x9C7A, 0xF9CE},{0x9CE5, 0xB3BE},{0x9CE6, 0xDCAF},{0x9CE7, 0xE0ED},{0x9CE9, 0xB9A7},{0x9CEA, 0xE0EB},{0x9CED, 0xE0EC},{0x9CF1, 0xE4E2}, - {0x9CF2, 0xE4E3},{0x9CF3, 0xBBF1},{0x9CF4, 0xBBEF},{0x9CF5, 0xE4E4},{0x9CF6, 0xBBF0},{0x9CF7, 0xE8E8},{0x9CF9, 0xE8EB},{0x9CFA, 0xE8E5}, - {0x9CFB, 0xE8EC},{0x9CFC, 0xE8E4},{0x9CFD, 0xE8E6},{0x9CFF, 0xE8E7},{0x9D00, 0xE8EA},{0x9D03, 0xBEA1},{0x9D04, 0xE8EF},{0x9D05, 0xE8EE}, - {0x9D06, 0xBE7D},{0x9D07, 0xE8E9},{0x9D08, 0xE8ED},{0x9D09, 0xBE7E},{0x9D10, 0xECAC},{0x9D12, 0xC06F},{0x9D14, 0xECA7},{0x9D15, 0xC06B}, - {0x9D17, 0xECA4},{0x9D18, 0xECAA},{0x9D19, 0xECAD},{0x9D1B, 0xC070},{0x9D1D, 0xECA9},{0x9D1E, 0xECA6},{0x9D1F, 0xECAE},{0x9D20, 0xECA5}, - {0x9D22, 0xECAB},{0x9D23, 0xC06C},{0x9D25, 0xECA3},{0x9D26, 0xC06D},{0x9D28, 0xC06E},{0x9D29, 0xECA8},{0x9D2D, 0xEFA9},{0x9D2E, 0xEF7A}, - {0x9D2F, 0xEF7B},{0x9D30, 0xEF7E},{0x9D31, 0xEF7C},{0x9D33, 0xEF76},{0x9D36, 0xEF79},{0x9D37, 0xEFA5},{0x9D38, 0xEF7D},{0x9D3B, 0xC245}, - {0x9D3D, 0xEFA7},{0x9D3E, 0xEFA4},{0x9D3F, 0xC246},{0x9D40, 0xEFA6},{0x9D41, 0xEF77},{0x9D42, 0xEFA2},{0x9D43, 0xEFA3},{0x9D45, 0xEFA1}, - {0x9D4A, 0xF1D2},{0x9D4B, 0xF1D4},{0x9D4C, 0xF1D7},{0x9D4F, 0xF1D1},{0x9D51, 0xC359},{0x9D52, 0xF1D9},{0x9D53, 0xF1D0},{0x9D54, 0xF1DA}, - {0x9D56, 0xF1D6},{0x9D57, 0xF1D8},{0x9D58, 0xF1DC},{0x9D59, 0xF1D5},{0x9D5A, 0xF1DD},{0x9D5B, 0xF1D3},{0x9D5C, 0xF1CF},{0x9D5D, 0xC35A}, - {0x9D5F, 0xF1DB},{0x9D60, 0xC35B},{0x9D61, 0xC44D},{0x9D67, 0xEF78},{0x9D68, 0xF3F1},{0x9D69, 0xF3E8},{0x9D6A, 0xC44F},{0x9D6B, 0xF3E4}, - {0x9D6C, 0xC450},{0x9D6F, 0xF3ED},{0x9D70, 0xF3E7},{0x9D71, 0xF3DD},{0x9D72, 0xC44E},{0x9D73, 0xF3EA},{0x9D74, 0xF3E5},{0x9D75, 0xF3E6}, - {0x9D77, 0xF3D8},{0x9D78, 0xF3DF},{0x9D79, 0xF3EE},{0x9D7B, 0xF3EB},{0x9D7D, 0xF3E3},{0x9D7F, 0xF3EF},{0x9D80, 0xF3DE},{0x9D81, 0xF3D9}, - {0x9D82, 0xF3EC},{0x9D84, 0xF3DB},{0x9D85, 0xF3E9},{0x9D86, 0xF3E0},{0x9D87, 0xF3F0},{0x9D88, 0xF3DC},{0x9D89, 0xC44C},{0x9D8A, 0xF3DA}, - {0x9D8B, 0xF3E1},{0x9D8C, 0xF3E2},{0x9D90, 0xF57D},{0x9D92, 0xF57B},{0x9D94, 0xF5A2},{0x9D96, 0xF5AE},{0x9D97, 0xF5A5},{0x9D98, 0xF57C}, - {0x9D99, 0xF578},{0x9D9A, 0xF5A7},{0x9D9B, 0xF57E},{0x9D9C, 0xF5A3},{0x9D9D, 0xF57A},{0x9D9E, 0xF5AA},{0x9D9F, 0xF577},{0x9DA0, 0xF5A1}, - {0x9DA1, 0xF5A6},{0x9DA2, 0xF5A8},{0x9DA3, 0xF5AB},{0x9DA4, 0xF579},{0x9DA6, 0xF5AF},{0x9DA7, 0xF5B0},{0x9DA8, 0xF5A9},{0x9DA9, 0xF5AD}, - {0x9DAA, 0xF5A4},{0x9DAC, 0xF6C1},{0x9DAD, 0xF6C4},{0x9DAF, 0xC561},{0x9DB1, 0xF6C3},{0x9DB2, 0xF6C8},{0x9DB3, 0xF6C6},{0x9DB4, 0xC562}, - {0x9DB5, 0xF6BD},{0x9DB6, 0xF6B3},{0x9DB7, 0xF6B2},{0x9DB8, 0xC564},{0x9DB9, 0xF6BF},{0x9DBA, 0xF6C0},{0x9DBB, 0xF6BC},{0x9DBC, 0xF6B4}, - {0x9DBE, 0xF6B9},{0x9DBF, 0xF5AC},{0x9DC1, 0xF6B5},{0x9DC2, 0xC563},{0x9DC3, 0xF6BB},{0x9DC5, 0xF6BA},{0x9DC7, 0xF6B6},{0x9DC8, 0xF6C2}, - {0x9DCA, 0xF6B7},{0x9DCB, 0xF7BB},{0x9DCC, 0xF6C5},{0x9DCD, 0xF6C7},{0x9DCE, 0xF6BE},{0x9DCF, 0xF6B8},{0x9DD0, 0xF7BC},{0x9DD1, 0xF7BE}, - {0x9DD2, 0xF7B8},{0x9DD3, 0xC5C2},{0x9DD5, 0xF7C5},{0x9DD6, 0xF7C3},{0x9DD7, 0xC5C3},{0x9DD8, 0xF7C2},{0x9DD9, 0xF7C1},{0x9DDA, 0xF7BA}, - {0x9DDB, 0xF7B7},{0x9DDC, 0xF7BD},{0x9DDD, 0xF7C6},{0x9DDE, 0xF7B9},{0x9DDF, 0xF7BF},{0x9DE1, 0xF869},{0x9DE2, 0xF86E},{0x9DE3, 0xF864}, - {0x9DE4, 0xF867},{0x9DE5, 0xC5EE},{0x9DE6, 0xF86B},{0x9DE8, 0xF872},{0x9DE9, 0xF7C0},{0x9DEB, 0xF865},{0x9DEC, 0xF86F},{0x9DED, 0xF873}, - {0x9DEE, 0xF86A},{0x9DEF, 0xF863},{0x9DF0, 0xF86D},{0x9DF2, 0xF86C},{0x9DF3, 0xF871},{0x9DF4, 0xF870},{0x9DF5, 0xF7C4},{0x9DF6, 0xF868}, - {0x9DF7, 0xF862},{0x9DF8, 0xF866},{0x9DF9, 0xC64E},{0x9DFA, 0xC64F},{0x9DFB, 0xF861},{0x9DFD, 0xF8E6},{0x9DFE, 0xF8DD},{0x9DFF, 0xF8E5}, - {0x9E00, 0xF8E2},{0x9E01, 0xF8E3},{0x9E02, 0xF8DC},{0x9E03, 0xF8DF},{0x9E04, 0xF8E7},{0x9E05, 0xF8E1},{0x9E06, 0xF8E0},{0x9E07, 0xF8DE}, - {0x9E09, 0xF8E4},{0x9E0B, 0xF95D},{0x9E0D, 0xF95E},{0x9E0F, 0xF960},{0x9E10, 0xF95F},{0x9E11, 0xF962},{0x9E12, 0xF961},{0x9E13, 0xF97C}, - {0x9E14, 0xF97B},{0x9E15, 0xF9B7},{0x9E17, 0xF9B8},{0x9E19, 0xF9C5},{0x9E1A, 0xC678},{0x9E1B, 0xC67C},{0x9E1D, 0xF9CF},{0x9E1E, 0xC67D}, - {0x9E75, 0xB3BF},{0x9E79, 0xC4D0},{0x9E7A, 0xF6C9},{0x9E7C, 0xC650},{0x9E7D, 0xC651},{0x9E7F, 0xB3C0},{0x9E80, 0xE0EE},{0x9E82, 0xB9A8}, - {0x9E83, 0xE8F0},{0x9E86, 0xECB0},{0x9E87, 0xECB1},{0x9E88, 0xECAF},{0x9E89, 0xEFAB},{0x9E8A, 0xEFAA},{0x9E8B, 0xC247},{0x9E8C, 0xF1DF}, - {0x9E8D, 0xEFAC},{0x9E8E, 0xF1DE},{0x9E91, 0xF3F3},{0x9E92, 0xC451},{0x9E93, 0xC453},{0x9E94, 0xF3F2},{0x9E97, 0xC452},{0x9E99, 0xF5B1}, - {0x9E9A, 0xF5B3},{0x9E9B, 0xF5B2},{0x9E9C, 0xF6CA},{0x9E9D, 0xC565},{0x9E9F, 0xC5EF},{0x9EA0, 0xF8E8},{0x9EA1, 0xF963},{0x9EA4, 0xF9D2}, - {0x9EA5, 0xB3C1},{0x9EA7, 0xE4E5},{0x9EA9, 0xBEA2},{0x9EAD, 0xECB3},{0x9EAE, 0xECB2},{0x9EB0, 0xEFAD},{0x9EB4, 0xC454},{0x9EB5, 0xC4D1}, - {0x9EB6, 0xF7C7},{0x9EB7, 0xF9CB},{0x9EBB, 0xB3C2},{0x9EBC, 0xBBF2},{0x9EBE, 0xBEA3},{0x9EC0, 0xF3F4},{0x9EC2, 0xF874},{0x9EC3, 0xB6C0}, - {0x9EC8, 0xEFAE},{0x9ECC, 0xC664},{0x9ECD, 0xB6C1},{0x9ECE, 0xBEA4},{0x9ECF, 0xC248},{0x9ED0, 0xF875},{0x9ED1, 0xB6C2},{0x9ED3, 0xE8F1}, - {0x9ED4, 0xC072},{0x9ED5, 0xECB4},{0x9ED6, 0xECB5},{0x9ED8, 0xC071},{0x9EDA, 0xEFAF},{0x9EDB, 0xC24C},{0x9EDC, 0xC24A},{0x9EDD, 0xC24B}, - {0x9EDE, 0xC249},{0x9EDF, 0xF1E0},{0x9EE0, 0xC35C},{0x9EE4, 0xF5B5},{0x9EE5, 0xF5B4},{0x9EE6, 0xF5B7},{0x9EE7, 0xF5B6},{0x9EE8, 0xC4D2}, - {0x9EEB, 0xF6CB},{0x9EED, 0xF6CD},{0x9EEE, 0xF6CC},{0x9EEF, 0xC566},{0x9EF0, 0xF7C8},{0x9EF2, 0xF876},{0x9EF3, 0xF877},{0x9EF4, 0xC5F0}, - {0x9EF5, 0xF964},{0x9EF6, 0xF97D},{0x9EF7, 0xC675},{0x9EF9, 0xDCB0},{0x9EFA, 0xECB6},{0x9EFB, 0xEFB0},{0x9EFC, 0xF3F5},{0x9EFD, 0xE0EF}, - {0x9EFF, 0xEFB1},{0x9F00, 0xF1E2},{0x9F01, 0xF1E1},{0x9F06, 0xF878},{0x9F07, 0xC652},{0x9F09, 0xF965},{0x9F0A, 0xF97E},{0x9F0E, 0xB9A9}, - {0x9F0F, 0xE8F2},{0x9F10, 0xE8F3},{0x9F12, 0xECB7},{0x9F13, 0xB9AA},{0x9F15, 0xC35D},{0x9F16, 0xF1E3},{0x9F18, 0xF6CF},{0x9F19, 0xC567}, - {0x9F1A, 0xF6D0},{0x9F1B, 0xF6CE},{0x9F1C, 0xF879},{0x9F1E, 0xF8E9},{0x9F20, 0xB9AB},{0x9F22, 0xEFB4},{0x9F23, 0xEFB3},{0x9F24, 0xEFB2}, - {0x9F25, 0xF1E4},{0x9F28, 0xF1E8},{0x9F29, 0xF1E7},{0x9F2A, 0xF1E6},{0x9F2B, 0xF1E5},{0x9F2C, 0xC35E},{0x9F2D, 0xF3F6},{0x9F2E, 0xF5B9}, - {0x9F2F, 0xC4D3},{0x9F30, 0xF5B8},{0x9F31, 0xF6D1},{0x9F32, 0xF7CB},{0x9F33, 0xF7CA},{0x9F34, 0xC5C4},{0x9F35, 0xF7C9},{0x9F36, 0xF87C}, - {0x9F37, 0xF87B},{0x9F38, 0xF87A},{0x9F3B, 0xBBF3},{0x9F3D, 0xECB8},{0x9F3E, 0xC24D},{0x9F40, 0xF3F7},{0x9F41, 0xF3F8},{0x9F42, 0xF7CC}, - {0x9F43, 0xF87D},{0x9F46, 0xF8EA},{0x9F47, 0xF966},{0x9F48, 0xF9B9},{0x9F49, 0xF9D4},{0x9F4A, 0xBBF4},{0x9F4B, 0xC24E},{0x9F4C, 0xF1E9}, - {0x9F4D, 0xF3F9},{0x9F4E, 0xF6D2},{0x9F4F, 0xF87E},{0x9F52, 0xBEA6},{0x9F54, 0xEFB5},{0x9F55, 0xF1EA},{0x9F56, 0xF3FA},{0x9F57, 0xF3FB}, - {0x9F58, 0xF3FC},{0x9F59, 0xF5BE},{0x9F5B, 0xF5BA},{0x9F5C, 0xC568},{0x9F5D, 0xF5BD},{0x9F5E, 0xF5BC},{0x9F5F, 0xC4D4},{0x9F60, 0xF5BB}, - {0x9F61, 0xC4D6},{0x9F63, 0xC4D5},{0x9F64, 0xF6D4},{0x9F65, 0xF6D3},{0x9F66, 0xC569},{0x9F67, 0xC56A},{0x9F6A, 0xC5C6},{0x9F6B, 0xF7CD}, - {0x9F6C, 0xC5C5},{0x9F6E, 0xF8A3},{0x9F6F, 0xF8A4},{0x9F70, 0xF8A2},{0x9F71, 0xF8A1},{0x9F72, 0xC654},{0x9F74, 0xF8EB},{0x9F75, 0xF8EC}, - {0x9F76, 0xF8ED},{0x9F77, 0xC653},{0x9F78, 0xF967},{0x9F79, 0xF96A},{0x9F7A, 0xF969},{0x9F7B, 0xF968},{0x9F7E, 0xF9D3},{0x9F8D, 0xC073}, - {0x9F90, 0xC365},{0x9F91, 0xF5BF},{0x9F92, 0xF6D5},{0x9F94, 0xC5C7},{0x9F95, 0xF7CE},{0x9F98, 0xF9D5},{0x9F9C, 0xC074},{0x9FA0, 0xEFB6}, - {0x9FA2, 0xF7CF},{0x9FA4, 0xF9A1},{0xFA0C, 0xC94A},{0xFA0D, 0xDDFC},{0xFE30, 0xA14A},{0xFE31, 0xA157},{0xFE33, 0xA159},{0xFE34, 0xA15B}, - {0xFE35, 0xA15F},{0xFE36, 0xA160},{0xFE37, 0xA163},{0xFE38, 0xA164},{0xFE39, 0xA167},{0xFE3A, 0xA168},{0xFE3B, 0xA16B},{0xFE3C, 0xA16C}, - {0xFE3D, 0xA16F},{0xFE3E, 0xA170},{0xFE3F, 0xA173},{0xFE40, 0xA174},{0xFE41, 0xA177},{0xFE42, 0xA178},{0xFE43, 0xA17B},{0xFE44, 0xA17C}, - {0xFE49, 0xA1C6},{0xFE4A, 0xA1C7},{0xFE4B, 0xA1CA},{0xFE4C, 0xA1CB},{0xFE4D, 0xA1C8},{0xFE4E, 0xA1C9},{0xFE4F, 0xA15C},{0xFE50, 0xA14D}, - {0xFE52, 0xA14F},{0xFE54, 0xA151},{0xFE55, 0xA152},{0xFE56, 0xA153},{0xFE57, 0xA154},{0xFE59, 0xA17D},{0xFE5A, 0xA17E},{0xFE5B, 0xA1A1}, - {0xFE5C, 0xA1A2},{0xFE5D, 0xA1A3},{0xFE5E, 0xA1A4},{0xFE5F, 0xA1CC},{0xFE60, 0xA1CD},{0xFE61, 0xA1CE},{0xFE62, 0xA1DE},{0xFE63, 0xA1DF}, - {0xFE64, 0xA1E0},{0xFE65, 0xA1E1},{0xFE66, 0xA1E2},{0xFE69, 0xA24C},{0xFE6A, 0xA24D},{0xFE6B, 0xA24E},{0xFF01, 0xA149},{0xFF03, 0xA1AD}, - {0xFF04, 0xA243},{0xFF05, 0xA248},{0xFF06, 0xA1AE},{0xFF08, 0xA15D},{0xFF09, 0xA15E},{0xFF0A, 0xA1AF},{0xFF0B, 0xA1CF},{0xFF0C, 0xA141}, - {0xFF0D, 0xA1D0},{0xFF0E, 0xA144},{0xFF0F, 0xA241},{0xFF10, 0xA2AF},{0xFF11, 0xA2B0},{0xFF12, 0xA2B1},{0xFF13, 0xA2B2},{0xFF14, 0xA2B3}, - {0xFF15, 0xA2B4},{0xFF16, 0xA2B5},{0xFF17, 0xA2B6},{0xFF18, 0xA2B7},{0xFF19, 0xA2B8},{0xFF1A, 0xA147},{0xFF1B, 0xA146},{0xFF1C, 0xA1D5}, - {0xFF1D, 0xA1D7},{0xFF1E, 0xA1D6},{0xFF1F, 0xA148},{0xFF20, 0xA249},{0xFF21, 0xA2CF},{0xFF22, 0xA2D0},{0xFF23, 0xA2D1},{0xFF24, 0xA2D2}, - {0xFF25, 0xA2D3},{0xFF26, 0xA2D4},{0xFF27, 0xA2D5},{0xFF28, 0xA2D6},{0xFF29, 0xA2D7},{0xFF2A, 0xA2D8},{0xFF2B, 0xA2D9},{0xFF2C, 0xA2DA}, - {0xFF2D, 0xA2DB},{0xFF2E, 0xA2DC},{0xFF2F, 0xA2DD},{0xFF30, 0xA2DE},{0xFF31, 0xA2DF},{0xFF32, 0xA2E0},{0xFF33, 0xA2E1},{0xFF34, 0xA2E2}, - {0xFF35, 0xA2E3},{0xFF36, 0xA2E4},{0xFF37, 0xA2E5},{0xFF38, 0xA2E6},{0xFF39, 0xA2E7},{0xFF3A, 0xA2E8},{0xFF3C, 0xA242},{0xFF3F, 0xA1C4}, - {0xFF41, 0xA2E9},{0xFF42, 0xA2EA},{0xFF43, 0xA2EB},{0xFF44, 0xA2EC},{0xFF45, 0xA2ED},{0xFF46, 0xA2EE},{0xFF47, 0xA2EF},{0xFF48, 0xA2F0}, - {0xFF49, 0xA2F1},{0xFF4A, 0xA2F2},{0xFF4B, 0xA2F3},{0xFF4C, 0xA2F4},{0xFF4D, 0xA2F5},{0xFF4E, 0xA2F6},{0xFF4F, 0xA2F7},{0xFF50, 0xA2F8}, - {0xFF51, 0xA2F9},{0xFF52, 0xA2FA},{0xFF53, 0xA2FB},{0xFF54, 0xA2FC},{0xFF55, 0xA2FD},{0xFF56, 0xA2FE},{0xFF57, 0xA340},{0xFF58, 0xA341}, - {0xFF59, 0xA342},{0xFF5A, 0xA343},{0xFF5B, 0xA161},{0xFF5C, 0xA155},{0xFF5D, 0xA162},{0xFF64, 0xA14E} -}; diff --git a/vcl/source/fontsubset/u2johab.inc b/vcl/source/fontsubset/u2johab.inc deleted file mode 100644 index f7a75afaf503..000000000000 --- a/vcl/source/fontsubset/u2johab.inc +++ /dev/null @@ -1,2174 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// use generic RTL_TEXTENCODING_JOHAB to get rid of this file - -sal_uInt16pair xlat_1_6[17141] = { - {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027}, - {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F}, - {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037}, - {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F}, - {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047}, - {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F}, - {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057}, - {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F}, - {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067}, - {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F}, - {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077}, - {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A1, 0xA2AE}, - {0x00A4, 0xA2B4},{0x00A7, 0xA1D7},{0x00A8, 0xA1A7},{0x00AA, 0xA8A3},{0x00AD, 0xA1A9},{0x00B0, 0xA1C6},{0x00B1, 0xA1BE},{0x00B2, 0xA9F7}, - {0x00B3, 0xA9F8},{0x00B4, 0xA2A5},{0x00B6, 0xA2D2},{0x00B7, 0xA1A4},{0x00B8, 0xA2AC},{0x00B9, 0xA9F6},{0x00BA, 0xA8AC},{0x00BC, 0xA8F9}, - {0x00BD, 0xA8F6},{0x00BE, 0xA8FA},{0x00BF, 0xA2AF},{0x00C6, 0xA8A1},{0x00D0, 0xA8A2},{0x00D7, 0xA1BF},{0x00D8, 0xA8AA},{0x00DE, 0xA8AD}, - {0x00DF, 0xA9AC},{0x00E6, 0xA9A1},{0x00F0, 0xA9A3},{0x00F7, 0xA1C0},{0x00F8, 0xA9AA},{0x00FE, 0xA9AD},{0x0111, 0xA9A2},{0x0126, 0xA8A4}, - {0x0127, 0xA9A4},{0x0131, 0xA9A5},{0x0132, 0xA8A6},{0x0133, 0xA9A6},{0x0138, 0xA9A7},{0x013F, 0xA8A8},{0x0140, 0xA9A8},{0x0141, 0xA8A9}, - {0x0142, 0xA9A9},{0x0149, 0xA9B0},{0x014A, 0xA8AF},{0x014B, 0xA9AF},{0x0152, 0xA8AB},{0x0153, 0xA9AB},{0x0166, 0xA8AE},{0x0167, 0xA9AE}, - {0x02C7, 0xA2A7},{0x02D0, 0xA2B0},{0x02D8, 0xA2A8},{0x02D9, 0xA2AB},{0x02DA, 0xA2AA},{0x02DB, 0xA2AD},{0x02DD, 0xA2A9},{0x0391, 0xA5C1}, - {0x0392, 0xA5C2},{0x0393, 0xA5C3},{0x0394, 0xA5C4},{0x0395, 0xA5C5},{0x0396, 0xA5C6},{0x0397, 0xA5C7},{0x0398, 0xA5C8},{0x0399, 0xA5C9}, - {0x039A, 0xA5CA},{0x039B, 0xA5CB},{0x039C, 0xA5CC},{0x039D, 0xA5CD},{0x039E, 0xA5CE},{0x039F, 0xA5CF},{0x03A0, 0xA5D0},{0x03A1, 0xA5D1}, - {0x03A3, 0xA5D2},{0x03A4, 0xA5D3},{0x03A5, 0xA5D4},{0x03A6, 0xA5D5},{0x03A7, 0xA5D6},{0x03A8, 0xA5D7},{0x03A9, 0xA5D8},{0x03B1, 0xA5E1}, - {0x03B2, 0xA5E2},{0x03B3, 0xA5E3},{0x03B4, 0xA5E4},{0x03B5, 0xA5E5},{0x03B6, 0xA5E6},{0x03B7, 0xA5E7},{0x03B8, 0xA5E8},{0x03B9, 0xA5E9}, - {0x03BA, 0xA5EA},{0x03BB, 0xA5EB},{0x03BC, 0xA5EC},{0x03BD, 0xA5ED},{0x03BE, 0xA5EE},{0x03BF, 0xA5EF},{0x03C0, 0xA5F0},{0x03C1, 0xA5F1}, - {0x03C3, 0xA5F2},{0x03C4, 0xA5F3},{0x03C5, 0xA5F4},{0x03C6, 0xA5F5},{0x03C7, 0xA5F6},{0x03C8, 0xA5F7},{0x03C9, 0xA5F8},{0x0401, 0xACA7}, - {0x0410, 0xACA1},{0x0411, 0xACA2},{0x0412, 0xACA3},{0x0413, 0xACA4},{0x0414, 0xACA5},{0x0415, 0xACA6},{0x0416, 0xACA8},{0x0417, 0xACA9}, - {0x0418, 0xACAA},{0x0419, 0xACAB},{0x041A, 0xACAC},{0x041B, 0xACAD},{0x041C, 0xACAE},{0x041D, 0xACAF},{0x041E, 0xACB0},{0x041F, 0xACB1}, - {0x0420, 0xACB2},{0x0421, 0xACB3},{0x0422, 0xACB4},{0x0423, 0xACB5},{0x0424, 0xACB6},{0x0425, 0xACB7},{0x0426, 0xACB8},{0x0427, 0xACB9}, - {0x0428, 0xACBA},{0x0429, 0xACBB},{0x042A, 0xACBC},{0x042B, 0xACBD},{0x042C, 0xACBE},{0x042D, 0xACBF},{0x042E, 0xACC0},{0x042F, 0xACC1}, - {0x0430, 0xACD1},{0x0431, 0xACD2},{0x0432, 0xACD3},{0x0433, 0xACD4},{0x0434, 0xACD5},{0x0435, 0xACD6},{0x0436, 0xACD8},{0x0437, 0xACD9}, - {0x0438, 0xACDA},{0x0439, 0xACDB},{0x043A, 0xACDC},{0x043B, 0xACDD},{0x043C, 0xACDE},{0x043D, 0xACDF},{0x043E, 0xACE0},{0x043F, 0xACE1}, - {0x0440, 0xACE2},{0x0441, 0xACE3},{0x0442, 0xACE4},{0x0443, 0xACE5},{0x0444, 0xACE6},{0x0445, 0xACE7},{0x0446, 0xACE8},{0x0447, 0xACE9}, - {0x0448, 0xACEA},{0x0449, 0xACEB},{0x044A, 0xACEC},{0x044B, 0xACED},{0x044C, 0xACEE},{0x044D, 0xACEF},{0x044E, 0xACF0},{0x044F, 0xACF1}, - {0x0451, 0xACD7},{0x2015, 0xA1AA},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2020, 0xA2D3},{0x2021, 0xA2D4}, - {0x2025, 0xA1A5},{0x2026, 0xA1A6},{0x2030, 0xA2B6},{0x2032, 0xA1C7},{0x2033, 0xA1C8},{0x203B, 0xA1D8},{0x2074, 0xA9F9},{0x207F, 0xA9FA}, - {0x2081, 0xA9FB},{0x2082, 0xA9FC},{0x2083, 0xA9FD},{0x2084, 0xA9FE},{0x2103, 0xA1C9},{0x2109, 0xA2B5},{0x2113, 0xA7A4},{0x2116, 0xA2E0}, - {0x2121, 0xA2E5},{0x2122, 0xA2E2},{0x2126, 0xA7D9},{0x212B, 0xA1CA},{0x2153, 0xA8F7},{0x2154, 0xA8F8},{0x215B, 0xA8FB},{0x215C, 0xA8FC}, - {0x215D, 0xA8FD},{0x215E, 0xA8FE},{0x2160, 0xA5B0},{0x2161, 0xA5B1},{0x2162, 0xA5B2},{0x2163, 0xA5B3},{0x2164, 0xA5B4},{0x2165, 0xA5B5}, - {0x2166, 0xA5B6},{0x2167, 0xA5B7},{0x2168, 0xA5B8},{0x2169, 0xA5B9},{0x2170, 0xA5A1},{0x2171, 0xA5A2},{0x2172, 0xA5A3},{0x2173, 0xA5A4}, - {0x2174, 0xA5A5},{0x2175, 0xA5A6},{0x2176, 0xA5A7},{0x2177, 0xA5A8},{0x2178, 0xA5A9},{0x2179, 0xA5AA},{0x2190, 0xA1E7},{0x2191, 0xA1E8}, - {0x2192, 0xA1E6},{0x2193, 0xA1E9},{0x2194, 0xA1EA},{0x2195, 0xA2D5},{0x2196, 0xA2D8},{0x2197, 0xA2D6},{0x2198, 0xA2D9},{0x2199, 0xA2D7}, - {0x21D2, 0xA2A1},{0x21D4, 0xA2A2},{0x2200, 0xA2A3},{0x2202, 0xA1D3},{0x2203, 0xA2A4},{0x2207, 0xA1D4},{0x2208, 0xA1F4},{0x220B, 0xA1F5}, - {0x220F, 0xA2B3},{0x2211, 0xA2B2},{0x221A, 0xA1EE},{0x221D, 0xA1F0},{0x221E, 0xA1C4},{0x2220, 0xA1D0},{0x2225, 0xA1AB},{0x2227, 0xA1FC}, - {0x2228, 0xA1FD},{0x2229, 0xA1FB},{0x222A, 0xA1FA},{0x222B, 0xA1F2},{0x222C, 0xA1F3},{0x222E, 0xA2B1},{0x2234, 0xA1C5},{0x2235, 0xA1F1}, - {0x223C, 0xA1AD},{0x223D, 0xA1EF},{0x2252, 0xA1D6},{0x2260, 0xA1C1},{0x2261, 0xA1D5},{0x2264, 0xA1C2},{0x2265, 0xA1C3},{0x226A, 0xA1EC}, - {0x226B, 0xA1ED},{0x2282, 0xA1F8},{0x2283, 0xA1F9},{0x2286, 0xA1F6},{0x2287, 0xA1F7},{0x2299, 0xA2C1},{0x22A5, 0xA1D1},{0x2312, 0xA1D2}, - {0x2460, 0xA8E7},{0x2461, 0xA8E8},{0x2462, 0xA8E9},{0x2463, 0xA8EA},{0x2464, 0xA8EB},{0x2465, 0xA8EC},{0x2466, 0xA8ED},{0x2467, 0xA8EE}, - {0x2468, 0xA8EF},{0x2469, 0xA8F0},{0x246A, 0xA8F1},{0x246B, 0xA8F2},{0x246C, 0xA8F3},{0x246D, 0xA8F4},{0x246E, 0xA8F5},{0x2474, 0xA9E7}, - {0x2475, 0xA9E8},{0x2476, 0xA9E9},{0x2477, 0xA9EA},{0x2478, 0xA9EB},{0x2479, 0xA9EC},{0x247A, 0xA9ED},{0x247B, 0xA9EE},{0x247C, 0xA9EF}, - {0x247D, 0xA9F0},{0x247E, 0xA9F1},{0x247F, 0xA9F2},{0x2480, 0xA9F3},{0x2481, 0xA9F4},{0x2482, 0xA9F5},{0x249C, 0xA9CD},{0x249D, 0xA9CE}, - {0x249E, 0xA9CF},{0x249F, 0xA9D0},{0x24A0, 0xA9D1},{0x24A1, 0xA9D2},{0x24A2, 0xA9D3},{0x24A3, 0xA9D4},{0x24A4, 0xA9D5},{0x24A5, 0xA9D6}, - {0x24A6, 0xA9D7},{0x24A7, 0xA9D8},{0x24A8, 0xA9D9},{0x24A9, 0xA9DA},{0x24AA, 0xA9DB},{0x24AB, 0xA9DC},{0x24AC, 0xA9DD},{0x24AD, 0xA9DE}, - {0x24AE, 0xA9DF},{0x24AF, 0xA9E0},{0x24B0, 0xA9E1},{0x24B1, 0xA9E2},{0x24B2, 0xA9E3},{0x24B3, 0xA9E4},{0x24B4, 0xA9E5},{0x24B5, 0xA9E6}, - {0x24D0, 0xA8CD},{0x24D1, 0xA8CE},{0x24D2, 0xA8CF},{0x24D3, 0xA8D0},{0x24D4, 0xA8D1},{0x24D5, 0xA8D2},{0x24D6, 0xA8D3},{0x24D7, 0xA8D4}, - {0x24D8, 0xA8D5},{0x24D9, 0xA8D6},{0x24DA, 0xA8D7},{0x24DB, 0xA8D8},{0x24DC, 0xA8D9},{0x24DD, 0xA8DA},{0x24DE, 0xA8DB},{0x24DF, 0xA8DC}, - {0x24E0, 0xA8DD},{0x24E1, 0xA8DE},{0x24E2, 0xA8DF},{0x24E3, 0xA8E0},{0x24E4, 0xA8E1},{0x24E5, 0xA8E2},{0x24E6, 0xA8E3},{0x24E7, 0xA8E4}, - {0x24E8, 0xA8E5},{0x24E9, 0xA8E6},{0x2500, 0xA6A1},{0x2501, 0xA6AC},{0x2502, 0xA6A2},{0x2503, 0xA6AD},{0x250C, 0xA6A3},{0x250D, 0xA6C8}, - {0x250E, 0xA6C7},{0x250F, 0xA6AE},{0x2510, 0xA6A4},{0x2511, 0xA6C2},{0x2512, 0xA6C1},{0x2513, 0xA6AF},{0x2514, 0xA6A6},{0x2515, 0xA6C6}, - {0x2516, 0xA6C5},{0x2517, 0xA6B1},{0x2518, 0xA6A5},{0x2519, 0xA6C4},{0x251A, 0xA6C3},{0x251B, 0xA6B0},{0x251C, 0xA6A7},{0x251D, 0xA6BC}, - {0x251E, 0xA6C9},{0x251F, 0xA6CA},{0x2520, 0xA6B7},{0x2521, 0xA6CB},{0x2522, 0xA6CC},{0x2523, 0xA6B2},{0x2524, 0xA6A9},{0x2525, 0xA6BE}, - {0x2526, 0xA6CD},{0x2527, 0xA6CE},{0x2528, 0xA6B9},{0x2529, 0xA6CF},{0x252A, 0xA6D0},{0x252B, 0xA6B4},{0x252C, 0xA6A8},{0x252D, 0xA6D1}, - {0x252E, 0xA6D2},{0x252F, 0xA6B8},{0x2530, 0xA6BD},{0x2531, 0xA6D3},{0x2532, 0xA6D4},{0x2533, 0xA6B3},{0x2534, 0xA6AA},{0x2535, 0xA6D5}, - {0x2536, 0xA6D6},{0x2537, 0xA6BA},{0x2538, 0xA6BF},{0x2539, 0xA6D7},{0x253A, 0xA6D8},{0x253B, 0xA6B5},{0x253C, 0xA6AB},{0x253D, 0xA6D9}, - {0x253E, 0xA6DA},{0x253F, 0xA6BB},{0x2540, 0xA6DB},{0x2541, 0xA6DC},{0x2542, 0xA6C0},{0x2543, 0xA6DD},{0x2544, 0xA6DE},{0x2545, 0xA6DF}, - {0x2546, 0xA6E0},{0x2547, 0xA6E1},{0x2548, 0xA6E2},{0x2549, 0xA6E3},{0x254A, 0xA6E4},{0x254B, 0xA6B6},{0x2592, 0xA2C6},{0x25A0, 0xA1E1}, - {0x25A1, 0xA1E0},{0x25A3, 0xA2C3},{0x25A4, 0xA2C7},{0x25A5, 0xA2C8},{0x25A6, 0xA2CB},{0x25A7, 0xA2CA},{0x25A8, 0xA2C9},{0x25A9, 0xA2CC}, - {0x25B2, 0xA1E3},{0x25B3, 0xA1E2},{0x25B6, 0xA2BA},{0x25B7, 0xA2B9},{0x25BC, 0xA1E5},{0x25BD, 0xA1E4},{0x25C0, 0xA2B8},{0x25C1, 0xA2B7}, - {0x25C6, 0xA1DF},{0x25C7, 0xA1DE},{0x25C8, 0xA2C2},{0x25CB, 0xA1DB},{0x25CE, 0xA1DD},{0x25CF, 0xA1DC},{0x25D0, 0xA2C4},{0x25D1, 0xA2C5}, - {0x2605, 0xA1DA},{0x2606, 0xA1D9},{0x260E, 0xA2CF},{0x260F, 0xA2CE},{0x261C, 0xA2D0},{0x261E, 0xA2D1},{0x2640, 0xA1CF},{0x2642, 0xA1CE}, - {0x2660, 0xA2BC},{0x2661, 0xA2BD},{0x2663, 0xA2C0},{0x2664, 0xA2BB},{0x2665, 0xA2BE},{0x2667, 0xA2BF},{0x2668, 0xA2CD},{0x2669, 0xA2DB}, - {0x266A, 0xA2DC},{0x266C, 0xA2DD},{0x266D, 0xA2DA},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3},{0x3003, 0xA1A8},{0x3008, 0xA1B4}, - {0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7},{0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BC}, - {0x3011, 0xA1BD},{0x3013, 0xA1EB},{0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3041, 0xAAA1},{0x3042, 0xAAA2},{0x3043, 0xAAA3},{0x3044, 0xAAA4}, - {0x3045, 0xAAA5},{0x3046, 0xAAA6},{0x3047, 0xAAA7},{0x3048, 0xAAA8},{0x3049, 0xAAA9},{0x304A, 0xAAAA},{0x304B, 0xAAAB},{0x304C, 0xAAAC}, - {0x304D, 0xAAAD},{0x304E, 0xAAAE},{0x304F, 0xAAAF},{0x3050, 0xAAB0},{0x3051, 0xAAB1},{0x3052, 0xAAB2},{0x3053, 0xAAB3},{0x3054, 0xAAB4}, - {0x3055, 0xAAB5},{0x3056, 0xAAB6},{0x3057, 0xAAB7},{0x3058, 0xAAB8},{0x3059, 0xAAB9},{0x305A, 0xAABA},{0x305B, 0xAABB},{0x305C, 0xAABC}, - {0x305D, 0xAABD},{0x305E, 0xAABE},{0x305F, 0xAABF},{0x3060, 0xAAC0},{0x3061, 0xAAC1},{0x3062, 0xAAC2},{0x3063, 0xAAC3},{0x3064, 0xAAC4}, - {0x3065, 0xAAC5},{0x3066, 0xAAC6},{0x3067, 0xAAC7},{0x3068, 0xAAC8},{0x3069, 0xAAC9},{0x306A, 0xAACA},{0x306B, 0xAACB},{0x306C, 0xAACC}, - {0x306D, 0xAACD},{0x306E, 0xAACE},{0x306F, 0xAACF},{0x3070, 0xAAD0},{0x3071, 0xAAD1},{0x3072, 0xAAD2},{0x3073, 0xAAD3},{0x3074, 0xAAD4}, - {0x3075, 0xAAD5},{0x3076, 0xAAD6},{0x3077, 0xAAD7},{0x3078, 0xAAD8},{0x3079, 0xAAD9},{0x307A, 0xAADA},{0x307B, 0xAADB},{0x307C, 0xAADC}, - {0x307D, 0xAADD},{0x307E, 0xAADE},{0x307F, 0xAADF},{0x3080, 0xAAE0},{0x3081, 0xAAE1},{0x3082, 0xAAE2},{0x3083, 0xAAE3},{0x3084, 0xAAE4}, - {0x3085, 0xAAE5},{0x3086, 0xAAE6},{0x3087, 0xAAE7},{0x3088, 0xAAE8},{0x3089, 0xAAE9},{0x308A, 0xAAEA},{0x308B, 0xAAEB},{0x308C, 0xAAEC}, - {0x308D, 0xAAED},{0x308E, 0xAAEE},{0x308F, 0xAAEF},{0x3090, 0xAAF0},{0x3091, 0xAAF1},{0x3092, 0xAAF2},{0x3093, 0xAAF3},{0x30A1, 0xABA1}, - {0x30A2, 0xABA2},{0x30A3, 0xABA3},{0x30A4, 0xABA4},{0x30A5, 0xABA5},{0x30A6, 0xABA6},{0x30A7, 0xABA7},{0x30A8, 0xABA8},{0x30A9, 0xABA9}, - {0x30AA, 0xABAA},{0x30AB, 0xABAB},{0x30AC, 0xABAC},{0x30AD, 0xABAD},{0x30AE, 0xABAE},{0x30AF, 0xABAF},{0x30B0, 0xABB0},{0x30B1, 0xABB1}, - {0x30B2, 0xABB2},{0x30B3, 0xABB3},{0x30B4, 0xABB4},{0x30B5, 0xABB5},{0x30B6, 0xABB6},{0x30B7, 0xABB7},{0x30B8, 0xABB8},{0x30B9, 0xABB9}, - {0x30BA, 0xABBA},{0x30BB, 0xABBB},{0x30BC, 0xABBC},{0x30BD, 0xABBD},{0x30BE, 0xABBE},{0x30BF, 0xABBF},{0x30C0, 0xABC0},{0x30C1, 0xABC1}, - {0x30C2, 0xABC2},{0x30C3, 0xABC3},{0x30C4, 0xABC4},{0x30C5, 0xABC5},{0x30C6, 0xABC6},{0x30C7, 0xABC7},{0x30C8, 0xABC8},{0x30C9, 0xABC9}, - {0x30CA, 0xABCA},{0x30CB, 0xABCB},{0x30CC, 0xABCC},{0x30CD, 0xABCD},{0x30CE, 0xABCE},{0x30CF, 0xABCF},{0x30D0, 0xABD0},{0x30D1, 0xABD1}, - {0x30D2, 0xABD2},{0x30D3, 0xABD3},{0x30D4, 0xABD4},{0x30D5, 0xABD5},{0x30D6, 0xABD6},{0x30D7, 0xABD7},{0x30D8, 0xABD8},{0x30D9, 0xABD9}, - {0x30DA, 0xABDA},{0x30DB, 0xABDB},{0x30DC, 0xABDC},{0x30DD, 0xABDD},{0x30DE, 0xABDE},{0x30DF, 0xABDF},{0x30E0, 0xABE0},{0x30E1, 0xABE1}, - {0x30E2, 0xABE2},{0x30E3, 0xABE3},{0x30E4, 0xABE4},{0x30E5, 0xABE5},{0x30E6, 0xABE6},{0x30E7, 0xABE7},{0x30E8, 0xABE8},{0x30E9, 0xABE9}, - {0x30EA, 0xABEA},{0x30EB, 0xABEB},{0x30EC, 0xABEC},{0x30ED, 0xABED},{0x30EE, 0xABEE},{0x30EF, 0xABEF},{0x30F0, 0xABF0},{0x30F1, 0xABF1}, - {0x30F2, 0xABF2},{0x30F3, 0xABF3},{0x30F4, 0xABF4},{0x30F5, 0xABF5},{0x30F6, 0xABF6},{0x3131, 0xA4A1},{0x3132, 0xA4A2},{0x3133, 0xA4A3}, - {0x3134, 0xA4A4},{0x3135, 0xA4A5},{0x3136, 0xA4A6},{0x3137, 0xA4A7},{0x3138, 0xA4A8},{0x3139, 0xA4A9},{0x313A, 0xA4AA},{0x313B, 0xA4AB}, - {0x313C, 0xA4AC},{0x313D, 0xA4AD},{0x313E, 0xA4AE},{0x313F, 0xA4AF},{0x3140, 0xA4B0},{0x3141, 0xA4B1},{0x3142, 0xA4B2},{0x3143, 0xA4B3}, - {0x3144, 0xA4B4},{0x3145, 0xA4B5},{0x3146, 0xA4B6},{0x3147, 0xA4B7},{0x3148, 0xA4B8},{0x3149, 0xA4B9},{0x314A, 0xA4BA},{0x314B, 0xA4BB}, - {0x314C, 0xA4BC},{0x314D, 0xA4BD},{0x314E, 0xA4BE},{0x314F, 0xA4BF},{0x3150, 0xA4C0},{0x3151, 0xA4C1},{0x3152, 0xA4C2},{0x3153, 0xA4C3}, - {0x3154, 0xA4C4},{0x3155, 0xA4C5},{0x3156, 0xA4C6},{0x3157, 0xA4C7},{0x3158, 0xA4C8},{0x3159, 0xA4C9},{0x315A, 0xA4CA},{0x315B, 0xA4CB}, - {0x315C, 0xA4CC},{0x315D, 0xA4CD},{0x315E, 0xA4CE},{0x315F, 0xA4CF},{0x3160, 0xA4D0},{0x3161, 0xA4D1},{0x3162, 0xA4D2},{0x3163, 0xA4D3}, - {0x3164, 0xA4D4},{0x3165, 0xA4D5},{0x3166, 0xA4D6},{0x3167, 0xA4D7},{0x3168, 0xA4D8},{0x3169, 0xA4D9},{0x316A, 0xA4DA},{0x316B, 0xA4DB}, - {0x316C, 0xA4DC},{0x316D, 0xA4DD},{0x316E, 0xA4DE},{0x316F, 0xA4DF},{0x3170, 0xA4E0},{0x3171, 0xA4E1},{0x3172, 0xA4E2},{0x3173, 0xA4E3}, - {0x3174, 0xA4E4},{0x3175, 0xA4E5},{0x3176, 0xA4E6},{0x3177, 0xA4E7},{0x3178, 0xA4E8},{0x3179, 0xA4E9},{0x317A, 0xA4EA},{0x317B, 0xA4EB}, - {0x317C, 0xA4EC},{0x317D, 0xA4ED},{0x317E, 0xA4EE},{0x317F, 0xA4EF},{0x3180, 0xA4F0},{0x3181, 0xA4F1},{0x3182, 0xA4F2},{0x3183, 0xA4F3}, - {0x3184, 0xA4F4},{0x3185, 0xA4F5},{0x3186, 0xA4F6},{0x3187, 0xA4F7},{0x3188, 0xA4F8},{0x3189, 0xA4F9},{0x318A, 0xA4FA},{0x318B, 0xA4FB}, - {0x318C, 0xA4FC},{0x318D, 0xA4FD},{0x318E, 0xA4FE},{0x3200, 0xA9B1},{0x3201, 0xA9B2},{0x3202, 0xA9B3},{0x3203, 0xA9B4},{0x3204, 0xA9B5}, - {0x3205, 0xA9B6},{0x3206, 0xA9B7},{0x3207, 0xA9B8},{0x3208, 0xA9B9},{0x3209, 0xA9BA},{0x320A, 0xA9BB},{0x320B, 0xA9BC},{0x320C, 0xA9BD}, - {0x320D, 0xA9BE},{0x320E, 0xA9BF},{0x320F, 0xA9C0},{0x3210, 0xA9C1},{0x3211, 0xA9C2},{0x3212, 0xA9C3},{0x3213, 0xA9C4},{0x3214, 0xA9C5}, - {0x3215, 0xA9C6},{0x3216, 0xA9C7},{0x3217, 0xA9C8},{0x3218, 0xA9C9},{0x3219, 0xA9CA},{0x321A, 0xA9CB},{0x321B, 0xA9CC},{0x321C, 0xA2DF}, - {0x3260, 0xA8B1},{0x3261, 0xA8B2},{0x3262, 0xA8B3},{0x3263, 0xA8B4},{0x3264, 0xA8B5},{0x3265, 0xA8B6},{0x3266, 0xA8B7},{0x3267, 0xA8B8}, - {0x3268, 0xA8B9},{0x3269, 0xA8BA},{0x326A, 0xA8BB},{0x326B, 0xA8BC},{0x326C, 0xA8BD},{0x326D, 0xA8BE},{0x326E, 0xA8BF},{0x326F, 0xA8C0}, - {0x3270, 0xA8C1},{0x3271, 0xA8C2},{0x3272, 0xA8C3},{0x3273, 0xA8C4},{0x3274, 0xA8C5},{0x3275, 0xA8C6},{0x3276, 0xA8C7},{0x3277, 0xA8C8}, - {0x3278, 0xA8C9},{0x3279, 0xA8CA},{0x327A, 0xA8CB},{0x327B, 0xA8CC},{0x327F, 0xA2DE},{0x3380, 0xA7C9},{0x3381, 0xA7CA},{0x3382, 0xA7CB}, - {0x3383, 0xA7CC},{0x3384, 0xA7CD},{0x3388, 0xA7BA},{0x3389, 0xA7BB},{0x338A, 0xA7DC},{0x338B, 0xA7DD},{0x338C, 0xA7DE},{0x338D, 0xA7B6}, - {0x338E, 0xA7B7},{0x338F, 0xA7B8},{0x3390, 0xA7D4},{0x3391, 0xA7D5},{0x3392, 0xA7D6},{0x3393, 0xA7D7},{0x3394, 0xA7D8},{0x3395, 0xA7A1}, - {0x3396, 0xA7A2},{0x3397, 0xA7A3},{0x3398, 0xA7A5},{0x3399, 0xA7AB},{0x339A, 0xA7AC},{0x339B, 0xA7AD},{0x339C, 0xA7AE},{0x339D, 0xA7AF}, - {0x339E, 0xA7B0},{0x339F, 0xA7B1},{0x33A0, 0xA7B2},{0x33A1, 0xA7B3},{0x33A2, 0xA7B4},{0x33A3, 0xA7A7},{0x33A4, 0xA7A8},{0x33A5, 0xA7A9}, - {0x33A6, 0xA7AA},{0x33A7, 0xA7BD},{0x33A8, 0xA7BE},{0x33A9, 0xA7E5},{0x33AA, 0xA7E6},{0x33AB, 0xA7E7},{0x33AC, 0xA7E8},{0x33AD, 0xA7E1}, - {0x33AE, 0xA7E2},{0x33AF, 0xA7E3},{0x33B0, 0xA7BF},{0x33B1, 0xA7C0},{0x33B2, 0xA7C1},{0x33B3, 0xA7C2},{0x33B4, 0xA7C3},{0x33B5, 0xA7C4}, - {0x33B6, 0xA7C5},{0x33B7, 0xA7C6},{0x33B8, 0xA7C7},{0x33B9, 0xA7C8},{0x33BA, 0xA7CE},{0x33BB, 0xA7CF},{0x33BC, 0xA7D0},{0x33BD, 0xA7D1}, - {0x33BE, 0xA7D2},{0x33BF, 0xA7D3},{0x33C0, 0xA7DA},{0x33C1, 0xA7DB},{0x33C2, 0xA2E3},{0x33C3, 0xA7EC},{0x33C4, 0xA7A6},{0x33C5, 0xA7E0}, - {0x33C6, 0xA7EF},{0x33C7, 0xA2E1},{0x33C8, 0xA7BC},{0x33C9, 0xA7ED},{0x33CA, 0xA7B5},{0x33CF, 0xA7B9},{0x33D0, 0xA7EA},{0x33D3, 0xA7EB}, - {0x33D6, 0xA7DF},{0x33D8, 0xA2E4},{0x33DB, 0xA7E4},{0x33DC, 0xA7EE},{0x33DD, 0xA7E9},{0x4E00, 0xECE9},{0x4E01, 0xEFCB},{0x4E03, 0xF6D2}, - {0x4E07, 0xD8B2},{0x4E08, 0xEDDB},{0x4E09, 0xDFB2},{0x4E0A, 0xDFBE},{0x4E0B, 0xF9BB},{0x4E0D, 0xDCF4},{0x4E11, 0xF5E4},{0x4E14, 0xF3A6}, - {0x4E15, 0xDDE0},{0x4E16, 0xE1A6},{0x4E18, 0xCEF8},{0x4E19, 0xDCB0},{0x4E1E, 0xE3AA},{0x4E2D, 0xF1E9},{0x4E32, 0xCDFA},{0x4E38, 0xFCAF}, - {0x4E39, 0xD3A1},{0x4E3B, 0xF1AB},{0x4E42, 0xE7D1},{0x4E43, 0xD2AC},{0x4E45, 0xCEF9},{0x4E4B, 0xF1FD},{0x4E4D, 0xDEBF},{0x4E4E, 0xFBBA}, - {0x4E4F, 0xF9B9},{0x4E56, 0xCED2},{0x4E58, 0xE3AB},{0x4E59, 0xEBE0},{0x4E5D, 0xCEFA},{0x4E5E, 0xCBF7},{0x4E5F, 0xE5A5},{0x4E6B, 0xCAE1}, - {0x4E6D, 0xD4CC},{0x4E73, 0xEAE1},{0x4E76, 0xDCE3},{0x4E77, 0xDFAD},{0x4E7E, 0xCBEB},{0x4E82, 0xD5AF},{0x4E86, 0xD6F5},{0x4E88, 0xE5F8}, - {0x4E8B, 0xDEC0},{0x4E8C, 0xECA3},{0x4E8E, 0xE9CD},{0x4E90, 0xEAA7},{0x4E91, 0xE9F6},{0x4E92, 0xFBBB},{0x4E94, 0xE7E9},{0x4E95, 0xEFCC}, - {0x4E98, 0xD0E6},{0x4E9B, 0xDEC1},{0x4E9E, 0xE4AC},{0x4EA1, 0xD8CC},{0x4EA2, 0xF9F1},{0x4EA4, 0xCEDF},{0x4EA5, 0xFAA4},{0x4EA6, 0xE6B2}, - {0x4EA8, 0xFAFB},{0x4EAB, 0xFABD},{0x4EAC, 0xCCC8},{0x4EAD, 0xEFCD},{0x4EAE, 0xD5D5},{0x4EB6, 0xD3A2},{0x4EBA, 0xECD1},{0x4EC0, 0xE4A7}, - {0x4EC1, 0xECD2},{0x4EC4, 0xF6B1},{0x4EC7, 0xCEFB},{0x4ECA, 0xD0D1},{0x4ECB, 0xCBBF},{0x4ECD, 0xEDA4},{0x4ED4, 0xEDA8},{0x4ED5, 0xDEC2}, - {0x4ED6, 0xF6E2},{0x4ED7, 0xEDDC},{0x4ED8, 0xDCF5},{0x4ED9, 0xE0B9},{0x4EDD, 0xD4CE},{0x4EDF, 0xF4B5},{0x4EE3, 0xD3DB},{0x4EE4, 0xD6B5}, - {0x4EE5, 0xECA4},{0x4EF0, 0xE4E6},{0x4EF2, 0xF1EA},{0x4EF6, 0xCBEC},{0x4EF7, 0xCBC0},{0x4EFB, 0xECF2},{0x4F01, 0xD0EA},{0x4F09, 0xF9F2}, - {0x4F0A, 0xECA5},{0x4F0B, 0xD0DF},{0x4F0D, 0xE7EA},{0x4F0E, 0xD0EB},{0x4F0F, 0xDCD1},{0x4F10, 0xDBE9},{0x4F11, 0xFDCC},{0x4F2F, 0xDBD7}, - {0x4F34, 0xDAE1},{0x4F36, 0xD6B6},{0x4F38, 0xE3DF},{0x4F3A, 0xDEC3},{0x4F3C, 0xDEC4},{0x4F3D, 0xCAA1},{0x4F43, 0xEEEC},{0x4F46, 0xD3A3}, - {0x4F47, 0xEEB7},{0x4F48, 0xF8CF},{0x4F4D, 0xEAC8},{0x4F4E, 0xEEB8},{0x4F4F, 0xF1AC},{0x4F50, 0xF1A5},{0x4F51, 0xE9CE},{0x4F55, 0xF9BC}, - {0x4F59, 0xE5F9},{0x4F5A, 0xECEA},{0x4F5B, 0xDDD6},{0x4F5C, 0xEDC2},{0x4F69, 0xF8A5},{0x4F6F, 0xE5BA},{0x4F70, 0xDBD8},{0x4F73, 0xCAA2}, - {0x4F76, 0xD1CD},{0x4F7A, 0xEEED},{0x4F7E, 0xECEB},{0x4F7F, 0xDEC5},{0x4F81, 0xE3E0},{0x4F83, 0xCAC9},{0x4F84, 0xF2E9},{0x4F86, 0xD5CE}, - {0x4F88, 0xF6B6},{0x4F8A, 0xCEC2},{0x4F8B, 0xD6C7},{0x4F8D, 0xE3B4},{0x4F8F, 0xF1AD},{0x4F91, 0xEAE2},{0x4F96, 0xD7C2},{0x4F98, 0xF3A7}, - {0x4F9B, 0xCDEA},{0x4F9D, 0xEBEE},{0x4FAE, 0xD9B2},{0x4FAF, 0xFDA5},{0x4FB5, 0xF6D5},{0x4FB6, 0xD5E2},{0x4FBF, 0xF8B5},{0x4FC2, 0xCCF5}, - {0x4FC3, 0xF5B5},{0x4FC4, 0xE4AD},{0x4FC9, 0xE7EB},{0x4FCA, 0xF1D5},{0x4FCE, 0xF0BB},{0x4FD1, 0xE9B5},{0x4FD3, 0xCCC9},{0x4FD4, 0xFAD5}, - {0x4FD7, 0xE1D4},{0x4FDA, 0xD7D6},{0x4FDD, 0xDCC1},{0x4FDF, 0xDEC6},{0x4FE0, 0xFAEF},{0x4FE1, 0xE3E1},{0x4FEE, 0xE1F3},{0x4FEF, 0xDCF6}, - {0x4FF1, 0xCEFC},{0x4FF3, 0xDBC4},{0x4FF5, 0xF8F1},{0x4FF8, 0xDCE4},{0x4FFA, 0xE5EF},{0x5002, 0xDCB1},{0x5006, 0xD5D6},{0x5009, 0xF3DA}, - {0x500B, 0xCBC1},{0x500D, 0xDBC3},{0x5011, 0xD9FA},{0x5012, 0xD3EE},{0x5016, 0xFAB8},{0x5019, 0xFDA6},{0x501A, 0xEBEF},{0x501C, 0xF4A6}, - {0x501E, 0xCCCA},{0x501F, 0xF3A8},{0x5021, 0xF3DB},{0x5023, 0xDBA7},{0x5024, 0xF6B7},{0x5026, 0xCFE6},{0x5027, 0xF0F2},{0x5028, 0xCBDA}, - {0x502A, 0xE7D2},{0x502B, 0xD7C3},{0x502C, 0xF6F0},{0x502D, 0xE8DE},{0x503B, 0xE5A6},{0x5043, 0xE5E7},{0x5047, 0xCAA3},{0x5048, 0xCCA7}, - {0x5049, 0xEAC9},{0x504F, 0xF8B6},{0x5055, 0xFAA5},{0x505A, 0xF1AE},{0x505C, 0xEFCE},{0x5065, 0xCBED},{0x5074, 0xF6B0},{0x5075, 0xEFCF}, - {0x5076, 0xE9CF},{0x5078, 0xF7DE},{0x5080, 0xCED3},{0x5085, 0xDCF7},{0x508D, 0xDBA8},{0x5091, 0xCBF8},{0x5098, 0xDFA1},{0x5099, 0xDDE1}, - {0x50AC, 0xF5CA},{0x50AD, 0xE9B6},{0x50B2, 0xE7EC},{0x50B3, 0xEEEE},{0x50B5, 0xF3F0},{0x50B7, 0xDFBF},{0x50BE, 0xCCCB},{0x50C5, 0xD0C1}, - {0x50C9, 0xF4D2},{0x50CA, 0xE0BA},{0x50CF, 0xDFC0},{0x50D1, 0xCEE0},{0x50D5, 0xDCD2},{0x50D6, 0xFDEA},{0x50DA, 0xD6F6},{0x50DE, 0xEACA}, - {0x50E5, 0xE8E9},{0x50E7, 0xE3AC},{0x50ED, 0xF3D0},{0x50F9, 0xCAA4},{0x50FB, 0xDBF8},{0x50FF, 0xDEC7},{0x5100, 0xEBF0},{0x5101, 0xF1D6}, - {0x5104, 0xE5E2},{0x5106, 0xCCCC},{0x5109, 0xCBFB},{0x5112, 0xEAE3},{0x511F, 0xDFC1},{0x5121, 0xD6ED},{0x512A, 0xE9D0},{0x5132, 0xEEB9}, - {0x5137, 0xD5E3},{0x513A, 0xD1D3},{0x513C, 0xE5F0},{0x5140, 0xE8B4},{0x5141, 0xEBC3},{0x5143, 0xEAAA},{0x5144, 0xFAFC},{0x5145, 0xF5F6}, - {0x5146, 0xF0BC},{0x5147, 0xFDD4},{0x5148, 0xE0BB},{0x5149, 0xCEC3},{0x514B, 0xD0BA},{0x514C, 0xF7BA},{0x514D, 0xD8F3},{0x514E, 0xF7CD}, - {0x5152, 0xE4AE},{0x515C, 0xD4DF},{0x5162, 0xD0E7},{0x5165, 0xECFD},{0x5167, 0xD2AE},{0x5168, 0xEEEF},{0x5169, 0xD5D7},{0x516A, 0xEAE4}, - {0x516B, 0xF8A2},{0x516C, 0xCDEB},{0x516D, 0xD7BF},{0x516E, 0xFBB1},{0x5171, 0xCDEC},{0x5175, 0xDCB2},{0x5176, 0xD0EC},{0x5177, 0xCEFD}, - {0x5178, 0xEEF0},{0x517C, 0xCCC2},{0x5180, 0xD0ED},{0x5186, 0xE5F7},{0x518A, 0xF3FC},{0x518D, 0xEEA2},{0x5192, 0xD9B3},{0x5195, 0xD8F4}, - {0x5197, 0xE9B7},{0x51A0, 0xCEAE},{0x51A5, 0xD9A2},{0x51AA, 0xD8F1},{0x51AC, 0xD4CF},{0x51B6, 0xE5A7},{0x51B7, 0xD5D2},{0x51BD, 0xD6A9}, - {0x51C4, 0xF4A2},{0x51C6, 0xF1D7},{0x51C9, 0xD5D8},{0x51CB, 0xF0BD},{0x51CC, 0xD7D0},{0x51CD, 0xD4D0},{0x51DC, 0xD7CF},{0x51DD, 0xEBEA}, - {0x51DE, 0xFDEB},{0x51E1, 0xDBED},{0x51F0, 0xFCC5},{0x51F1, 0xCBC2},{0x51F6, 0xFDD5},{0x51F8, 0xF4C8},{0x51F9, 0xE8EA},{0x51FA, 0xF5F3}, - {0x51FD, 0xF9DE},{0x5200, 0xD3EF},{0x5203, 0xECD3},{0x5206, 0xDDC2},{0x5207, 0xEFB7},{0x5208, 0xE7D4},{0x520A, 0xCACA},{0x520E, 0xD9FB}, - {0x5211, 0xFAFD},{0x5217, 0xD6AA},{0x521D, 0xF4F8},{0x5224, 0xF7F7},{0x5225, 0xDCAC},{0x5229, 0xD7D7},{0x522A, 0xDFA2},{0x522E, 0xCEBE}, - {0x5230, 0xD3F0},{0x5236, 0xF0A4},{0x5237, 0xE1EC},{0x5238, 0xCFE7},{0x5239, 0xF3CB},{0x523A, 0xEDA9},{0x523B, 0xCABE},{0x5243, 0xF4EF}, - {0x5247, 0xF6CE},{0x524A, 0xDEFB},{0x524B, 0xD0BB},{0x524C, 0xD5B7},{0x524D, 0xEEF1},{0x5254, 0xF4A8},{0x5256, 0xDCF8},{0x525B, 0xCBA7}, - {0x525D, 0xDACE},{0x5261, 0xE0E6},{0x5269, 0xEDA5},{0x526A, 0xEEF2},{0x526F, 0xDCF9},{0x5272, 0xF9DC},{0x5275, 0xF3DC},{0x527D, 0xF8F2}, - {0x527F, 0xF4F9},{0x5283, 0xFCF1},{0x5287, 0xD0BC},{0x5288, 0xDBF9},{0x5289, 0xD7B1},{0x528D, 0xCBFC},{0x5291, 0xF0A5},{0x5292, 0xCBFD}, - {0x529B, 0xD5F4},{0x529F, 0xCDED},{0x52A0, 0xCAA5},{0x52A3, 0xD6AB},{0x52A4, 0xD0C2},{0x52A9, 0xF0BE},{0x52AA, 0xD2BD},{0x52AB, 0xCCA4}, - {0x52BE, 0xFAB6},{0x52C1, 0xCCCD},{0x52C3, 0xDAFA},{0x52C5, 0xF6CF},{0x52C7, 0xE9B8},{0x52C9, 0xD8F5},{0x52CD, 0xCCCE},{0x52D2, 0xD7CD}, - {0x52D5, 0xD4D1},{0x52D6, 0xE9ED},{0x52D8, 0xCAEB},{0x52D9, 0xD9E2},{0x52DB, 0xFDB2},{0x52DD, 0xE3AD},{0x52DE, 0xD6CC},{0x52DF, 0xD9B4}, - {0x52E2, 0xE1A7},{0x52E3, 0xEED3},{0x52E4, 0xD0C3},{0x52F3, 0xFDB3},{0x52F5, 0xD5E4},{0x52F8, 0xCFE8},{0x52FA, 0xEDC3},{0x52FB, 0xD0B2}, - {0x52FE, 0xCEFE},{0x52FF, 0xDAA8},{0x5305, 0xF8D0},{0x5308, 0xFDD6},{0x530D, 0xF8D1},{0x530F, 0xF8D2},{0x5310, 0xDCD3},{0x5315, 0xDDE2}, - {0x5316, 0xFBF9},{0x5317, 0xDDC1},{0x5319, 0xE3B5},{0x5320, 0xEDDD},{0x5321, 0xCEC4},{0x5323, 0xCBA1},{0x532A, 0xDDE3},{0x532F, 0xFCDD}, - {0x5339, 0xF9AF},{0x533F, 0xD2FB},{0x5340, 0xCFA1},{0x5341, 0xE4A8},{0x5343, 0xF4B6},{0x5344, 0xECFE},{0x5347, 0xE3AE},{0x5348, 0xE7ED}, - {0x5349, 0xFDC1},{0x534A, 0xDAE2},{0x534D, 0xD8B3},{0x5351, 0xDDE4},{0x5352, 0xF0EF},{0x5353, 0xF6F1},{0x5354, 0xFAF0},{0x5357, 0xD1F5}, - {0x535A, 0xDACF},{0x535C, 0xDCD4},{0x535E, 0xDCA6},{0x5360, 0xEFBF},{0x5366, 0xCECF},{0x5368, 0xE0D9},{0x536F, 0xD9D6},{0x5370, 0xECD4}, - {0x5371, 0xEACB},{0x5374, 0xCABF},{0x5375, 0xD5B0},{0x5377, 0xCFE9},{0x537D, 0xF1ED},{0x537F, 0xCCCF},{0x5384, 0xE4F8},{0x5393, 0xE4ED}, - {0x5398, 0xD7D8},{0x539A, 0xFDA7},{0x539F, 0xEAAB},{0x53A0, 0xF6B2},{0x53A5, 0xCFF0},{0x53A6, 0xF9BD},{0x53AD, 0xE6F4},{0x53BB, 0xCBDB}, - {0x53C3, 0xF3D1},{0x53C8, 0xE9D1},{0x53C9, 0xF3A9},{0x53CA, 0xD0E0},{0x53CB, 0xE9D2},{0x53CD, 0xDAE3},{0x53D4, 0xE2D2},{0x53D6, 0xF6A2}, - {0x53D7, 0xE1F4},{0x53DB, 0xDAE4},{0x53E1, 0xE7D5},{0x53E2, 0xF5BF},{0x53E3, 0xCFA2},{0x53E4, 0xCDAF},{0x53E5, 0xCFA3},{0x53E9, 0xCDB0}, - {0x53EA, 0xF1FE},{0x53EB, 0xD0A3},{0x53EC, 0xE1AF},{0x53ED, 0xF8A3},{0x53EF, 0xCAA6},{0x53F0, 0xF7BB},{0x53F1, 0xF2EA},{0x53F2, 0xDEC8}, - {0x53F3, 0xE9D3},{0x53F8, 0xDEC9},{0x5403, 0xFDDE},{0x5404, 0xCAC0},{0x5408, 0xF9EA},{0x5409, 0xD1CE},{0x540A, 0xEED4},{0x540C, 0xD4D2}, - {0x540D, 0xD9A3},{0x540E, 0xFDA8},{0x540F, 0xD7D9},{0x5410, 0xF7CE},{0x5411, 0xFABE},{0x541B, 0xCFD6},{0x541D, 0xD7F0},{0x541F, 0xEBE1}, - {0x5420, 0xF8C5},{0x5426, 0xDCFA},{0x5429, 0xDDC3},{0x542B, 0xF9DF},{0x5433, 0xE7EF},{0x5438, 0xFDE5},{0x5439, 0xF6A3},{0x543B, 0xD9FC}, - {0x543C, 0xFDA9},{0x543E, 0xE7EE},{0x5442, 0xD5E5},{0x5448, 0xEFD0},{0x544A, 0xCDB1},{0x5451, 0xF7A2},{0x5468, 0xF1B2},{0x546A, 0xF1B1}, - {0x5471, 0xCDB2},{0x5473, 0xDAAB},{0x5475, 0xCAA7},{0x547B, 0xE3E2},{0x547C, 0xFBBC},{0x547D, 0xD9A4},{0x5480, 0xEEBA},{0x5486, 0xF8D3}, - {0x548C, 0xFBFA},{0x548E, 0xCFA4},{0x5490, 0xDCFB},{0x54A4, 0xF6E3},{0x54A8, 0xEDAA},{0x54AB, 0xF2A1},{0x54AC, 0xCEE1},{0x54B3, 0xFAA6}, - {0x54B8, 0xF9E0},{0x54BD, 0xECD6},{0x54C0, 0xE4EE},{0x54C1, 0xF9A1},{0x54C4, 0xFBEF},{0x54C8, 0xF9EB},{0x54C9, 0xEEA3},{0x54E1, 0xEAAC}, - {0x54E5, 0xCAA8},{0x54E8, 0xF4FA},{0x54ED, 0xCDD6},{0x54EE, 0xFCF6},{0x54F2, 0xF4C9},{0x54FA, 0xF8D4},{0x5504, 0xF8A6},{0x5506, 0xDECA}, - {0x5507, 0xF2C6},{0x550E, 0xD7DA},{0x5510, 0xD3D0},{0x551C, 0xD8C5},{0x552F, 0xEAE6},{0x5531, 0xF3DD},{0x5535, 0xE4DA},{0x553E, 0xF6E4}, - {0x5544, 0xF6F2},{0x5546, 0xDFC2},{0x554F, 0xD9FD},{0x5553, 0xCCF6},{0x5556, 0xD3BA},{0x555E, 0xE4AF},{0x5563, 0xF9E1},{0x557C, 0xF0A6}, - {0x5580, 0xCBD3},{0x5584, 0xE0BC},{0x5586, 0xF4CA},{0x5587, 0xD4FA},{0x5589, 0xFDAA},{0x558A, 0xF9E2},{0x5598, 0xF4B7},{0x5599, 0xFDC2}, - {0x559A, 0xFCB0},{0x559C, 0xFDEC},{0x559D, 0xCAE2},{0x55A7, 0xFDBD},{0x55A9, 0xEAE7},{0x55AA, 0xDFC3},{0x55AB, 0xD1D2},{0x55AC, 0xCEE2}, - {0x55AE, 0xD3A4},{0x55C5, 0xFDAB},{0x55C7, 0xDFE0},{0x55D4, 0xF2C7},{0x55DA, 0xE7F0},{0x55DC, 0xD0EE},{0x55DF, 0xF3AA},{0x55E3, 0xDECB}, - {0x55E4, 0xF6B8},{0x55FD, 0xE1F5},{0x55FE, 0xF1B3},{0x5606, 0xF7A3},{0x5609, 0xCAA9},{0x5614, 0xCFA5},{0x5617, 0xDFC4},{0x562F, 0xE1B0}, - {0x5632, 0xF0BF},{0x5634, 0xF6A4},{0x5636, 0xE3B6},{0x5653, 0xFAC6},{0x5668, 0xD0EF},{0x566B, 0xFDED},{0x5674, 0xDDC4},{0x5686, 0xFCF7}, - {0x56A5, 0xE6BF},{0x56AC, 0xDEAD},{0x56AE, 0xFABF},{0x56B4, 0xE5F1},{0x56BC, 0xEDC4},{0x56CA, 0xD2A5},{0x56CD, 0xFDEE},{0x56D1, 0xF5B6}, - {0x56DA, 0xE1F6},{0x56DB, 0xDECC},{0x56DE, 0xFCDE},{0x56E0, 0xECD7},{0x56F0, 0xCDDD},{0x56F9, 0xD6B7},{0x56FA, 0xCDB3},{0x5703, 0xF8D5}, - {0x5704, 0xE5D8},{0x5708, 0xCFEA},{0x570B, 0xCFD0},{0x570D, 0xEACC},{0x5712, 0xEAAE},{0x5713, 0xEAAD},{0x5716, 0xD3F1},{0x5718, 0xD3A5}, - {0x571F, 0xF7CF},{0x5728, 0xEEA4},{0x572D, 0xD0A4},{0x5730, 0xF2A2},{0x573B, 0xD0F0},{0x5740, 0xF2A3},{0x5742, 0xF7F8},{0x5747, 0xD0B3}, - {0x574A, 0xDBA9},{0x574D, 0xD3BB},{0x574E, 0xCAEC},{0x5750, 0xF1A6},{0x5751, 0xCBD5},{0x5761, 0xF7E7},{0x5764, 0xCDDE},{0x5766, 0xF7A4}, - {0x576A, 0xF8C0},{0x576E, 0xD3DD},{0x5770, 0xCCD0},{0x5775, 0xCFA6},{0x577C, 0xF6F3},{0x5782, 0xE1F7},{0x5788, 0xD3DC},{0x578B, 0xFAFE}, - {0x5793, 0xFAA7},{0x57A0, 0xEBD9},{0x57A2, 0xCFA7},{0x57A3, 0xEAAF},{0x57C3, 0xE4EF},{0x57C7, 0xE9B9},{0x57C8, 0xF1D8},{0x57CB, 0xD8D8}, - {0x57CE, 0xE0F2},{0x57DF, 0xE6B4},{0x57E0, 0xDCFC},{0x57F0, 0xF3F1},{0x57F4, 0xE3D0},{0x57F7, 0xF2FB},{0x57F9, 0xDBC6},{0x57FA, 0xD0F1}, - {0x57FC, 0xD0F2},{0x5800, 0xCFDC},{0x5802, 0xD3D1},{0x5805, 0xCCB1},{0x5806, 0xF7D8},{0x5808, 0xCBA8},{0x5809, 0xEBBC},{0x580A, 0xE4BE}, - {0x581E, 0xF4DC},{0x5821, 0xDCC2},{0x5824, 0xF0A7},{0x5827, 0xE6C0},{0x582A, 0xCAED},{0x582F, 0xE8EB},{0x5830, 0xE5E8},{0x5831, 0xDCC3}, - {0x5834, 0xEDDE},{0x5835, 0xD3F2},{0x583A, 0xCCF7},{0x584A, 0xCED4},{0x584B, 0xE7AB},{0x584F, 0xCBC3},{0x5851, 0xE1B1},{0x5854, 0xF7B2}, - {0x5857, 0xD3F3},{0x5858, 0xD3D2},{0x585A, 0xF5C0},{0x585E, 0xDFDD},{0x5861, 0xEEF3},{0x5862, 0xE7F1},{0x5864, 0xFDB4},{0x5875, 0xF2C8}, - {0x5879, 0xF3D2},{0x587C, 0xEEF4},{0x587E, 0xE2D3},{0x5883, 0xCCD1},{0x5885, 0xDFEA},{0x5889, 0xE9BA},{0x5893, 0xD9D7},{0x589C, 0xF5CD}, - {0x589E, 0xF1F2},{0x589F, 0xFAC7},{0x58A8, 0xD9F8},{0x58A9, 0xD4C2},{0x58AE, 0xF6E5},{0x58B3, 0xDDC5},{0x58BA, 0xE7F2},{0x58BB, 0xEDDF}, - {0x58BE, 0xCACB},{0x58C1, 0xDBFA},{0x58C5, 0xE8B5},{0x58C7, 0xD3A6},{0x58CE, 0xFDB5},{0x58D1, 0xF9C9},{0x58D3, 0xE4E2},{0x58D5, 0xFBBD}, - {0x58D8, 0xD7A4},{0x58D9, 0xCEC5},{0x58DE, 0xCED5},{0x58DF, 0xD6E6},{0x58E4, 0xE5BD},{0x58EB, 0xDECD},{0x58EC, 0xECF3},{0x58EF, 0xEDE0}, - {0x58F9, 0xECEC},{0x58FA, 0xFBBE},{0x58FB, 0xDFEB},{0x58FD, 0xE1F8},{0x590F, 0xF9BE},{0x5914, 0xD0F3},{0x5915, 0xE0AA},{0x5916, 0xE8E2}, - {0x5919, 0xE2D4},{0x591A, 0xD2FD},{0x591C, 0xE5A8},{0x5922, 0xD9D3},{0x5927, 0xD3DE},{0x5929, 0xF4B8},{0x592A, 0xF7BC},{0x592B, 0xDCFD}, - {0x592D, 0xE8EC},{0x592E, 0xE4E7},{0x5931, 0xE3F7},{0x5937, 0xECA8},{0x593E, 0xFAF1},{0x5944, 0xE5F2},{0x5947, 0xD0F4},{0x5948, 0xD2AF}, - {0x5949, 0xDCE5},{0x594E, 0xD0A5},{0x594F, 0xF1B4},{0x5950, 0xFCB1},{0x5951, 0xCCF8},{0x5954, 0xDDC6},{0x5955, 0xFAD1},{0x5957, 0xF7DF}, - {0x595A, 0xFAA8},{0x5960, 0xEEF5},{0x5962, 0xDECE},{0x5967, 0xE7F3},{0x596A, 0xF7AC},{0x596B, 0xEBC4},{0x596C, 0xEDE1},{0x596D, 0xE0AB}, - {0x596E, 0xDDC7},{0x5973, 0xD2B3},{0x5974, 0xD2BF},{0x5978, 0xCACC},{0x597D, 0xFBBF},{0x5982, 0xE5FD},{0x5983, 0xDDE5},{0x5984, 0xD8CD}, - {0x598A, 0xECF4},{0x5993, 0xD0F5},{0x5996, 0xE8ED},{0x5997, 0xD0D2},{0x5999, 0xD9D8},{0x59A5, 0xF6E6},{0x59A8, 0xDBAA},{0x59AC, 0xF7E0}, - {0x59B9, 0xD8D9},{0x59BB, 0xF4A3},{0x59BE, 0xF4DD},{0x59C3, 0xEFD1},{0x59C6, 0xD9B5},{0x59C9, 0xEDAB},{0x59CB, 0xE3B7},{0x59D0, 0xEEBB}, - {0x59D1, 0xCDB4},{0x59D3, 0xE0F3},{0x59D4, 0xEACD},{0x59D9, 0xECF5},{0x59DA, 0xE8EE},{0x59DC, 0xCBA9},{0x59DD, 0xF1AF},{0x59E6, 0xCACD}, - {0x59E8, 0xECA9},{0x59EA, 0xF2EB},{0x59EC, 0xFDEF},{0x59EE, 0xF9F3},{0x59F8, 0xE6C1},{0x59FB, 0xECD8},{0x59FF, 0xEDAC},{0x5A01, 0xEACE}, - {0x5A03, 0xE8DF},{0x5A11, 0xDECF},{0x5A18, 0xD2A6},{0x5A1B, 0xE7F4},{0x5A1C, 0xD1D6},{0x5A1F, 0xE6C2},{0x5A20, 0xE3E3},{0x5A25, 0xE4B0}, - {0x5A29, 0xD8B4},{0x5A36, 0xF6A5},{0x5A3C, 0xF3DE},{0x5A41, 0xD7A5},{0x5A46, 0xF7E8},{0x5A49, 0xE8C6},{0x5A5A, 0xFBE6},{0x5A62, 0xDDE6}, - {0x5A66, 0xDCFE},{0x5A92, 0xD8DA},{0x5A9A, 0xDAAC},{0x5A9B, 0xEAB0},{0x5AA4, 0xE3B8},{0x5AC1, 0xCAAA},{0x5AC2, 0xE1F9},{0x5AC4, 0xEAB1}, - {0x5AC9, 0xF2EC},{0x5ACC, 0xFAEE},{0x5AE1, 0xEED5},{0x5AE6, 0xF9F4},{0x5AE9, 0xD2EC},{0x5B05, 0xFBFB},{0x5B09, 0xFDF0},{0x5B0B, 0xE0BD}, - {0x5B0C, 0xCEE3},{0x5B16, 0xF8C6},{0x5B2A, 0xDEAE},{0x5B40, 0xDFC5},{0x5B43, 0xE5BE},{0x5B50, 0xEDAD},{0x5B51, 0xFAEA},{0x5B54, 0xCDEE}, - {0x5B55, 0xEDA6},{0x5B57, 0xEDAE},{0x5B58, 0xF0ED},{0x5B5A, 0xDDA1},{0x5B5C, 0xEDAF},{0x5B5D, 0xFCF8},{0x5B5F, 0xD8EB},{0x5B63, 0xCCF9}, - {0x5B64, 0xCDB5},{0x5B69, 0xFAA9},{0x5B6B, 0xE1DD},{0x5B70, 0xE2D5},{0x5B71, 0xEDCF},{0x5B75, 0xDDA2},{0x5B78, 0xF9CA},{0x5B7A, 0xEAE8}, - {0x5B7C, 0xE5ED},{0x5B85, 0xD3EB},{0x5B87, 0xE9D4},{0x5B88, 0xE1FA},{0x5B89, 0xE4CC},{0x5B8B, 0xE1E4},{0x5B8C, 0xE8C7},{0x5B8F, 0xCEDB}, - {0x5B93, 0xDCD5},{0x5B95, 0xF7B5},{0x5B96, 0xFCF3},{0x5B97, 0xF0F3},{0x5B98, 0xCEAF},{0x5B99, 0xF1B5},{0x5B9A, 0xEFD2},{0x5B9B, 0xE8C8}, - {0x5B9C, 0xEBF1},{0x5BA2, 0xCBD4},{0x5BA3, 0xE0BE},{0x5BA4, 0xE3F8},{0x5BA5, 0xEAE9},{0x5BA6, 0xFCB2},{0x5BAC, 0xE0F4},{0x5BAE, 0xCFE0}, - {0x5BB0, 0xEEA5},{0x5BB3, 0xFAAA},{0x5BB4, 0xE6C3},{0x5BB5, 0xE1B2},{0x5BB6, 0xCAAB},{0x5BB8, 0xE3E4},{0x5BB9, 0xE9BB},{0x5BBF, 0xE2D6}, - {0x5BC0, 0xF3F2},{0x5BC2, 0xEED6},{0x5BC3, 0xEAB2},{0x5BC4, 0xD0F6},{0x5BC5, 0xECD9},{0x5BC6, 0xDACB},{0x5BC7, 0xCFA8},{0x5BCC, 0xDDA3}, - {0x5BD0, 0xD8DB},{0x5BD2, 0xF9CE},{0x5BD3, 0xE9D5},{0x5BD4, 0xE3D1},{0x5BD7, 0xD2BC},{0x5BDE, 0xD8AC},{0x5BDF, 0xF3CC},{0x5BE1, 0xCDFB}, - {0x5BE2, 0xF6D6},{0x5BE4, 0xE7F5},{0x5BE5, 0xE8EF},{0x5BE6, 0xE3F9},{0x5BE7, 0xD2BB},{0x5BE8, 0xF3F3},{0x5BE9, 0xE3FB},{0x5BEB, 0xDED0}, - {0x5BEC, 0xCEB0},{0x5BEE, 0xD6F7},{0x5BEF, 0xF1D9},{0x5BF5, 0xF5C1},{0x5BF6, 0xDCC4},{0x5BF8, 0xF5BB},{0x5BFA, 0xDED1},{0x5C01, 0xDCE6}, - {0x5C04, 0xDED2},{0x5C07, 0xEDE2},{0x5C08, 0xEEF6},{0x5C09, 0xEACF},{0x5C0A, 0xF0EE},{0x5C0B, 0xE3FC},{0x5C0D, 0xD3DF},{0x5C0E, 0xD3F4}, - {0x5C0F, 0xE1B3},{0x5C11, 0xE1B4},{0x5C16, 0xF4D3},{0x5C19, 0xDFC6},{0x5C24, 0xE9D6},{0x5C28, 0xDBAB},{0x5C31, 0xF6A6},{0x5C38, 0xE3B9}, - {0x5C39, 0xEBC5},{0x5C3A, 0xF4A9},{0x5C3B, 0xCDB6},{0x5C3C, 0xD2F9},{0x5C3E, 0xDAAD},{0x5C3F, 0xD2E3},{0x5C40, 0xCFD1},{0x5C45, 0xCBDC}, - {0x5C46, 0xCCFA},{0x5C48, 0xCFDD},{0x5C4B, 0xE8A9},{0x5C4D, 0xE3BB},{0x5C4E, 0xE3BA},{0x5C51, 0xE0DA},{0x5C55, 0xEEF7},{0x5C5B, 0xDCB3}, - {0x5C60, 0xD3F5},{0x5C62, 0xD7A6},{0x5C64, 0xF6B5},{0x5C65, 0xD7DB},{0x5C6C, 0xE1D5},{0x5C6F, 0xD4EA},{0x5C71, 0xDFA3},{0x5C79, 0xFDDF}, - {0x5C90, 0xD0F7},{0x5C91, 0xEDD4},{0x5CA1, 0xCBAA},{0x5CA9, 0xE4DB},{0x5CAB, 0xE1FB},{0x5CAC, 0xCBA2},{0x5CB1, 0xD3E0},{0x5CB3, 0xE4BF}, - {0x5CB5, 0xFBC0},{0x5CB7, 0xDABE},{0x5CB8, 0xE4CD},{0x5CBA, 0xD6B9},{0x5CBE, 0xEFC0},{0x5CC0, 0xE1FC},{0x5CD9, 0xF6B9},{0x5CE0, 0xDFC7}, - {0x5CE8, 0xE4B1},{0x5CEF, 0xDCE7},{0x5CF0, 0xDCE8},{0x5CF4, 0xFAD6},{0x5CF6, 0xD3F6},{0x5CFB, 0xF1DA},{0x5CFD, 0xFAF2},{0x5D07, 0xE2FD}, - {0x5D0D, 0xD5CF},{0x5D0E, 0xD0F8},{0x5D11, 0xCDDF},{0x5D14, 0xF5CB},{0x5D16, 0xE4F0},{0x5D17, 0xCBAB},{0x5D19, 0xD7C4},{0x5D27, 0xE2FE}, - {0x5D29, 0xDDDA},{0x5D4B, 0xDAAE},{0x5D4C, 0xCAEE},{0x5D50, 0xD5B9},{0x5D69, 0xE3A1},{0x5D6C, 0xE8E3},{0x5D6F, 0xF3AB},{0x5D87, 0xCFA9}, - {0x5D8B, 0xD3F7},{0x5D9D, 0xD4F1},{0x5DA0, 0xCEE4},{0x5DA2, 0xE8F2},{0x5DAA, 0xE5F5},{0x5DB8, 0xE7AE},{0x5DBA, 0xD6BA},{0x5DBC, 0xDFEC}, - {0x5DBD, 0xE4C0},{0x5DCD, 0xE8E4},{0x5DD2, 0xD8B5},{0x5DD6, 0xE4DC},{0x5DDD, 0xF4B9},{0x5DDE, 0xF1B6},{0x5DE1, 0xE2DE},{0x5DE2, 0xE1B5}, - {0x5DE5, 0xCDEF},{0x5DE6, 0xF1A7},{0x5DE7, 0xCEE5},{0x5DE8, 0xCBDD},{0x5DEB, 0xD9E3},{0x5DEE, 0xF3AC},{0x5DF1, 0xD0F9},{0x5DF2, 0xECAB}, - {0x5DF3, 0xDED3},{0x5DF4, 0xF7E9},{0x5DF7, 0xF9F5},{0x5DFD, 0xE1DE},{0x5DFE, 0xCBEE},{0x5E02, 0xE3BC},{0x5E03, 0xF8D6},{0x5E06, 0xDBEE}, - {0x5E0C, 0xFDF1},{0x5E11, 0xF7B6},{0x5E16, 0xF4DE},{0x5E19, 0xF2ED},{0x5E1B, 0xDBD9},{0x5E1D, 0xF0A8},{0x5E25, 0xE1FD},{0x5E2B, 0xDED4}, - {0x5E2D, 0xE0AC},{0x5E33, 0xEDE3},{0x5E36, 0xD3E1},{0x5E38, 0xDFC8},{0x5E3D, 0xD9B6},{0x5E3F, 0xFDAC},{0x5E40, 0xEFD3},{0x5E44, 0xE4C1}, - {0x5E45, 0xF8EB},{0x5E47, 0xDBAC},{0x5E4C, 0xFCC6},{0x5E55, 0xD8AD},{0x5E5F, 0xF6BA},{0x5E61, 0xDBDF},{0x5E62, 0xD3D3},{0x5E63, 0xF8C7}, - {0x5E72, 0xCACE},{0x5E73, 0xF8C1},{0x5E74, 0xD2B4},{0x5E77, 0xDCB4},{0x5E78, 0xFAB9},{0x5E79, 0xCACF},{0x5E7B, 0xFCB3},{0x5E7C, 0xEAEA}, - {0x5E7D, 0xEAEB},{0x5E7E, 0xD0FA},{0x5E84, 0xEDE4},{0x5E87, 0xDDE7},{0x5E8A, 0xDFC9},{0x5E8F, 0xDFED},{0x5E95, 0xEEBC},{0x5E97, 0xEFC1}, - {0x5E9A, 0xCCD2},{0x5E9C, 0xDDA4},{0x5EA0, 0xDFCA},{0x5EA6, 0xD3F8},{0x5EA7, 0xF1A8},{0x5EAB, 0xCDB7},{0x5EAD, 0xEFD4},{0x5EB5, 0xE4DD}, - {0x5EB6, 0xDFEE},{0x5EB7, 0xCBAC},{0x5EB8, 0xE9BC},{0x5EBE, 0xEAEC},{0x5EC2, 0xDFCB},{0x5EC8, 0xF9BF},{0x5EC9, 0xD6AF},{0x5ECA, 0xD5C6}, - {0x5ED0, 0xCFAA},{0x5ED3, 0xCEA9},{0x5ED6, 0xD6F8},{0x5EDA, 0xF1B7},{0x5EDB, 0xEEF8},{0x5EDF, 0xD9D9},{0x5EE0, 0xF3DF},{0x5EE2, 0xF8C8}, - {0x5EE3, 0xCEC6},{0x5EEC, 0xD5E6},{0x5EF3, 0xF4E6},{0x5EF6, 0xE6C5},{0x5EF7, 0xEFD5},{0x5EFA, 0xCBEF},{0x5EFB, 0xFCDF},{0x5F01, 0xDCA7}, - {0x5F04, 0xD6E7},{0x5F0A, 0xF8C9},{0x5F0F, 0xE3D2},{0x5F11, 0xE3BD},{0x5F13, 0xCFE1},{0x5F14, 0xF0C0},{0x5F15, 0xECDA},{0x5F17, 0xDDD7}, - {0x5F18, 0xFBF0},{0x5F1B, 0xECAC},{0x5F1F, 0xF0A9},{0x5F26, 0xFAD7},{0x5F27, 0xFBC1},{0x5F29, 0xD2C0},{0x5F31, 0xE5B0},{0x5F35, 0xEDE5}, - {0x5F3A, 0xCBAD},{0x5F3C, 0xF9B0},{0x5F48, 0xF7A5},{0x5F4A, 0xCBAE},{0x5F4C, 0xDAAF},{0x5F4E, 0xD8B6},{0x5F56, 0xD3A7},{0x5F57, 0xFBB2}, - {0x5F59, 0xFDC4},{0x5F5B, 0xECAD},{0x5F62, 0xFBA1},{0x5F66, 0xE5E9},{0x5F67, 0xE9EE},{0x5F69, 0xF3F4},{0x5F6A, 0xF8F3},{0x5F6B, 0xF0C1}, - {0x5F6C, 0xDEAF},{0x5F6D, 0xF8B0},{0x5F70, 0xF3E0},{0x5F71, 0xE7AF},{0x5F77, 0xDBAD},{0x5F79, 0xE6B5},{0x5F7C, 0xF9A8},{0x5F7F, 0xDDD8}, - {0x5F80, 0xE8D9},{0x5F81, 0xEFD6},{0x5F85, 0xD3E2},{0x5F87, 0xE2DF},{0x5F8A, 0xFCE0},{0x5F8B, 0xD7C8},{0x5F8C, 0xFDAD},{0x5F90, 0xDFEF}, - {0x5F91, 0xCCD3},{0x5F92, 0xD3F9},{0x5F97, 0xD4F0},{0x5F98, 0xDBC7},{0x5F99, 0xDED5},{0x5F9E, 0xF0F4},{0x5FA0, 0xD5D0},{0x5FA1, 0xE5D9}, - {0x5FA8, 0xFCC7},{0x5FA9, 0xDCD6},{0x5FAA, 0xE2E0},{0x5FAE, 0xDAB0},{0x5FB5, 0xF3A3},{0x5FB7, 0xD3EC},{0x5FB9, 0xF4CB},{0x5FBD, 0xFDC5}, - {0x5FC3, 0xE3FD},{0x5FC5, 0xF9B1},{0x5FCC, 0xD0FB},{0x5FCD, 0xECDB},{0x5FD6, 0xF5BC},{0x5FD7, 0xF2A4},{0x5FD8, 0xD8CE},{0x5FD9, 0xD8CF}, - {0x5FE0, 0xF5F7},{0x5FEB, 0xF6E1},{0x5FF5, 0xD2B7},{0x5FFD, 0xFBEC},{0x5FFF, 0xDDC8},{0x600F, 0xE4E8},{0x6012, 0xD2C1},{0x6016, 0xF8D7}, - {0x601C, 0xD6BB},{0x601D, 0xDED6},{0x6020, 0xF7BD},{0x6021, 0xECAE},{0x6025, 0xD0E1},{0x6027, 0xE0F5},{0x6028, 0xEAB3},{0x602A, 0xCED6}, - {0x602F, 0xCCA5},{0x6041, 0xECF6},{0x6042, 0xE2E1},{0x6043, 0xE3BE},{0x604D, 0xFCC8},{0x6050, 0xCDF0},{0x6052, 0xF9F6},{0x6055, 0xDFF0}, - {0x6059, 0xE5BF},{0x605D, 0xCEBF},{0x6062, 0xFCE1},{0x6063, 0xEDB0},{0x6064, 0xFDD1},{0x6065, 0xF6BB},{0x6068, 0xF9CF},{0x6069, 0xEBDA}, - {0x606A, 0xCAC1},{0x606C, 0xD2B8},{0x606D, 0xCDF1},{0x606F, 0xE3D3},{0x6070, 0xFDE6},{0x6085, 0xE6ED},{0x6089, 0xE3FA},{0x608C, 0xF0AA}, - {0x608D, 0xF9D0},{0x6094, 0xFCE2},{0x6096, 0xF8A7},{0x609A, 0xE1E5},{0x609B, 0xEEF9},{0x609F, 0xE7F6},{0x60A0, 0xEAED},{0x60A3, 0xFCB4}, - {0x60A4, 0xF5C2},{0x60A7, 0xD7DC},{0x60B0, 0xF0F5},{0x60B2, 0xDDE8},{0x60B3, 0xD3ED},{0x60B4, 0xF5FC},{0x60B6, 0xDABF},{0x60B8, 0xCCFB}, - {0x60BC, 0xD3FA},{0x60BD, 0xF4A4},{0x60C5, 0xEFD7},{0x60C7, 0xD4C3},{0x60D1, 0xFBE3},{0x60DA, 0xFBED},{0x60DC, 0xE0AD},{0x60DF, 0xEAEE}, - {0x60E0, 0xFBB3},{0x60E1, 0xE4C2},{0x60F0, 0xF6E7},{0x60F1, 0xD2DD},{0x60F3, 0xDFCC},{0x60F6, 0xFCC9},{0x60F9, 0xE5A9},{0x60FA, 0xE0F6}, - {0x60FB, 0xF6B3},{0x6101, 0xE1FE},{0x6106, 0xCBF0},{0x6108, 0xEAEF},{0x6109, 0xEAF0},{0x610D, 0xDAC0},{0x610E, 0xF8B4},{0x610F, 0xEBF2}, - {0x6115, 0xE4C3},{0x611A, 0xE9D7},{0x611B, 0xE4F1},{0x611F, 0xCAEF},{0x6127, 0xCED7},{0x6130, 0xFCCA},{0x6134, 0xF3E1},{0x6137, 0xCBC4}, - {0x613C, 0xE3E5},{0x613E, 0xCBC5},{0x613F, 0xEAB4},{0x6142, 0xE9BD},{0x6144, 0xD7C9},{0x6147, 0xEBDB},{0x6148, 0xEDB1},{0x614A, 0xCCC3}, - {0x614B, 0xF7BE},{0x614C, 0xFCCB},{0x6153, 0xF8F4},{0x6155, 0xD9B7},{0x6158, 0xF3D3},{0x6159, 0xF3D4},{0x615D, 0xF7E4},{0x615F, 0xF7D1}, - {0x6162, 0xD8B7},{0x6163, 0xCEB1},{0x6164, 0xCAC2},{0x6167, 0xFBB4},{0x6168, 0xCBC6},{0x616B, 0xF0F6},{0x616E, 0xD5E7},{0x6170, 0xEAD0}, - {0x6176, 0xCCD4},{0x6177, 0xCBAF},{0x617D, 0xF4AA},{0x617E, 0xE9AF},{0x6181, 0xF5C3},{0x6182, 0xE9D8},{0x618A, 0xDDE9},{0x618E, 0xF1F3}, - {0x6190, 0xD5FB},{0x6191, 0xDEBB},{0x6194, 0xF4FB},{0x6198, 0xFDF3},{0x6199, 0xFDF2},{0x619A, 0xF7A6},{0x61A4, 0xDDC9},{0x61A7, 0xD4D3}, - {0x61A9, 0xCCA8},{0x61AB, 0xDAC1},{0x61AC, 0xCCD5},{0x61AE, 0xD9E4},{0x61B2, 0xFACA},{0x61B6, 0xE5E3},{0x61BA, 0xD3BC},{0x61BE, 0xCAF0}, - {0x61C3, 0xD0C4},{0x61C7, 0xCAD0},{0x61C8, 0xFAAB},{0x61C9, 0xEBEB},{0x61CA, 0xE7F8},{0x61CB, 0xD9E5},{0x61E6, 0xD1D7},{0x61F2, 0xF3A4}, - {0x61F6, 0xD4FB},{0x61F7, 0xFCE3},{0x61F8, 0xFAD8},{0x61FA, 0xF3D5},{0x61FC, 0xCFAB},{0x61FF, 0xEBF3},{0x6200, 0xD5FC},{0x6207, 0xD3D4}, - {0x6208, 0xCDFC},{0x620A, 0xD9E6},{0x620C, 0xE2F9},{0x620D, 0xE2A1},{0x620E, 0xEBD4},{0x6210, 0xE0F7},{0x6211, 0xE4B2},{0x6212, 0xCCFC}, - {0x6216, 0xFBE4},{0x621A, 0xF4AB},{0x621F, 0xD0BD},{0x6221, 0xCAF1},{0x622A, 0xEFB8},{0x622E, 0xD7C0},{0x6230, 0xEEFA},{0x6231, 0xFDF4}, - {0x6234, 0xD3E3},{0x6236, 0xFBC2},{0x623E, 0xD5E8},{0x623F, 0xDBAE},{0x6240, 0xE1B6},{0x6241, 0xF8B7},{0x6247, 0xE0BF},{0x6248, 0xFBC3}, - {0x6249, 0xDDEA},{0x624B, 0xE2A2},{0x624D, 0xEEA6},{0x6253, 0xF6E8},{0x6258, 0xF6F5},{0x626E, 0xDDCA},{0x6271, 0xD0E2},{0x6276, 0xDDA6}, - {0x6279, 0xDDEB},{0x627C, 0xE4F9},{0x627F, 0xE3AF},{0x6280, 0xD0FC},{0x6284, 0xF4FC},{0x6289, 0xCCBC},{0x628A, 0xF7EA},{0x6291, 0xE5E4}, - {0x6292, 0xDFF1},{0x6295, 0xF7E1},{0x6297, 0xF9F7},{0x6298, 0xEFB9},{0x629B, 0xF8D8},{0x62AB, 0xF9A9},{0x62B1, 0xF8D9},{0x62B5, 0xEEBD}, - {0x62B9, 0xD8C6},{0x62BC, 0xE4E3},{0x62BD, 0xF5CE},{0x62C2, 0xDDD9},{0x62C7, 0xD9E7},{0x62C8, 0xD2B9},{0x62C9, 0xD5C3},{0x62CC, 0xDAE5}, - {0x62CD, 0xDAD0},{0x62CF, 0xD1D9},{0x62D0, 0xCED8},{0x62D2, 0xCBDE},{0x62D3, 0xF4AC},{0x62D4, 0xDAFB},{0x62D6, 0xF6E9},{0x62D7, 0xE8F3}, - {0x62D8, 0xCFAC},{0x62D9, 0xF0F0},{0x62DB, 0xF4FD},{0x62DC, 0xDBC8},{0x62EC, 0xCEC0},{0x62ED, 0xE3D4},{0x62EE, 0xD1CF},{0x62EF, 0xF1F5}, - {0x62F1, 0xCDF2},{0x62F3, 0xCFEB},{0x62F7, 0xCDB8},{0x62FE, 0xE3A6},{0x62FF, 0xD1DA},{0x6301, 0xF2A5},{0x6307, 0xF2A6},{0x6309, 0xE4CE}, - {0x6311, 0xD3FB},{0x632B, 0xF1A9},{0x632F, 0xF2C9},{0x633A, 0xEFD8},{0x633B, 0xE6C9},{0x633D, 0xD8B8},{0x633E, 0xFAF3},{0x6349, 0xF3B5}, - {0x634C, 0xF8A4},{0x634F, 0xD1F3},{0x6350, 0xE6C8},{0x6355, 0xF8DA},{0x6367, 0xDCE9},{0x6368, 0xDED7},{0x636E, 0xCBDF},{0x6372, 0xCFEC}, - {0x6377, 0xF4DF},{0x637A, 0xD1F4},{0x637B, 0xD2BA},{0x637F, 0xDFF2},{0x6383, 0xE1B7},{0x6388, 0xE2A3},{0x6389, 0xD3FC},{0x638C, 0xEDE6}, - {0x6392, 0xDBC9},{0x6396, 0xE4FA},{0x6398, 0xCFDE},{0x639B, 0xCED0},{0x63A0, 0xD5D3},{0x63A1, 0xF3F5},{0x63A2, 0xF7AE},{0x63A5, 0xEFC8}, - {0x63A7, 0xCDF3},{0x63A8, 0xF5CF},{0x63A9, 0xE5F3},{0x63AA, 0xF0C2},{0x63C0, 0xCAD1},{0x63C4, 0xEAF1},{0x63C6, 0xD0A6},{0x63CF, 0xD9DA}, - {0x63D0, 0xF0AB},{0x63D6, 0xEBE7},{0x63DA, 0xE5C0},{0x63DB, 0xFCB5},{0x63E1, 0xE4C4},{0x63ED, 0xCCA9},{0x63EE, 0xFDC6},{0x63F4, 0xEAB5}, - {0x63F6, 0xE5AA},{0x63F7, 0xDFBA},{0x640D, 0xE1DF},{0x640F, 0xDAD1},{0x6414, 0xE1B8},{0x6416, 0xE8F4},{0x6417, 0xD3FD},{0x641C, 0xE2A4}, - {0x6422, 0xF2CA},{0x642C, 0xDAE6},{0x642D, 0xF7B3},{0x643A, 0xFDCD},{0x643E, 0xF3B6},{0x6458, 0xEED7},{0x6460, 0xF5C4},{0x6469, 0xD8A4}, - {0x646F, 0xF2A7},{0x6478, 0xD9B8},{0x6479, 0xD9B9},{0x647A, 0xEFC9},{0x6488, 0xD6CE},{0x6491, 0xF7CB},{0x6492, 0xDFAE},{0x6493, 0xE8F5}, - {0x649A, 0xD2B5},{0x649E, 0xD3D5},{0x64A4, 0xF4CC},{0x64A5, 0xDAFC},{0x64AB, 0xD9E8},{0x64AD, 0xF7EB},{0x64AE, 0xF5C9},{0x64B0, 0xF3BC}, - {0x64B2, 0xDAD2},{0x64BB, 0xD3B5},{0x64C1, 0xE8B6},{0x64C4, 0xD6CF},{0x64C5, 0xF4BA},{0x64C7, 0xF7C9},{0x64CA, 0xCCAA},{0x64CD, 0xF0C3}, - {0x64CE, 0xCCD6},{0x64D2, 0xD0D3},{0x64D4, 0xD3BD},{0x64D8, 0xDBFB},{0x64DA, 0xCBE0},{0x64E1, 0xD3E4},{0x64E2, 0xF6F7},{0x64E5, 0xD5BA}, - {0x64E6, 0xF3CD},{0x64E7, 0xCBE1},{0x64EC, 0xEBF4},{0x64F2, 0xF4AD},{0x64F4, 0xFCAA},{0x64FA, 0xF7EC},{0x64FE, 0xE8F6},{0x6500, 0xDAE7}, - {0x6504, 0xF7CC},{0x6518, 0xE5C1},{0x651D, 0xE0EE},{0x6523, 0xD5FD},{0x652A, 0xCEE6},{0x652B, 0xFCAB},{0x652C, 0xD5BB},{0x652F, 0xF2A8}, - {0x6536, 0xE2A5},{0x6537, 0xCDB9},{0x6538, 0xEAF2},{0x6539, 0xCBC7},{0x653B, 0xCDF4},{0x653E, 0xDBAF},{0x653F, 0xEFD9},{0x6545, 0xCDBA}, - {0x6548, 0xFCF9},{0x654D, 0xDFF3},{0x654E, 0xCEE7},{0x654F, 0xDAC2},{0x6551, 0xCFAD},{0x6556, 0xE7F9},{0x6557, 0xF8A8},{0x655E, 0xF3E2}, - {0x6562, 0xCAF2},{0x6563, 0xDFA4},{0x6566, 0xD4C4},{0x656C, 0xCCD7},{0x656D, 0xE5C2},{0x6572, 0xCDBB},{0x6574, 0xEFDA},{0x6575, 0xEED8}, - {0x6577, 0xDDA7},{0x6578, 0xE2A6},{0x657E, 0xE0C0},{0x6582, 0xD6B0},{0x6583, 0xF8CA},{0x6585, 0xFCFA},{0x6587, 0xD9FE},{0x658C, 0xDEB0}, - {0x6590, 0xDDEC},{0x6591, 0xDAE8},{0x6597, 0xD4E0},{0x6599, 0xD6F9},{0x659B, 0xCDD7},{0x659C, 0xDED8},{0x659F, 0xF2F8},{0x65A1, 0xE4D6}, - {0x65A4, 0xD0C5},{0x65A5, 0xF4AE},{0x65A7, 0xDDA8},{0x65AB, 0xEDC5},{0x65AC, 0xF3D6},{0x65AF, 0xDED9},{0x65B0, 0xE3E6},{0x65B7, 0xD3A8}, - {0x65B9, 0xDBB0},{0x65BC, 0xE5DA},{0x65BD, 0xE3BF},{0x65C1, 0xDBB1},{0x65C5, 0xD5E9},{0x65CB, 0xE0C1},{0x65CC, 0xEFDB},{0x65CF, 0xF0E9}, - {0x65D2, 0xD7B2},{0x65D7, 0xD0FD},{0x65E0, 0xD9E9},{0x65E3, 0xD0FE},{0x65E5, 0xECED},{0x65E6, 0xD3A9},{0x65E8, 0xF2A9},{0x65E9, 0xF0C4}, - {0x65EC, 0xE2E2},{0x65ED, 0xE9EF},{0x65F1, 0xF9D1},{0x65F4, 0xE9D9},{0x65FA, 0xE8DA},{0x65FB, 0xDAC3},{0x65FC, 0xDAC4},{0x65FD, 0xD4C5}, - {0x65FF, 0xE7FA},{0x6606, 0xCDE0},{0x6607, 0xE3B0},{0x6609, 0xDBB2},{0x660A, 0xFBC4},{0x660C, 0xF3E3},{0x660E, 0xD9A5},{0x660F, 0xFBE7}, - {0x6610, 0xDDCB},{0x6611, 0xD0D4},{0x6613, 0xE6B6},{0x6614, 0xE0AE},{0x6615, 0xFDDA},{0x661E, 0xDCB5},{0x661F, 0xE0F8},{0x6620, 0xE7B1}, - {0x6625, 0xF5F0},{0x6627, 0xD8DC},{0x6628, 0xEDC6},{0x662D, 0xE1B9},{0x662F, 0xE3C0},{0x6630, 0xF9C0},{0x6631, 0xE9F0},{0x6634, 0xD9DB}, - {0x6636, 0xF3E4},{0x663A, 0xDCB6},{0x663B, 0xE4E9},{0x6641, 0xF0C5},{0x6642, 0xE3C1},{0x6643, 0xFCCC},{0x6644, 0xFCCD},{0x6649, 0xF2CB}, - {0x664B, 0xF2CC},{0x664F, 0xE4CF},{0x6659, 0xF1DB},{0x665B, 0xFAD9},{0x665D, 0xF1B8},{0x665E, 0xFDF5},{0x665F, 0xE0F9},{0x6664, 0xE7FB}, - {0x6665, 0xFCB7},{0x6666, 0xFCE4},{0x6667, 0xFBC5},{0x6668, 0xE3E7},{0x6669, 0xD8B9},{0x666B, 0xF6F8},{0x666E, 0xDCC5},{0x666F, 0xCCD8}, - {0x6673, 0xE0AF},{0x6674, 0xF4E7},{0x6676, 0xEFDC},{0x6677, 0xCFFC},{0x6678, 0xEFDD},{0x667A, 0xF2AA},{0x6684, 0xFDBE},{0x6687, 0xCAAC}, - {0x6688, 0xFDBB},{0x6689, 0xFDC7},{0x668E, 0xE7B2},{0x6690, 0xEAD1},{0x6691, 0xDFF4},{0x6696, 0xD1EC},{0x6697, 0xE4DE},{0x6698, 0xE5C3}, - {0x669D, 0xD9A6},{0x66A0, 0xCDBC},{0x66A2, 0xF3E5},{0x66AB, 0xEDD5},{0x66AE, 0xD9BA},{0x66B2, 0xEDE7},{0x66B3, 0xFBB5},{0x66B4, 0xF8EC}, - {0x66B9, 0xE0E7},{0x66BB, 0xCCD9},{0x66BE, 0xD4C6},{0x66C4, 0xE7A5},{0x66C6, 0xD5F5},{0x66C7, 0xD3BE},{0x66C9, 0xFCFB},{0x66D6, 0xE4F2}, - {0x66D9, 0xDFF5},{0x66DC, 0xE8F8},{0x66DD, 0xF8ED},{0x66E0, 0xCEC7},{0x66E6, 0xFDF6},{0x66F0, 0xE8D8},{0x66F2, 0xCDD8},{0x66F3, 0xE7D6}, - {0x66F4, 0xCCDA},{0x66F7, 0xCAE3},{0x66F8, 0xDFF6},{0x66F9, 0xF0C7},{0x66FA, 0xF0C6},{0x66FC, 0xD8BA},{0x66FE, 0xF1F4},{0x66FF, 0xF4F0}, - {0x6700, 0xF5CC},{0x6703, 0xFCE5},{0x6708, 0xEAC5},{0x6709, 0xEAF3},{0x670B, 0xDDDB},{0x670D, 0xDCD7},{0x6714, 0xDEFD},{0x6715, 0xF2F9}, - {0x6717, 0xD5C7},{0x671B, 0xD8D0},{0x671D, 0xF0C8},{0x671E, 0xD1A1},{0x671F, 0xD1A2},{0x6726, 0xD9D4},{0x6727, 0xD6E8},{0x6728, 0xD9CA}, - {0x672A, 0xDAB1},{0x672B, 0xD8C7},{0x672C, 0xDCE2},{0x672D, 0xF3CE},{0x672E, 0xF5F4},{0x6731, 0xF1B9},{0x6734, 0xDAD3},{0x6736, 0xF6EA}, - {0x673A, 0xCFF5},{0x673D, 0xFDAE},{0x6746, 0xCAD2},{0x6749, 0xDFB4},{0x674E, 0xD7DD},{0x674F, 0xFABA},{0x6750, 0xEEA7},{0x6751, 0xF5BD}, - {0x6753, 0xF8F5},{0x6756, 0xEDE8},{0x675C, 0xD4E1},{0x675E, 0xD1A3},{0x675F, 0xE1D6},{0x676D, 0xF9F8},{0x676F, 0xDBCA},{0x6770, 0xCBF9}, - {0x6771, 0xD4D4},{0x6773, 0xD9DC},{0x6775, 0xEEBE},{0x6777, 0xF7ED},{0x677B, 0xD2EE},{0x677E, 0xE1E6},{0x677F, 0xF7F9},{0x6787, 0xDDED}, - {0x6789, 0xE8DB},{0x678B, 0xDBB3},{0x678F, 0xD1F7},{0x6790, 0xE0B0},{0x6793, 0xD4E2},{0x6795, 0xF6D7},{0x6797, 0xD7F9},{0x679A, 0xD8DD}, - {0x679C, 0xCDFD},{0x679D, 0xF2AB},{0x67AF, 0xCDBD},{0x67B0, 0xF8C2},{0x67B3, 0xF2AC},{0x67B6, 0xCAAD},{0x67B7, 0xCAAE},{0x67B8, 0xCFAE}, - {0x67BE, 0xE3C2},{0x67C4, 0xDCB7},{0x67CF, 0xDBDA},{0x67D0, 0xD9BB},{0x67D1, 0xCAF3},{0x67D2, 0xF6D3},{0x67D3, 0xE6F8},{0x67D4, 0xEAF5}, - {0x67DA, 0xEAF6},{0x67DD, 0xF6F9},{0x67E9, 0xCFAF},{0x67EC, 0xCAD3},{0x67EF, 0xCAAF},{0x67F0, 0xD2B0},{0x67F1, 0xF1BA},{0x67F3, 0xD7B3}, - {0x67F4, 0xE3C3},{0x67F5, 0xF3FD},{0x67F6, 0xDEDA},{0x67FB, 0xDEDB},{0x67FE, 0xEFDE},{0x6812, 0xE2E3},{0x6813, 0xEEFB},{0x6816, 0xDFF7}, - {0x6817, 0xD7CA},{0x6821, 0xCEE8},{0x6822, 0xDBDB},{0x682A, 0xF1BB},{0x682F, 0xE9F1},{0x6838, 0xFAB7},{0x6839, 0xD0C6},{0x683C, 0xCCAB}, - {0x683D, 0xEEA8},{0x6840, 0xCBFA},{0x6841, 0xF9F9},{0x6842, 0xCCFD},{0x6843, 0xD3FE},{0x6848, 0xE4D0},{0x684E, 0xF2EE},{0x6850, 0xD4D5}, - {0x6851, 0xDFCD},{0x6853, 0xFCB8},{0x6854, 0xD1D0},{0x686D, 0xF2CD},{0x6876, 0xF7D2},{0x687F, 0xCAD4},{0x6881, 0xD5D9},{0x6885, 0xD8DE}, - {0x688F, 0xCDD9},{0x6893, 0xEEA9},{0x6894, 0xF6BC},{0x6897, 0xCCDB},{0x689D, 0xF0C9},{0x689F, 0xFCFC},{0x68A1, 0xE8C9},{0x68A2, 0xF4FE}, - {0x68A7, 0xE7FC},{0x68A8, 0xD7DE},{0x68AD, 0xDEDC},{0x68AF, 0xF0AC},{0x68B0, 0xCCFE},{0x68B1, 0xCDE1},{0x68B3, 0xE1BA},{0x68B5, 0xDBEF}, - {0x68B6, 0xDAB2},{0x68C4, 0xD1A5},{0x68C5, 0xDCB8},{0x68C9, 0xD8F6},{0x68CB, 0xD1A4},{0x68CD, 0xCDE2},{0x68D2, 0xDCEA},{0x68D5, 0xF0F7}, - {0x68D7, 0xF0CA},{0x68D8, 0xD0BE},{0x68DA, 0xDDDC},{0x68DF, 0xD4D6},{0x68E0, 0xD3D6},{0x68E7, 0xEDD0},{0x68E8, 0xCDA1},{0x68EE, 0xDFB5}, - {0x68F2, 0xDFF8},{0x68F9, 0xD4A1},{0x68FA, 0xCEB2},{0x6900, 0xE8CA},{0x6905, 0xEBF5},{0x690D, 0xE3D5},{0x690E, 0xF5D0},{0x6912, 0xF5A1}, - {0x6927, 0xD9A7},{0x6930, 0xE5AB},{0x693D, 0xE6CB},{0x693F, 0xF5F1},{0x694A, 0xE5C5},{0x6953, 0xF9A3},{0x6954, 0xE0DB},{0x6955, 0xF6EB}, - {0x6957, 0xCBF1},{0x6959, 0xD9EA},{0x695A, 0xF5A2},{0x695E, 0xD7D1},{0x6960, 0xD1F8},{0x6961, 0xEAF8},{0x6962, 0xEAF9},{0x6963, 0xDAB3}, - {0x6968, 0xEFDF},{0x696B, 0xF1EF},{0x696D, 0xE5F6},{0x696E, 0xEEBF},{0x696F, 0xE2E4},{0x6975, 0xD0BF},{0x6977, 0xFAAC},{0x6978, 0xF5D1}, - {0x6979, 0xE7B3},{0x6995, 0xE9BE},{0x699B, 0xF2CE},{0x699C, 0xDBB4},{0x69A5, 0xFCCE},{0x69A7, 0xDDEE},{0x69AE, 0xE7B4},{0x69B4, 0xD7B4}, - {0x69BB, 0xF7B4},{0x69C1, 0xCDBE},{0x69C3, 0xDAE9},{0x69CB, 0xCFB0},{0x69CC, 0xF7D9},{0x69CD, 0xF3E6},{0x69D0, 0xCED9},{0x69E8, 0xCEAA}, - {0x69EA, 0xCBC8},{0x69FB, 0xD0A7},{0x69FD, 0xF0CB},{0x69FF, 0xD0C7},{0x6A02, 0xE4C5},{0x6A0A, 0xDBE0},{0x6A11, 0xD5DA},{0x6A13, 0xD7A7}, - {0x6A17, 0xEEC0},{0x6A19, 0xF8F6},{0x6A1E, 0xF5D2},{0x6A1F, 0xEDE9},{0x6A21, 0xD9BC},{0x6A23, 0xE5C6},{0x6A35, 0xF5A3},{0x6A38, 0xDAD4}, - {0x6A39, 0xE2A7},{0x6A3A, 0xFBFC},{0x6A3D, 0xF1DC},{0x6A44, 0xCAF4},{0x6A48, 0xE8FA},{0x6A4B, 0xCEE9},{0x6A52, 0xE9F8},{0x6A53, 0xE2E5}, - {0x6A58, 0xD0B9},{0x6A59, 0xD4F2},{0x6A5F, 0xD1A6},{0x6A61, 0xDFCE},{0x6A6B, 0xFCF4},{0x6A80, 0xD3AA},{0x6A84, 0xCCAC},{0x6A89, 0xEFE0}, - {0x6A8D, 0xE5E5},{0x6A8E, 0xD0D5},{0x6A97, 0xDBFC},{0x6A9C, 0xFCE6},{0x6AA2, 0xCBFE},{0x6AA3, 0xEDEA},{0x6AB3, 0xDEB1},{0x6ABB, 0xF9E3}, - {0x6AC2, 0xD4A2},{0x6AC3, 0xCFF6},{0x6AD3, 0xD6D0},{0x6ADA, 0xD5EA},{0x6ADB, 0xF1EE},{0x6AF6, 0xFACB},{0x6AFB, 0xE5A1},{0x6B04, 0xD5B1}, - {0x6B0A, 0xCFED},{0x6B0C, 0xEDEB},{0x6B12, 0xD5B2},{0x6B16, 0xD5BC},{0x6B20, 0xFDE2},{0x6B21, 0xF3AD},{0x6B23, 0xFDDB},{0x6B32, 0xE9B0}, - {0x6B3A, 0xD1A7},{0x6B3D, 0xFDE3},{0x6B3E, 0xCEB3},{0x6B46, 0xFDE4},{0x6B47, 0xFACE},{0x6B4C, 0xCAB0},{0x6B4E, 0xF7A7},{0x6B50, 0xCFB1}, - {0x6B5F, 0xE6A2},{0x6B61, 0xFCB6},{0x6B62, 0xF2AD},{0x6B63, 0xEFE1},{0x6B64, 0xF3AE},{0x6B65, 0xDCC6},{0x6B66, 0xD9EB},{0x6B6A, 0xE8E0}, - {0x6B72, 0xE1A8},{0x6B77, 0xD5F6},{0x6B78, 0xCFFD},{0x6B7B, 0xDEDD},{0x6B7F, 0xD9D1},{0x6B83, 0xE4EA},{0x6B84, 0xF2CF},{0x6B86, 0xF7BF}, - {0x6B89, 0xE2E6},{0x6B8A, 0xE2A8},{0x6B96, 0xE3D6},{0x6B98, 0xEDD1},{0x6B9E, 0xE9F9},{0x6BAE, 0xD6B1},{0x6BAF, 0xDEB2},{0x6BB2, 0xE0E8}, - {0x6BB5, 0xD3AB},{0x6BB7, 0xEBDC},{0x6BBA, 0xDFAF},{0x6BBC, 0xCAC3},{0x6BBF, 0xEEFC},{0x6BC1, 0xFDC3},{0x6BC5, 0xEBF6},{0x6BC6, 0xCFB2}, - {0x6BCB, 0xD9EC},{0x6BCD, 0xD9BD},{0x6BCF, 0xD8DF},{0x6BD2, 0xD4B8},{0x6BD3, 0xEBBE},{0x6BD4, 0xDDEF},{0x6BD6, 0xDDF0},{0x6BD7, 0xDDF1}, - {0x6BD8, 0xDDF2},{0x6BDB, 0xD9BE},{0x6BEB, 0xFBC6},{0x6BEC, 0xCFB3},{0x6C08, 0xEEFD},{0x6C0F, 0xE4AB},{0x6C11, 0xDAC5},{0x6C13, 0xD8EC}, - {0x6C23, 0xD1A8},{0x6C34, 0xE2A9},{0x6C37, 0xDEBC},{0x6C38, 0xE7B5},{0x6C3E, 0xDBF0},{0x6C40, 0xEFE2},{0x6C41, 0xF1F0},{0x6C42, 0xCFB4}, - {0x6C4E, 0xDBF1},{0x6C50, 0xE0B1},{0x6C55, 0xDFA5},{0x6C57, 0xF9D2},{0x6C5A, 0xE7FD},{0x6C5D, 0xE6A3},{0x6C5E, 0xFBF1},{0x6C5F, 0xCBB0}, - {0x6C60, 0xF2AE},{0x6C68, 0xCDE7},{0x6C6A, 0xE8DC},{0x6C6D, 0xE7D7},{0x6C70, 0xF7C0},{0x6C72, 0xD0E3},{0x6C76, 0xDAA1},{0x6C7A, 0xCCBD}, - {0x6C7D, 0xD1A9},{0x6C7E, 0xDDCC},{0x6C81, 0xE3FE},{0x6C82, 0xD1AA},{0x6C83, 0xE8AA},{0x6C85, 0xEAB6},{0x6C86, 0xF9FA},{0x6C87, 0xE6CC}, - {0x6C88, 0xF6D8},{0x6C8C, 0xD4C7},{0x6C90, 0xD9CB},{0x6C92, 0xD9D2},{0x6C93, 0xD3CB},{0x6C94, 0xD8F7},{0x6C95, 0xDAA9},{0x6C96, 0xF5F8}, - {0x6C99, 0xDEDE},{0x6C9A, 0xF2AF},{0x6C9B, 0xF8A9},{0x6CAB, 0xD8C8},{0x6CAE, 0xEEC1},{0x6CB3, 0xF9C1},{0x6CB8, 0xDDF3},{0x6CB9, 0xEAFA}, - {0x6CBB, 0xF6BD},{0x6CBC, 0xE1BB},{0x6CBD, 0xCDBF},{0x6CBE, 0xF4D4},{0x6CBF, 0xE6CD},{0x6CC1, 0xFCCF},{0x6CC2, 0xFBA2},{0x6CC4, 0xE0DC}, - {0x6CC9, 0xF4BB},{0x6CCA, 0xDAD5},{0x6CCC, 0xF9B2},{0x6CD3, 0xFBF2},{0x6CD5, 0xDBF6},{0x6CD7, 0xDEDF},{0x6CDB, 0xDBF2},{0x6CE1, 0xF8DC}, - {0x6CE2, 0xF7EE},{0x6CE3, 0xEBE8},{0x6CE5, 0xD2FA},{0x6CE8, 0xF1BC},{0x6CEB, 0xFADA},{0x6CEE, 0xDAEA},{0x6CEF, 0xDAC6},{0x6CF0, 0xF7C1}, - {0x6CF3, 0xE7B6},{0x6D0B, 0xE5C7},{0x6D0C, 0xD6AC},{0x6D11, 0xDCC7},{0x6D17, 0xE1A9},{0x6D19, 0xE2AA},{0x6D1B, 0xD5A6},{0x6D1E, 0xD4D7}, - {0x6D25, 0xF2D0},{0x6D27, 0xEAFB},{0x6D29, 0xE0DD},{0x6D2A, 0xFBF3},{0x6D32, 0xF1BD},{0x6D35, 0xE2E7},{0x6D36, 0xFDD7},{0x6D38, 0xCEC8}, - {0x6D39, 0xEAB7},{0x6D3B, 0xFCC0},{0x6D3D, 0xFDE7},{0x6D3E, 0xF7EF},{0x6D41, 0xD7B5},{0x6D59, 0xEFBA},{0x6D5A, 0xF1DD},{0x6D5C, 0xDEB3}, - {0x6D63, 0xE8CB},{0x6D66, 0xF8DD},{0x6D69, 0xFBC7},{0x6D6A, 0xD5C8},{0x6D6C, 0xD7DF},{0x6D6E, 0xDDA9},{0x6D74, 0xE9B1},{0x6D77, 0xFAAD}, - {0x6D78, 0xF6D9},{0x6D79, 0xFAF4},{0x6D7F, 0xF8AA},{0x6D85, 0xE6EE},{0x6D87, 0xCCDC},{0x6D88, 0xE1BC},{0x6D89, 0xE0EF},{0x6D8C, 0xE9BF}, - {0x6D8D, 0xFCFD},{0x6D8E, 0xE6CE},{0x6D91, 0xE1D7},{0x6D93, 0xE6CF},{0x6D95, 0xF4F1},{0x6DAF, 0xE4F3},{0x6DB2, 0xE4FB},{0x6DB5, 0xF9E4}, - {0x6DC0, 0xEFE3},{0x6DC3, 0xCFEE},{0x6DC4, 0xF6BE},{0x6DC5, 0xE0B2},{0x6DC6, 0xFCFE},{0x6DC7, 0xD1AB},{0x6DCB, 0xD7FA},{0x6DCF, 0xFBC8}, - {0x6DD1, 0xE2D7},{0x6DD8, 0xD4A3},{0x6DD9, 0xF0F8},{0x6DDA, 0xD7A8},{0x6DDE, 0xE1E7},{0x6DE1, 0xD3BF},{0x6DE8, 0xEFE4},{0x6DEA, 0xD7C5}, - {0x6DEB, 0xEBE2},{0x6DEE, 0xFCE7},{0x6DF1, 0xE4A2},{0x6DF3, 0xE2E8},{0x6DF5, 0xE6D0},{0x6DF7, 0xFBE8},{0x6DF8, 0xF4E8},{0x6DF9, 0xE5F4}, - {0x6DFA, 0xF4BC},{0x6DFB, 0xF4D5},{0x6E17, 0xDFB6},{0x6E19, 0xFCB9},{0x6E1A, 0xEEC2},{0x6E1B, 0xCAF5},{0x6E1F, 0xEFE5},{0x6E20, 0xCBE2}, - {0x6E21, 0xD4A4},{0x6E23, 0xDEE0},{0x6E24, 0xDAFD},{0x6E25, 0xE4C6},{0x6E26, 0xE8BE},{0x6E2B, 0xE0DE},{0x6E2C, 0xF6B4},{0x6E2D, 0xEAD2}, - {0x6E2F, 0xF9FB},{0x6E32, 0xE0C2},{0x6E34, 0xCAE4},{0x6E36, 0xE7B7},{0x6E38, 0xEAFD},{0x6E3A, 0xD9DD},{0x6E3C, 0xDAB4},{0x6E3D, 0xEEAA}, - {0x6E3E, 0xFBE9},{0x6E43, 0xDBCB},{0x6E44, 0xDAB5},{0x6E4A, 0xF1BE},{0x6E4D, 0xD3AC},{0x6E56, 0xFBC9},{0x6E58, 0xDFCF},{0x6E5B, 0xD3C0}, - {0x6E5C, 0xE3D7},{0x6E5E, 0xEFE6},{0x6E5F, 0xFCD0},{0x6E67, 0xE9C0},{0x6E6B, 0xF5D3},{0x6E6E, 0xECDC},{0x6E6F, 0xF7B7},{0x6E72, 0xEAB8}, - {0x6E73, 0xD1F9},{0x6E7A, 0xDCC8},{0x6E90, 0xEAB9},{0x6E96, 0xF1DE},{0x6E9C, 0xD7B6},{0x6E9D, 0xCFB5},{0x6E9F, 0xD9A8},{0x6EA2, 0xECEE}, - {0x6EA5, 0xDDAA},{0x6EAA, 0xCDA2},{0x6EAB, 0xE8AE},{0x6EAF, 0xE1BD},{0x6EB1, 0xF2D1},{0x6EB6, 0xE9C1},{0x6EBA, 0xD2FC},{0x6EC2, 0xDBB5}, - {0x6EC4, 0xF3E7},{0x6EC5, 0xD8FE},{0x6EC9, 0xFCD1},{0x6ECB, 0xEDB2},{0x6ECC, 0xF4AF},{0x6ECE, 0xFBA3},{0x6ED1, 0xFCC1},{0x6ED3, 0xEEAB}, - {0x6ED4, 0xD4A5},{0x6EEF, 0xF4F2},{0x6EF4, 0xEED9},{0x6EF8, 0xFBCA},{0x6EFE, 0xCDE3},{0x6EFF, 0xD8BB},{0x6F01, 0xE5DB},{0x6F02, 0xF8F7}, - {0x6F06, 0xF6D4},{0x6F0F, 0xD7A9},{0x6F11, 0xCBC9},{0x6F14, 0xE6D1},{0x6F15, 0xF0CC},{0x6F20, 0xD8AE},{0x6F22, 0xF9D3},{0x6F23, 0xD5FE}, - {0x6F2B, 0xD8BC},{0x6F2C, 0xF2B0},{0x6F31, 0xE2AB},{0x6F32, 0xF3E8},{0x6F38, 0xEFC2},{0x6F3F, 0xEDEC},{0x6F41, 0xE7B8},{0x6F51, 0xDAFE}, - {0x6F54, 0xCCBE},{0x6F57, 0xF2FC},{0x6F58, 0xDAEB},{0x6F5A, 0xE2D8},{0x6F5B, 0xEDD6},{0x6F5E, 0xD6D1},{0x6F5F, 0xE0B3},{0x6F62, 0xFCD2}, - {0x6F64, 0xEBC8},{0x6F6D, 0xD3C1},{0x6F6E, 0xF0CD},{0x6F70, 0xCFF7},{0x6F7A, 0xEDD2},{0x6F7C, 0xD4D8},{0x6F7D, 0xDCC9},{0x6F7E, 0xD7F1}, - {0x6F81, 0xDFBB},{0x6F84, 0xF3A5},{0x6F88, 0xF4CD},{0x6F8D, 0xF1BF},{0x6F8E, 0xF8B1},{0x6F90, 0xE9FA},{0x6F94, 0xFBCB},{0x6F97, 0xCAD5}, - {0x6FA3, 0xF9D4},{0x6FA4, 0xF7CA},{0x6FA7, 0xD6C8},{0x6FAE, 0xFCE8},{0x6FAF, 0xF3BD},{0x6FB1, 0xEEFE},{0x6FB3, 0xE7FE},{0x6FB9, 0xD3C2}, - {0x6FBE, 0xD3B6},{0x6FC0, 0xCCAD},{0x6FC1, 0xF6FA},{0x6FC2, 0xD6B2},{0x6FC3, 0xD2D8},{0x6FCA, 0xE7D8},{0x6FD5, 0xE3A5},{0x6FDA, 0xE7B9}, - {0x6FDF, 0xF0AD},{0x6FE0, 0xFBCC},{0x6FE1, 0xEBA1},{0x6FE4, 0xD4A6},{0x6FE9, 0xFBCD},{0x6FEB, 0xD5BD},{0x6FEC, 0xF1DF},{0x6FEF, 0xF6FB}, - {0x6FF1, 0xDEB4},{0x6FFE, 0xD5EB},{0x7001, 0xE5C8},{0x7005, 0xFBA4},{0x7006, 0xD4B9},{0x7009, 0xDEE1},{0x700B, 0xE4A3},{0x700F, 0xD7B7}, - {0x7011, 0xF8EE},{0x7015, 0xDEB5},{0x7018, 0xD6D2},{0x701A, 0xF9D5},{0x701B, 0xE7BA},{0x701C, 0xEBD5},{0x701D, 0xD5F7},{0x701E, 0xEFE7}, - {0x701F, 0xE1BE},{0x7023, 0xFAAE},{0x7027, 0xD6E9},{0x7028, 0xD6EE},{0x702F, 0xE7BB},{0x7037, 0xECCB},{0x703E, 0xD5B3},{0x704C, 0xCEB4}, - {0x7050, 0xFBA5},{0x7051, 0xE1EE},{0x7058, 0xF7A8},{0x705D, 0xFBCE},{0x7063, 0xD8BD},{0x706B, 0xFBFD},{0x7070, 0xFCE9},{0x7078, 0xCFB6}, - {0x707C, 0xEDC7},{0x707D, 0xEEAC},{0x7085, 0xCCDD},{0x708A, 0xF6A7},{0x708E, 0xE6FA},{0x7092, 0xF5A4},{0x7098, 0xFDDC},{0x7099, 0xEDB3}, - {0x709A, 0xCEC9},{0x70A1, 0xEFE8},{0x70A4, 0xE1BF},{0x70AB, 0xFADB},{0x70AC, 0xCBE3},{0x70AD, 0xF7A9},{0x70AF, 0xFBA6},{0x70B3, 0xDCB9}, - {0x70B7, 0xF1C0},{0x70B8, 0xEDC8},{0x70B9, 0xEFC3},{0x70C8, 0xD6AD},{0x70CB, 0xFDCE},{0x70CF, 0xE8A1},{0x70D8, 0xFBF4},{0x70D9, 0xD5A7}, - {0x70DD, 0xF1F6},{0x70DF, 0xE6D3},{0x70F1, 0xCCDE},{0x70F9, 0xF8B2},{0x70FD, 0xDCEB},{0x7104, 0xFDB6},{0x7109, 0xE5EA},{0x710C, 0xF1E0}, - {0x7119, 0xDBCC},{0x711A, 0xDDCD},{0x711E, 0xD4C8},{0x7121, 0xD9ED},{0x7126, 0xF5A5},{0x7130, 0xE6FB},{0x7136, 0xE6D4},{0x7147, 0xFDC8}, - {0x7149, 0xD6A1},{0x714A, 0xFDBF},{0x714C, 0xFCD3},{0x714E, 0xEFA1},{0x7150, 0xE7BC},{0x7156, 0xD1EE},{0x7159, 0xE6D5},{0x715C, 0xE9F2}, - {0x715E, 0xDFB0},{0x7164, 0xD8E0},{0x7165, 0xFCBA},{0x7166, 0xFDAF},{0x7167, 0xF0CE},{0x7169, 0xDBE1},{0x716C, 0xE5C9},{0x716E, 0xEDB4}, - {0x717D, 0xE0C3},{0x7184, 0xE3D8},{0x7189, 0xE9FB},{0x718A, 0xEAA8},{0x718F, 0xFDB7},{0x7192, 0xFBA7},{0x7194, 0xE9C2},{0x7199, 0xFDF7}, - {0x719F, 0xE2D9},{0x71A2, 0xDCEC},{0x71AC, 0xE8A2},{0x71B1, 0xE6F0},{0x71B9, 0xFDF8},{0x71BA, 0xFDF9},{0x71BE, 0xF6BF},{0x71C1, 0xE7A7}, - {0x71C3, 0xE6D7},{0x71C8, 0xD4F3},{0x71C9, 0xD4C9},{0x71CE, 0xD6FA},{0x71D0, 0xD7F2},{0x71D2, 0xE1C0},{0x71D4, 0xDBE2},{0x71D5, 0xE6D8}, - {0x71DF, 0xE7BD},{0x71E5, 0xF0CF},{0x71E6, 0xF3BE},{0x71E7, 0xE2AC},{0x71ED, 0xF5B7},{0x71EE, 0xE0F0},{0x71FB, 0xFDB8},{0x71FC, 0xE3E8}, - {0x71FE, 0xD4A7},{0x71FF, 0xE8FC},{0x7200, 0xFAD2},{0x7206, 0xF8EF},{0x7210, 0xD6D3},{0x721B, 0xD5B4},{0x722A, 0xF0D0},{0x722C, 0xF7F0}, - {0x722D, 0xEEB3},{0x7230, 0xEABA},{0x7232, 0xEAD3},{0x7235, 0xEDC9},{0x7236, 0xDDAB},{0x723A, 0xE5AC},{0x723B, 0xFDA1},{0x723D, 0xDFD0}, - {0x723E, 0xECB3},{0x7240, 0xDFD1},{0x7246, 0xEDED},{0x7247, 0xF8B8},{0x7248, 0xF7FA},{0x724C, 0xF8AB},{0x7252, 0xF4E0},{0x7258, 0xD4BA}, - {0x7259, 0xE4B3},{0x725B, 0xE9DA},{0x725D, 0xDEB6},{0x725F, 0xD9BF},{0x7261, 0xD9C0},{0x7262, 0xD6EF},{0x7267, 0xD9CC},{0x7269, 0xDAAA}, - {0x7272, 0xDFE5},{0x7279, 0xF7E5},{0x727D, 0xCCB2},{0x7280, 0xDFF9},{0x7281, 0xD7E0},{0x72A2, 0xD4BB},{0x72A7, 0xFDFA},{0x72AC, 0xCCB3}, - {0x72AF, 0xDBF3},{0x72C0, 0xDFD2},{0x72C2, 0xCECA},{0x72C4, 0xEEDA},{0x72CE, 0xE4E4},{0x72D0, 0xFBCF},{0x72D7, 0xCFB7},{0x72D9, 0xEEC3}, - {0x72E1, 0xCEEA},{0x72E9, 0xE2AD},{0x72F8, 0xD7E1},{0x72F9, 0xFAF5},{0x72FC, 0xD5C9},{0x72FD, 0xF8AC},{0x730A, 0xE7D9},{0x7316, 0xF3E9}, - {0x731B, 0xD8ED},{0x731C, 0xE3C4},{0x731D, 0xF0F1},{0x7325, 0xE8E5},{0x7329, 0xE0FA},{0x732A, 0xEEC4},{0x732B, 0xD9DE},{0x7336, 0xEBA2}, - {0x7337, 0xEBA3},{0x733E, 0xFCC2},{0x733F, 0xEABB},{0x7344, 0xE8AB},{0x7345, 0xDEE2},{0x7350, 0xEDEF},{0x7352, 0xE8A3},{0x7357, 0xCFF1}, - {0x7368, 0xD4BC},{0x736A, 0xFCEA},{0x7370, 0xE7BE},{0x7372, 0xFCF2},{0x7375, 0xD6B4},{0x7378, 0xE2AE},{0x737A, 0xD3B7},{0x737B, 0xFACC}, - {0x7384, 0xFADC},{0x7386, 0xEDB5},{0x7387, 0xE1E3},{0x7389, 0xE8AC},{0x738B, 0xE8DD},{0x738E, 0xEFE9},{0x7394, 0xF4BD},{0x7396, 0xCFB8}, - {0x7397, 0xE9DB},{0x7398, 0xD1AC},{0x739F, 0xDAC7},{0x73A7, 0xEBC9},{0x73A9, 0xE8CC},{0x73AD, 0xDEB7},{0x73B2, 0xD6BC},{0x73B3, 0xD3E5}, - {0x73B9, 0xFADD},{0x73C0, 0xDAD6},{0x73C2, 0xCAB1},{0x73C9, 0xDAC8},{0x73CA, 0xDFA6},{0x73CC, 0xF9B3},{0x73CD, 0xF2D2},{0x73CF, 0xCAC4}, - {0x73D6, 0xCECB},{0x73D9, 0xCDF5},{0x73DD, 0xFDB0},{0x73DE, 0xD5A8},{0x73E0, 0xF1C1},{0x73E3, 0xE2E9},{0x73E4, 0xDCCA},{0x73E5, 0xECB4}, - {0x73E6, 0xFAC0},{0x73E9, 0xFBA8},{0x73EA, 0xD0A8},{0x73ED, 0xDAEC},{0x73F7, 0xD9EE},{0x73F9, 0xE0FB},{0x73FD, 0xEFEA},{0x73FE, 0xFADE}, - {0x7401, 0xE0C4},{0x7403, 0xCFB9},{0x7405, 0xD5CA},{0x7406, 0xD7E2},{0x7407, 0xE2AF},{0x7409, 0xD7B8},{0x7413, 0xE8CD},{0x741B, 0xF6DA}, - {0x7420, 0xEFA2},{0x7421, 0xE2DA},{0x7422, 0xF6FC},{0x7425, 0xFBD0},{0x7426, 0xD1AD},{0x7428, 0xCDE4},{0x742A, 0xD1AE},{0x742B, 0xDCED}, - {0x742C, 0xE8CE},{0x742E, 0xF0F9},{0x742F, 0xCEB5},{0x7430, 0xE6FC},{0x7433, 0xD7FB},{0x7434, 0xD0D6},{0x7435, 0xDDF5},{0x7436, 0xF7F1}, - {0x7438, 0xF6FD},{0x743A, 0xDBF7},{0x743F, 0xFBEA},{0x7440, 0xE9DC},{0x7441, 0xD9C1},{0x7443, 0xF5F2},{0x7444, 0xE0C5},{0x744B, 0xEAD4}, - {0x7455, 0xF9C2},{0x7457, 0xEABC},{0x7459, 0xD2C5},{0x745A, 0xFBD1},{0x745B, 0xE7C0},{0x745C, 0xEBA5},{0x745E, 0xDFFA},{0x745F, 0xE3A2}, - {0x7460, 0xD7B9},{0x7462, 0xE9C3},{0x7464, 0xE8FD},{0x7465, 0xE8AF},{0x7468, 0xF2D3},{0x7469, 0xFBA9},{0x746A, 0xD8A5},{0x746F, 0xD5CB}, - {0x747E, 0xD0C8},{0x7482, 0xD1AF},{0x7483, 0xD7E3},{0x7487, 0xE0C6},{0x7489, 0xD6A2},{0x748B, 0xEDF0},{0x7498, 0xD7F3},{0x749C, 0xFCD4}, - {0x749E, 0xDAD7},{0x749F, 0xCCDF},{0x74A1, 0xF2D4},{0x74A3, 0xD1B0},{0x74A5, 0xCCE0},{0x74A7, 0xDBFD},{0x74A8, 0xF3BF},{0x74AA, 0xF0D1}, - {0x74B0, 0xFCBB},{0x74B2, 0xE2B0},{0x74B5, 0xE6A5},{0x74B9, 0xE2DB},{0x74BD, 0xDFDE},{0x74BF, 0xE0C7},{0x74C6, 0xF2EF},{0x74CA, 0xCCE1}, - {0x74CF, 0xD6EA},{0x74D4, 0xE7C2},{0x74D8, 0xCEB6},{0x74DA, 0xF3C0},{0x74DC, 0xCDFE},{0x74E0, 0xFBD2},{0x74E2, 0xF8F8},{0x74E3, 0xF7FB}, - {0x74E6, 0xE8BF},{0x74EE, 0xE8B7},{0x74F7, 0xEDB6},{0x7501, 0xDCBA},{0x7504, 0xCCB4},{0x7511, 0xF1F7},{0x7515, 0xE8B8},{0x7518, 0xCAF6}, - {0x751A, 0xE4A4},{0x751B, 0xF4D6},{0x751F, 0xDFE6},{0x7523, 0xDFA7},{0x7525, 0xDFE7},{0x7526, 0xE1C1},{0x7528, 0xE9C4},{0x752B, 0xDCCB}, - {0x752C, 0xE9C5},{0x7530, 0xEFA3},{0x7531, 0xEBA6},{0x7532, 0xCBA3},{0x7533, 0xE3E9},{0x7537, 0xD1FB},{0x7538, 0xEFA4},{0x753A, 0xEFEB}, - {0x7547, 0xD0B4},{0x754C, 0xCDA3},{0x754F, 0xE8E6},{0x7551, 0xEFA5},{0x7553, 0xD3CC},{0x7554, 0xDAED},{0x7559, 0xD7BA},{0x755B, 0xF2D5}, - {0x755C, 0xF5E5},{0x755D, 0xD9EF},{0x7562, 0xF9B4},{0x7565, 0xD5D4},{0x7566, 0xFDCF},{0x756A, 0xDBE3},{0x756F, 0xF1E1},{0x7570, 0xECB6}, - {0x7575, 0xFBFE},{0x7576, 0xD3D7},{0x7578, 0xD1B1},{0x757A, 0xCBB1},{0x757F, 0xD1B2},{0x7586, 0xCBB2},{0x7587, 0xF1C2},{0x758A, 0xF4E1}, - {0x758B, 0xF9B5},{0x758E, 0xE1C3},{0x758F, 0xE1C2},{0x7591, 0xEBF7},{0x759D, 0xDFA8},{0x75A5, 0xCBCA},{0x75AB, 0xE6B9},{0x75B1, 0xF8DE}, - {0x75B2, 0xF9AA},{0x75B3, 0xCAF7},{0x75B5, 0xEDB7},{0x75B8, 0xD3B8},{0x75B9, 0xF2D6},{0x75BC, 0xD4D9},{0x75BD, 0xEEC5},{0x75BE, 0xF2F0}, - {0x75C2, 0xCAB2},{0x75C5, 0xDCBB},{0x75C7, 0xF1F8},{0x75CD, 0xECB7},{0x75D2, 0xE5CA},{0x75D4, 0xF6C0},{0x75D5, 0xFDDD},{0x75D8, 0xD4E3}, - {0x75D9, 0xCCE2},{0x75DB, 0xF7D4},{0x75E2, 0xD7E5},{0x75F0, 0xD3C3},{0x75F2, 0xD8A6},{0x75F4, 0xF6C1},{0x75FA, 0xDDF6},{0x75FC, 0xCDC0}, - {0x7600, 0xE5DC},{0x760D, 0xE5CB},{0x7619, 0xE1C4},{0x761F, 0xE8B0},{0x7620, 0xF4B0},{0x7621, 0xF3EA},{0x7622, 0xDAEE},{0x7624, 0xD7BB}, - {0x7626, 0xE2B1},{0x763B, 0xD7AA},{0x7642, 0xD6FB},{0x764C, 0xE4DF},{0x764E, 0xCAD6},{0x7652, 0xEBA8},{0x7656, 0xDBFE},{0x7661, 0xF6C2}, - {0x7664, 0xEFBB},{0x7669, 0xD4FD},{0x766C, 0xE0C8},{0x7670, 0xE8B9},{0x7672, 0xEFA6},{0x7678, 0xCDA4},{0x767B, 0xD4F4},{0x767C, 0xDBA1}, - {0x767D, 0xDBDC},{0x767E, 0xDBDD},{0x7684, 0xEEDC},{0x7686, 0xCBCB},{0x7687, 0xFCD5},{0x768E, 0xCEEB},{0x7690, 0xCDC1},{0x7693, 0xFBD3}, - {0x76AE, 0xF9AB},{0x76BA, 0xF5D4},{0x76BF, 0xD9A9},{0x76C2, 0xE9DD},{0x76C3, 0xDBCD},{0x76C6, 0xDDCE},{0x76C8, 0xE7C3},{0x76CA, 0xECCC}, - {0x76D2, 0xF9EC},{0x76D6, 0xCBCC},{0x76DB, 0xE0FC},{0x76DC, 0xD4A8},{0x76DE, 0xEDD3},{0x76DF, 0xD8EF},{0x76E1, 0xF2D7},{0x76E3, 0xCAF8}, - {0x76E4, 0xDAEF},{0x76E7, 0xD6D4},{0x76EE, 0xD9CD},{0x76F2, 0xD8EE},{0x76F4, 0xF2C1},{0x76F8, 0xDFD3},{0x76FC, 0xDAF0},{0x76FE, 0xE2EA}, - {0x7701, 0xE0FD},{0x7704, 0xD8F8},{0x7708, 0xF7AF},{0x7709, 0xDAB6},{0x770B, 0xCAD7},{0x771E, 0xF2D8},{0x7720, 0xD8F9},{0x7729, 0xFADF}, - {0x7737, 0xCFEF},{0x7738, 0xD9C2},{0x773A, 0xF0D2},{0x773C, 0xE4D1},{0x7740, 0xF3B7},{0x774D, 0xFAE0},{0x775B, 0xEFEC},{0x7761, 0xE2B2}, - {0x7763, 0xD4BD},{0x7766, 0xD9CE},{0x776B, 0xF4E2},{0x7779, 0xD4A9},{0x777E, 0xCDC2},{0x777F, 0xE7DA},{0x778B, 0xF2D9},{0x7791, 0xD9AA}, - {0x779E, 0xD8BE},{0x77A5, 0xDCAD},{0x77AC, 0xE2EB},{0x77AD, 0xD6FC},{0x77B0, 0xCAF9},{0x77B3, 0xD4DA},{0x77BB, 0xF4D7},{0x77BC, 0xCCA1}, - {0x77BF, 0xCFBA},{0x77D7, 0xF5B8},{0x77DB, 0xD9C3},{0x77DC, 0xD0E8},{0x77E2, 0xE3C5},{0x77E3, 0xEBF8},{0x77E5, 0xF2B1},{0x77E9, 0xCFBB}, - {0x77ED, 0xD3AD},{0x77EE, 0xE8E1},{0x77EF, 0xCEEC},{0x77F3, 0xE0B4},{0x7802, 0xDEE3},{0x7812, 0xDDF7},{0x7825, 0xF2B2},{0x7826, 0xF3F6}, - {0x7827, 0xF6DB},{0x782C, 0xD7FE},{0x7832, 0xF8DF},{0x7834, 0xF7F2},{0x7845, 0xD0A9},{0x784F, 0xE6DA},{0x785D, 0xF5A6},{0x786B, 0xD7BC}, - {0x786C, 0xCCE3},{0x786F, 0xE6DB},{0x787C, 0xDDDD},{0x7881, 0xD1B3},{0x7887, 0xEFED},{0x788C, 0xD6DE},{0x788D, 0xE4F4},{0x788E, 0xE1EF}, - {0x7891, 0xDDF8},{0x7897, 0xE8CF},{0x78A3, 0xCAE5},{0x78A7, 0xDCA1},{0x78A9, 0xE0B5},{0x78BA, 0xFCAC},{0x78BB, 0xFCAD},{0x78BC, 0xD8A7}, - {0x78C1, 0xEDB8},{0x78C5, 0xDBB6},{0x78CA, 0xD6F0},{0x78CB, 0xF3AF},{0x78CE, 0xCDA5},{0x78D0, 0xDAF1},{0x78E8, 0xD8A8},{0x78EC, 0xCCE4}, - {0x78EF, 0xD1B4},{0x78F5, 0xCAD8},{0x78FB, 0xDAF2},{0x7901, 0xF5A7},{0x790E, 0xF5A8},{0x7916, 0xE6A6},{0x792A, 0xD5EC},{0x792B, 0xD5F8}, - {0x792C, 0xDAF3},{0x793A, 0xE3C6},{0x793E, 0xDEE4},{0x7940, 0xDEE5},{0x7941, 0xD1B5},{0x7947, 0xD1B6},{0x7948, 0xD1B7},{0x7949, 0xF2B3}, - {0x7950, 0xE9DE},{0x7956, 0xF0D3},{0x7957, 0xF2B4},{0x795A, 0xF0D4},{0x795B, 0xCBE4},{0x795C, 0xFBD4},{0x795D, 0xF5E6},{0x795E, 0xE3EA}, - {0x7960, 0xDEE6},{0x7965, 0xDFD4},{0x7968, 0xF8F9},{0x796D, 0xF0AE},{0x797A, 0xD1B8},{0x797F, 0xD6DF},{0x7981, 0xD0D7},{0x798D, 0xFCA1}, - {0x798E, 0xEFEE},{0x798F, 0xDCD8},{0x7991, 0xE9DF},{0x79A6, 0xE5DD},{0x79A7, 0xFDFB},{0x79AA, 0xE0C9},{0x79AE, 0xD6C9},{0x79B1, 0xD4AA}, - {0x79B3, 0xE5CC},{0x79B9, 0xE9E0},{0x79BD, 0xD0D8},{0x79BE, 0xFCA2},{0x79BF, 0xD4BE},{0x79C0, 0xE2B3},{0x79C1, 0xDEE7},{0x79C9, 0xDCBC}, - {0x79CA, 0xD2B6},{0x79CB, 0xF5D5},{0x79D1, 0xCEA1},{0x79D2, 0xF5A9},{0x79D5, 0xDDF9},{0x79D8, 0xDDFA},{0x79DF, 0xF0D5},{0x79E4, 0xF6DF}, - {0x79E6, 0xF2DA},{0x79E7, 0xE4EB},{0x79E9, 0xF2F1},{0x79FB, 0xECB9},{0x7A00, 0xFDFC},{0x7A05, 0xE1AA},{0x7A08, 0xCAD9},{0x7A0B, 0xEFEF}, - {0x7A0D, 0xF5AA},{0x7A14, 0xECF9},{0x7A17, 0xF8AD},{0x7A19, 0xF2C2},{0x7A1A, 0xF6C3},{0x7A1C, 0xD7D2},{0x7A1F, 0xF9A2},{0x7A20, 0xF0D6}, - {0x7A2E, 0xF0FA},{0x7A31, 0xF6E0},{0x7A36, 0xE9F3},{0x7A37, 0xF2C3},{0x7A3B, 0xD4AB},{0x7A3C, 0xCAB3},{0x7A3D, 0xCDA6},{0x7A3F, 0xCDC3}, - {0x7A40, 0xCDDA},{0x7A46, 0xD9CF},{0x7A49, 0xF6C4},{0x7A4D, 0xEEDD},{0x7A4E, 0xE7C4},{0x7A57, 0xE2B4},{0x7A61, 0xDFE2},{0x7A62, 0xE7DB}, - {0x7A69, 0xE8B1},{0x7A6B, 0xFCAE},{0x7A70, 0xE5CD},{0x7A74, 0xFAEB},{0x7A76, 0xCFBC},{0x7A79, 0xCFE2},{0x7A7A, 0xCDF6},{0x7A7D, 0xEFF0}, - {0x7A7F, 0xF4BE},{0x7A81, 0xD4CD},{0x7A84, 0xF3B8},{0x7A88, 0xE9A1},{0x7A92, 0xF2F2},{0x7A93, 0xF3EB},{0x7A95, 0xF0D7},{0x7A98, 0xCFD7}, - {0x7A9F, 0xCFDF},{0x7AA9, 0xE8C0},{0x7AAA, 0xE8C1},{0x7AAE, 0xCFE3},{0x7AAF, 0xE9A2},{0x7ABA, 0xD0AA},{0x7AC4, 0xF3C1},{0x7AC5, 0xD0AB}, - {0x7AC7, 0xD4E4},{0x7ACA, 0xEFBC},{0x7ACB, 0xD8A1},{0x7AD7, 0xD9DF},{0x7AD9, 0xF3D7},{0x7ADD, 0xDCBD},{0x7ADF, 0xCCE5},{0x7AE0, 0xEDF1}, - {0x7AE3, 0xF1E2},{0x7AE5, 0xD4DB},{0x7AEA, 0xE2B5},{0x7AED, 0xCAE6},{0x7AEF, 0xD3AE},{0x7AF6, 0xCCE6},{0x7AF9, 0xF1D3},{0x7AFA, 0xF5E7}, - {0x7AFF, 0xCADA},{0x7B0F, 0xFBEE},{0x7B11, 0xE1C5},{0x7B19, 0xDFE9},{0x7B1B, 0xEEDE},{0x7B1E, 0xF7C2},{0x7B20, 0xD8A2},{0x7B26, 0xDDAC}, - {0x7B2C, 0xF0AF},{0x7B2D, 0xD6BD},{0x7B39, 0xE1AB},{0x7B46, 0xF9B6},{0x7B49, 0xD4F5},{0x7B4B, 0xD0C9},{0x7B4C, 0xEFA7},{0x7B4D, 0xE2EC}, - {0x7B4F, 0xDBEA},{0x7B50, 0xCECC},{0x7B51, 0xF5E8},{0x7B52, 0xF7D5},{0x7B54, 0xD3CD},{0x7B56, 0xF3FE},{0x7B60, 0xD0B5},{0x7B6C, 0xE0FE}, - {0x7B6E, 0xDFFB},{0x7B75, 0xE6DD},{0x7B7D, 0xE8A4},{0x7B87, 0xCBCD},{0x7B8B, 0xEFA8},{0x7B8F, 0xEEB4},{0x7B94, 0xDAD8},{0x7B95, 0xD1B9}, - {0x7B97, 0xDFA9},{0x7B9A, 0xF3B0},{0x7B9D, 0xCCC4},{0x7BA1, 0xCEB7},{0x7BAD, 0xEFA9},{0x7BB1, 0xDFD5},{0x7BB4, 0xEDD7},{0x7BB8, 0xEEC6}, - {0x7BC0, 0xEFBD},{0x7BC1, 0xFCD6},{0x7BC4, 0xDBF4},{0x7BC6, 0xEFAA},{0x7BC7, 0xF8B9},{0x7BC9, 0xF5E9},{0x7BD2, 0xE3D9},{0x7BE0, 0xE1C6}, - {0x7BE4, 0xD4BF},{0x7BE9, 0xDEE8},{0x7C07, 0xF0EA},{0x7C12, 0xF3C2},{0x7C1E, 0xD3AF},{0x7C21, 0xCADB},{0x7C27, 0xFCD7},{0x7C2A, 0xEDD8}, - {0x7C2B, 0xE1C7},{0x7C3D, 0xF4D8},{0x7C3E, 0xD6B3},{0x7C3F, 0xDDAD},{0x7C43, 0xD5BE},{0x7C4C, 0xF1C3},{0x7C4D, 0xEEDF},{0x7C60, 0xD6EB}, - {0x7C64, 0xF4D9},{0x7C6C, 0xD7E6},{0x7C73, 0xDAB7},{0x7C83, 0xDDFB},{0x7C89, 0xDDCF},{0x7C92, 0xD8A3},{0x7C95, 0xDAD9},{0x7C97, 0xF0D8}, - {0x7C98, 0xEFC4},{0x7C9F, 0xE1D8},{0x7CA5, 0xF1D4},{0x7CA7, 0xEDF2},{0x7CAE, 0xD5DB},{0x7CB1, 0xD5DC},{0x7CB2, 0xF3C4},{0x7CB3, 0xCBD7}, - {0x7CB9, 0xE2B6},{0x7CBE, 0xEFF1},{0x7CCA, 0xFBD5},{0x7CD6, 0xD3D8},{0x7CDE, 0xDDD0},{0x7CDF, 0xF0D9},{0x7CE0, 0xCBB3},{0x7CE7, 0xD5DD}, - {0x7CFB, 0xCDA7},{0x7CFE, 0xD0AC},{0x7D00, 0xD1BA},{0x7D02, 0xF1C4},{0x7D04, 0xE5B3},{0x7D05, 0xFBF5},{0x7D06, 0xE9E1},{0x7D07, 0xFDE0}, - {0x7D08, 0xFCBC},{0x7D0A, 0xDAA2},{0x7D0B, 0xDAA3},{0x7D0D, 0xD2A1},{0x7D10, 0xD2EF},{0x7D14, 0xE2ED},{0x7D17, 0xDEE9},{0x7D18, 0xCEDC}, - {0x7D19, 0xF2B5},{0x7D1A, 0xD0E4},{0x7D1B, 0xDDD1},{0x7D20, 0xE1C8},{0x7D21, 0xDBB7},{0x7D22, 0xDFE3},{0x7D2B, 0xEDB9},{0x7D2C, 0xF1C5}, - {0x7D2E, 0xF3CF},{0x7D2F, 0xD7AB},{0x7D30, 0xE1AC},{0x7D33, 0xE3EB},{0x7D35, 0xEEC7},{0x7D39, 0xE1C9},{0x7D3A, 0xCAFA},{0x7D42, 0xF0FB}, - {0x7D43, 0xFAE1},{0x7D44, 0xF0DA},{0x7D45, 0xCCE7},{0x7D46, 0xDAF4},{0x7D50, 0xCCBF},{0x7D5E, 0xCEED},{0x7D61, 0xD5A9},{0x7D62, 0xFAE2}, - {0x7D66, 0xD0E5},{0x7D68, 0xEBD6},{0x7D6A, 0xECDF},{0x7D6E, 0xDFFC},{0x7D71, 0xF7D6},{0x7D72, 0xDEEA},{0x7D73, 0xCBB4},{0x7D76, 0xEFBE}, - {0x7D79, 0xCCB5},{0x7D7F, 0xCFBD},{0x7D8E, 0xEFF2},{0x7D8F, 0xE2B7},{0x7D93, 0xCCE8},{0x7D9C, 0xF0FC},{0x7DA0, 0xD6E0},{0x7DA2, 0xF1C6}, - {0x7DAC, 0xE2B8},{0x7DAD, 0xEBAB},{0x7DB1, 0xCBB5},{0x7DB2, 0xD8D1},{0x7DB4, 0xF4CE},{0x7DB5, 0xF3F7},{0x7DB8, 0xD7C6},{0x7DBA, 0xD1BB}, - {0x7DBB, 0xF7AA},{0x7DBD, 0xEDCA},{0x7DBE, 0xD7D3},{0x7DBF, 0xD8FA},{0x7DC7, 0xF6C5},{0x7DCA, 0xD1CC},{0x7DCB, 0xDDFC},{0x7DD6, 0xDFFD}, - {0x7DD8, 0xF9E5},{0x7DDA, 0xE0CA},{0x7DDD, 0xF2FD},{0x7DDE, 0xD3B0},{0x7DE0, 0xF4F3},{0x7DE1, 0xDAC9},{0x7DE3, 0xE6DE},{0x7DE8, 0xF8BA}, - {0x7DE9, 0xE8D0},{0x7DEC, 0xD8FB},{0x7DEF, 0xEAD5},{0x7DF4, 0xD6A3},{0x7DFB, 0xF6C6},{0x7E09, 0xF2DB},{0x7E0A, 0xE4FC},{0x7E15, 0xE8B2}, - {0x7E1B, 0xDADA},{0x7E1D, 0xF2DC},{0x7E1E, 0xFBD6},{0x7E1F, 0xE9B2},{0x7E21, 0xEEAD},{0x7E23, 0xFAE3},{0x7E2B, 0xDCEE},{0x7E2E, 0xF5EA}, - {0x7E2F, 0xE6E0},{0x7E31, 0xF0FD},{0x7E37, 0xD7AC},{0x7E3D, 0xF5C5},{0x7E3E, 0xEEE0},{0x7E41, 0xDBE5},{0x7E43, 0xDDDE},{0x7E46, 0xD9F0}, - {0x7E47, 0xE9A3},{0x7E52, 0xF1F9},{0x7E54, 0xF2C4},{0x7E55, 0xE0CB},{0x7E5E, 0xE9A4},{0x7E61, 0xE2B9},{0x7E69, 0xE3B1},{0x7E6A, 0xFCEB}, - {0x7E6B, 0xCDA8},{0x7E6D, 0xCCB6},{0x7E70, 0xF0DB},{0x7E79, 0xE6BA},{0x7E7C, 0xCDA9},{0x7E82, 0xF3C3},{0x7E8C, 0xE1D9},{0x7E8F, 0xEFAB}, - {0x7E93, 0xE7C5},{0x7E96, 0xE0E9},{0x7E98, 0xF3C5},{0x7E9B, 0xD4C0},{0x7E9C, 0xD5BF},{0x7F36, 0xDDAE},{0x7F38, 0xF9FC},{0x7F3A, 0xCCC0}, - {0x7F4C, 0xE5A2},{0x7F50, 0xCEB8},{0x7F54, 0xD8D2},{0x7F55, 0xF9D6},{0x7F6A, 0xF1AA},{0x7F6B, 0xCED1},{0x7F6E, 0xF6C7},{0x7F70, 0xDBEB}, - {0x7F72, 0xDFFE},{0x7F75, 0xD8E1},{0x7F77, 0xF7F3},{0x7F79, 0xD7E7},{0x7F85, 0xD4FE},{0x7F88, 0xD1BC},{0x7F8A, 0xE5CF},{0x7F8C, 0xCBB6}, - {0x7F8E, 0xDAB8},{0x7F94, 0xCDC4},{0x7F9A, 0xD6BE},{0x7F9E, 0xE2BA},{0x7FA4, 0xCFD8},{0x7FA8, 0xE0CC},{0x7FA9, 0xEBF9},{0x7FB2, 0xFDFD}, - {0x7FB8, 0xD7E8},{0x7FB9, 0xCBD8},{0x7FBD, 0xE9E2},{0x7FC1, 0xE8BA},{0x7FC5, 0xE3C7},{0x7FCA, 0xECCD},{0x7FCC, 0xECCE},{0x7FCE, 0xD6BF}, - {0x7FD2, 0xE3A7},{0x7FD4, 0xDFD6},{0x7FD5, 0xFDE8},{0x7FDF, 0xEEE1},{0x7FE0, 0xF6A8},{0x7FE1, 0xDDFD},{0x7FE9, 0xF8BB},{0x7FEB, 0xE8D1}, - {0x7FF0, 0xF9D7},{0x7FF9, 0xCEEE},{0x7FFC, 0xECCF},{0x8000, 0xE9A5},{0x8001, 0xD6D5},{0x8003, 0xCDC5},{0x8005, 0xEDBA},{0x8006, 0xD1BD}, - {0x8009, 0xCFBE},{0x800C, 0xECBB},{0x8010, 0xD2B1},{0x8015, 0xCCE9},{0x8017, 0xD9C4},{0x8018, 0xE9FC},{0x802D, 0xD1BE},{0x8033, 0xECBC}, - {0x8036, 0xE5AD},{0x803D, 0xF7B0},{0x803F, 0xCCEA},{0x8043, 0xD3C4},{0x8046, 0xD6C0},{0x804A, 0xD6FD},{0x8056, 0xE1A1},{0x8058, 0xDEBD}, - {0x805A, 0xF6A9},{0x805E, 0xDAA4},{0x806F, 0xD6A4},{0x8070, 0xF5C6},{0x8072, 0xE1A2},{0x8073, 0xE9C6},{0x8077, 0xF2C5},{0x807D, 0xF4E9}, - {0x807E, 0xD6EC},{0x807F, 0xEBD3},{0x8084, 0xECBD},{0x8085, 0xE2DC},{0x8086, 0xDEEB},{0x8087, 0xF0DC},{0x8089, 0xEBBF},{0x808B, 0xD7CE}, - {0x808C, 0xD1BF},{0x8096, 0xF5AB},{0x809B, 0xF9FD},{0x809D, 0xCADC},{0x80A1, 0xCDC6},{0x80A2, 0xF2B6},{0x80A5, 0xDDFE},{0x80A9, 0xCCB7}, - {0x80AA, 0xDBB8},{0x80AF, 0xD0E9},{0x80B1, 0xCEDD},{0x80B2, 0xEBC0},{0x80B4, 0xFDA2},{0x80BA, 0xF8CB},{0x80C3, 0xEAD6},{0x80C4, 0xF1B0}, - {0x80CC, 0xDBCE},{0x80CE, 0xF7C3},{0x80DA, 0xDBCF},{0x80DB, 0xCBA4},{0x80DE, 0xF8E0},{0x80E1, 0xFBD7},{0x80E4, 0xEBCA},{0x80E5, 0xE0A1}, - {0x80F1, 0xCECD},{0x80F4, 0xD4DC},{0x80F8, 0xFDD8},{0x80FD, 0xD2F6},{0x8102, 0xF2B7},{0x8105, 0xFAF6},{0x8106, 0xF6AA},{0x8107, 0xFAF7}, - {0x8108, 0xD8E6},{0x810A, 0xF4B1},{0x8118, 0xE8D2},{0x811A, 0xCAC5},{0x811B, 0xCCEB},{0x8123, 0xE2EE},{0x8129, 0xE2BB},{0x812B, 0xF7AD}, - {0x812F, 0xF8E1},{0x8139, 0xF3EC},{0x813E, 0xDEA1},{0x814B, 0xE4FD},{0x814E, 0xE3EC},{0x8150, 0xDDAF},{0x8151, 0xDDB0},{0x8154, 0xCBB7}, - {0x8155, 0xE8D3},{0x8165, 0xE1A3},{0x8166, 0xD2E0},{0x816B, 0xF0FE},{0x8170, 0xE9A6},{0x8171, 0xCBF2},{0x8178, 0xEDF3},{0x8179, 0xDCD9}, - {0x817A, 0xE0CD},{0x817F, 0xF7DA},{0x8180, 0xDBB9},{0x8188, 0xCCAE},{0x818A, 0xDADB},{0x818F, 0xCDC7},{0x819A, 0xDDB1},{0x819C, 0xD8AF}, - {0x819D, 0xE3A3},{0x81A0, 0xCEEF},{0x81A3, 0xF2F3},{0x81A8, 0xF8B3},{0x81B3, 0xE0CE},{0x81B5, 0xF5FD},{0x81BA, 0xEBEC},{0x81BD, 0xD3C5}, - {0x81BE, 0xFCEC},{0x81BF, 0xD2DB},{0x81C0, 0xD4EB},{0x81C2, 0xDEA2},{0x81C6, 0xE5E6},{0x81CD, 0xF0B0},{0x81D8, 0xD5C4},{0x81DF, 0xEDF4}, - {0x81E3, 0xE3ED},{0x81E5, 0xE8C2},{0x81E7, 0xEDF5},{0x81E8, 0xD7FC},{0x81EA, 0xEDBB},{0x81ED, 0xF6AB},{0x81F3, 0xF2B8},{0x81F4, 0xF6C8}, - {0x81FA, 0xD3E6},{0x81FB, 0xF2DD},{0x81FC, 0xCFBF},{0x81FE, 0xEBAC},{0x8205, 0xCFC0},{0x8207, 0xE6A8},{0x8208, 0xFDE9},{0x820A, 0xCFC1}, - {0x820C, 0xE0DF},{0x820D, 0xDEEC},{0x8212, 0xE0A2},{0x821B, 0xF4BF},{0x821C, 0xE2EF},{0x821E, 0xD9F1},{0x821F, 0xF1C7},{0x8221, 0xCBB8}, - {0x822A, 0xF9FE},{0x822B, 0xDBBA},{0x822C, 0xDAF5},{0x8235, 0xF6EC},{0x8236, 0xDADC},{0x8237, 0xFAE4},{0x8239, 0xE0CF},{0x8240, 0xDDB2}, - {0x8245, 0xE6A9},{0x8247, 0xEFF3},{0x8259, 0xF3ED},{0x8264, 0xEBFA},{0x8266, 0xF9E6},{0x826E, 0xCADD},{0x826F, 0xD5DE},{0x8271, 0xCADE}, - {0x8272, 0xDFE4},{0x8276, 0xE6FD},{0x8278, 0xF5AC},{0x827E, 0xE4F5},{0x828B, 0xE9E3},{0x828D, 0xEDCB},{0x828E, 0xCFE4},{0x8292, 0xD8D3}, - {0x8299, 0xDDB3},{0x829A, 0xD4EC},{0x829D, 0xF2B9},{0x829F, 0xDFB7},{0x82A5, 0xCBCE},{0x82A6, 0xFBD8},{0x82A9, 0xD0D9},{0x82AC, 0xDDD2}, - {0x82AD, 0xF7F4},{0x82AE, 0xE7DC},{0x82AF, 0xE4A5},{0x82B1, 0xFCA3},{0x82B3, 0xDBBB},{0x82B7, 0xF2BA},{0x82B8, 0xE9FD},{0x82B9, 0xD0CA}, - {0x82BB, 0xF5D6},{0x82BC, 0xD9C5},{0x82BD, 0xE4B4},{0x82BF, 0xEDA7},{0x82D1, 0xEABD},{0x82D2, 0xE6FE},{0x82D4, 0xF7C4},{0x82D5, 0xF5AD}, - {0x82D7, 0xD9E0},{0x82DB, 0xCAB4},{0x82DE, 0xF8E2},{0x82DF, 0xCFC2},{0x82E1, 0xECBE},{0x82E5, 0xE5B4},{0x82E6, 0xCDC8},{0x82E7, 0xEEC8}, - {0x82F1, 0xE7C8},{0x82FD, 0xCDC9},{0x82FE, 0xF9B7},{0x8301, 0xF1E8},{0x8302, 0xD9F2},{0x8303, 0xDBF5},{0x8304, 0xCAB5},{0x8305, 0xD9C6}, - {0x8309, 0xD8C9},{0x8317, 0xD9AB},{0x8328, 0xEDBC},{0x832B, 0xD8D4},{0x832F, 0xDCDA},{0x8331, 0xE2BC},{0x8334, 0xFCED},{0x8335, 0xECE0}, - {0x8336, 0xD2FE},{0x8338, 0xE9C7},{0x8339, 0xE6AA},{0x8340, 0xE2F0},{0x8347, 0xFABB},{0x8349, 0xF5AE},{0x834A, 0xFBAA},{0x834F, 0xECFB}, - {0x8351, 0xECBF},{0x8352, 0xFCD8},{0x8373, 0xD4E5},{0x8377, 0xF9C3},{0x837B, 0xEEE2},{0x8389, 0xD7E9},{0x838A, 0xEDF6},{0x838E, 0xDEED}, - {0x8396, 0xCCEC},{0x8398, 0xE3EE},{0x839E, 0xE8D4},{0x83A2, 0xFAF8},{0x83A9, 0xDDB4},{0x83AA, 0xE4B5},{0x83AB, 0xD8B0},{0x83BD, 0xD8D5}, - {0x83C1, 0xF4EA},{0x83C5, 0xCEB9},{0x83C9, 0xD6E1},{0x83CA, 0xCFD2},{0x83CC, 0xD0B6},{0x83D3, 0xCEA2},{0x83D6, 0xF3EE},{0x83DC, 0xF3F8}, - {0x83E9, 0xDCCC},{0x83EB, 0xD0CB},{0x83EF, 0xFCA4},{0x83F0, 0xCDCA},{0x83F1, 0xD7D4},{0x83F2, 0xDEA3},{0x83F4, 0xE4E0},{0x83F9, 0xEEC9}, - {0x83FD, 0xE2DD},{0x8403, 0xF5FE},{0x8404, 0xD4AC},{0x840A, 0xD5D1},{0x840C, 0xD8F0},{0x840D, 0xF8C3},{0x840E, 0xEAD7},{0x8429, 0xF5D7}, - {0x842C, 0xD8BF},{0x8431, 0xFDC0},{0x8438, 0xEBAD},{0x843D, 0xD5AA},{0x8449, 0xE7A8},{0x8457, 0xEECA},{0x845B, 0xCAE7},{0x8461, 0xF8E3}, - {0x8463, 0xD4DD},{0x8466, 0xEAD8},{0x846B, 0xFBD9},{0x846C, 0xEDF7},{0x846F, 0xE5B5},{0x8475, 0xD0AD},{0x847A, 0xF1F1},{0x8490, 0xE2BD}, - {0x8494, 0xE3C8},{0x8499, 0xD9D5},{0x849C, 0xDFAA},{0x84A1, 0xDBBC},{0x84B2, 0xF8E4},{0x84B8, 0xF1FA},{0x84BB, 0xE5B6},{0x84BC, 0xF3EF}, - {0x84BF, 0xFBDA},{0x84C0, 0xE1E0},{0x84C2, 0xD9AC},{0x84C4, 0xF5EB},{0x84C6, 0xE0B6},{0x84C9, 0xE9C8},{0x84CB, 0xCBCF},{0x84CD, 0xE3C9}, - {0x84D1, 0xDEEE},{0x84DA, 0xE2BE},{0x84EC, 0xDCEF},{0x84EE, 0xD6A5},{0x84F4, 0xE2F1},{0x84FC, 0xD6FE},{0x8511, 0xD9A1},{0x8513, 0xD8C0}, - {0x8514, 0xDCDB},{0x8517, 0xEDBD},{0x8518, 0xDFB8},{0x851A, 0xEAA5},{0x851E, 0xD7AD},{0x8521, 0xF3F9},{0x8523, 0xEDF8},{0x8525, 0xF5C7}, - {0x852C, 0xE1CA},{0x852D, 0xEBE3},{0x852F, 0xF2DE},{0x853D, 0xF8CC},{0x853F, 0xEAD9},{0x8541, 0xD3C6},{0x8543, 0xDBE6},{0x8549, 0xF5AF}, - {0x854E, 0xCEF0},{0x8553, 0xE9FE},{0x8559, 0xFBB6},{0x8563, 0xE2F2},{0x8568, 0xCFF2},{0x8569, 0xF7B9},{0x856A, 0xD9F3},{0x856D, 0xE1CB}, - {0x8584, 0xDADD},{0x8587, 0xDAB9},{0x858F, 0xEBFB},{0x8591, 0xCBB9},{0x8594, 0xEDF9},{0x859B, 0xE0E0},{0x85A6, 0xF4C0},{0x85A8, 0xFDBC}, - {0x85A9, 0xDFB1},{0x85AA, 0xE3EF},{0x85AF, 0xE0A3},{0x85B0, 0xFDB9},{0x85BA, 0xF0B1},{0x85C1, 0xCDCB},{0x85C9, 0xEDBE},{0x85CD, 0xD5C0}, - {0x85CE, 0xE3F0},{0x85CF, 0xEDFA},{0x85D5, 0xE9E4},{0x85DC, 0xD5ED},{0x85DD, 0xE7DD},{0x85E4, 0xD4F6},{0x85E5, 0xE5B7},{0x85E9, 0xDBE7}, - {0x85EA, 0xE2BF},{0x85F7, 0xEECB},{0x85FA, 0xD7F4},{0x85FB, 0xF0DD},{0x85FF, 0xCEAB},{0x8602, 0xE7DE},{0x8606, 0xD6D6},{0x8607, 0xE1CC}, - {0x860A, 0xE8B3},{0x8616, 0xE5EE},{0x8617, 0xDCA2},{0x861A, 0xE0D0},{0x862D, 0xD5B5},{0x863F, 0xD5A1},{0x864E, 0xFBDB},{0x8650, 0xF9CB}, - {0x8654, 0xCBF3},{0x8655, 0xF4A5},{0x865B, 0xFAC8},{0x865C, 0xD6D7},{0x865E, 0xE9E5},{0x865F, 0xFBDC},{0x8667, 0xFDD0},{0x8679, 0xFBF6}, - {0x868A, 0xDAA5},{0x868C, 0xDBBD},{0x8693, 0xECE2},{0x86A3, 0xCDF7},{0x86A4, 0xF0DE},{0x86A9, 0xF6C9},{0x86C7, 0xDEEF},{0x86CB, 0xD3B1}, - {0x86D4, 0xFCEE},{0x86D9, 0xE8C3},{0x86DB, 0xF1C8},{0x86DF, 0xCEF1},{0x86E4, 0xF9ED},{0x86ED, 0xF2F4},{0x86FE, 0xE4B6},{0x8700, 0xF5B9}, - {0x8702, 0xDCF0},{0x8703, 0xE3F1},{0x8708, 0xE8A5},{0x8718, 0xF2BB},{0x871A, 0xDEA4},{0x871C, 0xDACC},{0x874E, 0xCAE9},{0x8755, 0xE3DA}, - {0x8757, 0xFCD9},{0x875F, 0xEADA},{0x8766, 0xF9C4},{0x8768, 0xE3A4},{0x8774, 0xFBDD},{0x8776, 0xEFCA},{0x8778, 0xE8C4},{0x8782, 0xD5CC}, - {0x878D, 0xEBD7},{0x879F, 0xD9AD},{0x87A2, 0xFBAB},{0x87B3, 0xD3D9},{0x87BA, 0xD5A2},{0x87C4, 0xF6DE},{0x87E0, 0xDAF6},{0x87EC, 0xE0D1}, - {0x87EF, 0xE9A8},{0x87F2, 0xF5F9},{0x87F9, 0xFAAF},{0x87FB, 0xEBFC},{0x87FE, 0xE0EA},{0x8805, 0xE3B2},{0x881F, 0xD5C5},{0x8822, 0xF1E3}, - {0x8823, 0xD5EE},{0x8831, 0xCDCC},{0x8836, 0xEDD9},{0x883B, 0xD8C1},{0x8840, 0xFAEC},{0x8846, 0xF1EB},{0x884C, 0xFABC},{0x884D, 0xE6E2}, - {0x8852, 0xFAE5},{0x8853, 0xE2FA},{0x8857, 0xCAB6},{0x8859, 0xE4B7},{0x885B, 0xEADB},{0x885D, 0xF5FA},{0x8861, 0xFBAC},{0x8862, 0xCFC3}, - {0x8863, 0xEBFD},{0x8868, 0xF8FA},{0x886B, 0xDFB9},{0x8870, 0xE1F1},{0x8872, 0xD2A4},{0x8877, 0xF5FB},{0x887E, 0xD0DA},{0x887F, 0xD0DB}, - {0x8881, 0xEABE},{0x8882, 0xD9B1},{0x8888, 0xCAB7},{0x888B, 0xD3E7},{0x888D, 0xF8E5},{0x8892, 0xD3B2},{0x8896, 0xE2C0},{0x8897, 0xF2DF}, - {0x889E, 0xCDE5},{0x88AB, 0xF9AC},{0x88B4, 0xCDCD},{0x88C1, 0xEEAE},{0x88C2, 0xD6AE},{0x88CF, 0xD7EA},{0x88D4, 0xE7E0},{0x88D5, 0xEBAE}, - {0x88D9, 0xCFD9},{0x88DC, 0xDCCD},{0x88DD, 0xEDFB},{0x88DF, 0xDEF0},{0x88E1, 0xD7EB},{0x88E8, 0xDEA5},{0x88F3, 0xDFD7},{0x88F4, 0xDBD0}, - {0x88F5, 0xDBD1},{0x88F8, 0xD5A3},{0x88FD, 0xF0B2},{0x8907, 0xDCDC},{0x8910, 0xCAE8},{0x8912, 0xF8E6},{0x8913, 0xDCCE},{0x8918, 0xEADC}, - {0x8919, 0xDBD2},{0x8925, 0xE9B3},{0x892A, 0xF7DB},{0x8936, 0xE3A8},{0x8938, 0xD7AE},{0x893B, 0xE0E1},{0x8941, 0xCBBA},{0x8944, 0xE5D1}, - {0x895F, 0xD0DC},{0x8964, 0xD5C1},{0x896A, 0xD8CA},{0x8972, 0xE3A9},{0x897F, 0xE0A4},{0x8981, 0xE9A9},{0x8983, 0xD3C7},{0x8986, 0xDCDD}, - {0x8987, 0xF8AE},{0x898B, 0xCCB8},{0x898F, 0xD0AE},{0x8993, 0xD8F2},{0x8996, 0xE3CA},{0x89A1, 0xCCAF},{0x89A9, 0xD4AD},{0x89AA, 0xF6D1}, - {0x89B2, 0xD0CC},{0x89BA, 0xCAC6},{0x89BD, 0xD5C2},{0x89C0, 0xCEBA},{0x89D2, 0xCAC7},{0x89E3, 0xFAB0},{0x89F4, 0xDFD8},{0x89F8, 0xF5BA}, - {0x8A00, 0xE5EB},{0x8A02, 0xEFF4},{0x8A03, 0xDDB5},{0x8A08, 0xCDAA},{0x8A0A, 0xE3F2},{0x8A0C, 0xFBF7},{0x8A0E, 0xF7D0},{0x8A13, 0xFDBA}, - {0x8A16, 0xFDE1},{0x8A17, 0xF6FE},{0x8A18, 0xD1C0},{0x8A1B, 0xE8C5},{0x8A1D, 0xE4B8},{0x8A1F, 0xE1E8},{0x8A23, 0xCCC1},{0x8A25, 0xD2ED}, - {0x8A2A, 0xDBBE},{0x8A2D, 0xE0E2},{0x8A31, 0xFAC9},{0x8A34, 0xE1CD},{0x8A36, 0xCAB8},{0x8A3A, 0xF2E0},{0x8A3B, 0xF1C9},{0x8A50, 0xDEF1}, - {0x8A54, 0xF0DF},{0x8A55, 0xF8C4},{0x8A5B, 0xEECC},{0x8A5E, 0xDEF2},{0x8A60, 0xE7C9},{0x8A62, 0xE2F3},{0x8A63, 0xE7E1},{0x8A66, 0xE3CB}, - {0x8A69, 0xE3CC},{0x8A6D, 0xCFF8},{0x8A6E, 0xEFAC},{0x8A70, 0xFDFE},{0x8A71, 0xFCA5},{0x8A72, 0xFAB1},{0x8A73, 0xDFD9},{0x8A75, 0xE0D2}, - {0x8A79, 0xF4DA},{0x8A85, 0xF1CA},{0x8A87, 0xCEA3},{0x8A8C, 0xF2BC},{0x8A8D, 0xECE3},{0x8A93, 0xE0A5},{0x8A95, 0xF7AB},{0x8A98, 0xEBAF}, - {0x8A9E, 0xE5DE},{0x8AA0, 0xE1A4},{0x8AA1, 0xCDAB},{0x8AA3, 0xD9F4},{0x8AA4, 0xE8A6},{0x8AA5, 0xCDCE},{0x8AA6, 0xE1E9},{0x8AA8, 0xFCEF}, - {0x8AAA, 0xE0E3},{0x8AB0, 0xE2C1},{0x8AB2, 0xCEA4},{0x8AB9, 0xDEA6},{0x8ABC, 0xEBFE},{0x8ABE, 0xEBDD},{0x8ABF, 0xF0E0},{0x8AC2, 0xF4DB}, - {0x8AC4, 0xE2F4},{0x8AC7, 0xD3C8},{0x8ACB, 0xF4EB},{0x8ACD, 0xEEB5},{0x8ACF, 0xF5D8},{0x8AD2, 0xD5DF},{0x8AD6, 0xD6E5},{0x8ADB, 0xEBB0}, - {0x8ADC, 0xF4E3},{0x8AE1, 0xE3CD},{0x8AE6, 0xF4F4},{0x8AE7, 0xFAB2},{0x8AEA, 0xEFF5},{0x8AEB, 0xCADF},{0x8AED, 0xEBB1},{0x8AEE, 0xEDBF}, - {0x8AF1, 0xFDC9},{0x8AF6, 0xE4A6},{0x8AF7, 0xF9A4},{0x8AF8, 0xF0B3},{0x8AFA, 0xE5EC},{0x8AFE, 0xD1E7},{0x8B00, 0xD9C7},{0x8B01, 0xE4D7}, - {0x8B02, 0xEADD},{0x8B04, 0xD4F7},{0x8B0E, 0xDABA},{0x8B10, 0xDACD},{0x8B14, 0xF9CC},{0x8B16, 0xE1DA},{0x8B17, 0xDBBF},{0x8B19, 0xCCC5}, - {0x8B1A, 0xECD0},{0x8B1B, 0xCBBB},{0x8B1D, 0xDEF3},{0x8B20, 0xE9AA},{0x8B28, 0xD9C8},{0x8B2B, 0xEEE3},{0x8B2C, 0xD7BD},{0x8B33, 0xCFC4}, - {0x8B39, 0xD0CD},{0x8B41, 0xFCA6},{0x8B49, 0xF1FB},{0x8B4E, 0xFDD2},{0x8B4F, 0xD1C1},{0x8B58, 0xE3DB},{0x8B5A, 0xD3C9},{0x8B5C, 0xDCCF}, - {0x8B66, 0xCCED},{0x8B6C, 0xDEA7},{0x8B6F, 0xE6BB},{0x8B70, 0xECA1},{0x8B74, 0xCCB9},{0x8B77, 0xFBDE},{0x8B7D, 0xE7E2},{0x8B80, 0xD4C1}, - {0x8B8A, 0xDCA8},{0x8B90, 0xE2C2},{0x8B92, 0xF3D8},{0x8B93, 0xE5D3},{0x8B96, 0xF3D9},{0x8B9A, 0xF3C6},{0x8C37, 0xCDDB},{0x8C3F, 0xCDAC}, - {0x8C41, 0xFCC3},{0x8C46, 0xD4E7},{0x8C48, 0xD1C2},{0x8C4A, 0xF9A5},{0x8C4C, 0xE8D5},{0x8C55, 0xE3CE},{0x8C5A, 0xD4CA},{0x8C61, 0xDFDA}, - {0x8C6A, 0xFBDF},{0x8C6B, 0xE7E3},{0x8C79, 0xF8FB},{0x8C7A, 0xE3CF},{0x8C82, 0xF5B0},{0x8C8A, 0xD8E7},{0x8C8C, 0xD9C9},{0x8C9D, 0xF8AF}, - {0x8C9E, 0xEFF6},{0x8CA0, 0xDDB6},{0x8CA1, 0xEEAF},{0x8CA2, 0xCDF8},{0x8CA7, 0xDEB8},{0x8CA8, 0xFCA7},{0x8CA9, 0xF7FC},{0x8CAA, 0xF7B1}, - {0x8CAB, 0xCEBB},{0x8CAC, 0xF4A1},{0x8CAF, 0xEECD},{0x8CB0, 0xE1AE},{0x8CB3, 0xECC3},{0x8CB4, 0xCFFE},{0x8CB6, 0xF8BF},{0x8CB7, 0xD8E2}, - {0x8CB8, 0xD3E8},{0x8CBB, 0xDEA8},{0x8CBC, 0xF4E4},{0x8CBD, 0xECC2},{0x8CBF, 0xD9F5},{0x8CC0, 0xF9C5},{0x8CC1, 0xDDD3},{0x8CC2, 0xD6F1}, - {0x8CC3, 0xECFC},{0x8CC4, 0xFCF0},{0x8CC7, 0xEDC0},{0x8CC8, 0xCAB9},{0x8CCA, 0xEEE4},{0x8CD1, 0xF2E1},{0x8CD3, 0xDEB9},{0x8CDA, 0xD6F2}, - {0x8CDC, 0xDEF4},{0x8CDE, 0xDFDB},{0x8CE0, 0xDBD3},{0x8CE2, 0xFAE7},{0x8CE3, 0xD8E3},{0x8CE4, 0xF4C1},{0x8CE6, 0xDDB7},{0x8CEA, 0xF2F5}, - {0x8CED, 0xD4AE},{0x8CF4, 0xD6F3},{0x8CFB, 0xDDB8},{0x8CFC, 0xCFC5},{0x8CFD, 0xDFDF},{0x8D04, 0xF2BE},{0x8D05, 0xF6A1},{0x8D07, 0xEBCB}, - {0x8D08, 0xF1FC},{0x8D0A, 0xF3C7},{0x8D0D, 0xE0EB},{0x8D13, 0xEDFC},{0x8D16, 0xE1DB},{0x8D64, 0xEEE5},{0x8D66, 0xDEF5},{0x8D6B, 0xFAD3}, - {0x8D70, 0xF1CB},{0x8D73, 0xD0AF},{0x8D74, 0xDDB9},{0x8D77, 0xD1C3},{0x8D85, 0xF5B1},{0x8D8A, 0xEAC6},{0x8D99, 0xF0E1},{0x8DA3, 0xF6AC}, - {0x8DA8, 0xF5D9},{0x8DB3, 0xF0EB},{0x8DBA, 0xDDBA},{0x8DBE, 0xF2BF},{0x8DC6, 0xF7C5},{0x8DCB, 0xDBA2},{0x8DCC, 0xF2F6},{0x8DCF, 0xCABA}, - {0x8DDB, 0xF7F5},{0x8DDD, 0xCBE5},{0x8DE1, 0xEEE6},{0x8DE3, 0xE0D3},{0x8DE8, 0xCEA5},{0x8DEF, 0xD6D8},{0x8DF3, 0xD4AF},{0x8E0A, 0xE9C9}, - {0x8E0F, 0xD3CE},{0x8E10, 0xF4C2},{0x8E1E, 0xCBE6},{0x8E2A, 0xF1A1},{0x8E30, 0xEBB2},{0x8E35, 0xF1A2},{0x8E42, 0xEBB3},{0x8E44, 0xF0B4}, - {0x8E47, 0xCBF4},{0x8E48, 0xD4B0},{0x8E49, 0xF3B2},{0x8E4A, 0xFBB7},{0x8E59, 0xF5EC},{0x8E5F, 0xEEE7},{0x8E60, 0xF4B2},{0x8E74, 0xF5ED}, - {0x8E76, 0xCFF3},{0x8E81, 0xF0E2},{0x8E87, 0xEECE},{0x8E8A, 0xF1CC},{0x8E8D, 0xE5B8},{0x8EAA, 0xD7F5},{0x8EAB, 0xE3F3},{0x8EAC, 0xCFE5}, - {0x8EC0, 0xCFC6},{0x8ECA, 0xF3B3},{0x8ECB, 0xE4D8},{0x8ECC, 0xCFF9},{0x8ECD, 0xCFDA},{0x8ED2, 0xFACD},{0x8EDF, 0xE6E3},{0x8EEB, 0xF2E2}, - {0x8EF8, 0xF5EE},{0x8EFB, 0xCABB},{0x8EFE, 0xE3DC},{0x8F03, 0xCEF2},{0x8F05, 0xD6D9},{0x8F09, 0xEEB0},{0x8F12, 0xF4E5},{0x8F13, 0xD8C2}, - {0x8F14, 0xDCD0},{0x8F15, 0xCCEE},{0x8F1B, 0xD5E0},{0x8F1C, 0xF6CA},{0x8F1D, 0xFDCA},{0x8F1E, 0xD8D6},{0x8F1F, 0xF4CF},{0x8F26, 0xD6A6}, - {0x8F27, 0xDCBE},{0x8F29, 0xDBD4},{0x8F2A, 0xD7C7},{0x8F2F, 0xF2FE},{0x8F33, 0xF1CD},{0x8F38, 0xE2C3},{0x8F39, 0xDCDE},{0x8F3B, 0xDCDF}, - {0x8F3E, 0xEFAD},{0x8F3F, 0xE6AB},{0x8F44, 0xF9DD},{0x8F45, 0xEABF},{0x8F49, 0xEFAE},{0x8F4D, 0xF4D0},{0x8F4E, 0xCEF3},{0x8F5D, 0xE6AC}, - {0x8F5F, 0xCEDE},{0x8F62, 0xD5F9},{0x8F9B, 0xE3F4},{0x8F9C, 0xCDD0},{0x8FA3, 0xD5B8},{0x8FA6, 0xF7FD},{0x8FA8, 0xDCA9},{0x8FAD, 0xDEF6}, - {0x8FAF, 0xDCAA},{0x8FB0, 0xF2E3},{0x8FB1, 0xE9B4},{0x8FB2, 0xD2DC},{0x8FC2, 0xE9E6},{0x8FC5, 0xE3F6},{0x8FCE, 0xE7CA},{0x8FD1, 0xD0CE}, - {0x8FD4, 0xDAF7},{0x8FE6, 0xCABC},{0x8FEA, 0xEEE8},{0x8FEB, 0xDADE},{0x8FED, 0xF2F7},{0x8FF0, 0xE2FB},{0x8FF2, 0xCCA6},{0x8FF7, 0xDABB}, - {0x8FF9, 0xEEE9},{0x8FFD, 0xF5DA},{0x9000, 0xF7DC},{0x9001, 0xE1EA},{0x9002, 0xCEC1},{0x9003, 0xD4B1},{0x9005, 0xFDB1},{0x9006, 0xE6BD}, - {0x9008, 0xFBAD},{0x900B, 0xF8E7},{0x900D, 0xE1CE},{0x900F, 0xF7E2},{0x9010, 0xF5EF},{0x9011, 0xCFC7},{0x9014, 0xD4B2},{0x9015, 0xCCEF}, - {0x9017, 0xD4E8},{0x9019, 0xEECF},{0x901A, 0xF7D7},{0x901D, 0xE0A6},{0x901E, 0xD6C1},{0x901F, 0xE1DC},{0x9020, 0xF0E3},{0x9021, 0xF1E4}, - {0x9022, 0xDCF1},{0x9023, 0xD6A7},{0x902E, 0xF4F5},{0x9031, 0xF1CE},{0x9032, 0xF2E4},{0x9035, 0xD0B0},{0x9038, 0xECEF},{0x903C, 0xF9BA}, - {0x903E, 0xEBB5},{0x9041, 0xD4ED},{0x9042, 0xE2C4},{0x9047, 0xE9E7},{0x904A, 0xEBB4},{0x904B, 0xEAA1},{0x904D, 0xF8BC},{0x904E, 0xCEA6}, - {0x9050, 0xF9C6},{0x9051, 0xFCDA},{0x9053, 0xD4B3},{0x9054, 0xD3B9},{0x9055, 0xEADE},{0x9059, 0xE9AB},{0x905C, 0xE1E1},{0x905D, 0xD3CF}, - {0x905E, 0xF4F6},{0x9060, 0xEAC0},{0x9061, 0xE1CF},{0x9063, 0xCCBA},{0x9069, 0xEEEA},{0x906D, 0xF0E4},{0x906E, 0xF3B4},{0x906F, 0xD4EE}, - {0x9072, 0xF2C0},{0x9075, 0xF1E5},{0x9077, 0xF4C3},{0x9078, 0xE0D4},{0x907A, 0xEBB6},{0x907C, 0xD7A1},{0x907D, 0xCBE8},{0x907F, 0xF9AD}, - {0x9080, 0xE9AD},{0x9081, 0xD8E4},{0x9082, 0xFAB3},{0x9083, 0xE2C5},{0x9084, 0xFCBD},{0x9087, 0xECC4},{0x9088, 0xD8B1},{0x908A, 0xDCAB}, - {0x908F, 0xD5A4},{0x9091, 0xEBE9},{0x9095, 0xE8BB},{0x9099, 0xD8D7},{0x90A2, 0xFBAE},{0x90A3, 0xD1E1},{0x90A6, 0xDBC0},{0x90A8, 0xF5BE}, - {0x90AA, 0xDEF7},{0x90AF, 0xCAFB},{0x90B0, 0xF7C6},{0x90B1, 0xCFC8},{0x90B5, 0xE1D0},{0x90B8, 0xEED0},{0x90C1, 0xE9F4},{0x90CA, 0xCEF4}, - {0x90DE, 0xD5CD},{0x90E1, 0xCFDB},{0x90E8, 0xDDBB},{0x90ED, 0xCEAC},{0x90F5, 0xE9E8},{0x90FD, 0xD4B4},{0x9102, 0xE4C7},{0x9112, 0xF5DB}, - {0x9115, 0xFAC1},{0x9119, 0xDEA9},{0x9127, 0xD4F8},{0x912D, 0xEFF7},{0x9132, 0xD3B3},{0x9149, 0xEBB7},{0x914A, 0xEFF8},{0x914B, 0xF5DC}, - {0x914C, 0xEDCC},{0x914D, 0xDBD5},{0x914E, 0xF1CF},{0x9152, 0xF1D0},{0x9162, 0xF5B2},{0x9169, 0xD9AE},{0x916A, 0xD5AC},{0x916C, 0xE2C6}, - {0x9175, 0xFDA3},{0x9177, 0xFBE5},{0x9178, 0xDFAB},{0x9187, 0xE2F5},{0x9189, 0xF6AD},{0x918B, 0xF5B3},{0x918D, 0xF0B5},{0x9192, 0xE1A5}, - {0x919C, 0xF5DD},{0x91AB, 0xECA2},{0x91AC, 0xEDFD},{0x91AE, 0xF5B4},{0x91AF, 0xFBB8},{0x91B1, 0xDBA3},{0x91B4, 0xD6CA},{0x91B5, 0xCBD9}, - {0x91C0, 0xE5D4},{0x91C7, 0xF3FA},{0x91C9, 0xEBB8},{0x91CB, 0xE0B7},{0x91CC, 0xD7EC},{0x91CD, 0xF1EC},{0x91CE, 0xE5AF},{0x91CF, 0xD5E1}, - {0x91D0, 0xD7ED},{0x91D1, 0xD1D1},{0x91D7, 0xE1F2},{0x91D8, 0xEFF9},{0x91DC, 0xDDBC},{0x91DD, 0xF6DC},{0x91E3, 0xF0E5},{0x91E7, 0xF4C4}, - {0x91EA, 0xE9E9},{0x91F5, 0xF3FB},{0x920D, 0xD4EF},{0x9210, 0xCCA2},{0x9211, 0xF7FE},{0x9212, 0xDFBC},{0x9217, 0xEBCD},{0x921E, 0xD0B7}, - {0x9234, 0xD6C2},{0x923A, 0xE8AD},{0x923F, 0xEFAF},{0x9240, 0xCBA5},{0x9245, 0xCBE9},{0x9249, 0xFAE8},{0x9257, 0xCCC6},{0x925B, 0xE6E7}, - {0x925E, 0xEAC7},{0x9262, 0xDBA4},{0x9264, 0xCFC9},{0x9265, 0xE2FC},{0x9266, 0xEFFA},{0x9280, 0xEBDE},{0x9283, 0xF5C8},{0x9285, 0xD4DE}, - {0x9291, 0xE0D5},{0x9293, 0xEFB0},{0x9296, 0xE2C7},{0x9298, 0xD9AF},{0x929C, 0xF9E7},{0x92B3, 0xE7E5},{0x92B6, 0xCFCA},{0x92B7, 0xE1D1}, - {0x92B9, 0xE2C8},{0x92CC, 0xEFFB},{0x92CF, 0xFAF9},{0x92D2, 0xDCF2},{0x92E4, 0xE0A7},{0x92EA, 0xF8E8},{0x92F8, 0xCBEA},{0x92FC, 0xCBBC}, - {0x9304, 0xD6E2},{0x9310, 0xF5DE},{0x9318, 0xF5DF},{0x931A, 0xEEB6},{0x931E, 0xE2F6},{0x931F, 0xD3CA},{0x9320, 0xEFFC},{0x9321, 0xD1C4}, - {0x9322, 0xEFB1},{0x9324, 0xD1C5},{0x9326, 0xD0DE},{0x9328, 0xD9E1},{0x932B, 0xE0B8},{0x932E, 0xCDD1},{0x932F, 0xF3B9},{0x9348, 0xE7CC}, - {0x934A, 0xD6A8},{0x934B, 0xCEA7},{0x934D, 0xD4B5},{0x9354, 0xE4C8},{0x935B, 0xD3B4},{0x936E, 0xEBB9},{0x9375, 0xCBF5},{0x937C, 0xF6DD}, - {0x937E, 0xF1A3},{0x938C, 0xCCC7},{0x9394, 0xE9CA},{0x9396, 0xE1F0},{0x939A, 0xF5E0},{0x93A3, 0xFBAF},{0x93A7, 0xCBD1},{0x93AC, 0xFBE0}, - {0x93AD, 0xF2E5},{0x93B0, 0xECF0},{0x93C3, 0xF0EC},{0x93D1, 0xEEEB},{0x93DE, 0xE9CB},{0x93E1, 0xCCF0},{0x93E4, 0xD7AF},{0x93F6, 0xF3A1}, - {0x9404, 0xFCF5},{0x9418, 0xF1A4},{0x9425, 0xE0D6},{0x942B, 0xEFB2},{0x9435, 0xF4D1},{0x9438, 0xF7A1},{0x9444, 0xF1D1},{0x9451, 0xCAFC}, - {0x9452, 0xCAFD},{0x945B, 0xCECE},{0x947D, 0xF3C8},{0x947F, 0xF3BA},{0x9577, 0xEDFE},{0x9580, 0xDAA6},{0x9583, 0xE0EC},{0x9589, 0xF8CD}, - {0x958B, 0xCBD2},{0x958F, 0xEBCE},{0x9591, 0xF9D8},{0x9592, 0xF9D9},{0x9593, 0xCAE0},{0x9594, 0xDACA},{0x9598, 0xCBA6},{0x95A3, 0xCAC8}, - {0x95A4, 0xF9EE},{0x95A5, 0xDBEC},{0x95A8, 0xD0B1},{0x95AD, 0xD5EF},{0x95B1, 0xE6F3},{0x95BB, 0xE7A2},{0x95BC, 0xE4D9},{0x95C7, 0xE4E1}, - {0x95CA, 0xFCC4},{0x95D4, 0xF9EF},{0x95D5, 0xCFF4},{0x95D6, 0xF7E6},{0x95DC, 0xCEBC},{0x95E1, 0xF4C5},{0x95E2, 0xDCA3},{0x961C, 0xDDBD}, - {0x9621, 0xF4C6},{0x962A, 0xF8A1},{0x962E, 0xE8D6},{0x9632, 0xDBC1},{0x963B, 0xF0E6},{0x963F, 0xE4B9},{0x9640, 0xF6ED},{0x9642, 0xF9AE}, - {0x9644, 0xDDBE},{0x964B, 0xD7B0},{0x964C, 0xD8E8},{0x964D, 0xCBBD},{0x9650, 0xF9DA},{0x965B, 0xF8CE},{0x965C, 0xF9F0},{0x965D, 0xE0ED}, - {0x965E, 0xE3B3},{0x965F, 0xF4B3},{0x9662, 0xEAC2},{0x9663, 0xF2E6},{0x9664, 0xF0B6},{0x966A, 0xDBD6},{0x9670, 0xEBE4},{0x9673, 0xF2E7}, - {0x9675, 0xD7D5},{0x9676, 0xD4B6},{0x9677, 0xF9E8},{0x9678, 0xD7C1},{0x967D, 0xE5D5},{0x9685, 0xE9EA},{0x9686, 0xD7CC},{0x968A, 0xD3E9}, - {0x968B, 0xE2C9},{0x968D, 0xFCDB},{0x968E, 0xCDAD},{0x9694, 0xCCB0},{0x9695, 0xEAA2},{0x9698, 0xE4F6},{0x9699, 0xD0C0},{0x969B, 0xF0B7}, - {0x969C, 0xEEA1},{0x96A3, 0xD7F6},{0x96A7, 0xE2CA},{0x96A8, 0xE2CB},{0x96AA, 0xFACF},{0x96B1, 0xEBDF},{0x96B7, 0xD6CB},{0x96BB, 0xF4B4}, - {0x96C0, 0xEDCD},{0x96C1, 0xE4D2},{0x96C4, 0xEAA9},{0x96C5, 0xE4BA},{0x96C6, 0xF3A2},{0x96C7, 0xCDD2},{0x96C9, 0xF6CB},{0x96CB, 0xF1E6}, - {0x96CC, 0xEDC1},{0x96CD, 0xE8BC},{0x96CE, 0xEED1},{0x96D5, 0xF0E7},{0x96D6, 0xE2CC},{0x96D9, 0xE4AA},{0x96DB, 0xF5E1},{0x96DC, 0xEDDA}, - {0x96E2, 0xD7EE},{0x96E3, 0xD1F1},{0x96E8, 0xE9EB},{0x96E9, 0xE9EC},{0x96EA, 0xE0E4},{0x96EF, 0xDAA7},{0x96F0, 0xDDD4},{0x96F2, 0xEAA3}, - {0x96F6, 0xD6C3},{0x96F7, 0xD6F4},{0x96F9, 0xDADF},{0x96FB, 0xEFB3},{0x9700, 0xE2CD},{0x9706, 0xEFFD},{0x9707, 0xF2E8},{0x9711, 0xEFC5}, - {0x9713, 0xE7E7},{0x9716, 0xD7FD},{0x9719, 0xE7CE},{0x971C, 0xDFDC},{0x971E, 0xF9C7},{0x9727, 0xD9F6},{0x9730, 0xDFAC},{0x9732, 0xD6DA}, - {0x9739, 0xDCA4},{0x973D, 0xF0B8},{0x9742, 0xD5FA},{0x9744, 0xE4F7},{0x9748, 0xD6C4},{0x9751, 0xF4EC},{0x9756, 0xEFFE},{0x975C, 0xF0A1}, - {0x975E, 0xDEAA},{0x9761, 0xDABC},{0x9762, 0xD8FC},{0x9769, 0xFAD4},{0x976D, 0xECE5},{0x9774, 0xFCA8},{0x9777, 0xECE6},{0x977A, 0xD8CB}, - {0x978B, 0xFBB9},{0x978D, 0xE4D3},{0x978F, 0xCDF9},{0x97A0, 0xCFD3},{0x97A8, 0xCAEA},{0x97AB, 0xCFD4},{0x97AD, 0xF8BD},{0x97C6, 0xF4C7}, - {0x97CB, 0xEADF},{0x97D3, 0xF9DB},{0x97DC, 0xD4B7},{0x97F3, 0xEBE5},{0x97F6, 0xE1D2},{0x97FB, 0xEAA4},{0x97FF, 0xFAC2},{0x9800, 0xFBE1}, - {0x9801, 0xFAED},{0x9802, 0xF0A2},{0x9803, 0xCCF1},{0x9805, 0xFAA3},{0x9806, 0xE2F7},{0x9808, 0xE2CE},{0x980A, 0xE9F5},{0x980C, 0xE1EB}, - {0x9810, 0xE7E8},{0x9811, 0xE8D7},{0x9812, 0xDAF8},{0x9813, 0xD4CB},{0x9817, 0xF7F6},{0x9818, 0xD6C5},{0x982D, 0xD4E9},{0x9830, 0xFAFA}, - {0x9838, 0xCCF2},{0x9839, 0xF7DD},{0x983B, 0xDEBA},{0x9846, 0xCEA8},{0x984C, 0xF0B9},{0x984D, 0xE4FE},{0x984E, 0xE4C9},{0x9854, 0xE4D4}, - {0x9858, 0xEAC3},{0x985A, 0xEFB4},{0x985E, 0xD7BE},{0x9865, 0xFBE2},{0x9867, 0xCDD3},{0x986B, 0xEFB5},{0x986F, 0xFAE9},{0x98A8, 0xF9A6}, - {0x98AF, 0xDFBD},{0x98B1, 0xF7C7},{0x98C4, 0xF8FD},{0x98C7, 0xF8FC},{0x98DB, 0xDEAB},{0x98DC, 0xDBE8},{0x98DF, 0xE3DD},{0x98E1, 0xE1E2}, - {0x98E2, 0xD1C6},{0x98ED, 0xF6D0},{0x98EE, 0xEBE6},{0x98EF, 0xDAF9},{0x98F4, 0xECC7},{0x98FC, 0xDEF8},{0x98FD, 0xF8E9},{0x98FE, 0xE3DE}, - {0x9903, 0xCEF5},{0x9909, 0xFAC3},{0x990A, 0xE5D7},{0x990C, 0xECC8},{0x9910, 0xF3C9},{0x9913, 0xE4BB},{0x9918, 0xE6AE},{0x991E, 0xEFB6}, - {0x9920, 0xDCBF},{0x9928, 0xCEBD},{0x9945, 0xD8C3},{0x9949, 0xD0CF},{0x994B, 0xCFFA},{0x994C, 0xF3CA},{0x994D, 0xE0D7},{0x9951, 0xD1C7}, - {0x9952, 0xE9AE},{0x9954, 0xE8BD},{0x9957, 0xFAC4},{0x9996, 0xE2CF},{0x9999, 0xFAC5},{0x999D, 0xF9B8},{0x99A5, 0xDCE0},{0x99A8, 0xFBB0}, - {0x99AC, 0xD8A9},{0x99AD, 0xE5DF},{0x99AE, 0xF9A7},{0x99B1, 0xF6EE},{0x99B3, 0xF6CC},{0x99B4, 0xE2F8},{0x99B9, 0xECF1},{0x99C1, 0xDAE0}, - {0x99D0, 0xF1D2},{0x99D1, 0xD2CC},{0x99D2, 0xCFCB},{0x99D5, 0xCABD},{0x99D9, 0xDDBF},{0x99DD, 0xF6EF},{0x99DF, 0xDEF9},{0x99ED, 0xFAB4}, - {0x99F1, 0xD5AD},{0x99FF, 0xF1E7},{0x9A01, 0xDEBE},{0x9A08, 0xDCC0},{0x9A0E, 0xD1C8},{0x9A0F, 0xD1C9},{0x9A19, 0xF8BE},{0x9A2B, 0xCBF6}, - {0x9A30, 0xD4F9},{0x9A36, 0xF5E2},{0x9A37, 0xE1D3},{0x9A40, 0xD8E9},{0x9A43, 0xF8FE},{0x9A45, 0xCFCC},{0x9A4D, 0xFDA4},{0x9A55, 0xCEF6}, - {0x9A57, 0xFAD0},{0x9A5A, 0xCCF3},{0x9A5B, 0xE6BE},{0x9A5F, 0xF6AE},{0x9A62, 0xD5F0},{0x9A65, 0xD1CA},{0x9A69, 0xFCBE},{0x9A6A, 0xD5F1}, - {0x9AA8, 0xCDE9},{0x9AB8, 0xFAB5},{0x9AD3, 0xE2D0},{0x9AD4, 0xF4F7},{0x9AD8, 0xCDD4},{0x9AE5, 0xE7A3},{0x9AEE, 0xDBA5},{0x9B1A, 0xE2D1}, - {0x9B27, 0xD7A2},{0x9B2A, 0xF7E3},{0x9B31, 0xEAA6},{0x9B3C, 0xD0A1},{0x9B41, 0xCEDA},{0x9B42, 0xFBEB},{0x9B43, 0xDBA6},{0x9B44, 0xDBDE}, - {0x9B45, 0xD8E5},{0x9B4F, 0xEAE0},{0x9B54, 0xD8AA},{0x9B5A, 0xE5E0},{0x9B6F, 0xD6DB},{0x9B8E, 0xEFC6},{0x9B91, 0xF8EA},{0x9B9F, 0xE4D5}, - {0x9BAB, 0xCEF7},{0x9BAE, 0xE0D8},{0x9BC9, 0xD7EF},{0x9BD6, 0xF4ED},{0x9BE4, 0xCDE6},{0x9BE8, 0xCCF4},{0x9C0D, 0xF5E3},{0x9C10, 0xE4CA}, - {0x9C12, 0xDCE1},{0x9C15, 0xF9C8},{0x9C25, 0xFCBF},{0x9C32, 0xE8A7},{0x9C3B, 0xD8C4},{0x9C47, 0xCBBE},{0x9C49, 0xDCAE},{0x9C57, 0xD7F7}, - {0x9CE5, 0xF0E8},{0x9CE7, 0xDDC0},{0x9CE9, 0xCFCD},{0x9CF3, 0xDCF3},{0x9CF4, 0xD9B0},{0x9CF6, 0xE6E9},{0x9D09, 0xE4BC},{0x9D1B, 0xEAC4}, - {0x9D26, 0xE4EC},{0x9D28, 0xE4E5},{0x9D3B, 0xFBF8},{0x9D51, 0xCCBB},{0x9D5D, 0xE4BD},{0x9D60, 0xCDDC},{0x9D61, 0xD9F7},{0x9D6C, 0xDDDF}, - {0x9D72, 0xEDCE},{0x9DA9, 0xD9D0},{0x9DAF, 0xE5A3},{0x9DB4, 0xF9CD},{0x9DC4, 0xCDAE},{0x9DD7, 0xCFCE},{0x9DF2, 0xF6AF},{0x9DF8, 0xFDD3}, - {0x9DF9, 0xEBED},{0x9DFA, 0xD6DC},{0x9E1A, 0xE5A4},{0x9E1E, 0xD5B6},{0x9E75, 0xD6DD},{0x9E79, 0xF9E9},{0x9E7D, 0xE7A4},{0x9E7F, 0xD6E3}, - {0x9E92, 0xD1CB},{0x9E93, 0xD6E4},{0x9E97, 0xD5F2},{0x9E9D, 0xDEFA},{0x9E9F, 0xD7F8},{0x9EA5, 0xD8EA},{0x9EB4, 0xCFD5},{0x9EB5, 0xD8FD}, - {0x9EBB, 0xD8AB},{0x9EBE, 0xFDCB},{0x9EC3, 0xFCDC},{0x9ECD, 0xE0A8},{0x9ECE, 0xD5F3},{0x9ED1, 0xFDD9},{0x9ED4, 0xCCA3},{0x9ED8, 0xD9F9}, - {0x9EDB, 0xD3EA},{0x9EDC, 0xF5F5},{0x9EDE, 0xEFC7},{0x9EE8, 0xD3DA},{0x9EF4, 0xDABD},{0x9F07, 0xE8A8},{0x9F08, 0xDCAF},{0x9F0E, 0xF0A3}, - {0x9F13, 0xCDD5},{0x9F20, 0xE0A9},{0x9F3B, 0xDEAC},{0x9F4A, 0xF0BA},{0x9F4B, 0xEEB1},{0x9F4E, 0xEEB2},{0x9F52, 0xF6CD},{0x9F5F, 0xEED2}, - {0x9F61, 0xD6C6},{0x9F67, 0xE0E5},{0x9F6A, 0xF3BB},{0x9F6C, 0xE5E1},{0x9F77, 0xE4CB},{0x9F8D, 0xD7A3},{0x9F90, 0xDBC2},{0x9F95, 0xCAFE}, - {0x9F9C, 0xCFCF},{0xAC00, 0xB0A1},{0xAC01, 0xB0A2},{0xAC02, 0x8141},{0xAC03, 0x8142},{0xAC04, 0xB0A3},{0xAC05, 0x8143},{0xAC06, 0x8144}, - {0xAC07, 0xB0A4},{0xAC08, 0xB0A5},{0xAC09, 0xB0A6},{0xAC0A, 0xB0A7},{0xAC0B, 0x8145},{0xAC0C, 0x8146},{0xAC0D, 0x8147},{0xAC0E, 0x8148}, - {0xAC0F, 0x8149},{0xAC10, 0xB0A8},{0xAC11, 0xB0A9},{0xAC12, 0xB0AA},{0xAC13, 0xB0AB},{0xAC14, 0xB0AC},{0xAC15, 0xB0AD},{0xAC16, 0xB0AE}, - {0xAC17, 0xB0AF},{0xAC18, 0x814A},{0xAC19, 0xB0B0},{0xAC1A, 0xB0B1},{0xAC1B, 0xB0B2},{0xAC1C, 0xB0B3},{0xAC1D, 0xB0B4},{0xAC1E, 0x814B}, - {0xAC1F, 0x814C},{0xAC20, 0xB0B5},{0xAC21, 0x814D},{0xAC22, 0x814E},{0xAC23, 0x814F},{0xAC24, 0xB0B6},{0xAC25, 0x8150},{0xAC26, 0x8151}, - {0xAC27, 0x8152},{0xAC28, 0x8153},{0xAC29, 0x8154},{0xAC2A, 0x8155},{0xAC2B, 0x8156},{0xAC2C, 0xB0B7},{0xAC2D, 0xB0B8},{0xAC2E, 0x8157}, - {0xAC2F, 0xB0B9},{0xAC30, 0xB0BA},{0xAC31, 0xB0BB},{0xAC32, 0x8158},{0xAC33, 0x8159},{0xAC34, 0x815A},{0xAC35, 0x8161},{0xAC36, 0x8162}, - {0xAC37, 0x8163},{0xAC38, 0xB0BC},{0xAC39, 0xB0BD},{0xAC3A, 0x8164},{0xAC3B, 0x8165},{0xAC3C, 0xB0BE},{0xAC3D, 0x8166},{0xAC3E, 0x8167}, - {0xAC3F, 0x8168},{0xAC40, 0xB0BF},{0xAC41, 0x8169},{0xAC42, 0x816A},{0xAC43, 0x816B},{0xAC44, 0x816C},{0xAC45, 0x816D},{0xAC46, 0x816E}, - {0xAC47, 0x816F},{0xAC48, 0x8170},{0xAC49, 0x8171},{0xAC4A, 0x8172},{0xAC4B, 0xB0C0},{0xAC4C, 0x8173},{0xAC4D, 0xB0C1},{0xAC4E, 0x8174}, - {0xAC4F, 0x8175},{0xAC50, 0x8176},{0xAC51, 0x8177},{0xAC52, 0x8178},{0xAC53, 0x8179},{0xAC54, 0xB0C2},{0xAC55, 0x817A},{0xAC56, 0x8181}, - {0xAC57, 0x8182},{0xAC58, 0xB0C3},{0xAC59, 0x8183},{0xAC5A, 0x8184},{0xAC5B, 0x8185},{0xAC5C, 0xB0C4},{0xAC5D, 0x8186},{0xAC5E, 0x8187}, - {0xAC5F, 0x8188},{0xAC60, 0x8189},{0xAC61, 0x818A},{0xAC62, 0x818B},{0xAC63, 0x818C},{0xAC64, 0x818D},{0xAC65, 0x818E},{0xAC66, 0x818F}, - {0xAC67, 0x8190},{0xAC68, 0x8191},{0xAC69, 0x8192},{0xAC6A, 0x8193},{0xAC6B, 0x8194},{0xAC6C, 0x8195},{0xAC6D, 0x8196},{0xAC6E, 0x8197}, - {0xAC6F, 0x8198},{0xAC70, 0xB0C5},{0xAC71, 0xB0C6},{0xAC72, 0x8199},{0xAC73, 0x819A},{0xAC74, 0xB0C7},{0xAC75, 0x819B},{0xAC76, 0x819C}, - {0xAC77, 0xB0C8},{0xAC78, 0xB0C9},{0xAC79, 0x819D},{0xAC7A, 0xB0CA},{0xAC7B, 0x819E},{0xAC7C, 0x819F},{0xAC7D, 0x81A0},{0xAC7E, 0x81A1}, - {0xAC7F, 0x81A2},{0xAC80, 0xB0CB},{0xAC81, 0xB0CC},{0xAC82, 0x81A3},{0xAC83, 0xB0CD},{0xAC84, 0xB0CE},{0xAC85, 0xB0CF},{0xAC86, 0xB0D0}, - {0xAC87, 0x81A4},{0xAC88, 0x81A5},{0xAC89, 0xB0D1},{0xAC8A, 0xB0D2},{0xAC8B, 0xB0D3},{0xAC8C, 0xB0D4},{0xAC8D, 0x81A6},{0xAC8E, 0x81A7}, - {0xAC8F, 0x81A8},{0xAC90, 0xB0D5},{0xAC91, 0x81A9},{0xAC92, 0x81AA},{0xAC93, 0x81AB},{0xAC94, 0xB0D6},{0xAC95, 0x81AC},{0xAC96, 0x81AD}, - {0xAC97, 0x81AE},{0xAC98, 0x81AF},{0xAC99, 0x81B0},{0xAC9A, 0x81B1},{0xAC9B, 0x81B2},{0xAC9C, 0xB0D7},{0xAC9D, 0xB0D8},{0xAC9E, 0x81B3}, - {0xAC9F, 0xB0D9},{0xACA0, 0xB0DA},{0xACA1, 0xB0DB},{0xACA2, 0x81B4},{0xACA3, 0x81B5},{0xACA4, 0x81B6},{0xACA5, 0x81B7},{0xACA6, 0x81B8}, - {0xACA7, 0x81B9},{0xACA8, 0xB0DC},{0xACA9, 0xB0DD},{0xACAA, 0xB0DE},{0xACAB, 0x81BA},{0xACAC, 0xB0DF},{0xACAD, 0x81BB},{0xACAE, 0x81BC}, - {0xACAF, 0xB0E0},{0xACB0, 0xB0E1},{0xACB1, 0x81BD},{0xACB2, 0x81BE},{0xACB3, 0x81BF},{0xACB4, 0x81C0},{0xACB5, 0x81C1},{0xACB6, 0x81C2}, - {0xACB7, 0x81C3},{0xACB8, 0xB0E2},{0xACB9, 0xB0E3},{0xACBA, 0x81C4},{0xACBB, 0xB0E4},{0xACBC, 0xB0E5},{0xACBD, 0xB0E6},{0xACBE, 0x81C5}, - {0xACBF, 0x81C6},{0xACC0, 0x81C7},{0xACC1, 0xB0E7},{0xACC2, 0x81C8},{0xACC3, 0x81C9},{0xACC4, 0xB0E8},{0xACC5, 0x81CA},{0xACC6, 0x81CB}, - {0xACC7, 0x81CC},{0xACC8, 0xB0E9},{0xACC9, 0x81CD},{0xACCA, 0x81CE},{0xACCB, 0x81CF},{0xACCC, 0xB0EA},{0xACCD, 0x81D0},{0xACCE, 0x81D1}, - {0xACCF, 0x81D2},{0xACD0, 0x81D3},{0xACD1, 0x81D4},{0xACD2, 0x81D5},{0xACD3, 0x81D6},{0xACD4, 0x81D7},{0xACD5, 0xB0EB},{0xACD6, 0x81D8}, - {0xACD7, 0xB0EC},{0xACD8, 0x81D9},{0xACD9, 0x81DA},{0xACDA, 0x81DB},{0xACDB, 0x81DC},{0xACDC, 0x81DD},{0xACDD, 0x81DE},{0xACDE, 0x81DF}, - {0xACDF, 0x81E0},{0xACE0, 0xB0ED},{0xACE1, 0xB0EE},{0xACE2, 0x81E1},{0xACE3, 0x81E2},{0xACE4, 0xB0EF},{0xACE5, 0x81E3},{0xACE6, 0x81E4}, - {0xACE7, 0xB0F0},{0xACE8, 0xB0F1},{0xACE9, 0x81E5},{0xACEA, 0xB0F2},{0xACEB, 0x81E6},{0xACEC, 0xB0F3},{0xACED, 0x81E7},{0xACEE, 0x81E8}, - {0xACEF, 0xB0F4},{0xACF0, 0xB0F5},{0xACF1, 0xB0F6},{0xACF2, 0x81E9},{0xACF3, 0xB0F7},{0xACF4, 0x81EA},{0xACF5, 0xB0F8},{0xACF6, 0xB0F9}, - {0xACF7, 0x81EB},{0xACF8, 0x81EC},{0xACF9, 0x81ED},{0xACFA, 0x81EE},{0xACFB, 0x81EF},{0xACFC, 0xB0FA},{0xACFD, 0xB0FB},{0xACFE, 0x81F0}, - {0xACFF, 0x81F1},{0xAD00, 0xB0FC},{0xAD01, 0x81F2},{0xAD02, 0x81F3},{0xAD03, 0x81F4},{0xAD04, 0xB0FD},{0xAD05, 0x81F5},{0xAD06, 0xB0FE}, - {0xAD07, 0x81F6},{0xAD08, 0x81F7},{0xAD09, 0x81F8},{0xAD0A, 0x81F9},{0xAD0B, 0x81FA},{0xAD0C, 0xB1A1},{0xAD0D, 0xB1A2},{0xAD0E, 0x81FB}, - {0xAD0F, 0xB1A3},{0xAD10, 0x81FC},{0xAD11, 0xB1A4},{0xAD12, 0x81FD},{0xAD13, 0x81FE},{0xAD14, 0x8241},{0xAD15, 0x8242},{0xAD16, 0x8243}, - {0xAD17, 0x8244},{0xAD18, 0xB1A5},{0xAD19, 0x8245},{0xAD1A, 0x8246},{0xAD1B, 0x8247},{0xAD1C, 0xB1A6},{0xAD1D, 0x8248},{0xAD1E, 0x8249}, - {0xAD1F, 0x824A},{0xAD20, 0xB1A7},{0xAD21, 0x824B},{0xAD22, 0x824C},{0xAD23, 0x824D},{0xAD24, 0x824E},{0xAD25, 0x824F},{0xAD26, 0x8250}, - {0xAD27, 0x8251},{0xAD28, 0x8252},{0xAD29, 0xB1A8},{0xAD2A, 0x8253},{0xAD2B, 0x8254},{0xAD2C, 0xB1A9},{0xAD2D, 0xB1AA},{0xAD2E, 0x8255}, - {0xAD2F, 0x8256},{0xAD30, 0x8257},{0xAD31, 0x8258},{0xAD32, 0x8259},{0xAD33, 0x825A},{0xAD34, 0xB1AB},{0xAD35, 0xB1AC},{0xAD36, 0x8261}, - {0xAD37, 0x8262},{0xAD38, 0xB1AD},{0xAD39, 0x8263},{0xAD3A, 0x8264},{0xAD3B, 0x8265},{0xAD3C, 0xB1AE},{0xAD3D, 0x8266},{0xAD3E, 0x8267}, - {0xAD3F, 0x8268},{0xAD40, 0x8269},{0xAD41, 0x826A},{0xAD42, 0x826B},{0xAD43, 0x826C},{0xAD44, 0xB1AF},{0xAD45, 0xB1B0},{0xAD46, 0x826D}, - {0xAD47, 0xB1B1},{0xAD48, 0x826E},{0xAD49, 0xB1B2},{0xAD4A, 0x826F},{0xAD4B, 0x8270},{0xAD4C, 0x8271},{0xAD4D, 0x8272},{0xAD4E, 0x8273}, - {0xAD4F, 0x8274},{0xAD50, 0xB1B3},{0xAD51, 0x8275},{0xAD52, 0x8276},{0xAD53, 0x8277},{0xAD54, 0xB1B4},{0xAD55, 0x8278},{0xAD56, 0x8279}, - {0xAD57, 0x827A},{0xAD58, 0xB1B5},{0xAD59, 0x8281},{0xAD5A, 0x8282},{0xAD5B, 0x8283},{0xAD5C, 0x8284},{0xAD5D, 0x8285},{0xAD5E, 0x8286}, - {0xAD5F, 0x8287},{0xAD60, 0x8288},{0xAD61, 0xB1B6},{0xAD62, 0x8289},{0xAD63, 0xB1B7},{0xAD64, 0x828A},{0xAD65, 0x828B},{0xAD66, 0x828C}, - {0xAD67, 0x828D},{0xAD68, 0x828E},{0xAD69, 0x828F},{0xAD6A, 0x8290},{0xAD6B, 0x8291},{0xAD6C, 0xB1B8},{0xAD6D, 0xB1B9},{0xAD6E, 0x8292}, - {0xAD6F, 0x8293},{0xAD70, 0xB1BA},{0xAD71, 0x8294},{0xAD72, 0x8295},{0xAD73, 0xB1BB},{0xAD74, 0xB1BC},{0xAD75, 0xB1BD},{0xAD76, 0xB1BE}, - {0xAD77, 0x8296},{0xAD78, 0x8297},{0xAD79, 0x8298},{0xAD7A, 0x8299},{0xAD7B, 0xB1BF},{0xAD7C, 0xB1C0},{0xAD7D, 0xB1C1},{0xAD7E, 0x829A}, - {0xAD7F, 0xB1C2},{0xAD80, 0x829B},{0xAD81, 0xB1C3},{0xAD82, 0xB1C4},{0xAD83, 0x829C},{0xAD84, 0x829D},{0xAD85, 0x829E},{0xAD86, 0x829F}, - {0xAD87, 0x82A0},{0xAD88, 0xB1C5},{0xAD89, 0xB1C6},{0xAD8A, 0x82A1},{0xAD8B, 0x82A2},{0xAD8C, 0xB1C7},{0xAD8D, 0x82A3},{0xAD8E, 0x82A4}, - {0xAD8F, 0x82A5},{0xAD90, 0xB1C8},{0xAD91, 0x82A6},{0xAD92, 0x82A7},{0xAD93, 0x82A8},{0xAD94, 0x82A9},{0xAD95, 0x82AA},{0xAD96, 0x82AB}, - {0xAD97, 0x82AC},{0xAD98, 0x82AD},{0xAD99, 0x82AE},{0xAD9A, 0x82AF},{0xAD9B, 0x82B0},{0xAD9C, 0xB1C9},{0xAD9D, 0xB1CA},{0xAD9E, 0x82B1}, - {0xAD9F, 0x82B2},{0xADA0, 0x82B3},{0xADA1, 0x82B4},{0xADA2, 0x82B5},{0xADA3, 0x82B6},{0xADA4, 0xB1CB},{0xADA5, 0x82B7},{0xADA6, 0x82B8}, - {0xADA7, 0x82B9},{0xADA8, 0x82BA},{0xADA9, 0x82BB},{0xADAA, 0x82BC},{0xADAB, 0x82BD},{0xADAC, 0x82BE},{0xADAD, 0x82BF},{0xADAE, 0x82C0}, - {0xADAF, 0x82C1},{0xADB0, 0x82C2},{0xADB1, 0x82C3},{0xADB2, 0x82C4},{0xADB3, 0x82C5},{0xADB4, 0x82C6},{0xADB5, 0x82C7},{0xADB6, 0x82C8}, - {0xADB7, 0xB1CC},{0xADB8, 0x82C9},{0xADB9, 0x82CA},{0xADBA, 0x82CB},{0xADBB, 0x82CC},{0xADBC, 0x82CD},{0xADBD, 0x82CE},{0xADBE, 0x82CF}, - {0xADBF, 0x82D0},{0xADC0, 0xB1CD},{0xADC1, 0xB1CE},{0xADC2, 0x82D1},{0xADC3, 0x82D2},{0xADC4, 0xB1CF},{0xADC5, 0x82D3},{0xADC6, 0x82D4}, - {0xADC7, 0x82D5},{0xADC8, 0xB1D0},{0xADC9, 0x82D6},{0xADCA, 0x82D7},{0xADCB, 0x82D8},{0xADCC, 0x82D9},{0xADCD, 0x82DA},{0xADCE, 0x82DB}, - {0xADCF, 0x82DC},{0xADD0, 0xB1D1},{0xADD1, 0xB1D2},{0xADD2, 0x82DD},{0xADD3, 0xB1D3},{0xADD4, 0x82DE},{0xADD5, 0x82DF},{0xADD6, 0x82E0}, - {0xADD7, 0x82E1},{0xADD8, 0x82E2},{0xADD9, 0x82E3},{0xADDA, 0x82E4},{0xADDB, 0x82E5},{0xADDC, 0xB1D4},{0xADDD, 0x82E6},{0xADDE, 0x82E7}, - {0xADDF, 0x82E8},{0xADE0, 0xB1D5},{0xADE1, 0x82E9},{0xADE2, 0x82EA},{0xADE3, 0x82EB},{0xADE4, 0xB1D6},{0xADE5, 0x82EC},{0xADE6, 0x82ED}, - {0xADE7, 0x82EE},{0xADE8, 0x82EF},{0xADE9, 0x82F0},{0xADEA, 0x82F1},{0xADEB, 0x82F2},{0xADEC, 0x82F3},{0xADED, 0x82F4},{0xADEE, 0x82F5}, - {0xADEF, 0x82F6},{0xADF0, 0x82F7},{0xADF1, 0x82F8},{0xADF2, 0x82F9},{0xADF3, 0x82FA},{0xADF4, 0x82FB},{0xADF5, 0x82FC},{0xADF6, 0x82FD}, - {0xADF7, 0x82FE},{0xADF8, 0xB1D7},{0xADF9, 0xB1D8},{0xADFA, 0x8341},{0xADFB, 0x8342},{0xADFC, 0xB1D9},{0xADFD, 0x8343},{0xADFE, 0x8344}, - {0xADFF, 0xB1DA},{0xAE00, 0xB1DB},{0xAE01, 0xB1DC},{0xAE02, 0x8345},{0xAE03, 0x8346},{0xAE04, 0x8347},{0xAE05, 0x8348},{0xAE06, 0x8349}, - {0xAE07, 0x834A},{0xAE08, 0xB1DD},{0xAE09, 0xB1DE},{0xAE0A, 0x834B},{0xAE0B, 0xB1DF},{0xAE0C, 0x834C},{0xAE0D, 0xB1E0},{0xAE0E, 0x834D}, - {0xAE0F, 0x834E},{0xAE10, 0x834F},{0xAE11, 0x8350},{0xAE12, 0x8351},{0xAE13, 0x8352},{0xAE14, 0xB1E1},{0xAE15, 0x8353},{0xAE16, 0x8354}, - {0xAE17, 0x8355},{0xAE18, 0x8356},{0xAE19, 0x8357},{0xAE1A, 0x8358},{0xAE1B, 0x8359},{0xAE1C, 0x835A},{0xAE1D, 0x8361},{0xAE1E, 0x8362}, - {0xAE1F, 0x8363},{0xAE20, 0x8364},{0xAE21, 0x8365},{0xAE22, 0x8366},{0xAE23, 0x8367},{0xAE24, 0x8368},{0xAE25, 0x8369},{0xAE26, 0x836A}, - {0xAE27, 0x836B},{0xAE28, 0x836C},{0xAE29, 0x836D},{0xAE2A, 0x836E},{0xAE2B, 0x836F},{0xAE2C, 0x8370},{0xAE2D, 0x8371},{0xAE2E, 0x8372}, - {0xAE2F, 0x8373},{0xAE30, 0xB1E2},{0xAE31, 0xB1E3},{0xAE32, 0x8374},{0xAE33, 0x8375},{0xAE34, 0xB1E4},{0xAE35, 0x8376},{0xAE36, 0x8377}, - {0xAE37, 0xB1E5},{0xAE38, 0xB1E6},{0xAE39, 0x8378},{0xAE3A, 0xB1E7},{0xAE3B, 0x8379},{0xAE3C, 0x837A},{0xAE3D, 0x8381},{0xAE3E, 0x8382}, - {0xAE3F, 0x8383},{0xAE40, 0xB1E8},{0xAE41, 0xB1E9},{0xAE42, 0x8384},{0xAE43, 0xB1EA},{0xAE44, 0x8385},{0xAE45, 0xB1EB},{0xAE46, 0xB1EC}, - {0xAE47, 0x8386},{0xAE48, 0x8387},{0xAE49, 0x8388},{0xAE4A, 0xB1ED},{0xAE4B, 0x8389},{0xAE4C, 0xB1EE},{0xAE4D, 0xB1EF},{0xAE4E, 0xB1F0}, - {0xAE4F, 0x838A},{0xAE50, 0xB1F1},{0xAE51, 0x838B},{0xAE52, 0x838C},{0xAE53, 0x838D},{0xAE54, 0xB1F2},{0xAE55, 0x838E},{0xAE56, 0xB1F3}, - {0xAE57, 0x838F},{0xAE58, 0x8390},{0xAE59, 0x8391},{0xAE5A, 0x8392},{0xAE5B, 0x8393},{0xAE5C, 0xB1F4},{0xAE5D, 0xB1F5},{0xAE5E, 0x8394}, - {0xAE5F, 0xB1F6},{0xAE60, 0xB1F7},{0xAE61, 0xB1F8},{0xAE62, 0x8395},{0xAE63, 0x8396},{0xAE64, 0x8397},{0xAE65, 0xB1F9},{0xAE66, 0x8398}, - {0xAE67, 0x8399},{0xAE68, 0xB1FA},{0xAE69, 0xB1FB},{0xAE6A, 0x839A},{0xAE6B, 0x839B},{0xAE6C, 0xB1FC},{0xAE6D, 0x839C},{0xAE6E, 0x839D}, - {0xAE6F, 0x839E},{0xAE70, 0xB1FD},{0xAE71, 0x839F},{0xAE72, 0x83A0},{0xAE73, 0x83A1},{0xAE74, 0x83A2},{0xAE75, 0x83A3},{0xAE76, 0x83A4}, - {0xAE77, 0x83A5},{0xAE78, 0xB1FE},{0xAE79, 0xB2A1},{0xAE7A, 0x83A6},{0xAE7B, 0xB2A2},{0xAE7C, 0xB2A3},{0xAE7D, 0xB2A4},{0xAE7E, 0x83A7}, - {0xAE7F, 0x83A8},{0xAE80, 0x83A9},{0xAE81, 0x83AA},{0xAE82, 0x83AB},{0xAE83, 0x83AC},{0xAE84, 0xB2A5},{0xAE85, 0xB2A6},{0xAE86, 0x83AD}, - {0xAE87, 0x83AE},{0xAE88, 0x83AF},{0xAE89, 0x83B0},{0xAE8A, 0x83B1},{0xAE8B, 0x83B2},{0xAE8C, 0xB2A7},{0xAE8D, 0x83B3},{0xAE8E, 0x83B4}, - {0xAE8F, 0x83B5},{0xAE90, 0x83B6},{0xAE91, 0x83B7},{0xAE92, 0x83B8},{0xAE93, 0x83B9},{0xAE94, 0x83BA},{0xAE95, 0x83BB},{0xAE96, 0x83BC}, - {0xAE97, 0x83BD},{0xAE98, 0x83BE},{0xAE99, 0x83BF},{0xAE9A, 0x83C0},{0xAE9B, 0x83C1},{0xAE9C, 0x83C2},{0xAE9D, 0x83C3},{0xAE9E, 0x83C4}, - {0xAE9F, 0x83C5},{0xAEA0, 0x83C6},{0xAEA1, 0x83C7},{0xAEA2, 0x83C8},{0xAEA3, 0x83C9},{0xAEA4, 0x83CA},{0xAEA5, 0x83CB},{0xAEA6, 0x83CC}, - {0xAEA7, 0x83CD},{0xAEA8, 0x83CE},{0xAEA9, 0x83CF},{0xAEAA, 0x83D0},{0xAEAB, 0x83D1},{0xAEAC, 0x83D2},{0xAEAD, 0x83D3},{0xAEAE, 0x83D4}, - {0xAEAF, 0x83D5},{0xAEB0, 0x83D6},{0xAEB1, 0x83D7},{0xAEB2, 0x83D8},{0xAEB3, 0x83D9},{0xAEB4, 0x83DA},{0xAEB5, 0x83DB},{0xAEB6, 0x83DC}, - {0xAEB7, 0x83DD},{0xAEB8, 0x83DE},{0xAEB9, 0x83DF},{0xAEBA, 0x83E0},{0xAEBB, 0x83E1},{0xAEBC, 0xB2A8},{0xAEBD, 0xB2A9},{0xAEBE, 0xB2AA}, - {0xAEBF, 0x83E2},{0xAEC0, 0xB2AB},{0xAEC1, 0x83E3},{0xAEC2, 0x83E4},{0xAEC3, 0x83E5},{0xAEC4, 0xB2AC},{0xAEC5, 0x83E6},{0xAEC6, 0x83E7}, - {0xAEC7, 0x83E8},{0xAEC8, 0x83E9},{0xAEC9, 0x83EA},{0xAECA, 0x83EB},{0xAECB, 0x83EC},{0xAECC, 0xB2AD},{0xAECD, 0xB2AE},{0xAECE, 0x83ED}, - {0xAECF, 0xB2AF},{0xAED0, 0xB2B0},{0xAED1, 0xB2B1},{0xAED2, 0x83EE},{0xAED3, 0x83EF},{0xAED4, 0x83F0},{0xAED5, 0x83F1},{0xAED6, 0x83F2}, - {0xAED7, 0x83F3},{0xAED8, 0xB2B2},{0xAED9, 0xB2B3},{0xAEDA, 0x83F4},{0xAEDB, 0x83F5},{0xAEDC, 0xB2B4},{0xAEDD, 0x83F6},{0xAEDE, 0x83F7}, - {0xAEDF, 0x83F8},{0xAEE0, 0x83F9},{0xAEE1, 0x83FA},{0xAEE2, 0x83FB},{0xAEE3, 0x83FC},{0xAEE4, 0x83FD},{0xAEE5, 0x83FE},{0xAEE6, 0x8441}, - {0xAEE7, 0x8442},{0xAEE8, 0xB2B5},{0xAEE9, 0x8443},{0xAEEA, 0x8444},{0xAEEB, 0xB2B6},{0xAEEC, 0x8445},{0xAEED, 0xB2B7},{0xAEEE, 0x8446}, - {0xAEEF, 0x8447},{0xAEF0, 0x8448},{0xAEF1, 0x8449},{0xAEF2, 0x844A},{0xAEF3, 0x844B},{0xAEF4, 0xB2B8},{0xAEF5, 0x844C},{0xAEF6, 0x844D}, - {0xAEF7, 0x844E},{0xAEF8, 0xB2B9},{0xAEF9, 0x844F},{0xAEFA, 0x8450},{0xAEFB, 0x8451},{0xAEFC, 0xB2BA},{0xAEFD, 0x8452},{0xAEFE, 0x8453}, - {0xAEFF, 0x8454},{0xAF00, 0x8455},{0xAF01, 0x8456},{0xAF02, 0x8457},{0xAF03, 0x8458},{0xAF04, 0x8459},{0xAF05, 0x845A},{0xAF06, 0x8461}, - {0xAF07, 0xB2BB},{0xAF08, 0xB2BC},{0xAF09, 0x8462},{0xAF0A, 0x8463},{0xAF0B, 0x8464},{0xAF0C, 0x8465},{0xAF0D, 0xB2BD},{0xAF0E, 0x8466}, - {0xAF0F, 0x8467},{0xAF10, 0xB2BE},{0xAF11, 0x8468},{0xAF12, 0x8469},{0xAF13, 0x846A},{0xAF14, 0x846B},{0xAF15, 0x846C},{0xAF16, 0x846D}, - {0xAF17, 0x846E},{0xAF18, 0x846F},{0xAF19, 0x8470},{0xAF1A, 0x8471},{0xAF1B, 0x8472},{0xAF1C, 0x8473},{0xAF1D, 0x8474},{0xAF1E, 0x8475}, - {0xAF1F, 0x8476},{0xAF20, 0x8477},{0xAF21, 0x8478},{0xAF22, 0x8479},{0xAF23, 0x847A},{0xAF24, 0x8481},{0xAF25, 0x8482},{0xAF26, 0x8483}, - {0xAF27, 0x8484},{0xAF28, 0x8485},{0xAF29, 0x8486},{0xAF2A, 0x8487},{0xAF2B, 0x8488},{0xAF2C, 0xB2BF},{0xAF2D, 0xB2C0},{0xAF2E, 0x8489}, - {0xAF2F, 0x848A},{0xAF30, 0xB2C1},{0xAF31, 0x848B},{0xAF32, 0xB2C2},{0xAF33, 0x848C},{0xAF34, 0xB2C3},{0xAF35, 0x848D},{0xAF36, 0x848E}, - {0xAF37, 0x848F},{0xAF38, 0x8490},{0xAF39, 0x8491},{0xAF3A, 0x8492},{0xAF3B, 0x8493},{0xAF3C, 0xB2C4},{0xAF3D, 0xB2C5},{0xAF3E, 0x8494}, - {0xAF3F, 0xB2C6},{0xAF40, 0x8495},{0xAF41, 0xB2C7},{0xAF42, 0xB2C8},{0xAF43, 0xB2C9},{0xAF44, 0x8496},{0xAF45, 0x8497},{0xAF46, 0x8498}, - {0xAF47, 0x8499},{0xAF48, 0xB2CA},{0xAF49, 0xB2CB},{0xAF4A, 0x849A},{0xAF4B, 0x849B},{0xAF4C, 0x849C},{0xAF4D, 0x849D},{0xAF4E, 0x849E}, - {0xAF4F, 0x849F},{0xAF50, 0xB2CC},{0xAF51, 0x84A0},{0xAF52, 0x84A1},{0xAF53, 0x84A2},{0xAF54, 0x84A3},{0xAF55, 0x84A4},{0xAF56, 0x84A5}, - {0xAF57, 0x84A6},{0xAF58, 0x84A7},{0xAF59, 0x84A8},{0xAF5A, 0x84A9},{0xAF5B, 0x84AA},{0xAF5C, 0xB2CD},{0xAF5D, 0xB2CE},{0xAF5E, 0x84AB}, - {0xAF5F, 0x84AC},{0xAF60, 0x84AD},{0xAF61, 0x84AE},{0xAF62, 0x84AF},{0xAF63, 0x84B0},{0xAF64, 0xB2CF},{0xAF65, 0xB2D0},{0xAF66, 0x84B1}, - {0xAF67, 0x84B2},{0xAF68, 0x84B3},{0xAF69, 0x84B4},{0xAF6A, 0x84B5},{0xAF6B, 0x84B6},{0xAF6C, 0x84B7},{0xAF6D, 0x84B8},{0xAF6E, 0x84B9}, - {0xAF6F, 0x84BA},{0xAF70, 0x84BB},{0xAF71, 0x84BC},{0xAF72, 0x84BD},{0xAF73, 0x84BE},{0xAF74, 0x84BF},{0xAF75, 0x84C0},{0xAF76, 0x84C1}, - {0xAF77, 0x84C2},{0xAF78, 0x84C3},{0xAF79, 0xB2D1},{0xAF7A, 0x84C4},{0xAF7B, 0x84C5},{0xAF7C, 0x84C6},{0xAF7D, 0x84C7},{0xAF7E, 0x84C8}, - {0xAF7F, 0x84C9},{0xAF80, 0xB2D2},{0xAF81, 0x84CA},{0xAF82, 0x84CB},{0xAF83, 0x84CC},{0xAF84, 0xB2D3},{0xAF85, 0x84CD},{0xAF86, 0x84CE}, - {0xAF87, 0x84CF},{0xAF88, 0xB2D4},{0xAF89, 0x84D0},{0xAF8A, 0x84D1},{0xAF8B, 0x84D2},{0xAF8C, 0x84D3},{0xAF8D, 0x84D4},{0xAF8E, 0x84D5}, - {0xAF8F, 0x84D6},{0xAF90, 0xB2D5},{0xAF91, 0xB2D6},{0xAF92, 0x84D7},{0xAF93, 0x84D8},{0xAF94, 0x84D9},{0xAF95, 0xB2D7},{0xAF96, 0x84DA}, - {0xAF97, 0x84DB},{0xAF98, 0x84DC},{0xAF99, 0x84DD},{0xAF9A, 0x84DE},{0xAF9B, 0x84DF},{0xAF9C, 0xB2D8},{0xAF9D, 0x84E0},{0xAF9E, 0x84E1}, - {0xAF9F, 0x84E2},{0xAFA0, 0x84E3},{0xAFA1, 0x84E4},{0xAFA2, 0x84E5},{0xAFA3, 0x84E6},{0xAFA4, 0x84E7},{0xAFA5, 0x84E8},{0xAFA6, 0x84E9}, - {0xAFA7, 0x84EA},{0xAFA8, 0x84EB},{0xAFA9, 0x84EC},{0xAFAA, 0x84ED},{0xAFAB, 0x84EE},{0xAFAC, 0x84EF},{0xAFAD, 0x84F0},{0xAFAE, 0x84F1}, - {0xAFAF, 0x84F2},{0xAFB0, 0x84F3},{0xAFB1, 0x84F4},{0xAFB2, 0x84F5},{0xAFB3, 0x84F6},{0xAFB4, 0x84F7},{0xAFB5, 0x84F8},{0xAFB6, 0x84F9}, - {0xAFB7, 0x84FA},{0xAFB8, 0xB2D9},{0xAFB9, 0xB2DA},{0xAFBA, 0x84FB},{0xAFBB, 0x84FC},{0xAFBC, 0xB2DB},{0xAFBD, 0x84FD},{0xAFBE, 0x84FE}, - {0xAFBF, 0x8541},{0xAFC0, 0xB2DC},{0xAFC1, 0x8542},{0xAFC2, 0x8543},{0xAFC3, 0x8544},{0xAFC4, 0x8545},{0xAFC5, 0x8546},{0xAFC6, 0x8547}, - {0xAFC7, 0xB2DD},{0xAFC8, 0xB2DE},{0xAFC9, 0xB2DF},{0xAFCA, 0x8548},{0xAFCB, 0xB2E0},{0xAFCC, 0x8549},{0xAFCD, 0xB2E1},{0xAFCE, 0xB2E2}, - {0xAFCF, 0x854A},{0xAFD0, 0x854B},{0xAFD1, 0x854C},{0xAFD2, 0x854D},{0xAFD3, 0x854E},{0xAFD4, 0xB2E3},{0xAFD5, 0x854F},{0xAFD6, 0x8550}, - {0xAFD7, 0x8551},{0xAFD8, 0x8552},{0xAFD9, 0x8553},{0xAFDA, 0x8554},{0xAFDB, 0x8555},{0xAFDC, 0xB2E4},{0xAFDD, 0x8556},{0xAFDE, 0x8557}, - {0xAFDF, 0x8558},{0xAFE0, 0x8559},{0xAFE1, 0x855A},{0xAFE2, 0x8561},{0xAFE3, 0x8562},{0xAFE4, 0x8563},{0xAFE5, 0x8564},{0xAFE6, 0x8565}, - {0xAFE7, 0x8566},{0xAFE8, 0xB2E5},{0xAFE9, 0xB2E6},{0xAFEA, 0x8567},{0xAFEB, 0x8568},{0xAFEC, 0x8569},{0xAFED, 0x856A},{0xAFEE, 0x856B}, - {0xAFEF, 0x856C},{0xAFF0, 0xB2E7},{0xAFF1, 0xB2E8},{0xAFF2, 0x856D},{0xAFF3, 0x856E},{0xAFF4, 0xB2E9},{0xAFF5, 0x856F},{0xAFF6, 0x8570}, - {0xAFF7, 0x8571},{0xAFF8, 0xB2EA},{0xAFF9, 0x8572},{0xAFFA, 0x8573},{0xAFFB, 0x8574},{0xAFFC, 0x8575},{0xAFFD, 0x8576},{0xAFFE, 0x8577}, - {0xAFFF, 0x8578},{0xB000, 0xB2EB},{0xB001, 0xB2EC},{0xB002, 0x8579},{0xB003, 0x857A},{0xB004, 0xB2ED},{0xB005, 0x8581},{0xB006, 0x8582}, - {0xB007, 0x8583},{0xB008, 0x8584},{0xB009, 0x8585},{0xB00A, 0x8586},{0xB00B, 0x8587},{0xB00C, 0xB2EE},{0xB00D, 0x8588},{0xB00E, 0x8589}, - {0xB00F, 0x858A},{0xB010, 0xB2EF},{0xB011, 0x858B},{0xB012, 0x858C},{0xB013, 0x858D},{0xB014, 0xB2F0},{0xB015, 0x858E},{0xB016, 0x858F}, - {0xB017, 0x8590},{0xB018, 0x8591},{0xB019, 0x8592},{0xB01A, 0x8593},{0xB01B, 0x8594},{0xB01C, 0xB2F1},{0xB01D, 0xB2F2},{0xB01E, 0x8595}, - {0xB01F, 0x8596},{0xB020, 0x8597},{0xB021, 0x8598},{0xB022, 0x8599},{0xB023, 0x859A},{0xB024, 0x859B},{0xB025, 0x859C},{0xB026, 0x859D}, - {0xB027, 0x859E},{0xB028, 0xB2F3},{0xB029, 0x859F},{0xB02A, 0x85A0},{0xB02B, 0x85A1},{0xB02C, 0x85A2},{0xB02D, 0x85A3},{0xB02E, 0x85A4}, - {0xB02F, 0x85A5},{0xB030, 0x85A6},{0xB031, 0x85A7},{0xB032, 0x85A8},{0xB033, 0x85A9},{0xB034, 0x85AA},{0xB035, 0x85AB},{0xB036, 0x85AC}, - {0xB037, 0x85AD},{0xB038, 0x85AE},{0xB039, 0x85AF},{0xB03A, 0x85B0},{0xB03B, 0x85B1},{0xB03C, 0x85B2},{0xB03D, 0x85B3},{0xB03E, 0x85B4}, - {0xB03F, 0x85B5},{0xB040, 0x85B6},{0xB041, 0x85B7},{0xB042, 0x85B8},{0xB043, 0x85B9},{0xB044, 0xB2F4},{0xB045, 0xB2F5},{0xB046, 0x85BA}, - {0xB047, 0x85BB},{0xB048, 0xB2F6},{0xB049, 0x85BC},{0xB04A, 0xB2F7},{0xB04B, 0x85BD},{0xB04C, 0xB2F8},{0xB04D, 0x85BE},{0xB04E, 0xB2F9}, - {0xB04F, 0x85BF},{0xB050, 0x85C0},{0xB051, 0x85C1},{0xB052, 0x85C2},{0xB053, 0xB2FA},{0xB054, 0xB2FB},{0xB055, 0xB2FC},{0xB056, 0x85C3}, - {0xB057, 0xB2FD},{0xB058, 0x85C4},{0xB059, 0xB2FE},{0xB05A, 0x85C5},{0xB05B, 0x85C6},{0xB05C, 0x85C7},{0xB05D, 0xB3A1},{0xB05E, 0x85C8}, - {0xB05F, 0x85C9},{0xB060, 0x85CA},{0xB061, 0x85CB},{0xB062, 0x85CC},{0xB063, 0x85CD},{0xB064, 0x85CE},{0xB065, 0x85CF},{0xB066, 0x85D0}, - {0xB067, 0x85D1},{0xB068, 0x85D2},{0xB069, 0x85D3},{0xB06A, 0x85D4},{0xB06B, 0x85D5},{0xB06C, 0x85D6},{0xB06D, 0x85D7},{0xB06E, 0x85D8}, - {0xB06F, 0x85D9},{0xB070, 0x85DA},{0xB071, 0x85DB},{0xB072, 0x85DC},{0xB073, 0x85DD},{0xB074, 0x85DE},{0xB075, 0x85DF},{0xB076, 0x85E0}, - {0xB077, 0x85E1},{0xB078, 0x85E2},{0xB079, 0x85E3},{0xB07A, 0x85E4},{0xB07B, 0x85E5},{0xB07C, 0xB3A2},{0xB07D, 0xB3A3},{0xB07E, 0x85E6}, - {0xB07F, 0x85E7},{0xB080, 0xB3A4},{0xB081, 0x85E8},{0xB082, 0x85E9},{0xB083, 0x85EA},{0xB084, 0xB3A5},{0xB085, 0x85EB},{0xB086, 0x85EC}, - {0xB087, 0x85ED},{0xB088, 0x85EE},{0xB089, 0x85EF},{0xB08A, 0x85F0},{0xB08B, 0x85F1},{0xB08C, 0xB3A6},{0xB08D, 0xB3A7},{0xB08E, 0x85F2}, - {0xB08F, 0xB3A8},{0xB090, 0x85F3},{0xB091, 0xB3A9},{0xB092, 0x85F4},{0xB093, 0x85F5},{0xB094, 0x85F6},{0xB095, 0x85F7},{0xB096, 0x85F8}, - {0xB097, 0x85F9},{0xB098, 0xB3AA},{0xB099, 0xB3AB},{0xB09A, 0xB3AC},{0xB09B, 0x85FA},{0xB09C, 0xB3AD},{0xB09D, 0x85FB},{0xB09E, 0x85FC}, - {0xB09F, 0xB3AE},{0xB0A0, 0xB3AF},{0xB0A1, 0xB3B0},{0xB0A2, 0xB3B1},{0xB0A3, 0x85FD},{0xB0A4, 0x85FE},{0xB0A5, 0x8641},{0xB0A6, 0x8642}, - {0xB0A7, 0x8643},{0xB0A8, 0xB3B2},{0xB0A9, 0xB3B3},{0xB0AA, 0x8644},{0xB0AB, 0xB3B4},{0xB0AC, 0xB3B5},{0xB0AD, 0xB3B6},{0xB0AE, 0xB3B7}, - {0xB0AF, 0xB3B8},{0xB0B0, 0x8645},{0xB0B1, 0xB3B9},{0xB0B2, 0x8646},{0xB0B3, 0xB3BA},{0xB0B4, 0xB3BB},{0xB0B5, 0xB3BC},{0xB0B6, 0x8647}, - {0xB0B7, 0x8648},{0xB0B8, 0xB3BD},{0xB0B9, 0x8649},{0xB0BA, 0x864A},{0xB0BB, 0x864B},{0xB0BC, 0xB3BE},{0xB0BD, 0x864C},{0xB0BE, 0x864D}, - {0xB0BF, 0x864E},{0xB0C0, 0x864F},{0xB0C1, 0x8650},{0xB0C2, 0x8651},{0xB0C3, 0x8652},{0xB0C4, 0xB3BF},{0xB0C5, 0xB3C0},{0xB0C6, 0x8653}, - {0xB0C7, 0xB3C1},{0xB0C8, 0xB3C2},{0xB0C9, 0xB3C3},{0xB0CA, 0x8654},{0xB0CB, 0x8655},{0xB0CC, 0x8656},{0xB0CD, 0x8657},{0xB0CE, 0x8658}, - {0xB0CF, 0x8659},{0xB0D0, 0xB3C4},{0xB0D1, 0xB3C5},{0xB0D2, 0x865A},{0xB0D3, 0x8661},{0xB0D4, 0xB3C6},{0xB0D5, 0x8662},{0xB0D6, 0x8663}, - {0xB0D7, 0x8664},{0xB0D8, 0xB3C7},{0xB0D9, 0x8665},{0xB0DA, 0x8666},{0xB0DB, 0x8667},{0xB0DC, 0x8668},{0xB0DD, 0x8669},{0xB0DE, 0x866A}, - {0xB0DF, 0x866B},{0xB0E0, 0xB3C8},{0xB0E1, 0x866C},{0xB0E2, 0x866D},{0xB0E3, 0x866E},{0xB0E4, 0x866F},{0xB0E5, 0xB3C9},{0xB0E6, 0x8670}, - {0xB0E7, 0x8671},{0xB0E8, 0x8672},{0xB0E9, 0x8673},{0xB0EA, 0x8674},{0xB0EB, 0x8675},{0xB0EC, 0x8676},{0xB0ED, 0x8677},{0xB0EE, 0x8678}, - {0xB0EF, 0x8679},{0xB0F0, 0x867A},{0xB0F1, 0x8681},{0xB0F2, 0x8682},{0xB0F3, 0x8683},{0xB0F4, 0x8684},{0xB0F5, 0x8685},{0xB0F6, 0x8686}, - {0xB0F7, 0x8687},{0xB0F8, 0x8688},{0xB0F9, 0x8689},{0xB0FA, 0x868A},{0xB0FB, 0x868B},{0xB0FC, 0x868C},{0xB0FD, 0x868D},{0xB0FE, 0x868E}, - {0xB0FF, 0x868F},{0xB100, 0x8690},{0xB101, 0x8691},{0xB102, 0x8692},{0xB103, 0x8693},{0xB104, 0x8694},{0xB105, 0x8695},{0xB106, 0x8696}, - {0xB107, 0x8697},{0xB108, 0xB3CA},{0xB109, 0xB3CB},{0xB10A, 0x8698},{0xB10B, 0xB3CC},{0xB10C, 0xB3CD},{0xB10D, 0x8699},{0xB10E, 0x869A}, - {0xB10F, 0x869B},{0xB110, 0xB3CE},{0xB111, 0x869C},{0xB112, 0xB3CF},{0xB113, 0xB3D0},{0xB114, 0x869D},{0xB115, 0x869E},{0xB116, 0x869F}, - {0xB117, 0x86A0},{0xB118, 0xB3D1},{0xB119, 0xB3D2},{0xB11A, 0x86A1},{0xB11B, 0xB3D3},{0xB11C, 0xB3D4},{0xB11D, 0xB3D5},{0xB11E, 0x86A2}, - {0xB11F, 0x86A3},{0xB120, 0x86A4},{0xB121, 0x86A5},{0xB122, 0x86A6},{0xB123, 0xB3D6},{0xB124, 0xB3D7},{0xB125, 0xB3D8},{0xB126, 0x86A7}, - {0xB127, 0x86A8},{0xB128, 0xB3D9},{0xB129, 0x86A9},{0xB12A, 0x86AA},{0xB12B, 0x86AB},{0xB12C, 0xB3DA},{0xB12D, 0x86AC},{0xB12E, 0x86AD}, - {0xB12F, 0x86AE},{0xB130, 0x86AF},{0xB131, 0x86B0},{0xB132, 0x86B1},{0xB133, 0x86B2},{0xB134, 0xB3DB},{0xB135, 0xB3DC},{0xB136, 0x86B3}, - {0xB137, 0xB3DD},{0xB138, 0xB3DE},{0xB139, 0xB3DF},{0xB13A, 0x86B4},{0xB13B, 0x86B5},{0xB13C, 0x86B6},{0xB13D, 0x86B7},{0xB13E, 0x86B8}, - {0xB13F, 0x86B9},{0xB140, 0xB3E0},{0xB141, 0xB3E1},{0xB142, 0x86BA},{0xB143, 0x86BB},{0xB144, 0xB3E2},{0xB145, 0x86BC},{0xB146, 0x86BD}, - {0xB147, 0x86BE},{0xB148, 0xB3E3},{0xB149, 0x86BF},{0xB14A, 0x86C0},{0xB14B, 0x86C1},{0xB14C, 0x86C2},{0xB14D, 0x86C3},{0xB14E, 0x86C4}, - {0xB14F, 0x86C5},{0xB150, 0xB3E4},{0xB151, 0xB3E5},{0xB152, 0x86C6},{0xB153, 0x86C7},{0xB154, 0xB3E6},{0xB155, 0xB3E7},{0xB156, 0x86C8}, - {0xB157, 0x86C9},{0xB158, 0xB3E8},{0xB159, 0x86CA},{0xB15A, 0x86CB},{0xB15B, 0x86CC},{0xB15C, 0xB3E9},{0xB15D, 0x86CD},{0xB15E, 0x86CE}, - {0xB15F, 0x86CF},{0xB160, 0xB3EA},{0xB161, 0x86D0},{0xB162, 0x86D1},{0xB163, 0x86D2},{0xB164, 0x86D3},{0xB165, 0x86D4},{0xB166, 0x86D5}, - {0xB167, 0x86D6},{0xB168, 0x86D7},{0xB169, 0x86D8},{0xB16A, 0x86D9},{0xB16B, 0x86DA},{0xB16C, 0x86DB},{0xB16D, 0x86DC},{0xB16E, 0x86DD}, - {0xB16F, 0x86DE},{0xB170, 0x86DF},{0xB171, 0x86E0},{0xB172, 0x86E1},{0xB173, 0x86E2},{0xB174, 0x86E3},{0xB175, 0x86E4},{0xB176, 0x86E5}, - {0xB177, 0x86E6},{0xB178, 0xB3EB},{0xB179, 0xB3EC},{0xB17A, 0x86E7},{0xB17B, 0x86E8},{0xB17C, 0xB3ED},{0xB17D, 0x86E9},{0xB17E, 0x86EA}, - {0xB17F, 0x86EB},{0xB180, 0xB3EE},{0xB181, 0x86EC},{0xB182, 0xB3EF},{0xB183, 0x86ED},{0xB184, 0x86EE},{0xB185, 0x86EF},{0xB186, 0x86F0}, - {0xB187, 0x86F1},{0xB188, 0xB3F0},{0xB189, 0xB3F1},{0xB18A, 0x86F2},{0xB18B, 0xB3F2},{0xB18C, 0x86F3},{0xB18D, 0xB3F3},{0xB18E, 0x86F4}, - {0xB18F, 0x86F5},{0xB190, 0x86F6},{0xB191, 0x86F7},{0xB192, 0xB3F4},{0xB193, 0xB3F5},{0xB194, 0xB3F6},{0xB195, 0x86F8},{0xB196, 0x86F9}, - {0xB197, 0x86FA},{0xB198, 0xB3F7},{0xB199, 0x86FB},{0xB19A, 0x86FC},{0xB19B, 0x86FD},{0xB19C, 0xB3F8},{0xB19D, 0x86FE},{0xB19E, 0x8741}, - {0xB19F, 0x8742},{0xB1A0, 0x8743},{0xB1A1, 0x8744},{0xB1A2, 0x8745},{0xB1A3, 0x8746},{0xB1A4, 0x8747},{0xB1A5, 0x8748},{0xB1A6, 0x8749}, - {0xB1A7, 0x874A},{0xB1A8, 0xB3F9},{0xB1A9, 0x874B},{0xB1AA, 0x874C},{0xB1AB, 0x874D},{0xB1AC, 0x874E},{0xB1AD, 0x874F},{0xB1AE, 0x8750}, - {0xB1AF, 0x8751},{0xB1B0, 0x8752},{0xB1B1, 0x8753},{0xB1B2, 0x8754},{0xB1B3, 0x8755},{0xB1B4, 0x8756},{0xB1B5, 0x8757},{0xB1B6, 0x8758}, - {0xB1B7, 0x8759},{0xB1B8, 0x875A},{0xB1B9, 0x8761},{0xB1BA, 0x8762},{0xB1BB, 0x8763},{0xB1BC, 0x8764},{0xB1BD, 0x8765},{0xB1BE, 0x8766}, - {0xB1BF, 0x8767},{0xB1C0, 0x8768},{0xB1C1, 0x8769},{0xB1C2, 0x876A},{0xB1C3, 0x876B},{0xB1C4, 0x876C},{0xB1C5, 0x876D},{0xB1C6, 0x876E}, - {0xB1C7, 0x876F},{0xB1C8, 0x8770},{0xB1C9, 0x8771},{0xB1CA, 0x8772},{0xB1CB, 0x8773},{0xB1CC, 0xB3FA},{0xB1CD, 0x8774},{0xB1CE, 0x8775}, - {0xB1CF, 0x8776},{0xB1D0, 0xB3FB},{0xB1D1, 0x8777},{0xB1D2, 0x8778},{0xB1D3, 0x8779},{0xB1D4, 0xB3FC},{0xB1D5, 0x877A},{0xB1D6, 0x8781}, - {0xB1D7, 0x8782},{0xB1D8, 0x8783},{0xB1D9, 0x8784},{0xB1DA, 0x8785},{0xB1DB, 0x8786},{0xB1DC, 0xB3FD},{0xB1DD, 0xB3FE},{0xB1DE, 0x8787}, - {0xB1DF, 0xB4A1},{0xB1E0, 0x8788},{0xB1E1, 0x8789},{0xB1E2, 0x878A},{0xB1E3, 0x878B},{0xB1E4, 0x878C},{0xB1E5, 0x878D},{0xB1E6, 0x878E}, - {0xB1E7, 0x878F},{0xB1E8, 0xB4A2},{0xB1E9, 0xB4A3},{0xB1EA, 0x8790},{0xB1EB, 0x8791},{0xB1EC, 0xB4A4},{0xB1ED, 0x8792},{0xB1EE, 0x8793}, - {0xB1EF, 0x8794},{0xB1F0, 0xB4A5},{0xB1F1, 0x8795},{0xB1F2, 0x8796},{0xB1F3, 0x8797},{0xB1F4, 0x8798},{0xB1F5, 0x8799},{0xB1F6, 0x879A}, - {0xB1F7, 0x879B},{0xB1F8, 0x879C},{0xB1F9, 0xB4A6},{0xB1FA, 0x879D},{0xB1FB, 0xB4A7},{0xB1FC, 0x879E},{0xB1FD, 0xB4A8},{0xB1FE, 0x879F}, - {0xB1FF, 0x87A0},{0xB200, 0x87A1},{0xB201, 0x87A2},{0xB202, 0x87A3},{0xB203, 0x87A4},{0xB204, 0xB4A9},{0xB205, 0xB4AA},{0xB206, 0x87A5}, - {0xB207, 0x87A6},{0xB208, 0xB4AB},{0xB209, 0x87A7},{0xB20A, 0x87A8},{0xB20B, 0xB4AC},{0xB20C, 0xB4AD},{0xB20D, 0x87A9},{0xB20E, 0x87AA}, - {0xB20F, 0x87AB},{0xB210, 0x87AC},{0xB211, 0x87AD},{0xB212, 0x87AE},{0xB213, 0x87AF},{0xB214, 0xB4AE},{0xB215, 0xB4AF},{0xB216, 0x87B0}, - {0xB217, 0xB4B0},{0xB218, 0x87B1},{0xB219, 0xB4B1},{0xB21A, 0x87B2},{0xB21B, 0x87B3},{0xB21C, 0x87B4},{0xB21D, 0x87B5},{0xB21E, 0x87B6}, - {0xB21F, 0x87B7},{0xB220, 0xB4B2},{0xB221, 0x87B8},{0xB222, 0x87B9},{0xB223, 0x87BA},{0xB224, 0x87BB},{0xB225, 0x87BC},{0xB226, 0x87BD}, - {0xB227, 0x87BE},{0xB228, 0x87BF},{0xB229, 0x87C0},{0xB22A, 0x87C1},{0xB22B, 0x87C2},{0xB22C, 0x87C3},{0xB22D, 0x87C4},{0xB22E, 0x87C5}, - {0xB22F, 0x87C6},{0xB230, 0x87C7},{0xB231, 0x87C8},{0xB232, 0x87C9},{0xB233, 0x87CA},{0xB234, 0xB4B3},{0xB235, 0x87CB},{0xB236, 0x87CC}, - {0xB237, 0x87CD},{0xB238, 0x87CE},{0xB239, 0x87CF},{0xB23A, 0x87D0},{0xB23B, 0x87D1},{0xB23C, 0xB4B4},{0xB23D, 0x87D2},{0xB23E, 0x87D3}, - {0xB23F, 0x87D4},{0xB240, 0x87D5},{0xB241, 0x87D6},{0xB242, 0x87D7},{0xB243, 0x87D8},{0xB244, 0x87D9},{0xB245, 0x87DA},{0xB246, 0x87DB}, - {0xB247, 0x87DC},{0xB248, 0x87DD},{0xB249, 0x87DE},{0xB24A, 0x87DF},{0xB24B, 0x87E0},{0xB24C, 0x87E1},{0xB24D, 0x87E2},{0xB24E, 0x87E3}, - {0xB24F, 0x87E4},{0xB250, 0x87E5},{0xB251, 0x87E6},{0xB252, 0x87E7},{0xB253, 0x87E8},{0xB254, 0x87E9},{0xB255, 0x87EA},{0xB256, 0x87EB}, - {0xB257, 0x87EC},{0xB258, 0xB4B5},{0xB259, 0x87ED},{0xB25A, 0x87EE},{0xB25B, 0x87EF},{0xB25C, 0xB4B6},{0xB25D, 0x87F0},{0xB25E, 0x87F1}, - {0xB25F, 0x87F2},{0xB260, 0xB4B7},{0xB261, 0x87F3},{0xB262, 0x87F4},{0xB263, 0x87F5},{0xB264, 0x87F6},{0xB265, 0x87F7},{0xB266, 0x87F8}, - {0xB267, 0x87F9},{0xB268, 0xB4B8},{0xB269, 0xB4B9},{0xB26A, 0x87FA},{0xB26B, 0x87FB},{0xB26C, 0x87FC},{0xB26D, 0x87FD},{0xB26E, 0x87FE}, - {0xB26F, 0x8841},{0xB270, 0x8842},{0xB271, 0x8843},{0xB272, 0x8844},{0xB273, 0x8845},{0xB274, 0xB4BA},{0xB275, 0xB4BB},{0xB276, 0x8846}, - {0xB277, 0x8847},{0xB278, 0x8848},{0xB279, 0x8849},{0xB27A, 0x884A},{0xB27B, 0x884B},{0xB27C, 0xB4BC},{0xB27D, 0x884C},{0xB27E, 0x884D}, - {0xB27F, 0x884E},{0xB280, 0x884F},{0xB281, 0x8850},{0xB282, 0x8851},{0xB283, 0x8852},{0xB284, 0xB4BD},{0xB285, 0xB4BE},{0xB286, 0x8853}, - {0xB287, 0x8854},{0xB288, 0x8855},{0xB289, 0xB4BF},{0xB28A, 0x8856},{0xB28B, 0x8857},{0xB28C, 0x8858},{0xB28D, 0x8859},{0xB28E, 0x885A}, - {0xB28F, 0x8861},{0xB290, 0xB4C0},{0xB291, 0xB4C1},{0xB292, 0x8862},{0xB293, 0x8863},{0xB294, 0xB4C2},{0xB295, 0x8864},{0xB296, 0x8865}, - {0xB297, 0x8866},{0xB298, 0xB4C3},{0xB299, 0xB4C4},{0xB29A, 0xB4C5},{0xB29B, 0x8867},{0xB29C, 0x8868},{0xB29D, 0x8869},{0xB29E, 0x886A}, - {0xB29F, 0x886B},{0xB2A0, 0xB4C6},{0xB2A1, 0xB4C7},{0xB2A2, 0x886C},{0xB2A3, 0xB4C8},{0xB2A4, 0x886D},{0xB2A5, 0xB4C9},{0xB2A6, 0xB4CA}, - {0xB2A7, 0x886E},{0xB2A8, 0x886F},{0xB2A9, 0x8870},{0xB2AA, 0xB4CB},{0xB2AB, 0x8871},{0xB2AC, 0xB4CC},{0xB2AD, 0x8872},{0xB2AE, 0x8873}, - {0xB2AF, 0x8874},{0xB2B0, 0xB4CD},{0xB2B1, 0x8875},{0xB2B2, 0x8876},{0xB2B3, 0x8877},{0xB2B4, 0xB4CE},{0xB2B5, 0x8878},{0xB2B6, 0x8879}, - {0xB2B7, 0x887A},{0xB2B8, 0x8881},{0xB2B9, 0x8882},{0xB2BA, 0x8883},{0xB2BB, 0x8884},{0xB2BC, 0x8885},{0xB2BD, 0x8886},{0xB2BE, 0x8887}, - {0xB2BF, 0x8888},{0xB2C0, 0x8889},{0xB2C1, 0x888A},{0xB2C2, 0x888B},{0xB2C3, 0x888C},{0xB2C4, 0x888D},{0xB2C5, 0x888E},{0xB2C6, 0x888F}, - {0xB2C7, 0x8890},{0xB2C8, 0xB4CF},{0xB2C9, 0xB4D0},{0xB2CA, 0x8891},{0xB2CB, 0x8892},{0xB2CC, 0xB4D1},{0xB2CD, 0x8893},{0xB2CE, 0x8894}, - {0xB2CF, 0x8895},{0xB2D0, 0xB4D2},{0xB2D1, 0x8896},{0xB2D2, 0xB4D3},{0xB2D3, 0x8897},{0xB2D4, 0x8898},{0xB2D5, 0x8899},{0xB2D6, 0x889A}, - {0xB2D7, 0x889B},{0xB2D8, 0xB4D4},{0xB2D9, 0xB4D5},{0xB2DA, 0x889C},{0xB2DB, 0xB4D6},{0xB2DC, 0x889D},{0xB2DD, 0xB4D7},{0xB2DE, 0x889E}, - {0xB2DF, 0x889F},{0xB2E0, 0x88A0},{0xB2E1, 0x88A1},{0xB2E2, 0xB4D8},{0xB2E3, 0x88A2},{0xB2E4, 0xB4D9},{0xB2E5, 0xB4DA},{0xB2E6, 0xB4DB}, - {0xB2E7, 0x88A3},{0xB2E8, 0xB4DC},{0xB2E9, 0x88A4},{0xB2EA, 0x88A5},{0xB2EB, 0xB4DD},{0xB2EC, 0xB4DE},{0xB2ED, 0xB4DF},{0xB2EE, 0xB4E0}, - {0xB2EF, 0xB4E1},{0xB2F0, 0x88A6},{0xB2F1, 0x88A7},{0xB2F2, 0x88A8},{0xB2F3, 0xB4E2},{0xB2F4, 0xB4E3},{0xB2F5, 0xB4E4},{0xB2F6, 0x88A9}, - {0xB2F7, 0xB4E5},{0xB2F8, 0xB4E6},{0xB2F9, 0xB4E7},{0xB2FA, 0xB4E8},{0xB2FB, 0xB4E9},{0xB2FC, 0x88AA},{0xB2FD, 0x88AB},{0xB2FE, 0x88AC}, - {0xB2FF, 0xB4EA},{0xB300, 0xB4EB},{0xB301, 0xB4EC},{0xB302, 0x88AD},{0xB303, 0x88AE},{0xB304, 0xB4ED},{0xB305, 0x88AF},{0xB306, 0x88B0}, - {0xB307, 0x88B1},{0xB308, 0xB4EE},{0xB309, 0x88B2},{0xB30A, 0x88B3},{0xB30B, 0x88B4},{0xB30C, 0x88B5},{0xB30D, 0x88B6},{0xB30E, 0x88B7}, - {0xB30F, 0x88B8},{0xB310, 0xB4EF},{0xB311, 0xB4F0},{0xB312, 0x88B9},{0xB313, 0xB4F1},{0xB314, 0xB4F2},{0xB315, 0xB4F3},{0xB316, 0x88BA}, - {0xB317, 0x88BB},{0xB318, 0x88BC},{0xB319, 0x88BD},{0xB31A, 0x88BE},{0xB31B, 0x88BF},{0xB31C, 0xB4F4},{0xB31D, 0x88C0},{0xB31E, 0x88C1}, - {0xB31F, 0x88C2},{0xB320, 0x88C3},{0xB321, 0x88C4},{0xB322, 0x88C5},{0xB323, 0x88C6},{0xB324, 0x88C7},{0xB325, 0x88C8},{0xB326, 0x88C9}, - {0xB327, 0x88CA},{0xB328, 0x88CB},{0xB329, 0x88CC},{0xB32A, 0x88CD},{0xB32B, 0x88CE},{0xB32C, 0x88CF},{0xB32D, 0x88D0},{0xB32E, 0x88D1}, - {0xB32F, 0x88D2},{0xB330, 0x88D3},{0xB331, 0x88D4},{0xB332, 0x88D5},{0xB333, 0x88D6},{0xB334, 0x88D7},{0xB335, 0x88D8},{0xB336, 0x88D9}, - {0xB337, 0x88DA},{0xB338, 0x88DB},{0xB339, 0x88DC},{0xB33A, 0x88DD},{0xB33B, 0x88DE},{0xB33C, 0x88DF},{0xB33D, 0x88E0},{0xB33E, 0x88E1}, - {0xB33F, 0x88E2},{0xB340, 0x88E3},{0xB341, 0x88E4},{0xB342, 0x88E5},{0xB343, 0x88E6},{0xB344, 0x88E7},{0xB345, 0x88E8},{0xB346, 0x88E9}, - {0xB347, 0x88EA},{0xB348, 0x88EB},{0xB349, 0x88EC},{0xB34A, 0x88ED},{0xB34B, 0x88EE},{0xB34C, 0x88EF},{0xB34D, 0x88F0},{0xB34E, 0x88F1}, - {0xB34F, 0x88F2},{0xB350, 0x88F3},{0xB351, 0x88F4},{0xB352, 0x88F5},{0xB353, 0x88F6},{0xB354, 0xB4F5},{0xB355, 0xB4F6},{0xB356, 0xB4F7}, - {0xB357, 0x88F7},{0xB358, 0xB4F8},{0xB359, 0x88F8},{0xB35A, 0x88F9},{0xB35B, 0xB4F9},{0xB35C, 0xB4FA},{0xB35D, 0x88FA},{0xB35E, 0xB4FB}, - {0xB35F, 0xB4FC},{0xB360, 0x88FB},{0xB361, 0x88FC},{0xB362, 0x88FD},{0xB363, 0x88FE},{0xB364, 0xB4FD},{0xB365, 0xB4FE},{0xB366, 0x8941}, - {0xB367, 0xB5A1},{0xB368, 0x8942},{0xB369, 0xB5A2},{0xB36A, 0x8943},{0xB36B, 0xB5A3},{0xB36C, 0x8944},{0xB36D, 0x8945},{0xB36E, 0xB5A4}, - {0xB36F, 0x8946},{0xB370, 0xB5A5},{0xB371, 0xB5A6},{0xB372, 0x8947},{0xB373, 0x8948},{0xB374, 0xB5A7},{0xB375, 0x8949},{0xB376, 0x894A}, - {0xB377, 0x894B},{0xB378, 0xB5A8},{0xB379, 0x894C},{0xB37A, 0x894D},{0xB37B, 0x894E},{0xB37C, 0x894F},{0xB37D, 0x8950},{0xB37E, 0x8951}, - {0xB37F, 0x8952},{0xB380, 0xB5A9},{0xB381, 0xB5AA},{0xB382, 0x8953},{0xB383, 0xB5AB},{0xB384, 0xB5AC},{0xB385, 0xB5AD},{0xB386, 0x8954}, - {0xB387, 0x8955},{0xB388, 0x8956},{0xB389, 0x8957},{0xB38A, 0x8958},{0xB38B, 0x8959},{0xB38C, 0xB5AE},{0xB38D, 0x895A},{0xB38E, 0x8961}, - {0xB38F, 0x8962},{0xB390, 0xB5AF},{0xB391, 0x8963},{0xB392, 0x8964},{0xB393, 0x8965},{0xB394, 0xB5B0},{0xB395, 0x8966},{0xB396, 0x8967}, - {0xB397, 0x8968},{0xB398, 0x8969},{0xB399, 0x896A},{0xB39A, 0x896B},{0xB39B, 0x896C},{0xB39C, 0x896D},{0xB39D, 0x896E},{0xB39E, 0x896F}, - {0xB39F, 0x8970},{0xB3A0, 0xB5B1},{0xB3A1, 0xB5B2},{0xB3A2, 0x8971},{0xB3A3, 0x8972},{0xB3A4, 0x8973},{0xB3A5, 0x8974},{0xB3A6, 0x8975}, - {0xB3A7, 0x8976},{0xB3A8, 0xB5B3},{0xB3A9, 0x8977},{0xB3AA, 0x8978},{0xB3AB, 0x8979},{0xB3AC, 0xB5B4},{0xB3AD, 0x897A},{0xB3AE, 0x8981}, - {0xB3AF, 0x8982},{0xB3B0, 0x8983},{0xB3B1, 0x8984},{0xB3B2, 0x8985},{0xB3B3, 0x8986},{0xB3B4, 0x8987},{0xB3B5, 0x8988},{0xB3B6, 0x8989}, - {0xB3B7, 0x898A},{0xB3B8, 0x898B},{0xB3B9, 0x898C},{0xB3BA, 0x898D},{0xB3BB, 0x898E},{0xB3BC, 0x898F},{0xB3BD, 0x8990},{0xB3BE, 0x8991}, - {0xB3BF, 0x8992},{0xB3C0, 0x8993},{0xB3C1, 0x8994},{0xB3C2, 0x8995},{0xB3C3, 0x8996},{0xB3C4, 0xB5B5},{0xB3C5, 0xB5B6},{0xB3C6, 0x8997}, - {0xB3C7, 0x8998},{0xB3C8, 0xB5B7},{0xB3C9, 0x8999},{0xB3CA, 0x899A},{0xB3CB, 0xB5B8},{0xB3CC, 0xB5B9},{0xB3CD, 0x899B},{0xB3CE, 0xB5BA}, - {0xB3CF, 0x899C},{0xB3D0, 0xB5BB},{0xB3D1, 0x899D},{0xB3D2, 0x899E},{0xB3D3, 0x899F},{0xB3D4, 0xB5BC},{0xB3D5, 0xB5BD},{0xB3D6, 0x89A0}, - {0xB3D7, 0xB5BE},{0xB3D8, 0x89A1},{0xB3D9, 0xB5BF},{0xB3DA, 0x89A2},{0xB3DB, 0xB5C0},{0xB3DC, 0x89A3},{0xB3DD, 0xB5C1},{0xB3DE, 0x89A4}, - {0xB3DF, 0x89A5},{0xB3E0, 0xB5C2},{0xB3E1, 0x89A6},{0xB3E2, 0x89A7},{0xB3E3, 0x89A8},{0xB3E4, 0xB5C3},{0xB3E5, 0x89A9},{0xB3E6, 0x89AA}, - {0xB3E7, 0x89AB},{0xB3E8, 0xB5C4},{0xB3E9, 0x89AC},{0xB3EA, 0x89AD},{0xB3EB, 0x89AE},{0xB3EC, 0x89AF},{0xB3ED, 0x89B0},{0xB3EE, 0x89B1}, - {0xB3EF, 0x89B2},{0xB3F0, 0x89B3},{0xB3F1, 0x89B4},{0xB3F2, 0x89B5},{0xB3F3, 0x89B6},{0xB3F4, 0x89B7},{0xB3F5, 0x89B8},{0xB3F6, 0x89B9}, - {0xB3F7, 0x89BA},{0xB3F8, 0x89BB},{0xB3F9, 0x89BC},{0xB3FA, 0x89BD},{0xB3FB, 0x89BE},{0xB3FC, 0xB5C5},{0xB3FD, 0x89BF},{0xB3FE, 0x89C0}, - {0xB3FF, 0x89C1},{0xB400, 0x89C2},{0xB401, 0x89C3},{0xB402, 0x89C4},{0xB403, 0x89C5},{0xB404, 0x89C6},{0xB405, 0x89C7},{0xB406, 0x89C8}, - {0xB407, 0x89C9},{0xB408, 0x89CA},{0xB409, 0x89CB},{0xB40A, 0x89CC},{0xB40B, 0x89CD},{0xB40C, 0x89CE},{0xB40D, 0x89CF},{0xB40E, 0x89D0}, - {0xB40F, 0x89D1},{0xB410, 0xB5C6},{0xB411, 0x89D2},{0xB412, 0x89D3},{0xB413, 0x89D4},{0xB414, 0x89D5},{0xB415, 0x89D6},{0xB416, 0x89D7}, - {0xB417, 0x89D8},{0xB418, 0xB5C7},{0xB419, 0x89D9},{0xB41A, 0x89DA},{0xB41B, 0x89DB},{0xB41C, 0xB5C8},{0xB41D, 0x89DC},{0xB41E, 0x89DD}, - {0xB41F, 0x89DE},{0xB420, 0xB5C9},{0xB421, 0x89DF},{0xB422, 0x89E0},{0xB423, 0x89E1},{0xB424, 0x89E2},{0xB425, 0x89E3},{0xB426, 0x89E4}, - {0xB427, 0x89E5},{0xB428, 0xB5CA},{0xB429, 0xB5CB},{0xB42A, 0x89E6},{0xB42B, 0xB5CC},{0xB42C, 0x89E7},{0xB42D, 0x89E8},{0xB42E, 0x89E9}, - {0xB42F, 0x89EA},{0xB430, 0x89EB},{0xB431, 0x89EC},{0xB432, 0x89ED},{0xB433, 0x89EE},{0xB434, 0xB5CD},{0xB435, 0x89EF},{0xB436, 0x89F0}, - {0xB437, 0x89F1},{0xB438, 0x89F2},{0xB439, 0x89F3},{0xB43A, 0x89F4},{0xB43B, 0x89F5},{0xB43C, 0x89F6},{0xB43D, 0x89F7},{0xB43E, 0x89F8}, - {0xB43F, 0x89F9},{0xB440, 0x89FA},{0xB441, 0x89FB},{0xB442, 0x89FC},{0xB443, 0x89FD},{0xB444, 0x89FE},{0xB445, 0x8A41},{0xB446, 0x8A42}, - {0xB447, 0x8A43},{0xB448, 0x8A44},{0xB449, 0x8A45},{0xB44A, 0x8A46},{0xB44B, 0x8A47},{0xB44C, 0x8A48},{0xB44D, 0x8A49},{0xB44E, 0x8A4A}, - {0xB44F, 0x8A4B},{0xB450, 0xB5CE},{0xB451, 0xB5CF},{0xB452, 0x8A4C},{0xB453, 0x8A4D},{0xB454, 0xB5D0},{0xB455, 0x8A4E},{0xB456, 0x8A4F}, - {0xB457, 0x8A50},{0xB458, 0xB5D1},{0xB459, 0x8A51},{0xB45A, 0x8A52},{0xB45B, 0x8A53},{0xB45C, 0x8A54},{0xB45D, 0x8A55},{0xB45E, 0x8A56}, - {0xB45F, 0x8A57},{0xB460, 0xB5D2},{0xB461, 0xB5D3},{0xB462, 0x8A58},{0xB463, 0xB5D4},{0xB464, 0x8A59},{0xB465, 0xB5D5},{0xB466, 0x8A5A}, - {0xB467, 0x8A61},{0xB468, 0x8A62},{0xB469, 0x8A63},{0xB46A, 0x8A64},{0xB46B, 0x8A65},{0xB46C, 0xB5D6},{0xB46D, 0x8A66},{0xB46E, 0x8A67}, - {0xB46F, 0x8A68},{0xB470, 0x8A69},{0xB471, 0x8A6A},{0xB472, 0x8A6B},{0xB473, 0x8A6C},{0xB474, 0x8A6D},{0xB475, 0x8A6E},{0xB476, 0x8A6F}, - {0xB477, 0x8A70},{0xB478, 0x8A71},{0xB479, 0x8A72},{0xB47A, 0x8A73},{0xB47B, 0x8A74},{0xB47C, 0x8A75},{0xB47D, 0x8A76},{0xB47E, 0x8A77}, - {0xB47F, 0x8A78},{0xB480, 0xB5D7},{0xB481, 0x8A79},{0xB482, 0x8A7A},{0xB483, 0x8A81},{0xB484, 0x8A82},{0xB485, 0x8A83},{0xB486, 0x8A84}, - {0xB487, 0x8A85},{0xB488, 0xB5D8},{0xB489, 0x8A86},{0xB48A, 0x8A87},{0xB48B, 0x8A88},{0xB48C, 0x8A89},{0xB48D, 0x8A8A},{0xB48E, 0x8A8B}, - {0xB48F, 0x8A8C},{0xB490, 0x8A8D},{0xB491, 0x8A8E},{0xB492, 0x8A8F},{0xB493, 0x8A90},{0xB494, 0x8A91},{0xB495, 0x8A92},{0xB496, 0x8A93}, - {0xB497, 0x8A94},{0xB498, 0x8A95},{0xB499, 0x8A96},{0xB49A, 0x8A97},{0xB49B, 0x8A98},{0xB49C, 0x8A99},{0xB49D, 0xB5D9},{0xB49E, 0x8A9A}, - {0xB49F, 0x8A9B},{0xB4A0, 0x8A9C},{0xB4A1, 0x8A9D},{0xB4A2, 0x8A9E},{0xB4A3, 0x8A9F},{0xB4A4, 0xB5DA},{0xB4A5, 0x8AA0},{0xB4A6, 0x8AA1}, - {0xB4A7, 0x8AA2},{0xB4A8, 0xB5DB},{0xB4A9, 0x8AA3},{0xB4AA, 0x8AA4},{0xB4AB, 0x8AA5},{0xB4AC, 0xB5DC},{0xB4AD, 0x8AA6},{0xB4AE, 0x8AA7}, - {0xB4AF, 0x8AA8},{0xB4B0, 0x8AA9},{0xB4B1, 0x8AAA},{0xB4B2, 0x8AAB},{0xB4B3, 0x8AAC},{0xB4B4, 0x8AAD},{0xB4B5, 0xB5DD},{0xB4B6, 0x8AAE}, - {0xB4B7, 0xB5DE},{0xB4B8, 0x8AAF},{0xB4B9, 0xB5DF},{0xB4BA, 0x8AB0},{0xB4BB, 0x8AB1},{0xB4BC, 0x8AB2},{0xB4BD, 0x8AB3},{0xB4BE, 0x8AB4}, - {0xB4BF, 0x8AB5},{0xB4C0, 0xB5E0},{0xB4C1, 0x8AB6},{0xB4C2, 0x8AB7},{0xB4C3, 0x8AB8},{0xB4C4, 0xB5E1},{0xB4C5, 0x8AB9},{0xB4C6, 0x8ABA}, - {0xB4C7, 0x8ABB},{0xB4C8, 0xB5E2},{0xB4C9, 0x8ABC},{0xB4CA, 0x8ABD},{0xB4CB, 0x8ABE},{0xB4CC, 0x8ABF},{0xB4CD, 0x8AC0},{0xB4CE, 0x8AC1}, - {0xB4CF, 0x8AC2},{0xB4D0, 0xB5E3},{0xB4D1, 0x8AC3},{0xB4D2, 0x8AC4},{0xB4D3, 0x8AC5},{0xB4D4, 0x8AC6},{0xB4D5, 0xB5E4},{0xB4D6, 0x8AC7}, - {0xB4D7, 0x8AC8},{0xB4D8, 0x8AC9},{0xB4D9, 0x8ACA},{0xB4DA, 0x8ACB},{0xB4DB, 0x8ACC},{0xB4DC, 0xB5E5},{0xB4DD, 0xB5E6},{0xB4DE, 0x8ACD}, - {0xB4DF, 0x8ACE},{0xB4E0, 0xB5E7},{0xB4E1, 0x8ACF},{0xB4E2, 0x8AD0},{0xB4E3, 0xB5E8},{0xB4E4, 0xB5E9},{0xB4E5, 0x8AD1},{0xB4E6, 0xB5EA}, - {0xB4E7, 0x8AD2},{0xB4E8, 0x8AD3},{0xB4E9, 0x8AD4},{0xB4EA, 0x8AD5},{0xB4EB, 0x8AD6},{0xB4EC, 0xB5EB},{0xB4ED, 0xB5EC},{0xB4EE, 0x8AD7}, - {0xB4EF, 0xB5ED},{0xB4F0, 0x8AD8},{0xB4F1, 0xB5EE},{0xB4F2, 0x8AD9},{0xB4F3, 0x8ADA},{0xB4F4, 0x8ADB},{0xB4F5, 0x8ADC},{0xB4F6, 0x8ADD}, - {0xB4F7, 0x8ADE},{0xB4F8, 0xB5EF},{0xB4F9, 0x8ADF},{0xB4FA, 0x8AE0},{0xB4FB, 0x8AE1},{0xB4FC, 0x8AE2},{0xB4FD, 0x8AE3},{0xB4FE, 0x8AE4}, - {0xB4FF, 0x8AE5},{0xB500, 0x8AE6},{0xB501, 0x8AE7},{0xB502, 0x8AE8},{0xB503, 0x8AE9},{0xB504, 0x8AEA},{0xB505, 0x8AEB},{0xB506, 0x8AEC}, - {0xB507, 0x8AED},{0xB508, 0x8AEE},{0xB509, 0x8AEF},{0xB50A, 0x8AF0},{0xB50B, 0x8AF1},{0xB50C, 0x8AF2},{0xB50D, 0x8AF3},{0xB50E, 0x8AF4}, - {0xB50F, 0x8AF5},{0xB510, 0x8AF6},{0xB511, 0x8AF7},{0xB512, 0x8AF8},{0xB513, 0x8AF9},{0xB514, 0xB5F0},{0xB515, 0xB5F1},{0xB516, 0x8AFA}, - {0xB517, 0x8AFB},{0xB518, 0xB5F2},{0xB519, 0x8AFC},{0xB51A, 0x8AFD},{0xB51B, 0xB5F3},{0xB51C, 0xB5F4},{0xB51D, 0x8AFE},{0xB51E, 0x8B41}, - {0xB51F, 0x8B42},{0xB520, 0x8B43},{0xB521, 0x8B44},{0xB522, 0x8B45},{0xB523, 0x8B46},{0xB524, 0xB5F5},{0xB525, 0xB5F6},{0xB526, 0x8B47}, - {0xB527, 0xB5F7},{0xB528, 0xB5F8},{0xB529, 0xB5F9},{0xB52A, 0xB5FA},{0xB52B, 0x8B48},{0xB52C, 0x8B49},{0xB52D, 0x8B4A},{0xB52E, 0x8B4B}, - {0xB52F, 0x8B4C},{0xB530, 0xB5FB},{0xB531, 0xB5FC},{0xB532, 0x8B4D},{0xB533, 0x8B4E},{0xB534, 0xB5FD},{0xB535, 0x8B4F},{0xB536, 0x8B50}, - {0xB537, 0x8B51},{0xB538, 0xB5FE},{0xB539, 0x8B52},{0xB53A, 0x8B53},{0xB53B, 0x8B54},{0xB53C, 0x8B55},{0xB53D, 0x8B56},{0xB53E, 0x8B57}, - {0xB53F, 0x8B58},{0xB540, 0xB6A1},{0xB541, 0xB6A2},{0xB542, 0x8B59},{0xB543, 0xB6A3},{0xB544, 0xB6A4},{0xB545, 0xB6A5},{0xB546, 0x8B5A}, - {0xB547, 0x8B61},{0xB548, 0x8B62},{0xB549, 0x8B63},{0xB54A, 0x8B64},{0xB54B, 0xB6A6},{0xB54C, 0xB6A7},{0xB54D, 0xB6A8},{0xB54E, 0x8B65}, - {0xB54F, 0x8B66},{0xB550, 0xB6A9},{0xB551, 0x8B67},{0xB552, 0x8B68},{0xB553, 0x8B69},{0xB554, 0xB6AA},{0xB555, 0x8B6A},{0xB556, 0x8B6B}, - {0xB557, 0x8B6C},{0xB558, 0x8B6D},{0xB559, 0x8B6E},{0xB55A, 0x8B6F},{0xB55B, 0x8B70},{0xB55C, 0xB6AB},{0xB55D, 0xB6AC},{0xB55E, 0x8B71}, - {0xB55F, 0xB6AD},{0xB560, 0xB6AE},{0xB561, 0xB6AF},{0xB562, 0x8B72},{0xB563, 0x8B73},{0xB564, 0x8B74},{0xB565, 0x8B75},{0xB566, 0x8B76}, - {0xB567, 0x8B77},{0xB568, 0x8B78},{0xB569, 0x8B79},{0xB56A, 0x8B7A},{0xB56B, 0x8B81},{0xB56C, 0x8B82},{0xB56D, 0x8B83},{0xB56E, 0x8B84}, - {0xB56F, 0x8B85},{0xB570, 0x8B86},{0xB571, 0x8B87},{0xB572, 0x8B88},{0xB573, 0x8B89},{0xB574, 0x8B8A},{0xB575, 0x8B8B},{0xB576, 0x8B8C}, - {0xB577, 0x8B8D},{0xB578, 0x8B8E},{0xB579, 0x8B8F},{0xB57A, 0x8B90},{0xB57B, 0x8B91},{0xB57C, 0x8B92},{0xB57D, 0x8B93},{0xB57E, 0x8B94}, - {0xB57F, 0x8B95},{0xB580, 0x8B96},{0xB581, 0x8B97},{0xB582, 0x8B98},{0xB583, 0x8B99},{0xB584, 0x8B9A},{0xB585, 0x8B9B},{0xB586, 0x8B9C}, - {0xB587, 0x8B9D},{0xB588, 0x8B9E},{0xB589, 0x8B9F},{0xB58A, 0x8BA0},{0xB58B, 0x8BA1},{0xB58C, 0x8BA2},{0xB58D, 0x8BA3},{0xB58E, 0x8BA4}, - {0xB58F, 0x8BA5},{0xB590, 0x8BA6},{0xB591, 0x8BA7},{0xB592, 0x8BA8},{0xB593, 0x8BA9},{0xB594, 0x8BAA},{0xB595, 0x8BAB},{0xB596, 0x8BAC}, - {0xB597, 0x8BAD},{0xB598, 0x8BAE},{0xB599, 0x8BAF},{0xB59A, 0x8BB0},{0xB59B, 0x8BB1},{0xB59C, 0x8BB2},{0xB59D, 0x8BB3},{0xB59E, 0x8BB4}, - {0xB59F, 0x8BB5},{0xB5A0, 0xB6B0},{0xB5A1, 0xB6B1},{0xB5A2, 0x8BB6},{0xB5A3, 0x8BB7},{0xB5A4, 0xB6B2},{0xB5A5, 0x8BB8},{0xB5A6, 0x8BB9}, - {0xB5A7, 0x8BBA},{0xB5A8, 0xB6B3},{0xB5A9, 0x8BBB},{0xB5AA, 0xB6B4},{0xB5AB, 0xB6B5},{0xB5AC, 0x8BBC},{0xB5AD, 0x8BBD},{0xB5AE, 0x8BBE}, - {0xB5AF, 0x8BBF},{0xB5B0, 0xB6B6},{0xB5B1, 0xB6B7},{0xB5B2, 0x8BC0},{0xB5B3, 0xB6B8},{0xB5B4, 0xB6B9},{0xB5B5, 0xB6BA},{0xB5B6, 0x8BC1}, - {0xB5B7, 0x8BC2},{0xB5B8, 0x8BC3},{0xB5B9, 0x8BC4},{0xB5BA, 0x8BC5},{0xB5BB, 0xB6BB},{0xB5BC, 0xB6BC},{0xB5BD, 0xB6BD},{0xB5BE, 0x8BC6}, - {0xB5BF, 0x8BC7},{0xB5C0, 0xB6BE},{0xB5C1, 0x8BC8},{0xB5C2, 0x8BC9},{0xB5C3, 0x8BCA},{0xB5C4, 0xB6BF},{0xB5C5, 0x8BCB},{0xB5C6, 0x8BCC}, - {0xB5C7, 0x8BCD},{0xB5C8, 0x8BCE},{0xB5C9, 0x8BCF},{0xB5CA, 0x8BD0},{0xB5CB, 0x8BD1},{0xB5CC, 0xB6C0},{0xB5CD, 0xB6C1},{0xB5CE, 0x8BD2}, - {0xB5CF, 0xB6C2},{0xB5D0, 0xB6C3},{0xB5D1, 0xB6C4},{0xB5D2, 0x8BD3},{0xB5D3, 0x8BD4},{0xB5D4, 0x8BD5},{0xB5D5, 0x8BD6},{0xB5D6, 0x8BD7}, - {0xB5D7, 0x8BD8},{0xB5D8, 0xB6C5},{0xB5D9, 0x8BD9},{0xB5DA, 0x8BDA},{0xB5DB, 0x8BDB},{0xB5DC, 0x8BDC},{0xB5DD, 0x8BDD},{0xB5DE, 0x8BDE}, - {0xB5DF, 0x8BDF},{0xB5E0, 0x8BE0},{0xB5E1, 0x8BE1},{0xB5E2, 0x8BE2},{0xB5E3, 0x8BE3},{0xB5E4, 0x8BE4},{0xB5E5, 0x8BE5},{0xB5E6, 0x8BE6}, - {0xB5E7, 0x8BE7},{0xB5E8, 0x8BE8},{0xB5E9, 0x8BE9},{0xB5EA, 0x8BEA},{0xB5EB, 0x8BEB},{0xB5EC, 0xB6C6},{0xB5ED, 0x8BEC},{0xB5EE, 0x8BED}, - {0xB5EF, 0x8BEE},{0xB5F0, 0x8BEF},{0xB5F1, 0x8BF0},{0xB5F2, 0x8BF1},{0xB5F3, 0x8BF2},{0xB5F4, 0x8BF3},{0xB5F5, 0x8BF4},{0xB5F6, 0x8BF5}, - {0xB5F7, 0x8BF6},{0xB5F8, 0x8BF7},{0xB5F9, 0x8BF8},{0xB5FA, 0x8BF9},{0xB5FB, 0x8BFA},{0xB5FC, 0x8BFB},{0xB5FD, 0x8BFC},{0xB5FE, 0x8BFD}, - {0xB5FF, 0x8BFE},{0xB600, 0x8C41},{0xB601, 0x8C42},{0xB602, 0x8C43},{0xB603, 0x8C44},{0xB604, 0x8C45},{0xB605, 0x8C46},{0xB606, 0x8C47}, - {0xB607, 0x8C48},{0xB608, 0x8C49},{0xB609, 0x8C4A},{0xB60A, 0x8C4B},{0xB60B, 0x8C4C},{0xB60C, 0x8C4D},{0xB60D, 0x8C4E},{0xB60E, 0x8C4F}, - {0xB60F, 0x8C50},{0xB610, 0xB6C7},{0xB611, 0xB6C8},{0xB612, 0x8C51},{0xB613, 0x8C52},{0xB614, 0xB6C9},{0xB615, 0x8C53},{0xB616, 0x8C54}, - {0xB617, 0x8C55},{0xB618, 0xB6CA},{0xB619, 0x8C56},{0xB61A, 0x8C57},{0xB61B, 0x8C58},{0xB61C, 0x8C59},{0xB61D, 0x8C5A},{0xB61E, 0x8C61}, - {0xB61F, 0x8C62},{0xB620, 0x8C63},{0xB621, 0x8C64},{0xB622, 0x8C65},{0xB623, 0x8C66},{0xB624, 0x8C67},{0xB625, 0xB6CB},{0xB626, 0x8C68}, - {0xB627, 0x8C69},{0xB628, 0x8C6A},{0xB629, 0x8C6B},{0xB62A, 0x8C6C},{0xB62B, 0x8C6D},{0xB62C, 0xB6CC},{0xB62D, 0x8C6E},{0xB62E, 0x8C6F}, - {0xB62F, 0x8C70},{0xB630, 0x8C71},{0xB631, 0x8C72},{0xB632, 0x8C73},{0xB633, 0x8C74},{0xB634, 0xB6CD},{0xB635, 0x8C75},{0xB636, 0x8C76}, - {0xB637, 0x8C77},{0xB638, 0x8C78},{0xB639, 0x8C79},{0xB63A, 0x8C7A},{0xB63B, 0x8C81},{0xB63C, 0x8C82},{0xB63D, 0x8C83},{0xB63E, 0x8C84}, - {0xB63F, 0x8C85},{0xB640, 0x8C86},{0xB641, 0x8C87},{0xB642, 0x8C88},{0xB643, 0x8C89},{0xB644, 0x8C8A},{0xB645, 0x8C8B},{0xB646, 0x8C8C}, - {0xB647, 0x8C8D},{0xB648, 0xB6CE},{0xB649, 0x8C8E},{0xB64A, 0x8C8F},{0xB64B, 0x8C90},{0xB64C, 0x8C91},{0xB64D, 0x8C92},{0xB64E, 0x8C93}, - {0xB64F, 0x8C94},{0xB650, 0x8C95},{0xB651, 0x8C96},{0xB652, 0x8C97},{0xB653, 0x8C98},{0xB654, 0x8C99},{0xB655, 0x8C9A},{0xB656, 0x8C9B}, - {0xB657, 0x8C9C},{0xB658, 0x8C9D},{0xB659, 0x8C9E},{0xB65A, 0x8C9F},{0xB65B, 0x8CA0},{0xB65C, 0x8CA1},{0xB65D, 0x8CA2},{0xB65E, 0x8CA3}, - {0xB65F, 0x8CA4},{0xB660, 0x8CA5},{0xB661, 0x8CA6},{0xB662, 0x8CA7},{0xB663, 0x8CA8},{0xB664, 0xB6CF},{0xB665, 0x8CA9},{0xB666, 0x8CAA}, - {0xB667, 0x8CAB},{0xB668, 0xB6D0},{0xB669, 0x8CAC},{0xB66A, 0x8CAD},{0xB66B, 0x8CAE},{0xB66C, 0x8CAF},{0xB66D, 0x8CB0},{0xB66E, 0x8CB1}, - {0xB66F, 0x8CB2},{0xB670, 0x8CB3},{0xB671, 0x8CB4},{0xB672, 0x8CB5},{0xB673, 0x8CB6},{0xB674, 0x8CB7},{0xB675, 0x8CB8},{0xB676, 0x8CB9}, - {0xB677, 0x8CBA},{0xB678, 0x8CBB},{0xB679, 0x8CBC},{0xB67A, 0x8CBD},{0xB67B, 0x8CBE},{0xB67C, 0x8CBF},{0xB67D, 0x8CC0},{0xB67E, 0x8CC1}, - {0xB67F, 0x8CC2},{0xB680, 0x8CC3},{0xB681, 0x8CC4},{0xB682, 0x8CC5},{0xB683, 0x8CC6},{0xB684, 0x8CC7},{0xB685, 0x8CC8},{0xB686, 0x8CC9}, - {0xB687, 0x8CCA},{0xB688, 0x8CCB},{0xB689, 0x8CCC},{0xB68A, 0x8CCD},{0xB68B, 0x8CCE},{0xB68C, 0x8CCF},{0xB68D, 0x8CD0},{0xB68E, 0x8CD1}, - {0xB68F, 0x8CD2},{0xB690, 0x8CD3},{0xB691, 0x8CD4},{0xB692, 0x8CD5},{0xB693, 0x8CD6},{0xB694, 0x8CD7},{0xB695, 0x8CD8},{0xB696, 0x8CD9}, - {0xB697, 0x8CDA},{0xB698, 0x8CDB},{0xB699, 0x8CDC},{0xB69A, 0x8CDD},{0xB69B, 0x8CDE},{0xB69C, 0xB6D1},{0xB69D, 0xB6D2},{0xB69E, 0x8CDF}, - {0xB69F, 0x8CE0},{0xB6A0, 0xB6D3},{0xB6A1, 0x8CE1},{0xB6A2, 0x8CE2},{0xB6A3, 0x8CE3},{0xB6A4, 0xB6D4},{0xB6A5, 0x8CE4},{0xB6A6, 0x8CE5}, - {0xB6A7, 0x8CE6},{0xB6A8, 0x8CE7},{0xB6A9, 0x8CE8},{0xB6AA, 0x8CE9},{0xB6AB, 0xB6D5},{0xB6AC, 0xB6D6},{0xB6AD, 0x8CEA},{0xB6AE, 0x8CEB}, - {0xB6AF, 0x8CEC},{0xB6B0, 0x8CED},{0xB6B1, 0xB6D7},{0xB6B2, 0x8CEE},{0xB6B3, 0x8CEF},{0xB6B4, 0x8CF0},{0xB6B5, 0x8CF1},{0xB6B6, 0x8CF2}, - {0xB6B7, 0x8CF3},{0xB6B8, 0x8CF4},{0xB6B9, 0x8CF5},{0xB6BA, 0x8CF6},{0xB6BB, 0x8CF7},{0xB6BC, 0x8CF8},{0xB6BD, 0x8CF9},{0xB6BE, 0x8CFA}, - {0xB6BF, 0x8CFB},{0xB6C0, 0x8CFC},{0xB6C1, 0x8CFD},{0xB6C2, 0x8CFE},{0xB6C3, 0x8D41},{0xB6C4, 0x8D42},{0xB6C5, 0x8D43},{0xB6C6, 0x8D44}, - {0xB6C7, 0x8D45},{0xB6C8, 0x8D46},{0xB6C9, 0x8D47},{0xB6CA, 0x8D48},{0xB6CB, 0x8D49},{0xB6CC, 0x8D4A},{0xB6CD, 0x8D4B},{0xB6CE, 0x8D4C}, - {0xB6CF, 0x8D4D},{0xB6D0, 0x8D4E},{0xB6D1, 0x8D4F},{0xB6D2, 0x8D50},{0xB6D3, 0x8D51},{0xB6D4, 0xB6D8},{0xB6D5, 0x8D52},{0xB6D6, 0x8D53}, - {0xB6D7, 0x8D54},{0xB6D8, 0x8D55},{0xB6D9, 0x8D56},{0xB6DA, 0x8D57},{0xB6DB, 0x8D58},{0xB6DC, 0x8D59},{0xB6DD, 0x8D5A},{0xB6DE, 0x8D61}, - {0xB6DF, 0x8D62},{0xB6E0, 0x8D63},{0xB6E1, 0x8D64},{0xB6E2, 0x8D65},{0xB6E3, 0x8D66},{0xB6E4, 0x8D67},{0xB6E5, 0x8D68},{0xB6E6, 0x8D69}, - {0xB6E7, 0x8D6A},{0xB6E8, 0x8D6B},{0xB6E9, 0x8D6C},{0xB6EA, 0x8D6D},{0xB6EB, 0x8D6E},{0xB6EC, 0x8D6F},{0xB6ED, 0x8D70},{0xB6EE, 0x8D71}, - {0xB6EF, 0x8D72},{0xB6F0, 0xB6D9},{0xB6F1, 0x8D73},{0xB6F2, 0x8D74},{0xB6F3, 0x8D75},{0xB6F4, 0xB6DA},{0xB6F5, 0x8D76},{0xB6F6, 0x8D77}, - {0xB6F7, 0x8D78},{0xB6F8, 0xB6DB},{0xB6F9, 0x8D79},{0xB6FA, 0x8D7A},{0xB6FB, 0x8D81},{0xB6FC, 0x8D82},{0xB6FD, 0x8D83},{0xB6FE, 0x8D84}, - {0xB6FF, 0x8D85},{0xB700, 0xB6DC},{0xB701, 0xB6DD},{0xB702, 0x8D86},{0xB703, 0x8D87},{0xB704, 0x8D88},{0xB705, 0xB6DE},{0xB706, 0x8D89}, - {0xB707, 0x8D8A},{0xB708, 0x8D8B},{0xB709, 0x8D8C},{0xB70A, 0x8D8D},{0xB70B, 0x8D8E},{0xB70C, 0x8D8F},{0xB70D, 0x8D90},{0xB70E, 0x8D91}, - {0xB70F, 0x8D92},{0xB710, 0x8D93},{0xB711, 0x8D94},{0xB712, 0x8D95},{0xB713, 0x8D96},{0xB714, 0x8D97},{0xB715, 0x8D98},{0xB716, 0x8D99}, - {0xB717, 0x8D9A},{0xB718, 0x8D9B},{0xB719, 0x8D9C},{0xB71A, 0x8D9D},{0xB71B, 0x8D9E},{0xB71C, 0x8D9F},{0xB71D, 0x8DA0},{0xB71E, 0x8DA1}, - {0xB71F, 0x8DA2},{0xB720, 0x8DA3},{0xB721, 0x8DA4},{0xB722, 0x8DA5},{0xB723, 0x8DA6},{0xB724, 0x8DA7},{0xB725, 0x8DA8},{0xB726, 0x8DA9}, - {0xB727, 0x8DAA},{0xB728, 0xB6DF},{0xB729, 0xB6E0},{0xB72A, 0x8DAB},{0xB72B, 0x8DAC},{0xB72C, 0xB6E1},{0xB72D, 0x8DAD},{0xB72E, 0x8DAE}, - {0xB72F, 0xB6E2},{0xB730, 0xB6E3},{0xB731, 0x8DAF},{0xB732, 0x8DB0},{0xB733, 0x8DB1},{0xB734, 0x8DB2},{0xB735, 0x8DB3},{0xB736, 0x8DB4}, - {0xB737, 0x8DB5},{0xB738, 0xB6E4},{0xB739, 0xB6E5},{0xB73A, 0x8DB6},{0xB73B, 0xB6E6},{0xB73C, 0x8DB7},{0xB73D, 0x8DB8},{0xB73E, 0x8DB9}, - {0xB73F, 0x8DBA},{0xB740, 0x8DBB},{0xB741, 0x8DBC},{0xB742, 0x8DBD},{0xB743, 0x8DBE},{0xB744, 0xB6E7},{0xB745, 0x8DBF},{0xB746, 0x8DC0}, - {0xB747, 0x8DC1},{0xB748, 0xB6E8},{0xB749, 0x8DC2},{0xB74A, 0x8DC3},{0xB74B, 0x8DC4},{0xB74C, 0xB6E9},{0xB74D, 0x8DC5},{0xB74E, 0x8DC6}, - {0xB74F, 0x8DC7},{0xB750, 0x8DC8},{0xB751, 0x8DC9},{0xB752, 0x8DCA},{0xB753, 0x8DCB},{0xB754, 0xB6EA},{0xB755, 0xB6EB},{0xB756, 0x8DCC}, - {0xB757, 0x8DCD},{0xB758, 0x8DCE},{0xB759, 0x8DCF},{0xB75A, 0x8DD0},{0xB75B, 0x8DD1},{0xB75C, 0x8DD2},{0xB75D, 0x8DD3},{0xB75E, 0x8DD4}, - {0xB75F, 0x8DD5},{0xB760, 0xB6EC},{0xB761, 0x8DD6},{0xB762, 0x8DD7},{0xB763, 0x8DD8},{0xB764, 0xB6ED},{0xB765, 0x8DD9},{0xB766, 0x8DDA}, - {0xB767, 0x8DDB},{0xB768, 0xB6EE},{0xB769, 0x8DDC},{0xB76A, 0x8DDD},{0xB76B, 0x8DDE},{0xB76C, 0x8DDF},{0xB76D, 0x8DE0},{0xB76E, 0x8DE1}, - {0xB76F, 0x8DE2},{0xB770, 0xB6EF},{0xB771, 0xB6F0},{0xB772, 0x8DE3},{0xB773, 0xB6F1},{0xB774, 0x8DE4},{0xB775, 0xB6F2},{0xB776, 0x8DE5}, - {0xB777, 0x8DE6},{0xB778, 0x8DE7},{0xB779, 0x8DE8},{0xB77A, 0x8DE9},{0xB77B, 0x8DEA},{0xB77C, 0xB6F3},{0xB77D, 0xB6F4},{0xB77E, 0x8DEB}, - {0xB77F, 0x8DEC},{0xB780, 0xB6F5},{0xB781, 0x8DED},{0xB782, 0x8DEE},{0xB783, 0x8DEF},{0xB784, 0xB6F6},{0xB785, 0x8DF0},{0xB786, 0x8DF1}, - {0xB787, 0x8DF2},{0xB788, 0x8DF3},{0xB789, 0x8DF4},{0xB78A, 0x8DF5},{0xB78B, 0x8DF6},{0xB78C, 0xB6F7},{0xB78D, 0xB6F8},{0xB78E, 0x8DF7}, - {0xB78F, 0xB6F9},{0xB790, 0xB6FA},{0xB791, 0xB6FB},{0xB792, 0xB6FC},{0xB793, 0x8DF8},{0xB794, 0x8DF9},{0xB795, 0x8DFA},{0xB796, 0xB6FD}, - {0xB797, 0xB6FE},{0xB798, 0xB7A1},{0xB799, 0xB7A2},{0xB79A, 0x8DFB},{0xB79B, 0x8DFC},{0xB79C, 0xB7A3},{0xB79D, 0x8DFD},{0xB79E, 0x8DFE}, - {0xB79F, 0x8E41},{0xB7A0, 0xB7A4},{0xB7A1, 0x8E42},{0xB7A2, 0x8E43},{0xB7A3, 0x8E44},{0xB7A4, 0x8E45},{0xB7A5, 0x8E46},{0xB7A6, 0x8E47}, - {0xB7A7, 0x8E48},{0xB7A8, 0xB7A5},{0xB7A9, 0xB7A6},{0xB7AA, 0x8E49},{0xB7AB, 0xB7A7},{0xB7AC, 0xB7A8},{0xB7AD, 0xB7A9},{0xB7AE, 0x8E4A}, - {0xB7AF, 0x8E4B},{0xB7B0, 0x8E4C},{0xB7B1, 0x8E4D},{0xB7B2, 0x8E4E},{0xB7B3, 0x8E4F},{0xB7B4, 0xB7AA},{0xB7B5, 0xB7AB},{0xB7B6, 0x8E50}, - {0xB7B7, 0x8E51},{0xB7B8, 0xB7AC},{0xB7B9, 0x8E52},{0xB7BA, 0x8E53},{0xB7BB, 0x8E54},{0xB7BC, 0x8E55},{0xB7BD, 0x8E56},{0xB7BE, 0x8E57}, - {0xB7BF, 0x8E58},{0xB7C0, 0x8E59},{0xB7C1, 0x8E5A},{0xB7C2, 0x8E61},{0xB7C3, 0x8E62},{0xB7C4, 0x8E63},{0xB7C5, 0x8E64},{0xB7C6, 0x8E65}, - {0xB7C7, 0xB7AD},{0xB7C8, 0x8E66},{0xB7C9, 0xB7AE},{0xB7CA, 0x8E67},{0xB7CB, 0x8E68},{0xB7CC, 0x8E69},{0xB7CD, 0x8E6A},{0xB7CE, 0x8E6B}, - {0xB7CF, 0x8E6C},{0xB7D0, 0x8E6D},{0xB7D1, 0x8E6E},{0xB7D2, 0x8E6F},{0xB7D3, 0x8E70},{0xB7D4, 0x8E71},{0xB7D5, 0x8E72},{0xB7D6, 0x8E73}, - {0xB7D7, 0x8E74},{0xB7D8, 0x8E75},{0xB7D9, 0x8E76},{0xB7DA, 0x8E77},{0xB7DB, 0x8E78},{0xB7DC, 0x8E79},{0xB7DD, 0x8E7A},{0xB7DE, 0x8E81}, - {0xB7DF, 0x8E82},{0xB7E0, 0x8E83},{0xB7E1, 0x8E84},{0xB7E2, 0x8E85},{0xB7E3, 0x8E86},{0xB7E4, 0x8E87},{0xB7E5, 0x8E88},{0xB7E6, 0x8E89}, - {0xB7E7, 0x8E8A},{0xB7E8, 0x8E8B},{0xB7E9, 0x8E8C},{0xB7EA, 0x8E8D},{0xB7EB, 0x8E8E},{0xB7EC, 0xB7AF},{0xB7ED, 0xB7B0},{0xB7EE, 0x8E8F}, - {0xB7EF, 0x8E90},{0xB7F0, 0xB7B1},{0xB7F1, 0x8E91},{0xB7F2, 0x8E92},{0xB7F3, 0x8E93},{0xB7F4, 0xB7B2},{0xB7F5, 0x8E94},{0xB7F6, 0x8E95}, - {0xB7F7, 0x8E96},{0xB7F8, 0x8E97},{0xB7F9, 0x8E98},{0xB7FA, 0x8E99},{0xB7FB, 0x8E9A},{0xB7FC, 0xB7B3},{0xB7FD, 0xB7B4},{0xB7FE, 0x8E9B}, - {0xB7FF, 0xB7B5},{0xB800, 0xB7B6},{0xB801, 0xB7B7},{0xB802, 0x8E9C},{0xB803, 0x8E9D},{0xB804, 0x8E9E},{0xB805, 0x8E9F},{0xB806, 0x8EA0}, - {0xB807, 0xB7B8},{0xB808, 0xB7B9},{0xB809, 0xB7BA},{0xB80A, 0x8EA1},{0xB80B, 0x8EA2},{0xB80C, 0xB7BB},{0xB80D, 0x8EA3},{0xB80E, 0x8EA4}, - {0xB80F, 0x8EA5},{0xB810, 0xB7BC},{0xB811, 0x8EA6},{0xB812, 0x8EA7},{0xB813, 0x8EA8},{0xB814, 0x8EA9},{0xB815, 0x8EAA},{0xB816, 0x8EAB}, - {0xB817, 0x8EAC},{0xB818, 0xB7BD},{0xB819, 0xB7BE},{0xB81A, 0x8EAD},{0xB81B, 0xB7BF},{0xB81C, 0x8EAE},{0xB81D, 0xB7C0},{0xB81E, 0x8EAF}, - {0xB81F, 0x8EB0},{0xB820, 0x8EB1},{0xB821, 0x8EB2},{0xB822, 0x8EB3},{0xB823, 0x8EB4},{0xB824, 0xB7C1},{0xB825, 0xB7C2},{0xB826, 0x8EB5}, - {0xB827, 0x8EB6},{0xB828, 0xB7C3},{0xB829, 0x8EB7},{0xB82A, 0x8EB8},{0xB82B, 0x8EB9},{0xB82C, 0xB7C4},{0xB82D, 0x8EBA},{0xB82E, 0x8EBB}, - {0xB82F, 0x8EBC},{0xB830, 0x8EBD},{0xB831, 0x8EBE},{0xB832, 0x8EBF},{0xB833, 0x8EC0},{0xB834, 0xB7C5},{0xB835, 0xB7C6},{0xB836, 0x8EC1}, - {0xB837, 0xB7C7},{0xB838, 0xB7C8},{0xB839, 0xB7C9},{0xB83A, 0x8EC2},{0xB83B, 0x8EC3},{0xB83C, 0x8EC4},{0xB83D, 0x8EC5},{0xB83E, 0x8EC6}, - {0xB83F, 0x8EC7},{0xB840, 0xB7CA},{0xB841, 0x8EC8},{0xB842, 0x8EC9},{0xB843, 0x8ECA},{0xB844, 0xB7CB},{0xB845, 0x8ECB},{0xB846, 0x8ECC}, - {0xB847, 0x8ECD},{0xB848, 0x8ECE},{0xB849, 0x8ECF},{0xB84A, 0x8ED0},{0xB84B, 0x8ED1},{0xB84C, 0x8ED2},{0xB84D, 0x8ED3},{0xB84E, 0x8ED4}, - {0xB84F, 0x8ED5},{0xB850, 0x8ED6},{0xB851, 0xB7CC},{0xB852, 0x8ED7},{0xB853, 0xB7CD},{0xB854, 0x8ED8},{0xB855, 0x8ED9},{0xB856, 0x8EDA}, - {0xB857, 0x8EDB},{0xB858, 0x8EDC},{0xB859, 0x8EDD},{0xB85A, 0x8EDE},{0xB85B, 0x8EDF},{0xB85C, 0xB7CE},{0xB85D, 0xB7CF},{0xB85E, 0x8EE0}, - {0xB85F, 0x8EE1},{0xB860, 0xB7D0},{0xB861, 0x8EE2},{0xB862, 0x8EE3},{0xB863, 0x8EE4},{0xB864, 0xB7D1},{0xB865, 0x8EE5},{0xB866, 0x8EE6}, - {0xB867, 0x8EE7},{0xB868, 0x8EE8},{0xB869, 0x8EE9},{0xB86A, 0x8EEA},{0xB86B, 0x8EEB},{0xB86C, 0xB7D2},{0xB86D, 0xB7D3},{0xB86E, 0x8EEC}, - {0xB86F, 0xB7D4},{0xB870, 0x8EED},{0xB871, 0xB7D5},{0xB872, 0x8EEE},{0xB873, 0x8EEF},{0xB874, 0x8EF0},{0xB875, 0x8EF1},{0xB876, 0x8EF2}, - {0xB877, 0x8EF3},{0xB878, 0xB7D6},{0xB879, 0x8EF4},{0xB87A, 0x8EF5},{0xB87B, 0x8EF6},{0xB87C, 0xB7D7},{0xB87D, 0x8EF7},{0xB87E, 0x8EF8}, - {0xB87F, 0x8EF9},{0xB880, 0x8EFA},{0xB881, 0x8EFB},{0xB882, 0x8EFC},{0xB883, 0x8EFD},{0xB884, 0x8EFE},{0xB885, 0x8F41},{0xB886, 0x8F42}, - {0xB887, 0x8F43},{0xB888, 0x8F44},{0xB889, 0x8F45},{0xB88A, 0x8F46},{0xB88B, 0x8F47},{0xB88C, 0x8F48},{0xB88D, 0xB7D8},{0xB88E, 0x8F49}, - {0xB88F, 0x8F4A},{0xB890, 0x8F4B},{0xB891, 0x8F4C},{0xB892, 0x8F4D},{0xB893, 0x8F4E},{0xB894, 0x8F4F},{0xB895, 0x8F50},{0xB896, 0x8F51}, - {0xB897, 0x8F52},{0xB898, 0x8F53},{0xB899, 0x8F54},{0xB89A, 0x8F55},{0xB89B, 0x8F56},{0xB89C, 0x8F57},{0xB89D, 0x8F58},{0xB89E, 0x8F59}, - {0xB89F, 0x8F5A},{0xB8A0, 0x8F61},{0xB8A1, 0x8F62},{0xB8A2, 0x8F63},{0xB8A3, 0x8F64},{0xB8A4, 0x8F65},{0xB8A5, 0x8F66},{0xB8A6, 0x8F67}, - {0xB8A7, 0x8F68},{0xB8A8, 0xB7D9},{0xB8A9, 0x8F69},{0xB8AA, 0x8F6A},{0xB8AB, 0x8F6B},{0xB8AC, 0x8F6C},{0xB8AD, 0x8F6D},{0xB8AE, 0x8F6E}, - {0xB8AF, 0x8F6F},{0xB8B0, 0xB7DA},{0xB8B1, 0x8F70},{0xB8B2, 0x8F71},{0xB8B3, 0x8F72},{0xB8B4, 0xB7DB},{0xB8B5, 0x8F73},{0xB8B6, 0x8F74}, - {0xB8B7, 0x8F75},{0xB8B8, 0xB7DC},{0xB8B9, 0x8F76},{0xB8BA, 0x8F77},{0xB8BB, 0x8F78},{0xB8BC, 0x8F79},{0xB8BD, 0x8F7A},{0xB8BE, 0x8F81}, - {0xB8BF, 0x8F82},{0xB8C0, 0xB7DD},{0xB8C1, 0xB7DE},{0xB8C2, 0x8F83},{0xB8C3, 0xB7DF},{0xB8C4, 0x8F84},{0xB8C5, 0xB7E0},{0xB8C6, 0x8F85}, - {0xB8C7, 0x8F86},{0xB8C8, 0x8F87},{0xB8C9, 0x8F88},{0xB8CA, 0x8F89},{0xB8CB, 0x8F8A},{0xB8CC, 0xB7E1},{0xB8CD, 0x8F8B},{0xB8CE, 0x8F8C}, - {0xB8CF, 0x8F8D},{0xB8D0, 0xB7E2},{0xB8D1, 0x8F8E},{0xB8D2, 0x8F8F},{0xB8D3, 0x8F90},{0xB8D4, 0xB7E3},{0xB8D5, 0x8F91},{0xB8D6, 0x8F92}, - {0xB8D7, 0x8F93},{0xB8D8, 0x8F94},{0xB8D9, 0x8F95},{0xB8DA, 0x8F96},{0xB8DB, 0x8F97},{0xB8DC, 0x8F98},{0xB8DD, 0xB7E4},{0xB8DE, 0x8F99}, - {0xB8DF, 0xB7E5},{0xB8E0, 0x8F9A},{0xB8E1, 0xB7E6},{0xB8E2, 0x8F9B},{0xB8E3, 0x8F9C},{0xB8E4, 0x8F9D},{0xB8E5, 0x8F9E},{0xB8E6, 0x8F9F}, - {0xB8E7, 0x8FA0},{0xB8E8, 0xB7E7},{0xB8E9, 0xB7E8},{0xB8EA, 0x8FA1},{0xB8EB, 0x8FA2},{0xB8EC, 0xB7E9},{0xB8ED, 0x8FA3},{0xB8EE, 0x8FA4}, - {0xB8EF, 0x8FA5},{0xB8F0, 0xB7EA},{0xB8F1, 0x8FA6},{0xB8F2, 0x8FA7},{0xB8F3, 0x8FA8},{0xB8F4, 0x8FA9},{0xB8F5, 0x8FAA},{0xB8F6, 0x8FAB}, - {0xB8F7, 0x8FAC},{0xB8F8, 0xB7EB},{0xB8F9, 0xB7EC},{0xB8FA, 0x8FAD},{0xB8FB, 0xB7ED},{0xB8FC, 0x8FAE},{0xB8FD, 0xB7EE},{0xB8FE, 0x8FAF}, - {0xB8FF, 0x8FB0},{0xB900, 0x8FB1},{0xB901, 0x8FB2},{0xB902, 0x8FB3},{0xB903, 0x8FB4},{0xB904, 0xB7EF},{0xB905, 0x8FB5},{0xB906, 0x8FB6}, - {0xB907, 0x8FB7},{0xB908, 0x8FB8},{0xB909, 0x8FB9},{0xB90A, 0x8FBA},{0xB90B, 0x8FBB},{0xB90C, 0x8FBC},{0xB90D, 0x8FBD},{0xB90E, 0x8FBE}, - {0xB90F, 0x8FBF},{0xB910, 0x8FC0},{0xB911, 0x8FC1},{0xB912, 0x8FC2},{0xB913, 0x8FC3},{0xB914, 0x8FC4},{0xB915, 0x8FC5},{0xB916, 0x8FC6}, - {0xB917, 0x8FC7},{0xB918, 0xB7F0},{0xB919, 0x8FC8},{0xB91A, 0x8FC9},{0xB91B, 0x8FCA},{0xB91C, 0x8FCB},{0xB91D, 0x8FCC},{0xB91E, 0x8FCD}, - {0xB91F, 0x8FCE},{0xB920, 0xB7F1},{0xB921, 0x8FCF},{0xB922, 0x8FD0},{0xB923, 0x8FD1},{0xB924, 0x8FD2},{0xB925, 0x8FD3},{0xB926, 0x8FD4}, - {0xB927, 0x8FD5},{0xB928, 0x8FD6},{0xB929, 0x8FD7},{0xB92A, 0x8FD8},{0xB92B, 0x8FD9},{0xB92C, 0x8FDA},{0xB92D, 0x8FDB},{0xB92E, 0x8FDC}, - {0xB92F, 0x8FDD},{0xB930, 0x8FDE},{0xB931, 0x8FDF},{0xB932, 0x8FE0},{0xB933, 0x8FE1},{0xB934, 0x8FE2},{0xB935, 0x8FE3},{0xB936, 0x8FE4}, - {0xB937, 0x8FE5},{0xB938, 0x8FE6},{0xB939, 0x8FE7},{0xB93A, 0x8FE8},{0xB93B, 0x8FE9},{0xB93C, 0xB7F2},{0xB93D, 0xB7F3},{0xB93E, 0x8FEA}, - {0xB93F, 0x8FEB},{0xB940, 0xB7F4},{0xB941, 0x8FEC},{0xB942, 0x8FED},{0xB943, 0x8FEE},{0xB944, 0xB7F5},{0xB945, 0x8FEF},{0xB946, 0x8FF0}, - {0xB947, 0x8FF1},{0xB948, 0x8FF2},{0xB949, 0x8FF3},{0xB94A, 0x8FF4},{0xB94B, 0x8FF5},{0xB94C, 0xB7F6},{0xB94D, 0x8FF6},{0xB94E, 0x8FF7}, - {0xB94F, 0xB7F7},{0xB950, 0x8FF8},{0xB951, 0xB7F8},{0xB952, 0x8FF9},{0xB953, 0x8FFA},{0xB954, 0x8FFB},{0xB955, 0x8FFC},{0xB956, 0x8FFD}, - {0xB957, 0x8FFE},{0xB958, 0xB7F9},{0xB959, 0xB7FA},{0xB95A, 0x9041},{0xB95B, 0x9042},{0xB95C, 0xB7FB},{0xB95D, 0x9043},{0xB95E, 0x9044}, - {0xB95F, 0x9045},{0xB960, 0xB7FC},{0xB961, 0x9046},{0xB962, 0x9047},{0xB963, 0x9048},{0xB964, 0x9049},{0xB965, 0x904A},{0xB966, 0x904B}, - {0xB967, 0x904C},{0xB968, 0xB7FD},{0xB969, 0xB7FE},{0xB96A, 0x904D},{0xB96B, 0xB8A1},{0xB96C, 0x904E},{0xB96D, 0xB8A2},{0xB96E, 0x904F}, - {0xB96F, 0x9050},{0xB970, 0x9051},{0xB971, 0x9052},{0xB972, 0x9053},{0xB973, 0x9054},{0xB974, 0xB8A3},{0xB975, 0xB8A4},{0xB976, 0x9055}, - {0xB977, 0x9056},{0xB978, 0xB8A5},{0xB979, 0x9057},{0xB97A, 0x9058},{0xB97B, 0x9059},{0xB97C, 0xB8A6},{0xB97D, 0x905A},{0xB97E, 0x9061}, - {0xB97F, 0x9062},{0xB980, 0x9063},{0xB981, 0x9064},{0xB982, 0x9065},{0xB983, 0x9066},{0xB984, 0xB8A7},{0xB985, 0xB8A8},{0xB986, 0x9067}, - {0xB987, 0xB8A9},{0xB988, 0x9068},{0xB989, 0xB8AA},{0xB98A, 0xB8AB},{0xB98B, 0x9069},{0xB98C, 0x906A},{0xB98D, 0xB8AC},{0xB98E, 0xB8AD}, - {0xB98F, 0x906B},{0xB990, 0x906C},{0xB991, 0x906D},{0xB992, 0x906E},{0xB993, 0x906F},{0xB994, 0x9070},{0xB995, 0x9071},{0xB996, 0x9072}, - {0xB997, 0x9073},{0xB998, 0x9074},{0xB999, 0x9075},{0xB99A, 0x9076},{0xB99B, 0x9077},{0xB99C, 0x9078},{0xB99D, 0x9079},{0xB99E, 0x907A}, - {0xB99F, 0x9081},{0xB9A0, 0x9082},{0xB9A1, 0x9083},{0xB9A2, 0x9084},{0xB9A3, 0x9085},{0xB9A4, 0x9086},{0xB9A5, 0x9087},{0xB9A6, 0x9088}, - {0xB9A7, 0x9089},{0xB9A8, 0x908A},{0xB9A9, 0x908B},{0xB9AA, 0x908C},{0xB9AB, 0x908D},{0xB9AC, 0xB8AE},{0xB9AD, 0xB8AF},{0xB9AE, 0x908E}, - {0xB9AF, 0x908F},{0xB9B0, 0xB8B0},{0xB9B1, 0x9090},{0xB9B2, 0x9091},{0xB9B3, 0x9092},{0xB9B4, 0xB8B1},{0xB9B5, 0x9093},{0xB9B6, 0x9094}, - {0xB9B7, 0x9095},{0xB9B8, 0x9096},{0xB9B9, 0x9097},{0xB9BA, 0x9098},{0xB9BB, 0x9099},{0xB9BC, 0xB8B2},{0xB9BD, 0xB8B3},{0xB9BE, 0x909A}, - {0xB9BF, 0xB8B4},{0xB9C0, 0x909B},{0xB9C1, 0xB8B5},{0xB9C2, 0x909C},{0xB9C3, 0x909D},{0xB9C4, 0x909E},{0xB9C5, 0x909F},{0xB9C6, 0x90A0}, - {0xB9C7, 0x90A1},{0xB9C8, 0xB8B6},{0xB9C9, 0xB8B7},{0xB9CA, 0x90A2},{0xB9CB, 0x90A3},{0xB9CC, 0xB8B8},{0xB9CD, 0x90A4},{0xB9CE, 0xB8B9}, - {0xB9CF, 0xB8BA},{0xB9D0, 0xB8BB},{0xB9D1, 0xB8BC},{0xB9D2, 0xB8BD},{0xB9D3, 0x90A5},{0xB9D4, 0x90A6},{0xB9D5, 0x90A7},{0xB9D6, 0x90A8}, - {0xB9D7, 0x90A9},{0xB9D8, 0xB8BE},{0xB9D9, 0xB8BF},{0xB9DA, 0x90AA},{0xB9DB, 0xB8C0},{0xB9DC, 0x90AB},{0xB9DD, 0xB8C1},{0xB9DE, 0xB8C2}, - {0xB9DF, 0x90AC},{0xB9E0, 0x90AD},{0xB9E1, 0xB8C3},{0xB9E2, 0x90AE},{0xB9E3, 0xB8C4},{0xB9E4, 0xB8C5},{0xB9E5, 0xB8C6},{0xB9E6, 0x90AF}, - {0xB9E7, 0x90B0},{0xB9E8, 0xB8C7},{0xB9E9, 0x90B1},{0xB9EA, 0x90B2},{0xB9EB, 0x90B3},{0xB9EC, 0xB8C8},{0xB9ED, 0x90B4},{0xB9EE, 0x90B5}, - {0xB9EF, 0x90B6},{0xB9F0, 0x90B7},{0xB9F1, 0x90B8},{0xB9F2, 0x90B9},{0xB9F3, 0x90BA},{0xB9F4, 0xB8C9},{0xB9F5, 0xB8CA},{0xB9F6, 0x90BB}, - {0xB9F7, 0xB8CB},{0xB9F8, 0xB8CC},{0xB9F9, 0xB8CD},{0xB9FA, 0xB8CE},{0xB9FB, 0x90BC},{0xB9FC, 0x90BD},{0xB9FD, 0x90BE},{0xB9FE, 0x90BF}, - {0xB9FF, 0x90C0},{0xBA00, 0xB8CF},{0xBA01, 0xB8D0},{0xBA02, 0x90C1},{0xBA03, 0x90C2},{0xBA04, 0x90C3},{0xBA05, 0x90C4},{0xBA06, 0x90C5}, - {0xBA07, 0x90C6},{0xBA08, 0xB8D1},{0xBA09, 0x90C7},{0xBA0A, 0x90C8},{0xBA0B, 0x90C9},{0xBA0C, 0x90CA},{0xBA0D, 0x90CB},{0xBA0E, 0x90CC}, - {0xBA0F, 0x90CD},{0xBA10, 0x90CE},{0xBA11, 0x90CF},{0xBA12, 0x90D0},{0xBA13, 0x90D1},{0xBA14, 0x90D2},{0xBA15, 0xB8D2},{0xBA16, 0x90D3}, - {0xBA17, 0x90D4},{0xBA18, 0x90D5},{0xBA19, 0x90D6},{0xBA1A, 0x90D7},{0xBA1B, 0x90D8},{0xBA1C, 0x90D9},{0xBA1D, 0x90DA},{0xBA1E, 0x90DB}, - {0xBA1F, 0x90DC},{0xBA20, 0x90DD},{0xBA21, 0x90DE},{0xBA22, 0x90DF},{0xBA23, 0x90E0},{0xBA24, 0x90E1},{0xBA25, 0x90E2},{0xBA26, 0x90E3}, - {0xBA27, 0x90E4},{0xBA28, 0x90E5},{0xBA29, 0x90E6},{0xBA2A, 0x90E7},{0xBA2B, 0x90E8},{0xBA2C, 0x90E9},{0xBA2D, 0x90EA},{0xBA2E, 0x90EB}, - {0xBA2F, 0x90EC},{0xBA30, 0x90ED},{0xBA31, 0x90EE},{0xBA32, 0x90EF},{0xBA33, 0x90F0},{0xBA34, 0x90F1},{0xBA35, 0x90F2},{0xBA36, 0x90F3}, - {0xBA37, 0x90F4},{0xBA38, 0xB8D3},{0xBA39, 0xB8D4},{0xBA3A, 0x90F5},{0xBA3B, 0x90F6},{0xBA3C, 0xB8D5},{0xBA3D, 0x90F7},{0xBA3E, 0x90F8}, - {0xBA3F, 0x90F9},{0xBA40, 0xB8D6},{0xBA41, 0x90FA},{0xBA42, 0xB8D7},{0xBA43, 0x90FB},{0xBA44, 0x90FC},{0xBA45, 0x90FD},{0xBA46, 0x90FE}, - {0xBA47, 0x9141},{0xBA48, 0xB8D8},{0xBA49, 0xB8D9},{0xBA4A, 0x9142},{0xBA4B, 0xB8DA},{0xBA4C, 0x9143},{0xBA4D, 0xB8DB},{0xBA4E, 0xB8DC}, - {0xBA4F, 0x9144},{0xBA50, 0x9145},{0xBA51, 0x9146},{0xBA52, 0x9147},{0xBA53, 0xB8DD},{0xBA54, 0xB8DE},{0xBA55, 0xB8DF},{0xBA56, 0x9148}, - {0xBA57, 0x9149},{0xBA58, 0xB8E0},{0xBA59, 0x914A},{0xBA5A, 0x914B},{0xBA5B, 0x914C},{0xBA5C, 0xB8E1},{0xBA5D, 0x914D},{0xBA5E, 0x914E}, - {0xBA5F, 0x914F},{0xBA60, 0x9150},{0xBA61, 0x9151},{0xBA62, 0x9152},{0xBA63, 0x9153},{0xBA64, 0xB8E2},{0xBA65, 0xB8E3},{0xBA66, 0x9154}, - {0xBA67, 0xB8E4},{0xBA68, 0xB8E5},{0xBA69, 0xB8E6},{0xBA6A, 0x9155},{0xBA6B, 0x9156},{0xBA6C, 0x9157},{0xBA6D, 0x9158},{0xBA6E, 0x9159}, - {0xBA6F, 0x915A},{0xBA70, 0xB8E7},{0xBA71, 0xB8E8},{0xBA72, 0x9161},{0xBA73, 0x9162},{0xBA74, 0xB8E9},{0xBA75, 0x9163},{0xBA76, 0x9164}, - {0xBA77, 0x9165},{0xBA78, 0xB8EA},{0xBA79, 0x9166},{0xBA7A, 0x9167},{0xBA7B, 0x9168},{0xBA7C, 0x9169},{0xBA7D, 0x916A},{0xBA7E, 0x916B}, - {0xBA7F, 0x916C},{0xBA80, 0x916D},{0xBA81, 0x916E},{0xBA82, 0x916F},{0xBA83, 0xB8EB},{0xBA84, 0xB8EC},{0xBA85, 0xB8ED},{0xBA86, 0x9170}, - {0xBA87, 0xB8EE},{0xBA88, 0x9171},{0xBA89, 0x9172},{0xBA8A, 0x9173},{0xBA8B, 0x9174},{0xBA8C, 0xB8EF},{0xBA8D, 0x9175},{0xBA8E, 0x9176}, - {0xBA8F, 0x9177},{0xBA90, 0x9178},{0xBA91, 0x9179},{0xBA92, 0x917A},{0xBA93, 0x9181},{0xBA94, 0x9182},{0xBA95, 0x9183},{0xBA96, 0x9184}, - {0xBA97, 0x9185},{0xBA98, 0x9186},{0xBA99, 0x9187},{0xBA9A, 0x9188},{0xBA9B, 0x9189},{0xBA9C, 0x918A},{0xBA9D, 0x918B},{0xBA9E, 0x918C}, - {0xBA9F, 0x918D},{0xBAA0, 0x918E},{0xBAA1, 0x918F},{0xBAA2, 0x9190},{0xBAA3, 0x9191},{0xBAA4, 0x9192},{0xBAA5, 0x9193},{0xBAA6, 0x9194}, - {0xBAA7, 0x9195},{0xBAA8, 0xB8F0},{0xBAA9, 0xB8F1},{0xBAAA, 0x9196},{0xBAAB, 0xB8F2},{0xBAAC, 0xB8F3},{0xBAAD, 0x9197},{0xBAAE, 0x9198}, - {0xBAAF, 0x9199},{0xBAB0, 0xB8F4},{0xBAB1, 0x919A},{0xBAB2, 0xB8F5},{0xBAB3, 0x919B},{0xBAB4, 0x919C},{0xBAB5, 0x919D},{0xBAB6, 0x919E}, - {0xBAB7, 0x919F},{0xBAB8, 0xB8F6},{0xBAB9, 0xB8F7},{0xBABA, 0x91A0},{0xBABB, 0xB8F8},{0xBABC, 0x91A1},{0xBABD, 0xB8F9},{0xBABE, 0x91A2}, - {0xBABF, 0x91A3},{0xBAC0, 0x91A4},{0xBAC1, 0x91A5},{0xBAC2, 0x91A6},{0xBAC3, 0x91A7},{0xBAC4, 0xB8FA},{0xBAC5, 0x91A8},{0xBAC6, 0x91A9}, - {0xBAC7, 0x91AA},{0xBAC8, 0xB8FB},{0xBAC9, 0x91AB},{0xBACA, 0x91AC},{0xBACB, 0x91AD},{0xBACC, 0x91AE},{0xBACD, 0x91AF},{0xBACE, 0x91B0}, - {0xBACF, 0x91B1},{0xBAD0, 0x91B2},{0xBAD1, 0x91B3},{0xBAD2, 0x91B4},{0xBAD3, 0x91B5},{0xBAD4, 0x91B6},{0xBAD5, 0x91B7},{0xBAD6, 0x91B8}, - {0xBAD7, 0x91B9},{0xBAD8, 0xB8FC},{0xBAD9, 0xB8FD},{0xBADA, 0x91BA},{0xBADB, 0x91BB},{0xBADC, 0x91BC},{0xBADD, 0x91BD},{0xBADE, 0x91BE}, - {0xBADF, 0x91BF},{0xBAE0, 0x91C0},{0xBAE1, 0x91C1},{0xBAE2, 0x91C2},{0xBAE3, 0x91C3},{0xBAE4, 0x91C4},{0xBAE5, 0x91C5},{0xBAE6, 0x91C6}, - {0xBAE7, 0x91C7},{0xBAE8, 0x91C8},{0xBAE9, 0x91C9},{0xBAEA, 0x91CA},{0xBAEB, 0x91CB},{0xBAEC, 0x91CC},{0xBAED, 0x91CD},{0xBAEE, 0x91CE}, - {0xBAEF, 0x91CF},{0xBAF0, 0x91D0},{0xBAF1, 0x91D1},{0xBAF2, 0x91D2},{0xBAF3, 0x91D3},{0xBAF4, 0x91D4},{0xBAF5, 0x91D5},{0xBAF6, 0x91D6}, - {0xBAF7, 0x91D7},{0xBAF8, 0x91D8},{0xBAF9, 0x91D9},{0xBAFA, 0x91DA},{0xBAFB, 0x91DB},{0xBAFC, 0xB8FE},{0xBAFD, 0x91DC},{0xBAFE, 0x91DD}, - {0xBAFF, 0x91DE},{0xBB00, 0xB9A1},{0xBB01, 0x91DF},{0xBB02, 0x91E0},{0xBB03, 0x91E1},{0xBB04, 0xB9A2},{0xBB05, 0x91E2},{0xBB06, 0x91E3}, - {0xBB07, 0x91E4},{0xBB08, 0x91E5},{0xBB09, 0x91E6},{0xBB0A, 0x91E7},{0xBB0B, 0x91E8},{0xBB0C, 0x91E9},{0xBB0D, 0xB9A3},{0xBB0E, 0x91EA}, - {0xBB0F, 0xB9A4},{0xBB10, 0x91EB},{0xBB11, 0xB9A5},{0xBB12, 0x91EC},{0xBB13, 0x91ED},{0xBB14, 0x91EE},{0xBB15, 0x91EF},{0xBB16, 0x91F0}, - {0xBB17, 0x91F1},{0xBB18, 0xB9A6},{0xBB19, 0x91F2},{0xBB1A, 0x91F3},{0xBB1B, 0x91F4},{0xBB1C, 0xB9A7},{0xBB1D, 0x91F5},{0xBB1E, 0x91F6}, - {0xBB1F, 0x91F7},{0xBB20, 0xB9A8},{0xBB21, 0x91F8},{0xBB22, 0x91F9},{0xBB23, 0x91FA},{0xBB24, 0x91FB},{0xBB25, 0x91FC},{0xBB26, 0x91FD}, - {0xBB27, 0x91FE},{0xBB28, 0x9241},{0xBB29, 0xB9A9},{0xBB2A, 0x9242},{0xBB2B, 0xB9AA},{0xBB2C, 0x9243},{0xBB2D, 0x9244},{0xBB2E, 0x9245}, - {0xBB2F, 0x9246},{0xBB30, 0x9247},{0xBB31, 0x9248},{0xBB32, 0x9249},{0xBB33, 0x924A},{0xBB34, 0xB9AB},{0xBB35, 0xB9AC},{0xBB36, 0xB9AD}, - {0xBB37, 0x924B},{0xBB38, 0xB9AE},{0xBB39, 0x924C},{0xBB3A, 0x924D},{0xBB3B, 0xB9AF},{0xBB3C, 0xB9B0},{0xBB3D, 0xB9B1},{0xBB3E, 0xB9B2}, - {0xBB3F, 0x924E},{0xBB40, 0x924F},{0xBB41, 0x9250},{0xBB42, 0x9251},{0xBB43, 0x9252},{0xBB44, 0xB9B3},{0xBB45, 0xB9B4},{0xBB46, 0x9253}, - {0xBB47, 0xB9B5},{0xBB48, 0x9254},{0xBB49, 0xB9B6},{0xBB4A, 0x9255},{0xBB4B, 0x9256},{0xBB4C, 0x9257},{0xBB4D, 0xB9B7},{0xBB4E, 0x9258}, - {0xBB4F, 0xB9B8},{0xBB50, 0xB9B9},{0xBB51, 0x9259},{0xBB52, 0x925A},{0xBB53, 0x9261},{0xBB54, 0xB9BA},{0xBB55, 0x9262},{0xBB56, 0x9263}, - {0xBB57, 0x9264},{0xBB58, 0xB9BB},{0xBB59, 0x9265},{0xBB5A, 0x9266},{0xBB5B, 0x9267},{0xBB5C, 0x9268},{0xBB5D, 0x9269},{0xBB5E, 0x926A}, - {0xBB5F, 0x926B},{0xBB60, 0x926C},{0xBB61, 0xB9BC},{0xBB62, 0x926D},{0xBB63, 0xB9BD},{0xBB64, 0x926E},{0xBB65, 0x926F},{0xBB66, 0x9270}, - {0xBB67, 0x9271},{0xBB68, 0x9272},{0xBB69, 0x9273},{0xBB6A, 0x9274},{0xBB6B, 0x9275},{0xBB6C, 0xB9BE},{0xBB6D, 0x9276},{0xBB6E, 0x9277}, - {0xBB6F, 0x9278},{0xBB70, 0x9279},{0xBB71, 0x927A},{0xBB72, 0x9281},{0xBB73, 0x9282},{0xBB74, 0x9283},{0xBB75, 0x9284},{0xBB76, 0x9285}, - {0xBB77, 0x9286},{0xBB78, 0x9287},{0xBB79, 0x9288},{0xBB7A, 0x9289},{0xBB7B, 0x928A},{0xBB7C, 0x928B},{0xBB7D, 0x928C},{0xBB7E, 0x928D}, - {0xBB7F, 0x928E},{0xBB80, 0x928F},{0xBB81, 0x9290},{0xBB82, 0x9291},{0xBB83, 0x9292},{0xBB84, 0x9293},{0xBB85, 0x9294},{0xBB86, 0x9295}, - {0xBB87, 0x9296},{0xBB88, 0xB9BF},{0xBB89, 0x9297},{0xBB8A, 0x9298},{0xBB8B, 0x9299},{0xBB8C, 0xB9C0},{0xBB8D, 0x929A},{0xBB8E, 0x929B}, - {0xBB8F, 0x929C},{0xBB90, 0xB9C1},{0xBB91, 0x929D},{0xBB92, 0x929E},{0xBB93, 0x929F},{0xBB94, 0x92A0},{0xBB95, 0x92A1},{0xBB96, 0x92A2}, - {0xBB97, 0x92A3},{0xBB98, 0x92A4},{0xBB99, 0x92A5},{0xBB9A, 0x92A6},{0xBB9B, 0x92A7},{0xBB9C, 0x92A8},{0xBB9D, 0x92A9},{0xBB9E, 0x92AA}, - {0xBB9F, 0x92AB},{0xBBA0, 0x92AC},{0xBBA1, 0x92AD},{0xBBA2, 0x92AE},{0xBBA3, 0x92AF},{0xBBA4, 0xB9C2},{0xBBA5, 0x92B0},{0xBBA6, 0x92B1}, - {0xBBA7, 0x92B2},{0xBBA8, 0xB9C3},{0xBBA9, 0x92B3},{0xBBAA, 0x92B4},{0xBBAB, 0x92B5},{0xBBAC, 0xB9C4},{0xBBAD, 0x92B6},{0xBBAE, 0x92B7}, - {0xBBAF, 0x92B8},{0xBBB0, 0x92B9},{0xBBB1, 0x92BA},{0xBBB2, 0x92BB},{0xBBB3, 0x92BC},{0xBBB4, 0xB9C5},{0xBBB5, 0x92BD},{0xBBB6, 0x92BE}, - {0xBBB7, 0xB9C6},{0xBBB8, 0x92BF},{0xBBB9, 0x92C0},{0xBBBA, 0x92C1},{0xBBBB, 0x92C2},{0xBBBC, 0x92C3},{0xBBBD, 0x92C4},{0xBBBE, 0x92C5}, - {0xBBBF, 0x92C6},{0xBBC0, 0xB9C7},{0xBBC1, 0x92C7},{0xBBC2, 0x92C8},{0xBBC3, 0x92C9},{0xBBC4, 0xB9C8},{0xBBC5, 0x92CA},{0xBBC6, 0x92CB}, - {0xBBC7, 0x92CC},{0xBBC8, 0xB9C9},{0xBBC9, 0x92CD},{0xBBCA, 0x92CE},{0xBBCB, 0x92CF},{0xBBCC, 0x92D0},{0xBBCD, 0x92D1},{0xBBCE, 0x92D2}, - {0xBBCF, 0x92D3},{0xBBD0, 0xB9CA},{0xBBD1, 0x92D4},{0xBBD2, 0x92D5},{0xBBD3, 0xB9CB},{0xBBD4, 0x92D6},{0xBBD5, 0x92D7},{0xBBD6, 0x92D8}, - {0xBBD7, 0x92D9},{0xBBD8, 0x92DA},{0xBBD9, 0x92DB},{0xBBDA, 0x92DC},{0xBBDB, 0x92DD},{0xBBDC, 0x92DE},{0xBBDD, 0x92DF},{0xBBDE, 0x92E0}, - {0xBBDF, 0x92E1},{0xBBE0, 0x92E2},{0xBBE1, 0x92E3},{0xBBE2, 0x92E4},{0xBBE3, 0x92E5},{0xBBE4, 0x92E6},{0xBBE5, 0x92E7},{0xBBE6, 0x92E8}, - {0xBBE7, 0x92E9},{0xBBE8, 0x92EA},{0xBBE9, 0x92EB},{0xBBEA, 0x92EC},{0xBBEB, 0x92ED},{0xBBEC, 0x92EE},{0xBBED, 0x92EF},{0xBBEE, 0x92F0}, - {0xBBEF, 0x92F1},{0xBBF0, 0x92F2},{0xBBF1, 0x92F3},{0xBBF2, 0x92F4},{0xBBF3, 0x92F5},{0xBBF4, 0x92F6},{0xBBF5, 0x92F7},{0xBBF6, 0x92F8}, - {0xBBF7, 0x92F9},{0xBBF8, 0xB9CC},{0xBBF9, 0xB9CD},{0xBBFA, 0x92FA},{0xBBFB, 0x92FB},{0xBBFC, 0xB9CE},{0xBBFD, 0x92FC},{0xBBFE, 0x92FD}, - {0xBBFF, 0xB9CF},{0xBC00, 0xB9D0},{0xBC01, 0x92FE},{0xBC02, 0xB9D1},{0xBC03, 0x9341},{0xBC04, 0x9342},{0xBC05, 0x9343},{0xBC06, 0x9344}, - {0xBC07, 0x9345},{0xBC08, 0xB9D2},{0xBC09, 0xB9D3},{0xBC0A, 0x9346},{0xBC0B, 0xB9D4},{0xBC0C, 0xB9D5},{0xBC0D, 0xB9D6},{0xBC0E, 0x9347}, - {0xBC0F, 0xB9D7},{0xBC10, 0x9348},{0xBC11, 0xB9D8},{0xBC12, 0x9349},{0xBC13, 0x934A},{0xBC14, 0xB9D9},{0xBC15, 0xB9DA},{0xBC16, 0xB9DB}, - {0xBC17, 0xB9DC},{0xBC18, 0xB9DD},{0xBC19, 0x934B},{0xBC1A, 0x934C},{0xBC1B, 0xB9DE},{0xBC1C, 0xB9DF},{0xBC1D, 0xB9E0},{0xBC1E, 0xB9E1}, - {0xBC1F, 0xB9E2},{0xBC20, 0x934D},{0xBC21, 0x934E},{0xBC22, 0x934F},{0xBC23, 0x9350},{0xBC24, 0xB9E3},{0xBC25, 0xB9E4},{0xBC26, 0x9351}, - {0xBC27, 0xB9E5},{0xBC28, 0x9352},{0xBC29, 0xB9E6},{0xBC2A, 0x9353},{0xBC2B, 0x9354},{0xBC2C, 0x9355},{0xBC2D, 0xB9E7},{0xBC2E, 0x9356}, - {0xBC2F, 0x9357},{0xBC30, 0xB9E8},{0xBC31, 0xB9E9},{0xBC32, 0x9358},{0xBC33, 0x9359},{0xBC34, 0xB9EA},{0xBC35, 0x935A},{0xBC36, 0x9361}, - {0xBC37, 0x9362},{0xBC38, 0xB9EB},{0xBC39, 0x9363},{0xBC3A, 0x9364},{0xBC3B, 0x9365},{0xBC3C, 0x9366},{0xBC3D, 0x9367},{0xBC3E, 0x9368}, - {0xBC3F, 0x9369},{0xBC40, 0xB9EC},{0xBC41, 0xB9ED},{0xBC42, 0x936A},{0xBC43, 0xB9EE},{0xBC44, 0xB9EF},{0xBC45, 0xB9F0},{0xBC46, 0x936B}, - {0xBC47, 0x936C},{0xBC48, 0x936D},{0xBC49, 0xB9F1},{0xBC4A, 0x936E},{0xBC4B, 0x936F},{0xBC4C, 0xB9F2},{0xBC4D, 0xB9F3},{0xBC4E, 0x9370}, - {0xBC4F, 0x9371},{0xBC50, 0xB9F4},{0xBC51, 0x9372},{0xBC52, 0x9373},{0xBC53, 0x9374},{0xBC54, 0x9375},{0xBC55, 0x9376},{0xBC56, 0x9377}, - {0xBC57, 0x9378},{0xBC58, 0x9379},{0xBC59, 0x937A},{0xBC5A, 0x9381},{0xBC5B, 0x9382},{0xBC5C, 0x9383},{0xBC5D, 0xB9F5},{0xBC5E, 0x9384}, - {0xBC5F, 0x9385},{0xBC60, 0x9386},{0xBC61, 0x9387},{0xBC62, 0x9388},{0xBC63, 0x9389},{0xBC64, 0x938A},{0xBC65, 0x938B},{0xBC66, 0x938C}, - {0xBC67, 0x938D},{0xBC68, 0x938E},{0xBC69, 0x938F},{0xBC6A, 0x9390},{0xBC6B, 0x9391},{0xBC6C, 0x9392},{0xBC6D, 0x9393},{0xBC6E, 0x9394}, - {0xBC6F, 0x9395},{0xBC70, 0x9396},{0xBC71, 0x9397},{0xBC72, 0x9398},{0xBC73, 0x9399},{0xBC74, 0x939A},{0xBC75, 0x939B},{0xBC76, 0x939C}, - {0xBC77, 0x939D},{0xBC78, 0x939E},{0xBC79, 0x939F},{0xBC7A, 0x93A0},{0xBC7B, 0x93A1},{0xBC7C, 0x93A2},{0xBC7D, 0x93A3},{0xBC7E, 0x93A4}, - {0xBC7F, 0x93A5},{0xBC80, 0x93A6},{0xBC81, 0x93A7},{0xBC82, 0x93A8},{0xBC83, 0x93A9},{0xBC84, 0xB9F6},{0xBC85, 0xB9F7},{0xBC86, 0x93AA}, - {0xBC87, 0x93AB},{0xBC88, 0xB9F8},{0xBC89, 0x93AC},{0xBC8A, 0x93AD},{0xBC8B, 0xB9F9},{0xBC8C, 0xB9FA},{0xBC8D, 0x93AE},{0xBC8E, 0xB9FB}, - {0xBC8F, 0x93AF},{0xBC90, 0x93B0},{0xBC91, 0x93B1},{0xBC92, 0x93B2},{0xBC93, 0x93B3},{0xBC94, 0xB9FC},{0xBC95, 0xB9FD},{0xBC96, 0x93B4}, - {0xBC97, 0xB9FE},{0xBC98, 0x93B5},{0xBC99, 0xBAA1},{0xBC9A, 0xBAA2},{0xBC9B, 0x93B6},{0xBC9C, 0x93B7},{0xBC9D, 0x93B8},{0xBC9E, 0x93B9}, - {0xBC9F, 0x93BA},{0xBCA0, 0xBAA3},{0xBCA1, 0xBAA4},{0xBCA2, 0x93BB},{0xBCA3, 0x93BC},{0xBCA4, 0xBAA5},{0xBCA5, 0x93BD},{0xBCA6, 0x93BE}, - {0xBCA7, 0xBAA6},{0xBCA8, 0xBAA7},{0xBCA9, 0x93BF},{0xBCAA, 0x93C0},{0xBCAB, 0x93C1},{0xBCAC, 0x93C2},{0xBCAD, 0x93C3},{0xBCAE, 0x93C4}, - {0xBCAF, 0x93C5},{0xBCB0, 0xBAA8},{0xBCB1, 0xBAA9},{0xBCB2, 0x93C6},{0xBCB3, 0xBAAA},{0xBCB4, 0xBAAB},{0xBCB5, 0xBAAC},{0xBCB6, 0x93C7}, - {0xBCB7, 0x93C8},{0xBCB8, 0x93C9},{0xBCB9, 0x93CA},{0xBCBA, 0x93CB},{0xBCBB, 0x93CC},{0xBCBC, 0xBAAD},{0xBCBD, 0xBAAE},{0xBCBE, 0x93CD}, - {0xBCBF, 0x93CE},{0xBCC0, 0xBAAF},{0xBCC1, 0x93CF},{0xBCC2, 0x93D0},{0xBCC3, 0x93D1},{0xBCC4, 0xBAB0},{0xBCC5, 0x93D2},{0xBCC6, 0x93D3}, - {0xBCC7, 0x93D4},{0xBCC8, 0x93D5},{0xBCC9, 0x93D6},{0xBCCA, 0x93D7},{0xBCCB, 0x93D8},{0xBCCC, 0x93D9},{0xBCCD, 0xBAB1},{0xBCCE, 0x93DA}, - {0xBCCF, 0xBAB2},{0xBCD0, 0xBAB3},{0xBCD1, 0xBAB4},{0xBCD2, 0x93DB},{0xBCD3, 0x93DC},{0xBCD4, 0x93DD},{0xBCD5, 0xBAB5},{0xBCD6, 0x93DE}, - {0xBCD7, 0x93DF},{0xBCD8, 0xBAB6},{0xBCD9, 0x93E0},{0xBCDA, 0x93E1},{0xBCDB, 0x93E2},{0xBCDC, 0xBAB7},{0xBCDD, 0x93E3},{0xBCDE, 0x93E4}, - {0xBCDF, 0x93E5},{0xBCE0, 0x93E6},{0xBCE1, 0x93E7},{0xBCE2, 0x93E8},{0xBCE3, 0x93E9},{0xBCE4, 0x93EA},{0xBCE5, 0x93EB},{0xBCE6, 0x93EC}, - {0xBCE7, 0x93ED},{0xBCE8, 0x93EE},{0xBCE9, 0x93EF},{0xBCEA, 0x93F0},{0xBCEB, 0x93F1},{0xBCEC, 0x93F2},{0xBCED, 0x93F3},{0xBCEE, 0x93F4}, - {0xBCEF, 0x93F5},{0xBCF0, 0x93F6},{0xBCF1, 0x93F7},{0xBCF2, 0x93F8},{0xBCF3, 0x93F9},{0xBCF4, 0xBAB8},{0xBCF5, 0xBAB9},{0xBCF6, 0xBABA}, - {0xBCF7, 0x93FA},{0xBCF8, 0xBABB},{0xBCF9, 0x93FB},{0xBCFA, 0x93FC},{0xBCFB, 0x93FD},{0xBCFC, 0xBABC},{0xBCFD, 0x93FE},{0xBCFE, 0x9441}, - {0xBCFF, 0x9442},{0xBD00, 0x9443},{0xBD01, 0x9444},{0xBD02, 0x9445},{0xBD03, 0x9446},{0xBD04, 0xBABD},{0xBD05, 0xBABE},{0xBD06, 0x9447}, - {0xBD07, 0xBABF},{0xBD08, 0x9448},{0xBD09, 0xBAC0},{0xBD0A, 0x9449},{0xBD0B, 0x944A},{0xBD0C, 0x944B},{0xBD0D, 0x944C},{0xBD0E, 0x944D}, - {0xBD0F, 0x944E},{0xBD10, 0xBAC1},{0xBD11, 0x944F},{0xBD12, 0x9450},{0xBD13, 0x9451},{0xBD14, 0xBAC2},{0xBD15, 0x9452},{0xBD16, 0x9453}, - {0xBD17, 0x9454},{0xBD18, 0x9455},{0xBD19, 0x9456},{0xBD1A, 0x9457},{0xBD1B, 0x9458},{0xBD1C, 0x9459},{0xBD1D, 0x945A},{0xBD1E, 0x9461}, - {0xBD1F, 0x9462},{0xBD20, 0x9463},{0xBD21, 0x9464},{0xBD22, 0x9465},{0xBD23, 0x9466},{0xBD24, 0xBAC3},{0xBD25, 0x9467},{0xBD26, 0x9468}, - {0xBD27, 0x9469},{0xBD28, 0x946A},{0xBD29, 0x946B},{0xBD2A, 0x946C},{0xBD2B, 0x946D},{0xBD2C, 0xBAC4},{0xBD2D, 0x946E},{0xBD2E, 0x946F}, - {0xBD2F, 0x9470},{0xBD30, 0x9471},{0xBD31, 0x9472},{0xBD32, 0x9473},{0xBD33, 0x9474},{0xBD34, 0x9475},{0xBD35, 0x9476},{0xBD36, 0x9477}, - {0xBD37, 0x9478},{0xBD38, 0x9479},{0xBD39, 0x947A},{0xBD3A, 0x9481},{0xBD3B, 0x9482},{0xBD3C, 0x9483},{0xBD3D, 0x9484},{0xBD3E, 0x9485}, - {0xBD3F, 0x9486},{0xBD40, 0xBAC5},{0xBD41, 0x9487},{0xBD42, 0x9488},{0xBD43, 0x9489},{0xBD44, 0x948A},{0xBD45, 0x948B},{0xBD46, 0x948C}, - {0xBD47, 0x948D},{0xBD48, 0xBAC6},{0xBD49, 0xBAC7},{0xBD4A, 0x948E},{0xBD4B, 0x948F},{0xBD4C, 0xBAC8},{0xBD4D, 0x9490},{0xBD4E, 0x9491}, - {0xBD4F, 0x9492},{0xBD50, 0xBAC9},{0xBD51, 0x9493},{0xBD52, 0x9494},{0xBD53, 0x9495},{0xBD54, 0x9496},{0xBD55, 0x9497},{0xBD56, 0x9498}, - {0xBD57, 0x9499},{0xBD58, 0xBACA},{0xBD59, 0xBACB},{0xBD5A, 0x949A},{0xBD5B, 0x949B},{0xBD5C, 0x949C},{0xBD5D, 0x949D},{0xBD5E, 0x949E}, - {0xBD5F, 0x949F},{0xBD60, 0x94A0},{0xBD61, 0x94A1},{0xBD62, 0x94A2},{0xBD63, 0x94A3},{0xBD64, 0xBACC},{0xBD65, 0x94A4},{0xBD66, 0x94A5}, - {0xBD67, 0x94A6},{0xBD68, 0xBACD},{0xBD69, 0x94A7},{0xBD6A, 0x94A8},{0xBD6B, 0x94A9},{0xBD6C, 0x94AA},{0xBD6D, 0x94AB},{0xBD6E, 0x94AC}, - {0xBD6F, 0x94AD},{0xBD70, 0x94AE},{0xBD71, 0x94AF},{0xBD72, 0x94B0},{0xBD73, 0x94B1},{0xBD74, 0x94B2},{0xBD75, 0x94B3},{0xBD76, 0x94B4}, - {0xBD77, 0x94B5},{0xBD78, 0x94B6},{0xBD79, 0x94B7},{0xBD7A, 0x94B8},{0xBD7B, 0x94B9},{0xBD7C, 0x94BA},{0xBD7D, 0x94BB},{0xBD7E, 0x94BC}, - {0xBD7F, 0x94BD},{0xBD80, 0xBACE},{0xBD81, 0xBACF},{0xBD82, 0x94BE},{0xBD83, 0x94BF},{0xBD84, 0xBAD0},{0xBD85, 0x94C0},{0xBD86, 0x94C1}, - {0xBD87, 0xBAD1},{0xBD88, 0xBAD2},{0xBD89, 0xBAD3},{0xBD8A, 0xBAD4},{0xBD8B, 0x94C2},{0xBD8C, 0x94C3},{0xBD8D, 0x94C4},{0xBD8E, 0x94C5}, - {0xBD8F, 0x94C6},{0xBD90, 0xBAD5},{0xBD91, 0xBAD6},{0xBD92, 0x94C7},{0xBD93, 0xBAD7},{0xBD94, 0x94C8},{0xBD95, 0xBAD8},{0xBD96, 0x94C9}, - {0xBD97, 0x94CA},{0xBD98, 0x94CB},{0xBD99, 0xBAD9},{0xBD9A, 0xBADA},{0xBD9B, 0x94CC},{0xBD9C, 0xBADB},{0xBD9D, 0x94CD},{0xBD9E, 0x94CE}, - {0xBD9F, 0x94CF},{0xBDA0, 0x94D0},{0xBDA1, 0x94D1},{0xBDA2, 0x94D2},{0xBDA3, 0x94D3},{0xBDA4, 0xBADC},{0xBDA5, 0x94D4},{0xBDA6, 0x94D5}, - {0xBDA7, 0x94D6},{0xBDA8, 0x94D7},{0xBDA9, 0x94D8},{0xBDAA, 0x94D9},{0xBDAB, 0x94DA},{0xBDAC, 0x94DB},{0xBDAD, 0x94DC},{0xBDAE, 0x94DD}, - {0xBDAF, 0x94DE},{0xBDB0, 0xBADD},{0xBDB1, 0x94DF},{0xBDB2, 0x94E0},{0xBDB3, 0x94E1},{0xBDB4, 0x94E2},{0xBDB5, 0x94E3},{0xBDB6, 0x94E4}, - {0xBDB7, 0x94E5},{0xBDB8, 0xBADE},{0xBDB9, 0x94E6},{0xBDBA, 0x94E7},{0xBDBB, 0x94E8},{0xBDBC, 0x94E9},{0xBDBD, 0x94EA},{0xBDBE, 0x94EB}, - {0xBDBF, 0x94EC},{0xBDC0, 0x94ED},{0xBDC1, 0x94EE},{0xBDC2, 0x94EF},{0xBDC3, 0x94F0},{0xBDC4, 0x94F1},{0xBDC5, 0x94F2},{0xBDC6, 0x94F3}, - {0xBDC7, 0x94F4},{0xBDC8, 0x94F5},{0xBDC9, 0x94F6},{0xBDCA, 0x94F7},{0xBDCB, 0x94F8},{0xBDCC, 0x94F9},{0xBDCD, 0x94FA},{0xBDCE, 0x94FB}, - {0xBDCF, 0x94FC},{0xBDD0, 0x94FD},{0xBDD1, 0x94FE},{0xBDD2, 0x9541},{0xBDD3, 0x9542},{0xBDD4, 0xBADF},{0xBDD5, 0xBAE0},{0xBDD6, 0x9543}, - {0xBDD7, 0x9544},{0xBDD8, 0xBAE1},{0xBDD9, 0x9545},{0xBDDA, 0x9546},{0xBDDB, 0x9547},{0xBDDC, 0xBAE2},{0xBDDD, 0x9548},{0xBDDE, 0x9549}, - {0xBDDF, 0x954A},{0xBDE0, 0x954B},{0xBDE1, 0x954C},{0xBDE2, 0x954D},{0xBDE3, 0x954E},{0xBDE4, 0x954F},{0xBDE5, 0x9550},{0xBDE6, 0x9551}, - {0xBDE7, 0x9552},{0xBDE8, 0x9553},{0xBDE9, 0xBAE3},{0xBDEA, 0x9554},{0xBDEB, 0x9555},{0xBDEC, 0x9556},{0xBDED, 0x9557},{0xBDEE, 0x9558}, - {0xBDEF, 0x9559},{0xBDF0, 0xBAE4},{0xBDF1, 0x955A},{0xBDF2, 0x9561},{0xBDF3, 0x9562},{0xBDF4, 0xBAE5},{0xBDF5, 0x9563},{0xBDF6, 0x9564}, - {0xBDF7, 0x9565},{0xBDF8, 0xBAE6},{0xBDF9, 0x9566},{0xBDFA, 0x9567},{0xBDFB, 0x9568},{0xBDFC, 0x9569},{0xBDFD, 0x956A},{0xBDFE, 0x956B}, - {0xBDFF, 0x956C},{0xBE00, 0xBAE7},{0xBE01, 0x956D},{0xBE02, 0x956E},{0xBE03, 0xBAE8},{0xBE04, 0x956F},{0xBE05, 0xBAE9},{0xBE06, 0x9570}, - {0xBE07, 0x9571},{0xBE08, 0x9572},{0xBE09, 0x9573},{0xBE0A, 0x9574},{0xBE0B, 0x9575},{0xBE0C, 0xBAEA},{0xBE0D, 0xBAEB},{0xBE0E, 0x9576}, - {0xBE0F, 0x9577},{0xBE10, 0xBAEC},{0xBE11, 0x9578},{0xBE12, 0x9579},{0xBE13, 0x957A},{0xBE14, 0xBAED},{0xBE15, 0x9581},{0xBE16, 0x9582}, - {0xBE17, 0x9583},{0xBE18, 0x9584},{0xBE19, 0x9585},{0xBE1A, 0x9586},{0xBE1B, 0x9587},{0xBE1C, 0xBAEE},{0xBE1D, 0xBAEF},{0xBE1E, 0x9588}, - {0xBE1F, 0xBAF0},{0xBE20, 0x9589},{0xBE21, 0x958A},{0xBE22, 0x958B},{0xBE23, 0x958C},{0xBE24, 0x958D},{0xBE25, 0x958E},{0xBE26, 0x958F}, - {0xBE27, 0x9590},{0xBE28, 0x9591},{0xBE29, 0x9592},{0xBE2A, 0x9593},{0xBE2B, 0x9594},{0xBE2C, 0x9595},{0xBE2D, 0x9596},{0xBE2E, 0x9597}, - {0xBE2F, 0x9598},{0xBE30, 0x9599},{0xBE31, 0x959A},{0xBE32, 0x959B},{0xBE33, 0x959C},{0xBE34, 0x959D},{0xBE35, 0x959E},{0xBE36, 0x959F}, - {0xBE37, 0x95A0},{0xBE38, 0x95A1},{0xBE39, 0x95A2},{0xBE3A, 0x95A3},{0xBE3B, 0x95A4},{0xBE3C, 0x95A5},{0xBE3D, 0x95A6},{0xBE3E, 0x95A7}, - {0xBE3F, 0x95A8},{0xBE40, 0x95A9},{0xBE41, 0x95AA},{0xBE42, 0x95AB},{0xBE43, 0x95AC},{0xBE44, 0xBAF1},{0xBE45, 0xBAF2},{0xBE46, 0x95AD}, - {0xBE47, 0x95AE},{0xBE48, 0xBAF3},{0xBE49, 0x95AF},{0xBE4A, 0x95B0},{0xBE4B, 0x95B1},{0xBE4C, 0xBAF4},{0xBE4D, 0x95B2},{0xBE4E, 0xBAF5}, - {0xBE4F, 0x95B3},{0xBE50, 0x95B4},{0xBE51, 0x95B5},{0xBE52, 0x95B6},{0xBE53, 0x95B7},{0xBE54, 0xBAF6},{0xBE55, 0xBAF7},{0xBE56, 0x95B8}, - {0xBE57, 0xBAF8},{0xBE58, 0x95B9},{0xBE59, 0xBAF9},{0xBE5A, 0xBAFA},{0xBE5B, 0xBAFB},{0xBE5C, 0x95BA},{0xBE5D, 0x95BB},{0xBE5E, 0x95BC}, - {0xBE5F, 0x95BD},{0xBE60, 0xBAFC},{0xBE61, 0xBAFD},{0xBE62, 0x95BE},{0xBE63, 0x95BF},{0xBE64, 0xBAFE},{0xBE65, 0x95C0},{0xBE66, 0x95C1}, - {0xBE67, 0x95C2},{0xBE68, 0xBBA1},{0xBE69, 0x95C3},{0xBE6A, 0xBBA2},{0xBE6B, 0x95C4},{0xBE6C, 0x95C5},{0xBE6D, 0x95C6},{0xBE6E, 0x95C7}, - {0xBE6F, 0x95C8},{0xBE70, 0xBBA3},{0xBE71, 0xBBA4},{0xBE72, 0x95C9},{0xBE73, 0xBBA5},{0xBE74, 0xBBA6},{0xBE75, 0xBBA7},{0xBE76, 0x95CA}, - {0xBE77, 0x95CB},{0xBE78, 0x95CC},{0xBE79, 0x95CD},{0xBE7A, 0x95CE},{0xBE7B, 0xBBA8},{0xBE7C, 0xBBA9},{0xBE7D, 0xBBAA},{0xBE7E, 0x95CF}, - {0xBE7F, 0x95D0},{0xBE80, 0xBBAB},{0xBE81, 0x95D1},{0xBE82, 0x95D2},{0xBE83, 0x95D3},{0xBE84, 0xBBAC},{0xBE85, 0x95D4},{0xBE86, 0x95D5}, - {0xBE87, 0x95D6},{0xBE88, 0x95D7},{0xBE89, 0x95D8},{0xBE8A, 0x95D9},{0xBE8B, 0x95DA},{0xBE8C, 0xBBAD},{0xBE8D, 0xBBAE},{0xBE8E, 0x95DB}, - {0xBE8F, 0xBBAF},{0xBE90, 0xBBB0},{0xBE91, 0xBBB1},{0xBE92, 0x95DC},{0xBE93, 0x95DD},{0xBE94, 0x95DE},{0xBE95, 0x95DF},{0xBE96, 0x95E0}, - {0xBE97, 0x95E1},{0xBE98, 0xBBB2},{0xBE99, 0xBBB3},{0xBE9A, 0x95E2},{0xBE9B, 0x95E3},{0xBE9C, 0x95E4},{0xBE9D, 0x95E5},{0xBE9E, 0x95E6}, - {0xBE9F, 0x95E7},{0xBEA0, 0x95E8},{0xBEA1, 0x95E9},{0xBEA2, 0x95EA},{0xBEA3, 0x95EB},{0xBEA4, 0x95EC},{0xBEA5, 0x95ED},{0xBEA6, 0x95EE}, - {0xBEA7, 0x95EF},{0xBEA8, 0xBBB4},{0xBEA9, 0x95F0},{0xBEAA, 0x95F1},{0xBEAB, 0x95F2},{0xBEAC, 0x95F3},{0xBEAD, 0x95F4},{0xBEAE, 0x95F5}, - {0xBEAF, 0x95F6},{0xBEB0, 0x95F7},{0xBEB1, 0x95F8},{0xBEB2, 0x95F9},{0xBEB3, 0x95FA},{0xBEB4, 0x95FB},{0xBEB5, 0x95FC},{0xBEB6, 0x95FD}, - {0xBEB7, 0x95FE},{0xBEB8, 0x9641},{0xBEB9, 0x9642},{0xBEBA, 0x9643},{0xBEBB, 0x9644},{0xBEBC, 0x9645},{0xBEBD, 0x9646},{0xBEBE, 0x9647}, - {0xBEBF, 0x9648},{0xBEC0, 0x9649},{0xBEC1, 0x964A},{0xBEC2, 0x964B},{0xBEC3, 0x964C},{0xBEC4, 0x964D},{0xBEC5, 0x964E},{0xBEC6, 0x964F}, - {0xBEC7, 0x9650},{0xBEC8, 0x9651},{0xBEC9, 0x9652},{0xBECA, 0x9653},{0xBECB, 0x9654},{0xBECC, 0x9655},{0xBECD, 0x9656},{0xBECE, 0x9657}, - {0xBECF, 0x9658},{0xBED0, 0xBBB5},{0xBED1, 0xBBB6},{0xBED2, 0x9659},{0xBED3, 0x965A},{0xBED4, 0xBBB7},{0xBED5, 0x9661},{0xBED6, 0x9662}, - {0xBED7, 0xBBB8},{0xBED8, 0xBBB9},{0xBED9, 0x9663},{0xBEDA, 0x9664},{0xBEDB, 0x9665},{0xBEDC, 0x9666},{0xBEDD, 0x9667},{0xBEDE, 0x9668}, - {0xBEDF, 0x9669},{0xBEE0, 0xBBBA},{0xBEE1, 0x966A},{0xBEE2, 0x966B},{0xBEE3, 0xBBBB},{0xBEE4, 0xBBBC},{0xBEE5, 0xBBBD},{0xBEE6, 0x966C}, - {0xBEE7, 0x966D},{0xBEE8, 0x966E},{0xBEE9, 0x966F},{0xBEEA, 0x9670},{0xBEEB, 0x9671},{0xBEEC, 0xBBBE},{0xBEED, 0x9672},{0xBEEE, 0x9673}, - {0xBEEF, 0x9674},{0xBEF0, 0x9675},{0xBEF1, 0x9676},{0xBEF2, 0x9677},{0xBEF3, 0x9678},{0xBEF4, 0x9679},{0xBEF5, 0x967A},{0xBEF6, 0x9681}, - {0xBEF7, 0x9682},{0xBEF8, 0x9683},{0xBEF9, 0x9684},{0xBEFA, 0x9685},{0xBEFB, 0x9686},{0xBEFC, 0x9687},{0xBEFD, 0x9688},{0xBEFE, 0x9689}, - {0xBEFF, 0x968A},{0xBF00, 0x968B},{0xBF01, 0xBBBF},{0xBF02, 0x968C},{0xBF03, 0x968D},{0xBF04, 0x968E},{0xBF05, 0x968F},{0xBF06, 0x9690}, - {0xBF07, 0x9691},{0xBF08, 0xBBC0},{0xBF09, 0xBBC1},{0xBF0A, 0x9692},{0xBF0B, 0x9693},{0xBF0C, 0x9694},{0xBF0D, 0x9695},{0xBF0E, 0x9696}, - {0xBF0F, 0x9697},{0xBF10, 0x9698},{0xBF11, 0x9699},{0xBF12, 0x969A},{0xBF13, 0x969B},{0xBF14, 0x969C},{0xBF15, 0x969D},{0xBF16, 0x969E}, - {0xBF17, 0x969F},{0xBF18, 0xBBC2},{0xBF19, 0xBBC3},{0xBF1A, 0x96A0},{0xBF1B, 0xBBC4},{0xBF1C, 0xBBC5},{0xBF1D, 0xBBC6},{0xBF1E, 0x96A1}, - {0xBF1F, 0x96A2},{0xBF20, 0x96A3},{0xBF21, 0x96A4},{0xBF22, 0x96A5},{0xBF23, 0x96A6},{0xBF24, 0x96A7},{0xBF25, 0x96A8},{0xBF26, 0x96A9}, - {0xBF27, 0x96AA},{0xBF28, 0x96AB},{0xBF29, 0x96AC},{0xBF2A, 0x96AD},{0xBF2B, 0x96AE},{0xBF2C, 0x96AF},{0xBF2D, 0x96B0},{0xBF2E, 0x96B1}, - {0xBF2F, 0x96B2},{0xBF30, 0x96B3},{0xBF31, 0x96B4},{0xBF32, 0x96B5},{0xBF33, 0x96B6},{0xBF34, 0x96B7},{0xBF35, 0x96B8},{0xBF36, 0x96B9}, - {0xBF37, 0x96BA},{0xBF38, 0x96BB},{0xBF39, 0x96BC},{0xBF3A, 0x96BD},{0xBF3B, 0x96BE},{0xBF3C, 0x96BF},{0xBF3D, 0x96C0},{0xBF3E, 0x96C1}, - {0xBF3F, 0x96C2},{0xBF40, 0xBBC7},{0xBF41, 0xBBC8},{0xBF42, 0x96C3},{0xBF43, 0x96C4},{0xBF44, 0xBBC9},{0xBF45, 0x96C5},{0xBF46, 0x96C6}, - {0xBF47, 0x96C7},{0xBF48, 0xBBCA},{0xBF49, 0x96C8},{0xBF4A, 0x96C9},{0xBF4B, 0x96CA},{0xBF4C, 0x96CB},{0xBF4D, 0x96CC},{0xBF4E, 0x96CD}, - {0xBF4F, 0x96CE},{0xBF50, 0xBBCB},{0xBF51, 0xBBCC},{0xBF52, 0x96CF},{0xBF53, 0x96D0},{0xBF54, 0x96D1},{0xBF55, 0xBBCD},{0xBF56, 0x96D2}, - {0xBF57, 0x96D3},{0xBF58, 0x96D4},{0xBF59, 0x96D5},{0xBF5A, 0x96D6},{0xBF5B, 0x96D7},{0xBF5C, 0x96D8},{0xBF5D, 0x96D9},{0xBF5E, 0x96DA}, - {0xBF5F, 0x96DB},{0xBF60, 0x96DC},{0xBF61, 0x96DD},{0xBF62, 0x96DE},{0xBF63, 0x96DF},{0xBF64, 0x96E0},{0xBF65, 0x96E1},{0xBF66, 0x96E2}, - {0xBF67, 0x96E3},{0xBF68, 0x96E4},{0xBF69, 0x96E5},{0xBF6A, 0x96E6},{0xBF6B, 0x96E7},{0xBF6C, 0x96E8},{0xBF6D, 0x96E9},{0xBF6E, 0x96EA}, - {0xBF6F, 0x96EB},{0xBF70, 0x96EC},{0xBF71, 0x96ED},{0xBF72, 0x96EE},{0xBF73, 0x96EF},{0xBF74, 0x96F0},{0xBF75, 0x96F1},{0xBF76, 0x96F2}, - {0xBF77, 0x96F3},{0xBF78, 0x96F4},{0xBF79, 0x96F5},{0xBF7A, 0x96F6},{0xBF7B, 0x96F7},{0xBF7C, 0x96F8},{0xBF7D, 0x96F9},{0xBF7E, 0x96FA}, - {0xBF7F, 0x96FB},{0xBF80, 0x96FC},{0xBF81, 0x96FD},{0xBF82, 0x96FE},{0xBF83, 0x9741},{0xBF84, 0x9742},{0xBF85, 0x9743},{0xBF86, 0x9744}, - {0xBF87, 0x9745},{0xBF88, 0x9746},{0xBF89, 0x9747},{0xBF8A, 0x9748},{0xBF8B, 0x9749},{0xBF8C, 0x974A},{0xBF8D, 0x974B},{0xBF8E, 0x974C}, - {0xBF8F, 0x974D},{0xBF90, 0x974E},{0xBF91, 0x974F},{0xBF92, 0x9750},{0xBF93, 0x9751},{0xBF94, 0xBBCE},{0xBF95, 0x9752},{0xBF96, 0x9753}, - {0xBF97, 0x9754},{0xBF98, 0x9755},{0xBF99, 0x9756},{0xBF9A, 0x9757},{0xBF9B, 0x9758},{0xBF9C, 0x9759},{0xBF9D, 0x975A},{0xBF9E, 0x9761}, - {0xBF9F, 0x9762},{0xBFA0, 0x9763},{0xBFA1, 0x9764},{0xBFA2, 0x9765},{0xBFA3, 0x9766},{0xBFA4, 0x9767},{0xBFA5, 0x9768},{0xBFA6, 0x9769}, - {0xBFA7, 0x976A},{0xBFA8, 0x976B},{0xBFA9, 0x976C},{0xBFAA, 0x976D},{0xBFAB, 0x976E},{0xBFAC, 0x976F},{0xBFAD, 0x9770},{0xBFAE, 0x9771}, - {0xBFAF, 0x9772},{0xBFB0, 0xBBCF},{0xBFB1, 0x9773},{0xBFB2, 0x9774},{0xBFB3, 0x9775},{0xBFB4, 0x9776},{0xBFB5, 0x9777},{0xBFB6, 0x9778}, - {0xBFB7, 0x9779},{0xBFB8, 0x977A},{0xBFB9, 0x9781},{0xBFBA, 0x9782},{0xBFBB, 0x9783},{0xBFBC, 0x9784},{0xBFBD, 0x9785},{0xBFBE, 0x9786}, - {0xBFBF, 0x9787},{0xBFC0, 0x9788},{0xBFC1, 0x9789},{0xBFC2, 0x978A},{0xBFC3, 0x978B},{0xBFC4, 0x978C},{0xBFC5, 0xBBD0},{0xBFC6, 0x978D}, - {0xBFC7, 0x978E},{0xBFC8, 0x978F},{0xBFC9, 0x9790},{0xBFCA, 0x9791},{0xBFCB, 0x9792},{0xBFCC, 0xBBD1},{0xBFCD, 0xBBD2},{0xBFCE, 0x9793}, - {0xBFCF, 0x9794},{0xBFD0, 0xBBD3},{0xBFD1, 0x9795},{0xBFD2, 0x9796},{0xBFD3, 0x9797},{0xBFD4, 0xBBD4},{0xBFD5, 0x9798},{0xBFD6, 0x9799}, - {0xBFD7, 0x979A},{0xBFD8, 0x979B},{0xBFD9, 0x979C},{0xBFDA, 0x979D},{0xBFDB, 0x979E},{0xBFDC, 0xBBD5},{0xBFDD, 0x979F},{0xBFDE, 0x97A0}, - {0xBFDF, 0xBBD6},{0xBFE0, 0x97A1},{0xBFE1, 0xBBD7},{0xBFE2, 0x97A2},{0xBFE3, 0x97A3},{0xBFE4, 0x97A4},{0xBFE5, 0x97A5},{0xBFE6, 0x97A6}, - {0xBFE7, 0x97A7},{0xBFE8, 0x97A8},{0xBFE9, 0x97A9},{0xBFEA, 0x97AA},{0xBFEB, 0x97AB},{0xBFEC, 0x97AC},{0xBFED, 0x97AD},{0xBFEE, 0x97AE}, - {0xBFEF, 0x97AF},{0xBFF0, 0x97B0},{0xBFF1, 0x97B1},{0xBFF2, 0x97B2},{0xBFF3, 0x97B3},{0xBFF4, 0x97B4},{0xBFF5, 0x97B5},{0xBFF6, 0x97B6}, - {0xBFF7, 0x97B7},{0xBFF8, 0x97B8},{0xBFF9, 0x97B9},{0xBFFA, 0x97BA},{0xBFFB, 0x97BB},{0xBFFC, 0x97BC},{0xBFFD, 0x97BD},{0xBFFE, 0x97BE}, - {0xBFFF, 0x97BF},{0xC000, 0x97C0},{0xC001, 0x97C1},{0xC002, 0x97C2},{0xC003, 0x97C3},{0xC004, 0x97C4},{0xC005, 0x97C5},{0xC006, 0x97C6}, - {0xC007, 0x97C7},{0xC008, 0x97C8},{0xC009, 0x97C9},{0xC00A, 0x97CA},{0xC00B, 0x97CB},{0xC00C, 0x97CC},{0xC00D, 0x97CD},{0xC00E, 0x97CE}, - {0xC00F, 0x97CF},{0xC010, 0x97D0},{0xC011, 0x97D1},{0xC012, 0x97D2},{0xC013, 0x97D3},{0xC014, 0x97D4},{0xC015, 0x97D5},{0xC016, 0x97D6}, - {0xC017, 0x97D7},{0xC018, 0x97D8},{0xC019, 0x97D9},{0xC01A, 0x97DA},{0xC01B, 0x97DB},{0xC01C, 0x97DC},{0xC01D, 0x97DD},{0xC01E, 0x97DE}, - {0xC01F, 0x97DF},{0xC020, 0x97E0},{0xC021, 0x97E1},{0xC022, 0x97E2},{0xC023, 0x97E3},{0xC024, 0x97E4},{0xC025, 0x97E5},{0xC026, 0x97E6}, - {0xC027, 0x97E7},{0xC028, 0x97E8},{0xC029, 0x97E9},{0xC02A, 0x97EA},{0xC02B, 0x97EB},{0xC02C, 0x97EC},{0xC02D, 0x97ED},{0xC02E, 0x97EE}, - {0xC02F, 0x97EF},{0xC030, 0x97F0},{0xC031, 0x97F1},{0xC032, 0x97F2},{0xC033, 0x97F3},{0xC034, 0x97F4},{0xC035, 0x97F5},{0xC036, 0x97F6}, - {0xC037, 0x97F7},{0xC038, 0x97F8},{0xC039, 0x97F9},{0xC03A, 0x97FA},{0xC03B, 0x97FB},{0xC03C, 0xBBD8},{0xC03D, 0x97FC},{0xC03E, 0x97FD}, - {0xC03F, 0x97FE},{0xC040, 0x9841},{0xC041, 0x9842},{0xC042, 0x9843},{0xC043, 0x9844},{0xC044, 0x9845},{0xC045, 0x9846},{0xC046, 0x9847}, - {0xC047, 0x9848},{0xC048, 0x9849},{0xC049, 0x984A},{0xC04A, 0x984B},{0xC04B, 0x984C},{0xC04C, 0x984D},{0xC04D, 0x984E},{0xC04E, 0x984F}, - {0xC04F, 0x9850},{0xC050, 0x9851},{0xC051, 0xBBD9},{0xC052, 0x9852},{0xC053, 0x9853},{0xC054, 0x9854},{0xC055, 0x9855},{0xC056, 0x9856}, - {0xC057, 0x9857},{0xC058, 0xBBDA},{0xC059, 0x9858},{0xC05A, 0x9859},{0xC05B, 0x985A},{0xC05C, 0xBBDB},{0xC05D, 0x9861},{0xC05E, 0x9862}, - {0xC05F, 0x9863},{0xC060, 0xBBDC},{0xC061, 0x9864},{0xC062, 0x9865},{0xC063, 0x9866},{0xC064, 0x9867},{0xC065, 0x9868},{0xC066, 0x9869}, - {0xC067, 0x986A},{0xC068, 0xBBDD},{0xC069, 0xBBDE},{0xC06A, 0x986B},{0xC06B, 0x986C},{0xC06C, 0x986D},{0xC06D, 0x986E},{0xC06E, 0x986F}, - {0xC06F, 0x9870},{0xC070, 0x9871},{0xC071, 0x9872},{0xC072, 0x9873},{0xC073, 0x9874},{0xC074, 0x9875},{0xC075, 0x9876},{0xC076, 0x9877}, - {0xC077, 0x9878},{0xC078, 0x9879},{0xC079, 0x987A},{0xC07A, 0x9881},{0xC07B, 0x9882},{0xC07C, 0x9883},{0xC07D, 0x9884},{0xC07E, 0x9885}, - {0xC07F, 0x9886},{0xC080, 0x9887},{0xC081, 0x9888},{0xC082, 0x9889},{0xC083, 0x988A},{0xC084, 0x988B},{0xC085, 0x988C},{0xC086, 0x988D}, - {0xC087, 0x988E},{0xC088, 0x988F},{0xC089, 0x9890},{0xC08A, 0x9891},{0xC08B, 0x9892},{0xC08C, 0x9893},{0xC08D, 0x9894},{0xC08E, 0x9895}, - {0xC08F, 0x9896},{0xC090, 0xBBDF},{0xC091, 0xBBE0},{0xC092, 0x9897},{0xC093, 0x9898},{0xC094, 0xBBE1},{0xC095, 0x9899},{0xC096, 0x989A}, - {0xC097, 0x989B},{0xC098, 0xBBE2},{0xC099, 0x989C},{0xC09A, 0x989D},{0xC09B, 0x989E},{0xC09C, 0x989F},{0xC09D, 0x98A0},{0xC09E, 0x98A1}, - {0xC09F, 0x98A2},{0xC0A0, 0xBBE3},{0xC0A1, 0xBBE4},{0xC0A2, 0x98A3},{0xC0A3, 0xBBE5},{0xC0A4, 0x98A4},{0xC0A5, 0xBBE6},{0xC0A6, 0x98A5}, - {0xC0A7, 0x98A6},{0xC0A8, 0x98A7},{0xC0A9, 0x98A8},{0xC0AA, 0x98A9},{0xC0AB, 0x98AA},{0xC0AC, 0xBBE7},{0xC0AD, 0xBBE8},{0xC0AE, 0x98AB}, - {0xC0AF, 0xBBE9},{0xC0B0, 0xBBEA},{0xC0B1, 0x98AC},{0xC0B2, 0x98AD},{0xC0B3, 0xBBEB},{0xC0B4, 0xBBEC},{0xC0B5, 0xBBED},{0xC0B6, 0xBBEE}, - {0xC0B7, 0x98AE},{0xC0B8, 0x98AF},{0xC0B9, 0x98B0},{0xC0BA, 0x98B1},{0xC0BB, 0x98B2},{0xC0BC, 0xBBEF},{0xC0BD, 0xBBF0},{0xC0BE, 0x98B3}, - {0xC0BF, 0xBBF1},{0xC0C0, 0xBBF2},{0xC0C1, 0xBBF3},{0xC0C2, 0x98B4},{0xC0C3, 0x98B5},{0xC0C4, 0x98B6},{0xC0C5, 0xBBF4},{0xC0C6, 0x98B7}, - {0xC0C7, 0x98B8},{0xC0C8, 0xBBF5},{0xC0C9, 0xBBF6},{0xC0CA, 0x98B9},{0xC0CB, 0x98BA},{0xC0CC, 0xBBF7},{0xC0CD, 0x98BB},{0xC0CE, 0x98BC}, - {0xC0CF, 0x98BD},{0xC0D0, 0xBBF8},{0xC0D1, 0x98BE},{0xC0D2, 0x98BF},{0xC0D3, 0x98C0},{0xC0D4, 0x98C1},{0xC0D5, 0x98C2},{0xC0D6, 0x98C3}, - {0xC0D7, 0x98C4},{0xC0D8, 0xBBF9},{0xC0D9, 0xBBFA},{0xC0DA, 0x98C5},{0xC0DB, 0xBBFB},{0xC0DC, 0xBBFC},{0xC0DD, 0xBBFD},{0xC0DE, 0x98C6}, - {0xC0DF, 0x98C7},{0xC0E0, 0x98C8},{0xC0E1, 0x98C9},{0xC0E2, 0x98CA},{0xC0E3, 0x98CB},{0xC0E4, 0xBBFE},{0xC0E5, 0xBCA1},{0xC0E6, 0x98CC}, - {0xC0E7, 0x98CD},{0xC0E8, 0xBCA2},{0xC0E9, 0x98CE},{0xC0EA, 0x98CF},{0xC0EB, 0x98D0},{0xC0EC, 0xBCA3},{0xC0ED, 0x98D1},{0xC0EE, 0x98D2}, - {0xC0EF, 0x98D3},{0xC0F0, 0x98D4},{0xC0F1, 0x98D5},{0xC0F2, 0x98D6},{0xC0F3, 0x98D7},{0xC0F4, 0xBCA4},{0xC0F5, 0xBCA5},{0xC0F6, 0x98D8}, - {0xC0F7, 0xBCA6},{0xC0F8, 0x98D9},{0xC0F9, 0xBCA7},{0xC0FA, 0x98DA},{0xC0FB, 0x98DB},{0xC0FC, 0x98DC},{0xC0FD, 0x98DD},{0xC0FE, 0x98DE}, - {0xC0FF, 0x98DF},{0xC100, 0xBCA8},{0xC101, 0x98E0},{0xC102, 0x98E1},{0xC103, 0x98E2},{0xC104, 0xBCA9},{0xC105, 0x98E3},{0xC106, 0x98E4}, - {0xC107, 0x98E5},{0xC108, 0xBCAA},{0xC109, 0x98E6},{0xC10A, 0x98E7},{0xC10B, 0x98E8},{0xC10C, 0x98E9},{0xC10D, 0x98EA},{0xC10E, 0x98EB}, - {0xC10F, 0x98EC},{0xC110, 0xBCAB},{0xC111, 0x98ED},{0xC112, 0x98EE},{0xC113, 0x98EF},{0xC114, 0x98F0},{0xC115, 0xBCAC},{0xC116, 0x98F1}, - {0xC117, 0x98F2},{0xC118, 0x98F3},{0xC119, 0x98F4},{0xC11A, 0x98F5},{0xC11B, 0x98F6},{0xC11C, 0xBCAD},{0xC11D, 0xBCAE},{0xC11E, 0xBCAF}, - {0xC11F, 0xBCB0},{0xC120, 0xBCB1},{0xC121, 0x98F7},{0xC122, 0x98F8},{0xC123, 0xBCB2},{0xC124, 0xBCB3},{0xC125, 0x98F9},{0xC126, 0xBCB4}, - {0xC127, 0xBCB5},{0xC128, 0x98FA},{0xC129, 0x98FB},{0xC12A, 0x98FC},{0xC12B, 0x98FD},{0xC12C, 0xBCB6},{0xC12D, 0xBCB7},{0xC12E, 0x98FE}, - {0xC12F, 0xBCB8},{0xC130, 0xBCB9},{0xC131, 0xBCBA},{0xC132, 0x9941},{0xC133, 0x9942},{0xC134, 0x9943},{0xC135, 0x9944},{0xC136, 0xBCBB}, - {0xC137, 0x9945},{0xC138, 0xBCBC},{0xC139, 0xBCBD},{0xC13A, 0x9946},{0xC13B, 0x9947},{0xC13C, 0xBCBE},{0xC13D, 0x9948},{0xC13E, 0x9949}, - {0xC13F, 0x994A},{0xC140, 0xBCBF},{0xC141, 0x994B},{0xC142, 0x994C},{0xC143, 0x994D},{0xC144, 0x994E},{0xC145, 0x994F},{0xC146, 0x9950}, - {0xC147, 0x9951},{0xC148, 0xBCC0},{0xC149, 0xBCC1},{0xC14A, 0x9952},{0xC14B, 0xBCC2},{0xC14C, 0xBCC3},{0xC14D, 0xBCC4},{0xC14E, 0x9953}, - {0xC14F, 0x9954},{0xC150, 0x9955},{0xC151, 0x9956},{0xC152, 0x9957},{0xC153, 0x9958},{0xC154, 0xBCC5},{0xC155, 0xBCC6},{0xC156, 0x9959}, - {0xC157, 0x995A},{0xC158, 0xBCC7},{0xC159, 0x9961},{0xC15A, 0x9962},{0xC15B, 0x9963},{0xC15C, 0xBCC8},{0xC15D, 0x9964},{0xC15E, 0x9965}, - {0xC15F, 0x9966},{0xC160, 0x9967},{0xC161, 0x9968},{0xC162, 0x9969},{0xC163, 0x996A},{0xC164, 0xBCC9},{0xC165, 0xBCCA},{0xC166, 0x996B}, - {0xC167, 0xBCCB},{0xC168, 0xBCCC},{0xC169, 0xBCCD},{0xC16A, 0x996C},{0xC16B, 0x996D},{0xC16C, 0x996E},{0xC16D, 0x996F},{0xC16E, 0x9970}, - {0xC16F, 0x9971},{0xC170, 0xBCCE},{0xC171, 0x9972},{0xC172, 0x9973},{0xC173, 0x9974},{0xC174, 0xBCCF},{0xC175, 0x9975},{0xC176, 0x9976}, - {0xC177, 0x9977},{0xC178, 0xBCD0},{0xC179, 0x9978},{0xC17A, 0x9979},{0xC17B, 0x997A},{0xC17C, 0x9981},{0xC17D, 0x9982},{0xC17E, 0x9983}, - {0xC17F, 0x9984},{0xC180, 0x9985},{0xC181, 0x9986},{0xC182, 0x9987},{0xC183, 0x9988},{0xC184, 0x9989},{0xC185, 0xBCD1},{0xC186, 0x998A}, - {0xC187, 0x998B},{0xC188, 0x998C},{0xC189, 0x998D},{0xC18A, 0x998E},{0xC18B, 0x998F},{0xC18C, 0xBCD2},{0xC18D, 0xBCD3},{0xC18E, 0xBCD4}, - {0xC18F, 0x9990},{0xC190, 0xBCD5},{0xC191, 0x9991},{0xC192, 0x9992},{0xC193, 0x9993},{0xC194, 0xBCD6},{0xC195, 0x9994},{0xC196, 0xBCD7}, - {0xC197, 0x9995},{0xC198, 0x9996},{0xC199, 0x9997},{0xC19A, 0x9998},{0xC19B, 0x9999},{0xC19C, 0xBCD8},{0xC19D, 0xBCD9},{0xC19E, 0x999A}, - {0xC19F, 0xBCDA},{0xC1A0, 0x999B},{0xC1A1, 0xBCDB},{0xC1A2, 0x999C},{0xC1A3, 0x999D},{0xC1A4, 0x999E},{0xC1A5, 0xBCDC},{0xC1A6, 0x999F}, - {0xC1A7, 0x99A0},{0xC1A8, 0xBCDD},{0xC1A9, 0xBCDE},{0xC1AA, 0x99A1},{0xC1AB, 0x99A2},{0xC1AC, 0xBCDF},{0xC1AD, 0x99A3},{0xC1AE, 0x99A4}, - {0xC1AF, 0x99A5},{0xC1B0, 0xBCE0},{0xC1B1, 0x99A6},{0xC1B2, 0x99A7},{0xC1B3, 0x99A8},{0xC1B4, 0x99A9},{0xC1B5, 0x99AA},{0xC1B6, 0x99AB}, - {0xC1B7, 0x99AC},{0xC1B8, 0x99AD},{0xC1B9, 0x99AE},{0xC1BA, 0x99AF},{0xC1BB, 0x99B0},{0xC1BC, 0x99B1},{0xC1BD, 0xBCE1},{0xC1BE, 0x99B2}, - {0xC1BF, 0x99B3},{0xC1C0, 0x99B4},{0xC1C1, 0x99B5},{0xC1C2, 0x99B6},{0xC1C3, 0x99B7},{0xC1C4, 0xBCE2},{0xC1C5, 0x99B8},{0xC1C6, 0x99B9}, - {0xC1C7, 0x99BA},{0xC1C8, 0xBCE3},{0xC1C9, 0x99BB},{0xC1CA, 0x99BC},{0xC1CB, 0x99BD},{0xC1CC, 0xBCE4},{0xC1CD, 0x99BE},{0xC1CE, 0x99BF}, - {0xC1CF, 0x99C0},{0xC1D0, 0x99C1},{0xC1D1, 0x99C2},{0xC1D2, 0x99C3},{0xC1D3, 0x99C4},{0xC1D4, 0xBCE5},{0xC1D5, 0x99C5},{0xC1D6, 0x99C6}, - {0xC1D7, 0xBCE6},{0xC1D8, 0xBCE7},{0xC1D9, 0x99C7},{0xC1DA, 0x99C8},{0xC1DB, 0x99C9},{0xC1DC, 0x99CA},{0xC1DD, 0x99CB},{0xC1DE, 0x99CC}, - {0xC1DF, 0x99CD},{0xC1E0, 0xBCE8},{0xC1E1, 0x99CE},{0xC1E2, 0x99CF},{0xC1E3, 0x99D0},{0xC1E4, 0xBCE9},{0xC1E5, 0x99D1},{0xC1E6, 0x99D2}, - {0xC1E7, 0x99D3},{0xC1E8, 0xBCEA},{0xC1E9, 0x99D4},{0xC1EA, 0x99D5},{0xC1EB, 0x99D6},{0xC1EC, 0x99D7},{0xC1ED, 0x99D8},{0xC1EE, 0x99D9}, - {0xC1EF, 0x99DA},{0xC1F0, 0xBCEB},{0xC1F1, 0xBCEC},{0xC1F2, 0x99DB},{0xC1F3, 0xBCED},{0xC1F4, 0x99DC},{0xC1F5, 0x99DD},{0xC1F6, 0x99DE}, - {0xC1F7, 0x99DF},{0xC1F8, 0x99E0},{0xC1F9, 0x99E1},{0xC1FA, 0x99E2},{0xC1FB, 0x99E3},{0xC1FC, 0xBCEE},{0xC1FD, 0xBCEF},{0xC1FE, 0x99E4}, - {0xC1FF, 0x99E5},{0xC200, 0xBCF0},{0xC201, 0x99E6},{0xC202, 0x99E7},{0xC203, 0x99E8},{0xC204, 0xBCF1},{0xC205, 0x99E9},{0xC206, 0x99EA}, - {0xC207, 0x99EB},{0xC208, 0x99EC},{0xC209, 0x99ED},{0xC20A, 0x99EE},{0xC20B, 0x99EF},{0xC20C, 0xBCF2},{0xC20D, 0xBCF3},{0xC20E, 0x99F0}, - {0xC20F, 0xBCF4},{0xC210, 0x99F1},{0xC211, 0xBCF5},{0xC212, 0x99F2},{0xC213, 0x99F3},{0xC214, 0x99F4},{0xC215, 0x99F5},{0xC216, 0x99F6}, - {0xC217, 0x99F7},{0xC218, 0xBCF6},{0xC219, 0xBCF7},{0xC21A, 0x99F8},{0xC21B, 0x99F9},{0xC21C, 0xBCF8},{0xC21D, 0x99FA},{0xC21E, 0x99FB}, - {0xC21F, 0xBCF9},{0xC220, 0xBCFA},{0xC221, 0x99FC},{0xC222, 0x99FD},{0xC223, 0x99FE},{0xC224, 0x9A41},{0xC225, 0x9A42},{0xC226, 0x9A43}, - {0xC227, 0x9A44},{0xC228, 0xBCFB},{0xC229, 0xBCFC},{0xC22A, 0x9A45},{0xC22B, 0xBCFD},{0xC22C, 0x9A46},{0xC22D, 0xBCFE},{0xC22E, 0x9A47}, - {0xC22F, 0xBDA1},{0xC230, 0x9A48},{0xC231, 0xBDA2},{0xC232, 0xBDA3},{0xC233, 0x9A49},{0xC234, 0xBDA4},{0xC235, 0x9A4A},{0xC236, 0x9A4B}, - {0xC237, 0x9A4C},{0xC238, 0x9A4D},{0xC239, 0x9A4E},{0xC23A, 0x9A4F},{0xC23B, 0x9A50},{0xC23C, 0x9A51},{0xC23D, 0x9A52},{0xC23E, 0x9A53}, - {0xC23F, 0x9A54},{0xC240, 0x9A55},{0xC241, 0x9A56},{0xC242, 0x9A57},{0xC243, 0x9A58},{0xC244, 0x9A59},{0xC245, 0x9A5A},{0xC246, 0x9A61}, - {0xC247, 0x9A62},{0xC248, 0xBDA5},{0xC249, 0x9A63},{0xC24A, 0x9A64},{0xC24B, 0x9A65},{0xC24C, 0x9A66},{0xC24D, 0x9A67},{0xC24E, 0x9A68}, - {0xC24F, 0x9A69},{0xC250, 0xBDA6},{0xC251, 0xBDA7},{0xC252, 0x9A6A},{0xC253, 0x9A6B},{0xC254, 0xBDA8},{0xC255, 0x9A6C},{0xC256, 0x9A6D}, - {0xC257, 0x9A6E},{0xC258, 0xBDA9},{0xC259, 0x9A6F},{0xC25A, 0x9A70},{0xC25B, 0x9A71},{0xC25C, 0x9A72},{0xC25D, 0x9A73},{0xC25E, 0x9A74}, - {0xC25F, 0x9A75},{0xC260, 0xBDAA},{0xC261, 0x9A76},{0xC262, 0x9A77},{0xC263, 0x9A78},{0xC264, 0x9A79},{0xC265, 0xBDAB},{0xC266, 0x9A7A}, - {0xC267, 0x9A81},{0xC268, 0x9A82},{0xC269, 0x9A83},{0xC26A, 0x9A84},{0xC26B, 0x9A85},{0xC26C, 0xBDAC},{0xC26D, 0xBDAD},{0xC26E, 0x9A86}, - {0xC26F, 0x9A87},{0xC270, 0xBDAE},{0xC271, 0x9A88},{0xC272, 0x9A89},{0xC273, 0x9A8A},{0xC274, 0xBDAF},{0xC275, 0x9A8B},{0xC276, 0x9A8C}, - {0xC277, 0x9A8D},{0xC278, 0x9A8E},{0xC279, 0x9A8F},{0xC27A, 0x9A90},{0xC27B, 0x9A91},{0xC27C, 0xBDB0},{0xC27D, 0xBDB1},{0xC27E, 0x9A92}, - {0xC27F, 0xBDB2},{0xC280, 0x9A93},{0xC281, 0xBDB3},{0xC282, 0x9A94},{0xC283, 0x9A95},{0xC284, 0x9A96},{0xC285, 0x9A97},{0xC286, 0x9A98}, - {0xC287, 0x9A99},{0xC288, 0xBDB4},{0xC289, 0xBDB5},{0xC28A, 0x9A9A},{0xC28B, 0x9A9B},{0xC28C, 0x9A9C},{0xC28D, 0x9A9D},{0xC28E, 0x9A9E}, - {0xC28F, 0x9A9F},{0xC290, 0xBDB6},{0xC291, 0x9AA0},{0xC292, 0x9AA1},{0xC293, 0x9AA2},{0xC294, 0x9AA3},{0xC295, 0x9AA4},{0xC296, 0x9AA5}, - {0xC297, 0x9AA6},{0xC298, 0xBDB7},{0xC299, 0x9AA7},{0xC29A, 0x9AA8},{0xC29B, 0xBDB8},{0xC29C, 0x9AA9},{0xC29D, 0xBDB9},{0xC29E, 0x9AAA}, - {0xC29F, 0x9AAB},{0xC2A0, 0x9AAC},{0xC2A1, 0x9AAD},{0xC2A2, 0x9AAE},{0xC2A3, 0x9AAF},{0xC2A4, 0xBDBA},{0xC2A5, 0xBDBB},{0xC2A6, 0x9AB0}, - {0xC2A7, 0x9AB1},{0xC2A8, 0xBDBC},{0xC2A9, 0x9AB2},{0xC2AA, 0x9AB3},{0xC2AB, 0x9AB4},{0xC2AC, 0xBDBD},{0xC2AD, 0xBDBE},{0xC2AE, 0x9AB5}, - {0xC2AF, 0x9AB6},{0xC2B0, 0x9AB7},{0xC2B1, 0x9AB8},{0xC2B2, 0x9AB9},{0xC2B3, 0x9ABA},{0xC2B4, 0xBDBF},{0xC2B5, 0xBDC0},{0xC2B6, 0x9ABB}, - {0xC2B7, 0xBDC1},{0xC2B8, 0x9ABC},{0xC2B9, 0xBDC2},{0xC2BA, 0x9ABD},{0xC2BB, 0x9ABE},{0xC2BC, 0x9ABF},{0xC2BD, 0x9AC0},{0xC2BE, 0x9AC1}, - {0xC2BF, 0x9AC2},{0xC2C0, 0x9AC3},{0xC2C1, 0x9AC4},{0xC2C2, 0x9AC5},{0xC2C3, 0x9AC6},{0xC2C4, 0x9AC7},{0xC2C5, 0x9AC8},{0xC2C6, 0x9AC9}, - {0xC2C7, 0x9ACA},{0xC2C8, 0x9ACB},{0xC2C9, 0x9ACC},{0xC2CA, 0x9ACD},{0xC2CB, 0x9ACE},{0xC2CC, 0x9ACF},{0xC2CD, 0x9AD0},{0xC2CE, 0x9AD1}, - {0xC2CF, 0x9AD2},{0xC2D0, 0x9AD3},{0xC2D1, 0x9AD4},{0xC2D2, 0x9AD5},{0xC2D3, 0x9AD6},{0xC2D4, 0x9AD7},{0xC2D5, 0x9AD8},{0xC2D6, 0x9AD9}, - {0xC2D7, 0x9ADA},{0xC2D8, 0x9ADB},{0xC2D9, 0x9ADC},{0xC2DA, 0x9ADD},{0xC2DB, 0x9ADE},{0xC2DC, 0xBDC3},{0xC2DD, 0xBDC4},{0xC2DE, 0x9ADF}, - {0xC2DF, 0x9AE0},{0xC2E0, 0xBDC5},{0xC2E1, 0x9AE1},{0xC2E2, 0x9AE2},{0xC2E3, 0xBDC6},{0xC2E4, 0xBDC7},{0xC2E5, 0x9AE3},{0xC2E6, 0x9AE4}, - {0xC2E7, 0x9AE5},{0xC2E8, 0x9AE6},{0xC2E9, 0x9AE7},{0xC2EA, 0x9AE8},{0xC2EB, 0xBDC8},{0xC2EC, 0xBDC9},{0xC2ED, 0xBDCA},{0xC2EE, 0x9AE9}, - {0xC2EF, 0xBDCB},{0xC2F0, 0x9AEA},{0xC2F1, 0xBDCC},{0xC2F2, 0x9AEB},{0xC2F3, 0x9AEC},{0xC2F4, 0x9AED},{0xC2F5, 0x9AEE},{0xC2F6, 0xBDCD}, - {0xC2F7, 0x9AEF},{0xC2F8, 0xBDCE},{0xC2F9, 0xBDCF},{0xC2FA, 0x9AF0},{0xC2FB, 0xBDD0},{0xC2FC, 0xBDD1},{0xC2FD, 0x9AF1},{0xC2FE, 0x9AF2}, - {0xC2FF, 0x9AF3},{0xC300, 0xBDD2},{0xC301, 0x9AF4},{0xC302, 0x9AF5},{0xC303, 0x9AF6},{0xC304, 0x9AF7},{0xC305, 0x9AF8},{0xC306, 0x9AF9}, - {0xC307, 0x9AFA},{0xC308, 0xBDD3},{0xC309, 0xBDD4},{0xC30A, 0x9AFB},{0xC30B, 0x9AFC},{0xC30C, 0xBDD5},{0xC30D, 0xBDD6},{0xC30E, 0x9AFD}, - {0xC30F, 0x9AFE},{0xC310, 0x9B41},{0xC311, 0x9B42},{0xC312, 0x9B43},{0xC313, 0xBDD7},{0xC314, 0xBDD8},{0xC315, 0xBDD9},{0xC316, 0x9B44}, - {0xC317, 0x9B45},{0xC318, 0xBDDA},{0xC319, 0x9B46},{0xC31A, 0x9B47},{0xC31B, 0x9B48},{0xC31C, 0xBDDB},{0xC31D, 0x9B49},{0xC31E, 0x9B4A}, - {0xC31F, 0x9B4B},{0xC320, 0x9B4C},{0xC321, 0x9B4D},{0xC322, 0x9B4E},{0xC323, 0x9B4F},{0xC324, 0xBDDC},{0xC325, 0xBDDD},{0xC326, 0x9B50}, - {0xC327, 0x9B51},{0xC328, 0xBDDE},{0xC329, 0xBDDF},{0xC32A, 0x9B52},{0xC32B, 0x9B53},{0xC32C, 0x9B54},{0xC32D, 0x9B55},{0xC32E, 0x9B56}, - {0xC32F, 0x9B57},{0xC330, 0x9B58},{0xC331, 0x9B59},{0xC332, 0x9B5A},{0xC333, 0x9B61},{0xC334, 0x9B62},{0xC335, 0x9B63},{0xC336, 0x9B64}, - {0xC337, 0x9B65},{0xC338, 0x9B66},{0xC339, 0x9B67},{0xC33A, 0x9B68},{0xC33B, 0x9B69},{0xC33C, 0x9B6A},{0xC33D, 0x9B6B},{0xC33E, 0x9B6C}, - {0xC33F, 0x9B6D},{0xC340, 0x9B6E},{0xC341, 0x9B6F},{0xC342, 0x9B70},{0xC343, 0x9B71},{0xC344, 0x9B72},{0xC345, 0xBDE0},{0xC346, 0x9B73}, - {0xC347, 0x9B74},{0xC348, 0x9B75},{0xC349, 0x9B76},{0xC34A, 0x9B77},{0xC34B, 0x9B78},{0xC34C, 0x9B79},{0xC34D, 0x9B7A},{0xC34E, 0x9B81}, - {0xC34F, 0x9B82},{0xC350, 0x9B83},{0xC351, 0x9B84},{0xC352, 0x9B85},{0xC353, 0x9B86},{0xC354, 0x9B87},{0xC355, 0x9B88},{0xC356, 0x9B89}, - {0xC357, 0x9B8A},{0xC358, 0x9B8B},{0xC359, 0x9B8C},{0xC35A, 0x9B8D},{0xC35B, 0x9B8E},{0xC35C, 0x9B8F},{0xC35D, 0x9B90},{0xC35E, 0x9B91}, - {0xC35F, 0x9B92},{0xC360, 0x9B93},{0xC361, 0x9B94},{0xC362, 0x9B95},{0xC363, 0x9B96},{0xC364, 0x9B97},{0xC365, 0x9B98},{0xC366, 0x9B99}, - {0xC367, 0x9B9A},{0xC368, 0xBDE1},{0xC369, 0xBDE2},{0xC36A, 0x9B9B},{0xC36B, 0x9B9C},{0xC36C, 0xBDE3},{0xC36D, 0x9B9D},{0xC36E, 0x9B9E}, - {0xC36F, 0x9B9F},{0xC370, 0xBDE4},{0xC371, 0x9BA0},{0xC372, 0xBDE5},{0xC373, 0x9BA1},{0xC374, 0x9BA2},{0xC375, 0x9BA3},{0xC376, 0x9BA4}, - {0xC377, 0x9BA5},{0xC378, 0xBDE6},{0xC379, 0xBDE7},{0xC37A, 0x9BA6},{0xC37B, 0x9BA7},{0xC37C, 0xBDE8},{0xC37D, 0xBDE9},{0xC37E, 0x9BA8}, - {0xC37F, 0x9BA9},{0xC380, 0x9BAA},{0xC381, 0x9BAB},{0xC382, 0x9BAC},{0xC383, 0x9BAD},{0xC384, 0xBDEA},{0xC385, 0x9BAE},{0xC386, 0x9BAF}, - {0xC387, 0x9BB0},{0xC388, 0xBDEB},{0xC389, 0x9BB1},{0xC38A, 0x9BB2},{0xC38B, 0x9BB3},{0xC38C, 0xBDEC},{0xC38D, 0x9BB4},{0xC38E, 0x9BB5}, - {0xC38F, 0x9BB6},{0xC390, 0x9BB7},{0xC391, 0x9BB8},{0xC392, 0x9BB9},{0xC393, 0x9BBA},{0xC394, 0x9BBB},{0xC395, 0x9BBC},{0xC396, 0x9BBD}, - {0xC397, 0x9BBE},{0xC398, 0x9BBF},{0xC399, 0x9BC0},{0xC39A, 0x9BC1},{0xC39B, 0x9BC2},{0xC39C, 0x9BC3},{0xC39D, 0x9BC4},{0xC39E, 0x9BC5}, - {0xC39F, 0x9BC6},{0xC3A0, 0x9BC7},{0xC3A1, 0x9BC8},{0xC3A2, 0x9BC9},{0xC3A3, 0x9BCA},{0xC3A4, 0x9BCB},{0xC3A5, 0x9BCC},{0xC3A6, 0x9BCD}, - {0xC3A7, 0x9BCE},{0xC3A8, 0x9BCF},{0xC3A9, 0x9BD0},{0xC3AA, 0x9BD1},{0xC3AB, 0x9BD2},{0xC3AC, 0x9BD3},{0xC3AD, 0x9BD4},{0xC3AE, 0x9BD5}, - {0xC3AF, 0x9BD6},{0xC3B0, 0x9BD7},{0xC3B1, 0x9BD8},{0xC3B2, 0x9BD9},{0xC3B3, 0x9BDA},{0xC3B4, 0x9BDB},{0xC3B5, 0x9BDC},{0xC3B6, 0x9BDD}, - {0xC3B7, 0x9BDE},{0xC3B8, 0x9BDF},{0xC3B9, 0x9BE0},{0xC3BA, 0x9BE1},{0xC3BB, 0x9BE2},{0xC3BC, 0x9BE3},{0xC3BD, 0x9BE4},{0xC3BE, 0x9BE5}, - {0xC3BF, 0x9BE6},{0xC3C0, 0xBDED},{0xC3C1, 0x9BE7},{0xC3C2, 0x9BE8},{0xC3C3, 0x9BE9},{0xC3C4, 0x9BEA},{0xC3C5, 0x9BEB},{0xC3C6, 0x9BEC}, - {0xC3C7, 0x9BED},{0xC3C8, 0x9BEE},{0xC3C9, 0x9BEF},{0xC3CA, 0x9BF0},{0xC3CB, 0x9BF1},{0xC3CC, 0x9BF2},{0xC3CD, 0x9BF3},{0xC3CE, 0x9BF4}, - {0xC3CF, 0x9BF5},{0xC3D0, 0x9BF6},{0xC3D1, 0x9BF7},{0xC3D2, 0x9BF8},{0xC3D3, 0x9BF9},{0xC3D4, 0x9BFA},{0xC3D5, 0x9BFB},{0xC3D6, 0x9BFC}, - {0xC3D7, 0x9BFD},{0xC3D8, 0xBDEE},{0xC3D9, 0xBDEF},{0xC3DA, 0x9BFE},{0xC3DB, 0x9C41},{0xC3DC, 0xBDF0},{0xC3DD, 0x9C42},{0xC3DE, 0x9C43}, - {0xC3DF, 0xBDF1},{0xC3E0, 0xBDF2},{0xC3E1, 0x9C44},{0xC3E2, 0xBDF3},{0xC3E3, 0x9C45},{0xC3E4, 0x9C46},{0xC3E5, 0x9C47},{0xC3E6, 0x9C48}, - {0xC3E7, 0x9C49},{0xC3E8, 0xBDF4},{0xC3E9, 0xBDF5},{0xC3EA, 0x9C4A},{0xC3EB, 0x9C4B},{0xC3EC, 0x9C4C},{0xC3ED, 0xBDF6},{0xC3EE, 0x9C4D}, - {0xC3EF, 0x9C4E},{0xC3F0, 0x9C4F},{0xC3F1, 0x9C50},{0xC3F2, 0x9C51},{0xC3F3, 0x9C52},{0xC3F4, 0xBDF7},{0xC3F5, 0xBDF8},{0xC3F6, 0x9C53}, - {0xC3F7, 0x9C54},{0xC3F8, 0xBDF9},{0xC3F9, 0x9C55},{0xC3FA, 0x9C56},{0xC3FB, 0x9C57},{0xC3FC, 0x9C58},{0xC3FD, 0x9C59},{0xC3FE, 0x9C5A}, - {0xC3FF, 0x9C61},{0xC400, 0x9C62},{0xC401, 0x9C63},{0xC402, 0x9C64},{0xC403, 0x9C65},{0xC404, 0x9C66},{0xC405, 0x9C67},{0xC406, 0x9C68}, - {0xC407, 0x9C69},{0xC408, 0xBDFA},{0xC409, 0x9C6A},{0xC40A, 0x9C6B},{0xC40B, 0x9C6C},{0xC40C, 0x9C6D},{0xC40D, 0x9C6E},{0xC40E, 0x9C6F}, - {0xC40F, 0x9C70},{0xC410, 0xBDFB},{0xC411, 0x9C71},{0xC412, 0x9C72},{0xC413, 0x9C73},{0xC414, 0x9C74},{0xC415, 0x9C75},{0xC416, 0x9C76}, - {0xC417, 0x9C77},{0xC418, 0x9C78},{0xC419, 0x9C79},{0xC41A, 0x9C7A},{0xC41B, 0x9C81},{0xC41C, 0x9C82},{0xC41D, 0x9C83},{0xC41E, 0x9C84}, - {0xC41F, 0x9C85},{0xC420, 0x9C86},{0xC421, 0x9C87},{0xC422, 0x9C88},{0xC423, 0x9C89},{0xC424, 0xBDFC},{0xC425, 0x9C8A},{0xC426, 0x9C8B}, - {0xC427, 0x9C8C},{0xC428, 0x9C8D},{0xC429, 0x9C8E},{0xC42A, 0x9C8F},{0xC42B, 0x9C90},{0xC42C, 0xBDFD},{0xC42D, 0x9C91},{0xC42E, 0x9C92}, - {0xC42F, 0x9C93},{0xC430, 0xBDFE},{0xC431, 0x9C94},{0xC432, 0x9C95},{0xC433, 0x9C96},{0xC434, 0xBEA1},{0xC435, 0x9C97},{0xC436, 0x9C98}, - {0xC437, 0x9C99},{0xC438, 0x9C9A},{0xC439, 0x9C9B},{0xC43A, 0x9C9C},{0xC43B, 0x9C9D},{0xC43C, 0xBEA2},{0xC43D, 0xBEA3},{0xC43E, 0x9C9E}, - {0xC43F, 0x9C9F},{0xC440, 0x9CA0},{0xC441, 0x9CA1},{0xC442, 0x9CA2},{0xC443, 0x9CA3},{0xC444, 0x9CA4},{0xC445, 0x9CA5},{0xC446, 0x9CA6}, - {0xC447, 0x9CA7},{0xC448, 0xBEA4},{0xC449, 0x9CA8},{0xC44A, 0x9CA9},{0xC44B, 0x9CAA},{0xC44C, 0x9CAB},{0xC44D, 0x9CAC},{0xC44E, 0x9CAD}, - {0xC44F, 0x9CAE},{0xC450, 0x9CAF},{0xC451, 0x9CB0},{0xC452, 0x9CB1},{0xC453, 0x9CB2},{0xC454, 0x9CB3},{0xC455, 0x9CB4},{0xC456, 0x9CB5}, - {0xC457, 0x9CB6},{0xC458, 0x9CB7},{0xC459, 0x9CB8},{0xC45A, 0x9CB9},{0xC45B, 0x9CBA},{0xC45C, 0x9CBB},{0xC45D, 0x9CBC},{0xC45E, 0x9CBD}, - {0xC45F, 0x9CBE},{0xC460, 0x9CBF},{0xC461, 0x9CC0},{0xC462, 0x9CC1},{0xC463, 0x9CC2},{0xC464, 0xBEA5},{0xC465, 0xBEA6},{0xC466, 0x9CC3}, - {0xC467, 0x9CC4},{0xC468, 0xBEA7},{0xC469, 0x9CC5},{0xC46A, 0x9CC6},{0xC46B, 0x9CC7},{0xC46C, 0xBEA8},{0xC46D, 0x9CC8},{0xC46E, 0x9CC9}, - {0xC46F, 0x9CCA},{0xC470, 0x9CCB},{0xC471, 0x9CCC},{0xC472, 0x9CCD},{0xC473, 0x9CCE},{0xC474, 0xBEA9},{0xC475, 0xBEAA},{0xC476, 0x9CCF}, - {0xC477, 0x9CD0},{0xC478, 0x9CD1},{0xC479, 0xBEAB},{0xC47A, 0x9CD2},{0xC47B, 0x9CD3},{0xC47C, 0x9CD4},{0xC47D, 0x9CD5},{0xC47E, 0x9CD6}, - {0xC47F, 0x9CD7},{0xC480, 0xBEAC},{0xC481, 0x9CD8},{0xC482, 0x9CD9},{0xC483, 0x9CDA},{0xC484, 0x9CDB},{0xC485, 0x9CDC},{0xC486, 0x9CDD}, - {0xC487, 0x9CDE},{0xC488, 0x9CDF},{0xC489, 0x9CE0},{0xC48A, 0x9CE1},{0xC48B, 0x9CE2},{0xC48C, 0x9CE3},{0xC48D, 0x9CE4},{0xC48E, 0x9CE5}, - {0xC48F, 0x9CE6},{0xC490, 0x9CE7},{0xC491, 0x9CE8},{0xC492, 0x9CE9},{0xC493, 0x9CEA},{0xC494, 0xBEAD},{0xC495, 0x9CEB},{0xC496, 0x9CEC}, - {0xC497, 0x9CED},{0xC498, 0x9CEE},{0xC499, 0x9CEF},{0xC49A, 0x9CF0},{0xC49B, 0x9CF1},{0xC49C, 0xBEAE},{0xC49D, 0x9CF2},{0xC49E, 0x9CF3}, - {0xC49F, 0x9CF4},{0xC4A0, 0x9CF5},{0xC4A1, 0x9CF6},{0xC4A2, 0x9CF7},{0xC4A3, 0x9CF8},{0xC4A4, 0x9CF9},{0xC4A5, 0x9CFA},{0xC4A6, 0x9CFB}, - {0xC4A7, 0x9CFC},{0xC4A8, 0x9CFD},{0xC4A9, 0x9CFE},{0xC4AA, 0x9D41},{0xC4AB, 0x9D42},{0xC4AC, 0x9D43},{0xC4AD, 0x9D44},{0xC4AE, 0x9D45}, - {0xC4AF, 0x9D46},{0xC4B0, 0x9D47},{0xC4B1, 0x9D48},{0xC4B2, 0x9D49},{0xC4B3, 0x9D4A},{0xC4B4, 0x9D4B},{0xC4B5, 0x9D4C},{0xC4B6, 0x9D4D}, - {0xC4B7, 0x9D4E},{0xC4B8, 0xBEAF},{0xC4B9, 0x9D4F},{0xC4BA, 0x9D50},{0xC4BB, 0x9D51},{0xC4BC, 0xBEB0},{0xC4BD, 0x9D52},{0xC4BE, 0x9D53}, - {0xC4BF, 0x9D54},{0xC4C0, 0x9D55},{0xC4C1, 0x9D56},{0xC4C2, 0x9D57},{0xC4C3, 0x9D58},{0xC4C4, 0x9D59},{0xC4C5, 0x9D5A},{0xC4C6, 0x9D61}, - {0xC4C7, 0x9D62},{0xC4C8, 0x9D63},{0xC4C9, 0x9D64},{0xC4CA, 0x9D65},{0xC4CB, 0x9D66},{0xC4CC, 0x9D67},{0xC4CD, 0x9D68},{0xC4CE, 0x9D69}, - {0xC4CF, 0x9D6A},{0xC4D0, 0x9D6B},{0xC4D1, 0x9D6C},{0xC4D2, 0x9D6D},{0xC4D3, 0x9D6E},{0xC4D4, 0x9D6F},{0xC4D5, 0x9D70},{0xC4D6, 0x9D71}, - {0xC4D7, 0x9D72},{0xC4D8, 0x9D73},{0xC4D9, 0x9D74},{0xC4DA, 0x9D75},{0xC4DB, 0x9D76},{0xC4DC, 0x9D77},{0xC4DD, 0x9D78},{0xC4DE, 0x9D79}, - {0xC4DF, 0x9D7A},{0xC4E0, 0x9D81},{0xC4E1, 0x9D82},{0xC4E2, 0x9D83},{0xC4E3, 0x9D84},{0xC4E4, 0x9D85},{0xC4E5, 0x9D86},{0xC4E6, 0x9D87}, - {0xC4E7, 0x9D88},{0xC4E8, 0x9D89},{0xC4E9, 0xBEB1},{0xC4EA, 0x9D8A},{0xC4EB, 0x9D8B},{0xC4EC, 0x9D8C},{0xC4ED, 0x9D8D},{0xC4EE, 0x9D8E}, - {0xC4EF, 0x9D8F},{0xC4F0, 0xBEB2},{0xC4F1, 0xBEB3},{0xC4F2, 0x9D90},{0xC4F3, 0x9D91},{0xC4F4, 0xBEB4},{0xC4F5, 0x9D92},{0xC4F6, 0x9D93}, - {0xC4F7, 0x9D94},{0xC4F8, 0xBEB5},{0xC4F9, 0x9D95},{0xC4FA, 0xBEB6},{0xC4FB, 0x9D96},{0xC4FC, 0x9D97},{0xC4FD, 0x9D98},{0xC4FE, 0x9D99}, - {0xC4FF, 0xBEB7},{0xC500, 0xBEB8},{0xC501, 0xBEB9},{0xC502, 0x9D9A},{0xC503, 0x9D9B},{0xC504, 0x9D9C},{0xC505, 0x9D9D},{0xC506, 0x9D9E}, - {0xC507, 0x9D9F},{0xC508, 0x9DA0},{0xC509, 0x9DA1},{0xC50A, 0x9DA2},{0xC50B, 0x9DA3},{0xC50C, 0xBEBA},{0xC50D, 0x9DA4},{0xC50E, 0x9DA5}, - {0xC50F, 0x9DA6},{0xC510, 0xBEBB},{0xC511, 0x9DA7},{0xC512, 0x9DA8},{0xC513, 0x9DA9},{0xC514, 0xBEBC},{0xC515, 0x9DAA},{0xC516, 0x9DAB}, - {0xC517, 0x9DAC},{0xC518, 0x9DAD},{0xC519, 0x9DAE},{0xC51A, 0x9DAF},{0xC51B, 0x9DB0},{0xC51C, 0xBEBD},{0xC51D, 0x9DB1},{0xC51E, 0x9DB2}, - {0xC51F, 0x9DB3},{0xC520, 0x9DB4},{0xC521, 0x9DB5},{0xC522, 0x9DB6},{0xC523, 0x9DB7},{0xC524, 0x9DB8},{0xC525, 0x9DB9},{0xC526, 0x9DBA}, - {0xC527, 0x9DBB},{0xC528, 0xBEBE},{0xC529, 0xBEBF},{0xC52A, 0x9DBC},{0xC52B, 0x9DBD},{0xC52C, 0xBEC0},{0xC52D, 0x9DBE},{0xC52E, 0x9DBF}, - {0xC52F, 0x9DC0},{0xC530, 0xBEC1},{0xC531, 0x9DC1},{0xC532, 0x9DC2},{0xC533, 0x9DC3},{0xC534, 0x9DC4},{0xC535, 0x9DC5},{0xC536, 0x9DC6}, - {0xC537, 0x9DC7},{0xC538, 0xBEC2},{0xC539, 0xBEC3},{0xC53A, 0x9DC8},{0xC53B, 0xBEC4},{0xC53C, 0x9DC9},{0xC53D, 0xBEC5},{0xC53E, 0x9DCA}, - {0xC53F, 0x9DCB},{0xC540, 0x9DCC},{0xC541, 0x9DCD},{0xC542, 0x9DCE},{0xC543, 0x9DCF},{0xC544, 0xBEC6},{0xC545, 0xBEC7},{0xC546, 0x9DD0}, - {0xC547, 0x9DD1},{0xC548, 0xBEC8},{0xC549, 0xBEC9},{0xC54A, 0xBECA},{0xC54B, 0x9DD2},{0xC54C, 0xBECB},{0xC54D, 0xBECC},{0xC54E, 0xBECD}, - {0xC54F, 0x9DD3},{0xC550, 0x9DD4},{0xC551, 0x9DD5},{0xC552, 0x9DD6},{0xC553, 0xBECE},{0xC554, 0xBECF},{0xC555, 0xBED0},{0xC556, 0x9DD7}, - {0xC557, 0xBED1},{0xC558, 0xBED2},{0xC559, 0xBED3},{0xC55A, 0x9DD8},{0xC55B, 0x9DD9},{0xC55C, 0x9DDA},{0xC55D, 0xBED4},{0xC55E, 0xBED5}, - {0xC55F, 0x9DDB},{0xC560, 0xBED6},{0xC561, 0xBED7},{0xC562, 0x9DDC},{0xC563, 0x9DDD},{0xC564, 0xBED8},{0xC565, 0x9DDE},{0xC566, 0x9DDF}, - {0xC567, 0x9DE0},{0xC568, 0xBED9},{0xC569, 0x9DE1},{0xC56A, 0x9DE2},{0xC56B, 0x9DE3},{0xC56C, 0x9DE4},{0xC56D, 0x9DE5},{0xC56E, 0x9DE6}, - {0xC56F, 0x9DE7},{0xC570, 0xBEDA},{0xC571, 0xBEDB},{0xC572, 0x9DE8},{0xC573, 0xBEDC},{0xC574, 0xBEDD},{0xC575, 0xBEDE},{0xC576, 0x9DE9}, - {0xC577, 0x9DEA},{0xC578, 0x9DEB},{0xC579, 0x9DEC},{0xC57A, 0x9DED},{0xC57B, 0x9DEE},{0xC57C, 0xBEDF},{0xC57D, 0xBEE0},{0xC57E, 0x9DEF}, - {0xC57F, 0x9DF0},{0xC580, 0xBEE1},{0xC581, 0x9DF1},{0xC582, 0x9DF2},{0xC583, 0x9DF3},{0xC584, 0xBEE2},{0xC585, 0x9DF4},{0xC586, 0x9DF5}, - {0xC587, 0xBEE3},{0xC588, 0x9DF6},{0xC589, 0x9DF7},{0xC58A, 0x9DF8},{0xC58B, 0x9DF9},{0xC58C, 0xBEE4},{0xC58D, 0xBEE5},{0xC58E, 0x9DFA}, - {0xC58F, 0xBEE6},{0xC590, 0x9DFB},{0xC591, 0xBEE7},{0xC592, 0x9DFC},{0xC593, 0x9DFD},{0xC594, 0x9DFE},{0xC595, 0xBEE8},{0xC596, 0x9E41}, - {0xC597, 0xBEE9},{0xC598, 0xBEEA},{0xC599, 0x9E42},{0xC59A, 0x9E43},{0xC59B, 0x9E44},{0xC59C, 0xBEEB},{0xC59D, 0x9E45},{0xC59E, 0x9E46}, - {0xC59F, 0x9E47},{0xC5A0, 0xBEEC},{0xC5A1, 0x9E48},{0xC5A2, 0x9E49},{0xC5A3, 0x9E4A},{0xC5A4, 0x9E4B},{0xC5A5, 0x9E4C},{0xC5A6, 0x9E4D}, - {0xC5A7, 0x9E4E},{0xC5A8, 0x9E4F},{0xC5A9, 0xBEED},{0xC5AA, 0x9E50},{0xC5AB, 0x9E51},{0xC5AC, 0x9E52},{0xC5AD, 0x9E53},{0xC5AE, 0x9E54}, - {0xC5AF, 0x9E55},{0xC5B0, 0x9E56},{0xC5B1, 0x9E57},{0xC5B2, 0x9E58},{0xC5B3, 0x9E59},{0xC5B4, 0xBEEE},{0xC5B5, 0xBEEF},{0xC5B6, 0x9E5A}, - {0xC5B7, 0x9E61},{0xC5B8, 0xBEF0},{0xC5B9, 0xBEF1},{0xC5BA, 0x9E62},{0xC5BB, 0xBEF2},{0xC5BC, 0xBEF3},{0xC5BD, 0xBEF4},{0xC5BE, 0xBEF5}, - {0xC5BF, 0x9E63},{0xC5C0, 0x9E64},{0xC5C1, 0x9E65},{0xC5C2, 0x9E66},{0xC5C3, 0x9E67},{0xC5C4, 0xBEF6},{0xC5C5, 0xBEF7},{0xC5C6, 0xBEF8}, - {0xC5C7, 0xBEF9},{0xC5C8, 0xBEFA},{0xC5C9, 0xBEFB},{0xC5CA, 0xBEFC},{0xC5CB, 0x9E68},{0xC5CC, 0xBEFD},{0xC5CD, 0x9E69},{0xC5CE, 0xBEFE}, - {0xC5CF, 0x9E6A},{0xC5D0, 0xBFA1},{0xC5D1, 0xBFA2},{0xC5D2, 0x9E6B},{0xC5D3, 0x9E6C},{0xC5D4, 0xBFA3},{0xC5D5, 0x9E6D},{0xC5D6, 0x9E6E}, - {0xC5D7, 0x9E6F},{0xC5D8, 0xBFA4},{0xC5D9, 0x9E70},{0xC5DA, 0x9E71},{0xC5DB, 0x9E72},{0xC5DC, 0x9E73},{0xC5DD, 0x9E74},{0xC5DE, 0x9E75}, - {0xC5DF, 0x9E76},{0xC5E0, 0xBFA5},{0xC5E1, 0xBFA6},{0xC5E2, 0x9E77},{0xC5E3, 0xBFA7},{0xC5E4, 0x9E78},{0xC5E5, 0xBFA8},{0xC5E6, 0x9E79}, - {0xC5E7, 0x9E7A},{0xC5E8, 0x9E81},{0xC5E9, 0x9E82},{0xC5EA, 0x9E83},{0xC5EB, 0x9E84},{0xC5EC, 0xBFA9},{0xC5ED, 0xBFAA},{0xC5EE, 0xBFAB}, - {0xC5EF, 0x9E85},{0xC5F0, 0xBFAC},{0xC5F1, 0x9E86},{0xC5F2, 0x9E87},{0xC5F3, 0x9E88},{0xC5F4, 0xBFAD},{0xC5F5, 0x9E89},{0xC5F6, 0xBFAE}, - {0xC5F7, 0xBFAF},{0xC5F8, 0x9E8A},{0xC5F9, 0x9E8B},{0xC5FA, 0x9E8C},{0xC5FB, 0x9E8D},{0xC5FC, 0xBFB0},{0xC5FD, 0xBFB1},{0xC5FE, 0xBFB2}, - {0xC5FF, 0xBFB3},{0xC600, 0xBFB4},{0xC601, 0xBFB5},{0xC602, 0x9E8E},{0xC603, 0x9E8F},{0xC604, 0x9E90},{0xC605, 0xBFB6},{0xC606, 0xBFB7}, - {0xC607, 0xBFB8},{0xC608, 0xBFB9},{0xC609, 0x9E91},{0xC60A, 0x9E92},{0xC60B, 0x9E93},{0xC60C, 0xBFBA},{0xC60D, 0x9E94},{0xC60E, 0x9E95}, - {0xC60F, 0x9E96},{0xC610, 0xBFBB},{0xC611, 0x9E97},{0xC612, 0x9E98},{0xC613, 0x9E99},{0xC614, 0x9E9A},{0xC615, 0x9E9B},{0xC616, 0x9E9C}, - {0xC617, 0x9E9D},{0xC618, 0xBFBC},{0xC619, 0xBFBD},{0xC61A, 0x9E9E},{0xC61B, 0xBFBE},{0xC61C, 0xBFBF},{0xC61D, 0x9E9F},{0xC61E, 0x9EA0}, - {0xC61F, 0x9EA1},{0xC620, 0x9EA2},{0xC621, 0x9EA3},{0xC622, 0x9EA4},{0xC623, 0x9EA5},{0xC624, 0xBFC0},{0xC625, 0xBFC1},{0xC626, 0x9EA6}, - {0xC627, 0x9EA7},{0xC628, 0xBFC2},{0xC629, 0x9EA8},{0xC62A, 0x9EA9},{0xC62B, 0x9EAA},{0xC62C, 0xBFC3},{0xC62D, 0xBFC4},{0xC62E, 0xBFC5}, - {0xC62F, 0x9EAB},{0xC630, 0xBFC6},{0xC631, 0x9EAC},{0xC632, 0x9EAD},{0xC633, 0xBFC7},{0xC634, 0xBFC8},{0xC635, 0xBFC9},{0xC636, 0x9EAE}, - {0xC637, 0xBFCA},{0xC638, 0x9EAF},{0xC639, 0xBFCB},{0xC63A, 0x9EB0},{0xC63B, 0xBFCC},{0xC63C, 0x9EB1},{0xC63D, 0x9EB2},{0xC63E, 0x9EB3}, - {0xC63F, 0x9EB4},{0xC640, 0xBFCD},{0xC641, 0xBFCE},{0xC642, 0x9EB5},{0xC643, 0x9EB6},{0xC644, 0xBFCF},{0xC645, 0x9EB7},{0xC646, 0x9EB8}, - {0xC647, 0x9EB9},{0xC648, 0xBFD0},{0xC649, 0x9EBA},{0xC64A, 0x9EBB},{0xC64B, 0x9EBC},{0xC64C, 0x9EBD},{0xC64D, 0x9EBE},{0xC64E, 0x9EBF}, - {0xC64F, 0x9EC0},{0xC650, 0xBFD1},{0xC651, 0xBFD2},{0xC652, 0x9EC1},{0xC653, 0xBFD3},{0xC654, 0xBFD4},{0xC655, 0xBFD5},{0xC656, 0x9EC2}, - {0xC657, 0x9EC3},{0xC658, 0x9EC4},{0xC659, 0x9EC5},{0xC65A, 0x9EC6},{0xC65B, 0x9EC7},{0xC65C, 0xBFD6},{0xC65D, 0xBFD7},{0xC65E, 0x9EC8}, - {0xC65F, 0x9EC9},{0xC660, 0xBFD8},{0xC661, 0x9ECA},{0xC662, 0x9ECB},{0xC663, 0x9ECC},{0xC664, 0x9ECD},{0xC665, 0x9ECE},{0xC666, 0x9ECF}, - {0xC667, 0x9ED0},{0xC668, 0x9ED1},{0xC669, 0x9ED2},{0xC66A, 0x9ED3},{0xC66B, 0x9ED4},{0xC66C, 0xBFD9},{0xC66D, 0x9ED5},{0xC66E, 0x9ED6}, - {0xC66F, 0xBFDA},{0xC670, 0x9ED7},{0xC671, 0xBFDB},{0xC672, 0x9ED8},{0xC673, 0x9ED9},{0xC674, 0x9EDA},{0xC675, 0x9EDB},{0xC676, 0x9EDC}, - {0xC677, 0x9EDD},{0xC678, 0xBFDC},{0xC679, 0xBFDD},{0xC67A, 0x9EDE},{0xC67B, 0x9EDF},{0xC67C, 0xBFDE},{0xC67D, 0x9EE0},{0xC67E, 0x9EE1}, - {0xC67F, 0x9EE2},{0xC680, 0xBFDF},{0xC681, 0x9EE3},{0xC682, 0x9EE4},{0xC683, 0x9EE5},{0xC684, 0x9EE6},{0xC685, 0x9EE7},{0xC686, 0x9EE8}, - {0xC687, 0x9EE9},{0xC688, 0xBFE0},{0xC689, 0xBFE1},{0xC68A, 0x9EEA},{0xC68B, 0xBFE2},{0xC68C, 0x9EEB},{0xC68D, 0xBFE3},{0xC68E, 0x9EEC}, - {0xC68F, 0x9EED},{0xC690, 0x9EEE},{0xC691, 0x9EEF},{0xC692, 0x9EF0},{0xC693, 0x9EF1},{0xC694, 0xBFE4},{0xC695, 0xBFE5},{0xC696, 0x9EF2}, - {0xC697, 0x9EF3},{0xC698, 0xBFE6},{0xC699, 0x9EF4},{0xC69A, 0x9EF5},{0xC69B, 0x9EF6},{0xC69C, 0xBFE7},{0xC69D, 0x9EF7},{0xC69E, 0x9EF8}, - {0xC69F, 0x9EF9},{0xC6A0, 0x9EFA},{0xC6A1, 0x9EFB},{0xC6A2, 0x9EFC},{0xC6A3, 0x9EFD},{0xC6A4, 0xBFE8},{0xC6A5, 0xBFE9},{0xC6A6, 0x9EFE}, - {0xC6A7, 0xBFEA},{0xC6A8, 0x9F41},{0xC6A9, 0xBFEB},{0xC6AA, 0x9F42},{0xC6AB, 0x9F43},{0xC6AC, 0x9F44},{0xC6AD, 0x9F45},{0xC6AE, 0x9F46}, - {0xC6AF, 0x9F47},{0xC6B0, 0xBFEC},{0xC6B1, 0xBFED},{0xC6B2, 0x9F48},{0xC6B3, 0x9F49},{0xC6B4, 0xBFEE},{0xC6B5, 0x9F4A},{0xC6B6, 0x9F4B}, - {0xC6B7, 0x9F4C},{0xC6B8, 0xBFEF},{0xC6B9, 0xBFF0},{0xC6BA, 0xBFF1},{0xC6BB, 0x9F4D},{0xC6BC, 0x9F4E},{0xC6BD, 0x9F4F},{0xC6BE, 0x9F50}, - {0xC6BF, 0x9F51},{0xC6C0, 0xBFF2},{0xC6C1, 0xBFF3},{0xC6C2, 0x9F52},{0xC6C3, 0xBFF4},{0xC6C4, 0x9F53},{0xC6C5, 0xBFF5},{0xC6C6, 0x9F54}, - {0xC6C7, 0x9F55},{0xC6C8, 0x9F56},{0xC6C9, 0x9F57},{0xC6CA, 0x9F58},{0xC6CB, 0x9F59},{0xC6CC, 0xBFF6},{0xC6CD, 0xBFF7},{0xC6CE, 0x9F5A}, - {0xC6CF, 0x9F61},{0xC6D0, 0xBFF8},{0xC6D1, 0x9F62},{0xC6D2, 0x9F63},{0xC6D3, 0x9F64},{0xC6D4, 0xBFF9},{0xC6D5, 0x9F65},{0xC6D6, 0x9F66}, - {0xC6D7, 0x9F67},{0xC6D8, 0x9F68},{0xC6D9, 0x9F69},{0xC6DA, 0x9F6A},{0xC6DB, 0x9F6B},{0xC6DC, 0xBFFA},{0xC6DD, 0xBFFB},{0xC6DE, 0x9F6C}, - {0xC6DF, 0x9F6D},{0xC6E0, 0xBFFC},{0xC6E1, 0xBFFD},{0xC6E2, 0x9F6E},{0xC6E3, 0x9F6F},{0xC6E4, 0x9F70},{0xC6E5, 0x9F71},{0xC6E6, 0x9F72}, - {0xC6E7, 0x9F73},{0xC6E8, 0xBFFE},{0xC6E9, 0xC0A1},{0xC6EA, 0x9F74},{0xC6EB, 0x9F75},{0xC6EC, 0xC0A2},{0xC6ED, 0x9F76},{0xC6EE, 0x9F77}, - {0xC6EF, 0x9F78},{0xC6F0, 0xC0A3},{0xC6F1, 0x9F79},{0xC6F2, 0x9F7A},{0xC6F3, 0x9F81},{0xC6F4, 0x9F82},{0xC6F5, 0x9F83},{0xC6F6, 0x9F84}, - {0xC6F7, 0x9F85},{0xC6F8, 0xC0A4},{0xC6F9, 0xC0A5},{0xC6FA, 0x9F86},{0xC6FB, 0x9F87},{0xC6FC, 0x9F88},{0xC6FD, 0xC0A6},{0xC6FE, 0x9F89}, - {0xC6FF, 0x9F8A},{0xC700, 0x9F8B},{0xC701, 0x9F8C},{0xC702, 0x9F8D},{0xC703, 0x9F8E},{0xC704, 0xC0A7},{0xC705, 0xC0A8},{0xC706, 0x9F8F}, - {0xC707, 0x9F90},{0xC708, 0xC0A9},{0xC709, 0x9F91},{0xC70A, 0x9F92},{0xC70B, 0x9F93},{0xC70C, 0xC0AA},{0xC70D, 0x9F94},{0xC70E, 0x9F95}, - {0xC70F, 0x9F96},{0xC710, 0x9F97},{0xC711, 0x9F98},{0xC712, 0x9F99},{0xC713, 0x9F9A},{0xC714, 0xC0AB},{0xC715, 0xC0AC},{0xC716, 0x9F9B}, - {0xC717, 0xC0AD},{0xC718, 0x9F9C},{0xC719, 0xC0AE},{0xC71A, 0x9F9D},{0xC71B, 0x9F9E},{0xC71C, 0x9F9F},{0xC71D, 0x9FA0},{0xC71E, 0x9FA1}, - {0xC71F, 0x9FA2},{0xC720, 0xC0AF},{0xC721, 0xC0B0},{0xC722, 0x9FA3},{0xC723, 0x9FA4},{0xC724, 0xC0B1},{0xC725, 0x9FA5},{0xC726, 0x9FA6}, - {0xC727, 0x9FA7},{0xC728, 0xC0B2},{0xC729, 0x9FA8},{0xC72A, 0x9FA9},{0xC72B, 0x9FAA},{0xC72C, 0x9FAB},{0xC72D, 0x9FAC},{0xC72E, 0x9FAD}, - {0xC72F, 0x9FAE},{0xC730, 0xC0B3},{0xC731, 0xC0B4},{0xC732, 0x9FAF},{0xC733, 0xC0B5},{0xC734, 0x9FB0},{0xC735, 0xC0B6},{0xC736, 0x9FB1}, - {0xC737, 0xC0B7},{0xC738, 0x9FB2},{0xC739, 0x9FB3},{0xC73A, 0x9FB4},{0xC73B, 0x9FB5},{0xC73C, 0xC0B8},{0xC73D, 0xC0B9},{0xC73E, 0x9FB6}, - {0xC73F, 0x9FB7},{0xC740, 0xC0BA},{0xC741, 0x9FB8},{0xC742, 0x9FB9},{0xC743, 0x9FBA},{0xC744, 0xC0BB},{0xC745, 0x9FBB},{0xC746, 0x9FBC}, - {0xC747, 0x9FBD},{0xC748, 0x9FBE},{0xC749, 0x9FBF},{0xC74A, 0xC0BC},{0xC74B, 0x9FC0},{0xC74C, 0xC0BD},{0xC74D, 0xC0BE},{0xC74E, 0x9FC1}, - {0xC74F, 0xC0BF},{0xC750, 0x9FC2},{0xC751, 0xC0C0},{0xC752, 0xC0C1},{0xC753, 0xC0C2},{0xC754, 0xC0C3},{0xC755, 0xC0C4},{0xC756, 0xC0C5}, - {0xC757, 0xC0C6},{0xC758, 0xC0C7},{0xC759, 0x9FC3},{0xC75A, 0x9FC4},{0xC75B, 0x9FC5},{0xC75C, 0xC0C8},{0xC75D, 0x9FC6},{0xC75E, 0x9FC7}, - {0xC75F, 0x9FC8},{0xC760, 0xC0C9},{0xC761, 0x9FC9},{0xC762, 0x9FCA},{0xC763, 0x9FCB},{0xC764, 0x9FCC},{0xC765, 0x9FCD},{0xC766, 0x9FCE}, - {0xC767, 0x9FCF},{0xC768, 0xC0CA},{0xC769, 0x9FD0},{0xC76A, 0x9FD1},{0xC76B, 0xC0CB},{0xC76C, 0x9FD2},{0xC76D, 0x9FD3},{0xC76E, 0x9FD4}, - {0xC76F, 0x9FD5},{0xC770, 0x9FD6},{0xC771, 0x9FD7},{0xC772, 0x9FD8},{0xC773, 0x9FD9},{0xC774, 0xC0CC},{0xC775, 0xC0CD},{0xC776, 0x9FDA}, - {0xC777, 0x9FDB},{0xC778, 0xC0CE},{0xC779, 0x9FDC},{0xC77A, 0x9FDD},{0xC77B, 0x9FDE},{0xC77C, 0xC0CF},{0xC77D, 0xC0D0},{0xC77E, 0xC0D1}, - {0xC77F, 0x9FDF},{0xC780, 0x9FE0},{0xC781, 0x9FE1},{0xC782, 0x9FE2},{0xC783, 0xC0D2},{0xC784, 0xC0D3},{0xC785, 0xC0D4},{0xC786, 0x9FE3}, - {0xC787, 0xC0D5},{0xC788, 0xC0D6},{0xC789, 0xC0D7},{0xC78A, 0xC0D8},{0xC78B, 0x9FE4},{0xC78C, 0x9FE5},{0xC78D, 0x9FE6},{0xC78E, 0xC0D9}, - {0xC78F, 0x9FE7},{0xC790, 0xC0DA},{0xC791, 0xC0DB},{0xC792, 0x9FE8},{0xC793, 0x9FE9},{0xC794, 0xC0DC},{0xC795, 0x9FEA},{0xC796, 0xC0DD}, - {0xC797, 0xC0DE},{0xC798, 0xC0DF},{0xC799, 0x9FEB},{0xC79A, 0xC0E0},{0xC79B, 0x9FEC},{0xC79C, 0x9FED},{0xC79D, 0x9FEE},{0xC79E, 0x9FEF}, - {0xC79F, 0x9FF0},{0xC7A0, 0xC0E1},{0xC7A1, 0xC0E2},{0xC7A2, 0x9FF1},{0xC7A3, 0xC0E3},{0xC7A4, 0xC0E4},{0xC7A5, 0xC0E5},{0xC7A6, 0xC0E6}, - {0xC7A7, 0x9FF2},{0xC7A8, 0x9FF3},{0xC7A9, 0x9FF4},{0xC7AA, 0x9FF5},{0xC7AB, 0x9FF6},{0xC7AC, 0xC0E7},{0xC7AD, 0xC0E8},{0xC7AE, 0x9FF7}, - {0xC7AF, 0x9FF8},{0xC7B0, 0xC0E9},{0xC7B1, 0x9FF9},{0xC7B2, 0x9FFA},{0xC7B3, 0x9FFB},{0xC7B4, 0xC0EA},{0xC7B5, 0x9FFC},{0xC7B6, 0x9FFD}, - {0xC7B7, 0x9FFE},{0xC7B8, 0xA041},{0xC7B9, 0xA042},{0xC7BA, 0xA043},{0xC7BB, 0xA044},{0xC7BC, 0xC0EB},{0xC7BD, 0xC0EC},{0xC7BE, 0xA045}, - {0xC7BF, 0xC0ED},{0xC7C0, 0xC0EE},{0xC7C1, 0xC0EF},{0xC7C2, 0xA046},{0xC7C3, 0xA047},{0xC7C4, 0xA048},{0xC7C5, 0xA049},{0xC7C6, 0xA04A}, - {0xC7C7, 0xA04B},{0xC7C8, 0xC0F0},{0xC7C9, 0xC0F1},{0xC7CA, 0xA04C},{0xC7CB, 0xA04D},{0xC7CC, 0xC0F2},{0xC7CD, 0xA04E},{0xC7CE, 0xC0F3}, - {0xC7CF, 0xA04F},{0xC7D0, 0xC0F4},{0xC7D1, 0xA050},{0xC7D2, 0xA051},{0xC7D3, 0xA052},{0xC7D4, 0xA053},{0xC7D5, 0xA054},{0xC7D6, 0xA055}, - {0xC7D7, 0xA056},{0xC7D8, 0xC0F5},{0xC7D9, 0xA057},{0xC7DA, 0xA058},{0xC7DB, 0xA059},{0xC7DC, 0xA05A},{0xC7DD, 0xC0F6},{0xC7DE, 0xA061}, - {0xC7DF, 0xA062},{0xC7E0, 0xA063},{0xC7E1, 0xA064},{0xC7E2, 0xA065},{0xC7E3, 0xA066},{0xC7E4, 0xC0F7},{0xC7E5, 0xA067},{0xC7E6, 0xA068}, - {0xC7E7, 0xA069},{0xC7E8, 0xC0F8},{0xC7E9, 0xA06A},{0xC7EA, 0xA06B},{0xC7EB, 0xA06C},{0xC7EC, 0xC0F9},{0xC7ED, 0xA06D},{0xC7EE, 0xA06E}, - {0xC7EF, 0xA06F},{0xC7F0, 0xA070},{0xC7F1, 0xA071},{0xC7F2, 0xA072},{0xC7F3, 0xA073},{0xC7F4, 0xA074},{0xC7F5, 0xA075},{0xC7F6, 0xA076}, - {0xC7F7, 0xA077},{0xC7F8, 0xA078},{0xC7F9, 0xA079},{0xC7FA, 0xA07A},{0xC7FB, 0xA081},{0xC7FC, 0xA082},{0xC7FD, 0xA083},{0xC7FE, 0xA084}, - {0xC7FF, 0xA085},{0xC800, 0xC0FA},{0xC801, 0xC0FB},{0xC802, 0xA086},{0xC803, 0xA087},{0xC804, 0xC0FC},{0xC805, 0xA088},{0xC806, 0xA089}, - {0xC807, 0xA08A},{0xC808, 0xC0FD},{0xC809, 0xA08B},{0xC80A, 0xC0FE},{0xC80B, 0xA08C},{0xC80C, 0xA08D},{0xC80D, 0xA08E},{0xC80E, 0xA08F}, - {0xC80F, 0xA090},{0xC810, 0xC1A1},{0xC811, 0xC1A2},{0xC812, 0xA091},{0xC813, 0xC1A3},{0xC814, 0xA092},{0xC815, 0xC1A4},{0xC816, 0xC1A5}, - {0xC817, 0xA093},{0xC818, 0xA094},{0xC819, 0xA095},{0xC81A, 0xA096},{0xC81B, 0xA097},{0xC81C, 0xC1A6},{0xC81D, 0xC1A7},{0xC81E, 0xA098}, - {0xC81F, 0xA099},{0xC820, 0xC1A8},{0xC821, 0xA09A},{0xC822, 0xA09B},{0xC823, 0xA09C},{0xC824, 0xC1A9},{0xC825, 0xA09D},{0xC826, 0xA09E}, - {0xC827, 0xA09F},{0xC828, 0xA0A0},{0xC829, 0xA0A1},{0xC82A, 0xA0A2},{0xC82B, 0xA0A3},{0xC82C, 0xC1AA},{0xC82D, 0xC1AB},{0xC82E, 0xA0A4}, - {0xC82F, 0xC1AC},{0xC830, 0xA0A5},{0xC831, 0xC1AD},{0xC832, 0xA0A6},{0xC833, 0xA0A7},{0xC834, 0xA0A8},{0xC835, 0xA0A9},{0xC836, 0xA0AA}, - {0xC837, 0xA0AB},{0xC838, 0xC1AE},{0xC839, 0xA0AC},{0xC83A, 0xA0AD},{0xC83B, 0xA0AE},{0xC83C, 0xC1AF},{0xC83D, 0xA0AF},{0xC83E, 0xA0B0}, - {0xC83F, 0xA0B1},{0xC840, 0xC1B0},{0xC841, 0xA0B2},{0xC842, 0xA0B3},{0xC843, 0xA0B4},{0xC844, 0xA0B5},{0xC845, 0xA0B6},{0xC846, 0xA0B7}, - {0xC847, 0xA0B8},{0xC848, 0xC1B1},{0xC849, 0xC1B2},{0xC84A, 0xA0B9},{0xC84B, 0xA0BA},{0xC84C, 0xC1B3},{0xC84D, 0xC1B4},{0xC84E, 0xA0BB}, - {0xC84F, 0xA0BC},{0xC850, 0xA0BD},{0xC851, 0xA0BE},{0xC852, 0xA0BF},{0xC853, 0xA0C0},{0xC854, 0xC1B5},{0xC855, 0xA0C1},{0xC856, 0xA0C2}, - {0xC857, 0xA0C3},{0xC858, 0xA0C4},{0xC859, 0xA0C5},{0xC85A, 0xA0C6},{0xC85B, 0xA0C7},{0xC85C, 0xA0C8},{0xC85D, 0xA0C9},{0xC85E, 0xA0CA}, - {0xC85F, 0xA0CB},{0xC860, 0xA0CC},{0xC861, 0xA0CD},{0xC862, 0xA0CE},{0xC863, 0xA0CF},{0xC864, 0xA0D0},{0xC865, 0xA0D1},{0xC866, 0xA0D2}, - {0xC867, 0xA0D3},{0xC868, 0xA0D4},{0xC869, 0xA0D5},{0xC86A, 0xA0D6},{0xC86B, 0xA0D7},{0xC86C, 0xA0D8},{0xC86D, 0xA0D9},{0xC86E, 0xA0DA}, - {0xC86F, 0xA0DB},{0xC870, 0xC1B6},{0xC871, 0xC1B7},{0xC872, 0xA0DC},{0xC873, 0xA0DD},{0xC874, 0xC1B8},{0xC875, 0xA0DE},{0xC876, 0xA0DF}, - {0xC877, 0xA0E0},{0xC878, 0xC1B9},{0xC879, 0xA0E1},{0xC87A, 0xC1BA},{0xC87B, 0xA0E2},{0xC87C, 0xA0E3},{0xC87D, 0xA0E4},{0xC87E, 0xA0E5}, - {0xC87F, 0xA0E6},{0xC880, 0xC1BB},{0xC881, 0xC1BC},{0xC882, 0xA0E7},{0xC883, 0xC1BD},{0xC884, 0xA0E8},{0xC885, 0xC1BE},{0xC886, 0xC1BF}, - {0xC887, 0xC1C0},{0xC888, 0xA0E9},{0xC889, 0xA0EA},{0xC88A, 0xA0EB},{0xC88B, 0xC1C1},{0xC88C, 0xC1C2},{0xC88D, 0xC1C3},{0xC88E, 0xA0EC}, - {0xC88F, 0xA0ED},{0xC890, 0xA0EE},{0xC891, 0xA0EF},{0xC892, 0xA0F0},{0xC893, 0xA0F1},{0xC894, 0xC1C4},{0xC895, 0xA0F2},{0xC896, 0xA0F3}, - {0xC897, 0xA0F4},{0xC898, 0xA0F5},{0xC899, 0xA0F6},{0xC89A, 0xA0F7},{0xC89B, 0xA0F8},{0xC89C, 0xA0F9},{0xC89D, 0xC1C5},{0xC89E, 0xA0FA}, - {0xC89F, 0xC1C6},{0xC8A0, 0xA0FB},{0xC8A1, 0xC1C7},{0xC8A2, 0xA0FC},{0xC8A3, 0xA0FD},{0xC8A4, 0xA0FE},{0xC8A5, 0xA141},{0xC8A6, 0xA142}, - {0xC8A7, 0xA143},{0xC8A8, 0xC1C8},{0xC8A9, 0xA144},{0xC8AA, 0xA145},{0xC8AB, 0xA146},{0xC8AC, 0xA147},{0xC8AD, 0xA148},{0xC8AE, 0xA149}, - {0xC8AF, 0xA14A},{0xC8B0, 0xA14B},{0xC8B1, 0xA14C},{0xC8B2, 0xA14D},{0xC8B3, 0xA14E},{0xC8B4, 0xA14F},{0xC8B5, 0xA150},{0xC8B6, 0xA151}, - {0xC8B7, 0xA152},{0xC8B8, 0xA153},{0xC8B9, 0xA154},{0xC8BA, 0xA155},{0xC8BB, 0xA156},{0xC8BC, 0xC1C9},{0xC8BD, 0xC1CA},{0xC8BE, 0xA157}, - {0xC8BF, 0xA158},{0xC8C0, 0xA159},{0xC8C1, 0xA15A},{0xC8C2, 0xA161},{0xC8C3, 0xA162},{0xC8C4, 0xC1CB},{0xC8C5, 0xA163},{0xC8C6, 0xA164}, - {0xC8C7, 0xA165},{0xC8C8, 0xC1CC},{0xC8C9, 0xA166},{0xC8CA, 0xA167},{0xC8CB, 0xA168},{0xC8CC, 0xC1CD},{0xC8CD, 0xA169},{0xC8CE, 0xA16A}, - {0xC8CF, 0xA16B},{0xC8D0, 0xA16C},{0xC8D1, 0xA16D},{0xC8D2, 0xA16E},{0xC8D3, 0xA16F},{0xC8D4, 0xC1CE},{0xC8D5, 0xC1CF},{0xC8D6, 0xA170}, - {0xC8D7, 0xC1D0},{0xC8D8, 0xA171},{0xC8D9, 0xC1D1},{0xC8DA, 0xA172},{0xC8DB, 0xA173},{0xC8DC, 0xA174},{0xC8DD, 0xA175},{0xC8DE, 0xA176}, - {0xC8DF, 0xA177},{0xC8E0, 0xC1D2},{0xC8E1, 0xC1D3},{0xC8E2, 0xA178},{0xC8E3, 0xA179},{0xC8E4, 0xC1D4},{0xC8E5, 0xA17A},{0xC8E6, 0xA181}, - {0xC8E7, 0xA182},{0xC8E8, 0xA183},{0xC8E9, 0xA184},{0xC8EA, 0xA185},{0xC8EB, 0xA186},{0xC8EC, 0xA187},{0xC8ED, 0xA188},{0xC8EE, 0xA189}, - {0xC8EF, 0xA18A},{0xC8F0, 0xA18B},{0xC8F1, 0xA18C},{0xC8F2, 0xA18D},{0xC8F3, 0xA18E},{0xC8F4, 0xA18F},{0xC8F5, 0xC1D5},{0xC8F6, 0xA190}, - {0xC8F7, 0xA191},{0xC8F8, 0xA192},{0xC8F9, 0xA193},{0xC8FA, 0xA194},{0xC8FB, 0xA195},{0xC8FC, 0xC1D6},{0xC8FD, 0xC1D7},{0xC8FE, 0xA196}, - {0xC8FF, 0xA197},{0xC900, 0xC1D8},{0xC901, 0xA198},{0xC902, 0xA199},{0xC903, 0xA19A},{0xC904, 0xC1D9},{0xC905, 0xC1DA},{0xC906, 0xC1DB}, - {0xC907, 0xA19B},{0xC908, 0xA19C},{0xC909, 0xA19D},{0xC90A, 0xA19E},{0xC90B, 0xA19F},{0xC90C, 0xC1DC},{0xC90D, 0xC1DD},{0xC90E, 0xA1A0}, - {0xC90F, 0xC1DE},{0xC910, 0xA241},{0xC911, 0xC1DF},{0xC912, 0xA242},{0xC913, 0xA243},{0xC914, 0xA244},{0xC915, 0xA245},{0xC916, 0xA246}, - {0xC917, 0xA247},{0xC918, 0xC1E0},{0xC919, 0xA248},{0xC91A, 0xA249},{0xC91B, 0xA24A},{0xC91C, 0xA24B},{0xC91D, 0xA24C},{0xC91E, 0xA24D}, - {0xC91F, 0xA24E},{0xC920, 0xA24F},{0xC921, 0xA250},{0xC922, 0xA251},{0xC923, 0xA252},{0xC924, 0xA253},{0xC925, 0xA254},{0xC926, 0xA255}, - {0xC927, 0xA256},{0xC928, 0xA257},{0xC929, 0xA258},{0xC92A, 0xA259},{0xC92B, 0xA25A},{0xC92C, 0xC1E1},{0xC92D, 0xA261},{0xC92E, 0xA262}, - {0xC92F, 0xA263},{0xC930, 0xA264},{0xC931, 0xA265},{0xC932, 0xA266},{0xC933, 0xA267},{0xC934, 0xC1E2},{0xC935, 0xA268},{0xC936, 0xA269}, - {0xC937, 0xA26A},{0xC938, 0xA26B},{0xC939, 0xA26C},{0xC93A, 0xA26D},{0xC93B, 0xA26E},{0xC93C, 0xA26F},{0xC93D, 0xA270},{0xC93E, 0xA271}, - {0xC93F, 0xA272},{0xC940, 0xA273},{0xC941, 0xA274},{0xC942, 0xA275},{0xC943, 0xA276},{0xC944, 0xA277},{0xC945, 0xA278},{0xC946, 0xA279}, - {0xC947, 0xA27A},{0xC948, 0xA281},{0xC949, 0xA282},{0xC94A, 0xA283},{0xC94B, 0xA284},{0xC94C, 0xA285},{0xC94D, 0xA286},{0xC94E, 0xA287}, - {0xC94F, 0xA288},{0xC950, 0xC1E3},{0xC951, 0xC1E4},{0xC952, 0xA289},{0xC953, 0xA28A},{0xC954, 0xC1E5},{0xC955, 0xA28B},{0xC956, 0xA28C}, - {0xC957, 0xA28D},{0xC958, 0xC1E6},{0xC959, 0xA28E},{0xC95A, 0xA28F},{0xC95B, 0xA290},{0xC95C, 0xA291},{0xC95D, 0xA292},{0xC95E, 0xA293}, - {0xC95F, 0xA294},{0xC960, 0xC1E7},{0xC961, 0xC1E8},{0xC962, 0xA295},{0xC963, 0xC1E9},{0xC964, 0xA296},{0xC965, 0xA297},{0xC966, 0xA298}, - {0xC967, 0xA299},{0xC968, 0xA29A},{0xC969, 0xA29B},{0xC96A, 0xA29C},{0xC96B, 0xA29D},{0xC96C, 0xC1EA},{0xC96D, 0xA29E},{0xC96E, 0xA29F}, - {0xC96F, 0xA2A0},{0xC970, 0xC1EB},{0xC971, 0xA341},{0xC972, 0xA342},{0xC973, 0xA343},{0xC974, 0xC1EC},{0xC975, 0xA344},{0xC976, 0xA345}, - {0xC977, 0xA346},{0xC978, 0xA347},{0xC979, 0xA348},{0xC97A, 0xA349},{0xC97B, 0xA34A},{0xC97C, 0xC1ED},{0xC97D, 0xA34B},{0xC97E, 0xA34C}, - {0xC97F, 0xA34D},{0xC980, 0xA34E},{0xC981, 0xA34F},{0xC982, 0xA350},{0xC983, 0xA351},{0xC984, 0xA352},{0xC985, 0xA353},{0xC986, 0xA354}, - {0xC987, 0xA355},{0xC988, 0xC1EE},{0xC989, 0xC1EF},{0xC98A, 0xA356},{0xC98B, 0xA357},{0xC98C, 0xC1F0},{0xC98D, 0xA358},{0xC98E, 0xA359}, - {0xC98F, 0xA35A},{0xC990, 0xC1F1},{0xC991, 0xA361},{0xC992, 0xA362},{0xC993, 0xA363},{0xC994, 0xA364},{0xC995, 0xA365},{0xC996, 0xA366}, - {0xC997, 0xA367},{0xC998, 0xC1F2},{0xC999, 0xC1F3},{0xC99A, 0xA368},{0xC99B, 0xC1F4},{0xC99C, 0xA369},{0xC99D, 0xC1F5},{0xC99E, 0xA36A}, - {0xC99F, 0xA36B},{0xC9A0, 0xA36C},{0xC9A1, 0xA36D},{0xC9A2, 0xA36E},{0xC9A3, 0xA36F},{0xC9A4, 0xA370},{0xC9A5, 0xA371},{0xC9A6, 0xA372}, - {0xC9A7, 0xA373},{0xC9A8, 0xA374},{0xC9A9, 0xA375},{0xC9AA, 0xA376},{0xC9AB, 0xA377},{0xC9AC, 0xA378},{0xC9AD, 0xA379},{0xC9AE, 0xA37A}, - {0xC9AF, 0xA381},{0xC9B0, 0xA382},{0xC9B1, 0xA383},{0xC9B2, 0xA384},{0xC9B3, 0xA385},{0xC9B4, 0xA386},{0xC9B5, 0xA387},{0xC9B6, 0xA388}, - {0xC9B7, 0xA389},{0xC9B8, 0xA38A},{0xC9B9, 0xA38B},{0xC9BA, 0xA38C},{0xC9BB, 0xA38D},{0xC9BC, 0xA38E},{0xC9BD, 0xA38F},{0xC9BE, 0xA390}, - {0xC9BF, 0xA391},{0xC9C0, 0xC1F6},{0xC9C1, 0xC1F7},{0xC9C2, 0xA392},{0xC9C3, 0xA393},{0xC9C4, 0xC1F8},{0xC9C5, 0xA394},{0xC9C6, 0xA395}, - {0xC9C7, 0xC1F9},{0xC9C8, 0xC1FA},{0xC9C9, 0xA396},{0xC9CA, 0xC1FB},{0xC9CB, 0xA397},{0xC9CC, 0xA398},{0xC9CD, 0xA399},{0xC9CE, 0xA39A}, - {0xC9CF, 0xA39B},{0xC9D0, 0xC1FC},{0xC9D1, 0xC1FD},{0xC9D2, 0xA39C},{0xC9D3, 0xC1FE},{0xC9D4, 0xA39D},{0xC9D5, 0xC2A1},{0xC9D6, 0xC2A2}, - {0xC9D7, 0xA39E},{0xC9D8, 0xA39F},{0xC9D9, 0xC2A3},{0xC9DA, 0xC2A4},{0xC9DB, 0xA3A0},{0xC9DC, 0xC2A5},{0xC9DD, 0xC2A6},{0xC9DE, 0xA441}, - {0xC9DF, 0xA442},{0xC9E0, 0xC2A7},{0xC9E1, 0xA443},{0xC9E2, 0xC2A8},{0xC9E3, 0xA444},{0xC9E4, 0xC2A9},{0xC9E5, 0xA445},{0xC9E6, 0xA446}, - {0xC9E7, 0xC2AA},{0xC9E8, 0xA447},{0xC9E9, 0xA448},{0xC9EA, 0xA449},{0xC9EB, 0xA44A},{0xC9EC, 0xC2AB},{0xC9ED, 0xC2AC},{0xC9EE, 0xA44B}, - {0xC9EF, 0xC2AD},{0xC9F0, 0xC2AE},{0xC9F1, 0xC2AF},{0xC9F2, 0xA44C},{0xC9F3, 0xA44D},{0xC9F4, 0xA44E},{0xC9F5, 0xA44F},{0xC9F6, 0xA450}, - {0xC9F7, 0xA451},{0xC9F8, 0xC2B0},{0xC9F9, 0xC2B1},{0xC9FA, 0xA452},{0xC9FB, 0xA453},{0xC9FC, 0xC2B2},{0xC9FD, 0xA454},{0xC9FE, 0xA455}, - {0xC9FF, 0xA456},{0xCA00, 0xC2B3},{0xCA01, 0xA457},{0xCA02, 0xA458},{0xCA03, 0xA459},{0xCA04, 0xA45A},{0xCA05, 0xA461},{0xCA06, 0xA462}, - {0xCA07, 0xA463},{0xCA08, 0xC2B4},{0xCA09, 0xC2B5},{0xCA0A, 0xA464},{0xCA0B, 0xC2B6},{0xCA0C, 0xC2B7},{0xCA0D, 0xC2B8},{0xCA0E, 0xA465}, - {0xCA0F, 0xA466},{0xCA10, 0xA467},{0xCA11, 0xA468},{0xCA12, 0xA469},{0xCA13, 0xA46A},{0xCA14, 0xC2B9},{0xCA15, 0xA46B},{0xCA16, 0xA46C}, - {0xCA17, 0xA46D},{0xCA18, 0xC2BA},{0xCA19, 0xA46E},{0xCA1A, 0xA46F},{0xCA1B, 0xA470},{0xCA1C, 0xA471},{0xCA1D, 0xA472},{0xCA1E, 0xA473}, - {0xCA1F, 0xA474},{0xCA20, 0xA475},{0xCA21, 0xA476},{0xCA22, 0xA477},{0xCA23, 0xA478},{0xCA24, 0xA479},{0xCA25, 0xA47A},{0xCA26, 0xA481}, - {0xCA27, 0xA482},{0xCA28, 0xA483},{0xCA29, 0xC2BB},{0xCA2A, 0xA484},{0xCA2B, 0xA485},{0xCA2C, 0xA486},{0xCA2D, 0xA487},{0xCA2E, 0xA488}, - {0xCA2F, 0xA489},{0xCA30, 0xA48A},{0xCA31, 0xA48B},{0xCA32, 0xA48C},{0xCA33, 0xA48D},{0xCA34, 0xA48E},{0xCA35, 0xA48F},{0xCA36, 0xA490}, - {0xCA37, 0xA491},{0xCA38, 0xA492},{0xCA39, 0xA493},{0xCA3A, 0xA494},{0xCA3B, 0xA495},{0xCA3C, 0xA496},{0xCA3D, 0xA497},{0xCA3E, 0xA498}, - {0xCA3F, 0xA499},{0xCA40, 0xA49A},{0xCA41, 0xA49B},{0xCA42, 0xA49C},{0xCA43, 0xA49D},{0xCA44, 0xA49E},{0xCA45, 0xA49F},{0xCA46, 0xA4A0}, - {0xCA47, 0xA541},{0xCA48, 0xA542},{0xCA49, 0xA543},{0xCA4A, 0xA544},{0xCA4B, 0xA545},{0xCA4C, 0xC2BC},{0xCA4D, 0xC2BD},{0xCA4E, 0xA546}, - {0xCA4F, 0xA547},{0xCA50, 0xC2BE},{0xCA51, 0xA548},{0xCA52, 0xA549},{0xCA53, 0xA54A},{0xCA54, 0xC2BF},{0xCA55, 0xA54B},{0xCA56, 0xA54C}, - {0xCA57, 0xA54D},{0xCA58, 0xA54E},{0xCA59, 0xA54F},{0xCA5A, 0xA550},{0xCA5B, 0xA551},{0xCA5C, 0xC2C0},{0xCA5D, 0xC2C1},{0xCA5E, 0xA552}, - {0xCA5F, 0xC2C2},{0xCA60, 0xC2C3},{0xCA61, 0xC2C4},{0xCA62, 0xA553},{0xCA63, 0xA554},{0xCA64, 0xA555},{0xCA65, 0xA556},{0xCA66, 0xA557}, - {0xCA67, 0xA558},{0xCA68, 0xC2C5},{0xCA69, 0xA559},{0xCA6A, 0xA55A},{0xCA6B, 0xA561},{0xCA6C, 0xA562},{0xCA6D, 0xA563},{0xCA6E, 0xA564}, - {0xCA6F, 0xA565},{0xCA70, 0xA566},{0xCA71, 0xA567},{0xCA72, 0xA568},{0xCA73, 0xA569},{0xCA74, 0xA56A},{0xCA75, 0xA56B},{0xCA76, 0xA56C}, - {0xCA77, 0xA56D},{0xCA78, 0xA56E},{0xCA79, 0xA56F},{0xCA7A, 0xA570},{0xCA7B, 0xA571},{0xCA7C, 0xA572},{0xCA7D, 0xC2C6},{0xCA7E, 0xA573}, - {0xCA7F, 0xA574},{0xCA80, 0xA575},{0xCA81, 0xA576},{0xCA82, 0xA577},{0xCA83, 0xA578},{0xCA84, 0xC2C7},{0xCA85, 0xA579},{0xCA86, 0xA57A}, - {0xCA87, 0xA581},{0xCA88, 0xA582},{0xCA89, 0xA583},{0xCA8A, 0xA584},{0xCA8B, 0xA585},{0xCA8C, 0xA586},{0xCA8D, 0xA587},{0xCA8E, 0xA588}, - {0xCA8F, 0xA589},{0xCA90, 0xA58A},{0xCA91, 0xA58B},{0xCA92, 0xA58C},{0xCA93, 0xA58D},{0xCA94, 0xA58E},{0xCA95, 0xA58F},{0xCA96, 0xA590}, - {0xCA97, 0xA591},{0xCA98, 0xC2C8},{0xCA99, 0xA592},{0xCA9A, 0xA593},{0xCA9B, 0xA594},{0xCA9C, 0xA595},{0xCA9D, 0xA596},{0xCA9E, 0xA597}, - {0xCA9F, 0xA598},{0xCAA0, 0xA599},{0xCAA1, 0xA59A},{0xCAA2, 0xA59B},{0xCAA3, 0xA59C},{0xCAA4, 0xA59D},{0xCAA5, 0xA59E},{0xCAA6, 0xA59F}, - {0xCAA7, 0xA5A0},{0xCAA8, 0xA641},{0xCAA9, 0xA642},{0xCAAA, 0xA643},{0xCAAB, 0xA644},{0xCAAC, 0xA645},{0xCAAD, 0xA646},{0xCAAE, 0xA647}, - {0xCAAF, 0xA648},{0xCAB0, 0xA649},{0xCAB1, 0xA64A},{0xCAB2, 0xA64B},{0xCAB3, 0xA64C},{0xCAB4, 0xA64D},{0xCAB5, 0xA64E},{0xCAB6, 0xA64F}, - {0xCAB7, 0xA650},{0xCAB8, 0xA651},{0xCAB9, 0xA652},{0xCABA, 0xA653},{0xCABB, 0xA654},{0xCABC, 0xC2C9},{0xCABD, 0xC2CA},{0xCABE, 0xA655}, - {0xCABF, 0xA656},{0xCAC0, 0xC2CB},{0xCAC1, 0xA657},{0xCAC2, 0xA658},{0xCAC3, 0xA659},{0xCAC4, 0xC2CC},{0xCAC5, 0xA65A},{0xCAC6, 0xA661}, - {0xCAC7, 0xA662},{0xCAC8, 0xA663},{0xCAC9, 0xA664},{0xCACA, 0xA665},{0xCACB, 0xA666},{0xCACC, 0xC2CD},{0xCACD, 0xC2CE},{0xCACE, 0xA667}, - {0xCACF, 0xC2CF},{0xCAD0, 0xA668},{0xCAD1, 0xC2D0},{0xCAD2, 0xA669},{0xCAD3, 0xC2D1},{0xCAD4, 0xA66A},{0xCAD5, 0xA66B},{0xCAD6, 0xA66C}, - {0xCAD7, 0xA66D},{0xCAD8, 0xC2D2},{0xCAD9, 0xC2D3},{0xCADA, 0xA66E},{0xCADB, 0xA66F},{0xCADC, 0xA670},{0xCADD, 0xA671},{0xCADE, 0xA672}, - {0xCADF, 0xA673},{0xCAE0, 0xC2D4},{0xCAE1, 0xA674},{0xCAE2, 0xA675},{0xCAE3, 0xA676},{0xCAE4, 0xA677},{0xCAE5, 0xA678},{0xCAE6, 0xA679}, - {0xCAE7, 0xA67A},{0xCAE8, 0xA681},{0xCAE9, 0xA682},{0xCAEA, 0xA683},{0xCAEB, 0xA684},{0xCAEC, 0xC2D5},{0xCAED, 0xA685},{0xCAEE, 0xA686}, - {0xCAEF, 0xA687},{0xCAF0, 0xA688},{0xCAF1, 0xA689},{0xCAF2, 0xA68A},{0xCAF3, 0xA68B},{0xCAF4, 0xC2D6},{0xCAF5, 0xA68C},{0xCAF6, 0xA68D}, - {0xCAF7, 0xA68E},{0xCAF8, 0xA68F},{0xCAF9, 0xA690},{0xCAFA, 0xA691},{0xCAFB, 0xA692},{0xCAFC, 0xA693},{0xCAFD, 0xA694},{0xCAFE, 0xA695}, - {0xCAFF, 0xA696},{0xCB00, 0xA697},{0xCB01, 0xA698},{0xCB02, 0xA699},{0xCB03, 0xA69A},{0xCB04, 0xA69B},{0xCB05, 0xA69C},{0xCB06, 0xA69D}, - {0xCB07, 0xA69E},{0xCB08, 0xC2D7},{0xCB09, 0xA69F},{0xCB0A, 0xA6A0},{0xCB0B, 0xA741},{0xCB0C, 0xA742},{0xCB0D, 0xA743},{0xCB0E, 0xA744}, - {0xCB0F, 0xA745},{0xCB10, 0xC2D8},{0xCB11, 0xA746},{0xCB12, 0xA747},{0xCB13, 0xA748},{0xCB14, 0xC2D9},{0xCB15, 0xA749},{0xCB16, 0xA74A}, - {0xCB17, 0xA74B},{0xCB18, 0xC2DA},{0xCB19, 0xA74C},{0xCB1A, 0xA74D},{0xCB1B, 0xA74E},{0xCB1C, 0xA74F},{0xCB1D, 0xA750},{0xCB1E, 0xA751}, - {0xCB1F, 0xA752},{0xCB20, 0xC2DB},{0xCB21, 0xC2DC},{0xCB22, 0xA753},{0xCB23, 0xA754},{0xCB24, 0xA755},{0xCB25, 0xA756},{0xCB26, 0xA757}, - {0xCB27, 0xA758},{0xCB28, 0xA759},{0xCB29, 0xA75A},{0xCB2A, 0xA761},{0xCB2B, 0xA762},{0xCB2C, 0xA763},{0xCB2D, 0xA764},{0xCB2E, 0xA765}, - {0xCB2F, 0xA766},{0xCB30, 0xA767},{0xCB31, 0xA768},{0xCB32, 0xA769},{0xCB33, 0xA76A},{0xCB34, 0xA76B},{0xCB35, 0xA76C},{0xCB36, 0xA76D}, - {0xCB37, 0xA76E},{0xCB38, 0xA76F},{0xCB39, 0xA770},{0xCB3A, 0xA771},{0xCB3B, 0xA772},{0xCB3C, 0xA773},{0xCB3D, 0xA774},{0xCB3E, 0xA775}, - {0xCB3F, 0xA776},{0xCB40, 0xA777},{0xCB41, 0xC2DD},{0xCB42, 0xA778},{0xCB43, 0xA779},{0xCB44, 0xA77A},{0xCB45, 0xA781},{0xCB46, 0xA782}, - {0xCB47, 0xA783},{0xCB48, 0xC2DE},{0xCB49, 0xC2DF},{0xCB4A, 0xA784},{0xCB4B, 0xA785},{0xCB4C, 0xC2E0},{0xCB4D, 0xA786},{0xCB4E, 0xA787}, - {0xCB4F, 0xA788},{0xCB50, 0xC2E1},{0xCB51, 0xA789},{0xCB52, 0xA78A},{0xCB53, 0xA78B},{0xCB54, 0xA78C},{0xCB55, 0xA78D},{0xCB56, 0xA78E}, - {0xCB57, 0xA78F},{0xCB58, 0xC2E2},{0xCB59, 0xC2E3},{0xCB5A, 0xA790},{0xCB5B, 0xA791},{0xCB5C, 0xA792},{0xCB5D, 0xC2E4},{0xCB5E, 0xA793}, - {0xCB5F, 0xA794},{0xCB60, 0xA795},{0xCB61, 0xA796},{0xCB62, 0xA797},{0xCB63, 0xA798},{0xCB64, 0xC2E5},{0xCB65, 0xA799},{0xCB66, 0xA79A}, - {0xCB67, 0xA79B},{0xCB68, 0xA79C},{0xCB69, 0xA79D},{0xCB6A, 0xA79E},{0xCB6B, 0xA79F},{0xCB6C, 0xA7A0},{0xCB6D, 0xA841},{0xCB6E, 0xA842}, - {0xCB6F, 0xA843},{0xCB70, 0xA844},{0xCB71, 0xA845},{0xCB72, 0xA846},{0xCB73, 0xA847},{0xCB74, 0xA848},{0xCB75, 0xA849},{0xCB76, 0xA84A}, - {0xCB77, 0xA84B},{0xCB78, 0xC2E6},{0xCB79, 0xC2E7},{0xCB7A, 0xA84C},{0xCB7B, 0xA84D},{0xCB7C, 0xA84E},{0xCB7D, 0xA84F},{0xCB7E, 0xA850}, - {0xCB7F, 0xA851},{0xCB80, 0xA852},{0xCB81, 0xA853},{0xCB82, 0xA854},{0xCB83, 0xA855},{0xCB84, 0xA856},{0xCB85, 0xA857},{0xCB86, 0xA858}, - {0xCB87, 0xA859},{0xCB88, 0xA85A},{0xCB89, 0xA861},{0xCB8A, 0xA862},{0xCB8B, 0xA863},{0xCB8C, 0xA864},{0xCB8D, 0xA865},{0xCB8E, 0xA866}, - {0xCB8F, 0xA867},{0xCB90, 0xA868},{0xCB91, 0xA869},{0xCB92, 0xA86A},{0xCB93, 0xA86B},{0xCB94, 0xA86C},{0xCB95, 0xA86D},{0xCB96, 0xA86E}, - {0xCB97, 0xA86F},{0xCB98, 0xA870},{0xCB99, 0xA871},{0xCB9A, 0xA872},{0xCB9B, 0xA873},{0xCB9C, 0xC2E8},{0xCB9D, 0xA874},{0xCB9E, 0xA875}, - {0xCB9F, 0xA876},{0xCBA0, 0xA877},{0xCBA1, 0xA878},{0xCBA2, 0xA879},{0xCBA3, 0xA87A},{0xCBA4, 0xA881},{0xCBA5, 0xA882},{0xCBA6, 0xA883}, - {0xCBA7, 0xA884},{0xCBA8, 0xA885},{0xCBA9, 0xA886},{0xCBAA, 0xA887},{0xCBAB, 0xA888},{0xCBAC, 0xA889},{0xCBAD, 0xA88A},{0xCBAE, 0xA88B}, - {0xCBAF, 0xA88C},{0xCBB0, 0xA88D},{0xCBB1, 0xA88E},{0xCBB2, 0xA88F},{0xCBB3, 0xA890},{0xCBB4, 0xA891},{0xCBB5, 0xA892},{0xCBB6, 0xA893}, - {0xCBB7, 0xA894},{0xCBB8, 0xC2E9},{0xCBB9, 0xA895},{0xCBBA, 0xA896},{0xCBBB, 0xA897},{0xCBBC, 0xA898},{0xCBBD, 0xA899},{0xCBBE, 0xA89A}, - {0xCBBF, 0xA89B},{0xCBC0, 0xA89C},{0xCBC1, 0xA89D},{0xCBC2, 0xA89E},{0xCBC3, 0xA89F},{0xCBC4, 0xA8A0},{0xCBC5, 0xA941},{0xCBC6, 0xA942}, - {0xCBC7, 0xA943},{0xCBC8, 0xA944},{0xCBC9, 0xA945},{0xCBCA, 0xA946},{0xCBCB, 0xA947},{0xCBCC, 0xA948},{0xCBCD, 0xA949},{0xCBCE, 0xA94A}, - {0xCBCF, 0xA94B},{0xCBD0, 0xA94C},{0xCBD1, 0xA94D},{0xCBD2, 0xA94E},{0xCBD3, 0xA94F},{0xCBD4, 0xC2EA},{0xCBD5, 0xA950},{0xCBD6, 0xA951}, - {0xCBD7, 0xA952},{0xCBD8, 0xA953},{0xCBD9, 0xA954},{0xCBDA, 0xA955},{0xCBDB, 0xA956},{0xCBDC, 0xA957},{0xCBDD, 0xA958},{0xCBDE, 0xA959}, - {0xCBDF, 0xA95A},{0xCBE0, 0xA961},{0xCBE1, 0xA962},{0xCBE2, 0xA963},{0xCBE3, 0xA964},{0xCBE4, 0xC2EB},{0xCBE5, 0xA965},{0xCBE6, 0xA966}, - {0xCBE7, 0xC2EC},{0xCBE8, 0xA967},{0xCBE9, 0xC2ED},{0xCBEA, 0xA968},{0xCBEB, 0xA969},{0xCBEC, 0xA96A},{0xCBED, 0xA96B},{0xCBEE, 0xA96C}, - {0xCBEF, 0xA96D},{0xCBF0, 0xA96E},{0xCBF1, 0xA96F},{0xCBF2, 0xA970},{0xCBF3, 0xA971},{0xCBF4, 0xA972},{0xCBF5, 0xA973},{0xCBF6, 0xA974}, - {0xCBF7, 0xA975},{0xCBF8, 0xA976},{0xCBF9, 0xA977},{0xCBFA, 0xA978},{0xCBFB, 0xA979},{0xCBFC, 0xA97A},{0xCBFD, 0xA981},{0xCBFE, 0xA982}, - {0xCBFF, 0xA983},{0xCC00, 0xA984},{0xCC01, 0xA985},{0xCC02, 0xA986},{0xCC03, 0xA987},{0xCC04, 0xA988},{0xCC05, 0xA989},{0xCC06, 0xA98A}, - {0xCC07, 0xA98B},{0xCC08, 0xA98C},{0xCC09, 0xA98D},{0xCC0A, 0xA98E},{0xCC0B, 0xA98F},{0xCC0C, 0xC2EE},{0xCC0D, 0xC2EF},{0xCC0E, 0xA990}, - {0xCC0F, 0xA991},{0xCC10, 0xC2F0},{0xCC11, 0xA992},{0xCC12, 0xA993},{0xCC13, 0xA994},{0xCC14, 0xC2F1},{0xCC15, 0xA995},{0xCC16, 0xA996}, - {0xCC17, 0xA997},{0xCC18, 0xA998},{0xCC19, 0xA999},{0xCC1A, 0xA99A},{0xCC1B, 0xA99B},{0xCC1C, 0xC2F2},{0xCC1D, 0xC2F3},{0xCC1E, 0xA99C}, - {0xCC1F, 0xA99D},{0xCC20, 0xA99E},{0xCC21, 0xC2F4},{0xCC22, 0xC2F5},{0xCC23, 0xA99F},{0xCC24, 0xA9A0},{0xCC25, 0xAA41},{0xCC26, 0xAA42}, - {0xCC27, 0xC2F6},{0xCC28, 0xC2F7},{0xCC29, 0xC2F8},{0xCC2A, 0xAA43},{0xCC2B, 0xAA44},{0xCC2C, 0xC2F9},{0xCC2D, 0xAA45},{0xCC2E, 0xC2FA}, - {0xCC2F, 0xAA46},{0xCC30, 0xC2FB},{0xCC31, 0xAA47},{0xCC32, 0xAA48},{0xCC33, 0xAA49},{0xCC34, 0xAA4A},{0xCC35, 0xAA4B},{0xCC36, 0xAA4C}, - {0xCC37, 0xAA4D},{0xCC38, 0xC2FC},{0xCC39, 0xC2FD},{0xCC3A, 0xAA4E},{0xCC3B, 0xC2FE},{0xCC3C, 0xC3A1},{0xCC3D, 0xC3A2},{0xCC3E, 0xC3A3}, - {0xCC3F, 0xAA4F},{0xCC40, 0xAA50},{0xCC41, 0xAA51},{0xCC42, 0xAA52},{0xCC43, 0xAA53},{0xCC44, 0xC3A4},{0xCC45, 0xC3A5},{0xCC46, 0xAA54}, - {0xCC47, 0xAA55},{0xCC48, 0xC3A6},{0xCC49, 0xAA56},{0xCC4A, 0xAA57},{0xCC4B, 0xAA58},{0xCC4C, 0xC3A7},{0xCC4D, 0xAA59},{0xCC4E, 0xAA5A}, - {0xCC4F, 0xAA61},{0xCC50, 0xAA62},{0xCC51, 0xAA63},{0xCC52, 0xAA64},{0xCC53, 0xAA65},{0xCC54, 0xC3A8},{0xCC55, 0xC3A9},{0xCC56, 0xAA66}, - {0xCC57, 0xC3AA},{0xCC58, 0xC3AB},{0xCC59, 0xC3AC},{0xCC5A, 0xAA67},{0xCC5B, 0xAA68},{0xCC5C, 0xAA69},{0xCC5D, 0xAA6A},{0xCC5E, 0xAA6B}, - {0xCC5F, 0xAA6C},{0xCC60, 0xC3AD},{0xCC61, 0xAA6D},{0xCC62, 0xAA6E},{0xCC63, 0xAA6F},{0xCC64, 0xC3AE},{0xCC65, 0xAA70},{0xCC66, 0xC3AF}, - {0xCC67, 0xAA71},{0xCC68, 0xC3B0},{0xCC69, 0xAA72},{0xCC6A, 0xAA73},{0xCC6B, 0xAA74},{0xCC6C, 0xAA75},{0xCC6D, 0xAA76},{0xCC6E, 0xAA77}, - {0xCC6F, 0xAA78},{0xCC70, 0xC3B1},{0xCC71, 0xAA79},{0xCC72, 0xAA7A},{0xCC73, 0xAA81},{0xCC74, 0xAA82},{0xCC75, 0xC3B2},{0xCC76, 0xAA83}, - {0xCC77, 0xAA84},{0xCC78, 0xAA85},{0xCC79, 0xAA86},{0xCC7A, 0xAA87},{0xCC7B, 0xAA88},{0xCC7C, 0xAA89},{0xCC7D, 0xAA8A},{0xCC7E, 0xAA8B}, - {0xCC7F, 0xAA8C},{0xCC80, 0xAA8D},{0xCC81, 0xAA8E},{0xCC82, 0xAA8F},{0xCC83, 0xAA90},{0xCC84, 0xAA91},{0xCC85, 0xAA92},{0xCC86, 0xAA93}, - {0xCC87, 0xAA94},{0xCC88, 0xAA95},{0xCC89, 0xAA96},{0xCC8A, 0xAA97},{0xCC8B, 0xAA98},{0xCC8C, 0xAA99},{0xCC8D, 0xAA9A},{0xCC8E, 0xAA9B}, - {0xCC8F, 0xAA9C},{0xCC90, 0xAA9D},{0xCC91, 0xAA9E},{0xCC92, 0xAA9F},{0xCC93, 0xAAA0},{0xCC94, 0xAB41},{0xCC95, 0xAB42},{0xCC96, 0xAB43}, - {0xCC97, 0xAB44},{0xCC98, 0xC3B3},{0xCC99, 0xC3B4},{0xCC9A, 0xAB45},{0xCC9B, 0xAB46},{0xCC9C, 0xC3B5},{0xCC9D, 0xAB47},{0xCC9E, 0xAB48}, - {0xCC9F, 0xAB49},{0xCCA0, 0xC3B6},{0xCCA1, 0xAB4A},{0xCCA2, 0xAB4B},{0xCCA3, 0xAB4C},{0xCCA4, 0xAB4D},{0xCCA5, 0xAB4E},{0xCCA6, 0xAB4F}, - {0xCCA7, 0xAB50},{0xCCA8, 0xC3B7},{0xCCA9, 0xC3B8},{0xCCAA, 0xAB51},{0xCCAB, 0xC3B9},{0xCCAC, 0xC3BA},{0xCCAD, 0xC3BB},{0xCCAE, 0xAB52}, - {0xCCAF, 0xAB53},{0xCCB0, 0xAB54},{0xCCB1, 0xAB55},{0xCCB2, 0xAB56},{0xCCB3, 0xAB57},{0xCCB4, 0xC3BC},{0xCCB5, 0xC3BD},{0xCCB6, 0xAB58}, - {0xCCB7, 0xAB59},{0xCCB8, 0xC3BE},{0xCCB9, 0xAB5A},{0xCCBA, 0xAB61},{0xCCBB, 0xAB62},{0xCCBC, 0xC3BF},{0xCCBD, 0xAB63},{0xCCBE, 0xAB64}, - {0xCCBF, 0xAB65},{0xCCC0, 0xAB66},{0xCCC1, 0xAB67},{0xCCC2, 0xAB68},{0xCCC3, 0xAB69},{0xCCC4, 0xC3C0},{0xCCC5, 0xC3C1},{0xCCC6, 0xAB6A}, - {0xCCC7, 0xC3C2},{0xCCC8, 0xAB6B},{0xCCC9, 0xC3C3},{0xCCCA, 0xAB6C},{0xCCCB, 0xAB6D},{0xCCCC, 0xAB6E},{0xCCCD, 0xAB6F},{0xCCCE, 0xAB70}, - {0xCCCF, 0xAB71},{0xCCD0, 0xC3C4},{0xCCD1, 0xAB72},{0xCCD2, 0xAB73},{0xCCD3, 0xAB74},{0xCCD4, 0xC3C5},{0xCCD5, 0xAB75},{0xCCD6, 0xAB76}, - {0xCCD7, 0xAB77},{0xCCD8, 0xAB78},{0xCCD9, 0xAB79},{0xCCDA, 0xAB7A},{0xCCDB, 0xAB81},{0xCCDC, 0xAB82},{0xCCDD, 0xAB83},{0xCCDE, 0xAB84}, - {0xCCDF, 0xAB85},{0xCCE0, 0xAB86},{0xCCE1, 0xAB87},{0xCCE2, 0xAB88},{0xCCE3, 0xAB89},{0xCCE4, 0xC3C6},{0xCCE5, 0xAB8A},{0xCCE6, 0xAB8B}, - {0xCCE7, 0xAB8C},{0xCCE8, 0xAB8D},{0xCCE9, 0xAB8E},{0xCCEA, 0xAB8F},{0xCCEB, 0xAB90},{0xCCEC, 0xC3C7},{0xCCED, 0xAB91},{0xCCEE, 0xAB92}, - {0xCCEF, 0xAB93},{0xCCF0, 0xC3C8},{0xCCF1, 0xAB94},{0xCCF2, 0xAB95},{0xCCF3, 0xAB96},{0xCCF4, 0xAB97},{0xCCF5, 0xAB98},{0xCCF6, 0xAB99}, - {0xCCF7, 0xAB9A},{0xCCF8, 0xAB9B},{0xCCF9, 0xAB9C},{0xCCFA, 0xAB9D},{0xCCFB, 0xAB9E},{0xCCFC, 0xAB9F},{0xCCFD, 0xABA0},{0xCCFE, 0xAC41}, - {0xCCFF, 0xAC42},{0xCD00, 0xAC43},{0xCD01, 0xC3C9},{0xCD02, 0xAC44},{0xCD03, 0xAC45},{0xCD04, 0xAC46},{0xCD05, 0xAC47},{0xCD06, 0xAC48}, - {0xCD07, 0xAC49},{0xCD08, 0xC3CA},{0xCD09, 0xC3CB},{0xCD0A, 0xAC4A},{0xCD0B, 0xAC4B},{0xCD0C, 0xC3CC},{0xCD0D, 0xAC4C},{0xCD0E, 0xAC4D}, - {0xCD0F, 0xAC4E},{0xCD10, 0xC3CD},{0xCD11, 0xAC4F},{0xCD12, 0xAC50},{0xCD13, 0xAC51},{0xCD14, 0xAC52},{0xCD15, 0xAC53},{0xCD16, 0xAC54}, - {0xCD17, 0xAC55},{0xCD18, 0xC3CE},{0xCD19, 0xC3CF},{0xCD1A, 0xAC56},{0xCD1B, 0xC3D0},{0xCD1C, 0xAC57},{0xCD1D, 0xC3D1},{0xCD1E, 0xAC58}, - {0xCD1F, 0xAC59},{0xCD20, 0xAC5A},{0xCD21, 0xAC61},{0xCD22, 0xAC62},{0xCD23, 0xAC63},{0xCD24, 0xC3D2},{0xCD25, 0xAC64},{0xCD26, 0xAC65}, - {0xCD27, 0xAC66},{0xCD28, 0xC3D3},{0xCD29, 0xAC67},{0xCD2A, 0xAC68},{0xCD2B, 0xAC69},{0xCD2C, 0xC3D4},{0xCD2D, 0xAC6A},{0xCD2E, 0xAC6B}, - {0xCD2F, 0xAC6C},{0xCD30, 0xAC6D},{0xCD31, 0xAC6E},{0xCD32, 0xAC6F},{0xCD33, 0xAC70},{0xCD34, 0xAC71},{0xCD35, 0xAC72},{0xCD36, 0xAC73}, - {0xCD37, 0xAC74},{0xCD38, 0xAC75},{0xCD39, 0xC3D5},{0xCD3A, 0xAC76},{0xCD3B, 0xAC77},{0xCD3C, 0xAC78},{0xCD3D, 0xAC79},{0xCD3E, 0xAC7A}, - {0xCD3F, 0xAC81},{0xCD40, 0xAC82},{0xCD41, 0xAC83},{0xCD42, 0xAC84},{0xCD43, 0xAC85},{0xCD44, 0xAC86},{0xCD45, 0xAC87},{0xCD46, 0xAC88}, - {0xCD47, 0xAC89},{0xCD48, 0xAC8A},{0xCD49, 0xAC8B},{0xCD4A, 0xAC8C},{0xCD4B, 0xAC8D},{0xCD4C, 0xAC8E},{0xCD4D, 0xAC8F},{0xCD4E, 0xAC90}, - {0xCD4F, 0xAC91},{0xCD50, 0xAC92},{0xCD51, 0xAC93},{0xCD52, 0xAC94},{0xCD53, 0xAC95},{0xCD54, 0xAC96},{0xCD55, 0xAC97},{0xCD56, 0xAC98}, - {0xCD57, 0xAC99},{0xCD58, 0xAC9A},{0xCD59, 0xAC9B},{0xCD5A, 0xAC9C},{0xCD5B, 0xAC9D},{0xCD5C, 0xC3D6},{0xCD5D, 0xAC9E},{0xCD5E, 0xAC9F}, - {0xCD5F, 0xACA0},{0xCD60, 0xC3D7},{0xCD61, 0xAD41},{0xCD62, 0xAD42},{0xCD63, 0xAD43},{0xCD64, 0xC3D8},{0xCD65, 0xAD44},{0xCD66, 0xAD45}, - {0xCD67, 0xAD46},{0xCD68, 0xAD47},{0xCD69, 0xAD48},{0xCD6A, 0xAD49},{0xCD6B, 0xAD4A},{0xCD6C, 0xC3D9},{0xCD6D, 0xC3DA},{0xCD6E, 0xAD4B}, - {0xCD6F, 0xC3DB},{0xCD70, 0xAD4C},{0xCD71, 0xC3DC},{0xCD72, 0xAD4D},{0xCD73, 0xAD4E},{0xCD74, 0xAD4F},{0xCD75, 0xAD50},{0xCD76, 0xAD51}, - {0xCD77, 0xAD52},{0xCD78, 0xC3DD},{0xCD79, 0xAD53},{0xCD7A, 0xAD54},{0xCD7B, 0xAD55},{0xCD7C, 0xAD56},{0xCD7D, 0xAD57},{0xCD7E, 0xAD58}, - {0xCD7F, 0xAD59},{0xCD80, 0xAD5A},{0xCD81, 0xAD61},{0xCD82, 0xAD62},{0xCD83, 0xAD63},{0xCD84, 0xAD64},{0xCD85, 0xAD65},{0xCD86, 0xAD66}, - {0xCD87, 0xAD67},{0xCD88, 0xC3DE},{0xCD89, 0xAD68},{0xCD8A, 0xAD69},{0xCD8B, 0xAD6A},{0xCD8C, 0xAD6B},{0xCD8D, 0xAD6C},{0xCD8E, 0xAD6D}, - {0xCD8F, 0xAD6E},{0xCD90, 0xAD6F},{0xCD91, 0xAD70},{0xCD92, 0xAD71},{0xCD93, 0xAD72},{0xCD94, 0xC3DF},{0xCD95, 0xC3E0},{0xCD96, 0xAD73}, - {0xCD97, 0xAD74},{0xCD98, 0xC3E1},{0xCD99, 0xAD75},{0xCD9A, 0xAD76},{0xCD9B, 0xAD77},{0xCD9C, 0xC3E2},{0xCD9D, 0xAD78},{0xCD9E, 0xAD79}, - {0xCD9F, 0xAD7A},{0xCDA0, 0xAD81},{0xCDA1, 0xAD82},{0xCDA2, 0xAD83},{0xCDA3, 0xAD84},{0xCDA4, 0xC3E3},{0xCDA5, 0xC3E4},{0xCDA6, 0xAD85}, - {0xCDA7, 0xC3E5},{0xCDA8, 0xAD86},{0xCDA9, 0xC3E6},{0xCDAA, 0xAD87},{0xCDAB, 0xAD88},{0xCDAC, 0xAD89},{0xCDAD, 0xAD8A},{0xCDAE, 0xAD8B}, - {0xCDAF, 0xAD8C},{0xCDB0, 0xC3E7},{0xCDB1, 0xAD8D},{0xCDB2, 0xAD8E},{0xCDB3, 0xAD8F},{0xCDB4, 0xAD90},{0xCDB5, 0xAD91},{0xCDB6, 0xAD92}, - {0xCDB7, 0xAD93},{0xCDB8, 0xAD94},{0xCDB9, 0xAD95},{0xCDBA, 0xAD96},{0xCDBB, 0xAD97},{0xCDBC, 0xAD98},{0xCDBD, 0xAD99},{0xCDBE, 0xAD9A}, - {0xCDBF, 0xAD9B},{0xCDC0, 0xAD9C},{0xCDC1, 0xAD9D},{0xCDC2, 0xAD9E},{0xCDC3, 0xAD9F},{0xCDC4, 0xC3E8},{0xCDC5, 0xADA0},{0xCDC6, 0xAE41}, - {0xCDC7, 0xAE42},{0xCDC8, 0xAE43},{0xCDC9, 0xAE44},{0xCDCA, 0xAE45},{0xCDCB, 0xAE46},{0xCDCC, 0xC3E9},{0xCDCD, 0xAE47},{0xCDCE, 0xAE48}, - {0xCDCF, 0xAE49},{0xCDD0, 0xC3EA},{0xCDD1, 0xAE4A},{0xCDD2, 0xAE4B},{0xCDD3, 0xAE4C},{0xCDD4, 0xAE4D},{0xCDD5, 0xAE4E},{0xCDD6, 0xAE4F}, - {0xCDD7, 0xAE50},{0xCDD8, 0xAE51},{0xCDD9, 0xAE52},{0xCDDA, 0xAE53},{0xCDDB, 0xAE54},{0xCDDC, 0xAE55},{0xCDDD, 0xAE56},{0xCDDE, 0xAE57}, - {0xCDDF, 0xAE58},{0xCDE0, 0xAE59},{0xCDE1, 0xAE5A},{0xCDE2, 0xAE61},{0xCDE3, 0xAE62},{0xCDE4, 0xAE63},{0xCDE5, 0xAE64},{0xCDE6, 0xAE65}, - {0xCDE7, 0xAE66},{0xCDE8, 0xC3EB},{0xCDE9, 0xAE67},{0xCDEA, 0xAE68},{0xCDEB, 0xAE69},{0xCDEC, 0xC3EC},{0xCDED, 0xAE6A},{0xCDEE, 0xAE6B}, - {0xCDEF, 0xAE6C},{0xCDF0, 0xC3ED},{0xCDF1, 0xAE6D},{0xCDF2, 0xAE6E},{0xCDF3, 0xAE6F},{0xCDF4, 0xAE70},{0xCDF5, 0xAE71},{0xCDF6, 0xAE72}, - {0xCDF7, 0xAE73},{0xCDF8, 0xC3EE},{0xCDF9, 0xC3EF},{0xCDFA, 0xAE74},{0xCDFB, 0xC3F0},{0xCDFC, 0xAE75},{0xCDFD, 0xC3F1},{0xCDFE, 0xAE76}, - {0xCDFF, 0xAE77},{0xCE00, 0xAE78},{0xCE01, 0xAE79},{0xCE02, 0xAE7A},{0xCE03, 0xAE81},{0xCE04, 0xC3F2},{0xCE05, 0xAE82},{0xCE06, 0xAE83}, - {0xCE07, 0xAE84},{0xCE08, 0xC3F3},{0xCE09, 0xAE85},{0xCE0A, 0xAE86},{0xCE0B, 0xAE87},{0xCE0C, 0xC3F4},{0xCE0D, 0xAE88},{0xCE0E, 0xAE89}, - {0xCE0F, 0xAE8A},{0xCE10, 0xAE8B},{0xCE11, 0xAE8C},{0xCE12, 0xAE8D},{0xCE13, 0xAE8E},{0xCE14, 0xC3F5},{0xCE15, 0xAE8F},{0xCE16, 0xAE90}, - {0xCE17, 0xAE91},{0xCE18, 0xAE92},{0xCE19, 0xC3F6},{0xCE1A, 0xAE93},{0xCE1B, 0xAE94},{0xCE1C, 0xAE95},{0xCE1D, 0xAE96},{0xCE1E, 0xAE97}, - {0xCE1F, 0xAE98},{0xCE20, 0xC3F7},{0xCE21, 0xC3F8},{0xCE22, 0xAE99},{0xCE23, 0xAE9A},{0xCE24, 0xC3F9},{0xCE25, 0xAE9B},{0xCE26, 0xAE9C}, - {0xCE27, 0xAE9D},{0xCE28, 0xC3FA},{0xCE29, 0xAE9E},{0xCE2A, 0xAE9F},{0xCE2B, 0xAEA0},{0xCE2C, 0xAF41},{0xCE2D, 0xAF42},{0xCE2E, 0xAF43}, - {0xCE2F, 0xAF44},{0xCE30, 0xC3FB},{0xCE31, 0xC3FC},{0xCE32, 0xAF45},{0xCE33, 0xC3FD},{0xCE34, 0xAF46},{0xCE35, 0xC3FE},{0xCE36, 0xAF47}, - {0xCE37, 0xAF48},{0xCE38, 0xAF49},{0xCE39, 0xAF4A},{0xCE3A, 0xAF4B},{0xCE3B, 0xAF4C},{0xCE3C, 0xAF4D},{0xCE3D, 0xAF4E},{0xCE3E, 0xAF4F}, - {0xCE3F, 0xAF50},{0xCE40, 0xAF51},{0xCE41, 0xAF52},{0xCE42, 0xAF53},{0xCE43, 0xAF54},{0xCE44, 0xAF55},{0xCE45, 0xAF56},{0xCE46, 0xAF57}, - {0xCE47, 0xAF58},{0xCE48, 0xAF59},{0xCE49, 0xAF5A},{0xCE4A, 0xAF61},{0xCE4B, 0xAF62},{0xCE4C, 0xAF63},{0xCE4D, 0xAF64},{0xCE4E, 0xAF65}, - {0xCE4F, 0xAF66},{0xCE50, 0xAF67},{0xCE51, 0xAF68},{0xCE52, 0xAF69},{0xCE53, 0xAF6A},{0xCE54, 0xAF6B},{0xCE55, 0xAF6C},{0xCE56, 0xAF6D}, - {0xCE57, 0xAF6E},{0xCE58, 0xC4A1},{0xCE59, 0xC4A2},{0xCE5A, 0xAF6F},{0xCE5B, 0xAF70},{0xCE5C, 0xC4A3},{0xCE5D, 0xAF71},{0xCE5E, 0xAF72}, - {0xCE5F, 0xC4A4},{0xCE60, 0xC4A5},{0xCE61, 0xC4A6},{0xCE62, 0xAF73},{0xCE63, 0xAF74},{0xCE64, 0xAF75},{0xCE65, 0xAF76},{0xCE66, 0xAF77}, - {0xCE67, 0xAF78},{0xCE68, 0xC4A7},{0xCE69, 0xC4A8},{0xCE6A, 0xAF79},{0xCE6B, 0xC4A9},{0xCE6C, 0xAF7A},{0xCE6D, 0xC4AA},{0xCE6E, 0xAF81}, - {0xCE6F, 0xAF82},{0xCE70, 0xAF83},{0xCE71, 0xAF84},{0xCE72, 0xAF85},{0xCE73, 0xAF86},{0xCE74, 0xC4AB},{0xCE75, 0xC4AC},{0xCE76, 0xAF87}, - {0xCE77, 0xAF88},{0xCE78, 0xC4AD},{0xCE79, 0xAF89},{0xCE7A, 0xAF8A},{0xCE7B, 0xAF8B},{0xCE7C, 0xC4AE},{0xCE7D, 0xAF8C},{0xCE7E, 0xAF8D}, - {0xCE7F, 0xAF8E},{0xCE80, 0xAF8F},{0xCE81, 0xAF90},{0xCE82, 0xAF91},{0xCE83, 0xAF92},{0xCE84, 0xC4AF},{0xCE85, 0xC4B0},{0xCE86, 0xAF93}, - {0xCE87, 0xC4B1},{0xCE88, 0xAF94},{0xCE89, 0xC4B2},{0xCE8A, 0xAF95},{0xCE8B, 0xAF96},{0xCE8C, 0xAF97},{0xCE8D, 0xAF98},{0xCE8E, 0xAF99}, - {0xCE8F, 0xAF9A},{0xCE90, 0xC4B3},{0xCE91, 0xC4B4},{0xCE92, 0xAF9B},{0xCE93, 0xAF9C},{0xCE94, 0xC4B5},{0xCE95, 0xAF9D},{0xCE96, 0xAF9E}, - {0xCE97, 0xAF9F},{0xCE98, 0xC4B6},{0xCE99, 0xAFA0},{0xCE9A, 0xB041},{0xCE9B, 0xB042},{0xCE9C, 0xB043},{0xCE9D, 0xB044},{0xCE9E, 0xB045}, - {0xCE9F, 0xB046},{0xCEA0, 0xC4B7},{0xCEA1, 0xC4B8},{0xCEA2, 0xB047},{0xCEA3, 0xC4B9},{0xCEA4, 0xC4BA},{0xCEA5, 0xC4BB},{0xCEA6, 0xB048}, - {0xCEA7, 0xB049},{0xCEA8, 0xB04A},{0xCEA9, 0xB04B},{0xCEAA, 0xB04C},{0xCEAB, 0xB04D},{0xCEAC, 0xC4BC},{0xCEAD, 0xC4BD},{0xCEAE, 0xB04E}, - {0xCEAF, 0xB04F},{0xCEB0, 0xB050},{0xCEB1, 0xB051},{0xCEB2, 0xB052},{0xCEB3, 0xB053},{0xCEB4, 0xB054},{0xCEB5, 0xB055},{0xCEB6, 0xB056}, - {0xCEB7, 0xB057},{0xCEB8, 0xB058},{0xCEB9, 0xB059},{0xCEBA, 0xB05A},{0xCEBB, 0xB061},{0xCEBC, 0xB062},{0xCEBD, 0xB063},{0xCEBE, 0xB064}, - {0xCEBF, 0xB065},{0xCEC0, 0xB066},{0xCEC1, 0xC4BE},{0xCEC2, 0xB067},{0xCEC3, 0xB068},{0xCEC4, 0xB069},{0xCEC5, 0xB06A},{0xCEC6, 0xB06B}, - {0xCEC7, 0xB06C},{0xCEC8, 0xB06D},{0xCEC9, 0xB06E},{0xCECA, 0xB06F},{0xCECB, 0xB070},{0xCECC, 0xB071},{0xCECD, 0xB072},{0xCECE, 0xB073}, - {0xCECF, 0xB074},{0xCED0, 0xB075},{0xCED1, 0xB076},{0xCED2, 0xB077},{0xCED3, 0xB078},{0xCED4, 0xB079},{0xCED5, 0xB07A},{0xCED6, 0xB081}, - {0xCED7, 0xB082},{0xCED8, 0xB083},{0xCED9, 0xB084},{0xCEDA, 0xB085},{0xCEDB, 0xB086},{0xCEDC, 0xB087},{0xCEDD, 0xB088},{0xCEDE, 0xB089}, - {0xCEDF, 0xB08A},{0xCEE0, 0xB08B},{0xCEE1, 0xB08C},{0xCEE2, 0xB08D},{0xCEE3, 0xB08E},{0xCEE4, 0xC4BF},{0xCEE5, 0xC4C0},{0xCEE6, 0xB08F}, - {0xCEE7, 0xB090},{0xCEE8, 0xC4C1},{0xCEE9, 0xB091},{0xCEEA, 0xB092},{0xCEEB, 0xC4C2},{0xCEEC, 0xC4C3},{0xCEED, 0xB093},{0xCEEE, 0xB094}, - {0xCEEF, 0xB095},{0xCEF0, 0xB096},{0xCEF1, 0xB097},{0xCEF2, 0xB098},{0xCEF3, 0xB099},{0xCEF4, 0xC4C4},{0xCEF5, 0xC4C5},{0xCEF6, 0xB09A}, - {0xCEF7, 0xC4C6},{0xCEF8, 0xC4C7},{0xCEF9, 0xC4C8},{0xCEFA, 0xB09B},{0xCEFB, 0xB09C},{0xCEFC, 0xB09D},{0xCEFD, 0xB09E},{0xCEFE, 0xB09F}, - {0xCEFF, 0xB0A0},{0xCF00, 0xC4C9},{0xCF01, 0xC4CA},{0xCF02, 0xB141},{0xCF03, 0xB142},{0xCF04, 0xC4CB},{0xCF05, 0xB143},{0xCF06, 0xB144}, - {0xCF07, 0xB145},{0xCF08, 0xC4CC},{0xCF09, 0xB146},{0xCF0A, 0xB147},{0xCF0B, 0xB148},{0xCF0C, 0xB149},{0xCF0D, 0xB14A},{0xCF0E, 0xB14B}, - {0xCF0F, 0xB14C},{0xCF10, 0xC4CD},{0xCF11, 0xC4CE},{0xCF12, 0xB14D},{0xCF13, 0xC4CF},{0xCF14, 0xB14E},{0xCF15, 0xC4D0},{0xCF16, 0xB14F}, - {0xCF17, 0xB150},{0xCF18, 0xB151},{0xCF19, 0xB152},{0xCF1A, 0xB153},{0xCF1B, 0xB154},{0xCF1C, 0xC4D1},{0xCF1D, 0xB155},{0xCF1E, 0xB156}, - {0xCF1F, 0xB157},{0xCF20, 0xC4D2},{0xCF21, 0xB158},{0xCF22, 0xB159},{0xCF23, 0xB15A},{0xCF24, 0xC4D3},{0xCF25, 0xB161},{0xCF26, 0xB162}, - {0xCF27, 0xB163},{0xCF28, 0xB164},{0xCF29, 0xB165},{0xCF2A, 0xB166},{0xCF2B, 0xB167},{0xCF2C, 0xC4D4},{0xCF2D, 0xC4D5},{0xCF2E, 0xB168}, - {0xCF2F, 0xC4D6},{0xCF30, 0xC4D7},{0xCF31, 0xC4D8},{0xCF32, 0xB169},{0xCF33, 0xB16A},{0xCF34, 0xB16B},{0xCF35, 0xB16C},{0xCF36, 0xB16D}, - {0xCF37, 0xB16E},{0xCF38, 0xC4D9},{0xCF39, 0xB16F},{0xCF3A, 0xB170},{0xCF3B, 0xB171},{0xCF3C, 0xB172},{0xCF3D, 0xB173},{0xCF3E, 0xB174}, - {0xCF3F, 0xB175},{0xCF40, 0xB176},{0xCF41, 0xB177},{0xCF42, 0xB178},{0xCF43, 0xB179},{0xCF44, 0xB17A},{0xCF45, 0xB181},{0xCF46, 0xB182}, - {0xCF47, 0xB183},{0xCF48, 0xB184},{0xCF49, 0xB185},{0xCF4A, 0xB186},{0xCF4B, 0xB187},{0xCF4C, 0xB188},{0xCF4D, 0xB189},{0xCF4E, 0xB18A}, - {0xCF4F, 0xB18B},{0xCF50, 0xB18C},{0xCF51, 0xB18D},{0xCF52, 0xB18E},{0xCF53, 0xB18F},{0xCF54, 0xC4DA},{0xCF55, 0xC4DB},{0xCF56, 0xB190}, - {0xCF57, 0xB191},{0xCF58, 0xC4DC},{0xCF59, 0xB192},{0xCF5A, 0xB193},{0xCF5B, 0xB194},{0xCF5C, 0xC4DD},{0xCF5D, 0xB195},{0xCF5E, 0xB196}, - {0xCF5F, 0xB197},{0xCF60, 0xB198},{0xCF61, 0xB199},{0xCF62, 0xB19A},{0xCF63, 0xB19B},{0xCF64, 0xC4DE},{0xCF65, 0xC4DF},{0xCF66, 0xB19C}, - {0xCF67, 0xC4E0},{0xCF68, 0xB19D},{0xCF69, 0xC4E1},{0xCF6A, 0xB19E},{0xCF6B, 0xB19F},{0xCF6C, 0xB1A0},{0xCF6D, 0xB241},{0xCF6E, 0xB242}, - {0xCF6F, 0xB243},{0xCF70, 0xC4E2},{0xCF71, 0xC4E3},{0xCF72, 0xB244},{0xCF73, 0xB245},{0xCF74, 0xC4E4},{0xCF75, 0xB246},{0xCF76, 0xB247}, - {0xCF77, 0xB248},{0xCF78, 0xC4E5},{0xCF79, 0xB249},{0xCF7A, 0xB24A},{0xCF7B, 0xB24B},{0xCF7C, 0xB24C},{0xCF7D, 0xB24D},{0xCF7E, 0xB24E}, - {0xCF7F, 0xB24F},{0xCF80, 0xC4E6},{0xCF81, 0xB250},{0xCF82, 0xB251},{0xCF83, 0xB252},{0xCF84, 0xB253},{0xCF85, 0xC4E7},{0xCF86, 0xB254}, - {0xCF87, 0xB255},{0xCF88, 0xB256},{0xCF89, 0xB257},{0xCF8A, 0xB258},{0xCF8B, 0xB259},{0xCF8C, 0xC4E8},{0xCF8D, 0xB25A},{0xCF8E, 0xB261}, - {0xCF8F, 0xB262},{0xCF90, 0xB263},{0xCF91, 0xB264},{0xCF92, 0xB265},{0xCF93, 0xB266},{0xCF94, 0xB267},{0xCF95, 0xB268},{0xCF96, 0xB269}, - {0xCF97, 0xB26A},{0xCF98, 0xB26B},{0xCF99, 0xB26C},{0xCF9A, 0xB26D},{0xCF9B, 0xB26E},{0xCF9C, 0xB26F},{0xCF9D, 0xB270},{0xCF9E, 0xB271}, - {0xCF9F, 0xB272},{0xCFA0, 0xB273},{0xCFA1, 0xC4E9},{0xCFA2, 0xB274},{0xCFA3, 0xB275},{0xCFA4, 0xB276},{0xCFA5, 0xB277},{0xCFA6, 0xB278}, - {0xCFA7, 0xB279},{0xCFA8, 0xC4EA},{0xCFA9, 0xB27A},{0xCFAA, 0xB281},{0xCFAB, 0xB282},{0xCFAC, 0xB283},{0xCFAD, 0xB284},{0xCFAE, 0xB285}, - {0xCFAF, 0xB286},{0xCFB0, 0xC4EB},{0xCFB1, 0xB287},{0xCFB2, 0xB288},{0xCFB3, 0xB289},{0xCFB4, 0xB28A},{0xCFB5, 0xB28B},{0xCFB6, 0xB28C}, - {0xCFB7, 0xB28D},{0xCFB8, 0xB28E},{0xCFB9, 0xB28F},{0xCFBA, 0xB290},{0xCFBB, 0xB291},{0xCFBC, 0xB292},{0xCFBD, 0xB293},{0xCFBE, 0xB294}, - {0xCFBF, 0xB295},{0xCFC0, 0xB296},{0xCFC1, 0xB297},{0xCFC2, 0xB298},{0xCFC3, 0xB299},{0xCFC4, 0xC4EC},{0xCFC5, 0xB29A},{0xCFC6, 0xB29B}, - {0xCFC7, 0xB29C},{0xCFC8, 0xB29D},{0xCFC9, 0xB29E},{0xCFCA, 0xB29F},{0xCFCB, 0xB2A0},{0xCFCC, 0xB341},{0xCFCD, 0xB342},{0xCFCE, 0xB343}, - {0xCFCF, 0xB344},{0xCFD0, 0xB345},{0xCFD1, 0xB346},{0xCFD2, 0xB347},{0xCFD3, 0xB348},{0xCFD4, 0xB349},{0xCFD5, 0xB34A},{0xCFD6, 0xB34B}, - {0xCFD7, 0xB34C},{0xCFD8, 0xB34D},{0xCFD9, 0xB34E},{0xCFDA, 0xB34F},{0xCFDB, 0xB350},{0xCFDC, 0xB351},{0xCFDD, 0xB352},{0xCFDE, 0xB353}, - {0xCFDF, 0xB354},{0xCFE0, 0xC4ED},{0xCFE1, 0xC4EE},{0xCFE2, 0xB355},{0xCFE3, 0xB356},{0xCFE4, 0xC4EF},{0xCFE5, 0xB357},{0xCFE6, 0xB358}, - {0xCFE7, 0xB359},{0xCFE8, 0xC4F0},{0xCFE9, 0xB35A},{0xCFEA, 0xB361},{0xCFEB, 0xB362},{0xCFEC, 0xB363},{0xCFED, 0xB364},{0xCFEE, 0xB365}, - {0xCFEF, 0xB366},{0xCFF0, 0xC4F1},{0xCFF1, 0xC4F2},{0xCFF2, 0xB367},{0xCFF3, 0xC4F3},{0xCFF4, 0xB368},{0xCFF5, 0xC4F4},{0xCFF6, 0xB369}, - {0xCFF7, 0xB36A},{0xCFF8, 0xB36B},{0xCFF9, 0xB36C},{0xCFFA, 0xB36D},{0xCFFB, 0xB36E},{0xCFFC, 0xC4F5},{0xCFFD, 0xB36F},{0xCFFE, 0xB370}, - {0xCFFF, 0xB371},{0xD000, 0xC4F6},{0xD001, 0xB372},{0xD002, 0xB373},{0xD003, 0xB374},{0xD004, 0xC4F7},{0xD005, 0xB375},{0xD006, 0xB376}, - {0xD007, 0xB377},{0xD008, 0xB378},{0xD009, 0xB379},{0xD00A, 0xB37A},{0xD00B, 0xB381},{0xD00C, 0xB382},{0xD00D, 0xB383},{0xD00E, 0xB384}, - {0xD00F, 0xB385},{0xD010, 0xB386},{0xD011, 0xC4F8},{0xD012, 0xB387},{0xD013, 0xB388},{0xD014, 0xB389},{0xD015, 0xB38A},{0xD016, 0xB38B}, - {0xD017, 0xB38C},{0xD018, 0xC4F9},{0xD019, 0xB38D},{0xD01A, 0xB38E},{0xD01B, 0xB38F},{0xD01C, 0xB390},{0xD01D, 0xB391},{0xD01E, 0xB392}, - {0xD01F, 0xB393},{0xD020, 0xB394},{0xD021, 0xB395},{0xD022, 0xB396},{0xD023, 0xB397},{0xD024, 0xB398},{0xD025, 0xB399},{0xD026, 0xB39A}, - {0xD027, 0xB39B},{0xD028, 0xB39C},{0xD029, 0xB39D},{0xD02A, 0xB39E},{0xD02B, 0xB39F},{0xD02C, 0xB3A0},{0xD02D, 0xC4FA},{0xD02E, 0xB441}, - {0xD02F, 0xB442},{0xD030, 0xB443},{0xD031, 0xB444},{0xD032, 0xB445},{0xD033, 0xB446},{0xD034, 0xC4FB},{0xD035, 0xC4FC},{0xD036, 0xB447}, - {0xD037, 0xB448},{0xD038, 0xC4FD},{0xD039, 0xB449},{0xD03A, 0xB44A},{0xD03B, 0xB44B},{0xD03C, 0xC4FE},{0xD03D, 0xB44C},{0xD03E, 0xB44D}, - {0xD03F, 0xB44E},{0xD040, 0xB44F},{0xD041, 0xB450},{0xD042, 0xB451},{0xD043, 0xB452},{0xD044, 0xC5A1},{0xD045, 0xC5A2},{0xD046, 0xB453}, - {0xD047, 0xC5A3},{0xD048, 0xB454},{0xD049, 0xC5A4},{0xD04A, 0xB455},{0xD04B, 0xB456},{0xD04C, 0xB457},{0xD04D, 0xB458},{0xD04E, 0xB459}, - {0xD04F, 0xB45A},{0xD050, 0xC5A5},{0xD051, 0xB461},{0xD052, 0xB462},{0xD053, 0xB463},{0xD054, 0xC5A6},{0xD055, 0xB464},{0xD056, 0xB465}, - {0xD057, 0xB466},{0xD058, 0xC5A7},{0xD059, 0xB467},{0xD05A, 0xB468},{0xD05B, 0xB469},{0xD05C, 0xB46A},{0xD05D, 0xB46B},{0xD05E, 0xB46C}, - {0xD05F, 0xB46D},{0xD060, 0xC5A8},{0xD061, 0xB46E},{0xD062, 0xB46F},{0xD063, 0xB470},{0xD064, 0xB471},{0xD065, 0xB472},{0xD066, 0xB473}, - {0xD067, 0xB474},{0xD068, 0xB475},{0xD069, 0xB476},{0xD06A, 0xB477},{0xD06B, 0xB478},{0xD06C, 0xC5A9},{0xD06D, 0xC5AA},{0xD06E, 0xB479}, - {0xD06F, 0xB47A},{0xD070, 0xC5AB},{0xD071, 0xB481},{0xD072, 0xB482},{0xD073, 0xB483},{0xD074, 0xC5AC},{0xD075, 0xB484},{0xD076, 0xB485}, - {0xD077, 0xB486},{0xD078, 0xB487},{0xD079, 0xB488},{0xD07A, 0xB489},{0xD07B, 0xB48A},{0xD07C, 0xC5AD},{0xD07D, 0xC5AE},{0xD07E, 0xB48B}, - {0xD07F, 0xB48C},{0xD080, 0xB48D},{0xD081, 0xC5AF},{0xD082, 0xB48E},{0xD083, 0xB48F},{0xD084, 0xB490},{0xD085, 0xB491},{0xD086, 0xB492}, - {0xD087, 0xB493},{0xD088, 0xB494},{0xD089, 0xB495},{0xD08A, 0xB496},{0xD08B, 0xB497},{0xD08C, 0xB498},{0xD08D, 0xB499},{0xD08E, 0xB49A}, - {0xD08F, 0xB49B},{0xD090, 0xB49C},{0xD091, 0xB49D},{0xD092, 0xB49E},{0xD093, 0xB49F},{0xD094, 0xB4A0},{0xD095, 0xB541},{0xD096, 0xB542}, - {0xD097, 0xB543},{0xD098, 0xB544},{0xD099, 0xB545},{0xD09A, 0xB546},{0xD09B, 0xB547},{0xD09C, 0xB548},{0xD09D, 0xB549},{0xD09E, 0xB54A}, - {0xD09F, 0xB54B},{0xD0A0, 0xB54C},{0xD0A1, 0xB54D},{0xD0A2, 0xB54E},{0xD0A3, 0xB54F},{0xD0A4, 0xC5B0},{0xD0A5, 0xC5B1},{0xD0A6, 0xB550}, - {0xD0A7, 0xB551},{0xD0A8, 0xC5B2},{0xD0A9, 0xB552},{0xD0AA, 0xB553},{0xD0AB, 0xB554},{0xD0AC, 0xC5B3},{0xD0AD, 0xB555},{0xD0AE, 0xB556}, - {0xD0AF, 0xB557},{0xD0B0, 0xB558},{0xD0B1, 0xB559},{0xD0B2, 0xB55A},{0xD0B3, 0xB561},{0xD0B4, 0xC5B4},{0xD0B5, 0xC5B5},{0xD0B6, 0xB562}, - {0xD0B7, 0xC5B6},{0xD0B8, 0xB563},{0xD0B9, 0xC5B7},{0xD0BA, 0xB564},{0xD0BB, 0xB565},{0xD0BC, 0xB566},{0xD0BD, 0xB567},{0xD0BE, 0xB568}, - {0xD0BF, 0xB569},{0xD0C0, 0xC5B8},{0xD0C1, 0xC5B9},{0xD0C2, 0xB56A},{0xD0C3, 0xB56B},{0xD0C4, 0xC5BA},{0xD0C5, 0xB56C},{0xD0C6, 0xB56D}, - {0xD0C7, 0xB56E},{0xD0C8, 0xC5BB},{0xD0C9, 0xC5BC},{0xD0CA, 0xB56F},{0xD0CB, 0xB570},{0xD0CC, 0xB571},{0xD0CD, 0xB572},{0xD0CE, 0xB573}, - {0xD0CF, 0xB574},{0xD0D0, 0xC5BD},{0xD0D1, 0xC5BE},{0xD0D2, 0xB575},{0xD0D3, 0xC5BF},{0xD0D4, 0xC5C0},{0xD0D5, 0xC5C1},{0xD0D6, 0xB576}, - {0xD0D7, 0xB577},{0xD0D8, 0xB578},{0xD0D9, 0xB579},{0xD0DA, 0xB57A},{0xD0DB, 0xB581},{0xD0DC, 0xC5C2},{0xD0DD, 0xC5C3},{0xD0DE, 0xB582}, - {0xD0DF, 0xB583},{0xD0E0, 0xC5C4},{0xD0E1, 0xB584},{0xD0E2, 0xB585},{0xD0E3, 0xB586},{0xD0E4, 0xC5C5},{0xD0E5, 0xB587},{0xD0E6, 0xB588}, - {0xD0E7, 0xB589},{0xD0E8, 0xB58A},{0xD0E9, 0xB58B},{0xD0EA, 0xB58C},{0xD0EB, 0xB58D},{0xD0EC, 0xC5C6},{0xD0ED, 0xC5C7},{0xD0EE, 0xB58E}, - {0xD0EF, 0xC5C8},{0xD0F0, 0xC5C9},{0xD0F1, 0xC5CA},{0xD0F2, 0xB58F},{0xD0F3, 0xB590},{0xD0F4, 0xB591},{0xD0F5, 0xB592},{0xD0F6, 0xB593}, - {0xD0F7, 0xB594},{0xD0F8, 0xC5CB},{0xD0F9, 0xB595},{0xD0FA, 0xB596},{0xD0FB, 0xB597},{0xD0FC, 0xB598},{0xD0FD, 0xB599},{0xD0FE, 0xB59A}, - {0xD0FF, 0xB59B},{0xD100, 0xB59C},{0xD101, 0xB59D},{0xD102, 0xB59E},{0xD103, 0xB59F},{0xD104, 0xB5A0},{0xD105, 0xB641},{0xD106, 0xB642}, - {0xD107, 0xB643},{0xD108, 0xB644},{0xD109, 0xB645},{0xD10A, 0xB646},{0xD10B, 0xB647},{0xD10C, 0xB648},{0xD10D, 0xC5CC},{0xD10E, 0xB649}, - {0xD10F, 0xB64A},{0xD110, 0xB64B},{0xD111, 0xB64C},{0xD112, 0xB64D},{0xD113, 0xB64E},{0xD114, 0xB64F},{0xD115, 0xB650},{0xD116, 0xB651}, - {0xD117, 0xB652},{0xD118, 0xB653},{0xD119, 0xB654},{0xD11A, 0xB655},{0xD11B, 0xB656},{0xD11C, 0xB657},{0xD11D, 0xB658},{0xD11E, 0xB659}, - {0xD11F, 0xB65A},{0xD120, 0xB661},{0xD121, 0xB662},{0xD122, 0xB663},{0xD123, 0xB664},{0xD124, 0xB665},{0xD125, 0xB666},{0xD126, 0xB667}, - {0xD127, 0xB668},{0xD128, 0xB669},{0xD129, 0xB66A},{0xD12A, 0xB66B},{0xD12B, 0xB66C},{0xD12C, 0xB66D},{0xD12D, 0xB66E},{0xD12E, 0xB66F}, - {0xD12F, 0xB670},{0xD130, 0xC5CD},{0xD131, 0xC5CE},{0xD132, 0xB671},{0xD133, 0xB672},{0xD134, 0xC5CF},{0xD135, 0xB673},{0xD136, 0xB674}, - {0xD137, 0xB675},{0xD138, 0xC5D0},{0xD139, 0xB676},{0xD13A, 0xC5D1},{0xD13B, 0xB677},{0xD13C, 0xB678},{0xD13D, 0xB679},{0xD13E, 0xB67A}, - {0xD13F, 0xB681},{0xD140, 0xC5D2},{0xD141, 0xC5D3},{0xD142, 0xB682},{0xD143, 0xC5D4},{0xD144, 0xC5D5},{0xD145, 0xC5D6},{0xD146, 0xB683}, - {0xD147, 0xB684},{0xD148, 0xB685},{0xD149, 0xB686},{0xD14A, 0xB687},{0xD14B, 0xB688},{0xD14C, 0xC5D7},{0xD14D, 0xC5D8},{0xD14E, 0xB689}, - {0xD14F, 0xB68A},{0xD150, 0xC5D9},{0xD151, 0xB68B},{0xD152, 0xB68C},{0xD153, 0xB68D},{0xD154, 0xC5DA},{0xD155, 0xB68E},{0xD156, 0xB68F}, - {0xD157, 0xB690},{0xD158, 0xB691},{0xD159, 0xB692},{0xD15A, 0xB693},{0xD15B, 0xB694},{0xD15C, 0xC5DB},{0xD15D, 0xC5DC},{0xD15E, 0xB695}, - {0xD15F, 0xC5DD},{0xD160, 0xB696},{0xD161, 0xC5DE},{0xD162, 0xB697},{0xD163, 0xB698},{0xD164, 0xB699},{0xD165, 0xB69A},{0xD166, 0xB69B}, - {0xD167, 0xB69C},{0xD168, 0xC5DF},{0xD169, 0xB69D},{0xD16A, 0xB69E},{0xD16B, 0xB69F},{0xD16C, 0xC5E0},{0xD16D, 0xB6A0},{0xD16E, 0xB741}, - {0xD16F, 0xB742},{0xD170, 0xB743},{0xD171, 0xB744},{0xD172, 0xB745},{0xD173, 0xB746},{0xD174, 0xB747},{0xD175, 0xB748},{0xD176, 0xB749}, - {0xD177, 0xB74A},{0xD178, 0xB74B},{0xD179, 0xB74C},{0xD17A, 0xB74D},{0xD17B, 0xB74E},{0xD17C, 0xC5E1},{0xD17D, 0xB74F},{0xD17E, 0xB750}, - {0xD17F, 0xB751},{0xD180, 0xB752},{0xD181, 0xB753},{0xD182, 0xB754},{0xD183, 0xB755},{0xD184, 0xC5E2},{0xD185, 0xB756},{0xD186, 0xB757}, - {0xD187, 0xB758},{0xD188, 0xC5E3},{0xD189, 0xB759},{0xD18A, 0xB75A},{0xD18B, 0xB761},{0xD18C, 0xB762},{0xD18D, 0xB763},{0xD18E, 0xB764}, - {0xD18F, 0xB765},{0xD190, 0xB766},{0xD191, 0xB767},{0xD192, 0xB768},{0xD193, 0xB769},{0xD194, 0xB76A},{0xD195, 0xB76B},{0xD196, 0xB76C}, - {0xD197, 0xB76D},{0xD198, 0xB76E},{0xD199, 0xB76F},{0xD19A, 0xB770},{0xD19B, 0xB771},{0xD19C, 0xB772},{0xD19D, 0xB773},{0xD19E, 0xB774}, - {0xD19F, 0xB775},{0xD1A0, 0xC5E4},{0xD1A1, 0xC5E5},{0xD1A2, 0xB776},{0xD1A3, 0xB777},{0xD1A4, 0xC5E6},{0xD1A5, 0xB778},{0xD1A6, 0xB779}, - {0xD1A7, 0xB77A},{0xD1A8, 0xC5E7},{0xD1A9, 0xB781},{0xD1AA, 0xB782},{0xD1AB, 0xB783},{0xD1AC, 0xB784},{0xD1AD, 0xB785},{0xD1AE, 0xB786}, - {0xD1AF, 0xB787},{0xD1B0, 0xC5E8},{0xD1B1, 0xC5E9},{0xD1B2, 0xB788},{0xD1B3, 0xC5EA},{0xD1B4, 0xB789},{0xD1B5, 0xC5EB},{0xD1B6, 0xB78A}, - {0xD1B7, 0xB78B},{0xD1B8, 0xB78C},{0xD1B9, 0xB78D},{0xD1BA, 0xC5EC},{0xD1BB, 0xB78E},{0xD1BC, 0xC5ED},{0xD1BD, 0xB78F},{0xD1BE, 0xB790}, - {0xD1BF, 0xB791},{0xD1C0, 0xC5EE},{0xD1C1, 0xB792},{0xD1C2, 0xB793},{0xD1C3, 0xB794},{0xD1C4, 0xB795},{0xD1C5, 0xB796},{0xD1C6, 0xB797}, - {0xD1C7, 0xB798},{0xD1C8, 0xB799},{0xD1C9, 0xB79A},{0xD1CA, 0xB79B},{0xD1CB, 0xB79C},{0xD1CC, 0xB79D},{0xD1CD, 0xB79E},{0xD1CE, 0xB79F}, - {0xD1CF, 0xB7A0},{0xD1D0, 0xB841},{0xD1D1, 0xB842},{0xD1D2, 0xB843},{0xD1D3, 0xB844},{0xD1D4, 0xB845},{0xD1D5, 0xB846},{0xD1D6, 0xB847}, - {0xD1D7, 0xB848},{0xD1D8, 0xC5EF},{0xD1D9, 0xB849},{0xD1DA, 0xB84A},{0xD1DB, 0xB84B},{0xD1DC, 0xB84C},{0xD1DD, 0xB84D},{0xD1DE, 0xB84E}, - {0xD1DF, 0xB84F},{0xD1E0, 0xB850},{0xD1E1, 0xB851},{0xD1E2, 0xB852},{0xD1E3, 0xB853},{0xD1E4, 0xB854},{0xD1E5, 0xB855},{0xD1E6, 0xB856}, - {0xD1E7, 0xB857},{0xD1E8, 0xB858},{0xD1E9, 0xB859},{0xD1EA, 0xB85A},{0xD1EB, 0xB861},{0xD1EC, 0xB862},{0xD1ED, 0xB863},{0xD1EE, 0xB864}, - {0xD1EF, 0xB865},{0xD1F0, 0xB866},{0xD1F1, 0xB867},{0xD1F2, 0xB868},{0xD1F3, 0xB869},{0xD1F4, 0xC5F0},{0xD1F5, 0xB86A},{0xD1F6, 0xB86B}, - {0xD1F7, 0xB86C},{0xD1F8, 0xC5F1},{0xD1F9, 0xB86D},{0xD1FA, 0xB86E},{0xD1FB, 0xB86F},{0xD1FC, 0xB870},{0xD1FD, 0xB871},{0xD1FE, 0xB872}, - {0xD1FF, 0xB873},{0xD200, 0xB874},{0xD201, 0xB875},{0xD202, 0xB876},{0xD203, 0xB877},{0xD204, 0xB878},{0xD205, 0xB879},{0xD206, 0xB87A}, - {0xD207, 0xC5F2},{0xD208, 0xB881},{0xD209, 0xC5F3},{0xD20A, 0xB882},{0xD20B, 0xB883},{0xD20C, 0xB884},{0xD20D, 0xB885},{0xD20E, 0xB886}, - {0xD20F, 0xB887},{0xD210, 0xC5F4},{0xD211, 0xB888},{0xD212, 0xB889},{0xD213, 0xB88A},{0xD214, 0xB88B},{0xD215, 0xB88C},{0xD216, 0xB88D}, - {0xD217, 0xB88E},{0xD218, 0xB88F},{0xD219, 0xB890},{0xD21A, 0xB891},{0xD21B, 0xB892},{0xD21C, 0xB893},{0xD21D, 0xB894},{0xD21E, 0xB895}, - {0xD21F, 0xB896},{0xD220, 0xB897},{0xD221, 0xB898},{0xD222, 0xB899},{0xD223, 0xB89A},{0xD224, 0xB89B},{0xD225, 0xB89C},{0xD226, 0xB89D}, - {0xD227, 0xB89E},{0xD228, 0xB89F},{0xD229, 0xB8A0},{0xD22A, 0xB941},{0xD22B, 0xB942},{0xD22C, 0xC5F5},{0xD22D, 0xC5F6},{0xD22E, 0xB943}, - {0xD22F, 0xB944},{0xD230, 0xC5F7},{0xD231, 0xB945},{0xD232, 0xB946},{0xD233, 0xB947},{0xD234, 0xC5F8},{0xD235, 0xB948},{0xD236, 0xB949}, - {0xD237, 0xB94A},{0xD238, 0xB94B},{0xD239, 0xB94C},{0xD23A, 0xB94D},{0xD23B, 0xB94E},{0xD23C, 0xC5F9},{0xD23D, 0xC5FA},{0xD23E, 0xB94F}, - {0xD23F, 0xC5FB},{0xD240, 0xB950},{0xD241, 0xC5FC},{0xD242, 0xB951},{0xD243, 0xB952},{0xD244, 0xB953},{0xD245, 0xB954},{0xD246, 0xB955}, - {0xD247, 0xB956},{0xD248, 0xC5FD},{0xD249, 0xB957},{0xD24A, 0xB958},{0xD24B, 0xB959},{0xD24C, 0xB95A},{0xD24D, 0xB961},{0xD24E, 0xB962}, - {0xD24F, 0xB963},{0xD250, 0xB964},{0xD251, 0xB965},{0xD252, 0xB966},{0xD253, 0xB967},{0xD254, 0xB968},{0xD255, 0xB969},{0xD256, 0xB96A}, - {0xD257, 0xB96B},{0xD258, 0xB96C},{0xD259, 0xB96D},{0xD25A, 0xB96E},{0xD25B, 0xB96F},{0xD25C, 0xC5FE},{0xD25D, 0xB970},{0xD25E, 0xB971}, - {0xD25F, 0xB972},{0xD260, 0xB973},{0xD261, 0xB974},{0xD262, 0xB975},{0xD263, 0xB976},{0xD264, 0xC6A1},{0xD265, 0xB977},{0xD266, 0xB978}, - {0xD267, 0xB979},{0xD268, 0xB97A},{0xD269, 0xB981},{0xD26A, 0xB982},{0xD26B, 0xB983},{0xD26C, 0xB984},{0xD26D, 0xB985},{0xD26E, 0xB986}, - {0xD26F, 0xB987},{0xD270, 0xB988},{0xD271, 0xB989},{0xD272, 0xB98A},{0xD273, 0xB98B},{0xD274, 0xB98C},{0xD275, 0xB98D},{0xD276, 0xB98E}, - {0xD277, 0xB98F},{0xD278, 0xB990},{0xD279, 0xB991},{0xD27A, 0xB992},{0xD27B, 0xB993},{0xD27C, 0xB994},{0xD27D, 0xB995},{0xD27E, 0xB996}, - {0xD27F, 0xB997},{0xD280, 0xC6A2},{0xD281, 0xC6A3},{0xD282, 0xB998},{0xD283, 0xB999},{0xD284, 0xC6A4},{0xD285, 0xB99A},{0xD286, 0xB99B}, - {0xD287, 0xB99C},{0xD288, 0xC6A5},{0xD289, 0xB99D},{0xD28A, 0xB99E},{0xD28B, 0xB99F},{0xD28C, 0xB9A0},{0xD28D, 0xBA41},{0xD28E, 0xBA42}, - {0xD28F, 0xBA43},{0xD290, 0xC6A6},{0xD291, 0xC6A7},{0xD292, 0xBA44},{0xD293, 0xBA45},{0xD294, 0xBA46},{0xD295, 0xC6A8},{0xD296, 0xBA47}, - {0xD297, 0xBA48},{0xD298, 0xBA49},{0xD299, 0xBA4A},{0xD29A, 0xBA4B},{0xD29B, 0xBA4C},{0xD29C, 0xC6A9},{0xD29D, 0xBA4D},{0xD29E, 0xBA4E}, - {0xD29F, 0xBA4F},{0xD2A0, 0xC6AA},{0xD2A1, 0xBA50},{0xD2A2, 0xBA51},{0xD2A3, 0xBA52},{0xD2A4, 0xC6AB},{0xD2A5, 0xBA53},{0xD2A6, 0xBA54}, - {0xD2A7, 0xBA55},{0xD2A8, 0xBA56},{0xD2A9, 0xBA57},{0xD2AA, 0xBA58},{0xD2AB, 0xBA59},{0xD2AC, 0xC6AC},{0xD2AD, 0xBA5A},{0xD2AE, 0xBA61}, - {0xD2AF, 0xBA62},{0xD2B0, 0xBA63},{0xD2B1, 0xC6AD},{0xD2B2, 0xBA64},{0xD2B3, 0xBA65},{0xD2B4, 0xBA66},{0xD2B5, 0xBA67},{0xD2B6, 0xBA68}, - {0xD2B7, 0xBA69},{0xD2B8, 0xC6AE},{0xD2B9, 0xC6AF},{0xD2BA, 0xBA6A},{0xD2BB, 0xBA6B},{0xD2BC, 0xC6B0},{0xD2BD, 0xBA6C},{0xD2BE, 0xBA6D}, - {0xD2BF, 0xC6B1},{0xD2C0, 0xC6B2},{0xD2C1, 0xBA6E},{0xD2C2, 0xC6B3},{0xD2C3, 0xBA6F},{0xD2C4, 0xBA70},{0xD2C5, 0xBA71},{0xD2C6, 0xBA72}, - {0xD2C7, 0xBA73},{0xD2C8, 0xC6B4},{0xD2C9, 0xC6B5},{0xD2CA, 0xBA74},{0xD2CB, 0xC6B6},{0xD2CC, 0xBA75},{0xD2CD, 0xBA76},{0xD2CE, 0xBA77}, - {0xD2CF, 0xBA78},{0xD2D0, 0xBA79},{0xD2D1, 0xBA7A},{0xD2D2, 0xBA81},{0xD2D3, 0xBA82},{0xD2D4, 0xC6B7},{0xD2D5, 0xBA83},{0xD2D6, 0xBA84}, - {0xD2D7, 0xBA85},{0xD2D8, 0xC6B8},{0xD2D9, 0xBA86},{0xD2DA, 0xBA87},{0xD2DB, 0xBA88},{0xD2DC, 0xC6B9},{0xD2DD, 0xBA89},{0xD2DE, 0xBA8A}, - {0xD2DF, 0xBA8B},{0xD2E0, 0xBA8C},{0xD2E1, 0xBA8D},{0xD2E2, 0xBA8E},{0xD2E3, 0xBA8F},{0xD2E4, 0xC6BA},{0xD2E5, 0xC6BB},{0xD2E6, 0xBA90}, - {0xD2E7, 0xBA91},{0xD2E8, 0xBA92},{0xD2E9, 0xBA93},{0xD2EA, 0xBA94},{0xD2EB, 0xBA95},{0xD2EC, 0xBA96},{0xD2ED, 0xBA97},{0xD2EE, 0xBA98}, - {0xD2EF, 0xBA99},{0xD2F0, 0xC6BC},{0xD2F1, 0xC6BD},{0xD2F2, 0xBA9A},{0xD2F3, 0xBA9B},{0xD2F4, 0xC6BE},{0xD2F5, 0xBA9C},{0xD2F6, 0xBA9D}, - {0xD2F7, 0xBA9E},{0xD2F8, 0xC6BF},{0xD2F9, 0xBA9F},{0xD2FA, 0xBAA0},{0xD2FB, 0xBB41},{0xD2FC, 0xBB42},{0xD2FD, 0xBB43},{0xD2FE, 0xBB44}, - {0xD2FF, 0xBB45},{0xD300, 0xC6C0},{0xD301, 0xC6C1},{0xD302, 0xBB46},{0xD303, 0xC6C2},{0xD304, 0xBB47},{0xD305, 0xC6C3},{0xD306, 0xBB48}, - {0xD307, 0xBB49},{0xD308, 0xBB4A},{0xD309, 0xBB4B},{0xD30A, 0xBB4C},{0xD30B, 0xBB4D},{0xD30C, 0xC6C4},{0xD30D, 0xC6C5},{0xD30E, 0xC6C6}, - {0xD30F, 0xBB4E},{0xD310, 0xC6C7},{0xD311, 0xBB4F},{0xD312, 0xBB50},{0xD313, 0xBB51},{0xD314, 0xC6C8},{0xD315, 0xBB52},{0xD316, 0xC6C9}, - {0xD317, 0xBB53},{0xD318, 0xBB54},{0xD319, 0xBB55},{0xD31A, 0xBB56},{0xD31B, 0xBB57},{0xD31C, 0xC6CA},{0xD31D, 0xC6CB},{0xD31E, 0xBB58}, - {0xD31F, 0xC6CC},{0xD320, 0xC6CD},{0xD321, 0xC6CE},{0xD322, 0xBB59},{0xD323, 0xBB5A},{0xD324, 0xBB61},{0xD325, 0xC6CF},{0xD326, 0xBB62}, - {0xD327, 0xBB63},{0xD328, 0xC6D0},{0xD329, 0xC6D1},{0xD32A, 0xBB64},{0xD32B, 0xBB65},{0xD32C, 0xC6D2},{0xD32D, 0xBB66},{0xD32E, 0xBB67}, - {0xD32F, 0xBB68},{0xD330, 0xC6D3},{0xD331, 0xBB69},{0xD332, 0xBB6A},{0xD333, 0xBB6B},{0xD334, 0xBB6C},{0xD335, 0xBB6D},{0xD336, 0xBB6E}, - {0xD337, 0xBB6F},{0xD338, 0xC6D4},{0xD339, 0xC6D5},{0xD33A, 0xBB70},{0xD33B, 0xC6D6},{0xD33C, 0xC6D7},{0xD33D, 0xC6D8},{0xD33E, 0xBB71}, - {0xD33F, 0xBB72},{0xD340, 0xBB73},{0xD341, 0xBB74},{0xD342, 0xBB75},{0xD343, 0xBB76},{0xD344, 0xC6D9},{0xD345, 0xC6DA},{0xD346, 0xBB77}, - {0xD347, 0xBB78},{0xD348, 0xBB79},{0xD349, 0xBB7A},{0xD34A, 0xBB81},{0xD34B, 0xBB82},{0xD34C, 0xBB83},{0xD34D, 0xBB84},{0xD34E, 0xBB85}, - {0xD34F, 0xBB86},{0xD350, 0xBB87},{0xD351, 0xBB88},{0xD352, 0xBB89},{0xD353, 0xBB8A},{0xD354, 0xBB8B},{0xD355, 0xBB8C},{0xD356, 0xBB8D}, - {0xD357, 0xBB8E},{0xD358, 0xBB8F},{0xD359, 0xBB90},{0xD35A, 0xBB91},{0xD35B, 0xBB92},{0xD35C, 0xBB93},{0xD35D, 0xBB94},{0xD35E, 0xBB95}, - {0xD35F, 0xBB96},{0xD360, 0xBB97},{0xD361, 0xBB98},{0xD362, 0xBB99},{0xD363, 0xBB9A},{0xD364, 0xBB9B},{0xD365, 0xBB9C},{0xD366, 0xBB9D}, - {0xD367, 0xBB9E},{0xD368, 0xBB9F},{0xD369, 0xBBA0},{0xD36A, 0xBC41},{0xD36B, 0xBC42},{0xD36C, 0xBC43},{0xD36D, 0xBC44},{0xD36E, 0xBC45}, - {0xD36F, 0xBC46},{0xD370, 0xBC47},{0xD371, 0xBC48},{0xD372, 0xBC49},{0xD373, 0xBC4A},{0xD374, 0xBC4B},{0xD375, 0xBC4C},{0xD376, 0xBC4D}, - {0xD377, 0xBC4E},{0xD378, 0xBC4F},{0xD379, 0xBC50},{0xD37A, 0xBC51},{0xD37B, 0xBC52},{0xD37C, 0xC6DB},{0xD37D, 0xC6DC},{0xD37E, 0xBC53}, - {0xD37F, 0xBC54},{0xD380, 0xC6DD},{0xD381, 0xBC55},{0xD382, 0xBC56},{0xD383, 0xBC57},{0xD384, 0xC6DE},{0xD385, 0xBC58},{0xD386, 0xBC59}, - {0xD387, 0xBC5A},{0xD388, 0xBC61},{0xD389, 0xBC62},{0xD38A, 0xBC63},{0xD38B, 0xBC64},{0xD38C, 0xC6DF},{0xD38D, 0xC6E0},{0xD38E, 0xBC65}, - {0xD38F, 0xC6E1},{0xD390, 0xC6E2},{0xD391, 0xC6E3},{0xD392, 0xBC66},{0xD393, 0xBC67},{0xD394, 0xBC68},{0xD395, 0xBC69},{0xD396, 0xBC6A}, - {0xD397, 0xBC6B},{0xD398, 0xC6E4},{0xD399, 0xC6E5},{0xD39A, 0xBC6C},{0xD39B, 0xBC6D},{0xD39C, 0xC6E6},{0xD39D, 0xBC6E},{0xD39E, 0xBC6F}, - {0xD39F, 0xBC70},{0xD3A0, 0xC6E7},{0xD3A1, 0xBC71},{0xD3A2, 0xBC72},{0xD3A3, 0xBC73},{0xD3A4, 0xBC74},{0xD3A5, 0xBC75},{0xD3A6, 0xBC76}, - {0xD3A7, 0xBC77},{0xD3A8, 0xC6E8},{0xD3A9, 0xC6E9},{0xD3AA, 0xBC78},{0xD3AB, 0xC6EA},{0xD3AC, 0xBC79},{0xD3AD, 0xC6EB},{0xD3AE, 0xBC7A}, - {0xD3AF, 0xBC81},{0xD3B0, 0xBC82},{0xD3B1, 0xBC83},{0xD3B2, 0xBC84},{0xD3B3, 0xBC85},{0xD3B4, 0xC6EC},{0xD3B5, 0xBC86},{0xD3B6, 0xBC87}, - {0xD3B7, 0xBC88},{0xD3B8, 0xC6ED},{0xD3B9, 0xBC89},{0xD3BA, 0xBC8A},{0xD3BB, 0xBC8B},{0xD3BC, 0xC6EE},{0xD3BD, 0xBC8C},{0xD3BE, 0xBC8D}, - {0xD3BF, 0xBC8E},{0xD3C0, 0xBC8F},{0xD3C1, 0xBC90},{0xD3C2, 0xBC91},{0xD3C3, 0xBC92},{0xD3C4, 0xC6EF},{0xD3C5, 0xC6F0},{0xD3C6, 0xBC93}, - {0xD3C7, 0xBC94},{0xD3C8, 0xC6F1},{0xD3C9, 0xC6F2},{0xD3CA, 0xBC95},{0xD3CB, 0xBC96},{0xD3CC, 0xBC97},{0xD3CD, 0xBC98},{0xD3CE, 0xBC99}, - {0xD3CF, 0xBC9A},{0xD3D0, 0xC6F3},{0xD3D1, 0xBC9B},{0xD3D2, 0xBC9C},{0xD3D3, 0xBC9D},{0xD3D4, 0xBC9E},{0xD3D5, 0xBC9F},{0xD3D6, 0xBCA0}, - {0xD3D7, 0xBD41},{0xD3D8, 0xC6F4},{0xD3D9, 0xBD42},{0xD3DA, 0xBD43},{0xD3DB, 0xBD44},{0xD3DC, 0xBD45},{0xD3DD, 0xBD46},{0xD3DE, 0xBD47}, - {0xD3DF, 0xBD48},{0xD3E0, 0xBD49},{0xD3E1, 0xC6F5},{0xD3E2, 0xBD4A},{0xD3E3, 0xC6F6},{0xD3E4, 0xBD4B},{0xD3E5, 0xBD4C},{0xD3E6, 0xBD4D}, - {0xD3E7, 0xBD4E},{0xD3E8, 0xBD4F},{0xD3E9, 0xBD50},{0xD3EA, 0xBD51},{0xD3EB, 0xBD52},{0xD3EC, 0xC6F7},{0xD3ED, 0xC6F8},{0xD3EE, 0xBD53}, - {0xD3EF, 0xBD54},{0xD3F0, 0xC6F9},{0xD3F1, 0xBD55},{0xD3F2, 0xBD56},{0xD3F3, 0xBD57},{0xD3F4, 0xC6FA},{0xD3F5, 0xBD58},{0xD3F6, 0xBD59}, - {0xD3F7, 0xBD5A},{0xD3F8, 0xBD61},{0xD3F9, 0xBD62},{0xD3FA, 0xBD63},{0xD3FB, 0xBD64},{0xD3FC, 0xC6FB},{0xD3FD, 0xC6FC},{0xD3FE, 0xBD65}, - {0xD3FF, 0xC6FD},{0xD400, 0xBD66},{0xD401, 0xC6FE},{0xD402, 0xBD67},{0xD403, 0xBD68},{0xD404, 0xBD69},{0xD405, 0xBD6A},{0xD406, 0xBD6B}, - {0xD407, 0xBD6C},{0xD408, 0xC7A1},{0xD409, 0xBD6D},{0xD40A, 0xBD6E},{0xD40B, 0xBD6F},{0xD40C, 0xBD70},{0xD40D, 0xBD71},{0xD40E, 0xBD72}, - {0xD40F, 0xBD73},{0xD410, 0xBD74},{0xD411, 0xBD75},{0xD412, 0xBD76},{0xD413, 0xBD77},{0xD414, 0xBD78},{0xD415, 0xBD79},{0xD416, 0xBD7A}, - {0xD417, 0xBD81},{0xD418, 0xBD82},{0xD419, 0xBD83},{0xD41A, 0xBD84},{0xD41B, 0xBD85},{0xD41C, 0xBD86},{0xD41D, 0xC7A2},{0xD41E, 0xBD87}, - {0xD41F, 0xBD88},{0xD420, 0xBD89},{0xD421, 0xBD8A},{0xD422, 0xBD8B},{0xD423, 0xBD8C},{0xD424, 0xBD8D},{0xD425, 0xBD8E},{0xD426, 0xBD8F}, - {0xD427, 0xBD90},{0xD428, 0xBD91},{0xD429, 0xBD92},{0xD42A, 0xBD93},{0xD42B, 0xBD94},{0xD42C, 0xBD95},{0xD42D, 0xBD96},{0xD42E, 0xBD97}, - {0xD42F, 0xBD98},{0xD430, 0xBD99},{0xD431, 0xBD9A},{0xD432, 0xBD9B},{0xD433, 0xBD9C},{0xD434, 0xBD9D},{0xD435, 0xBD9E},{0xD436, 0xBD9F}, - {0xD437, 0xBDA0},{0xD438, 0xBE41},{0xD439, 0xBE42},{0xD43A, 0xBE43},{0xD43B, 0xBE44},{0xD43C, 0xBE45},{0xD43D, 0xBE46},{0xD43E, 0xBE47}, - {0xD43F, 0xBE48},{0xD440, 0xC7A3},{0xD441, 0xBE49},{0xD442, 0xBE4A},{0xD443, 0xBE4B},{0xD444, 0xC7A4},{0xD445, 0xBE4C},{0xD446, 0xBE4D}, - {0xD447, 0xBE4E},{0xD448, 0xBE4F},{0xD449, 0xBE50},{0xD44A, 0xBE51},{0xD44B, 0xBE52},{0xD44C, 0xBE53},{0xD44D, 0xBE54},{0xD44E, 0xBE55}, - {0xD44F, 0xBE56},{0xD450, 0xBE57},{0xD451, 0xBE58},{0xD452, 0xBE59},{0xD453, 0xBE5A},{0xD454, 0xBE61},{0xD455, 0xBE62},{0xD456, 0xBE63}, - {0xD457, 0xBE64},{0xD458, 0xBE65},{0xD459, 0xBE66},{0xD45A, 0xBE67},{0xD45B, 0xBE68},{0xD45C, 0xC7A5},{0xD45D, 0xBE69},{0xD45E, 0xBE6A}, - {0xD45F, 0xBE6B},{0xD460, 0xC7A6},{0xD461, 0xBE6C},{0xD462, 0xBE6D},{0xD463, 0xBE6E},{0xD464, 0xC7A7},{0xD465, 0xBE6F},{0xD466, 0xBE70}, - {0xD467, 0xBE71},{0xD468, 0xBE72},{0xD469, 0xBE73},{0xD46A, 0xBE74},{0xD46B, 0xBE75},{0xD46C, 0xBE76},{0xD46D, 0xC7A8},{0xD46E, 0xBE77}, - {0xD46F, 0xC7A9},{0xD470, 0xBE78},{0xD471, 0xBE79},{0xD472, 0xBE7A},{0xD473, 0xBE81},{0xD474, 0xBE82},{0xD475, 0xBE83},{0xD476, 0xBE84}, - {0xD477, 0xBE85},{0xD478, 0xC7AA},{0xD479, 0xC7AB},{0xD47A, 0xBE86},{0xD47B, 0xBE87},{0xD47C, 0xC7AC},{0xD47D, 0xBE88},{0xD47E, 0xBE89}, - {0xD47F, 0xC7AD},{0xD480, 0xC7AE},{0xD481, 0xBE8A},{0xD482, 0xC7AF},{0xD483, 0xBE8B},{0xD484, 0xBE8C},{0xD485, 0xBE8D},{0xD486, 0xBE8E}, - {0xD487, 0xBE8F},{0xD488, 0xC7B0},{0xD489, 0xC7B1},{0xD48A, 0xBE90},{0xD48B, 0xC7B2},{0xD48C, 0xBE91},{0xD48D, 0xC7B3},{0xD48E, 0xBE92}, - {0xD48F, 0xBE93},{0xD490, 0xBE94},{0xD491, 0xBE95},{0xD492, 0xBE96},{0xD493, 0xBE97},{0xD494, 0xC7B4},{0xD495, 0xBE98},{0xD496, 0xBE99}, - {0xD497, 0xBE9A},{0xD498, 0xBE9B},{0xD499, 0xBE9C},{0xD49A, 0xBE9D},{0xD49B, 0xBE9E},{0xD49C, 0xBE9F},{0xD49D, 0xBEA0},{0xD49E, 0xBF41}, - {0xD49F, 0xBF42},{0xD4A0, 0xBF43},{0xD4A1, 0xBF44},{0xD4A2, 0xBF45},{0xD4A3, 0xBF46},{0xD4A4, 0xBF47},{0xD4A5, 0xBF48},{0xD4A6, 0xBF49}, - {0xD4A7, 0xBF4A},{0xD4A8, 0xBF4B},{0xD4A9, 0xC7B5},{0xD4AA, 0xBF4C},{0xD4AB, 0xBF4D},{0xD4AC, 0xBF4E},{0xD4AD, 0xBF4F},{0xD4AE, 0xBF50}, - {0xD4AF, 0xBF51},{0xD4B0, 0xBF52},{0xD4B1, 0xBF53},{0xD4B2, 0xBF54},{0xD4B3, 0xBF55},{0xD4B4, 0xBF56},{0xD4B5, 0xBF57},{0xD4B6, 0xBF58}, - {0xD4B7, 0xBF59},{0xD4B8, 0xBF5A},{0xD4B9, 0xBF61},{0xD4BA, 0xBF62},{0xD4BB, 0xBF63},{0xD4BC, 0xBF64},{0xD4BD, 0xBF65},{0xD4BE, 0xBF66}, - {0xD4BF, 0xBF67},{0xD4C0, 0xBF68},{0xD4C1, 0xBF69},{0xD4C2, 0xBF6A},{0xD4C3, 0xBF6B},{0xD4C4, 0xBF6C},{0xD4C5, 0xBF6D},{0xD4C6, 0xBF6E}, - {0xD4C7, 0xBF6F},{0xD4C8, 0xBF70},{0xD4C9, 0xBF71},{0xD4CA, 0xBF72},{0xD4CB, 0xBF73},{0xD4CC, 0xC7B6},{0xD4CD, 0xBF74},{0xD4CE, 0xBF75}, - {0xD4CF, 0xBF76},{0xD4D0, 0xC7B7},{0xD4D1, 0xBF77},{0xD4D2, 0xBF78},{0xD4D3, 0xBF79},{0xD4D4, 0xC7B8},{0xD4D5, 0xBF7A},{0xD4D6, 0xBF81}, - {0xD4D7, 0xBF82},{0xD4D8, 0xBF83},{0xD4D9, 0xBF84},{0xD4DA, 0xBF85},{0xD4DB, 0xBF86},{0xD4DC, 0xC7B9},{0xD4DD, 0xBF87},{0xD4DE, 0xBF88}, - {0xD4DF, 0xC7BA},{0xD4E0, 0xBF89},{0xD4E1, 0xBF8A},{0xD4E2, 0xBF8B},{0xD4E3, 0xBF8C},{0xD4E4, 0xBF8D},{0xD4E5, 0xBF8E},{0xD4E6, 0xBF8F}, - {0xD4E7, 0xBF90},{0xD4E8, 0xC7BB},{0xD4E9, 0xBF91},{0xD4EA, 0xBF92},{0xD4EB, 0xBF93},{0xD4EC, 0xC7BC},{0xD4ED, 0xBF94},{0xD4EE, 0xBF95}, - {0xD4EF, 0xBF96},{0xD4F0, 0xC7BD},{0xD4F1, 0xBF97},{0xD4F2, 0xBF98},{0xD4F3, 0xBF99},{0xD4F4, 0xBF9A},{0xD4F5, 0xBF9B},{0xD4F6, 0xBF9C}, - {0xD4F7, 0xBF9D},{0xD4F8, 0xC7BE},{0xD4F9, 0xBF9E},{0xD4FA, 0xBF9F},{0xD4FB, 0xC7BF},{0xD4FC, 0xBFA0},{0xD4FD, 0xC7C0},{0xD4FE, 0xC041}, - {0xD4FF, 0xC042},{0xD500, 0xC043},{0xD501, 0xC044},{0xD502, 0xC045},{0xD503, 0xC046},{0xD504, 0xC7C1},{0xD505, 0xC047},{0xD506, 0xC048}, - {0xD507, 0xC049},{0xD508, 0xC7C2},{0xD509, 0xC04A},{0xD50A, 0xC04B},{0xD50B, 0xC04C},{0xD50C, 0xC7C3},{0xD50D, 0xC04D},{0xD50E, 0xC04E}, - {0xD50F, 0xC04F},{0xD510, 0xC050},{0xD511, 0xC051},{0xD512, 0xC052},{0xD513, 0xC053},{0xD514, 0xC7C4},{0xD515, 0xC7C5},{0xD516, 0xC054}, - {0xD517, 0xC7C6},{0xD518, 0xC055},{0xD519, 0xC056},{0xD51A, 0xC057},{0xD51B, 0xC058},{0xD51C, 0xC059},{0xD51D, 0xC05A},{0xD51E, 0xC061}, - {0xD51F, 0xC062},{0xD520, 0xC063},{0xD521, 0xC064},{0xD522, 0xC065},{0xD523, 0xC066},{0xD524, 0xC067},{0xD525, 0xC068},{0xD526, 0xC069}, - {0xD527, 0xC06A},{0xD528, 0xC06B},{0xD529, 0xC06C},{0xD52A, 0xC06D},{0xD52B, 0xC06E},{0xD52C, 0xC06F},{0xD52D, 0xC070},{0xD52E, 0xC071}, - {0xD52F, 0xC072},{0xD530, 0xC073},{0xD531, 0xC074},{0xD532, 0xC075},{0xD533, 0xC076},{0xD534, 0xC077},{0xD535, 0xC078},{0xD536, 0xC079}, - {0xD537, 0xC07A},{0xD538, 0xC081},{0xD539, 0xC082},{0xD53A, 0xC083},{0xD53B, 0xC084},{0xD53C, 0xC7C7},{0xD53D, 0xC7C8},{0xD53E, 0xC085}, - {0xD53F, 0xC086},{0xD540, 0xC7C9},{0xD541, 0xC087},{0xD542, 0xC088},{0xD543, 0xC089},{0xD544, 0xC7CA},{0xD545, 0xC08A},{0xD546, 0xC08B}, - {0xD547, 0xC08C},{0xD548, 0xC08D},{0xD549, 0xC08E},{0xD54A, 0xC08F},{0xD54B, 0xC090},{0xD54C, 0xC7CB},{0xD54D, 0xC7CC},{0xD54E, 0xC091}, - {0xD54F, 0xC7CD},{0xD550, 0xC092},{0xD551, 0xC7CE},{0xD552, 0xC093},{0xD553, 0xC094},{0xD554, 0xC095},{0xD555, 0xC096},{0xD556, 0xC097}, - {0xD557, 0xC098},{0xD558, 0xC7CF},{0xD559, 0xC7D0},{0xD55A, 0xC099},{0xD55B, 0xC09A},{0xD55C, 0xC7D1},{0xD55D, 0xC09B},{0xD55E, 0xC09C}, - {0xD55F, 0xC09D},{0xD560, 0xC7D2},{0xD561, 0xC09E},{0xD562, 0xC09F},{0xD563, 0xC0A0},{0xD564, 0xC141},{0xD565, 0xC7D3},{0xD566, 0xC142}, - {0xD567, 0xC143},{0xD568, 0xC7D4},{0xD569, 0xC7D5},{0xD56A, 0xC144},{0xD56B, 0xC7D6},{0xD56C, 0xC145},{0xD56D, 0xC7D7},{0xD56E, 0xC146}, - {0xD56F, 0xC147},{0xD570, 0xC148},{0xD571, 0xC149},{0xD572, 0xC14A},{0xD573, 0xC14B},{0xD574, 0xC7D8},{0xD575, 0xC7D9},{0xD576, 0xC14C}, - {0xD577, 0xC14D},{0xD578, 0xC7DA},{0xD579, 0xC14E},{0xD57A, 0xC14F},{0xD57B, 0xC150},{0xD57C, 0xC7DB},{0xD57D, 0xC151},{0xD57E, 0xC152}, - {0xD57F, 0xC153},{0xD580, 0xC154},{0xD581, 0xC155},{0xD582, 0xC156},{0xD583, 0xC157},{0xD584, 0xC7DC},{0xD585, 0xC7DD},{0xD586, 0xC158}, - {0xD587, 0xC7DE},{0xD588, 0xC7DF},{0xD589, 0xC7E0},{0xD58A, 0xC159},{0xD58B, 0xC15A},{0xD58C, 0xC161},{0xD58D, 0xC162},{0xD58E, 0xC163}, - {0xD58F, 0xC164},{0xD590, 0xC7E1},{0xD591, 0xC165},{0xD592, 0xC166},{0xD593, 0xC167},{0xD594, 0xC168},{0xD595, 0xC169},{0xD596, 0xC16A}, - {0xD597, 0xC16B},{0xD598, 0xC16C},{0xD599, 0xC16D},{0xD59A, 0xC16E},{0xD59B, 0xC16F},{0xD59C, 0xC170},{0xD59D, 0xC171},{0xD59E, 0xC172}, - {0xD59F, 0xC173},{0xD5A0, 0xC174},{0xD5A1, 0xC175},{0xD5A2, 0xC176},{0xD5A3, 0xC177},{0xD5A4, 0xC178},{0xD5A5, 0xC7E2},{0xD5A6, 0xC179}, - {0xD5A7, 0xC17A},{0xD5A8, 0xC181},{0xD5A9, 0xC182},{0xD5AA, 0xC183},{0xD5AB, 0xC184},{0xD5AC, 0xC185},{0xD5AD, 0xC186},{0xD5AE, 0xC187}, - {0xD5AF, 0xC188},{0xD5B0, 0xC189},{0xD5B1, 0xC18A},{0xD5B2, 0xC18B},{0xD5B3, 0xC18C},{0xD5B4, 0xC18D},{0xD5B5, 0xC18E},{0xD5B6, 0xC18F}, - {0xD5B7, 0xC190},{0xD5B8, 0xC191},{0xD5B9, 0xC192},{0xD5BA, 0xC193},{0xD5BB, 0xC194},{0xD5BC, 0xC195},{0xD5BD, 0xC196},{0xD5BE, 0xC197}, - {0xD5BF, 0xC198},{0xD5C0, 0xC199},{0xD5C1, 0xC19A},{0xD5C2, 0xC19B},{0xD5C3, 0xC19C},{0xD5C4, 0xC19D},{0xD5C5, 0xC19E},{0xD5C6, 0xC19F}, - {0xD5C7, 0xC1A0},{0xD5C8, 0xC7E3},{0xD5C9, 0xC7E4},{0xD5CA, 0xC241},{0xD5CB, 0xC242},{0xD5CC, 0xC7E5},{0xD5CD, 0xC243},{0xD5CE, 0xC244}, - {0xD5CF, 0xC245},{0xD5D0, 0xC7E6},{0xD5D1, 0xC246},{0xD5D2, 0xC7E7},{0xD5D3, 0xC247},{0xD5D4, 0xC248},{0xD5D5, 0xC249},{0xD5D6, 0xC24A}, - {0xD5D7, 0xC24B},{0xD5D8, 0xC7E8},{0xD5D9, 0xC7E9},{0xD5DA, 0xC24C},{0xD5DB, 0xC7EA},{0xD5DC, 0xC24D},{0xD5DD, 0xC7EB},{0xD5DE, 0xC24E}, - {0xD5DF, 0xC24F},{0xD5E0, 0xC250},{0xD5E1, 0xC251},{0xD5E2, 0xC252},{0xD5E3, 0xC253},{0xD5E4, 0xC7EC},{0xD5E5, 0xC7ED},{0xD5E6, 0xC254}, - {0xD5E7, 0xC255},{0xD5E8, 0xC7EE},{0xD5E9, 0xC256},{0xD5EA, 0xC257},{0xD5EB, 0xC258},{0xD5EC, 0xC7EF},{0xD5ED, 0xC259},{0xD5EE, 0xC25A}, - {0xD5EF, 0xC261},{0xD5F0, 0xC262},{0xD5F1, 0xC263},{0xD5F2, 0xC264},{0xD5F3, 0xC265},{0xD5F4, 0xC7F0},{0xD5F5, 0xC7F1},{0xD5F6, 0xC266}, - {0xD5F7, 0xC7F2},{0xD5F8, 0xC267},{0xD5F9, 0xC7F3},{0xD5FA, 0xC268},{0xD5FB, 0xC269},{0xD5FC, 0xC26A},{0xD5FD, 0xC26B},{0xD5FE, 0xC26C}, - {0xD5FF, 0xC26D},{0xD600, 0xC7F4},{0xD601, 0xC7F5},{0xD602, 0xC26E},{0xD603, 0xC26F},{0xD604, 0xC7F6},{0xD605, 0xC270},{0xD606, 0xC271}, - {0xD607, 0xC272},{0xD608, 0xC7F7},{0xD609, 0xC273},{0xD60A, 0xC274},{0xD60B, 0xC275},{0xD60C, 0xC276},{0xD60D, 0xC277},{0xD60E, 0xC278}, - {0xD60F, 0xC279},{0xD610, 0xC7F8},{0xD611, 0xC7F9},{0xD612, 0xC27A},{0xD613, 0xC7FA},{0xD614, 0xC7FB},{0xD615, 0xC7FC},{0xD616, 0xC281}, - {0xD617, 0xC282},{0xD618, 0xC283},{0xD619, 0xC284},{0xD61A, 0xC285},{0xD61B, 0xC286},{0xD61C, 0xC7FD},{0xD61D, 0xC287},{0xD61E, 0xC288}, - {0xD61F, 0xC289},{0xD620, 0xC7FE},{0xD621, 0xC28A},{0xD622, 0xC28B},{0xD623, 0xC28C},{0xD624, 0xC8A1},{0xD625, 0xC28D},{0xD626, 0xC28E}, - {0xD627, 0xC28F},{0xD628, 0xC290},{0xD629, 0xC291},{0xD62A, 0xC292},{0xD62B, 0xC293},{0xD62C, 0xC294},{0xD62D, 0xC8A2},{0xD62E, 0xC295}, - {0xD62F, 0xC296},{0xD630, 0xC297},{0xD631, 0xC298},{0xD632, 0xC299},{0xD633, 0xC29A},{0xD634, 0xC29B},{0xD635, 0xC29C},{0xD636, 0xC29D}, - {0xD637, 0xC29E},{0xD638, 0xC8A3},{0xD639, 0xC8A4},{0xD63A, 0xC29F},{0xD63B, 0xC2A0},{0xD63C, 0xC8A5},{0xD63D, 0xC341},{0xD63E, 0xC342}, - {0xD63F, 0xC343},{0xD640, 0xC8A6},{0xD641, 0xC344},{0xD642, 0xC345},{0xD643, 0xC346},{0xD644, 0xC347},{0xD645, 0xC8A7},{0xD646, 0xC348}, - {0xD647, 0xC349},{0xD648, 0xC8A8},{0xD649, 0xC8A9},{0xD64A, 0xC34A},{0xD64B, 0xC8AA},{0xD64C, 0xC34B},{0xD64D, 0xC8AB},{0xD64E, 0xC34C}, - {0xD64F, 0xC34D},{0xD650, 0xC34E},{0xD651, 0xC8AC},{0xD652, 0xC34F},{0xD653, 0xC350},{0xD654, 0xC8AD},{0xD655, 0xC8AE},{0xD656, 0xC351}, - {0xD657, 0xC352},{0xD658, 0xC8AF},{0xD659, 0xC353},{0xD65A, 0xC354},{0xD65B, 0xC355},{0xD65C, 0xC8B0},{0xD65D, 0xC356},{0xD65E, 0xC357}, - {0xD65F, 0xC358},{0xD660, 0xC359},{0xD661, 0xC35A},{0xD662, 0xC361},{0xD663, 0xC362},{0xD664, 0xC363},{0xD665, 0xC364},{0xD666, 0xC365}, - {0xD667, 0xC8B1},{0xD668, 0xC366},{0xD669, 0xC8B2},{0xD66A, 0xC367},{0xD66B, 0xC368},{0xD66C, 0xC369},{0xD66D, 0xC36A},{0xD66E, 0xC36B}, - {0xD66F, 0xC36C},{0xD670, 0xC8B3},{0xD671, 0xC8B4},{0xD672, 0xC36D},{0xD673, 0xC36E},{0xD674, 0xC8B5},{0xD675, 0xC36F},{0xD676, 0xC370}, - {0xD677, 0xC371},{0xD678, 0xC372},{0xD679, 0xC373},{0xD67A, 0xC374},{0xD67B, 0xC375},{0xD67C, 0xC376},{0xD67D, 0xC377},{0xD67E, 0xC378}, - {0xD67F, 0xC379},{0xD680, 0xC37A},{0xD681, 0xC381},{0xD682, 0xC382},{0xD683, 0xC8B6},{0xD684, 0xC383},{0xD685, 0xC8B7},{0xD686, 0xC384}, - {0xD687, 0xC385},{0xD688, 0xC386},{0xD689, 0xC387},{0xD68A, 0xC388},{0xD68B, 0xC389},{0xD68C, 0xC8B8},{0xD68D, 0xC8B9},{0xD68E, 0xC38A}, - {0xD68F, 0xC38B},{0xD690, 0xC8BA},{0xD691, 0xC38C},{0xD692, 0xC38D},{0xD693, 0xC38E},{0xD694, 0xC8BB},{0xD695, 0xC38F},{0xD696, 0xC390}, - {0xD697, 0xC391},{0xD698, 0xC392},{0xD699, 0xC393},{0xD69A, 0xC394},{0xD69B, 0xC395},{0xD69C, 0xC396},{0xD69D, 0xC8BC},{0xD69E, 0xC397}, - {0xD69F, 0xC8BD},{0xD6A0, 0xC398},{0xD6A1, 0xC8BE},{0xD6A2, 0xC399},{0xD6A3, 0xC39A},{0xD6A4, 0xC39B},{0xD6A5, 0xC39C},{0xD6A6, 0xC39D}, - {0xD6A7, 0xC39E},{0xD6A8, 0xC8BF},{0xD6A9, 0xC39F},{0xD6AA, 0xC3A0},{0xD6AB, 0xC441},{0xD6AC, 0xC8C0},{0xD6AD, 0xC442},{0xD6AE, 0xC443}, - {0xD6AF, 0xC444},{0xD6B0, 0xC8C1},{0xD6B1, 0xC445},{0xD6B2, 0xC446},{0xD6B3, 0xC447},{0xD6B4, 0xC448},{0xD6B5, 0xC449},{0xD6B6, 0xC44A}, - {0xD6B7, 0xC44B},{0xD6B8, 0xC44C},{0xD6B9, 0xC8C2},{0xD6BA, 0xC44D},{0xD6BB, 0xC8C3},{0xD6BC, 0xC44E},{0xD6BD, 0xC44F},{0xD6BE, 0xC450}, - {0xD6BF, 0xC451},{0xD6C0, 0xC452},{0xD6C1, 0xC453},{0xD6C2, 0xC454},{0xD6C3, 0xC455},{0xD6C4, 0xC8C4},{0xD6C5, 0xC8C5},{0xD6C6, 0xC456}, - {0xD6C7, 0xC457},{0xD6C8, 0xC8C6},{0xD6C9, 0xC458},{0xD6CA, 0xC459},{0xD6CB, 0xC45A},{0xD6CC, 0xC8C7},{0xD6CD, 0xC461},{0xD6CE, 0xC462}, - {0xD6CF, 0xC463},{0xD6D0, 0xC464},{0xD6D1, 0xC8C8},{0xD6D2, 0xC465},{0xD6D3, 0xC466},{0xD6D4, 0xC8C9},{0xD6D5, 0xC467},{0xD6D6, 0xC468}, - {0xD6D7, 0xC8CA},{0xD6D8, 0xC469},{0xD6D9, 0xC8CB},{0xD6DA, 0xC46A},{0xD6DB, 0xC46B},{0xD6DC, 0xC46C},{0xD6DD, 0xC46D},{0xD6DE, 0xC46E}, - {0xD6DF, 0xC46F},{0xD6E0, 0xC8CC},{0xD6E1, 0xC470},{0xD6E2, 0xC471},{0xD6E3, 0xC472},{0xD6E4, 0xC8CD},{0xD6E5, 0xC473},{0xD6E6, 0xC474}, - {0xD6E7, 0xC475},{0xD6E8, 0xC8CE},{0xD6E9, 0xC476},{0xD6EA, 0xC477},{0xD6EB, 0xC478},{0xD6EC, 0xC479},{0xD6ED, 0xC47A},{0xD6EE, 0xC481}, - {0xD6EF, 0xC482},{0xD6F0, 0xC8CF},{0xD6F1, 0xC483},{0xD6F2, 0xC484},{0xD6F3, 0xC485},{0xD6F4, 0xC486},{0xD6F5, 0xC8D0},{0xD6F6, 0xC487}, - {0xD6F7, 0xC488},{0xD6F8, 0xC489},{0xD6F9, 0xC48A},{0xD6FA, 0xC48B},{0xD6FB, 0xC48C},{0xD6FC, 0xC8D1},{0xD6FD, 0xC8D2},{0xD6FE, 0xC48D}, - {0xD6FF, 0xC48E},{0xD700, 0xC8D3},{0xD701, 0xC48F},{0xD702, 0xC490},{0xD703, 0xC491},{0xD704, 0xC8D4},{0xD705, 0xC492},{0xD706, 0xC493}, - {0xD707, 0xC494},{0xD708, 0xC495},{0xD709, 0xC496},{0xD70A, 0xC497},{0xD70B, 0xC498},{0xD70C, 0xC499},{0xD70D, 0xC49A},{0xD70E, 0xC49B}, - {0xD70F, 0xC49C},{0xD710, 0xC49D},{0xD711, 0xC8D5},{0xD712, 0xC49E},{0xD713, 0xC49F},{0xD714, 0xC4A0},{0xD715, 0xC541},{0xD716, 0xC542}, - {0xD717, 0xC543},{0xD718, 0xC8D6},{0xD719, 0xC8D7},{0xD71A, 0xC544},{0xD71B, 0xC545},{0xD71C, 0xC8D8},{0xD71D, 0xC546},{0xD71E, 0xC547}, - {0xD71F, 0xC548},{0xD720, 0xC8D9},{0xD721, 0xC549},{0xD722, 0xC54A},{0xD723, 0xC54B},{0xD724, 0xC54C},{0xD725, 0xC54D},{0xD726, 0xC54E}, - {0xD727, 0xC54F},{0xD728, 0xC8DA},{0xD729, 0xC8DB},{0xD72A, 0xC550},{0xD72B, 0xC8DC},{0xD72C, 0xC551},{0xD72D, 0xC8DD},{0xD72E, 0xC552}, - {0xD72F, 0xC553},{0xD730, 0xC554},{0xD731, 0xC555},{0xD732, 0xC556},{0xD733, 0xC557},{0xD734, 0xC8DE},{0xD735, 0xC8DF},{0xD736, 0xC558}, - {0xD737, 0xC559},{0xD738, 0xC8E0},{0xD739, 0xC55A},{0xD73A, 0xC561},{0xD73B, 0xC562},{0xD73C, 0xC8E1},{0xD73D, 0xC563},{0xD73E, 0xC564}, - {0xD73F, 0xC565},{0xD740, 0xC566},{0xD741, 0xC567},{0xD742, 0xC568},{0xD743, 0xC569},{0xD744, 0xC8E2},{0xD745, 0xC56A},{0xD746, 0xC56B}, - {0xD747, 0xC8E3},{0xD748, 0xC56C},{0xD749, 0xC8E4},{0xD74A, 0xC56D},{0xD74B, 0xC56E},{0xD74C, 0xC56F},{0xD74D, 0xC570},{0xD74E, 0xC571}, - {0xD74F, 0xC572},{0xD750, 0xC8E5},{0xD751, 0xC8E6},{0xD752, 0xC573},{0xD753, 0xC574},{0xD754, 0xC8E7},{0xD755, 0xC575},{0xD756, 0xC8E8}, - {0xD757, 0xC8E9},{0xD758, 0xC8EA},{0xD759, 0xC8EB},{0xD75A, 0xC576},{0xD75B, 0xC577},{0xD75C, 0xC578},{0xD75D, 0xC579},{0xD75E, 0xC57A}, - {0xD75F, 0xC581},{0xD760, 0xC8EC},{0xD761, 0xC8ED},{0xD762, 0xC582},{0xD763, 0xC8EE},{0xD764, 0xC583},{0xD765, 0xC8EF},{0xD766, 0xC584}, - {0xD767, 0xC585},{0xD768, 0xC586},{0xD769, 0xC8F0},{0xD76A, 0xC587},{0xD76B, 0xC588},{0xD76C, 0xC8F1},{0xD76D, 0xC589},{0xD76E, 0xC58A}, - {0xD76F, 0xC58B},{0xD770, 0xC8F2},{0xD771, 0xC58C},{0xD772, 0xC58D},{0xD773, 0xC58E},{0xD774, 0xC8F3},{0xD775, 0xC58F},{0xD776, 0xC590}, - {0xD777, 0xC591},{0xD778, 0xC592},{0xD779, 0xC593},{0xD77A, 0xC594},{0xD77B, 0xC595},{0xD77C, 0xC8F4},{0xD77D, 0xC8F5},{0xD77E, 0xC596}, - {0xD77F, 0xC597},{0xD780, 0xC598},{0xD781, 0xC8F6},{0xD782, 0xC599},{0xD783, 0xC59A},{0xD784, 0xC59B},{0xD785, 0xC59C},{0xD786, 0xC59D}, - {0xD787, 0xC59E},{0xD788, 0xC8F7},{0xD789, 0xC8F8},{0xD78A, 0xC59F},{0xD78B, 0xC5A0},{0xD78C, 0xC8F9},{0xD78D, 0xC641},{0xD78E, 0xC642}, - {0xD78F, 0xC643},{0xD790, 0xC8FA},{0xD791, 0xC644},{0xD792, 0xC645},{0xD793, 0xC646},{0xD794, 0xC647},{0xD795, 0xC648},{0xD796, 0xC649}, - {0xD797, 0xC64A},{0xD798, 0xC8FB},{0xD799, 0xC8FC},{0xD79A, 0xC64B},{0xD79B, 0xC8FD},{0xD79C, 0xC64C},{0xD79D, 0xC8FE},{0xD79E, 0xC64D}, - {0xD79F, 0xC64E},{0xD7A0, 0xC64F},{0xD7A1, 0xC650},{0xD7A2, 0xC651},{0xD7A3, 0xC652},{0xF900, 0xCBD0},{0xF901, 0xCBD6},{0xF902, 0xCBE7}, - {0xF903, 0xCDCF},{0xF904, 0xCDE8},{0xF905, 0xCEAD},{0xF906, 0xCFFB},{0xF907, 0xD0A2},{0xF908, 0xD0B8},{0xF909, 0xD0D0},{0xF90A, 0xD0DD}, - {0xF90B, 0xD1D4},{0xF90C, 0xD1D5},{0xF90D, 0xD1D8},{0xF90E, 0xD1DB},{0xF90F, 0xD1DC},{0xF910, 0xD1DD},{0xF911, 0xD1DE},{0xF912, 0xD1DF}, - {0xF913, 0xD1E0},{0xF914, 0xD1E2},{0xF915, 0xD1E3},{0xF916, 0xD1E4},{0xF917, 0xD1E5},{0xF918, 0xD1E6},{0xF919, 0xD1E8},{0xF91A, 0xD1E9}, - {0xF91B, 0xD1EA},{0xF91C, 0xD1EB},{0xF91D, 0xD1ED},{0xF91E, 0xD1EF},{0xF91F, 0xD1F0},{0xF920, 0xD1F2},{0xF921, 0xD1F6},{0xF922, 0xD1FA}, - {0xF923, 0xD1FC},{0xF924, 0xD1FD},{0xF925, 0xD1FE},{0xF926, 0xD2A2},{0xF927, 0xD2A3},{0xF928, 0xD2A7},{0xF929, 0xD2A8},{0xF92A, 0xD2A9}, - {0xF92B, 0xD2AA},{0xF92C, 0xD2AB},{0xF92D, 0xD2AD},{0xF92E, 0xD2B2},{0xF92F, 0xD2BE},{0xF930, 0xD2C2},{0xF931, 0xD2C3},{0xF932, 0xD2C4}, - {0xF933, 0xD2C6},{0xF934, 0xD2C7},{0xF935, 0xD2C8},{0xF936, 0xD2C9},{0xF937, 0xD2CA},{0xF938, 0xD2CB},{0xF939, 0xD2CD},{0xF93A, 0xD2CE}, - {0xF93B, 0xD2CF},{0xF93C, 0xD2D0},{0xF93D, 0xD2D1},{0xF93E, 0xD2D2},{0xF93F, 0xD2D3},{0xF940, 0xD2D4},{0xF941, 0xD2D5},{0xF942, 0xD2D6}, - {0xF943, 0xD2D7},{0xF944, 0xD2D9},{0xF945, 0xD2DA},{0xF946, 0xD2DE},{0xF947, 0xD2DF},{0xF948, 0xD2E1},{0xF949, 0xD2E2},{0xF94A, 0xD2E4}, - {0xF94B, 0xD2E5},{0xF94C, 0xD2E6},{0xF94D, 0xD2E7},{0xF94E, 0xD2E8},{0xF94F, 0xD2E9},{0xF950, 0xD2EA},{0xF951, 0xD2EB},{0xF952, 0xD2F0}, - {0xF953, 0xD2F1},{0xF954, 0xD2F2},{0xF955, 0xD2F3},{0xF956, 0xD2F4},{0xF957, 0xD2F5},{0xF958, 0xD2F7},{0xF959, 0xD2F8},{0xF95A, 0xD4E6}, - {0xF95B, 0xD4FC},{0xF95C, 0xD5A5},{0xF95D, 0xD5AB},{0xF95E, 0xD5AE},{0xF95F, 0xD6B8},{0xF960, 0xD6CD},{0xF961, 0xD7CB},{0xF962, 0xD7E4}, - {0xF963, 0xDBC5},{0xF964, 0xDBE4},{0xF965, 0xDCA5},{0xF966, 0xDDA5},{0xF967, 0xDDD5},{0xF968, 0xDDF4},{0xF969, 0xDEFC},{0xF96A, 0xDEFE}, - {0xF96B, 0xDFB3},{0xF96C, 0xDFE1},{0xF96D, 0xDFE8},{0xF96E, 0xE0F1},{0xF96F, 0xE1AD},{0xF970, 0xE1ED},{0xF971, 0xE3F5},{0xF972, 0xE4A1}, - {0xF973, 0xE4A9},{0xF974, 0xE5AE},{0xF975, 0xE5B1},{0xF976, 0xE5B2},{0xF977, 0xE5B9},{0xF978, 0xE5BB},{0xF979, 0xE5BC},{0xF97A, 0xE5C4}, - {0xF97B, 0xE5CE},{0xF97C, 0xE5D0},{0xF97D, 0xE5D2},{0xF97E, 0xE5D6},{0xF97F, 0xE5FA},{0xF980, 0xE5FB},{0xF981, 0xE5FC},{0xF982, 0xE5FE}, - {0xF983, 0xE6A1},{0xF984, 0xE6A4},{0xF985, 0xE6A7},{0xF986, 0xE6AD},{0xF987, 0xE6AF},{0xF988, 0xE6B0},{0xF989, 0xE6B1},{0xF98A, 0xE6B3}, - {0xF98B, 0xE6B7},{0xF98C, 0xE6B8},{0xF98D, 0xE6BC},{0xF98E, 0xE6C4},{0xF98F, 0xE6C6},{0xF990, 0xE6C7},{0xF991, 0xE6CA},{0xF992, 0xE6D2}, - {0xF993, 0xE6D6},{0xF994, 0xE6D9},{0xF995, 0xE6DC},{0xF996, 0xE6DF},{0xF997, 0xE6E1},{0xF998, 0xE6E4},{0xF999, 0xE6E5},{0xF99A, 0xE6E6}, - {0xF99B, 0xE6E8},{0xF99C, 0xE6EA},{0xF99D, 0xE6EB},{0xF99E, 0xE6EC},{0xF99F, 0xE6EF},{0xF9A0, 0xE6F1},{0xF9A1, 0xE6F2},{0xF9A2, 0xE6F5}, - {0xF9A3, 0xE6F6},{0xF9A4, 0xE6F7},{0xF9A5, 0xE6F9},{0xF9A6, 0xE7A1},{0xF9A7, 0xE7A6},{0xF9A8, 0xE7A9},{0xF9A9, 0xE7AA},{0xF9AA, 0xE7AC}, - {0xF9AB, 0xE7AD},{0xF9AC, 0xE7B0},{0xF9AD, 0xE7BF},{0xF9AE, 0xE7C1},{0xF9AF, 0xE7C6},{0xF9B0, 0xE7C7},{0xF9B1, 0xE7CB},{0xF9B2, 0xE7CD}, - {0xF9B3, 0xE7CF},{0xF9B4, 0xE7D0},{0xF9B5, 0xE7D3},{0xF9B6, 0xE7DF},{0xF9B7, 0xE7E4},{0xF9B8, 0xE7E6},{0xF9B9, 0xE7F7},{0xF9BA, 0xE8E7}, - {0xF9BB, 0xE8E8},{0xF9BC, 0xE8F0},{0xF9BD, 0xE8F1},{0xF9BE, 0xE8F7},{0xF9BF, 0xE8F9},{0xF9C0, 0xE8FB},{0xF9C1, 0xE8FE},{0xF9C2, 0xE9A7}, - {0xF9C3, 0xE9AC},{0xF9C4, 0xE9CC},{0xF9C5, 0xE9F7},{0xF9C6, 0xEAC1},{0xF9C7, 0xEAE5},{0xF9C8, 0xEAF4},{0xF9C9, 0xEAF7},{0xF9CA, 0xEAFC}, - {0xF9CB, 0xEAFE},{0xF9CC, 0xEBA4},{0xF9CD, 0xEBA7},{0xF9CE, 0xEBA9},{0xF9CF, 0xEBAA},{0xF9D0, 0xEBBA},{0xF9D1, 0xEBBB},{0xF9D2, 0xEBBD}, - {0xF9D3, 0xEBC1},{0xF9D4, 0xEBC2},{0xF9D5, 0xEBC6},{0xF9D6, 0xEBC7},{0xF9D7, 0xEBCC},{0xF9D8, 0xEBCF},{0xF9D9, 0xEBD0},{0xF9DA, 0xEBD1}, - {0xF9DB, 0xEBD2},{0xF9DC, 0xEBD8},{0xF9DD, 0xECA6},{0xF9DE, 0xECA7},{0xF9DF, 0xECAA},{0xF9E0, 0xECAF},{0xF9E1, 0xECB0},{0xF9E2, 0xECB1}, - {0xF9E3, 0xECB2},{0xF9E4, 0xECB5},{0xF9E5, 0xECB8},{0xF9E6, 0xECBA},{0xF9E7, 0xECC0},{0xF9E8, 0xECC1},{0xF9E9, 0xECC5},{0xF9EA, 0xECC6}, - {0xF9EB, 0xECC9},{0xF9EC, 0xECCA},{0xF9ED, 0xECD5},{0xF9EE, 0xECDD},{0xF9EF, 0xECDE},{0xF9F0, 0xECE1},{0xF9F1, 0xECE4},{0xF9F2, 0xECE7}, - {0xF9F3, 0xECE8},{0xF9F4, 0xECF7},{0xF9F5, 0xECF8},{0xF9F6, 0xECFA},{0xF9F7, 0xEDA1},{0xF9F8, 0xEDA2},{0xF9F9, 0xEDA3},{0xF9FA, 0xEDEE}, - {0xF9FB, 0xEEDB},{0xF9FC, 0xF2BD},{0xF9FD, 0xF2FA},{0xF9FE, 0xF3B1},{0xF9FF, 0xF4A7},{0xFA00, 0xF4EE},{0xFA01, 0xF6F4},{0xFA02, 0xF6F6}, - {0xFA03, 0xF7B8},{0xFA04, 0xF7C8},{0xFA05, 0xF7D3},{0xFA06, 0xF8DB},{0xFA07, 0xF8F0},{0xFA08, 0xFAA1},{0xFA09, 0xFAA2},{0xFA0A, 0xFAE6}, - {0xFA0B, 0xFCA9},{0xFF01, 0xA3A1},{0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA3A4},{0xFF05, 0xA3A5},{0xFF06, 0xA3A6},{0xFF07, 0xA3A7}, - {0xFF08, 0xA3A8},{0xFF09, 0xA3A9},{0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD},{0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF}, - {0xFF10, 0xA3B0},{0xFF11, 0xA3B1},{0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5},{0xFF16, 0xA3B6},{0xFF17, 0xA3B7}, - {0xFF18, 0xA3B8},{0xFF19, 0xA3B9},{0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD},{0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF}, - {0xFF20, 0xA3C0},{0xFF21, 0xA3C1},{0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5},{0xFF26, 0xA3C6},{0xFF27, 0xA3C7}, - {0xFF28, 0xA3C8},{0xFF29, 0xA3C9},{0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD},{0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF}, - {0xFF30, 0xA3D0},{0xFF31, 0xA3D1},{0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5},{0xFF36, 0xA3D6},{0xFF37, 0xA3D7}, - {0xFF38, 0xA3D8},{0xFF39, 0xA3D9},{0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA1AC},{0xFF3D, 0xA3DD},{0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF}, - {0xFF40, 0xA3E0},{0xFF41, 0xA3E1},{0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5},{0xFF46, 0xA3E6},{0xFF47, 0xA3E7}, - {0xFF48, 0xA3E8},{0xFF49, 0xA3E9},{0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED},{0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF}, - {0xFF50, 0xA3F0},{0xFF51, 0xA3F1},{0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5},{0xFF56, 0xA3F6},{0xFF57, 0xA3F7}, - {0xFF58, 0xA3F8},{0xFF59, 0xA3F9},{0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD},{0xFF5E, 0xA2A6},{0xFFE0, 0xA1CB}, - {0xFFE1, 0xA1CC},{0xFFE2, 0xA1FE},{0xFFE3, 0xA3FE},{0xFFE5, 0xA1CD},{0xFFE6, 0xA3DC} -}; diff --git a/vcl/source/fontsubset/u2prc.inc b/vcl/source/fontsubset/u2prc.inc deleted file mode 100644 index 445461b59653..000000000000 --- a/vcl/source/fontsubset/u2prc.inc +++ /dev/null @@ -1,3036 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// use generic RTL_TEXTENCODING_ to get rid of this file - -sal_uInt16pair xlat_1_4[24035] = { - {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027}, - {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F}, - {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037}, - {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F}, - {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047}, - {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F}, - {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057}, - {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F}, - {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067}, - {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F}, - {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077}, - {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A4, 0xA1E8}, - {0x00A7, 0xA1EC},{0x00A8, 0xA1A7},{0x00B0, 0xA1E3},{0x00B1, 0xA1C0},{0x00B7, 0xA1A4},{0x00D7, 0xA1C1},{0x00E0, 0xA8A4},{0x00E1, 0xA8A2}, - {0x00E8, 0xA8A8},{0x00E9, 0xA8A6},{0x00EA, 0xA8BA},{0x00EC, 0xA8AC},{0x00ED, 0xA8AA},{0x00F2, 0xA8B0},{0x00F3, 0xA8AE},{0x00F7, 0xA1C2}, - {0x00F9, 0xA8B4},{0x00FA, 0xA8B2},{0x00FC, 0xA8B9},{0x0101, 0xA8A1},{0x0113, 0xA8A5},{0x011B, 0xA8A7},{0x012B, 0xA8A9},{0x0144, 0xA8BD}, - {0x0148, 0xA8BE},{0x014D, 0xA8AD},{0x016B, 0xA8B1},{0x01CE, 0xA8A3},{0x01D0, 0xA8AB},{0x01D2, 0xA8AF},{0x01D4, 0xA8B3},{0x01D6, 0xA8B5}, - {0x01D8, 0xA8B6},{0x01DA, 0xA8B7},{0x01DC, 0xA8B8},{0x0251, 0xA8BB},{0x0261, 0xA8C0},{0x02C7, 0xA1A6},{0x02C9, 0xA1A5},{0x02CA, 0xA840}, - {0x02CB, 0xA841},{0x02D9, 0xA842},{0x0391, 0xA6A1},{0x0392, 0xA6A2},{0x0393, 0xA6A3},{0x0394, 0xA6A4},{0x0395, 0xA6A5},{0x0396, 0xA6A6}, - {0x0397, 0xA6A7},{0x0398, 0xA6A8},{0x0399, 0xA6A9},{0x039A, 0xA6AA},{0x039B, 0xA6AB},{0x039C, 0xA6AC},{0x039D, 0xA6AD},{0x039E, 0xA6AE}, - {0x039F, 0xA6AF},{0x03A0, 0xA6B0},{0x03A1, 0xA6B1},{0x03A3, 0xA6B2},{0x03A4, 0xA6B3},{0x03A5, 0xA6B4},{0x03A6, 0xA6B5},{0x03A7, 0xA6B6}, - {0x03A8, 0xA6B7},{0x03A9, 0xA6B8},{0x03B1, 0xA6C1},{0x03B2, 0xA6C2},{0x03B3, 0xA6C3},{0x03B4, 0xA6C4},{0x03B5, 0xA6C5},{0x03B6, 0xA6C6}, - {0x03B7, 0xA6C7},{0x03B8, 0xA6C8},{0x03B9, 0xA6C9},{0x03BA, 0xA6CA},{0x03BB, 0xA6CB},{0x03BC, 0xA6CC},{0x03BD, 0xA6CD},{0x03BE, 0xA6CE}, - {0x03BF, 0xA6CF},{0x03C0, 0xA6D0},{0x03C1, 0xA6D1},{0x03C3, 0xA6D2},{0x03C4, 0xA6D3},{0x03C5, 0xA6D4},{0x03C6, 0xA6D5},{0x03C7, 0xA6D6}, - {0x03C8, 0xA6D7},{0x03C9, 0xA6D8},{0x0401, 0xA7A7},{0x0410, 0xA7A1},{0x0411, 0xA7A2},{0x0412, 0xA7A3},{0x0413, 0xA7A4},{0x0414, 0xA7A5}, - {0x0415, 0xA7A6},{0x0416, 0xA7A8},{0x0417, 0xA7A9},{0x0418, 0xA7AA},{0x0419, 0xA7AB},{0x041A, 0xA7AC},{0x041B, 0xA7AD},{0x041C, 0xA7AE}, - {0x041D, 0xA7AF},{0x041E, 0xA7B0},{0x041F, 0xA7B1},{0x0420, 0xA7B2},{0x0421, 0xA7B3},{0x0422, 0xA7B4},{0x0423, 0xA7B5},{0x0424, 0xA7B6}, - {0x0425, 0xA7B7},{0x0426, 0xA7B8},{0x0427, 0xA7B9},{0x0428, 0xA7BA},{0x0429, 0xA7BB},{0x042A, 0xA7BC},{0x042B, 0xA7BD},{0x042C, 0xA7BE}, - {0x042D, 0xA7BF},{0x042E, 0xA7C0},{0x042F, 0xA7C1},{0x0430, 0xA7D1},{0x0431, 0xA7D2},{0x0432, 0xA7D3},{0x0433, 0xA7D4},{0x0434, 0xA7D5}, - {0x0435, 0xA7D6},{0x0436, 0xA7D8},{0x0437, 0xA7D9},{0x0438, 0xA7DA},{0x0439, 0xA7DB},{0x043A, 0xA7DC},{0x043B, 0xA7DD},{0x043C, 0xA7DE}, - {0x043D, 0xA7DF},{0x043E, 0xA7E0},{0x043F, 0xA7E1},{0x0440, 0xA7E2},{0x0441, 0xA7E3},{0x0442, 0xA7E4},{0x0443, 0xA7E5},{0x0444, 0xA7E6}, - {0x0445, 0xA7E7},{0x0446, 0xA7E8},{0x0447, 0xA7E9},{0x0448, 0xA7EA},{0x0449, 0xA7EB},{0x044A, 0xA7EC},{0x044B, 0xA7ED},{0x044C, 0xA7EE}, - {0x044D, 0xA7EF},{0x044E, 0xA7F0},{0x044F, 0xA7F1},{0x0451, 0xA7D7},{0x2010, 0xA95C},{0x2013, 0xA843},{0x2014, 0xA1AA},{0x2015, 0xA844}, - {0x2016, 0xA1AC},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2025, 0xA845},{0x2026, 0xA1AD},{0x2030, 0xA1EB}, - {0x2032, 0xA1E4},{0x2033, 0xA1E5},{0x2035, 0xA846},{0x203B, 0xA1F9},{0x2103, 0xA1E6},{0x2105, 0xA847},{0x2109, 0xA848},{0x2116, 0xA1ED}, - {0x2121, 0xA959},{0x2160, 0xA2F1},{0x2161, 0xA2F2},{0x2162, 0xA2F3},{0x2163, 0xA2F4},{0x2164, 0xA2F5},{0x2165, 0xA2F6},{0x2166, 0xA2F7}, - {0x2167, 0xA2F8},{0x2168, 0xA2F9},{0x2169, 0xA2FA},{0x216A, 0xA2FB},{0x216B, 0xA2FC},{0x2170, 0xA2A1},{0x2171, 0xA2A2},{0x2172, 0xA2A3}, - {0x2173, 0xA2A4},{0x2174, 0xA2A5},{0x2175, 0xA2A6},{0x2176, 0xA2A7},{0x2177, 0xA2A8},{0x2178, 0xA2A9},{0x2179, 0xA2AA},{0x2190, 0xA1FB}, - {0x2191, 0xA1FC},{0x2192, 0xA1FA},{0x2193, 0xA1FD},{0x2196, 0xA849},{0x2197, 0xA84A},{0x2198, 0xA84B},{0x2199, 0xA84C},{0x2208, 0xA1CA}, - {0x220F, 0xA1C7},{0x2211, 0xA1C6},{0x2215, 0xA84D},{0x221A, 0xA1CC},{0x221D, 0xA1D8},{0x221E, 0xA1DE},{0x221F, 0xA84E},{0x2220, 0xA1CF}, - {0x2223, 0xA84F},{0x2225, 0xA1CE},{0x2227, 0xA1C4},{0x2228, 0xA1C5},{0x2229, 0xA1C9},{0x222A, 0xA1C8},{0x222B, 0xA1D2},{0x222E, 0xA1D3}, - {0x2234, 0xA1E0},{0x2235, 0xA1DF},{0x2236, 0xA1C3},{0x2237, 0xA1CB},{0x223D, 0xA1D7},{0x2248, 0xA1D6},{0x224C, 0xA1D5},{0x2252, 0xA850}, - {0x2260, 0xA1D9},{0x2261, 0xA1D4},{0x2264, 0xA1DC},{0x2265, 0xA1DD},{0x2266, 0xA851},{0x2267, 0xA852},{0x226E, 0xA1DA},{0x226F, 0xA1DB}, - {0x2299, 0xA1D1},{0x22A5, 0xA1CD},{0x22BF, 0xA853},{0x2312, 0xA1D0},{0x2460, 0xA2D9},{0x2461, 0xA2DA},{0x2462, 0xA2DB},{0x2463, 0xA2DC}, - {0x2464, 0xA2DD},{0x2465, 0xA2DE},{0x2466, 0xA2DF},{0x2467, 0xA2E0},{0x2468, 0xA2E1},{0x2469, 0xA2E2},{0x2474, 0xA2C5},{0x2475, 0xA2C6}, - {0x2476, 0xA2C7},{0x2477, 0xA2C8},{0x2478, 0xA2C9},{0x2479, 0xA2CA},{0x247A, 0xA2CB},{0x247B, 0xA2CC},{0x247C, 0xA2CD},{0x247D, 0xA2CE}, - {0x247E, 0xA2CF},{0x247F, 0xA2D0},{0x2480, 0xA2D1},{0x2481, 0xA2D2},{0x2482, 0xA2D3},{0x2483, 0xA2D4},{0x2484, 0xA2D5},{0x2485, 0xA2D6}, - {0x2486, 0xA2D7},{0x2487, 0xA2D8},{0x2488, 0xA2B1},{0x2489, 0xA2B2},{0x248A, 0xA2B3},{0x248B, 0xA2B4},{0x248C, 0xA2B5},{0x248D, 0xA2B6}, - {0x248E, 0xA2B7},{0x248F, 0xA2B8},{0x2490, 0xA2B9},{0x2491, 0xA2BA},{0x2492, 0xA2BB},{0x2493, 0xA2BC},{0x2494, 0xA2BD},{0x2495, 0xA2BE}, - {0x2496, 0xA2BF},{0x2497, 0xA2C0},{0x2498, 0xA2C1},{0x2499, 0xA2C2},{0x249A, 0xA2C3},{0x249B, 0xA2C4},{0x2500, 0xA9A4},{0x2501, 0xA9A5}, - {0x2502, 0xA9A6},{0x2503, 0xA9A7},{0x2504, 0xA9A8},{0x2505, 0xA9A9},{0x2506, 0xA9AA},{0x2507, 0xA9AB},{0x2508, 0xA9AC},{0x2509, 0xA9AD}, - {0x250A, 0xA9AE},{0x250B, 0xA9AF},{0x250C, 0xA9B0},{0x250D, 0xA9B1},{0x250E, 0xA9B2},{0x250F, 0xA9B3},{0x2510, 0xA9B4},{0x2511, 0xA9B5}, - {0x2512, 0xA9B6},{0x2513, 0xA9B7},{0x2514, 0xA9B8},{0x2515, 0xA9B9},{0x2516, 0xA9BA},{0x2517, 0xA9BB},{0x2518, 0xA9BC},{0x2519, 0xA9BD}, - {0x251A, 0xA9BE},{0x251B, 0xA9BF},{0x251C, 0xA9C0},{0x251D, 0xA9C1},{0x251E, 0xA9C2},{0x251F, 0xA9C3},{0x2520, 0xA9C4},{0x2521, 0xA9C5}, - {0x2522, 0xA9C6},{0x2523, 0xA9C7},{0x2524, 0xA9C8},{0x2525, 0xA9C9},{0x2526, 0xA9CA},{0x2527, 0xA9CB},{0x2528, 0xA9CC},{0x2529, 0xA9CD}, - {0x252A, 0xA9CE},{0x252B, 0xA9CF},{0x252C, 0xA9D0},{0x252D, 0xA9D1},{0x252E, 0xA9D2},{0x252F, 0xA9D3},{0x2530, 0xA9D4},{0x2531, 0xA9D5}, - {0x2532, 0xA9D6},{0x2533, 0xA9D7},{0x2534, 0xA9D8},{0x2535, 0xA9D9},{0x2536, 0xA9DA},{0x2537, 0xA9DB},{0x2538, 0xA9DC},{0x2539, 0xA9DD}, - {0x253A, 0xA9DE},{0x253B, 0xA9DF},{0x253C, 0xA9E0},{0x253D, 0xA9E1},{0x253E, 0xA9E2},{0x253F, 0xA9E3},{0x2540, 0xA9E4},{0x2541, 0xA9E5}, - {0x2542, 0xA9E6},{0x2543, 0xA9E7},{0x2544, 0xA9E8},{0x2545, 0xA9E9},{0x2546, 0xA9EA},{0x2547, 0xA9EB},{0x2548, 0xA9EC},{0x2549, 0xA9ED}, - {0x254A, 0xA9EE},{0x254B, 0xA9EF},{0x2550, 0xA854},{0x2551, 0xA855},{0x2552, 0xA856},{0x2553, 0xA857},{0x2554, 0xA858},{0x2555, 0xA859}, - {0x2556, 0xA85A},{0x2557, 0xA85B},{0x2558, 0xA85C},{0x2559, 0xA85D},{0x255A, 0xA85E},{0x255B, 0xA85F},{0x255C, 0xA860},{0x255D, 0xA861}, - {0x255E, 0xA862},{0x255F, 0xA863},{0x2560, 0xA864},{0x2561, 0xA865},{0x2562, 0xA866},{0x2563, 0xA867},{0x2564, 0xA868},{0x2565, 0xA869}, - {0x2566, 0xA86A},{0x2567, 0xA86B},{0x2568, 0xA86C},{0x2569, 0xA86D},{0x256A, 0xA86E},{0x256B, 0xA86F},{0x256C, 0xA870},{0x256D, 0xA871}, - {0x256E, 0xA872},{0x256F, 0xA873},{0x2570, 0xA874},{0x2571, 0xA875},{0x2572, 0xA876},{0x2573, 0xA877},{0x2581, 0xA878},{0x2582, 0xA879}, - {0x2583, 0xA87A},{0x2584, 0xA87B},{0x2585, 0xA87C},{0x2586, 0xA87D},{0x2587, 0xA87E},{0x2588, 0xA880},{0x2589, 0xA881},{0x258A, 0xA882}, - {0x258B, 0xA883},{0x258C, 0xA884},{0x258D, 0xA885},{0x258E, 0xA886},{0x258F, 0xA887},{0x2593, 0xA888},{0x2594, 0xA889},{0x2595, 0xA88A}, - {0x25A0, 0xA1F6},{0x25A1, 0xA1F5},{0x25B2, 0xA1F8},{0x25B3, 0xA1F7},{0x25BC, 0xA88B},{0x25BD, 0xA88C},{0x25C6, 0xA1F4},{0x25C7, 0xA1F3}, - {0x25CB, 0xA1F0},{0x25CE, 0xA1F2},{0x25CF, 0xA1F1},{0x25E2, 0xA88D},{0x25E3, 0xA88E},{0x25E4, 0xA88F},{0x25E5, 0xA890},{0x2605, 0xA1EF}, - {0x2606, 0xA1EE},{0x2609, 0xA891},{0x2640, 0xA1E2},{0x2641, 0xA892},{0x2642, 0xA1E1},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3}, - {0x3003, 0xA1A8},{0x3005, 0xA1A9},{0x3006, 0xA965},{0x3007, 0xA996},{0x3008, 0xA1B4},{0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7}, - {0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BE},{0x3011, 0xA1BF},{0x3012, 0xA893},{0x3013, 0xA1FE}, - {0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3016, 0xA1BC},{0x3017, 0xA1BD},{0x301D, 0xA894},{0x301E, 0xA895},{0x3021, 0xA940},{0x3022, 0xA941}, - {0x3023, 0xA942},{0x3024, 0xA943},{0x3025, 0xA944},{0x3026, 0xA945},{0x3027, 0xA946},{0x3028, 0xA947},{0x3029, 0xA948},{0x3041, 0xA4A1}, - {0x3042, 0xA4A2},{0x3043, 0xA4A3},{0x3044, 0xA4A4},{0x3045, 0xA4A5},{0x3046, 0xA4A6},{0x3047, 0xA4A7},{0x3048, 0xA4A8},{0x3049, 0xA4A9}, - {0x304A, 0xA4AA},{0x304B, 0xA4AB},{0x304C, 0xA4AC},{0x304D, 0xA4AD},{0x304E, 0xA4AE},{0x304F, 0xA4AF},{0x3050, 0xA4B0},{0x3051, 0xA4B1}, - {0x3052, 0xA4B2},{0x3053, 0xA4B3},{0x3054, 0xA4B4},{0x3055, 0xA4B5},{0x3056, 0xA4B6},{0x3057, 0xA4B7},{0x3058, 0xA4B8},{0x3059, 0xA4B9}, - {0x305A, 0xA4BA},{0x305B, 0xA4BB},{0x305C, 0xA4BC},{0x305D, 0xA4BD},{0x305E, 0xA4BE},{0x305F, 0xA4BF},{0x3060, 0xA4C0},{0x3061, 0xA4C1}, - {0x3062, 0xA4C2},{0x3063, 0xA4C3},{0x3064, 0xA4C4},{0x3065, 0xA4C5},{0x3066, 0xA4C6},{0x3067, 0xA4C7},{0x3068, 0xA4C8},{0x3069, 0xA4C9}, - {0x306A, 0xA4CA},{0x306B, 0xA4CB},{0x306C, 0xA4CC},{0x306D, 0xA4CD},{0x306E, 0xA4CE},{0x306F, 0xA4CF},{0x3070, 0xA4D0},{0x3071, 0xA4D1}, - {0x3072, 0xA4D2},{0x3073, 0xA4D3},{0x3074, 0xA4D4},{0x3075, 0xA4D5},{0x3076, 0xA4D6},{0x3077, 0xA4D7},{0x3078, 0xA4D8},{0x3079, 0xA4D9}, - {0x307A, 0xA4DA},{0x307B, 0xA4DB},{0x307C, 0xA4DC},{0x307D, 0xA4DD},{0x307E, 0xA4DE},{0x307F, 0xA4DF},{0x3080, 0xA4E0},{0x3081, 0xA4E1}, - {0x3082, 0xA4E2},{0x3083, 0xA4E3},{0x3084, 0xA4E4},{0x3085, 0xA4E5},{0x3086, 0xA4E6},{0x3087, 0xA4E7},{0x3088, 0xA4E8},{0x3089, 0xA4E9}, - {0x308A, 0xA4EA},{0x308B, 0xA4EB},{0x308C, 0xA4EC},{0x308D, 0xA4ED},{0x308E, 0xA4EE},{0x308F, 0xA4EF},{0x3090, 0xA4F0},{0x3091, 0xA4F1}, - {0x3092, 0xA4F2},{0x3093, 0xA4F3},{0x309B, 0xA961},{0x309C, 0xA962},{0x309D, 0xA966},{0x309E, 0xA967},{0x30A1, 0xA5A1},{0x30A2, 0xA5A2}, - {0x30A3, 0xA5A3},{0x30A4, 0xA5A4},{0x30A5, 0xA5A5},{0x30A6, 0xA5A6},{0x30A7, 0xA5A7},{0x30A8, 0xA5A8},{0x30A9, 0xA5A9},{0x30AA, 0xA5AA}, - {0x30AB, 0xA5AB},{0x30AC, 0xA5AC},{0x30AD, 0xA5AD},{0x30AE, 0xA5AE},{0x30AF, 0xA5AF},{0x30B0, 0xA5B0},{0x30B1, 0xA5B1},{0x30B2, 0xA5B2}, - {0x30B3, 0xA5B3},{0x30B4, 0xA5B4},{0x30B5, 0xA5B5},{0x30B6, 0xA5B6},{0x30B7, 0xA5B7},{0x30B8, 0xA5B8},{0x30B9, 0xA5B9},{0x30BA, 0xA5BA}, - {0x30BB, 0xA5BB},{0x30BC, 0xA5BC},{0x30BD, 0xA5BD},{0x30BE, 0xA5BE},{0x30BF, 0xA5BF},{0x30C0, 0xA5C0},{0x30C1, 0xA5C1},{0x30C2, 0xA5C2}, - {0x30C3, 0xA5C3},{0x30C4, 0xA5C4},{0x30C5, 0xA5C5},{0x30C6, 0xA5C6},{0x30C7, 0xA5C7},{0x30C8, 0xA5C8},{0x30C9, 0xA5C9},{0x30CA, 0xA5CA}, - {0x30CB, 0xA5CB},{0x30CC, 0xA5CC},{0x30CD, 0xA5CD},{0x30CE, 0xA5CE},{0x30CF, 0xA5CF},{0x30D0, 0xA5D0},{0x30D1, 0xA5D1},{0x30D2, 0xA5D2}, - {0x30D3, 0xA5D3},{0x30D4, 0xA5D4},{0x30D5, 0xA5D5},{0x30D6, 0xA5D6},{0x30D7, 0xA5D7},{0x30D8, 0xA5D8},{0x30D9, 0xA5D9},{0x30DA, 0xA5DA}, - {0x30DB, 0xA5DB},{0x30DC, 0xA5DC},{0x30DD, 0xA5DD},{0x30DE, 0xA5DE},{0x30DF, 0xA5DF},{0x30E0, 0xA5E0},{0x30E1, 0xA5E1},{0x30E2, 0xA5E2}, - {0x30E3, 0xA5E3},{0x30E4, 0xA5E4},{0x30E5, 0xA5E5},{0x30E6, 0xA5E6},{0x30E7, 0xA5E7},{0x30E8, 0xA5E8},{0x30E9, 0xA5E9},{0x30EA, 0xA5EA}, - {0x30EB, 0xA5EB},{0x30EC, 0xA5EC},{0x30ED, 0xA5ED},{0x30EE, 0xA5EE},{0x30EF, 0xA5EF},{0x30F0, 0xA5F0},{0x30F1, 0xA5F1},{0x30F2, 0xA5F2}, - {0x30F3, 0xA5F3},{0x30F4, 0xA5F4},{0x30F5, 0xA5F5},{0x30F6, 0xA5F6},{0x30FC, 0xA960},{0x30FD, 0xA963},{0x30FE, 0xA964},{0x3105, 0xA8C5}, - {0x3106, 0xA8C6},{0x3107, 0xA8C7},{0x3108, 0xA8C8},{0x3109, 0xA8C9},{0x310A, 0xA8CA},{0x310B, 0xA8CB},{0x310C, 0xA8CC},{0x310D, 0xA8CD}, - {0x310E, 0xA8CE},{0x310F, 0xA8CF},{0x3110, 0xA8D0},{0x3111, 0xA8D1},{0x3112, 0xA8D2},{0x3113, 0xA8D3},{0x3114, 0xA8D4},{0x3115, 0xA8D5}, - {0x3116, 0xA8D6},{0x3117, 0xA8D7},{0x3118, 0xA8D8},{0x3119, 0xA8D9},{0x311A, 0xA8DA},{0x311B, 0xA8DB},{0x311C, 0xA8DC},{0x311D, 0xA8DD}, - {0x311E, 0xA8DE},{0x311F, 0xA8DF},{0x3120, 0xA8E0},{0x3121, 0xA8E1},{0x3122, 0xA8E2},{0x3123, 0xA8E3},{0x3124, 0xA8E4},{0x3125, 0xA8E5}, - {0x3126, 0xA8E6},{0x3127, 0xA8E7},{0x3128, 0xA8E8},{0x3129, 0xA8E9},{0x3220, 0xA2E5},{0x3221, 0xA2E6},{0x3222, 0xA2E7},{0x3223, 0xA2E8}, - {0x3224, 0xA2E9},{0x3225, 0xA2EA},{0x3226, 0xA2EB},{0x3227, 0xA2EC},{0x3228, 0xA2ED},{0x3229, 0xA2EE},{0x3231, 0xA95A},{0x32A3, 0xA949}, - {0x338E, 0xA94A},{0x338F, 0xA94B},{0x339C, 0xA94C},{0x339D, 0xA94D},{0x339E, 0xA94E},{0x33A1, 0xA94F},{0x33C4, 0xA950},{0x33CE, 0xA951}, - {0x33D1, 0xA952},{0x33D2, 0xA953},{0x33D5, 0xA954},{0x4E00, 0xD2BB},{0x4E01, 0xB6A1},{0x4E02, 0x8140},{0x4E03, 0xC6DF},{0x4E04, 0x8141}, - {0x4E05, 0x8142},{0x4E06, 0x8143},{0x4E07, 0xCDF2},{0x4E08, 0xD5C9},{0x4E09, 0xC8FD},{0x4E0A, 0xC9CF},{0x4E0B, 0xCFC2},{0x4E0C, 0xD8A2}, - {0x4E0D, 0xB2BB},{0x4E0E, 0xD3EB},{0x4E0F, 0x8144},{0x4E10, 0xD8A4},{0x4E11, 0xB3F3},{0x4E12, 0x8145},{0x4E13, 0xD7A8},{0x4E14, 0xC7D2}, - {0x4E15, 0xD8A7},{0x4E16, 0xCAC0},{0x4E17, 0x8146},{0x4E18, 0xC7F0},{0x4E19, 0xB1FB},{0x4E1A, 0xD2B5},{0x4E1B, 0xB4D4},{0x4E1C, 0xB6AB}, - {0x4E1D, 0xCBBF},{0x4E1E, 0xD8A9},{0x4E1F, 0x8147},{0x4E20, 0x8148},{0x4E21, 0x8149},{0x4E22, 0xB6AA},{0x4E23, 0x814A},{0x4E24, 0xC1BD}, - {0x4E25, 0xD1CF},{0x4E26, 0x814B},{0x4E27, 0xC9A5},{0x4E28, 0xD8AD},{0x4E29, 0x814C},{0x4E2A, 0xB8F6},{0x4E2B, 0xD1BE},{0x4E2C, 0xE3DC}, - {0x4E2D, 0xD6D0},{0x4E2E, 0x814D},{0x4E2F, 0x814E},{0x4E30, 0xB7E1},{0x4E31, 0x814F},{0x4E32, 0xB4AE},{0x4E33, 0x8150},{0x4E34, 0xC1D9}, - {0x4E35, 0x8151},{0x4E36, 0xD8BC},{0x4E37, 0x8152},{0x4E38, 0xCDE8},{0x4E39, 0xB5A4},{0x4E3A, 0xCEAA},{0x4E3B, 0xD6F7},{0x4E3C, 0x8153}, - {0x4E3D, 0xC0F6},{0x4E3E, 0xBED9},{0x4E3F, 0xD8AF},{0x4E40, 0x8154},{0x4E41, 0x8155},{0x4E42, 0x8156},{0x4E43, 0xC4CB},{0x4E44, 0x8157}, - {0x4E45, 0xBEC3},{0x4E46, 0x8158},{0x4E47, 0xD8B1},{0x4E48, 0xC3B4},{0x4E49, 0xD2E5},{0x4E4A, 0x8159},{0x4E4B, 0xD6AE},{0x4E4C, 0xCEDA}, - {0x4E4D, 0xD5A7},{0x4E4E, 0xBAF5},{0x4E4F, 0xB7A6},{0x4E50, 0xC0D6},{0x4E51, 0x815A},{0x4E52, 0xC6B9},{0x4E53, 0xC5D2},{0x4E54, 0xC7C7}, - {0x4E55, 0x815B},{0x4E56, 0xB9D4},{0x4E57, 0x815C},{0x4E58, 0xB3CB},{0x4E59, 0xD2D2},{0x4E5A, 0x815D},{0x4E5B, 0x815E},{0x4E5C, 0xD8BF}, - {0x4E5D, 0xBEC5},{0x4E5E, 0xC6F2},{0x4E5F, 0xD2B2},{0x4E60, 0xCFB0},{0x4E61, 0xCFE7},{0x4E62, 0x815F},{0x4E63, 0x8160},{0x4E64, 0x8161}, - {0x4E65, 0x8162},{0x4E66, 0xCAE9},{0x4E67, 0x8163},{0x4E68, 0x8164},{0x4E69, 0xD8C0},{0x4E6A, 0x8165},{0x4E6B, 0x8166},{0x4E6C, 0x8167}, - {0x4E6D, 0x8168},{0x4E6E, 0x8169},{0x4E6F, 0x816A},{0x4E70, 0xC2F2},{0x4E71, 0xC2D2},{0x4E72, 0x816B},{0x4E73, 0xC8E9},{0x4E74, 0x816C}, - {0x4E75, 0x816D},{0x4E76, 0x816E},{0x4E77, 0x816F},{0x4E78, 0x8170},{0x4E79, 0x8171},{0x4E7A, 0x8172},{0x4E7B, 0x8173},{0x4E7C, 0x8174}, - {0x4E7D, 0x8175},{0x4E7E, 0xC7AC},{0x4E7F, 0x8176},{0x4E80, 0x8177},{0x4E81, 0x8178},{0x4E82, 0x8179},{0x4E83, 0x817A},{0x4E84, 0x817B}, - {0x4E85, 0x817C},{0x4E86, 0xC1CB},{0x4E87, 0x817D},{0x4E88, 0xD3E8},{0x4E89, 0xD5F9},{0x4E8A, 0x817E},{0x4E8B, 0xCAC2},{0x4E8C, 0xB6FE}, - {0x4E8D, 0xD8A1},{0x4E8E, 0xD3DA},{0x4E8F, 0xBFF7},{0x4E90, 0x8180},{0x4E91, 0xD4C6},{0x4E92, 0xBBA5},{0x4E93, 0xD8C1},{0x4E94, 0xCEE5}, - {0x4E95, 0xBEAE},{0x4E96, 0x8181},{0x4E97, 0x8182},{0x4E98, 0xD8A8},{0x4E99, 0x8183},{0x4E9A, 0xD1C7},{0x4E9B, 0xD0A9},{0x4E9C, 0x8184}, - {0x4E9D, 0x8185},{0x4E9E, 0x8186},{0x4E9F, 0xD8BD},{0x4EA0, 0xD9EF},{0x4EA1, 0xCDF6},{0x4EA2, 0xBFBA},{0x4EA3, 0x8187},{0x4EA4, 0xBDBB}, - {0x4EA5, 0xBAA5},{0x4EA6, 0xD2E0},{0x4EA7, 0xB2FA},{0x4EA8, 0xBAE0},{0x4EA9, 0xC4B6},{0x4EAA, 0x8188},{0x4EAB, 0xCFED},{0x4EAC, 0xBEA9}, - {0x4EAD, 0xCDA4},{0x4EAE, 0xC1C1},{0x4EAF, 0x8189},{0x4EB0, 0x818A},{0x4EB1, 0x818B},{0x4EB2, 0xC7D7},{0x4EB3, 0xD9F1},{0x4EB4, 0x818C}, - {0x4EB5, 0xD9F4},{0x4EB6, 0x818D},{0x4EB7, 0x818E},{0x4EB8, 0x818F},{0x4EB9, 0x8190},{0x4EBA, 0xC8CB},{0x4EBB, 0xD8E9},{0x4EBC, 0x8191}, - {0x4EBD, 0x8192},{0x4EBE, 0x8193},{0x4EBF, 0xD2DA},{0x4EC0, 0xCAB2},{0x4EC1, 0xC8CA},{0x4EC2, 0xD8EC},{0x4EC3, 0xD8EA},{0x4EC4, 0xD8C6}, - {0x4EC5, 0xBDF6},{0x4EC6, 0xC6CD},{0x4EC7, 0xB3F0},{0x4EC8, 0x8194},{0x4EC9, 0xD8EB},{0x4ECA, 0xBDF1},{0x4ECB, 0xBDE9},{0x4ECC, 0x8195}, - {0x4ECD, 0xC8D4},{0x4ECE, 0xB4D3},{0x4ECF, 0x8196},{0x4ED0, 0x8197},{0x4ED1, 0xC2D8},{0x4ED2, 0x8198},{0x4ED3, 0xB2D6},{0x4ED4, 0xD7D0}, - {0x4ED5, 0xCACB},{0x4ED6, 0xCBFB},{0x4ED7, 0xD5CC},{0x4ED8, 0xB8B6},{0x4ED9, 0xCFC9},{0x4EDA, 0x8199},{0x4EDB, 0x819A},{0x4EDC, 0x819B}, - {0x4EDD, 0xD9DA},{0x4EDE, 0xD8F0},{0x4EDF, 0xC7AA},{0x4EE0, 0x819C},{0x4EE1, 0xD8EE},{0x4EE2, 0x819D},{0x4EE3, 0xB4FA},{0x4EE4, 0xC1EE}, - {0x4EE5, 0xD2D4},{0x4EE6, 0x819E},{0x4EE7, 0x819F},{0x4EE8, 0xD8ED},{0x4EE9, 0x81A0},{0x4EEA, 0xD2C7},{0x4EEB, 0xD8EF},{0x4EEC, 0xC3C7}, - {0x4EED, 0x81A1},{0x4EEE, 0x81A2},{0x4EEF, 0x81A3},{0x4EF0, 0xD1F6},{0x4EF1, 0x81A4},{0x4EF2, 0xD6D9},{0x4EF3, 0xD8F2},{0x4EF4, 0x81A5}, - {0x4EF5, 0xD8F5},{0x4EF6, 0xBCFE},{0x4EF7, 0xBCDB},{0x4EF8, 0x81A6},{0x4EF9, 0x81A7},{0x4EFA, 0x81A8},{0x4EFB, 0xC8CE},{0x4EFC, 0x81A9}, - {0x4EFD, 0xB7DD},{0x4EFE, 0x81AA},{0x4EFF, 0xB7C2},{0x4F00, 0x81AB},{0x4F01, 0xC6F3},{0x4F02, 0x81AC},{0x4F03, 0x81AD},{0x4F04, 0x81AE}, - {0x4F05, 0x81AF},{0x4F06, 0x81B0},{0x4F07, 0x81B1},{0x4F08, 0x81B2},{0x4F09, 0xD8F8},{0x4F0A, 0xD2C1},{0x4F0B, 0x81B3},{0x4F0C, 0x81B4}, - {0x4F0D, 0xCEE9},{0x4F0E, 0xBCBF},{0x4F0F, 0xB7FC},{0x4F10, 0xB7A5},{0x4F11, 0xD0DD},{0x4F12, 0x81B5},{0x4F13, 0x81B6},{0x4F14, 0x81B7}, - {0x4F15, 0x81B8},{0x4F16, 0x81B9},{0x4F17, 0xD6DA},{0x4F18, 0xD3C5},{0x4F19, 0xBBEF},{0x4F1A, 0xBBE1},{0x4F1B, 0xD8F1},{0x4F1C, 0x81BA}, - {0x4F1D, 0x81BB},{0x4F1E, 0xC9A1},{0x4F1F, 0xCEB0},{0x4F20, 0xB4AB},{0x4F21, 0x81BC},{0x4F22, 0xD8F3},{0x4F23, 0x81BD},{0x4F24, 0xC9CB}, - {0x4F25, 0xD8F6},{0x4F26, 0xC2D7},{0x4F27, 0xD8F7},{0x4F28, 0x81BE},{0x4F29, 0x81BF},{0x4F2A, 0xCEB1},{0x4F2B, 0xD8F9},{0x4F2C, 0x81C0}, - {0x4F2D, 0x81C1},{0x4F2E, 0x81C2},{0x4F2F, 0xB2AE},{0x4F30, 0xB9C0},{0x4F31, 0x81C3},{0x4F32, 0xD9A3},{0x4F33, 0x81C4},{0x4F34, 0xB0E9}, - {0x4F35, 0x81C5},{0x4F36, 0xC1E6},{0x4F37, 0x81C6},{0x4F38, 0xC9EC},{0x4F39, 0x81C7},{0x4F3A, 0xCBC5},{0x4F3B, 0x81C8},{0x4F3C, 0xCBC6}, - {0x4F3D, 0xD9A4},{0x4F3E, 0x81C9},{0x4F3F, 0x81CA},{0x4F40, 0x81CB},{0x4F41, 0x81CC},{0x4F42, 0x81CD},{0x4F43, 0xB5E8},{0x4F44, 0x81CE}, - {0x4F45, 0x81CF},{0x4F46, 0xB5AB},{0x4F47, 0x81D0},{0x4F48, 0x81D1},{0x4F49, 0x81D2},{0x4F4A, 0x81D3},{0x4F4B, 0x81D4},{0x4F4C, 0x81D5}, - {0x4F4D, 0xCEBB},{0x4F4E, 0xB5CD},{0x4F4F, 0xD7A1},{0x4F50, 0xD7F4},{0x4F51, 0xD3D3},{0x4F52, 0x81D6},{0x4F53, 0xCCE5},{0x4F54, 0x81D7}, - {0x4F55, 0xBACE},{0x4F56, 0x81D8},{0x4F57, 0xD9A2},{0x4F58, 0xD9DC},{0x4F59, 0xD3E0},{0x4F5A, 0xD8FD},{0x4F5B, 0xB7F0},{0x4F5C, 0xD7F7}, - {0x4F5D, 0xD8FE},{0x4F5E, 0xD8FA},{0x4F5F, 0xD9A1},{0x4F60, 0xC4E3},{0x4F61, 0x81D9},{0x4F62, 0x81DA},{0x4F63, 0xD3B6},{0x4F64, 0xD8F4}, - {0x4F65, 0xD9DD},{0x4F66, 0x81DB},{0x4F67, 0xD8FB},{0x4F68, 0x81DC},{0x4F69, 0xC5E5},{0x4F6A, 0x81DD},{0x4F6B, 0x81DE},{0x4F6C, 0xC0D0}, - {0x4F6D, 0x81DF},{0x4F6E, 0x81E0},{0x4F6F, 0xD1F0},{0x4F70, 0xB0DB},{0x4F71, 0x81E1},{0x4F72, 0x81E2},{0x4F73, 0xBCD1},{0x4F74, 0xD9A6}, - {0x4F75, 0x81E3},{0x4F76, 0xD9A5},{0x4F77, 0x81E4},{0x4F78, 0x81E5},{0x4F79, 0x81E6},{0x4F7A, 0x81E7},{0x4F7B, 0xD9AC},{0x4F7C, 0xD9AE}, - {0x4F7D, 0x81E8},{0x4F7E, 0xD9AB},{0x4F7F, 0xCAB9},{0x4F80, 0x81E9},{0x4F81, 0x81EA},{0x4F82, 0x81EB},{0x4F83, 0xD9A9},{0x4F84, 0xD6B6}, - {0x4F85, 0x81EC},{0x4F86, 0x81ED},{0x4F87, 0x81EE},{0x4F88, 0xB3DE},{0x4F89, 0xD9A8},{0x4F8A, 0x81EF},{0x4F8B, 0xC0FD},{0x4F8C, 0x81F0}, - {0x4F8D, 0xCACC},{0x4F8E, 0x81F1},{0x4F8F, 0xD9AA},{0x4F90, 0x81F2},{0x4F91, 0xD9A7},{0x4F92, 0x81F3},{0x4F93, 0x81F4},{0x4F94, 0xD9B0}, - {0x4F95, 0x81F5},{0x4F96, 0x81F6},{0x4F97, 0xB6B1},{0x4F98, 0x81F7},{0x4F99, 0x81F8},{0x4F9A, 0x81F9},{0x4F9B, 0xB9A9},{0x4F9C, 0x81FA}, - {0x4F9D, 0xD2C0},{0x4F9E, 0x81FB},{0x4F9F, 0x81FC},{0x4FA0, 0xCFC0},{0x4FA1, 0x81FD},{0x4FA2, 0x81FE},{0x4FA3, 0xC2C2},{0x4FA4, 0x8240}, - {0x4FA5, 0xBDC4},{0x4FA6, 0xD5EC},{0x4FA7, 0xB2E0},{0x4FA8, 0xC7C8},{0x4FA9, 0xBFEB},{0x4FAA, 0xD9AD},{0x4FAB, 0x8241},{0x4FAC, 0xD9AF}, - {0x4FAD, 0x8242},{0x4FAE, 0xCEEA},{0x4FAF, 0xBAEE},{0x4FB0, 0x8243},{0x4FB1, 0x8244},{0x4FB2, 0x8245},{0x4FB3, 0x8246},{0x4FB4, 0x8247}, - {0x4FB5, 0xC7D6},{0x4FB6, 0x8248},{0x4FB7, 0x8249},{0x4FB8, 0x824A},{0x4FB9, 0x824B},{0x4FBA, 0x824C},{0x4FBB, 0x824D},{0x4FBC, 0x824E}, - {0x4FBD, 0x824F},{0x4FBE, 0x8250},{0x4FBF, 0xB1E3},{0x4FC0, 0x8251},{0x4FC1, 0x8252},{0x4FC2, 0x8253},{0x4FC3, 0xB4D9},{0x4FC4, 0xB6ED}, - {0x4FC5, 0xD9B4},{0x4FC6, 0x8254},{0x4FC7, 0x8255},{0x4FC8, 0x8256},{0x4FC9, 0x8257},{0x4FCA, 0xBFA1},{0x4FCB, 0x8258},{0x4FCC, 0x8259}, - {0x4FCD, 0x825A},{0x4FCE, 0xD9DE},{0x4FCF, 0xC7CE},{0x4FD0, 0xC0FE},{0x4FD1, 0xD9B8},{0x4FD2, 0x825B},{0x4FD3, 0x825C},{0x4FD4, 0x825D}, - {0x4FD5, 0x825E},{0x4FD6, 0x825F},{0x4FD7, 0xCBD7},{0x4FD8, 0xB7FD},{0x4FD9, 0x8260},{0x4FDA, 0xD9B5},{0x4FDB, 0x8261},{0x4FDC, 0xD9B7}, - {0x4FDD, 0xB1A3},{0x4FDE, 0xD3E1},{0x4FDF, 0xD9B9},{0x4FE0, 0x8262},{0x4FE1, 0xD0C5},{0x4FE2, 0x8263},{0x4FE3, 0xD9B6},{0x4FE4, 0x8264}, - {0x4FE5, 0x8265},{0x4FE6, 0xD9B1},{0x4FE7, 0x8266},{0x4FE8, 0xD9B2},{0x4FE9, 0xC1A9},{0x4FEA, 0xD9B3},{0x4FEB, 0x8267},{0x4FEC, 0x8268}, - {0x4FED, 0xBCF3},{0x4FEE, 0xD0DE},{0x4FEF, 0xB8A9},{0x4FF0, 0x8269},{0x4FF1, 0xBEE3},{0x4FF2, 0x826A},{0x4FF3, 0xD9BD},{0x4FF4, 0x826B}, - {0x4FF5, 0x826C},{0x4FF6, 0x826D},{0x4FF7, 0x826E},{0x4FF8, 0xD9BA},{0x4FF9, 0x826F},{0x4FFA, 0xB0B3},{0x4FFB, 0x8270},{0x4FFC, 0x8271}, - {0x4FFD, 0x8272},{0x4FFE, 0xD9C2},{0x4FFF, 0x8273},{0x5000, 0x8274},{0x5001, 0x8275},{0x5002, 0x8276},{0x5003, 0x8277},{0x5004, 0x8278}, - {0x5005, 0x8279},{0x5006, 0x827A},{0x5007, 0x827B},{0x5008, 0x827C},{0x5009, 0x827D},{0x500A, 0x827E},{0x500B, 0x8280},{0x500C, 0xD9C4}, - {0x500D, 0xB1B6},{0x500E, 0x8281},{0x500F, 0xD9BF},{0x5010, 0x8282},{0x5011, 0x8283},{0x5012, 0xB5B9},{0x5013, 0x8284},{0x5014, 0xBEF3}, - {0x5015, 0x8285},{0x5016, 0x8286},{0x5017, 0x8287},{0x5018, 0xCCC8},{0x5019, 0xBAF2},{0x501A, 0xD2D0},{0x501B, 0x8288},{0x501C, 0xD9C3}, - {0x501D, 0x8289},{0x501E, 0x828A},{0x501F, 0xBDE8},{0x5020, 0x828B},{0x5021, 0xB3AB},{0x5022, 0x828C},{0x5023, 0x828D},{0x5024, 0x828E}, - {0x5025, 0xD9C5},{0x5026, 0xBEEB},{0x5027, 0x828F},{0x5028, 0xD9C6},{0x5029, 0xD9BB},{0x502A, 0xC4DF},{0x502B, 0x8290},{0x502C, 0xD9BE}, - {0x502D, 0xD9C1},{0x502E, 0xD9C0},{0x502F, 0x8291},{0x5030, 0x8292},{0x5031, 0x8293},{0x5032, 0x8294},{0x5033, 0x8295},{0x5034, 0x8296}, - {0x5035, 0x8297},{0x5036, 0x8298},{0x5037, 0x8299},{0x5038, 0x829A},{0x5039, 0x829B},{0x503A, 0xD5AE},{0x503B, 0x829C},{0x503C, 0xD6B5}, - {0x503D, 0x829D},{0x503E, 0xC7E3},{0x503F, 0x829E},{0x5040, 0x829F},{0x5041, 0x82A0},{0x5042, 0x82A1},{0x5043, 0xD9C8},{0x5044, 0x82A2}, - {0x5045, 0x82A3},{0x5046, 0x82A4},{0x5047, 0xBCD9},{0x5048, 0xD9CA},{0x5049, 0x82A5},{0x504A, 0x82A6},{0x504B, 0x82A7},{0x504C, 0xD9BC}, - {0x504D, 0x82A8},{0x504E, 0xD9CB},{0x504F, 0xC6AB},{0x5050, 0x82A9},{0x5051, 0x82AA},{0x5052, 0x82AB},{0x5053, 0x82AC},{0x5054, 0x82AD}, - {0x5055, 0xD9C9},{0x5056, 0x82AE},{0x5057, 0x82AF},{0x5058, 0x82B0},{0x5059, 0x82B1},{0x505A, 0xD7F6},{0x505B, 0x82B2},{0x505C, 0xCDA3}, - {0x505D, 0x82B3},{0x505E, 0x82B4},{0x505F, 0x82B5},{0x5060, 0x82B6},{0x5061, 0x82B7},{0x5062, 0x82B8},{0x5063, 0x82B9},{0x5064, 0x82BA}, - {0x5065, 0xBDA1},{0x5066, 0x82BB},{0x5067, 0x82BC},{0x5068, 0x82BD},{0x5069, 0x82BE},{0x506A, 0x82BF},{0x506B, 0x82C0},{0x506C, 0xD9CC}, - {0x506D, 0x82C1},{0x506E, 0x82C2},{0x506F, 0x82C3},{0x5070, 0x82C4},{0x5071, 0x82C5},{0x5072, 0x82C6},{0x5073, 0x82C7},{0x5074, 0x82C8}, - {0x5075, 0x82C9},{0x5076, 0xC5BC},{0x5077, 0xCDB5},{0x5078, 0x82CA},{0x5079, 0x82CB},{0x507A, 0x82CC},{0x507B, 0xD9CD},{0x507C, 0x82CD}, - {0x507D, 0x82CE},{0x507E, 0xD9C7},{0x507F, 0xB3A5},{0x5080, 0xBFFE},{0x5081, 0x82CF},{0x5082, 0x82D0},{0x5083, 0x82D1},{0x5084, 0x82D2}, - {0x5085, 0xB8B5},{0x5086, 0x82D3},{0x5087, 0x82D4},{0x5088, 0xC0FC},{0x5089, 0x82D5},{0x508A, 0x82D6},{0x508B, 0x82D7},{0x508C, 0x82D8}, - {0x508D, 0xB0F8},{0x508E, 0x82D9},{0x508F, 0x82DA},{0x5090, 0x82DB},{0x5091, 0x82DC},{0x5092, 0x82DD},{0x5093, 0x82DE},{0x5094, 0x82DF}, - {0x5095, 0x82E0},{0x5096, 0x82E1},{0x5097, 0x82E2},{0x5098, 0x82E3},{0x5099, 0x82E4},{0x509A, 0x82E5},{0x509B, 0x82E6},{0x509C, 0x82E7}, - {0x509D, 0x82E8},{0x509E, 0x82E9},{0x509F, 0x82EA},{0x50A0, 0x82EB},{0x50A1, 0x82EC},{0x50A2, 0x82ED},{0x50A3, 0xB4F6},{0x50A4, 0x82EE}, - {0x50A5, 0xD9CE},{0x50A6, 0x82EF},{0x50A7, 0xD9CF},{0x50A8, 0xB4A2},{0x50A9, 0xD9D0},{0x50AA, 0x82F0},{0x50AB, 0x82F1},{0x50AC, 0xB4DF}, - {0x50AD, 0x82F2},{0x50AE, 0x82F3},{0x50AF, 0x82F4},{0x50B0, 0x82F5},{0x50B1, 0x82F6},{0x50B2, 0xB0C1},{0x50B3, 0x82F7},{0x50B4, 0x82F8}, - {0x50B5, 0x82F9},{0x50B6, 0x82FA},{0x50B7, 0x82FB},{0x50B8, 0x82FC},{0x50B9, 0x82FD},{0x50BA, 0xD9D1},{0x50BB, 0xC9B5},{0x50BC, 0x82FE}, - {0x50BD, 0x8340},{0x50BE, 0x8341},{0x50BF, 0x8342},{0x50C0, 0x8343},{0x50C1, 0x8344},{0x50C2, 0x8345},{0x50C3, 0x8346},{0x50C4, 0x8347}, - {0x50C5, 0x8348},{0x50C6, 0x8349},{0x50C7, 0x834A},{0x50C8, 0x834B},{0x50C9, 0x834C},{0x50CA, 0x834D},{0x50CB, 0x834E},{0x50CC, 0x834F}, - {0x50CD, 0x8350},{0x50CE, 0x8351},{0x50CF, 0xCFF1},{0x50D0, 0x8352},{0x50D1, 0x8353},{0x50D2, 0x8354},{0x50D3, 0x8355},{0x50D4, 0x8356}, - {0x50D5, 0x8357},{0x50D6, 0xD9D2},{0x50D7, 0x8358},{0x50D8, 0x8359},{0x50D9, 0x835A},{0x50DA, 0xC1C5},{0x50DB, 0x835B},{0x50DC, 0x835C}, - {0x50DD, 0x835D},{0x50DE, 0x835E},{0x50DF, 0x835F},{0x50E0, 0x8360},{0x50E1, 0x8361},{0x50E2, 0x8362},{0x50E3, 0x8363},{0x50E4, 0x8364}, - {0x50E5, 0x8365},{0x50E6, 0xD9D6},{0x50E7, 0xC9AE},{0x50E8, 0x8366},{0x50E9, 0x8367},{0x50EA, 0x8368},{0x50EB, 0x8369},{0x50EC, 0xD9D5}, - {0x50ED, 0xD9D4},{0x50EE, 0xD9D7},{0x50EF, 0x836A},{0x50F0, 0x836B},{0x50F1, 0x836C},{0x50F2, 0x836D},{0x50F3, 0xCBDB},{0x50F4, 0x836E}, - {0x50F5, 0xBDA9},{0x50F6, 0x836F},{0x50F7, 0x8370},{0x50F8, 0x8371},{0x50F9, 0x8372},{0x50FA, 0x8373},{0x50FB, 0xC6A7},{0x50FC, 0x8374}, - {0x50FD, 0x8375},{0x50FE, 0x8376},{0x50FF, 0x8377},{0x5100, 0x8378},{0x5101, 0x8379},{0x5102, 0x837A},{0x5103, 0x837B},{0x5104, 0x837C}, - {0x5105, 0x837D},{0x5106, 0xD9D3},{0x5107, 0xD9D8},{0x5108, 0x837E},{0x5109, 0x8380},{0x510A, 0x8381},{0x510B, 0xD9D9},{0x510C, 0x8382}, - {0x510D, 0x8383},{0x510E, 0x8384},{0x510F, 0x8385},{0x5110, 0x8386},{0x5111, 0x8387},{0x5112, 0xC8E5},{0x5113, 0x8388},{0x5114, 0x8389}, - {0x5115, 0x838A},{0x5116, 0x838B},{0x5117, 0x838C},{0x5118, 0x838D},{0x5119, 0x838E},{0x511A, 0x838F},{0x511B, 0x8390},{0x511C, 0x8391}, - {0x511D, 0x8392},{0x511E, 0x8393},{0x511F, 0x8394},{0x5120, 0x8395},{0x5121, 0xC0DC},{0x5122, 0x8396},{0x5123, 0x8397},{0x5124, 0x8398}, - {0x5125, 0x8399},{0x5126, 0x839A},{0x5127, 0x839B},{0x5128, 0x839C},{0x5129, 0x839D},{0x512A, 0x839E},{0x512B, 0x839F},{0x512C, 0x83A0}, - {0x512D, 0x83A1},{0x512E, 0x83A2},{0x512F, 0x83A3},{0x5130, 0x83A4},{0x5131, 0x83A5},{0x5132, 0x83A6},{0x5133, 0x83A7},{0x5134, 0x83A8}, - {0x5135, 0x83A9},{0x5136, 0x83AA},{0x5137, 0x83AB},{0x5138, 0x83AC},{0x5139, 0x83AD},{0x513A, 0x83AE},{0x513B, 0x83AF},{0x513C, 0x83B0}, - {0x513D, 0x83B1},{0x513E, 0x83B2},{0x513F, 0xB6F9},{0x5140, 0xD8A3},{0x5141, 0xD4CA},{0x5142, 0x83B3},{0x5143, 0xD4AA},{0x5144, 0xD0D6}, - {0x5145, 0xB3E4},{0x5146, 0xD5D7},{0x5147, 0x83B4},{0x5148, 0xCFC8},{0x5149, 0xB9E2},{0x514A, 0x83B5},{0x514B, 0xBFCB},{0x514C, 0x83B6}, - {0x514D, 0xC3E2},{0x514E, 0x83B7},{0x514F, 0x83B8},{0x5150, 0x83B9},{0x5151, 0xB6D2},{0x5152, 0x83BA},{0x5153, 0x83BB},{0x5154, 0xCDC3}, - {0x5155, 0xD9EE},{0x5156, 0xD9F0},{0x5157, 0x83BC},{0x5158, 0x83BD},{0x5159, 0x83BE},{0x515A, 0xB5B3},{0x515B, 0x83BF},{0x515C, 0xB6B5}, - {0x515D, 0x83C0},{0x515E, 0x83C1},{0x515F, 0x83C2},{0x5160, 0x83C3},{0x5161, 0x83C4},{0x5162, 0xBEA4},{0x5163, 0x83C5},{0x5164, 0x83C6}, - {0x5165, 0xC8EB},{0x5166, 0x83C7},{0x5167, 0x83C8},{0x5168, 0xC8AB},{0x5169, 0x83C9},{0x516A, 0x83CA},{0x516B, 0xB0CB},{0x516C, 0xB9AB}, - {0x516D, 0xC1F9},{0x516E, 0xD9E2},{0x516F, 0x83CB},{0x5170, 0xC0BC},{0x5171, 0xB9B2},{0x5172, 0x83CC},{0x5173, 0xB9D8},{0x5174, 0xD0CB}, - {0x5175, 0xB1F8},{0x5176, 0xC6E4},{0x5177, 0xBEDF},{0x5178, 0xB5E4},{0x5179, 0xD7C8},{0x517A, 0x83CD},{0x517B, 0xD1F8},{0x517C, 0xBCE6}, - {0x517D, 0xCADE},{0x517E, 0x83CE},{0x517F, 0x83CF},{0x5180, 0xBCBD},{0x5181, 0xD9E6},{0x5182, 0xD8E7},{0x5183, 0x83D0},{0x5184, 0x83D1}, - {0x5185, 0xC4DA},{0x5186, 0x83D2},{0x5187, 0x83D3},{0x5188, 0xB8D4},{0x5189, 0xC8BD},{0x518A, 0x83D4},{0x518B, 0x83D5},{0x518C, 0xB2E1}, - {0x518D, 0xD4D9},{0x518E, 0x83D6},{0x518F, 0x83D7},{0x5190, 0x83D8},{0x5191, 0x83D9},{0x5192, 0xC3B0},{0x5193, 0x83DA},{0x5194, 0x83DB}, - {0x5195, 0xC3E1},{0x5196, 0xDAA2},{0x5197, 0xC8DF},{0x5198, 0x83DC},{0x5199, 0xD0B4},{0x519A, 0x83DD},{0x519B, 0xBEFC},{0x519C, 0xC5A9}, - {0x519D, 0x83DE},{0x519E, 0x83DF},{0x519F, 0x83E0},{0x51A0, 0xB9DA},{0x51A1, 0x83E1},{0x51A2, 0xDAA3},{0x51A3, 0x83E2},{0x51A4, 0xD4A9}, - {0x51A5, 0xDAA4},{0x51A6, 0x83E3},{0x51A7, 0x83E4},{0x51A8, 0x83E5},{0x51A9, 0x83E6},{0x51AA, 0x83E7},{0x51AB, 0xD9FB},{0x51AC, 0xB6AC}, - {0x51AD, 0x83E8},{0x51AE, 0x83E9},{0x51AF, 0xB7EB},{0x51B0, 0xB1F9},{0x51B1, 0xD9FC},{0x51B2, 0xB3E5},{0x51B3, 0xBEF6},{0x51B4, 0x83EA}, - {0x51B5, 0xBFF6},{0x51B6, 0xD2B1},{0x51B7, 0xC0E4},{0x51B8, 0x83EB},{0x51B9, 0x83EC},{0x51BA, 0x83ED},{0x51BB, 0xB6B3},{0x51BC, 0xD9FE}, - {0x51BD, 0xD9FD},{0x51BE, 0x83EE},{0x51BF, 0x83EF},{0x51C0, 0xBEBB},{0x51C1, 0x83F0},{0x51C2, 0x83F1},{0x51C3, 0x83F2},{0x51C4, 0xC6E0}, - {0x51C5, 0x83F3},{0x51C6, 0xD7BC},{0x51C7, 0xDAA1},{0x51C8, 0x83F4},{0x51C9, 0xC1B9},{0x51CA, 0x83F5},{0x51CB, 0xB5F2},{0x51CC, 0xC1E8}, - {0x51CD, 0x83F6},{0x51CE, 0x83F7},{0x51CF, 0xBCF5},{0x51D0, 0x83F8},{0x51D1, 0xB4D5},{0x51D2, 0x83F9},{0x51D3, 0x83FA},{0x51D4, 0x83FB}, - {0x51D5, 0x83FC},{0x51D6, 0x83FD},{0x51D7, 0x83FE},{0x51D8, 0x8440},{0x51D9, 0x8441},{0x51DA, 0x8442},{0x51DB, 0xC1DD},{0x51DC, 0x8443}, - {0x51DD, 0xC4FD},{0x51DE, 0x8444},{0x51DF, 0x8445},{0x51E0, 0xBCB8},{0x51E1, 0xB7B2},{0x51E2, 0x8446},{0x51E3, 0x8447},{0x51E4, 0xB7EF}, - {0x51E5, 0x8448},{0x51E6, 0x8449},{0x51E7, 0x844A},{0x51E8, 0x844B},{0x51E9, 0x844C},{0x51EA, 0x844D},{0x51EB, 0xD9EC},{0x51EC, 0x844E}, - {0x51ED, 0xC6BE},{0x51EE, 0x844F},{0x51EF, 0xBFAD},{0x51F0, 0xBBCB},{0x51F1, 0x8450},{0x51F2, 0x8451},{0x51F3, 0xB5CA},{0x51F4, 0x8452}, - {0x51F5, 0xDBC9},{0x51F6, 0xD0D7},{0x51F7, 0x8453},{0x51F8, 0xCDB9},{0x51F9, 0xB0BC},{0x51FA, 0xB3F6},{0x51FB, 0xBBF7},{0x51FC, 0xDBCA}, - {0x51FD, 0xBAAF},{0x51FE, 0x8454},{0x51FF, 0xD4E4},{0x5200, 0xB5B6},{0x5201, 0xB5F3},{0x5202, 0xD8D6},{0x5203, 0xC8D0},{0x5204, 0x8455}, - {0x5205, 0x8456},{0x5206, 0xB7D6},{0x5207, 0xC7D0},{0x5208, 0xD8D7},{0x5209, 0x8457},{0x520A, 0xBFAF},{0x520B, 0x8458},{0x520C, 0x8459}, - {0x520D, 0xDBBB},{0x520E, 0xD8D8},{0x520F, 0x845A},{0x5210, 0x845B},{0x5211, 0xD0CC},{0x5212, 0xBBAE},{0x5213, 0x845C},{0x5214, 0x845D}, - {0x5215, 0x845E},{0x5216, 0xEBBE},{0x5217, 0xC1D0},{0x5218, 0xC1F5},{0x5219, 0xD4F2},{0x521A, 0xB8D5},{0x521B, 0xB4B4},{0x521C, 0x845F}, - {0x521D, 0xB3F5},{0x521E, 0x8460},{0x521F, 0x8461},{0x5220, 0xC9BE},{0x5221, 0x8462},{0x5222, 0x8463},{0x5223, 0x8464},{0x5224, 0xC5D0}, - {0x5225, 0x8465},{0x5226, 0x8466},{0x5227, 0x8467},{0x5228, 0xC5D9},{0x5229, 0xC0FB},{0x522A, 0x8468},{0x522B, 0xB1F0},{0x522C, 0x8469}, - {0x522D, 0xD8D9},{0x522E, 0xB9CE},{0x522F, 0x846A},{0x5230, 0xB5BD},{0x5231, 0x846B},{0x5232, 0x846C},{0x5233, 0xD8DA},{0x5234, 0x846D}, - {0x5235, 0x846E},{0x5236, 0xD6C6},{0x5237, 0xCBA2},{0x5238, 0xC8AF},{0x5239, 0xC9B2},{0x523A, 0xB4CC},{0x523B, 0xBFCC},{0x523C, 0x846F}, - {0x523D, 0xB9F4},{0x523E, 0x8470},{0x523F, 0xD8DB},{0x5240, 0xD8DC},{0x5241, 0xB6E7},{0x5242, 0xBCC1},{0x5243, 0xCCEA},{0x5244, 0x8471}, - {0x5245, 0x8472},{0x5246, 0x8473},{0x5247, 0x8474},{0x5248, 0x8475},{0x5249, 0x8476},{0x524A, 0xCFF7},{0x524B, 0x8477},{0x524C, 0xD8DD}, - {0x524D, 0xC7B0},{0x524E, 0x8478},{0x524F, 0x8479},{0x5250, 0xB9D0},{0x5251, 0xBDA3},{0x5252, 0x847A},{0x5253, 0x847B},{0x5254, 0xCCDE}, - {0x5255, 0x847C},{0x5256, 0xC6CA},{0x5257, 0x847D},{0x5258, 0x847E},{0x5259, 0x8480},{0x525A, 0x8481},{0x525B, 0x8482},{0x525C, 0xD8E0}, - {0x525D, 0x8483},{0x525E, 0xD8DE},{0x525F, 0x8484},{0x5260, 0x8485},{0x5261, 0xD8DF},{0x5262, 0x8486},{0x5263, 0x8487},{0x5264, 0x8488}, - {0x5265, 0xB0FE},{0x5266, 0x8489},{0x5267, 0xBEE7},{0x5268, 0x848A},{0x5269, 0xCAA3},{0x526A, 0xBCF4},{0x526B, 0x848B},{0x526C, 0x848C}, - {0x526D, 0x848D},{0x526E, 0x848E},{0x526F, 0xB8B1},{0x5270, 0x848F},{0x5271, 0x8490},{0x5272, 0xB8EE},{0x5273, 0x8491},{0x5274, 0x8492}, - {0x5275, 0x8493},{0x5276, 0x8494},{0x5277, 0x8495},{0x5278, 0x8496},{0x5279, 0x8497},{0x527A, 0x8498},{0x527B, 0x8499},{0x527C, 0x849A}, - {0x527D, 0xD8E2},{0x527E, 0x849B},{0x527F, 0xBDCB},{0x5280, 0x849C},{0x5281, 0xD8E4},{0x5282, 0xD8E3},{0x5283, 0x849D},{0x5284, 0x849E}, - {0x5285, 0x849F},{0x5286, 0x84A0},{0x5287, 0x84A1},{0x5288, 0xC5FC},{0x5289, 0x84A2},{0x528A, 0x84A3},{0x528B, 0x84A4},{0x528C, 0x84A5}, - {0x528D, 0x84A6},{0x528E, 0x84A7},{0x528F, 0x84A8},{0x5290, 0xD8E5},{0x5291, 0x84A9},{0x5292, 0x84AA},{0x5293, 0xD8E6},{0x5294, 0x84AB}, - {0x5295, 0x84AC},{0x5296, 0x84AD},{0x5297, 0x84AE},{0x5298, 0x84AF},{0x5299, 0x84B0},{0x529A, 0x84B1},{0x529B, 0xC1A6},{0x529C, 0x84B2}, - {0x529D, 0xC8B0},{0x529E, 0xB0EC},{0x529F, 0xB9A6},{0x52A0, 0xBCD3},{0x52A1, 0xCEF1},{0x52A2, 0xDBBD},{0x52A3, 0xC1D3},{0x52A4, 0x84B3}, - {0x52A5, 0x84B4},{0x52A6, 0x84B5},{0x52A7, 0x84B6},{0x52A8, 0xB6AF},{0x52A9, 0xD6FA},{0x52AA, 0xC5AC},{0x52AB, 0xBDD9},{0x52AC, 0xDBBE}, - {0x52AD, 0xDBBF},{0x52AE, 0x84B7},{0x52AF, 0x84B8},{0x52B0, 0x84B9},{0x52B1, 0xC0F8},{0x52B2, 0xBEA2},{0x52B3, 0xC0CD},{0x52B4, 0x84BA}, - {0x52B5, 0x84BB},{0x52B6, 0x84BC},{0x52B7, 0x84BD},{0x52B8, 0x84BE},{0x52B9, 0x84BF},{0x52BA, 0x84C0},{0x52BB, 0x84C1},{0x52BC, 0x84C2}, - {0x52BD, 0x84C3},{0x52BE, 0xDBC0},{0x52BF, 0xCAC6},{0x52C0, 0x84C4},{0x52C1, 0x84C5},{0x52C2, 0x84C6},{0x52C3, 0xB2AA},{0x52C4, 0x84C7}, - {0x52C5, 0x84C8},{0x52C6, 0x84C9},{0x52C7, 0xD3C2},{0x52C8, 0x84CA},{0x52C9, 0xC3E3},{0x52CA, 0x84CB},{0x52CB, 0xD1AB},{0x52CC, 0x84CC}, - {0x52CD, 0x84CD},{0x52CE, 0x84CE},{0x52CF, 0x84CF},{0x52D0, 0xDBC2},{0x52D1, 0x84D0},{0x52D2, 0xC0D5},{0x52D3, 0x84D1},{0x52D4, 0x84D2}, - {0x52D5, 0x84D3},{0x52D6, 0xDBC3},{0x52D7, 0x84D4},{0x52D8, 0xBFB1},{0x52D9, 0x84D5},{0x52DA, 0x84D6},{0x52DB, 0x84D7},{0x52DC, 0x84D8}, - {0x52DD, 0x84D9},{0x52DE, 0x84DA},{0x52DF, 0xC4BC},{0x52E0, 0x84DB},{0x52E1, 0x84DC},{0x52E2, 0x84DD},{0x52E3, 0x84DE},{0x52E4, 0xC7DA}, - {0x52E5, 0x84DF},{0x52E6, 0x84E0},{0x52E7, 0x84E1},{0x52E8, 0x84E2},{0x52E9, 0x84E3},{0x52EA, 0x84E4},{0x52EB, 0x84E5},{0x52EC, 0x84E6}, - {0x52ED, 0x84E7},{0x52EE, 0x84E8},{0x52EF, 0x84E9},{0x52F0, 0xDBC4},{0x52F1, 0x84EA},{0x52F2, 0x84EB},{0x52F3, 0x84EC},{0x52F4, 0x84ED}, - {0x52F5, 0x84EE},{0x52F6, 0x84EF},{0x52F7, 0x84F0},{0x52F8, 0x84F1},{0x52F9, 0xD9E8},{0x52FA, 0xC9D7},{0x52FB, 0x84F2},{0x52FC, 0x84F3}, - {0x52FD, 0x84F4},{0x52FE, 0xB9B4},{0x52FF, 0xCEF0},{0x5300, 0xD4C8},{0x5301, 0x84F5},{0x5302, 0x84F6},{0x5303, 0x84F7},{0x5304, 0x84F8}, - {0x5305, 0xB0FC},{0x5306, 0xB4D2},{0x5307, 0x84F9},{0x5308, 0xD0D9},{0x5309, 0x84FA},{0x530A, 0x84FB},{0x530B, 0x84FC},{0x530C, 0x84FD}, - {0x530D, 0xD9E9},{0x530E, 0x84FE},{0x530F, 0xDECB},{0x5310, 0xD9EB},{0x5311, 0x8540},{0x5312, 0x8541},{0x5313, 0x8542},{0x5314, 0x8543}, - {0x5315, 0xD8B0},{0x5316, 0xBBAF},{0x5317, 0xB1B1},{0x5318, 0x8544},{0x5319, 0xB3D7},{0x531A, 0xD8CE},{0x531B, 0x8545},{0x531C, 0x8546}, - {0x531D, 0xD4D1},{0x531E, 0x8547},{0x531F, 0x8548},{0x5320, 0xBDB3},{0x5321, 0xBFEF},{0x5322, 0x8549},{0x5323, 0xCFBB},{0x5324, 0x854A}, - {0x5325, 0x854B},{0x5326, 0xD8D0},{0x5327, 0x854C},{0x5328, 0x854D},{0x5329, 0x854E},{0x532A, 0xB7CB},{0x532B, 0x854F},{0x532C, 0x8550}, - {0x532D, 0x8551},{0x532E, 0xD8D1},{0x532F, 0x8552},{0x5330, 0x8553},{0x5331, 0x8554},{0x5332, 0x8555},{0x5333, 0x8556},{0x5334, 0x8557}, - {0x5335, 0x8558},{0x5336, 0x8559},{0x5337, 0x855A},{0x5338, 0x855B},{0x5339, 0xC6A5},{0x533A, 0xC7F8},{0x533B, 0xD2BD},{0x533C, 0x855C}, - {0x533D, 0x855D},{0x533E, 0xD8D2},{0x533F, 0xC4E4},{0x5340, 0x855E},{0x5341, 0xCAAE},{0x5342, 0x855F},{0x5343, 0xC7A7},{0x5344, 0x8560}, - {0x5345, 0xD8A6},{0x5346, 0x8561},{0x5347, 0xC9FD},{0x5348, 0xCEE7},{0x5349, 0xBBDC},{0x534A, 0xB0EB},{0x534B, 0x8562},{0x534C, 0x8563}, - {0x534D, 0x8564},{0x534E, 0xBBAA},{0x534F, 0xD0AD},{0x5350, 0x8565},{0x5351, 0xB1B0},{0x5352, 0xD7E4},{0x5353, 0xD7BF},{0x5354, 0x8566}, - {0x5355, 0xB5A5},{0x5356, 0xC2F4},{0x5357, 0xC4CF},{0x5358, 0x8567},{0x5359, 0x8568},{0x535A, 0xB2A9},{0x535B, 0x8569},{0x535C, 0xB2B7}, - {0x535D, 0x856A},{0x535E, 0xB1E5},{0x535F, 0xDFB2},{0x5360, 0xD5BC},{0x5361, 0xBFA8},{0x5362, 0xC2AC},{0x5363, 0xD8D5},{0x5364, 0xC2B1}, - {0x5365, 0x856B},{0x5366, 0xD8D4},{0x5367, 0xCED4},{0x5368, 0x856C},{0x5369, 0xDAE0},{0x536A, 0x856D},{0x536B, 0xCEC0},{0x536C, 0x856E}, - {0x536D, 0x856F},{0x536E, 0xD8B4},{0x536F, 0xC3AE},{0x5370, 0xD3A1},{0x5371, 0xCEA3},{0x5372, 0x8570},{0x5373, 0xBCB4},{0x5374, 0xC8B4}, - {0x5375, 0xC2D1},{0x5376, 0x8571},{0x5377, 0xBEED},{0x5378, 0xD0B6},{0x5379, 0x8572},{0x537A, 0xDAE1},{0x537B, 0x8573},{0x537C, 0x8574}, - {0x537D, 0x8575},{0x537E, 0x8576},{0x537F, 0xC7E4},{0x5380, 0x8577},{0x5381, 0x8578},{0x5382, 0xB3A7},{0x5383, 0x8579},{0x5384, 0xB6F2}, - {0x5385, 0xCCFC},{0x5386, 0xC0FA},{0x5387, 0x857A},{0x5388, 0x857B},{0x5389, 0xC0F7},{0x538A, 0x857C},{0x538B, 0xD1B9},{0x538C, 0xD1E1}, - {0x538D, 0xD8C7},{0x538E, 0x857D},{0x538F, 0x857E},{0x5390, 0x8580},{0x5391, 0x8581},{0x5392, 0x8582},{0x5393, 0x8583},{0x5394, 0x8584}, - {0x5395, 0xB2DE},{0x5396, 0x8585},{0x5397, 0x8586},{0x5398, 0xC0E5},{0x5399, 0x8587},{0x539A, 0xBAF1},{0x539B, 0x8588},{0x539C, 0x8589}, - {0x539D, 0xD8C8},{0x539E, 0x858A},{0x539F, 0xD4AD},{0x53A0, 0x858B},{0x53A1, 0x858C},{0x53A2, 0xCFE1},{0x53A3, 0xD8C9},{0x53A4, 0x858D}, - {0x53A5, 0xD8CA},{0x53A6, 0xCFC3},{0x53A7, 0x858E},{0x53A8, 0xB3F8},{0x53A9, 0xBEC7},{0x53AA, 0x858F},{0x53AB, 0x8590},{0x53AC, 0x8591}, - {0x53AD, 0x8592},{0x53AE, 0xD8CB},{0x53AF, 0x8593},{0x53B0, 0x8594},{0x53B1, 0x8595},{0x53B2, 0x8596},{0x53B3, 0x8597},{0x53B4, 0x8598}, - {0x53B5, 0x8599},{0x53B6, 0xDBCC},{0x53B7, 0x859A},{0x53B8, 0x859B},{0x53B9, 0x859C},{0x53BA, 0x859D},{0x53BB, 0xC8A5},{0x53BC, 0x859E}, - {0x53BD, 0x859F},{0x53BE, 0x85A0},{0x53BF, 0xCFD8},{0x53C0, 0x85A1},{0x53C1, 0xC8FE},{0x53C2, 0xB2CE},{0x53C3, 0x85A2},{0x53C4, 0x85A3}, - {0x53C5, 0x85A4},{0x53C6, 0x85A5},{0x53C7, 0x85A6},{0x53C8, 0xD3D6},{0x53C9, 0xB2E6},{0x53CA, 0xBCB0},{0x53CB, 0xD3D1},{0x53CC, 0xCBAB}, - {0x53CD, 0xB7B4},{0x53CE, 0x85A7},{0x53CF, 0x85A8},{0x53D0, 0x85A9},{0x53D1, 0xB7A2},{0x53D2, 0x85AA},{0x53D3, 0x85AB},{0x53D4, 0xCAE5}, - {0x53D5, 0x85AC},{0x53D6, 0xC8A1},{0x53D7, 0xCADC},{0x53D8, 0xB1E4},{0x53D9, 0xD0F0},{0x53DA, 0x85AD},{0x53DB, 0xC5D1},{0x53DC, 0x85AE}, - {0x53DD, 0x85AF},{0x53DE, 0x85B0},{0x53DF, 0xDBC5},{0x53E0, 0xB5FE},{0x53E1, 0x85B1},{0x53E2, 0x85B2},{0x53E3, 0xBFDA},{0x53E4, 0xB9C5}, - {0x53E5, 0xBEE4},{0x53E6, 0xC1ED},{0x53E7, 0x85B3},{0x53E8, 0xDFB6},{0x53E9, 0xDFB5},{0x53EA, 0xD6BB},{0x53EB, 0xBDD0},{0x53EC, 0xD5D9}, - {0x53ED, 0xB0C8},{0x53EE, 0xB6A3},{0x53EF, 0xBFC9},{0x53F0, 0xCCA8},{0x53F1, 0xDFB3},{0x53F2, 0xCAB7},{0x53F3, 0xD3D2},{0x53F4, 0x85B4}, - {0x53F5, 0xD8CF},{0x53F6, 0xD2B6},{0x53F7, 0xBAC5},{0x53F8, 0xCBBE},{0x53F9, 0xCCBE},{0x53FA, 0x85B5},{0x53FB, 0xDFB7},{0x53FC, 0xB5F0}, - {0x53FD, 0xDFB4},{0x53FE, 0x85B6},{0x53FF, 0x85B7},{0x5400, 0x85B8},{0x5401, 0xD3F5},{0x5402, 0x85B9},{0x5403, 0xB3D4},{0x5404, 0xB8F7}, - {0x5405, 0x85BA},{0x5406, 0xDFBA},{0x5407, 0x85BB},{0x5408, 0xBACF},{0x5409, 0xBCAA},{0x540A, 0xB5F5},{0x540B, 0x85BC},{0x540C, 0xCDAC}, - {0x540D, 0xC3FB},{0x540E, 0xBAF3},{0x540F, 0xC0F4},{0x5410, 0xCDC2},{0x5411, 0xCFF2},{0x5412, 0xDFB8},{0x5413, 0xCFC5},{0x5414, 0x85BD}, - {0x5415, 0xC2C0},{0x5416, 0xDFB9},{0x5417, 0xC2F0},{0x5418, 0x85BE},{0x5419, 0x85BF},{0x541A, 0x85C0},{0x541B, 0xBEFD},{0x541C, 0x85C1}, - {0x541D, 0xC1DF},{0x541E, 0xCDCC},{0x541F, 0xD2F7},{0x5420, 0xB7CD},{0x5421, 0xDFC1},{0x5422, 0x85C2},{0x5423, 0xDFC4},{0x5424, 0x85C3}, - {0x5425, 0x85C4},{0x5426, 0xB7F1},{0x5427, 0xB0C9},{0x5428, 0xB6D6},{0x5429, 0xB7D4},{0x542A, 0x85C5},{0x542B, 0xBAAC},{0x542C, 0xCCFD}, - {0x542D, 0xBFD4},{0x542E, 0xCBB1},{0x542F, 0xC6F4},{0x5430, 0x85C6},{0x5431, 0xD6A8},{0x5432, 0xDFC5},{0x5433, 0x85C7},{0x5434, 0xCEE2}, - {0x5435, 0xB3B3},{0x5436, 0x85C8},{0x5437, 0x85C9},{0x5438, 0xCEFC},{0x5439, 0xB4B5},{0x543A, 0x85CA},{0x543B, 0xCEC7},{0x543C, 0xBAF0}, - {0x543D, 0x85CB},{0x543E, 0xCEE1},{0x543F, 0x85CC},{0x5440, 0xD1BD},{0x5441, 0x85CD},{0x5442, 0x85CE},{0x5443, 0xDFC0},{0x5444, 0x85CF}, - {0x5445, 0x85D0},{0x5446, 0xB4F4},{0x5447, 0x85D1},{0x5448, 0xB3CA},{0x5449, 0x85D2},{0x544A, 0xB8E6},{0x544B, 0xDFBB},{0x544C, 0x85D3}, - {0x544D, 0x85D4},{0x544E, 0x85D5},{0x544F, 0x85D6},{0x5450, 0xC4C5},{0x5451, 0x85D7},{0x5452, 0xDFBC},{0x5453, 0xDFBD},{0x5454, 0xDFBE}, - {0x5455, 0xC5BB},{0x5456, 0xDFBF},{0x5457, 0xDFC2},{0x5458, 0xD4B1},{0x5459, 0xDFC3},{0x545A, 0x85D8},{0x545B, 0xC7BA},{0x545C, 0xCED8}, - {0x545D, 0x85D9},{0x545E, 0x85DA},{0x545F, 0x85DB},{0x5460, 0x85DC},{0x5461, 0x85DD},{0x5462, 0xC4D8},{0x5463, 0x85DE},{0x5464, 0xDFCA}, - {0x5465, 0x85DF},{0x5466, 0xDFCF},{0x5467, 0x85E0},{0x5468, 0xD6DC},{0x5469, 0x85E1},{0x546A, 0x85E2},{0x546B, 0x85E3},{0x546C, 0x85E4}, - {0x546D, 0x85E5},{0x546E, 0x85E6},{0x546F, 0x85E7},{0x5470, 0x85E8},{0x5471, 0xDFC9},{0x5472, 0xDFDA},{0x5473, 0xCEB6},{0x5474, 0x85E9}, - {0x5475, 0xBAC7},{0x5476, 0xDFCE},{0x5477, 0xDFC8},{0x5478, 0xC5DE},{0x5479, 0x85EA},{0x547A, 0x85EB},{0x547B, 0xC9EB},{0x547C, 0xBAF4}, - {0x547D, 0xC3FC},{0x547E, 0x85EC},{0x547F, 0x85ED},{0x5480, 0xBED7},{0x5481, 0x85EE},{0x5482, 0xDFC6},{0x5483, 0x85EF},{0x5484, 0xDFCD}, - {0x5485, 0x85F0},{0x5486, 0xC5D8},{0x5487, 0x85F1},{0x5488, 0x85F2},{0x5489, 0x85F3},{0x548A, 0x85F4},{0x548B, 0xD5A6},{0x548C, 0xBACD}, - {0x548D, 0x85F5},{0x548E, 0xBECC},{0x548F, 0xD3BD},{0x5490, 0xB8C0},{0x5491, 0x85F6},{0x5492, 0xD6E4},{0x5493, 0x85F7},{0x5494, 0xDFC7}, - {0x5495, 0xB9BE},{0x5496, 0xBFA7},{0x5497, 0x85F8},{0x5498, 0x85F9},{0x5499, 0xC1FC},{0x549A, 0xDFCB},{0x549B, 0xDFCC},{0x549C, 0x85FA}, - {0x549D, 0xDFD0},{0x549E, 0x85FB},{0x549F, 0x85FC},{0x54A0, 0x85FD},{0x54A1, 0x85FE},{0x54A2, 0x8640},{0x54A3, 0xDFDB},{0x54A4, 0xDFE5}, - {0x54A5, 0x8641},{0x54A6, 0xDFD7},{0x54A7, 0xDFD6},{0x54A8, 0xD7C9},{0x54A9, 0xDFE3},{0x54AA, 0xDFE4},{0x54AB, 0xE5EB},{0x54AC, 0xD2A7}, - {0x54AD, 0xDFD2},{0x54AE, 0x8642},{0x54AF, 0xBFA9},{0x54B0, 0x8643},{0x54B1, 0xD4DB},{0x54B2, 0x8644},{0x54B3, 0xBFC8},{0x54B4, 0xDFD4}, - {0x54B5, 0x8645},{0x54B6, 0x8646},{0x54B7, 0x8647},{0x54B8, 0xCFCC},{0x54B9, 0x8648},{0x54BA, 0x8649},{0x54BB, 0xDFDD},{0x54BC, 0x864A}, - {0x54BD, 0xD1CA},{0x54BE, 0x864B},{0x54BF, 0xDFDE},{0x54C0, 0xB0A7},{0x54C1, 0xC6B7},{0x54C2, 0xDFD3},{0x54C3, 0x864C},{0x54C4, 0xBAE5}, - {0x54C5, 0x864D},{0x54C6, 0xB6DF},{0x54C7, 0xCDDB},{0x54C8, 0xB9FE},{0x54C9, 0xD4D5},{0x54CA, 0x864E},{0x54CB, 0x864F},{0x54CC, 0xDFDF}, - {0x54CD, 0xCFEC},{0x54CE, 0xB0A5},{0x54CF, 0xDFE7},{0x54D0, 0xDFD1},{0x54D1, 0xD1C6},{0x54D2, 0xDFD5},{0x54D3, 0xDFD8},{0x54D4, 0xDFD9}, - {0x54D5, 0xDFDC},{0x54D6, 0x8650},{0x54D7, 0xBBA9},{0x54D8, 0x8651},{0x54D9, 0xDFE0},{0x54DA, 0xDFE1},{0x54DB, 0x8652},{0x54DC, 0xDFE2}, - {0x54DD, 0xDFE6},{0x54DE, 0xDFE8},{0x54DF, 0xD3B4},{0x54E0, 0x8653},{0x54E1, 0x8654},{0x54E2, 0x8655},{0x54E3, 0x8656},{0x54E4, 0x8657}, - {0x54E5, 0xB8E7},{0x54E6, 0xC5B6},{0x54E7, 0xDFEA},{0x54E8, 0xC9DA},{0x54E9, 0xC1A8},{0x54EA, 0xC4C4},{0x54EB, 0x8658},{0x54EC, 0x8659}, - {0x54ED, 0xBFDE},{0x54EE, 0xCFF8},{0x54EF, 0x865A},{0x54F0, 0x865B},{0x54F1, 0x865C},{0x54F2, 0xD5DC},{0x54F3, 0xDFEE},{0x54F4, 0x865D}, - {0x54F5, 0x865E},{0x54F6, 0x865F},{0x54F7, 0x8660},{0x54F8, 0x8661},{0x54F9, 0x8662},{0x54FA, 0xB2B8},{0x54FB, 0x8663},{0x54FC, 0xBADF}, - {0x54FD, 0xDFEC},{0x54FE, 0x8664},{0x54FF, 0xDBC1},{0x5500, 0x8665},{0x5501, 0xD1E4},{0x5502, 0x8666},{0x5503, 0x8667},{0x5504, 0x8668}, - {0x5505, 0x8669},{0x5506, 0xCBF4},{0x5507, 0xB4BD},{0x5508, 0x866A},{0x5509, 0xB0A6},{0x550A, 0x866B},{0x550B, 0x866C},{0x550C, 0x866D}, - {0x550D, 0x866E},{0x550E, 0x866F},{0x550F, 0xDFF1},{0x5510, 0xCCC6},{0x5511, 0xDFF2},{0x5512, 0x8670},{0x5513, 0x8671},{0x5514, 0xDFED}, - {0x5515, 0x8672},{0x5516, 0x8673},{0x5517, 0x8674},{0x5518, 0x8675},{0x5519, 0x8676},{0x551A, 0x8677},{0x551B, 0xDFE9},{0x551C, 0x8678}, - {0x551D, 0x8679},{0x551E, 0x867A},{0x551F, 0x867B},{0x5520, 0xDFEB},{0x5521, 0x867C},{0x5522, 0xDFEF},{0x5523, 0xDFF0},{0x5524, 0xBBBD}, - {0x5525, 0x867D},{0x5526, 0x867E},{0x5527, 0xDFF3},{0x5528, 0x8680},{0x5529, 0x8681},{0x552A, 0xDFF4},{0x552B, 0x8682},{0x552C, 0xBBA3}, - {0x552D, 0x8683},{0x552E, 0xCADB},{0x552F, 0xCEA8},{0x5530, 0xE0A7},{0x5531, 0xB3AA},{0x5532, 0x8684},{0x5533, 0xE0A6},{0x5534, 0x8685}, - {0x5535, 0x8686},{0x5536, 0x8687},{0x5537, 0xE0A1},{0x5538, 0x8688},{0x5539, 0x8689},{0x553A, 0x868A},{0x553B, 0x868B},{0x553C, 0xDFFE}, - {0x553D, 0x868C},{0x553E, 0xCDD9},{0x553F, 0xDFFC},{0x5540, 0x868D},{0x5541, 0xDFFA},{0x5542, 0x868E},{0x5543, 0xBFD0},{0x5544, 0xD7C4}, - {0x5545, 0x868F},{0x5546, 0xC9CC},{0x5547, 0x8690},{0x5548, 0x8691},{0x5549, 0xDFF8},{0x554A, 0xB0A1},{0x554B, 0x8692},{0x554C, 0x8693}, - {0x554D, 0x8694},{0x554E, 0x8695},{0x554F, 0x8696},{0x5550, 0xDFFD},{0x5551, 0x8697},{0x5552, 0x8698},{0x5553, 0x8699},{0x5554, 0x869A}, - {0x5555, 0xDFFB},{0x5556, 0xE0A2},{0x5557, 0x869B},{0x5558, 0x869C},{0x5559, 0x869D},{0x555A, 0x869E},{0x555B, 0x869F},{0x555C, 0xE0A8}, - {0x555D, 0x86A0},{0x555E, 0x86A1},{0x555F, 0x86A2},{0x5560, 0x86A3},{0x5561, 0xB7C8},{0x5562, 0x86A4},{0x5563, 0x86A5},{0x5564, 0xC6A1}, - {0x5565, 0xC9B6},{0x5566, 0xC0B2},{0x5567, 0xDFF5},{0x5568, 0x86A6},{0x5569, 0x86A7},{0x556A, 0xC5BE},{0x556B, 0x86A8},{0x556C, 0xD8C4}, - {0x556D, 0xDFF9},{0x556E, 0xC4F6},{0x556F, 0x86A9},{0x5570, 0x86AA},{0x5571, 0x86AB},{0x5572, 0x86AC},{0x5573, 0x86AD},{0x5574, 0x86AE}, - {0x5575, 0xE0A3},{0x5576, 0xE0A4},{0x5577, 0xE0A5},{0x5578, 0xD0A5},{0x5579, 0x86AF},{0x557A, 0x86B0},{0x557B, 0xE0B4},{0x557C, 0xCCE4}, - {0x557D, 0x86B1},{0x557E, 0xE0B1},{0x557F, 0x86B2},{0x5580, 0xBFA6},{0x5581, 0xE0AF},{0x5582, 0xCEB9},{0x5583, 0xE0AB},{0x5584, 0xC9C6}, - {0x5585, 0x86B3},{0x5586, 0x86B4},{0x5587, 0xC0AE},{0x5588, 0xE0AE},{0x5589, 0xBAED},{0x558A, 0xBAB0},{0x558B, 0xE0A9},{0x558C, 0x86B5}, - {0x558D, 0x86B6},{0x558E, 0x86B7},{0x558F, 0xDFF6},{0x5590, 0x86B8},{0x5591, 0xE0B3},{0x5592, 0x86B9},{0x5593, 0x86BA},{0x5594, 0xE0B8}, - {0x5595, 0x86BB},{0x5596, 0x86BC},{0x5597, 0x86BD},{0x5598, 0xB4AD},{0x5599, 0xE0B9},{0x559A, 0x86BE},{0x559B, 0x86BF},{0x559C, 0xCFB2}, - {0x559D, 0xBAC8},{0x559E, 0x86C0},{0x559F, 0xE0B0},{0x55A0, 0x86C1},{0x55A1, 0x86C2},{0x55A2, 0x86C3},{0x55A3, 0x86C4},{0x55A4, 0x86C5}, - {0x55A5, 0x86C6},{0x55A6, 0x86C7},{0x55A7, 0xD0FA},{0x55A8, 0x86C8},{0x55A9, 0x86C9},{0x55AA, 0x86CA},{0x55AB, 0x86CB},{0x55AC, 0x86CC}, - {0x55AD, 0x86CD},{0x55AE, 0x86CE},{0x55AF, 0x86CF},{0x55B0, 0x86D0},{0x55B1, 0xE0AC},{0x55B2, 0x86D1},{0x55B3, 0xD4FB},{0x55B4, 0x86D2}, - {0x55B5, 0xDFF7},{0x55B6, 0x86D3},{0x55B7, 0xC5E7},{0x55B8, 0x86D4},{0x55B9, 0xE0AD},{0x55BA, 0x86D5},{0x55BB, 0xD3F7},{0x55BC, 0x86D6}, - {0x55BD, 0xE0B6},{0x55BE, 0xE0B7},{0x55BF, 0x86D7},{0x55C0, 0x86D8},{0x55C1, 0x86D9},{0x55C2, 0x86DA},{0x55C3, 0x86DB},{0x55C4, 0xE0C4}, - {0x55C5, 0xD0E1},{0x55C6, 0x86DC},{0x55C7, 0x86DD},{0x55C8, 0x86DE},{0x55C9, 0xE0BC},{0x55CA, 0x86DF},{0x55CB, 0x86E0},{0x55CC, 0xE0C9}, - {0x55CD, 0xE0CA},{0x55CE, 0x86E1},{0x55CF, 0x86E2},{0x55D0, 0x86E3},{0x55D1, 0xE0BE},{0x55D2, 0xE0AA},{0x55D3, 0xC9A4},{0x55D4, 0xE0C1}, - {0x55D5, 0x86E4},{0x55D6, 0xE0B2},{0x55D7, 0x86E5},{0x55D8, 0x86E6},{0x55D9, 0x86E7},{0x55DA, 0x86E8},{0x55DB, 0x86E9},{0x55DC, 0xCAC8}, - {0x55DD, 0xE0C3},{0x55DE, 0x86EA},{0x55DF, 0xE0B5},{0x55E0, 0x86EB},{0x55E1, 0xCECB},{0x55E2, 0x86EC},{0x55E3, 0xCBC3},{0x55E4, 0xE0CD}, - {0x55E5, 0xE0C6},{0x55E6, 0xE0C2},{0x55E7, 0x86ED},{0x55E8, 0xE0CB},{0x55E9, 0x86EE},{0x55EA, 0xE0BA},{0x55EB, 0xE0BF},{0x55EC, 0xE0C0}, - {0x55ED, 0x86EF},{0x55EE, 0x86F0},{0x55EF, 0xE0C5},{0x55F0, 0x86F1},{0x55F1, 0x86F2},{0x55F2, 0xE0C7},{0x55F3, 0xE0C8},{0x55F4, 0x86F3}, - {0x55F5, 0xE0CC},{0x55F6, 0x86F4},{0x55F7, 0xE0BB},{0x55F8, 0x86F5},{0x55F9, 0x86F6},{0x55FA, 0x86F7},{0x55FB, 0x86F8},{0x55FC, 0x86F9}, - {0x55FD, 0xCBD4},{0x55FE, 0xE0D5},{0x55FF, 0x86FA},{0x5600, 0xE0D6},{0x5601, 0xE0D2},{0x5602, 0x86FB},{0x5603, 0x86FC},{0x5604, 0x86FD}, - {0x5605, 0x86FE},{0x5606, 0x8740},{0x5607, 0x8741},{0x5608, 0xE0D0},{0x5609, 0xBCCE},{0x560A, 0x8742},{0x560B, 0x8743},{0x560C, 0xE0D1}, - {0x560D, 0x8744},{0x560E, 0xB8C2},{0x560F, 0xD8C5},{0x5610, 0x8745},{0x5611, 0x8746},{0x5612, 0x8747},{0x5613, 0x8748},{0x5614, 0x8749}, - {0x5615, 0x874A},{0x5616, 0x874B},{0x5617, 0x874C},{0x5618, 0xD0EA},{0x5619, 0x874D},{0x561A, 0x874E},{0x561B, 0xC2EF},{0x561C, 0x874F}, - {0x561D, 0x8750},{0x561E, 0xE0CF},{0x561F, 0xE0BD},{0x5620, 0x8751},{0x5621, 0x8752},{0x5622, 0x8753},{0x5623, 0xE0D4},{0x5624, 0xE0D3}, - {0x5625, 0x8754},{0x5626, 0x8755},{0x5627, 0xE0D7},{0x5628, 0x8756},{0x5629, 0x8757},{0x562A, 0x8758},{0x562B, 0x8759},{0x562C, 0xE0DC}, - {0x562D, 0xE0D8},{0x562E, 0x875A},{0x562F, 0x875B},{0x5630, 0x875C},{0x5631, 0xD6F6},{0x5632, 0xB3B0},{0x5633, 0x875D},{0x5634, 0xD7EC}, - {0x5635, 0x875E},{0x5636, 0xCBBB},{0x5637, 0x875F},{0x5638, 0x8760},{0x5639, 0xE0DA},{0x563A, 0x8761},{0x563B, 0xCEFB},{0x563C, 0x8762}, - {0x563D, 0x8763},{0x563E, 0x8764},{0x563F, 0xBAD9},{0x5640, 0x8765},{0x5641, 0x8766},{0x5642, 0x8767},{0x5643, 0x8768},{0x5644, 0x8769}, - {0x5645, 0x876A},{0x5646, 0x876B},{0x5647, 0x876C},{0x5648, 0x876D},{0x5649, 0x876E},{0x564A, 0x876F},{0x564B, 0x8770},{0x564C, 0xE0E1}, - {0x564D, 0xE0DD},{0x564E, 0xD2AD},{0x564F, 0x8771},{0x5650, 0x8772},{0x5651, 0x8773},{0x5652, 0x8774},{0x5653, 0x8775},{0x5654, 0xE0E2}, - {0x5655, 0x8776},{0x5656, 0x8777},{0x5657, 0xE0DB},{0x5658, 0xE0D9},{0x5659, 0xE0DF},{0x565A, 0x8778},{0x565B, 0x8779},{0x565C, 0xE0E0}, - {0x565D, 0x877A},{0x565E, 0x877B},{0x565F, 0x877C},{0x5660, 0x877D},{0x5661, 0x877E},{0x5662, 0xE0DE},{0x5663, 0x8780},{0x5664, 0xE0E4}, - {0x5665, 0x8781},{0x5666, 0x8782},{0x5667, 0x8783},{0x5668, 0xC6F7},{0x5669, 0xD8AC},{0x566A, 0xD4EB},{0x566B, 0xE0E6},{0x566C, 0xCAC9}, - {0x566D, 0x8784},{0x566E, 0x8785},{0x566F, 0x8786},{0x5670, 0x8787},{0x5671, 0xE0E5},{0x5672, 0x8788},{0x5673, 0x8789},{0x5674, 0x878A}, - {0x5675, 0x878B},{0x5676, 0xB8C1},{0x5677, 0x878C},{0x5678, 0x878D},{0x5679, 0x878E},{0x567A, 0x878F},{0x567B, 0xE0E7},{0x567C, 0xE0E8}, - {0x567D, 0x8790},{0x567E, 0x8791},{0x567F, 0x8792},{0x5680, 0x8793},{0x5681, 0x8794},{0x5682, 0x8795},{0x5683, 0x8796},{0x5684, 0x8797}, - {0x5685, 0xE0E9},{0x5686, 0xE0E3},{0x5687, 0x8798},{0x5688, 0x8799},{0x5689, 0x879A},{0x568A, 0x879B},{0x568B, 0x879C},{0x568C, 0x879D}, - {0x568D, 0x879E},{0x568E, 0xBABF},{0x568F, 0xCCE7},{0x5690, 0x879F},{0x5691, 0x87A0},{0x5692, 0x87A1},{0x5693, 0xE0EA},{0x5694, 0x87A2}, - {0x5695, 0x87A3},{0x5696, 0x87A4},{0x5697, 0x87A5},{0x5698, 0x87A6},{0x5699, 0x87A7},{0x569A, 0x87A8},{0x569B, 0x87A9},{0x569C, 0x87AA}, - {0x569D, 0x87AB},{0x569E, 0x87AC},{0x569F, 0x87AD},{0x56A0, 0x87AE},{0x56A1, 0x87AF},{0x56A2, 0x87B0},{0x56A3, 0xCFF9},{0x56A4, 0x87B1}, - {0x56A5, 0x87B2},{0x56A6, 0x87B3},{0x56A7, 0x87B4},{0x56A8, 0x87B5},{0x56A9, 0x87B6},{0x56AA, 0x87B7},{0x56AB, 0x87B8},{0x56AC, 0x87B9}, - {0x56AD, 0x87BA},{0x56AE, 0x87BB},{0x56AF, 0xE0EB},{0x56B0, 0x87BC},{0x56B1, 0x87BD},{0x56B2, 0x87BE},{0x56B3, 0x87BF},{0x56B4, 0x87C0}, - {0x56B5, 0x87C1},{0x56B6, 0x87C2},{0x56B7, 0xC8C2},{0x56B8, 0x87C3},{0x56B9, 0x87C4},{0x56BA, 0x87C5},{0x56BB, 0x87C6},{0x56BC, 0xBDC0}, - {0x56BD, 0x87C7},{0x56BE, 0x87C8},{0x56BF, 0x87C9},{0x56C0, 0x87CA},{0x56C1, 0x87CB},{0x56C2, 0x87CC},{0x56C3, 0x87CD},{0x56C4, 0x87CE}, - {0x56C5, 0x87CF},{0x56C6, 0x87D0},{0x56C7, 0x87D1},{0x56C8, 0x87D2},{0x56C9, 0x87D3},{0x56CA, 0xC4D2},{0x56CB, 0x87D4},{0x56CC, 0x87D5}, - {0x56CD, 0x87D6},{0x56CE, 0x87D7},{0x56CF, 0x87D8},{0x56D0, 0x87D9},{0x56D1, 0x87DA},{0x56D2, 0x87DB},{0x56D3, 0x87DC},{0x56D4, 0xE0EC}, - {0x56D5, 0x87DD},{0x56D6, 0x87DE},{0x56D7, 0xE0ED},{0x56D8, 0x87DF},{0x56D9, 0x87E0},{0x56DA, 0xC7F4},{0x56DB, 0xCBC4},{0x56DC, 0x87E1}, - {0x56DD, 0xE0EE},{0x56DE, 0xBBD8},{0x56DF, 0xD8B6},{0x56E0, 0xD2F2},{0x56E1, 0xE0EF},{0x56E2, 0xCDC5},{0x56E3, 0x87E2},{0x56E4, 0xB6DA}, - {0x56E5, 0x87E3},{0x56E6, 0x87E4},{0x56E7, 0x87E5},{0x56E8, 0x87E6},{0x56E9, 0x87E7},{0x56EA, 0x87E8},{0x56EB, 0xE0F1},{0x56EC, 0x87E9}, - {0x56ED, 0xD4B0},{0x56EE, 0x87EA},{0x56EF, 0x87EB},{0x56F0, 0xC0A7},{0x56F1, 0xB4D1},{0x56F2, 0x87EC},{0x56F3, 0x87ED},{0x56F4, 0xCEA7}, - {0x56F5, 0xE0F0},{0x56F6, 0x87EE},{0x56F7, 0x87EF},{0x56F8, 0x87F0},{0x56F9, 0xE0F2},{0x56FA, 0xB9CC},{0x56FB, 0x87F1},{0x56FC, 0x87F2}, - {0x56FD, 0xB9FA},{0x56FE, 0xCDBC},{0x56FF, 0xE0F3},{0x5700, 0x87F3},{0x5701, 0x87F4},{0x5702, 0x87F5},{0x5703, 0xC6D4},{0x5704, 0xE0F4}, - {0x5705, 0x87F6},{0x5706, 0xD4B2},{0x5707, 0x87F7},{0x5708, 0xC8A6},{0x5709, 0xE0F6},{0x570A, 0xE0F5},{0x570B, 0x87F8},{0x570C, 0x87F9}, - {0x570D, 0x87FA},{0x570E, 0x87FB},{0x570F, 0x87FC},{0x5710, 0x87FD},{0x5711, 0x87FE},{0x5712, 0x8840},{0x5713, 0x8841},{0x5714, 0x8842}, - {0x5715, 0x8843},{0x5716, 0x8844},{0x5717, 0x8845},{0x5718, 0x8846},{0x5719, 0x8847},{0x571A, 0x8848},{0x571B, 0x8849},{0x571C, 0xE0F7}, - {0x571D, 0x884A},{0x571E, 0x884B},{0x571F, 0xCDC1},{0x5720, 0x884C},{0x5721, 0x884D},{0x5722, 0x884E},{0x5723, 0xCAA5},{0x5724, 0x884F}, - {0x5725, 0x8850},{0x5726, 0x8851},{0x5727, 0x8852},{0x5728, 0xD4DA},{0x5729, 0xDBD7},{0x572A, 0xDBD9},{0x572B, 0x8853},{0x572C, 0xDBD8}, - {0x572D, 0xB9E7},{0x572E, 0xDBDC},{0x572F, 0xDBDD},{0x5730, 0xB5D8},{0x5731, 0x8854},{0x5732, 0x8855},{0x5733, 0xDBDA},{0x5734, 0x8856}, - {0x5735, 0x8857},{0x5736, 0x8858},{0x5737, 0x8859},{0x5738, 0x885A},{0x5739, 0xDBDB},{0x573A, 0xB3A1},{0x573B, 0xDBDF},{0x573C, 0x885B}, - {0x573D, 0x885C},{0x573E, 0xBBF8},{0x573F, 0x885D},{0x5740, 0xD6B7},{0x5741, 0x885E},{0x5742, 0xDBE0},{0x5743, 0x885F},{0x5744, 0x8860}, - {0x5745, 0x8861},{0x5746, 0x8862},{0x5747, 0xBEF9},{0x5748, 0x8863},{0x5749, 0x8864},{0x574A, 0xB7BB},{0x574B, 0x8865},{0x574C, 0xDBD0}, - {0x574D, 0xCCAE},{0x574E, 0xBFB2},{0x574F, 0xBBB5},{0x5750, 0xD7F8},{0x5751, 0xBFD3},{0x5752, 0x8866},{0x5753, 0x8867},{0x5754, 0x8868}, - {0x5755, 0x8869},{0x5756, 0x886A},{0x5757, 0xBFE9},{0x5758, 0x886B},{0x5759, 0x886C},{0x575A, 0xBCE1},{0x575B, 0xCCB3},{0x575C, 0xDBDE}, - {0x575D, 0xB0D3},{0x575E, 0xCEEB},{0x575F, 0xB7D8},{0x5760, 0xD7B9},{0x5761, 0xC6C2},{0x5762, 0x886D},{0x5763, 0x886E},{0x5764, 0xC0A4}, - {0x5765, 0x886F},{0x5766, 0xCCB9},{0x5767, 0x8870},{0x5768, 0xDBE7},{0x5769, 0xDBE1},{0x576A, 0xC6BA},{0x576B, 0xDBE3},{0x576C, 0x8871}, - {0x576D, 0xDBE8},{0x576E, 0x8872},{0x576F, 0xC5F7},{0x5770, 0x8873},{0x5771, 0x8874},{0x5772, 0x8875},{0x5773, 0xDBEA},{0x5774, 0x8876}, - {0x5775, 0x8877},{0x5776, 0xDBE9},{0x5777, 0xBFC0},{0x5778, 0x8878},{0x5779, 0x8879},{0x577A, 0x887A},{0x577B, 0xDBE6},{0x577C, 0xDBE5}, - {0x577D, 0x887B},{0x577E, 0x887C},{0x577F, 0x887D},{0x5780, 0x887E},{0x5781, 0x8880},{0x5782, 0xB4B9},{0x5783, 0xC0AC},{0x5784, 0xC2A2}, - {0x5785, 0xDBE2},{0x5786, 0xDBE4},{0x5787, 0x8881},{0x5788, 0x8882},{0x5789, 0x8883},{0x578A, 0x8884},{0x578B, 0xD0CD},{0x578C, 0xDBED}, - {0x578D, 0x8885},{0x578E, 0x8886},{0x578F, 0x8887},{0x5790, 0x8888},{0x5791, 0x8889},{0x5792, 0xC0DD},{0x5793, 0xDBF2},{0x5794, 0x888A}, - {0x5795, 0x888B},{0x5796, 0x888C},{0x5797, 0x888D},{0x5798, 0x888E},{0x5799, 0x888F},{0x579A, 0x8890},{0x579B, 0xB6E2},{0x579C, 0x8891}, - {0x579D, 0x8892},{0x579E, 0x8893},{0x579F, 0x8894},{0x57A0, 0xDBF3},{0x57A1, 0xDBD2},{0x57A2, 0xB9B8},{0x57A3, 0xD4AB},{0x57A4, 0xDBEC}, - {0x57A5, 0x8895},{0x57A6, 0xBFD1},{0x57A7, 0xDBF0},{0x57A8, 0x8896},{0x57A9, 0xDBD1},{0x57AA, 0x8897},{0x57AB, 0xB5E6},{0x57AC, 0x8898}, - {0x57AD, 0xDBEB},{0x57AE, 0xBFE5},{0x57AF, 0x8899},{0x57B0, 0x889A},{0x57B1, 0x889B},{0x57B2, 0xDBEE},{0x57B3, 0x889C},{0x57B4, 0xDBF1}, - {0x57B5, 0x889D},{0x57B6, 0x889E},{0x57B7, 0x889F},{0x57B8, 0xDBF9},{0x57B9, 0x88A0},{0x57BA, 0x88A1},{0x57BB, 0x88A2},{0x57BC, 0x88A3}, - {0x57BD, 0x88A4},{0x57BE, 0x88A5},{0x57BF, 0x88A6},{0x57C0, 0x88A7},{0x57C1, 0x88A8},{0x57C2, 0xB9A1},{0x57C3, 0xB0A3},{0x57C4, 0x88A9}, - {0x57C5, 0x88AA},{0x57C6, 0x88AB},{0x57C7, 0x88AC},{0x57C8, 0x88AD},{0x57C9, 0x88AE},{0x57CA, 0x88AF},{0x57CB, 0xC2F1},{0x57CC, 0x88B0}, - {0x57CD, 0x88B1},{0x57CE, 0xB3C7},{0x57CF, 0xDBEF},{0x57D0, 0x88B2},{0x57D1, 0x88B3},{0x57D2, 0xDBF8},{0x57D3, 0x88B4},{0x57D4, 0xC6D2}, - {0x57D5, 0xDBF4},{0x57D6, 0x88B5},{0x57D7, 0x88B6},{0x57D8, 0xDBF5},{0x57D9, 0xDBF7},{0x57DA, 0xDBF6},{0x57DB, 0x88B7},{0x57DC, 0x88B8}, - {0x57DD, 0xDBFE},{0x57DE, 0x88B9},{0x57DF, 0xD3F2},{0x57E0, 0xB2BA},{0x57E1, 0x88BA},{0x57E2, 0x88BB},{0x57E3, 0x88BC},{0x57E4, 0xDBFD}, - {0x57E5, 0x88BD},{0x57E6, 0x88BE},{0x57E7, 0x88BF},{0x57E8, 0x88C0},{0x57E9, 0x88C1},{0x57EA, 0x88C2},{0x57EB, 0x88C3},{0x57EC, 0x88C4}, - {0x57ED, 0xDCA4},{0x57EE, 0x88C5},{0x57EF, 0xDBFB},{0x57F0, 0x88C6},{0x57F1, 0x88C7},{0x57F2, 0x88C8},{0x57F3, 0x88C9},{0x57F4, 0xDBFA}, - {0x57F5, 0x88CA},{0x57F6, 0x88CB},{0x57F7, 0x88CC},{0x57F8, 0xDBFC},{0x57F9, 0xC5E0},{0x57FA, 0xBBF9},{0x57FB, 0x88CD},{0x57FC, 0x88CE}, - {0x57FD, 0xDCA3},{0x57FE, 0x88CF},{0x57FF, 0x88D0},{0x5800, 0xDCA5},{0x5801, 0x88D1},{0x5802, 0xCCC3},{0x5803, 0x88D2},{0x5804, 0x88D3}, - {0x5805, 0x88D4},{0x5806, 0xB6D1},{0x5807, 0xDDC0},{0x5808, 0x88D5},{0x5809, 0x88D6},{0x580A, 0x88D7},{0x580B, 0xDCA1},{0x580C, 0x88D8}, - {0x580D, 0xDCA2},{0x580E, 0x88D9},{0x580F, 0x88DA},{0x5810, 0x88DB},{0x5811, 0xC7B5},{0x5812, 0x88DC},{0x5813, 0x88DD},{0x5814, 0x88DE}, - {0x5815, 0xB6E9},{0x5816, 0x88DF},{0x5817, 0x88E0},{0x5818, 0x88E1},{0x5819, 0xDCA7},{0x581A, 0x88E2},{0x581B, 0x88E3},{0x581C, 0x88E4}, - {0x581D, 0x88E5},{0x581E, 0xDCA6},{0x581F, 0x88E6},{0x5820, 0xDCA9},{0x5821, 0xB1A4},{0x5822, 0x88E7},{0x5823, 0x88E8},{0x5824, 0xB5CC}, - {0x5825, 0x88E9},{0x5826, 0x88EA},{0x5827, 0x88EB},{0x5828, 0x88EC},{0x5829, 0x88ED},{0x582A, 0xBFB0},{0x582B, 0x88EE},{0x582C, 0x88EF}, - {0x582D, 0x88F0},{0x582E, 0x88F1},{0x582F, 0x88F2},{0x5830, 0xD1DF},{0x5831, 0x88F3},{0x5832, 0x88F4},{0x5833, 0x88F5},{0x5834, 0x88F6}, - {0x5835, 0xB6C2},{0x5836, 0x88F7},{0x5837, 0x88F8},{0x5838, 0x88F9},{0x5839, 0x88FA},{0x583A, 0x88FB},{0x583B, 0x88FC},{0x583C, 0x88FD}, - {0x583D, 0x88FE},{0x583E, 0x8940},{0x583F, 0x8941},{0x5840, 0x8942},{0x5841, 0x8943},{0x5842, 0x8944},{0x5843, 0x8945},{0x5844, 0xDCA8}, - {0x5845, 0x8946},{0x5846, 0x8947},{0x5847, 0x8948},{0x5848, 0x8949},{0x5849, 0x894A},{0x584A, 0x894B},{0x584B, 0x894C},{0x584C, 0xCBFA}, - {0x584D, 0xEBF3},{0x584E, 0x894D},{0x584F, 0x894E},{0x5850, 0x894F},{0x5851, 0xCBDC},{0x5852, 0x8950},{0x5853, 0x8951},{0x5854, 0xCBFE}, - {0x5855, 0x8952},{0x5856, 0x8953},{0x5857, 0x8954},{0x5858, 0xCCC1},{0x5859, 0x8955},{0x585A, 0x8956},{0x585B, 0x8957},{0x585C, 0x8958}, - {0x585D, 0x8959},{0x585E, 0xC8FB},{0x585F, 0x895A},{0x5860, 0x895B},{0x5861, 0x895C},{0x5862, 0x895D},{0x5863, 0x895E},{0x5864, 0x895F}, - {0x5865, 0xDCAA},{0x5866, 0x8960},{0x5867, 0x8961},{0x5868, 0x8962},{0x5869, 0x8963},{0x586A, 0x8964},{0x586B, 0xCCEE},{0x586C, 0xDCAB}, - {0x586D, 0x8965},{0x586E, 0x8966},{0x586F, 0x8967},{0x5870, 0x8968},{0x5871, 0x8969},{0x5872, 0x896A},{0x5873, 0x896B},{0x5874, 0x896C}, - {0x5875, 0x896D},{0x5876, 0x896E},{0x5877, 0x896F},{0x5878, 0x8970},{0x5879, 0x8971},{0x587A, 0x8972},{0x587B, 0x8973},{0x587C, 0x8974}, - {0x587D, 0x8975},{0x587E, 0xDBD3},{0x587F, 0x8976},{0x5880, 0xDCAF},{0x5881, 0xDCAC},{0x5882, 0x8977},{0x5883, 0xBEB3},{0x5884, 0x8978}, - {0x5885, 0xCAFB},{0x5886, 0x8979},{0x5887, 0x897A},{0x5888, 0x897B},{0x5889, 0xDCAD},{0x588A, 0x897C},{0x588B, 0x897D},{0x588C, 0x897E}, - {0x588D, 0x8980},{0x588E, 0x8981},{0x588F, 0x8982},{0x5890, 0x8983},{0x5891, 0x8984},{0x5892, 0xC9CA},{0x5893, 0xC4B9},{0x5894, 0x8985}, - {0x5895, 0x8986},{0x5896, 0x8987},{0x5897, 0x8988},{0x5898, 0x8989},{0x5899, 0xC7BD},{0x589A, 0xDCAE},{0x589B, 0x898A},{0x589C, 0x898B}, - {0x589D, 0x898C},{0x589E, 0xD4F6},{0x589F, 0xD0E6},{0x58A0, 0x898D},{0x58A1, 0x898E},{0x58A2, 0x898F},{0x58A3, 0x8990},{0x58A4, 0x8991}, - {0x58A5, 0x8992},{0x58A6, 0x8993},{0x58A7, 0x8994},{0x58A8, 0xC4AB},{0x58A9, 0xB6D5},{0x58AA, 0x8995},{0x58AB, 0x8996},{0x58AC, 0x8997}, - {0x58AD, 0x8998},{0x58AE, 0x8999},{0x58AF, 0x899A},{0x58B0, 0x899B},{0x58B1, 0x899C},{0x58B2, 0x899D},{0x58B3, 0x899E},{0x58B4, 0x899F}, - {0x58B5, 0x89A0},{0x58B6, 0x89A1},{0x58B7, 0x89A2},{0x58B8, 0x89A3},{0x58B9, 0x89A4},{0x58BA, 0x89A5},{0x58BB, 0x89A6},{0x58BC, 0xDBD4}, - {0x58BD, 0x89A7},{0x58BE, 0x89A8},{0x58BF, 0x89A9},{0x58C0, 0x89AA},{0x58C1, 0xB1DA},{0x58C2, 0x89AB},{0x58C3, 0x89AC},{0x58C4, 0x89AD}, - {0x58C5, 0xDBD5},{0x58C6, 0x89AE},{0x58C7, 0x89AF},{0x58C8, 0x89B0},{0x58C9, 0x89B1},{0x58CA, 0x89B2},{0x58CB, 0x89B3},{0x58CC, 0x89B4}, - {0x58CD, 0x89B5},{0x58CE, 0x89B6},{0x58CF, 0x89B7},{0x58D0, 0x89B8},{0x58D1, 0xDBD6},{0x58D2, 0x89B9},{0x58D3, 0x89BA},{0x58D4, 0x89BB}, - {0x58D5, 0xBABE},{0x58D6, 0x89BC},{0x58D7, 0x89BD},{0x58D8, 0x89BE},{0x58D9, 0x89BF},{0x58DA, 0x89C0},{0x58DB, 0x89C1},{0x58DC, 0x89C2}, - {0x58DD, 0x89C3},{0x58DE, 0x89C4},{0x58DF, 0x89C5},{0x58E0, 0x89C6},{0x58E1, 0x89C7},{0x58E2, 0x89C8},{0x58E3, 0x89C9},{0x58E4, 0xC8C0}, - {0x58E5, 0x89CA},{0x58E6, 0x89CB},{0x58E7, 0x89CC},{0x58E8, 0x89CD},{0x58E9, 0x89CE},{0x58EA, 0x89CF},{0x58EB, 0xCABF},{0x58EC, 0xC8C9}, - {0x58ED, 0x89D0},{0x58EE, 0xD7B3},{0x58EF, 0x89D1},{0x58F0, 0xC9F9},{0x58F1, 0x89D2},{0x58F2, 0x89D3},{0x58F3, 0xBFC7},{0x58F4, 0x89D4}, - {0x58F5, 0x89D5},{0x58F6, 0xBAF8},{0x58F7, 0x89D6},{0x58F8, 0x89D7},{0x58F9, 0xD2BC},{0x58FA, 0x89D8},{0x58FB, 0x89D9},{0x58FC, 0x89DA}, - {0x58FD, 0x89DB},{0x58FE, 0x89DC},{0x58FF, 0x89DD},{0x5900, 0x89DE},{0x5901, 0x89DF},{0x5902, 0xE2BA},{0x5903, 0x89E0},{0x5904, 0xB4A6}, - {0x5905, 0x89E1},{0x5906, 0x89E2},{0x5907, 0xB1B8},{0x5908, 0x89E3},{0x5909, 0x89E4},{0x590A, 0x89E5},{0x590B, 0x89E6},{0x590C, 0x89E7}, - {0x590D, 0xB8B4},{0x590E, 0x89E8},{0x590F, 0xCFC4},{0x5910, 0x89E9},{0x5911, 0x89EA},{0x5912, 0x89EB},{0x5913, 0x89EC},{0x5914, 0xD9E7}, - {0x5915, 0xCFA6},{0x5916, 0xCDE2},{0x5917, 0x89ED},{0x5918, 0x89EE},{0x5919, 0xD9ED},{0x591A, 0xB6E0},{0x591B, 0x89EF},{0x591C, 0xD2B9}, - {0x591D, 0x89F0},{0x591E, 0x89F1},{0x591F, 0xB9BB},{0x5920, 0x89F2},{0x5921, 0x89F3},{0x5922, 0x89F4},{0x5923, 0x89F5},{0x5924, 0xE2B9}, - {0x5925, 0xE2B7},{0x5926, 0x89F6},{0x5927, 0xB4F3},{0x5928, 0x89F7},{0x5929, 0xCCEC},{0x592A, 0xCCAB},{0x592B, 0xB7F2},{0x592C, 0x89F8}, - {0x592D, 0xD8B2},{0x592E, 0xD1EB},{0x592F, 0xBABB},{0x5930, 0x89F9},{0x5931, 0xCAA7},{0x5932, 0x89FA},{0x5933, 0x89FB},{0x5934, 0xCDB7}, - {0x5935, 0x89FC},{0x5936, 0x89FD},{0x5937, 0xD2C4},{0x5938, 0xBFE4},{0x5939, 0xBCD0},{0x593A, 0xB6E1},{0x593B, 0x89FE},{0x593C, 0xDEC5}, - {0x593D, 0x8A40},{0x593E, 0x8A41},{0x593F, 0x8A42},{0x5940, 0x8A43},{0x5941, 0xDEC6},{0x5942, 0xDBBC},{0x5943, 0x8A44},{0x5944, 0xD1D9}, - {0x5945, 0x8A45},{0x5946, 0x8A46},{0x5947, 0xC6E6},{0x5948, 0xC4CE},{0x5949, 0xB7EE},{0x594A, 0x8A47},{0x594B, 0xB7DC},{0x594C, 0x8A48}, - {0x594D, 0x8A49},{0x594E, 0xBFFC},{0x594F, 0xD7E0},{0x5950, 0x8A4A},{0x5951, 0xC6F5},{0x5952, 0x8A4B},{0x5953, 0x8A4C},{0x5954, 0xB1BC}, - {0x5955, 0xDEC8},{0x5956, 0xBDB1},{0x5957, 0xCCD7},{0x5958, 0xDECA},{0x5959, 0x8A4D},{0x595A, 0xDEC9},{0x595B, 0x8A4E},{0x595C, 0x8A4F}, - {0x595D, 0x8A50},{0x595E, 0x8A51},{0x595F, 0x8A52},{0x5960, 0xB5EC},{0x5961, 0x8A53},{0x5962, 0xC9DD},{0x5963, 0x8A54},{0x5964, 0x8A55}, - {0x5965, 0xB0C2},{0x5966, 0x8A56},{0x5967, 0x8A57},{0x5968, 0x8A58},{0x5969, 0x8A59},{0x596A, 0x8A5A},{0x596B, 0x8A5B},{0x596C, 0x8A5C}, - {0x596D, 0x8A5D},{0x596E, 0x8A5E},{0x596F, 0x8A5F},{0x5970, 0x8A60},{0x5971, 0x8A61},{0x5972, 0x8A62},{0x5973, 0xC5AE},{0x5974, 0xC5AB}, - {0x5975, 0x8A63},{0x5976, 0xC4CC},{0x5977, 0x8A64},{0x5978, 0xBCE9},{0x5979, 0xCBFD},{0x597A, 0x8A65},{0x597B, 0x8A66},{0x597C, 0x8A67}, - {0x597D, 0xBAC3},{0x597E, 0x8A68},{0x597F, 0x8A69},{0x5980, 0x8A6A},{0x5981, 0xE5F9},{0x5982, 0xC8E7},{0x5983, 0xE5FA},{0x5984, 0xCDFD}, - {0x5985, 0x8A6B},{0x5986, 0xD7B1},{0x5987, 0xB8BE},{0x5988, 0xC2E8},{0x5989, 0x8A6C},{0x598A, 0xC8D1},{0x598B, 0x8A6D},{0x598C, 0x8A6E}, - {0x598D, 0xE5FB},{0x598E, 0x8A6F},{0x598F, 0x8A70},{0x5990, 0x8A71},{0x5991, 0x8A72},{0x5992, 0xB6CA},{0x5993, 0xBCCB},{0x5994, 0x8A73}, - {0x5995, 0x8A74},{0x5996, 0xD1FD},{0x5997, 0xE6A1},{0x5998, 0x8A75},{0x5999, 0xC3EE},{0x599A, 0x8A76},{0x599B, 0x8A77},{0x599C, 0x8A78}, - {0x599D, 0x8A79},{0x599E, 0xE6A4},{0x599F, 0x8A7A},{0x59A0, 0x8A7B},{0x59A1, 0x8A7C},{0x59A2, 0x8A7D},{0x59A3, 0xE5FE},{0x59A4, 0xE6A5}, - {0x59A5, 0xCDD7},{0x59A6, 0x8A7E},{0x59A7, 0x8A80},{0x59A8, 0xB7C1},{0x59A9, 0xE5FC},{0x59AA, 0xE5FD},{0x59AB, 0xE6A3},{0x59AC, 0x8A81}, - {0x59AD, 0x8A82},{0x59AE, 0xC4DD},{0x59AF, 0xE6A8},{0x59B0, 0x8A83},{0x59B1, 0x8A84},{0x59B2, 0xE6A7},{0x59B3, 0x8A85},{0x59B4, 0x8A86}, - {0x59B5, 0x8A87},{0x59B6, 0x8A88},{0x59B7, 0x8A89},{0x59B8, 0x8A8A},{0x59B9, 0xC3C3},{0x59BA, 0x8A8B},{0x59BB, 0xC6DE},{0x59BC, 0x8A8C}, - {0x59BD, 0x8A8D},{0x59BE, 0xE6AA},{0x59BF, 0x8A8E},{0x59C0, 0x8A8F},{0x59C1, 0x8A90},{0x59C2, 0x8A91},{0x59C3, 0x8A92},{0x59C4, 0x8A93}, - {0x59C5, 0x8A94},{0x59C6, 0xC4B7},{0x59C7, 0x8A95},{0x59C8, 0x8A96},{0x59C9, 0x8A97},{0x59CA, 0xE6A2},{0x59CB, 0xCABC},{0x59CC, 0x8A98}, - {0x59CD, 0x8A99},{0x59CE, 0x8A9A},{0x59CF, 0x8A9B},{0x59D0, 0xBDE3},{0x59D1, 0xB9C3},{0x59D2, 0xE6A6},{0x59D3, 0xD0D5},{0x59D4, 0xCEAF}, - {0x59D5, 0x8A9C},{0x59D6, 0x8A9D},{0x59D7, 0xE6A9},{0x59D8, 0xE6B0},{0x59D9, 0x8A9E},{0x59DA, 0xD2A6},{0x59DB, 0x8A9F},{0x59DC, 0xBDAA}, - {0x59DD, 0xE6AD},{0x59DE, 0x8AA0},{0x59DF, 0x8AA1},{0x59E0, 0x8AA2},{0x59E1, 0x8AA3},{0x59E2, 0x8AA4},{0x59E3, 0xE6AF},{0x59E4, 0x8AA5}, - {0x59E5, 0xC0D1},{0x59E6, 0x8AA6},{0x59E7, 0x8AA7},{0x59E8, 0xD2CC},{0x59E9, 0x8AA8},{0x59EA, 0x8AA9},{0x59EB, 0x8AAA},{0x59EC, 0xBCA7}, - {0x59ED, 0x8AAB},{0x59EE, 0x8AAC},{0x59EF, 0x8AAD},{0x59F0, 0x8AAE},{0x59F1, 0x8AAF},{0x59F2, 0x8AB0},{0x59F3, 0x8AB1},{0x59F4, 0x8AB2}, - {0x59F5, 0x8AB3},{0x59F6, 0x8AB4},{0x59F7, 0x8AB5},{0x59F8, 0x8AB6},{0x59F9, 0xE6B1},{0x59FA, 0x8AB7},{0x59FB, 0xD2F6},{0x59FC, 0x8AB8}, - {0x59FD, 0x8AB9},{0x59FE, 0x8ABA},{0x59FF, 0xD7CB},{0x5A00, 0x8ABB},{0x5A01, 0xCDFE},{0x5A02, 0x8ABC},{0x5A03, 0xCDDE},{0x5A04, 0xC2A6}, - {0x5A05, 0xE6AB},{0x5A06, 0xE6AC},{0x5A07, 0xBDBF},{0x5A08, 0xE6AE},{0x5A09, 0xE6B3},{0x5A0A, 0x8ABD},{0x5A0B, 0x8ABE},{0x5A0C, 0xE6B2}, - {0x5A0D, 0x8ABF},{0x5A0E, 0x8AC0},{0x5A0F, 0x8AC1},{0x5A10, 0x8AC2},{0x5A11, 0xE6B6},{0x5A12, 0x8AC3},{0x5A13, 0xE6B8},{0x5A14, 0x8AC4}, - {0x5A15, 0x8AC5},{0x5A16, 0x8AC6},{0x5A17, 0x8AC7},{0x5A18, 0xC4EF},{0x5A19, 0x8AC8},{0x5A1A, 0x8AC9},{0x5A1B, 0x8ACA},{0x5A1C, 0xC4C8}, - {0x5A1D, 0x8ACB},{0x5A1E, 0x8ACC},{0x5A1F, 0xBEEA},{0x5A20, 0xC9EF},{0x5A21, 0x8ACD},{0x5A22, 0x8ACE},{0x5A23, 0xE6B7},{0x5A24, 0x8ACF}, - {0x5A25, 0xB6F0},{0x5A26, 0x8AD0},{0x5A27, 0x8AD1},{0x5A28, 0x8AD2},{0x5A29, 0xC3E4},{0x5A2A, 0x8AD3},{0x5A2B, 0x8AD4},{0x5A2C, 0x8AD5}, - {0x5A2D, 0x8AD6},{0x5A2E, 0x8AD7},{0x5A2F, 0x8AD8},{0x5A30, 0x8AD9},{0x5A31, 0xD3E9},{0x5A32, 0xE6B4},{0x5A33, 0x8ADA},{0x5A34, 0xE6B5}, - {0x5A35, 0x8ADB},{0x5A36, 0xC8A2},{0x5A37, 0x8ADC},{0x5A38, 0x8ADD},{0x5A39, 0x8ADE},{0x5A3A, 0x8ADF},{0x5A3B, 0x8AE0},{0x5A3C, 0xE6BD}, - {0x5A3D, 0x8AE1},{0x5A3E, 0x8AE2},{0x5A3F, 0x8AE3},{0x5A40, 0xE6B9},{0x5A41, 0x8AE4},{0x5A42, 0x8AE5},{0x5A43, 0x8AE6},{0x5A44, 0x8AE7}, - {0x5A45, 0x8AE8},{0x5A46, 0xC6C5},{0x5A47, 0x8AE9},{0x5A48, 0x8AEA},{0x5A49, 0xCDF1},{0x5A4A, 0xE6BB},{0x5A4B, 0x8AEB},{0x5A4C, 0x8AEC}, - {0x5A4D, 0x8AED},{0x5A4E, 0x8AEE},{0x5A4F, 0x8AEF},{0x5A50, 0x8AF0},{0x5A51, 0x8AF1},{0x5A52, 0x8AF2},{0x5A53, 0x8AF3},{0x5A54, 0x8AF4}, - {0x5A55, 0xE6BC},{0x5A56, 0x8AF5},{0x5A57, 0x8AF6},{0x5A58, 0x8AF7},{0x5A59, 0x8AF8},{0x5A5A, 0xBBE9},{0x5A5B, 0x8AF9},{0x5A5C, 0x8AFA}, - {0x5A5D, 0x8AFB},{0x5A5E, 0x8AFC},{0x5A5F, 0x8AFD},{0x5A60, 0x8AFE},{0x5A61, 0x8B40},{0x5A62, 0xE6BE},{0x5A63, 0x8B41},{0x5A64, 0x8B42}, - {0x5A65, 0x8B43},{0x5A66, 0x8B44},{0x5A67, 0xE6BA},{0x5A68, 0x8B45},{0x5A69, 0x8B46},{0x5A6A, 0xC0B7},{0x5A6B, 0x8B47},{0x5A6C, 0x8B48}, - {0x5A6D, 0x8B49},{0x5A6E, 0x8B4A},{0x5A6F, 0x8B4B},{0x5A70, 0x8B4C},{0x5A71, 0x8B4D},{0x5A72, 0x8B4E},{0x5A73, 0x8B4F},{0x5A74, 0xD3A4}, - {0x5A75, 0xE6BF},{0x5A76, 0xC9F4},{0x5A77, 0xE6C3},{0x5A78, 0x8B50},{0x5A79, 0x8B51},{0x5A7A, 0xE6C4},{0x5A7B, 0x8B52},{0x5A7C, 0x8B53}, - {0x5A7D, 0x8B54},{0x5A7E, 0x8B55},{0x5A7F, 0xD0F6},{0x5A80, 0x8B56},{0x5A81, 0x8B57},{0x5A82, 0x8B58},{0x5A83, 0x8B59},{0x5A84, 0x8B5A}, - {0x5A85, 0x8B5B},{0x5A86, 0x8B5C},{0x5A87, 0x8B5D},{0x5A88, 0x8B5E},{0x5A89, 0x8B5F},{0x5A8A, 0x8B60},{0x5A8B, 0x8B61},{0x5A8C, 0x8B62}, - {0x5A8D, 0x8B63},{0x5A8E, 0x8B64},{0x5A8F, 0x8B65},{0x5A90, 0x8B66},{0x5A91, 0x8B67},{0x5A92, 0xC3BD},{0x5A93, 0x8B68},{0x5A94, 0x8B69}, - {0x5A95, 0x8B6A},{0x5A96, 0x8B6B},{0x5A97, 0x8B6C},{0x5A98, 0x8B6D},{0x5A99, 0x8B6E},{0x5A9A, 0xC3C4},{0x5A9B, 0xE6C2},{0x5A9C, 0x8B6F}, - {0x5A9D, 0x8B70},{0x5A9E, 0x8B71},{0x5A9F, 0x8B72},{0x5AA0, 0x8B73},{0x5AA1, 0x8B74},{0x5AA2, 0x8B75},{0x5AA3, 0x8B76},{0x5AA4, 0x8B77}, - {0x5AA5, 0x8B78},{0x5AA6, 0x8B79},{0x5AA7, 0x8B7A},{0x5AA8, 0x8B7B},{0x5AA9, 0x8B7C},{0x5AAA, 0xE6C1},{0x5AAB, 0x8B7D},{0x5AAC, 0x8B7E}, - {0x5AAD, 0x8B80},{0x5AAE, 0x8B81},{0x5AAF, 0x8B82},{0x5AB0, 0x8B83},{0x5AB1, 0x8B84},{0x5AB2, 0xE6C7},{0x5AB3, 0xCFB1},{0x5AB4, 0x8B85}, - {0x5AB5, 0xEBF4},{0x5AB6, 0x8B86},{0x5AB7, 0x8B87},{0x5AB8, 0xE6CA},{0x5AB9, 0x8B88},{0x5ABA, 0x8B89},{0x5ABB, 0x8B8A},{0x5ABC, 0x8B8B}, - {0x5ABD, 0x8B8C},{0x5ABE, 0xE6C5},{0x5ABF, 0x8B8D},{0x5AC0, 0x8B8E},{0x5AC1, 0xBCDE},{0x5AC2, 0xC9A9},{0x5AC3, 0x8B8F},{0x5AC4, 0x8B90}, - {0x5AC5, 0x8B91},{0x5AC6, 0x8B92},{0x5AC7, 0x8B93},{0x5AC8, 0x8B94},{0x5AC9, 0xBCB5},{0x5ACA, 0x8B95},{0x5ACB, 0x8B96},{0x5ACC, 0xCFD3}, - {0x5ACD, 0x8B97},{0x5ACE, 0x8B98},{0x5ACF, 0x8B99},{0x5AD0, 0x8B9A},{0x5AD1, 0x8B9B},{0x5AD2, 0xE6C8},{0x5AD3, 0x8B9C},{0x5AD4, 0xE6C9}, - {0x5AD5, 0x8B9D},{0x5AD6, 0xE6CE},{0x5AD7, 0x8B9E},{0x5AD8, 0xE6D0},{0x5AD9, 0x8B9F},{0x5ADA, 0x8BA0},{0x5ADB, 0x8BA1},{0x5ADC, 0xE6D1}, - {0x5ADD, 0x8BA2},{0x5ADE, 0x8BA3},{0x5ADF, 0x8BA4},{0x5AE0, 0xE6CB},{0x5AE1, 0xB5D5},{0x5AE2, 0x8BA5},{0x5AE3, 0xE6CC},{0x5AE4, 0x8BA6}, - {0x5AE5, 0x8BA7},{0x5AE6, 0xE6CF},{0x5AE7, 0x8BA8},{0x5AE8, 0x8BA9},{0x5AE9, 0xC4DB},{0x5AEA, 0x8BAA},{0x5AEB, 0xE6C6},{0x5AEC, 0x8BAB}, - {0x5AED, 0x8BAC},{0x5AEE, 0x8BAD},{0x5AEF, 0x8BAE},{0x5AF0, 0x8BAF},{0x5AF1, 0xE6CD},{0x5AF2, 0x8BB0},{0x5AF3, 0x8BB1},{0x5AF4, 0x8BB2}, - {0x5AF5, 0x8BB3},{0x5AF6, 0x8BB4},{0x5AF7, 0x8BB5},{0x5AF8, 0x8BB6},{0x5AF9, 0x8BB7},{0x5AFA, 0x8BB8},{0x5AFB, 0x8BB9},{0x5AFC, 0x8BBA}, - {0x5AFD, 0x8BBB},{0x5AFE, 0x8BBC},{0x5AFF, 0x8BBD},{0x5B00, 0x8BBE},{0x5B01, 0x8BBF},{0x5B02, 0x8BC0},{0x5B03, 0x8BC1},{0x5B04, 0x8BC2}, - {0x5B05, 0x8BC3},{0x5B06, 0x8BC4},{0x5B07, 0x8BC5},{0x5B08, 0x8BC6},{0x5B09, 0xE6D2},{0x5B0A, 0x8BC7},{0x5B0B, 0x8BC8},{0x5B0C, 0x8BC9}, - {0x5B0D, 0x8BCA},{0x5B0E, 0x8BCB},{0x5B0F, 0x8BCC},{0x5B10, 0x8BCD},{0x5B11, 0x8BCE},{0x5B12, 0x8BCF},{0x5B13, 0x8BD0},{0x5B14, 0x8BD1}, - {0x5B15, 0x8BD2},{0x5B16, 0xE6D4},{0x5B17, 0xE6D3},{0x5B18, 0x8BD3},{0x5B19, 0x8BD4},{0x5B1A, 0x8BD5},{0x5B1B, 0x8BD6},{0x5B1C, 0x8BD7}, - {0x5B1D, 0x8BD8},{0x5B1E, 0x8BD9},{0x5B1F, 0x8BDA},{0x5B20, 0x8BDB},{0x5B21, 0x8BDC},{0x5B22, 0x8BDD},{0x5B23, 0x8BDE},{0x5B24, 0x8BDF}, - {0x5B25, 0x8BE0},{0x5B26, 0x8BE1},{0x5B27, 0x8BE2},{0x5B28, 0x8BE3},{0x5B29, 0x8BE4},{0x5B2A, 0x8BE5},{0x5B2B, 0x8BE6},{0x5B2C, 0x8BE7}, - {0x5B2D, 0x8BE8},{0x5B2E, 0x8BE9},{0x5B2F, 0x8BEA},{0x5B30, 0x8BEB},{0x5B31, 0x8BEC},{0x5B32, 0xE6D5},{0x5B33, 0x8BED},{0x5B34, 0xD9F8}, - {0x5B35, 0x8BEE},{0x5B36, 0x8BEF},{0x5B37, 0xE6D6},{0x5B38, 0x8BF0},{0x5B39, 0x8BF1},{0x5B3A, 0x8BF2},{0x5B3B, 0x8BF3},{0x5B3C, 0x8BF4}, - {0x5B3D, 0x8BF5},{0x5B3E, 0x8BF6},{0x5B3F, 0x8BF7},{0x5B40, 0xE6D7},{0x5B41, 0x8BF8},{0x5B42, 0x8BF9},{0x5B43, 0x8BFA},{0x5B44, 0x8BFB}, - {0x5B45, 0x8BFC},{0x5B46, 0x8BFD},{0x5B47, 0x8BFE},{0x5B48, 0x8C40},{0x5B49, 0x8C41},{0x5B4A, 0x8C42},{0x5B4B, 0x8C43},{0x5B4C, 0x8C44}, - {0x5B4D, 0x8C45},{0x5B4E, 0x8C46},{0x5B4F, 0x8C47},{0x5B50, 0xD7D3},{0x5B51, 0xE6DD},{0x5B52, 0x8C48},{0x5B53, 0xE6DE},{0x5B54, 0xBFD7}, - {0x5B55, 0xD4D0},{0x5B56, 0x8C49},{0x5B57, 0xD7D6},{0x5B58, 0xB4E6},{0x5B59, 0xCBEF},{0x5B5A, 0xE6DA},{0x5B5B, 0xD8C3},{0x5B5C, 0xD7CE}, - {0x5B5D, 0xD0A2},{0x5B5E, 0x8C4A},{0x5B5F, 0xC3CF},{0x5B60, 0x8C4B},{0x5B61, 0x8C4C},{0x5B62, 0xE6DF},{0x5B63, 0xBCBE},{0x5B64, 0xB9C2}, - {0x5B65, 0xE6DB},{0x5B66, 0xD1A7},{0x5B67, 0x8C4D},{0x5B68, 0x8C4E},{0x5B69, 0xBAA2},{0x5B6A, 0xC2CF},{0x5B6B, 0x8C4F},{0x5B6C, 0xD8AB}, - {0x5B6D, 0x8C50},{0x5B6E, 0x8C51},{0x5B6F, 0x8C52},{0x5B70, 0xCAEB},{0x5B71, 0xE5EE},{0x5B72, 0x8C53},{0x5B73, 0xE6DC},{0x5B74, 0x8C54}, - {0x5B75, 0xB7F5},{0x5B76, 0x8C55},{0x5B77, 0x8C56},{0x5B78, 0x8C57},{0x5B79, 0x8C58},{0x5B7A, 0xC8E6},{0x5B7B, 0x8C59},{0x5B7C, 0x8C5A}, - {0x5B7D, 0xC4F5},{0x5B7E, 0x8C5B},{0x5B7F, 0x8C5C},{0x5B80, 0xE5B2},{0x5B81, 0xC4FE},{0x5B82, 0x8C5D},{0x5B83, 0xCBFC},{0x5B84, 0xE5B3}, - {0x5B85, 0xD5AC},{0x5B86, 0x8C5E},{0x5B87, 0xD3EE},{0x5B88, 0xCAD8},{0x5B89, 0xB0B2},{0x5B8A, 0x8C5F},{0x5B8B, 0xCBCE},{0x5B8C, 0xCDEA}, - {0x5B8D, 0x8C60},{0x5B8E, 0x8C61},{0x5B8F, 0xBAEA},{0x5B90, 0x8C62},{0x5B91, 0x8C63},{0x5B92, 0x8C64},{0x5B93, 0xE5B5},{0x5B94, 0x8C65}, - {0x5B95, 0xE5B4},{0x5B96, 0x8C66},{0x5B97, 0xD7DA},{0x5B98, 0xB9D9},{0x5B99, 0xD6E6},{0x5B9A, 0xB6A8},{0x5B9B, 0xCDF0},{0x5B9C, 0xD2CB}, - {0x5B9D, 0xB1A6},{0x5B9E, 0xCAB5},{0x5B9F, 0x8C67},{0x5BA0, 0xB3E8},{0x5BA1, 0xC9F3},{0x5BA2, 0xBFCD},{0x5BA3, 0xD0FB},{0x5BA4, 0xCAD2}, - {0x5BA5, 0xE5B6},{0x5BA6, 0xBBC2},{0x5BA7, 0x8C68},{0x5BA8, 0x8C69},{0x5BA9, 0x8C6A},{0x5BAA, 0xCFDC},{0x5BAB, 0xB9AC},{0x5BAC, 0x8C6B}, - {0x5BAD, 0x8C6C},{0x5BAE, 0x8C6D},{0x5BAF, 0x8C6E},{0x5BB0, 0xD4D7},{0x5BB1, 0x8C6F},{0x5BB2, 0x8C70},{0x5BB3, 0xBAA6},{0x5BB4, 0xD1E7}, - {0x5BB5, 0xCFFC},{0x5BB6, 0xBCD2},{0x5BB7, 0x8C71},{0x5BB8, 0xE5B7},{0x5BB9, 0xC8DD},{0x5BBA, 0x8C72},{0x5BBB, 0x8C73},{0x5BBC, 0x8C74}, - {0x5BBD, 0xBFED},{0x5BBE, 0xB1F6},{0x5BBF, 0xCBDE},{0x5BC0, 0x8C75},{0x5BC1, 0x8C76},{0x5BC2, 0xBCC5},{0x5BC3, 0x8C77},{0x5BC4, 0xBCC4}, - {0x5BC5, 0xD2FA},{0x5BC6, 0xC3DC},{0x5BC7, 0xBFDC},{0x5BC8, 0x8C78},{0x5BC9, 0x8C79},{0x5BCA, 0x8C7A},{0x5BCB, 0x8C7B},{0x5BCC, 0xB8BB}, - {0x5BCD, 0x8C7C},{0x5BCE, 0x8C7D},{0x5BCF, 0x8C7E},{0x5BD0, 0xC3C2},{0x5BD1, 0x8C80},{0x5BD2, 0xBAAE},{0x5BD3, 0xD4A2},{0x5BD4, 0x8C81}, - {0x5BD5, 0x8C82},{0x5BD6, 0x8C83},{0x5BD7, 0x8C84},{0x5BD8, 0x8C85},{0x5BD9, 0x8C86},{0x5BDA, 0x8C87},{0x5BDB, 0x8C88},{0x5BDC, 0x8C89}, - {0x5BDD, 0xC7DE},{0x5BDE, 0xC4AF},{0x5BDF, 0xB2EC},{0x5BE0, 0x8C8A},{0x5BE1, 0xB9D1},{0x5BE2, 0x8C8B},{0x5BE3, 0x8C8C},{0x5BE4, 0xE5BB}, - {0x5BE5, 0xC1C8},{0x5BE6, 0x8C8D},{0x5BE7, 0x8C8E},{0x5BE8, 0xD5AF},{0x5BE9, 0x8C8F},{0x5BEA, 0x8C90},{0x5BEB, 0x8C91},{0x5BEC, 0x8C92}, - {0x5BED, 0x8C93},{0x5BEE, 0xE5BC},{0x5BEF, 0x8C94},{0x5BF0, 0xE5BE},{0x5BF1, 0x8C95},{0x5BF2, 0x8C96},{0x5BF3, 0x8C97},{0x5BF4, 0x8C98}, - {0x5BF5, 0x8C99},{0x5BF6, 0x8C9A},{0x5BF7, 0x8C9B},{0x5BF8, 0xB4E7},{0x5BF9, 0xB6D4},{0x5BFA, 0xCBC2},{0x5BFB, 0xD1B0},{0x5BFC, 0xB5BC}, - {0x5BFD, 0x8C9C},{0x5BFE, 0x8C9D},{0x5BFF, 0xCAD9},{0x5C00, 0x8C9E},{0x5C01, 0xB7E2},{0x5C02, 0x8C9F},{0x5C03, 0x8CA0},{0x5C04, 0xC9E4}, - {0x5C05, 0x8CA1},{0x5C06, 0xBDAB},{0x5C07, 0x8CA2},{0x5C08, 0x8CA3},{0x5C09, 0xCEBE},{0x5C0A, 0xD7F0},{0x5C0B, 0x8CA4},{0x5C0C, 0x8CA5}, - {0x5C0D, 0x8CA6},{0x5C0E, 0x8CA7},{0x5C0F, 0xD0A1},{0x5C10, 0x8CA8},{0x5C11, 0xC9D9},{0x5C12, 0x8CA9},{0x5C13, 0x8CAA},{0x5C14, 0xB6FB}, - {0x5C15, 0xE6D8},{0x5C16, 0xBCE2},{0x5C17, 0x8CAB},{0x5C18, 0xB3BE},{0x5C19, 0x8CAC},{0x5C1A, 0xC9D0},{0x5C1B, 0x8CAD},{0x5C1C, 0xE6D9}, - {0x5C1D, 0xB3A2},{0x5C1E, 0x8CAE},{0x5C1F, 0x8CAF},{0x5C20, 0x8CB0},{0x5C21, 0x8CB1},{0x5C22, 0xDECC},{0x5C23, 0x8CB2},{0x5C24, 0xD3C8}, - {0x5C25, 0xDECD},{0x5C26, 0x8CB3},{0x5C27, 0xD2A2},{0x5C28, 0x8CB4},{0x5C29, 0x8CB5},{0x5C2A, 0x8CB6},{0x5C2B, 0x8CB7},{0x5C2C, 0xDECE}, - {0x5C2D, 0x8CB8},{0x5C2E, 0x8CB9},{0x5C2F, 0x8CBA},{0x5C30, 0x8CBB},{0x5C31, 0xBECD},{0x5C32, 0x8CBC},{0x5C33, 0x8CBD},{0x5C34, 0xDECF}, - {0x5C35, 0x8CBE},{0x5C36, 0x8CBF},{0x5C37, 0x8CC0},{0x5C38, 0xCAAC},{0x5C39, 0xD2FC},{0x5C3A, 0xB3DF},{0x5C3B, 0xE5EA},{0x5C3C, 0xC4E1}, - {0x5C3D, 0xBEA1},{0x5C3E, 0xCEB2},{0x5C3F, 0xC4F2},{0x5C40, 0xBED6},{0x5C41, 0xC6A8},{0x5C42, 0xB2E3},{0x5C43, 0x8CC1},{0x5C44, 0x8CC2}, - {0x5C45, 0xBED3},{0x5C46, 0x8CC3},{0x5C47, 0x8CC4},{0x5C48, 0xC7FC},{0x5C49, 0xCCEB},{0x5C4A, 0xBDEC},{0x5C4B, 0xCEDD},{0x5C4C, 0x8CC5}, - {0x5C4D, 0x8CC6},{0x5C4E, 0xCABA},{0x5C4F, 0xC6C1},{0x5C50, 0xE5EC},{0x5C51, 0xD0BC},{0x5C52, 0x8CC7},{0x5C53, 0x8CC8},{0x5C54, 0x8CC9}, - {0x5C55, 0xD5B9},{0x5C56, 0x8CCA},{0x5C57, 0x8CCB},{0x5C58, 0x8CCC},{0x5C59, 0xE5ED},{0x5C5A, 0x8CCD},{0x5C5B, 0x8CCE},{0x5C5C, 0x8CCF}, - {0x5C5D, 0x8CD0},{0x5C5E, 0xCAF4},{0x5C5F, 0x8CD1},{0x5C60, 0xCDC0},{0x5C61, 0xC2C5},{0x5C62, 0x8CD2},{0x5C63, 0xE5EF},{0x5C64, 0x8CD3}, - {0x5C65, 0xC2C4},{0x5C66, 0xE5F0},{0x5C67, 0x8CD4},{0x5C68, 0x8CD5},{0x5C69, 0x8CD6},{0x5C6A, 0x8CD7},{0x5C6B, 0x8CD8},{0x5C6C, 0x8CD9}, - {0x5C6D, 0x8CDA},{0x5C6E, 0xE5F8},{0x5C6F, 0xCDCD},{0x5C70, 0x8CDB},{0x5C71, 0xC9BD},{0x5C72, 0x8CDC},{0x5C73, 0x8CDD},{0x5C74, 0x8CDE}, - {0x5C75, 0x8CDF},{0x5C76, 0x8CE0},{0x5C77, 0x8CE1},{0x5C78, 0x8CE2},{0x5C79, 0xD2D9},{0x5C7A, 0xE1A8},{0x5C7B, 0x8CE3},{0x5C7C, 0x8CE4}, - {0x5C7D, 0x8CE5},{0x5C7E, 0x8CE6},{0x5C7F, 0xD3EC},{0x5C80, 0x8CE7},{0x5C81, 0xCBEA},{0x5C82, 0xC6F1},{0x5C83, 0x8CE8},{0x5C84, 0x8CE9}, - {0x5C85, 0x8CEA},{0x5C86, 0x8CEB},{0x5C87, 0x8CEC},{0x5C88, 0xE1AC},{0x5C89, 0x8CED},{0x5C8A, 0x8CEE},{0x5C8B, 0x8CEF},{0x5C8C, 0xE1A7}, - {0x5C8D, 0xE1A9},{0x5C8E, 0x8CF0},{0x5C8F, 0x8CF1},{0x5C90, 0xE1AA},{0x5C91, 0xE1AF},{0x5C92, 0x8CF2},{0x5C93, 0x8CF3},{0x5C94, 0xB2ED}, - {0x5C95, 0x8CF4},{0x5C96, 0xE1AB},{0x5C97, 0xB8DA},{0x5C98, 0xE1AD},{0x5C99, 0xE1AE},{0x5C9A, 0xE1B0},{0x5C9B, 0xB5BA},{0x5C9C, 0xE1B1}, - {0x5C9D, 0x8CF5},{0x5C9E, 0x8CF6},{0x5C9F, 0x8CF7},{0x5CA0, 0x8CF8},{0x5CA1, 0x8CF9},{0x5CA2, 0xE1B3},{0x5CA3, 0xE1B8},{0x5CA4, 0x8CFA}, - {0x5CA5, 0x8CFB},{0x5CA6, 0x8CFC},{0x5CA7, 0x8CFD},{0x5CA8, 0x8CFE},{0x5CA9, 0xD1D2},{0x5CAA, 0x8D40},{0x5CAB, 0xE1B6},{0x5CAC, 0xE1B5}, - {0x5CAD, 0xC1EB},{0x5CAE, 0x8D41},{0x5CAF, 0x8D42},{0x5CB0, 0x8D43},{0x5CB1, 0xE1B7},{0x5CB2, 0x8D44},{0x5CB3, 0xD4C0},{0x5CB4, 0x8D45}, - {0x5CB5, 0xE1B2},{0x5CB6, 0x8D46},{0x5CB7, 0xE1BA},{0x5CB8, 0xB0B6},{0x5CB9, 0x8D47},{0x5CBA, 0x8D48},{0x5CBB, 0x8D49},{0x5CBC, 0x8D4A}, - {0x5CBD, 0xE1B4},{0x5CBE, 0x8D4B},{0x5CBF, 0xBFF9},{0x5CC0, 0x8D4C},{0x5CC1, 0xE1B9},{0x5CC2, 0x8D4D},{0x5CC3, 0x8D4E},{0x5CC4, 0xE1BB}, - {0x5CC5, 0x8D4F},{0x5CC6, 0x8D50},{0x5CC7, 0x8D51},{0x5CC8, 0x8D52},{0x5CC9, 0x8D53},{0x5CCA, 0x8D54},{0x5CCB, 0xE1BE},{0x5CCC, 0x8D55}, - {0x5CCD, 0x8D56},{0x5CCE, 0x8D57},{0x5CCF, 0x8D58},{0x5CD0, 0x8D59},{0x5CD1, 0x8D5A},{0x5CD2, 0xE1BC},{0x5CD3, 0x8D5B},{0x5CD4, 0x8D5C}, - {0x5CD5, 0x8D5D},{0x5CD6, 0x8D5E},{0x5CD7, 0x8D5F},{0x5CD8, 0x8D60},{0x5CD9, 0xD6C5},{0x5CDA, 0x8D61},{0x5CDB, 0x8D62},{0x5CDC, 0x8D63}, - {0x5CDD, 0x8D64},{0x5CDE, 0x8D65},{0x5CDF, 0x8D66},{0x5CE0, 0x8D67},{0x5CE1, 0xCFBF},{0x5CE2, 0x8D68},{0x5CE3, 0x8D69},{0x5CE4, 0xE1BD}, - {0x5CE5, 0xE1BF},{0x5CE6, 0xC2CD},{0x5CE7, 0x8D6A},{0x5CE8, 0xB6EB},{0x5CE9, 0x8D6B},{0x5CEA, 0xD3F8},{0x5CEB, 0x8D6C},{0x5CEC, 0x8D6D}, - {0x5CED, 0xC7CD},{0x5CEE, 0x8D6E},{0x5CEF, 0x8D6F},{0x5CF0, 0xB7E5},{0x5CF1, 0x8D70},{0x5CF2, 0x8D71},{0x5CF3, 0x8D72},{0x5CF4, 0x8D73}, - {0x5CF5, 0x8D74},{0x5CF6, 0x8D75},{0x5CF7, 0x8D76},{0x5CF8, 0x8D77},{0x5CF9, 0x8D78},{0x5CFA, 0x8D79},{0x5CFB, 0xBEFE},{0x5CFC, 0x8D7A}, - {0x5CFD, 0x8D7B},{0x5CFE, 0x8D7C},{0x5CFF, 0x8D7D},{0x5D00, 0x8D7E},{0x5D01, 0x8D80},{0x5D02, 0xE1C0},{0x5D03, 0xE1C1},{0x5D04, 0x8D81}, - {0x5D05, 0x8D82},{0x5D06, 0xE1C7},{0x5D07, 0xB3E7},{0x5D08, 0x8D83},{0x5D09, 0x8D84},{0x5D0A, 0x8D85},{0x5D0B, 0x8D86},{0x5D0C, 0x8D87}, - {0x5D0D, 0x8D88},{0x5D0E, 0xC6E9},{0x5D0F, 0x8D89},{0x5D10, 0x8D8A},{0x5D11, 0x8D8B},{0x5D12, 0x8D8C},{0x5D13, 0x8D8D},{0x5D14, 0xB4DE}, - {0x5D15, 0x8D8E},{0x5D16, 0xD1C2},{0x5D17, 0x8D8F},{0x5D18, 0x8D90},{0x5D19, 0x8D91},{0x5D1A, 0x8D92},{0x5D1B, 0xE1C8},{0x5D1C, 0x8D93}, - {0x5D1D, 0x8D94},{0x5D1E, 0xE1C6},{0x5D1F, 0x8D95},{0x5D20, 0x8D96},{0x5D21, 0x8D97},{0x5D22, 0x8D98},{0x5D23, 0x8D99},{0x5D24, 0xE1C5}, - {0x5D25, 0x8D9A},{0x5D26, 0xE1C3},{0x5D27, 0xE1C2},{0x5D28, 0x8D9B},{0x5D29, 0xB1C0},{0x5D2A, 0x8D9C},{0x5D2B, 0x8D9D},{0x5D2C, 0x8D9E}, - {0x5D2D, 0xD5B8},{0x5D2E, 0xE1C4},{0x5D2F, 0x8D9F},{0x5D30, 0x8DA0},{0x5D31, 0x8DA1},{0x5D32, 0x8DA2},{0x5D33, 0x8DA3},{0x5D34, 0xE1CB}, - {0x5D35, 0x8DA4},{0x5D36, 0x8DA5},{0x5D37, 0x8DA6},{0x5D38, 0x8DA7},{0x5D39, 0x8DA8},{0x5D3A, 0x8DA9},{0x5D3B, 0x8DAA},{0x5D3C, 0x8DAB}, - {0x5D3D, 0xE1CC},{0x5D3E, 0xE1CA},{0x5D3F, 0x8DAC},{0x5D40, 0x8DAD},{0x5D41, 0x8DAE},{0x5D42, 0x8DAF},{0x5D43, 0x8DB0},{0x5D44, 0x8DB1}, - {0x5D45, 0x8DB2},{0x5D46, 0x8DB3},{0x5D47, 0xEFFA},{0x5D48, 0x8DB4},{0x5D49, 0x8DB5},{0x5D4A, 0xE1D3},{0x5D4B, 0xE1D2},{0x5D4C, 0xC7B6}, - {0x5D4D, 0x8DB6},{0x5D4E, 0x8DB7},{0x5D4F, 0x8DB8},{0x5D50, 0x8DB9},{0x5D51, 0x8DBA},{0x5D52, 0x8DBB},{0x5D53, 0x8DBC},{0x5D54, 0x8DBD}, - {0x5D55, 0x8DBE},{0x5D56, 0x8DBF},{0x5D57, 0x8DC0},{0x5D58, 0xE1C9},{0x5D59, 0x8DC1},{0x5D5A, 0x8DC2},{0x5D5B, 0xE1CE},{0x5D5C, 0x8DC3}, - {0x5D5D, 0xE1D0},{0x5D5E, 0x8DC4},{0x5D5F, 0x8DC5},{0x5D60, 0x8DC6},{0x5D61, 0x8DC7},{0x5D62, 0x8DC8},{0x5D63, 0x8DC9},{0x5D64, 0x8DCA}, - {0x5D65, 0x8DCB},{0x5D66, 0x8DCC},{0x5D67, 0x8DCD},{0x5D68, 0x8DCE},{0x5D69, 0xE1D4},{0x5D6A, 0x8DCF},{0x5D6B, 0xE1D1},{0x5D6C, 0xE1CD}, - {0x5D6D, 0x8DD0},{0x5D6E, 0x8DD1},{0x5D6F, 0xE1CF},{0x5D70, 0x8DD2},{0x5D71, 0x8DD3},{0x5D72, 0x8DD4},{0x5D73, 0x8DD5},{0x5D74, 0xE1D5}, - {0x5D75, 0x8DD6},{0x5D76, 0x8DD7},{0x5D77, 0x8DD8},{0x5D78, 0x8DD9},{0x5D79, 0x8DDA},{0x5D7A, 0x8DDB},{0x5D7B, 0x8DDC},{0x5D7C, 0x8DDD}, - {0x5D7D, 0x8DDE},{0x5D7E, 0x8DDF},{0x5D7F, 0x8DE0},{0x5D80, 0x8DE1},{0x5D81, 0x8DE2},{0x5D82, 0xE1D6},{0x5D83, 0x8DE3},{0x5D84, 0x8DE4}, - {0x5D85, 0x8DE5},{0x5D86, 0x8DE6},{0x5D87, 0x8DE7},{0x5D88, 0x8DE8},{0x5D89, 0x8DE9},{0x5D8A, 0x8DEA},{0x5D8B, 0x8DEB},{0x5D8C, 0x8DEC}, - {0x5D8D, 0x8DED},{0x5D8E, 0x8DEE},{0x5D8F, 0x8DEF},{0x5D90, 0x8DF0},{0x5D91, 0x8DF1},{0x5D92, 0x8DF2},{0x5D93, 0x8DF3},{0x5D94, 0x8DF4}, - {0x5D95, 0x8DF5},{0x5D96, 0x8DF6},{0x5D97, 0x8DF7},{0x5D98, 0x8DF8},{0x5D99, 0xE1D7},{0x5D9A, 0x8DF9},{0x5D9B, 0x8DFA},{0x5D9C, 0x8DFB}, - {0x5D9D, 0xE1D8},{0x5D9E, 0x8DFC},{0x5D9F, 0x8DFD},{0x5DA0, 0x8DFE},{0x5DA1, 0x8E40},{0x5DA2, 0x8E41},{0x5DA3, 0x8E42},{0x5DA4, 0x8E43}, - {0x5DA5, 0x8E44},{0x5DA6, 0x8E45},{0x5DA7, 0x8E46},{0x5DA8, 0x8E47},{0x5DA9, 0x8E48},{0x5DAA, 0x8E49},{0x5DAB, 0x8E4A},{0x5DAC, 0x8E4B}, - {0x5DAD, 0x8E4C},{0x5DAE, 0x8E4D},{0x5DAF, 0x8E4E},{0x5DB0, 0x8E4F},{0x5DB1, 0x8E50},{0x5DB2, 0x8E51},{0x5DB3, 0x8E52},{0x5DB4, 0x8E53}, - {0x5DB5, 0x8E54},{0x5DB6, 0x8E55},{0x5DB7, 0xE1DA},{0x5DB8, 0x8E56},{0x5DB9, 0x8E57},{0x5DBA, 0x8E58},{0x5DBB, 0x8E59},{0x5DBC, 0x8E5A}, - {0x5DBD, 0x8E5B},{0x5DBE, 0x8E5C},{0x5DBF, 0x8E5D},{0x5DC0, 0x8E5E},{0x5DC1, 0x8E5F},{0x5DC2, 0x8E60},{0x5DC3, 0x8E61},{0x5DC4, 0x8E62}, - {0x5DC5, 0xE1DB},{0x5DC6, 0x8E63},{0x5DC7, 0x8E64},{0x5DC8, 0x8E65},{0x5DC9, 0x8E66},{0x5DCA, 0x8E67},{0x5DCB, 0x8E68},{0x5DCC, 0x8E69}, - {0x5DCD, 0xCEA1},{0x5DCE, 0x8E6A},{0x5DCF, 0x8E6B},{0x5DD0, 0x8E6C},{0x5DD1, 0x8E6D},{0x5DD2, 0x8E6E},{0x5DD3, 0x8E6F},{0x5DD4, 0x8E70}, - {0x5DD5, 0x8E71},{0x5DD6, 0x8E72},{0x5DD7, 0x8E73},{0x5DD8, 0x8E74},{0x5DD9, 0x8E75},{0x5DDA, 0x8E76},{0x5DDB, 0xE7DD},{0x5DDC, 0x8E77}, - {0x5DDD, 0xB4A8},{0x5DDE, 0xD6DD},{0x5DDF, 0x8E78},{0x5DE0, 0x8E79},{0x5DE1, 0xD1B2},{0x5DE2, 0xB3B2},{0x5DE3, 0x8E7A},{0x5DE4, 0x8E7B}, - {0x5DE5, 0xB9A4},{0x5DE6, 0xD7F3},{0x5DE7, 0xC7C9},{0x5DE8, 0xBEDE},{0x5DE9, 0xB9AE},{0x5DEA, 0x8E7C},{0x5DEB, 0xCED7},{0x5DEC, 0x8E7D}, - {0x5DED, 0x8E7E},{0x5DEE, 0xB2EE},{0x5DEF, 0xDBCF},{0x5DF0, 0x8E80},{0x5DF1, 0xBCBA},{0x5DF2, 0xD2D1},{0x5DF3, 0xCBC8},{0x5DF4, 0xB0CD}, - {0x5DF5, 0x8E81},{0x5DF6, 0x8E82},{0x5DF7, 0xCFEF},{0x5DF8, 0x8E83},{0x5DF9, 0x8E84},{0x5DFA, 0x8E85},{0x5DFB, 0x8E86},{0x5DFC, 0x8E87}, - {0x5DFD, 0xD9E3},{0x5DFE, 0xBDED},{0x5DFF, 0x8E88},{0x5E00, 0x8E89},{0x5E01, 0xB1D2},{0x5E02, 0xCAD0},{0x5E03, 0xB2BC},{0x5E04, 0x8E8A}, - {0x5E05, 0xCBA7},{0x5E06, 0xB7AB},{0x5E07, 0x8E8B},{0x5E08, 0xCAA6},{0x5E09, 0x8E8C},{0x5E0A, 0x8E8D},{0x5E0B, 0x8E8E},{0x5E0C, 0xCFA3}, - {0x5E0D, 0x8E8F},{0x5E0E, 0x8E90},{0x5E0F, 0xE0F8},{0x5E10, 0xD5CA},{0x5E11, 0xE0FB},{0x5E12, 0x8E91},{0x5E13, 0x8E92},{0x5E14, 0xE0FA}, - {0x5E15, 0xC5C1},{0x5E16, 0xCCFB},{0x5E17, 0x8E93},{0x5E18, 0xC1B1},{0x5E19, 0xE0F9},{0x5E1A, 0xD6E3},{0x5E1B, 0xB2AF},{0x5E1C, 0xD6C4}, - {0x5E1D, 0xB5DB},{0x5E1E, 0x8E94},{0x5E1F, 0x8E95},{0x5E20, 0x8E96},{0x5E21, 0x8E97},{0x5E22, 0x8E98},{0x5E23, 0x8E99},{0x5E24, 0x8E9A}, - {0x5E25, 0x8E9B},{0x5E26, 0xB4F8},{0x5E27, 0xD6A1},{0x5E28, 0x8E9C},{0x5E29, 0x8E9D},{0x5E2A, 0x8E9E},{0x5E2B, 0x8E9F},{0x5E2C, 0x8EA0}, - {0x5E2D, 0xCFAF},{0x5E2E, 0xB0EF},{0x5E2F, 0x8EA1},{0x5E30, 0x8EA2},{0x5E31, 0xE0FC},{0x5E32, 0x8EA3},{0x5E33, 0x8EA4},{0x5E34, 0x8EA5}, - {0x5E35, 0x8EA6},{0x5E36, 0x8EA7},{0x5E37, 0xE1A1},{0x5E38, 0xB3A3},{0x5E39, 0x8EA8},{0x5E3A, 0x8EA9},{0x5E3B, 0xE0FD},{0x5E3C, 0xE0FE}, - {0x5E3D, 0xC3B1},{0x5E3E, 0x8EAA},{0x5E3F, 0x8EAB},{0x5E40, 0x8EAC},{0x5E41, 0x8EAD},{0x5E42, 0xC3DD},{0x5E43, 0x8EAE},{0x5E44, 0xE1A2}, - {0x5E45, 0xB7F9},{0x5E46, 0x8EAF},{0x5E47, 0x8EB0},{0x5E48, 0x8EB1},{0x5E49, 0x8EB2},{0x5E4A, 0x8EB3},{0x5E4B, 0x8EB4},{0x5E4C, 0xBBCF}, - {0x5E4D, 0x8EB5},{0x5E4E, 0x8EB6},{0x5E4F, 0x8EB7},{0x5E50, 0x8EB8},{0x5E51, 0x8EB9},{0x5E52, 0x8EBA},{0x5E53, 0x8EBB},{0x5E54, 0xE1A3}, - {0x5E55, 0xC4BB},{0x5E56, 0x8EBC},{0x5E57, 0x8EBD},{0x5E58, 0x8EBE},{0x5E59, 0x8EBF},{0x5E5A, 0x8EC0},{0x5E5B, 0xE1A4},{0x5E5C, 0x8EC1}, - {0x5E5D, 0x8EC2},{0x5E5E, 0xE1A5},{0x5E5F, 0x8EC3},{0x5E60, 0x8EC4},{0x5E61, 0xE1A6},{0x5E62, 0xB4B1},{0x5E63, 0x8EC5},{0x5E64, 0x8EC6}, - {0x5E65, 0x8EC7},{0x5E66, 0x8EC8},{0x5E67, 0x8EC9},{0x5E68, 0x8ECA},{0x5E69, 0x8ECB},{0x5E6A, 0x8ECC},{0x5E6B, 0x8ECD},{0x5E6C, 0x8ECE}, - {0x5E6D, 0x8ECF},{0x5E6E, 0x8ED0},{0x5E6F, 0x8ED1},{0x5E70, 0x8ED2},{0x5E71, 0x8ED3},{0x5E72, 0xB8C9},{0x5E73, 0xC6BD},{0x5E74, 0xC4EA}, - {0x5E75, 0x8ED4},{0x5E76, 0xB2A2},{0x5E77, 0x8ED5},{0x5E78, 0xD0D2},{0x5E79, 0x8ED6},{0x5E7A, 0xE7DB},{0x5E7B, 0xBBC3},{0x5E7C, 0xD3D7}, - {0x5E7D, 0xD3C4},{0x5E7E, 0x8ED7},{0x5E7F, 0xB9E3},{0x5E80, 0xE2CF},{0x5E81, 0x8ED8},{0x5E82, 0x8ED9},{0x5E83, 0x8EDA},{0x5E84, 0xD7AF}, - {0x5E85, 0x8EDB},{0x5E86, 0xC7EC},{0x5E87, 0xB1D3},{0x5E88, 0x8EDC},{0x5E89, 0x8EDD},{0x5E8A, 0xB4B2},{0x5E8B, 0xE2D1},{0x5E8C, 0x8EDE}, - {0x5E8D, 0x8EDF},{0x5E8E, 0x8EE0},{0x5E8F, 0xD0F2},{0x5E90, 0xC2AE},{0x5E91, 0xE2D0},{0x5E92, 0x8EE1},{0x5E93, 0xBFE2},{0x5E94, 0xD3A6}, - {0x5E95, 0xB5D7},{0x5E96, 0xE2D2},{0x5E97, 0xB5EA},{0x5E98, 0x8EE2},{0x5E99, 0xC3ED},{0x5E9A, 0xB8FD},{0x5E9B, 0x8EE3},{0x5E9C, 0xB8AE}, - {0x5E9D, 0x8EE4},{0x5E9E, 0xC5D3},{0x5E9F, 0xB7CF},{0x5EA0, 0xE2D4},{0x5EA1, 0x8EE5},{0x5EA2, 0x8EE6},{0x5EA3, 0x8EE7},{0x5EA4, 0x8EE8}, - {0x5EA5, 0xE2D3},{0x5EA6, 0xB6C8},{0x5EA7, 0xD7F9},{0x5EA8, 0x8EE9},{0x5EA9, 0x8EEA},{0x5EAA, 0x8EEB},{0x5EAB, 0x8EEC},{0x5EAC, 0x8EED}, - {0x5EAD, 0xCDA5},{0x5EAE, 0x8EEE},{0x5EAF, 0x8EEF},{0x5EB0, 0x8EF0},{0x5EB1, 0x8EF1},{0x5EB2, 0x8EF2},{0x5EB3, 0xE2D8},{0x5EB4, 0x8EF3}, - {0x5EB5, 0xE2D6},{0x5EB6, 0xCAFC},{0x5EB7, 0xBFB5},{0x5EB8, 0xD3B9},{0x5EB9, 0xE2D5},{0x5EBA, 0x8EF4},{0x5EBB, 0x8EF5},{0x5EBC, 0x8EF6}, - {0x5EBD, 0x8EF7},{0x5EBE, 0xE2D7},{0x5EBF, 0x8EF8},{0x5EC0, 0x8EF9},{0x5EC1, 0x8EFA},{0x5EC2, 0x8EFB},{0x5EC3, 0x8EFC},{0x5EC4, 0x8EFD}, - {0x5EC5, 0x8EFE},{0x5EC6, 0x8F40},{0x5EC7, 0x8F41},{0x5EC8, 0x8F42},{0x5EC9, 0xC1AE},{0x5ECA, 0xC0C8},{0x5ECB, 0x8F43},{0x5ECC, 0x8F44}, - {0x5ECD, 0x8F45},{0x5ECE, 0x8F46},{0x5ECF, 0x8F47},{0x5ED0, 0x8F48},{0x5ED1, 0xE2DB},{0x5ED2, 0xE2DA},{0x5ED3, 0xC0AA},{0x5ED4, 0x8F49}, - {0x5ED5, 0x8F4A},{0x5ED6, 0xC1CE},{0x5ED7, 0x8F4B},{0x5ED8, 0x8F4C},{0x5ED9, 0x8F4D},{0x5EDA, 0x8F4E},{0x5EDB, 0xE2DC},{0x5EDC, 0x8F4F}, - {0x5EDD, 0x8F50},{0x5EDE, 0x8F51},{0x5EDF, 0x8F52},{0x5EE0, 0x8F53},{0x5EE1, 0x8F54},{0x5EE2, 0x8F55},{0x5EE3, 0x8F56},{0x5EE4, 0x8F57}, - {0x5EE5, 0x8F58},{0x5EE6, 0x8F59},{0x5EE7, 0x8F5A},{0x5EE8, 0xE2DD},{0x5EE9, 0x8F5B},{0x5EEA, 0xE2DE},{0x5EEB, 0x8F5C},{0x5EEC, 0x8F5D}, - {0x5EED, 0x8F5E},{0x5EEE, 0x8F5F},{0x5EEF, 0x8F60},{0x5EF0, 0x8F61},{0x5EF1, 0x8F62},{0x5EF2, 0x8F63},{0x5EF3, 0x8F64},{0x5EF4, 0xDBC8}, - {0x5EF5, 0x8F65},{0x5EF6, 0xD1D3},{0x5EF7, 0xCDA2},{0x5EF8, 0x8F66},{0x5EF9, 0x8F67},{0x5EFA, 0xBDA8},{0x5EFB, 0x8F68},{0x5EFC, 0x8F69}, - {0x5EFD, 0x8F6A},{0x5EFE, 0xDEC3},{0x5EFF, 0xD8A5},{0x5F00, 0xBFAA},{0x5F01, 0xDBCD},{0x5F02, 0xD2EC},{0x5F03, 0xC6FA},{0x5F04, 0xC5AA}, - {0x5F05, 0x8F6B},{0x5F06, 0x8F6C},{0x5F07, 0x8F6D},{0x5F08, 0xDEC4},{0x5F09, 0x8F6E},{0x5F0A, 0xB1D7},{0x5F0B, 0xDFAE},{0x5F0C, 0x8F6F}, - {0x5F0D, 0x8F70},{0x5F0E, 0x8F71},{0x5F0F, 0xCABD},{0x5F10, 0x8F72},{0x5F11, 0xDFB1},{0x5F12, 0x8F73},{0x5F13, 0xB9AD},{0x5F14, 0x8F74}, - {0x5F15, 0xD2FD},{0x5F16, 0x8F75},{0x5F17, 0xB8A5},{0x5F18, 0xBAEB},{0x5F19, 0x8F76},{0x5F1A, 0x8F77},{0x5F1B, 0xB3DA},{0x5F1C, 0x8F78}, - {0x5F1D, 0x8F79},{0x5F1E, 0x8F7A},{0x5F1F, 0xB5DC},{0x5F20, 0xD5C5},{0x5F21, 0x8F7B},{0x5F22, 0x8F7C},{0x5F23, 0x8F7D},{0x5F24, 0x8F7E}, - {0x5F25, 0xC3D6},{0x5F26, 0xCFD2},{0x5F27, 0xBBA1},{0x5F28, 0x8F80},{0x5F29, 0xE5F3},{0x5F2A, 0xE5F2},{0x5F2B, 0x8F81},{0x5F2C, 0x8F82}, - {0x5F2D, 0xE5F4},{0x5F2E, 0x8F83},{0x5F2F, 0xCDE4},{0x5F30, 0x8F84},{0x5F31, 0xC8F5},{0x5F32, 0x8F85},{0x5F33, 0x8F86},{0x5F34, 0x8F87}, - {0x5F35, 0x8F88},{0x5F36, 0x8F89},{0x5F37, 0x8F8A},{0x5F38, 0x8F8B},{0x5F39, 0xB5AF},{0x5F3A, 0xC7BF},{0x5F3B, 0x8F8C},{0x5F3C, 0xE5F6}, - {0x5F3D, 0x8F8D},{0x5F3E, 0x8F8E},{0x5F3F, 0x8F8F},{0x5F40, 0xECB0},{0x5F41, 0x8F90},{0x5F42, 0x8F91},{0x5F43, 0x8F92},{0x5F44, 0x8F93}, - {0x5F45, 0x8F94},{0x5F46, 0x8F95},{0x5F47, 0x8F96},{0x5F48, 0x8F97},{0x5F49, 0x8F98},{0x5F4A, 0x8F99},{0x5F4B, 0x8F9A},{0x5F4C, 0x8F9B}, - {0x5F4D, 0x8F9C},{0x5F4E, 0x8F9D},{0x5F4F, 0x8F9E},{0x5F50, 0xE5E6},{0x5F51, 0x8F9F},{0x5F52, 0xB9E9},{0x5F53, 0xB5B1},{0x5F54, 0x8FA0}, - {0x5F55, 0xC2BC},{0x5F56, 0xE5E8},{0x5F57, 0xE5E7},{0x5F58, 0xE5E9},{0x5F59, 0x8FA1},{0x5F5A, 0x8FA2},{0x5F5B, 0x8FA3},{0x5F5C, 0x8FA4}, - {0x5F5D, 0xD2CD},{0x5F5E, 0x8FA5},{0x5F5F, 0x8FA6},{0x5F60, 0x8FA7},{0x5F61, 0xE1EA},{0x5F62, 0xD0CE},{0x5F63, 0x8FA8},{0x5F64, 0xCDAE}, - {0x5F65, 0x8FA9},{0x5F66, 0xD1E5},{0x5F67, 0x8FAA},{0x5F68, 0x8FAB},{0x5F69, 0xB2CA},{0x5F6A, 0xB1EB},{0x5F6B, 0x8FAC},{0x5F6C, 0xB1F2}, - {0x5F6D, 0xC5ED},{0x5F6E, 0x8FAD},{0x5F6F, 0x8FAE},{0x5F70, 0xD5C3},{0x5F71, 0xD3B0},{0x5F72, 0x8FAF},{0x5F73, 0xE1DC},{0x5F74, 0x8FB0}, - {0x5F75, 0x8FB1},{0x5F76, 0x8FB2},{0x5F77, 0xE1DD},{0x5F78, 0x8FB3},{0x5F79, 0xD2DB},{0x5F7A, 0x8FB4},{0x5F7B, 0xB3B9},{0x5F7C, 0xB1CB}, - {0x5F7D, 0x8FB5},{0x5F7E, 0x8FB6},{0x5F7F, 0x8FB7},{0x5F80, 0xCDF9},{0x5F81, 0xD5F7},{0x5F82, 0xE1DE},{0x5F83, 0x8FB8},{0x5F84, 0xBEB6}, - {0x5F85, 0xB4FD},{0x5F86, 0x8FB9},{0x5F87, 0xE1DF},{0x5F88, 0xBADC},{0x5F89, 0xE1E0},{0x5F8A, 0xBBB2},{0x5F8B, 0xC2C9},{0x5F8C, 0xE1E1}, - {0x5F8D, 0x8FBA},{0x5F8E, 0x8FBB},{0x5F8F, 0x8FBC},{0x5F90, 0xD0EC},{0x5F91, 0x8FBD},{0x5F92, 0xCDBD},{0x5F93, 0x8FBE},{0x5F94, 0x8FBF}, - {0x5F95, 0xE1E2},{0x5F96, 0x8FC0},{0x5F97, 0xB5C3},{0x5F98, 0xC5C7},{0x5F99, 0xE1E3},{0x5F9A, 0x8FC1},{0x5F9B, 0x8FC2},{0x5F9C, 0xE1E4}, - {0x5F9D, 0x8FC3},{0x5F9E, 0x8FC4},{0x5F9F, 0x8FC5},{0x5FA0, 0x8FC6},{0x5FA1, 0xD3F9},{0x5FA2, 0x8FC7},{0x5FA3, 0x8FC8},{0x5FA4, 0x8FC9}, - {0x5FA5, 0x8FCA},{0x5FA6, 0x8FCB},{0x5FA7, 0x8FCC},{0x5FA8, 0xE1E5},{0x5FA9, 0x8FCD},{0x5FAA, 0xD1AD},{0x5FAB, 0x8FCE},{0x5FAC, 0x8FCF}, - {0x5FAD, 0xE1E6},{0x5FAE, 0xCEA2},{0x5FAF, 0x8FD0},{0x5FB0, 0x8FD1},{0x5FB1, 0x8FD2},{0x5FB2, 0x8FD3},{0x5FB3, 0x8FD4},{0x5FB4, 0x8FD5}, - {0x5FB5, 0xE1E7},{0x5FB6, 0x8FD6},{0x5FB7, 0xB5C2},{0x5FB8, 0x8FD7},{0x5FB9, 0x8FD8},{0x5FBA, 0x8FD9},{0x5FBB, 0x8FDA},{0x5FBC, 0xE1E8}, - {0x5FBD, 0xBBD5},{0x5FBE, 0x8FDB},{0x5FBF, 0x8FDC},{0x5FC0, 0x8FDD},{0x5FC1, 0x8FDE},{0x5FC2, 0x8FDF},{0x5FC3, 0xD0C4},{0x5FC4, 0xE2E0}, - {0x5FC5, 0xB1D8},{0x5FC6, 0xD2E4},{0x5FC7, 0x8FE0},{0x5FC8, 0x8FE1},{0x5FC9, 0xE2E1},{0x5FCA, 0x8FE2},{0x5FCB, 0x8FE3},{0x5FCC, 0xBCC9}, - {0x5FCD, 0xC8CC},{0x5FCE, 0x8FE4},{0x5FCF, 0xE2E3},{0x5FD0, 0xECFE},{0x5FD1, 0xECFD},{0x5FD2, 0xDFAF},{0x5FD3, 0x8FE5},{0x5FD4, 0x8FE6}, - {0x5FD5, 0x8FE7},{0x5FD6, 0xE2E2},{0x5FD7, 0xD6BE},{0x5FD8, 0xCDFC},{0x5FD9, 0xC3A6},{0x5FDA, 0x8FE8},{0x5FDB, 0x8FE9},{0x5FDC, 0x8FEA}, - {0x5FDD, 0xE3C3},{0x5FDE, 0x8FEB},{0x5FDF, 0x8FEC},{0x5FE0, 0xD6D2},{0x5FE1, 0xE2E7},{0x5FE2, 0x8FED},{0x5FE3, 0x8FEE},{0x5FE4, 0xE2E8}, - {0x5FE5, 0x8FEF},{0x5FE6, 0x8FF0},{0x5FE7, 0xD3C7},{0x5FE8, 0x8FF1},{0x5FE9, 0x8FF2},{0x5FEA, 0xE2EC},{0x5FEB, 0xBFEC},{0x5FEC, 0x8FF3}, - {0x5FED, 0xE2ED},{0x5FEE, 0xE2E5},{0x5FEF, 0x8FF4},{0x5FF0, 0x8FF5},{0x5FF1, 0xB3C0},{0x5FF2, 0x8FF6},{0x5FF3, 0x8FF7},{0x5FF4, 0x8FF8}, - {0x5FF5, 0xC4EE},{0x5FF6, 0x8FF9},{0x5FF7, 0x8FFA},{0x5FF8, 0xE2EE},{0x5FF9, 0x8FFB},{0x5FFA, 0x8FFC},{0x5FFB, 0xD0C3},{0x5FFC, 0x8FFD}, - {0x5FFD, 0xBAF6},{0x5FFE, 0xE2E9},{0x5FFF, 0xB7DE},{0x6000, 0xBBB3},{0x6001, 0xCCAC},{0x6002, 0xCBCB},{0x6003, 0xE2E4},{0x6004, 0xE2E6}, - {0x6005, 0xE2EA},{0x6006, 0xE2EB},{0x6007, 0x8FFE},{0x6008, 0x9040},{0x6009, 0x9041},{0x600A, 0xE2F7},{0x600B, 0x9042},{0x600C, 0x9043}, - {0x600D, 0xE2F4},{0x600E, 0xD4F5},{0x600F, 0xE2F3},{0x6010, 0x9044},{0x6011, 0x9045},{0x6012, 0xC5AD},{0x6013, 0x9046},{0x6014, 0xD5FA}, - {0x6015, 0xC5C2},{0x6016, 0xB2C0},{0x6017, 0x9047},{0x6018, 0x9048},{0x6019, 0xE2EF},{0x601A, 0x9049},{0x601B, 0xE2F2},{0x601C, 0xC1AF}, - {0x601D, 0xCBBC},{0x601E, 0x904A},{0x601F, 0x904B},{0x6020, 0xB5A1},{0x6021, 0xE2F9},{0x6022, 0x904C},{0x6023, 0x904D},{0x6024, 0x904E}, - {0x6025, 0xBCB1},{0x6026, 0xE2F1},{0x6027, 0xD0D4},{0x6028, 0xD4B9},{0x6029, 0xE2F5},{0x602A, 0xB9D6},{0x602B, 0xE2F6},{0x602C, 0x904F}, - {0x602D, 0x9050},{0x602E, 0x9051},{0x602F, 0xC7D3},{0x6030, 0x9052},{0x6031, 0x9053},{0x6032, 0x9054},{0x6033, 0x9055},{0x6034, 0x9056}, - {0x6035, 0xE2F0},{0x6036, 0x9057},{0x6037, 0x9058},{0x6038, 0x9059},{0x6039, 0x905A},{0x603A, 0x905B},{0x603B, 0xD7DC},{0x603C, 0xEDA1}, - {0x603D, 0x905C},{0x603E, 0x905D},{0x603F, 0xE2F8},{0x6040, 0x905E},{0x6041, 0xEDA5},{0x6042, 0xE2FE},{0x6043, 0xCAD1},{0x6044, 0x905F}, - {0x6045, 0x9060},{0x6046, 0x9061},{0x6047, 0x9062},{0x6048, 0x9063},{0x6049, 0x9064},{0x604A, 0x9065},{0x604B, 0xC1B5},{0x604C, 0x9066}, - {0x604D, 0xBBD0},{0x604E, 0x9067},{0x604F, 0x9068},{0x6050, 0xBFD6},{0x6051, 0x9069},{0x6052, 0xBAE3},{0x6053, 0x906A},{0x6054, 0x906B}, - {0x6055, 0xCBA1},{0x6056, 0x906C},{0x6057, 0x906D},{0x6058, 0x906E},{0x6059, 0xEDA6},{0x605A, 0xEDA3},{0x605B, 0x906F},{0x605C, 0x9070}, - {0x605D, 0xEDA2},{0x605E, 0x9071},{0x605F, 0x9072},{0x6060, 0x9073},{0x6061, 0x9074},{0x6062, 0xBBD6},{0x6063, 0xEDA7},{0x6064, 0xD0F4}, - {0x6065, 0x9075},{0x6066, 0x9076},{0x6067, 0xEDA4},{0x6068, 0xBADE},{0x6069, 0xB6F7},{0x606A, 0xE3A1},{0x606B, 0xB6B2},{0x606C, 0xCCF1}, - {0x606D, 0xB9A7},{0x606E, 0x9077},{0x606F, 0xCFA2},{0x6070, 0xC7A1},{0x6071, 0x9078},{0x6072, 0x9079},{0x6073, 0xBFD2},{0x6074, 0x907A}, - {0x6075, 0x907B},{0x6076, 0xB6F1},{0x6077, 0x907C},{0x6078, 0xE2FA},{0x6079, 0xE2FB},{0x607A, 0xE2FD},{0x607B, 0xE2FC},{0x607C, 0xC4D5}, - {0x607D, 0xE3A2},{0x607E, 0x907D},{0x607F, 0xD3C1},{0x6080, 0x907E},{0x6081, 0x9080},{0x6082, 0x9081},{0x6083, 0xE3A7},{0x6084, 0xC7C4}, - {0x6085, 0x9082},{0x6086, 0x9083},{0x6087, 0x9084},{0x6088, 0x9085},{0x6089, 0xCFA4},{0x608A, 0x9086},{0x608B, 0x9087},{0x608C, 0xE3A9}, - {0x608D, 0xBAB7},{0x608E, 0x9088},{0x608F, 0x9089},{0x6090, 0x908A},{0x6091, 0x908B},{0x6092, 0xE3A8},{0x6093, 0x908C},{0x6094, 0xBBDA}, - {0x6095, 0x908D},{0x6096, 0xE3A3},{0x6097, 0x908E},{0x6098, 0x908F},{0x6099, 0x9090},{0x609A, 0xE3A4},{0x609B, 0xE3AA},{0x609C, 0x9091}, - {0x609D, 0xE3A6},{0x609E, 0x9092},{0x609F, 0xCEF2},{0x60A0, 0xD3C6},{0x60A1, 0x9093},{0x60A2, 0x9094},{0x60A3, 0xBBBC},{0x60A4, 0x9095}, - {0x60A5, 0x9096},{0x60A6, 0xD4C3},{0x60A7, 0x9097},{0x60A8, 0xC4FA},{0x60A9, 0x9098},{0x60AA, 0x9099},{0x60AB, 0xEDA8},{0x60AC, 0xD0FC}, - {0x60AD, 0xE3A5},{0x60AE, 0x909A},{0x60AF, 0xC3F5},{0x60B0, 0x909B},{0x60B1, 0xE3AD},{0x60B2, 0xB1AF},{0x60B3, 0x909C},{0x60B4, 0xE3B2}, - {0x60B5, 0x909D},{0x60B6, 0x909E},{0x60B7, 0x909F},{0x60B8, 0xBCC2},{0x60B9, 0x90A0},{0x60BA, 0x90A1},{0x60BB, 0xE3AC},{0x60BC, 0xB5BF}, - {0x60BD, 0x90A2},{0x60BE, 0x90A3},{0x60BF, 0x90A4},{0x60C0, 0x90A5},{0x60C1, 0x90A6},{0x60C2, 0x90A7},{0x60C3, 0x90A8},{0x60C4, 0x90A9}, - {0x60C5, 0xC7E9},{0x60C6, 0xE3B0},{0x60C7, 0x90AA},{0x60C8, 0x90AB},{0x60C9, 0x90AC},{0x60CA, 0xBEAA},{0x60CB, 0xCDEF},{0x60CC, 0x90AD}, - {0x60CD, 0x90AE},{0x60CE, 0x90AF},{0x60CF, 0x90B0},{0x60D0, 0x90B1},{0x60D1, 0xBBF3},{0x60D2, 0x90B2},{0x60D3, 0x90B3},{0x60D4, 0x90B4}, - {0x60D5, 0xCCE8},{0x60D6, 0x90B5},{0x60D7, 0x90B6},{0x60D8, 0xE3AF},{0x60D9, 0x90B7},{0x60DA, 0xE3B1},{0x60DB, 0x90B8},{0x60DC, 0xCFA7}, - {0x60DD, 0xE3AE},{0x60DE, 0x90B9},{0x60DF, 0xCEA9},{0x60E0, 0xBBDD},{0x60E1, 0x90BA},{0x60E2, 0x90BB},{0x60E3, 0x90BC},{0x60E4, 0x90BD}, - {0x60E5, 0x90BE},{0x60E6, 0xB5EB},{0x60E7, 0xBEE5},{0x60E8, 0xB2D2},{0x60E9, 0xB3CD},{0x60EA, 0x90BF},{0x60EB, 0xB1B9},{0x60EC, 0xE3AB}, - {0x60ED, 0xB2D1},{0x60EE, 0xB5AC},{0x60EF, 0xB9DF},{0x60F0, 0xB6E8},{0x60F1, 0x90C0},{0x60F2, 0x90C1},{0x60F3, 0xCFEB},{0x60F4, 0xE3B7}, - {0x60F5, 0x90C2},{0x60F6, 0xBBCC},{0x60F7, 0x90C3},{0x60F8, 0x90C4},{0x60F9, 0xC8C7},{0x60FA, 0xD0CA},{0x60FB, 0x90C5},{0x60FC, 0x90C6}, - {0x60FD, 0x90C7},{0x60FE, 0x90C8},{0x60FF, 0x90C9},{0x6100, 0xE3B8},{0x6101, 0xB3EE},{0x6102, 0x90CA},{0x6103, 0x90CB},{0x6104, 0x90CC}, - {0x6105, 0x90CD},{0x6106, 0xEDA9},{0x6107, 0x90CE},{0x6108, 0xD3FA},{0x6109, 0xD3E4},{0x610A, 0x90CF},{0x610B, 0x90D0},{0x610C, 0x90D1}, - {0x610D, 0xEDAA},{0x610E, 0xE3B9},{0x610F, 0xD2E2},{0x6110, 0x90D2},{0x6111, 0x90D3},{0x6112, 0x90D4},{0x6113, 0x90D5},{0x6114, 0x90D6}, - {0x6115, 0xE3B5},{0x6116, 0x90D7},{0x6117, 0x90D8},{0x6118, 0x90D9},{0x6119, 0x90DA},{0x611A, 0xD3DE},{0x611B, 0x90DB},{0x611C, 0x90DC}, - {0x611D, 0x90DD},{0x611E, 0x90DE},{0x611F, 0xB8D0},{0x6120, 0xE3B3},{0x6121, 0x90DF},{0x6122, 0x90E0},{0x6123, 0xE3B6},{0x6124, 0xB7DF}, - {0x6125, 0x90E1},{0x6126, 0xE3B4},{0x6127, 0xC0A2},{0x6128, 0x90E2},{0x6129, 0x90E3},{0x612A, 0x90E4},{0x612B, 0xE3BA},{0x612C, 0x90E5}, - {0x612D, 0x90E6},{0x612E, 0x90E7},{0x612F, 0x90E8},{0x6130, 0x90E9},{0x6131, 0x90EA},{0x6132, 0x90EB},{0x6133, 0x90EC},{0x6134, 0x90ED}, - {0x6135, 0x90EE},{0x6136, 0x90EF},{0x6137, 0x90F0},{0x6138, 0x90F1},{0x6139, 0x90F2},{0x613A, 0x90F3},{0x613B, 0x90F4},{0x613C, 0x90F5}, - {0x613D, 0x90F6},{0x613E, 0x90F7},{0x613F, 0xD4B8},{0x6140, 0x90F8},{0x6141, 0x90F9},{0x6142, 0x90FA},{0x6143, 0x90FB},{0x6144, 0x90FC}, - {0x6145, 0x90FD},{0x6146, 0x90FE},{0x6147, 0x9140},{0x6148, 0xB4C8},{0x6149, 0x9141},{0x614A, 0xE3BB},{0x614B, 0x9142},{0x614C, 0xBBC5}, - {0x614D, 0x9143},{0x614E, 0xC9F7},{0x614F, 0x9144},{0x6150, 0x9145},{0x6151, 0xC9E5},{0x6152, 0x9146},{0x6153, 0x9147},{0x6154, 0x9148}, - {0x6155, 0xC4BD},{0x6156, 0x9149},{0x6157, 0x914A},{0x6158, 0x914B},{0x6159, 0x914C},{0x615A, 0x914D},{0x615B, 0x914E},{0x615C, 0x914F}, - {0x615D, 0xEDAB},{0x615E, 0x9150},{0x615F, 0x9151},{0x6160, 0x9152},{0x6161, 0x9153},{0x6162, 0xC2FD},{0x6163, 0x9154},{0x6164, 0x9155}, - {0x6165, 0x9156},{0x6166, 0x9157},{0x6167, 0xBBDB},{0x6168, 0xBFAE},{0x6169, 0x9158},{0x616A, 0x9159},{0x616B, 0x915A},{0x616C, 0x915B}, - {0x616D, 0x915C},{0x616E, 0x915D},{0x616F, 0x915E},{0x6170, 0xCEBF},{0x6171, 0x915F},{0x6172, 0x9160},{0x6173, 0x9161},{0x6174, 0x9162}, - {0x6175, 0xE3BC},{0x6176, 0x9163},{0x6177, 0xBFB6},{0x6178, 0x9164},{0x6179, 0x9165},{0x617A, 0x9166},{0x617B, 0x9167},{0x617C, 0x9168}, - {0x617D, 0x9169},{0x617E, 0x916A},{0x617F, 0x916B},{0x6180, 0x916C},{0x6181, 0x916D},{0x6182, 0x916E},{0x6183, 0x916F},{0x6184, 0x9170}, - {0x6185, 0x9171},{0x6186, 0x9172},{0x6187, 0x9173},{0x6188, 0x9174},{0x6189, 0x9175},{0x618A, 0x9176},{0x618B, 0xB1EF},{0x618C, 0x9177}, - {0x618D, 0x9178},{0x618E, 0xD4F7},{0x618F, 0x9179},{0x6190, 0x917A},{0x6191, 0x917B},{0x6192, 0x917C},{0x6193, 0x917D},{0x6194, 0xE3BE}, - {0x6195, 0x917E},{0x6196, 0x9180},{0x6197, 0x9181},{0x6198, 0x9182},{0x6199, 0x9183},{0x619A, 0x9184},{0x619B, 0x9185},{0x619C, 0x9186}, - {0x619D, 0xEDAD},{0x619E, 0x9187},{0x619F, 0x9188},{0x61A0, 0x9189},{0x61A1, 0x918A},{0x61A2, 0x918B},{0x61A3, 0x918C},{0x61A4, 0x918D}, - {0x61A5, 0x918E},{0x61A6, 0x918F},{0x61A7, 0xE3BF},{0x61A8, 0xBAA9},{0x61A9, 0xEDAC},{0x61AA, 0x9190},{0x61AB, 0x9191},{0x61AC, 0xE3BD}, - {0x61AD, 0x9192},{0x61AE, 0x9193},{0x61AF, 0x9194},{0x61B0, 0x9195},{0x61B1, 0x9196},{0x61B2, 0x9197},{0x61B3, 0x9198},{0x61B4, 0x9199}, - {0x61B5, 0x919A},{0x61B6, 0x919B},{0x61B7, 0xE3C0},{0x61B8, 0x919C},{0x61B9, 0x919D},{0x61BA, 0x919E},{0x61BB, 0x919F},{0x61BC, 0x91A0}, - {0x61BD, 0x91A1},{0x61BE, 0xBAB6},{0x61BF, 0x91A2},{0x61C0, 0x91A3},{0x61C1, 0x91A4},{0x61C2, 0xB6AE},{0x61C3, 0x91A5},{0x61C4, 0x91A6}, - {0x61C5, 0x91A7},{0x61C6, 0x91A8},{0x61C7, 0x91A9},{0x61C8, 0xD0B8},{0x61C9, 0x91AA},{0x61CA, 0xB0C3},{0x61CB, 0xEDAE},{0x61CC, 0x91AB}, - {0x61CD, 0x91AC},{0x61CE, 0x91AD},{0x61CF, 0x91AE},{0x61D0, 0x91AF},{0x61D1, 0xEDAF},{0x61D2, 0xC0C1},{0x61D3, 0x91B0},{0x61D4, 0xE3C1}, - {0x61D5, 0x91B1},{0x61D6, 0x91B2},{0x61D7, 0x91B3},{0x61D8, 0x91B4},{0x61D9, 0x91B5},{0x61DA, 0x91B6},{0x61DB, 0x91B7},{0x61DC, 0x91B8}, - {0x61DD, 0x91B9},{0x61DE, 0x91BA},{0x61DF, 0x91BB},{0x61E0, 0x91BC},{0x61E1, 0x91BD},{0x61E2, 0x91BE},{0x61E3, 0x91BF},{0x61E4, 0x91C0}, - {0x61E5, 0x91C1},{0x61E6, 0xC5B3},{0x61E7, 0x91C2},{0x61E8, 0x91C3},{0x61E9, 0x91C4},{0x61EA, 0x91C5},{0x61EB, 0x91C6},{0x61EC, 0x91C7}, - {0x61ED, 0x91C8},{0x61EE, 0x91C9},{0x61EF, 0x91CA},{0x61F0, 0x91CB},{0x61F1, 0x91CC},{0x61F2, 0x91CD},{0x61F3, 0x91CE},{0x61F4, 0x91CF}, - {0x61F5, 0xE3C2},{0x61F6, 0x91D0},{0x61F7, 0x91D1},{0x61F8, 0x91D2},{0x61F9, 0x91D3},{0x61FA, 0x91D4},{0x61FB, 0x91D5},{0x61FC, 0x91D6}, - {0x61FD, 0x91D7},{0x61FE, 0x91D8},{0x61FF, 0xDCB2},{0x6200, 0x91D9},{0x6201, 0x91DA},{0x6202, 0x91DB},{0x6203, 0x91DC},{0x6204, 0x91DD}, - {0x6205, 0x91DE},{0x6206, 0xEDB0},{0x6207, 0x91DF},{0x6208, 0xB8EA},{0x6209, 0x91E0},{0x620A, 0xCEEC},{0x620B, 0xEAA7},{0x620C, 0xD0E7}, - {0x620D, 0xCAF9},{0x620E, 0xC8D6},{0x620F, 0xCFB7},{0x6210, 0xB3C9},{0x6211, 0xCED2},{0x6212, 0xBDE4},{0x6213, 0x91E1},{0x6214, 0x91E2}, - {0x6215, 0xE3DE},{0x6216, 0xBBF2},{0x6217, 0xEAA8},{0x6218, 0xD5BD},{0x6219, 0x91E3},{0x621A, 0xC6DD},{0x621B, 0xEAA9},{0x621C, 0x91E4}, - {0x621D, 0x91E5},{0x621E, 0x91E6},{0x621F, 0xEAAA},{0x6220, 0x91E7},{0x6221, 0xEAAC},{0x6222, 0xEAAB},{0x6223, 0x91E8},{0x6224, 0xEAAE}, - {0x6225, 0xEAAD},{0x6226, 0x91E9},{0x6227, 0x91EA},{0x6228, 0x91EB},{0x6229, 0x91EC},{0x622A, 0xBDD8},{0x622B, 0x91ED},{0x622C, 0xEAAF}, - {0x622D, 0x91EE},{0x622E, 0xC2BE},{0x622F, 0x91EF},{0x6230, 0x91F0},{0x6231, 0x91F1},{0x6232, 0x91F2},{0x6233, 0xB4C1},{0x6234, 0xB4F7}, - {0x6235, 0x91F3},{0x6236, 0x91F4},{0x6237, 0xBBA7},{0x6238, 0x91F5},{0x6239, 0x91F6},{0x623A, 0x91F7},{0x623B, 0x91F8},{0x623C, 0x91F9}, - {0x623D, 0xECE6},{0x623E, 0xECE5},{0x623F, 0xB7BF},{0x6240, 0xCBF9},{0x6241, 0xB1E2},{0x6242, 0x91FA},{0x6243, 0xECE7},{0x6244, 0x91FB}, - {0x6245, 0x91FC},{0x6246, 0x91FD},{0x6247, 0xC9C8},{0x6248, 0xECE8},{0x6249, 0xECE9},{0x624A, 0x91FE},{0x624B, 0xCAD6},{0x624C, 0xDED0}, - {0x624D, 0xB2C5},{0x624E, 0xD4FA},{0x624F, 0x9240},{0x6250, 0x9241},{0x6251, 0xC6CB},{0x6252, 0xB0C7},{0x6253, 0xB4F2},{0x6254, 0xC8D3}, - {0x6255, 0x9242},{0x6256, 0x9243},{0x6257, 0x9244},{0x6258, 0xCDD0},{0x6259, 0x9245},{0x625A, 0x9246},{0x625B, 0xBFB8},{0x625C, 0x9247}, - {0x625D, 0x9248},{0x625E, 0x9249},{0x625F, 0x924A},{0x6260, 0x924B},{0x6261, 0x924C},{0x6262, 0x924D},{0x6263, 0xBFDB},{0x6264, 0x924E}, - {0x6265, 0x924F},{0x6266, 0xC7A4},{0x6267, 0xD6B4},{0x6268, 0x9250},{0x6269, 0xC0A9},{0x626A, 0xDED1},{0x626B, 0xC9A8},{0x626C, 0xD1EF}, - {0x626D, 0xC5A4},{0x626E, 0xB0E7},{0x626F, 0xB3B6},{0x6270, 0xC8C5},{0x6271, 0x9251},{0x6272, 0x9252},{0x6273, 0xB0E2},{0x6274, 0x9253}, - {0x6275, 0x9254},{0x6276, 0xB7F6},{0x6277, 0x9255},{0x6278, 0x9256},{0x6279, 0xC5FA},{0x627A, 0x9257},{0x627B, 0x9258},{0x627C, 0xB6F3}, - {0x627D, 0x9259},{0x627E, 0xD5D2},{0x627F, 0xB3D0},{0x6280, 0xBCBC},{0x6281, 0x925A},{0x6282, 0x925B},{0x6283, 0x925C},{0x6284, 0xB3AD}, - {0x6285, 0x925D},{0x6286, 0x925E},{0x6287, 0x925F},{0x6288, 0x9260},{0x6289, 0xBEF1},{0x628A, 0xB0D1},{0x628B, 0x9261},{0x628C, 0x9262}, - {0x628D, 0x9263},{0x628E, 0x9264},{0x628F, 0x9265},{0x6290, 0x9266},{0x6291, 0xD2D6},{0x6292, 0xCAE3},{0x6293, 0xD7A5},{0x6294, 0x9267}, - {0x6295, 0xCDB6},{0x6296, 0xB6B6},{0x6297, 0xBFB9},{0x6298, 0xD5DB},{0x6299, 0x9268},{0x629A, 0xB8A7},{0x629B, 0xC5D7},{0x629C, 0x9269}, - {0x629D, 0x926A},{0x629E, 0x926B},{0x629F, 0xDED2},{0x62A0, 0xBFD9},{0x62A1, 0xC2D5},{0x62A2, 0xC7C0},{0x62A3, 0x926C},{0x62A4, 0xBBA4}, - {0x62A5, 0xB1A8},{0x62A6, 0x926D},{0x62A7, 0x926E},{0x62A8, 0xC5EA},{0x62A9, 0x926F},{0x62AA, 0x9270},{0x62AB, 0xC5FB},{0x62AC, 0xCCA7}, - {0x62AD, 0x9271},{0x62AE, 0x9272},{0x62AF, 0x9273},{0x62B0, 0x9274},{0x62B1, 0xB1A7},{0x62B2, 0x9275},{0x62B3, 0x9276},{0x62B4, 0x9277}, - {0x62B5, 0xB5D6},{0x62B6, 0x9278},{0x62B7, 0x9279},{0x62B8, 0x927A},{0x62B9, 0xC4A8},{0x62BA, 0x927B},{0x62BB, 0xDED3},{0x62BC, 0xD1BA}, - {0x62BD, 0xB3E9},{0x62BE, 0x927C},{0x62BF, 0xC3F2},{0x62C0, 0x927D},{0x62C1, 0x927E},{0x62C2, 0xB7F7},{0x62C3, 0x9280},{0x62C4, 0xD6F4}, - {0x62C5, 0xB5A3},{0x62C6, 0xB2F0},{0x62C7, 0xC4B4},{0x62C8, 0xC4E9},{0x62C9, 0xC0AD},{0x62CA, 0xDED4},{0x62CB, 0x9281},{0x62CC, 0xB0E8}, - {0x62CD, 0xC5C4},{0x62CE, 0xC1E0},{0x62CF, 0x9282},{0x62D0, 0xB9D5},{0x62D1, 0x9283},{0x62D2, 0xBEDC},{0x62D3, 0xCDD8},{0x62D4, 0xB0CE}, - {0x62D5, 0x9284},{0x62D6, 0xCDCF},{0x62D7, 0xDED6},{0x62D8, 0xBED0},{0x62D9, 0xD7BE},{0x62DA, 0xDED5},{0x62DB, 0xD5D0},{0x62DC, 0xB0DD}, - {0x62DD, 0x9285},{0x62DE, 0x9286},{0x62DF, 0xC4E2},{0x62E0, 0x9287},{0x62E1, 0x9288},{0x62E2, 0xC2A3},{0x62E3, 0xBCF0},{0x62E4, 0x9289}, - {0x62E5, 0xD3B5},{0x62E6, 0xC0B9},{0x62E7, 0xC5A1},{0x62E8, 0xB2A6},{0x62E9, 0xD4F1},{0x62EA, 0x928A},{0x62EB, 0x928B},{0x62EC, 0xC0A8}, - {0x62ED, 0xCAC3},{0x62EE, 0xDED7},{0x62EF, 0xD5FC},{0x62F0, 0x928C},{0x62F1, 0xB9B0},{0x62F2, 0x928D},{0x62F3, 0xC8AD},{0x62F4, 0xCBA9}, - {0x62F5, 0x928E},{0x62F6, 0xDED9},{0x62F7, 0xBFBD},{0x62F8, 0x928F},{0x62F9, 0x9290},{0x62FA, 0x9291},{0x62FB, 0x9292},{0x62FC, 0xC6B4}, - {0x62FD, 0xD7A7},{0x62FE, 0xCAB0},{0x62FF, 0xC4C3},{0x6300, 0x9293},{0x6301, 0xB3D6},{0x6302, 0xB9D2},{0x6303, 0x9294},{0x6304, 0x9295}, - {0x6305, 0x9296},{0x6306, 0x9297},{0x6307, 0xD6B8},{0x6308, 0xEAFC},{0x6309, 0xB0B4},{0x630A, 0x9298},{0x630B, 0x9299},{0x630C, 0x929A}, - {0x630D, 0x929B},{0x630E, 0xBFE6},{0x630F, 0x929C},{0x6310, 0x929D},{0x6311, 0xCCF4},{0x6312, 0x929E},{0x6313, 0x929F},{0x6314, 0x92A0}, - {0x6315, 0x92A1},{0x6316, 0xCDDA},{0x6317, 0x92A2},{0x6318, 0x92A3},{0x6319, 0x92A4},{0x631A, 0xD6BF},{0x631B, 0xC2CE},{0x631C, 0x92A5}, - {0x631D, 0xCECE},{0x631E, 0xCCA2},{0x631F, 0xD0AE},{0x6320, 0xC4D3},{0x6321, 0xB5B2},{0x6322, 0xDED8},{0x6323, 0xD5F5},{0x6324, 0xBCB7}, - {0x6325, 0xBBD3},{0x6326, 0x92A6},{0x6327, 0x92A7},{0x6328, 0xB0A4},{0x6329, 0x92A8},{0x632A, 0xC5B2},{0x632B, 0xB4EC},{0x632C, 0x92A9}, - {0x632D, 0x92AA},{0x632E, 0x92AB},{0x632F, 0xD5F1},{0x6330, 0x92AC},{0x6331, 0x92AD},{0x6332, 0xEAFD},{0x6333, 0x92AE},{0x6334, 0x92AF}, - {0x6335, 0x92B0},{0x6336, 0x92B1},{0x6337, 0x92B2},{0x6338, 0x92B3},{0x6339, 0xDEDA},{0x633A, 0xCDA6},{0x633B, 0x92B4},{0x633C, 0x92B5}, - {0x633D, 0xCDEC},{0x633E, 0x92B6},{0x633F, 0x92B7},{0x6340, 0x92B8},{0x6341, 0x92B9},{0x6342, 0xCEE6},{0x6343, 0xDEDC},{0x6344, 0x92BA}, - {0x6345, 0xCDB1},{0x6346, 0xC0A6},{0x6347, 0x92BB},{0x6348, 0x92BC},{0x6349, 0xD7BD},{0x634A, 0x92BD},{0x634B, 0xDEDB},{0x634C, 0xB0C6}, - {0x634D, 0xBAB4},{0x634E, 0xC9D3},{0x634F, 0xC4F3},{0x6350, 0xBEE8},{0x6351, 0x92BE},{0x6352, 0x92BF},{0x6353, 0x92C0},{0x6354, 0x92C1}, - {0x6355, 0xB2B6},{0x6356, 0x92C2},{0x6357, 0x92C3},{0x6358, 0x92C4},{0x6359, 0x92C5},{0x635A, 0x92C6},{0x635B, 0x92C7},{0x635C, 0x92C8}, - {0x635D, 0x92C9},{0x635E, 0xC0CC},{0x635F, 0xCBF0},{0x6360, 0x92CA},{0x6361, 0xBCF1},{0x6362, 0xBBBB},{0x6363, 0xB5B7},{0x6364, 0x92CB}, - {0x6365, 0x92CC},{0x6366, 0x92CD},{0x6367, 0xC5F5},{0x6368, 0x92CE},{0x6369, 0xDEE6},{0x636A, 0x92CF},{0x636B, 0x92D0},{0x636C, 0x92D1}, - {0x636D, 0xDEE3},{0x636E, 0xBEDD},{0x636F, 0x92D2},{0x6370, 0x92D3},{0x6371, 0xDEDF},{0x6372, 0x92D4},{0x6373, 0x92D5},{0x6374, 0x92D6}, - {0x6375, 0x92D7},{0x6376, 0xB4B7},{0x6377, 0xBDDD},{0x6378, 0x92D8},{0x6379, 0x92D9},{0x637A, 0xDEE0},{0x637B, 0xC4ED},{0x637C, 0x92DA}, - {0x637D, 0x92DB},{0x637E, 0x92DC},{0x637F, 0x92DD},{0x6380, 0xCFC6},{0x6381, 0x92DE},{0x6382, 0xB5E0},{0x6383, 0x92DF},{0x6384, 0x92E0}, - {0x6385, 0x92E1},{0x6386, 0x92E2},{0x6387, 0xB6DE},{0x6388, 0xCADA},{0x6389, 0xB5F4},{0x638A, 0xDEE5},{0x638B, 0x92E3},{0x638C, 0xD5C6}, - {0x638D, 0x92E4},{0x638E, 0xDEE1},{0x638F, 0xCCCD},{0x6390, 0xC6FE},{0x6391, 0x92E5},{0x6392, 0xC5C5},{0x6393, 0x92E6},{0x6394, 0x92E7}, - {0x6395, 0x92E8},{0x6396, 0xD2B4},{0x6397, 0x92E9},{0x6398, 0xBEF2},{0x6399, 0x92EA},{0x639A, 0x92EB},{0x639B, 0x92EC},{0x639C, 0x92ED}, - {0x639D, 0x92EE},{0x639E, 0x92EF},{0x639F, 0x92F0},{0x63A0, 0xC2D3},{0x63A1, 0x92F1},{0x63A2, 0xCCBD},{0x63A3, 0xB3B8},{0x63A4, 0x92F2}, - {0x63A5, 0xBDD3},{0x63A6, 0x92F3},{0x63A7, 0xBFD8},{0x63A8, 0xCDC6},{0x63A9, 0xD1DA},{0x63AA, 0xB4EB},{0x63AB, 0x92F4},{0x63AC, 0xDEE4}, - {0x63AD, 0xDEDD},{0x63AE, 0xDEE7},{0x63AF, 0x92F5},{0x63B0, 0xEAFE},{0x63B1, 0x92F6},{0x63B2, 0x92F7},{0x63B3, 0xC2B0},{0x63B4, 0xDEE2}, - {0x63B5, 0x92F8},{0x63B6, 0x92F9},{0x63B7, 0xD6C0},{0x63B8, 0xB5A7},{0x63B9, 0x92FA},{0x63BA, 0xB2F4},{0x63BB, 0x92FB},{0x63BC, 0xDEE8}, - {0x63BD, 0x92FC},{0x63BE, 0xDEF2},{0x63BF, 0x92FD},{0x63C0, 0x92FE},{0x63C1, 0x9340},{0x63C2, 0x9341},{0x63C3, 0x9342},{0x63C4, 0xDEED}, - {0x63C5, 0x9343},{0x63C6, 0xDEF1},{0x63C7, 0x9344},{0x63C8, 0x9345},{0x63C9, 0xC8E0},{0x63CA, 0x9346},{0x63CB, 0x9347},{0x63CC, 0x9348}, - {0x63CD, 0xD7E1},{0x63CE, 0xDEEF},{0x63CF, 0xC3E8},{0x63D0, 0xCCE1},{0x63D1, 0x9349},{0x63D2, 0xB2E5},{0x63D3, 0x934A},{0x63D4, 0x934B}, - {0x63D5, 0x934C},{0x63D6, 0xD2BE},{0x63D7, 0x934D},{0x63D8, 0x934E},{0x63D9, 0x934F},{0x63DA, 0x9350},{0x63DB, 0x9351},{0x63DC, 0x9352}, - {0x63DD, 0x9353},{0x63DE, 0xDEEE},{0x63DF, 0x9354},{0x63E0, 0xDEEB},{0x63E1, 0xCED5},{0x63E2, 0x9355},{0x63E3, 0xB4A7},{0x63E4, 0x9356}, - {0x63E5, 0x9357},{0x63E6, 0x9358},{0x63E7, 0x9359},{0x63E8, 0x935A},{0x63E9, 0xBFAB},{0x63EA, 0xBEBE},{0x63EB, 0x935B},{0x63EC, 0x935C}, - {0x63ED, 0xBDD2},{0x63EE, 0x935D},{0x63EF, 0x935E},{0x63F0, 0x935F},{0x63F1, 0x9360},{0x63F2, 0xDEE9},{0x63F3, 0x9361},{0x63F4, 0xD4AE}, - {0x63F5, 0x9362},{0x63F6, 0xDEDE},{0x63F7, 0x9363},{0x63F8, 0xDEEA},{0x63F9, 0x9364},{0x63FA, 0x9365},{0x63FB, 0x9366},{0x63FC, 0x9367}, - {0x63FD, 0xC0BF},{0x63FE, 0x9368},{0x63FF, 0xDEEC},{0x6400, 0xB2F3},{0x6401, 0xB8E9},{0x6402, 0xC2A7},{0x6403, 0x9369},{0x6404, 0x936A}, - {0x6405, 0xBDC1},{0x6406, 0x936B},{0x6407, 0x936C},{0x6408, 0x936D},{0x6409, 0x936E},{0x640A, 0x936F},{0x640B, 0xDEF5},{0x640C, 0xDEF8}, - {0x640D, 0x9370},{0x640E, 0x9371},{0x640F, 0xB2AB},{0x6410, 0xB4A4},{0x6411, 0x9372},{0x6412, 0x9373},{0x6413, 0xB4EA},{0x6414, 0xC9A6}, - {0x6415, 0x9374},{0x6416, 0x9375},{0x6417, 0x9376},{0x6418, 0x9377},{0x6419, 0x9378},{0x641A, 0x9379},{0x641B, 0xDEF6},{0x641C, 0xCBD1}, - {0x641D, 0x937A},{0x641E, 0xB8E3},{0x641F, 0x937B},{0x6420, 0xDEF7},{0x6421, 0xDEFA},{0x6422, 0x937C},{0x6423, 0x937D},{0x6424, 0x937E}, - {0x6425, 0x9380},{0x6426, 0xDEF9},{0x6427, 0x9381},{0x6428, 0x9382},{0x6429, 0x9383},{0x642A, 0xCCC2},{0x642B, 0x9384},{0x642C, 0xB0E1}, - {0x642D, 0xB4EE},{0x642E, 0x9385},{0x642F, 0x9386},{0x6430, 0x9387},{0x6431, 0x9388},{0x6432, 0x9389},{0x6433, 0x938A},{0x6434, 0xE5BA}, - {0x6435, 0x938B},{0x6436, 0x938C},{0x6437, 0x938D},{0x6438, 0x938E},{0x6439, 0x938F},{0x643A, 0xD0AF},{0x643B, 0x9390},{0x643C, 0x9391}, - {0x643D, 0xB2EB},{0x643E, 0x9392},{0x643F, 0xEBA1},{0x6440, 0x9393},{0x6441, 0xDEF4},{0x6442, 0x9394},{0x6443, 0x9395},{0x6444, 0xC9E3}, - {0x6445, 0xDEF3},{0x6446, 0xB0DA},{0x6447, 0xD2A1},{0x6448, 0xB1F7},{0x6449, 0x9396},{0x644A, 0xCCAF},{0x644B, 0x9397},{0x644C, 0x9398}, - {0x644D, 0x9399},{0x644E, 0x939A},{0x644F, 0x939B},{0x6450, 0x939C},{0x6451, 0x939D},{0x6452, 0xDEF0},{0x6453, 0x939E},{0x6454, 0xCBA4}, - {0x6455, 0x939F},{0x6456, 0x93A0},{0x6457, 0x93A1},{0x6458, 0xD5AA},{0x6459, 0x93A2},{0x645A, 0x93A3},{0x645B, 0x93A4},{0x645C, 0x93A5}, - {0x645D, 0x93A6},{0x645E, 0xDEFB},{0x645F, 0x93A7},{0x6460, 0x93A8},{0x6461, 0x93A9},{0x6462, 0x93AA},{0x6463, 0x93AB},{0x6464, 0x93AC}, - {0x6465, 0x93AD},{0x6466, 0x93AE},{0x6467, 0xB4DD},{0x6468, 0x93AF},{0x6469, 0xC4A6},{0x646A, 0x93B0},{0x646B, 0x93B1},{0x646C, 0x93B2}, - {0x646D, 0xDEFD},{0x646E, 0x93B3},{0x646F, 0x93B4},{0x6470, 0x93B5},{0x6471, 0x93B6},{0x6472, 0x93B7},{0x6473, 0x93B8},{0x6474, 0x93B9}, - {0x6475, 0x93BA},{0x6476, 0x93BB},{0x6477, 0x93BC},{0x6478, 0xC3FE},{0x6479, 0xC4A1},{0x647A, 0xDFA1},{0x647B, 0x93BD},{0x647C, 0x93BE}, - {0x647D, 0x93BF},{0x647E, 0x93C0},{0x647F, 0x93C1},{0x6480, 0x93C2},{0x6481, 0x93C3},{0x6482, 0xC1CC},{0x6483, 0x93C4},{0x6484, 0xDEFC}, - {0x6485, 0xBEEF},{0x6486, 0x93C5},{0x6487, 0xC6B2},{0x6488, 0x93C6},{0x6489, 0x93C7},{0x648A, 0x93C8},{0x648B, 0x93C9},{0x648C, 0x93CA}, - {0x648D, 0x93CB},{0x648E, 0x93CC},{0x648F, 0x93CD},{0x6490, 0x93CE},{0x6491, 0xB3C5},{0x6492, 0xC8F6},{0x6493, 0x93CF},{0x6494, 0x93D0}, - {0x6495, 0xCBBA},{0x6496, 0xDEFE},{0x6497, 0x93D1},{0x6498, 0x93D2},{0x6499, 0xDFA4},{0x649A, 0x93D3},{0x649B, 0x93D4},{0x649C, 0x93D5}, - {0x649D, 0x93D6},{0x649E, 0xD7B2},{0x649F, 0x93D7},{0x64A0, 0x93D8},{0x64A1, 0x93D9},{0x64A2, 0x93DA},{0x64A3, 0x93DB},{0x64A4, 0xB3B7}, - {0x64A5, 0x93DC},{0x64A6, 0x93DD},{0x64A7, 0x93DE},{0x64A8, 0x93DF},{0x64A9, 0xC1C3},{0x64AA, 0x93E0},{0x64AB, 0x93E1},{0x64AC, 0xC7CB}, - {0x64AD, 0xB2A5},{0x64AE, 0xB4E9},{0x64AF, 0x93E2},{0x64B0, 0xD7AB},{0x64B1, 0x93E3},{0x64B2, 0x93E4},{0x64B3, 0x93E5},{0x64B4, 0x93E6}, - {0x64B5, 0xC4EC},{0x64B6, 0x93E7},{0x64B7, 0xDFA2},{0x64B8, 0xDFA3},{0x64B9, 0x93E8},{0x64BA, 0xDFA5},{0x64BB, 0x93E9},{0x64BC, 0xBAB3}, - {0x64BD, 0x93EA},{0x64BE, 0x93EB},{0x64BF, 0x93EC},{0x64C0, 0xDFA6},{0x64C1, 0x93ED},{0x64C2, 0xC0DE},{0x64C3, 0x93EE},{0x64C4, 0x93EF}, - {0x64C5, 0xC9C3},{0x64C6, 0x93F0},{0x64C7, 0x93F1},{0x64C8, 0x93F2},{0x64C9, 0x93F3},{0x64CA, 0x93F4},{0x64CB, 0x93F5},{0x64CC, 0x93F6}, - {0x64CD, 0xB2D9},{0x64CE, 0xC7E6},{0x64CF, 0x93F7},{0x64D0, 0xDFA7},{0x64D1, 0x93F8},{0x64D2, 0xC7DC},{0x64D3, 0x93F9},{0x64D4, 0x93FA}, - {0x64D5, 0x93FB},{0x64D6, 0x93FC},{0x64D7, 0xDFA8},{0x64D8, 0xEBA2},{0x64D9, 0x93FD},{0x64DA, 0x93FE},{0x64DB, 0x9440},{0x64DC, 0x9441}, - {0x64DD, 0x9442},{0x64DE, 0xCBD3},{0x64DF, 0x9443},{0x64E0, 0x9444},{0x64E1, 0x9445},{0x64E2, 0xDFAA},{0x64E3, 0x9446},{0x64E4, 0xDFA9}, - {0x64E5, 0x9447},{0x64E6, 0xB2C1},{0x64E7, 0x9448},{0x64E8, 0x9449},{0x64E9, 0x944A},{0x64EA, 0x944B},{0x64EB, 0x944C},{0x64EC, 0x944D}, - {0x64ED, 0x944E},{0x64EE, 0x944F},{0x64EF, 0x9450},{0x64F0, 0x9451},{0x64F1, 0x9452},{0x64F2, 0x9453},{0x64F3, 0x9454},{0x64F4, 0x9455}, - {0x64F5, 0x9456},{0x64F6, 0x9457},{0x64F7, 0x9458},{0x64F8, 0x9459},{0x64F9, 0x945A},{0x64FA, 0x945B},{0x64FB, 0x945C},{0x64FC, 0x945D}, - {0x64FD, 0x945E},{0x64FE, 0x945F},{0x64FF, 0x9460},{0x6500, 0xC5CA},{0x6501, 0x9461},{0x6502, 0x9462},{0x6503, 0x9463},{0x6504, 0x9464}, - {0x6505, 0x9465},{0x6506, 0x9466},{0x6507, 0x9467},{0x6508, 0x9468},{0x6509, 0xDFAB},{0x650A, 0x9469},{0x650B, 0x946A},{0x650C, 0x946B}, - {0x650D, 0x946C},{0x650E, 0x946D},{0x650F, 0x946E},{0x6510, 0x946F},{0x6511, 0x9470},{0x6512, 0xD4DC},{0x6513, 0x9471},{0x6514, 0x9472}, - {0x6515, 0x9473},{0x6516, 0x9474},{0x6517, 0x9475},{0x6518, 0xC8C1},{0x6519, 0x9476},{0x651A, 0x9477},{0x651B, 0x9478},{0x651C, 0x9479}, - {0x651D, 0x947A},{0x651E, 0x947B},{0x651F, 0x947C},{0x6520, 0x947D},{0x6521, 0x947E},{0x6522, 0x9480},{0x6523, 0x9481},{0x6524, 0x9482}, - {0x6525, 0xDFAC},{0x6526, 0x9483},{0x6527, 0x9484},{0x6528, 0x9485},{0x6529, 0x9486},{0x652A, 0x9487},{0x652B, 0xBEF0},{0x652C, 0x9488}, - {0x652D, 0x9489},{0x652E, 0xDFAD},{0x652F, 0xD6A7},{0x6530, 0x948A},{0x6531, 0x948B},{0x6532, 0x948C},{0x6533, 0x948D},{0x6534, 0xEAB7}, - {0x6535, 0xEBB6},{0x6536, 0xCAD5},{0x6537, 0x948E},{0x6538, 0xD8FC},{0x6539, 0xB8C4},{0x653A, 0x948F},{0x653B, 0xB9A5},{0x653C, 0x9490}, - {0x653D, 0x9491},{0x653E, 0xB7C5},{0x653F, 0xD5FE},{0x6540, 0x9492},{0x6541, 0x9493},{0x6542, 0x9494},{0x6543, 0x9495},{0x6544, 0x9496}, - {0x6545, 0xB9CA},{0x6546, 0x9497},{0x6547, 0x9498},{0x6548, 0xD0A7},{0x6549, 0xF4CD},{0x654A, 0x9499},{0x654B, 0x949A},{0x654C, 0xB5D0}, - {0x654D, 0x949B},{0x654E, 0x949C},{0x654F, 0xC3F4},{0x6550, 0x949D},{0x6551, 0xBEC8},{0x6552, 0x949E},{0x6553, 0x949F},{0x6554, 0x94A0}, - {0x6555, 0xEBB7},{0x6556, 0xB0BD},{0x6557, 0x94A1},{0x6558, 0x94A2},{0x6559, 0xBDCC},{0x655A, 0x94A3},{0x655B, 0xC1B2},{0x655C, 0x94A4}, - {0x655D, 0xB1D6},{0x655E, 0xB3A8},{0x655F, 0x94A5},{0x6560, 0x94A6},{0x6561, 0x94A7},{0x6562, 0xB8D2},{0x6563, 0xC9A2},{0x6564, 0x94A8}, - {0x6565, 0x94A9},{0x6566, 0xB6D8},{0x6567, 0x94AA},{0x6568, 0x94AB},{0x6569, 0x94AC},{0x656A, 0x94AD},{0x656B, 0xEBB8},{0x656C, 0xBEB4}, - {0x656D, 0x94AE},{0x656E, 0x94AF},{0x656F, 0x94B0},{0x6570, 0xCAFD},{0x6571, 0x94B1},{0x6572, 0xC7C3},{0x6573, 0x94B2},{0x6574, 0xD5FB}, - {0x6575, 0x94B3},{0x6576, 0x94B4},{0x6577, 0xB7F3},{0x6578, 0x94B5},{0x6579, 0x94B6},{0x657A, 0x94B7},{0x657B, 0x94B8},{0x657C, 0x94B9}, - {0x657D, 0x94BA},{0x657E, 0x94BB},{0x657F, 0x94BC},{0x6580, 0x94BD},{0x6581, 0x94BE},{0x6582, 0x94BF},{0x6583, 0x94C0},{0x6584, 0x94C1}, - {0x6585, 0x94C2},{0x6586, 0x94C3},{0x6587, 0xCEC4},{0x6588, 0x94C4},{0x6589, 0x94C5},{0x658A, 0x94C6},{0x658B, 0xD5AB},{0x658C, 0xB1F3}, - {0x658D, 0x94C7},{0x658E, 0x94C8},{0x658F, 0x94C9},{0x6590, 0xECB3},{0x6591, 0xB0DF},{0x6592, 0x94CA},{0x6593, 0xECB5},{0x6594, 0x94CB}, - {0x6595, 0x94CC},{0x6596, 0x94CD},{0x6597, 0xB6B7},{0x6598, 0x94CE},{0x6599, 0xC1CF},{0x659A, 0x94CF},{0x659B, 0xF5FA},{0x659C, 0xD0B1}, - {0x659D, 0x94D0},{0x659E, 0x94D1},{0x659F, 0xD5E5},{0x65A0, 0x94D2},{0x65A1, 0xCED3},{0x65A2, 0x94D3},{0x65A3, 0x94D4},{0x65A4, 0xBDEF}, - {0x65A5, 0xB3E2},{0x65A6, 0x94D5},{0x65A7, 0xB8AB},{0x65A8, 0x94D6},{0x65A9, 0xD5B6},{0x65AA, 0x94D7},{0x65AB, 0xEDBD},{0x65AC, 0x94D8}, - {0x65AD, 0xB6CF},{0x65AE, 0x94D9},{0x65AF, 0xCBB9},{0x65B0, 0xD0C2},{0x65B1, 0x94DA},{0x65B2, 0x94DB},{0x65B3, 0x94DC},{0x65B4, 0x94DD}, - {0x65B5, 0x94DE},{0x65B6, 0x94DF},{0x65B7, 0x94E0},{0x65B8, 0x94E1},{0x65B9, 0xB7BD},{0x65BA, 0x94E2},{0x65BB, 0x94E3},{0x65BC, 0xECB6}, - {0x65BD, 0xCAA9},{0x65BE, 0x94E4},{0x65BF, 0x94E5},{0x65C0, 0x94E6},{0x65C1, 0xC5D4},{0x65C2, 0x94E7},{0x65C3, 0xECB9},{0x65C4, 0xECB8}, - {0x65C5, 0xC2C3},{0x65C6, 0xECB7},{0x65C7, 0x94E8},{0x65C8, 0x94E9},{0x65C9, 0x94EA},{0x65CA, 0x94EB},{0x65CB, 0xD0FD},{0x65CC, 0xECBA}, - {0x65CD, 0x94EC},{0x65CE, 0xECBB},{0x65CF, 0xD7E5},{0x65D0, 0x94ED},{0x65D1, 0x94EE},{0x65D2, 0xECBC},{0x65D3, 0x94EF},{0x65D4, 0x94F0}, - {0x65D5, 0x94F1},{0x65D6, 0xECBD},{0x65D7, 0xC6EC},{0x65D8, 0x94F2},{0x65D9, 0x94F3},{0x65DA, 0x94F4},{0x65DB, 0x94F5},{0x65DC, 0x94F6}, - {0x65DD, 0x94F7},{0x65DE, 0x94F8},{0x65DF, 0x94F9},{0x65E0, 0xCEDE},{0x65E1, 0x94FA},{0x65E2, 0xBCC8},{0x65E3, 0x94FB},{0x65E4, 0x94FC}, - {0x65E5, 0xC8D5},{0x65E6, 0xB5A9},{0x65E7, 0xBEC9},{0x65E8, 0xD6BC},{0x65E9, 0xD4E7},{0x65EA, 0x94FD},{0x65EB, 0x94FE},{0x65EC, 0xD1AE}, - {0x65ED, 0xD0F1},{0x65EE, 0xEAB8},{0x65EF, 0xEAB9},{0x65F0, 0xEABA},{0x65F1, 0xBAB5},{0x65F2, 0x9540},{0x65F3, 0x9541},{0x65F4, 0x9542}, - {0x65F5, 0x9543},{0x65F6, 0xCAB1},{0x65F7, 0xBFF5},{0x65F8, 0x9544},{0x65F9, 0x9545},{0x65FA, 0xCDFA},{0x65FB, 0x9546},{0x65FC, 0x9547}, - {0x65FD, 0x9548},{0x65FE, 0x9549},{0x65FF, 0x954A},{0x6600, 0xEAC0},{0x6601, 0x954B},{0x6602, 0xB0BA},{0x6603, 0xEABE},{0x6604, 0x954C}, - {0x6605, 0x954D},{0x6606, 0xC0A5},{0x6607, 0x954E},{0x6608, 0x954F},{0x6609, 0x9550},{0x660A, 0xEABB},{0x660B, 0x9551},{0x660C, 0xB2FD}, - {0x660D, 0x9552},{0x660E, 0xC3F7},{0x660F, 0xBBE8},{0x6610, 0x9553},{0x6611, 0x9554},{0x6612, 0x9555},{0x6613, 0xD2D7},{0x6614, 0xCEF4}, - {0x6615, 0xEABF},{0x6616, 0x9556},{0x6617, 0x9557},{0x6618, 0x9558},{0x6619, 0xEABC},{0x661A, 0x9559},{0x661B, 0x955A},{0x661C, 0x955B}, - {0x661D, 0xEAC3},{0x661E, 0x955C},{0x661F, 0xD0C7},{0x6620, 0xD3B3},{0x6621, 0x955D},{0x6622, 0x955E},{0x6623, 0x955F},{0x6624, 0x9560}, - {0x6625, 0xB4BA},{0x6626, 0x9561},{0x6627, 0xC3C1},{0x6628, 0xD7F2},{0x6629, 0x9562},{0x662A, 0x9563},{0x662B, 0x9564},{0x662C, 0x9565}, - {0x662D, 0xD5D1},{0x662E, 0x9566},{0x662F, 0xCAC7},{0x6630, 0x9567},{0x6631, 0xEAC5},{0x6632, 0x9568},{0x6633, 0x9569},{0x6634, 0xEAC4}, - {0x6635, 0xEAC7},{0x6636, 0xEAC6},{0x6637, 0x956A},{0x6638, 0x956B},{0x6639, 0x956C},{0x663A, 0x956D},{0x663B, 0x956E},{0x663C, 0xD6E7}, - {0x663D, 0x956F},{0x663E, 0xCFD4},{0x663F, 0x9570},{0x6640, 0x9571},{0x6641, 0xEACB},{0x6642, 0x9572},{0x6643, 0xBBCE},{0x6644, 0x9573}, - {0x6645, 0x9574},{0x6646, 0x9575},{0x6647, 0x9576},{0x6648, 0x9577},{0x6649, 0x9578},{0x664A, 0x9579},{0x664B, 0xBDFA},{0x664C, 0xC9CE}, - {0x664D, 0x957A},{0x664E, 0x957B},{0x664F, 0xEACC},{0x6650, 0x957C},{0x6651, 0x957D},{0x6652, 0xC9B9},{0x6653, 0xCFFE},{0x6654, 0xEACA}, - {0x6655, 0xD4CE},{0x6656, 0xEACD},{0x6657, 0xEACF},{0x6658, 0x957E},{0x6659, 0x9580},{0x665A, 0xCDED},{0x665B, 0x9581},{0x665C, 0x9582}, - {0x665D, 0x9583},{0x665E, 0x9584},{0x665F, 0xEAC9},{0x6660, 0x9585},{0x6661, 0xEACE},{0x6662, 0x9586},{0x6663, 0x9587},{0x6664, 0xCEEE}, - {0x6665, 0x9588},{0x6666, 0xBBDE},{0x6667, 0x9589},{0x6668, 0xB3BF},{0x6669, 0x958A},{0x666A, 0x958B},{0x666B, 0x958C},{0x666C, 0x958D}, - {0x666D, 0x958E},{0x666E, 0xC6D5},{0x666F, 0xBEB0},{0x6670, 0xCEFA},{0x6671, 0x958F},{0x6672, 0x9590},{0x6673, 0x9591},{0x6674, 0xC7E7}, - {0x6675, 0x9592},{0x6676, 0xBEA7},{0x6677, 0xEAD0},{0x6678, 0x9593},{0x6679, 0x9594},{0x667A, 0xD6C7},{0x667B, 0x9595},{0x667C, 0x9596}, - {0x667D, 0x9597},{0x667E, 0xC1C0},{0x667F, 0x9598},{0x6680, 0x9599},{0x6681, 0x959A},{0x6682, 0xD4DD},{0x6683, 0x959B},{0x6684, 0xEAD1}, - {0x6685, 0x959C},{0x6686, 0x959D},{0x6687, 0xCFBE},{0x6688, 0x959E},{0x6689, 0x959F},{0x668A, 0x95A0},{0x668B, 0x95A1},{0x668C, 0xEAD2}, - {0x668D, 0x95A2},{0x668E, 0x95A3},{0x668F, 0x95A4},{0x6690, 0x95A5},{0x6691, 0xCAEE},{0x6692, 0x95A6},{0x6693, 0x95A7},{0x6694, 0x95A8}, - {0x6695, 0x95A9},{0x6696, 0xC5AF},{0x6697, 0xB0B5},{0x6698, 0x95AA},{0x6699, 0x95AB},{0x669A, 0x95AC},{0x669B, 0x95AD},{0x669C, 0x95AE}, - {0x669D, 0xEAD4},{0x669E, 0x95AF},{0x669F, 0x95B0},{0x66A0, 0x95B1},{0x66A1, 0x95B2},{0x66A2, 0x95B3},{0x66A3, 0x95B4},{0x66A4, 0x95B5}, - {0x66A5, 0x95B6},{0x66A6, 0x95B7},{0x66A7, 0xEAD3},{0x66A8, 0xF4DF},{0x66A9, 0x95B8},{0x66AA, 0x95B9},{0x66AB, 0x95BA},{0x66AC, 0x95BB}, - {0x66AD, 0x95BC},{0x66AE, 0xC4BA},{0x66AF, 0x95BD},{0x66B0, 0x95BE},{0x66B1, 0x95BF},{0x66B2, 0x95C0},{0x66B3, 0x95C1},{0x66B4, 0xB1A9}, - {0x66B5, 0x95C2},{0x66B6, 0x95C3},{0x66B7, 0x95C4},{0x66B8, 0x95C5},{0x66B9, 0xE5DF},{0x66BA, 0x95C6},{0x66BB, 0x95C7},{0x66BC, 0x95C8}, - {0x66BD, 0x95C9},{0x66BE, 0xEAD5},{0x66BF, 0x95CA},{0x66C0, 0x95CB},{0x66C1, 0x95CC},{0x66C2, 0x95CD},{0x66C3, 0x95CE},{0x66C4, 0x95CF}, - {0x66C5, 0x95D0},{0x66C6, 0x95D1},{0x66C7, 0x95D2},{0x66C8, 0x95D3},{0x66C9, 0x95D4},{0x66CA, 0x95D5},{0x66CB, 0x95D6},{0x66CC, 0x95D7}, - {0x66CD, 0x95D8},{0x66CE, 0x95D9},{0x66CF, 0x95DA},{0x66D0, 0x95DB},{0x66D1, 0x95DC},{0x66D2, 0x95DD},{0x66D3, 0x95DE},{0x66D4, 0x95DF}, - {0x66D5, 0x95E0},{0x66D6, 0x95E1},{0x66D7, 0x95E2},{0x66D8, 0x95E3},{0x66D9, 0xCAEF},{0x66DA, 0x95E4},{0x66DB, 0xEAD6},{0x66DC, 0xEAD7}, - {0x66DD, 0xC6D8},{0x66DE, 0x95E5},{0x66DF, 0x95E6},{0x66E0, 0x95E7},{0x66E1, 0x95E8},{0x66E2, 0x95E9},{0x66E3, 0x95EA},{0x66E4, 0x95EB}, - {0x66E5, 0x95EC},{0x66E6, 0xEAD8},{0x66E7, 0x95ED},{0x66E8, 0x95EE},{0x66E9, 0xEAD9},{0x66EA, 0x95EF},{0x66EB, 0x95F0},{0x66EC, 0x95F1}, - {0x66ED, 0x95F2},{0x66EE, 0x95F3},{0x66EF, 0x95F4},{0x66F0, 0xD4BB},{0x66F1, 0x95F5},{0x66F2, 0xC7FA},{0x66F3, 0xD2B7},{0x66F4, 0xB8FC}, - {0x66F5, 0x95F6},{0x66F6, 0x95F7},{0x66F7, 0xEAC2},{0x66F8, 0x95F8},{0x66F9, 0xB2DC},{0x66FA, 0x95F9},{0x66FB, 0x95FA},{0x66FC, 0xC2FC}, - {0x66FD, 0x95FB},{0x66FE, 0xD4F8},{0x66FF, 0xCCE6},{0x6700, 0xD7EE},{0x6701, 0x95FC},{0x6702, 0x95FD},{0x6703, 0x95FE},{0x6704, 0x9640}, - {0x6705, 0x9641},{0x6706, 0x9642},{0x6707, 0x9643},{0x6708, 0xD4C2},{0x6709, 0xD3D0},{0x670A, 0xEBC3},{0x670B, 0xC5F3},{0x670C, 0x9644}, - {0x670D, 0xB7FE},{0x670E, 0x9645},{0x670F, 0x9646},{0x6710, 0xEBD4},{0x6711, 0x9647},{0x6712, 0x9648},{0x6713, 0x9649},{0x6714, 0xCBB7}, - {0x6715, 0xEBDE},{0x6716, 0x964A},{0x6717, 0xC0CA},{0x6718, 0x964B},{0x6719, 0x964C},{0x671A, 0x964D},{0x671B, 0xCDFB},{0x671C, 0x964E}, - {0x671D, 0xB3AF},{0x671E, 0x964F},{0x671F, 0xC6DA},{0x6720, 0x9650},{0x6721, 0x9651},{0x6722, 0x9652},{0x6723, 0x9653},{0x6724, 0x9654}, - {0x6725, 0x9655},{0x6726, 0xEBFC},{0x6727, 0x9656},{0x6728, 0xC4BE},{0x6729, 0x9657},{0x672A, 0xCEB4},{0x672B, 0xC4A9},{0x672C, 0xB1BE}, - {0x672D, 0xD4FD},{0x672E, 0x9658},{0x672F, 0xCAF5},{0x6730, 0x9659},{0x6731, 0xD6EC},{0x6732, 0x965A},{0x6733, 0x965B},{0x6734, 0xC6D3}, - {0x6735, 0xB6E4},{0x6736, 0x965C},{0x6737, 0x965D},{0x6738, 0x965E},{0x6739, 0x965F},{0x673A, 0xBBFA},{0x673B, 0x9660},{0x673C, 0x9661}, - {0x673D, 0xD0E0},{0x673E, 0x9662},{0x673F, 0x9663},{0x6740, 0xC9B1},{0x6741, 0x9664},{0x6742, 0xD4D3},{0x6743, 0xC8A8},{0x6744, 0x9665}, - {0x6745, 0x9666},{0x6746, 0xB8CB},{0x6747, 0x9667},{0x6748, 0xE8BE},{0x6749, 0xC9BC},{0x674A, 0x9668},{0x674B, 0x9669},{0x674C, 0xE8BB}, - {0x674D, 0x966A},{0x674E, 0xC0EE},{0x674F, 0xD0D3},{0x6750, 0xB2C4},{0x6751, 0xB4E5},{0x6752, 0x966B},{0x6753, 0xE8BC},{0x6754, 0x966C}, - {0x6755, 0x966D},{0x6756, 0xD5C8},{0x6757, 0x966E},{0x6758, 0x966F},{0x6759, 0x9670},{0x675A, 0x9671},{0x675B, 0x9672},{0x675C, 0xB6C5}, - {0x675D, 0x9673},{0x675E, 0xE8BD},{0x675F, 0xCAF8},{0x6760, 0xB8DC},{0x6761, 0xCCF5},{0x6762, 0x9674},{0x6763, 0x9675},{0x6764, 0x9676}, - {0x6765, 0xC0B4},{0x6766, 0x9677},{0x6767, 0x9678},{0x6768, 0xD1EE},{0x6769, 0xE8BF},{0x676A, 0xE8C2},{0x676B, 0x9679},{0x676C, 0x967A}, - {0x676D, 0xBABC},{0x676E, 0x967B},{0x676F, 0xB1AD},{0x6770, 0xBDDC},{0x6771, 0x967C},{0x6772, 0xEABD},{0x6773, 0xE8C3},{0x6774, 0x967D}, - {0x6775, 0xE8C6},{0x6776, 0x967E},{0x6777, 0xE8CB},{0x6778, 0x9680},{0x6779, 0x9681},{0x677A, 0x9682},{0x677B, 0x9683},{0x677C, 0xE8CC}, - {0x677D, 0x9684},{0x677E, 0xCBC9},{0x677F, 0xB0E5},{0x6780, 0x9685},{0x6781, 0xBCAB},{0x6782, 0x9686},{0x6783, 0x9687},{0x6784, 0xB9B9}, - {0x6785, 0x9688},{0x6786, 0x9689},{0x6787, 0xE8C1},{0x6788, 0x968A},{0x6789, 0xCDF7},{0x678A, 0x968B},{0x678B, 0xE8CA},{0x678C, 0x968C}, - {0x678D, 0x968D},{0x678E, 0x968E},{0x678F, 0x968F},{0x6790, 0xCEF6},{0x6791, 0x9690},{0x6792, 0x9691},{0x6793, 0x9692},{0x6794, 0x9693}, - {0x6795, 0xD5ED},{0x6796, 0x9694},{0x6797, 0xC1D6},{0x6798, 0xE8C4},{0x6799, 0x9695},{0x679A, 0xC3B6},{0x679B, 0x9696},{0x679C, 0xB9FB}, - {0x679D, 0xD6A6},{0x679E, 0xE8C8},{0x679F, 0x9697},{0x67A0, 0x9698},{0x67A1, 0x9699},{0x67A2, 0xCAE0},{0x67A3, 0xD4E6},{0x67A4, 0x969A}, - {0x67A5, 0xE8C0},{0x67A6, 0x969B},{0x67A7, 0xE8C5},{0x67A8, 0xE8C7},{0x67A9, 0x969C},{0x67AA, 0xC7B9},{0x67AB, 0xB7E3},{0x67AC, 0x969D}, - {0x67AD, 0xE8C9},{0x67AE, 0x969E},{0x67AF, 0xBFDD},{0x67B0, 0xE8D2},{0x67B1, 0x969F},{0x67B2, 0x96A0},{0x67B3, 0xE8D7},{0x67B4, 0x96A1}, - {0x67B5, 0xE8D5},{0x67B6, 0xBCDC},{0x67B7, 0xBCCF},{0x67B8, 0xE8DB},{0x67B9, 0x96A2},{0x67BA, 0x96A3},{0x67BB, 0x96A4},{0x67BC, 0x96A5}, - {0x67BD, 0x96A6},{0x67BE, 0x96A7},{0x67BF, 0x96A8},{0x67C0, 0x96A9},{0x67C1, 0xE8DE},{0x67C2, 0x96AA},{0x67C3, 0xE8DA},{0x67C4, 0xB1FA}, - {0x67C5, 0x96AB},{0x67C6, 0x96AC},{0x67C7, 0x96AD},{0x67C8, 0x96AE},{0x67C9, 0x96AF},{0x67CA, 0x96B0},{0x67CB, 0x96B1},{0x67CC, 0x96B2}, - {0x67CD, 0x96B3},{0x67CE, 0x96B4},{0x67CF, 0xB0D8},{0x67D0, 0xC4B3},{0x67D1, 0xB8CC},{0x67D2, 0xC6E2},{0x67D3, 0xC8BE},{0x67D4, 0xC8E1}, - {0x67D5, 0x96B5},{0x67D6, 0x96B6},{0x67D7, 0x96B7},{0x67D8, 0xE8CF},{0x67D9, 0xE8D4},{0x67DA, 0xE8D6},{0x67DB, 0x96B8},{0x67DC, 0xB9F1}, - {0x67DD, 0xE8D8},{0x67DE, 0xD7F5},{0x67DF, 0x96B9},{0x67E0, 0xC4FB},{0x67E1, 0x96BA},{0x67E2, 0xE8DC},{0x67E3, 0x96BB},{0x67E4, 0x96BC}, - {0x67E5, 0xB2E9},{0x67E6, 0x96BD},{0x67E7, 0x96BE},{0x67E8, 0x96BF},{0x67E9, 0xE8D1},{0x67EA, 0x96C0},{0x67EB, 0x96C1},{0x67EC, 0xBCED}, - {0x67ED, 0x96C2},{0x67EE, 0x96C3},{0x67EF, 0xBFC2},{0x67F0, 0xE8CD},{0x67F1, 0xD6F9},{0x67F2, 0x96C4},{0x67F3, 0xC1F8},{0x67F4, 0xB2F1}, - {0x67F5, 0x96C5},{0x67F6, 0x96C6},{0x67F7, 0x96C7},{0x67F8, 0x96C8},{0x67F9, 0x96C9},{0x67FA, 0x96CA},{0x67FB, 0x96CB},{0x67FC, 0x96CC}, - {0x67FD, 0xE8DF},{0x67FE, 0x96CD},{0x67FF, 0xCAC1},{0x6800, 0xE8D9},{0x6801, 0x96CE},{0x6802, 0x96CF},{0x6803, 0x96D0},{0x6804, 0x96D1}, - {0x6805, 0xD5A4},{0x6806, 0x96D2},{0x6807, 0xB1EA},{0x6808, 0xD5BB},{0x6809, 0xE8CE},{0x680A, 0xE8D0},{0x680B, 0xB6B0},{0x680C, 0xE8D3}, - {0x680D, 0x96D3},{0x680E, 0xE8DD},{0x680F, 0xC0B8},{0x6810, 0x96D4},{0x6811, 0xCAF7},{0x6812, 0x96D5},{0x6813, 0xCBA8},{0x6814, 0x96D6}, - {0x6815, 0x96D7},{0x6816, 0xC6DC},{0x6817, 0xC0F5},{0x6818, 0x96D8},{0x6819, 0x96D9},{0x681A, 0x96DA},{0x681B, 0x96DB},{0x681C, 0x96DC}, - {0x681D, 0xE8E9},{0x681E, 0x96DD},{0x681F, 0x96DE},{0x6820, 0x96DF},{0x6821, 0xD0A3},{0x6822, 0x96E0},{0x6823, 0x96E1},{0x6824, 0x96E2}, - {0x6825, 0x96E3},{0x6826, 0x96E4},{0x6827, 0x96E5},{0x6828, 0x96E6},{0x6829, 0xE8F2},{0x682A, 0xD6EA},{0x682B, 0x96E7},{0x682C, 0x96E8}, - {0x682D, 0x96E9},{0x682E, 0x96EA},{0x682F, 0x96EB},{0x6830, 0x96EC},{0x6831, 0x96ED},{0x6832, 0xE8E0},{0x6833, 0xE8E1},{0x6834, 0x96EE}, - {0x6835, 0x96EF},{0x6836, 0x96F0},{0x6837, 0xD1F9},{0x6838, 0xBACB},{0x6839, 0xB8F9},{0x683A, 0x96F1},{0x683B, 0x96F2},{0x683C, 0xB8F1}, - {0x683D, 0xD4D4},{0x683E, 0xE8EF},{0x683F, 0x96F3},{0x6840, 0xE8EE},{0x6841, 0xE8EC},{0x6842, 0xB9F0},{0x6843, 0xCCD2},{0x6844, 0xE8E6}, - {0x6845, 0xCEA6},{0x6846, 0xBFF2},{0x6847, 0x96F4},{0x6848, 0xB0B8},{0x6849, 0xE8F1},{0x684A, 0xE8F0},{0x684B, 0x96F5},{0x684C, 0xD7C0}, - {0x684D, 0x96F6},{0x684E, 0xE8E4},{0x684F, 0x96F7},{0x6850, 0xCDA9},{0x6851, 0xC9A3},{0x6852, 0x96F8},{0x6853, 0xBBB8},{0x6854, 0xBDDB}, - {0x6855, 0xE8EA},{0x6856, 0x96F9},{0x6857, 0x96FA},{0x6858, 0x96FB},{0x6859, 0x96FC},{0x685A, 0x96FD},{0x685B, 0x96FE},{0x685C, 0x9740}, - {0x685D, 0x9741},{0x685E, 0x9742},{0x685F, 0x9743},{0x6860, 0xE8E2},{0x6861, 0xE8E3},{0x6862, 0xE8E5},{0x6863, 0xB5B5},{0x6864, 0xE8E7}, - {0x6865, 0xC7C5},{0x6866, 0xE8EB},{0x6867, 0xE8ED},{0x6868, 0xBDB0},{0x6869, 0xD7AE},{0x686A, 0x9744},{0x686B, 0xE8F8},{0x686C, 0x9745}, - {0x686D, 0x9746},{0x686E, 0x9747},{0x686F, 0x9748},{0x6870, 0x9749},{0x6871, 0x974A},{0x6872, 0x974B},{0x6873, 0x974C},{0x6874, 0xE8F5}, - {0x6875, 0x974D},{0x6876, 0xCDB0},{0x6877, 0xE8F6},{0x6878, 0x974E},{0x6879, 0x974F},{0x687A, 0x9750},{0x687B, 0x9751},{0x687C, 0x9752}, - {0x687D, 0x9753},{0x687E, 0x9754},{0x687F, 0x9755},{0x6880, 0x9756},{0x6881, 0xC1BA},{0x6882, 0x9757},{0x6883, 0xE8E8},{0x6884, 0x9758}, - {0x6885, 0xC3B7},{0x6886, 0xB0F0},{0x6887, 0x9759},{0x6888, 0x975A},{0x6889, 0x975B},{0x688A, 0x975C},{0x688B, 0x975D},{0x688C, 0x975E}, - {0x688D, 0x975F},{0x688E, 0x9760},{0x688F, 0xE8F4},{0x6890, 0x9761},{0x6891, 0x9762},{0x6892, 0x9763},{0x6893, 0xE8F7},{0x6894, 0x9764}, - {0x6895, 0x9765},{0x6896, 0x9766},{0x6897, 0xB9A3},{0x6898, 0x9767},{0x6899, 0x9768},{0x689A, 0x9769},{0x689B, 0x976A},{0x689C, 0x976B}, - {0x689D, 0x976C},{0x689E, 0x976D},{0x689F, 0x976E},{0x68A0, 0x976F},{0x68A1, 0x9770},{0x68A2, 0xC9D2},{0x68A3, 0x9771},{0x68A4, 0x9772}, - {0x68A5, 0x9773},{0x68A6, 0xC3CE},{0x68A7, 0xCEE0},{0x68A8, 0xC0E6},{0x68A9, 0x9774},{0x68AA, 0x9775},{0x68AB, 0x9776},{0x68AC, 0x9777}, - {0x68AD, 0xCBF3},{0x68AE, 0x9778},{0x68AF, 0xCCDD},{0x68B0, 0xD0B5},{0x68B1, 0x9779},{0x68B2, 0x977A},{0x68B3, 0xCAE1},{0x68B4, 0x977B}, - {0x68B5, 0xE8F3},{0x68B6, 0x977C},{0x68B7, 0x977D},{0x68B8, 0x977E},{0x68B9, 0x9780},{0x68BA, 0x9781},{0x68BB, 0x9782},{0x68BC, 0x9783}, - {0x68BD, 0x9784},{0x68BE, 0x9785},{0x68BF, 0x9786},{0x68C0, 0xBCEC},{0x68C1, 0x9787},{0x68C2, 0xE8F9},{0x68C3, 0x9788},{0x68C4, 0x9789}, - {0x68C5, 0x978A},{0x68C6, 0x978B},{0x68C7, 0x978C},{0x68C8, 0x978D},{0x68C9, 0xC3DE},{0x68CA, 0x978E},{0x68CB, 0xC6E5},{0x68CC, 0x978F}, - {0x68CD, 0xB9F7},{0x68CE, 0x9790},{0x68CF, 0x9791},{0x68D0, 0x9792},{0x68D1, 0x9793},{0x68D2, 0xB0F4},{0x68D3, 0x9794},{0x68D4, 0x9795}, - {0x68D5, 0xD7D8},{0x68D6, 0x9796},{0x68D7, 0x9797},{0x68D8, 0xBCAC},{0x68D9, 0x9798},{0x68DA, 0xC5EF},{0x68DB, 0x9799},{0x68DC, 0x979A}, - {0x68DD, 0x979B},{0x68DE, 0x979C},{0x68DF, 0x979D},{0x68E0, 0xCCC4},{0x68E1, 0x979E},{0x68E2, 0x979F},{0x68E3, 0xE9A6},{0x68E4, 0x97A0}, - {0x68E5, 0x97A1},{0x68E6, 0x97A2},{0x68E7, 0x97A3},{0x68E8, 0x97A4},{0x68E9, 0x97A5},{0x68EA, 0x97A6},{0x68EB, 0x97A7},{0x68EC, 0x97A8}, - {0x68ED, 0x97A9},{0x68EE, 0xC9AD},{0x68EF, 0x97AA},{0x68F0, 0xE9A2},{0x68F1, 0xC0E2},{0x68F2, 0x97AB},{0x68F3, 0x97AC},{0x68F4, 0x97AD}, - {0x68F5, 0xBFC3},{0x68F6, 0x97AE},{0x68F7, 0x97AF},{0x68F8, 0x97B0},{0x68F9, 0xE8FE},{0x68FA, 0xB9D7},{0x68FB, 0x97B1},{0x68FC, 0xE8FB}, - {0x68FD, 0x97B2},{0x68FE, 0x97B3},{0x68FF, 0x97B4},{0x6900, 0x97B5},{0x6901, 0xE9A4},{0x6902, 0x97B6},{0x6903, 0x97B7},{0x6904, 0x97B8}, - {0x6905, 0xD2CE},{0x6906, 0x97B9},{0x6907, 0x97BA},{0x6908, 0x97BB},{0x6909, 0x97BC},{0x690A, 0x97BD},{0x690B, 0xE9A3},{0x690C, 0x97BE}, - {0x690D, 0xD6B2},{0x690E, 0xD7B5},{0x690F, 0x97BF},{0x6910, 0xE9A7},{0x6911, 0x97C0},{0x6912, 0xBDB7},{0x6913, 0x97C1},{0x6914, 0x97C2}, - {0x6915, 0x97C3},{0x6916, 0x97C4},{0x6917, 0x97C5},{0x6918, 0x97C6},{0x6919, 0x97C7},{0x691A, 0x97C8},{0x691B, 0x97C9},{0x691C, 0x97CA}, - {0x691D, 0x97CB},{0x691E, 0x97CC},{0x691F, 0xE8FC},{0x6920, 0xE8FD},{0x6921, 0x97CD},{0x6922, 0x97CE},{0x6923, 0x97CF},{0x6924, 0xE9A1}, - {0x6925, 0x97D0},{0x6926, 0x97D1},{0x6927, 0x97D2},{0x6928, 0x97D3},{0x6929, 0x97D4},{0x692A, 0x97D5},{0x692B, 0x97D6},{0x692C, 0x97D7}, - {0x692D, 0xCDD6},{0x692E, 0x97D8},{0x692F, 0x97D9},{0x6930, 0xD2AC},{0x6931, 0x97DA},{0x6932, 0x97DB},{0x6933, 0x97DC},{0x6934, 0xE9B2}, - {0x6935, 0x97DD},{0x6936, 0x97DE},{0x6937, 0x97DF},{0x6938, 0x97E0},{0x6939, 0xE9A9},{0x693A, 0x97E1},{0x693B, 0x97E2},{0x693C, 0x97E3}, - {0x693D, 0xB4AA},{0x693E, 0x97E4},{0x693F, 0xB4BB},{0x6940, 0x97E5},{0x6941, 0x97E6},{0x6942, 0xE9AB},{0x6943, 0x97E7},{0x6944, 0x97E8}, - {0x6945, 0x97E9},{0x6946, 0x97EA},{0x6947, 0x97EB},{0x6948, 0x97EC},{0x6949, 0x97ED},{0x694A, 0x97EE},{0x694B, 0x97EF},{0x694C, 0x97F0}, - {0x694D, 0x97F1},{0x694E, 0x97F2},{0x694F, 0x97F3},{0x6950, 0x97F4},{0x6951, 0x97F5},{0x6952, 0x97F6},{0x6953, 0x97F7},{0x6954, 0xD0A8}, - {0x6955, 0x97F8},{0x6956, 0x97F9},{0x6957, 0xE9A5},{0x6958, 0x97FA},{0x6959, 0x97FB},{0x695A, 0xB3FE},{0x695B, 0x97FC},{0x695C, 0x97FD}, - {0x695D, 0xE9AC},{0x695E, 0xC0E3},{0x695F, 0x97FE},{0x6960, 0xE9AA},{0x6961, 0x9840},{0x6962, 0x9841},{0x6963, 0xE9B9},{0x6964, 0x9842}, - {0x6965, 0x9843},{0x6966, 0xE9B8},{0x6967, 0x9844},{0x6968, 0x9845},{0x6969, 0x9846},{0x696A, 0x9847},{0x696B, 0xE9AE},{0x696C, 0x9848}, - {0x696D, 0x9849},{0x696E, 0xE8FA},{0x696F, 0x984A},{0x6970, 0x984B},{0x6971, 0xE9A8},{0x6972, 0x984C},{0x6973, 0x984D},{0x6974, 0x984E}, - {0x6975, 0x984F},{0x6976, 0x9850},{0x6977, 0xBFAC},{0x6978, 0xE9B1},{0x6979, 0xE9BA},{0x697A, 0x9851},{0x697B, 0x9852},{0x697C, 0xC2A5}, - {0x697D, 0x9853},{0x697E, 0x9854},{0x697F, 0x9855},{0x6980, 0xE9AF},{0x6981, 0x9856},{0x6982, 0xB8C5},{0x6983, 0x9857},{0x6984, 0xE9AD}, - {0x6985, 0x9858},{0x6986, 0xD3DC},{0x6987, 0xE9B4},{0x6988, 0xE9B5},{0x6989, 0xE9B7},{0x698A, 0x9859},{0x698B, 0x985A},{0x698C, 0x985B}, - {0x698D, 0xE9C7},{0x698E, 0x985C},{0x698F, 0x985D},{0x6990, 0x985E},{0x6991, 0x985F},{0x6992, 0x9860},{0x6993, 0x9861},{0x6994, 0xC0C6}, - {0x6995, 0xE9C5},{0x6996, 0x9862},{0x6997, 0x9863},{0x6998, 0xE9B0},{0x6999, 0x9864},{0x699A, 0x9865},{0x699B, 0xE9BB},{0x699C, 0xB0F1}, - {0x699D, 0x9866},{0x699E, 0x9867},{0x699F, 0x9868},{0x69A0, 0x9869},{0x69A1, 0x986A},{0x69A2, 0x986B},{0x69A3, 0x986C},{0x69A4, 0x986D}, - {0x69A5, 0x986E},{0x69A6, 0x986F},{0x69A7, 0xE9BC},{0x69A8, 0xD5A5},{0x69A9, 0x9870},{0x69AA, 0x9871},{0x69AB, 0xE9BE},{0x69AC, 0x9872}, - {0x69AD, 0xE9BF},{0x69AE, 0x9873},{0x69AF, 0x9874},{0x69B0, 0x9875},{0x69B1, 0xE9C1},{0x69B2, 0x9876},{0x69B3, 0x9877},{0x69B4, 0xC1F1}, - {0x69B5, 0x9878},{0x69B6, 0x9879},{0x69B7, 0xC8B6},{0x69B8, 0x987A},{0x69B9, 0x987B},{0x69BA, 0x987C},{0x69BB, 0xE9BD},{0x69BC, 0x987D}, - {0x69BD, 0x987E},{0x69BE, 0x9880},{0x69BF, 0x9881},{0x69C0, 0x9882},{0x69C1, 0xE9C2},{0x69C2, 0x9883},{0x69C3, 0x9884},{0x69C4, 0x9885}, - {0x69C5, 0x9886},{0x69C6, 0x9887},{0x69C7, 0x9888},{0x69C8, 0x9889},{0x69C9, 0x988A},{0x69CA, 0xE9C3},{0x69CB, 0x988B},{0x69CC, 0xE9B3}, - {0x69CD, 0x988C},{0x69CE, 0xE9B6},{0x69CF, 0x988D},{0x69D0, 0xBBB1},{0x69D1, 0x988E},{0x69D2, 0x988F},{0x69D3, 0x9890},{0x69D4, 0xE9C0}, - {0x69D5, 0x9891},{0x69D6, 0x9892},{0x69D7, 0x9893},{0x69D8, 0x9894},{0x69D9, 0x9895},{0x69DA, 0x9896},{0x69DB, 0xBCF7},{0x69DC, 0x9897}, - {0x69DD, 0x9898},{0x69DE, 0x9899},{0x69DF, 0xE9C4},{0x69E0, 0xE9C6},{0x69E1, 0x989A},{0x69E2, 0x989B},{0x69E3, 0x989C},{0x69E4, 0x989D}, - {0x69E5, 0x989E},{0x69E6, 0x989F},{0x69E7, 0x98A0},{0x69E8, 0x98A1},{0x69E9, 0x98A2},{0x69EA, 0x98A3},{0x69EB, 0x98A4},{0x69EC, 0x98A5}, - {0x69ED, 0xE9CA},{0x69EE, 0x98A6},{0x69EF, 0x98A7},{0x69F0, 0x98A8},{0x69F1, 0x98A9},{0x69F2, 0xE9CE},{0x69F3, 0x98AA},{0x69F4, 0x98AB}, - {0x69F5, 0x98AC},{0x69F6, 0x98AD},{0x69F7, 0x98AE},{0x69F8, 0x98AF},{0x69F9, 0x98B0},{0x69FA, 0x98B1},{0x69FB, 0x98B2},{0x69FC, 0x98B3}, - {0x69FD, 0xB2DB},{0x69FE, 0x98B4},{0x69FF, 0xE9C8},{0x6A00, 0x98B5},{0x6A01, 0x98B6},{0x6A02, 0x98B7},{0x6A03, 0x98B8},{0x6A04, 0x98B9}, - {0x6A05, 0x98BA},{0x6A06, 0x98BB},{0x6A07, 0x98BC},{0x6A08, 0x98BD},{0x6A09, 0x98BE},{0x6A0A, 0xB7AE},{0x6A0B, 0x98BF},{0x6A0C, 0x98C0}, - {0x6A0D, 0x98C1},{0x6A0E, 0x98C2},{0x6A0F, 0x98C3},{0x6A10, 0x98C4},{0x6A11, 0x98C5},{0x6A12, 0x98C6},{0x6A13, 0x98C7},{0x6A14, 0x98C8}, - {0x6A15, 0x98C9},{0x6A16, 0x98CA},{0x6A17, 0xE9CB},{0x6A18, 0xE9CC},{0x6A19, 0x98CB},{0x6A1A, 0x98CC},{0x6A1B, 0x98CD},{0x6A1C, 0x98CE}, - {0x6A1D, 0x98CF},{0x6A1E, 0x98D0},{0x6A1F, 0xD5C1},{0x6A20, 0x98D1},{0x6A21, 0xC4A3},{0x6A22, 0x98D2},{0x6A23, 0x98D3},{0x6A24, 0x98D4}, - {0x6A25, 0x98D5},{0x6A26, 0x98D6},{0x6A27, 0x98D7},{0x6A28, 0xE9D8},{0x6A29, 0x98D8},{0x6A2A, 0xBAE1},{0x6A2B, 0x98D9},{0x6A2C, 0x98DA}, - {0x6A2D, 0x98DB},{0x6A2E, 0x98DC},{0x6A2F, 0xE9C9},{0x6A30, 0x98DD},{0x6A31, 0xD3A3},{0x6A32, 0x98DE},{0x6A33, 0x98DF},{0x6A34, 0x98E0}, - {0x6A35, 0xE9D4},{0x6A36, 0x98E1},{0x6A37, 0x98E2},{0x6A38, 0x98E3},{0x6A39, 0x98E4},{0x6A3A, 0x98E5},{0x6A3B, 0x98E6},{0x6A3C, 0x98E7}, - {0x6A3D, 0xE9D7},{0x6A3E, 0xE9D0},{0x6A3F, 0x98E8},{0x6A40, 0x98E9},{0x6A41, 0x98EA},{0x6A42, 0x98EB},{0x6A43, 0x98EC},{0x6A44, 0xE9CF}, - {0x6A45, 0x98ED},{0x6A46, 0x98EE},{0x6A47, 0xC7C1},{0x6A48, 0x98EF},{0x6A49, 0x98F0},{0x6A4A, 0x98F1},{0x6A4B, 0x98F2},{0x6A4C, 0x98F3}, - {0x6A4D, 0x98F4},{0x6A4E, 0x98F5},{0x6A4F, 0x98F6},{0x6A50, 0xE9D2},{0x6A51, 0x98F7},{0x6A52, 0x98F8},{0x6A53, 0x98F9},{0x6A54, 0x98FA}, - {0x6A55, 0x98FB},{0x6A56, 0x98FC},{0x6A57, 0x98FD},{0x6A58, 0xE9D9},{0x6A59, 0xB3C8},{0x6A5A, 0x98FE},{0x6A5B, 0xE9D3},{0x6A5C, 0x9940}, - {0x6A5D, 0x9941},{0x6A5E, 0x9942},{0x6A5F, 0x9943},{0x6A60, 0x9944},{0x6A61, 0xCFF0},{0x6A62, 0x9945},{0x6A63, 0x9946},{0x6A64, 0x9947}, - {0x6A65, 0xE9CD},{0x6A66, 0x9948},{0x6A67, 0x9949},{0x6A68, 0x994A},{0x6A69, 0x994B},{0x6A6A, 0x994C},{0x6A6B, 0x994D},{0x6A6C, 0x994E}, - {0x6A6D, 0x994F},{0x6A6E, 0x9950},{0x6A6F, 0x9951},{0x6A70, 0x9952},{0x6A71, 0xB3F7},{0x6A72, 0x9953},{0x6A73, 0x9954},{0x6A74, 0x9955}, - {0x6A75, 0x9956},{0x6A76, 0x9957},{0x6A77, 0x9958},{0x6A78, 0x9959},{0x6A79, 0xE9D6},{0x6A7A, 0x995A},{0x6A7B, 0x995B},{0x6A7C, 0xE9DA}, - {0x6A7D, 0x995C},{0x6A7E, 0x995D},{0x6A7F, 0x995E},{0x6A80, 0xCCB4},{0x6A81, 0x995F},{0x6A82, 0x9960},{0x6A83, 0x9961},{0x6A84, 0xCFAD}, - {0x6A85, 0x9962},{0x6A86, 0x9963},{0x6A87, 0x9964},{0x6A88, 0x9965},{0x6A89, 0x9966},{0x6A8A, 0x9967},{0x6A8B, 0x9968},{0x6A8C, 0x9969}, - {0x6A8D, 0x996A},{0x6A8E, 0xE9D5},{0x6A8F, 0x996B},{0x6A90, 0xE9DC},{0x6A91, 0xE9DB},{0x6A92, 0x996C},{0x6A93, 0x996D},{0x6A94, 0x996E}, - {0x6A95, 0x996F},{0x6A96, 0x9970},{0x6A97, 0xE9DE},{0x6A98, 0x9971},{0x6A99, 0x9972},{0x6A9A, 0x9973},{0x6A9B, 0x9974},{0x6A9C, 0x9975}, - {0x6A9D, 0x9976},{0x6A9E, 0x9977},{0x6A9F, 0x9978},{0x6AA0, 0xE9D1},{0x6AA1, 0x9979},{0x6AA2, 0x997A},{0x6AA3, 0x997B},{0x6AA4, 0x997C}, - {0x6AA5, 0x997D},{0x6AA6, 0x997E},{0x6AA7, 0x9980},{0x6AA8, 0x9981},{0x6AA9, 0xE9DD},{0x6AAA, 0x9982},{0x6AAB, 0xE9DF},{0x6AAC, 0xC3CA}, - {0x6AAD, 0x9983},{0x6AAE, 0x9984},{0x6AAF, 0x9985},{0x6AB0, 0x9986},{0x6AB1, 0x9987},{0x6AB2, 0x9988},{0x6AB3, 0x9989},{0x6AB4, 0x998A}, - {0x6AB5, 0x998B},{0x6AB6, 0x998C},{0x6AB7, 0x998D},{0x6AB8, 0x998E},{0x6AB9, 0x998F},{0x6ABA, 0x9990},{0x6ABB, 0x9991},{0x6ABC, 0x9992}, - {0x6ABD, 0x9993},{0x6ABE, 0x9994},{0x6ABF, 0x9995},{0x6AC0, 0x9996},{0x6AC1, 0x9997},{0x6AC2, 0x9998},{0x6AC3, 0x9999},{0x6AC4, 0x999A}, - {0x6AC5, 0x999B},{0x6AC6, 0x999C},{0x6AC7, 0x999D},{0x6AC8, 0x999E},{0x6AC9, 0x999F},{0x6ACA, 0x99A0},{0x6ACB, 0x99A1},{0x6ACC, 0x99A2}, - {0x6ACD, 0x99A3},{0x6ACE, 0x99A4},{0x6ACF, 0x99A5},{0x6AD0, 0x99A6},{0x6AD1, 0x99A7},{0x6AD2, 0x99A8},{0x6AD3, 0x99A9},{0x6AD4, 0x99AA}, - {0x6AD5, 0x99AB},{0x6AD6, 0x99AC},{0x6AD7, 0x99AD},{0x6AD8, 0x99AE},{0x6AD9, 0x99AF},{0x6ADA, 0x99B0},{0x6ADB, 0x99B1},{0x6ADC, 0x99B2}, - {0x6ADD, 0x99B3},{0x6ADE, 0x99B4},{0x6ADF, 0x99B5},{0x6AE0, 0x99B6},{0x6AE1, 0x99B7},{0x6AE2, 0x99B8},{0x6AE3, 0x99B9},{0x6AE4, 0x99BA}, - {0x6AE5, 0x99BB},{0x6AE6, 0x99BC},{0x6AE7, 0x99BD},{0x6AE8, 0x99BE},{0x6AE9, 0x99BF},{0x6AEA, 0x99C0},{0x6AEB, 0x99C1},{0x6AEC, 0x99C2}, - {0x6AED, 0x99C3},{0x6AEE, 0x99C4},{0x6AEF, 0x99C5},{0x6AF0, 0x99C6},{0x6AF1, 0x99C7},{0x6AF2, 0x99C8},{0x6AF3, 0x99C9},{0x6AF4, 0x99CA}, - {0x6AF5, 0x99CB},{0x6AF6, 0x99CC},{0x6AF7, 0x99CD},{0x6AF8, 0x99CE},{0x6AF9, 0x99CF},{0x6AFA, 0x99D0},{0x6AFB, 0x99D1},{0x6AFC, 0x99D2}, - {0x6AFD, 0x99D3},{0x6AFE, 0x99D4},{0x6AFF, 0x99D5},{0x6B00, 0x99D6},{0x6B01, 0x99D7},{0x6B02, 0x99D8},{0x6B03, 0x99D9},{0x6B04, 0x99DA}, - {0x6B05, 0x99DB},{0x6B06, 0x99DC},{0x6B07, 0x99DD},{0x6B08, 0x99DE},{0x6B09, 0x99DF},{0x6B0A, 0x99E0},{0x6B0B, 0x99E1},{0x6B0C, 0x99E2}, - {0x6B0D, 0x99E3},{0x6B0E, 0x99E4},{0x6B0F, 0x99E5},{0x6B10, 0x99E6},{0x6B11, 0x99E7},{0x6B12, 0x99E8},{0x6B13, 0x99E9},{0x6B14, 0x99EA}, - {0x6B15, 0x99EB},{0x6B16, 0x99EC},{0x6B17, 0x99ED},{0x6B18, 0x99EE},{0x6B19, 0x99EF},{0x6B1A, 0x99F0},{0x6B1B, 0x99F1},{0x6B1C, 0x99F2}, - {0x6B1D, 0x99F3},{0x6B1E, 0x99F4},{0x6B1F, 0x99F5},{0x6B20, 0xC7B7},{0x6B21, 0xB4CE},{0x6B22, 0xBBB6},{0x6B23, 0xD0C0},{0x6B24, 0xECA3}, - {0x6B25, 0x99F6},{0x6B26, 0x99F7},{0x6B27, 0xC5B7},{0x6B28, 0x99F8},{0x6B29, 0x99F9},{0x6B2A, 0x99FA},{0x6B2B, 0x99FB},{0x6B2C, 0x99FC}, - {0x6B2D, 0x99FD},{0x6B2E, 0x99FE},{0x6B2F, 0x9A40},{0x6B30, 0x9A41},{0x6B31, 0x9A42},{0x6B32, 0xD3FB},{0x6B33, 0x9A43},{0x6B34, 0x9A44}, - {0x6B35, 0x9A45},{0x6B36, 0x9A46},{0x6B37, 0xECA4},{0x6B38, 0x9A47},{0x6B39, 0xECA5},{0x6B3A, 0xC6DB},{0x6B3B, 0x9A48},{0x6B3C, 0x9A49}, - {0x6B3D, 0x9A4A},{0x6B3E, 0xBFEE},{0x6B3F, 0x9A4B},{0x6B40, 0x9A4C},{0x6B41, 0x9A4D},{0x6B42, 0x9A4E},{0x6B43, 0xECA6},{0x6B44, 0x9A4F}, - {0x6B45, 0x9A50},{0x6B46, 0xECA7},{0x6B47, 0xD0AA},{0x6B48, 0x9A51},{0x6B49, 0xC7B8},{0x6B4A, 0x9A52},{0x6B4B, 0x9A53},{0x6B4C, 0xB8E8}, - {0x6B4D, 0x9A54},{0x6B4E, 0x9A55},{0x6B4F, 0x9A56},{0x6B50, 0x9A57},{0x6B51, 0x9A58},{0x6B52, 0x9A59},{0x6B53, 0x9A5A},{0x6B54, 0x9A5B}, - {0x6B55, 0x9A5C},{0x6B56, 0x9A5D},{0x6B57, 0x9A5E},{0x6B58, 0x9A5F},{0x6B59, 0xECA8},{0x6B5A, 0x9A60},{0x6B5B, 0x9A61},{0x6B5C, 0x9A62}, - {0x6B5D, 0x9A63},{0x6B5E, 0x9A64},{0x6B5F, 0x9A65},{0x6B60, 0x9A66},{0x6B61, 0x9A67},{0x6B62, 0xD6B9},{0x6B63, 0xD5FD},{0x6B64, 0xB4CB}, - {0x6B65, 0xB2BD},{0x6B66, 0xCEE4},{0x6B67, 0xC6E7},{0x6B68, 0x9A68},{0x6B69, 0x9A69},{0x6B6A, 0xCDE1},{0x6B6B, 0x9A6A},{0x6B6C, 0x9A6B}, - {0x6B6D, 0x9A6C},{0x6B6E, 0x9A6D},{0x6B6F, 0x9A6E},{0x6B70, 0x9A6F},{0x6B71, 0x9A70},{0x6B72, 0x9A71},{0x6B73, 0x9A72},{0x6B74, 0x9A73}, - {0x6B75, 0x9A74},{0x6B76, 0x9A75},{0x6B77, 0x9A76},{0x6B78, 0x9A77},{0x6B79, 0xB4F5},{0x6B7A, 0x9A78},{0x6B7B, 0xCBC0},{0x6B7C, 0xBCDF}, - {0x6B7D, 0x9A79},{0x6B7E, 0x9A7A},{0x6B7F, 0x9A7B},{0x6B80, 0x9A7C},{0x6B81, 0xE9E2},{0x6B82, 0xE9E3},{0x6B83, 0xD1EA},{0x6B84, 0xE9E5}, - {0x6B85, 0x9A7D},{0x6B86, 0xB4F9},{0x6B87, 0xE9E4},{0x6B88, 0x9A7E},{0x6B89, 0xD1B3},{0x6B8A, 0xCAE2},{0x6B8B, 0xB2D0},{0x6B8C, 0x9A80}, - {0x6B8D, 0xE9E8},{0x6B8E, 0x9A81},{0x6B8F, 0x9A82},{0x6B90, 0x9A83},{0x6B91, 0x9A84},{0x6B92, 0xE9E6},{0x6B93, 0xE9E7},{0x6B94, 0x9A85}, - {0x6B95, 0x9A86},{0x6B96, 0xD6B3},{0x6B97, 0x9A87},{0x6B98, 0x9A88},{0x6B99, 0x9A89},{0x6B9A, 0xE9E9},{0x6B9B, 0xE9EA},{0x6B9C, 0x9A8A}, - {0x6B9D, 0x9A8B},{0x6B9E, 0x9A8C},{0x6B9F, 0x9A8D},{0x6BA0, 0x9A8E},{0x6BA1, 0xE9EB},{0x6BA2, 0x9A8F},{0x6BA3, 0x9A90},{0x6BA4, 0x9A91}, - {0x6BA5, 0x9A92},{0x6BA6, 0x9A93},{0x6BA7, 0x9A94},{0x6BA8, 0x9A95},{0x6BA9, 0x9A96},{0x6BAA, 0xE9EC},{0x6BAB, 0x9A97},{0x6BAC, 0x9A98}, - {0x6BAD, 0x9A99},{0x6BAE, 0x9A9A},{0x6BAF, 0x9A9B},{0x6BB0, 0x9A9C},{0x6BB1, 0x9A9D},{0x6BB2, 0x9A9E},{0x6BB3, 0xECAF},{0x6BB4, 0xC5B9}, - {0x6BB5, 0xB6CE},{0x6BB6, 0x9A9F},{0x6BB7, 0xD2F3},{0x6BB8, 0x9AA0},{0x6BB9, 0x9AA1},{0x6BBA, 0x9AA2},{0x6BBB, 0x9AA3},{0x6BBC, 0x9AA4}, - {0x6BBD, 0x9AA5},{0x6BBE, 0x9AA6},{0x6BBF, 0xB5EE},{0x6BC0, 0x9AA7},{0x6BC1, 0xBBD9},{0x6BC2, 0xECB1},{0x6BC3, 0x9AA8},{0x6BC4, 0x9AA9}, - {0x6BC5, 0xD2E3},{0x6BC6, 0x9AAA},{0x6BC7, 0x9AAB},{0x6BC8, 0x9AAC},{0x6BC9, 0x9AAD},{0x6BCA, 0x9AAE},{0x6BCB, 0xCEE3},{0x6BCC, 0x9AAF}, - {0x6BCD, 0xC4B8},{0x6BCE, 0x9AB0},{0x6BCF, 0xC3BF},{0x6BD0, 0x9AB1},{0x6BD1, 0x9AB2},{0x6BD2, 0xB6BE},{0x6BD3, 0xD8B9},{0x6BD4, 0xB1C8}, - {0x6BD5, 0xB1CF},{0x6BD6, 0xB1D1},{0x6BD7, 0xC5FE},{0x6BD8, 0x9AB3},{0x6BD9, 0xB1D0},{0x6BDA, 0x9AB4},{0x6BDB, 0xC3AB},{0x6BDC, 0x9AB5}, - {0x6BDD, 0x9AB6},{0x6BDE, 0x9AB7},{0x6BDF, 0x9AB8},{0x6BE0, 0x9AB9},{0x6BE1, 0xD5B1},{0x6BE2, 0x9ABA},{0x6BE3, 0x9ABB},{0x6BE4, 0x9ABC}, - {0x6BE5, 0x9ABD},{0x6BE6, 0x9ABE},{0x6BE7, 0x9ABF},{0x6BE8, 0x9AC0},{0x6BE9, 0x9AC1},{0x6BEA, 0xEBA4},{0x6BEB, 0xBAC1},{0x6BEC, 0x9AC2}, - {0x6BED, 0x9AC3},{0x6BEE, 0x9AC4},{0x6BEF, 0xCCBA},{0x6BF0, 0x9AC5},{0x6BF1, 0x9AC6},{0x6BF2, 0x9AC7},{0x6BF3, 0xEBA5},{0x6BF4, 0x9AC8}, - {0x6BF5, 0xEBA7},{0x6BF6, 0x9AC9},{0x6BF7, 0x9ACA},{0x6BF8, 0x9ACB},{0x6BF9, 0xEBA8},{0x6BFA, 0x9ACC},{0x6BFB, 0x9ACD},{0x6BFC, 0x9ACE}, - {0x6BFD, 0xEBA6},{0x6BFE, 0x9ACF},{0x6BFF, 0x9AD0},{0x6C00, 0x9AD1},{0x6C01, 0x9AD2},{0x6C02, 0x9AD3},{0x6C03, 0x9AD4},{0x6C04, 0x9AD5}, - {0x6C05, 0xEBA9},{0x6C06, 0xEBAB},{0x6C07, 0xEBAA},{0x6C08, 0x9AD6},{0x6C09, 0x9AD7},{0x6C0A, 0x9AD8},{0x6C0B, 0x9AD9},{0x6C0C, 0x9ADA}, - {0x6C0D, 0xEBAC},{0x6C0E, 0x9ADB},{0x6C0F, 0xCACF},{0x6C10, 0xD8B5},{0x6C11, 0xC3F1},{0x6C12, 0x9ADC},{0x6C13, 0xC3A5},{0x6C14, 0xC6F8}, - {0x6C15, 0xEBAD},{0x6C16, 0xC4CA},{0x6C17, 0x9ADD},{0x6C18, 0xEBAE},{0x6C19, 0xEBAF},{0x6C1A, 0xEBB0},{0x6C1B, 0xB7D5},{0x6C1C, 0x9ADE}, - {0x6C1D, 0x9ADF},{0x6C1E, 0x9AE0},{0x6C1F, 0xB7FA},{0x6C20, 0x9AE1},{0x6C21, 0xEBB1},{0x6C22, 0xC7E2},{0x6C23, 0x9AE2},{0x6C24, 0xEBB3}, - {0x6C25, 0x9AE3},{0x6C26, 0xBAA4},{0x6C27, 0xD1F5},{0x6C28, 0xB0B1},{0x6C29, 0xEBB2},{0x6C2A, 0xEBB4},{0x6C2B, 0x9AE4},{0x6C2C, 0x9AE5}, - {0x6C2D, 0x9AE6},{0x6C2E, 0xB5AA},{0x6C2F, 0xC2C8},{0x6C30, 0xC7E8},{0x6C31, 0x9AE7},{0x6C32, 0xEBB5},{0x6C33, 0x9AE8},{0x6C34, 0xCBAE}, - {0x6C35, 0xE3DF},{0x6C36, 0x9AE9},{0x6C37, 0x9AEA},{0x6C38, 0xD3C0},{0x6C39, 0x9AEB},{0x6C3A, 0x9AEC},{0x6C3B, 0x9AED},{0x6C3C, 0x9AEE}, - {0x6C3D, 0xD9DB},{0x6C3E, 0x9AEF},{0x6C3F, 0x9AF0},{0x6C40, 0xCDA1},{0x6C41, 0xD6AD},{0x6C42, 0xC7F3},{0x6C43, 0x9AF1},{0x6C44, 0x9AF2}, - {0x6C45, 0x9AF3},{0x6C46, 0xD9E0},{0x6C47, 0xBBE3},{0x6C48, 0x9AF4},{0x6C49, 0xBABA},{0x6C4A, 0xE3E2},{0x6C4B, 0x9AF5},{0x6C4C, 0x9AF6}, - {0x6C4D, 0x9AF7},{0x6C4E, 0x9AF8},{0x6C4F, 0x9AF9},{0x6C50, 0xCFAB},{0x6C51, 0x9AFA},{0x6C52, 0x9AFB},{0x6C53, 0x9AFC},{0x6C54, 0xE3E0}, - {0x6C55, 0xC9C7},{0x6C56, 0x9AFD},{0x6C57, 0xBAB9},{0x6C58, 0x9AFE},{0x6C59, 0x9B40},{0x6C5A, 0x9B41},{0x6C5B, 0xD1B4},{0x6C5C, 0xE3E1}, - {0x6C5D, 0xC8EA},{0x6C5E, 0xB9AF},{0x6C5F, 0xBDAD},{0x6C60, 0xB3D8},{0x6C61, 0xCEDB},{0x6C62, 0x9B42},{0x6C63, 0x9B43},{0x6C64, 0xCCC0}, - {0x6C65, 0x9B44},{0x6C66, 0x9B45},{0x6C67, 0x9B46},{0x6C68, 0xE3E8},{0x6C69, 0xE3E9},{0x6C6A, 0xCDF4},{0x6C6B, 0x9B47},{0x6C6C, 0x9B48}, - {0x6C6D, 0x9B49},{0x6C6E, 0x9B4A},{0x6C6F, 0x9B4B},{0x6C70, 0xCCAD},{0x6C71, 0x9B4C},{0x6C72, 0xBCB3},{0x6C73, 0x9B4D},{0x6C74, 0xE3EA}, - {0x6C75, 0x9B4E},{0x6C76, 0xE3EB},{0x6C77, 0x9B4F},{0x6C78, 0x9B50},{0x6C79, 0xD0DA},{0x6C7A, 0x9B51},{0x6C7B, 0x9B52},{0x6C7C, 0x9B53}, - {0x6C7D, 0xC6FB},{0x6C7E, 0xB7DA},{0x6C7F, 0x9B54},{0x6C80, 0x9B55},{0x6C81, 0xC7DF},{0x6C82, 0xD2CA},{0x6C83, 0xCED6},{0x6C84, 0x9B56}, - {0x6C85, 0xE3E4},{0x6C86, 0xE3EC},{0x6C87, 0x9B57},{0x6C88, 0xC9F2},{0x6C89, 0xB3C1},{0x6C8A, 0x9B58},{0x6C8B, 0x9B59},{0x6C8C, 0xE3E7}, - {0x6C8D, 0x9B5A},{0x6C8E, 0x9B5B},{0x6C8F, 0xC6E3},{0x6C90, 0xE3E5},{0x6C91, 0x9B5C},{0x6C92, 0x9B5D},{0x6C93, 0xEDB3},{0x6C94, 0xE3E6}, - {0x6C95, 0x9B5E},{0x6C96, 0x9B5F},{0x6C97, 0x9B60},{0x6C98, 0x9B61},{0x6C99, 0xC9B3},{0x6C9A, 0x9B62},{0x6C9B, 0xC5E6},{0x6C9C, 0x9B63}, - {0x6C9D, 0x9B64},{0x6C9E, 0x9B65},{0x6C9F, 0xB9B5},{0x6CA0, 0x9B66},{0x6CA1, 0xC3BB},{0x6CA2, 0x9B67},{0x6CA3, 0xE3E3},{0x6CA4, 0xC5BD}, - {0x6CA5, 0xC1A4},{0x6CA6, 0xC2D9},{0x6CA7, 0xB2D7},{0x6CA8, 0x9B68},{0x6CA9, 0xE3ED},{0x6CAA, 0xBBA6},{0x6CAB, 0xC4AD},{0x6CAC, 0x9B69}, - {0x6CAD, 0xE3F0},{0x6CAE, 0xBEDA},{0x6CAF, 0x9B6A},{0x6CB0, 0x9B6B},{0x6CB1, 0xE3FB},{0x6CB2, 0xE3F5},{0x6CB3, 0xBAD3},{0x6CB4, 0x9B6C}, - {0x6CB5, 0x9B6D},{0x6CB6, 0x9B6E},{0x6CB7, 0x9B6F},{0x6CB8, 0xB7D0},{0x6CB9, 0xD3CD},{0x6CBA, 0x9B70},{0x6CBB, 0xD6CE},{0x6CBC, 0xD5D3}, - {0x6CBD, 0xB9C1},{0x6CBE, 0xD5B4},{0x6CBF, 0xD1D8},{0x6CC0, 0x9B71},{0x6CC1, 0x9B72},{0x6CC2, 0x9B73},{0x6CC3, 0x9B74},{0x6CC4, 0xD0B9}, - {0x6CC5, 0xC7F6},{0x6CC6, 0x9B75},{0x6CC7, 0x9B76},{0x6CC8, 0x9B77},{0x6CC9, 0xC8AA},{0x6CCA, 0xB2B4},{0x6CCB, 0x9B78},{0x6CCC, 0xC3DA}, - {0x6CCD, 0x9B79},{0x6CCE, 0x9B7A},{0x6CCF, 0x9B7B},{0x6CD0, 0xE3EE},{0x6CD1, 0x9B7C},{0x6CD2, 0x9B7D},{0x6CD3, 0xE3FC},{0x6CD4, 0xE3EF}, - {0x6CD5, 0xB7A8},{0x6CD6, 0xE3F7},{0x6CD7, 0xE3F4},{0x6CD8, 0x9B7E},{0x6CD9, 0x9B80},{0x6CDA, 0x9B81},{0x6CDB, 0xB7BA},{0x6CDC, 0x9B82}, - {0x6CDD, 0x9B83},{0x6CDE, 0xC5A2},{0x6CDF, 0x9B84},{0x6CE0, 0xE3F6},{0x6CE1, 0xC5DD},{0x6CE2, 0xB2A8},{0x6CE3, 0xC6FC},{0x6CE4, 0x9B85}, - {0x6CE5, 0xC4E0},{0x6CE6, 0x9B86},{0x6CE7, 0x9B87},{0x6CE8, 0xD7A2},{0x6CE9, 0x9B88},{0x6CEA, 0xC0E1},{0x6CEB, 0xE3F9},{0x6CEC, 0x9B89}, - {0x6CED, 0x9B8A},{0x6CEE, 0xE3FA},{0x6CEF, 0xE3FD},{0x6CF0, 0xCCA9},{0x6CF1, 0xE3F3},{0x6CF2, 0x9B8B},{0x6CF3, 0xD3BE},{0x6CF4, 0x9B8C}, - {0x6CF5, 0xB1C3},{0x6CF6, 0xEDB4},{0x6CF7, 0xE3F1},{0x6CF8, 0xE3F2},{0x6CF9, 0x9B8D},{0x6CFA, 0xE3F8},{0x6CFB, 0xD0BA},{0x6CFC, 0xC6C3}, - {0x6CFD, 0xD4F3},{0x6CFE, 0xE3FE},{0x6CFF, 0x9B8E},{0x6D00, 0x9B8F},{0x6D01, 0xBDE0},{0x6D02, 0x9B90},{0x6D03, 0x9B91},{0x6D04, 0xE4A7}, - {0x6D05, 0x9B92},{0x6D06, 0x9B93},{0x6D07, 0xE4A6},{0x6D08, 0x9B94},{0x6D09, 0x9B95},{0x6D0A, 0x9B96},{0x6D0B, 0xD1F3},{0x6D0C, 0xE4A3}, - {0x6D0D, 0x9B97},{0x6D0E, 0xE4A9},{0x6D0F, 0x9B98},{0x6D10, 0x9B99},{0x6D11, 0x9B9A},{0x6D12, 0xC8F7},{0x6D13, 0x9B9B},{0x6D14, 0x9B9C}, - {0x6D15, 0x9B9D},{0x6D16, 0x9B9E},{0x6D17, 0xCFB4},{0x6D18, 0x9B9F},{0x6D19, 0xE4A8},{0x6D1A, 0xE4AE},{0x6D1B, 0xC2E5},{0x6D1C, 0x9BA0}, - {0x6D1D, 0x9BA1},{0x6D1E, 0xB6B4},{0x6D1F, 0x9BA2},{0x6D20, 0x9BA3},{0x6D21, 0x9BA4},{0x6D22, 0x9BA5},{0x6D23, 0x9BA6},{0x6D24, 0x9BA7}, - {0x6D25, 0xBDF2},{0x6D26, 0x9BA8},{0x6D27, 0xE4A2},{0x6D28, 0x9BA9},{0x6D29, 0x9BAA},{0x6D2A, 0xBAE9},{0x6D2B, 0xE4AA},{0x6D2C, 0x9BAB}, - {0x6D2D, 0x9BAC},{0x6D2E, 0xE4AC},{0x6D2F, 0x9BAD},{0x6D30, 0x9BAE},{0x6D31, 0xB6FD},{0x6D32, 0xD6DE},{0x6D33, 0xE4B2},{0x6D34, 0x9BAF}, - {0x6D35, 0xE4AD},{0x6D36, 0x9BB0},{0x6D37, 0x9BB1},{0x6D38, 0x9BB2},{0x6D39, 0xE4A1},{0x6D3A, 0x9BB3},{0x6D3B, 0xBBEE},{0x6D3C, 0xCDDD}, - {0x6D3D, 0xC7A2},{0x6D3E, 0xC5C9},{0x6D3F, 0x9BB4},{0x6D40, 0x9BB5},{0x6D41, 0xC1F7},{0x6D42, 0x9BB6},{0x6D43, 0xE4A4},{0x6D44, 0x9BB7}, - {0x6D45, 0xC7B3},{0x6D46, 0xBDAC},{0x6D47, 0xBDBD},{0x6D48, 0xE4A5},{0x6D49, 0x9BB8},{0x6D4A, 0xD7C7},{0x6D4B, 0xB2E2},{0x6D4C, 0x9BB9}, - {0x6D4D, 0xE4AB},{0x6D4E, 0xBCC3},{0x6D4F, 0xE4AF},{0x6D50, 0x9BBA},{0x6D51, 0xBBEB},{0x6D52, 0xE4B0},{0x6D53, 0xC5A8},{0x6D54, 0xE4B1}, - {0x6D55, 0x9BBB},{0x6D56, 0x9BBC},{0x6D57, 0x9BBD},{0x6D58, 0x9BBE},{0x6D59, 0xD5E3},{0x6D5A, 0xBFA3},{0x6D5B, 0x9BBF},{0x6D5C, 0xE4BA}, - {0x6D5D, 0x9BC0},{0x6D5E, 0xE4B7},{0x6D5F, 0x9BC1},{0x6D60, 0xE4BB},{0x6D61, 0x9BC2},{0x6D62, 0x9BC3},{0x6D63, 0xE4BD},{0x6D64, 0x9BC4}, - {0x6D65, 0x9BC5},{0x6D66, 0xC6D6},{0x6D67, 0x9BC6},{0x6D68, 0x9BC7},{0x6D69, 0xBAC6},{0x6D6A, 0xC0CB},{0x6D6B, 0x9BC8},{0x6D6C, 0x9BC9}, - {0x6D6D, 0x9BCA},{0x6D6E, 0xB8A1},{0x6D6F, 0xE4B4},{0x6D70, 0x9BCB},{0x6D71, 0x9BCC},{0x6D72, 0x9BCD},{0x6D73, 0x9BCE},{0x6D74, 0xD4A1}, - {0x6D75, 0x9BCF},{0x6D76, 0x9BD0},{0x6D77, 0xBAA3},{0x6D78, 0xBDFE},{0x6D79, 0x9BD1},{0x6D7A, 0x9BD2},{0x6D7B, 0x9BD3},{0x6D7C, 0xE4BC}, - {0x6D7D, 0x9BD4},{0x6D7E, 0x9BD5},{0x6D7F, 0x9BD6},{0x6D80, 0x9BD7},{0x6D81, 0x9BD8},{0x6D82, 0xCDBF},{0x6D83, 0x9BD9},{0x6D84, 0x9BDA}, - {0x6D85, 0xC4F9},{0x6D86, 0x9BDB},{0x6D87, 0x9BDC},{0x6D88, 0xCFFB},{0x6D89, 0xC9E6},{0x6D8A, 0x9BDD},{0x6D8B, 0x9BDE},{0x6D8C, 0xD3BF}, - {0x6D8D, 0x9BDF},{0x6D8E, 0xCFD1},{0x6D8F, 0x9BE0},{0x6D90, 0x9BE1},{0x6D91, 0xE4B3},{0x6D92, 0x9BE2},{0x6D93, 0xE4B8},{0x6D94, 0xE4B9}, - {0x6D95, 0xCCE9},{0x6D96, 0x9BE3},{0x6D97, 0x9BE4},{0x6D98, 0x9BE5},{0x6D99, 0x9BE6},{0x6D9A, 0x9BE7},{0x6D9B, 0xCCCE},{0x6D9C, 0x9BE8}, - {0x6D9D, 0xC0D4},{0x6D9E, 0xE4B5},{0x6D9F, 0xC1B0},{0x6DA0, 0xE4B6},{0x6DA1, 0xCED0},{0x6DA2, 0x9BE9},{0x6DA3, 0xBBC1},{0x6DA4, 0xB5D3}, - {0x6DA5, 0x9BEA},{0x6DA6, 0xC8F3},{0x6DA7, 0xBDA7},{0x6DA8, 0xD5C7},{0x6DA9, 0xC9AC},{0x6DAA, 0xB8A2},{0x6DAB, 0xE4CA},{0x6DAC, 0x9BEB}, - {0x6DAD, 0x9BEC},{0x6DAE, 0xE4CC},{0x6DAF, 0xD1C4},{0x6DB0, 0x9BED},{0x6DB1, 0x9BEE},{0x6DB2, 0xD2BA},{0x6DB3, 0x9BEF},{0x6DB4, 0x9BF0}, - {0x6DB5, 0xBAAD},{0x6DB6, 0x9BF1},{0x6DB7, 0x9BF2},{0x6DB8, 0xBAD4},{0x6DB9, 0x9BF3},{0x6DBA, 0x9BF4},{0x6DBB, 0x9BF5},{0x6DBC, 0x9BF6}, - {0x6DBD, 0x9BF7},{0x6DBE, 0x9BF8},{0x6DBF, 0xE4C3},{0x6DC0, 0xB5ED},{0x6DC1, 0x9BF9},{0x6DC2, 0x9BFA},{0x6DC3, 0x9BFB},{0x6DC4, 0xD7CD}, - {0x6DC5, 0xE4C0},{0x6DC6, 0xCFFD},{0x6DC7, 0xE4BF},{0x6DC8, 0x9BFC},{0x6DC9, 0x9BFD},{0x6DCA, 0x9BFE},{0x6DCB, 0xC1DC},{0x6DCC, 0xCCCA}, - {0x6DCD, 0x9C40},{0x6DCE, 0x9C41},{0x6DCF, 0x9C42},{0x6DD0, 0x9C43},{0x6DD1, 0xCAE7},{0x6DD2, 0x9C44},{0x6DD3, 0x9C45},{0x6DD4, 0x9C46}, - {0x6DD5, 0x9C47},{0x6DD6, 0xC4D7},{0x6DD7, 0x9C48},{0x6DD8, 0xCCD4},{0x6DD9, 0xE4C8},{0x6DDA, 0x9C49},{0x6DDB, 0x9C4A},{0x6DDC, 0x9C4B}, - {0x6DDD, 0xE4C7},{0x6DDE, 0xE4C1},{0x6DDF, 0x9C4C},{0x6DE0, 0xE4C4},{0x6DE1, 0xB5AD},{0x6DE2, 0x9C4D},{0x6DE3, 0x9C4E},{0x6DE4, 0xD3D9}, - {0x6DE5, 0x9C4F},{0x6DE6, 0xE4C6},{0x6DE7, 0x9C50},{0x6DE8, 0x9C51},{0x6DE9, 0x9C52},{0x6DEA, 0x9C53},{0x6DEB, 0xD2F9},{0x6DEC, 0xB4E3}, - {0x6DED, 0x9C54},{0x6DEE, 0xBBB4},{0x6DEF, 0x9C55},{0x6DF0, 0x9C56},{0x6DF1, 0xC9EE},{0x6DF2, 0x9C57},{0x6DF3, 0xB4BE},{0x6DF4, 0x9C58}, - {0x6DF5, 0x9C59},{0x6DF6, 0x9C5A},{0x6DF7, 0xBBEC},{0x6DF8, 0x9C5B},{0x6DF9, 0xD1CD},{0x6DFA, 0x9C5C},{0x6DFB, 0xCCED},{0x6DFC, 0xEDB5}, - {0x6DFD, 0x9C5D},{0x6DFE, 0x9C5E},{0x6DFF, 0x9C5F},{0x6E00, 0x9C60},{0x6E01, 0x9C61},{0x6E02, 0x9C62},{0x6E03, 0x9C63},{0x6E04, 0x9C64}, - {0x6E05, 0xC7E5},{0x6E06, 0x9C65},{0x6E07, 0x9C66},{0x6E08, 0x9C67},{0x6E09, 0x9C68},{0x6E0A, 0xD4A8},{0x6E0B, 0x9C69},{0x6E0C, 0xE4CB}, - {0x6E0D, 0xD7D5},{0x6E0E, 0xE4C2},{0x6E0F, 0x9C6A},{0x6E10, 0xBDA5},{0x6E11, 0xE4C5},{0x6E12, 0x9C6B},{0x6E13, 0x9C6C},{0x6E14, 0xD3E6}, - {0x6E15, 0x9C6D},{0x6E16, 0xE4C9},{0x6E17, 0xC9F8},{0x6E18, 0x9C6E},{0x6E19, 0x9C6F},{0x6E1A, 0xE4BE},{0x6E1B, 0x9C70},{0x6E1C, 0x9C71}, - {0x6E1D, 0xD3E5},{0x6E1E, 0x9C72},{0x6E1F, 0x9C73},{0x6E20, 0xC7FE},{0x6E21, 0xB6C9},{0x6E22, 0x9C74},{0x6E23, 0xD4FC},{0x6E24, 0xB2B3}, - {0x6E25, 0xE4D7},{0x6E26, 0x9C75},{0x6E27, 0x9C76},{0x6E28, 0x9C77},{0x6E29, 0xCEC2},{0x6E2A, 0x9C78},{0x6E2B, 0xE4CD},{0x6E2C, 0x9C79}, - {0x6E2D, 0xCEBC},{0x6E2E, 0x9C7A},{0x6E2F, 0xB8DB},{0x6E30, 0x9C7B},{0x6E31, 0x9C7C},{0x6E32, 0xE4D6},{0x6E33, 0x9C7D},{0x6E34, 0xBFCA}, - {0x6E35, 0x9C7E},{0x6E36, 0x9C80},{0x6E37, 0x9C81},{0x6E38, 0xD3CE},{0x6E39, 0x9C82},{0x6E3A, 0xC3EC},{0x6E3B, 0x9C83},{0x6E3C, 0x9C84}, - {0x6E3D, 0x9C85},{0x6E3E, 0x9C86},{0x6E3F, 0x9C87},{0x6E40, 0x9C88},{0x6E41, 0x9C89},{0x6E42, 0x9C8A},{0x6E43, 0xC5C8},{0x6E44, 0xE4D8}, - {0x6E45, 0x9C8B},{0x6E46, 0x9C8C},{0x6E47, 0x9C8D},{0x6E48, 0x9C8E},{0x6E49, 0x9C8F},{0x6E4A, 0x9C90},{0x6E4B, 0x9C91},{0x6E4C, 0x9C92}, - {0x6E4D, 0xCDC4},{0x6E4E, 0xE4CF},{0x6E4F, 0x9C93},{0x6E50, 0x9C94},{0x6E51, 0x9C95},{0x6E52, 0x9C96},{0x6E53, 0xE4D4},{0x6E54, 0xE4D5}, - {0x6E55, 0x9C97},{0x6E56, 0xBAFE},{0x6E57, 0x9C98},{0x6E58, 0xCFE6},{0x6E59, 0x9C99},{0x6E5A, 0x9C9A},{0x6E5B, 0xD5BF},{0x6E5C, 0x9C9B}, - {0x6E5D, 0x9C9C},{0x6E5E, 0x9C9D},{0x6E5F, 0xE4D2},{0x6E60, 0x9C9E},{0x6E61, 0x9C9F},{0x6E62, 0x9CA0},{0x6E63, 0x9CA1},{0x6E64, 0x9CA2}, - {0x6E65, 0x9CA3},{0x6E66, 0x9CA4},{0x6E67, 0x9CA5},{0x6E68, 0x9CA6},{0x6E69, 0x9CA7},{0x6E6A, 0x9CA8},{0x6E6B, 0xE4D0},{0x6E6C, 0x9CA9}, - {0x6E6D, 0x9CAA},{0x6E6E, 0xE4CE},{0x6E6F, 0x9CAB},{0x6E70, 0x9CAC},{0x6E71, 0x9CAD},{0x6E72, 0x9CAE},{0x6E73, 0x9CAF},{0x6E74, 0x9CB0}, - {0x6E75, 0x9CB1},{0x6E76, 0x9CB2},{0x6E77, 0x9CB3},{0x6E78, 0x9CB4},{0x6E79, 0x9CB5},{0x6E7A, 0x9CB6},{0x6E7B, 0x9CB7},{0x6E7C, 0x9CB8}, - {0x6E7D, 0x9CB9},{0x6E7E, 0xCDE5},{0x6E7F, 0xCAAA},{0x6E80, 0x9CBA},{0x6E81, 0x9CBB},{0x6E82, 0x9CBC},{0x6E83, 0xC0A3},{0x6E84, 0x9CBD}, - {0x6E85, 0xBDA6},{0x6E86, 0xE4D3},{0x6E87, 0x9CBE},{0x6E88, 0x9CBF},{0x6E89, 0xB8C8},{0x6E8A, 0x9CC0},{0x6E8B, 0x9CC1},{0x6E8C, 0x9CC2}, - {0x6E8D, 0x9CC3},{0x6E8E, 0x9CC4},{0x6E8F, 0xE4E7},{0x6E90, 0xD4B4},{0x6E91, 0x9CC5},{0x6E92, 0x9CC6},{0x6E93, 0x9CC7},{0x6E94, 0x9CC8}, - {0x6E95, 0x9CC9},{0x6E96, 0x9CCA},{0x6E97, 0x9CCB},{0x6E98, 0xE4DB},{0x6E99, 0x9CCC},{0x6E9A, 0x9CCD},{0x6E9B, 0x9CCE},{0x6E9C, 0xC1EF}, - {0x6E9D, 0x9CCF},{0x6E9E, 0x9CD0},{0x6E9F, 0xE4E9},{0x6EA0, 0x9CD1},{0x6EA1, 0x9CD2},{0x6EA2, 0xD2E7},{0x6EA3, 0x9CD3},{0x6EA4, 0x9CD4}, - {0x6EA5, 0xE4DF},{0x6EA6, 0x9CD5},{0x6EA7, 0xE4E0},{0x6EA8, 0x9CD6},{0x6EA9, 0x9CD7},{0x6EAA, 0xCFAA},{0x6EAB, 0x9CD8},{0x6EAC, 0x9CD9}, - {0x6EAD, 0x9CDA},{0x6EAE, 0x9CDB},{0x6EAF, 0xCBDD},{0x6EB0, 0x9CDC},{0x6EB1, 0xE4DA},{0x6EB2, 0xE4D1},{0x6EB3, 0x9CDD},{0x6EB4, 0xE4E5}, - {0x6EB5, 0x9CDE},{0x6EB6, 0xC8DC},{0x6EB7, 0xE4E3},{0x6EB8, 0x9CDF},{0x6EB9, 0x9CE0},{0x6EBA, 0xC4E7},{0x6EBB, 0xE4E2},{0x6EBC, 0x9CE1}, - {0x6EBD, 0xE4E1},{0x6EBE, 0x9CE2},{0x6EBF, 0x9CE3},{0x6EC0, 0x9CE4},{0x6EC1, 0xB3FC},{0x6EC2, 0xE4E8},{0x6EC3, 0x9CE5},{0x6EC4, 0x9CE6}, - {0x6EC5, 0x9CE7},{0x6EC6, 0x9CE8},{0x6EC7, 0xB5E1},{0x6EC8, 0x9CE9},{0x6EC9, 0x9CEA},{0x6ECA, 0x9CEB},{0x6ECB, 0xD7CC},{0x6ECC, 0x9CEC}, - {0x6ECD, 0x9CED},{0x6ECE, 0x9CEE},{0x6ECF, 0xE4E6},{0x6ED0, 0x9CEF},{0x6ED1, 0xBBAC},{0x6ED2, 0x9CF0},{0x6ED3, 0xD7D2},{0x6ED4, 0xCCCF}, - {0x6ED5, 0xEBF8},{0x6ED6, 0x9CF1},{0x6ED7, 0xE4E4},{0x6ED8, 0x9CF2},{0x6ED9, 0x9CF3},{0x6EDA, 0xB9F6},{0x6EDB, 0x9CF4},{0x6EDC, 0x9CF5}, - {0x6EDD, 0x9CF6},{0x6EDE, 0xD6CD},{0x6EDF, 0xE4D9},{0x6EE0, 0xE4DC},{0x6EE1, 0xC2FA},{0x6EE2, 0xE4DE},{0x6EE3, 0x9CF7},{0x6EE4, 0xC2CB}, - {0x6EE5, 0xC0C4},{0x6EE6, 0xC2D0},{0x6EE7, 0x9CF8},{0x6EE8, 0xB1F5},{0x6EE9, 0xCCB2},{0x6EEA, 0x9CF9},{0x6EEB, 0x9CFA},{0x6EEC, 0x9CFB}, - {0x6EED, 0x9CFC},{0x6EEE, 0x9CFD},{0x6EEF, 0x9CFE},{0x6EF0, 0x9D40},{0x6EF1, 0x9D41},{0x6EF2, 0x9D42},{0x6EF3, 0x9D43},{0x6EF4, 0xB5CE}, - {0x6EF5, 0x9D44},{0x6EF6, 0x9D45},{0x6EF7, 0x9D46},{0x6EF8, 0x9D47},{0x6EF9, 0xE4EF},{0x6EFA, 0x9D48},{0x6EFB, 0x9D49},{0x6EFC, 0x9D4A}, - {0x6EFD, 0x9D4B},{0x6EFE, 0x9D4C},{0x6EFF, 0x9D4D},{0x6F00, 0x9D4E},{0x6F01, 0x9D4F},{0x6F02, 0xC6AF},{0x6F03, 0x9D50},{0x6F04, 0x9D51}, - {0x6F05, 0x9D52},{0x6F06, 0xC6E1},{0x6F07, 0x9D53},{0x6F08, 0x9D54},{0x6F09, 0xE4F5},{0x6F0A, 0x9D55},{0x6F0B, 0x9D56},{0x6F0C, 0x9D57}, - {0x6F0D, 0x9D58},{0x6F0E, 0x9D59},{0x6F0F, 0xC2A9},{0x6F10, 0x9D5A},{0x6F11, 0x9D5B},{0x6F12, 0x9D5C},{0x6F13, 0xC0EC},{0x6F14, 0xD1DD}, - {0x6F15, 0xE4EE},{0x6F16, 0x9D5D},{0x6F17, 0x9D5E},{0x6F18, 0x9D5F},{0x6F19, 0x9D60},{0x6F1A, 0x9D61},{0x6F1B, 0x9D62},{0x6F1C, 0x9D63}, - {0x6F1D, 0x9D64},{0x6F1E, 0x9D65},{0x6F1F, 0x9D66},{0x6F20, 0xC4AE},{0x6F21, 0x9D67},{0x6F22, 0x9D68},{0x6F23, 0x9D69},{0x6F24, 0xE4ED}, - {0x6F25, 0x9D6A},{0x6F26, 0x9D6B},{0x6F27, 0x9D6C},{0x6F28, 0x9D6D},{0x6F29, 0xE4F6},{0x6F2A, 0xE4F4},{0x6F2B, 0xC2FE},{0x6F2C, 0x9D6E}, - {0x6F2D, 0xE4DD},{0x6F2E, 0x9D6F},{0x6F2F, 0xE4F0},{0x6F30, 0x9D70},{0x6F31, 0xCAFE},{0x6F32, 0x9D71},{0x6F33, 0xD5C4},{0x6F34, 0x9D72}, - {0x6F35, 0x9D73},{0x6F36, 0xE4F1},{0x6F37, 0x9D74},{0x6F38, 0x9D75},{0x6F39, 0x9D76},{0x6F3A, 0x9D77},{0x6F3B, 0x9D78},{0x6F3C, 0x9D79}, - {0x6F3D, 0x9D7A},{0x6F3E, 0xD1FA},{0x6F3F, 0x9D7B},{0x6F40, 0x9D7C},{0x6F41, 0x9D7D},{0x6F42, 0x9D7E},{0x6F43, 0x9D80},{0x6F44, 0x9D81}, - {0x6F45, 0x9D82},{0x6F46, 0xE4EB},{0x6F47, 0xE4EC},{0x6F48, 0x9D83},{0x6F49, 0x9D84},{0x6F4A, 0x9D85},{0x6F4B, 0xE4F2},{0x6F4C, 0x9D86}, - {0x6F4D, 0xCEAB},{0x6F4E, 0x9D87},{0x6F4F, 0x9D88},{0x6F50, 0x9D89},{0x6F51, 0x9D8A},{0x6F52, 0x9D8B},{0x6F53, 0x9D8C},{0x6F54, 0x9D8D}, - {0x6F55, 0x9D8E},{0x6F56, 0x9D8F},{0x6F57, 0x9D90},{0x6F58, 0xC5CB},{0x6F59, 0x9D91},{0x6F5A, 0x9D92},{0x6F5B, 0x9D93},{0x6F5C, 0xC7B1}, - {0x6F5D, 0x9D94},{0x6F5E, 0xC2BA},{0x6F5F, 0x9D95},{0x6F60, 0x9D96},{0x6F61, 0x9D97},{0x6F62, 0xE4EA},{0x6F63, 0x9D98},{0x6F64, 0x9D99}, - {0x6F65, 0x9D9A},{0x6F66, 0xC1CA},{0x6F67, 0x9D9B},{0x6F68, 0x9D9C},{0x6F69, 0x9D9D},{0x6F6A, 0x9D9E},{0x6F6B, 0x9D9F},{0x6F6C, 0x9DA0}, - {0x6F6D, 0xCCB6},{0x6F6E, 0xB3B1},{0x6F6F, 0x9DA1},{0x6F70, 0x9DA2},{0x6F71, 0x9DA3},{0x6F72, 0xE4FB},{0x6F73, 0x9DA4},{0x6F74, 0xE4F3}, - {0x6F75, 0x9DA5},{0x6F76, 0x9DA6},{0x6F77, 0x9DA7},{0x6F78, 0xE4FA},{0x6F79, 0x9DA8},{0x6F7A, 0xE4FD},{0x6F7B, 0x9DA9},{0x6F7C, 0xE4FC}, - {0x6F7D, 0x9DAA},{0x6F7E, 0x9DAB},{0x6F7F, 0x9DAC},{0x6F80, 0x9DAD},{0x6F81, 0x9DAE},{0x6F82, 0x9DAF},{0x6F83, 0x9DB0},{0x6F84, 0xB3CE}, - {0x6F85, 0x9DB1},{0x6F86, 0x9DB2},{0x6F87, 0x9DB3},{0x6F88, 0xB3BA},{0x6F89, 0xE4F7},{0x6F8A, 0x9DB4},{0x6F8B, 0x9DB5},{0x6F8C, 0xE4F9}, - {0x6F8D, 0xE4F8},{0x6F8E, 0xC5EC},{0x6F8F, 0x9DB6},{0x6F90, 0x9DB7},{0x6F91, 0x9DB8},{0x6F92, 0x9DB9},{0x6F93, 0x9DBA},{0x6F94, 0x9DBB}, - {0x6F95, 0x9DBC},{0x6F96, 0x9DBD},{0x6F97, 0x9DBE},{0x6F98, 0x9DBF},{0x6F99, 0x9DC0},{0x6F9A, 0x9DC1},{0x6F9B, 0x9DC2},{0x6F9C, 0xC0BD}, - {0x6F9D, 0x9DC3},{0x6F9E, 0x9DC4},{0x6F9F, 0x9DC5},{0x6FA0, 0x9DC6},{0x6FA1, 0xD4E8},{0x6FA2, 0x9DC7},{0x6FA3, 0x9DC8},{0x6FA4, 0x9DC9}, - {0x6FA5, 0x9DCA},{0x6FA6, 0x9DCB},{0x6FA7, 0xE5A2},{0x6FA8, 0x9DCC},{0x6FA9, 0x9DCD},{0x6FAA, 0x9DCE},{0x6FAB, 0x9DCF},{0x6FAC, 0x9DD0}, - {0x6FAD, 0x9DD1},{0x6FAE, 0x9DD2},{0x6FAF, 0x9DD3},{0x6FB0, 0x9DD4},{0x6FB1, 0x9DD5},{0x6FB2, 0x9DD6},{0x6FB3, 0xB0C4},{0x6FB4, 0x9DD7}, - {0x6FB5, 0x9DD8},{0x6FB6, 0xE5A4},{0x6FB7, 0x9DD9},{0x6FB8, 0x9DDA},{0x6FB9, 0xE5A3},{0x6FBA, 0x9DDB},{0x6FBB, 0x9DDC},{0x6FBC, 0x9DDD}, - {0x6FBD, 0x9DDE},{0x6FBE, 0x9DDF},{0x6FBF, 0x9DE0},{0x6FC0, 0xBCA4},{0x6FC1, 0x9DE1},{0x6FC2, 0xE5A5},{0x6FC3, 0x9DE2},{0x6FC4, 0x9DE3}, - {0x6FC5, 0x9DE4},{0x6FC6, 0x9DE5},{0x6FC7, 0x9DE6},{0x6FC8, 0x9DE7},{0x6FC9, 0xE5A1},{0x6FCA, 0x9DE8},{0x6FCB, 0x9DE9},{0x6FCC, 0x9DEA}, - {0x6FCD, 0x9DEB},{0x6FCE, 0x9DEC},{0x6FCF, 0x9DED},{0x6FD0, 0x9DEE},{0x6FD1, 0xE4FE},{0x6FD2, 0xB1F4},{0x6FD3, 0x9DEF},{0x6FD4, 0x9DF0}, - {0x6FD5, 0x9DF1},{0x6FD6, 0x9DF2},{0x6FD7, 0x9DF3},{0x6FD8, 0x9DF4},{0x6FD9, 0x9DF5},{0x6FDA, 0x9DF6},{0x6FDB, 0x9DF7},{0x6FDC, 0x9DF8}, - {0x6FDD, 0x9DF9},{0x6FDE, 0xE5A8},{0x6FDF, 0x9DFA},{0x6FE0, 0xE5A9},{0x6FE1, 0xE5A6},{0x6FE2, 0x9DFB},{0x6FE3, 0x9DFC},{0x6FE4, 0x9DFD}, - {0x6FE5, 0x9DFE},{0x6FE6, 0x9E40},{0x6FE7, 0x9E41},{0x6FE8, 0x9E42},{0x6FE9, 0x9E43},{0x6FEA, 0x9E44},{0x6FEB, 0x9E45},{0x6FEC, 0x9E46}, - {0x6FED, 0x9E47},{0x6FEE, 0xE5A7},{0x6FEF, 0xE5AA},{0x6FF0, 0x9E48},{0x6FF1, 0x9E49},{0x6FF2, 0x9E4A},{0x6FF3, 0x9E4B},{0x6FF4, 0x9E4C}, - {0x6FF5, 0x9E4D},{0x6FF6, 0x9E4E},{0x6FF7, 0x9E4F},{0x6FF8, 0x9E50},{0x6FF9, 0x9E51},{0x6FFA, 0x9E52},{0x6FFB, 0x9E53},{0x6FFC, 0x9E54}, - {0x6FFD, 0x9E55},{0x6FFE, 0x9E56},{0x6FFF, 0x9E57},{0x7000, 0x9E58},{0x7001, 0x9E59},{0x7002, 0x9E5A},{0x7003, 0x9E5B},{0x7004, 0x9E5C}, - {0x7005, 0x9E5D},{0x7006, 0x9E5E},{0x7007, 0x9E5F},{0x7008, 0x9E60},{0x7009, 0x9E61},{0x700A, 0x9E62},{0x700B, 0x9E63},{0x700C, 0x9E64}, - {0x700D, 0x9E65},{0x700E, 0x9E66},{0x700F, 0x9E67},{0x7010, 0x9E68},{0x7011, 0xC6D9},{0x7012, 0x9E69},{0x7013, 0x9E6A},{0x7014, 0x9E6B}, - {0x7015, 0x9E6C},{0x7016, 0x9E6D},{0x7017, 0x9E6E},{0x7018, 0x9E6F},{0x7019, 0x9E70},{0x701A, 0xE5AB},{0x701B, 0xE5AD},{0x701C, 0x9E71}, - {0x701D, 0x9E72},{0x701E, 0x9E73},{0x701F, 0x9E74},{0x7020, 0x9E75},{0x7021, 0x9E76},{0x7022, 0x9E77},{0x7023, 0xE5AC},{0x7024, 0x9E78}, - {0x7025, 0x9E79},{0x7026, 0x9E7A},{0x7027, 0x9E7B},{0x7028, 0x9E7C},{0x7029, 0x9E7D},{0x702A, 0x9E7E},{0x702B, 0x9E80},{0x702C, 0x9E81}, - {0x702D, 0x9E82},{0x702E, 0x9E83},{0x702F, 0x9E84},{0x7030, 0x9E85},{0x7031, 0x9E86},{0x7032, 0x9E87},{0x7033, 0x9E88},{0x7034, 0x9E89}, - {0x7035, 0xE5AF},{0x7036, 0x9E8A},{0x7037, 0x9E8B},{0x7038, 0x9E8C},{0x7039, 0xE5AE},{0x703A, 0x9E8D},{0x703B, 0x9E8E},{0x703C, 0x9E8F}, - {0x703D, 0x9E90},{0x703E, 0x9E91},{0x703F, 0x9E92},{0x7040, 0x9E93},{0x7041, 0x9E94},{0x7042, 0x9E95},{0x7043, 0x9E96},{0x7044, 0x9E97}, - {0x7045, 0x9E98},{0x7046, 0x9E99},{0x7047, 0x9E9A},{0x7048, 0x9E9B},{0x7049, 0x9E9C},{0x704A, 0x9E9D},{0x704B, 0x9E9E},{0x704C, 0xB9E0}, - {0x704D, 0x9E9F},{0x704E, 0x9EA0},{0x704F, 0xE5B0},{0x7050, 0x9EA1},{0x7051, 0x9EA2},{0x7052, 0x9EA3},{0x7053, 0x9EA4},{0x7054, 0x9EA5}, - {0x7055, 0x9EA6},{0x7056, 0x9EA7},{0x7057, 0x9EA8},{0x7058, 0x9EA9},{0x7059, 0x9EAA},{0x705A, 0x9EAB},{0x705B, 0x9EAC},{0x705C, 0x9EAD}, - {0x705D, 0x9EAE},{0x705E, 0xE5B1},{0x705F, 0x9EAF},{0x7060, 0x9EB0},{0x7061, 0x9EB1},{0x7062, 0x9EB2},{0x7063, 0x9EB3},{0x7064, 0x9EB4}, - {0x7065, 0x9EB5},{0x7066, 0x9EB6},{0x7067, 0x9EB7},{0x7068, 0x9EB8},{0x7069, 0x9EB9},{0x706A, 0x9EBA},{0x706B, 0xBBF0},{0x706C, 0xECE1}, - {0x706D, 0xC3F0},{0x706E, 0x9EBB},{0x706F, 0xB5C6},{0x7070, 0xBBD2},{0x7071, 0x9EBC},{0x7072, 0x9EBD},{0x7073, 0x9EBE},{0x7074, 0x9EBF}, - {0x7075, 0xC1E9},{0x7076, 0xD4EE},{0x7077, 0x9EC0},{0x7078, 0xBEC4},{0x7079, 0x9EC1},{0x707A, 0x9EC2},{0x707B, 0x9EC3},{0x707C, 0xD7C6}, - {0x707D, 0x9EC4},{0x707E, 0xD4D6},{0x707F, 0xB2D3},{0x7080, 0xECBE},{0x7081, 0x9EC5},{0x7082, 0x9EC6},{0x7083, 0x9EC7},{0x7084, 0x9EC8}, - {0x7085, 0xEAC1},{0x7086, 0x9EC9},{0x7087, 0x9ECA},{0x7088, 0x9ECB},{0x7089, 0xC2AF},{0x708A, 0xB4B6},{0x708B, 0x9ECC},{0x708C, 0x9ECD}, - {0x708D, 0x9ECE},{0x708E, 0xD1D7},{0x708F, 0x9ECF},{0x7090, 0x9ED0},{0x7091, 0x9ED1},{0x7092, 0xB3B4},{0x7093, 0x9ED2},{0x7094, 0xC8B2}, - {0x7095, 0xBFBB},{0x7096, 0xECC0},{0x7097, 0x9ED3},{0x7098, 0x9ED4},{0x7099, 0xD6CB},{0x709A, 0x9ED5},{0x709B, 0x9ED6},{0x709C, 0xECBF}, - {0x709D, 0xECC1},{0x709E, 0x9ED7},{0x709F, 0x9ED8},{0x70A0, 0x9ED9},{0x70A1, 0x9EDA},{0x70A2, 0x9EDB},{0x70A3, 0x9EDC},{0x70A4, 0x9EDD}, - {0x70A5, 0x9EDE},{0x70A6, 0x9EDF},{0x70A7, 0x9EE0},{0x70A8, 0x9EE1},{0x70A9, 0x9EE2},{0x70AA, 0x9EE3},{0x70AB, 0xECC5},{0x70AC, 0xBEE6}, - {0x70AD, 0xCCBF},{0x70AE, 0xC5DA},{0x70AF, 0xBEBC},{0x70B0, 0x9EE4},{0x70B1, 0xECC6},{0x70B2, 0x9EE5},{0x70B3, 0xB1FE},{0x70B4, 0x9EE6}, - {0x70B5, 0x9EE7},{0x70B6, 0x9EE8},{0x70B7, 0xECC4},{0x70B8, 0xD5A8},{0x70B9, 0xB5E3},{0x70BA, 0x9EE9},{0x70BB, 0xECC2},{0x70BC, 0xC1B6}, - {0x70BD, 0xB3E3},{0x70BE, 0x9EEA},{0x70BF, 0x9EEB},{0x70C0, 0xECC3},{0x70C1, 0xCBB8},{0x70C2, 0xC0C3},{0x70C3, 0xCCFE},{0x70C4, 0x9EEC}, - {0x70C5, 0x9EED},{0x70C6, 0x9EEE},{0x70C7, 0x9EEF},{0x70C8, 0xC1D2},{0x70C9, 0x9EF0},{0x70CA, 0xECC8},{0x70CB, 0x9EF1},{0x70CC, 0x9EF2}, - {0x70CD, 0x9EF3},{0x70CE, 0x9EF4},{0x70CF, 0x9EF5},{0x70D0, 0x9EF6},{0x70D1, 0x9EF7},{0x70D2, 0x9EF8},{0x70D3, 0x9EF9},{0x70D4, 0x9EFA}, - {0x70D5, 0x9EFB},{0x70D6, 0x9EFC},{0x70D7, 0x9EFD},{0x70D8, 0xBAE6},{0x70D9, 0xC0D3},{0x70DA, 0x9EFE},{0x70DB, 0xD6F2},{0x70DC, 0x9F40}, - {0x70DD, 0x9F41},{0x70DE, 0x9F42},{0x70DF, 0xD1CC},{0x70E0, 0x9F43},{0x70E1, 0x9F44},{0x70E2, 0x9F45},{0x70E3, 0x9F46},{0x70E4, 0xBFBE}, - {0x70E5, 0x9F47},{0x70E6, 0xB7B3},{0x70E7, 0xC9D5},{0x70E8, 0xECC7},{0x70E9, 0xBBE2},{0x70EA, 0x9F48},{0x70EB, 0xCCCC},{0x70EC, 0xBDFD}, - {0x70ED, 0xC8C8},{0x70EE, 0x9F49},{0x70EF, 0xCFA9},{0x70F0, 0x9F4A},{0x70F1, 0x9F4B},{0x70F2, 0x9F4C},{0x70F3, 0x9F4D},{0x70F4, 0x9F4E}, - {0x70F5, 0x9F4F},{0x70F6, 0x9F50},{0x70F7, 0xCDE9},{0x70F8, 0x9F51},{0x70F9, 0xC5EB},{0x70FA, 0x9F52},{0x70FB, 0x9F53},{0x70FC, 0x9F54}, - {0x70FD, 0xB7E9},{0x70FE, 0x9F55},{0x70FF, 0x9F56},{0x7100, 0x9F57},{0x7101, 0x9F58},{0x7102, 0x9F59},{0x7103, 0x9F5A},{0x7104, 0x9F5B}, - {0x7105, 0x9F5C},{0x7106, 0x9F5D},{0x7107, 0x9F5E},{0x7108, 0x9F5F},{0x7109, 0xD1C9},{0x710A, 0xBAB8},{0x710B, 0x9F60},{0x710C, 0x9F61}, - {0x710D, 0x9F62},{0x710E, 0x9F63},{0x710F, 0x9F64},{0x7110, 0xECC9},{0x7111, 0x9F65},{0x7112, 0x9F66},{0x7113, 0xECCA},{0x7114, 0x9F67}, - {0x7115, 0xBBC0},{0x7116, 0xECCB},{0x7117, 0x9F68},{0x7118, 0xECE2},{0x7119, 0xB1BA},{0x711A, 0xB7D9},{0x711B, 0x9F69},{0x711C, 0x9F6A}, - {0x711D, 0x9F6B},{0x711E, 0x9F6C},{0x711F, 0x9F6D},{0x7120, 0x9F6E},{0x7121, 0x9F6F},{0x7122, 0x9F70},{0x7123, 0x9F71},{0x7124, 0x9F72}, - {0x7125, 0x9F73},{0x7126, 0xBDB9},{0x7127, 0x9F74},{0x7128, 0x9F75},{0x7129, 0x9F76},{0x712A, 0x9F77},{0x712B, 0x9F78},{0x712C, 0x9F79}, - {0x712D, 0x9F7A},{0x712E, 0x9F7B},{0x712F, 0xECCC},{0x7130, 0xD1E6},{0x7131, 0xECCD},{0x7132, 0x9F7C},{0x7133, 0x9F7D},{0x7134, 0x9F7E}, - {0x7135, 0x9F80},{0x7136, 0xC8BB},{0x7137, 0x9F81},{0x7138, 0x9F82},{0x7139, 0x9F83},{0x713A, 0x9F84},{0x713B, 0x9F85},{0x713C, 0x9F86}, - {0x713D, 0x9F87},{0x713E, 0x9F88},{0x713F, 0x9F89},{0x7140, 0x9F8A},{0x7141, 0x9F8B},{0x7142, 0x9F8C},{0x7143, 0x9F8D},{0x7144, 0x9F8E}, - {0x7145, 0xECD1},{0x7146, 0x9F8F},{0x7147, 0x9F90},{0x7148, 0x9F91},{0x7149, 0x9F92},{0x714A, 0xECD3},{0x714B, 0x9F93},{0x714C, 0xBBCD}, - {0x714D, 0x9F94},{0x714E, 0xBCE5},{0x714F, 0x9F95},{0x7150, 0x9F96},{0x7151, 0x9F97},{0x7152, 0x9F98},{0x7153, 0x9F99},{0x7154, 0x9F9A}, - {0x7155, 0x9F9B},{0x7156, 0x9F9C},{0x7157, 0x9F9D},{0x7158, 0x9F9E},{0x7159, 0x9F9F},{0x715A, 0x9FA0},{0x715B, 0x9FA1},{0x715C, 0xECCF}, - {0x715D, 0x9FA2},{0x715E, 0xC9B7},{0x715F, 0x9FA3},{0x7160, 0x9FA4},{0x7161, 0x9FA5},{0x7162, 0x9FA6},{0x7163, 0x9FA7},{0x7164, 0xC3BA}, - {0x7165, 0x9FA8},{0x7166, 0xECE3},{0x7167, 0xD5D5},{0x7168, 0xECD0},{0x7169, 0x9FA9},{0x716A, 0x9FAA},{0x716B, 0x9FAB},{0x716C, 0x9FAC}, - {0x716D, 0x9FAD},{0x716E, 0xD6F3},{0x716F, 0x9FAE},{0x7170, 0x9FAF},{0x7171, 0x9FB0},{0x7172, 0xECD2},{0x7173, 0xECCE},{0x7174, 0x9FB1}, - {0x7175, 0x9FB2},{0x7176, 0x9FB3},{0x7177, 0x9FB4},{0x7178, 0xECD4},{0x7179, 0x9FB5},{0x717A, 0xECD5},{0x717B, 0x9FB6},{0x717C, 0x9FB7}, - {0x717D, 0xC9BF},{0x717E, 0x9FB8},{0x717F, 0x9FB9},{0x7180, 0x9FBA},{0x7181, 0x9FBB},{0x7182, 0x9FBC},{0x7183, 0x9FBD},{0x7184, 0xCFA8}, - {0x7185, 0x9FBE},{0x7186, 0x9FBF},{0x7187, 0x9FC0},{0x7188, 0x9FC1},{0x7189, 0x9FC2},{0x718A, 0xD0DC},{0x718B, 0x9FC3},{0x718C, 0x9FC4}, - {0x718D, 0x9FC5},{0x718E, 0x9FC6},{0x718F, 0xD1AC},{0x7190, 0x9FC7},{0x7191, 0x9FC8},{0x7192, 0x9FC9},{0x7193, 0x9FCA},{0x7194, 0xC8DB}, - {0x7195, 0x9FCB},{0x7196, 0x9FCC},{0x7197, 0x9FCD},{0x7198, 0xECD6},{0x7199, 0xCEF5},{0x719A, 0x9FCE},{0x719B, 0x9FCF},{0x719C, 0x9FD0}, - {0x719D, 0x9FD1},{0x719E, 0x9FD2},{0x719F, 0xCAEC},{0x71A0, 0xECDA},{0x71A1, 0x9FD3},{0x71A2, 0x9FD4},{0x71A3, 0x9FD5},{0x71A4, 0x9FD6}, - {0x71A5, 0x9FD7},{0x71A6, 0x9FD8},{0x71A7, 0x9FD9},{0x71A8, 0xECD9},{0x71A9, 0x9FDA},{0x71AA, 0x9FDB},{0x71AB, 0x9FDC},{0x71AC, 0xB0BE}, - {0x71AD, 0x9FDD},{0x71AE, 0x9FDE},{0x71AF, 0x9FDF},{0x71B0, 0x9FE0},{0x71B1, 0x9FE1},{0x71B2, 0x9FE2},{0x71B3, 0xECD7},{0x71B4, 0x9FE3}, - {0x71B5, 0xECD8},{0x71B6, 0x9FE4},{0x71B7, 0x9FE5},{0x71B8, 0x9FE6},{0x71B9, 0xECE4},{0x71BA, 0x9FE7},{0x71BB, 0x9FE8},{0x71BC, 0x9FE9}, - {0x71BD, 0x9FEA},{0x71BE, 0x9FEB},{0x71BF, 0x9FEC},{0x71C0, 0x9FED},{0x71C1, 0x9FEE},{0x71C2, 0x9FEF},{0x71C3, 0xC8BC},{0x71C4, 0x9FF0}, - {0x71C5, 0x9FF1},{0x71C6, 0x9FF2},{0x71C7, 0x9FF3},{0x71C8, 0x9FF4},{0x71C9, 0x9FF5},{0x71CA, 0x9FF6},{0x71CB, 0x9FF7},{0x71CC, 0x9FF8}, - {0x71CD, 0x9FF9},{0x71CE, 0xC1C7},{0x71CF, 0x9FFA},{0x71D0, 0x9FFB},{0x71D1, 0x9FFC},{0x71D2, 0x9FFD},{0x71D3, 0x9FFE},{0x71D4, 0xECDC}, - {0x71D5, 0xD1E0},{0x71D6, 0xA040},{0x71D7, 0xA041},{0x71D8, 0xA042},{0x71D9, 0xA043},{0x71DA, 0xA044},{0x71DB, 0xA045},{0x71DC, 0xA046}, - {0x71DD, 0xA047},{0x71DE, 0xA048},{0x71DF, 0xA049},{0x71E0, 0xECDB},{0x71E1, 0xA04A},{0x71E2, 0xA04B},{0x71E3, 0xA04C},{0x71E4, 0xA04D}, - {0x71E5, 0xD4EF},{0x71E6, 0xA04E},{0x71E7, 0xECDD},{0x71E8, 0xA04F},{0x71E9, 0xA050},{0x71EA, 0xA051},{0x71EB, 0xA052},{0x71EC, 0xA053}, - {0x71ED, 0xA054},{0x71EE, 0xDBC6},{0x71EF, 0xA055},{0x71F0, 0xA056},{0x71F1, 0xA057},{0x71F2, 0xA058},{0x71F3, 0xA059},{0x71F4, 0xA05A}, - {0x71F5, 0xA05B},{0x71F6, 0xA05C},{0x71F7, 0xA05D},{0x71F8, 0xA05E},{0x71F9, 0xECDE},{0x71FA, 0xA05F},{0x71FB, 0xA060},{0x71FC, 0xA061}, - {0x71FD, 0xA062},{0x71FE, 0xA063},{0x71FF, 0xA064},{0x7200, 0xA065},{0x7201, 0xA066},{0x7202, 0xA067},{0x7203, 0xA068},{0x7204, 0xA069}, - {0x7205, 0xA06A},{0x7206, 0xB1AC},{0x7207, 0xA06B},{0x7208, 0xA06C},{0x7209, 0xA06D},{0x720A, 0xA06E},{0x720B, 0xA06F},{0x720C, 0xA070}, - {0x720D, 0xA071},{0x720E, 0xA072},{0x720F, 0xA073},{0x7210, 0xA074},{0x7211, 0xA075},{0x7212, 0xA076},{0x7213, 0xA077},{0x7214, 0xA078}, - {0x7215, 0xA079},{0x7216, 0xA07A},{0x7217, 0xA07B},{0x7218, 0xA07C},{0x7219, 0xA07D},{0x721A, 0xA07E},{0x721B, 0xA080},{0x721C, 0xA081}, - {0x721D, 0xECDF},{0x721E, 0xA082},{0x721F, 0xA083},{0x7220, 0xA084},{0x7221, 0xA085},{0x7222, 0xA086},{0x7223, 0xA087},{0x7224, 0xA088}, - {0x7225, 0xA089},{0x7226, 0xA08A},{0x7227, 0xA08B},{0x7228, 0xECE0},{0x7229, 0xA08C},{0x722A, 0xD7A6},{0x722B, 0xA08D},{0x722C, 0xC5C0}, - {0x722D, 0xA08E},{0x722E, 0xA08F},{0x722F, 0xA090},{0x7230, 0xEBBC},{0x7231, 0xB0AE},{0x7232, 0xA091},{0x7233, 0xA092},{0x7234, 0xA093}, - {0x7235, 0xBEF4},{0x7236, 0xB8B8},{0x7237, 0xD2AF},{0x7238, 0xB0D6},{0x7239, 0xB5F9},{0x723A, 0xA094},{0x723B, 0xD8B3},{0x723C, 0xA095}, - {0x723D, 0xCBAC},{0x723E, 0xA096},{0x723F, 0xE3DD},{0x7240, 0xA097},{0x7241, 0xA098},{0x7242, 0xA099},{0x7243, 0xA09A},{0x7244, 0xA09B}, - {0x7245, 0xA09C},{0x7246, 0xA09D},{0x7247, 0xC6AC},{0x7248, 0xB0E6},{0x7249, 0xA09E},{0x724A, 0xA09F},{0x724B, 0xA0A0},{0x724C, 0xC5C6}, - {0x724D, 0xEBB9},{0x724E, 0xA0A1},{0x724F, 0xA0A2},{0x7250, 0xA0A3},{0x7251, 0xA0A4},{0x7252, 0xEBBA},{0x7253, 0xA0A5},{0x7254, 0xA0A6}, - {0x7255, 0xA0A7},{0x7256, 0xEBBB},{0x7257, 0xA0A8},{0x7258, 0xA0A9},{0x7259, 0xD1C0},{0x725A, 0xA0AA},{0x725B, 0xC5A3},{0x725C, 0xA0AB}, - {0x725D, 0xEAF2},{0x725E, 0xA0AC},{0x725F, 0xC4B2},{0x7260, 0xA0AD},{0x7261, 0xC4B5},{0x7262, 0xC0CE},{0x7263, 0xA0AE},{0x7264, 0xA0AF}, - {0x7265, 0xA0B0},{0x7266, 0xEAF3},{0x7267, 0xC4C1},{0x7268, 0xA0B1},{0x7269, 0xCEEF},{0x726A, 0xA0B2},{0x726B, 0xA0B3},{0x726C, 0xA0B4}, - {0x726D, 0xA0B5},{0x726E, 0xEAF0},{0x726F, 0xEAF4},{0x7270, 0xA0B6},{0x7271, 0xA0B7},{0x7272, 0xC9FC},{0x7273, 0xA0B8},{0x7274, 0xA0B9}, - {0x7275, 0xC7A3},{0x7276, 0xA0BA},{0x7277, 0xA0BB},{0x7278, 0xA0BC},{0x7279, 0xCCD8},{0x727A, 0xCEFE},{0x727B, 0xA0BD},{0x727C, 0xA0BE}, - {0x727D, 0xA0BF},{0x727E, 0xEAF5},{0x727F, 0xEAF6},{0x7280, 0xCFAC},{0x7281, 0xC0E7},{0x7282, 0xA0C0},{0x7283, 0xA0C1},{0x7284, 0xEAF7}, - {0x7285, 0xA0C2},{0x7286, 0xA0C3},{0x7287, 0xA0C4},{0x7288, 0xA0C5},{0x7289, 0xA0C6},{0x728A, 0xB6BF},{0x728B, 0xEAF8},{0x728C, 0xA0C7}, - {0x728D, 0xEAF9},{0x728E, 0xA0C8},{0x728F, 0xEAFA},{0x7290, 0xA0C9},{0x7291, 0xA0CA},{0x7292, 0xEAFB},{0x7293, 0xA0CB},{0x7294, 0xA0CC}, - {0x7295, 0xA0CD},{0x7296, 0xA0CE},{0x7297, 0xA0CF},{0x7298, 0xA0D0},{0x7299, 0xA0D1},{0x729A, 0xA0D2},{0x729B, 0xA0D3},{0x729C, 0xA0D4}, - {0x729D, 0xA0D5},{0x729E, 0xA0D6},{0x729F, 0xEAF1},{0x72A0, 0xA0D7},{0x72A1, 0xA0D8},{0x72A2, 0xA0D9},{0x72A3, 0xA0DA},{0x72A4, 0xA0DB}, - {0x72A5, 0xA0DC},{0x72A6, 0xA0DD},{0x72A7, 0xA0DE},{0x72A8, 0xA0DF},{0x72A9, 0xA0E0},{0x72AA, 0xA0E1},{0x72AB, 0xA0E2},{0x72AC, 0xC8AE}, - {0x72AD, 0xE1EB},{0x72AE, 0xA0E3},{0x72AF, 0xB7B8},{0x72B0, 0xE1EC},{0x72B1, 0xA0E4},{0x72B2, 0xA0E5},{0x72B3, 0xA0E6},{0x72B4, 0xE1ED}, - {0x72B5, 0xA0E7},{0x72B6, 0xD7B4},{0x72B7, 0xE1EE},{0x72B8, 0xE1EF},{0x72B9, 0xD3CC},{0x72BA, 0xA0E8},{0x72BB, 0xA0E9},{0x72BC, 0xA0EA}, - {0x72BD, 0xA0EB},{0x72BE, 0xA0EC},{0x72BF, 0xA0ED},{0x72C0, 0xA0EE},{0x72C1, 0xE1F1},{0x72C2, 0xBFF1},{0x72C3, 0xE1F0},{0x72C4, 0xB5D2}, - {0x72C5, 0xA0EF},{0x72C6, 0xA0F0},{0x72C7, 0xA0F1},{0x72C8, 0xB1B7},{0x72C9, 0xA0F2},{0x72CA, 0xA0F3},{0x72CB, 0xA0F4},{0x72CC, 0xA0F5}, - {0x72CD, 0xE1F3},{0x72CE, 0xE1F2},{0x72CF, 0xA0F6},{0x72D0, 0xBAFC},{0x72D1, 0xA0F7},{0x72D2, 0xE1F4},{0x72D3, 0xA0F8},{0x72D4, 0xA0F9}, - {0x72D5, 0xA0FA},{0x72D6, 0xA0FB},{0x72D7, 0xB9B7},{0x72D8, 0xA0FC},{0x72D9, 0xBED1},{0x72DA, 0xA0FD},{0x72DB, 0xA0FE},{0x72DC, 0xAA40}, - {0x72DD, 0xAA41},{0x72DE, 0xC4FC},{0x72DF, 0xAA42},{0x72E0, 0xBADD},{0x72E1, 0xBDC6},{0x72E2, 0xAA43},{0x72E3, 0xAA44},{0x72E4, 0xAA45}, - {0x72E5, 0xAA46},{0x72E6, 0xAA47},{0x72E7, 0xAA48},{0x72E8, 0xE1F5},{0x72E9, 0xE1F7},{0x72EA, 0xAA49},{0x72EB, 0xAA4A},{0x72EC, 0xB6C0}, - {0x72ED, 0xCFC1},{0x72EE, 0xCAA8},{0x72EF, 0xE1F6},{0x72F0, 0xD5F8},{0x72F1, 0xD3FC},{0x72F2, 0xE1F8},{0x72F3, 0xE1FC},{0x72F4, 0xE1F9}, - {0x72F5, 0xAA4B},{0x72F6, 0xAA4C},{0x72F7, 0xE1FA},{0x72F8, 0xC0EA},{0x72F9, 0xAA4D},{0x72FA, 0xE1FE},{0x72FB, 0xE2A1},{0x72FC, 0xC0C7}, - {0x72FD, 0xAA4E},{0x72FE, 0xAA4F},{0x72FF, 0xAA50},{0x7300, 0xAA51},{0x7301, 0xE1FB},{0x7302, 0xAA52},{0x7303, 0xE1FD},{0x7304, 0xAA53}, - {0x7305, 0xAA54},{0x7306, 0xAA55},{0x7307, 0xAA56},{0x7308, 0xAA57},{0x7309, 0xAA58},{0x730A, 0xE2A5},{0x730B, 0xAA59},{0x730C, 0xAA5A}, - {0x730D, 0xAA5B},{0x730E, 0xC1D4},{0x730F, 0xAA5C},{0x7310, 0xAA5D},{0x7311, 0xAA5E},{0x7312, 0xAA5F},{0x7313, 0xE2A3},{0x7314, 0xAA60}, - {0x7315, 0xE2A8},{0x7316, 0xB2FE},{0x7317, 0xE2A2},{0x7318, 0xAA61},{0x7319, 0xAA62},{0x731A, 0xAA63},{0x731B, 0xC3CD},{0x731C, 0xB2C2}, - {0x731D, 0xE2A7},{0x731E, 0xE2A6},{0x731F, 0xAA64},{0x7320, 0xAA65},{0x7321, 0xE2A4},{0x7322, 0xE2A9},{0x7323, 0xAA66},{0x7324, 0xAA67}, - {0x7325, 0xE2AB},{0x7326, 0xAA68},{0x7327, 0xAA69},{0x7328, 0xAA6A},{0x7329, 0xD0C9},{0x732A, 0xD6ED},{0x732B, 0xC3A8},{0x732C, 0xE2AC}, - {0x732D, 0xAA6B},{0x732E, 0xCFD7},{0x732F, 0xAA6C},{0x7330, 0xAA6D},{0x7331, 0xE2AE},{0x7332, 0xAA6E},{0x7333, 0xAA6F},{0x7334, 0xBAEF}, - {0x7335, 0xAA70},{0x7336, 0xAA71},{0x7337, 0xE9E0},{0x7338, 0xE2AD},{0x7339, 0xE2AA},{0x733A, 0xAA72},{0x733B, 0xAA73},{0x733C, 0xAA74}, - {0x733D, 0xAA75},{0x733E, 0xBBAB},{0x733F, 0xD4B3},{0x7340, 0xAA76},{0x7341, 0xAA77},{0x7342, 0xAA78},{0x7343, 0xAA79},{0x7344, 0xAA7A}, - {0x7345, 0xAA7B},{0x7346, 0xAA7C},{0x7347, 0xAA7D},{0x7348, 0xAA7E},{0x7349, 0xAA80},{0x734A, 0xAA81},{0x734B, 0xAA82},{0x734C, 0xAA83}, - {0x734D, 0xE2B0},{0x734E, 0xAA84},{0x734F, 0xAA85},{0x7350, 0xE2AF},{0x7351, 0xAA86},{0x7352, 0xE9E1},{0x7353, 0xAA87},{0x7354, 0xAA88}, - {0x7355, 0xAA89},{0x7356, 0xAA8A},{0x7357, 0xE2B1},{0x7358, 0xAA8B},{0x7359, 0xAA8C},{0x735A, 0xAA8D},{0x735B, 0xAA8E},{0x735C, 0xAA8F}, - {0x735D, 0xAA90},{0x735E, 0xAA91},{0x735F, 0xAA92},{0x7360, 0xE2B2},{0x7361, 0xAA93},{0x7362, 0xAA94},{0x7363, 0xAA95},{0x7364, 0xAA96}, - {0x7365, 0xAA97},{0x7366, 0xAA98},{0x7367, 0xAA99},{0x7368, 0xAA9A},{0x7369, 0xAA9B},{0x736A, 0xAA9C},{0x736B, 0xAA9D},{0x736C, 0xE2B3}, - {0x736D, 0xCCA1},{0x736E, 0xAA9E},{0x736F, 0xE2B4},{0x7370, 0xAA9F},{0x7371, 0xAAA0},{0x7372, 0xAB40},{0x7373, 0xAB41},{0x7374, 0xAB42}, - {0x7375, 0xAB43},{0x7376, 0xAB44},{0x7377, 0xAB45},{0x7378, 0xAB46},{0x7379, 0xAB47},{0x737A, 0xAB48},{0x737B, 0xAB49},{0x737C, 0xAB4A}, - {0x737D, 0xAB4B},{0x737E, 0xE2B5},{0x737F, 0xAB4C},{0x7380, 0xAB4D},{0x7381, 0xAB4E},{0x7382, 0xAB4F},{0x7383, 0xAB50},{0x7384, 0xD0FE}, - {0x7385, 0xAB51},{0x7386, 0xAB52},{0x7387, 0xC2CA},{0x7388, 0xAB53},{0x7389, 0xD3F1},{0x738A, 0xAB54},{0x738B, 0xCDF5},{0x738C, 0xAB55}, - {0x738D, 0xAB56},{0x738E, 0xE7E0},{0x738F, 0xAB57},{0x7390, 0xAB58},{0x7391, 0xE7E1},{0x7392, 0xAB59},{0x7393, 0xAB5A},{0x7394, 0xAB5B}, - {0x7395, 0xAB5C},{0x7396, 0xBEC1},{0x7397, 0xAB5D},{0x7398, 0xAB5E},{0x7399, 0xAB5F},{0x739A, 0xAB60},{0x739B, 0xC2EA},{0x739C, 0xAB61}, - {0x739D, 0xAB62},{0x739E, 0xAB63},{0x739F, 0xE7E4},{0x73A0, 0xAB64},{0x73A1, 0xAB65},{0x73A2, 0xE7E3},{0x73A3, 0xAB66},{0x73A4, 0xAB67}, - {0x73A5, 0xAB68},{0x73A6, 0xAB69},{0x73A7, 0xAB6A},{0x73A8, 0xAB6B},{0x73A9, 0xCDE6},{0x73AA, 0xAB6C},{0x73AB, 0xC3B5},{0x73AC, 0xAB6D}, - {0x73AD, 0xAB6E},{0x73AE, 0xE7E2},{0x73AF, 0xBBB7},{0x73B0, 0xCFD6},{0x73B1, 0xAB6F},{0x73B2, 0xC1E1},{0x73B3, 0xE7E9},{0x73B4, 0xAB70}, - {0x73B5, 0xAB71},{0x73B6, 0xAB72},{0x73B7, 0xE7E8},{0x73B8, 0xAB73},{0x73B9, 0xAB74},{0x73BA, 0xE7F4},{0x73BB, 0xB2A3},{0x73BC, 0xAB75}, - {0x73BD, 0xAB76},{0x73BE, 0xAB77},{0x73BF, 0xAB78},{0x73C0, 0xE7EA},{0x73C1, 0xAB79},{0x73C2, 0xE7E6},{0x73C3, 0xAB7A},{0x73C4, 0xAB7B}, - {0x73C5, 0xAB7C},{0x73C6, 0xAB7D},{0x73C7, 0xAB7E},{0x73C8, 0xE7EC},{0x73C9, 0xE7EB},{0x73CA, 0xC9BA},{0x73CB, 0xAB80},{0x73CC, 0xAB81}, - {0x73CD, 0xD5E4},{0x73CE, 0xAB82},{0x73CF, 0xE7E5},{0x73D0, 0xB7A9},{0x73D1, 0xE7E7},{0x73D2, 0xAB83},{0x73D3, 0xAB84},{0x73D4, 0xAB85}, - {0x73D5, 0xAB86},{0x73D6, 0xAB87},{0x73D7, 0xAB88},{0x73D8, 0xAB89},{0x73D9, 0xE7EE},{0x73DA, 0xAB8A},{0x73DB, 0xAB8B},{0x73DC, 0xAB8C}, - {0x73DD, 0xAB8D},{0x73DE, 0xE7F3},{0x73DF, 0xAB8E},{0x73E0, 0xD6E9},{0x73E1, 0xAB8F},{0x73E2, 0xAB90},{0x73E3, 0xAB91},{0x73E4, 0xAB92}, - {0x73E5, 0xE7ED},{0x73E6, 0xAB93},{0x73E7, 0xE7F2},{0x73E8, 0xAB94},{0x73E9, 0xE7F1},{0x73EA, 0xAB95},{0x73EB, 0xAB96},{0x73EC, 0xAB97}, - {0x73ED, 0xB0E0},{0x73EE, 0xAB98},{0x73EF, 0xAB99},{0x73F0, 0xAB9A},{0x73F1, 0xAB9B},{0x73F2, 0xE7F5},{0x73F3, 0xAB9C},{0x73F4, 0xAB9D}, - {0x73F5, 0xAB9E},{0x73F6, 0xAB9F},{0x73F7, 0xABA0},{0x73F8, 0xAC40},{0x73F9, 0xAC41},{0x73FA, 0xAC42},{0x73FB, 0xAC43},{0x73FC, 0xAC44}, - {0x73FD, 0xAC45},{0x73FE, 0xAC46},{0x73FF, 0xAC47},{0x7400, 0xAC48},{0x7401, 0xAC49},{0x7402, 0xAC4A},{0x7403, 0xC7F2},{0x7404, 0xAC4B}, - {0x7405, 0xC0C5},{0x7406, 0xC0ED},{0x7407, 0xAC4C},{0x7408, 0xAC4D},{0x7409, 0xC1F0},{0x740A, 0xE7F0},{0x740B, 0xAC4E},{0x740C, 0xAC4F}, - {0x740D, 0xAC50},{0x740E, 0xAC51},{0x740F, 0xE7F6},{0x7410, 0xCBF6},{0x7411, 0xAC52},{0x7412, 0xAC53},{0x7413, 0xAC54},{0x7414, 0xAC55}, - {0x7415, 0xAC56},{0x7416, 0xAC57},{0x7417, 0xAC58},{0x7418, 0xAC59},{0x7419, 0xAC5A},{0x741A, 0xE8A2},{0x741B, 0xE8A1},{0x741C, 0xAC5B}, - {0x741D, 0xAC5C},{0x741E, 0xAC5D},{0x741F, 0xAC5E},{0x7420, 0xAC5F},{0x7421, 0xAC60},{0x7422, 0xD7C1},{0x7423, 0xAC61},{0x7424, 0xAC62}, - {0x7425, 0xE7FA},{0x7426, 0xE7F9},{0x7427, 0xAC63},{0x7428, 0xE7FB},{0x7429, 0xAC64},{0x742A, 0xE7F7},{0x742B, 0xAC65},{0x742C, 0xE7FE}, - {0x742D, 0xAC66},{0x742E, 0xE7FD},{0x742F, 0xAC67},{0x7430, 0xE7FC},{0x7431, 0xAC68},{0x7432, 0xAC69},{0x7433, 0xC1D5},{0x7434, 0xC7D9}, - {0x7435, 0xC5FD},{0x7436, 0xC5C3},{0x7437, 0xAC6A},{0x7438, 0xAC6B},{0x7439, 0xAC6C},{0x743A, 0xAC6D},{0x743B, 0xAC6E},{0x743C, 0xC7ED}, - {0x743D, 0xAC6F},{0x743E, 0xAC70},{0x743F, 0xAC71},{0x7440, 0xAC72},{0x7441, 0xE8A3},{0x7442, 0xAC73},{0x7443, 0xAC74},{0x7444, 0xAC75}, - {0x7445, 0xAC76},{0x7446, 0xAC77},{0x7447, 0xAC78},{0x7448, 0xAC79},{0x7449, 0xAC7A},{0x744A, 0xAC7B},{0x744B, 0xAC7C},{0x744C, 0xAC7D}, - {0x744D, 0xAC7E},{0x744E, 0xAC80},{0x744F, 0xAC81},{0x7450, 0xAC82},{0x7451, 0xAC83},{0x7452, 0xAC84},{0x7453, 0xAC85},{0x7454, 0xAC86}, - {0x7455, 0xE8A6},{0x7456, 0xAC87},{0x7457, 0xE8A5},{0x7458, 0xAC88},{0x7459, 0xE8A7},{0x745A, 0xBAF7},{0x745B, 0xE7F8},{0x745C, 0xE8A4}, - {0x745D, 0xAC89},{0x745E, 0xC8F0},{0x745F, 0xC9AA},{0x7460, 0xAC8A},{0x7461, 0xAC8B},{0x7462, 0xAC8C},{0x7463, 0xAC8D},{0x7464, 0xAC8E}, - {0x7465, 0xAC8F},{0x7466, 0xAC90},{0x7467, 0xAC91},{0x7468, 0xAC92},{0x7469, 0xAC93},{0x746A, 0xAC94},{0x746B, 0xAC95},{0x746C, 0xAC96}, - {0x746D, 0xE8A9},{0x746E, 0xAC97},{0x746F, 0xAC98},{0x7470, 0xB9E5},{0x7471, 0xAC99},{0x7472, 0xAC9A},{0x7473, 0xAC9B},{0x7474, 0xAC9C}, - {0x7475, 0xAC9D},{0x7476, 0xD1FE},{0x7477, 0xE8A8},{0x7478, 0xAC9E},{0x7479, 0xAC9F},{0x747A, 0xACA0},{0x747B, 0xAD40},{0x747C, 0xAD41}, - {0x747D, 0xAD42},{0x747E, 0xE8AA},{0x747F, 0xAD43},{0x7480, 0xE8AD},{0x7481, 0xE8AE},{0x7482, 0xAD44},{0x7483, 0xC1A7},{0x7484, 0xAD45}, - {0x7485, 0xAD46},{0x7486, 0xAD47},{0x7487, 0xE8AF},{0x7488, 0xAD48},{0x7489, 0xAD49},{0x748A, 0xAD4A},{0x748B, 0xE8B0},{0x748C, 0xAD4B}, - {0x748D, 0xAD4C},{0x748E, 0xE8AC},{0x748F, 0xAD4D},{0x7490, 0xE8B4},{0x7491, 0xAD4E},{0x7492, 0xAD4F},{0x7493, 0xAD50},{0x7494, 0xAD51}, - {0x7495, 0xAD52},{0x7496, 0xAD53},{0x7497, 0xAD54},{0x7498, 0xAD55},{0x7499, 0xAD56},{0x749A, 0xAD57},{0x749B, 0xAD58},{0x749C, 0xE8AB}, - {0x749D, 0xAD59},{0x749E, 0xE8B1},{0x749F, 0xAD5A},{0x74A0, 0xAD5B},{0x74A1, 0xAD5C},{0x74A2, 0xAD5D},{0x74A3, 0xAD5E},{0x74A4, 0xAD5F}, - {0x74A5, 0xAD60},{0x74A6, 0xAD61},{0x74A7, 0xE8B5},{0x74A8, 0xE8B2},{0x74A9, 0xE8B3},{0x74AA, 0xAD62},{0x74AB, 0xAD63},{0x74AC, 0xAD64}, - {0x74AD, 0xAD65},{0x74AE, 0xAD66},{0x74AF, 0xAD67},{0x74B0, 0xAD68},{0x74B1, 0xAD69},{0x74B2, 0xAD6A},{0x74B3, 0xAD6B},{0x74B4, 0xAD6C}, - {0x74B5, 0xAD6D},{0x74B6, 0xAD6E},{0x74B7, 0xAD6F},{0x74B8, 0xAD70},{0x74B9, 0xAD71},{0x74BA, 0xE8B7},{0x74BB, 0xAD72},{0x74BC, 0xAD73}, - {0x74BD, 0xAD74},{0x74BE, 0xAD75},{0x74BF, 0xAD76},{0x74C0, 0xAD77},{0x74C1, 0xAD78},{0x74C2, 0xAD79},{0x74C3, 0xAD7A},{0x74C4, 0xAD7B}, - {0x74C5, 0xAD7C},{0x74C6, 0xAD7D},{0x74C7, 0xAD7E},{0x74C8, 0xAD80},{0x74C9, 0xAD81},{0x74CA, 0xAD82},{0x74CB, 0xAD83},{0x74CC, 0xAD84}, - {0x74CD, 0xAD85},{0x74CE, 0xAD86},{0x74CF, 0xAD87},{0x74D0, 0xAD88},{0x74D1, 0xAD89},{0x74D2, 0xE8B6},{0x74D3, 0xAD8A},{0x74D4, 0xAD8B}, - {0x74D5, 0xAD8C},{0x74D6, 0xAD8D},{0x74D7, 0xAD8E},{0x74D8, 0xAD8F},{0x74D9, 0xAD90},{0x74DA, 0xAD91},{0x74DB, 0xAD92},{0x74DC, 0xB9CF}, - {0x74DD, 0xAD93},{0x74DE, 0xF0AC},{0x74DF, 0xAD94},{0x74E0, 0xF0AD},{0x74E1, 0xAD95},{0x74E2, 0xC6B0},{0x74E3, 0xB0EA},{0x74E4, 0xC8BF}, - {0x74E5, 0xAD96},{0x74E6, 0xCDDF},{0x74E7, 0xAD97},{0x74E8, 0xAD98},{0x74E9, 0xAD99},{0x74EA, 0xAD9A},{0x74EB, 0xAD9B},{0x74EC, 0xAD9C}, - {0x74ED, 0xAD9D},{0x74EE, 0xCECD},{0x74EF, 0xEAB1},{0x74F0, 0xAD9E},{0x74F1, 0xAD9F},{0x74F2, 0xADA0},{0x74F3, 0xAE40},{0x74F4, 0xEAB2}, - {0x74F5, 0xAE41},{0x74F6, 0xC6BF},{0x74F7, 0xB4C9},{0x74F8, 0xAE42},{0x74F9, 0xAE43},{0x74FA, 0xAE44},{0x74FB, 0xAE45},{0x74FC, 0xAE46}, - {0x74FD, 0xAE47},{0x74FE, 0xAE48},{0x74FF, 0xEAB3},{0x7500, 0xAE49},{0x7501, 0xAE4A},{0x7502, 0xAE4B},{0x7503, 0xAE4C},{0x7504, 0xD5E7}, - {0x7505, 0xAE4D},{0x7506, 0xAE4E},{0x7507, 0xAE4F},{0x7508, 0xAE50},{0x7509, 0xAE51},{0x750A, 0xAE52},{0x750B, 0xAE53},{0x750C, 0xAE54}, - {0x750D, 0xDDF9},{0x750E, 0xAE55},{0x750F, 0xEAB4},{0x7510, 0xAE56},{0x7511, 0xEAB5},{0x7512, 0xAE57},{0x7513, 0xEAB6},{0x7514, 0xAE58}, - {0x7515, 0xAE59},{0x7516, 0xAE5A},{0x7517, 0xAE5B},{0x7518, 0xB8CA},{0x7519, 0xDFB0},{0x751A, 0xC9F5},{0x751B, 0xAE5C},{0x751C, 0xCCF0}, - {0x751D, 0xAE5D},{0x751E, 0xAE5E},{0x751F, 0xC9FA},{0x7520, 0xAE5F},{0x7521, 0xAE60},{0x7522, 0xAE61},{0x7523, 0xAE62},{0x7524, 0xAE63}, - {0x7525, 0xC9FB},{0x7526, 0xAE64},{0x7527, 0xAE65},{0x7528, 0xD3C3},{0x7529, 0xCBA6},{0x752A, 0xAE66},{0x752B, 0xB8A6},{0x752C, 0xF0AE}, - {0x752D, 0xB1C2},{0x752E, 0xAE67},{0x752F, 0xE5B8},{0x7530, 0xCCEF},{0x7531, 0xD3C9},{0x7532, 0xBCD7},{0x7533, 0xC9EA},{0x7534, 0xAE68}, - {0x7535, 0xB5E7},{0x7536, 0xAE69},{0x7537, 0xC4D0},{0x7538, 0xB5E9},{0x7539, 0xAE6A},{0x753A, 0xEEAE},{0x753B, 0xBBAD},{0x753C, 0xAE6B}, - {0x753D, 0xAE6C},{0x753E, 0xE7DE},{0x753F, 0xAE6D},{0x7540, 0xEEAF},{0x7541, 0xAE6E},{0x7542, 0xAE6F},{0x7543, 0xAE70},{0x7544, 0xAE71}, - {0x7545, 0xB3A9},{0x7546, 0xAE72},{0x7547, 0xAE73},{0x7548, 0xEEB2},{0x7549, 0xAE74},{0x754A, 0xAE75},{0x754B, 0xEEB1},{0x754C, 0xBDE7}, - {0x754D, 0xAE76},{0x754E, 0xEEB0},{0x754F, 0xCEB7},{0x7550, 0xAE77},{0x7551, 0xAE78},{0x7552, 0xAE79},{0x7553, 0xAE7A},{0x7554, 0xC5CF}, - {0x7555, 0xAE7B},{0x7556, 0xAE7C},{0x7557, 0xAE7D},{0x7558, 0xAE7E},{0x7559, 0xC1F4},{0x755A, 0xDBCE},{0x755B, 0xEEB3},{0x755C, 0xD0F3}, - {0x755D, 0xAE80},{0x755E, 0xAE81},{0x755F, 0xAE82},{0x7560, 0xAE83},{0x7561, 0xAE84},{0x7562, 0xAE85},{0x7563, 0xAE86},{0x7564, 0xAE87}, - {0x7565, 0xC2D4},{0x7566, 0xC6E8},{0x7567, 0xAE88},{0x7568, 0xAE89},{0x7569, 0xAE8A},{0x756A, 0xB7AC},{0x756B, 0xAE8B},{0x756C, 0xAE8C}, - {0x756D, 0xAE8D},{0x756E, 0xAE8E},{0x756F, 0xAE8F},{0x7570, 0xAE90},{0x7571, 0xAE91},{0x7572, 0xEEB4},{0x7573, 0xAE92},{0x7574, 0xB3EB}, - {0x7575, 0xAE93},{0x7576, 0xAE94},{0x7577, 0xAE95},{0x7578, 0xBBFB},{0x7579, 0xEEB5},{0x757A, 0xAE96},{0x757B, 0xAE97},{0x757C, 0xAE98}, - {0x757D, 0xAE99},{0x757E, 0xAE9A},{0x757F, 0xE7DC},{0x7580, 0xAE9B},{0x7581, 0xAE9C},{0x7582, 0xAE9D},{0x7583, 0xEEB6},{0x7584, 0xAE9E}, - {0x7585, 0xAE9F},{0x7586, 0xBDAE},{0x7587, 0xAEA0},{0x7588, 0xAF40},{0x7589, 0xAF41},{0x758A, 0xAF42},{0x758B, 0xF1E2},{0x758C, 0xAF43}, - {0x758D, 0xAF44},{0x758E, 0xAF45},{0x758F, 0xCAE8},{0x7590, 0xAF46},{0x7591, 0xD2C9},{0x7592, 0xF0DA},{0x7593, 0xAF47},{0x7594, 0xF0DB}, - {0x7595, 0xAF48},{0x7596, 0xF0DC},{0x7597, 0xC1C6},{0x7598, 0xAF49},{0x7599, 0xB8ED},{0x759A, 0xBECE},{0x759B, 0xAF4A},{0x759C, 0xAF4B}, - {0x759D, 0xF0DE},{0x759E, 0xAF4C},{0x759F, 0xC5B1},{0x75A0, 0xF0DD},{0x75A1, 0xD1F1},{0x75A2, 0xAF4D},{0x75A3, 0xF0E0},{0x75A4, 0xB0CC}, - {0x75A5, 0xBDEA},{0x75A6, 0xAF4E},{0x75A7, 0xAF4F},{0x75A8, 0xAF50},{0x75A9, 0xAF51},{0x75AA, 0xAF52},{0x75AB, 0xD2DF},{0x75AC, 0xF0DF}, - {0x75AD, 0xAF53},{0x75AE, 0xB4AF},{0x75AF, 0xB7E8},{0x75B0, 0xF0E6},{0x75B1, 0xF0E5},{0x75B2, 0xC6A3},{0x75B3, 0xF0E1},{0x75B4, 0xF0E2}, - {0x75B5, 0xB4C3},{0x75B6, 0xAF54},{0x75B7, 0xAF55},{0x75B8, 0xF0E3},{0x75B9, 0xD5EE},{0x75BA, 0xAF56},{0x75BB, 0xAF57},{0x75BC, 0xCCDB}, - {0x75BD, 0xBED2},{0x75BE, 0xBCB2},{0x75BF, 0xAF58},{0x75C0, 0xAF59},{0x75C1, 0xAF5A},{0x75C2, 0xF0E8},{0x75C3, 0xF0E7},{0x75C4, 0xF0E4}, - {0x75C5, 0xB2A1},{0x75C6, 0xAF5B},{0x75C7, 0xD6A2},{0x75C8, 0xD3B8},{0x75C9, 0xBEB7},{0x75CA, 0xC8AC},{0x75CB, 0xAF5C},{0x75CC, 0xAF5D}, - {0x75CD, 0xF0EA},{0x75CE, 0xAF5E},{0x75CF, 0xAF5F},{0x75D0, 0xAF60},{0x75D1, 0xAF61},{0x75D2, 0xD1F7},{0x75D3, 0xAF62},{0x75D4, 0xD6CC}, - {0x75D5, 0xBADB},{0x75D6, 0xF0E9},{0x75D7, 0xAF63},{0x75D8, 0xB6BB},{0x75D9, 0xAF64},{0x75DA, 0xAF65},{0x75DB, 0xCDB4},{0x75DC, 0xAF66}, - {0x75DD, 0xAF67},{0x75DE, 0xC6A6},{0x75DF, 0xAF68},{0x75E0, 0xAF69},{0x75E1, 0xAF6A},{0x75E2, 0xC1A1},{0x75E3, 0xF0EB},{0x75E4, 0xF0EE}, - {0x75E5, 0xAF6B},{0x75E6, 0xF0ED},{0x75E7, 0xF0F0},{0x75E8, 0xF0EC},{0x75E9, 0xAF6C},{0x75EA, 0xBBBE},{0x75EB, 0xF0EF},{0x75EC, 0xAF6D}, - {0x75ED, 0xAF6E},{0x75EE, 0xAF6F},{0x75EF, 0xAF70},{0x75F0, 0xCCB5},{0x75F1, 0xF0F2},{0x75F2, 0xAF71},{0x75F3, 0xAF72},{0x75F4, 0xB3D5}, - {0x75F5, 0xAF73},{0x75F6, 0xAF74},{0x75F7, 0xAF75},{0x75F8, 0xAF76},{0x75F9, 0xB1D4},{0x75FA, 0xAF77},{0x75FB, 0xAF78},{0x75FC, 0xF0F3}, - {0x75FD, 0xAF79},{0x75FE, 0xAF7A},{0x75FF, 0xF0F4},{0x7600, 0xF0F6},{0x7601, 0xB4E1},{0x7602, 0xAF7B},{0x7603, 0xF0F1},{0x7604, 0xAF7C}, - {0x7605, 0xF0F7},{0x7606, 0xAF7D},{0x7607, 0xAF7E},{0x7608, 0xAF80},{0x7609, 0xAF81},{0x760A, 0xF0FA},{0x760B, 0xAF82},{0x760C, 0xF0F8}, - {0x760D, 0xAF83},{0x760E, 0xAF84},{0x760F, 0xAF85},{0x7610, 0xF0F5},{0x7611, 0xAF86},{0x7612, 0xAF87},{0x7613, 0xAF88},{0x7614, 0xAF89}, - {0x7615, 0xF0FD},{0x7616, 0xAF8A},{0x7617, 0xF0F9},{0x7618, 0xF0FC},{0x7619, 0xF0FE},{0x761A, 0xAF8B},{0x761B, 0xF1A1},{0x761C, 0xAF8C}, - {0x761D, 0xAF8D},{0x761E, 0xAF8E},{0x761F, 0xCEC1},{0x7620, 0xF1A4},{0x7621, 0xAF8F},{0x7622, 0xF1A3},{0x7623, 0xAF90},{0x7624, 0xC1F6}, - {0x7625, 0xF0FB},{0x7626, 0xCADD},{0x7627, 0xAF91},{0x7628, 0xAF92},{0x7629, 0xB4F1},{0x762A, 0xB1F1},{0x762B, 0xCCB1},{0x762C, 0xAF93}, - {0x762D, 0xF1A6},{0x762E, 0xAF94},{0x762F, 0xAF95},{0x7630, 0xF1A7},{0x7631, 0xAF96},{0x7632, 0xAF97},{0x7633, 0xF1AC},{0x7634, 0xD5CE}, - {0x7635, 0xF1A9},{0x7636, 0xAF98},{0x7637, 0xAF99},{0x7638, 0xC8B3},{0x7639, 0xAF9A},{0x763A, 0xAF9B},{0x763B, 0xAF9C},{0x763C, 0xF1A2}, - {0x763D, 0xAF9D},{0x763E, 0xF1AB},{0x763F, 0xF1A8},{0x7640, 0xF1A5},{0x7641, 0xAF9E},{0x7642, 0xAF9F},{0x7643, 0xF1AA},{0x7644, 0xAFA0}, - {0x7645, 0xB040},{0x7646, 0xB041},{0x7647, 0xB042},{0x7648, 0xB043},{0x7649, 0xB044},{0x764A, 0xB045},{0x764B, 0xB046},{0x764C, 0xB0A9}, - {0x764D, 0xF1AD},{0x764E, 0xB047},{0x764F, 0xB048},{0x7650, 0xB049},{0x7651, 0xB04A},{0x7652, 0xB04B},{0x7653, 0xB04C},{0x7654, 0xF1AF}, - {0x7655, 0xB04D},{0x7656, 0xF1B1},{0x7657, 0xB04E},{0x7658, 0xB04F},{0x7659, 0xB050},{0x765A, 0xB051},{0x765B, 0xB052},{0x765C, 0xF1B0}, - {0x765D, 0xB053},{0x765E, 0xF1AE},{0x765F, 0xB054},{0x7660, 0xB055},{0x7661, 0xB056},{0x7662, 0xB057},{0x7663, 0xD1A2},{0x7664, 0xB058}, - {0x7665, 0xB059},{0x7666, 0xB05A},{0x7667, 0xB05B},{0x7668, 0xB05C},{0x7669, 0xB05D},{0x766A, 0xB05E},{0x766B, 0xF1B2},{0x766C, 0xB05F}, - {0x766D, 0xB060},{0x766E, 0xB061},{0x766F, 0xF1B3},{0x7670, 0xB062},{0x7671, 0xB063},{0x7672, 0xB064},{0x7673, 0xB065},{0x7674, 0xB066}, - {0x7675, 0xB067},{0x7676, 0xB068},{0x7677, 0xB069},{0x7678, 0xB9EF},{0x7679, 0xB06A},{0x767A, 0xB06B},{0x767B, 0xB5C7},{0x767C, 0xB06C}, - {0x767D, 0xB0D7},{0x767E, 0xB0D9},{0x767F, 0xB06D},{0x7680, 0xB06E},{0x7681, 0xB06F},{0x7682, 0xD4ED},{0x7683, 0xB070},{0x7684, 0xB5C4}, - {0x7685, 0xB071},{0x7686, 0xBDD4},{0x7687, 0xBBCA},{0x7688, 0xF0A7},{0x7689, 0xB072},{0x768A, 0xB073},{0x768B, 0xB8DE},{0x768C, 0xB074}, - {0x768D, 0xB075},{0x768E, 0xF0A8},{0x768F, 0xB076},{0x7690, 0xB077},{0x7691, 0xB0A8},{0x7692, 0xB078},{0x7693, 0xF0A9},{0x7694, 0xB079}, - {0x7695, 0xB07A},{0x7696, 0xCDEE},{0x7697, 0xB07B},{0x7698, 0xB07C},{0x7699, 0xF0AA},{0x769A, 0xB07D},{0x769B, 0xB07E},{0x769C, 0xB080}, - {0x769D, 0xB081},{0x769E, 0xB082},{0x769F, 0xB083},{0x76A0, 0xB084},{0x76A1, 0xB085},{0x76A2, 0xB086},{0x76A3, 0xB087},{0x76A4, 0xF0AB}, - {0x76A5, 0xB088},{0x76A6, 0xB089},{0x76A7, 0xB08A},{0x76A8, 0xB08B},{0x76A9, 0xB08C},{0x76AA, 0xB08D},{0x76AB, 0xB08E},{0x76AC, 0xB08F}, - {0x76AD, 0xB090},{0x76AE, 0xC6A4},{0x76AF, 0xB091},{0x76B0, 0xB092},{0x76B1, 0xD6E5},{0x76B2, 0xF1E4},{0x76B3, 0xB093},{0x76B4, 0xF1E5}, - {0x76B5, 0xB094},{0x76B6, 0xB095},{0x76B7, 0xB096},{0x76B8, 0xB097},{0x76B9, 0xB098},{0x76BA, 0xB099},{0x76BB, 0xB09A},{0x76BC, 0xB09B}, - {0x76BD, 0xB09C},{0x76BE, 0xB09D},{0x76BF, 0xC3F3},{0x76C0, 0xB09E},{0x76C1, 0xB09F},{0x76C2, 0xD3DB},{0x76C3, 0xB0A0},{0x76C4, 0xB140}, - {0x76C5, 0xD6D1},{0x76C6, 0xC5E8},{0x76C7, 0xB141},{0x76C8, 0xD3AF},{0x76C9, 0xB142},{0x76CA, 0xD2E6},{0x76CB, 0xB143},{0x76CC, 0xB144}, - {0x76CD, 0xEEC1},{0x76CE, 0xB0BB},{0x76CF, 0xD5B5},{0x76D0, 0xD1CE},{0x76D1, 0xBCE0},{0x76D2, 0xBAD0},{0x76D3, 0xB145},{0x76D4, 0xBFF8}, - {0x76D5, 0xB146},{0x76D6, 0xB8C7},{0x76D7, 0xB5C1},{0x76D8, 0xC5CC},{0x76D9, 0xB147},{0x76DA, 0xB148},{0x76DB, 0xCAA2},{0x76DC, 0xB149}, - {0x76DD, 0xB14A},{0x76DE, 0xB14B},{0x76DF, 0xC3CB},{0x76E0, 0xB14C},{0x76E1, 0xB14D},{0x76E2, 0xB14E},{0x76E3, 0xB14F},{0x76E4, 0xB150}, - {0x76E5, 0xEEC2},{0x76E6, 0xB151},{0x76E7, 0xB152},{0x76E8, 0xB153},{0x76E9, 0xB154},{0x76EA, 0xB155},{0x76EB, 0xB156},{0x76EC, 0xB157}, - {0x76ED, 0xB158},{0x76EE, 0xC4BF},{0x76EF, 0xB6A2},{0x76F0, 0xB159},{0x76F1, 0xEDEC},{0x76F2, 0xC3A4},{0x76F3, 0xB15A},{0x76F4, 0xD6B1}, - {0x76F5, 0xB15B},{0x76F6, 0xB15C},{0x76F7, 0xB15D},{0x76F8, 0xCFE0},{0x76F9, 0xEDEF},{0x76FA, 0xB15E},{0x76FB, 0xB15F},{0x76FC, 0xC5CE}, - {0x76FD, 0xB160},{0x76FE, 0xB6DC},{0x76FF, 0xB161},{0x7700, 0xB162},{0x7701, 0xCAA1},{0x7702, 0xB163},{0x7703, 0xB164},{0x7704, 0xEDED}, - {0x7705, 0xB165},{0x7706, 0xB166},{0x7707, 0xEDF0},{0x7708, 0xEDF1},{0x7709, 0xC3BC},{0x770A, 0xB167},{0x770B, 0xBFB4},{0x770C, 0xB168}, - {0x770D, 0xEDEE},{0x770E, 0xB169},{0x770F, 0xB16A},{0x7710, 0xB16B},{0x7711, 0xB16C},{0x7712, 0xB16D},{0x7713, 0xB16E},{0x7714, 0xB16F}, - {0x7715, 0xB170},{0x7716, 0xB171},{0x7717, 0xB172},{0x7718, 0xB173},{0x7719, 0xEDF4},{0x771A, 0xEDF2},{0x771B, 0xB174},{0x771C, 0xB175}, - {0x771D, 0xB176},{0x771E, 0xB177},{0x771F, 0xD5E6},{0x7720, 0xC3DF},{0x7721, 0xB178},{0x7722, 0xEDF3},{0x7723, 0xB179},{0x7724, 0xB17A}, - {0x7725, 0xB17B},{0x7726, 0xEDF6},{0x7727, 0xB17C},{0x7728, 0xD5A3},{0x7729, 0xD1A3},{0x772A, 0xB17D},{0x772B, 0xB17E},{0x772C, 0xB180}, - {0x772D, 0xEDF5},{0x772E, 0xB181},{0x772F, 0xC3D0},{0x7730, 0xB182},{0x7731, 0xB183},{0x7732, 0xB184},{0x7733, 0xB185},{0x7734, 0xB186}, - {0x7735, 0xEDF7},{0x7736, 0xBFF4},{0x7737, 0xBEEC},{0x7738, 0xEDF8},{0x7739, 0xB187},{0x773A, 0xCCF7},{0x773B, 0xB188},{0x773C, 0xD1DB}, - {0x773D, 0xB189},{0x773E, 0xB18A},{0x773F, 0xB18B},{0x7740, 0xD7C5},{0x7741, 0xD5F6},{0x7742, 0xB18C},{0x7743, 0xEDFC},{0x7744, 0xB18D}, - {0x7745, 0xB18E},{0x7746, 0xB18F},{0x7747, 0xEDFB},{0x7748, 0xB190},{0x7749, 0xB191},{0x774A, 0xB192},{0x774B, 0xB193},{0x774C, 0xB194}, - {0x774D, 0xB195},{0x774E, 0xB196},{0x774F, 0xB197},{0x7750, 0xEDF9},{0x7751, 0xEDFA},{0x7752, 0xB198},{0x7753, 0xB199},{0x7754, 0xB19A}, - {0x7755, 0xB19B},{0x7756, 0xB19C},{0x7757, 0xB19D},{0x7758, 0xB19E},{0x7759, 0xB19F},{0x775A, 0xEDFD},{0x775B, 0xBEA6},{0x775C, 0xB1A0}, - {0x775D, 0xB240},{0x775E, 0xB241},{0x775F, 0xB242},{0x7760, 0xB243},{0x7761, 0xCBAF},{0x7762, 0xEEA1},{0x7763, 0xB6BD},{0x7764, 0xB244}, - {0x7765, 0xEEA2},{0x7766, 0xC4C0},{0x7767, 0xB245},{0x7768, 0xEDFE},{0x7769, 0xB246},{0x776A, 0xB247},{0x776B, 0xBDDE},{0x776C, 0xB2C7}, - {0x776D, 0xB248},{0x776E, 0xB249},{0x776F, 0xB24A},{0x7770, 0xB24B},{0x7771, 0xB24C},{0x7772, 0xB24D},{0x7773, 0xB24E},{0x7774, 0xB24F}, - {0x7775, 0xB250},{0x7776, 0xB251},{0x7777, 0xB252},{0x7778, 0xB253},{0x7779, 0xB6C3},{0x777A, 0xB254},{0x777B, 0xB255},{0x777C, 0xB256}, - {0x777D, 0xEEA5},{0x777E, 0xD8BA},{0x777F, 0xEEA3},{0x7780, 0xEEA6},{0x7781, 0xB257},{0x7782, 0xB258},{0x7783, 0xB259},{0x7784, 0xC3E9}, - {0x7785, 0xB3F2},{0x7786, 0xB25A},{0x7787, 0xB25B},{0x7788, 0xB25C},{0x7789, 0xB25D},{0x778A, 0xB25E},{0x778B, 0xB25F},{0x778C, 0xEEA7}, - {0x778D, 0xEEA4},{0x778E, 0xCFB9},{0x778F, 0xB260},{0x7790, 0xB261},{0x7791, 0xEEA8},{0x7792, 0xC2F7},{0x7793, 0xB262},{0x7794, 0xB263}, - {0x7795, 0xB264},{0x7796, 0xB265},{0x7797, 0xB266},{0x7798, 0xB267},{0x7799, 0xB268},{0x779A, 0xB269},{0x779B, 0xB26A},{0x779C, 0xB26B}, - {0x779D, 0xB26C},{0x779E, 0xB26D},{0x779F, 0xEEA9},{0x77A0, 0xEEAA},{0x77A1, 0xB26E},{0x77A2, 0xDEAB},{0x77A3, 0xB26F},{0x77A4, 0xB270}, - {0x77A5, 0xC6B3},{0x77A6, 0xB271},{0x77A7, 0xC7C6},{0x77A8, 0xB272},{0x77A9, 0xD6F5},{0x77AA, 0xB5C9},{0x77AB, 0xB273},{0x77AC, 0xCBB2}, - {0x77AD, 0xB274},{0x77AE, 0xB275},{0x77AF, 0xB276},{0x77B0, 0xEEAB},{0x77B1, 0xB277},{0x77B2, 0xB278},{0x77B3, 0xCDAB},{0x77B4, 0xB279}, - {0x77B5, 0xEEAC},{0x77B6, 0xB27A},{0x77B7, 0xB27B},{0x77B8, 0xB27C},{0x77B9, 0xB27D},{0x77BA, 0xB27E},{0x77BB, 0xD5B0},{0x77BC, 0xB280}, - {0x77BD, 0xEEAD},{0x77BE, 0xB281},{0x77BF, 0xF6C4},{0x77C0, 0xB282},{0x77C1, 0xB283},{0x77C2, 0xB284},{0x77C3, 0xB285},{0x77C4, 0xB286}, - {0x77C5, 0xB287},{0x77C6, 0xB288},{0x77C7, 0xB289},{0x77C8, 0xB28A},{0x77C9, 0xB28B},{0x77CA, 0xB28C},{0x77CB, 0xB28D},{0x77CC, 0xB28E}, - {0x77CD, 0xDBC7},{0x77CE, 0xB28F},{0x77CF, 0xB290},{0x77D0, 0xB291},{0x77D1, 0xB292},{0x77D2, 0xB293},{0x77D3, 0xB294},{0x77D4, 0xB295}, - {0x77D5, 0xB296},{0x77D6, 0xB297},{0x77D7, 0xB4A3},{0x77D8, 0xB298},{0x77D9, 0xB299},{0x77DA, 0xB29A},{0x77DB, 0xC3AC},{0x77DC, 0xF1E6}, - {0x77DD, 0xB29B},{0x77DE, 0xB29C},{0x77DF, 0xB29D},{0x77E0, 0xB29E},{0x77E1, 0xB29F},{0x77E2, 0xCAB8},{0x77E3, 0xD2D3},{0x77E4, 0xB2A0}, - {0x77E5, 0xD6AA},{0x77E6, 0xB340},{0x77E7, 0xEFF2},{0x77E8, 0xB341},{0x77E9, 0xBED8},{0x77EA, 0xB342},{0x77EB, 0xBDC3},{0x77EC, 0xEFF3}, - {0x77ED, 0xB6CC},{0x77EE, 0xB0AB},{0x77EF, 0xB343},{0x77F0, 0xB344},{0x77F1, 0xB345},{0x77F2, 0xB346},{0x77F3, 0xCAAF},{0x77F4, 0xB347}, - {0x77F5, 0xB348},{0x77F6, 0xEDB6},{0x77F7, 0xB349},{0x77F8, 0xEDB7},{0x77F9, 0xB34A},{0x77FA, 0xB34B},{0x77FB, 0xB34C},{0x77FC, 0xB34D}, - {0x77FD, 0xCEF9},{0x77FE, 0xB7AF},{0x77FF, 0xBFF3},{0x7800, 0xEDB8},{0x7801, 0xC2EB},{0x7802, 0xC9B0},{0x7803, 0xB34E},{0x7804, 0xB34F}, - {0x7805, 0xB350},{0x7806, 0xB351},{0x7807, 0xB352},{0x7808, 0xB353},{0x7809, 0xEDB9},{0x780A, 0xB354},{0x780B, 0xB355},{0x780C, 0xC6F6}, - {0x780D, 0xBFB3},{0x780E, 0xB356},{0x780F, 0xB357},{0x7810, 0xB358},{0x7811, 0xEDBC},{0x7812, 0xC5F8},{0x7813, 0xB359},{0x7814, 0xD1D0}, - {0x7815, 0xB35A},{0x7816, 0xD7A9},{0x7817, 0xEDBA},{0x7818, 0xEDBB},{0x7819, 0xB35B},{0x781A, 0xD1E2},{0x781B, 0xB35C},{0x781C, 0xEDBF}, - {0x781D, 0xEDC0},{0x781E, 0xB35D},{0x781F, 0xEDC4},{0x7820, 0xB35E},{0x7821, 0xB35F},{0x7822, 0xB360},{0x7823, 0xEDC8},{0x7824, 0xB361}, - {0x7825, 0xEDC6},{0x7826, 0xEDCE},{0x7827, 0xD5E8},{0x7828, 0xB362},{0x7829, 0xEDC9},{0x782A, 0xB363},{0x782B, 0xB364},{0x782C, 0xEDC7}, - {0x782D, 0xEDBE},{0x782E, 0xB365},{0x782F, 0xB366},{0x7830, 0xC5E9},{0x7831, 0xB367},{0x7832, 0xB368},{0x7833, 0xB369},{0x7834, 0xC6C6}, - {0x7835, 0xB36A},{0x7836, 0xB36B},{0x7837, 0xC9E9},{0x7838, 0xD4D2},{0x7839, 0xEDC1},{0x783A, 0xEDC2},{0x783B, 0xEDC3},{0x783C, 0xEDC5}, - {0x783D, 0xB36C},{0x783E, 0xC0F9},{0x783F, 0xB36D},{0x7840, 0xB4A1},{0x7841, 0xB36E},{0x7842, 0xB36F},{0x7843, 0xB370},{0x7844, 0xB371}, - {0x7845, 0xB9E8},{0x7846, 0xB372},{0x7847, 0xEDD0},{0x7848, 0xB373},{0x7849, 0xB374},{0x784A, 0xB375},{0x784B, 0xB376},{0x784C, 0xEDD1}, - {0x784D, 0xB377},{0x784E, 0xEDCA},{0x784F, 0xB378},{0x7850, 0xEDCF},{0x7851, 0xB379},{0x7852, 0xCEF8},{0x7853, 0xB37A},{0x7854, 0xB37B}, - {0x7855, 0xCBB6},{0x7856, 0xEDCC},{0x7857, 0xEDCD},{0x7858, 0xB37C},{0x7859, 0xB37D},{0x785A, 0xB37E},{0x785B, 0xB380},{0x785C, 0xB381}, - {0x785D, 0xCFF5},{0x785E, 0xB382},{0x785F, 0xB383},{0x7860, 0xB384},{0x7861, 0xB385},{0x7862, 0xB386},{0x7863, 0xB387},{0x7864, 0xB388}, - {0x7865, 0xB389},{0x7866, 0xB38A},{0x7867, 0xB38B},{0x7868, 0xB38C},{0x7869, 0xB38D},{0x786A, 0xEDD2},{0x786B, 0xC1F2},{0x786C, 0xD3B2}, - {0x786D, 0xEDCB},{0x786E, 0xC8B7},{0x786F, 0xB38E},{0x7870, 0xB38F},{0x7871, 0xB390},{0x7872, 0xB391},{0x7873, 0xB392},{0x7874, 0xB393}, - {0x7875, 0xB394},{0x7876, 0xB395},{0x7877, 0xBCEF},{0x7878, 0xB396},{0x7879, 0xB397},{0x787A, 0xB398},{0x787B, 0xB399},{0x787C, 0xC5F0}, - {0x787D, 0xB39A},{0x787E, 0xB39B},{0x787F, 0xB39C},{0x7880, 0xB39D},{0x7881, 0xB39E},{0x7882, 0xB39F},{0x7883, 0xB3A0},{0x7884, 0xB440}, - {0x7885, 0xB441},{0x7886, 0xB442},{0x7887, 0xEDD6},{0x7888, 0xB443},{0x7889, 0xB5EF},{0x788A, 0xB444},{0x788B, 0xB445},{0x788C, 0xC2B5}, - {0x788D, 0xB0AD},{0x788E, 0xCBE9},{0x788F, 0xB446},{0x7890, 0xB447},{0x7891, 0xB1AE},{0x7892, 0xB448},{0x7893, 0xEDD4},{0x7894, 0xB449}, - {0x7895, 0xB44A},{0x7896, 0xB44B},{0x7897, 0xCDEB},{0x7898, 0xB5E2},{0x7899, 0xB44C},{0x789A, 0xEDD5},{0x789B, 0xEDD3},{0x789C, 0xEDD7}, - {0x789D, 0xB44D},{0x789E, 0xB44E},{0x789F, 0xB5FA},{0x78A0, 0xB44F},{0x78A1, 0xEDD8},{0x78A2, 0xB450},{0x78A3, 0xEDD9},{0x78A4, 0xB451}, - {0x78A5, 0xEDDC},{0x78A6, 0xB452},{0x78A7, 0xB1CC},{0x78A8, 0xB453},{0x78A9, 0xB454},{0x78AA, 0xB455},{0x78AB, 0xB456},{0x78AC, 0xB457}, - {0x78AD, 0xB458},{0x78AE, 0xB459},{0x78AF, 0xB45A},{0x78B0, 0xC5F6},{0x78B1, 0xBCEE},{0x78B2, 0xEDDA},{0x78B3, 0xCCBC},{0x78B4, 0xB2EA}, - {0x78B5, 0xB45B},{0x78B6, 0xB45C},{0x78B7, 0xB45D},{0x78B8, 0xB45E},{0x78B9, 0xEDDB},{0x78BA, 0xB45F},{0x78BB, 0xB460},{0x78BC, 0xB461}, - {0x78BD, 0xB462},{0x78BE, 0xC4EB},{0x78BF, 0xB463},{0x78C0, 0xB464},{0x78C1, 0xB4C5},{0x78C2, 0xB465},{0x78C3, 0xB466},{0x78C4, 0xB467}, - {0x78C5, 0xB0F5},{0x78C6, 0xB468},{0x78C7, 0xB469},{0x78C8, 0xB46A},{0x78C9, 0xEDDF},{0x78CA, 0xC0DA},{0x78CB, 0xB4E8},{0x78CC, 0xB46B}, - {0x78CD, 0xB46C},{0x78CE, 0xB46D},{0x78CF, 0xB46E},{0x78D0, 0xC5CD},{0x78D1, 0xB46F},{0x78D2, 0xB470},{0x78D3, 0xB471},{0x78D4, 0xEDDD}, - {0x78D5, 0xBFC4},{0x78D6, 0xB472},{0x78D7, 0xB473},{0x78D8, 0xB474},{0x78D9, 0xEDDE},{0x78DA, 0xB475},{0x78DB, 0xB476},{0x78DC, 0xB477}, - {0x78DD, 0xB478},{0x78DE, 0xB479},{0x78DF, 0xB47A},{0x78E0, 0xB47B},{0x78E1, 0xB47C},{0x78E2, 0xB47D},{0x78E3, 0xB47E},{0x78E4, 0xB480}, - {0x78E5, 0xB481},{0x78E6, 0xB482},{0x78E7, 0xB483},{0x78E8, 0xC4A5},{0x78E9, 0xB484},{0x78EA, 0xB485},{0x78EB, 0xB486},{0x78EC, 0xEDE0}, - {0x78ED, 0xB487},{0x78EE, 0xB488},{0x78EF, 0xB489},{0x78F0, 0xB48A},{0x78F1, 0xB48B},{0x78F2, 0xEDE1},{0x78F3, 0xB48C},{0x78F4, 0xEDE3}, - {0x78F5, 0xB48D},{0x78F6, 0xB48E},{0x78F7, 0xC1D7},{0x78F8, 0xB48F},{0x78F9, 0xB490},{0x78FA, 0xBBC7},{0x78FB, 0xB491},{0x78FC, 0xB492}, - {0x78FD, 0xB493},{0x78FE, 0xB494},{0x78FF, 0xB495},{0x7900, 0xB496},{0x7901, 0xBDB8},{0x7902, 0xB497},{0x7903, 0xB498},{0x7904, 0xB499}, - {0x7905, 0xEDE2},{0x7906, 0xB49A},{0x7907, 0xB49B},{0x7908, 0xB49C},{0x7909, 0xB49D},{0x790A, 0xB49E},{0x790B, 0xB49F},{0x790C, 0xB4A0}, - {0x790D, 0xB540},{0x790E, 0xB541},{0x790F, 0xB542},{0x7910, 0xB543},{0x7911, 0xB544},{0x7912, 0xB545},{0x7913, 0xEDE4},{0x7914, 0xB546}, - {0x7915, 0xB547},{0x7916, 0xB548},{0x7917, 0xB549},{0x7918, 0xB54A},{0x7919, 0xB54B},{0x791A, 0xB54C},{0x791B, 0xB54D},{0x791C, 0xB54E}, - {0x791D, 0xB54F},{0x791E, 0xEDE6},{0x791F, 0xB550},{0x7920, 0xB551},{0x7921, 0xB552},{0x7922, 0xB553},{0x7923, 0xB554},{0x7924, 0xEDE5}, - {0x7925, 0xB555},{0x7926, 0xB556},{0x7927, 0xB557},{0x7928, 0xB558},{0x7929, 0xB559},{0x792A, 0xB55A},{0x792B, 0xB55B},{0x792C, 0xB55C}, - {0x792D, 0xB55D},{0x792E, 0xB55E},{0x792F, 0xB55F},{0x7930, 0xB560},{0x7931, 0xB561},{0x7932, 0xB562},{0x7933, 0xB563},{0x7934, 0xEDE7}, - {0x7935, 0xB564},{0x7936, 0xB565},{0x7937, 0xB566},{0x7938, 0xB567},{0x7939, 0xB568},{0x793A, 0xCABE},{0x793B, 0xECEA},{0x793C, 0xC0F1}, - {0x793D, 0xB569},{0x793E, 0xC9E7},{0x793F, 0xB56A},{0x7940, 0xECEB},{0x7941, 0xC6EE},{0x7942, 0xB56B},{0x7943, 0xB56C},{0x7944, 0xB56D}, - {0x7945, 0xB56E},{0x7946, 0xECEC},{0x7947, 0xB56F},{0x7948, 0xC6ED},{0x7949, 0xECED},{0x794A, 0xB570},{0x794B, 0xB571},{0x794C, 0xB572}, - {0x794D, 0xB573},{0x794E, 0xB574},{0x794F, 0xB575},{0x7950, 0xB576},{0x7951, 0xB577},{0x7952, 0xB578},{0x7953, 0xECF0},{0x7954, 0xB579}, - {0x7955, 0xB57A},{0x7956, 0xD7E6},{0x7957, 0xECF3},{0x7958, 0xB57B},{0x7959, 0xB57C},{0x795A, 0xECF1},{0x795B, 0xECEE},{0x795C, 0xECEF}, - {0x795D, 0xD7A3},{0x795E, 0xC9F1},{0x795F, 0xCBEE},{0x7960, 0xECF4},{0x7961, 0xB57D},{0x7962, 0xECF2},{0x7963, 0xB57E},{0x7964, 0xB580}, - {0x7965, 0xCFE9},{0x7966, 0xB581},{0x7967, 0xECF6},{0x7968, 0xC6B1},{0x7969, 0xB582},{0x796A, 0xB583},{0x796B, 0xB584},{0x796C, 0xB585}, - {0x796D, 0xBCC0},{0x796E, 0xB586},{0x796F, 0xECF5},{0x7970, 0xB587},{0x7971, 0xB588},{0x7972, 0xB589},{0x7973, 0xB58A},{0x7974, 0xB58B}, - {0x7975, 0xB58C},{0x7976, 0xB58D},{0x7977, 0xB5BB},{0x7978, 0xBBF6},{0x7979, 0xB58E},{0x797A, 0xECF7},{0x797B, 0xB58F},{0x797C, 0xB590}, - {0x797D, 0xB591},{0x797E, 0xB592},{0x797F, 0xB593},{0x7980, 0xD9F7},{0x7981, 0xBDFB},{0x7982, 0xB594},{0x7983, 0xB595},{0x7984, 0xC2BB}, - {0x7985, 0xECF8},{0x7986, 0xB596},{0x7987, 0xB597},{0x7988, 0xB598},{0x7989, 0xB599},{0x798A, 0xECF9},{0x798B, 0xB59A},{0x798C, 0xB59B}, - {0x798D, 0xB59C},{0x798E, 0xB59D},{0x798F, 0xB8A3},{0x7990, 0xB59E},{0x7991, 0xB59F},{0x7992, 0xB5A0},{0x7993, 0xB640},{0x7994, 0xB641}, - {0x7995, 0xB642},{0x7996, 0xB643},{0x7997, 0xB644},{0x7998, 0xB645},{0x7999, 0xB646},{0x799A, 0xECFA},{0x799B, 0xB647},{0x799C, 0xB648}, - {0x799D, 0xB649},{0x799E, 0xB64A},{0x799F, 0xB64B},{0x79A0, 0xB64C},{0x79A1, 0xB64D},{0x79A2, 0xB64E},{0x79A3, 0xB64F},{0x79A4, 0xB650}, - {0x79A5, 0xB651},{0x79A6, 0xB652},{0x79A7, 0xECFB},{0x79A8, 0xB653},{0x79A9, 0xB654},{0x79AA, 0xB655},{0x79AB, 0xB656},{0x79AC, 0xB657}, - {0x79AD, 0xB658},{0x79AE, 0xB659},{0x79AF, 0xB65A},{0x79B0, 0xB65B},{0x79B1, 0xB65C},{0x79B2, 0xB65D},{0x79B3, 0xECFC},{0x79B4, 0xB65E}, - {0x79B5, 0xB65F},{0x79B6, 0xB660},{0x79B7, 0xB661},{0x79B8, 0xB662},{0x79B9, 0xD3ED},{0x79BA, 0xD8AE},{0x79BB, 0xC0EB},{0x79BC, 0xB663}, - {0x79BD, 0xC7DD},{0x79BE, 0xBACC},{0x79BF, 0xB664},{0x79C0, 0xD0E3},{0x79C1, 0xCBBD},{0x79C2, 0xB665},{0x79C3, 0xCDBA},{0x79C4, 0xB666}, - {0x79C5, 0xB667},{0x79C6, 0xB8D1},{0x79C7, 0xB668},{0x79C8, 0xB669},{0x79C9, 0xB1FC},{0x79CA, 0xB66A},{0x79CB, 0xC7EF},{0x79CC, 0xB66B}, - {0x79CD, 0xD6D6},{0x79CE, 0xB66C},{0x79CF, 0xB66D},{0x79D0, 0xB66E},{0x79D1, 0xBFC6},{0x79D2, 0xC3EB},{0x79D3, 0xB66F},{0x79D4, 0xB670}, - {0x79D5, 0xEFF5},{0x79D6, 0xB671},{0x79D7, 0xB672},{0x79D8, 0xC3D8},{0x79D9, 0xB673},{0x79DA, 0xB674},{0x79DB, 0xB675},{0x79DC, 0xB676}, - {0x79DD, 0xB677},{0x79DE, 0xB678},{0x79DF, 0xD7E2},{0x79E0, 0xB679},{0x79E1, 0xB67A},{0x79E2, 0xB67B},{0x79E3, 0xEFF7},{0x79E4, 0xB3D3}, - {0x79E5, 0xB67C},{0x79E6, 0xC7D8},{0x79E7, 0xD1ED},{0x79E8, 0xB67D},{0x79E9, 0xD6C8},{0x79EA, 0xB67E},{0x79EB, 0xEFF8},{0x79EC, 0xB680}, - {0x79ED, 0xEFF6},{0x79EE, 0xB681},{0x79EF, 0xBBFD},{0x79F0, 0xB3C6},{0x79F1, 0xB682},{0x79F2, 0xB683},{0x79F3, 0xB684},{0x79F4, 0xB685}, - {0x79F5, 0xB686},{0x79F6, 0xB687},{0x79F7, 0xB688},{0x79F8, 0xBDD5},{0x79F9, 0xB689},{0x79FA, 0xB68A},{0x79FB, 0xD2C6},{0x79FC, 0xB68B}, - {0x79FD, 0xBBE0},{0x79FE, 0xB68C},{0x79FF, 0xB68D},{0x7A00, 0xCFA1},{0x7A01, 0xB68E},{0x7A02, 0xEFFC},{0x7A03, 0xEFFB},{0x7A04, 0xB68F}, - {0x7A05, 0xB690},{0x7A06, 0xEFF9},{0x7A07, 0xB691},{0x7A08, 0xB692},{0x7A09, 0xB693},{0x7A0A, 0xB694},{0x7A0B, 0xB3CC},{0x7A0C, 0xB695}, - {0x7A0D, 0xC9D4},{0x7A0E, 0xCBB0},{0x7A0F, 0xB696},{0x7A10, 0xB697},{0x7A11, 0xB698},{0x7A12, 0xB699},{0x7A13, 0xB69A},{0x7A14, 0xEFFE}, - {0x7A15, 0xB69B},{0x7A16, 0xB69C},{0x7A17, 0xB0DE},{0x7A18, 0xB69D},{0x7A19, 0xB69E},{0x7A1A, 0xD6C9},{0x7A1B, 0xB69F},{0x7A1C, 0xB6A0}, - {0x7A1D, 0xB740},{0x7A1E, 0xEFFD},{0x7A1F, 0xB741},{0x7A20, 0xB3ED},{0x7A21, 0xB742},{0x7A22, 0xB743},{0x7A23, 0xF6D5},{0x7A24, 0xB744}, - {0x7A25, 0xB745},{0x7A26, 0xB746},{0x7A27, 0xB747},{0x7A28, 0xB748},{0x7A29, 0xB749},{0x7A2A, 0xB74A},{0x7A2B, 0xB74B},{0x7A2C, 0xB74C}, - {0x7A2D, 0xB74D},{0x7A2E, 0xB74E},{0x7A2F, 0xB74F},{0x7A30, 0xB750},{0x7A31, 0xB751},{0x7A32, 0xB752},{0x7A33, 0xCEC8},{0x7A34, 0xB753}, - {0x7A35, 0xB754},{0x7A36, 0xB755},{0x7A37, 0xF0A2},{0x7A38, 0xB756},{0x7A39, 0xF0A1},{0x7A3A, 0xB757},{0x7A3B, 0xB5BE},{0x7A3C, 0xBCDA}, - {0x7A3D, 0xBBFC},{0x7A3E, 0xB758},{0x7A3F, 0xB8E5},{0x7A40, 0xB759},{0x7A41, 0xB75A},{0x7A42, 0xB75B},{0x7A43, 0xB75C},{0x7A44, 0xB75D}, - {0x7A45, 0xB75E},{0x7A46, 0xC4C2},{0x7A47, 0xB75F},{0x7A48, 0xB760},{0x7A49, 0xB761},{0x7A4A, 0xB762},{0x7A4B, 0xB763},{0x7A4C, 0xB764}, - {0x7A4D, 0xB765},{0x7A4E, 0xB766},{0x7A4F, 0xB767},{0x7A50, 0xB768},{0x7A51, 0xF0A3},{0x7A52, 0xB769},{0x7A53, 0xB76A},{0x7A54, 0xB76B}, - {0x7A55, 0xB76C},{0x7A56, 0xB76D},{0x7A57, 0xCBEB},{0x7A58, 0xB76E},{0x7A59, 0xB76F},{0x7A5A, 0xB770},{0x7A5B, 0xB771},{0x7A5C, 0xB772}, - {0x7A5D, 0xB773},{0x7A5E, 0xB774},{0x7A5F, 0xB775},{0x7A60, 0xB776},{0x7A61, 0xB777},{0x7A62, 0xB778},{0x7A63, 0xB779},{0x7A64, 0xB77A}, - {0x7A65, 0xB77B},{0x7A66, 0xB77C},{0x7A67, 0xB77D},{0x7A68, 0xB77E},{0x7A69, 0xB780},{0x7A6A, 0xB781},{0x7A6B, 0xB782},{0x7A6C, 0xB783}, - {0x7A6D, 0xB784},{0x7A6E, 0xB785},{0x7A6F, 0xB786},{0x7A70, 0xF0A6},{0x7A71, 0xB787},{0x7A72, 0xB788},{0x7A73, 0xB789},{0x7A74, 0xD1A8}, - {0x7A75, 0xB78A},{0x7A76, 0xBEBF},{0x7A77, 0xC7EE},{0x7A78, 0xF1B6},{0x7A79, 0xF1B7},{0x7A7A, 0xBFD5},{0x7A7B, 0xB78B},{0x7A7C, 0xB78C}, - {0x7A7D, 0xB78D},{0x7A7E, 0xB78E},{0x7A7F, 0xB4A9},{0x7A80, 0xF1B8},{0x7A81, 0xCDBB},{0x7A82, 0xB78F},{0x7A83, 0xC7D4},{0x7A84, 0xD5AD}, - {0x7A85, 0xB790},{0x7A86, 0xF1B9},{0x7A87, 0xB791},{0x7A88, 0xF1BA},{0x7A89, 0xB792},{0x7A8A, 0xB793},{0x7A8B, 0xB794},{0x7A8C, 0xB795}, - {0x7A8D, 0xC7CF},{0x7A8E, 0xB796},{0x7A8F, 0xB797},{0x7A90, 0xB798},{0x7A91, 0xD2A4},{0x7A92, 0xD6CF},{0x7A93, 0xB799},{0x7A94, 0xB79A}, - {0x7A95, 0xF1BB},{0x7A96, 0xBDD1},{0x7A97, 0xB4B0},{0x7A98, 0xBEBD},{0x7A99, 0xB79B},{0x7A9A, 0xB79C},{0x7A9B, 0xB79D},{0x7A9C, 0xB4DC}, - {0x7A9D, 0xCED1},{0x7A9E, 0xB79E},{0x7A9F, 0xBFDF},{0x7AA0, 0xF1BD},{0x7AA1, 0xB79F},{0x7AA2, 0xB7A0},{0x7AA3, 0xB840},{0x7AA4, 0xB841}, - {0x7AA5, 0xBFFA},{0x7AA6, 0xF1BC},{0x7AA7, 0xB842},{0x7AA8, 0xF1BF},{0x7AA9, 0xB843},{0x7AAA, 0xB844},{0x7AAB, 0xB845},{0x7AAC, 0xF1BE}, - {0x7AAD, 0xF1C0},{0x7AAE, 0xB846},{0x7AAF, 0xB847},{0x7AB0, 0xB848},{0x7AB1, 0xB849},{0x7AB2, 0xB84A},{0x7AB3, 0xF1C1},{0x7AB4, 0xB84B}, - {0x7AB5, 0xB84C},{0x7AB6, 0xB84D},{0x7AB7, 0xB84E},{0x7AB8, 0xB84F},{0x7AB9, 0xB850},{0x7ABA, 0xB851},{0x7ABB, 0xB852},{0x7ABC, 0xB853}, - {0x7ABD, 0xB854},{0x7ABE, 0xB855},{0x7ABF, 0xC1FE},{0x7AC0, 0xB856},{0x7AC1, 0xB857},{0x7AC2, 0xB858},{0x7AC3, 0xB859},{0x7AC4, 0xB85A}, - {0x7AC5, 0xB85B},{0x7AC6, 0xB85C},{0x7AC7, 0xB85D},{0x7AC8, 0xB85E},{0x7AC9, 0xB85F},{0x7ACA, 0xB860},{0x7ACB, 0xC1A2},{0x7ACC, 0xB861}, - {0x7ACD, 0xB862},{0x7ACE, 0xB863},{0x7ACF, 0xB864},{0x7AD0, 0xB865},{0x7AD1, 0xB866},{0x7AD2, 0xB867},{0x7AD3, 0xB868},{0x7AD4, 0xB869}, - {0x7AD5, 0xB86A},{0x7AD6, 0xCAFA},{0x7AD7, 0xB86B},{0x7AD8, 0xB86C},{0x7AD9, 0xD5BE},{0x7ADA, 0xB86D},{0x7ADB, 0xB86E},{0x7ADC, 0xB86F}, - {0x7ADD, 0xB870},{0x7ADE, 0xBEBA},{0x7ADF, 0xBEB9},{0x7AE0, 0xD5C2},{0x7AE1, 0xB871},{0x7AE2, 0xB872},{0x7AE3, 0xBFA2},{0x7AE4, 0xB873}, - {0x7AE5, 0xCDAF},{0x7AE6, 0xF1B5},{0x7AE7, 0xB874},{0x7AE8, 0xB875},{0x7AE9, 0xB876},{0x7AEA, 0xB877},{0x7AEB, 0xB878},{0x7AEC, 0xB879}, - {0x7AED, 0xBDDF},{0x7AEE, 0xB87A},{0x7AEF, 0xB6CB},{0x7AF0, 0xB87B},{0x7AF1, 0xB87C},{0x7AF2, 0xB87D},{0x7AF3, 0xB87E},{0x7AF4, 0xB880}, - {0x7AF5, 0xB881},{0x7AF6, 0xB882},{0x7AF7, 0xB883},{0x7AF8, 0xB884},{0x7AF9, 0xD6F1},{0x7AFA, 0xF3C3},{0x7AFB, 0xB885},{0x7AFC, 0xB886}, - {0x7AFD, 0xF3C4},{0x7AFE, 0xB887},{0x7AFF, 0xB8CD},{0x7B00, 0xB888},{0x7B01, 0xB889},{0x7B02, 0xB88A},{0x7B03, 0xF3C6},{0x7B04, 0xF3C7}, - {0x7B05, 0xB88B},{0x7B06, 0xB0CA},{0x7B07, 0xB88C},{0x7B08, 0xF3C5},{0x7B09, 0xB88D},{0x7B0A, 0xF3C9},{0x7B0B, 0xCBF1},{0x7B0C, 0xB88E}, - {0x7B0D, 0xB88F},{0x7B0E, 0xB890},{0x7B0F, 0xF3CB},{0x7B10, 0xB891},{0x7B11, 0xD0A6},{0x7B12, 0xB892},{0x7B13, 0xB893},{0x7B14, 0xB1CA}, - {0x7B15, 0xF3C8},{0x7B16, 0xB894},{0x7B17, 0xB895},{0x7B18, 0xB896},{0x7B19, 0xF3CF},{0x7B1A, 0xB897},{0x7B1B, 0xB5D1},{0x7B1C, 0xB898}, - {0x7B1D, 0xB899},{0x7B1E, 0xF3D7},{0x7B1F, 0xB89A},{0x7B20, 0xF3D2},{0x7B21, 0xB89B},{0x7B22, 0xB89C},{0x7B23, 0xB89D},{0x7B24, 0xF3D4}, - {0x7B25, 0xF3D3},{0x7B26, 0xB7FB},{0x7B27, 0xB89E},{0x7B28, 0xB1BF},{0x7B29, 0xB89F},{0x7B2A, 0xF3CE},{0x7B2B, 0xF3CA},{0x7B2C, 0xB5DA}, - {0x7B2D, 0xB8A0},{0x7B2E, 0xF3D0},{0x7B2F, 0xB940},{0x7B30, 0xB941},{0x7B31, 0xF3D1},{0x7B32, 0xB942},{0x7B33, 0xF3D5},{0x7B34, 0xB943}, - {0x7B35, 0xB944},{0x7B36, 0xB945},{0x7B37, 0xB946},{0x7B38, 0xF3CD},{0x7B39, 0xB947},{0x7B3A, 0xBCE3},{0x7B3B, 0xB948},{0x7B3C, 0xC1FD}, - {0x7B3D, 0xB949},{0x7B3E, 0xF3D6},{0x7B3F, 0xB94A},{0x7B40, 0xB94B},{0x7B41, 0xB94C},{0x7B42, 0xB94D},{0x7B43, 0xB94E},{0x7B44, 0xB94F}, - {0x7B45, 0xF3DA},{0x7B46, 0xB950},{0x7B47, 0xF3CC},{0x7B48, 0xB951},{0x7B49, 0xB5C8},{0x7B4A, 0xB952},{0x7B4B, 0xBDEE},{0x7B4C, 0xF3DC}, - {0x7B4D, 0xB953},{0x7B4E, 0xB954},{0x7B4F, 0xB7A4},{0x7B50, 0xBFF0},{0x7B51, 0xD6FE},{0x7B52, 0xCDB2},{0x7B53, 0xB955},{0x7B54, 0xB4F0}, - {0x7B55, 0xB956},{0x7B56, 0xB2DF},{0x7B57, 0xB957},{0x7B58, 0xF3D8},{0x7B59, 0xB958},{0x7B5A, 0xF3D9},{0x7B5B, 0xC9B8},{0x7B5C, 0xB959}, - {0x7B5D, 0xF3DD},{0x7B5E, 0xB95A},{0x7B5F, 0xB95B},{0x7B60, 0xF3DE},{0x7B61, 0xB95C},{0x7B62, 0xF3E1},{0x7B63, 0xB95D},{0x7B64, 0xB95E}, - {0x7B65, 0xB95F},{0x7B66, 0xB960},{0x7B67, 0xB961},{0x7B68, 0xB962},{0x7B69, 0xB963},{0x7B6A, 0xB964},{0x7B6B, 0xB965},{0x7B6C, 0xB966}, - {0x7B6D, 0xB967},{0x7B6E, 0xF3DF},{0x7B6F, 0xB968},{0x7B70, 0xB969},{0x7B71, 0xF3E3},{0x7B72, 0xF3E2},{0x7B73, 0xB96A},{0x7B74, 0xB96B}, - {0x7B75, 0xF3DB},{0x7B76, 0xB96C},{0x7B77, 0xBFEA},{0x7B78, 0xB96D},{0x7B79, 0xB3EF},{0x7B7A, 0xB96E},{0x7B7B, 0xF3E0},{0x7B7C, 0xB96F}, - {0x7B7D, 0xB970},{0x7B7E, 0xC7A9},{0x7B7F, 0xB971},{0x7B80, 0xBCF2},{0x7B81, 0xB972},{0x7B82, 0xB973},{0x7B83, 0xB974},{0x7B84, 0xB975}, - {0x7B85, 0xF3EB},{0x7B86, 0xB976},{0x7B87, 0xB977},{0x7B88, 0xB978},{0x7B89, 0xB979},{0x7B8A, 0xB97A},{0x7B8B, 0xB97B},{0x7B8C, 0xB97C}, - {0x7B8D, 0xB9BF},{0x7B8E, 0xB97D},{0x7B8F, 0xB97E},{0x7B90, 0xF3E4},{0x7B91, 0xB980},{0x7B92, 0xB981},{0x7B93, 0xB982},{0x7B94, 0xB2AD}, - {0x7B95, 0xBBFE},{0x7B96, 0xB983},{0x7B97, 0xCBE3},{0x7B98, 0xB984},{0x7B99, 0xB985},{0x7B9A, 0xB986},{0x7B9B, 0xB987},{0x7B9C, 0xF3ED}, - {0x7B9D, 0xF3E9},{0x7B9E, 0xB988},{0x7B9F, 0xB989},{0x7BA0, 0xB98A},{0x7BA1, 0xB9DC},{0x7BA2, 0xF3EE},{0x7BA3, 0xB98B},{0x7BA4, 0xB98C}, - {0x7BA5, 0xB98D},{0x7BA6, 0xF3E5},{0x7BA7, 0xF3E6},{0x7BA8, 0xF3EA},{0x7BA9, 0xC2E1},{0x7BAA, 0xF3EC},{0x7BAB, 0xF3EF},{0x7BAC, 0xF3E8}, - {0x7BAD, 0xBCFD},{0x7BAE, 0xB98E},{0x7BAF, 0xB98F},{0x7BB0, 0xB990},{0x7BB1, 0xCFE4},{0x7BB2, 0xB991},{0x7BB3, 0xB992},{0x7BB4, 0xF3F0}, - {0x7BB5, 0xB993},{0x7BB6, 0xB994},{0x7BB7, 0xB995},{0x7BB8, 0xF3E7},{0x7BB9, 0xB996},{0x7BBA, 0xB997},{0x7BBB, 0xB998},{0x7BBC, 0xB999}, - {0x7BBD, 0xB99A},{0x7BBE, 0xB99B},{0x7BBF, 0xB99C},{0x7BC0, 0xB99D},{0x7BC1, 0xF3F2},{0x7BC2, 0xB99E},{0x7BC3, 0xB99F},{0x7BC4, 0xB9A0}, - {0x7BC5, 0xBA40},{0x7BC6, 0xD7AD},{0x7BC7, 0xC6AA},{0x7BC8, 0xBA41},{0x7BC9, 0xBA42},{0x7BCA, 0xBA43},{0x7BCB, 0xBA44},{0x7BCC, 0xF3F3}, - {0x7BCD, 0xBA45},{0x7BCE, 0xBA46},{0x7BCF, 0xBA47},{0x7BD0, 0xBA48},{0x7BD1, 0xF3F1},{0x7BD2, 0xBA49},{0x7BD3, 0xC2A8},{0x7BD4, 0xBA4A}, - {0x7BD5, 0xBA4B},{0x7BD6, 0xBA4C},{0x7BD7, 0xBA4D},{0x7BD8, 0xBA4E},{0x7BD9, 0xB8DD},{0x7BDA, 0xF3F5},{0x7BDB, 0xBA4F},{0x7BDC, 0xBA50}, - {0x7BDD, 0xF3F4},{0x7BDE, 0xBA51},{0x7BDF, 0xBA52},{0x7BE0, 0xBA53},{0x7BE1, 0xB4DB},{0x7BE2, 0xBA54},{0x7BE3, 0xBA55},{0x7BE4, 0xBA56}, - {0x7BE5, 0xF3F6},{0x7BE6, 0xF3F7},{0x7BE7, 0xBA57},{0x7BE8, 0xBA58},{0x7BE9, 0xBA59},{0x7BEA, 0xF3F8},{0x7BEB, 0xBA5A},{0x7BEC, 0xBA5B}, - {0x7BED, 0xBA5C},{0x7BEE, 0xC0BA},{0x7BEF, 0xBA5D},{0x7BF0, 0xBA5E},{0x7BF1, 0xC0E9},{0x7BF2, 0xBA5F},{0x7BF3, 0xBA60},{0x7BF4, 0xBA61}, - {0x7BF5, 0xBA62},{0x7BF6, 0xBA63},{0x7BF7, 0xC5F1},{0x7BF8, 0xBA64},{0x7BF9, 0xBA65},{0x7BFA, 0xBA66},{0x7BFB, 0xBA67},{0x7BFC, 0xF3FB}, - {0x7BFD, 0xBA68},{0x7BFE, 0xF3FA},{0x7BFF, 0xBA69},{0x7C00, 0xBA6A},{0x7C01, 0xBA6B},{0x7C02, 0xBA6C},{0x7C03, 0xBA6D},{0x7C04, 0xBA6E}, - {0x7C05, 0xBA6F},{0x7C06, 0xBA70},{0x7C07, 0xB4D8},{0x7C08, 0xBA71},{0x7C09, 0xBA72},{0x7C0A, 0xBA73},{0x7C0B, 0xF3FE},{0x7C0C, 0xF3F9}, - {0x7C0D, 0xBA74},{0x7C0E, 0xBA75},{0x7C0F, 0xF3FC},{0x7C10, 0xBA76},{0x7C11, 0xBA77},{0x7C12, 0xBA78},{0x7C13, 0xBA79},{0x7C14, 0xBA7A}, - {0x7C15, 0xBA7B},{0x7C16, 0xF3FD},{0x7C17, 0xBA7C},{0x7C18, 0xBA7D},{0x7C19, 0xBA7E},{0x7C1A, 0xBA80},{0x7C1B, 0xBA81},{0x7C1C, 0xBA82}, - {0x7C1D, 0xBA83},{0x7C1E, 0xBA84},{0x7C1F, 0xF4A1},{0x7C20, 0xBA85},{0x7C21, 0xBA86},{0x7C22, 0xBA87},{0x7C23, 0xBA88},{0x7C24, 0xBA89}, - {0x7C25, 0xBA8A},{0x7C26, 0xF4A3},{0x7C27, 0xBBC9},{0x7C28, 0xBA8B},{0x7C29, 0xBA8C},{0x7C2A, 0xF4A2},{0x7C2B, 0xBA8D},{0x7C2C, 0xBA8E}, - {0x7C2D, 0xBA8F},{0x7C2E, 0xBA90},{0x7C2F, 0xBA91},{0x7C30, 0xBA92},{0x7C31, 0xBA93},{0x7C32, 0xBA94},{0x7C33, 0xBA95},{0x7C34, 0xBA96}, - {0x7C35, 0xBA97},{0x7C36, 0xBA98},{0x7C37, 0xBA99},{0x7C38, 0xF4A4},{0x7C39, 0xBA9A},{0x7C3A, 0xBA9B},{0x7C3B, 0xBA9C},{0x7C3C, 0xBA9D}, - {0x7C3D, 0xBA9E},{0x7C3E, 0xBA9F},{0x7C3F, 0xB2BE},{0x7C40, 0xF4A6},{0x7C41, 0xF4A5},{0x7C42, 0xBAA0},{0x7C43, 0xBB40},{0x7C44, 0xBB41}, - {0x7C45, 0xBB42},{0x7C46, 0xBB43},{0x7C47, 0xBB44},{0x7C48, 0xBB45},{0x7C49, 0xBB46},{0x7C4A, 0xBB47},{0x7C4B, 0xBB48},{0x7C4C, 0xBB49}, - {0x7C4D, 0xBCAE},{0x7C4E, 0xBB4A},{0x7C4F, 0xBB4B},{0x7C50, 0xBB4C},{0x7C51, 0xBB4D},{0x7C52, 0xBB4E},{0x7C53, 0xBB4F},{0x7C54, 0xBB50}, - {0x7C55, 0xBB51},{0x7C56, 0xBB52},{0x7C57, 0xBB53},{0x7C58, 0xBB54},{0x7C59, 0xBB55},{0x7C5A, 0xBB56},{0x7C5B, 0xBB57},{0x7C5C, 0xBB58}, - {0x7C5D, 0xBB59},{0x7C5E, 0xBB5A},{0x7C5F, 0xBB5B},{0x7C60, 0xBB5C},{0x7C61, 0xBB5D},{0x7C62, 0xBB5E},{0x7C63, 0xBB5F},{0x7C64, 0xBB60}, - {0x7C65, 0xBB61},{0x7C66, 0xBB62},{0x7C67, 0xBB63},{0x7C68, 0xBB64},{0x7C69, 0xBB65},{0x7C6A, 0xBB66},{0x7C6B, 0xBB67},{0x7C6C, 0xBB68}, - {0x7C6D, 0xBB69},{0x7C6E, 0xBB6A},{0x7C6F, 0xBB6B},{0x7C70, 0xBB6C},{0x7C71, 0xBB6D},{0x7C72, 0xBB6E},{0x7C73, 0xC3D7},{0x7C74, 0xD9E1}, - {0x7C75, 0xBB6F},{0x7C76, 0xBB70},{0x7C77, 0xBB71},{0x7C78, 0xBB72},{0x7C79, 0xBB73},{0x7C7A, 0xBB74},{0x7C7B, 0xC0E0},{0x7C7C, 0xF4CC}, - {0x7C7D, 0xD7D1},{0x7C7E, 0xBB75},{0x7C7F, 0xBB76},{0x7C80, 0xBB77},{0x7C81, 0xBB78},{0x7C82, 0xBB79},{0x7C83, 0xBB7A},{0x7C84, 0xBB7B}, - {0x7C85, 0xBB7C},{0x7C86, 0xBB7D},{0x7C87, 0xBB7E},{0x7C88, 0xBB80},{0x7C89, 0xB7DB},{0x7C8A, 0xBB81},{0x7C8B, 0xBB82},{0x7C8C, 0xBB83}, - {0x7C8D, 0xBB84},{0x7C8E, 0xBB85},{0x7C8F, 0xBB86},{0x7C90, 0xBB87},{0x7C91, 0xF4CE},{0x7C92, 0xC1A3},{0x7C93, 0xBB88},{0x7C94, 0xBB89}, - {0x7C95, 0xC6C9},{0x7C96, 0xBB8A},{0x7C97, 0xB4D6},{0x7C98, 0xD5B3},{0x7C99, 0xBB8B},{0x7C9A, 0xBB8C},{0x7C9B, 0xBB8D},{0x7C9C, 0xF4D0}, - {0x7C9D, 0xF4CF},{0x7C9E, 0xF4D1},{0x7C9F, 0xCBDA},{0x7CA0, 0xBB8E},{0x7CA1, 0xBB8F},{0x7CA2, 0xF4D2},{0x7CA3, 0xBB90},{0x7CA4, 0xD4C1}, - {0x7CA5, 0xD6E0},{0x7CA6, 0xBB91},{0x7CA7, 0xBB92},{0x7CA8, 0xBB93},{0x7CA9, 0xBB94},{0x7CAA, 0xB7E0},{0x7CAB, 0xBB95},{0x7CAC, 0xBB96}, - {0x7CAD, 0xBB97},{0x7CAE, 0xC1B8},{0x7CAF, 0xBB98},{0x7CB0, 0xBB99},{0x7CB1, 0xC1BB},{0x7CB2, 0xF4D3},{0x7CB3, 0xBEAC},{0x7CB4, 0xBB9A}, - {0x7CB5, 0xBB9B},{0x7CB6, 0xBB9C},{0x7CB7, 0xBB9D},{0x7CB8, 0xBB9E},{0x7CB9, 0xB4E2},{0x7CBA, 0xBB9F},{0x7CBB, 0xBBA0},{0x7CBC, 0xF4D4}, - {0x7CBD, 0xF4D5},{0x7CBE, 0xBEAB},{0x7CBF, 0xBC40},{0x7CC0, 0xBC41},{0x7CC1, 0xF4D6},{0x7CC2, 0xBC42},{0x7CC3, 0xBC43},{0x7CC4, 0xBC44}, - {0x7CC5, 0xF4DB},{0x7CC6, 0xBC45},{0x7CC7, 0xF4D7},{0x7CC8, 0xF4DA},{0x7CC9, 0xBC46},{0x7CCA, 0xBAFD},{0x7CCB, 0xBC47},{0x7CCC, 0xF4D8}, - {0x7CCD, 0xF4D9},{0x7CCE, 0xBC48},{0x7CCF, 0xBC49},{0x7CD0, 0xBC4A},{0x7CD1, 0xBC4B},{0x7CD2, 0xBC4C},{0x7CD3, 0xBC4D},{0x7CD4, 0xBC4E}, - {0x7CD5, 0xB8E2},{0x7CD6, 0xCCC7},{0x7CD7, 0xF4DC},{0x7CD8, 0xBC4F},{0x7CD9, 0xB2DA},{0x7CDA, 0xBC50},{0x7CDB, 0xBC51},{0x7CDC, 0xC3D3}, - {0x7CDD, 0xBC52},{0x7CDE, 0xBC53},{0x7CDF, 0xD4E3},{0x7CE0, 0xBFB7},{0x7CE1, 0xBC54},{0x7CE2, 0xBC55},{0x7CE3, 0xBC56},{0x7CE4, 0xBC57}, - {0x7CE5, 0xBC58},{0x7CE6, 0xBC59},{0x7CE7, 0xBC5A},{0x7CE8, 0xF4DD},{0x7CE9, 0xBC5B},{0x7CEA, 0xBC5C},{0x7CEB, 0xBC5D},{0x7CEC, 0xBC5E}, - {0x7CED, 0xBC5F},{0x7CEE, 0xBC60},{0x7CEF, 0xC5B4},{0x7CF0, 0xBC61},{0x7CF1, 0xBC62},{0x7CF2, 0xBC63},{0x7CF3, 0xBC64},{0x7CF4, 0xBC65}, - {0x7CF5, 0xBC66},{0x7CF6, 0xBC67},{0x7CF7, 0xBC68},{0x7CF8, 0xF4E9},{0x7CF9, 0xBC69},{0x7CFA, 0xBC6A},{0x7CFB, 0xCFB5},{0x7CFC, 0xBC6B}, - {0x7CFD, 0xBC6C},{0x7CFE, 0xBC6D},{0x7CFF, 0xBC6E},{0x7D00, 0xBC6F},{0x7D01, 0xBC70},{0x7D02, 0xBC71},{0x7D03, 0xBC72},{0x7D04, 0xBC73}, - {0x7D05, 0xBC74},{0x7D06, 0xBC75},{0x7D07, 0xBC76},{0x7D08, 0xBC77},{0x7D09, 0xBC78},{0x7D0A, 0xCEC9},{0x7D0B, 0xBC79},{0x7D0C, 0xBC7A}, - {0x7D0D, 0xBC7B},{0x7D0E, 0xBC7C},{0x7D0F, 0xBC7D},{0x7D10, 0xBC7E},{0x7D11, 0xBC80},{0x7D12, 0xBC81},{0x7D13, 0xBC82},{0x7D14, 0xBC83}, - {0x7D15, 0xBC84},{0x7D16, 0xBC85},{0x7D17, 0xBC86},{0x7D18, 0xBC87},{0x7D19, 0xBC88},{0x7D1A, 0xBC89},{0x7D1B, 0xBC8A},{0x7D1C, 0xBC8B}, - {0x7D1D, 0xBC8C},{0x7D1E, 0xBC8D},{0x7D1F, 0xBC8E},{0x7D20, 0xCBD8},{0x7D21, 0xBC8F},{0x7D22, 0xCBF7},{0x7D23, 0xBC90},{0x7D24, 0xBC91}, - {0x7D25, 0xBC92},{0x7D26, 0xBC93},{0x7D27, 0xBDF4},{0x7D28, 0xBC94},{0x7D29, 0xBC95},{0x7D2A, 0xBC96},{0x7D2B, 0xD7CF},{0x7D2C, 0xBC97}, - {0x7D2D, 0xBC98},{0x7D2E, 0xBC99},{0x7D2F, 0xC0DB},{0x7D30, 0xBC9A},{0x7D31, 0xBC9B},{0x7D32, 0xBC9C},{0x7D33, 0xBC9D},{0x7D34, 0xBC9E}, - {0x7D35, 0xBC9F},{0x7D36, 0xBCA0},{0x7D37, 0xBD40},{0x7D38, 0xBD41},{0x7D39, 0xBD42},{0x7D3A, 0xBD43},{0x7D3B, 0xBD44},{0x7D3C, 0xBD45}, - {0x7D3D, 0xBD46},{0x7D3E, 0xBD47},{0x7D3F, 0xBD48},{0x7D40, 0xBD49},{0x7D41, 0xBD4A},{0x7D42, 0xBD4B},{0x7D43, 0xBD4C},{0x7D44, 0xBD4D}, - {0x7D45, 0xBD4E},{0x7D46, 0xBD4F},{0x7D47, 0xBD50},{0x7D48, 0xBD51},{0x7D49, 0xBD52},{0x7D4A, 0xBD53},{0x7D4B, 0xBD54},{0x7D4C, 0xBD55}, - {0x7D4D, 0xBD56},{0x7D4E, 0xBD57},{0x7D4F, 0xBD58},{0x7D50, 0xBD59},{0x7D51, 0xBD5A},{0x7D52, 0xBD5B},{0x7D53, 0xBD5C},{0x7D54, 0xBD5D}, - {0x7D55, 0xBD5E},{0x7D56, 0xBD5F},{0x7D57, 0xBD60},{0x7D58, 0xBD61},{0x7D59, 0xBD62},{0x7D5A, 0xBD63},{0x7D5B, 0xBD64},{0x7D5C, 0xBD65}, - {0x7D5D, 0xBD66},{0x7D5E, 0xBD67},{0x7D5F, 0xBD68},{0x7D60, 0xBD69},{0x7D61, 0xBD6A},{0x7D62, 0xBD6B},{0x7D63, 0xBD6C},{0x7D64, 0xBD6D}, - {0x7D65, 0xBD6E},{0x7D66, 0xBD6F},{0x7D67, 0xBD70},{0x7D68, 0xBD71},{0x7D69, 0xBD72},{0x7D6A, 0xBD73},{0x7D6B, 0xBD74},{0x7D6C, 0xBD75}, - {0x7D6D, 0xBD76},{0x7D6E, 0xD0F5},{0x7D6F, 0xBD77},{0x7D70, 0xBD78},{0x7D71, 0xBD79},{0x7D72, 0xBD7A},{0x7D73, 0xBD7B},{0x7D74, 0xBD7C}, - {0x7D75, 0xBD7D},{0x7D76, 0xBD7E},{0x7D77, 0xF4EA},{0x7D78, 0xBD80},{0x7D79, 0xBD81},{0x7D7A, 0xBD82},{0x7D7B, 0xBD83},{0x7D7C, 0xBD84}, - {0x7D7D, 0xBD85},{0x7D7E, 0xBD86},{0x7D7F, 0xBD87},{0x7D80, 0xBD88},{0x7D81, 0xBD89},{0x7D82, 0xBD8A},{0x7D83, 0xBD8B},{0x7D84, 0xBD8C}, - {0x7D85, 0xBD8D},{0x7D86, 0xBD8E},{0x7D87, 0xBD8F},{0x7D88, 0xBD90},{0x7D89, 0xBD91},{0x7D8A, 0xBD92},{0x7D8B, 0xBD93},{0x7D8C, 0xBD94}, - {0x7D8D, 0xBD95},{0x7D8E, 0xBD96},{0x7D8F, 0xBD97},{0x7D90, 0xBD98},{0x7D91, 0xBD99},{0x7D92, 0xBD9A},{0x7D93, 0xBD9B},{0x7D94, 0xBD9C}, - {0x7D95, 0xBD9D},{0x7D96, 0xBD9E},{0x7D97, 0xBD9F},{0x7D98, 0xBDA0},{0x7D99, 0xBE40},{0x7D9A, 0xBE41},{0x7D9B, 0xBE42},{0x7D9C, 0xBE43}, - {0x7D9D, 0xBE44},{0x7D9E, 0xBE45},{0x7D9F, 0xBE46},{0x7DA0, 0xBE47},{0x7DA1, 0xBE48},{0x7DA2, 0xBE49},{0x7DA3, 0xBE4A},{0x7DA4, 0xBE4B}, - {0x7DA5, 0xBE4C},{0x7DA6, 0xF4EB},{0x7DA7, 0xBE4D},{0x7DA8, 0xBE4E},{0x7DA9, 0xBE4F},{0x7DAA, 0xBE50},{0x7DAB, 0xBE51},{0x7DAC, 0xBE52}, - {0x7DAD, 0xBE53},{0x7DAE, 0xF4EC},{0x7DAF, 0xBE54},{0x7DB0, 0xBE55},{0x7DB1, 0xBE56},{0x7DB2, 0xBE57},{0x7DB3, 0xBE58},{0x7DB4, 0xBE59}, - {0x7DB5, 0xBE5A},{0x7DB6, 0xBE5B},{0x7DB7, 0xBE5C},{0x7DB8, 0xBE5D},{0x7DB9, 0xBE5E},{0x7DBA, 0xBE5F},{0x7DBB, 0xBE60},{0x7DBC, 0xBE61}, - {0x7DBD, 0xBE62},{0x7DBE, 0xBE63},{0x7DBF, 0xBE64},{0x7DC0, 0xBE65},{0x7DC1, 0xBE66},{0x7DC2, 0xBE67},{0x7DC3, 0xBE68},{0x7DC4, 0xBE69}, - {0x7DC5, 0xBE6A},{0x7DC6, 0xBE6B},{0x7DC7, 0xBE6C},{0x7DC8, 0xBE6D},{0x7DC9, 0xBE6E},{0x7DCA, 0xBE6F},{0x7DCB, 0xBE70},{0x7DCC, 0xBE71}, - {0x7DCD, 0xBE72},{0x7DCE, 0xBE73},{0x7DCF, 0xBE74},{0x7DD0, 0xBE75},{0x7DD1, 0xBE76},{0x7DD2, 0xBE77},{0x7DD3, 0xBE78},{0x7DD4, 0xBE79}, - {0x7DD5, 0xBE7A},{0x7DD6, 0xBE7B},{0x7DD7, 0xBE7C},{0x7DD8, 0xBE7D},{0x7DD9, 0xBE7E},{0x7DDA, 0xBE80},{0x7DDB, 0xBE81},{0x7DDC, 0xBE82}, - {0x7DDD, 0xBE83},{0x7DDE, 0xBE84},{0x7DDF, 0xBE85},{0x7DE0, 0xBE86},{0x7DE1, 0xBE87},{0x7DE2, 0xBE88},{0x7DE3, 0xBE89},{0x7DE4, 0xBE8A}, - {0x7DE5, 0xBE8B},{0x7DE6, 0xBE8C},{0x7DE7, 0xBE8D},{0x7DE8, 0xBE8E},{0x7DE9, 0xBE8F},{0x7DEA, 0xBE90},{0x7DEB, 0xBE91},{0x7DEC, 0xBE92}, - {0x7DED, 0xBE93},{0x7DEE, 0xBE94},{0x7DEF, 0xBE95},{0x7DF0, 0xBE96},{0x7DF1, 0xBE97},{0x7DF2, 0xBE98},{0x7DF3, 0xBE99},{0x7DF4, 0xBE9A}, - {0x7DF5, 0xBE9B},{0x7DF6, 0xBE9C},{0x7DF7, 0xBE9D},{0x7DF8, 0xBE9E},{0x7DF9, 0xBE9F},{0x7DFA, 0xBEA0},{0x7DFB, 0xBF40},{0x7DFC, 0xBF41}, - {0x7DFD, 0xBF42},{0x7DFE, 0xBF43},{0x7DFF, 0xBF44},{0x7E00, 0xBF45},{0x7E01, 0xBF46},{0x7E02, 0xBF47},{0x7E03, 0xBF48},{0x7E04, 0xBF49}, - {0x7E05, 0xBF4A},{0x7E06, 0xBF4B},{0x7E07, 0xBF4C},{0x7E08, 0xBF4D},{0x7E09, 0xBF4E},{0x7E0A, 0xBF4F},{0x7E0B, 0xBF50},{0x7E0C, 0xBF51}, - {0x7E0D, 0xBF52},{0x7E0E, 0xBF53},{0x7E0F, 0xBF54},{0x7E10, 0xBF55},{0x7E11, 0xBF56},{0x7E12, 0xBF57},{0x7E13, 0xBF58},{0x7E14, 0xBF59}, - {0x7E15, 0xBF5A},{0x7E16, 0xBF5B},{0x7E17, 0xBF5C},{0x7E18, 0xBF5D},{0x7E19, 0xBF5E},{0x7E1A, 0xBF5F},{0x7E1B, 0xBF60},{0x7E1C, 0xBF61}, - {0x7E1D, 0xBF62},{0x7E1E, 0xBF63},{0x7E1F, 0xBF64},{0x7E20, 0xBF65},{0x7E21, 0xBF66},{0x7E22, 0xBF67},{0x7E23, 0xBF68},{0x7E24, 0xBF69}, - {0x7E25, 0xBF6A},{0x7E26, 0xBF6B},{0x7E27, 0xBF6C},{0x7E28, 0xBF6D},{0x7E29, 0xBF6E},{0x7E2A, 0xBF6F},{0x7E2B, 0xBF70},{0x7E2C, 0xBF71}, - {0x7E2D, 0xBF72},{0x7E2E, 0xBF73},{0x7E2F, 0xBF74},{0x7E30, 0xBF75},{0x7E31, 0xBF76},{0x7E32, 0xBF77},{0x7E33, 0xBF78},{0x7E34, 0xBF79}, - {0x7E35, 0xBF7A},{0x7E36, 0xBF7B},{0x7E37, 0xBF7C},{0x7E38, 0xBF7D},{0x7E39, 0xBF7E},{0x7E3A, 0xBF80},{0x7E3B, 0xF7E3},{0x7E3C, 0xBF81}, - {0x7E3D, 0xBF82},{0x7E3E, 0xBF83},{0x7E3F, 0xBF84},{0x7E40, 0xBF85},{0x7E41, 0xB7B1},{0x7E42, 0xBF86},{0x7E43, 0xBF87},{0x7E44, 0xBF88}, - {0x7E45, 0xBF89},{0x7E46, 0xBF8A},{0x7E47, 0xF4ED},{0x7E48, 0xBF8B},{0x7E49, 0xBF8C},{0x7E4A, 0xBF8D},{0x7E4B, 0xBF8E},{0x7E4C, 0xBF8F}, - {0x7E4D, 0xBF90},{0x7E4E, 0xBF91},{0x7E4F, 0xBF92},{0x7E50, 0xBF93},{0x7E51, 0xBF94},{0x7E52, 0xBF95},{0x7E53, 0xBF96},{0x7E54, 0xBF97}, - {0x7E55, 0xBF98},{0x7E56, 0xBF99},{0x7E57, 0xBF9A},{0x7E58, 0xBF9B},{0x7E59, 0xBF9C},{0x7E5A, 0xBF9D},{0x7E5B, 0xBF9E},{0x7E5C, 0xBF9F}, - {0x7E5D, 0xBFA0},{0x7E5E, 0xC040},{0x7E5F, 0xC041},{0x7E60, 0xC042},{0x7E61, 0xC043},{0x7E62, 0xC044},{0x7E63, 0xC045},{0x7E64, 0xC046}, - {0x7E65, 0xC047},{0x7E66, 0xC048},{0x7E67, 0xC049},{0x7E68, 0xC04A},{0x7E69, 0xC04B},{0x7E6A, 0xC04C},{0x7E6B, 0xC04D},{0x7E6C, 0xC04E}, - {0x7E6D, 0xC04F},{0x7E6E, 0xC050},{0x7E6F, 0xC051},{0x7E70, 0xC052},{0x7E71, 0xC053},{0x7E72, 0xC054},{0x7E73, 0xC055},{0x7E74, 0xC056}, - {0x7E75, 0xC057},{0x7E76, 0xC058},{0x7E77, 0xC059},{0x7E78, 0xC05A},{0x7E79, 0xC05B},{0x7E7A, 0xC05C},{0x7E7B, 0xC05D},{0x7E7C, 0xC05E}, - {0x7E7D, 0xC05F},{0x7E7E, 0xC060},{0x7E7F, 0xC061},{0x7E80, 0xC062},{0x7E81, 0xC063},{0x7E82, 0xD7EB},{0x7E83, 0xC064},{0x7E84, 0xC065}, - {0x7E85, 0xC066},{0x7E86, 0xC067},{0x7E87, 0xC068},{0x7E88, 0xC069},{0x7E89, 0xC06A},{0x7E8A, 0xC06B},{0x7E8B, 0xC06C},{0x7E8C, 0xC06D}, - {0x7E8D, 0xC06E},{0x7E8E, 0xC06F},{0x7E8F, 0xC070},{0x7E90, 0xC071},{0x7E91, 0xC072},{0x7E92, 0xC073},{0x7E93, 0xC074},{0x7E94, 0xC075}, - {0x7E95, 0xC076},{0x7E96, 0xC077},{0x7E97, 0xC078},{0x7E98, 0xC079},{0x7E99, 0xC07A},{0x7E9A, 0xC07B},{0x7E9B, 0xF4EE},{0x7E9C, 0xC07C}, - {0x7E9D, 0xC07D},{0x7E9E, 0xC07E},{0x7E9F, 0xE6F9},{0x7EA0, 0xBEC0},{0x7EA1, 0xE6FA},{0x7EA2, 0xBAEC},{0x7EA3, 0xE6FB},{0x7EA4, 0xCFCB}, - {0x7EA5, 0xE6FC},{0x7EA6, 0xD4BC},{0x7EA7, 0xBCB6},{0x7EA8, 0xE6FD},{0x7EA9, 0xE6FE},{0x7EAA, 0xBCCD},{0x7EAB, 0xC8D2},{0x7EAC, 0xCEB3}, - {0x7EAD, 0xE7A1},{0x7EAE, 0xC080},{0x7EAF, 0xB4BF},{0x7EB0, 0xE7A2},{0x7EB1, 0xC9B4},{0x7EB2, 0xB8D9},{0x7EB3, 0xC4C9},{0x7EB4, 0xC081}, - {0x7EB5, 0xD7DD},{0x7EB6, 0xC2DA},{0x7EB7, 0xB7D7},{0x7EB8, 0xD6BD},{0x7EB9, 0xCEC6},{0x7EBA, 0xB7C4},{0x7EBB, 0xC082},{0x7EBC, 0xC083}, - {0x7EBD, 0xC5A6},{0x7EBE, 0xE7A3},{0x7EBF, 0xCFDF},{0x7EC0, 0xE7A4},{0x7EC1, 0xE7A5},{0x7EC2, 0xE7A6},{0x7EC3, 0xC1B7},{0x7EC4, 0xD7E9}, - {0x7EC5, 0xC9F0},{0x7EC6, 0xCFB8},{0x7EC7, 0xD6AF},{0x7EC8, 0xD6D5},{0x7EC9, 0xE7A7},{0x7ECA, 0xB0ED},{0x7ECB, 0xE7A8},{0x7ECC, 0xE7A9}, - {0x7ECD, 0xC9DC},{0x7ECE, 0xD2EF},{0x7ECF, 0xBEAD},{0x7ED0, 0xE7AA},{0x7ED1, 0xB0F3},{0x7ED2, 0xC8DE},{0x7ED3, 0xBDE1},{0x7ED4, 0xE7AB}, - {0x7ED5, 0xC8C6},{0x7ED6, 0xC084},{0x7ED7, 0xE7AC},{0x7ED8, 0xBBE6},{0x7ED9, 0xB8F8},{0x7EDA, 0xD1A4},{0x7EDB, 0xE7AD},{0x7EDC, 0xC2E7}, - {0x7EDD, 0xBEF8},{0x7EDE, 0xBDCA},{0x7EDF, 0xCDB3},{0x7EE0, 0xE7AE},{0x7EE1, 0xE7AF},{0x7EE2, 0xBEEE},{0x7EE3, 0xD0E5},{0x7EE4, 0xC085}, - {0x7EE5, 0xCBE7},{0x7EE6, 0xCCD0},{0x7EE7, 0xBCCC},{0x7EE8, 0xE7B0},{0x7EE9, 0xBCA8},{0x7EEA, 0xD0F7},{0x7EEB, 0xE7B1},{0x7EEC, 0xC086}, - {0x7EED, 0xD0F8},{0x7EEE, 0xE7B2},{0x7EEF, 0xE7B3},{0x7EF0, 0xB4C2},{0x7EF1, 0xE7B4},{0x7EF2, 0xE7B5},{0x7EF3, 0xC9FE},{0x7EF4, 0xCEAC}, - {0x7EF5, 0xC3E0},{0x7EF6, 0xE7B7},{0x7EF7, 0xB1C1},{0x7EF8, 0xB3F1},{0x7EF9, 0xC087},{0x7EFA, 0xE7B8},{0x7EFB, 0xE7B9},{0x7EFC, 0xD7DB}, - {0x7EFD, 0xD5C0},{0x7EFE, 0xE7BA},{0x7EFF, 0xC2CC},{0x7F00, 0xD7BA},{0x7F01, 0xE7BB},{0x7F02, 0xE7BC},{0x7F03, 0xE7BD},{0x7F04, 0xBCEA}, - {0x7F05, 0xC3E5},{0x7F06, 0xC0C2},{0x7F07, 0xE7BE},{0x7F08, 0xE7BF},{0x7F09, 0xBCA9},{0x7F0A, 0xC088},{0x7F0B, 0xE7C0},{0x7F0C, 0xE7C1}, - {0x7F0D, 0xE7B6},{0x7F0E, 0xB6D0},{0x7F0F, 0xE7C2},{0x7F10, 0xC089},{0x7F11, 0xE7C3},{0x7F12, 0xE7C4},{0x7F13, 0xBBBA},{0x7F14, 0xB5DE}, - {0x7F15, 0xC2C6},{0x7F16, 0xB1E0},{0x7F17, 0xE7C5},{0x7F18, 0xD4B5},{0x7F19, 0xE7C6},{0x7F1A, 0xB8BF},{0x7F1B, 0xE7C8},{0x7F1C, 0xE7C7}, - {0x7F1D, 0xB7EC},{0x7F1E, 0xC08A},{0x7F1F, 0xE7C9},{0x7F20, 0xB2F8},{0x7F21, 0xE7CA},{0x7F22, 0xE7CB},{0x7F23, 0xE7CC},{0x7F24, 0xE7CD}, - {0x7F25, 0xE7CE},{0x7F26, 0xE7CF},{0x7F27, 0xE7D0},{0x7F28, 0xD3A7},{0x7F29, 0xCBF5},{0x7F2A, 0xE7D1},{0x7F2B, 0xE7D2},{0x7F2C, 0xE7D3}, - {0x7F2D, 0xE7D4},{0x7F2E, 0xC9C9},{0x7F2F, 0xE7D5},{0x7F30, 0xE7D6},{0x7F31, 0xE7D7},{0x7F32, 0xE7D8},{0x7F33, 0xE7D9},{0x7F34, 0xBDC9}, - {0x7F35, 0xE7DA},{0x7F36, 0xF3BE},{0x7F37, 0xC08B},{0x7F38, 0xB8D7},{0x7F39, 0xC08C},{0x7F3A, 0xC8B1},{0x7F3B, 0xC08D},{0x7F3C, 0xC08E}, - {0x7F3D, 0xC08F},{0x7F3E, 0xC090},{0x7F3F, 0xC091},{0x7F40, 0xC092},{0x7F41, 0xC093},{0x7F42, 0xF3BF},{0x7F43, 0xC094},{0x7F44, 0xF3C0}, - {0x7F45, 0xF3C1},{0x7F46, 0xC095},{0x7F47, 0xC096},{0x7F48, 0xC097},{0x7F49, 0xC098},{0x7F4A, 0xC099},{0x7F4B, 0xC09A},{0x7F4C, 0xC09B}, - {0x7F4D, 0xC09C},{0x7F4E, 0xC09D},{0x7F4F, 0xC09E},{0x7F50, 0xB9DE},{0x7F51, 0xCDF8},{0x7F52, 0xC09F},{0x7F53, 0xC0A0},{0x7F54, 0xD8E8}, - {0x7F55, 0xBAB1},{0x7F56, 0xC140},{0x7F57, 0xC2DE},{0x7F58, 0xEEB7},{0x7F59, 0xC141},{0x7F5A, 0xB7A3},{0x7F5B, 0xC142},{0x7F5C, 0xC143}, - {0x7F5D, 0xC144},{0x7F5E, 0xC145},{0x7F5F, 0xEEB9},{0x7F60, 0xC146},{0x7F61, 0xEEB8},{0x7F62, 0xB0D5},{0x7F63, 0xC147},{0x7F64, 0xC148}, - {0x7F65, 0xC149},{0x7F66, 0xC14A},{0x7F67, 0xC14B},{0x7F68, 0xEEBB},{0x7F69, 0xD5D6},{0x7F6A, 0xD7EF},{0x7F6B, 0xC14C},{0x7F6C, 0xC14D}, - {0x7F6D, 0xC14E},{0x7F6E, 0xD6C3},{0x7F6F, 0xC14F},{0x7F70, 0xC150},{0x7F71, 0xEEBD},{0x7F72, 0xCAF0},{0x7F73, 0xC151},{0x7F74, 0xEEBC}, - {0x7F75, 0xC152},{0x7F76, 0xC153},{0x7F77, 0xC154},{0x7F78, 0xC155},{0x7F79, 0xEEBE},{0x7F7A, 0xC156},{0x7F7B, 0xC157},{0x7F7C, 0xC158}, - {0x7F7D, 0xC159},{0x7F7E, 0xEEC0},{0x7F7F, 0xC15A},{0x7F80, 0xC15B},{0x7F81, 0xEEBF},{0x7F82, 0xC15C},{0x7F83, 0xC15D},{0x7F84, 0xC15E}, - {0x7F85, 0xC15F},{0x7F86, 0xC160},{0x7F87, 0xC161},{0x7F88, 0xC162},{0x7F89, 0xC163},{0x7F8A, 0xD1F2},{0x7F8B, 0xC164},{0x7F8C, 0xC7BC}, - {0x7F8D, 0xC165},{0x7F8E, 0xC3C0},{0x7F8F, 0xC166},{0x7F90, 0xC167},{0x7F91, 0xC168},{0x7F92, 0xC169},{0x7F93, 0xC16A},{0x7F94, 0xB8E1}, - {0x7F95, 0xC16B},{0x7F96, 0xC16C},{0x7F97, 0xC16D},{0x7F98, 0xC16E},{0x7F99, 0xC16F},{0x7F9A, 0xC1E7},{0x7F9B, 0xC170},{0x7F9C, 0xC171}, - {0x7F9D, 0xF4C6},{0x7F9E, 0xD0DF},{0x7F9F, 0xF4C7},{0x7FA0, 0xC172},{0x7FA1, 0xCFDB},{0x7FA2, 0xC173},{0x7FA3, 0xC174},{0x7FA4, 0xC8BA}, - {0x7FA5, 0xC175},{0x7FA6, 0xC176},{0x7FA7, 0xF4C8},{0x7FA8, 0xC177},{0x7FA9, 0xC178},{0x7FAA, 0xC179},{0x7FAB, 0xC17A},{0x7FAC, 0xC17B}, - {0x7FAD, 0xC17C},{0x7FAE, 0xC17D},{0x7FAF, 0xF4C9},{0x7FB0, 0xF4CA},{0x7FB1, 0xC17E},{0x7FB2, 0xF4CB},{0x7FB3, 0xC180},{0x7FB4, 0xC181}, - {0x7FB5, 0xC182},{0x7FB6, 0xC183},{0x7FB7, 0xC184},{0x7FB8, 0xD9FA},{0x7FB9, 0xB8FE},{0x7FBA, 0xC185},{0x7FBB, 0xC186},{0x7FBC, 0xE5F1}, - {0x7FBD, 0xD3F0},{0x7FBE, 0xC187},{0x7FBF, 0xF4E0},{0x7FC0, 0xC188},{0x7FC1, 0xCECC},{0x7FC2, 0xC189},{0x7FC3, 0xC18A},{0x7FC4, 0xC18B}, - {0x7FC5, 0xB3E1},{0x7FC6, 0xC18C},{0x7FC7, 0xC18D},{0x7FC8, 0xC18E},{0x7FC9, 0xC18F},{0x7FCA, 0xF1B4},{0x7FCB, 0xC190},{0x7FCC, 0xD2EE}, - {0x7FCD, 0xC191},{0x7FCE, 0xF4E1},{0x7FCF, 0xC192},{0x7FD0, 0xC193},{0x7FD1, 0xC194},{0x7FD2, 0xC195},{0x7FD3, 0xC196},{0x7FD4, 0xCFE8}, - {0x7FD5, 0xF4E2},{0x7FD6, 0xC197},{0x7FD7, 0xC198},{0x7FD8, 0xC7CC},{0x7FD9, 0xC199},{0x7FDA, 0xC19A},{0x7FDB, 0xC19B},{0x7FDC, 0xC19C}, - {0x7FDD, 0xC19D},{0x7FDE, 0xC19E},{0x7FDF, 0xB5D4},{0x7FE0, 0xB4E4},{0x7FE1, 0xF4E4},{0x7FE2, 0xC19F},{0x7FE3, 0xC1A0},{0x7FE4, 0xC240}, - {0x7FE5, 0xF4E3},{0x7FE6, 0xF4E5},{0x7FE7, 0xC241},{0x7FE8, 0xC242},{0x7FE9, 0xF4E6},{0x7FEA, 0xC243},{0x7FEB, 0xC244},{0x7FEC, 0xC245}, - {0x7FED, 0xC246},{0x7FEE, 0xF4E7},{0x7FEF, 0xC247},{0x7FF0, 0xBAB2},{0x7FF1, 0xB0BF},{0x7FF2, 0xC248},{0x7FF3, 0xF4E8},{0x7FF4, 0xC249}, - {0x7FF5, 0xC24A},{0x7FF6, 0xC24B},{0x7FF7, 0xC24C},{0x7FF8, 0xC24D},{0x7FF9, 0xC24E},{0x7FFA, 0xC24F},{0x7FFB, 0xB7AD},{0x7FFC, 0xD2ED}, - {0x7FFD, 0xC250},{0x7FFE, 0xC251},{0x7FFF, 0xC252},{0x8000, 0xD2AB},{0x8001, 0xC0CF},{0x8002, 0xC253},{0x8003, 0xBFBC},{0x8004, 0xEBA3}, - {0x8005, 0xD5DF},{0x8006, 0xEAC8},{0x8007, 0xC254},{0x8008, 0xC255},{0x8009, 0xC256},{0x800A, 0xC257},{0x800B, 0xF1F3},{0x800C, 0xB6F8}, - {0x800D, 0xCBA3},{0x800E, 0xC258},{0x800F, 0xC259},{0x8010, 0xC4CD},{0x8011, 0xC25A},{0x8012, 0xF1E7},{0x8013, 0xC25B},{0x8014, 0xF1E8}, - {0x8015, 0xB8FB},{0x8016, 0xF1E9},{0x8017, 0xBAC4},{0x8018, 0xD4C5},{0x8019, 0xB0D2},{0x801A, 0xC25C},{0x801B, 0xC25D},{0x801C, 0xF1EA}, - {0x801D, 0xC25E},{0x801E, 0xC25F},{0x801F, 0xC260},{0x8020, 0xF1EB},{0x8021, 0xC261},{0x8022, 0xF1EC},{0x8023, 0xC262},{0x8024, 0xC263}, - {0x8025, 0xF1ED},{0x8026, 0xF1EE},{0x8027, 0xF1EF},{0x8028, 0xF1F1},{0x8029, 0xF1F0},{0x802A, 0xC5D5},{0x802B, 0xC264},{0x802C, 0xC265}, - {0x802D, 0xC266},{0x802E, 0xC267},{0x802F, 0xC268},{0x8030, 0xC269},{0x8031, 0xF1F2},{0x8032, 0xC26A},{0x8033, 0xB6FA},{0x8034, 0xC26B}, - {0x8035, 0xF1F4},{0x8036, 0xD2AE},{0x8037, 0xDEC7},{0x8038, 0xCBCA},{0x8039, 0xC26C},{0x803A, 0xC26D},{0x803B, 0xB3DC},{0x803C, 0xC26E}, - {0x803D, 0xB5A2},{0x803E, 0xC26F},{0x803F, 0xB9A2},{0x8040, 0xC270},{0x8041, 0xC271},{0x8042, 0xC4F4},{0x8043, 0xF1F5},{0x8044, 0xC272}, - {0x8045, 0xC273},{0x8046, 0xF1F6},{0x8047, 0xC274},{0x8048, 0xC275},{0x8049, 0xC276},{0x804A, 0xC1C4},{0x804B, 0xC1FB},{0x804C, 0xD6B0}, - {0x804D, 0xF1F7},{0x804E, 0xC277},{0x804F, 0xC278},{0x8050, 0xC279},{0x8051, 0xC27A},{0x8052, 0xF1F8},{0x8053, 0xC27B},{0x8054, 0xC1AA}, - {0x8055, 0xC27C},{0x8056, 0xC27D},{0x8057, 0xC27E},{0x8058, 0xC6B8},{0x8059, 0xC280},{0x805A, 0xBEDB},{0x805B, 0xC281},{0x805C, 0xC282}, - {0x805D, 0xC283},{0x805E, 0xC284},{0x805F, 0xC285},{0x8060, 0xC286},{0x8061, 0xC287},{0x8062, 0xC288},{0x8063, 0xC289},{0x8064, 0xC28A}, - {0x8065, 0xC28B},{0x8066, 0xC28C},{0x8067, 0xC28D},{0x8068, 0xC28E},{0x8069, 0xF1F9},{0x806A, 0xB4CF},{0x806B, 0xC28F},{0x806C, 0xC290}, - {0x806D, 0xC291},{0x806E, 0xC292},{0x806F, 0xC293},{0x8070, 0xC294},{0x8071, 0xF1FA},{0x8072, 0xC295},{0x8073, 0xC296},{0x8074, 0xC297}, - {0x8075, 0xC298},{0x8076, 0xC299},{0x8077, 0xC29A},{0x8078, 0xC29B},{0x8079, 0xC29C},{0x807A, 0xC29D},{0x807B, 0xC29E},{0x807C, 0xC29F}, - {0x807D, 0xC2A0},{0x807E, 0xC340},{0x807F, 0xEDB2},{0x8080, 0xEDB1},{0x8081, 0xC341},{0x8082, 0xC342},{0x8083, 0xCBE0},{0x8084, 0xD2DE}, - {0x8085, 0xC343},{0x8086, 0xCBC1},{0x8087, 0xD5D8},{0x8088, 0xC344},{0x8089, 0xC8E2},{0x808A, 0xC345},{0x808B, 0xC0DF},{0x808C, 0xBCA1}, - {0x808D, 0xC346},{0x808E, 0xC347},{0x808F, 0xC348},{0x8090, 0xC349},{0x8091, 0xC34A},{0x8092, 0xC34B},{0x8093, 0xEBC1},{0x8094, 0xC34C}, - {0x8095, 0xC34D},{0x8096, 0xD0A4},{0x8097, 0xC34E},{0x8098, 0xD6E2},{0x8099, 0xC34F},{0x809A, 0xB6C7},{0x809B, 0xB8D8},{0x809C, 0xEBC0}, - {0x809D, 0xB8CE},{0x809E, 0xC350},{0x809F, 0xEBBF},{0x80A0, 0xB3A6},{0x80A1, 0xB9C9},{0x80A2, 0xD6AB},{0x80A3, 0xC351},{0x80A4, 0xB7F4}, - {0x80A5, 0xB7CA},{0x80A6, 0xC352},{0x80A7, 0xC353},{0x80A8, 0xC354},{0x80A9, 0xBCE7},{0x80AA, 0xB7BE},{0x80AB, 0xEBC6},{0x80AC, 0xC355}, - {0x80AD, 0xEBC7},{0x80AE, 0xB0B9},{0x80AF, 0xBFCF},{0x80B0, 0xC356},{0x80B1, 0xEBC5},{0x80B2, 0xD3FD},{0x80B3, 0xC357},{0x80B4, 0xEBC8}, - {0x80B5, 0xC358},{0x80B6, 0xC359},{0x80B7, 0xEBC9},{0x80B8, 0xC35A},{0x80B9, 0xC35B},{0x80BA, 0xB7CE},{0x80BB, 0xC35C},{0x80BC, 0xEBC2}, - {0x80BD, 0xEBC4},{0x80BE, 0xC9F6},{0x80BF, 0xD6D7},{0x80C0, 0xD5CD},{0x80C1, 0xD0B2},{0x80C2, 0xEBCF},{0x80C3, 0xCEB8},{0x80C4, 0xEBD0}, - {0x80C5, 0xC35D},{0x80C6, 0xB5A8},{0x80C7, 0xC35E},{0x80C8, 0xC35F},{0x80C9, 0xC360},{0x80CA, 0xC361},{0x80CB, 0xC362},{0x80CC, 0xB1B3}, - {0x80CD, 0xEBD2},{0x80CE, 0xCCA5},{0x80CF, 0xC363},{0x80D0, 0xC364},{0x80D1, 0xC365},{0x80D2, 0xC366},{0x80D3, 0xC367},{0x80D4, 0xC368}, - {0x80D5, 0xC369},{0x80D6, 0xC5D6},{0x80D7, 0xEBD3},{0x80D8, 0xC36A},{0x80D9, 0xEBD1},{0x80DA, 0xC5DF},{0x80DB, 0xEBCE},{0x80DC, 0xCAA4}, - {0x80DD, 0xEBD5},{0x80DE, 0xB0FB},{0x80DF, 0xC36B},{0x80E0, 0xC36C},{0x80E1, 0xBAFA},{0x80E2, 0xC36D},{0x80E3, 0xC36E},{0x80E4, 0xD8B7}, - {0x80E5, 0xF1E3},{0x80E6, 0xC36F},{0x80E7, 0xEBCA},{0x80E8, 0xEBCB},{0x80E9, 0xEBCC},{0x80EA, 0xEBCD},{0x80EB, 0xEBD6},{0x80EC, 0xE6C0}, - {0x80ED, 0xEBD9},{0x80EE, 0xC370},{0x80EF, 0xBFE8},{0x80F0, 0xD2C8},{0x80F1, 0xEBD7},{0x80F2, 0xEBDC},{0x80F3, 0xB8EC},{0x80F4, 0xEBD8}, - {0x80F5, 0xC371},{0x80F6, 0xBDBA},{0x80F7, 0xC372},{0x80F8, 0xD0D8},{0x80F9, 0xC373},{0x80FA, 0xB0B7},{0x80FB, 0xC374},{0x80FC, 0xEBDD}, - {0x80FD, 0xC4DC},{0x80FE, 0xC375},{0x80FF, 0xC376},{0x8100, 0xC377},{0x8101, 0xC378},{0x8102, 0xD6AC},{0x8103, 0xC379},{0x8104, 0xC37A}, - {0x8105, 0xC37B},{0x8106, 0xB4E0},{0x8107, 0xC37C},{0x8108, 0xC37D},{0x8109, 0xC2F6},{0x810A, 0xBCB9},{0x810B, 0xC37E},{0x810C, 0xC380}, - {0x810D, 0xEBDA},{0x810E, 0xEBDB},{0x810F, 0xD4E0},{0x8110, 0xC6EA},{0x8111, 0xC4D4},{0x8112, 0xEBDF},{0x8113, 0xC5A7},{0x8114, 0xD9F5}, - {0x8115, 0xC381},{0x8116, 0xB2B1},{0x8117, 0xC382},{0x8118, 0xEBE4},{0x8119, 0xC383},{0x811A, 0xBDC5},{0x811B, 0xC384},{0x811C, 0xC385}, - {0x811D, 0xC386},{0x811E, 0xEBE2},{0x811F, 0xC387},{0x8120, 0xC388},{0x8121, 0xC389},{0x8122, 0xC38A},{0x8123, 0xC38B},{0x8124, 0xC38C}, - {0x8125, 0xC38D},{0x8126, 0xC38E},{0x8127, 0xC38F},{0x8128, 0xC390},{0x8129, 0xC391},{0x812A, 0xC392},{0x812B, 0xC393},{0x812C, 0xEBE3}, - {0x812D, 0xC394},{0x812E, 0xC395},{0x812F, 0xB8AC},{0x8130, 0xC396},{0x8131, 0xCDD1},{0x8132, 0xEBE5},{0x8133, 0xC397},{0x8134, 0xC398}, - {0x8135, 0xC399},{0x8136, 0xEBE1},{0x8137, 0xC39A},{0x8138, 0xC1B3},{0x8139, 0xC39B},{0x813A, 0xC39C},{0x813B, 0xC39D},{0x813C, 0xC39E}, - {0x813D, 0xC39F},{0x813E, 0xC6A2},{0x813F, 0xC3A0},{0x8140, 0xC440},{0x8141, 0xC441},{0x8142, 0xC442},{0x8143, 0xC443},{0x8144, 0xC444}, - {0x8145, 0xC445},{0x8146, 0xCCF3},{0x8147, 0xC446},{0x8148, 0xEBE6},{0x8149, 0xC447},{0x814A, 0xC0B0},{0x814B, 0xD2B8},{0x814C, 0xEBE7}, - {0x814D, 0xC448},{0x814E, 0xC449},{0x814F, 0xC44A},{0x8150, 0xB8AF},{0x8151, 0xB8AD},{0x8152, 0xC44B},{0x8153, 0xEBE8},{0x8154, 0xC7BB}, - {0x8155, 0xCDF3},{0x8156, 0xC44C},{0x8157, 0xC44D},{0x8158, 0xC44E},{0x8159, 0xEBEA},{0x815A, 0xEBEB},{0x815B, 0xC44F},{0x815C, 0xC450}, - {0x815D, 0xC451},{0x815E, 0xC452},{0x815F, 0xC453},{0x8160, 0xEBED},{0x8161, 0xC454},{0x8162, 0xC455},{0x8163, 0xC456},{0x8164, 0xC457}, - {0x8165, 0xD0C8},{0x8166, 0xC458},{0x8167, 0xEBF2},{0x8168, 0xC459},{0x8169, 0xEBEE},{0x816A, 0xC45A},{0x816B, 0xC45B},{0x816C, 0xC45C}, - {0x816D, 0xEBF1},{0x816E, 0xC8F9},{0x816F, 0xC45D},{0x8170, 0xD1FC},{0x8171, 0xEBEC},{0x8172, 0xC45E},{0x8173, 0xC45F},{0x8174, 0xEBE9}, - {0x8175, 0xC460},{0x8176, 0xC461},{0x8177, 0xC462},{0x8178, 0xC463},{0x8179, 0xB8B9},{0x817A, 0xCFD9},{0x817B, 0xC4E5},{0x817C, 0xEBEF}, - {0x817D, 0xEBF0},{0x817E, 0xCCDA},{0x817F, 0xCDC8},{0x8180, 0xB0F2},{0x8181, 0xC464},{0x8182, 0xEBF6},{0x8183, 0xC465},{0x8184, 0xC466}, - {0x8185, 0xC467},{0x8186, 0xC468},{0x8187, 0xC469},{0x8188, 0xEBF5},{0x8189, 0xC46A},{0x818A, 0xB2B2},{0x818B, 0xC46B},{0x818C, 0xC46C}, - {0x818D, 0xC46D},{0x818E, 0xC46E},{0x818F, 0xB8E0},{0x8190, 0xC46F},{0x8191, 0xEBF7},{0x8192, 0xC470},{0x8193, 0xC471},{0x8194, 0xC472}, - {0x8195, 0xC473},{0x8196, 0xC474},{0x8197, 0xC475},{0x8198, 0xB1EC},{0x8199, 0xC476},{0x819A, 0xC477},{0x819B, 0xCCC5},{0x819C, 0xC4A4}, - {0x819D, 0xCFA5},{0x819E, 0xC478},{0x819F, 0xC479},{0x81A0, 0xC47A},{0x81A1, 0xC47B},{0x81A2, 0xC47C},{0x81A3, 0xEBF9},{0x81A4, 0xC47D}, - {0x81A5, 0xC47E},{0x81A6, 0xECA2},{0x81A7, 0xC480},{0x81A8, 0xC5F2},{0x81A9, 0xC481},{0x81AA, 0xEBFA},{0x81AB, 0xC482},{0x81AC, 0xC483}, - {0x81AD, 0xC484},{0x81AE, 0xC485},{0x81AF, 0xC486},{0x81B0, 0xC487},{0x81B1, 0xC488},{0x81B2, 0xC489},{0x81B3, 0xC9C5},{0x81B4, 0xC48A}, - {0x81B5, 0xC48B},{0x81B6, 0xC48C},{0x81B7, 0xC48D},{0x81B8, 0xC48E},{0x81B9, 0xC48F},{0x81BA, 0xE2DF},{0x81BB, 0xEBFE},{0x81BC, 0xC490}, - {0x81BD, 0xC491},{0x81BE, 0xC492},{0x81BF, 0xC493},{0x81C0, 0xCDCE},{0x81C1, 0xECA1},{0x81C2, 0xB1DB},{0x81C3, 0xD3B7},{0x81C4, 0xC494}, - {0x81C5, 0xC495},{0x81C6, 0xD2DC},{0x81C7, 0xC496},{0x81C8, 0xC497},{0x81C9, 0xC498},{0x81CA, 0xEBFD},{0x81CB, 0xC499},{0x81CC, 0xEBFB}, - {0x81CD, 0xC49A},{0x81CE, 0xC49B},{0x81CF, 0xC49C},{0x81D0, 0xC49D},{0x81D1, 0xC49E},{0x81D2, 0xC49F},{0x81D3, 0xC4A0},{0x81D4, 0xC540}, - {0x81D5, 0xC541},{0x81D6, 0xC542},{0x81D7, 0xC543},{0x81D8, 0xC544},{0x81D9, 0xC545},{0x81DA, 0xC546},{0x81DB, 0xC547},{0x81DC, 0xC548}, - {0x81DD, 0xC549},{0x81DE, 0xC54A},{0x81DF, 0xC54B},{0x81E0, 0xC54C},{0x81E1, 0xC54D},{0x81E2, 0xC54E},{0x81E3, 0xB3BC},{0x81E4, 0xC54F}, - {0x81E5, 0xC550},{0x81E6, 0xC551},{0x81E7, 0xEAB0},{0x81E8, 0xC552},{0x81E9, 0xC553},{0x81EA, 0xD7D4},{0x81EB, 0xC554},{0x81EC, 0xF4AB}, - {0x81ED, 0xB3F4},{0x81EE, 0xC555},{0x81EF, 0xC556},{0x81F0, 0xC557},{0x81F1, 0xC558},{0x81F2, 0xC559},{0x81F3, 0xD6C1},{0x81F4, 0xD6C2}, - {0x81F5, 0xC55A},{0x81F6, 0xC55B},{0x81F7, 0xC55C},{0x81F8, 0xC55D},{0x81F9, 0xC55E},{0x81FA, 0xC55F},{0x81FB, 0xD5E9},{0x81FC, 0xBECA}, - {0x81FD, 0xC560},{0x81FE, 0xF4A7},{0x81FF, 0xC561},{0x8200, 0xD2A8},{0x8201, 0xF4A8},{0x8202, 0xF4A9},{0x8203, 0xC562},{0x8204, 0xF4AA}, - {0x8205, 0xBECB},{0x8206, 0xD3DF},{0x8207, 0xC563},{0x8208, 0xC564},{0x8209, 0xC565},{0x820A, 0xC566},{0x820B, 0xC567},{0x820C, 0xC9E0}, - {0x820D, 0xC9E1},{0x820E, 0xC568},{0x820F, 0xC569},{0x8210, 0xF3C2},{0x8211, 0xC56A},{0x8212, 0xCAE6},{0x8213, 0xC56B},{0x8214, 0xCCF2}, - {0x8215, 0xC56C},{0x8216, 0xC56D},{0x8217, 0xC56E},{0x8218, 0xC56F},{0x8219, 0xC570},{0x821A, 0xC571},{0x821B, 0xE2B6},{0x821C, 0xCBB4}, - {0x821D, 0xC572},{0x821E, 0xCEE8},{0x821F, 0xD6DB},{0x8220, 0xC573},{0x8221, 0xF4AD},{0x8222, 0xF4AE},{0x8223, 0xF4AF},{0x8224, 0xC574}, - {0x8225, 0xC575},{0x8226, 0xC576},{0x8227, 0xC577},{0x8228, 0xF4B2},{0x8229, 0xC578},{0x822A, 0xBABD},{0x822B, 0xF4B3},{0x822C, 0xB0E3}, - {0x822D, 0xF4B0},{0x822E, 0xC579},{0x822F, 0xF4B1},{0x8230, 0xBDA2},{0x8231, 0xB2D5},{0x8232, 0xC57A},{0x8233, 0xF4B6},{0x8234, 0xF4B7}, - {0x8235, 0xB6E6},{0x8236, 0xB2B0},{0x8237, 0xCFCF},{0x8238, 0xF4B4},{0x8239, 0xB4AC},{0x823A, 0xC57B},{0x823B, 0xF4B5},{0x823C, 0xC57C}, - {0x823D, 0xC57D},{0x823E, 0xF4B8},{0x823F, 0xC57E},{0x8240, 0xC580},{0x8241, 0xC581},{0x8242, 0xC582},{0x8243, 0xC583},{0x8244, 0xF4B9}, - {0x8245, 0xC584},{0x8246, 0xC585},{0x8247, 0xCDA7},{0x8248, 0xC586},{0x8249, 0xF4BA},{0x824A, 0xC587},{0x824B, 0xF4BB},{0x824C, 0xC588}, - {0x824D, 0xC589},{0x824E, 0xC58A},{0x824F, 0xF4BC},{0x8250, 0xC58B},{0x8251, 0xC58C},{0x8252, 0xC58D},{0x8253, 0xC58E},{0x8254, 0xC58F}, - {0x8255, 0xC590},{0x8256, 0xC591},{0x8257, 0xC592},{0x8258, 0xCBD2},{0x8259, 0xC593},{0x825A, 0xF4BD},{0x825B, 0xC594},{0x825C, 0xC595}, - {0x825D, 0xC596},{0x825E, 0xC597},{0x825F, 0xF4BE},{0x8260, 0xC598},{0x8261, 0xC599},{0x8262, 0xC59A},{0x8263, 0xC59B},{0x8264, 0xC59C}, - {0x8265, 0xC59D},{0x8266, 0xC59E},{0x8267, 0xC59F},{0x8268, 0xF4BF},{0x8269, 0xC5A0},{0x826A, 0xC640},{0x826B, 0xC641},{0x826C, 0xC642}, - {0x826D, 0xC643},{0x826E, 0xF4DE},{0x826F, 0xC1BC},{0x8270, 0xBCE8},{0x8271, 0xC644},{0x8272, 0xC9AB},{0x8273, 0xD1DE},{0x8274, 0xE5F5}, - {0x8275, 0xC645},{0x8276, 0xC646},{0x8277, 0xC647},{0x8278, 0xC648},{0x8279, 0xDCB3},{0x827A, 0xD2D5},{0x827B, 0xC649},{0x827C, 0xC64A}, - {0x827D, 0xDCB4},{0x827E, 0xB0AC},{0x827F, 0xDCB5},{0x8280, 0xC64B},{0x8281, 0xC64C},{0x8282, 0xBDDA},{0x8283, 0xC64D},{0x8284, 0xDCB9}, - {0x8285, 0xC64E},{0x8286, 0xC64F},{0x8287, 0xC650},{0x8288, 0xD8C2},{0x8289, 0xC651},{0x828A, 0xDCB7},{0x828B, 0xD3F3},{0x828C, 0xC652}, - {0x828D, 0xC9D6},{0x828E, 0xDCBA},{0x828F, 0xDCB6},{0x8290, 0xC653},{0x8291, 0xDCBB},{0x8292, 0xC3A2},{0x8293, 0xC654},{0x8294, 0xC655}, - {0x8295, 0xC656},{0x8296, 0xC657},{0x8297, 0xDCBC},{0x8298, 0xDCC5},{0x8299, 0xDCBD},{0x829A, 0xC658},{0x829B, 0xC659},{0x829C, 0xCEDF}, - {0x829D, 0xD6A5},{0x829E, 0xC65A},{0x829F, 0xDCCF},{0x82A0, 0xC65B},{0x82A1, 0xDCCD},{0x82A2, 0xC65C},{0x82A3, 0xC65D},{0x82A4, 0xDCD2}, - {0x82A5, 0xBDE6},{0x82A6, 0xC2AB},{0x82A7, 0xC65E},{0x82A8, 0xDCB8},{0x82A9, 0xDCCB},{0x82AA, 0xDCCE},{0x82AB, 0xDCBE},{0x82AC, 0xB7D2}, - {0x82AD, 0xB0C5},{0x82AE, 0xDCC7},{0x82AF, 0xD0BE},{0x82B0, 0xDCC1},{0x82B1, 0xBBA8},{0x82B2, 0xC65F},{0x82B3, 0xB7BC},{0x82B4, 0xDCCC}, - {0x82B5, 0xC660},{0x82B6, 0xC661},{0x82B7, 0xDCC6},{0x82B8, 0xDCBF},{0x82B9, 0xC7DB},{0x82BA, 0xC662},{0x82BB, 0xC663},{0x82BC, 0xC664}, - {0x82BD, 0xD1BF},{0x82BE, 0xDCC0},{0x82BF, 0xC665},{0x82C0, 0xC666},{0x82C1, 0xDCCA},{0x82C2, 0xC667},{0x82C3, 0xC668},{0x82C4, 0xDCD0}, - {0x82C5, 0xC669},{0x82C6, 0xC66A},{0x82C7, 0xCEAD},{0x82C8, 0xDCC2},{0x82C9, 0xC66B},{0x82CA, 0xDCC3},{0x82CB, 0xDCC8},{0x82CC, 0xDCC9}, - {0x82CD, 0xB2D4},{0x82CE, 0xDCD1},{0x82CF, 0xCBD5},{0x82D0, 0xC66C},{0x82D1, 0xD4B7},{0x82D2, 0xDCDB},{0x82D3, 0xDCDF},{0x82D4, 0xCCA6}, - {0x82D5, 0xDCE6},{0x82D6, 0xC66D},{0x82D7, 0xC3E7},{0x82D8, 0xDCDC},{0x82D9, 0xC66E},{0x82DA, 0xC66F},{0x82DB, 0xBFC1},{0x82DC, 0xDCD9}, - {0x82DD, 0xC670},{0x82DE, 0xB0FA},{0x82DF, 0xB9B6},{0x82E0, 0xDCE5},{0x82E1, 0xDCD3},{0x82E2, 0xC671},{0x82E3, 0xDCC4},{0x82E4, 0xDCD6}, - {0x82E5, 0xC8F4},{0x82E6, 0xBFE0},{0x82E7, 0xC672},{0x82E8, 0xC673},{0x82E9, 0xC674},{0x82EA, 0xC675},{0x82EB, 0xC9BB},{0x82EC, 0xC676}, - {0x82ED, 0xC677},{0x82EE, 0xC678},{0x82EF, 0xB1BD},{0x82F0, 0xC679},{0x82F1, 0xD3A2},{0x82F2, 0xC67A},{0x82F3, 0xC67B},{0x82F4, 0xDCDA}, - {0x82F5, 0xC67C},{0x82F6, 0xC67D},{0x82F7, 0xDCD5},{0x82F8, 0xC67E},{0x82F9, 0xC6BB},{0x82FA, 0xC680},{0x82FB, 0xDCDE},{0x82FC, 0xC681}, - {0x82FD, 0xC682},{0x82FE, 0xC683},{0x82FF, 0xC684},{0x8300, 0xC685},{0x8301, 0xD7C2},{0x8302, 0xC3AF},{0x8303, 0xB7B6},{0x8304, 0xC7D1}, - {0x8305, 0xC3A9},{0x8306, 0xDCE2},{0x8307, 0xDCD8},{0x8308, 0xDCEB},{0x8309, 0xDCD4},{0x830A, 0xC686},{0x830B, 0xC687},{0x830C, 0xDCDD}, - {0x830D, 0xC688},{0x830E, 0xBEA5},{0x830F, 0xDCD7},{0x8310, 0xC689},{0x8311, 0xDCE0},{0x8312, 0xC68A},{0x8313, 0xC68B},{0x8314, 0xDCE3}, - {0x8315, 0xDCE4},{0x8316, 0xC68C},{0x8317, 0xDCF8},{0x8318, 0xC68D},{0x8319, 0xC68E},{0x831A, 0xDCE1},{0x831B, 0xDDA2},{0x831C, 0xDCE7}, - {0x831D, 0xC68F},{0x831E, 0xC690},{0x831F, 0xC691},{0x8320, 0xC692},{0x8321, 0xC693},{0x8322, 0xC694},{0x8323, 0xC695},{0x8324, 0xC696}, - {0x8325, 0xC697},{0x8326, 0xC698},{0x8327, 0xBCEB},{0x8328, 0xB4C4},{0x8329, 0xC699},{0x832A, 0xC69A},{0x832B, 0xC3A3},{0x832C, 0xB2E7}, - {0x832D, 0xDCFA},{0x832E, 0xC69B},{0x832F, 0xDCF2},{0x8330, 0xC69C},{0x8331, 0xDCEF},{0x8332, 0xC69D},{0x8333, 0xDCFC},{0x8334, 0xDCEE}, - {0x8335, 0xD2F0},{0x8336, 0xB2E8},{0x8337, 0xC69E},{0x8338, 0xC8D7},{0x8339, 0xC8E3},{0x833A, 0xDCFB},{0x833B, 0xC69F},{0x833C, 0xDCED}, - {0x833D, 0xC6A0},{0x833E, 0xC740},{0x833F, 0xC741},{0x8340, 0xDCF7},{0x8341, 0xC742},{0x8342, 0xC743},{0x8343, 0xDCF5},{0x8344, 0xC744}, - {0x8345, 0xC745},{0x8346, 0xBEA3},{0x8347, 0xDCF4},{0x8348, 0xC746},{0x8349, 0xB2DD},{0x834A, 0xC747},{0x834B, 0xC748},{0x834C, 0xC749}, - {0x834D, 0xC74A},{0x834E, 0xC74B},{0x834F, 0xDCF3},{0x8350, 0xBCF6},{0x8351, 0xDCE8},{0x8352, 0xBBC4},{0x8353, 0xC74C},{0x8354, 0xC0F3}, - {0x8355, 0xC74D},{0x8356, 0xC74E},{0x8357, 0xC74F},{0x8358, 0xC750},{0x8359, 0xC751},{0x835A, 0xBCD4},{0x835B, 0xDCE9},{0x835C, 0xDCEA}, - {0x835D, 0xC752},{0x835E, 0xDCF1},{0x835F, 0xDCF6},{0x8360, 0xDCF9},{0x8361, 0xB5B4},{0x8362, 0xC753},{0x8363, 0xC8D9},{0x8364, 0xBBE7}, - {0x8365, 0xDCFE},{0x8366, 0xDCFD},{0x8367, 0xD3AB},{0x8368, 0xDDA1},{0x8369, 0xDDA3},{0x836A, 0xDDA5},{0x836B, 0xD2F1},{0x836C, 0xDDA4}, - {0x836D, 0xDDA6},{0x836E, 0xDDA7},{0x836F, 0xD2A9},{0x8370, 0xC754},{0x8371, 0xC755},{0x8372, 0xC756},{0x8373, 0xC757},{0x8374, 0xC758}, - {0x8375, 0xC759},{0x8376, 0xC75A},{0x8377, 0xBAC9},{0x8378, 0xDDA9},{0x8379, 0xC75B},{0x837A, 0xC75C},{0x837B, 0xDDB6},{0x837C, 0xDDB1}, - {0x837D, 0xDDB4},{0x837E, 0xC75D},{0x837F, 0xC75E},{0x8380, 0xC75F},{0x8381, 0xC760},{0x8382, 0xC761},{0x8383, 0xC762},{0x8384, 0xC763}, - {0x8385, 0xDDB0},{0x8386, 0xC6CE},{0x8387, 0xC764},{0x8388, 0xC765},{0x8389, 0xC0F2},{0x838A, 0xC766},{0x838B, 0xC767},{0x838C, 0xC768}, - {0x838D, 0xC769},{0x838E, 0xC9AF},{0x838F, 0xC76A},{0x8390, 0xC76B},{0x8391, 0xC76C},{0x8392, 0xDCEC},{0x8393, 0xDDAE},{0x8394, 0xC76D}, - {0x8395, 0xC76E},{0x8396, 0xC76F},{0x8397, 0xC770},{0x8398, 0xDDB7},{0x8399, 0xC771},{0x839A, 0xC772},{0x839B, 0xDCF0},{0x839C, 0xDDAF}, - {0x839D, 0xC773},{0x839E, 0xDDB8},{0x839F, 0xC774},{0x83A0, 0xDDAC},{0x83A1, 0xC775},{0x83A2, 0xC776},{0x83A3, 0xC777},{0x83A4, 0xC778}, - {0x83A5, 0xC779},{0x83A6, 0xC77A},{0x83A7, 0xC77B},{0x83A8, 0xDDB9},{0x83A9, 0xDDB3},{0x83AA, 0xDDAD},{0x83AB, 0xC4AA},{0x83AC, 0xC77C}, - {0x83AD, 0xC77D},{0x83AE, 0xC77E},{0x83AF, 0xC780},{0x83B0, 0xDDA8},{0x83B1, 0xC0B3},{0x83B2, 0xC1AB},{0x83B3, 0xDDAA},{0x83B4, 0xDDAB}, - {0x83B5, 0xC781},{0x83B6, 0xDDB2},{0x83B7, 0xBBF1},{0x83B8, 0xDDB5},{0x83B9, 0xD3A8},{0x83BA, 0xDDBA},{0x83BB, 0xC782},{0x83BC, 0xDDBB}, - {0x83BD, 0xC3A7},{0x83BE, 0xC783},{0x83BF, 0xC784},{0x83C0, 0xDDD2},{0x83C1, 0xDDBC},{0x83C2, 0xC785},{0x83C3, 0xC786},{0x83C4, 0xC787}, - {0x83C5, 0xDDD1},{0x83C6, 0xC788},{0x83C7, 0xB9BD},{0x83C8, 0xC789},{0x83C9, 0xC78A},{0x83CA, 0xBED5},{0x83CB, 0xC78B},{0x83CC, 0xBEFA}, - {0x83CD, 0xC78C},{0x83CE, 0xC78D},{0x83CF, 0xBACA},{0x83D0, 0xC78E},{0x83D1, 0xC78F},{0x83D2, 0xC790},{0x83D3, 0xC791},{0x83D4, 0xDDCA}, - {0x83D5, 0xC792},{0x83D6, 0xDDC5},{0x83D7, 0xC793},{0x83D8, 0xDDBF},{0x83D9, 0xC794},{0x83DA, 0xC795},{0x83DB, 0xC796},{0x83DC, 0xB2CB}, - {0x83DD, 0xDDC3},{0x83DE, 0xC797},{0x83DF, 0xDDCB},{0x83E0, 0xB2A4},{0x83E1, 0xDDD5},{0x83E2, 0xC798},{0x83E3, 0xC799},{0x83E4, 0xC79A}, - {0x83E5, 0xDDBE},{0x83E6, 0xC79B},{0x83E7, 0xC79C},{0x83E8, 0xC79D},{0x83E9, 0xC6D0},{0x83EA, 0xDDD0},{0x83EB, 0xC79E},{0x83EC, 0xC79F}, - {0x83ED, 0xC7A0},{0x83EE, 0xC840},{0x83EF, 0xC841},{0x83F0, 0xDDD4},{0x83F1, 0xC1E2},{0x83F2, 0xB7C6},{0x83F3, 0xC842},{0x83F4, 0xC843}, - {0x83F5, 0xC844},{0x83F6, 0xC845},{0x83F7, 0xC846},{0x83F8, 0xDDCE},{0x83F9, 0xDDCF},{0x83FA, 0xC847},{0x83FB, 0xC848},{0x83FC, 0xC849}, - {0x83FD, 0xDDC4},{0x83FE, 0xC84A},{0x83FF, 0xC84B},{0x8400, 0xC84C},{0x8401, 0xDDBD},{0x8402, 0xC84D},{0x8403, 0xDDCD},{0x8404, 0xCCD1}, - {0x8405, 0xC84E},{0x8406, 0xDDC9},{0x8407, 0xC84F},{0x8408, 0xC850},{0x8409, 0xC851},{0x840A, 0xC852},{0x840B, 0xDDC2},{0x840C, 0xC3C8}, - {0x840D, 0xC6BC},{0x840E, 0xCEAE},{0x840F, 0xDDCC},{0x8410, 0xC853},{0x8411, 0xDDC8},{0x8412, 0xC854},{0x8413, 0xC855},{0x8414, 0xC856}, - {0x8415, 0xC857},{0x8416, 0xC858},{0x8417, 0xC859},{0x8418, 0xDDC1},{0x8419, 0xC85A},{0x841A, 0xC85B},{0x841B, 0xC85C},{0x841C, 0xDDC6}, - {0x841D, 0xC2DC},{0x841E, 0xC85D},{0x841F, 0xC85E},{0x8420, 0xC85F},{0x8421, 0xC860},{0x8422, 0xC861},{0x8423, 0xC862},{0x8424, 0xD3A9}, - {0x8425, 0xD3AA},{0x8426, 0xDDD3},{0x8427, 0xCFF4},{0x8428, 0xC8F8},{0x8429, 0xC863},{0x842A, 0xC864},{0x842B, 0xC865},{0x842C, 0xC866}, - {0x842D, 0xC867},{0x842E, 0xC868},{0x842F, 0xC869},{0x8430, 0xC86A},{0x8431, 0xDDE6},{0x8432, 0xC86B},{0x8433, 0xC86C},{0x8434, 0xC86D}, - {0x8435, 0xC86E},{0x8436, 0xC86F},{0x8437, 0xC870},{0x8438, 0xDDC7},{0x8439, 0xC871},{0x843A, 0xC872},{0x843B, 0xC873},{0x843C, 0xDDE0}, - {0x843D, 0xC2E4},{0x843E, 0xC874},{0x843F, 0xC875},{0x8440, 0xC876},{0x8441, 0xC877},{0x8442, 0xC878},{0x8443, 0xC879},{0x8444, 0xC87A}, - {0x8445, 0xC87B},{0x8446, 0xDDE1},{0x8447, 0xC87C},{0x8448, 0xC87D},{0x8449, 0xC87E},{0x844A, 0xC880},{0x844B, 0xC881},{0x844C, 0xC882}, - {0x844D, 0xC883},{0x844E, 0xC884},{0x844F, 0xC885},{0x8450, 0xC886},{0x8451, 0xDDD7},{0x8452, 0xC887},{0x8453, 0xC888},{0x8454, 0xC889}, - {0x8455, 0xC88A},{0x8456, 0xC88B},{0x8457, 0xD6F8},{0x8458, 0xC88C},{0x8459, 0xDDD9},{0x845A, 0xDDD8},{0x845B, 0xB8F0},{0x845C, 0xDDD6}, - {0x845D, 0xC88D},{0x845E, 0xC88E},{0x845F, 0xC88F},{0x8460, 0xC890},{0x8461, 0xC6CF},{0x8462, 0xC891},{0x8463, 0xB6AD},{0x8464, 0xC892}, - {0x8465, 0xC893},{0x8466, 0xC894},{0x8467, 0xC895},{0x8468, 0xC896},{0x8469, 0xDDE2},{0x846A, 0xC897},{0x846B, 0xBAF9},{0x846C, 0xD4E1}, - {0x846D, 0xDDE7},{0x846E, 0xC898},{0x846F, 0xC899},{0x8470, 0xC89A},{0x8471, 0xB4D0},{0x8472, 0xC89B},{0x8473, 0xDDDA},{0x8474, 0xC89C}, - {0x8475, 0xBFFB},{0x8476, 0xDDE3},{0x8477, 0xC89D},{0x8478, 0xDDDF},{0x8479, 0xC89E},{0x847A, 0xDDDD},{0x847B, 0xC89F},{0x847C, 0xC8A0}, - {0x847D, 0xC940},{0x847E, 0xC941},{0x847F, 0xC942},{0x8480, 0xC943},{0x8481, 0xC944},{0x8482, 0xB5D9},{0x8483, 0xC945},{0x8484, 0xC946}, - {0x8485, 0xC947},{0x8486, 0xC948},{0x8487, 0xDDDB},{0x8488, 0xDDDC},{0x8489, 0xDDDE},{0x848A, 0xC949},{0x848B, 0xBDAF},{0x848C, 0xDDE4}, - {0x848D, 0xC94A},{0x848E, 0xDDE5},{0x848F, 0xC94B},{0x8490, 0xC94C},{0x8491, 0xC94D},{0x8492, 0xC94E},{0x8493, 0xC94F},{0x8494, 0xC950}, - {0x8495, 0xC951},{0x8496, 0xC952},{0x8497, 0xDDF5},{0x8498, 0xC953},{0x8499, 0xC3C9},{0x849A, 0xC954},{0x849B, 0xC955},{0x849C, 0xCBE2}, - {0x849D, 0xC956},{0x849E, 0xC957},{0x849F, 0xC958},{0x84A0, 0xC959},{0x84A1, 0xDDF2},{0x84A2, 0xC95A},{0x84A3, 0xC95B},{0x84A4, 0xC95C}, - {0x84A5, 0xC95D},{0x84A6, 0xC95E},{0x84A7, 0xC95F},{0x84A8, 0xC960},{0x84A9, 0xC961},{0x84AA, 0xC962},{0x84AB, 0xC963},{0x84AC, 0xC964}, - {0x84AD, 0xC965},{0x84AE, 0xC966},{0x84AF, 0xD8E1},{0x84B0, 0xC967},{0x84B1, 0xC968},{0x84B2, 0xC6D1},{0x84B3, 0xC969},{0x84B4, 0xDDF4}, - {0x84B5, 0xC96A},{0x84B6, 0xC96B},{0x84B7, 0xC96C},{0x84B8, 0xD5F4},{0x84B9, 0xDDF3},{0x84BA, 0xDDF0},{0x84BB, 0xC96D},{0x84BC, 0xC96E}, - {0x84BD, 0xDDEC},{0x84BE, 0xC96F},{0x84BF, 0xDDEF},{0x84C0, 0xC970},{0x84C1, 0xDDE8},{0x84C2, 0xC971},{0x84C3, 0xC972},{0x84C4, 0xD0EE}, - {0x84C5, 0xC973},{0x84C6, 0xC974},{0x84C7, 0xC975},{0x84C8, 0xC976},{0x84C9, 0xC8D8},{0x84CA, 0xDDEE},{0x84CB, 0xC977},{0x84CC, 0xC978}, - {0x84CD, 0xDDE9},{0x84CE, 0xC979},{0x84CF, 0xC97A},{0x84D0, 0xDDEA},{0x84D1, 0xCBF2},{0x84D2, 0xC97B},{0x84D3, 0xDDED},{0x84D4, 0xC97C}, - {0x84D5, 0xC97D},{0x84D6, 0xB1CD},{0x84D7, 0xC97E},{0x84D8, 0xC980},{0x84D9, 0xC981},{0x84DA, 0xC982},{0x84DB, 0xC983},{0x84DC, 0xC984}, - {0x84DD, 0xC0B6},{0x84DE, 0xC985},{0x84DF, 0xBCBB},{0x84E0, 0xDDF1},{0x84E1, 0xC986},{0x84E2, 0xC987},{0x84E3, 0xDDF7},{0x84E4, 0xC988}, - {0x84E5, 0xDDF6},{0x84E6, 0xDDEB},{0x84E7, 0xC989},{0x84E8, 0xC98A},{0x84E9, 0xC98B},{0x84EA, 0xC98C},{0x84EB, 0xC98D},{0x84EC, 0xC5EE}, - {0x84ED, 0xC98E},{0x84EE, 0xC98F},{0x84EF, 0xC990},{0x84F0, 0xDDFB},{0x84F1, 0xC991},{0x84F2, 0xC992},{0x84F3, 0xC993},{0x84F4, 0xC994}, - {0x84F5, 0xC995},{0x84F6, 0xC996},{0x84F7, 0xC997},{0x84F8, 0xC998},{0x84F9, 0xC999},{0x84FA, 0xC99A},{0x84FB, 0xC99B},{0x84FC, 0xDEA4}, - {0x84FD, 0xC99C},{0x84FE, 0xC99D},{0x84FF, 0xDEA3},{0x8500, 0xC99E},{0x8501, 0xC99F},{0x8502, 0xC9A0},{0x8503, 0xCA40},{0x8504, 0xCA41}, - {0x8505, 0xCA42},{0x8506, 0xCA43},{0x8507, 0xCA44},{0x8508, 0xCA45},{0x8509, 0xCA46},{0x850A, 0xCA47},{0x850B, 0xCA48},{0x850C, 0xDDF8}, - {0x850D, 0xCA49},{0x850E, 0xCA4A},{0x850F, 0xCA4B},{0x8510, 0xCA4C},{0x8511, 0xC3EF},{0x8512, 0xCA4D},{0x8513, 0xC2FB},{0x8514, 0xCA4E}, - {0x8515, 0xCA4F},{0x8516, 0xCA50},{0x8517, 0xD5E1},{0x8518, 0xCA51},{0x8519, 0xCA52},{0x851A, 0xCEB5},{0x851B, 0xCA53},{0x851C, 0xCA54}, - {0x851D, 0xCA55},{0x851E, 0xCA56},{0x851F, 0xDDFD},{0x8520, 0xCA57},{0x8521, 0xB2CC},{0x8522, 0xCA58},{0x8523, 0xCA59},{0x8524, 0xCA5A}, - {0x8525, 0xCA5B},{0x8526, 0xCA5C},{0x8527, 0xCA5D},{0x8528, 0xCA5E},{0x8529, 0xCA5F},{0x852A, 0xCA60},{0x852B, 0xC4E8},{0x852C, 0xCADF}, - {0x852D, 0xCA61},{0x852E, 0xCA62},{0x852F, 0xCA63},{0x8530, 0xCA64},{0x8531, 0xCA65},{0x8532, 0xCA66},{0x8533, 0xCA67},{0x8534, 0xCA68}, - {0x8535, 0xCA69},{0x8536, 0xCA6A},{0x8537, 0xC7BE},{0x8538, 0xDDFA},{0x8539, 0xDDFC},{0x853A, 0xDDFE},{0x853B, 0xDEA2},{0x853C, 0xB0AA}, - {0x853D, 0xB1CE},{0x853E, 0xCA6B},{0x853F, 0xCA6C},{0x8540, 0xCA6D},{0x8541, 0xCA6E},{0x8542, 0xCA6F},{0x8543, 0xDEAC},{0x8544, 0xCA70}, - {0x8545, 0xCA71},{0x8546, 0xCA72},{0x8547, 0xCA73},{0x8548, 0xDEA6},{0x8549, 0xBDB6},{0x854A, 0xC8EF},{0x854B, 0xCA74},{0x854C, 0xCA75}, - {0x854D, 0xCA76},{0x854E, 0xCA77},{0x854F, 0xCA78},{0x8550, 0xCA79},{0x8551, 0xCA7A},{0x8552, 0xCA7B},{0x8553, 0xCA7C},{0x8554, 0xCA7D}, - {0x8555, 0xCA7E},{0x8556, 0xDEA1},{0x8557, 0xCA80},{0x8558, 0xCA81},{0x8559, 0xDEA5},{0x855A, 0xCA82},{0x855B, 0xCA83},{0x855C, 0xCA84}, - {0x855D, 0xCA85},{0x855E, 0xDEA9},{0x855F, 0xCA86},{0x8560, 0xCA87},{0x8561, 0xCA88},{0x8562, 0xCA89},{0x8563, 0xCA8A},{0x8564, 0xDEA8}, - {0x8565, 0xCA8B},{0x8566, 0xCA8C},{0x8567, 0xCA8D},{0x8568, 0xDEA7},{0x8569, 0xCA8E},{0x856A, 0xCA8F},{0x856B, 0xCA90},{0x856C, 0xCA91}, - {0x856D, 0xCA92},{0x856E, 0xCA93},{0x856F, 0xCA94},{0x8570, 0xCA95},{0x8571, 0xCA96},{0x8572, 0xDEAD},{0x8573, 0xCA97},{0x8574, 0xD4CC}, - {0x8575, 0xCA98},{0x8576, 0xCA99},{0x8577, 0xCA9A},{0x8578, 0xCA9B},{0x8579, 0xDEB3},{0x857A, 0xDEAA},{0x857B, 0xDEAE},{0x857C, 0xCA9C}, - {0x857D, 0xCA9D},{0x857E, 0xC0D9},{0x857F, 0xCA9E},{0x8580, 0xCA9F},{0x8581, 0xCAA0},{0x8582, 0xCB40},{0x8583, 0xCB41},{0x8584, 0xB1A1}, - {0x8585, 0xDEB6},{0x8586, 0xCB42},{0x8587, 0xDEB1},{0x8588, 0xCB43},{0x8589, 0xCB44},{0x858A, 0xCB45},{0x858B, 0xCB46},{0x858C, 0xCB47}, - {0x858D, 0xCB48},{0x858E, 0xCB49},{0x858F, 0xDEB2},{0x8590, 0xCB4A},{0x8591, 0xCB4B},{0x8592, 0xCB4C},{0x8593, 0xCB4D},{0x8594, 0xCB4E}, - {0x8595, 0xCB4F},{0x8596, 0xCB50},{0x8597, 0xCB51},{0x8598, 0xCB52},{0x8599, 0xCB53},{0x859A, 0xCB54},{0x859B, 0xD1A6},{0x859C, 0xDEB5}, - {0x859D, 0xCB55},{0x859E, 0xCB56},{0x859F, 0xCB57},{0x85A0, 0xCB58},{0x85A1, 0xCB59},{0x85A2, 0xCB5A},{0x85A3, 0xCB5B},{0x85A4, 0xDEAF}, - {0x85A5, 0xCB5C},{0x85A6, 0xCB5D},{0x85A7, 0xCB5E},{0x85A8, 0xDEB0},{0x85A9, 0xCB5F},{0x85AA, 0xD0BD},{0x85AB, 0xCB60},{0x85AC, 0xCB61}, - {0x85AD, 0xCB62},{0x85AE, 0xDEB4},{0x85AF, 0xCAED},{0x85B0, 0xDEB9},{0x85B1, 0xCB63},{0x85B2, 0xCB64},{0x85B3, 0xCB65},{0x85B4, 0xCB66}, - {0x85B5, 0xCB67},{0x85B6, 0xCB68},{0x85B7, 0xDEB8},{0x85B8, 0xCB69},{0x85B9, 0xDEB7},{0x85BA, 0xCB6A},{0x85BB, 0xCB6B},{0x85BC, 0xCB6C}, - {0x85BD, 0xCB6D},{0x85BE, 0xCB6E},{0x85BF, 0xCB6F},{0x85C0, 0xCB70},{0x85C1, 0xDEBB},{0x85C2, 0xCB71},{0x85C3, 0xCB72},{0x85C4, 0xCB73}, - {0x85C5, 0xCB74},{0x85C6, 0xCB75},{0x85C7, 0xCB76},{0x85C8, 0xCB77},{0x85C9, 0xBDE5},{0x85CA, 0xCB78},{0x85CB, 0xCB79},{0x85CC, 0xCB7A}, - {0x85CD, 0xCB7B},{0x85CE, 0xCB7C},{0x85CF, 0xB2D8},{0x85D0, 0xC3EA},{0x85D1, 0xCB7D},{0x85D2, 0xCB7E},{0x85D3, 0xDEBA},{0x85D4, 0xCB80}, - {0x85D5, 0xC5BA},{0x85D6, 0xCB81},{0x85D7, 0xCB82},{0x85D8, 0xCB83},{0x85D9, 0xCB84},{0x85DA, 0xCB85},{0x85DB, 0xCB86},{0x85DC, 0xDEBC}, - {0x85DD, 0xCB87},{0x85DE, 0xCB88},{0x85DF, 0xCB89},{0x85E0, 0xCB8A},{0x85E1, 0xCB8B},{0x85E2, 0xCB8C},{0x85E3, 0xCB8D},{0x85E4, 0xCCD9}, - {0x85E5, 0xCB8E},{0x85E6, 0xCB8F},{0x85E7, 0xCB90},{0x85E8, 0xCB91},{0x85E9, 0xB7AA},{0x85EA, 0xCB92},{0x85EB, 0xCB93},{0x85EC, 0xCB94}, - {0x85ED, 0xCB95},{0x85EE, 0xCB96},{0x85EF, 0xCB97},{0x85F0, 0xCB98},{0x85F1, 0xCB99},{0x85F2, 0xCB9A},{0x85F3, 0xCB9B},{0x85F4, 0xCB9C}, - {0x85F5, 0xCB9D},{0x85F6, 0xCB9E},{0x85F7, 0xCB9F},{0x85F8, 0xCBA0},{0x85F9, 0xCC40},{0x85FA, 0xCC41},{0x85FB, 0xD4E5},{0x85FC, 0xCC42}, - {0x85FD, 0xCC43},{0x85FE, 0xCC44},{0x85FF, 0xDEBD},{0x8600, 0xCC45},{0x8601, 0xCC46},{0x8602, 0xCC47},{0x8603, 0xCC48},{0x8604, 0xCC49}, - {0x8605, 0xDEBF},{0x8606, 0xCC4A},{0x8607, 0xCC4B},{0x8608, 0xCC4C},{0x8609, 0xCC4D},{0x860A, 0xCC4E},{0x860B, 0xCC4F},{0x860C, 0xCC50}, - {0x860D, 0xCC51},{0x860E, 0xCC52},{0x860F, 0xCC53},{0x8610, 0xCC54},{0x8611, 0xC4A2},{0x8612, 0xCC55},{0x8613, 0xCC56},{0x8614, 0xCC57}, - {0x8615, 0xCC58},{0x8616, 0xDEC1},{0x8617, 0xCC59},{0x8618, 0xCC5A},{0x8619, 0xCC5B},{0x861A, 0xCC5C},{0x861B, 0xCC5D},{0x861C, 0xCC5E}, - {0x861D, 0xCC5F},{0x861E, 0xCC60},{0x861F, 0xCC61},{0x8620, 0xCC62},{0x8621, 0xCC63},{0x8622, 0xCC64},{0x8623, 0xCC65},{0x8624, 0xCC66}, - {0x8625, 0xCC67},{0x8626, 0xCC68},{0x8627, 0xDEBE},{0x8628, 0xCC69},{0x8629, 0xDEC0},{0x862A, 0xCC6A},{0x862B, 0xCC6B},{0x862C, 0xCC6C}, - {0x862D, 0xCC6D},{0x862E, 0xCC6E},{0x862F, 0xCC6F},{0x8630, 0xCC70},{0x8631, 0xCC71},{0x8632, 0xCC72},{0x8633, 0xCC73},{0x8634, 0xCC74}, - {0x8635, 0xCC75},{0x8636, 0xCC76},{0x8637, 0xCC77},{0x8638, 0xD5BA},{0x8639, 0xCC78},{0x863A, 0xCC79},{0x863B, 0xCC7A},{0x863C, 0xDEC2}, - {0x863D, 0xCC7B},{0x863E, 0xCC7C},{0x863F, 0xCC7D},{0x8640, 0xCC7E},{0x8641, 0xCC80},{0x8642, 0xCC81},{0x8643, 0xCC82},{0x8644, 0xCC83}, - {0x8645, 0xCC84},{0x8646, 0xCC85},{0x8647, 0xCC86},{0x8648, 0xCC87},{0x8649, 0xCC88},{0x864A, 0xCC89},{0x864B, 0xCC8A},{0x864C, 0xCC8B}, - {0x864D, 0xF2AE},{0x864E, 0xBBA2},{0x864F, 0xC2B2},{0x8650, 0xC5B0},{0x8651, 0xC2C7},{0x8652, 0xCC8C},{0x8653, 0xCC8D},{0x8654, 0xF2AF}, - {0x8655, 0xCC8E},{0x8656, 0xCC8F},{0x8657, 0xCC90},{0x8658, 0xCC91},{0x8659, 0xCC92},{0x865A, 0xD0E9},{0x865B, 0xCC93},{0x865C, 0xCC94}, - {0x865D, 0xCC95},{0x865E, 0xD3DD},{0x865F, 0xCC96},{0x8660, 0xCC97},{0x8661, 0xCC98},{0x8662, 0xEBBD},{0x8663, 0xCC99},{0x8664, 0xCC9A}, - {0x8665, 0xCC9B},{0x8666, 0xCC9C},{0x8667, 0xCC9D},{0x8668, 0xCC9E},{0x8669, 0xCC9F},{0x866A, 0xCCA0},{0x866B, 0xB3E6},{0x866C, 0xF2B0}, - {0x866D, 0xCD40},{0x866E, 0xF2B1},{0x866F, 0xCD41},{0x8670, 0xCD42},{0x8671, 0xCAAD},{0x8672, 0xCD43},{0x8673, 0xCD44},{0x8674, 0xCD45}, - {0x8675, 0xCD46},{0x8676, 0xCD47},{0x8677, 0xCD48},{0x8678, 0xCD49},{0x8679, 0xBAE7},{0x867A, 0xF2B3},{0x867B, 0xF2B5},{0x867C, 0xF2B4}, - {0x867D, 0xCBE4},{0x867E, 0xCFBA},{0x867F, 0xF2B2},{0x8680, 0xCAB4},{0x8681, 0xD2CF},{0x8682, 0xC2EC},{0x8683, 0xCD4A},{0x8684, 0xCD4B}, - {0x8685, 0xCD4C},{0x8686, 0xCD4D},{0x8687, 0xCD4E},{0x8688, 0xCD4F},{0x8689, 0xCD50},{0x868A, 0xCEC3},{0x868B, 0xF2B8},{0x868C, 0xB0F6}, - {0x868D, 0xF2B7},{0x868E, 0xCD51},{0x868F, 0xCD52},{0x8690, 0xCD53},{0x8691, 0xCD54},{0x8692, 0xCD55},{0x8693, 0xF2BE},{0x8694, 0xCD56}, - {0x8695, 0xB2CF},{0x8696, 0xCD57},{0x8697, 0xCD58},{0x8698, 0xCD59},{0x8699, 0xCD5A},{0x869A, 0xCD5B},{0x869B, 0xCD5C},{0x869C, 0xD1C1}, - {0x869D, 0xF2BA},{0x869E, 0xCD5D},{0x869F, 0xCD5E},{0x86A0, 0xCD5F},{0x86A1, 0xCD60},{0x86A2, 0xCD61},{0x86A3, 0xF2BC},{0x86A4, 0xD4E9}, - {0x86A5, 0xCD62},{0x86A6, 0xCD63},{0x86A7, 0xF2BB},{0x86A8, 0xF2B6},{0x86A9, 0xF2BF},{0x86AA, 0xF2BD},{0x86AB, 0xCD64},{0x86AC, 0xF2B9}, - {0x86AD, 0xCD65},{0x86AE, 0xCD66},{0x86AF, 0xF2C7},{0x86B0, 0xF2C4},{0x86B1, 0xF2C6},{0x86B2, 0xCD67},{0x86B3, 0xCD68},{0x86B4, 0xF2CA}, - {0x86B5, 0xF2C2},{0x86B6, 0xF2C0},{0x86B7, 0xCD69},{0x86B8, 0xCD6A},{0x86B9, 0xCD6B},{0x86BA, 0xF2C5},{0x86BB, 0xCD6C},{0x86BC, 0xCD6D}, - {0x86BD, 0xCD6E},{0x86BE, 0xCD6F},{0x86BF, 0xCD70},{0x86C0, 0xD6FB},{0x86C1, 0xCD71},{0x86C2, 0xCD72},{0x86C3, 0xCD73},{0x86C4, 0xF2C1}, - {0x86C5, 0xCD74},{0x86C6, 0xC7F9},{0x86C7, 0xC9DF},{0x86C8, 0xCD75},{0x86C9, 0xF2C8},{0x86CA, 0xB9C6},{0x86CB, 0xB5B0},{0x86CC, 0xCD76}, - {0x86CD, 0xCD77},{0x86CE, 0xF2C3},{0x86CF, 0xF2C9},{0x86D0, 0xF2D0},{0x86D1, 0xF2D6},{0x86D2, 0xCD78},{0x86D3, 0xCD79},{0x86D4, 0xBBD7}, - {0x86D5, 0xCD7A},{0x86D6, 0xCD7B},{0x86D7, 0xCD7C},{0x86D8, 0xF2D5},{0x86D9, 0xCDDC},{0x86DA, 0xCD7D},{0x86DB, 0xD6EB},{0x86DC, 0xCD7E}, - {0x86DD, 0xCD80},{0x86DE, 0xF2D2},{0x86DF, 0xF2D4},{0x86E0, 0xCD81},{0x86E1, 0xCD82},{0x86E2, 0xCD83},{0x86E3, 0xCD84},{0x86E4, 0xB8F2}, - {0x86E5, 0xCD85},{0x86E6, 0xCD86},{0x86E7, 0xCD87},{0x86E8, 0xCD88},{0x86E9, 0xF2CB},{0x86EA, 0xCD89},{0x86EB, 0xCD8A},{0x86EC, 0xCD8B}, - {0x86ED, 0xF2CE},{0x86EE, 0xC2F9},{0x86EF, 0xCD8C},{0x86F0, 0xD5DD},{0x86F1, 0xF2CC},{0x86F2, 0xF2CD},{0x86F3, 0xF2CF},{0x86F4, 0xF2D3}, - {0x86F5, 0xCD8D},{0x86F6, 0xCD8E},{0x86F7, 0xCD8F},{0x86F8, 0xF2D9},{0x86F9, 0xD3BC},{0x86FA, 0xCD90},{0x86FB, 0xCD91},{0x86FC, 0xCD92}, - {0x86FD, 0xCD93},{0x86FE, 0xB6EA},{0x86FF, 0xCD94},{0x8700, 0xCAF1},{0x8701, 0xCD95},{0x8702, 0xB7E4},{0x8703, 0xF2D7},{0x8704, 0xCD96}, - {0x8705, 0xCD97},{0x8706, 0xCD98},{0x8707, 0xF2D8},{0x8708, 0xF2DA},{0x8709, 0xF2DD},{0x870A, 0xF2DB},{0x870B, 0xCD99},{0x870C, 0xCD9A}, - {0x870D, 0xF2DC},{0x870E, 0xCD9B},{0x870F, 0xCD9C},{0x8710, 0xCD9D},{0x8711, 0xCD9E},{0x8712, 0xD1D1},{0x8713, 0xF2D1},{0x8714, 0xCD9F}, - {0x8715, 0xCDC9},{0x8716, 0xCDA0},{0x8717, 0xCECF},{0x8718, 0xD6A9},{0x8719, 0xCE40},{0x871A, 0xF2E3},{0x871B, 0xCE41},{0x871C, 0xC3DB}, - {0x871D, 0xCE42},{0x871E, 0xF2E0},{0x871F, 0xCE43},{0x8720, 0xCE44},{0x8721, 0xC0AF},{0x8722, 0xF2EC},{0x8723, 0xF2DE},{0x8724, 0xCE45}, - {0x8725, 0xF2E1},{0x8726, 0xCE46},{0x8727, 0xCE47},{0x8728, 0xCE48},{0x8729, 0xF2E8},{0x872A, 0xCE49},{0x872B, 0xCE4A},{0x872C, 0xCE4B}, - {0x872D, 0xCE4C},{0x872E, 0xF2E2},{0x872F, 0xCE4D},{0x8730, 0xCE4E},{0x8731, 0xF2E7},{0x8732, 0xCE4F},{0x8733, 0xCE50},{0x8734, 0xF2E6}, - {0x8735, 0xCE51},{0x8736, 0xCE52},{0x8737, 0xF2E9},{0x8738, 0xCE53},{0x8739, 0xCE54},{0x873A, 0xCE55},{0x873B, 0xF2DF},{0x873C, 0xCE56}, - {0x873D, 0xCE57},{0x873E, 0xF2E4},{0x873F, 0xF2EA},{0x8740, 0xCE58},{0x8741, 0xCE59},{0x8742, 0xCE5A},{0x8743, 0xCE5B},{0x8744, 0xCE5C}, - {0x8745, 0xCE5D},{0x8746, 0xCE5E},{0x8747, 0xD3AC},{0x8748, 0xF2E5},{0x8749, 0xB2F5},{0x874A, 0xCE5F},{0x874B, 0xCE60},{0x874C, 0xF2F2}, - {0x874D, 0xCE61},{0x874E, 0xD0AB},{0x874F, 0xCE62},{0x8750, 0xCE63},{0x8751, 0xCE64},{0x8752, 0xCE65},{0x8753, 0xF2F5},{0x8754, 0xCE66}, - {0x8755, 0xCE67},{0x8756, 0xCE68},{0x8757, 0xBBC8},{0x8758, 0xCE69},{0x8759, 0xF2F9},{0x875A, 0xCE6A},{0x875B, 0xCE6B},{0x875C, 0xCE6C}, - {0x875D, 0xCE6D},{0x875E, 0xCE6E},{0x875F, 0xCE6F},{0x8760, 0xF2F0},{0x8761, 0xCE70},{0x8762, 0xCE71},{0x8763, 0xF2F6},{0x8764, 0xF2F8}, - {0x8765, 0xF2FA},{0x8766, 0xCE72},{0x8767, 0xCE73},{0x8768, 0xCE74},{0x8769, 0xCE75},{0x876A, 0xCE76},{0x876B, 0xCE77},{0x876C, 0xCE78}, - {0x876D, 0xCE79},{0x876E, 0xF2F3},{0x876F, 0xCE7A},{0x8770, 0xF2F1},{0x8771, 0xCE7B},{0x8772, 0xCE7C},{0x8773, 0xCE7D},{0x8774, 0xBAFB}, - {0x8775, 0xCE7E},{0x8776, 0xB5FB},{0x8777, 0xCE80},{0x8778, 0xCE81},{0x8779, 0xCE82},{0x877A, 0xCE83},{0x877B, 0xF2EF},{0x877C, 0xF2F7}, - {0x877D, 0xF2ED},{0x877E, 0xF2EE},{0x877F, 0xCE84},{0x8780, 0xCE85},{0x8781, 0xCE86},{0x8782, 0xF2EB},{0x8783, 0xF3A6},{0x8784, 0xCE87}, - {0x8785, 0xF3A3},{0x8786, 0xCE88},{0x8787, 0xCE89},{0x8788, 0xF3A2},{0x8789, 0xCE8A},{0x878A, 0xCE8B},{0x878B, 0xF2F4},{0x878C, 0xCE8C}, - {0x878D, 0xC8DA},{0x878E, 0xCE8D},{0x878F, 0xCE8E},{0x8790, 0xCE8F},{0x8791, 0xCE90},{0x8792, 0xCE91},{0x8793, 0xF2FB},{0x8794, 0xCE92}, - {0x8795, 0xCE93},{0x8796, 0xCE94},{0x8797, 0xF3A5},{0x8798, 0xCE95},{0x8799, 0xCE96},{0x879A, 0xCE97},{0x879B, 0xCE98},{0x879C, 0xCE99}, - {0x879D, 0xCE9A},{0x879E, 0xCE9B},{0x879F, 0xC3F8},{0x87A0, 0xCE9C},{0x87A1, 0xCE9D},{0x87A2, 0xCE9E},{0x87A3, 0xCE9F},{0x87A4, 0xCEA0}, - {0x87A5, 0xCF40},{0x87A6, 0xCF41},{0x87A7, 0xCF42},{0x87A8, 0xF2FD},{0x87A9, 0xCF43},{0x87AA, 0xCF44},{0x87AB, 0xF3A7},{0x87AC, 0xF3A9}, - {0x87AD, 0xF3A4},{0x87AE, 0xCF45},{0x87AF, 0xF2FC},{0x87B0, 0xCF46},{0x87B1, 0xCF47},{0x87B2, 0xCF48},{0x87B3, 0xF3AB},{0x87B4, 0xCF49}, - {0x87B5, 0xF3AA},{0x87B6, 0xCF4A},{0x87B7, 0xCF4B},{0x87B8, 0xCF4C},{0x87B9, 0xCF4D},{0x87BA, 0xC2DD},{0x87BB, 0xCF4E},{0x87BC, 0xCF4F}, - {0x87BD, 0xF3AE},{0x87BE, 0xCF50},{0x87BF, 0xCF51},{0x87C0, 0xF3B0},{0x87C1, 0xCF52},{0x87C2, 0xCF53},{0x87C3, 0xCF54},{0x87C4, 0xCF55}, - {0x87C5, 0xCF56},{0x87C6, 0xF3A1},{0x87C7, 0xCF57},{0x87C8, 0xCF58},{0x87C9, 0xCF59},{0x87CA, 0xF3B1},{0x87CB, 0xF3AC},{0x87CC, 0xCF5A}, - {0x87CD, 0xCF5B},{0x87CE, 0xCF5C},{0x87CF, 0xCF5D},{0x87D0, 0xCF5E},{0x87D1, 0xF3AF},{0x87D2, 0xF2FE},{0x87D3, 0xF3AD},{0x87D4, 0xCF5F}, - {0x87D5, 0xCF60},{0x87D6, 0xCF61},{0x87D7, 0xCF62},{0x87D8, 0xCF63},{0x87D9, 0xCF64},{0x87DA, 0xCF65},{0x87DB, 0xF3B2},{0x87DC, 0xCF66}, - {0x87DD, 0xCF67},{0x87DE, 0xCF68},{0x87DF, 0xCF69},{0x87E0, 0xF3B4},{0x87E1, 0xCF6A},{0x87E2, 0xCF6B},{0x87E3, 0xCF6C},{0x87E4, 0xCF6D}, - {0x87E5, 0xF3A8},{0x87E6, 0xCF6E},{0x87E7, 0xCF6F},{0x87E8, 0xCF70},{0x87E9, 0xCF71},{0x87EA, 0xF3B3},{0x87EB, 0xCF72},{0x87EC, 0xCF73}, - {0x87ED, 0xCF74},{0x87EE, 0xF3B5},{0x87EF, 0xCF75},{0x87F0, 0xCF76},{0x87F1, 0xCF77},{0x87F2, 0xCF78},{0x87F3, 0xCF79},{0x87F4, 0xCF7A}, - {0x87F5, 0xCF7B},{0x87F6, 0xCF7C},{0x87F7, 0xCF7D},{0x87F8, 0xCF7E},{0x87F9, 0xD0B7},{0x87FA, 0xCF80},{0x87FB, 0xCF81},{0x87FC, 0xCF82}, - {0x87FD, 0xCF83},{0x87FE, 0xF3B8},{0x87FF, 0xCF84},{0x8800, 0xCF85},{0x8801, 0xCF86},{0x8802, 0xCF87},{0x8803, 0xD9F9},{0x8804, 0xCF88}, - {0x8805, 0xCF89},{0x8806, 0xCF8A},{0x8807, 0xCF8B},{0x8808, 0xCF8C},{0x8809, 0xCF8D},{0x880A, 0xF3B9},{0x880B, 0xCF8E},{0x880C, 0xCF8F}, - {0x880D, 0xCF90},{0x880E, 0xCF91},{0x880F, 0xCF92},{0x8810, 0xCF93},{0x8811, 0xCF94},{0x8812, 0xCF95},{0x8813, 0xF3B7},{0x8814, 0xCF96}, - {0x8815, 0xC8E4},{0x8816, 0xF3B6},{0x8817, 0xCF97},{0x8818, 0xCF98},{0x8819, 0xCF99},{0x881A, 0xCF9A},{0x881B, 0xF3BA},{0x881C, 0xCF9B}, - {0x881D, 0xCF9C},{0x881E, 0xCF9D},{0x881F, 0xCF9E},{0x8820, 0xCF9F},{0x8821, 0xF3BB},{0x8822, 0xB4C0},{0x8823, 0xCFA0},{0x8824, 0xD040}, - {0x8825, 0xD041},{0x8826, 0xD042},{0x8827, 0xD043},{0x8828, 0xD044},{0x8829, 0xD045},{0x882A, 0xD046},{0x882B, 0xD047},{0x882C, 0xD048}, - {0x882D, 0xD049},{0x882E, 0xD04A},{0x882F, 0xD04B},{0x8830, 0xD04C},{0x8831, 0xD04D},{0x8832, 0xEEC3},{0x8833, 0xD04E},{0x8834, 0xD04F}, - {0x8835, 0xD050},{0x8836, 0xD051},{0x8837, 0xD052},{0x8838, 0xD053},{0x8839, 0xF3BC},{0x883A, 0xD054},{0x883B, 0xD055},{0x883C, 0xF3BD}, - {0x883D, 0xD056},{0x883E, 0xD057},{0x883F, 0xD058},{0x8840, 0xD1AA},{0x8841, 0xD059},{0x8842, 0xD05A},{0x8843, 0xD05B},{0x8844, 0xF4AC}, - {0x8845, 0xD0C6},{0x8846, 0xD05C},{0x8847, 0xD05D},{0x8848, 0xD05E},{0x8849, 0xD05F},{0x884A, 0xD060},{0x884B, 0xD061},{0x884C, 0xD0D0}, - {0x884D, 0xD1DC},{0x884E, 0xD062},{0x884F, 0xD063},{0x8850, 0xD064},{0x8851, 0xD065},{0x8852, 0xD066},{0x8853, 0xD067},{0x8854, 0xCFCE}, - {0x8855, 0xD068},{0x8856, 0xD069},{0x8857, 0xBDD6},{0x8858, 0xD06A},{0x8859, 0xD1C3},{0x885A, 0xD06B},{0x885B, 0xD06C},{0x885C, 0xD06D}, - {0x885D, 0xD06E},{0x885E, 0xD06F},{0x885F, 0xD070},{0x8860, 0xD071},{0x8861, 0xBAE2},{0x8862, 0xE1E9},{0x8863, 0xD2C2},{0x8864, 0xF1C2}, - {0x8865, 0xB2B9},{0x8866, 0xD072},{0x8867, 0xD073},{0x8868, 0xB1ED},{0x8869, 0xF1C3},{0x886A, 0xD074},{0x886B, 0xC9C0},{0x886C, 0xB3C4}, - {0x886D, 0xD075},{0x886E, 0xD9F2},{0x886F, 0xD076},{0x8870, 0xCBA5},{0x8871, 0xD077},{0x8872, 0xF1C4},{0x8873, 0xD078},{0x8874, 0xD079}, - {0x8875, 0xD07A},{0x8876, 0xD07B},{0x8877, 0xD6D4},{0x8878, 0xD07C},{0x8879, 0xD07D},{0x887A, 0xD07E},{0x887B, 0xD080},{0x887C, 0xD081}, - {0x887D, 0xF1C5},{0x887E, 0xF4C0},{0x887F, 0xF1C6},{0x8880, 0xD082},{0x8881, 0xD4AC},{0x8882, 0xF1C7},{0x8883, 0xD083},{0x8884, 0xB0C0}, - {0x8885, 0xF4C1},{0x8886, 0xD084},{0x8887, 0xD085},{0x8888, 0xF4C2},{0x8889, 0xD086},{0x888A, 0xD087},{0x888B, 0xB4FC},{0x888C, 0xD088}, - {0x888D, 0xC5DB},{0x888E, 0xD089},{0x888F, 0xD08A},{0x8890, 0xD08B},{0x8891, 0xD08C},{0x8892, 0xCCBB},{0x8893, 0xD08D},{0x8894, 0xD08E}, - {0x8895, 0xD08F},{0x8896, 0xD0E4},{0x8897, 0xD090},{0x8898, 0xD091},{0x8899, 0xD092},{0x889A, 0xD093},{0x889B, 0xD094},{0x889C, 0xCDE0}, - {0x889D, 0xD095},{0x889E, 0xD096},{0x889F, 0xD097},{0x88A0, 0xD098},{0x88A1, 0xD099},{0x88A2, 0xF1C8},{0x88A3, 0xD09A},{0x88A4, 0xD9F3}, - {0x88A5, 0xD09B},{0x88A6, 0xD09C},{0x88A7, 0xD09D},{0x88A8, 0xD09E},{0x88A9, 0xD09F},{0x88AA, 0xD0A0},{0x88AB, 0xB1BB},{0x88AC, 0xD140}, - {0x88AD, 0xCFAE},{0x88AE, 0xD141},{0x88AF, 0xD142},{0x88B0, 0xD143},{0x88B1, 0xB8A4},{0x88B2, 0xD144},{0x88B3, 0xD145},{0x88B4, 0xD146}, - {0x88B5, 0xD147},{0x88B6, 0xD148},{0x88B7, 0xF1CA},{0x88B8, 0xD149},{0x88B9, 0xD14A},{0x88BA, 0xD14B},{0x88BB, 0xD14C},{0x88BC, 0xF1CB}, - {0x88BD, 0xD14D},{0x88BE, 0xD14E},{0x88BF, 0xD14F},{0x88C0, 0xD150},{0x88C1, 0xB2C3},{0x88C2, 0xC1D1},{0x88C3, 0xD151},{0x88C4, 0xD152}, - {0x88C5, 0xD7B0},{0x88C6, 0xF1C9},{0x88C7, 0xD153},{0x88C8, 0xD154},{0x88C9, 0xF1CC},{0x88CA, 0xD155},{0x88CB, 0xD156},{0x88CC, 0xD157}, - {0x88CD, 0xD158},{0x88CE, 0xF1CE},{0x88CF, 0xD159},{0x88D0, 0xD15A},{0x88D1, 0xD15B},{0x88D2, 0xD9F6},{0x88D3, 0xD15C},{0x88D4, 0xD2E1}, - {0x88D5, 0xD4A3},{0x88D6, 0xD15D},{0x88D7, 0xD15E},{0x88D8, 0xF4C3},{0x88D9, 0xC8B9},{0x88DA, 0xD15F},{0x88DB, 0xD160},{0x88DC, 0xD161}, - {0x88DD, 0xD162},{0x88DE, 0xD163},{0x88DF, 0xF4C4},{0x88E0, 0xD164},{0x88E1, 0xD165},{0x88E2, 0xF1CD},{0x88E3, 0xF1CF},{0x88E4, 0xBFE3}, - {0x88E5, 0xF1D0},{0x88E6, 0xD166},{0x88E7, 0xD167},{0x88E8, 0xF1D4},{0x88E9, 0xD168},{0x88EA, 0xD169},{0x88EB, 0xD16A},{0x88EC, 0xD16B}, - {0x88ED, 0xD16C},{0x88EE, 0xD16D},{0x88EF, 0xD16E},{0x88F0, 0xF1D6},{0x88F1, 0xF1D1},{0x88F2, 0xD16F},{0x88F3, 0xC9D1},{0x88F4, 0xC5E1}, - {0x88F5, 0xD170},{0x88F6, 0xD171},{0x88F7, 0xD172},{0x88F8, 0xC2E3},{0x88F9, 0xB9FC},{0x88FA, 0xD173},{0x88FB, 0xD174},{0x88FC, 0xF1D3}, - {0x88FD, 0xD175},{0x88FE, 0xF1D5},{0x88FF, 0xD176},{0x8900, 0xD177},{0x8901, 0xD178},{0x8902, 0xB9D3},{0x8903, 0xD179},{0x8904, 0xD17A}, - {0x8905, 0xD17B},{0x8906, 0xD17C},{0x8907, 0xD17D},{0x8908, 0xD17E},{0x8909, 0xD180},{0x890A, 0xF1DB},{0x890B, 0xD181},{0x890C, 0xD182}, - {0x890D, 0xD183},{0x890E, 0xD184},{0x890F, 0xD185},{0x8910, 0xBAD6},{0x8911, 0xD186},{0x8912, 0xB0FD},{0x8913, 0xF1D9},{0x8914, 0xD187}, - {0x8915, 0xD188},{0x8916, 0xD189},{0x8917, 0xD18A},{0x8918, 0xD18B},{0x8919, 0xF1D8},{0x891A, 0xF1D2},{0x891B, 0xF1DA},{0x891C, 0xD18C}, - {0x891D, 0xD18D},{0x891E, 0xD18E},{0x891F, 0xD18F},{0x8920, 0xD190},{0x8921, 0xF1D7},{0x8922, 0xD191},{0x8923, 0xD192},{0x8924, 0xD193}, - {0x8925, 0xC8EC},{0x8926, 0xD194},{0x8927, 0xD195},{0x8928, 0xD196},{0x8929, 0xD197},{0x892A, 0xCDCA},{0x892B, 0xF1DD},{0x892C, 0xD198}, - {0x892D, 0xD199},{0x892E, 0xD19A},{0x892F, 0xD19B},{0x8930, 0xE5BD},{0x8931, 0xD19C},{0x8932, 0xD19D},{0x8933, 0xD19E},{0x8934, 0xF1DC}, - {0x8935, 0xD19F},{0x8936, 0xF1DE},{0x8937, 0xD1A0},{0x8938, 0xD240},{0x8939, 0xD241},{0x893A, 0xD242},{0x893B, 0xD243},{0x893C, 0xD244}, - {0x893D, 0xD245},{0x893E, 0xD246},{0x893F, 0xD247},{0x8940, 0xD248},{0x8941, 0xF1DF},{0x8942, 0xD249},{0x8943, 0xD24A},{0x8944, 0xCFE5}, - {0x8945, 0xD24B},{0x8946, 0xD24C},{0x8947, 0xD24D},{0x8948, 0xD24E},{0x8949, 0xD24F},{0x894A, 0xD250},{0x894B, 0xD251},{0x894C, 0xD252}, - {0x894D, 0xD253},{0x894E, 0xD254},{0x894F, 0xD255},{0x8950, 0xD256},{0x8951, 0xD257},{0x8952, 0xD258},{0x8953, 0xD259},{0x8954, 0xD25A}, - {0x8955, 0xD25B},{0x8956, 0xD25C},{0x8957, 0xD25D},{0x8958, 0xD25E},{0x8959, 0xD25F},{0x895A, 0xD260},{0x895B, 0xD261},{0x895C, 0xD262}, - {0x895D, 0xD263},{0x895E, 0xF4C5},{0x895F, 0xBDF3},{0x8960, 0xD264},{0x8961, 0xD265},{0x8962, 0xD266},{0x8963, 0xD267},{0x8964, 0xD268}, - {0x8965, 0xD269},{0x8966, 0xF1E0},{0x8967, 0xD26A},{0x8968, 0xD26B},{0x8969, 0xD26C},{0x896A, 0xD26D},{0x896B, 0xD26E},{0x896C, 0xD26F}, - {0x896D, 0xD270},{0x896E, 0xD271},{0x896F, 0xD272},{0x8970, 0xD273},{0x8971, 0xD274},{0x8972, 0xD275},{0x8973, 0xD276},{0x8974, 0xD277}, - {0x8975, 0xD278},{0x8976, 0xD279},{0x8977, 0xD27A},{0x8978, 0xD27B},{0x8979, 0xD27C},{0x897A, 0xD27D},{0x897B, 0xF1E1},{0x897C, 0xD27E}, - {0x897D, 0xD280},{0x897E, 0xD281},{0x897F, 0xCEF7},{0x8980, 0xD282},{0x8981, 0xD2AA},{0x8982, 0xD283},{0x8983, 0xF1FB},{0x8984, 0xD284}, - {0x8985, 0xD285},{0x8986, 0xB8B2},{0x8987, 0xD286},{0x8988, 0xD287},{0x8989, 0xD288},{0x898A, 0xD289},{0x898B, 0xD28A},{0x898C, 0xD28B}, - {0x898D, 0xD28C},{0x898E, 0xD28D},{0x898F, 0xD28E},{0x8990, 0xD28F},{0x8991, 0xD290},{0x8992, 0xD291},{0x8993, 0xD292},{0x8994, 0xD293}, - {0x8995, 0xD294},{0x8996, 0xD295},{0x8997, 0xD296},{0x8998, 0xD297},{0x8999, 0xD298},{0x899A, 0xD299},{0x899B, 0xD29A},{0x899C, 0xD29B}, - {0x899D, 0xD29C},{0x899E, 0xD29D},{0x899F, 0xD29E},{0x89A0, 0xD29F},{0x89A1, 0xD2A0},{0x89A2, 0xD340},{0x89A3, 0xD341},{0x89A4, 0xD342}, - {0x89A5, 0xD343},{0x89A6, 0xD344},{0x89A7, 0xD345},{0x89A8, 0xD346},{0x89A9, 0xD347},{0x89AA, 0xD348},{0x89AB, 0xD349},{0x89AC, 0xD34A}, - {0x89AD, 0xD34B},{0x89AE, 0xD34C},{0x89AF, 0xD34D},{0x89B0, 0xD34E},{0x89B1, 0xD34F},{0x89B2, 0xD350},{0x89B3, 0xD351},{0x89B4, 0xD352}, - {0x89B5, 0xD353},{0x89B6, 0xD354},{0x89B7, 0xD355},{0x89B8, 0xD356},{0x89B9, 0xD357},{0x89BA, 0xD358},{0x89BB, 0xD359},{0x89BC, 0xD35A}, - {0x89BD, 0xD35B},{0x89BE, 0xD35C},{0x89BF, 0xD35D},{0x89C0, 0xD35E},{0x89C1, 0xBCFB},{0x89C2, 0xB9DB},{0x89C3, 0xD35F},{0x89C4, 0xB9E6}, - {0x89C5, 0xC3D9},{0x89C6, 0xCAD3},{0x89C7, 0xEAE8},{0x89C8, 0xC0C0},{0x89C9, 0xBEF5},{0x89CA, 0xEAE9},{0x89CB, 0xEAEA},{0x89CC, 0xEAEB}, - {0x89CD, 0xD360},{0x89CE, 0xEAEC},{0x89CF, 0xEAED},{0x89D0, 0xEAEE},{0x89D1, 0xEAEF},{0x89D2, 0xBDC7},{0x89D3, 0xD361},{0x89D4, 0xD362}, - {0x89D5, 0xD363},{0x89D6, 0xF5FB},{0x89D7, 0xD364},{0x89D8, 0xD365},{0x89D9, 0xD366},{0x89DA, 0xF5FD},{0x89DB, 0xD367},{0x89DC, 0xF5FE}, - {0x89DD, 0xD368},{0x89DE, 0xF5FC},{0x89DF, 0xD369},{0x89E0, 0xD36A},{0x89E1, 0xD36B},{0x89E2, 0xD36C},{0x89E3, 0xBDE2},{0x89E4, 0xD36D}, - {0x89E5, 0xF6A1},{0x89E6, 0xB4A5},{0x89E7, 0xD36E},{0x89E8, 0xD36F},{0x89E9, 0xD370},{0x89EA, 0xD371},{0x89EB, 0xF6A2},{0x89EC, 0xD372}, - {0x89ED, 0xD373},{0x89EE, 0xD374},{0x89EF, 0xF6A3},{0x89F0, 0xD375},{0x89F1, 0xD376},{0x89F2, 0xD377},{0x89F3, 0xECB2},{0x89F4, 0xD378}, - {0x89F5, 0xD379},{0x89F6, 0xD37A},{0x89F7, 0xD37B},{0x89F8, 0xD37C},{0x89F9, 0xD37D},{0x89FA, 0xD37E},{0x89FB, 0xD380},{0x89FC, 0xD381}, - {0x89FD, 0xD382},{0x89FE, 0xD383},{0x89FF, 0xD384},{0x8A00, 0xD1D4},{0x8A01, 0xD385},{0x8A02, 0xD386},{0x8A03, 0xD387},{0x8A04, 0xD388}, - {0x8A05, 0xD389},{0x8A06, 0xD38A},{0x8A07, 0xD9EA},{0x8A08, 0xD38B},{0x8A09, 0xD38C},{0x8A0A, 0xD38D},{0x8A0B, 0xD38E},{0x8A0C, 0xD38F}, - {0x8A0D, 0xD390},{0x8A0E, 0xD391},{0x8A0F, 0xD392},{0x8A10, 0xD393},{0x8A11, 0xD394},{0x8A12, 0xD395},{0x8A13, 0xD396},{0x8A14, 0xD397}, - {0x8A15, 0xD398},{0x8A16, 0xD399},{0x8A17, 0xD39A},{0x8A18, 0xD39B},{0x8A19, 0xD39C},{0x8A1A, 0xD39D},{0x8A1B, 0xD39E},{0x8A1C, 0xD39F}, - {0x8A1D, 0xD3A0},{0x8A1E, 0xD440},{0x8A1F, 0xD441},{0x8A20, 0xD442},{0x8A21, 0xD443},{0x8A22, 0xD444},{0x8A23, 0xD445},{0x8A24, 0xD446}, - {0x8A25, 0xD447},{0x8A26, 0xD448},{0x8A27, 0xD449},{0x8A28, 0xD44A},{0x8A29, 0xD44B},{0x8A2A, 0xD44C},{0x8A2B, 0xD44D},{0x8A2C, 0xD44E}, - {0x8A2D, 0xD44F},{0x8A2E, 0xD450},{0x8A2F, 0xD451},{0x8A30, 0xD452},{0x8A31, 0xD453},{0x8A32, 0xD454},{0x8A33, 0xD455},{0x8A34, 0xD456}, - {0x8A35, 0xD457},{0x8A36, 0xD458},{0x8A37, 0xD459},{0x8A38, 0xD45A},{0x8A39, 0xD45B},{0x8A3A, 0xD45C},{0x8A3B, 0xD45D},{0x8A3C, 0xD45E}, - {0x8A3D, 0xD45F},{0x8A3E, 0xF6A4},{0x8A3F, 0xD460},{0x8A40, 0xD461},{0x8A41, 0xD462},{0x8A42, 0xD463},{0x8A43, 0xD464},{0x8A44, 0xD465}, - {0x8A45, 0xD466},{0x8A46, 0xD467},{0x8A47, 0xD468},{0x8A48, 0xEEBA},{0x8A49, 0xD469},{0x8A4A, 0xD46A},{0x8A4B, 0xD46B},{0x8A4C, 0xD46C}, - {0x8A4D, 0xD46D},{0x8A4E, 0xD46E},{0x8A4F, 0xD46F},{0x8A50, 0xD470},{0x8A51, 0xD471},{0x8A52, 0xD472},{0x8A53, 0xD473},{0x8A54, 0xD474}, - {0x8A55, 0xD475},{0x8A56, 0xD476},{0x8A57, 0xD477},{0x8A58, 0xD478},{0x8A59, 0xD479},{0x8A5A, 0xD47A},{0x8A5B, 0xD47B},{0x8A5C, 0xD47C}, - {0x8A5D, 0xD47D},{0x8A5E, 0xD47E},{0x8A5F, 0xD480},{0x8A60, 0xD481},{0x8A61, 0xD482},{0x8A62, 0xD483},{0x8A63, 0xD484},{0x8A64, 0xD485}, - {0x8A65, 0xD486},{0x8A66, 0xD487},{0x8A67, 0xD488},{0x8A68, 0xD489},{0x8A69, 0xD48A},{0x8A6A, 0xD48B},{0x8A6B, 0xD48C},{0x8A6C, 0xD48D}, - {0x8A6D, 0xD48E},{0x8A6E, 0xD48F},{0x8A6F, 0xD490},{0x8A70, 0xD491},{0x8A71, 0xD492},{0x8A72, 0xD493},{0x8A73, 0xD494},{0x8A74, 0xD495}, - {0x8A75, 0xD496},{0x8A76, 0xD497},{0x8A77, 0xD498},{0x8A78, 0xD499},{0x8A79, 0xD5B2},{0x8A7A, 0xD49A},{0x8A7B, 0xD49B},{0x8A7C, 0xD49C}, - {0x8A7D, 0xD49D},{0x8A7E, 0xD49E},{0x8A7F, 0xD49F},{0x8A80, 0xD4A0},{0x8A81, 0xD540},{0x8A82, 0xD541},{0x8A83, 0xD542},{0x8A84, 0xD543}, - {0x8A85, 0xD544},{0x8A86, 0xD545},{0x8A87, 0xD546},{0x8A88, 0xD547},{0x8A89, 0xD3FE},{0x8A8A, 0xCCDC},{0x8A8B, 0xD548},{0x8A8C, 0xD549}, - {0x8A8D, 0xD54A},{0x8A8E, 0xD54B},{0x8A8F, 0xD54C},{0x8A90, 0xD54D},{0x8A91, 0xD54E},{0x8A92, 0xD54F},{0x8A93, 0xCAC4},{0x8A94, 0xD550}, - {0x8A95, 0xD551},{0x8A96, 0xD552},{0x8A97, 0xD553},{0x8A98, 0xD554},{0x8A99, 0xD555},{0x8A9A, 0xD556},{0x8A9B, 0xD557},{0x8A9C, 0xD558}, - {0x8A9D, 0xD559},{0x8A9E, 0xD55A},{0x8A9F, 0xD55B},{0x8AA0, 0xD55C},{0x8AA1, 0xD55D},{0x8AA2, 0xD55E},{0x8AA3, 0xD55F},{0x8AA4, 0xD560}, - {0x8AA5, 0xD561},{0x8AA6, 0xD562},{0x8AA7, 0xD563},{0x8AA8, 0xD564},{0x8AA9, 0xD565},{0x8AAA, 0xD566},{0x8AAB, 0xD567},{0x8AAC, 0xD568}, - {0x8AAD, 0xD569},{0x8AAE, 0xD56A},{0x8AAF, 0xD56B},{0x8AB0, 0xD56C},{0x8AB1, 0xD56D},{0x8AB2, 0xD56E},{0x8AB3, 0xD56F},{0x8AB4, 0xD570}, - {0x8AB5, 0xD571},{0x8AB6, 0xD572},{0x8AB7, 0xD573},{0x8AB8, 0xD574},{0x8AB9, 0xD575},{0x8ABA, 0xD576},{0x8ABB, 0xD577},{0x8ABC, 0xD578}, - {0x8ABD, 0xD579},{0x8ABE, 0xD57A},{0x8ABF, 0xD57B},{0x8AC0, 0xD57C},{0x8AC1, 0xD57D},{0x8AC2, 0xD57E},{0x8AC3, 0xD580},{0x8AC4, 0xD581}, - {0x8AC5, 0xD582},{0x8AC6, 0xD583},{0x8AC7, 0xD584},{0x8AC8, 0xD585},{0x8AC9, 0xD586},{0x8ACA, 0xD587},{0x8ACB, 0xD588},{0x8ACC, 0xD589}, - {0x8ACD, 0xD58A},{0x8ACE, 0xD58B},{0x8ACF, 0xD58C},{0x8AD0, 0xD58D},{0x8AD1, 0xD58E},{0x8AD2, 0xD58F},{0x8AD3, 0xD590},{0x8AD4, 0xD591}, - {0x8AD5, 0xD592},{0x8AD6, 0xD593},{0x8AD7, 0xD594},{0x8AD8, 0xD595},{0x8AD9, 0xD596},{0x8ADA, 0xD597},{0x8ADB, 0xD598},{0x8ADC, 0xD599}, - {0x8ADD, 0xD59A},{0x8ADE, 0xD59B},{0x8ADF, 0xD59C},{0x8AE0, 0xD59D},{0x8AE1, 0xD59E},{0x8AE2, 0xD59F},{0x8AE3, 0xD5A0},{0x8AE4, 0xD640}, - {0x8AE5, 0xD641},{0x8AE6, 0xD642},{0x8AE7, 0xD643},{0x8AE8, 0xD644},{0x8AE9, 0xD645},{0x8AEA, 0xD646},{0x8AEB, 0xD647},{0x8AEC, 0xD648}, - {0x8AED, 0xD649},{0x8AEE, 0xD64A},{0x8AEF, 0xD64B},{0x8AF0, 0xD64C},{0x8AF1, 0xD64D},{0x8AF2, 0xD64E},{0x8AF3, 0xD64F},{0x8AF4, 0xD650}, - {0x8AF5, 0xD651},{0x8AF6, 0xD652},{0x8AF7, 0xD653},{0x8AF8, 0xD654},{0x8AF9, 0xD655},{0x8AFA, 0xD656},{0x8AFB, 0xD657},{0x8AFC, 0xD658}, - {0x8AFD, 0xD659},{0x8AFE, 0xD65A},{0x8AFF, 0xD65B},{0x8B00, 0xD65C},{0x8B01, 0xD65D},{0x8B02, 0xD65E},{0x8B03, 0xD65F},{0x8B04, 0xD660}, - {0x8B05, 0xD661},{0x8B06, 0xD662},{0x8B07, 0xE5C0},{0x8B08, 0xD663},{0x8B09, 0xD664},{0x8B0A, 0xD665},{0x8B0B, 0xD666},{0x8B0C, 0xD667}, - {0x8B0D, 0xD668},{0x8B0E, 0xD669},{0x8B0F, 0xD66A},{0x8B10, 0xD66B},{0x8B11, 0xD66C},{0x8B12, 0xD66D},{0x8B13, 0xD66E},{0x8B14, 0xD66F}, - {0x8B15, 0xD670},{0x8B16, 0xD671},{0x8B17, 0xD672},{0x8B18, 0xD673},{0x8B19, 0xD674},{0x8B1A, 0xD675},{0x8B1B, 0xD676},{0x8B1C, 0xD677}, - {0x8B1D, 0xD678},{0x8B1E, 0xD679},{0x8B1F, 0xD67A},{0x8B20, 0xD67B},{0x8B21, 0xD67C},{0x8B22, 0xD67D},{0x8B23, 0xD67E},{0x8B24, 0xD680}, - {0x8B25, 0xD681},{0x8B26, 0xF6A5},{0x8B27, 0xD682},{0x8B28, 0xD683},{0x8B29, 0xD684},{0x8B2A, 0xD685},{0x8B2B, 0xD686},{0x8B2C, 0xD687}, - {0x8B2D, 0xD688},{0x8B2E, 0xD689},{0x8B2F, 0xD68A},{0x8B30, 0xD68B},{0x8B31, 0xD68C},{0x8B32, 0xD68D},{0x8B33, 0xD68E},{0x8B34, 0xD68F}, - {0x8B35, 0xD690},{0x8B36, 0xD691},{0x8B37, 0xD692},{0x8B38, 0xD693},{0x8B39, 0xD694},{0x8B3A, 0xD695},{0x8B3B, 0xD696},{0x8B3C, 0xD697}, - {0x8B3D, 0xD698},{0x8B3E, 0xD699},{0x8B3F, 0xD69A},{0x8B40, 0xD69B},{0x8B41, 0xD69C},{0x8B42, 0xD69D},{0x8B43, 0xD69E},{0x8B44, 0xD69F}, - {0x8B45, 0xD6A0},{0x8B46, 0xD740},{0x8B47, 0xD741},{0x8B48, 0xD742},{0x8B49, 0xD743},{0x8B4A, 0xD744},{0x8B4B, 0xD745},{0x8B4C, 0xD746}, - {0x8B4D, 0xD747},{0x8B4E, 0xD748},{0x8B4F, 0xD749},{0x8B50, 0xD74A},{0x8B51, 0xD74B},{0x8B52, 0xD74C},{0x8B53, 0xD74D},{0x8B54, 0xD74E}, - {0x8B55, 0xD74F},{0x8B56, 0xD750},{0x8B57, 0xD751},{0x8B58, 0xD752},{0x8B59, 0xD753},{0x8B5A, 0xD754},{0x8B5B, 0xD755},{0x8B5C, 0xD756}, - {0x8B5D, 0xD757},{0x8B5E, 0xD758},{0x8B5F, 0xD759},{0x8B60, 0xD75A},{0x8B61, 0xD75B},{0x8B62, 0xD75C},{0x8B63, 0xD75D},{0x8B64, 0xD75E}, - {0x8B65, 0xD75F},{0x8B66, 0xBEAF},{0x8B67, 0xD760},{0x8B68, 0xD761},{0x8B69, 0xD762},{0x8B6A, 0xD763},{0x8B6B, 0xD764},{0x8B6C, 0xC6A9}, - {0x8B6D, 0xD765},{0x8B6E, 0xD766},{0x8B6F, 0xD767},{0x8B70, 0xD768},{0x8B71, 0xD769},{0x8B72, 0xD76A},{0x8B73, 0xD76B},{0x8B74, 0xD76C}, - {0x8B75, 0xD76D},{0x8B76, 0xD76E},{0x8B77, 0xD76F},{0x8B78, 0xD770},{0x8B79, 0xD771},{0x8B7A, 0xD772},{0x8B7B, 0xD773},{0x8B7C, 0xD774}, - {0x8B7D, 0xD775},{0x8B7E, 0xD776},{0x8B7F, 0xD777},{0x8B80, 0xD778},{0x8B81, 0xD779},{0x8B82, 0xD77A},{0x8B83, 0xD77B},{0x8B84, 0xD77C}, - {0x8B85, 0xD77D},{0x8B86, 0xD77E},{0x8B87, 0xD780},{0x8B88, 0xD781},{0x8B89, 0xD782},{0x8B8A, 0xD783},{0x8B8B, 0xD784},{0x8B8C, 0xD785}, - {0x8B8D, 0xD786},{0x8B8E, 0xD787},{0x8B8F, 0xD788},{0x8B90, 0xD789},{0x8B91, 0xD78A},{0x8B92, 0xD78B},{0x8B93, 0xD78C},{0x8B94, 0xD78D}, - {0x8B95, 0xD78E},{0x8B96, 0xD78F},{0x8B97, 0xD790},{0x8B98, 0xD791},{0x8B99, 0xD792},{0x8B9A, 0xD793},{0x8B9B, 0xD794},{0x8B9C, 0xD795}, - {0x8B9D, 0xD796},{0x8B9E, 0xD797},{0x8B9F, 0xD798},{0x8BA0, 0xDAA5},{0x8BA1, 0xBCC6},{0x8BA2, 0xB6A9},{0x8BA3, 0xB8BC},{0x8BA4, 0xC8CF}, - {0x8BA5, 0xBCA5},{0x8BA6, 0xDAA6},{0x8BA7, 0xDAA7},{0x8BA8, 0xCCD6},{0x8BA9, 0xC8C3},{0x8BAA, 0xDAA8},{0x8BAB, 0xC6FD},{0x8BAC, 0xD799}, - {0x8BAD, 0xD1B5},{0x8BAE, 0xD2E9},{0x8BAF, 0xD1B6},{0x8BB0, 0xBCC7},{0x8BB1, 0xD79A},{0x8BB2, 0xBDB2},{0x8BB3, 0xBBE4},{0x8BB4, 0xDAA9}, - {0x8BB5, 0xDAAA},{0x8BB6, 0xD1C8},{0x8BB7, 0xDAAB},{0x8BB8, 0xD0ED},{0x8BB9, 0xB6EF},{0x8BBA, 0xC2DB},{0x8BBB, 0xD79B},{0x8BBC, 0xCBCF}, - {0x8BBD, 0xB7ED},{0x8BBE, 0xC9E8},{0x8BBF, 0xB7C3},{0x8BC0, 0xBEF7},{0x8BC1, 0xD6A4},{0x8BC2, 0xDAAC},{0x8BC3, 0xDAAD},{0x8BC4, 0xC6C0}, - {0x8BC5, 0xD7E7},{0x8BC6, 0xCAB6},{0x8BC7, 0xD79C},{0x8BC8, 0xD5A9},{0x8BC9, 0xCBDF},{0x8BCA, 0xD5EF},{0x8BCB, 0xDAAE},{0x8BCC, 0xD6DF}, - {0x8BCD, 0xB4CA},{0x8BCE, 0xDAB0},{0x8BCF, 0xDAAF},{0x8BD0, 0xD79D},{0x8BD1, 0xD2EB},{0x8BD2, 0xDAB1},{0x8BD3, 0xDAB2},{0x8BD4, 0xDAB3}, - {0x8BD5, 0xCAD4},{0x8BD6, 0xDAB4},{0x8BD7, 0xCAAB},{0x8BD8, 0xDAB5},{0x8BD9, 0xDAB6},{0x8BDA, 0xB3CF},{0x8BDB, 0xD6EF},{0x8BDC, 0xDAB7}, - {0x8BDD, 0xBBB0},{0x8BDE, 0xB5AE},{0x8BDF, 0xDAB8},{0x8BE0, 0xDAB9},{0x8BE1, 0xB9EE},{0x8BE2, 0xD1AF},{0x8BE3, 0xD2E8},{0x8BE4, 0xDABA}, - {0x8BE5, 0xB8C3},{0x8BE6, 0xCFEA},{0x8BE7, 0xB2EF},{0x8BE8, 0xDABB},{0x8BE9, 0xDABC},{0x8BEA, 0xD79E},{0x8BEB, 0xBDEB},{0x8BEC, 0xCEDC}, - {0x8BED, 0xD3EF},{0x8BEE, 0xDABD},{0x8BEF, 0xCEF3},{0x8BF0, 0xDABE},{0x8BF1, 0xD3D5},{0x8BF2, 0xBBE5},{0x8BF3, 0xDABF},{0x8BF4, 0xCBB5}, - {0x8BF5, 0xCBD0},{0x8BF6, 0xDAC0},{0x8BF7, 0xC7EB},{0x8BF8, 0xD6EE},{0x8BF9, 0xDAC1},{0x8BFA, 0xC5B5},{0x8BFB, 0xB6C1},{0x8BFC, 0xDAC2}, - {0x8BFD, 0xB7CC},{0x8BFE, 0xBFCE},{0x8BFF, 0xDAC3},{0x8C00, 0xDAC4},{0x8C01, 0xCBAD},{0x8C02, 0xDAC5},{0x8C03, 0xB5F7},{0x8C04, 0xDAC6}, - {0x8C05, 0xC1C2},{0x8C06, 0xD7BB},{0x8C07, 0xDAC7},{0x8C08, 0xCCB8},{0x8C09, 0xD79F},{0x8C0A, 0xD2EA},{0x8C0B, 0xC4B1},{0x8C0C, 0xDAC8}, - {0x8C0D, 0xB5FD},{0x8C0E, 0xBBD1},{0x8C0F, 0xDAC9},{0x8C10, 0xD0B3},{0x8C11, 0xDACA},{0x8C12, 0xDACB},{0x8C13, 0xCEBD},{0x8C14, 0xDACC}, - {0x8C15, 0xDACD},{0x8C16, 0xDACE},{0x8C17, 0xB2F7},{0x8C18, 0xDAD1},{0x8C19, 0xDACF},{0x8C1A, 0xD1E8},{0x8C1B, 0xDAD0},{0x8C1C, 0xC3D5}, - {0x8C1D, 0xDAD2},{0x8C1E, 0xD7A0},{0x8C1F, 0xDAD3},{0x8C20, 0xDAD4},{0x8C21, 0xDAD5},{0x8C22, 0xD0BB},{0x8C23, 0xD2A5},{0x8C24, 0xB0F9}, - {0x8C25, 0xDAD6},{0x8C26, 0xC7AB},{0x8C27, 0xDAD7},{0x8C28, 0xBDF7},{0x8C29, 0xC3A1},{0x8C2A, 0xDAD8},{0x8C2B, 0xDAD9},{0x8C2C, 0xC3FD}, - {0x8C2D, 0xCCB7},{0x8C2E, 0xDADA},{0x8C2F, 0xDADB},{0x8C30, 0xC0BE},{0x8C31, 0xC6D7},{0x8C32, 0xDADC},{0x8C33, 0xDADD},{0x8C34, 0xC7B4}, - {0x8C35, 0xDADE},{0x8C36, 0xDADF},{0x8C37, 0xB9C8},{0x8C38, 0xD840},{0x8C39, 0xD841},{0x8C3A, 0xD842},{0x8C3B, 0xD843},{0x8C3C, 0xD844}, - {0x8C3D, 0xD845},{0x8C3E, 0xD846},{0x8C3F, 0xD847},{0x8C40, 0xD848},{0x8C41, 0xBBED},{0x8C42, 0xD849},{0x8C43, 0xD84A},{0x8C44, 0xD84B}, - {0x8C45, 0xD84C},{0x8C46, 0xB6B9},{0x8C47, 0xF4F8},{0x8C48, 0xD84D},{0x8C49, 0xF4F9},{0x8C4A, 0xD84E},{0x8C4B, 0xD84F},{0x8C4C, 0xCDE3}, - {0x8C4D, 0xD850},{0x8C4E, 0xD851},{0x8C4F, 0xD852},{0x8C50, 0xD853},{0x8C51, 0xD854},{0x8C52, 0xD855},{0x8C53, 0xD856},{0x8C54, 0xD857}, - {0x8C55, 0xF5B9},{0x8C56, 0xD858},{0x8C57, 0xD859},{0x8C58, 0xD85A},{0x8C59, 0xD85B},{0x8C5A, 0xEBE0},{0x8C5B, 0xD85C},{0x8C5C, 0xD85D}, - {0x8C5D, 0xD85E},{0x8C5E, 0xD85F},{0x8C5F, 0xD860},{0x8C60, 0xD861},{0x8C61, 0xCFF3},{0x8C62, 0xBBBF},{0x8C63, 0xD862},{0x8C64, 0xD863}, - {0x8C65, 0xD864},{0x8C66, 0xD865},{0x8C67, 0xD866},{0x8C68, 0xD867},{0x8C69, 0xD868},{0x8C6A, 0xBAC0},{0x8C6B, 0xD4A5},{0x8C6C, 0xD869}, - {0x8C6D, 0xD86A},{0x8C6E, 0xD86B},{0x8C6F, 0xD86C},{0x8C70, 0xD86D},{0x8C71, 0xD86E},{0x8C72, 0xD86F},{0x8C73, 0xE1D9},{0x8C74, 0xD870}, - {0x8C75, 0xD871},{0x8C76, 0xD872},{0x8C77, 0xD873},{0x8C78, 0xF5F4},{0x8C79, 0xB1AA},{0x8C7A, 0xB2F2},{0x8C7B, 0xD874},{0x8C7C, 0xD875}, - {0x8C7D, 0xD876},{0x8C7E, 0xD877},{0x8C7F, 0xD878},{0x8C80, 0xD879},{0x8C81, 0xD87A},{0x8C82, 0xF5F5},{0x8C83, 0xD87B},{0x8C84, 0xD87C}, - {0x8C85, 0xF5F7},{0x8C86, 0xD87D},{0x8C87, 0xD87E},{0x8C88, 0xD880},{0x8C89, 0xBAD1},{0x8C8A, 0xF5F6},{0x8C8B, 0xD881},{0x8C8C, 0xC3B2}, - {0x8C8D, 0xD882},{0x8C8E, 0xD883},{0x8C8F, 0xD884},{0x8C90, 0xD885},{0x8C91, 0xD886},{0x8C92, 0xD887},{0x8C93, 0xD888},{0x8C94, 0xF5F9}, - {0x8C95, 0xD889},{0x8C96, 0xD88A},{0x8C97, 0xD88B},{0x8C98, 0xF5F8},{0x8C99, 0xD88C},{0x8C9A, 0xD88D},{0x8C9B, 0xD88E},{0x8C9C, 0xD88F}, - {0x8C9D, 0xD890},{0x8C9E, 0xD891},{0x8C9F, 0xD892},{0x8CA0, 0xD893},{0x8CA1, 0xD894},{0x8CA2, 0xD895},{0x8CA3, 0xD896},{0x8CA4, 0xD897}, - {0x8CA5, 0xD898},{0x8CA6, 0xD899},{0x8CA7, 0xD89A},{0x8CA8, 0xD89B},{0x8CA9, 0xD89C},{0x8CAA, 0xD89D},{0x8CAB, 0xD89E},{0x8CAC, 0xD89F}, - {0x8CAD, 0xD8A0},{0x8CAE, 0xD940},{0x8CAF, 0xD941},{0x8CB0, 0xD942},{0x8CB1, 0xD943},{0x8CB2, 0xD944},{0x8CB3, 0xD945},{0x8CB4, 0xD946}, - {0x8CB5, 0xD947},{0x8CB6, 0xD948},{0x8CB7, 0xD949},{0x8CB8, 0xD94A},{0x8CB9, 0xD94B},{0x8CBA, 0xD94C},{0x8CBB, 0xD94D},{0x8CBC, 0xD94E}, - {0x8CBD, 0xD94F},{0x8CBE, 0xD950},{0x8CBF, 0xD951},{0x8CC0, 0xD952},{0x8CC1, 0xD953},{0x8CC2, 0xD954},{0x8CC3, 0xD955},{0x8CC4, 0xD956}, - {0x8CC5, 0xD957},{0x8CC6, 0xD958},{0x8CC7, 0xD959},{0x8CC8, 0xD95A},{0x8CC9, 0xD95B},{0x8CCA, 0xD95C},{0x8CCB, 0xD95D},{0x8CCC, 0xD95E}, - {0x8CCD, 0xD95F},{0x8CCE, 0xD960},{0x8CCF, 0xD961},{0x8CD0, 0xD962},{0x8CD1, 0xD963},{0x8CD2, 0xD964},{0x8CD3, 0xD965},{0x8CD4, 0xD966}, - {0x8CD5, 0xD967},{0x8CD6, 0xD968},{0x8CD7, 0xD969},{0x8CD8, 0xD96A},{0x8CD9, 0xD96B},{0x8CDA, 0xD96C},{0x8CDB, 0xD96D},{0x8CDC, 0xD96E}, - {0x8CDD, 0xD96F},{0x8CDE, 0xD970},{0x8CDF, 0xD971},{0x8CE0, 0xD972},{0x8CE1, 0xD973},{0x8CE2, 0xD974},{0x8CE3, 0xD975},{0x8CE4, 0xD976}, - {0x8CE5, 0xD977},{0x8CE6, 0xD978},{0x8CE7, 0xD979},{0x8CE8, 0xD97A},{0x8CE9, 0xD97B},{0x8CEA, 0xD97C},{0x8CEB, 0xD97D},{0x8CEC, 0xD97E}, - {0x8CED, 0xD980},{0x8CEE, 0xD981},{0x8CEF, 0xD982},{0x8CF0, 0xD983},{0x8CF1, 0xD984},{0x8CF2, 0xD985},{0x8CF3, 0xD986},{0x8CF4, 0xD987}, - {0x8CF5, 0xD988},{0x8CF6, 0xD989},{0x8CF7, 0xD98A},{0x8CF8, 0xD98B},{0x8CF9, 0xD98C},{0x8CFA, 0xD98D},{0x8CFB, 0xD98E},{0x8CFC, 0xD98F}, - {0x8CFD, 0xD990},{0x8CFE, 0xD991},{0x8CFF, 0xD992},{0x8D00, 0xD993},{0x8D01, 0xD994},{0x8D02, 0xD995},{0x8D03, 0xD996},{0x8D04, 0xD997}, - {0x8D05, 0xD998},{0x8D06, 0xD999},{0x8D07, 0xD99A},{0x8D08, 0xD99B},{0x8D09, 0xD99C},{0x8D0A, 0xD99D},{0x8D0B, 0xD99E},{0x8D0C, 0xD99F}, - {0x8D0D, 0xD9A0},{0x8D0E, 0xDA40},{0x8D0F, 0xDA41},{0x8D10, 0xDA42},{0x8D11, 0xDA43},{0x8D12, 0xDA44},{0x8D13, 0xDA45},{0x8D14, 0xDA46}, - {0x8D15, 0xDA47},{0x8D16, 0xDA48},{0x8D17, 0xDA49},{0x8D18, 0xDA4A},{0x8D19, 0xDA4B},{0x8D1A, 0xDA4C},{0x8D1B, 0xDA4D},{0x8D1C, 0xDA4E}, - {0x8D1D, 0xB1B4},{0x8D1E, 0xD5EA},{0x8D1F, 0xB8BA},{0x8D20, 0xDA4F},{0x8D21, 0xB9B1},{0x8D22, 0xB2C6},{0x8D23, 0xD4F0},{0x8D24, 0xCFCD}, - {0x8D25, 0xB0DC},{0x8D26, 0xD5CB},{0x8D27, 0xBBF5},{0x8D28, 0xD6CA},{0x8D29, 0xB7B7},{0x8D2A, 0xCCB0},{0x8D2B, 0xC6B6},{0x8D2C, 0xB1E1}, - {0x8D2D, 0xB9BA},{0x8D2E, 0xD6FC},{0x8D2F, 0xB9E1},{0x8D30, 0xB7A1},{0x8D31, 0xBCFA},{0x8D32, 0xEADA},{0x8D33, 0xEADB},{0x8D34, 0xCCF9}, - {0x8D35, 0xB9F3},{0x8D36, 0xEADC},{0x8D37, 0xB4FB},{0x8D38, 0xC3B3},{0x8D39, 0xB7D1},{0x8D3A, 0xBAD8},{0x8D3B, 0xEADD},{0x8D3C, 0xD4F4}, - {0x8D3D, 0xEADE},{0x8D3E, 0xBCD6},{0x8D3F, 0xBBDF},{0x8D40, 0xEADF},{0x8D41, 0xC1DE},{0x8D42, 0xC2B8},{0x8D43, 0xD4DF},{0x8D44, 0xD7CA}, - {0x8D45, 0xEAE0},{0x8D46, 0xEAE1},{0x8D47, 0xEAE4},{0x8D48, 0xEAE2},{0x8D49, 0xEAE3},{0x8D4A, 0xC9DE},{0x8D4B, 0xB8B3},{0x8D4C, 0xB6C4}, - {0x8D4D, 0xEAE5},{0x8D4E, 0xCAEA},{0x8D4F, 0xC9CD},{0x8D50, 0xB4CD},{0x8D51, 0xDA50},{0x8D52, 0xDA51},{0x8D53, 0xE2D9},{0x8D54, 0xC5E2}, - {0x8D55, 0xEAE6},{0x8D56, 0xC0B5},{0x8D57, 0xDA52},{0x8D58, 0xD7B8},{0x8D59, 0xEAE7},{0x8D5A, 0xD7AC},{0x8D5B, 0xC8FC},{0x8D5C, 0xD8D3}, - {0x8D5D, 0xD8CD},{0x8D5E, 0xD4DE},{0x8D5F, 0xDA53},{0x8D60, 0xD4F9},{0x8D61, 0xC9C4},{0x8D62, 0xD3AE},{0x8D63, 0xB8D3},{0x8D64, 0xB3E0}, - {0x8D65, 0xDA54},{0x8D66, 0xC9E2},{0x8D67, 0xF4F6},{0x8D68, 0xDA55},{0x8D69, 0xDA56},{0x8D6A, 0xDA57},{0x8D6B, 0xBAD5},{0x8D6C, 0xDA58}, - {0x8D6D, 0xF4F7},{0x8D6E, 0xDA59},{0x8D6F, 0xDA5A},{0x8D70, 0xD7DF},{0x8D71, 0xDA5B},{0x8D72, 0xDA5C},{0x8D73, 0xF4F1},{0x8D74, 0xB8B0}, - {0x8D75, 0xD5D4},{0x8D76, 0xB8CF},{0x8D77, 0xC6F0},{0x8D78, 0xDA5D},{0x8D79, 0xDA5E},{0x8D7A, 0xDA5F},{0x8D7B, 0xDA60},{0x8D7C, 0xDA61}, - {0x8D7D, 0xDA62},{0x8D7E, 0xDA63},{0x8D7F, 0xDA64},{0x8D80, 0xDA65},{0x8D81, 0xB3C3},{0x8D82, 0xDA66},{0x8D83, 0xDA67},{0x8D84, 0xF4F2}, - {0x8D85, 0xB3AC},{0x8D86, 0xDA68},{0x8D87, 0xDA69},{0x8D88, 0xDA6A},{0x8D89, 0xDA6B},{0x8D8A, 0xD4BD},{0x8D8B, 0xC7F7},{0x8D8C, 0xDA6C}, - {0x8D8D, 0xDA6D},{0x8D8E, 0xDA6E},{0x8D8F, 0xDA6F},{0x8D90, 0xDA70},{0x8D91, 0xF4F4},{0x8D92, 0xDA71},{0x8D93, 0xDA72},{0x8D94, 0xF4F3}, - {0x8D95, 0xDA73},{0x8D96, 0xDA74},{0x8D97, 0xDA75},{0x8D98, 0xDA76},{0x8D99, 0xDA77},{0x8D9A, 0xDA78},{0x8D9B, 0xDA79},{0x8D9C, 0xDA7A}, - {0x8D9D, 0xDA7B},{0x8D9E, 0xDA7C},{0x8D9F, 0xCCCB},{0x8DA0, 0xDA7D},{0x8DA1, 0xDA7E},{0x8DA2, 0xDA80},{0x8DA3, 0xC8A4},{0x8DA4, 0xDA81}, - {0x8DA5, 0xDA82},{0x8DA6, 0xDA83},{0x8DA7, 0xDA84},{0x8DA8, 0xDA85},{0x8DA9, 0xDA86},{0x8DAA, 0xDA87},{0x8DAB, 0xDA88},{0x8DAC, 0xDA89}, - {0x8DAD, 0xDA8A},{0x8DAE, 0xDA8B},{0x8DAF, 0xDA8C},{0x8DB0, 0xDA8D},{0x8DB1, 0xF4F5},{0x8DB2, 0xDA8E},{0x8DB3, 0xD7E3},{0x8DB4, 0xC5BF}, - {0x8DB5, 0xF5C0},{0x8DB6, 0xDA8F},{0x8DB7, 0xDA90},{0x8DB8, 0xF5BB},{0x8DB9, 0xDA91},{0x8DBA, 0xF5C3},{0x8DBB, 0xDA92},{0x8DBC, 0xF5C2}, - {0x8DBD, 0xDA93},{0x8DBE, 0xD6BA},{0x8DBF, 0xF5C1},{0x8DC0, 0xDA94},{0x8DC1, 0xDA95},{0x8DC2, 0xDA96},{0x8DC3, 0xD4BE},{0x8DC4, 0xF5C4}, - {0x8DC5, 0xDA97},{0x8DC6, 0xF5CC},{0x8DC7, 0xDA98},{0x8DC8, 0xDA99},{0x8DC9, 0xDA9A},{0x8DCA, 0xDA9B},{0x8DCB, 0xB0CF},{0x8DCC, 0xB5F8}, - {0x8DCD, 0xDA9C},{0x8DCE, 0xF5C9},{0x8DCF, 0xF5CA},{0x8DD0, 0xDA9D},{0x8DD1, 0xC5DC},{0x8DD2, 0xDA9E},{0x8DD3, 0xDA9F},{0x8DD4, 0xDAA0}, - {0x8DD5, 0xDB40},{0x8DD6, 0xF5C5},{0x8DD7, 0xF5C6},{0x8DD8, 0xDB41},{0x8DD9, 0xDB42},{0x8DDA, 0xF5C7},{0x8DDB, 0xF5CB},{0x8DDC, 0xDB43}, - {0x8DDD, 0xBEE0},{0x8DDE, 0xF5C8},{0x8DDF, 0xB8FA},{0x8DE0, 0xDB44},{0x8DE1, 0xDB45},{0x8DE2, 0xDB46},{0x8DE3, 0xF5D0},{0x8DE4, 0xF5D3}, - {0x8DE5, 0xDB47},{0x8DE6, 0xDB48},{0x8DE7, 0xDB49},{0x8DE8, 0xBFE7},{0x8DE9, 0xDB4A},{0x8DEA, 0xB9F2},{0x8DEB, 0xF5BC},{0x8DEC, 0xF5CD}, - {0x8DED, 0xDB4B},{0x8DEE, 0xDB4C},{0x8DEF, 0xC2B7},{0x8DF0, 0xDB4D},{0x8DF1, 0xDB4E},{0x8DF2, 0xDB4F},{0x8DF3, 0xCCF8},{0x8DF4, 0xDB50}, - {0x8DF5, 0xBCF9},{0x8DF6, 0xDB51},{0x8DF7, 0xF5CE},{0x8DF8, 0xF5CF},{0x8DF9, 0xF5D1},{0x8DFA, 0xB6E5},{0x8DFB, 0xF5D2},{0x8DFC, 0xDB52}, - {0x8DFD, 0xF5D5},{0x8DFE, 0xDB53},{0x8DFF, 0xDB54},{0x8E00, 0xDB55},{0x8E01, 0xDB56},{0x8E02, 0xDB57},{0x8E03, 0xDB58},{0x8E04, 0xDB59}, - {0x8E05, 0xF5BD},{0x8E06, 0xDB5A},{0x8E07, 0xDB5B},{0x8E08, 0xDB5C},{0x8E09, 0xF5D4},{0x8E0A, 0xD3BB},{0x8E0B, 0xDB5D},{0x8E0C, 0xB3EC}, - {0x8E0D, 0xDB5E},{0x8E0E, 0xDB5F},{0x8E0F, 0xCCA4},{0x8E10, 0xDB60},{0x8E11, 0xDB61},{0x8E12, 0xDB62},{0x8E13, 0xDB63},{0x8E14, 0xF5D6}, - {0x8E15, 0xDB64},{0x8E16, 0xDB65},{0x8E17, 0xDB66},{0x8E18, 0xDB67},{0x8E19, 0xDB68},{0x8E1A, 0xDB69},{0x8E1B, 0xDB6A},{0x8E1C, 0xDB6B}, - {0x8E1D, 0xF5D7},{0x8E1E, 0xBEE1},{0x8E1F, 0xF5D8},{0x8E20, 0xDB6C},{0x8E21, 0xDB6D},{0x8E22, 0xCCDF},{0x8E23, 0xF5DB},{0x8E24, 0xDB6E}, - {0x8E25, 0xDB6F},{0x8E26, 0xDB70},{0x8E27, 0xDB71},{0x8E28, 0xDB72},{0x8E29, 0xB2C8},{0x8E2A, 0xD7D9},{0x8E2B, 0xDB73},{0x8E2C, 0xF5D9}, - {0x8E2D, 0xDB74},{0x8E2E, 0xF5DA},{0x8E2F, 0xF5DC},{0x8E30, 0xDB75},{0x8E31, 0xF5E2},{0x8E32, 0xDB76},{0x8E33, 0xDB77},{0x8E34, 0xDB78}, - {0x8E35, 0xF5E0},{0x8E36, 0xDB79},{0x8E37, 0xDB7A},{0x8E38, 0xDB7B},{0x8E39, 0xF5DF},{0x8E3A, 0xF5DD},{0x8E3B, 0xDB7C},{0x8E3C, 0xDB7D}, - {0x8E3D, 0xF5E1},{0x8E3E, 0xDB7E},{0x8E3F, 0xDB80},{0x8E40, 0xF5DE},{0x8E41, 0xF5E4},{0x8E42, 0xF5E5},{0x8E43, 0xDB81},{0x8E44, 0xCCE3}, - {0x8E45, 0xDB82},{0x8E46, 0xDB83},{0x8E47, 0xE5BF},{0x8E48, 0xB5B8},{0x8E49, 0xF5E3},{0x8E4A, 0xF5E8},{0x8E4B, 0xCCA3},{0x8E4C, 0xDB84}, - {0x8E4D, 0xDB85},{0x8E4E, 0xDB86},{0x8E4F, 0xDB87},{0x8E50, 0xDB88},{0x8E51, 0xF5E6},{0x8E52, 0xF5E7},{0x8E53, 0xDB89},{0x8E54, 0xDB8A}, - {0x8E55, 0xDB8B},{0x8E56, 0xDB8C},{0x8E57, 0xDB8D},{0x8E58, 0xDB8E},{0x8E59, 0xF5BE},{0x8E5A, 0xDB8F},{0x8E5B, 0xDB90},{0x8E5C, 0xDB91}, - {0x8E5D, 0xDB92},{0x8E5E, 0xDB93},{0x8E5F, 0xDB94},{0x8E60, 0xDB95},{0x8E61, 0xDB96},{0x8E62, 0xDB97},{0x8E63, 0xDB98},{0x8E64, 0xDB99}, - {0x8E65, 0xDB9A},{0x8E66, 0xB1C4},{0x8E67, 0xDB9B},{0x8E68, 0xDB9C},{0x8E69, 0xF5BF},{0x8E6A, 0xDB9D},{0x8E6B, 0xDB9E},{0x8E6C, 0xB5C5}, - {0x8E6D, 0xB2E4},{0x8E6E, 0xDB9F},{0x8E6F, 0xF5EC},{0x8E70, 0xF5E9},{0x8E71, 0xDBA0},{0x8E72, 0xB6D7},{0x8E73, 0xDC40},{0x8E74, 0xF5ED}, - {0x8E75, 0xDC41},{0x8E76, 0xF5EA},{0x8E77, 0xDC42},{0x8E78, 0xDC43},{0x8E79, 0xDC44},{0x8E7A, 0xDC45},{0x8E7B, 0xDC46},{0x8E7C, 0xF5EB}, - {0x8E7D, 0xDC47},{0x8E7E, 0xDC48},{0x8E7F, 0xB4DA},{0x8E80, 0xDC49},{0x8E81, 0xD4EA},{0x8E82, 0xDC4A},{0x8E83, 0xDC4B},{0x8E84, 0xDC4C}, - {0x8E85, 0xF5EE},{0x8E86, 0xDC4D},{0x8E87, 0xB3F9},{0x8E88, 0xDC4E},{0x8E89, 0xDC4F},{0x8E8A, 0xDC50},{0x8E8B, 0xDC51},{0x8E8C, 0xDC52}, - {0x8E8D, 0xDC53},{0x8E8E, 0xDC54},{0x8E8F, 0xF5EF},{0x8E90, 0xF5F1},{0x8E91, 0xDC55},{0x8E92, 0xDC56},{0x8E93, 0xDC57},{0x8E94, 0xF5F0}, - {0x8E95, 0xDC58},{0x8E96, 0xDC59},{0x8E97, 0xDC5A},{0x8E98, 0xDC5B},{0x8E99, 0xDC5C},{0x8E9A, 0xDC5D},{0x8E9B, 0xDC5E},{0x8E9C, 0xF5F2}, - {0x8E9D, 0xDC5F},{0x8E9E, 0xF5F3},{0x8E9F, 0xDC60},{0x8EA0, 0xDC61},{0x8EA1, 0xDC62},{0x8EA2, 0xDC63},{0x8EA3, 0xDC64},{0x8EA4, 0xDC65}, - {0x8EA5, 0xDC66},{0x8EA6, 0xDC67},{0x8EA7, 0xDC68},{0x8EA8, 0xDC69},{0x8EA9, 0xDC6A},{0x8EAA, 0xDC6B},{0x8EAB, 0xC9ED},{0x8EAC, 0xB9AA}, - {0x8EAD, 0xDC6C},{0x8EAE, 0xDC6D},{0x8EAF, 0xC7FB},{0x8EB0, 0xDC6E},{0x8EB1, 0xDC6F},{0x8EB2, 0xB6E3},{0x8EB3, 0xDC70},{0x8EB4, 0xDC71}, - {0x8EB5, 0xDC72},{0x8EB6, 0xDC73},{0x8EB7, 0xDC74},{0x8EB8, 0xDC75},{0x8EB9, 0xDC76},{0x8EBA, 0xCCC9},{0x8EBB, 0xDC77},{0x8EBC, 0xDC78}, - {0x8EBD, 0xDC79},{0x8EBE, 0xDC7A},{0x8EBF, 0xDC7B},{0x8EC0, 0xDC7C},{0x8EC1, 0xDC7D},{0x8EC2, 0xDC7E},{0x8EC3, 0xDC80},{0x8EC4, 0xDC81}, - {0x8EC5, 0xDC82},{0x8EC6, 0xDC83},{0x8EC7, 0xDC84},{0x8EC8, 0xDC85},{0x8EC9, 0xDC86},{0x8ECA, 0xDC87},{0x8ECB, 0xDC88},{0x8ECC, 0xDC89}, - {0x8ECD, 0xDC8A},{0x8ECE, 0xEAA6},{0x8ECF, 0xDC8B},{0x8ED0, 0xDC8C},{0x8ED1, 0xDC8D},{0x8ED2, 0xDC8E},{0x8ED3, 0xDC8F},{0x8ED4, 0xDC90}, - {0x8ED5, 0xDC91},{0x8ED6, 0xDC92},{0x8ED7, 0xDC93},{0x8ED8, 0xDC94},{0x8ED9, 0xDC95},{0x8EDA, 0xDC96},{0x8EDB, 0xDC97},{0x8EDC, 0xDC98}, - {0x8EDD, 0xDC99},{0x8EDE, 0xDC9A},{0x8EDF, 0xDC9B},{0x8EE0, 0xDC9C},{0x8EE1, 0xDC9D},{0x8EE2, 0xDC9E},{0x8EE3, 0xDC9F},{0x8EE4, 0xDCA0}, - {0x8EE5, 0xDD40},{0x8EE6, 0xDD41},{0x8EE7, 0xDD42},{0x8EE8, 0xDD43},{0x8EE9, 0xDD44},{0x8EEA, 0xDD45},{0x8EEB, 0xDD46},{0x8EEC, 0xDD47}, - {0x8EED, 0xDD48},{0x8EEE, 0xDD49},{0x8EEF, 0xDD4A},{0x8EF0, 0xDD4B},{0x8EF1, 0xDD4C},{0x8EF2, 0xDD4D},{0x8EF3, 0xDD4E},{0x8EF4, 0xDD4F}, - {0x8EF5, 0xDD50},{0x8EF6, 0xDD51},{0x8EF7, 0xDD52},{0x8EF8, 0xDD53},{0x8EF9, 0xDD54},{0x8EFA, 0xDD55},{0x8EFB, 0xDD56},{0x8EFC, 0xDD57}, - {0x8EFD, 0xDD58},{0x8EFE, 0xDD59},{0x8EFF, 0xDD5A},{0x8F00, 0xDD5B},{0x8F01, 0xDD5C},{0x8F02, 0xDD5D},{0x8F03, 0xDD5E},{0x8F04, 0xDD5F}, - {0x8F05, 0xDD60},{0x8F06, 0xDD61},{0x8F07, 0xDD62},{0x8F08, 0xDD63},{0x8F09, 0xDD64},{0x8F0A, 0xDD65},{0x8F0B, 0xDD66},{0x8F0C, 0xDD67}, - {0x8F0D, 0xDD68},{0x8F0E, 0xDD69},{0x8F0F, 0xDD6A},{0x8F10, 0xDD6B},{0x8F11, 0xDD6C},{0x8F12, 0xDD6D},{0x8F13, 0xDD6E},{0x8F14, 0xDD6F}, - {0x8F15, 0xDD70},{0x8F16, 0xDD71},{0x8F17, 0xDD72},{0x8F18, 0xDD73},{0x8F19, 0xDD74},{0x8F1A, 0xDD75},{0x8F1B, 0xDD76},{0x8F1C, 0xDD77}, - {0x8F1D, 0xDD78},{0x8F1E, 0xDD79},{0x8F1F, 0xDD7A},{0x8F20, 0xDD7B},{0x8F21, 0xDD7C},{0x8F22, 0xDD7D},{0x8F23, 0xDD7E},{0x8F24, 0xDD80}, - {0x8F25, 0xDD81},{0x8F26, 0xDD82},{0x8F27, 0xDD83},{0x8F28, 0xDD84},{0x8F29, 0xDD85},{0x8F2A, 0xDD86},{0x8F2B, 0xDD87},{0x8F2C, 0xDD88}, - {0x8F2D, 0xDD89},{0x8F2E, 0xDD8A},{0x8F2F, 0xDD8B},{0x8F30, 0xDD8C},{0x8F31, 0xDD8D},{0x8F32, 0xDD8E},{0x8F33, 0xDD8F},{0x8F34, 0xDD90}, - {0x8F35, 0xDD91},{0x8F36, 0xDD92},{0x8F37, 0xDD93},{0x8F38, 0xDD94},{0x8F39, 0xDD95},{0x8F3A, 0xDD96},{0x8F3B, 0xDD97},{0x8F3C, 0xDD98}, - {0x8F3D, 0xDD99},{0x8F3E, 0xDD9A},{0x8F3F, 0xDD9B},{0x8F40, 0xDD9C},{0x8F41, 0xDD9D},{0x8F42, 0xDD9E},{0x8F43, 0xDD9F},{0x8F44, 0xDDA0}, - {0x8F45, 0xDE40},{0x8F46, 0xDE41},{0x8F47, 0xDE42},{0x8F48, 0xDE43},{0x8F49, 0xDE44},{0x8F4A, 0xDE45},{0x8F4B, 0xDE46},{0x8F4C, 0xDE47}, - {0x8F4D, 0xDE48},{0x8F4E, 0xDE49},{0x8F4F, 0xDE4A},{0x8F50, 0xDE4B},{0x8F51, 0xDE4C},{0x8F52, 0xDE4D},{0x8F53, 0xDE4E},{0x8F54, 0xDE4F}, - {0x8F55, 0xDE50},{0x8F56, 0xDE51},{0x8F57, 0xDE52},{0x8F58, 0xDE53},{0x8F59, 0xDE54},{0x8F5A, 0xDE55},{0x8F5B, 0xDE56},{0x8F5C, 0xDE57}, - {0x8F5D, 0xDE58},{0x8F5E, 0xDE59},{0x8F5F, 0xDE5A},{0x8F60, 0xDE5B},{0x8F61, 0xDE5C},{0x8F62, 0xDE5D},{0x8F63, 0xDE5E},{0x8F64, 0xDE5F}, - {0x8F65, 0xDE60},{0x8F66, 0xB3B5},{0x8F67, 0xD4FE},{0x8F68, 0xB9EC},{0x8F69, 0xD0F9},{0x8F6A, 0xDE61},{0x8F6B, 0xE9ED},{0x8F6C, 0xD7AA}, - {0x8F6D, 0xE9EE},{0x8F6E, 0xC2D6},{0x8F6F, 0xC8ED},{0x8F70, 0xBAE4},{0x8F71, 0xE9EF},{0x8F72, 0xE9F0},{0x8F73, 0xE9F1},{0x8F74, 0xD6E1}, - {0x8F75, 0xE9F2},{0x8F76, 0xE9F3},{0x8F77, 0xE9F5},{0x8F78, 0xE9F4},{0x8F79, 0xE9F6},{0x8F7A, 0xE9F7},{0x8F7B, 0xC7E1},{0x8F7C, 0xE9F8}, - {0x8F7D, 0xD4D8},{0x8F7E, 0xE9F9},{0x8F7F, 0xBDCE},{0x8F80, 0xDE62},{0x8F81, 0xE9FA},{0x8F82, 0xE9FB},{0x8F83, 0xBDCF},{0x8F84, 0xE9FC}, - {0x8F85, 0xB8A8},{0x8F86, 0xC1BE},{0x8F87, 0xE9FD},{0x8F88, 0xB1B2},{0x8F89, 0xBBD4},{0x8F8A, 0xB9F5},{0x8F8B, 0xE9FE},{0x8F8C, 0xDE63}, - {0x8F8D, 0xEAA1},{0x8F8E, 0xEAA2},{0x8F8F, 0xEAA3},{0x8F90, 0xB7F8},{0x8F91, 0xBCAD},{0x8F92, 0xDE64},{0x8F93, 0xCAE4},{0x8F94, 0xE0CE}, - {0x8F95, 0xD4AF},{0x8F96, 0xCFBD},{0x8F97, 0xD5B7},{0x8F98, 0xEAA4},{0x8F99, 0xD5DE},{0x8F9A, 0xEAA5},{0x8F9B, 0xD0C1},{0x8F9C, 0xB9BC}, - {0x8F9D, 0xDE65},{0x8F9E, 0xB4C7},{0x8F9F, 0xB1D9},{0x8FA0, 0xDE66},{0x8FA1, 0xDE67},{0x8FA2, 0xDE68},{0x8FA3, 0xC0B1},{0x8FA4, 0xDE69}, - {0x8FA5, 0xDE6A},{0x8FA6, 0xDE6B},{0x8FA7, 0xDE6C},{0x8FA8, 0xB1E6},{0x8FA9, 0xB1E7},{0x8FAA, 0xDE6D},{0x8FAB, 0xB1E8},{0x8FAC, 0xDE6E}, - {0x8FAD, 0xDE6F},{0x8FAE, 0xDE70},{0x8FAF, 0xDE71},{0x8FB0, 0xB3BD},{0x8FB1, 0xC8E8},{0x8FB2, 0xDE72},{0x8FB3, 0xDE73},{0x8FB4, 0xDE74}, - {0x8FB5, 0xDE75},{0x8FB6, 0xE5C1},{0x8FB7, 0xDE76},{0x8FB8, 0xDE77},{0x8FB9, 0xB1DF},{0x8FBA, 0xDE78},{0x8FBB, 0xDE79},{0x8FBC, 0xDE7A}, - {0x8FBD, 0xC1C9},{0x8FBE, 0xB4EF},{0x8FBF, 0xDE7B},{0x8FC0, 0xDE7C},{0x8FC1, 0xC7A8},{0x8FC2, 0xD3D8},{0x8FC3, 0xDE7D},{0x8FC4, 0xC6F9}, - {0x8FC5, 0xD1B8},{0x8FC6, 0xDE7E},{0x8FC7, 0xB9FD},{0x8FC8, 0xC2F5},{0x8FC9, 0xDE80},{0x8FCA, 0xDE81},{0x8FCB, 0xDE82},{0x8FCC, 0xDE83}, - {0x8FCD, 0xDE84},{0x8FCE, 0xD3AD},{0x8FCF, 0xDE85},{0x8FD0, 0xD4CB},{0x8FD1, 0xBDFC},{0x8FD2, 0xDE86},{0x8FD3, 0xE5C2},{0x8FD4, 0xB7B5}, - {0x8FD5, 0xE5C3},{0x8FD6, 0xDE87},{0x8FD7, 0xDE88},{0x8FD8, 0xBBB9},{0x8FD9, 0xD5E2},{0x8FDA, 0xDE89},{0x8FDB, 0xBDF8},{0x8FDC, 0xD4B6}, - {0x8FDD, 0xCEA5},{0x8FDE, 0xC1AC},{0x8FDF, 0xB3D9},{0x8FE0, 0xDE8A},{0x8FE1, 0xDE8B},{0x8FE2, 0xCCF6},{0x8FE3, 0xDE8C},{0x8FE4, 0xE5C6}, - {0x8FE5, 0xE5C4},{0x8FE6, 0xE5C8},{0x8FE7, 0xDE8D},{0x8FE8, 0xE5CA},{0x8FE9, 0xE5C7},{0x8FEA, 0xB5CF},{0x8FEB, 0xC6C8},{0x8FEC, 0xDE8E}, - {0x8FED, 0xB5FC},{0x8FEE, 0xE5C5},{0x8FEF, 0xDE8F},{0x8FF0, 0xCAF6},{0x8FF1, 0xDE90},{0x8FF2, 0xDE91},{0x8FF3, 0xE5C9},{0x8FF4, 0xDE92}, - {0x8FF5, 0xDE93},{0x8FF6, 0xDE94},{0x8FF7, 0xC3D4},{0x8FF8, 0xB1C5},{0x8FF9, 0xBCA3},{0x8FFA, 0xDE95},{0x8FFB, 0xDE96},{0x8FFC, 0xDE97}, - {0x8FFD, 0xD7B7},{0x8FFE, 0xDE98},{0x8FFF, 0xDE99},{0x9000, 0xCDCB},{0x9001, 0xCBCD},{0x9002, 0xCACA},{0x9003, 0xCCD3},{0x9004, 0xE5CC}, - {0x9005, 0xE5CB},{0x9006, 0xC4E6},{0x9007, 0xDE9A},{0x9008, 0xDE9B},{0x9009, 0xD1A1},{0x900A, 0xD1B7},{0x900B, 0xE5CD},{0x900C, 0xDE9C}, - {0x900D, 0xE5D0},{0x900E, 0xDE9D},{0x900F, 0xCDB8},{0x9010, 0xD6F0},{0x9011, 0xE5CF},{0x9012, 0xB5DD},{0x9013, 0xDE9E},{0x9014, 0xCDBE}, - {0x9015, 0xDE9F},{0x9016, 0xE5D1},{0x9017, 0xB6BA},{0x9018, 0xDEA0},{0x9019, 0xDF40},{0x901A, 0xCDA8},{0x901B, 0xB9E4},{0x901C, 0xDF41}, - {0x901D, 0xCAC5},{0x901E, 0xB3D1},{0x901F, 0xCBD9},{0x9020, 0xD4EC},{0x9021, 0xE5D2},{0x9022, 0xB7EA},{0x9023, 0xDF42},{0x9024, 0xDF43}, - {0x9025, 0xDF44},{0x9026, 0xE5CE},{0x9027, 0xDF45},{0x9028, 0xDF46},{0x9029, 0xDF47},{0x902A, 0xDF48},{0x902B, 0xDF49},{0x902C, 0xDF4A}, - {0x902D, 0xE5D5},{0x902E, 0xB4FE},{0x902F, 0xE5D6},{0x9030, 0xDF4B},{0x9031, 0xDF4C},{0x9032, 0xDF4D},{0x9033, 0xDF4E},{0x9034, 0xDF4F}, - {0x9035, 0xE5D3},{0x9036, 0xE5D4},{0x9037, 0xDF50},{0x9038, 0xD2DD},{0x9039, 0xDF51},{0x903A, 0xDF52},{0x903B, 0xC2DF},{0x903C, 0xB1C6}, - {0x903D, 0xDF53},{0x903E, 0xD3E2},{0x903F, 0xDF54},{0x9040, 0xDF55},{0x9041, 0xB6DD},{0x9042, 0xCBEC},{0x9043, 0xDF56},{0x9044, 0xE5D7}, - {0x9045, 0xDF57},{0x9046, 0xDF58},{0x9047, 0xD3F6},{0x9048, 0xDF59},{0x9049, 0xDF5A},{0x904A, 0xDF5B},{0x904B, 0xDF5C},{0x904C, 0xDF5D}, - {0x904D, 0xB1E9},{0x904E, 0xDF5E},{0x904F, 0xB6F4},{0x9050, 0xE5DA},{0x9051, 0xE5D8},{0x9052, 0xE5D9},{0x9053, 0xB5C0},{0x9054, 0xDF5F}, - {0x9055, 0xDF60},{0x9056, 0xDF61},{0x9057, 0xD2C5},{0x9058, 0xE5DC},{0x9059, 0xDF62},{0x905A, 0xDF63},{0x905B, 0xE5DE},{0x905C, 0xDF64}, - {0x905D, 0xDF65},{0x905E, 0xDF66},{0x905F, 0xDF67},{0x9060, 0xDF68},{0x9061, 0xDF69},{0x9062, 0xE5DD},{0x9063, 0xC7B2},{0x9064, 0xDF6A}, - {0x9065, 0xD2A3},{0x9066, 0xDF6B},{0x9067, 0xDF6C},{0x9068, 0xE5DB},{0x9069, 0xDF6D},{0x906A, 0xDF6E},{0x906B, 0xDF6F},{0x906C, 0xDF70}, - {0x906D, 0xD4E2},{0x906E, 0xD5DA},{0x906F, 0xDF71},{0x9070, 0xDF72},{0x9071, 0xDF73},{0x9072, 0xDF74},{0x9073, 0xDF75},{0x9074, 0xE5E0}, - {0x9075, 0xD7F1},{0x9076, 0xDF76},{0x9077, 0xDF77},{0x9078, 0xDF78},{0x9079, 0xDF79},{0x907A, 0xDF7A},{0x907B, 0xDF7B},{0x907C, 0xDF7C}, - {0x907D, 0xE5E1},{0x907E, 0xDF7D},{0x907F, 0xB1DC},{0x9080, 0xD1FB},{0x9081, 0xDF7E},{0x9082, 0xE5E2},{0x9083, 0xE5E4},{0x9084, 0xDF80}, - {0x9085, 0xDF81},{0x9086, 0xDF82},{0x9087, 0xDF83},{0x9088, 0xE5E3},{0x9089, 0xDF84},{0x908A, 0xDF85},{0x908B, 0xE5E5},{0x908C, 0xDF86}, - {0x908D, 0xDF87},{0x908E, 0xDF88},{0x908F, 0xDF89},{0x9090, 0xDF8A},{0x9091, 0xD2D8},{0x9092, 0xDF8B},{0x9093, 0xB5CB},{0x9094, 0xDF8C}, - {0x9095, 0xE7DF},{0x9096, 0xDF8D},{0x9097, 0xDAF5},{0x9098, 0xDF8E},{0x9099, 0xDAF8},{0x909A, 0xDF8F},{0x909B, 0xDAF6},{0x909C, 0xDF90}, - {0x909D, 0xDAF7},{0x909E, 0xDF91},{0x909F, 0xDF92},{0x90A0, 0xDF93},{0x90A1, 0xDAFA},{0x90A2, 0xD0CF},{0x90A3, 0xC4C7},{0x90A4, 0xDF94}, - {0x90A5, 0xDF95},{0x90A6, 0xB0EE},{0x90A7, 0xDF96},{0x90A8, 0xDF97},{0x90A9, 0xDF98},{0x90AA, 0xD0B0},{0x90AB, 0xDF99},{0x90AC, 0xDAF9}, - {0x90AD, 0xDF9A},{0x90AE, 0xD3CA},{0x90AF, 0xBAAA},{0x90B0, 0xDBA2},{0x90B1, 0xC7F1},{0x90B2, 0xDF9B},{0x90B3, 0xDAFC},{0x90B4, 0xDAFB}, - {0x90B5, 0xC9DB},{0x90B6, 0xDAFD},{0x90B7, 0xDF9C},{0x90B8, 0xDBA1},{0x90B9, 0xD7DE},{0x90BA, 0xDAFE},{0x90BB, 0xC1DA},{0x90BC, 0xDF9D}, - {0x90BD, 0xDF9E},{0x90BE, 0xDBA5},{0x90BF, 0xDF9F},{0x90C0, 0xDFA0},{0x90C1, 0xD3F4},{0x90C2, 0xE040},{0x90C3, 0xE041},{0x90C4, 0xDBA7}, - {0x90C5, 0xDBA4},{0x90C6, 0xE042},{0x90C7, 0xDBA8},{0x90C8, 0xE043},{0x90C9, 0xE044},{0x90CA, 0xBDBC},{0x90CB, 0xE045},{0x90CC, 0xE046}, - {0x90CD, 0xE047},{0x90CE, 0xC0C9},{0x90CF, 0xDBA3},{0x90D0, 0xDBA6},{0x90D1, 0xD6A3},{0x90D2, 0xE048},{0x90D3, 0xDBA9},{0x90D4, 0xE049}, - {0x90D5, 0xE04A},{0x90D6, 0xE04B},{0x90D7, 0xDBAD},{0x90D8, 0xE04C},{0x90D9, 0xE04D},{0x90DA, 0xE04E},{0x90DB, 0xDBAE},{0x90DC, 0xDBAC}, - {0x90DD, 0xBAC2},{0x90DE, 0xE04F},{0x90DF, 0xE050},{0x90E0, 0xE051},{0x90E1, 0xBFA4},{0x90E2, 0xDBAB},{0x90E3, 0xE052},{0x90E4, 0xE053}, - {0x90E5, 0xE054},{0x90E6, 0xDBAA},{0x90E7, 0xD4C7},{0x90E8, 0xB2BF},{0x90E9, 0xE055},{0x90EA, 0xE056},{0x90EB, 0xDBAF},{0x90EC, 0xE057}, - {0x90ED, 0xB9F9},{0x90EE, 0xE058},{0x90EF, 0xDBB0},{0x90F0, 0xE059},{0x90F1, 0xE05A},{0x90F2, 0xE05B},{0x90F3, 0xE05C},{0x90F4, 0xB3BB}, - {0x90F5, 0xE05D},{0x90F6, 0xE05E},{0x90F7, 0xE05F},{0x90F8, 0xB5A6},{0x90F9, 0xE060},{0x90FA, 0xE061},{0x90FB, 0xE062},{0x90FC, 0xE063}, - {0x90FD, 0xB6BC},{0x90FE, 0xDBB1},{0x90FF, 0xE064},{0x9100, 0xE065},{0x9101, 0xE066},{0x9102, 0xB6F5},{0x9103, 0xE067},{0x9104, 0xDBB2}, - {0x9105, 0xE068},{0x9106, 0xE069},{0x9107, 0xE06A},{0x9108, 0xE06B},{0x9109, 0xE06C},{0x910A, 0xE06D},{0x910B, 0xE06E},{0x910C, 0xE06F}, - {0x910D, 0xE070},{0x910E, 0xE071},{0x910F, 0xE072},{0x9110, 0xE073},{0x9111, 0xE074},{0x9112, 0xE075},{0x9113, 0xE076},{0x9114, 0xE077}, - {0x9115, 0xE078},{0x9116, 0xE079},{0x9117, 0xE07A},{0x9118, 0xE07B},{0x9119, 0xB1C9},{0x911A, 0xE07C},{0x911B, 0xE07D},{0x911C, 0xE07E}, - {0x911D, 0xE080},{0x911E, 0xDBB4},{0x911F, 0xE081},{0x9120, 0xE082},{0x9121, 0xE083},{0x9122, 0xDBB3},{0x9123, 0xDBB5},{0x9124, 0xE084}, - {0x9125, 0xE085},{0x9126, 0xE086},{0x9127, 0xE087},{0x9128, 0xE088},{0x9129, 0xE089},{0x912A, 0xE08A},{0x912B, 0xE08B},{0x912C, 0xE08C}, - {0x912D, 0xE08D},{0x912E, 0xE08E},{0x912F, 0xDBB7},{0x9130, 0xE08F},{0x9131, 0xDBB6},{0x9132, 0xE090},{0x9133, 0xE091},{0x9134, 0xE092}, - {0x9135, 0xE093},{0x9136, 0xE094},{0x9137, 0xE095},{0x9138, 0xE096},{0x9139, 0xDBB8},{0x913A, 0xE097},{0x913B, 0xE098},{0x913C, 0xE099}, - {0x913D, 0xE09A},{0x913E, 0xE09B},{0x913F, 0xE09C},{0x9140, 0xE09D},{0x9141, 0xE09E},{0x9142, 0xE09F},{0x9143, 0xDBB9},{0x9144, 0xE0A0}, - {0x9145, 0xE140},{0x9146, 0xDBBA},{0x9147, 0xE141},{0x9148, 0xE142},{0x9149, 0xD3CF},{0x914A, 0xF4FA},{0x914B, 0xC7F5},{0x914C, 0xD7C3}, - {0x914D, 0xC5E4},{0x914E, 0xF4FC},{0x914F, 0xF4FD},{0x9150, 0xF4FB},{0x9151, 0xE143},{0x9152, 0xBEC6},{0x9153, 0xE144},{0x9154, 0xE145}, - {0x9155, 0xE146},{0x9156, 0xE147},{0x9157, 0xD0EF},{0x9158, 0xE148},{0x9159, 0xE149},{0x915A, 0xB7D3},{0x915B, 0xE14A},{0x915C, 0xE14B}, - {0x915D, 0xD4CD},{0x915E, 0xCCAA},{0x915F, 0xE14C},{0x9160, 0xE14D},{0x9161, 0xF5A2},{0x9162, 0xF5A1},{0x9163, 0xBAA8},{0x9164, 0xF4FE}, - {0x9165, 0xCBD6},{0x9166, 0xE14E},{0x9167, 0xE14F},{0x9168, 0xE150},{0x9169, 0xF5A4},{0x916A, 0xC0D2},{0x916B, 0xE151},{0x916C, 0xB3EA}, - {0x916D, 0xE152},{0x916E, 0xCDAA},{0x916F, 0xF5A5},{0x9170, 0xF5A3},{0x9171, 0xBDB4},{0x9172, 0xF5A8},{0x9173, 0xE153},{0x9174, 0xF5A9}, - {0x9175, 0xBDCD},{0x9176, 0xC3B8},{0x9177, 0xBFE1},{0x9178, 0xCBE1},{0x9179, 0xF5AA},{0x917A, 0xE154},{0x917B, 0xE155},{0x917C, 0xE156}, - {0x917D, 0xF5A6},{0x917E, 0xF5A7},{0x917F, 0xC4F0},{0x9180, 0xE157},{0x9181, 0xE158},{0x9182, 0xE159},{0x9183, 0xE15A},{0x9184, 0xE15B}, - {0x9185, 0xF5AC},{0x9186, 0xE15C},{0x9187, 0xB4BC},{0x9188, 0xE15D},{0x9189, 0xD7ED},{0x918A, 0xE15E},{0x918B, 0xB4D7},{0x918C, 0xF5AB}, - {0x918D, 0xF5AE},{0x918E, 0xE15F},{0x918F, 0xE160},{0x9190, 0xF5AD},{0x9191, 0xF5AF},{0x9192, 0xD0D1},{0x9193, 0xE161},{0x9194, 0xE162}, - {0x9195, 0xE163},{0x9196, 0xE164},{0x9197, 0xE165},{0x9198, 0xE166},{0x9199, 0xE167},{0x919A, 0xC3D1},{0x919B, 0xC8A9},{0x919C, 0xE168}, - {0x919D, 0xE169},{0x919E, 0xE16A},{0x919F, 0xE16B},{0x91A0, 0xE16C},{0x91A1, 0xE16D},{0x91A2, 0xF5B0},{0x91A3, 0xF5B1},{0x91A4, 0xE16E}, - {0x91A5, 0xE16F},{0x91A6, 0xE170},{0x91A7, 0xE171},{0x91A8, 0xE172},{0x91A9, 0xE173},{0x91AA, 0xF5B2},{0x91AB, 0xE174},{0x91AC, 0xE175}, - {0x91AD, 0xF5B3},{0x91AE, 0xF5B4},{0x91AF, 0xF5B5},{0x91B0, 0xE176},{0x91B1, 0xE177},{0x91B2, 0xE178},{0x91B3, 0xE179},{0x91B4, 0xF5B7}, - {0x91B5, 0xF5B6},{0x91B6, 0xE17A},{0x91B7, 0xE17B},{0x91B8, 0xE17C},{0x91B9, 0xE17D},{0x91BA, 0xF5B8},{0x91BB, 0xE17E},{0x91BC, 0xE180}, - {0x91BD, 0xE181},{0x91BE, 0xE182},{0x91BF, 0xE183},{0x91C0, 0xE184},{0x91C1, 0xE185},{0x91C2, 0xE186},{0x91C3, 0xE187},{0x91C4, 0xE188}, - {0x91C5, 0xE189},{0x91C6, 0xE18A},{0x91C7, 0xB2C9},{0x91C8, 0xE18B},{0x91C9, 0xD3D4},{0x91CA, 0xCACD},{0x91CB, 0xE18C},{0x91CC, 0xC0EF}, - {0x91CD, 0xD6D8},{0x91CE, 0xD2B0},{0x91CF, 0xC1BF},{0x91D0, 0xE18D},{0x91D1, 0xBDF0},{0x91D2, 0xE18E},{0x91D3, 0xE18F},{0x91D4, 0xE190}, - {0x91D5, 0xE191},{0x91D6, 0xE192},{0x91D7, 0xE193},{0x91D8, 0xE194},{0x91D9, 0xE195},{0x91DA, 0xE196},{0x91DB, 0xE197},{0x91DC, 0xB8AA}, - {0x91DD, 0xE198},{0x91DE, 0xE199},{0x91DF, 0xE19A},{0x91E0, 0xE19B},{0x91E1, 0xE19C},{0x91E2, 0xE19D},{0x91E3, 0xE19E},{0x91E4, 0xE19F}, - {0x91E5, 0xE1A0},{0x91E6, 0xE240},{0x91E7, 0xE241},{0x91E8, 0xE242},{0x91E9, 0xE243},{0x91EA, 0xE244},{0x91EB, 0xE245},{0x91EC, 0xE246}, - {0x91ED, 0xE247},{0x91EE, 0xE248},{0x91EF, 0xE249},{0x91F0, 0xE24A},{0x91F1, 0xE24B},{0x91F2, 0xE24C},{0x91F3, 0xE24D},{0x91F4, 0xE24E}, - {0x91F5, 0xE24F},{0x91F6, 0xE250},{0x91F7, 0xE251},{0x91F8, 0xE252},{0x91F9, 0xE253},{0x91FA, 0xE254},{0x91FB, 0xE255},{0x91FC, 0xE256}, - {0x91FD, 0xE257},{0x91FE, 0xE258},{0x91FF, 0xE259},{0x9200, 0xE25A},{0x9201, 0xE25B},{0x9202, 0xE25C},{0x9203, 0xE25D},{0x9204, 0xE25E}, - {0x9205, 0xE25F},{0x9206, 0xE260},{0x9207, 0xE261},{0x9208, 0xE262},{0x9209, 0xE263},{0x920A, 0xE264},{0x920B, 0xE265},{0x920C, 0xE266}, - {0x920D, 0xE267},{0x920E, 0xE268},{0x920F, 0xE269},{0x9210, 0xE26A},{0x9211, 0xE26B},{0x9212, 0xE26C},{0x9213, 0xE26D},{0x9214, 0xE26E}, - {0x9215, 0xE26F},{0x9216, 0xE270},{0x9217, 0xE271},{0x9218, 0xE272},{0x9219, 0xE273},{0x921A, 0xE274},{0x921B, 0xE275},{0x921C, 0xE276}, - {0x921D, 0xE277},{0x921E, 0xE278},{0x921F, 0xE279},{0x9220, 0xE27A},{0x9221, 0xE27B},{0x9222, 0xE27C},{0x9223, 0xE27D},{0x9224, 0xE27E}, - {0x9225, 0xE280},{0x9226, 0xE281},{0x9227, 0xE282},{0x9228, 0xE283},{0x9229, 0xE284},{0x922A, 0xE285},{0x922B, 0xE286},{0x922C, 0xE287}, - {0x922D, 0xE288},{0x922E, 0xE289},{0x922F, 0xE28A},{0x9230, 0xE28B},{0x9231, 0xE28C},{0x9232, 0xE28D},{0x9233, 0xE28E},{0x9234, 0xE28F}, - {0x9235, 0xE290},{0x9236, 0xE291},{0x9237, 0xE292},{0x9238, 0xE293},{0x9239, 0xE294},{0x923A, 0xE295},{0x923B, 0xE296},{0x923C, 0xE297}, - {0x923D, 0xE298},{0x923E, 0xE299},{0x923F, 0xE29A},{0x9240, 0xE29B},{0x9241, 0xE29C},{0x9242, 0xE29D},{0x9243, 0xE29E},{0x9244, 0xE29F}, - {0x9245, 0xE2A0},{0x9246, 0xE340},{0x9247, 0xE341},{0x9248, 0xE342},{0x9249, 0xE343},{0x924A, 0xE344},{0x924B, 0xE345},{0x924C, 0xE346}, - {0x924D, 0xE347},{0x924E, 0xE348},{0x924F, 0xE349},{0x9250, 0xE34A},{0x9251, 0xE34B},{0x9252, 0xE34C},{0x9253, 0xE34D},{0x9254, 0xE34E}, - {0x9255, 0xE34F},{0x9256, 0xE350},{0x9257, 0xE351},{0x9258, 0xE352},{0x9259, 0xE353},{0x925A, 0xE354},{0x925B, 0xE355},{0x925C, 0xE356}, - {0x925D, 0xE357},{0x925E, 0xE358},{0x925F, 0xE359},{0x9260, 0xE35A},{0x9261, 0xE35B},{0x9262, 0xE35C},{0x9263, 0xE35D},{0x9264, 0xE35E}, - {0x9265, 0xE35F},{0x9266, 0xE360},{0x9267, 0xE361},{0x9268, 0xE362},{0x9269, 0xE363},{0x926A, 0xE364},{0x926B, 0xE365},{0x926C, 0xE366}, - {0x926D, 0xE367},{0x926E, 0xE368},{0x926F, 0xE369},{0x9270, 0xE36A},{0x9271, 0xE36B},{0x9272, 0xE36C},{0x9273, 0xE36D},{0x9274, 0xBCF8}, - {0x9275, 0xE36E},{0x9276, 0xE36F},{0x9277, 0xE370},{0x9278, 0xE371},{0x9279, 0xE372},{0x927A, 0xE373},{0x927B, 0xE374},{0x927C, 0xE375}, - {0x927D, 0xE376},{0x927E, 0xE377},{0x927F, 0xE378},{0x9280, 0xE379},{0x9281, 0xE37A},{0x9282, 0xE37B},{0x9283, 0xE37C},{0x9284, 0xE37D}, - {0x9285, 0xE37E},{0x9286, 0xE380},{0x9287, 0xE381},{0x9288, 0xE382},{0x9289, 0xE383},{0x928A, 0xE384},{0x928B, 0xE385},{0x928C, 0xE386}, - {0x928D, 0xE387},{0x928E, 0xF6C6},{0x928F, 0xE388},{0x9290, 0xE389},{0x9291, 0xE38A},{0x9292, 0xE38B},{0x9293, 0xE38C},{0x9294, 0xE38D}, - {0x9295, 0xE38E},{0x9296, 0xE38F},{0x9297, 0xE390},{0x9298, 0xE391},{0x9299, 0xE392},{0x929A, 0xE393},{0x929B, 0xE394},{0x929C, 0xE395}, - {0x929D, 0xE396},{0x929E, 0xE397},{0x929F, 0xE398},{0x92A0, 0xE399},{0x92A1, 0xE39A},{0x92A2, 0xE39B},{0x92A3, 0xE39C},{0x92A4, 0xE39D}, - {0x92A5, 0xE39E},{0x92A6, 0xE39F},{0x92A7, 0xE3A0},{0x92A8, 0xE440},{0x92A9, 0xE441},{0x92AA, 0xE442},{0x92AB, 0xE443},{0x92AC, 0xE444}, - {0x92AD, 0xE445},{0x92AE, 0xF6C7},{0x92AF, 0xE446},{0x92B0, 0xE447},{0x92B1, 0xE448},{0x92B2, 0xE449},{0x92B3, 0xE44A},{0x92B4, 0xE44B}, - {0x92B5, 0xE44C},{0x92B6, 0xE44D},{0x92B7, 0xE44E},{0x92B8, 0xE44F},{0x92B9, 0xE450},{0x92BA, 0xE451},{0x92BB, 0xE452},{0x92BC, 0xE453}, - {0x92BD, 0xE454},{0x92BE, 0xE455},{0x92BF, 0xE456},{0x92C0, 0xE457},{0x92C1, 0xE458},{0x92C2, 0xE459},{0x92C3, 0xE45A},{0x92C4, 0xE45B}, - {0x92C5, 0xE45C},{0x92C6, 0xE45D},{0x92C7, 0xE45E},{0x92C8, 0xF6C8},{0x92C9, 0xE45F},{0x92CA, 0xE460},{0x92CB, 0xE461},{0x92CC, 0xE462}, - {0x92CD, 0xE463},{0x92CE, 0xE464},{0x92CF, 0xE465},{0x92D0, 0xE466},{0x92D1, 0xE467},{0x92D2, 0xE468},{0x92D3, 0xE469},{0x92D4, 0xE46A}, - {0x92D5, 0xE46B},{0x92D6, 0xE46C},{0x92D7, 0xE46D},{0x92D8, 0xE46E},{0x92D9, 0xE46F},{0x92DA, 0xE470},{0x92DB, 0xE471},{0x92DC, 0xE472}, - {0x92DD, 0xE473},{0x92DE, 0xE474},{0x92DF, 0xE475},{0x92E0, 0xE476},{0x92E1, 0xE477},{0x92E2, 0xE478},{0x92E3, 0xE479},{0x92E4, 0xE47A}, - {0x92E5, 0xE47B},{0x92E6, 0xE47C},{0x92E7, 0xE47D},{0x92E8, 0xE47E},{0x92E9, 0xE480},{0x92EA, 0xE481},{0x92EB, 0xE482},{0x92EC, 0xE483}, - {0x92ED, 0xE484},{0x92EE, 0xE485},{0x92EF, 0xE486},{0x92F0, 0xE487},{0x92F1, 0xE488},{0x92F2, 0xE489},{0x92F3, 0xE48A},{0x92F4, 0xE48B}, - {0x92F5, 0xE48C},{0x92F6, 0xE48D},{0x92F7, 0xE48E},{0x92F8, 0xE48F},{0x92F9, 0xE490},{0x92FA, 0xE491},{0x92FB, 0xE492},{0x92FC, 0xE493}, - {0x92FD, 0xE494},{0x92FE, 0xE495},{0x92FF, 0xE496},{0x9300, 0xE497},{0x9301, 0xE498},{0x9302, 0xE499},{0x9303, 0xE49A},{0x9304, 0xE49B}, - {0x9305, 0xE49C},{0x9306, 0xE49D},{0x9307, 0xE49E},{0x9308, 0xE49F},{0x9309, 0xE4A0},{0x930A, 0xE540},{0x930B, 0xE541},{0x930C, 0xE542}, - {0x930D, 0xE543},{0x930E, 0xE544},{0x930F, 0xE545},{0x9310, 0xE546},{0x9311, 0xE547},{0x9312, 0xE548},{0x9313, 0xE549},{0x9314, 0xE54A}, - {0x9315, 0xE54B},{0x9316, 0xE54C},{0x9317, 0xE54D},{0x9318, 0xE54E},{0x9319, 0xE54F},{0x931A, 0xE550},{0x931B, 0xE551},{0x931C, 0xE552}, - {0x931D, 0xE553},{0x931E, 0xE554},{0x931F, 0xE555},{0x9320, 0xE556},{0x9321, 0xE557},{0x9322, 0xE558},{0x9323, 0xE559},{0x9324, 0xE55A}, - {0x9325, 0xE55B},{0x9326, 0xE55C},{0x9327, 0xE55D},{0x9328, 0xE55E},{0x9329, 0xE55F},{0x932A, 0xE560},{0x932B, 0xE561},{0x932C, 0xE562}, - {0x932D, 0xE563},{0x932E, 0xE564},{0x932F, 0xE565},{0x9330, 0xE566},{0x9331, 0xE567},{0x9332, 0xE568},{0x9333, 0xE569},{0x9334, 0xE56A}, - {0x9335, 0xE56B},{0x9336, 0xE56C},{0x9337, 0xE56D},{0x9338, 0xE56E},{0x9339, 0xE56F},{0x933A, 0xE570},{0x933B, 0xE571},{0x933C, 0xE572}, - {0x933D, 0xE573},{0x933E, 0xF6C9},{0x933F, 0xE574},{0x9340, 0xE575},{0x9341, 0xE576},{0x9342, 0xE577},{0x9343, 0xE578},{0x9344, 0xE579}, - {0x9345, 0xE57A},{0x9346, 0xE57B},{0x9347, 0xE57C},{0x9348, 0xE57D},{0x9349, 0xE57E},{0x934A, 0xE580},{0x934B, 0xE581},{0x934C, 0xE582}, - {0x934D, 0xE583},{0x934E, 0xE584},{0x934F, 0xE585},{0x9350, 0xE586},{0x9351, 0xE587},{0x9352, 0xE588},{0x9353, 0xE589},{0x9354, 0xE58A}, - {0x9355, 0xE58B},{0x9356, 0xE58C},{0x9357, 0xE58D},{0x9358, 0xE58E},{0x9359, 0xE58F},{0x935A, 0xE590},{0x935B, 0xE591},{0x935C, 0xE592}, - {0x935D, 0xE593},{0x935E, 0xE594},{0x935F, 0xE595},{0x9360, 0xE596},{0x9361, 0xE597},{0x9362, 0xE598},{0x9363, 0xE599},{0x9364, 0xE59A}, - {0x9365, 0xE59B},{0x9366, 0xE59C},{0x9367, 0xE59D},{0x9368, 0xE59E},{0x9369, 0xE59F},{0x936A, 0xF6CA},{0x936B, 0xE5A0},{0x936C, 0xE640}, - {0x936D, 0xE641},{0x936E, 0xE642},{0x936F, 0xE643},{0x9370, 0xE644},{0x9371, 0xE645},{0x9372, 0xE646},{0x9373, 0xE647},{0x9374, 0xE648}, - {0x9375, 0xE649},{0x9376, 0xE64A},{0x9377, 0xE64B},{0x9378, 0xE64C},{0x9379, 0xE64D},{0x937A, 0xE64E},{0x937B, 0xE64F},{0x937C, 0xE650}, - {0x937D, 0xE651},{0x937E, 0xE652},{0x937F, 0xE653},{0x9380, 0xE654},{0x9381, 0xE655},{0x9382, 0xE656},{0x9383, 0xE657},{0x9384, 0xE658}, - {0x9385, 0xE659},{0x9386, 0xE65A},{0x9387, 0xE65B},{0x9388, 0xE65C},{0x9389, 0xE65D},{0x938A, 0xE65E},{0x938B, 0xE65F},{0x938C, 0xE660}, - {0x938D, 0xE661},{0x938E, 0xE662},{0x938F, 0xF6CC},{0x9390, 0xE663},{0x9391, 0xE664},{0x9392, 0xE665},{0x9393, 0xE666},{0x9394, 0xE667}, - {0x9395, 0xE668},{0x9396, 0xE669},{0x9397, 0xE66A},{0x9398, 0xE66B},{0x9399, 0xE66C},{0x939A, 0xE66D},{0x939B, 0xE66E},{0x939C, 0xE66F}, - {0x939D, 0xE670},{0x939E, 0xE671},{0x939F, 0xE672},{0x93A0, 0xE673},{0x93A1, 0xE674},{0x93A2, 0xE675},{0x93A3, 0xE676},{0x93A4, 0xE677}, - {0x93A5, 0xE678},{0x93A6, 0xE679},{0x93A7, 0xE67A},{0x93A8, 0xE67B},{0x93A9, 0xE67C},{0x93AA, 0xE67D},{0x93AB, 0xE67E},{0x93AC, 0xE680}, - {0x93AD, 0xE681},{0x93AE, 0xE682},{0x93AF, 0xE683},{0x93B0, 0xE684},{0x93B1, 0xE685},{0x93B2, 0xE686},{0x93B3, 0xE687},{0x93B4, 0xE688}, - {0x93B5, 0xE689},{0x93B6, 0xE68A},{0x93B7, 0xE68B},{0x93B8, 0xE68C},{0x93B9, 0xE68D},{0x93BA, 0xE68E},{0x93BB, 0xE68F},{0x93BC, 0xE690}, - {0x93BD, 0xE691},{0x93BE, 0xE692},{0x93BF, 0xE693},{0x93C0, 0xE694},{0x93C1, 0xE695},{0x93C2, 0xE696},{0x93C3, 0xE697},{0x93C4, 0xE698}, - {0x93C5, 0xE699},{0x93C6, 0xE69A},{0x93C7, 0xE69B},{0x93C8, 0xE69C},{0x93C9, 0xE69D},{0x93CA, 0xF6CB},{0x93CB, 0xE69E},{0x93CC, 0xE69F}, - {0x93CD, 0xE6A0},{0x93CE, 0xE740},{0x93CF, 0xE741},{0x93D0, 0xE742},{0x93D1, 0xE743},{0x93D2, 0xE744},{0x93D3, 0xE745},{0x93D4, 0xE746}, - {0x93D5, 0xE747},{0x93D6, 0xF7E9},{0x93D7, 0xE748},{0x93D8, 0xE749},{0x93D9, 0xE74A},{0x93DA, 0xE74B},{0x93DB, 0xE74C},{0x93DC, 0xE74D}, - {0x93DD, 0xE74E},{0x93DE, 0xE74F},{0x93DF, 0xE750},{0x93E0, 0xE751},{0x93E1, 0xE752},{0x93E2, 0xE753},{0x93E3, 0xE754},{0x93E4, 0xE755}, - {0x93E5, 0xE756},{0x93E6, 0xE757},{0x93E7, 0xE758},{0x93E8, 0xE759},{0x93E9, 0xE75A},{0x93EA, 0xE75B},{0x93EB, 0xE75C},{0x93EC, 0xE75D}, - {0x93ED, 0xE75E},{0x93EE, 0xE75F},{0x93EF, 0xE760},{0x93F0, 0xE761},{0x93F1, 0xE762},{0x93F2, 0xE763},{0x93F3, 0xE764},{0x93F4, 0xE765}, - {0x93F5, 0xE766},{0x93F6, 0xE767},{0x93F7, 0xE768},{0x93F8, 0xE769},{0x93F9, 0xE76A},{0x93FA, 0xE76B},{0x93FB, 0xE76C},{0x93FC, 0xE76D}, - {0x93FD, 0xE76E},{0x93FE, 0xE76F},{0x93FF, 0xE770},{0x9400, 0xE771},{0x9401, 0xE772},{0x9402, 0xE773},{0x9403, 0xE774},{0x9404, 0xE775}, - {0x9405, 0xE776},{0x9406, 0xE777},{0x9407, 0xE778},{0x9408, 0xE779},{0x9409, 0xE77A},{0x940A, 0xE77B},{0x940B, 0xE77C},{0x940C, 0xE77D}, - {0x940D, 0xE77E},{0x940E, 0xE780},{0x940F, 0xE781},{0x9410, 0xE782},{0x9411, 0xE783},{0x9412, 0xE784},{0x9413, 0xE785},{0x9414, 0xE786}, - {0x9415, 0xE787},{0x9416, 0xE788},{0x9417, 0xE789},{0x9418, 0xE78A},{0x9419, 0xE78B},{0x941A, 0xE78C},{0x941B, 0xE78D},{0x941C, 0xE78E}, - {0x941D, 0xE78F},{0x941E, 0xE790},{0x941F, 0xE791},{0x9420, 0xE792},{0x9421, 0xE793},{0x9422, 0xE794},{0x9423, 0xE795},{0x9424, 0xE796}, - {0x9425, 0xE797},{0x9426, 0xE798},{0x9427, 0xE799},{0x9428, 0xE79A},{0x9429, 0xE79B},{0x942A, 0xE79C},{0x942B, 0xE79D},{0x942C, 0xE79E}, - {0x942D, 0xE79F},{0x942E, 0xE7A0},{0x942F, 0xE840},{0x9430, 0xE841},{0x9431, 0xE842},{0x9432, 0xE843},{0x9433, 0xE844},{0x9434, 0xE845}, - {0x9435, 0xE846},{0x9436, 0xE847},{0x9437, 0xE848},{0x9438, 0xE849},{0x9439, 0xE84A},{0x943A, 0xE84B},{0x943B, 0xE84C},{0x943C, 0xE84D}, - {0x943D, 0xE84E},{0x943E, 0xF6CD},{0x943F, 0xE84F},{0x9440, 0xE850},{0x9441, 0xE851},{0x9442, 0xE852},{0x9443, 0xE853},{0x9444, 0xE854}, - {0x9445, 0xE855},{0x9446, 0xE856},{0x9447, 0xE857},{0x9448, 0xE858},{0x9449, 0xE859},{0x944A, 0xE85A},{0x944B, 0xE85B},{0x944C, 0xE85C}, - {0x944D, 0xE85D},{0x944E, 0xE85E},{0x944F, 0xE85F},{0x9450, 0xE860},{0x9451, 0xE861},{0x9452, 0xE862},{0x9453, 0xE863},{0x9454, 0xE864}, - {0x9455, 0xE865},{0x9456, 0xE866},{0x9457, 0xE867},{0x9458, 0xE868},{0x9459, 0xE869},{0x945A, 0xE86A},{0x945B, 0xE86B},{0x945C, 0xE86C}, - {0x945D, 0xE86D},{0x945E, 0xE86E},{0x945F, 0xE86F},{0x9460, 0xE870},{0x9461, 0xE871},{0x9462, 0xE872},{0x9463, 0xE873},{0x9464, 0xE874}, - {0x9465, 0xE875},{0x9466, 0xE876},{0x9467, 0xE877},{0x9468, 0xE878},{0x9469, 0xE879},{0x946A, 0xE87A},{0x946B, 0xF6CE},{0x946C, 0xE87B}, - {0x946D, 0xE87C},{0x946E, 0xE87D},{0x946F, 0xE87E},{0x9470, 0xE880},{0x9471, 0xE881},{0x9472, 0xE882},{0x9473, 0xE883},{0x9474, 0xE884}, - {0x9475, 0xE885},{0x9476, 0xE886},{0x9477, 0xE887},{0x9478, 0xE888},{0x9479, 0xE889},{0x947A, 0xE88A},{0x947B, 0xE88B},{0x947C, 0xE88C}, - {0x947D, 0xE88D},{0x947E, 0xE88E},{0x947F, 0xE88F},{0x9480, 0xE890},{0x9481, 0xE891},{0x9482, 0xE892},{0x9483, 0xE893},{0x9484, 0xE894}, - {0x9485, 0xEEC4},{0x9486, 0xEEC5},{0x9487, 0xEEC6},{0x9488, 0xD5EB},{0x9489, 0xB6A4},{0x948A, 0xEEC8},{0x948B, 0xEEC7},{0x948C, 0xEEC9}, - {0x948D, 0xEECA},{0x948E, 0xC7A5},{0x948F, 0xEECB},{0x9490, 0xEECC},{0x9491, 0xE895},{0x9492, 0xB7B0},{0x9493, 0xB5F6},{0x9494, 0xEECD}, - {0x9495, 0xEECF},{0x9496, 0xE896},{0x9497, 0xEECE},{0x9498, 0xE897},{0x9499, 0xB8C6},{0x949A, 0xEED0},{0x949B, 0xEED1},{0x949C, 0xEED2}, - {0x949D, 0xB6DB},{0x949E, 0xB3AE},{0x949F, 0xD6D3},{0x94A0, 0xC4C6},{0x94A1, 0xB1B5},{0x94A2, 0xB8D6},{0x94A3, 0xEED3},{0x94A4, 0xEED4}, - {0x94A5, 0xD4BF},{0x94A6, 0xC7D5},{0x94A7, 0xBEFB},{0x94A8, 0xCED9},{0x94A9, 0xB9B3},{0x94AA, 0xEED6},{0x94AB, 0xEED5},{0x94AC, 0xEED8}, - {0x94AD, 0xEED7},{0x94AE, 0xC5A5},{0x94AF, 0xEED9},{0x94B0, 0xEEDA},{0x94B1, 0xC7AE},{0x94B2, 0xEEDB},{0x94B3, 0xC7AF},{0x94B4, 0xEEDC}, - {0x94B5, 0xB2A7},{0x94B6, 0xEEDD},{0x94B7, 0xEEDE},{0x94B8, 0xEEDF},{0x94B9, 0xEEE0},{0x94BA, 0xEEE1},{0x94BB, 0xD7EA},{0x94BC, 0xEEE2}, - {0x94BD, 0xEEE3},{0x94BE, 0xBCD8},{0x94BF, 0xEEE4},{0x94C0, 0xD3CB},{0x94C1, 0xCCFA},{0x94C2, 0xB2AC},{0x94C3, 0xC1E5},{0x94C4, 0xEEE5}, - {0x94C5, 0xC7A6},{0x94C6, 0xC3AD},{0x94C7, 0xE898},{0x94C8, 0xEEE6},{0x94C9, 0xEEE7},{0x94CA, 0xEEE8},{0x94CB, 0xEEE9},{0x94CC, 0xEEEA}, - {0x94CD, 0xEEEB},{0x94CE, 0xEEEC},{0x94CF, 0xE899},{0x94D0, 0xEEED},{0x94D1, 0xEEEE},{0x94D2, 0xEEEF},{0x94D3, 0xE89A},{0x94D4, 0xE89B}, - {0x94D5, 0xEEF0},{0x94D6, 0xEEF1},{0x94D7, 0xEEF2},{0x94D8, 0xEEF4},{0x94D9, 0xEEF3},{0x94DA, 0xE89C},{0x94DB, 0xEEF5},{0x94DC, 0xCDAD}, - {0x94DD, 0xC2C1},{0x94DE, 0xEEF6},{0x94DF, 0xEEF7},{0x94E0, 0xEEF8},{0x94E1, 0xD5A1},{0x94E2, 0xEEF9},{0x94E3, 0xCFB3},{0x94E4, 0xEEFA}, - {0x94E5, 0xEEFB},{0x94E6, 0xE89D},{0x94E7, 0xEEFC},{0x94E8, 0xEEFD},{0x94E9, 0xEFA1},{0x94EA, 0xEEFE},{0x94EB, 0xEFA2},{0x94EC, 0xB8F5}, - {0x94ED, 0xC3FA},{0x94EE, 0xEFA3},{0x94EF, 0xEFA4},{0x94F0, 0xBDC2},{0x94F1, 0xD2BF},{0x94F2, 0xB2F9},{0x94F3, 0xEFA5},{0x94F4, 0xEFA6}, - {0x94F5, 0xEFA7},{0x94F6, 0xD2F8},{0x94F7, 0xEFA8},{0x94F8, 0xD6FD},{0x94F9, 0xEFA9},{0x94FA, 0xC6CC},{0x94FB, 0xE89E},{0x94FC, 0xEFAA}, - {0x94FD, 0xEFAB},{0x94FE, 0xC1B4},{0x94FF, 0xEFAC},{0x9500, 0xCFFA},{0x9501, 0xCBF8},{0x9502, 0xEFAE},{0x9503, 0xEFAD},{0x9504, 0xB3FA}, - {0x9505, 0xB9F8},{0x9506, 0xEFAF},{0x9507, 0xEFB0},{0x9508, 0xD0E2},{0x9509, 0xEFB1},{0x950A, 0xEFB2},{0x950B, 0xB7E6},{0x950C, 0xD0BF}, - {0x950D, 0xEFB3},{0x950E, 0xEFB4},{0x950F, 0xEFB5},{0x9510, 0xC8F1},{0x9511, 0xCCE0},{0x9512, 0xEFB6},{0x9513, 0xEFB7},{0x9514, 0xEFB8}, - {0x9515, 0xEFB9},{0x9516, 0xEFBA},{0x9517, 0xD5E0},{0x9518, 0xEFBB},{0x9519, 0xB4ED},{0x951A, 0xC3AA},{0x951B, 0xEFBC},{0x951C, 0xE89F}, - {0x951D, 0xEFBD},{0x951E, 0xEFBE},{0x951F, 0xEFBF},{0x9520, 0xE8A0},{0x9521, 0xCEFD},{0x9522, 0xEFC0},{0x9523, 0xC2E0},{0x9524, 0xB4B8}, - {0x9525, 0xD7B6},{0x9526, 0xBDF5},{0x9527, 0xE940},{0x9528, 0xCFC7},{0x9529, 0xEFC3},{0x952A, 0xEFC1},{0x952B, 0xEFC2},{0x952C, 0xEFC4}, - {0x952D, 0xB6A7},{0x952E, 0xBCFC},{0x952F, 0xBEE2},{0x9530, 0xC3CC},{0x9531, 0xEFC5},{0x9532, 0xEFC6},{0x9533, 0xE941},{0x9534, 0xEFC7}, - {0x9535, 0xEFCF},{0x9536, 0xEFC8},{0x9537, 0xEFC9},{0x9538, 0xEFCA},{0x9539, 0xC7C2},{0x953A, 0xEFF1},{0x953B, 0xB6CD},{0x953C, 0xEFCB}, - {0x953D, 0xE942},{0x953E, 0xEFCC},{0x953F, 0xEFCD},{0x9540, 0xB6C6},{0x9541, 0xC3BE},{0x9542, 0xEFCE},{0x9543, 0xE943},{0x9544, 0xEFD0}, - {0x9545, 0xEFD1},{0x9546, 0xEFD2},{0x9547, 0xD5F2},{0x9548, 0xE944},{0x9549, 0xEFD3},{0x954A, 0xC4F7},{0x954B, 0xE945},{0x954C, 0xEFD4}, - {0x954D, 0xC4F8},{0x954E, 0xEFD5},{0x954F, 0xEFD6},{0x9550, 0xB8E4},{0x9551, 0xB0F7},{0x9552, 0xEFD7},{0x9553, 0xEFD8},{0x9554, 0xEFD9}, - {0x9555, 0xE946},{0x9556, 0xEFDA},{0x9557, 0xEFDB},{0x9558, 0xEFDC},{0x9559, 0xEFDD},{0x955A, 0xE947},{0x955B, 0xEFDE},{0x955C, 0xBEB5}, - {0x955D, 0xEFE1},{0x955E, 0xEFDF},{0x955F, 0xEFE0},{0x9560, 0xE948},{0x9561, 0xEFE2},{0x9562, 0xEFE3},{0x9563, 0xC1CD},{0x9564, 0xEFE4}, - {0x9565, 0xEFE5},{0x9566, 0xEFE6},{0x9567, 0xEFE7},{0x9568, 0xEFE8},{0x9569, 0xEFE9},{0x956A, 0xEFEA},{0x956B, 0xEFEB},{0x956C, 0xEFEC}, - {0x956D, 0xC0D8},{0x956E, 0xE949},{0x956F, 0xEFED},{0x9570, 0xC1AD},{0x9571, 0xEFEE},{0x9572, 0xEFEF},{0x9573, 0xEFF0},{0x9574, 0xE94A}, - {0x9575, 0xE94B},{0x9576, 0xCFE2},{0x9577, 0xE94C},{0x9578, 0xE94D},{0x9579, 0xE94E},{0x957A, 0xE94F},{0x957B, 0xE950},{0x957C, 0xE951}, - {0x957D, 0xE952},{0x957E, 0xE953},{0x957F, 0xB3A4},{0x9580, 0xE954},{0x9581, 0xE955},{0x9582, 0xE956},{0x9583, 0xE957},{0x9584, 0xE958}, - {0x9585, 0xE959},{0x9586, 0xE95A},{0x9587, 0xE95B},{0x9588, 0xE95C},{0x9589, 0xE95D},{0x958A, 0xE95E},{0x958B, 0xE95F},{0x958C, 0xE960}, - {0x958D, 0xE961},{0x958E, 0xE962},{0x958F, 0xE963},{0x9590, 0xE964},{0x9591, 0xE965},{0x9592, 0xE966},{0x9593, 0xE967},{0x9594, 0xE968}, - {0x9595, 0xE969},{0x9596, 0xE96A},{0x9597, 0xE96B},{0x9598, 0xE96C},{0x9599, 0xE96D},{0x959A, 0xE96E},{0x959B, 0xE96F},{0x959C, 0xE970}, - {0x959D, 0xE971},{0x959E, 0xE972},{0x959F, 0xE973},{0x95A0, 0xE974},{0x95A1, 0xE975},{0x95A2, 0xE976},{0x95A3, 0xE977},{0x95A4, 0xE978}, - {0x95A5, 0xE979},{0x95A6, 0xE97A},{0x95A7, 0xE97B},{0x95A8, 0xE97C},{0x95A9, 0xE97D},{0x95AA, 0xE97E},{0x95AB, 0xE980},{0x95AC, 0xE981}, - {0x95AD, 0xE982},{0x95AE, 0xE983},{0x95AF, 0xE984},{0x95B0, 0xE985},{0x95B1, 0xE986},{0x95B2, 0xE987},{0x95B3, 0xE988},{0x95B4, 0xE989}, - {0x95B5, 0xE98A},{0x95B6, 0xE98B},{0x95B7, 0xE98C},{0x95B8, 0xE98D},{0x95B9, 0xE98E},{0x95BA, 0xE98F},{0x95BB, 0xE990},{0x95BC, 0xE991}, - {0x95BD, 0xE992},{0x95BE, 0xE993},{0x95BF, 0xE994},{0x95C0, 0xE995},{0x95C1, 0xE996},{0x95C2, 0xE997},{0x95C3, 0xE998},{0x95C4, 0xE999}, - {0x95C5, 0xE99A},{0x95C6, 0xE99B},{0x95C7, 0xE99C},{0x95C8, 0xE99D},{0x95C9, 0xE99E},{0x95CA, 0xE99F},{0x95CB, 0xE9A0},{0x95CC, 0xEA40}, - {0x95CD, 0xEA41},{0x95CE, 0xEA42},{0x95CF, 0xEA43},{0x95D0, 0xEA44},{0x95D1, 0xEA45},{0x95D2, 0xEA46},{0x95D3, 0xEA47},{0x95D4, 0xEA48}, - {0x95D5, 0xEA49},{0x95D6, 0xEA4A},{0x95D7, 0xEA4B},{0x95D8, 0xEA4C},{0x95D9, 0xEA4D},{0x95DA, 0xEA4E},{0x95DB, 0xEA4F},{0x95DC, 0xEA50}, - {0x95DD, 0xEA51},{0x95DE, 0xEA52},{0x95DF, 0xEA53},{0x95E0, 0xEA54},{0x95E1, 0xEA55},{0x95E2, 0xEA56},{0x95E3, 0xEA57},{0x95E4, 0xEA58}, - {0x95E5, 0xEA59},{0x95E6, 0xEA5A},{0x95E7, 0xEA5B},{0x95E8, 0xC3C5},{0x95E9, 0xE3C5},{0x95EA, 0xC9C1},{0x95EB, 0xE3C6},{0x95EC, 0xEA5C}, - {0x95ED, 0xB1D5},{0x95EE, 0xCECA},{0x95EF, 0xB4B3},{0x95F0, 0xC8F2},{0x95F1, 0xE3C7},{0x95F2, 0xCFD0},{0x95F3, 0xE3C8},{0x95F4, 0xBCE4}, - {0x95F5, 0xE3C9},{0x95F6, 0xE3CA},{0x95F7, 0xC3C6},{0x95F8, 0xD5A2},{0x95F9, 0xC4D6},{0x95FA, 0xB9EB},{0x95FB, 0xCEC5},{0x95FC, 0xE3CB}, - {0x95FD, 0xC3F6},{0x95FE, 0xE3CC},{0x95FF, 0xEA5D},{0x9600, 0xB7A7},{0x9601, 0xB8F3},{0x9602, 0xBAD2},{0x9603, 0xE3CD},{0x9604, 0xE3CE}, - {0x9605, 0xD4C4},{0x9606, 0xE3CF},{0x9607, 0xEA5E},{0x9608, 0xE3D0},{0x9609, 0xD1CB},{0x960A, 0xE3D1},{0x960B, 0xE3D2},{0x960C, 0xE3D3}, - {0x960D, 0xE3D4},{0x960E, 0xD1D6},{0x960F, 0xE3D5},{0x9610, 0xB2FB},{0x9611, 0xC0BB},{0x9612, 0xE3D6},{0x9613, 0xEA5F},{0x9614, 0xC0AB}, - {0x9615, 0xE3D7},{0x9616, 0xE3D8},{0x9617, 0xE3D9},{0x9618, 0xEA60},{0x9619, 0xE3DA},{0x961A, 0xE3DB},{0x961B, 0xEA61},{0x961C, 0xB8B7}, - {0x961D, 0xDAE2},{0x961E, 0xEA62},{0x961F, 0xB6D3},{0x9620, 0xEA63},{0x9621, 0xDAE4},{0x9622, 0xDAE3},{0x9623, 0xEA64},{0x9624, 0xEA65}, - {0x9625, 0xEA66},{0x9626, 0xEA67},{0x9627, 0xEA68},{0x9628, 0xEA69},{0x9629, 0xEA6A},{0x962A, 0xDAE6},{0x962B, 0xEA6B},{0x962C, 0xEA6C}, - {0x962D, 0xEA6D},{0x962E, 0xC8EE},{0x962F, 0xEA6E},{0x9630, 0xEA6F},{0x9631, 0xDAE5},{0x9632, 0xB7C0},{0x9633, 0xD1F4},{0x9634, 0xD2F5}, - {0x9635, 0xD5F3},{0x9636, 0xBDD7},{0x9637, 0xEA70},{0x9638, 0xEA71},{0x9639, 0xEA72},{0x963A, 0xEA73},{0x963B, 0xD7E8},{0x963C, 0xDAE8}, - {0x963D, 0xDAE7},{0x963E, 0xEA74},{0x963F, 0xB0A2},{0x9640, 0xCDD3},{0x9641, 0xEA75},{0x9642, 0xDAE9},{0x9643, 0xEA76},{0x9644, 0xB8BD}, - {0x9645, 0xBCCA},{0x9646, 0xC2BD},{0x9647, 0xC2A4},{0x9648, 0xB3C2},{0x9649, 0xDAEA},{0x964A, 0xEA77},{0x964B, 0xC2AA},{0x964C, 0xC4B0}, - {0x964D, 0xBDB5},{0x964E, 0xEA78},{0x964F, 0xEA79},{0x9650, 0xCFDE},{0x9651, 0xEA7A},{0x9652, 0xEA7B},{0x9653, 0xEA7C},{0x9654, 0xDAEB}, - {0x9655, 0xC9C2},{0x9656, 0xEA7D},{0x9657, 0xEA7E},{0x9658, 0xEA80},{0x9659, 0xEA81},{0x965A, 0xEA82},{0x965B, 0xB1DD},{0x965C, 0xEA83}, - {0x965D, 0xEA84},{0x965E, 0xEA85},{0x965F, 0xDAEC},{0x9660, 0xEA86},{0x9661, 0xB6B8},{0x9662, 0xD4BA},{0x9663, 0xEA87},{0x9664, 0xB3FD}, - {0x9665, 0xEA88},{0x9666, 0xEA89},{0x9667, 0xDAED},{0x9668, 0xD4C9},{0x9669, 0xCFD5},{0x966A, 0xC5E3},{0x966B, 0xEA8A},{0x966C, 0xDAEE}, - {0x966D, 0xEA8B},{0x966E, 0xEA8C},{0x966F, 0xEA8D},{0x9670, 0xEA8E},{0x9671, 0xEA8F},{0x9672, 0xDAEF},{0x9673, 0xEA90},{0x9674, 0xDAF0}, - {0x9675, 0xC1EA},{0x9676, 0xCCD5},{0x9677, 0xCFDD},{0x9678, 0xEA91},{0x9679, 0xEA92},{0x967A, 0xEA93},{0x967B, 0xEA94},{0x967C, 0xEA95}, - {0x967D, 0xEA96},{0x967E, 0xEA97},{0x967F, 0xEA98},{0x9680, 0xEA99},{0x9681, 0xEA9A},{0x9682, 0xEA9B},{0x9683, 0xEA9C},{0x9684, 0xEA9D}, - {0x9685, 0xD3E7},{0x9686, 0xC2A1},{0x9687, 0xEA9E},{0x9688, 0xDAF1},{0x9689, 0xEA9F},{0x968A, 0xEAA0},{0x968B, 0xCBE5},{0x968C, 0xEB40}, - {0x968D, 0xDAF2},{0x968E, 0xEB41},{0x968F, 0xCBE6},{0x9690, 0xD2FE},{0x9691, 0xEB42},{0x9692, 0xEB43},{0x9693, 0xEB44},{0x9694, 0xB8F4}, - {0x9695, 0xEB45},{0x9696, 0xEB46},{0x9697, 0xDAF3},{0x9698, 0xB0AF},{0x9699, 0xCFB6},{0x969A, 0xEB47},{0x969B, 0xEB48},{0x969C, 0xD5CF}, - {0x969D, 0xEB49},{0x969E, 0xEB4A},{0x969F, 0xEB4B},{0x96A0, 0xEB4C},{0x96A1, 0xEB4D},{0x96A2, 0xEB4E},{0x96A3, 0xEB4F},{0x96A4, 0xEB50}, - {0x96A5, 0xEB51},{0x96A6, 0xEB52},{0x96A7, 0xCBED},{0x96A8, 0xEB53},{0x96A9, 0xEB54},{0x96AA, 0xEB55},{0x96AB, 0xEB56},{0x96AC, 0xEB57}, - {0x96AD, 0xEB58},{0x96AE, 0xEB59},{0x96AF, 0xEB5A},{0x96B0, 0xDAF4},{0x96B1, 0xEB5B},{0x96B2, 0xEB5C},{0x96B3, 0xE3C4},{0x96B4, 0xEB5D}, - {0x96B5, 0xEB5E},{0x96B6, 0xC1A5},{0x96B7, 0xEB5F},{0x96B8, 0xEB60},{0x96B9, 0xF6BF},{0x96BA, 0xEB61},{0x96BB, 0xEB62},{0x96BC, 0xF6C0}, - {0x96BD, 0xF6C1},{0x96BE, 0xC4D1},{0x96BF, 0xEB63},{0x96C0, 0xC8B8},{0x96C1, 0xD1E3},{0x96C2, 0xEB64},{0x96C3, 0xEB65},{0x96C4, 0xD0DB}, - {0x96C5, 0xD1C5},{0x96C6, 0xBCAF},{0x96C7, 0xB9CD},{0x96C8, 0xEB66},{0x96C9, 0xEFF4},{0x96CA, 0xEB67},{0x96CB, 0xEB68},{0x96CC, 0xB4C6}, - {0x96CD, 0xD3BA},{0x96CE, 0xF6C2},{0x96CF, 0xB3FB},{0x96D0, 0xEB69},{0x96D1, 0xEB6A},{0x96D2, 0xF6C3},{0x96D3, 0xEB6B},{0x96D4, 0xEB6C}, - {0x96D5, 0xB5F1},{0x96D6, 0xEB6D},{0x96D7, 0xEB6E},{0x96D8, 0xEB6F},{0x96D9, 0xEB70},{0x96DA, 0xEB71},{0x96DB, 0xEB72},{0x96DC, 0xEB73}, - {0x96DD, 0xEB74},{0x96DE, 0xEB75},{0x96DF, 0xEB76},{0x96E0, 0xF6C5},{0x96E1, 0xEB77},{0x96E2, 0xEB78},{0x96E3, 0xEB79},{0x96E4, 0xEB7A}, - {0x96E5, 0xEB7B},{0x96E6, 0xEB7C},{0x96E7, 0xEB7D},{0x96E8, 0xD3EA},{0x96E9, 0xF6A7},{0x96EA, 0xD1A9},{0x96EB, 0xEB7E},{0x96EC, 0xEB80}, - {0x96ED, 0xEB81},{0x96EE, 0xEB82},{0x96EF, 0xF6A9},{0x96F0, 0xEB83},{0x96F1, 0xEB84},{0x96F2, 0xEB85},{0x96F3, 0xF6A8},{0x96F4, 0xEB86}, - {0x96F5, 0xEB87},{0x96F6, 0xC1E3},{0x96F7, 0xC0D7},{0x96F8, 0xEB88},{0x96F9, 0xB1A2},{0x96FA, 0xEB89},{0x96FB, 0xEB8A},{0x96FC, 0xEB8B}, - {0x96FD, 0xEB8C},{0x96FE, 0xCEED},{0x96FF, 0xEB8D},{0x9700, 0xD0E8},{0x9701, 0xF6AB},{0x9702, 0xEB8E},{0x9703, 0xEB8F},{0x9704, 0xCFF6}, - {0x9705, 0xEB90},{0x9706, 0xF6AA},{0x9707, 0xD5F0},{0x9708, 0xF6AC},{0x9709, 0xC3B9},{0x970A, 0xEB91},{0x970B, 0xEB92},{0x970C, 0xEB93}, - {0x970D, 0xBBF4},{0x970E, 0xF6AE},{0x970F, 0xF6AD},{0x9710, 0xEB94},{0x9711, 0xEB95},{0x9712, 0xEB96},{0x9713, 0xC4DE},{0x9714, 0xEB97}, - {0x9715, 0xEB98},{0x9716, 0xC1D8},{0x9717, 0xEB99},{0x9718, 0xEB9A},{0x9719, 0xEB9B},{0x971A, 0xEB9C},{0x971B, 0xEB9D},{0x971C, 0xCBAA}, - {0x971D, 0xEB9E},{0x971E, 0xCFBC},{0x971F, 0xEB9F},{0x9720, 0xEBA0},{0x9721, 0xEC40},{0x9722, 0xEC41},{0x9723, 0xEC42},{0x9724, 0xEC43}, - {0x9725, 0xEC44},{0x9726, 0xEC45},{0x9727, 0xEC46},{0x9728, 0xEC47},{0x9729, 0xEC48},{0x972A, 0xF6AF},{0x972B, 0xEC49},{0x972C, 0xEC4A}, - {0x972D, 0xF6B0},{0x972E, 0xEC4B},{0x972F, 0xEC4C},{0x9730, 0xF6B1},{0x9731, 0xEC4D},{0x9732, 0xC2B6},{0x9733, 0xEC4E},{0x9734, 0xEC4F}, - {0x9735, 0xEC50},{0x9736, 0xEC51},{0x9737, 0xEC52},{0x9738, 0xB0D4},{0x9739, 0xC5F9},{0x973A, 0xEC53},{0x973B, 0xEC54},{0x973C, 0xEC55}, - {0x973D, 0xEC56},{0x973E, 0xF6B2},{0x973F, 0xEC57},{0x9740, 0xEC58},{0x9741, 0xEC59},{0x9742, 0xEC5A},{0x9743, 0xEC5B},{0x9744, 0xEC5C}, - {0x9745, 0xEC5D},{0x9746, 0xEC5E},{0x9747, 0xEC5F},{0x9748, 0xEC60},{0x9749, 0xEC61},{0x974A, 0xEC62},{0x974B, 0xEC63},{0x974C, 0xEC64}, - {0x974D, 0xEC65},{0x974E, 0xEC66},{0x974F, 0xEC67},{0x9750, 0xEC68},{0x9751, 0xEC69},{0x9752, 0xC7E0},{0x9753, 0xF6A6},{0x9754, 0xEC6A}, - {0x9755, 0xEC6B},{0x9756, 0xBEB8},{0x9757, 0xEC6C},{0x9758, 0xEC6D},{0x9759, 0xBEB2},{0x975A, 0xEC6E},{0x975B, 0xB5E5},{0x975C, 0xEC6F}, - {0x975D, 0xEC70},{0x975E, 0xB7C7},{0x975F, 0xEC71},{0x9760, 0xBFBF},{0x9761, 0xC3D2},{0x9762, 0xC3E6},{0x9763, 0xEC72},{0x9764, 0xEC73}, - {0x9765, 0xD8CC},{0x9766, 0xEC74},{0x9767, 0xEC75},{0x9768, 0xEC76},{0x9769, 0xB8EF},{0x976A, 0xEC77},{0x976B, 0xEC78},{0x976C, 0xEC79}, - {0x976D, 0xEC7A},{0x976E, 0xEC7B},{0x976F, 0xEC7C},{0x9770, 0xEC7D},{0x9771, 0xEC7E},{0x9772, 0xEC80},{0x9773, 0xBDF9},{0x9774, 0xD1A5}, - {0x9775, 0xEC81},{0x9776, 0xB0D0},{0x9777, 0xEC82},{0x9778, 0xEC83},{0x9779, 0xEC84},{0x977A, 0xEC85},{0x977B, 0xEC86},{0x977C, 0xF7B0}, - {0x977D, 0xEC87},{0x977E, 0xEC88},{0x977F, 0xEC89},{0x9780, 0xEC8A},{0x9781, 0xEC8B},{0x9782, 0xEC8C},{0x9783, 0xEC8D},{0x9784, 0xEC8E}, - {0x9785, 0xF7B1},{0x9786, 0xEC8F},{0x9787, 0xEC90},{0x9788, 0xEC91},{0x9789, 0xEC92},{0x978A, 0xEC93},{0x978B, 0xD0AC},{0x978C, 0xEC94}, - {0x978D, 0xB0B0},{0x978E, 0xEC95},{0x978F, 0xEC96},{0x9790, 0xEC97},{0x9791, 0xF7B2},{0x9792, 0xF7B3},{0x9793, 0xEC98},{0x9794, 0xF7B4}, - {0x9795, 0xEC99},{0x9796, 0xEC9A},{0x9797, 0xEC9B},{0x9798, 0xC7CA},{0x9799, 0xEC9C},{0x979A, 0xEC9D},{0x979B, 0xEC9E},{0x979C, 0xEC9F}, - {0x979D, 0xECA0},{0x979E, 0xED40},{0x979F, 0xED41},{0x97A0, 0xBECF},{0x97A1, 0xED42},{0x97A2, 0xED43},{0x97A3, 0xF7B7},{0x97A4, 0xED44}, - {0x97A5, 0xED45},{0x97A6, 0xED46},{0x97A7, 0xED47},{0x97A8, 0xED48},{0x97A9, 0xED49},{0x97AA, 0xED4A},{0x97AB, 0xF7B6},{0x97AC, 0xED4B}, - {0x97AD, 0xB1DE},{0x97AE, 0xED4C},{0x97AF, 0xF7B5},{0x97B0, 0xED4D},{0x97B1, 0xED4E},{0x97B2, 0xF7B8},{0x97B3, 0xED4F},{0x97B4, 0xF7B9}, - {0x97B5, 0xED50},{0x97B6, 0xED51},{0x97B7, 0xED52},{0x97B8, 0xED53},{0x97B9, 0xED54},{0x97BA, 0xED55},{0x97BB, 0xED56},{0x97BC, 0xED57}, - {0x97BD, 0xED58},{0x97BE, 0xED59},{0x97BF, 0xED5A},{0x97C0, 0xED5B},{0x97C1, 0xED5C},{0x97C2, 0xED5D},{0x97C3, 0xED5E},{0x97C4, 0xED5F}, - {0x97C5, 0xED60},{0x97C6, 0xED61},{0x97C7, 0xED62},{0x97C8, 0xED63},{0x97C9, 0xED64},{0x97CA, 0xED65},{0x97CB, 0xED66},{0x97CC, 0xED67}, - {0x97CD, 0xED68},{0x97CE, 0xED69},{0x97CF, 0xED6A},{0x97D0, 0xED6B},{0x97D1, 0xED6C},{0x97D2, 0xED6D},{0x97D3, 0xED6E},{0x97D4, 0xED6F}, - {0x97D5, 0xED70},{0x97D6, 0xED71},{0x97D7, 0xED72},{0x97D8, 0xED73},{0x97D9, 0xED74},{0x97DA, 0xED75},{0x97DB, 0xED76},{0x97DC, 0xED77}, - {0x97DD, 0xED78},{0x97DE, 0xED79},{0x97DF, 0xED7A},{0x97E0, 0xED7B},{0x97E1, 0xED7C},{0x97E2, 0xED7D},{0x97E3, 0xED7E},{0x97E4, 0xED80}, - {0x97E5, 0xED81},{0x97E6, 0xCEA4},{0x97E7, 0xC8CD},{0x97E8, 0xED82},{0x97E9, 0xBAAB},{0x97EA, 0xE8B8},{0x97EB, 0xE8B9},{0x97EC, 0xE8BA}, - {0x97ED, 0xBEC2},{0x97EE, 0xED83},{0x97EF, 0xED84},{0x97F0, 0xED85},{0x97F1, 0xED86},{0x97F2, 0xED87},{0x97F3, 0xD2F4},{0x97F4, 0xED88}, - {0x97F5, 0xD4CF},{0x97F6, 0xC9D8},{0x97F7, 0xED89},{0x97F8, 0xED8A},{0x97F9, 0xED8B},{0x97FA, 0xED8C},{0x97FB, 0xED8D},{0x97FC, 0xED8E}, - {0x97FD, 0xED8F},{0x97FE, 0xED90},{0x97FF, 0xED91},{0x9800, 0xED92},{0x9801, 0xED93},{0x9802, 0xED94},{0x9803, 0xED95},{0x9804, 0xED96}, - {0x9805, 0xED97},{0x9806, 0xED98},{0x9807, 0xED99},{0x9808, 0xED9A},{0x9809, 0xED9B},{0x980A, 0xED9C},{0x980B, 0xED9D},{0x980C, 0xED9E}, - {0x980D, 0xED9F},{0x980E, 0xEDA0},{0x980F, 0xEE40},{0x9810, 0xEE41},{0x9811, 0xEE42},{0x9812, 0xEE43},{0x9813, 0xEE44},{0x9814, 0xEE45}, - {0x9815, 0xEE46},{0x9816, 0xEE47},{0x9817, 0xEE48},{0x9818, 0xEE49},{0x9819, 0xEE4A},{0x981A, 0xEE4B},{0x981B, 0xEE4C},{0x981C, 0xEE4D}, - {0x981D, 0xEE4E},{0x981E, 0xEE4F},{0x981F, 0xEE50},{0x9820, 0xEE51},{0x9821, 0xEE52},{0x9822, 0xEE53},{0x9823, 0xEE54},{0x9824, 0xEE55}, - {0x9825, 0xEE56},{0x9826, 0xEE57},{0x9827, 0xEE58},{0x9828, 0xEE59},{0x9829, 0xEE5A},{0x982A, 0xEE5B},{0x982B, 0xEE5C},{0x982C, 0xEE5D}, - {0x982D, 0xEE5E},{0x982E, 0xEE5F},{0x982F, 0xEE60},{0x9830, 0xEE61},{0x9831, 0xEE62},{0x9832, 0xEE63},{0x9833, 0xEE64},{0x9834, 0xEE65}, - {0x9835, 0xEE66},{0x9836, 0xEE67},{0x9837, 0xEE68},{0x9838, 0xEE69},{0x9839, 0xEE6A},{0x983A, 0xEE6B},{0x983B, 0xEE6C},{0x983C, 0xEE6D}, - {0x983D, 0xEE6E},{0x983E, 0xEE6F},{0x983F, 0xEE70},{0x9840, 0xEE71},{0x9841, 0xEE72},{0x9842, 0xEE73},{0x9843, 0xEE74},{0x9844, 0xEE75}, - {0x9845, 0xEE76},{0x9846, 0xEE77},{0x9847, 0xEE78},{0x9848, 0xEE79},{0x9849, 0xEE7A},{0x984A, 0xEE7B},{0x984B, 0xEE7C},{0x984C, 0xEE7D}, - {0x984D, 0xEE7E},{0x984E, 0xEE80},{0x984F, 0xEE81},{0x9850, 0xEE82},{0x9851, 0xEE83},{0x9852, 0xEE84},{0x9853, 0xEE85},{0x9854, 0xEE86}, - {0x9855, 0xEE87},{0x9856, 0xEE88},{0x9857, 0xEE89},{0x9858, 0xEE8A},{0x9859, 0xEE8B},{0x985A, 0xEE8C},{0x985B, 0xEE8D},{0x985C, 0xEE8E}, - {0x985D, 0xEE8F},{0x985E, 0xEE90},{0x985F, 0xEE91},{0x9860, 0xEE92},{0x9861, 0xEE93},{0x9862, 0xEE94},{0x9863, 0xEE95},{0x9864, 0xEE96}, - {0x9865, 0xEE97},{0x9866, 0xEE98},{0x9867, 0xEE99},{0x9868, 0xEE9A},{0x9869, 0xEE9B},{0x986A, 0xEE9C},{0x986B, 0xEE9D},{0x986C, 0xEE9E}, - {0x986D, 0xEE9F},{0x986E, 0xEEA0},{0x986F, 0xEF40},{0x9870, 0xEF41},{0x9871, 0xEF42},{0x9872, 0xEF43},{0x9873, 0xEF44},{0x9874, 0xEF45}, - {0x9875, 0xD2B3},{0x9876, 0xB6A5},{0x9877, 0xC7EA},{0x9878, 0xF1FC},{0x9879, 0xCFEE},{0x987A, 0xCBB3},{0x987B, 0xD0EB},{0x987C, 0xE7EF}, - {0x987D, 0xCDE7},{0x987E, 0xB9CB},{0x987F, 0xB6D9},{0x9880, 0xF1FD},{0x9881, 0xB0E4},{0x9882, 0xCBCC},{0x9883, 0xF1FE},{0x9884, 0xD4A4}, - {0x9885, 0xC2AD},{0x9886, 0xC1EC},{0x9887, 0xC6C4},{0x9888, 0xBEB1},{0x9889, 0xF2A1},{0x988A, 0xBCD5},{0x988B, 0xEF46},{0x988C, 0xF2A2}, - {0x988D, 0xF2A3},{0x988E, 0xEF47},{0x988F, 0xF2A4},{0x9890, 0xD2C3},{0x9891, 0xC6B5},{0x9892, 0xEF48},{0x9893, 0xCDC7},{0x9894, 0xF2A5}, - {0x9895, 0xEF49},{0x9896, 0xD3B1},{0x9897, 0xBFC5},{0x9898, 0xCCE2},{0x9899, 0xEF4A},{0x989A, 0xF2A6},{0x989B, 0xF2A7},{0x989C, 0xD1D5}, - {0x989D, 0xB6EE},{0x989E, 0xF2A8},{0x989F, 0xF2A9},{0x98A0, 0xB5DF},{0x98A1, 0xF2AA},{0x98A2, 0xF2AB},{0x98A3, 0xEF4B},{0x98A4, 0xB2FC}, - {0x98A5, 0xF2AC},{0x98A6, 0xF2AD},{0x98A7, 0xC8A7},{0x98A8, 0xEF4C},{0x98A9, 0xEF4D},{0x98AA, 0xEF4E},{0x98AB, 0xEF4F},{0x98AC, 0xEF50}, - {0x98AD, 0xEF51},{0x98AE, 0xEF52},{0x98AF, 0xEF53},{0x98B0, 0xEF54},{0x98B1, 0xEF55},{0x98B2, 0xEF56},{0x98B3, 0xEF57},{0x98B4, 0xEF58}, - {0x98B5, 0xEF59},{0x98B6, 0xEF5A},{0x98B7, 0xEF5B},{0x98B8, 0xEF5C},{0x98B9, 0xEF5D},{0x98BA, 0xEF5E},{0x98BB, 0xEF5F},{0x98BC, 0xEF60}, - {0x98BD, 0xEF61},{0x98BE, 0xEF62},{0x98BF, 0xEF63},{0x98C0, 0xEF64},{0x98C1, 0xEF65},{0x98C2, 0xEF66},{0x98C3, 0xEF67},{0x98C4, 0xEF68}, - {0x98C5, 0xEF69},{0x98C6, 0xEF6A},{0x98C7, 0xEF6B},{0x98C8, 0xEF6C},{0x98C9, 0xEF6D},{0x98CA, 0xEF6E},{0x98CB, 0xEF6F},{0x98CC, 0xEF70}, - {0x98CD, 0xEF71},{0x98CE, 0xB7E7},{0x98CF, 0xEF72},{0x98D0, 0xEF73},{0x98D1, 0xECA9},{0x98D2, 0xECAA},{0x98D3, 0xECAB},{0x98D4, 0xEF74}, - {0x98D5, 0xECAC},{0x98D6, 0xEF75},{0x98D7, 0xEF76},{0x98D8, 0xC6AE},{0x98D9, 0xECAD},{0x98DA, 0xECAE},{0x98DB, 0xEF77},{0x98DC, 0xEF78}, - {0x98DD, 0xEF79},{0x98DE, 0xB7C9},{0x98DF, 0xCAB3},{0x98E0, 0xEF7A},{0x98E1, 0xEF7B},{0x98E2, 0xEF7C},{0x98E3, 0xEF7D},{0x98E4, 0xEF7E}, - {0x98E5, 0xEF80},{0x98E6, 0xEF81},{0x98E7, 0xE2B8},{0x98E8, 0xF7CF},{0x98E9, 0xEF82},{0x98EA, 0xEF83},{0x98EB, 0xEF84},{0x98EC, 0xEF85}, - {0x98ED, 0xEF86},{0x98EE, 0xEF87},{0x98EF, 0xEF88},{0x98F0, 0xEF89},{0x98F1, 0xEF8A},{0x98F2, 0xEF8B},{0x98F3, 0xEF8C},{0x98F4, 0xEF8D}, - {0x98F5, 0xEF8E},{0x98F6, 0xEF8F},{0x98F7, 0xEF90},{0x98F8, 0xEF91},{0x98F9, 0xEF92},{0x98FA, 0xEF93},{0x98FB, 0xEF94},{0x98FC, 0xEF95}, - {0x98FD, 0xEF96},{0x98FE, 0xEF97},{0x98FF, 0xEF98},{0x9900, 0xEF99},{0x9901, 0xEF9A},{0x9902, 0xEF9B},{0x9903, 0xEF9C},{0x9904, 0xEF9D}, - {0x9905, 0xEF9E},{0x9906, 0xEF9F},{0x9907, 0xEFA0},{0x9908, 0xF040},{0x9909, 0xF041},{0x990A, 0xF042},{0x990B, 0xF043},{0x990C, 0xF044}, - {0x990D, 0xF7D0},{0x990E, 0xF045},{0x990F, 0xF046},{0x9910, 0xB2CD},{0x9911, 0xF047},{0x9912, 0xF048},{0x9913, 0xF049},{0x9914, 0xF04A}, - {0x9915, 0xF04B},{0x9916, 0xF04C},{0x9917, 0xF04D},{0x9918, 0xF04E},{0x9919, 0xF04F},{0x991A, 0xF050},{0x991B, 0xF051},{0x991C, 0xF052}, - {0x991D, 0xF053},{0x991E, 0xF054},{0x991F, 0xF055},{0x9920, 0xF056},{0x9921, 0xF057},{0x9922, 0xF058},{0x9923, 0xF059},{0x9924, 0xF05A}, - {0x9925, 0xF05B},{0x9926, 0xF05C},{0x9927, 0xF05D},{0x9928, 0xF05E},{0x9929, 0xF05F},{0x992A, 0xF060},{0x992B, 0xF061},{0x992C, 0xF062}, - {0x992D, 0xF063},{0x992E, 0xF7D1},{0x992F, 0xF064},{0x9930, 0xF065},{0x9931, 0xF066},{0x9932, 0xF067},{0x9933, 0xF068},{0x9934, 0xF069}, - {0x9935, 0xF06A},{0x9936, 0xF06B},{0x9937, 0xF06C},{0x9938, 0xF06D},{0x9939, 0xF06E},{0x993A, 0xF06F},{0x993B, 0xF070},{0x993C, 0xF071}, - {0x993D, 0xF072},{0x993E, 0xF073},{0x993F, 0xF074},{0x9940, 0xF075},{0x9941, 0xF076},{0x9942, 0xF077},{0x9943, 0xF078},{0x9944, 0xF079}, - {0x9945, 0xF07A},{0x9946, 0xF07B},{0x9947, 0xF07C},{0x9948, 0xF07D},{0x9949, 0xF07E},{0x994A, 0xF080},{0x994B, 0xF081},{0x994C, 0xF082}, - {0x994D, 0xF083},{0x994E, 0xF084},{0x994F, 0xF085},{0x9950, 0xF086},{0x9951, 0xF087},{0x9952, 0xF088},{0x9953, 0xF089},{0x9954, 0xF7D3}, - {0x9955, 0xF7D2},{0x9956, 0xF08A},{0x9957, 0xF08B},{0x9958, 0xF08C},{0x9959, 0xF08D},{0x995A, 0xF08E},{0x995B, 0xF08F},{0x995C, 0xF090}, - {0x995D, 0xF091},{0x995E, 0xF092},{0x995F, 0xF093},{0x9960, 0xF094},{0x9961, 0xF095},{0x9962, 0xF096},{0x9963, 0xE2BB},{0x9964, 0xF097}, - {0x9965, 0xBCA2},{0x9966, 0xF098},{0x9967, 0xE2BC},{0x9968, 0xE2BD},{0x9969, 0xE2BE},{0x996A, 0xE2BF},{0x996B, 0xE2C0},{0x996C, 0xE2C1}, - {0x996D, 0xB7B9},{0x996E, 0xD2FB},{0x996F, 0xBDA4},{0x9970, 0xCACE},{0x9971, 0xB1A5},{0x9972, 0xCBC7},{0x9973, 0xF099},{0x9974, 0xE2C2}, - {0x9975, 0xB6FC},{0x9976, 0xC8C4},{0x9977, 0xE2C3},{0x9978, 0xF09A},{0x9979, 0xF09B},{0x997A, 0xBDC8},{0x997B, 0xF09C},{0x997C, 0xB1FD}, - {0x997D, 0xE2C4},{0x997E, 0xF09D},{0x997F, 0xB6F6},{0x9980, 0xE2C5},{0x9981, 0xC4D9},{0x9982, 0xF09E},{0x9983, 0xF09F},{0x9984, 0xE2C6}, - {0x9985, 0xCFDA},{0x9986, 0xB9DD},{0x9987, 0xE2C7},{0x9988, 0xC0A1},{0x9989, 0xF0A0},{0x998A, 0xE2C8},{0x998B, 0xB2F6},{0x998C, 0xF140}, - {0x998D, 0xE2C9},{0x998E, 0xF141},{0x998F, 0xC1F3},{0x9990, 0xE2CA},{0x9991, 0xE2CB},{0x9992, 0xC2F8},{0x9993, 0xE2CC},{0x9994, 0xE2CD}, - {0x9995, 0xE2CE},{0x9996, 0xCAD7},{0x9997, 0xD8B8},{0x9998, 0xD9E5},{0x9999, 0xCFE3},{0x999A, 0xF142},{0x999B, 0xF143},{0x999C, 0xF144}, - {0x999D, 0xF145},{0x999E, 0xF146},{0x999F, 0xF147},{0x99A0, 0xF148},{0x99A1, 0xF149},{0x99A2, 0xF14A},{0x99A3, 0xF14B},{0x99A4, 0xF14C}, - {0x99A5, 0xF0A5},{0x99A6, 0xF14D},{0x99A7, 0xF14E},{0x99A8, 0xDCB0},{0x99A9, 0xF14F},{0x99AA, 0xF150},{0x99AB, 0xF151},{0x99AC, 0xF152}, - {0x99AD, 0xF153},{0x99AE, 0xF154},{0x99AF, 0xF155},{0x99B0, 0xF156},{0x99B1, 0xF157},{0x99B2, 0xF158},{0x99B3, 0xF159},{0x99B4, 0xF15A}, - {0x99B5, 0xF15B},{0x99B6, 0xF15C},{0x99B7, 0xF15D},{0x99B8, 0xF15E},{0x99B9, 0xF15F},{0x99BA, 0xF160},{0x99BB, 0xF161},{0x99BC, 0xF162}, - {0x99BD, 0xF163},{0x99BE, 0xF164},{0x99BF, 0xF165},{0x99C0, 0xF166},{0x99C1, 0xF167},{0x99C2, 0xF168},{0x99C3, 0xF169},{0x99C4, 0xF16A}, - {0x99C5, 0xF16B},{0x99C6, 0xF16C},{0x99C7, 0xF16D},{0x99C8, 0xF16E},{0x99C9, 0xF16F},{0x99CA, 0xF170},{0x99CB, 0xF171},{0x99CC, 0xF172}, - {0x99CD, 0xF173},{0x99CE, 0xF174},{0x99CF, 0xF175},{0x99D0, 0xF176},{0x99D1, 0xF177},{0x99D2, 0xF178},{0x99D3, 0xF179},{0x99D4, 0xF17A}, - {0x99D5, 0xF17B},{0x99D6, 0xF17C},{0x99D7, 0xF17D},{0x99D8, 0xF17E},{0x99D9, 0xF180},{0x99DA, 0xF181},{0x99DB, 0xF182},{0x99DC, 0xF183}, - {0x99DD, 0xF184},{0x99DE, 0xF185},{0x99DF, 0xF186},{0x99E0, 0xF187},{0x99E1, 0xF188},{0x99E2, 0xF189},{0x99E3, 0xF18A},{0x99E4, 0xF18B}, - {0x99E5, 0xF18C},{0x99E6, 0xF18D},{0x99E7, 0xF18E},{0x99E8, 0xF18F},{0x99E9, 0xF190},{0x99EA, 0xF191},{0x99EB, 0xF192},{0x99EC, 0xF193}, - {0x99ED, 0xF194},{0x99EE, 0xF195},{0x99EF, 0xF196},{0x99F0, 0xF197},{0x99F1, 0xF198},{0x99F2, 0xF199},{0x99F3, 0xF19A},{0x99F4, 0xF19B}, - {0x99F5, 0xF19C},{0x99F6, 0xF19D},{0x99F7, 0xF19E},{0x99F8, 0xF19F},{0x99F9, 0xF1A0},{0x99FA, 0xF240},{0x99FB, 0xF241},{0x99FC, 0xF242}, - {0x99FD, 0xF243},{0x99FE, 0xF244},{0x99FF, 0xF245},{0x9A00, 0xF246},{0x9A01, 0xF247},{0x9A02, 0xF248},{0x9A03, 0xF249},{0x9A04, 0xF24A}, - {0x9A05, 0xF24B},{0x9A06, 0xF24C},{0x9A07, 0xF24D},{0x9A08, 0xF24E},{0x9A09, 0xF24F},{0x9A0A, 0xF250},{0x9A0B, 0xF251},{0x9A0C, 0xF252}, - {0x9A0D, 0xF253},{0x9A0E, 0xF254},{0x9A0F, 0xF255},{0x9A10, 0xF256},{0x9A11, 0xF257},{0x9A12, 0xF258},{0x9A13, 0xF259},{0x9A14, 0xF25A}, - {0x9A15, 0xF25B},{0x9A16, 0xF25C},{0x9A17, 0xF25D},{0x9A18, 0xF25E},{0x9A19, 0xF25F},{0x9A1A, 0xF260},{0x9A1B, 0xF261},{0x9A1C, 0xF262}, - {0x9A1D, 0xF263},{0x9A1E, 0xF264},{0x9A1F, 0xF265},{0x9A20, 0xF266},{0x9A21, 0xF267},{0x9A22, 0xF268},{0x9A23, 0xF269},{0x9A24, 0xF26A}, - {0x9A25, 0xF26B},{0x9A26, 0xF26C},{0x9A27, 0xF26D},{0x9A28, 0xF26E},{0x9A29, 0xF26F},{0x9A2A, 0xF270},{0x9A2B, 0xF271},{0x9A2C, 0xF272}, - {0x9A2D, 0xF273},{0x9A2E, 0xF274},{0x9A2F, 0xF275},{0x9A30, 0xF276},{0x9A31, 0xF277},{0x9A32, 0xF278},{0x9A33, 0xF279},{0x9A34, 0xF27A}, - {0x9A35, 0xF27B},{0x9A36, 0xF27C},{0x9A37, 0xF27D},{0x9A38, 0xF27E},{0x9A39, 0xF280},{0x9A3A, 0xF281},{0x9A3B, 0xF282},{0x9A3C, 0xF283}, - {0x9A3D, 0xF284},{0x9A3E, 0xF285},{0x9A3F, 0xF286},{0x9A40, 0xF287},{0x9A41, 0xF288},{0x9A42, 0xF289},{0x9A43, 0xF28A},{0x9A44, 0xF28B}, - {0x9A45, 0xF28C},{0x9A46, 0xF28D},{0x9A47, 0xF28E},{0x9A48, 0xF28F},{0x9A49, 0xF290},{0x9A4A, 0xF291},{0x9A4B, 0xF292},{0x9A4C, 0xF293}, - {0x9A4D, 0xF294},{0x9A4E, 0xF295},{0x9A4F, 0xF296},{0x9A50, 0xF297},{0x9A51, 0xF298},{0x9A52, 0xF299},{0x9A53, 0xF29A},{0x9A54, 0xF29B}, - {0x9A55, 0xF29C},{0x9A56, 0xF29D},{0x9A57, 0xF29E},{0x9A58, 0xF29F},{0x9A59, 0xF2A0},{0x9A5A, 0xF340},{0x9A5B, 0xF341},{0x9A5C, 0xF342}, - {0x9A5D, 0xF343},{0x9A5E, 0xF344},{0x9A5F, 0xF345},{0x9A60, 0xF346},{0x9A61, 0xF347},{0x9A62, 0xF348},{0x9A63, 0xF349},{0x9A64, 0xF34A}, - {0x9A65, 0xF34B},{0x9A66, 0xF34C},{0x9A67, 0xF34D},{0x9A68, 0xF34E},{0x9A69, 0xF34F},{0x9A6A, 0xF350},{0x9A6B, 0xF351},{0x9A6C, 0xC2ED}, - {0x9A6D, 0xD4A6},{0x9A6E, 0xCDD4},{0x9A6F, 0xD1B1},{0x9A70, 0xB3DB},{0x9A71, 0xC7FD},{0x9A72, 0xF352},{0x9A73, 0xB2B5},{0x9A74, 0xC2BF}, - {0x9A75, 0xE6E0},{0x9A76, 0xCABB},{0x9A77, 0xE6E1},{0x9A78, 0xE6E2},{0x9A79, 0xBED4},{0x9A7A, 0xE6E3},{0x9A7B, 0xD7A4},{0x9A7C, 0xCDD5}, - {0x9A7D, 0xE6E5},{0x9A7E, 0xBCDD},{0x9A7F, 0xE6E4},{0x9A80, 0xE6E6},{0x9A81, 0xE6E7},{0x9A82, 0xC2EE},{0x9A83, 0xF353},{0x9A84, 0xBDBE}, - {0x9A85, 0xE6E8},{0x9A86, 0xC2E6},{0x9A87, 0xBAA7},{0x9A88, 0xE6E9},{0x9A89, 0xF354},{0x9A8A, 0xE6EA},{0x9A8B, 0xB3D2},{0x9A8C, 0xD1E9}, - {0x9A8D, 0xF355},{0x9A8E, 0xF356},{0x9A8F, 0xBFA5},{0x9A90, 0xE6EB},{0x9A91, 0xC6EF},{0x9A92, 0xE6EC},{0x9A93, 0xE6ED},{0x9A94, 0xF357}, - {0x9A95, 0xF358},{0x9A96, 0xE6EE},{0x9A97, 0xC6AD},{0x9A98, 0xE6EF},{0x9A99, 0xF359},{0x9A9A, 0xC9A7},{0x9A9B, 0xE6F0},{0x9A9C, 0xE6F1}, - {0x9A9D, 0xE6F2},{0x9A9E, 0xE5B9},{0x9A9F, 0xE6F3},{0x9AA0, 0xE6F4},{0x9AA1, 0xC2E2},{0x9AA2, 0xE6F5},{0x9AA3, 0xE6F6},{0x9AA4, 0xD6E8}, - {0x9AA5, 0xE6F7},{0x9AA6, 0xF35A},{0x9AA7, 0xE6F8},{0x9AA8, 0xB9C7},{0x9AA9, 0xF35B},{0x9AAA, 0xF35C},{0x9AAB, 0xF35D},{0x9AAC, 0xF35E}, - {0x9AAD, 0xF35F},{0x9AAE, 0xF360},{0x9AAF, 0xF361},{0x9AB0, 0xF7BB},{0x9AB1, 0xF7BA},{0x9AB2, 0xF362},{0x9AB3, 0xF363},{0x9AB4, 0xF364}, - {0x9AB5, 0xF365},{0x9AB6, 0xF7BE},{0x9AB7, 0xF7BC},{0x9AB8, 0xBAA1},{0x9AB9, 0xF366},{0x9ABA, 0xF7BF},{0x9ABB, 0xF367},{0x9ABC, 0xF7C0}, - {0x9ABD, 0xF368},{0x9ABE, 0xF369},{0x9ABF, 0xF36A},{0x9AC0, 0xF7C2},{0x9AC1, 0xF7C1},{0x9AC2, 0xF7C4},{0x9AC3, 0xF36B},{0x9AC4, 0xF36C}, - {0x9AC5, 0xF7C3},{0x9AC6, 0xF36D},{0x9AC7, 0xF36E},{0x9AC8, 0xF36F},{0x9AC9, 0xF370},{0x9ACA, 0xF371},{0x9ACB, 0xF7C5},{0x9ACC, 0xF7C6}, - {0x9ACD, 0xF372},{0x9ACE, 0xF373},{0x9ACF, 0xF374},{0x9AD0, 0xF375},{0x9AD1, 0xF7C7},{0x9AD2, 0xF376},{0x9AD3, 0xCBE8},{0x9AD4, 0xF377}, - {0x9AD5, 0xF378},{0x9AD6, 0xF379},{0x9AD7, 0xF37A},{0x9AD8, 0xB8DF},{0x9AD9, 0xF37B},{0x9ADA, 0xF37C},{0x9ADB, 0xF37D},{0x9ADC, 0xF37E}, - {0x9ADD, 0xF380},{0x9ADE, 0xF381},{0x9ADF, 0xF7D4},{0x9AE0, 0xF382},{0x9AE1, 0xF7D5},{0x9AE2, 0xF383},{0x9AE3, 0xF384},{0x9AE4, 0xF385}, - {0x9AE5, 0xF386},{0x9AE6, 0xF7D6},{0x9AE7, 0xF387},{0x9AE8, 0xF388},{0x9AE9, 0xF389},{0x9AEA, 0xF38A},{0x9AEB, 0xF7D8},{0x9AEC, 0xF38B}, - {0x9AED, 0xF7DA},{0x9AEE, 0xF38C},{0x9AEF, 0xF7D7},{0x9AF0, 0xF38D},{0x9AF1, 0xF38E},{0x9AF2, 0xF38F},{0x9AF3, 0xF390},{0x9AF4, 0xF391}, - {0x9AF5, 0xF392},{0x9AF6, 0xF393},{0x9AF7, 0xF394},{0x9AF8, 0xF395},{0x9AF9, 0xF7DB},{0x9AFA, 0xF396},{0x9AFB, 0xF7D9},{0x9AFC, 0xF397}, - {0x9AFD, 0xF398},{0x9AFE, 0xF399},{0x9AFF, 0xF39A},{0x9B00, 0xF39B},{0x9B01, 0xF39C},{0x9B02, 0xF39D},{0x9B03, 0xD7D7},{0x9B04, 0xF39E}, - {0x9B05, 0xF39F},{0x9B06, 0xF3A0},{0x9B07, 0xF440},{0x9B08, 0xF7DC},{0x9B09, 0xF441},{0x9B0A, 0xF442},{0x9B0B, 0xF443},{0x9B0C, 0xF444}, - {0x9B0D, 0xF445},{0x9B0E, 0xF446},{0x9B0F, 0xF7DD},{0x9B10, 0xF447},{0x9B11, 0xF448},{0x9B12, 0xF449},{0x9B13, 0xF7DE},{0x9B14, 0xF44A}, - {0x9B15, 0xF44B},{0x9B16, 0xF44C},{0x9B17, 0xF44D},{0x9B18, 0xF44E},{0x9B19, 0xF44F},{0x9B1A, 0xF450},{0x9B1B, 0xF451},{0x9B1C, 0xF452}, - {0x9B1D, 0xF453},{0x9B1E, 0xF454},{0x9B1F, 0xF7DF},{0x9B20, 0xF455},{0x9B21, 0xF456},{0x9B22, 0xF457},{0x9B23, 0xF7E0},{0x9B24, 0xF458}, - {0x9B25, 0xF459},{0x9B26, 0xF45A},{0x9B27, 0xF45B},{0x9B28, 0xF45C},{0x9B29, 0xF45D},{0x9B2A, 0xF45E},{0x9B2B, 0xF45F},{0x9B2C, 0xF460}, - {0x9B2D, 0xF461},{0x9B2E, 0xF462},{0x9B2F, 0xDBCB},{0x9B30, 0xF463},{0x9B31, 0xF464},{0x9B32, 0xD8AA},{0x9B33, 0xF465},{0x9B34, 0xF466}, - {0x9B35, 0xF467},{0x9B36, 0xF468},{0x9B37, 0xF469},{0x9B38, 0xF46A},{0x9B39, 0xF46B},{0x9B3A, 0xF46C},{0x9B3B, 0xE5F7},{0x9B3C, 0xB9ED}, - {0x9B3D, 0xF46D},{0x9B3E, 0xF46E},{0x9B3F, 0xF46F},{0x9B40, 0xF470},{0x9B41, 0xBFFD},{0x9B42, 0xBBEA},{0x9B43, 0xF7C9},{0x9B44, 0xC6C7}, - {0x9B45, 0xF7C8},{0x9B46, 0xF471},{0x9B47, 0xF7CA},{0x9B48, 0xF7CC},{0x9B49, 0xF7CB},{0x9B4A, 0xF472},{0x9B4B, 0xF473},{0x9B4C, 0xF474}, - {0x9B4D, 0xF7CD},{0x9B4E, 0xF475},{0x9B4F, 0xCEBA},{0x9B50, 0xF476},{0x9B51, 0xF7CE},{0x9B52, 0xF477},{0x9B53, 0xF478},{0x9B54, 0xC4A7}, - {0x9B55, 0xF479},{0x9B56, 0xF47A},{0x9B57, 0xF47B},{0x9B58, 0xF47C},{0x9B59, 0xF47D},{0x9B5A, 0xF47E},{0x9B5B, 0xF480},{0x9B5C, 0xF481}, - {0x9B5D, 0xF482},{0x9B5E, 0xF483},{0x9B5F, 0xF484},{0x9B60, 0xF485},{0x9B61, 0xF486},{0x9B62, 0xF487},{0x9B63, 0xF488},{0x9B64, 0xF489}, - {0x9B65, 0xF48A},{0x9B66, 0xF48B},{0x9B67, 0xF48C},{0x9B68, 0xF48D},{0x9B69, 0xF48E},{0x9B6A, 0xF48F},{0x9B6B, 0xF490},{0x9B6C, 0xF491}, - {0x9B6D, 0xF492},{0x9B6E, 0xF493},{0x9B6F, 0xF494},{0x9B70, 0xF495},{0x9B71, 0xF496},{0x9B72, 0xF497},{0x9B73, 0xF498},{0x9B74, 0xF499}, - {0x9B75, 0xF49A},{0x9B76, 0xF49B},{0x9B77, 0xF49C},{0x9B78, 0xF49D},{0x9B79, 0xF49E},{0x9B7A, 0xF49F},{0x9B7B, 0xF4A0},{0x9B7C, 0xF540}, - {0x9B7D, 0xF541},{0x9B7E, 0xF542},{0x9B7F, 0xF543},{0x9B80, 0xF544},{0x9B81, 0xF545},{0x9B82, 0xF546},{0x9B83, 0xF547},{0x9B84, 0xF548}, - {0x9B85, 0xF549},{0x9B86, 0xF54A},{0x9B87, 0xF54B},{0x9B88, 0xF54C},{0x9B89, 0xF54D},{0x9B8A, 0xF54E},{0x9B8B, 0xF54F},{0x9B8C, 0xF550}, - {0x9B8D, 0xF551},{0x9B8E, 0xF552},{0x9B8F, 0xF553},{0x9B90, 0xF554},{0x9B91, 0xF555},{0x9B92, 0xF556},{0x9B93, 0xF557},{0x9B94, 0xF558}, - {0x9B95, 0xF559},{0x9B96, 0xF55A},{0x9B97, 0xF55B},{0x9B98, 0xF55C},{0x9B99, 0xF55D},{0x9B9A, 0xF55E},{0x9B9B, 0xF55F},{0x9B9C, 0xF560}, - {0x9B9D, 0xF561},{0x9B9E, 0xF562},{0x9B9F, 0xF563},{0x9BA0, 0xF564},{0x9BA1, 0xF565},{0x9BA2, 0xF566},{0x9BA3, 0xF567},{0x9BA4, 0xF568}, - {0x9BA5, 0xF569},{0x9BA6, 0xF56A},{0x9BA7, 0xF56B},{0x9BA8, 0xF56C},{0x9BA9, 0xF56D},{0x9BAA, 0xF56E},{0x9BAB, 0xF56F},{0x9BAC, 0xF570}, - {0x9BAD, 0xF571},{0x9BAE, 0xF572},{0x9BAF, 0xF573},{0x9BB0, 0xF574},{0x9BB1, 0xF575},{0x9BB2, 0xF576},{0x9BB3, 0xF577},{0x9BB4, 0xF578}, - {0x9BB5, 0xF579},{0x9BB6, 0xF57A},{0x9BB7, 0xF57B},{0x9BB8, 0xF57C},{0x9BB9, 0xF57D},{0x9BBA, 0xF57E},{0x9BBB, 0xF580},{0x9BBC, 0xF581}, - {0x9BBD, 0xF582},{0x9BBE, 0xF583},{0x9BBF, 0xF584},{0x9BC0, 0xF585},{0x9BC1, 0xF586},{0x9BC2, 0xF587},{0x9BC3, 0xF588},{0x9BC4, 0xF589}, - {0x9BC5, 0xF58A},{0x9BC6, 0xF58B},{0x9BC7, 0xF58C},{0x9BC8, 0xF58D},{0x9BC9, 0xF58E},{0x9BCA, 0xF58F},{0x9BCB, 0xF590},{0x9BCC, 0xF591}, - {0x9BCD, 0xF592},{0x9BCE, 0xF593},{0x9BCF, 0xF594},{0x9BD0, 0xF595},{0x9BD1, 0xF596},{0x9BD2, 0xF597},{0x9BD3, 0xF598},{0x9BD4, 0xF599}, - {0x9BD5, 0xF59A},{0x9BD6, 0xF59B},{0x9BD7, 0xF59C},{0x9BD8, 0xF59D},{0x9BD9, 0xF59E},{0x9BDA, 0xF59F},{0x9BDB, 0xF5A0},{0x9BDC, 0xF640}, - {0x9BDD, 0xF641},{0x9BDE, 0xF642},{0x9BDF, 0xF643},{0x9BE0, 0xF644},{0x9BE1, 0xF645},{0x9BE2, 0xF646},{0x9BE3, 0xF647},{0x9BE4, 0xF648}, - {0x9BE5, 0xF649},{0x9BE6, 0xF64A},{0x9BE7, 0xF64B},{0x9BE8, 0xF64C},{0x9BE9, 0xF64D},{0x9BEA, 0xF64E},{0x9BEB, 0xF64F},{0x9BEC, 0xF650}, - {0x9BED, 0xF651},{0x9BEE, 0xF652},{0x9BEF, 0xF653},{0x9BF0, 0xF654},{0x9BF1, 0xF655},{0x9BF2, 0xF656},{0x9BF3, 0xF657},{0x9BF4, 0xF658}, - {0x9BF5, 0xF659},{0x9BF6, 0xF65A},{0x9BF7, 0xF65B},{0x9BF8, 0xF65C},{0x9BF9, 0xF65D},{0x9BFA, 0xF65E},{0x9BFB, 0xF65F},{0x9BFC, 0xF660}, - {0x9BFD, 0xF661},{0x9BFE, 0xF662},{0x9BFF, 0xF663},{0x9C00, 0xF664},{0x9C01, 0xF665},{0x9C02, 0xF666},{0x9C03, 0xF667},{0x9C04, 0xF668}, - {0x9C05, 0xF669},{0x9C06, 0xF66A},{0x9C07, 0xF66B},{0x9C08, 0xF66C},{0x9C09, 0xF66D},{0x9C0A, 0xF66E},{0x9C0B, 0xF66F},{0x9C0C, 0xF670}, - {0x9C0D, 0xF671},{0x9C0E, 0xF672},{0x9C0F, 0xF673},{0x9C10, 0xF674},{0x9C11, 0xF675},{0x9C12, 0xF676},{0x9C13, 0xF677},{0x9C14, 0xF678}, - {0x9C15, 0xF679},{0x9C16, 0xF67A},{0x9C17, 0xF67B},{0x9C18, 0xF67C},{0x9C19, 0xF67D},{0x9C1A, 0xF67E},{0x9C1B, 0xF680},{0x9C1C, 0xF681}, - {0x9C1D, 0xF682},{0x9C1E, 0xF683},{0x9C1F, 0xF684},{0x9C20, 0xF685},{0x9C21, 0xF686},{0x9C22, 0xF687},{0x9C23, 0xF688},{0x9C24, 0xF689}, - {0x9C25, 0xF68A},{0x9C26, 0xF68B},{0x9C27, 0xF68C},{0x9C28, 0xF68D},{0x9C29, 0xF68E},{0x9C2A, 0xF68F},{0x9C2B, 0xF690},{0x9C2C, 0xF691}, - {0x9C2D, 0xF692},{0x9C2E, 0xF693},{0x9C2F, 0xF694},{0x9C30, 0xF695},{0x9C31, 0xF696},{0x9C32, 0xF697},{0x9C33, 0xF698},{0x9C34, 0xF699}, - {0x9C35, 0xF69A},{0x9C36, 0xF69B},{0x9C37, 0xF69C},{0x9C38, 0xF69D},{0x9C39, 0xF69E},{0x9C3A, 0xF69F},{0x9C3B, 0xF6A0},{0x9C3C, 0xF740}, - {0x9C3D, 0xF741},{0x9C3E, 0xF742},{0x9C3F, 0xF743},{0x9C40, 0xF744},{0x9C41, 0xF745},{0x9C42, 0xF746},{0x9C43, 0xF747},{0x9C44, 0xF748}, - {0x9C45, 0xF749},{0x9C46, 0xF74A},{0x9C47, 0xF74B},{0x9C48, 0xF74C},{0x9C49, 0xF74D},{0x9C4A, 0xF74E},{0x9C4B, 0xF74F},{0x9C4C, 0xF750}, - {0x9C4D, 0xF751},{0x9C4E, 0xF752},{0x9C4F, 0xF753},{0x9C50, 0xF754},{0x9C51, 0xF755},{0x9C52, 0xF756},{0x9C53, 0xF757},{0x9C54, 0xF758}, - {0x9C55, 0xF759},{0x9C56, 0xF75A},{0x9C57, 0xF75B},{0x9C58, 0xF75C},{0x9C59, 0xF75D},{0x9C5A, 0xF75E},{0x9C5B, 0xF75F},{0x9C5C, 0xF760}, - {0x9C5D, 0xF761},{0x9C5E, 0xF762},{0x9C5F, 0xF763},{0x9C60, 0xF764},{0x9C61, 0xF765},{0x9C62, 0xF766},{0x9C63, 0xF767},{0x9C64, 0xF768}, - {0x9C65, 0xF769},{0x9C66, 0xF76A},{0x9C67, 0xF76B},{0x9C68, 0xF76C},{0x9C69, 0xF76D},{0x9C6A, 0xF76E},{0x9C6B, 0xF76F},{0x9C6C, 0xF770}, - {0x9C6D, 0xF771},{0x9C6E, 0xF772},{0x9C6F, 0xF773},{0x9C70, 0xF774},{0x9C71, 0xF775},{0x9C72, 0xF776},{0x9C73, 0xF777},{0x9C74, 0xF778}, - {0x9C75, 0xF779},{0x9C76, 0xF77A},{0x9C77, 0xF77B},{0x9C78, 0xF77C},{0x9C79, 0xF77D},{0x9C7A, 0xF77E},{0x9C7B, 0xF780},{0x9C7C, 0xD3E3}, - {0x9C7D, 0xF781},{0x9C7E, 0xF782},{0x9C7F, 0xF6CF},{0x9C80, 0xF783},{0x9C81, 0xC2B3},{0x9C82, 0xF6D0},{0x9C83, 0xF784},{0x9C84, 0xF785}, - {0x9C85, 0xF6D1},{0x9C86, 0xF6D2},{0x9C87, 0xF6D3},{0x9C88, 0xF6D4},{0x9C89, 0xF786},{0x9C8A, 0xF787},{0x9C8B, 0xF6D6},{0x9C8C, 0xF788}, - {0x9C8D, 0xB1AB},{0x9C8E, 0xF6D7},{0x9C8F, 0xF789},{0x9C90, 0xF6D8},{0x9C91, 0xF6D9},{0x9C92, 0xF6DA},{0x9C93, 0xF78A},{0x9C94, 0xF6DB}, - {0x9C95, 0xF6DC},{0x9C96, 0xF78B},{0x9C97, 0xF78C},{0x9C98, 0xF78D},{0x9C99, 0xF78E},{0x9C9A, 0xF6DD},{0x9C9B, 0xF6DE},{0x9C9C, 0xCFCA}, - {0x9C9D, 0xF78F},{0x9C9E, 0xF6DF},{0x9C9F, 0xF6E0},{0x9CA0, 0xF6E1},{0x9CA1, 0xF6E2},{0x9CA2, 0xF6E3},{0x9CA3, 0xF6E4},{0x9CA4, 0xC0F0}, - {0x9CA5, 0xF6E5},{0x9CA6, 0xF6E6},{0x9CA7, 0xF6E7},{0x9CA8, 0xF6E8},{0x9CA9, 0xF6E9},{0x9CAA, 0xF790},{0x9CAB, 0xF6EA},{0x9CAC, 0xF791}, - {0x9CAD, 0xF6EB},{0x9CAE, 0xF6EC},{0x9CAF, 0xF792},{0x9CB0, 0xF6ED},{0x9CB1, 0xF6EE},{0x9CB2, 0xF6EF},{0x9CB3, 0xF6F0},{0x9CB4, 0xF6F1}, - {0x9CB5, 0xF6F2},{0x9CB6, 0xF6F3},{0x9CB7, 0xF6F4},{0x9CB8, 0xBEA8},{0x9CB9, 0xF793},{0x9CBA, 0xF6F5},{0x9CBB, 0xF6F6},{0x9CBC, 0xF6F7}, - {0x9CBD, 0xF6F8},{0x9CBE, 0xF794},{0x9CBF, 0xF795},{0x9CC0, 0xF796},{0x9CC1, 0xF797},{0x9CC2, 0xF798},{0x9CC3, 0xC8FA},{0x9CC4, 0xF6F9}, - {0x9CC5, 0xF6FA},{0x9CC6, 0xF6FB},{0x9CC7, 0xF6FC},{0x9CC8, 0xF799},{0x9CC9, 0xF79A},{0x9CCA, 0xF6FD},{0x9CCB, 0xF6FE},{0x9CCC, 0xF7A1}, - {0x9CCD, 0xF7A2},{0x9CCE, 0xF7A3},{0x9CCF, 0xF7A4},{0x9CD0, 0xF7A5},{0x9CD1, 0xF79B},{0x9CD2, 0xF79C},{0x9CD3, 0xF7A6},{0x9CD4, 0xF7A7}, - {0x9CD5, 0xF7A8},{0x9CD6, 0xB1EE},{0x9CD7, 0xF7A9},{0x9CD8, 0xF7AA},{0x9CD9, 0xF7AB},{0x9CDA, 0xF79D},{0x9CDB, 0xF79E},{0x9CDC, 0xF7AC}, - {0x9CDD, 0xF7AD},{0x9CDE, 0xC1DB},{0x9CDF, 0xF7AE},{0x9CE0, 0xF79F},{0x9CE1, 0xF7A0},{0x9CE2, 0xF7AF},{0x9CE3, 0xF840},{0x9CE4, 0xF841}, - {0x9CE5, 0xF842},{0x9CE6, 0xF843},{0x9CE7, 0xF844},{0x9CE8, 0xF845},{0x9CE9, 0xF846},{0x9CEA, 0xF847},{0x9CEB, 0xF848},{0x9CEC, 0xF849}, - {0x9CED, 0xF84A},{0x9CEE, 0xF84B},{0x9CEF, 0xF84C},{0x9CF0, 0xF84D},{0x9CF1, 0xF84E},{0x9CF2, 0xF84F},{0x9CF3, 0xF850},{0x9CF4, 0xF851}, - {0x9CF5, 0xF852},{0x9CF6, 0xF853},{0x9CF7, 0xF854},{0x9CF8, 0xF855},{0x9CF9, 0xF856},{0x9CFA, 0xF857},{0x9CFB, 0xF858},{0x9CFC, 0xF859}, - {0x9CFD, 0xF85A},{0x9CFE, 0xF85B},{0x9CFF, 0xF85C},{0x9D00, 0xF85D},{0x9D01, 0xF85E},{0x9D02, 0xF85F},{0x9D03, 0xF860},{0x9D04, 0xF861}, - {0x9D05, 0xF862},{0x9D06, 0xF863},{0x9D07, 0xF864},{0x9D08, 0xF865},{0x9D09, 0xF866},{0x9D0A, 0xF867},{0x9D0B, 0xF868},{0x9D0C, 0xF869}, - {0x9D0D, 0xF86A},{0x9D0E, 0xF86B},{0x9D0F, 0xF86C},{0x9D10, 0xF86D},{0x9D11, 0xF86E},{0x9D12, 0xF86F},{0x9D13, 0xF870},{0x9D14, 0xF871}, - {0x9D15, 0xF872},{0x9D16, 0xF873},{0x9D17, 0xF874},{0x9D18, 0xF875},{0x9D19, 0xF876},{0x9D1A, 0xF877},{0x9D1B, 0xF878},{0x9D1C, 0xF879}, - {0x9D1D, 0xF87A},{0x9D1E, 0xF87B},{0x9D1F, 0xF87C},{0x9D20, 0xF87D},{0x9D21, 0xF87E},{0x9D22, 0xF880},{0x9D23, 0xF881},{0x9D24, 0xF882}, - {0x9D25, 0xF883},{0x9D26, 0xF884},{0x9D27, 0xF885},{0x9D28, 0xF886},{0x9D29, 0xF887},{0x9D2A, 0xF888},{0x9D2B, 0xF889},{0x9D2C, 0xF88A}, - {0x9D2D, 0xF88B},{0x9D2E, 0xF88C},{0x9D2F, 0xF88D},{0x9D30, 0xF88E},{0x9D31, 0xF88F},{0x9D32, 0xF890},{0x9D33, 0xF891},{0x9D34, 0xF892}, - {0x9D35, 0xF893},{0x9D36, 0xF894},{0x9D37, 0xF895},{0x9D38, 0xF896},{0x9D39, 0xF897},{0x9D3A, 0xF898},{0x9D3B, 0xF899},{0x9D3C, 0xF89A}, - {0x9D3D, 0xF89B},{0x9D3E, 0xF89C},{0x9D3F, 0xF89D},{0x9D40, 0xF89E},{0x9D41, 0xF89F},{0x9D42, 0xF8A0},{0x9D43, 0xF940},{0x9D44, 0xF941}, - {0x9D45, 0xF942},{0x9D46, 0xF943},{0x9D47, 0xF944},{0x9D48, 0xF945},{0x9D49, 0xF946},{0x9D4A, 0xF947},{0x9D4B, 0xF948},{0x9D4C, 0xF949}, - {0x9D4D, 0xF94A},{0x9D4E, 0xF94B},{0x9D4F, 0xF94C},{0x9D50, 0xF94D},{0x9D51, 0xF94E},{0x9D52, 0xF94F},{0x9D53, 0xF950},{0x9D54, 0xF951}, - {0x9D55, 0xF952},{0x9D56, 0xF953},{0x9D57, 0xF954},{0x9D58, 0xF955},{0x9D59, 0xF956},{0x9D5A, 0xF957},{0x9D5B, 0xF958},{0x9D5C, 0xF959}, - {0x9D5D, 0xF95A},{0x9D5E, 0xF95B},{0x9D5F, 0xF95C},{0x9D60, 0xF95D},{0x9D61, 0xF95E},{0x9D62, 0xF95F},{0x9D63, 0xF960},{0x9D64, 0xF961}, - {0x9D65, 0xF962},{0x9D66, 0xF963},{0x9D67, 0xF964},{0x9D68, 0xF965},{0x9D69, 0xF966},{0x9D6A, 0xF967},{0x9D6B, 0xF968},{0x9D6C, 0xF969}, - {0x9D6D, 0xF96A},{0x9D6E, 0xF96B},{0x9D6F, 0xF96C},{0x9D70, 0xF96D},{0x9D71, 0xF96E},{0x9D72, 0xF96F},{0x9D73, 0xF970},{0x9D74, 0xF971}, - {0x9D75, 0xF972},{0x9D76, 0xF973},{0x9D77, 0xF974},{0x9D78, 0xF975},{0x9D79, 0xF976},{0x9D7A, 0xF977},{0x9D7B, 0xF978},{0x9D7C, 0xF979}, - {0x9D7D, 0xF97A},{0x9D7E, 0xF97B},{0x9D7F, 0xF97C},{0x9D80, 0xF97D},{0x9D81, 0xF97E},{0x9D82, 0xF980},{0x9D83, 0xF981},{0x9D84, 0xF982}, - {0x9D85, 0xF983},{0x9D86, 0xF984},{0x9D87, 0xF985},{0x9D88, 0xF986},{0x9D89, 0xF987},{0x9D8A, 0xF988},{0x9D8B, 0xF989},{0x9D8C, 0xF98A}, - {0x9D8D, 0xF98B},{0x9D8E, 0xF98C},{0x9D8F, 0xF98D},{0x9D90, 0xF98E},{0x9D91, 0xF98F},{0x9D92, 0xF990},{0x9D93, 0xF991},{0x9D94, 0xF992}, - {0x9D95, 0xF993},{0x9D96, 0xF994},{0x9D97, 0xF995},{0x9D98, 0xF996},{0x9D99, 0xF997},{0x9D9A, 0xF998},{0x9D9B, 0xF999},{0x9D9C, 0xF99A}, - {0x9D9D, 0xF99B},{0x9D9E, 0xF99C},{0x9D9F, 0xF99D},{0x9DA0, 0xF99E},{0x9DA1, 0xF99F},{0x9DA2, 0xF9A0},{0x9DA3, 0xFA40},{0x9DA4, 0xFA41}, - {0x9DA5, 0xFA42},{0x9DA6, 0xFA43},{0x9DA7, 0xFA44},{0x9DA8, 0xFA45},{0x9DA9, 0xFA46},{0x9DAA, 0xFA47},{0x9DAB, 0xFA48},{0x9DAC, 0xFA49}, - {0x9DAD, 0xFA4A},{0x9DAE, 0xFA4B},{0x9DAF, 0xFA4C},{0x9DB0, 0xFA4D},{0x9DB1, 0xFA4E},{0x9DB2, 0xFA4F},{0x9DB3, 0xFA50},{0x9DB4, 0xFA51}, - {0x9DB5, 0xFA52},{0x9DB6, 0xFA53},{0x9DB7, 0xFA54},{0x9DB8, 0xFA55},{0x9DB9, 0xFA56},{0x9DBA, 0xFA57},{0x9DBB, 0xFA58},{0x9DBC, 0xFA59}, - {0x9DBD, 0xFA5A},{0x9DBE, 0xFA5B},{0x9DBF, 0xFA5C},{0x9DC0, 0xFA5D},{0x9DC1, 0xFA5E},{0x9DC2, 0xFA5F},{0x9DC3, 0xFA60},{0x9DC4, 0xFA61}, - {0x9DC5, 0xFA62},{0x9DC6, 0xFA63},{0x9DC7, 0xFA64},{0x9DC8, 0xFA65},{0x9DC9, 0xFA66},{0x9DCA, 0xFA67},{0x9DCB, 0xFA68},{0x9DCC, 0xFA69}, - {0x9DCD, 0xFA6A},{0x9DCE, 0xFA6B},{0x9DCF, 0xFA6C},{0x9DD0, 0xFA6D},{0x9DD1, 0xFA6E},{0x9DD2, 0xFA6F},{0x9DD3, 0xFA70},{0x9DD4, 0xFA71}, - {0x9DD5, 0xFA72},{0x9DD6, 0xFA73},{0x9DD7, 0xFA74},{0x9DD8, 0xFA75},{0x9DD9, 0xFA76},{0x9DDA, 0xFA77},{0x9DDB, 0xFA78},{0x9DDC, 0xFA79}, - {0x9DDD, 0xFA7A},{0x9DDE, 0xFA7B},{0x9DDF, 0xFA7C},{0x9DE0, 0xFA7D},{0x9DE1, 0xFA7E},{0x9DE2, 0xFA80},{0x9DE3, 0xFA81},{0x9DE4, 0xFA82}, - {0x9DE5, 0xFA83},{0x9DE6, 0xFA84},{0x9DE7, 0xFA85},{0x9DE8, 0xFA86},{0x9DE9, 0xFA87},{0x9DEA, 0xFA88},{0x9DEB, 0xFA89},{0x9DEC, 0xFA8A}, - {0x9DED, 0xFA8B},{0x9DEE, 0xFA8C},{0x9DEF, 0xFA8D},{0x9DF0, 0xFA8E},{0x9DF1, 0xFA8F},{0x9DF2, 0xFA90},{0x9DF3, 0xFA91},{0x9DF4, 0xFA92}, - {0x9DF5, 0xFA93},{0x9DF6, 0xFA94},{0x9DF7, 0xFA95},{0x9DF8, 0xFA96},{0x9DF9, 0xFA97},{0x9DFA, 0xFA98},{0x9DFB, 0xFA99},{0x9DFC, 0xFA9A}, - {0x9DFD, 0xFA9B},{0x9DFE, 0xFA9C},{0x9DFF, 0xFA9D},{0x9E00, 0xFA9E},{0x9E01, 0xFA9F},{0x9E02, 0xFAA0},{0x9E03, 0xFB40},{0x9E04, 0xFB41}, - {0x9E05, 0xFB42},{0x9E06, 0xFB43},{0x9E07, 0xFB44},{0x9E08, 0xFB45},{0x9E09, 0xFB46},{0x9E0A, 0xFB47},{0x9E0B, 0xFB48},{0x9E0C, 0xFB49}, - {0x9E0D, 0xFB4A},{0x9E0E, 0xFB4B},{0x9E0F, 0xFB4C},{0x9E10, 0xFB4D},{0x9E11, 0xFB4E},{0x9E12, 0xFB4F},{0x9E13, 0xFB50},{0x9E14, 0xFB51}, - {0x9E15, 0xFB52},{0x9E16, 0xFB53},{0x9E17, 0xFB54},{0x9E18, 0xFB55},{0x9E19, 0xFB56},{0x9E1A, 0xFB57},{0x9E1B, 0xFB58},{0x9E1C, 0xFB59}, - {0x9E1D, 0xFB5A},{0x9E1E, 0xFB5B},{0x9E1F, 0xC4F1},{0x9E20, 0xF0AF},{0x9E21, 0xBCA6},{0x9E22, 0xF0B0},{0x9E23, 0xC3F9},{0x9E24, 0xFB5C}, - {0x9E25, 0xC5B8},{0x9E26, 0xD1BB},{0x9E27, 0xFB5D},{0x9E28, 0xF0B1},{0x9E29, 0xF0B2},{0x9E2A, 0xF0B3},{0x9E2B, 0xF0B4},{0x9E2C, 0xF0B5}, - {0x9E2D, 0xD1BC},{0x9E2E, 0xFB5E},{0x9E2F, 0xD1EC},{0x9E30, 0xFB5F},{0x9E31, 0xF0B7},{0x9E32, 0xF0B6},{0x9E33, 0xD4A7},{0x9E34, 0xFB60}, - {0x9E35, 0xCDD2},{0x9E36, 0xF0B8},{0x9E37, 0xF0BA},{0x9E38, 0xF0B9},{0x9E39, 0xF0BB},{0x9E3A, 0xF0BC},{0x9E3B, 0xFB61},{0x9E3C, 0xFB62}, - {0x9E3D, 0xB8EB},{0x9E3E, 0xF0BD},{0x9E3F, 0xBAE8},{0x9E40, 0xFB63},{0x9E41, 0xF0BE},{0x9E42, 0xF0BF},{0x9E43, 0xBEE9},{0x9E44, 0xF0C0}, - {0x9E45, 0xB6EC},{0x9E46, 0xF0C1},{0x9E47, 0xF0C2},{0x9E48, 0xF0C3},{0x9E49, 0xF0C4},{0x9E4A, 0xC8B5},{0x9E4B, 0xF0C5},{0x9E4C, 0xF0C6}, - {0x9E4D, 0xFB64},{0x9E4E, 0xF0C7},{0x9E4F, 0xC5F4},{0x9E50, 0xFB65},{0x9E51, 0xF0C8},{0x9E52, 0xFB66},{0x9E53, 0xFB67},{0x9E54, 0xFB68}, - {0x9E55, 0xF0C9},{0x9E56, 0xFB69},{0x9E57, 0xF0CA},{0x9E58, 0xF7BD},{0x9E59, 0xFB6A},{0x9E5A, 0xF0CB},{0x9E5B, 0xF0CC},{0x9E5C, 0xF0CD}, - {0x9E5D, 0xFB6B},{0x9E5E, 0xF0CE},{0x9E5F, 0xFB6C},{0x9E60, 0xFB6D},{0x9E61, 0xFB6E},{0x9E62, 0xFB6F},{0x9E63, 0xF0CF},{0x9E64, 0xBAD7}, - {0x9E65, 0xFB70},{0x9E66, 0xF0D0},{0x9E67, 0xF0D1},{0x9E68, 0xF0D2},{0x9E69, 0xF0D3},{0x9E6A, 0xF0D4},{0x9E6B, 0xF0D5},{0x9E6C, 0xF0D6}, - {0x9E6D, 0xF0D8},{0x9E6E, 0xFB71},{0x9E6F, 0xFB72},{0x9E70, 0xD3A5},{0x9E71, 0xF0D7},{0x9E72, 0xFB73},{0x9E73, 0xF0D9},{0x9E74, 0xFB74}, - {0x9E75, 0xFB75},{0x9E76, 0xFB76},{0x9E77, 0xFB77},{0x9E78, 0xFB78},{0x9E79, 0xFB79},{0x9E7A, 0xFB7A},{0x9E7B, 0xFB7B},{0x9E7C, 0xFB7C}, - {0x9E7D, 0xFB7D},{0x9E7E, 0xF5BA},{0x9E7F, 0xC2B9},{0x9E80, 0xFB7E},{0x9E81, 0xFB80},{0x9E82, 0xF7E4},{0x9E83, 0xFB81},{0x9E84, 0xFB82}, - {0x9E85, 0xFB83},{0x9E86, 0xFB84},{0x9E87, 0xF7E5},{0x9E88, 0xF7E6},{0x9E89, 0xFB85},{0x9E8A, 0xFB86},{0x9E8B, 0xF7E7},{0x9E8C, 0xFB87}, - {0x9E8D, 0xFB88},{0x9E8E, 0xFB89},{0x9E8F, 0xFB8A},{0x9E90, 0xFB8B},{0x9E91, 0xFB8C},{0x9E92, 0xF7E8},{0x9E93, 0xC2B4},{0x9E94, 0xFB8D}, - {0x9E95, 0xFB8E},{0x9E96, 0xFB8F},{0x9E97, 0xFB90},{0x9E98, 0xFB91},{0x9E99, 0xFB92},{0x9E9A, 0xFB93},{0x9E9B, 0xFB94},{0x9E9C, 0xFB95}, - {0x9E9D, 0xF7EA},{0x9E9E, 0xFB96},{0x9E9F, 0xF7EB},{0x9EA0, 0xFB97},{0x9EA1, 0xFB98},{0x9EA2, 0xFB99},{0x9EA3, 0xFB9A},{0x9EA4, 0xFB9B}, - {0x9EA5, 0xFB9C},{0x9EA6, 0xC2F3},{0x9EA7, 0xFB9D},{0x9EA8, 0xFB9E},{0x9EA9, 0xFB9F},{0x9EAA, 0xFBA0},{0x9EAB, 0xFC40},{0x9EAC, 0xFC41}, - {0x9EAD, 0xFC42},{0x9EAE, 0xFC43},{0x9EAF, 0xFC44},{0x9EB0, 0xFC45},{0x9EB1, 0xFC46},{0x9EB2, 0xFC47},{0x9EB3, 0xFC48},{0x9EB4, 0xF4F0}, - {0x9EB5, 0xFC49},{0x9EB6, 0xFC4A},{0x9EB7, 0xFC4B},{0x9EB8, 0xF4EF},{0x9EB9, 0xFC4C},{0x9EBA, 0xFC4D},{0x9EBB, 0xC2E9},{0x9EBC, 0xFC4E}, - {0x9EBD, 0xF7E1},{0x9EBE, 0xF7E2},{0x9EBF, 0xFC4F},{0x9EC0, 0xFC50},{0x9EC1, 0xFC51},{0x9EC2, 0xFC52},{0x9EC3, 0xFC53},{0x9EC4, 0xBBC6}, - {0x9EC5, 0xFC54},{0x9EC6, 0xFC55},{0x9EC7, 0xFC56},{0x9EC8, 0xFC57},{0x9EC9, 0xD9E4},{0x9ECA, 0xFC58},{0x9ECB, 0xFC59},{0x9ECC, 0xFC5A}, - {0x9ECD, 0xCAF2},{0x9ECE, 0xC0E8},{0x9ECF, 0xF0A4},{0x9ED0, 0xFC5B},{0x9ED1, 0xBADA},{0x9ED2, 0xFC5C},{0x9ED3, 0xFC5D},{0x9ED4, 0xC7AD}, - {0x9ED5, 0xFC5E},{0x9ED6, 0xFC5F},{0x9ED7, 0xFC60},{0x9ED8, 0xC4AC},{0x9ED9, 0xFC61},{0x9EDA, 0xFC62},{0x9EDB, 0xF7EC},{0x9EDC, 0xF7ED}, - {0x9EDD, 0xF7EE},{0x9EDE, 0xFC63},{0x9EDF, 0xF7F0},{0x9EE0, 0xF7EF},{0x9EE1, 0xFC64},{0x9EE2, 0xF7F1},{0x9EE3, 0xFC65},{0x9EE4, 0xFC66}, - {0x9EE5, 0xF7F4},{0x9EE6, 0xFC67},{0x9EE7, 0xF7F3},{0x9EE8, 0xFC68},{0x9EE9, 0xF7F2},{0x9EEA, 0xF7F5},{0x9EEB, 0xFC69},{0x9EEC, 0xFC6A}, - {0x9EED, 0xFC6B},{0x9EEE, 0xFC6C},{0x9EEF, 0xF7F6},{0x9EF0, 0xFC6D},{0x9EF1, 0xFC6E},{0x9EF2, 0xFC6F},{0x9EF3, 0xFC70},{0x9EF4, 0xFC71}, - {0x9EF5, 0xFC72},{0x9EF6, 0xFC73},{0x9EF7, 0xFC74},{0x9EF8, 0xFC75},{0x9EF9, 0xEDE9},{0x9EFA, 0xFC76},{0x9EFB, 0xEDEA},{0x9EFC, 0xEDEB}, - {0x9EFD, 0xFC77},{0x9EFE, 0xF6BC},{0x9EFF, 0xFC78},{0x9F00, 0xFC79},{0x9F01, 0xFC7A},{0x9F02, 0xFC7B},{0x9F03, 0xFC7C},{0x9F04, 0xFC7D}, - {0x9F05, 0xFC7E},{0x9F06, 0xFC80},{0x9F07, 0xFC81},{0x9F08, 0xFC82},{0x9F09, 0xFC83},{0x9F0A, 0xFC84},{0x9F0B, 0xF6BD},{0x9F0C, 0xFC85}, - {0x9F0D, 0xF6BE},{0x9F0E, 0xB6A6},{0x9F0F, 0xFC86},{0x9F10, 0xD8BE},{0x9F11, 0xFC87},{0x9F12, 0xFC88},{0x9F13, 0xB9C4},{0x9F14, 0xFC89}, - {0x9F15, 0xFC8A},{0x9F16, 0xFC8B},{0x9F17, 0xD8BB},{0x9F18, 0xFC8C},{0x9F19, 0xDCB1},{0x9F1A, 0xFC8D},{0x9F1B, 0xFC8E},{0x9F1C, 0xFC8F}, - {0x9F1D, 0xFC90},{0x9F1E, 0xFC91},{0x9F1F, 0xFC92},{0x9F20, 0xCAF3},{0x9F21, 0xFC93},{0x9F22, 0xF7F7},{0x9F23, 0xFC94},{0x9F24, 0xFC95}, - {0x9F25, 0xFC96},{0x9F26, 0xFC97},{0x9F27, 0xFC98},{0x9F28, 0xFC99},{0x9F29, 0xFC9A},{0x9F2A, 0xFC9B},{0x9F2B, 0xFC9C},{0x9F2C, 0xF7F8}, - {0x9F2D, 0xFC9D},{0x9F2E, 0xFC9E},{0x9F2F, 0xF7F9},{0x9F30, 0xFC9F},{0x9F31, 0xFCA0},{0x9F32, 0xFD40},{0x9F33, 0xFD41},{0x9F34, 0xFD42}, - {0x9F35, 0xFD43},{0x9F36, 0xFD44},{0x9F37, 0xF7FB},{0x9F38, 0xFD45},{0x9F39, 0xF7FA},{0x9F3A, 0xFD46},{0x9F3B, 0xB1C7},{0x9F3C, 0xFD47}, - {0x9F3D, 0xF7FC},{0x9F3E, 0xF7FD},{0x9F3F, 0xFD48},{0x9F40, 0xFD49},{0x9F41, 0xFD4A},{0x9F42, 0xFD4B},{0x9F43, 0xFD4C},{0x9F44, 0xF7FE}, - {0x9F45, 0xFD4D},{0x9F46, 0xFD4E},{0x9F47, 0xFD4F},{0x9F48, 0xFD50},{0x9F49, 0xFD51},{0x9F4A, 0xFD52},{0x9F4B, 0xFD53},{0x9F4C, 0xFD54}, - {0x9F4D, 0xFD55},{0x9F4E, 0xFD56},{0x9F4F, 0xFD57},{0x9F50, 0xC6EB},{0x9F51, 0xECB4},{0x9F52, 0xFD58},{0x9F53, 0xFD59},{0x9F54, 0xFD5A}, - {0x9F55, 0xFD5B},{0x9F56, 0xFD5C},{0x9F57, 0xFD5D},{0x9F58, 0xFD5E},{0x9F59, 0xFD5F},{0x9F5A, 0xFD60},{0x9F5B, 0xFD61},{0x9F5C, 0xFD62}, - {0x9F5D, 0xFD63},{0x9F5E, 0xFD64},{0x9F5F, 0xFD65},{0x9F60, 0xFD66},{0x9F61, 0xFD67},{0x9F62, 0xFD68},{0x9F63, 0xFD69},{0x9F64, 0xFD6A}, - {0x9F65, 0xFD6B},{0x9F66, 0xFD6C},{0x9F67, 0xFD6D},{0x9F68, 0xFD6E},{0x9F69, 0xFD6F},{0x9F6A, 0xFD70},{0x9F6B, 0xFD71},{0x9F6C, 0xFD72}, - {0x9F6D, 0xFD73},{0x9F6E, 0xFD74},{0x9F6F, 0xFD75},{0x9F70, 0xFD76},{0x9F71, 0xFD77},{0x9F72, 0xFD78},{0x9F73, 0xFD79},{0x9F74, 0xFD7A}, - {0x9F75, 0xFD7B},{0x9F76, 0xFD7C},{0x9F77, 0xFD7D},{0x9F78, 0xFD7E},{0x9F79, 0xFD80},{0x9F7A, 0xFD81},{0x9F7B, 0xFD82},{0x9F7C, 0xFD83}, - {0x9F7D, 0xFD84},{0x9F7E, 0xFD85},{0x9F7F, 0xB3DD},{0x9F80, 0xF6B3},{0x9F81, 0xFD86},{0x9F82, 0xFD87},{0x9F83, 0xF6B4},{0x9F84, 0xC1E4}, - {0x9F85, 0xF6B5},{0x9F86, 0xF6B6},{0x9F87, 0xF6B7},{0x9F88, 0xF6B8},{0x9F89, 0xF6B9},{0x9F8A, 0xF6BA},{0x9F8B, 0xC8A3},{0x9F8C, 0xF6BB}, - {0x9F8D, 0xFD88},{0x9F8E, 0xFD89},{0x9F8F, 0xFD8A},{0x9F90, 0xFD8B},{0x9F91, 0xFD8C},{0x9F92, 0xFD8D},{0x9F93, 0xFD8E},{0x9F94, 0xFD8F}, - {0x9F95, 0xFD90},{0x9F96, 0xFD91},{0x9F97, 0xFD92},{0x9F98, 0xFD93},{0x9F99, 0xC1FA},{0x9F9A, 0xB9A8},{0x9F9B, 0xEDE8},{0x9F9C, 0xFD94}, - {0x9F9D, 0xFD95},{0x9F9E, 0xFD96},{0x9F9F, 0xB9EA},{0x9FA0, 0xD9DF},{0x9FA1, 0xFD97},{0x9FA2, 0xFD98},{0x9FA3, 0xFD99},{0x9FA4, 0xFD9A}, - {0x9FA5, 0xFD9B},{0xE000, 0xAAA1},{0xE001, 0xAAA2},{0xE002, 0xAAA3},{0xE003, 0xAAA4},{0xE004, 0xAAA5},{0xE005, 0xAAA6},{0xE006, 0xAAA7}, - {0xE007, 0xAAA8},{0xE008, 0xAAA9},{0xE009, 0xAAAA},{0xE00A, 0xAAAB},{0xE00B, 0xAAAC},{0xE00C, 0xAAAD},{0xE00D, 0xAAAE},{0xE00E, 0xAAAF}, - {0xE00F, 0xAAB0},{0xE010, 0xAAB1},{0xE011, 0xAAB2},{0xE012, 0xAAB3},{0xE013, 0xAAB4},{0xE014, 0xAAB5},{0xE015, 0xAAB6},{0xE016, 0xAAB7}, - {0xE017, 0xAAB8},{0xE018, 0xAAB9},{0xE019, 0xAABA},{0xE01A, 0xAABB},{0xE01B, 0xAABC},{0xE01C, 0xAABD},{0xE01D, 0xAABE},{0xE01E, 0xAABF}, - {0xE01F, 0xAAC0},{0xE020, 0xAAC1},{0xE021, 0xAAC2},{0xE022, 0xAAC3},{0xE023, 0xAAC4},{0xE024, 0xAAC5},{0xE025, 0xAAC6},{0xE026, 0xAAC7}, - {0xE027, 0xAAC8},{0xE028, 0xAAC9},{0xE029, 0xAACA},{0xE02A, 0xAACB},{0xE02B, 0xAACC},{0xE02C, 0xAACD},{0xE02D, 0xAACE},{0xE02E, 0xAACF}, - {0xE02F, 0xAAD0},{0xE030, 0xAAD1},{0xE031, 0xAAD2},{0xE032, 0xAAD3},{0xE033, 0xAAD4},{0xE034, 0xAAD5},{0xE035, 0xAAD6},{0xE036, 0xAAD7}, - {0xE037, 0xAAD8},{0xE038, 0xAAD9},{0xE039, 0xAADA},{0xE03A, 0xAADB},{0xE03B, 0xAADC},{0xE03C, 0xAADD},{0xE03D, 0xAADE},{0xE03E, 0xAADF}, - {0xE03F, 0xAAE0},{0xE040, 0xAAE1},{0xE041, 0xAAE2},{0xE042, 0xAAE3},{0xE043, 0xAAE4},{0xE044, 0xAAE5},{0xE045, 0xAAE6},{0xE046, 0xAAE7}, - {0xE047, 0xAAE8},{0xE048, 0xAAE9},{0xE049, 0xAAEA},{0xE04A, 0xAAEB},{0xE04B, 0xAAEC},{0xE04C, 0xAAED},{0xE04D, 0xAAEE},{0xE04E, 0xAAEF}, - {0xE04F, 0xAAF0},{0xE050, 0xAAF1},{0xE051, 0xAAF2},{0xE052, 0xAAF3},{0xE053, 0xAAF4},{0xE054, 0xAAF5},{0xE055, 0xAAF6},{0xE056, 0xAAF7}, - {0xE057, 0xAAF8},{0xE058, 0xAAF9},{0xE059, 0xAAFA},{0xE05A, 0xAAFB},{0xE05B, 0xAAFC},{0xE05C, 0xAAFD},{0xE05D, 0xAAFE},{0xE05E, 0xABA1}, - {0xE05F, 0xABA2},{0xE060, 0xABA3},{0xE061, 0xABA4},{0xE062, 0xABA5},{0xE063, 0xABA6},{0xE064, 0xABA7},{0xE065, 0xABA8},{0xE066, 0xABA9}, - {0xE067, 0xABAA},{0xE068, 0xABAB},{0xE069, 0xABAC},{0xE06A, 0xABAD},{0xE06B, 0xABAE},{0xE06C, 0xABAF},{0xE06D, 0xABB0},{0xE06E, 0xABB1}, - {0xE06F, 0xABB2},{0xE070, 0xABB3},{0xE071, 0xABB4},{0xE072, 0xABB5},{0xE073, 0xABB6},{0xE074, 0xABB7},{0xE075, 0xABB8},{0xE076, 0xABB9}, - {0xE077, 0xABBA},{0xE078, 0xABBB},{0xE079, 0xABBC},{0xE07A, 0xABBD},{0xE07B, 0xABBE},{0xE07C, 0xABBF},{0xE07D, 0xABC0},{0xE07E, 0xABC1}, - {0xE07F, 0xABC2},{0xE080, 0xABC3},{0xE081, 0xABC4},{0xE082, 0xABC5},{0xE083, 0xABC6},{0xE084, 0xABC7},{0xE085, 0xABC8},{0xE086, 0xABC9}, - {0xE087, 0xABCA},{0xE088, 0xABCB},{0xE089, 0xABCC},{0xE08A, 0xABCD},{0xE08B, 0xABCE},{0xE08C, 0xABCF},{0xE08D, 0xABD0},{0xE08E, 0xABD1}, - {0xE08F, 0xABD2},{0xE090, 0xABD3},{0xE091, 0xABD4},{0xE092, 0xABD5},{0xE093, 0xABD6},{0xE094, 0xABD7},{0xE095, 0xABD8},{0xE096, 0xABD9}, - {0xE097, 0xABDA},{0xE098, 0xABDB},{0xE099, 0xABDC},{0xE09A, 0xABDD},{0xE09B, 0xABDE},{0xE09C, 0xABDF},{0xE09D, 0xABE0},{0xE09E, 0xABE1}, - {0xE09F, 0xABE2},{0xE0A0, 0xABE3},{0xE0A1, 0xABE4},{0xE0A2, 0xABE5},{0xE0A3, 0xABE6},{0xE0A4, 0xABE7},{0xE0A5, 0xABE8},{0xE0A6, 0xABE9}, - {0xE0A7, 0xABEA},{0xE0A8, 0xABEB},{0xE0A9, 0xABEC},{0xE0AA, 0xABED},{0xE0AB, 0xABEE},{0xE0AC, 0xABEF},{0xE0AD, 0xABF0},{0xE0AE, 0xABF1}, - {0xE0AF, 0xABF2},{0xE0B0, 0xABF3},{0xE0B1, 0xABF4},{0xE0B2, 0xABF5},{0xE0B3, 0xABF6},{0xE0B4, 0xABF7},{0xE0B5, 0xABF8},{0xE0B6, 0xABF9}, - {0xE0B7, 0xABFA},{0xE0B8, 0xABFB},{0xE0B9, 0xABFC},{0xE0BA, 0xABFD},{0xE0BB, 0xABFE},{0xE0BC, 0xACA1},{0xE0BD, 0xACA2},{0xE0BE, 0xACA3}, - {0xE0BF, 0xACA4},{0xE0C0, 0xACA5},{0xE0C1, 0xACA6},{0xE0C2, 0xACA7},{0xE0C3, 0xACA8},{0xE0C4, 0xACA9},{0xE0C5, 0xACAA},{0xE0C6, 0xACAB}, - {0xE0C7, 0xACAC},{0xE0C8, 0xACAD},{0xE0C9, 0xACAE},{0xE0CA, 0xACAF},{0xE0CB, 0xACB0},{0xE0CC, 0xACB1},{0xE0CD, 0xACB2},{0xE0CE, 0xACB3}, - {0xE0CF, 0xACB4},{0xE0D0, 0xACB5},{0xE0D1, 0xACB6},{0xE0D2, 0xACB7},{0xE0D3, 0xACB8},{0xE0D4, 0xACB9},{0xE0D5, 0xACBA},{0xE0D6, 0xACBB}, - {0xE0D7, 0xACBC},{0xE0D8, 0xACBD},{0xE0D9, 0xACBE},{0xE0DA, 0xACBF},{0xE0DB, 0xACC0},{0xE0DC, 0xACC1},{0xE0DD, 0xACC2},{0xE0DE, 0xACC3}, - {0xE0DF, 0xACC4},{0xE0E0, 0xACC5},{0xE0E1, 0xACC6},{0xE0E2, 0xACC7},{0xE0E3, 0xACC8},{0xE0E4, 0xACC9},{0xE0E5, 0xACCA},{0xE0E6, 0xACCB}, - {0xE0E7, 0xACCC},{0xE0E8, 0xACCD},{0xE0E9, 0xACCE},{0xE0EA, 0xACCF},{0xE0EB, 0xACD0},{0xE0EC, 0xACD1},{0xE0ED, 0xACD2},{0xE0EE, 0xACD3}, - {0xE0EF, 0xACD4},{0xE0F0, 0xACD5},{0xE0F1, 0xACD6},{0xE0F2, 0xACD7},{0xE0F3, 0xACD8},{0xE0F4, 0xACD9},{0xE0F5, 0xACDA},{0xE0F6, 0xACDB}, - {0xE0F7, 0xACDC},{0xE0F8, 0xACDD},{0xE0F9, 0xACDE},{0xE0FA, 0xACDF},{0xE0FB, 0xACE0},{0xE0FC, 0xACE1},{0xE0FD, 0xACE2},{0xE0FE, 0xACE3}, - {0xE0FF, 0xACE4},{0xE100, 0xACE5},{0xE101, 0xACE6},{0xE102, 0xACE7},{0xE103, 0xACE8},{0xE104, 0xACE9},{0xE105, 0xACEA},{0xE106, 0xACEB}, - {0xE107, 0xACEC},{0xE108, 0xACED},{0xE109, 0xACEE},{0xE10A, 0xACEF},{0xE10B, 0xACF0},{0xE10C, 0xACF1},{0xE10D, 0xACF2},{0xE10E, 0xACF3}, - {0xE10F, 0xACF4},{0xE110, 0xACF5},{0xE111, 0xACF6},{0xE112, 0xACF7},{0xE113, 0xACF8},{0xE114, 0xACF9},{0xE115, 0xACFA},{0xE116, 0xACFB}, - {0xE117, 0xACFC},{0xE118, 0xACFD},{0xE119, 0xACFE},{0xE11A, 0xADA1},{0xE11B, 0xADA2},{0xE11C, 0xADA3},{0xE11D, 0xADA4},{0xE11E, 0xADA5}, - {0xE11F, 0xADA6},{0xE120, 0xADA7},{0xE121, 0xADA8},{0xE122, 0xADA9},{0xE123, 0xADAA},{0xE124, 0xADAB},{0xE125, 0xADAC},{0xE126, 0xADAD}, - {0xE127, 0xADAE},{0xE128, 0xADAF},{0xE129, 0xADB0},{0xE12A, 0xADB1},{0xE12B, 0xADB2},{0xE12C, 0xADB3},{0xE12D, 0xADB4},{0xE12E, 0xADB5}, - {0xE12F, 0xADB6},{0xE130, 0xADB7},{0xE131, 0xADB8},{0xE132, 0xADB9},{0xE133, 0xADBA},{0xE134, 0xADBB},{0xE135, 0xADBC},{0xE136, 0xADBD}, - {0xE137, 0xADBE},{0xE138, 0xADBF},{0xE139, 0xADC0},{0xE13A, 0xADC1},{0xE13B, 0xADC2},{0xE13C, 0xADC3},{0xE13D, 0xADC4},{0xE13E, 0xADC5}, - {0xE13F, 0xADC6},{0xE140, 0xADC7},{0xE141, 0xADC8},{0xE142, 0xADC9},{0xE143, 0xADCA},{0xE144, 0xADCB},{0xE145, 0xADCC},{0xE146, 0xADCD}, - {0xE147, 0xADCE},{0xE148, 0xADCF},{0xE149, 0xADD0},{0xE14A, 0xADD1},{0xE14B, 0xADD2},{0xE14C, 0xADD3},{0xE14D, 0xADD4},{0xE14E, 0xADD5}, - {0xE14F, 0xADD6},{0xE150, 0xADD7},{0xE151, 0xADD8},{0xE152, 0xADD9},{0xE153, 0xADDA},{0xE154, 0xADDB},{0xE155, 0xADDC},{0xE156, 0xADDD}, - {0xE157, 0xADDE},{0xE158, 0xADDF},{0xE159, 0xADE0},{0xE15A, 0xADE1},{0xE15B, 0xADE2},{0xE15C, 0xADE3},{0xE15D, 0xADE4},{0xE15E, 0xADE5}, - {0xE15F, 0xADE6},{0xE160, 0xADE7},{0xE161, 0xADE8},{0xE162, 0xADE9},{0xE163, 0xADEA},{0xE164, 0xADEB},{0xE165, 0xADEC},{0xE166, 0xADED}, - {0xE167, 0xADEE},{0xE168, 0xADEF},{0xE169, 0xADF0},{0xE16A, 0xADF1},{0xE16B, 0xADF2},{0xE16C, 0xADF3},{0xE16D, 0xADF4},{0xE16E, 0xADF5}, - {0xE16F, 0xADF6},{0xE170, 0xADF7},{0xE171, 0xADF8},{0xE172, 0xADF9},{0xE173, 0xADFA},{0xE174, 0xADFB},{0xE175, 0xADFC},{0xE176, 0xADFD}, - {0xE177, 0xADFE},{0xE178, 0xAEA1},{0xE179, 0xAEA2},{0xE17A, 0xAEA3},{0xE17B, 0xAEA4},{0xE17C, 0xAEA5},{0xE17D, 0xAEA6},{0xE17E, 0xAEA7}, - {0xE17F, 0xAEA8},{0xE180, 0xAEA9},{0xE181, 0xAEAA},{0xE182, 0xAEAB},{0xE183, 0xAEAC},{0xE184, 0xAEAD},{0xE185, 0xAEAE},{0xE186, 0xAEAF}, - {0xE187, 0xAEB0},{0xE188, 0xAEB1},{0xE189, 0xAEB2},{0xE18A, 0xAEB3},{0xE18B, 0xAEB4},{0xE18C, 0xAEB5},{0xE18D, 0xAEB6},{0xE18E, 0xAEB7}, - {0xE18F, 0xAEB8},{0xE190, 0xAEB9},{0xE191, 0xAEBA},{0xE192, 0xAEBB},{0xE193, 0xAEBC},{0xE194, 0xAEBD},{0xE195, 0xAEBE},{0xE196, 0xAEBF}, - {0xE197, 0xAEC0},{0xE198, 0xAEC1},{0xE199, 0xAEC2},{0xE19A, 0xAEC3},{0xE19B, 0xAEC4},{0xE19C, 0xAEC5},{0xE19D, 0xAEC6},{0xE19E, 0xAEC7}, - {0xE19F, 0xAEC8},{0xE1A0, 0xAEC9},{0xE1A1, 0xAECA},{0xE1A2, 0xAECB},{0xE1A3, 0xAECC},{0xE1A4, 0xAECD},{0xE1A5, 0xAECE},{0xE1A6, 0xAECF}, - {0xE1A7, 0xAED0},{0xE1A8, 0xAED1},{0xE1A9, 0xAED2},{0xE1AA, 0xAED3},{0xE1AB, 0xAED4},{0xE1AC, 0xAED5},{0xE1AD, 0xAED6},{0xE1AE, 0xAED7}, - {0xE1AF, 0xAED8},{0xE1B0, 0xAED9},{0xE1B1, 0xAEDA},{0xE1B2, 0xAEDB},{0xE1B3, 0xAEDC},{0xE1B4, 0xAEDD},{0xE1B5, 0xAEDE},{0xE1B6, 0xAEDF}, - {0xE1B7, 0xAEE0},{0xE1B8, 0xAEE1},{0xE1B9, 0xAEE2},{0xE1BA, 0xAEE3},{0xE1BB, 0xAEE4},{0xE1BC, 0xAEE5},{0xE1BD, 0xAEE6},{0xE1BE, 0xAEE7}, - {0xE1BF, 0xAEE8},{0xE1C0, 0xAEE9},{0xE1C1, 0xAEEA},{0xE1C2, 0xAEEB},{0xE1C3, 0xAEEC},{0xE1C4, 0xAEED},{0xE1C5, 0xAEEE},{0xE1C6, 0xAEEF}, - {0xE1C7, 0xAEF0},{0xE1C8, 0xAEF1},{0xE1C9, 0xAEF2},{0xE1CA, 0xAEF3},{0xE1CB, 0xAEF4},{0xE1CC, 0xAEF5},{0xE1CD, 0xAEF6},{0xE1CE, 0xAEF7}, - {0xE1CF, 0xAEF8},{0xE1D0, 0xAEF9},{0xE1D1, 0xAEFA},{0xE1D2, 0xAEFB},{0xE1D3, 0xAEFC},{0xE1D4, 0xAEFD},{0xE1D5, 0xAEFE},{0xE1D6, 0xAFA1}, - {0xE1D7, 0xAFA2},{0xE1D8, 0xAFA3},{0xE1D9, 0xAFA4},{0xE1DA, 0xAFA5},{0xE1DB, 0xAFA6},{0xE1DC, 0xAFA7},{0xE1DD, 0xAFA8},{0xE1DE, 0xAFA9}, - {0xE1DF, 0xAFAA},{0xE1E0, 0xAFAB},{0xE1E1, 0xAFAC},{0xE1E2, 0xAFAD},{0xE1E3, 0xAFAE},{0xE1E4, 0xAFAF},{0xE1E5, 0xAFB0},{0xE1E6, 0xAFB1}, - {0xE1E7, 0xAFB2},{0xE1E8, 0xAFB3},{0xE1E9, 0xAFB4},{0xE1EA, 0xAFB5},{0xE1EB, 0xAFB6},{0xE1EC, 0xAFB7},{0xE1ED, 0xAFB8},{0xE1EE, 0xAFB9}, - {0xE1EF, 0xAFBA},{0xE1F0, 0xAFBB},{0xE1F1, 0xAFBC},{0xE1F2, 0xAFBD},{0xE1F3, 0xAFBE},{0xE1F4, 0xAFBF},{0xE1F5, 0xAFC0},{0xE1F6, 0xAFC1}, - {0xE1F7, 0xAFC2},{0xE1F8, 0xAFC3},{0xE1F9, 0xAFC4},{0xE1FA, 0xAFC5},{0xE1FB, 0xAFC6},{0xE1FC, 0xAFC7},{0xE1FD, 0xAFC8},{0xE1FE, 0xAFC9}, - {0xE1FF, 0xAFCA},{0xE200, 0xAFCB},{0xE201, 0xAFCC},{0xE202, 0xAFCD},{0xE203, 0xAFCE},{0xE204, 0xAFCF},{0xE205, 0xAFD0},{0xE206, 0xAFD1}, - {0xE207, 0xAFD2},{0xE208, 0xAFD3},{0xE209, 0xAFD4},{0xE20A, 0xAFD5},{0xE20B, 0xAFD6},{0xE20C, 0xAFD7},{0xE20D, 0xAFD8},{0xE20E, 0xAFD9}, - {0xE20F, 0xAFDA},{0xE210, 0xAFDB},{0xE211, 0xAFDC},{0xE212, 0xAFDD},{0xE213, 0xAFDE},{0xE214, 0xAFDF},{0xE215, 0xAFE0},{0xE216, 0xAFE1}, - {0xE217, 0xAFE2},{0xE218, 0xAFE3},{0xE219, 0xAFE4},{0xE21A, 0xAFE5},{0xE21B, 0xAFE6},{0xE21C, 0xAFE7},{0xE21D, 0xAFE8},{0xE21E, 0xAFE9}, - {0xE21F, 0xAFEA},{0xE220, 0xAFEB},{0xE221, 0xAFEC},{0xE222, 0xAFED},{0xE223, 0xAFEE},{0xE224, 0xAFEF},{0xE225, 0xAFF0},{0xE226, 0xAFF1}, - {0xE227, 0xAFF2},{0xE228, 0xAFF3},{0xE229, 0xAFF4},{0xE22A, 0xAFF5},{0xE22B, 0xAFF6},{0xE22C, 0xAFF7},{0xE22D, 0xAFF8},{0xE22E, 0xAFF9}, - {0xE22F, 0xAFFA},{0xE230, 0xAFFB},{0xE231, 0xAFFC},{0xE232, 0xAFFD},{0xE233, 0xAFFE},{0xE234, 0xF8A1},{0xE235, 0xF8A2},{0xE236, 0xF8A3}, - {0xE237, 0xF8A4},{0xE238, 0xF8A5},{0xE239, 0xF8A6},{0xE23A, 0xF8A7},{0xE23B, 0xF8A8},{0xE23C, 0xF8A9},{0xE23D, 0xF8AA},{0xE23E, 0xF8AB}, - {0xE23F, 0xF8AC},{0xE240, 0xF8AD},{0xE241, 0xF8AE},{0xE242, 0xF8AF},{0xE243, 0xF8B0},{0xE244, 0xF8B1},{0xE245, 0xF8B2},{0xE246, 0xF8B3}, - {0xE247, 0xF8B4},{0xE248, 0xF8B5},{0xE249, 0xF8B6},{0xE24A, 0xF8B7},{0xE24B, 0xF8B8},{0xE24C, 0xF8B9},{0xE24D, 0xF8BA},{0xE24E, 0xF8BB}, - {0xE24F, 0xF8BC},{0xE250, 0xF8BD},{0xE251, 0xF8BE},{0xE252, 0xF8BF},{0xE253, 0xF8C0},{0xE254, 0xF8C1},{0xE255, 0xF8C2},{0xE256, 0xF8C3}, - {0xE257, 0xF8C4},{0xE258, 0xF8C5},{0xE259, 0xF8C6},{0xE25A, 0xF8C7},{0xE25B, 0xF8C8},{0xE25C, 0xF8C9},{0xE25D, 0xF8CA},{0xE25E, 0xF8CB}, - {0xE25F, 0xF8CC},{0xE260, 0xF8CD},{0xE261, 0xF8CE},{0xE262, 0xF8CF},{0xE263, 0xF8D0},{0xE264, 0xF8D1},{0xE265, 0xF8D2},{0xE266, 0xF8D3}, - {0xE267, 0xF8D4},{0xE268, 0xF8D5},{0xE269, 0xF8D6},{0xE26A, 0xF8D7},{0xE26B, 0xF8D8},{0xE26C, 0xF8D9},{0xE26D, 0xF8DA},{0xE26E, 0xF8DB}, - {0xE26F, 0xF8DC},{0xE270, 0xF8DD},{0xE271, 0xF8DE},{0xE272, 0xF8DF},{0xE273, 0xF8E0},{0xE274, 0xF8E1},{0xE275, 0xF8E2},{0xE276, 0xF8E3}, - {0xE277, 0xF8E4},{0xE278, 0xF8E5},{0xE279, 0xF8E6},{0xE27A, 0xF8E7},{0xE27B, 0xF8E8},{0xE27C, 0xF8E9},{0xE27D, 0xF8EA},{0xE27E, 0xF8EB}, - {0xE27F, 0xF8EC},{0xE280, 0xF8ED},{0xE281, 0xF8EE},{0xE282, 0xF8EF},{0xE283, 0xF8F0},{0xE284, 0xF8F1},{0xE285, 0xF8F2},{0xE286, 0xF8F3}, - {0xE287, 0xF8F4},{0xE288, 0xF8F5},{0xE289, 0xF8F6},{0xE28A, 0xF8F7},{0xE28B, 0xF8F8},{0xE28C, 0xF8F9},{0xE28D, 0xF8FA},{0xE28E, 0xF8FB}, - {0xE28F, 0xF8FC},{0xE290, 0xF8FD},{0xE291, 0xF8FE},{0xE292, 0xF9A1},{0xE293, 0xF9A2},{0xE294, 0xF9A3},{0xE295, 0xF9A4},{0xE296, 0xF9A5}, - {0xE297, 0xF9A6},{0xE298, 0xF9A7},{0xE299, 0xF9A8},{0xE29A, 0xF9A9},{0xE29B, 0xF9AA},{0xE29C, 0xF9AB},{0xE29D, 0xF9AC},{0xE29E, 0xF9AD}, - {0xE29F, 0xF9AE},{0xE2A0, 0xF9AF},{0xE2A1, 0xF9B0},{0xE2A2, 0xF9B1},{0xE2A3, 0xF9B2},{0xE2A4, 0xF9B3},{0xE2A5, 0xF9B4},{0xE2A6, 0xF9B5}, - {0xE2A7, 0xF9B6},{0xE2A8, 0xF9B7},{0xE2A9, 0xF9B8},{0xE2AA, 0xF9B9},{0xE2AB, 0xF9BA},{0xE2AC, 0xF9BB},{0xE2AD, 0xF9BC},{0xE2AE, 0xF9BD}, - {0xE2AF, 0xF9BE},{0xE2B0, 0xF9BF},{0xE2B1, 0xF9C0},{0xE2B2, 0xF9C1},{0xE2B3, 0xF9C2},{0xE2B4, 0xF9C3},{0xE2B5, 0xF9C4},{0xE2B6, 0xF9C5}, - {0xE2B7, 0xF9C6},{0xE2B8, 0xF9C7},{0xE2B9, 0xF9C8},{0xE2BA, 0xF9C9},{0xE2BB, 0xF9CA},{0xE2BC, 0xF9CB},{0xE2BD, 0xF9CC},{0xE2BE, 0xF9CD}, - {0xE2BF, 0xF9CE},{0xE2C0, 0xF9CF},{0xE2C1, 0xF9D0},{0xE2C2, 0xF9D1},{0xE2C3, 0xF9D2},{0xE2C4, 0xF9D3},{0xE2C5, 0xF9D4},{0xE2C6, 0xF9D5}, - {0xE2C7, 0xF9D6},{0xE2C8, 0xF9D7},{0xE2C9, 0xF9D8},{0xE2CA, 0xF9D9},{0xE2CB, 0xF9DA},{0xE2CC, 0xF9DB},{0xE2CD, 0xF9DC},{0xE2CE, 0xF9DD}, - {0xE2CF, 0xF9DE},{0xE2D0, 0xF9DF},{0xE2D1, 0xF9E0},{0xE2D2, 0xF9E1},{0xE2D3, 0xF9E2},{0xE2D4, 0xF9E3},{0xE2D5, 0xF9E4},{0xE2D6, 0xF9E5}, - {0xE2D7, 0xF9E6},{0xE2D8, 0xF9E7},{0xE2D9, 0xF9E8},{0xE2DA, 0xF9E9},{0xE2DB, 0xF9EA},{0xE2DC, 0xF9EB},{0xE2DD, 0xF9EC},{0xE2DE, 0xF9ED}, - {0xE2DF, 0xF9EE},{0xE2E0, 0xF9EF},{0xE2E1, 0xF9F0},{0xE2E2, 0xF9F1},{0xE2E3, 0xF9F2},{0xE2E4, 0xF9F3},{0xE2E5, 0xF9F4},{0xE2E6, 0xF9F5}, - {0xE2E7, 0xF9F6},{0xE2E8, 0xF9F7},{0xE2E9, 0xF9F8},{0xE2EA, 0xF9F9},{0xE2EB, 0xF9FA},{0xE2EC, 0xF9FB},{0xE2ED, 0xF9FC},{0xE2EE, 0xF9FD}, - {0xE2EF, 0xF9FE},{0xE2F0, 0xFAA1},{0xE2F1, 0xFAA2},{0xE2F2, 0xFAA3},{0xE2F3, 0xFAA4},{0xE2F4, 0xFAA5},{0xE2F5, 0xFAA6},{0xE2F6, 0xFAA7}, - {0xE2F7, 0xFAA8},{0xE2F8, 0xFAA9},{0xE2F9, 0xFAAA},{0xE2FA, 0xFAAB},{0xE2FB, 0xFAAC},{0xE2FC, 0xFAAD},{0xE2FD, 0xFAAE},{0xE2FE, 0xFAAF}, - {0xE2FF, 0xFAB0},{0xE300, 0xFAB1},{0xE301, 0xFAB2},{0xE302, 0xFAB3},{0xE303, 0xFAB4},{0xE304, 0xFAB5},{0xE305, 0xFAB6},{0xE306, 0xFAB7}, - {0xE307, 0xFAB8},{0xE308, 0xFAB9},{0xE309, 0xFABA},{0xE30A, 0xFABB},{0xE30B, 0xFABC},{0xE30C, 0xFABD},{0xE30D, 0xFABE},{0xE30E, 0xFABF}, - {0xE30F, 0xFAC0},{0xE310, 0xFAC1},{0xE311, 0xFAC2},{0xE312, 0xFAC3},{0xE313, 0xFAC4},{0xE314, 0xFAC5},{0xE315, 0xFAC6},{0xE316, 0xFAC7}, - {0xE317, 0xFAC8},{0xE318, 0xFAC9},{0xE319, 0xFACA},{0xE31A, 0xFACB},{0xE31B, 0xFACC},{0xE31C, 0xFACD},{0xE31D, 0xFACE},{0xE31E, 0xFACF}, - {0xE31F, 0xFAD0},{0xE320, 0xFAD1},{0xE321, 0xFAD2},{0xE322, 0xFAD3},{0xE323, 0xFAD4},{0xE324, 0xFAD5},{0xE325, 0xFAD6},{0xE326, 0xFAD7}, - {0xE327, 0xFAD8},{0xE328, 0xFAD9},{0xE329, 0xFADA},{0xE32A, 0xFADB},{0xE32B, 0xFADC},{0xE32C, 0xFADD},{0xE32D, 0xFADE},{0xE32E, 0xFADF}, - {0xE32F, 0xFAE0},{0xE330, 0xFAE1},{0xE331, 0xFAE2},{0xE332, 0xFAE3},{0xE333, 0xFAE4},{0xE334, 0xFAE5},{0xE335, 0xFAE6},{0xE336, 0xFAE7}, - {0xE337, 0xFAE8},{0xE338, 0xFAE9},{0xE339, 0xFAEA},{0xE33A, 0xFAEB},{0xE33B, 0xFAEC},{0xE33C, 0xFAED},{0xE33D, 0xFAEE},{0xE33E, 0xFAEF}, - {0xE33F, 0xFAF0},{0xE340, 0xFAF1},{0xE341, 0xFAF2},{0xE342, 0xFAF3},{0xE343, 0xFAF4},{0xE344, 0xFAF5},{0xE345, 0xFAF6},{0xE346, 0xFAF7}, - {0xE347, 0xFAF8},{0xE348, 0xFAF9},{0xE349, 0xFAFA},{0xE34A, 0xFAFB},{0xE34B, 0xFAFC},{0xE34C, 0xFAFD},{0xE34D, 0xFAFE},{0xE34E, 0xFBA1}, - {0xE34F, 0xFBA2},{0xE350, 0xFBA3},{0xE351, 0xFBA4},{0xE352, 0xFBA5},{0xE353, 0xFBA6},{0xE354, 0xFBA7},{0xE355, 0xFBA8},{0xE356, 0xFBA9}, - {0xE357, 0xFBAA},{0xE358, 0xFBAB},{0xE359, 0xFBAC},{0xE35A, 0xFBAD},{0xE35B, 0xFBAE},{0xE35C, 0xFBAF},{0xE35D, 0xFBB0},{0xE35E, 0xFBB1}, - {0xE35F, 0xFBB2},{0xE360, 0xFBB3},{0xE361, 0xFBB4},{0xE362, 0xFBB5},{0xE363, 0xFBB6},{0xE364, 0xFBB7},{0xE365, 0xFBB8},{0xE366, 0xFBB9}, - {0xE367, 0xFBBA},{0xE368, 0xFBBB},{0xE369, 0xFBBC},{0xE36A, 0xFBBD},{0xE36B, 0xFBBE},{0xE36C, 0xFBBF},{0xE36D, 0xFBC0},{0xE36E, 0xFBC1}, - {0xE36F, 0xFBC2},{0xE370, 0xFBC3},{0xE371, 0xFBC4},{0xE372, 0xFBC5},{0xE373, 0xFBC6},{0xE374, 0xFBC7},{0xE375, 0xFBC8},{0xE376, 0xFBC9}, - {0xE377, 0xFBCA},{0xE378, 0xFBCB},{0xE379, 0xFBCC},{0xE37A, 0xFBCD},{0xE37B, 0xFBCE},{0xE37C, 0xFBCF},{0xE37D, 0xFBD0},{0xE37E, 0xFBD1}, - {0xE37F, 0xFBD2},{0xE380, 0xFBD3},{0xE381, 0xFBD4},{0xE382, 0xFBD5},{0xE383, 0xFBD6},{0xE384, 0xFBD7},{0xE385, 0xFBD8},{0xE386, 0xFBD9}, - {0xE387, 0xFBDA},{0xE388, 0xFBDB},{0xE389, 0xFBDC},{0xE38A, 0xFBDD},{0xE38B, 0xFBDE},{0xE38C, 0xFBDF},{0xE38D, 0xFBE0},{0xE38E, 0xFBE1}, - {0xE38F, 0xFBE2},{0xE390, 0xFBE3},{0xE391, 0xFBE4},{0xE392, 0xFBE5},{0xE393, 0xFBE6},{0xE394, 0xFBE7},{0xE395, 0xFBE8},{0xE396, 0xFBE9}, - {0xE397, 0xFBEA},{0xE398, 0xFBEB},{0xE399, 0xFBEC},{0xE39A, 0xFBED},{0xE39B, 0xFBEE},{0xE39C, 0xFBEF},{0xE39D, 0xFBF0},{0xE39E, 0xFBF1}, - {0xE39F, 0xFBF2},{0xE3A0, 0xFBF3},{0xE3A1, 0xFBF4},{0xE3A2, 0xFBF5},{0xE3A3, 0xFBF6},{0xE3A4, 0xFBF7},{0xE3A5, 0xFBF8},{0xE3A6, 0xFBF9}, - {0xE3A7, 0xFBFA},{0xE3A8, 0xFBFB},{0xE3A9, 0xFBFC},{0xE3AA, 0xFBFD},{0xE3AB, 0xFBFE},{0xE3AC, 0xFCA1},{0xE3AD, 0xFCA2},{0xE3AE, 0xFCA3}, - {0xE3AF, 0xFCA4},{0xE3B0, 0xFCA5},{0xE3B1, 0xFCA6},{0xE3B2, 0xFCA7},{0xE3B3, 0xFCA8},{0xE3B4, 0xFCA9},{0xE3B5, 0xFCAA},{0xE3B6, 0xFCAB}, - {0xE3B7, 0xFCAC},{0xE3B8, 0xFCAD},{0xE3B9, 0xFCAE},{0xE3BA, 0xFCAF},{0xE3BB, 0xFCB0},{0xE3BC, 0xFCB1},{0xE3BD, 0xFCB2},{0xE3BE, 0xFCB3}, - {0xE3BF, 0xFCB4},{0xE3C0, 0xFCB5},{0xE3C1, 0xFCB6},{0xE3C2, 0xFCB7},{0xE3C3, 0xFCB8},{0xE3C4, 0xFCB9},{0xE3C5, 0xFCBA},{0xE3C6, 0xFCBB}, - {0xE3C7, 0xFCBC},{0xE3C8, 0xFCBD},{0xE3C9, 0xFCBE},{0xE3CA, 0xFCBF},{0xE3CB, 0xFCC0},{0xE3CC, 0xFCC1},{0xE3CD, 0xFCC2},{0xE3CE, 0xFCC3}, - {0xE3CF, 0xFCC4},{0xE3D0, 0xFCC5},{0xE3D1, 0xFCC6},{0xE3D2, 0xFCC7},{0xE3D3, 0xFCC8},{0xE3D4, 0xFCC9},{0xE3D5, 0xFCCA},{0xE3D6, 0xFCCB}, - {0xE3D7, 0xFCCC},{0xE3D8, 0xFCCD},{0xE3D9, 0xFCCE},{0xE3DA, 0xFCCF},{0xE3DB, 0xFCD0},{0xE3DC, 0xFCD1},{0xE3DD, 0xFCD2},{0xE3DE, 0xFCD3}, - {0xE3DF, 0xFCD4},{0xE3E0, 0xFCD5},{0xE3E1, 0xFCD6},{0xE3E2, 0xFCD7},{0xE3E3, 0xFCD8},{0xE3E4, 0xFCD9},{0xE3E5, 0xFCDA},{0xE3E6, 0xFCDB}, - {0xE3E7, 0xFCDC},{0xE3E8, 0xFCDD},{0xE3E9, 0xFCDE},{0xE3EA, 0xFCDF},{0xE3EB, 0xFCE0},{0xE3EC, 0xFCE1},{0xE3ED, 0xFCE2},{0xE3EE, 0xFCE3}, - {0xE3EF, 0xFCE4},{0xE3F0, 0xFCE5},{0xE3F1, 0xFCE6},{0xE3F2, 0xFCE7},{0xE3F3, 0xFCE8},{0xE3F4, 0xFCE9},{0xE3F5, 0xFCEA},{0xE3F6, 0xFCEB}, - {0xE3F7, 0xFCEC},{0xE3F8, 0xFCED},{0xE3F9, 0xFCEE},{0xE3FA, 0xFCEF},{0xE3FB, 0xFCF0},{0xE3FC, 0xFCF1},{0xE3FD, 0xFCF2},{0xE3FE, 0xFCF3}, - {0xE3FF, 0xFCF4},{0xE400, 0xFCF5},{0xE401, 0xFCF6},{0xE402, 0xFCF7},{0xE403, 0xFCF8},{0xE404, 0xFCF9},{0xE405, 0xFCFA},{0xE406, 0xFCFB}, - {0xE407, 0xFCFC},{0xE408, 0xFCFD},{0xE409, 0xFCFE},{0xE40A, 0xFDA1},{0xE40B, 0xFDA2},{0xE40C, 0xFDA3},{0xE40D, 0xFDA4},{0xE40E, 0xFDA5}, - {0xE40F, 0xFDA6},{0xE410, 0xFDA7},{0xE411, 0xFDA8},{0xE412, 0xFDA9},{0xE413, 0xFDAA},{0xE414, 0xFDAB},{0xE415, 0xFDAC},{0xE416, 0xFDAD}, - {0xE417, 0xFDAE},{0xE418, 0xFDAF},{0xE419, 0xFDB0},{0xE41A, 0xFDB1},{0xE41B, 0xFDB2},{0xE41C, 0xFDB3},{0xE41D, 0xFDB4},{0xE41E, 0xFDB5}, - {0xE41F, 0xFDB6},{0xE420, 0xFDB7},{0xE421, 0xFDB8},{0xE422, 0xFDB9},{0xE423, 0xFDBA},{0xE424, 0xFDBB},{0xE425, 0xFDBC},{0xE426, 0xFDBD}, - {0xE427, 0xFDBE},{0xE428, 0xFDBF},{0xE429, 0xFDC0},{0xE42A, 0xFDC1},{0xE42B, 0xFDC2},{0xE42C, 0xFDC3},{0xE42D, 0xFDC4},{0xE42E, 0xFDC5}, - {0xE42F, 0xFDC6},{0xE430, 0xFDC7},{0xE431, 0xFDC8},{0xE432, 0xFDC9},{0xE433, 0xFDCA},{0xE434, 0xFDCB},{0xE435, 0xFDCC},{0xE436, 0xFDCD}, - {0xE437, 0xFDCE},{0xE438, 0xFDCF},{0xE439, 0xFDD0},{0xE43A, 0xFDD1},{0xE43B, 0xFDD2},{0xE43C, 0xFDD3},{0xE43D, 0xFDD4},{0xE43E, 0xFDD5}, - {0xE43F, 0xFDD6},{0xE440, 0xFDD7},{0xE441, 0xFDD8},{0xE442, 0xFDD9},{0xE443, 0xFDDA},{0xE444, 0xFDDB},{0xE445, 0xFDDC},{0xE446, 0xFDDD}, - {0xE447, 0xFDDE},{0xE448, 0xFDDF},{0xE449, 0xFDE0},{0xE44A, 0xFDE1},{0xE44B, 0xFDE2},{0xE44C, 0xFDE3},{0xE44D, 0xFDE4},{0xE44E, 0xFDE5}, - {0xE44F, 0xFDE6},{0xE450, 0xFDE7},{0xE451, 0xFDE8},{0xE452, 0xFDE9},{0xE453, 0xFDEA},{0xE454, 0xFDEB},{0xE455, 0xFDEC},{0xE456, 0xFDED}, - {0xE457, 0xFDEE},{0xE458, 0xFDEF},{0xE459, 0xFDF0},{0xE45A, 0xFDF1},{0xE45B, 0xFDF2},{0xE45C, 0xFDF3},{0xE45D, 0xFDF4},{0xE45E, 0xFDF5}, - {0xE45F, 0xFDF6},{0xE460, 0xFDF7},{0xE461, 0xFDF8},{0xE462, 0xFDF9},{0xE463, 0xFDFA},{0xE464, 0xFDFB},{0xE465, 0xFDFC},{0xE466, 0xFDFD}, - {0xE467, 0xFDFE},{0xE468, 0xFEA1},{0xE469, 0xFEA2},{0xE46A, 0xFEA3},{0xE46B, 0xFEA4},{0xE46C, 0xFEA5},{0xE46D, 0xFEA6},{0xE46E, 0xFEA7}, - {0xE46F, 0xFEA8},{0xE470, 0xFEA9},{0xE471, 0xFEAA},{0xE472, 0xFEAB},{0xE473, 0xFEAC},{0xE474, 0xFEAD},{0xE475, 0xFEAE},{0xE476, 0xFEAF}, - {0xE477, 0xFEB0},{0xE478, 0xFEB1},{0xE479, 0xFEB2},{0xE47A, 0xFEB3},{0xE47B, 0xFEB4},{0xE47C, 0xFEB5},{0xE47D, 0xFEB6},{0xE47E, 0xFEB7}, - {0xE47F, 0xFEB8},{0xE480, 0xFEB9},{0xE481, 0xFEBA},{0xE482, 0xFEBB},{0xE483, 0xFEBC},{0xE484, 0xFEBD},{0xE485, 0xFEBE},{0xE486, 0xFEBF}, - {0xE487, 0xFEC0},{0xE488, 0xFEC1},{0xE489, 0xFEC2},{0xE48A, 0xFEC3},{0xE48B, 0xFEC4},{0xE48C, 0xFEC5},{0xE48D, 0xFEC6},{0xE48E, 0xFEC7}, - {0xE48F, 0xFEC8},{0xE490, 0xFEC9},{0xE491, 0xFECA},{0xE492, 0xFECB},{0xE493, 0xFECC},{0xE494, 0xFECD},{0xE495, 0xFECE},{0xE496, 0xFECF}, - {0xE497, 0xFED0},{0xE498, 0xFED1},{0xE499, 0xFED2},{0xE49A, 0xFED3},{0xE49B, 0xFED4},{0xE49C, 0xFED5},{0xE49D, 0xFED6},{0xE49E, 0xFED7}, - {0xE49F, 0xFED8},{0xE4A0, 0xFED9},{0xE4A1, 0xFEDA},{0xE4A2, 0xFEDB},{0xE4A3, 0xFEDC},{0xE4A4, 0xFEDD},{0xE4A5, 0xFEDE},{0xE4A6, 0xFEDF}, - {0xE4A7, 0xFEE0},{0xE4A8, 0xFEE1},{0xE4A9, 0xFEE2},{0xE4AA, 0xFEE3},{0xE4AB, 0xFEE4},{0xE4AC, 0xFEE5},{0xE4AD, 0xFEE6},{0xE4AE, 0xFEE7}, - {0xE4AF, 0xFEE8},{0xE4B0, 0xFEE9},{0xE4B1, 0xFEEA},{0xE4B2, 0xFEEB},{0xE4B3, 0xFEEC},{0xE4B4, 0xFEED},{0xE4B5, 0xFEEE},{0xE4B6, 0xFEEF}, - {0xE4B7, 0xFEF0},{0xE4B8, 0xFEF1},{0xE4B9, 0xFEF2},{0xE4BA, 0xFEF3},{0xE4BB, 0xFEF4},{0xE4BC, 0xFEF5},{0xE4BD, 0xFEF6},{0xE4BE, 0xFEF7}, - {0xE4BF, 0xFEF8},{0xE4C0, 0xFEF9},{0xE4C1, 0xFEFA},{0xE4C2, 0xFEFB},{0xE4C3, 0xFEFC},{0xE4C4, 0xFEFD},{0xE4C5, 0xFEFE},{0xE4C6, 0xA140}, - {0xE4C7, 0xA141},{0xE4C8, 0xA142},{0xE4C9, 0xA143},{0xE4CA, 0xA144},{0xE4CB, 0xA145},{0xE4CC, 0xA146},{0xE4CD, 0xA147},{0xE4CE, 0xA148}, - {0xE4CF, 0xA149},{0xE4D0, 0xA14A},{0xE4D1, 0xA14B},{0xE4D2, 0xA14C},{0xE4D3, 0xA14D},{0xE4D4, 0xA14E},{0xE4D5, 0xA14F},{0xE4D6, 0xA150}, - {0xE4D7, 0xA151},{0xE4D8, 0xA152},{0xE4D9, 0xA153},{0xE4DA, 0xA154},{0xE4DB, 0xA155},{0xE4DC, 0xA156},{0xE4DD, 0xA157},{0xE4DE, 0xA158}, - {0xE4DF, 0xA159},{0xE4E0, 0xA15A},{0xE4E1, 0xA15B},{0xE4E2, 0xA15C},{0xE4E3, 0xA15D},{0xE4E4, 0xA15E},{0xE4E5, 0xA15F},{0xE4E6, 0xA160}, - {0xE4E7, 0xA161},{0xE4E8, 0xA162},{0xE4E9, 0xA163},{0xE4EA, 0xA164},{0xE4EB, 0xA165},{0xE4EC, 0xA166},{0xE4ED, 0xA167},{0xE4EE, 0xA168}, - {0xE4EF, 0xA169},{0xE4F0, 0xA16A},{0xE4F1, 0xA16B},{0xE4F2, 0xA16C},{0xE4F3, 0xA16D},{0xE4F4, 0xA16E},{0xE4F5, 0xA16F},{0xE4F6, 0xA170}, - {0xE4F7, 0xA171},{0xE4F8, 0xA172},{0xE4F9, 0xA173},{0xE4FA, 0xA174},{0xE4FB, 0xA175},{0xE4FC, 0xA176},{0xE4FD, 0xA177},{0xE4FE, 0xA178}, - {0xE4FF, 0xA179},{0xE500, 0xA17A},{0xE501, 0xA17B},{0xE502, 0xA17C},{0xE503, 0xA17D},{0xE504, 0xA17E},{0xE505, 0xA180},{0xE506, 0xA181}, - {0xE507, 0xA182},{0xE508, 0xA183},{0xE509, 0xA184},{0xE50A, 0xA185},{0xE50B, 0xA186},{0xE50C, 0xA187},{0xE50D, 0xA188},{0xE50E, 0xA189}, - {0xE50F, 0xA18A},{0xE510, 0xA18B},{0xE511, 0xA18C},{0xE512, 0xA18D},{0xE513, 0xA18E},{0xE514, 0xA18F},{0xE515, 0xA190},{0xE516, 0xA191}, - {0xE517, 0xA192},{0xE518, 0xA193},{0xE519, 0xA194},{0xE51A, 0xA195},{0xE51B, 0xA196},{0xE51C, 0xA197},{0xE51D, 0xA198},{0xE51E, 0xA199}, - {0xE51F, 0xA19A},{0xE520, 0xA19B},{0xE521, 0xA19C},{0xE522, 0xA19D},{0xE523, 0xA19E},{0xE524, 0xA19F},{0xE525, 0xA1A0},{0xE526, 0xA240}, - {0xE527, 0xA241},{0xE528, 0xA242},{0xE529, 0xA243},{0xE52A, 0xA244},{0xE52B, 0xA245},{0xE52C, 0xA246},{0xE52D, 0xA247},{0xE52E, 0xA248}, - {0xE52F, 0xA249},{0xE530, 0xA24A},{0xE531, 0xA24B},{0xE532, 0xA24C},{0xE533, 0xA24D},{0xE534, 0xA24E},{0xE535, 0xA24F},{0xE536, 0xA250}, - {0xE537, 0xA251},{0xE538, 0xA252},{0xE539, 0xA253},{0xE53A, 0xA254},{0xE53B, 0xA255},{0xE53C, 0xA256},{0xE53D, 0xA257},{0xE53E, 0xA258}, - {0xE53F, 0xA259},{0xE540, 0xA25A},{0xE541, 0xA25B},{0xE542, 0xA25C},{0xE543, 0xA25D},{0xE544, 0xA25E},{0xE545, 0xA25F},{0xE546, 0xA260}, - {0xE547, 0xA261},{0xE548, 0xA262},{0xE549, 0xA263},{0xE54A, 0xA264},{0xE54B, 0xA265},{0xE54C, 0xA266},{0xE54D, 0xA267},{0xE54E, 0xA268}, - {0xE54F, 0xA269},{0xE550, 0xA26A},{0xE551, 0xA26B},{0xE552, 0xA26C},{0xE553, 0xA26D},{0xE554, 0xA26E},{0xE555, 0xA26F},{0xE556, 0xA270}, - {0xE557, 0xA271},{0xE558, 0xA272},{0xE559, 0xA273},{0xE55A, 0xA274},{0xE55B, 0xA275},{0xE55C, 0xA276},{0xE55D, 0xA277},{0xE55E, 0xA278}, - {0xE55F, 0xA279},{0xE560, 0xA27A},{0xE561, 0xA27B},{0xE562, 0xA27C},{0xE563, 0xA27D},{0xE564, 0xA27E},{0xE565, 0xA280},{0xE566, 0xA281}, - {0xE567, 0xA282},{0xE568, 0xA283},{0xE569, 0xA284},{0xE56A, 0xA285},{0xE56B, 0xA286},{0xE56C, 0xA287},{0xE56D, 0xA288},{0xE56E, 0xA289}, - {0xE56F, 0xA28A},{0xE570, 0xA28B},{0xE571, 0xA28C},{0xE572, 0xA28D},{0xE573, 0xA28E},{0xE574, 0xA28F},{0xE575, 0xA290},{0xE576, 0xA291}, - {0xE577, 0xA292},{0xE578, 0xA293},{0xE579, 0xA294},{0xE57A, 0xA295},{0xE57B, 0xA296},{0xE57C, 0xA297},{0xE57D, 0xA298},{0xE57E, 0xA299}, - {0xE57F, 0xA29A},{0xE580, 0xA29B},{0xE581, 0xA29C},{0xE582, 0xA29D},{0xE583, 0xA29E},{0xE584, 0xA29F},{0xE585, 0xA2A0},{0xE586, 0xA2AB}, - {0xE587, 0xA2AC},{0xE588, 0xA2AD},{0xE589, 0xA2AE},{0xE58A, 0xA2AF},{0xE58B, 0xA2B0},{0xE58C, 0xA2E3},{0xE58D, 0xA2E4},{0xE58E, 0xA2EF}, - {0xE58F, 0xA2F0},{0xE590, 0xA2FD},{0xE591, 0xA2FE},{0xE592, 0xA340},{0xE593, 0xA341},{0xE594, 0xA342},{0xE595, 0xA343},{0xE596, 0xA344}, - {0xE597, 0xA345},{0xE598, 0xA346},{0xE599, 0xA347},{0xE59A, 0xA348},{0xE59B, 0xA349},{0xE59C, 0xA34A},{0xE59D, 0xA34B},{0xE59E, 0xA34C}, - {0xE59F, 0xA34D},{0xE5A0, 0xA34E},{0xE5A1, 0xA34F},{0xE5A2, 0xA350},{0xE5A3, 0xA351},{0xE5A4, 0xA352},{0xE5A5, 0xA353},{0xE5A6, 0xA354}, - {0xE5A7, 0xA355},{0xE5A8, 0xA356},{0xE5A9, 0xA357},{0xE5AA, 0xA358},{0xE5AB, 0xA359},{0xE5AC, 0xA35A},{0xE5AD, 0xA35B},{0xE5AE, 0xA35C}, - {0xE5AF, 0xA35D},{0xE5B0, 0xA35E},{0xE5B1, 0xA35F},{0xE5B2, 0xA360},{0xE5B3, 0xA361},{0xE5B4, 0xA362},{0xE5B5, 0xA363},{0xE5B6, 0xA364}, - {0xE5B7, 0xA365},{0xE5B8, 0xA366},{0xE5B9, 0xA367},{0xE5BA, 0xA368},{0xE5BB, 0xA369},{0xE5BC, 0xA36A},{0xE5BD, 0xA36B},{0xE5BE, 0xA36C}, - {0xE5BF, 0xA36D},{0xE5C0, 0xA36E},{0xE5C1, 0xA36F},{0xE5C2, 0xA370},{0xE5C3, 0xA371},{0xE5C4, 0xA372},{0xE5C5, 0xA373},{0xE5C6, 0xA374}, - {0xE5C7, 0xA375},{0xE5C8, 0xA376},{0xE5C9, 0xA377},{0xE5CA, 0xA378},{0xE5CB, 0xA379},{0xE5CC, 0xA37A},{0xE5CD, 0xA37B},{0xE5CE, 0xA37C}, - {0xE5CF, 0xA37D},{0xE5D0, 0xA37E},{0xE5D1, 0xA380},{0xE5D2, 0xA381},{0xE5D3, 0xA382},{0xE5D4, 0xA383},{0xE5D5, 0xA384},{0xE5D6, 0xA385}, - {0xE5D7, 0xA386},{0xE5D8, 0xA387},{0xE5D9, 0xA388},{0xE5DA, 0xA389},{0xE5DB, 0xA38A},{0xE5DC, 0xA38B},{0xE5DD, 0xA38C},{0xE5DE, 0xA38D}, - {0xE5DF, 0xA38E},{0xE5E0, 0xA38F},{0xE5E1, 0xA390},{0xE5E2, 0xA391},{0xE5E3, 0xA392},{0xE5E4, 0xA393},{0xE5E5, 0xA394},{0xE5E6, 0xA395}, - {0xE5E7, 0xA396},{0xE5E8, 0xA397},{0xE5E9, 0xA398},{0xE5EA, 0xA399},{0xE5EB, 0xA39A},{0xE5EC, 0xA39B},{0xE5ED, 0xA39C},{0xE5EE, 0xA39D}, - {0xE5EF, 0xA39E},{0xE5F0, 0xA39F},{0xE5F1, 0xA3A0},{0xE5F2, 0xA440},{0xE5F3, 0xA441},{0xE5F4, 0xA442},{0xE5F5, 0xA443},{0xE5F6, 0xA444}, - {0xE5F7, 0xA445},{0xE5F8, 0xA446},{0xE5F9, 0xA447},{0xE5FA, 0xA448},{0xE5FB, 0xA449},{0xE5FC, 0xA44A},{0xE5FD, 0xA44B},{0xE5FE, 0xA44C}, - {0xE5FF, 0xA44D},{0xE600, 0xA44E},{0xE601, 0xA44F},{0xE602, 0xA450},{0xE603, 0xA451},{0xE604, 0xA452},{0xE605, 0xA453},{0xE606, 0xA454}, - {0xE607, 0xA455},{0xE608, 0xA456},{0xE609, 0xA457},{0xE60A, 0xA458},{0xE60B, 0xA459},{0xE60C, 0xA45A},{0xE60D, 0xA45B},{0xE60E, 0xA45C}, - {0xE60F, 0xA45D},{0xE610, 0xA45E},{0xE611, 0xA45F},{0xE612, 0xA460},{0xE613, 0xA461},{0xE614, 0xA462},{0xE615, 0xA463},{0xE616, 0xA464}, - {0xE617, 0xA465},{0xE618, 0xA466},{0xE619, 0xA467},{0xE61A, 0xA468},{0xE61B, 0xA469},{0xE61C, 0xA46A},{0xE61D, 0xA46B},{0xE61E, 0xA46C}, - {0xE61F, 0xA46D},{0xE620, 0xA46E},{0xE621, 0xA46F},{0xE622, 0xA470},{0xE623, 0xA471},{0xE624, 0xA472},{0xE625, 0xA473},{0xE626, 0xA474}, - {0xE627, 0xA475},{0xE628, 0xA476},{0xE629, 0xA477},{0xE62A, 0xA478},{0xE62B, 0xA479},{0xE62C, 0xA47A},{0xE62D, 0xA47B},{0xE62E, 0xA47C}, - {0xE62F, 0xA47D},{0xE630, 0xA47E},{0xE631, 0xA480},{0xE632, 0xA481},{0xE633, 0xA482},{0xE634, 0xA483},{0xE635, 0xA484},{0xE636, 0xA485}, - {0xE637, 0xA486},{0xE638, 0xA487},{0xE639, 0xA488},{0xE63A, 0xA489},{0xE63B, 0xA48A},{0xE63C, 0xA48B},{0xE63D, 0xA48C},{0xE63E, 0xA48D}, - {0xE63F, 0xA48E},{0xE640, 0xA48F},{0xE641, 0xA490},{0xE642, 0xA491},{0xE643, 0xA492},{0xE644, 0xA493},{0xE645, 0xA494},{0xE646, 0xA495}, - {0xE647, 0xA496},{0xE648, 0xA497},{0xE649, 0xA498},{0xE64A, 0xA499},{0xE64B, 0xA49A},{0xE64C, 0xA49B},{0xE64D, 0xA49C},{0xE64E, 0xA49D}, - {0xE64F, 0xA49E},{0xE650, 0xA49F},{0xE651, 0xA4A0},{0xE652, 0xA4F4},{0xE653, 0xA4F5},{0xE654, 0xA4F6},{0xE655, 0xA4F7},{0xE656, 0xA4F8}, - {0xE657, 0xA4F9},{0xE658, 0xA4FA},{0xE659, 0xA4FB},{0xE65A, 0xA4FC},{0xE65B, 0xA4FD},{0xE65C, 0xA4FE},{0xE65D, 0xA540},{0xE65E, 0xA541}, - {0xE65F, 0xA542},{0xE660, 0xA543},{0xE661, 0xA544},{0xE662, 0xA545},{0xE663, 0xA546},{0xE664, 0xA547},{0xE665, 0xA548},{0xE666, 0xA549}, - {0xE667, 0xA54A},{0xE668, 0xA54B},{0xE669, 0xA54C},{0xE66A, 0xA54D},{0xE66B, 0xA54E},{0xE66C, 0xA54F},{0xE66D, 0xA550},{0xE66E, 0xA551}, - {0xE66F, 0xA552},{0xE670, 0xA553},{0xE671, 0xA554},{0xE672, 0xA555},{0xE673, 0xA556},{0xE674, 0xA557},{0xE675, 0xA558},{0xE676, 0xA559}, - {0xE677, 0xA55A},{0xE678, 0xA55B},{0xE679, 0xA55C},{0xE67A, 0xA55D},{0xE67B, 0xA55E},{0xE67C, 0xA55F},{0xE67D, 0xA560},{0xE67E, 0xA561}, - {0xE67F, 0xA562},{0xE680, 0xA563},{0xE681, 0xA564},{0xE682, 0xA565},{0xE683, 0xA566},{0xE684, 0xA567},{0xE685, 0xA568},{0xE686, 0xA569}, - {0xE687, 0xA56A},{0xE688, 0xA56B},{0xE689, 0xA56C},{0xE68A, 0xA56D},{0xE68B, 0xA56E},{0xE68C, 0xA56F},{0xE68D, 0xA570},{0xE68E, 0xA571}, - {0xE68F, 0xA572},{0xE690, 0xA573},{0xE691, 0xA574},{0xE692, 0xA575},{0xE693, 0xA576},{0xE694, 0xA577},{0xE695, 0xA578},{0xE696, 0xA579}, - {0xE697, 0xA57A},{0xE698, 0xA57B},{0xE699, 0xA57C},{0xE69A, 0xA57D},{0xE69B, 0xA57E},{0xE69C, 0xA580},{0xE69D, 0xA581},{0xE69E, 0xA582}, - {0xE69F, 0xA583},{0xE6A0, 0xA584},{0xE6A1, 0xA585},{0xE6A2, 0xA586},{0xE6A3, 0xA587},{0xE6A4, 0xA588},{0xE6A5, 0xA589},{0xE6A6, 0xA58A}, - {0xE6A7, 0xA58B},{0xE6A8, 0xA58C},{0xE6A9, 0xA58D},{0xE6AA, 0xA58E},{0xE6AB, 0xA58F},{0xE6AC, 0xA590},{0xE6AD, 0xA591},{0xE6AE, 0xA592}, - {0xE6AF, 0xA593},{0xE6B0, 0xA594},{0xE6B1, 0xA595},{0xE6B2, 0xA596},{0xE6B3, 0xA597},{0xE6B4, 0xA598},{0xE6B5, 0xA599},{0xE6B6, 0xA59A}, - {0xE6B7, 0xA59B},{0xE6B8, 0xA59C},{0xE6B9, 0xA59D},{0xE6BA, 0xA59E},{0xE6BB, 0xA59F},{0xE6BC, 0xA5A0},{0xE6BD, 0xA5F7},{0xE6BE, 0xA5F8}, - {0xE6BF, 0xA5F9},{0xE6C0, 0xA5FA},{0xE6C1, 0xA5FB},{0xE6C2, 0xA5FC},{0xE6C3, 0xA5FD},{0xE6C4, 0xA5FE},{0xE6C5, 0xA640},{0xE6C6, 0xA641}, - {0xE6C7, 0xA642},{0xE6C8, 0xA643},{0xE6C9, 0xA644},{0xE6CA, 0xA645},{0xE6CB, 0xA646},{0xE6CC, 0xA647},{0xE6CD, 0xA648},{0xE6CE, 0xA649}, - {0xE6CF, 0xA64A},{0xE6D0, 0xA64B},{0xE6D1, 0xA64C},{0xE6D2, 0xA64D},{0xE6D3, 0xA64E},{0xE6D4, 0xA64F},{0xE6D5, 0xA650},{0xE6D6, 0xA651}, - {0xE6D7, 0xA652},{0xE6D8, 0xA653},{0xE6D9, 0xA654},{0xE6DA, 0xA655},{0xE6DB, 0xA656},{0xE6DC, 0xA657},{0xE6DD, 0xA658},{0xE6DE, 0xA659}, - {0xE6DF, 0xA65A},{0xE6E0, 0xA65B},{0xE6E1, 0xA65C},{0xE6E2, 0xA65D},{0xE6E3, 0xA65E},{0xE6E4, 0xA65F},{0xE6E5, 0xA660},{0xE6E6, 0xA661}, - {0xE6E7, 0xA662},{0xE6E8, 0xA663},{0xE6E9, 0xA664},{0xE6EA, 0xA665},{0xE6EB, 0xA666},{0xE6EC, 0xA667},{0xE6ED, 0xA668},{0xE6EE, 0xA669}, - {0xE6EF, 0xA66A},{0xE6F0, 0xA66B},{0xE6F1, 0xA66C},{0xE6F2, 0xA66D},{0xE6F3, 0xA66E},{0xE6F4, 0xA66F},{0xE6F5, 0xA670},{0xE6F6, 0xA671}, - {0xE6F7, 0xA672},{0xE6F8, 0xA673},{0xE6F9, 0xA674},{0xE6FA, 0xA675},{0xE6FB, 0xA676},{0xE6FC, 0xA677},{0xE6FD, 0xA678},{0xE6FE, 0xA679}, - {0xE6FF, 0xA67A},{0xE700, 0xA67B},{0xE701, 0xA67C},{0xE702, 0xA67D},{0xE703, 0xA67E},{0xE704, 0xA680},{0xE705, 0xA681},{0xE706, 0xA682}, - {0xE707, 0xA683},{0xE708, 0xA684},{0xE709, 0xA685},{0xE70A, 0xA686},{0xE70B, 0xA687},{0xE70C, 0xA688},{0xE70D, 0xA689},{0xE70E, 0xA68A}, - {0xE70F, 0xA68B},{0xE710, 0xA68C},{0xE711, 0xA68D},{0xE712, 0xA68E},{0xE713, 0xA68F},{0xE714, 0xA690},{0xE715, 0xA691},{0xE716, 0xA692}, - {0xE717, 0xA693},{0xE718, 0xA694},{0xE719, 0xA695},{0xE71A, 0xA696},{0xE71B, 0xA697},{0xE71C, 0xA698},{0xE71D, 0xA699},{0xE71E, 0xA69A}, - {0xE71F, 0xA69B},{0xE720, 0xA69C},{0xE721, 0xA69D},{0xE722, 0xA69E},{0xE723, 0xA69F},{0xE724, 0xA6A0},{0xE725, 0xA6B9},{0xE726, 0xA6BA}, - {0xE727, 0xA6BB},{0xE728, 0xA6BC},{0xE729, 0xA6BD},{0xE72A, 0xA6BE},{0xE72B, 0xA6BF},{0xE72C, 0xA6C0},{0xE72D, 0xA6D9},{0xE72E, 0xA6DA}, - {0xE72F, 0xA6DB},{0xE730, 0xA6DC},{0xE731, 0xA6DD},{0xE732, 0xA6DE},{0xE733, 0xA6DF},{0xE734, 0xA6EC},{0xE735, 0xA6ED},{0xE736, 0xA6F3}, - {0xE737, 0xA6F6},{0xE738, 0xA6F7},{0xE739, 0xA6F8},{0xE73A, 0xA6F9},{0xE73B, 0xA6FA},{0xE73C, 0xA6FB},{0xE73D, 0xA6FC},{0xE73E, 0xA6FD}, - {0xE73F, 0xA6FE},{0xE740, 0xA740},{0xE741, 0xA741},{0xE742, 0xA742},{0xE743, 0xA743},{0xE744, 0xA744},{0xE745, 0xA745},{0xE746, 0xA746}, - {0xE747, 0xA747},{0xE748, 0xA748},{0xE749, 0xA749},{0xE74A, 0xA74A},{0xE74B, 0xA74B},{0xE74C, 0xA74C},{0xE74D, 0xA74D},{0xE74E, 0xA74E}, - {0xE74F, 0xA74F},{0xE750, 0xA750},{0xE751, 0xA751},{0xE752, 0xA752},{0xE753, 0xA753},{0xE754, 0xA754},{0xE755, 0xA755},{0xE756, 0xA756}, - {0xE757, 0xA757},{0xE758, 0xA758},{0xE759, 0xA759},{0xE75A, 0xA75A},{0xE75B, 0xA75B},{0xE75C, 0xA75C},{0xE75D, 0xA75D},{0xE75E, 0xA75E}, - {0xE75F, 0xA75F},{0xE760, 0xA760},{0xE761, 0xA761},{0xE762, 0xA762},{0xE763, 0xA763},{0xE764, 0xA764},{0xE765, 0xA765},{0xE766, 0xA766}, - {0xE767, 0xA767},{0xE768, 0xA768},{0xE769, 0xA769},{0xE76A, 0xA76A},{0xE76B, 0xA76B},{0xE76C, 0xA76C},{0xE76D, 0xA76D},{0xE76E, 0xA76E}, - {0xE76F, 0xA76F},{0xE770, 0xA770},{0xE771, 0xA771},{0xE772, 0xA772},{0xE773, 0xA773},{0xE774, 0xA774},{0xE775, 0xA775},{0xE776, 0xA776}, - {0xE777, 0xA777},{0xE778, 0xA778},{0xE779, 0xA779},{0xE77A, 0xA77A},{0xE77B, 0xA77B},{0xE77C, 0xA77C},{0xE77D, 0xA77D},{0xE77E, 0xA77E}, - {0xE77F, 0xA780},{0xE780, 0xA781},{0xE781, 0xA782},{0xE782, 0xA783},{0xE783, 0xA784},{0xE784, 0xA785},{0xE785, 0xA786},{0xE786, 0xA787}, - {0xE787, 0xA788},{0xE788, 0xA789},{0xE789, 0xA78A},{0xE78A, 0xA78B},{0xE78B, 0xA78C},{0xE78C, 0xA78D},{0xE78D, 0xA78E},{0xE78E, 0xA78F}, - {0xE78F, 0xA790},{0xE790, 0xA791},{0xE791, 0xA792},{0xE792, 0xA793},{0xE793, 0xA794},{0xE794, 0xA795},{0xE795, 0xA796},{0xE796, 0xA797}, - {0xE797, 0xA798},{0xE798, 0xA799},{0xE799, 0xA79A},{0xE79A, 0xA79B},{0xE79B, 0xA79C},{0xE79C, 0xA79D},{0xE79D, 0xA79E},{0xE79E, 0xA79F}, - {0xE79F, 0xA7A0},{0xE7A0, 0xA7C2},{0xE7A1, 0xA7C3},{0xE7A2, 0xA7C4},{0xE7A3, 0xA7C5},{0xE7A4, 0xA7C6},{0xE7A5, 0xA7C7},{0xE7A6, 0xA7C8}, - {0xE7A7, 0xA7C9},{0xE7A8, 0xA7CA},{0xE7A9, 0xA7CB},{0xE7AA, 0xA7CC},{0xE7AB, 0xA7CD},{0xE7AC, 0xA7CE},{0xE7AD, 0xA7CF},{0xE7AE, 0xA7D0}, - {0xE7AF, 0xA7F2},{0xE7B0, 0xA7F3},{0xE7B1, 0xA7F4},{0xE7B2, 0xA7F5},{0xE7B3, 0xA7F6},{0xE7B4, 0xA7F7},{0xE7B5, 0xA7F8},{0xE7B6, 0xA7F9}, - {0xE7B7, 0xA7FA},{0xE7B8, 0xA7FB},{0xE7B9, 0xA7FC},{0xE7BA, 0xA7FD},{0xE7BB, 0xA7FE},{0xE7BC, 0xA896},{0xE7BD, 0xA897},{0xE7BE, 0xA898}, - {0xE7BF, 0xA899},{0xE7C0, 0xA89A},{0xE7C1, 0xA89B},{0xE7C2, 0xA89C},{0xE7C3, 0xA89D},{0xE7C4, 0xA89E},{0xE7C5, 0xA89F},{0xE7C6, 0xA8A0}, - {0xE7C7, 0xA8BC},{0xE7C8, 0xA8BF},{0xE7C9, 0xA8C1},{0xE7CA, 0xA8C2},{0xE7CB, 0xA8C3},{0xE7CC, 0xA8C4},{0xE7CD, 0xA8EA},{0xE7CE, 0xA8EB}, - {0xE7CF, 0xA8EC},{0xE7D0, 0xA8ED},{0xE7D1, 0xA8EE},{0xE7D2, 0xA8EF},{0xE7D3, 0xA8F0},{0xE7D4, 0xA8F1},{0xE7D5, 0xA8F2},{0xE7D6, 0xA8F3}, - {0xE7D7, 0xA8F4},{0xE7D8, 0xA8F5},{0xE7D9, 0xA8F6},{0xE7DA, 0xA8F7},{0xE7DB, 0xA8F8},{0xE7DC, 0xA8F9},{0xE7DD, 0xA8FA},{0xE7DE, 0xA8FB}, - {0xE7DF, 0xA8FC},{0xE7E0, 0xA8FD},{0xE7E1, 0xA8FE},{0xE7E2, 0xA958},{0xE7E3, 0xA95B},{0xE7E4, 0xA95D},{0xE7E5, 0xA95E},{0xE7E6, 0xA95F}, - {0xE7E7, 0xA989},{0xE7E8, 0xA98A},{0xE7E9, 0xA98B},{0xE7EA, 0xA98C},{0xE7EB, 0xA98D},{0xE7EC, 0xA98E},{0xE7ED, 0xA98F},{0xE7EE, 0xA990}, - {0xE7EF, 0xA991},{0xE7F0, 0xA992},{0xE7F1, 0xA993},{0xE7F2, 0xA994},{0xE7F3, 0xA995},{0xE7F4, 0xA997},{0xE7F5, 0xA998},{0xE7F6, 0xA999}, - {0xE7F7, 0xA99A},{0xE7F8, 0xA99B},{0xE7F9, 0xA99C},{0xE7FA, 0xA99D},{0xE7FB, 0xA99E},{0xE7FC, 0xA99F},{0xE7FD, 0xA9A0},{0xE7FE, 0xA9A1}, - {0xE7FF, 0xA9A2},{0xE800, 0xA9A3},{0xE801, 0xA9F0},{0xE802, 0xA9F1},{0xE803, 0xA9F2},{0xE804, 0xA9F3},{0xE805, 0xA9F4},{0xE806, 0xA9F5}, - {0xE807, 0xA9F6},{0xE808, 0xA9F7},{0xE809, 0xA9F8},{0xE80A, 0xA9F9},{0xE80B, 0xA9FA},{0xE80C, 0xA9FB},{0xE80D, 0xA9FC},{0xE80E, 0xA9FD}, - {0xE80F, 0xA9FE},{0xE810, 0xD7FA},{0xE811, 0xD7FB},{0xE812, 0xD7FC},{0xE813, 0xD7FD},{0xE814, 0xD7FE},{0xE815, 0xFE50},{0xE816, 0xFE51}, - {0xE817, 0xFE52},{0xE818, 0xFE53},{0xE819, 0xFE54},{0xE81A, 0xFE55},{0xE81B, 0xFE56},{0xE81C, 0xFE57},{0xE81D, 0xFE58},{0xE81E, 0xFE59}, - {0xE81F, 0xFE5A},{0xE820, 0xFE5B},{0xE821, 0xFE5C},{0xE822, 0xFE5D},{0xE823, 0xFE5E},{0xE824, 0xFE5F},{0xE825, 0xFE60},{0xE826, 0xFE61}, - {0xE827, 0xFE62},{0xE828, 0xFE63},{0xE829, 0xFE64},{0xE82A, 0xFE65},{0xE82B, 0xFE66},{0xE82C, 0xFE67},{0xE82D, 0xFE68},{0xE82E, 0xFE69}, - {0xE82F, 0xFE6A},{0xE830, 0xFE6B},{0xE831, 0xFE6C},{0xE832, 0xFE6D},{0xE833, 0xFE6E},{0xE834, 0xFE6F},{0xE835, 0xFE70},{0xE836, 0xFE71}, - {0xE837, 0xFE72},{0xE838, 0xFE73},{0xE839, 0xFE74},{0xE83A, 0xFE75},{0xE83B, 0xFE76},{0xE83C, 0xFE77},{0xE83D, 0xFE78},{0xE83E, 0xFE79}, - {0xE83F, 0xFE7A},{0xE840, 0xFE7B},{0xE841, 0xFE7C},{0xE842, 0xFE7D},{0xE843, 0xFE7E},{0xE844, 0xFE80},{0xE845, 0xFE81},{0xE846, 0xFE82}, - {0xE847, 0xFE83},{0xE848, 0xFE84},{0xE849, 0xFE85},{0xE84A, 0xFE86},{0xE84B, 0xFE87},{0xE84C, 0xFE88},{0xE84D, 0xFE89},{0xE84E, 0xFE8A}, - {0xE84F, 0xFE8B},{0xE850, 0xFE8C},{0xE851, 0xFE8D},{0xE852, 0xFE8E},{0xE853, 0xFE8F},{0xE854, 0xFE90},{0xE855, 0xFE91},{0xE856, 0xFE92}, - {0xE857, 0xFE93},{0xE858, 0xFE94},{0xE859, 0xFE95},{0xE85A, 0xFE96},{0xE85B, 0xFE97},{0xE85C, 0xFE98},{0xE85D, 0xFE99},{0xE85E, 0xFE9A}, - {0xE85F, 0xFE9B},{0xE860, 0xFE9C},{0xE861, 0xFE9D},{0xE862, 0xFE9E},{0xE863, 0xFE9F},{0xE864, 0xFEA0},{0xF92C, 0xFD9C},{0xF979, 0xFD9D}, - {0xF995, 0xFD9E},{0xF9E7, 0xFD9F},{0xF9F1, 0xFDA0},{0xFA0C, 0xFE40},{0xFA0D, 0xFE41},{0xFA0E, 0xFE42},{0xFA0F, 0xFE43},{0xFA11, 0xFE44}, - {0xFA13, 0xFE45},{0xFA14, 0xFE46},{0xFA18, 0xFE47},{0xFA1F, 0xFE48},{0xFA20, 0xFE49},{0xFA21, 0xFE4A},{0xFA23, 0xFE4B},{0xFA24, 0xFE4C}, - {0xFA27, 0xFE4D},{0xFA28, 0xFE4E},{0xFA29, 0xFE4F},{0xFE30, 0xA955},{0xFE31, 0xA6F2},{0xFE33, 0xA6F4},{0xFE34, 0xA6F5},{0xFE35, 0xA6E0}, - {0xFE36, 0xA6E1},{0xFE37, 0xA6F0},{0xFE38, 0xA6F1},{0xFE39, 0xA6E2},{0xFE3A, 0xA6E3},{0xFE3B, 0xA6EE},{0xFE3C, 0xA6EF},{0xFE3D, 0xA6E6}, - {0xFE3E, 0xA6E7},{0xFE3F, 0xA6E4},{0xFE40, 0xA6E5},{0xFE41, 0xA6E8},{0xFE42, 0xA6E9},{0xFE43, 0xA6EA},{0xFE44, 0xA6EB},{0xFE49, 0xA968}, - {0xFE4A, 0xA969},{0xFE4B, 0xA96A},{0xFE4C, 0xA96B},{0xFE4D, 0xA96C},{0xFE4E, 0xA96D},{0xFE4F, 0xA96E},{0xFE50, 0xA96F},{0xFE51, 0xA970}, - {0xFE52, 0xA971},{0xFE54, 0xA972},{0xFE55, 0xA973},{0xFE56, 0xA974},{0xFE57, 0xA975},{0xFE59, 0xA976},{0xFE5A, 0xA977},{0xFE5B, 0xA978}, - {0xFE5C, 0xA979},{0xFE5D, 0xA97A},{0xFE5E, 0xA97B},{0xFE5F, 0xA97C},{0xFE60, 0xA97D},{0xFE61, 0xA97E},{0xFE62, 0xA980},{0xFE63, 0xA981}, - {0xFE64, 0xA982},{0xFE65, 0xA983},{0xFE66, 0xA984},{0xFE68, 0xA985},{0xFE69, 0xA986},{0xFE6A, 0xA987},{0xFE6B, 0xA988},{0xFF01, 0xA3A1}, - {0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA1E7},{0xFF05, 0xA3A5},{0xFF06, 0xA3A6},{0xFF07, 0xA3A7},{0xFF08, 0xA3A8},{0xFF09, 0xA3A9}, - {0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD},{0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF},{0xFF10, 0xA3B0},{0xFF11, 0xA3B1}, - {0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5},{0xFF16, 0xA3B6},{0xFF17, 0xA3B7},{0xFF18, 0xA3B8},{0xFF19, 0xA3B9}, - {0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD},{0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF},{0xFF20, 0xA3C0},{0xFF21, 0xA3C1}, - {0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5},{0xFF26, 0xA3C6},{0xFF27, 0xA3C7},{0xFF28, 0xA3C8},{0xFF29, 0xA3C9}, - {0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD},{0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF},{0xFF30, 0xA3D0},{0xFF31, 0xA3D1}, - {0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5},{0xFF36, 0xA3D6},{0xFF37, 0xA3D7},{0xFF38, 0xA3D8},{0xFF39, 0xA3D9}, - {0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA3DC},{0xFF3D, 0xA3DD},{0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF},{0xFF40, 0xA3E0},{0xFF41, 0xA3E1}, - {0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5},{0xFF46, 0xA3E6},{0xFF47, 0xA3E7},{0xFF48, 0xA3E8},{0xFF49, 0xA3E9}, - {0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED},{0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF},{0xFF50, 0xA3F0},{0xFF51, 0xA3F1}, - {0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5},{0xFF56, 0xA3F6},{0xFF57, 0xA3F7},{0xFF58, 0xA3F8},{0xFF59, 0xA3F9}, - {0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD},{0xFF5E, 0xA1AB},{0xFFE0, 0xA1E9},{0xFFE1, 0xA1EA},{0xFFE2, 0xA956}, - {0xFFE3, 0xA3FE},{0xFFE4, 0xA957},{0xFFE5, 0xA3A4} -}; diff --git a/vcl/source/fontsubset/u2shiftjis.inc b/vcl/source/fontsubset/u2shiftjis.inc deleted file mode 100644 index ebc6f1676784..000000000000 --- a/vcl/source/fontsubset/u2shiftjis.inc +++ /dev/null @@ -1,967 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// TODO: use generic RTL_TEXTENCODING_SHIFTJIS to get rid of this file - -sal_uInt16pair xlat_1_2[7484] = { - {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027}, - {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F}, - {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037}, - {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F}, - {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047}, - {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F}, - {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057}, - {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F}, - {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067}, - {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F}, - {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077}, - {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A7, 0x8198}, - {0x00A8, 0x814E},{0x00B0, 0x818B},{0x00B1, 0x817D},{0x00B4, 0x814C},{0x00B6, 0x81F7},{0x00D7, 0x817E},{0x00F7, 0x8180},{0x0391, 0x839F}, - {0x0392, 0x83A0},{0x0393, 0x83A1},{0x0394, 0x83A2},{0x0395, 0x83A3},{0x0396, 0x83A4},{0x0397, 0x83A5},{0x0398, 0x83A6},{0x0399, 0x83A7}, - {0x039A, 0x83A8},{0x039B, 0x83A9},{0x039C, 0x83AA},{0x039D, 0x83AB},{0x039E, 0x83AC},{0x039F, 0x83AD},{0x03A0, 0x83AE},{0x03A1, 0x83AF}, - {0x03A3, 0x83B0},{0x03A4, 0x83B1},{0x03A5, 0x83B2},{0x03A6, 0x83B3},{0x03A7, 0x83B4},{0x03A8, 0x83B5},{0x03A9, 0x83B6},{0x03B1, 0x83BF}, - {0x03B2, 0x83C0},{0x03B3, 0x83C1},{0x03B4, 0x83C2},{0x03B5, 0x83C3},{0x03B6, 0x83C4},{0x03B7, 0x83C5},{0x03B8, 0x83C6},{0x03B9, 0x83C7}, - {0x03BA, 0x83C8},{0x03BB, 0x83C9},{0x03BC, 0x83CA},{0x03BD, 0x83CB},{0x03BE, 0x83CC},{0x03BF, 0x83CD},{0x03C0, 0x83CE},{0x03C1, 0x83CF}, - {0x03C3, 0x83D0},{0x03C4, 0x83D1},{0x03C5, 0x83D2},{0x03C6, 0x83D3},{0x03C7, 0x83D4},{0x03C8, 0x83D5},{0x03C9, 0x83D6},{0x0401, 0x8446}, - {0x0410, 0x8440},{0x0411, 0x8441},{0x0412, 0x8442},{0x0413, 0x8443},{0x0414, 0x8444},{0x0415, 0x8445},{0x0416, 0x8447},{0x0417, 0x8448}, - {0x0418, 0x8449},{0x0419, 0x844A},{0x041A, 0x844B},{0x041B, 0x844C},{0x041C, 0x844D},{0x041D, 0x844E},{0x041E, 0x844F},{0x041F, 0x8450}, - {0x0420, 0x8451},{0x0421, 0x8452},{0x0422, 0x8453},{0x0423, 0x8454},{0x0424, 0x8455},{0x0425, 0x8456},{0x0426, 0x8457},{0x0427, 0x8458}, - {0x0428, 0x8459},{0x0429, 0x845A},{0x042A, 0x845B},{0x042B, 0x845C},{0x042C, 0x845D},{0x042D, 0x845E},{0x042E, 0x845F},{0x042F, 0x8460}, - {0x0430, 0x8470},{0x0431, 0x8471},{0x0432, 0x8472},{0x0433, 0x8473},{0x0434, 0x8474},{0x0435, 0x8475},{0x0436, 0x8477},{0x0437, 0x8478}, - {0x0438, 0x8479},{0x0439, 0x847A},{0x043A, 0x847B},{0x043B, 0x847C},{0x043C, 0x847D},{0x043D, 0x847E},{0x043E, 0x8480},{0x043F, 0x8481}, - {0x0440, 0x8482},{0x0441, 0x8483},{0x0442, 0x8484},{0x0443, 0x8485},{0x0444, 0x8486},{0x0445, 0x8487},{0x0446, 0x8488},{0x0447, 0x8489}, - {0x0448, 0x848A},{0x0449, 0x848B},{0x044A, 0x848C},{0x044B, 0x848D},{0x044C, 0x848E},{0x044D, 0x848F},{0x044E, 0x8490},{0x044F, 0x8491}, - {0x0451, 0x8476},{0x2010, 0x815D},{0x2015, 0x815C},{0x2018, 0x8165},{0x2019, 0x8166},{0x201C, 0x8167},{0x201D, 0x8168},{0x2020, 0x81F5}, - {0x2021, 0x81F6},{0x2025, 0x8164},{0x2026, 0x8163},{0x2030, 0x81F1},{0x2032, 0x818C},{0x2033, 0x818D},{0x203B, 0x81A6},{0x2103, 0x818E}, - {0x2116, 0x8782},{0x2121, 0x8784},{0x212B, 0x81F0},{0x2160, 0x8754},{0x2161, 0x8755},{0x2162, 0x8756},{0x2163, 0x8757},{0x2164, 0x8758}, - {0x2165, 0x8759},{0x2166, 0x875A},{0x2167, 0x875B},{0x2168, 0x875C},{0x2169, 0x875D},{0x2170, 0xEEEF},{0x2171, 0xEEF0},{0x2172, 0xEEF1}, - {0x2173, 0xEEF2},{0x2174, 0xEEF3},{0x2175, 0xEEF4},{0x2176, 0xEEF5},{0x2177, 0xEEF6},{0x2178, 0xEEF7},{0x2179, 0xEEF8},{0x2190, 0x81A9}, - {0x2191, 0x81AA},{0x2192, 0x81A8},{0x2193, 0x81AB},{0x21D2, 0x81CB},{0x21D4, 0x81CC},{0x2200, 0x81CD},{0x2202, 0x81DD},{0x2203, 0x81CE}, - {0x2207, 0x81DE},{0x2208, 0x81B8},{0x220B, 0x81B9},{0x2211, 0x8794},{0x221A, 0x81E3},{0x221D, 0x81E5},{0x221E, 0x8187},{0x221F, 0x8798}, - {0x2220, 0x81DA},{0x2225, 0x8161},{0x2227, 0x81C8},{0x2228, 0x81C9},{0x2229, 0x81BF},{0x222A, 0x81BE},{0x222B, 0x81E7},{0x222C, 0x81E8}, - {0x222E, 0x8793},{0x2234, 0x8188},{0x2235, 0x81E6},{0x223D, 0x81E4},{0x2252, 0x81E0},{0x2260, 0x8182},{0x2261, 0x81DF},{0x2266, 0x8185}, - {0x2267, 0x8186},{0x226A, 0x81E1},{0x226B, 0x81E2},{0x2282, 0x81BC},{0x2283, 0x81BD},{0x2286, 0x81BA},{0x2287, 0x81BB},{0x22A5, 0x81DB}, - {0x22BF, 0x8799},{0x2312, 0x81DC},{0x2460, 0x8740},{0x2461, 0x8741},{0x2462, 0x8742},{0x2463, 0x8743},{0x2464, 0x8744},{0x2465, 0x8745}, - {0x2466, 0x8746},{0x2467, 0x8747},{0x2468, 0x8748},{0x2469, 0x8749},{0x246A, 0x874A},{0x246B, 0x874B},{0x246C, 0x874C},{0x246D, 0x874D}, - {0x246E, 0x874E},{0x246F, 0x874F},{0x2470, 0x8750},{0x2471, 0x8751},{0x2472, 0x8752},{0x2473, 0x8753},{0x2500, 0x849F},{0x2501, 0x84AA}, - {0x2502, 0x84A0},{0x2503, 0x84AB},{0x250C, 0x84A1},{0x250F, 0x84AC},{0x2510, 0x84A2},{0x2513, 0x84AD},{0x2514, 0x84A4},{0x2517, 0x84AF}, - {0x2518, 0x84A3},{0x251B, 0x84AE},{0x251C, 0x84A5},{0x251D, 0x84BA},{0x2520, 0x84B5},{0x2523, 0x84B0},{0x2524, 0x84A7},{0x2525, 0x84BC}, - {0x2528, 0x84B7},{0x252B, 0x84B2},{0x252C, 0x84A6},{0x252F, 0x84B6},{0x2530, 0x84BB},{0x2533, 0x84B1},{0x2534, 0x84A8},{0x2537, 0x84B8}, - {0x2538, 0x84BD},{0x253B, 0x84B3},{0x253C, 0x84A9},{0x253F, 0x84B9},{0x2542, 0x84BE},{0x254B, 0x84B4},{0x25A0, 0x81A1},{0x25A1, 0x81A0}, - {0x25B2, 0x81A3},{0x25B3, 0x81A2},{0x25BC, 0x81A5},{0x25BD, 0x81A4},{0x25C6, 0x819F},{0x25C7, 0x819E},{0x25CB, 0x819B},{0x25CE, 0x819D}, - {0x25CF, 0x819C},{0x25EF, 0x81FC},{0x2605, 0x819A},{0x2606, 0x8199},{0x2640, 0x818A},{0x2642, 0x8189},{0x266A, 0x81F4},{0x266D, 0x81F3}, - {0x266F, 0x81F2},{0x3000, 0x8140},{0x3001, 0x8141},{0x3002, 0x8142},{0x3003, 0x8156},{0x3005, 0x8158},{0x3006, 0x8159},{0x3007, 0x815A}, - {0x3008, 0x8171},{0x3009, 0x8172},{0x300A, 0x8173},{0x300B, 0x8174},{0x300C, 0x8175},{0x300D, 0x8176},{0x300E, 0x8177},{0x300F, 0x8178}, - {0x3010, 0x8179},{0x3011, 0x817A},{0x3012, 0x81A7},{0x3013, 0x81AC},{0x3014, 0x816B},{0x3015, 0x816C},{0x301D, 0x8780},{0x301F, 0x8781}, - {0x3041, 0x829F},{0x3042, 0x82A0},{0x3043, 0x82A1},{0x3044, 0x82A2},{0x3045, 0x82A3},{0x3046, 0x82A4},{0x3047, 0x82A5},{0x3048, 0x82A6}, - {0x3049, 0x82A7},{0x304A, 0x82A8},{0x304B, 0x82A9},{0x304C, 0x82AA},{0x304D, 0x82AB},{0x304E, 0x82AC},{0x304F, 0x82AD},{0x3050, 0x82AE}, - {0x3051, 0x82AF},{0x3052, 0x82B0},{0x3053, 0x82B1},{0x3054, 0x82B2},{0x3055, 0x82B3},{0x3056, 0x82B4},{0x3057, 0x82B5},{0x3058, 0x82B6}, - {0x3059, 0x82B7},{0x305A, 0x82B8},{0x305B, 0x82B9},{0x305C, 0x82BA},{0x305D, 0x82BB},{0x305E, 0x82BC},{0x305F, 0x82BD},{0x3060, 0x82BE}, - {0x3061, 0x82BF},{0x3062, 0x82C0},{0x3063, 0x82C1},{0x3064, 0x82C2},{0x3065, 0x82C3},{0x3066, 0x82C4},{0x3067, 0x82C5},{0x3068, 0x82C6}, - {0x3069, 0x82C7},{0x306A, 0x82C8},{0x306B, 0x82C9},{0x306C, 0x82CA},{0x306D, 0x82CB},{0x306E, 0x82CC},{0x306F, 0x82CD},{0x3070, 0x82CE}, - {0x3071, 0x82CF},{0x3072, 0x82D0},{0x3073, 0x82D1},{0x3074, 0x82D2},{0x3075, 0x82D3},{0x3076, 0x82D4},{0x3077, 0x82D5},{0x3078, 0x82D6}, - {0x3079, 0x82D7},{0x307A, 0x82D8},{0x307B, 0x82D9},{0x307C, 0x82DA},{0x307D, 0x82DB},{0x307E, 0x82DC},{0x307F, 0x82DD},{0x3080, 0x82DE}, - {0x3081, 0x82DF},{0x3082, 0x82E0},{0x3083, 0x82E1},{0x3084, 0x82E2},{0x3085, 0x82E3},{0x3086, 0x82E4},{0x3087, 0x82E5},{0x3088, 0x82E6}, - {0x3089, 0x82E7},{0x308A, 0x82E8},{0x308B, 0x82E9},{0x308C, 0x82EA},{0x308D, 0x82EB},{0x308E, 0x82EC},{0x308F, 0x82ED},{0x3090, 0x82EE}, - {0x3091, 0x82EF},{0x3092, 0x82F0},{0x3093, 0x82F1},{0x309B, 0x814A},{0x309C, 0x814B},{0x309D, 0x8154},{0x309E, 0x8155},{0x30A1, 0x8340}, - {0x30A2, 0x8341},{0x30A3, 0x8342},{0x30A4, 0x8343},{0x30A5, 0x8344},{0x30A6, 0x8345},{0x30A7, 0x8346},{0x30A8, 0x8347},{0x30A9, 0x8348}, - {0x30AA, 0x8349},{0x30AB, 0x834A},{0x30AC, 0x834B},{0x30AD, 0x834C},{0x30AE, 0x834D},{0x30AF, 0x834E},{0x30B0, 0x834F},{0x30B1, 0x8350}, - {0x30B2, 0x8351},{0x30B3, 0x8352},{0x30B4, 0x8353},{0x30B5, 0x8354},{0x30B6, 0x8355},{0x30B7, 0x8356},{0x30B8, 0x8357},{0x30B9, 0x8358}, - {0x30BA, 0x8359},{0x30BB, 0x835A},{0x30BC, 0x835B},{0x30BD, 0x835C},{0x30BE, 0x835D},{0x30BF, 0x835E},{0x30C0, 0x835F},{0x30C1, 0x8360}, - {0x30C2, 0x8361},{0x30C3, 0x8362},{0x30C4, 0x8363},{0x30C5, 0x8364},{0x30C6, 0x8365},{0x30C7, 0x8366},{0x30C8, 0x8367},{0x30C9, 0x8368}, - {0x30CA, 0x8369},{0x30CB, 0x836A},{0x30CC, 0x836B},{0x30CD, 0x836C},{0x30CE, 0x836D},{0x30CF, 0x836E},{0x30D0, 0x836F},{0x30D1, 0x8370}, - {0x30D2, 0x8371},{0x30D3, 0x8372},{0x30D4, 0x8373},{0x30D5, 0x8374},{0x30D6, 0x8375},{0x30D7, 0x8376},{0x30D8, 0x8377},{0x30D9, 0x8378}, - {0x30DA, 0x8379},{0x30DB, 0x837A},{0x30DC, 0x837B},{0x30DD, 0x837C},{0x30DE, 0x837D},{0x30DF, 0x837E},{0x30E0, 0x8380},{0x30E1, 0x8381}, - {0x30E2, 0x8382},{0x30E3, 0x8383},{0x30E4, 0x8384},{0x30E5, 0x8385},{0x30E6, 0x8386},{0x30E7, 0x8387},{0x30E8, 0x8388},{0x30E9, 0x8389}, - {0x30EA, 0x838A},{0x30EB, 0x838B},{0x30EC, 0x838C},{0x30ED, 0x838D},{0x30EE, 0x838E},{0x30EF, 0x838F},{0x30F0, 0x8390},{0x30F1, 0x8391}, - {0x30F2, 0x8392},{0x30F3, 0x8393},{0x30F4, 0x8394},{0x30F5, 0x8395},{0x30F6, 0x8396},{0x30FB, 0x8145},{0x30FC, 0x815B},{0x30FD, 0x8152}, - {0x30FE, 0x8153},{0x3231, 0x878A},{0x3232, 0x878B},{0x3239, 0x878C},{0x32A4, 0x8785},{0x32A5, 0x8786},{0x32A6, 0x8787},{0x32A7, 0x8788}, - {0x32A8, 0x8789},{0x3303, 0x8765},{0x330D, 0x8769},{0x3314, 0x8760},{0x3318, 0x8763},{0x3322, 0x8761},{0x3323, 0x876B},{0x3326, 0x876A}, - {0x3327, 0x8764},{0x332B, 0x876C},{0x3336, 0x8766},{0x333B, 0x876E},{0x3349, 0x875F},{0x334A, 0x876D},{0x334D, 0x8762},{0x3351, 0x8767}, - {0x3357, 0x8768},{0x337B, 0x877E},{0x337C, 0x878F},{0x337D, 0x878E},{0x337E, 0x878D},{0x338E, 0x8772},{0x338F, 0x8773},{0x339C, 0x876F}, - {0x339D, 0x8770},{0x339E, 0x8771},{0x33A1, 0x8775},{0x33C4, 0x8774},{0x33CD, 0x8783},{0x4E00, 0x88EA},{0x4E01, 0x929A},{0x4E03, 0x8EB5}, - {0x4E07, 0x969C},{0x4E08, 0x8FE4},{0x4E09, 0x8E4F},{0x4E0A, 0x8FE3},{0x4E0B, 0x89BA},{0x4E0D, 0x9573},{0x4E0E, 0x975E},{0x4E10, 0x98A0}, - {0x4E11, 0x894E},{0x4E14, 0x8A8E},{0x4E15, 0x98A1},{0x4E16, 0x90A2},{0x4E17, 0x99C0},{0x4E18, 0x8B75},{0x4E19, 0x95B8},{0x4E1E, 0x8FE5}, - {0x4E21, 0x97BC},{0x4E26, 0x95C0},{0x4E28, 0xED4C},{0x4E2A, 0x98A2},{0x4E2D, 0x9286},{0x4E31, 0x98A3},{0x4E32, 0x8BF8},{0x4E36, 0x98A4}, - {0x4E38, 0x8ADB},{0x4E39, 0x924F},{0x4E3B, 0x8EE5},{0x4E3C, 0x98A5},{0x4E3F, 0x98A6},{0x4E42, 0x98A7},{0x4E43, 0x9454},{0x4E45, 0x8B76}, - {0x4E4B, 0x9456},{0x4E4D, 0x93E1},{0x4E4E, 0x8CC1},{0x4E4F, 0x9652},{0x4E55, 0xE568},{0x4E56, 0x98A8},{0x4E57, 0x8FE6},{0x4E58, 0x98A9}, - {0x4E59, 0x89B3},{0x4E5D, 0x8BE3},{0x4E5E, 0x8CEE},{0x4E5F, 0x96E7},{0x4E62, 0x9BA4},{0x4E71, 0x9790},{0x4E73, 0x93FB},{0x4E7E, 0x8AA3}, - {0x4E80, 0x8B54},{0x4E82, 0x98AA},{0x4E85, 0x98AB},{0x4E86, 0x97B9},{0x4E88, 0x975C},{0x4E89, 0x9188},{0x4E8A, 0x98AD},{0x4E8B, 0x8E96}, - {0x4E8C, 0x93F1},{0x4E8E, 0x98B0},{0x4E91, 0x895D},{0x4E92, 0x8CDD},{0x4E94, 0x8CDC},{0x4E95, 0x88E4},{0x4E98, 0x986A},{0x4E99, 0x9869}, - {0x4E9B, 0x8DB1},{0x4E9C, 0x889F},{0x4E9E, 0x98B1},{0x4E9F, 0x98B2},{0x4EA0, 0x98B3},{0x4EA1, 0x9653},{0x4EA2, 0x98B4},{0x4EA4, 0x8CF0}, - {0x4EA5, 0x88E5},{0x4EA6, 0x9692},{0x4EA8, 0x8B9C},{0x4EAB, 0x8B9D},{0x4EAC, 0x8B9E},{0x4EAD, 0x92E0},{0x4EAE, 0x97BA},{0x4EB0, 0x98B5}, - {0x4EB3, 0x98B6},{0x4EB6, 0x98B7},{0x4EBA, 0x906C},{0x4EC0, 0x8F59},{0x4EC1, 0x906D},{0x4EC2, 0x98BC},{0x4EC4, 0x98BA},{0x4EC6, 0x98BB}, - {0x4EC7, 0x8B77},{0x4ECA, 0x8DA1},{0x4ECB, 0x89EE},{0x4ECD, 0x98B9},{0x4ECE, 0x98B8},{0x4ECF, 0x95A7},{0x4ED4, 0x8E65},{0x4ED5, 0x8E64}, - {0x4ED6, 0x91BC},{0x4ED7, 0x98BD},{0x4ED8, 0x9574},{0x4ED9, 0x90E5},{0x4EDD, 0x8157},{0x4EDE, 0x98BE},{0x4EDF, 0x98C0},{0x4EE1, 0xED4D}, - {0x4EE3, 0x91E3},{0x4EE4, 0x97DF},{0x4EE5, 0x88C8},{0x4EED, 0x98BF},{0x4EEE, 0x89BC},{0x4EF0, 0x8BC2},{0x4EF2, 0x9287},{0x4EF6, 0x8C8F}, - {0x4EF7, 0x98C1},{0x4EFB, 0x9443},{0x4EFC, 0xED4E},{0x4F00, 0xED4F},{0x4F01, 0x8AE9},{0x4F03, 0xED50},{0x4F09, 0x98C2},{0x4F0A, 0x88C9}, - {0x4F0D, 0x8CDE},{0x4F0E, 0x8AEA},{0x4F0F, 0x959A},{0x4F10, 0x94B0},{0x4F11, 0x8B78},{0x4F1A, 0x89EF},{0x4F1C, 0x98E5},{0x4F1D, 0x9360}, - {0x4F2F, 0x948C},{0x4F30, 0x98C4},{0x4F34, 0x94BA},{0x4F36, 0x97E0},{0x4F38, 0x904C},{0x4F39, 0xED51},{0x4F3A, 0x8E66},{0x4F3C, 0x8E97}, - {0x4F3D, 0x89BE},{0x4F43, 0x92CF},{0x4F46, 0x9241},{0x4F47, 0x98C8},{0x4F4D, 0x88CA},{0x4F4E, 0x92E1},{0x4F4F, 0x8F5A},{0x4F50, 0x8DB2}, - {0x4F51, 0x9743},{0x4F53, 0x91CC},{0x4F55, 0x89BD},{0x4F56, 0xED52},{0x4F57, 0x98C7},{0x4F59, 0x975D},{0x4F5A, 0x98C3},{0x4F5B, 0x98C5}, - {0x4F5C, 0x8DEC},{0x4F5D, 0x98C6},{0x4F5E, 0x9B43},{0x4F69, 0x98CE},{0x4F6F, 0x98D1},{0x4F70, 0x98CF},{0x4F73, 0x89C0},{0x4F75, 0x95B9}, - {0x4F76, 0x98C9},{0x4F7B, 0x98CD},{0x4F7C, 0x8CF1},{0x4F7F, 0x8E67},{0x4F83, 0x8AA4},{0x4F86, 0x98D2},{0x4F88, 0x98CA},{0x4F8A, 0xED54}, - {0x4F8B, 0x97E1},{0x4F8D, 0x8E98},{0x4F8F, 0x98CB},{0x4F91, 0x98D0},{0x4F92, 0xED53},{0x4F94, 0xED56},{0x4F96, 0x98D3},{0x4F98, 0x98CC}, - {0x4F9A, 0xED55},{0x4F9B, 0x8B9F},{0x4F9D, 0x88CB},{0x4FA0, 0x8BA0},{0x4FA1, 0x89BF},{0x4FAB, 0x9B44},{0x4FAD, 0x9699},{0x4FAE, 0x958E}, - {0x4FAF, 0x8CF2},{0x4FB5, 0x904E},{0x4FB6, 0x97B5},{0x4FBF, 0x95D6},{0x4FC2, 0x8C57},{0x4FC3, 0x91A3},{0x4FC4, 0x89E2},{0x4FC9, 0xED45}, - {0x4FCA, 0x8F72},{0x4FCD, 0xED57},{0x4FCE, 0x98D7},{0x4FD0, 0x98DC},{0x4FD1, 0x98DA},{0x4FD4, 0x98D5},{0x4FD7, 0x91AD},{0x4FD8, 0x98D8}, - {0x4FDA, 0x98DB},{0x4FDB, 0x98D9},{0x4FDD, 0x95DB},{0x4FDF, 0x98D6},{0x4FE1, 0x904D},{0x4FE3, 0x9693},{0x4FE4, 0x98DD},{0x4FE5, 0x98DE}, - {0x4FEE, 0x8F43},{0x4FEF, 0x98EB},{0x4FF3, 0x946F},{0x4FF5, 0x9555},{0x4FF6, 0x98E6},{0x4FF8, 0x95EE},{0x4FFA, 0x89B4},{0x4FFE, 0x98EA}, - {0x4FFF, 0xED5A},{0x5005, 0x98E4},{0x5006, 0x98ED},{0x5009, 0x9171},{0x500B, 0x8CC2},{0x500D, 0x947B},{0x500F, 0xE0C5},{0x5011, 0x98EC}, - {0x5012, 0x937C},{0x5014, 0x98E1},{0x5016, 0x8CF4},{0x5019, 0x8CF3},{0x501A, 0x98DF},{0x501E, 0xED5B},{0x501F, 0x8ED8},{0x5021, 0x98E7}, - {0x5022, 0xED59},{0x5023, 0x95ED},{0x5024, 0x926C},{0x5025, 0x98E3},{0x5026, 0x8C91},{0x5028, 0x98E0},{0x5029, 0x98E8},{0x502A, 0x98E2}, - {0x502B, 0x97CF},{0x502C, 0x98E9},{0x502D, 0x9860},{0x5036, 0x8BE4},{0x5039, 0x8C90},{0x5040, 0xED58},{0x5042, 0xED5E},{0x5043, 0x98EE}, - {0x5046, 0xED5C},{0x5047, 0x98EF},{0x5048, 0x98F3},{0x5049, 0x88CC},{0x504F, 0x95CE},{0x5050, 0x98F2},{0x5055, 0x98F1},{0x5056, 0x98F5}, - {0x505A, 0x98F4},{0x505C, 0x92E2},{0x5065, 0x8C92},{0x506C, 0x98F6},{0x5070, 0xED5D},{0x5072, 0x8EC3},{0x5074, 0x91A4},{0x5075, 0x92E3}, - {0x5076, 0x8BF4},{0x5078, 0x98F7},{0x507D, 0x8B55},{0x5080, 0x98F8},{0x5085, 0x98FA},{0x508D, 0x9654},{0x5091, 0x8C86},{0x5094, 0xED5F}, - {0x5098, 0x8E50},{0x5099, 0x94F5},{0x509A, 0x98F9},{0x50AC, 0x8DC3},{0x50AD, 0x9762},{0x50B2, 0x98FC},{0x50B3, 0x9942},{0x50B4, 0x98FB}, - {0x50B5, 0x8DC2},{0x50B7, 0x8F9D},{0x50BE, 0x8C58},{0x50C2, 0x9943},{0x50C5, 0x8BCD},{0x50C9, 0x9940},{0x50CA, 0x9941},{0x50CD, 0x93AD}, - {0x50CF, 0x919C},{0x50D1, 0x8BA1},{0x50D5, 0x966C},{0x50D6, 0x9944},{0x50D8, 0xED61},{0x50DA, 0x97BB},{0x50DE, 0x9945},{0x50E3, 0x9948}, - {0x50E5, 0x9946},{0x50E7, 0x916D},{0x50ED, 0x9947},{0x50EE, 0x9949},{0x50F4, 0xED60},{0x50F5, 0x994B},{0x50F9, 0x994A},{0x50FB, 0x95C6}, - {0x5100, 0x8B56},{0x5101, 0x994D},{0x5102, 0x994E},{0x5104, 0x89AD},{0x5109, 0x994C},{0x5112, 0x8EF2},{0x5114, 0x9951},{0x5115, 0x9950}, - {0x5116, 0x994F},{0x5118, 0x98D4},{0x511A, 0x9952},{0x511F, 0x8F9E},{0x5121, 0x9953},{0x512A, 0x9744},{0x5132, 0x96D7},{0x5137, 0x9955}, - {0x513A, 0x9954},{0x513B, 0x9957},{0x513C, 0x9956},{0x513F, 0x9958},{0x5140, 0x9959},{0x5141, 0x88F2},{0x5143, 0x8CB3},{0x5144, 0x8C5A}, - {0x5145, 0x8F5B},{0x5146, 0x929B},{0x5147, 0x8BA2},{0x5148, 0x90E6},{0x5149, 0x8CF5},{0x514A, 0xED62},{0x514B, 0x8D8E},{0x514C, 0x995B}, - {0x514D, 0x96C6},{0x514E, 0x9365},{0x5150, 0x8E99},{0x5152, 0x995A},{0x5154, 0x995C},{0x515A, 0x937D},{0x515C, 0x8A95},{0x5162, 0x995D}, - {0x5164, 0xED63},{0x5165, 0x93FC},{0x5168, 0x9153},{0x5169, 0x995F},{0x516A, 0x9960},{0x516B, 0x94AA},{0x516C, 0x8CF6},{0x516D, 0x985A}, - {0x516E, 0x9961},{0x5171, 0x8BA4},{0x5175, 0x95BA},{0x5176, 0x91B4},{0x5177, 0x8BEF},{0x5178, 0x9354},{0x517C, 0x8C93},{0x5180, 0x9962}, - {0x5182, 0x9963},{0x5185, 0x93E0},{0x5186, 0x897E},{0x5189, 0x9966},{0x518A, 0x8DFB},{0x518C, 0x9965},{0x518D, 0x8DC4},{0x518F, 0x9967}, - {0x5190, 0xE3EC},{0x5191, 0x9968},{0x5192, 0x9660},{0x5193, 0x9969},{0x5195, 0x996A},{0x5196, 0x996B},{0x5197, 0x8FE7},{0x5199, 0x8ECA}, - {0x519D, 0xED64},{0x51A0, 0x8AA5},{0x51A2, 0x996E},{0x51A4, 0x996C},{0x51A5, 0x96BB},{0x51A6, 0x996D},{0x51A8, 0x9579},{0x51A9, 0x996F}, - {0x51AA, 0x9970},{0x51AB, 0x9971},{0x51AC, 0x937E},{0x51B0, 0x9975},{0x51B1, 0x9973},{0x51B2, 0x9974},{0x51B3, 0x9972},{0x51B4, 0x8DE1}, - {0x51B5, 0x9976},{0x51B6, 0x96E8},{0x51B7, 0x97E2},{0x51BD, 0x9977},{0x51BE, 0xED65},{0x51C4, 0x90A6},{0x51C5, 0x9978},{0x51C6, 0x8F79}, - {0x51C9, 0x9979},{0x51CB, 0x929C},{0x51CC, 0x97BD},{0x51CD, 0x9380},{0x51D6, 0x99C3},{0x51DB, 0x997A},{0x51DC, 0xEAA3},{0x51DD, 0x8BC3}, - {0x51E0, 0x997B},{0x51E1, 0x967D},{0x51E6, 0x8F88},{0x51E7, 0x91FA},{0x51E9, 0x997D},{0x51EA, 0x93E2},{0x51EC, 0xED66},{0x51ED, 0x997E}, - {0x51F0, 0x9980},{0x51F1, 0x8A4D},{0x51F5, 0x9981},{0x51F6, 0x8BA5},{0x51F8, 0x93CA},{0x51F9, 0x899A},{0x51FA, 0x8F6F},{0x51FD, 0x949F}, - {0x51FE, 0x9982},{0x5200, 0x9381},{0x5203, 0x906E},{0x5204, 0x9983},{0x5206, 0x95AA},{0x5207, 0x90D8},{0x5208, 0x8AA0},{0x520A, 0x8AA7}, - {0x520B, 0x9984},{0x520E, 0x9986},{0x5211, 0x8C59},{0x5214, 0x9985},{0x5215, 0xED67},{0x5217, 0x97F1},{0x521D, 0x8F89},{0x5224, 0x94BB}, - {0x5225, 0x95CA},{0x5227, 0x9987},{0x5229, 0x9798},{0x522A, 0x9988},{0x522E, 0x9989},{0x5230, 0x939E},{0x5233, 0x998A},{0x5236, 0x90A7}, - {0x5237, 0x8DFC},{0x5238, 0x8C94},{0x5239, 0x998B},{0x523A, 0x8E68},{0x523B, 0x8D8F},{0x5243, 0x92E4},{0x5244, 0x998D},{0x5247, 0x91A5}, - {0x524A, 0x8DED},{0x524B, 0x998E},{0x524C, 0x998F},{0x524D, 0x914F},{0x524F, 0x998C},{0x5254, 0x9991},{0x5256, 0x9655},{0x525B, 0x8D84}, - {0x525E, 0x9990},{0x5263, 0x8C95},{0x5264, 0x8DDC},{0x5265, 0x948D},{0x5269, 0x9994},{0x526A, 0x9992},{0x526F, 0x959B},{0x5270, 0x8FE8}, - {0x5271, 0x999B},{0x5272, 0x8A84},{0x5273, 0x9995},{0x5274, 0x9993},{0x5275, 0x916E},{0x527D, 0x9997},{0x527F, 0x9996},{0x5283, 0x8A63}, - {0x5287, 0x8C80},{0x5288, 0x999C},{0x5289, 0x97AB},{0x528D, 0x9998},{0x5291, 0x999D},{0x5292, 0x999A},{0x5294, 0x9999},{0x529B, 0x97CD}, - {0x529C, 0xED68},{0x529F, 0x8CF7},{0x52A0, 0x89C1},{0x52A3, 0x97F2},{0x52A6, 0xED69},{0x52A9, 0x8F95},{0x52AA, 0x9377},{0x52AB, 0x8D85}, - {0x52AC, 0x99A0},{0x52AD, 0x99A1},{0x52AF, 0xEE5B},{0x52B1, 0x97E3},{0x52B4, 0x984A},{0x52B5, 0x99A3},{0x52B9, 0x8CF8},{0x52BC, 0x99A2}, - {0x52BE, 0x8A4E},{0x52C0, 0xED6A},{0x52C1, 0x99A4},{0x52C3, 0x9675},{0x52C5, 0x92BA},{0x52C7, 0x9745},{0x52C9, 0x95D7},{0x52CD, 0x99A5}, - {0x52D2, 0xE8D3},{0x52D5, 0x93AE},{0x52D7, 0x99A6},{0x52D8, 0x8AA8},{0x52D9, 0x96B1},{0x52DB, 0xED6B},{0x52DD, 0x8F9F},{0x52DE, 0x99A7}, - {0x52DF, 0x95E5},{0x52E0, 0x99AB},{0x52E2, 0x90A8},{0x52E3, 0x99A8},{0x52E4, 0x8BCE},{0x52E6, 0x99A9},{0x52E7, 0x8AA9},{0x52F2, 0x8C4D}, - {0x52F3, 0x99AC},{0x52F5, 0x99AD},{0x52F8, 0x99AE},{0x52F9, 0x99AF},{0x52FA, 0x8ED9},{0x52FE, 0x8CF9},{0x52FF, 0x96DC},{0x5300, 0xED6C}, - {0x5301, 0x96E6},{0x5302, 0x93F5},{0x5305, 0x95EF},{0x5306, 0x99B0},{0x5307, 0xED6D},{0x5308, 0x99B1},{0x530D, 0x99B3},{0x530F, 0x99B5}, - {0x5310, 0x99B4},{0x5315, 0x99B6},{0x5316, 0x89BB},{0x5317, 0x966B},{0x5319, 0x8DFA},{0x531A, 0x99B7},{0x531D, 0x9178},{0x5320, 0x8FA0}, - {0x5321, 0x8BA7},{0x5323, 0x99B8},{0x5324, 0xED6E},{0x532A, 0x94D9},{0x532F, 0x99B9},{0x5331, 0x99BA},{0x5333, 0x99BB},{0x5338, 0x99BC}, - {0x5339, 0x9543},{0x533A, 0x8BE6},{0x533B, 0x88E3},{0x533F, 0x93BD},{0x5340, 0x99BD},{0x5341, 0x8F5C},{0x5343, 0x90E7},{0x5345, 0x99BF}, - {0x5346, 0x99BE},{0x5347, 0x8FA1},{0x5348, 0x8CDF},{0x5349, 0x99C1},{0x534A, 0x94BC},{0x534D, 0x99C2},{0x5351, 0x94DA},{0x5352, 0x91B2}, - {0x5353, 0x91EC},{0x5354, 0x8BA6},{0x5357, 0x93EC},{0x5358, 0x9250},{0x535A, 0x948E},{0x535C, 0x966D},{0x535E, 0x99C4},{0x5360, 0x90E8}, - {0x5366, 0x8C54},{0x5369, 0x99C5},{0x536E, 0x99C6},{0x536F, 0x894B},{0x5370, 0x88F3},{0x5371, 0x8AEB},{0x5372, 0xED6F},{0x5373, 0x91A6}, - {0x5374, 0x8B70},{0x5375, 0x9791},{0x5377, 0x99C9},{0x5378, 0x89B5},{0x537B, 0x99C8},{0x537F, 0x8BA8},{0x5382, 0x99CA},{0x5384, 0x96EF}, - {0x5393, 0xED70},{0x5396, 0x99CB},{0x5398, 0x97D0},{0x539A, 0x8CFA},{0x539F, 0x8CB4},{0x53A0, 0x99CC},{0x53A5, 0x99CE},{0x53A6, 0x99CD}, - {0x53A8, 0x907E},{0x53A9, 0x8958},{0x53AD, 0x897D},{0x53AE, 0x99CF},{0x53B0, 0x99D0},{0x53B2, 0xED71},{0x53B3, 0x8CB5},{0x53B6, 0x99D1}, - {0x53BB, 0x8B8E},{0x53C2, 0x8E51},{0x53C3, 0x99D2},{0x53C8, 0x9694},{0x53C9, 0x8DB3},{0x53CA, 0x8B79},{0x53CB, 0x9746},{0x53CC, 0x916F}, - {0x53CD, 0x94BD},{0x53CE, 0x8EFB},{0x53D4, 0x8F66},{0x53D6, 0x8EE6},{0x53D7, 0x8EF3},{0x53D9, 0x8F96},{0x53DB, 0x94BE},{0x53DD, 0xED72}, - {0x53DF, 0x99D5},{0x53E1, 0x8962},{0x53E2, 0x9170},{0x53E3, 0x8CFB},{0x53E4, 0x8CC3},{0x53E5, 0x8BE5},{0x53E8, 0x99D9},{0x53E9, 0x9240}, - {0x53EA, 0x91FC},{0x53EB, 0x8BA9},{0x53EC, 0x8FA2},{0x53ED, 0x99DA},{0x53EE, 0x99D8},{0x53EF, 0x89C2},{0x53F0, 0x91E4},{0x53F1, 0x8EB6}, - {0x53F2, 0x8E6A},{0x53F3, 0x8945},{0x53F6, 0x8A90},{0x53F7, 0x8D86},{0x53F8, 0x8E69},{0x53FA, 0x99DB},{0x5401, 0x99DC},{0x5403, 0x8B68}, - {0x5404, 0x8A65},{0x5408, 0x8D87},{0x5409, 0x8B67},{0x540A, 0x92DD},{0x540B, 0x8944},{0x540C, 0x93AF},{0x540D, 0x96BC},{0x540E, 0x8D40}, - {0x540F, 0x9799},{0x5410, 0x9366},{0x5411, 0x8CFC},{0x541B, 0x8C4E},{0x541D, 0x99E5},{0x541F, 0x8BE1},{0x5420, 0x9669},{0x5426, 0x94DB}, - {0x5429, 0x99E4},{0x542B, 0x8ADC},{0x542C, 0x99DF},{0x542D, 0x99E0},{0x542E, 0x99E2},{0x5436, 0x99E3},{0x5438, 0x8B7A},{0x5439, 0x9081}, - {0x543B, 0x95AB},{0x543C, 0x99E1},{0x543D, 0x99DD},{0x543E, 0x8CE1},{0x5440, 0x99DE},{0x5442, 0x9843},{0x5446, 0x95F0},{0x5448, 0x92E6}, - {0x5449, 0x8CE0},{0x544A, 0x8D90},{0x544E, 0x99E6},{0x5451, 0x93DB},{0x545F, 0x99EA},{0x5468, 0x8EFC},{0x546A, 0x8EF4},{0x5470, 0x99ED}, - {0x5471, 0x99EB},{0x5473, 0x96A1},{0x5475, 0x99E8},{0x5476, 0x99F1},{0x5477, 0x99EC},{0x547B, 0x99EF},{0x547C, 0x8CC4},{0x547D, 0x96BD}, - {0x5480, 0x99F0},{0x5484, 0x99F2},{0x5486, 0x99F4},{0x548A, 0xED75},{0x548B, 0x8DEE},{0x548C, 0x9861},{0x548E, 0x99E9},{0x548F, 0x99E7}, - {0x5490, 0x99F3},{0x5492, 0x99EE},{0x549C, 0xED74},{0x54A2, 0x99F6},{0x54A4, 0x9A42},{0x54A5, 0x99F8},{0x54A8, 0x99FC},{0x54A9, 0xED76}, - {0x54AB, 0x9A40},{0x54AC, 0x99F9},{0x54AF, 0x9A5D},{0x54B2, 0x8DE7},{0x54B3, 0x8A50},{0x54B8, 0x99F7},{0x54BC, 0x9A44},{0x54BD, 0x88F4}, - {0x54BE, 0x9A43},{0x54C0, 0x88A3},{0x54C1, 0x9569},{0x54C2, 0x9A41},{0x54C4, 0x99FA},{0x54C7, 0x99F5},{0x54C8, 0x99FB},{0x54C9, 0x8DC6}, - {0x54D8, 0x9A45},{0x54E1, 0x88F5},{0x54E2, 0x9A4E},{0x54E5, 0x9A46},{0x54E6, 0x9A47},{0x54E8, 0x8FA3},{0x54E9, 0x9689},{0x54ED, 0x9A4C}, - {0x54EE, 0x9A4B},{0x54F2, 0x934E},{0x54FA, 0x9A4D},{0x54FD, 0x9A4A},{0x54FF, 0xED77},{0x5504, 0x8953},{0x5506, 0x8DB4},{0x5507, 0x904F}, - {0x550F, 0x9A48},{0x5510, 0x9382},{0x5514, 0x9A49},{0x5516, 0x88A0},{0x552E, 0x9A53},{0x552F, 0x9742},{0x5531, 0x8FA5},{0x5533, 0x9A59}, - {0x5538, 0x9A58},{0x5539, 0x9A4F},{0x553E, 0x91C1},{0x5540, 0x9A50},{0x5544, 0x91ED},{0x5545, 0x9A55},{0x5546, 0x8FA4},{0x554C, 0x9A52}, - {0x554F, 0x96E2},{0x5553, 0x8C5B},{0x5556, 0x9A56},{0x5557, 0x9A57},{0x555C, 0x9A54},{0x555D, 0x9A5A},{0x5563, 0x9A51},{0x557B, 0x9A60}, - {0x557C, 0x9A65},{0x557E, 0x9A61},{0x5580, 0x9A5C},{0x5583, 0x9A66},{0x5584, 0x9150},{0x5586, 0xED78},{0x5587, 0x9A68},{0x5589, 0x8D41}, - {0x558A, 0x9A5E},{0x558B, 0x929D},{0x5598, 0x9A62},{0x5599, 0x9A5B},{0x559A, 0x8AAB},{0x559C, 0x8AEC},{0x559D, 0x8A85},{0x559E, 0x9A63}, - {0x559F, 0x9A5F},{0x55A7, 0x8C96},{0x55A8, 0x9A69},{0x55A9, 0x9A67},{0x55AA, 0x9172},{0x55AB, 0x8B69},{0x55AC, 0x8BAA},{0x55AE, 0x9A64}, - {0x55B0, 0x8BF2},{0x55B6, 0x8963},{0x55C4, 0x9A6D},{0x55C5, 0x9A6B},{0x55C7, 0x9AA5},{0x55D4, 0x9A70},{0x55DA, 0x9A6A},{0x55DC, 0x9A6E}, - {0x55DF, 0x9A6C},{0x55E3, 0x8E6B},{0x55E4, 0x9A6F},{0x55F7, 0x9A72},{0x55F9, 0x9A77},{0x55FD, 0x9A75},{0x55FE, 0x9A74},{0x5606, 0x9251}, - {0x5609, 0x89C3},{0x5614, 0x9A71},{0x5616, 0x9A73},{0x5617, 0x8FA6},{0x5618, 0x8952},{0x561B, 0x9A76},{0x5629, 0x89DC},{0x562F, 0x9A82}, - {0x5631, 0x8FFA},{0x5632, 0x9A7D},{0x5634, 0x9A7B},{0x5636, 0x9A7C},{0x5638, 0x9A7E},{0x5642, 0x895C},{0x564C, 0x9158},{0x564E, 0x9A78}, - {0x5650, 0x9A79},{0x565B, 0x8A9A},{0x5664, 0x9A81},{0x5668, 0x8AED},{0x566A, 0x9A84},{0x566B, 0x9A80},{0x566C, 0x9A83},{0x5674, 0x95AC}, - {0x5678, 0x93D3},{0x567A, 0x94B6},{0x5680, 0x9A86},{0x5686, 0x9A85},{0x5687, 0x8A64},{0x568A, 0x9A87},{0x568F, 0x9A8A},{0x5694, 0x9A89}, - {0x56A0, 0x9A88},{0x56A2, 0x9458},{0x56A5, 0x9A8B},{0x56AE, 0x9A8C},{0x56B4, 0x9A8E},{0x56B6, 0x9A8D},{0x56BC, 0x9A90},{0x56C0, 0x9A93}, - {0x56C1, 0x9A91},{0x56C2, 0x9A8F},{0x56C3, 0x9A92},{0x56C8, 0x9A94},{0x56CE, 0x9A95},{0x56D1, 0x9A96},{0x56D3, 0x9A97},{0x56D7, 0x9A98}, - {0x56D8, 0x9964},{0x56DA, 0x8EFA},{0x56DB, 0x8E6C},{0x56DE, 0x89F1},{0x56E0, 0x88F6},{0x56E3, 0x9263},{0x56EE, 0x9A99},{0x56F0, 0x8DA2}, - {0x56F2, 0x88CD},{0x56F3, 0x907D},{0x56F9, 0x9A9A},{0x56FA, 0x8CC5},{0x56FD, 0x8D91},{0x56FF, 0x9A9C},{0x5700, 0x9A9B},{0x5703, 0x95DE}, - {0x5704, 0x9A9D},{0x5708, 0x9A9F},{0x5709, 0x9A9E},{0x570B, 0x9AA0},{0x570D, 0x9AA1},{0x570F, 0x8C97},{0x5712, 0x8980},{0x5713, 0x9AA2}, - {0x5716, 0x9AA4},{0x5718, 0x9AA3},{0x571C, 0x9AA6},{0x571F, 0x9379},{0x5726, 0x9AA7},{0x5727, 0x88B3},{0x5728, 0x8DDD},{0x572D, 0x8C5C}, - {0x5730, 0x926E},{0x5737, 0x9AA8},{0x5738, 0x9AA9},{0x573B, 0x9AAB},{0x5740, 0x9AAC},{0x5742, 0x8DE2},{0x5747, 0x8BCF},{0x574A, 0x9656}, - {0x574E, 0x9AAA},{0x574F, 0x9AAD},{0x5750, 0x8DBF},{0x5751, 0x8D42},{0x5759, 0xED79},{0x5761, 0x9AB1},{0x5764, 0x8DA3},{0x5765, 0xED7A}, - {0x5766, 0x9252},{0x5769, 0x9AAE},{0x576A, 0x92D8},{0x577F, 0x9AB2},{0x5782, 0x9082},{0x5788, 0x9AB0},{0x5789, 0x9AB3},{0x578B, 0x8C5E}, - {0x5793, 0x9AB4},{0x57A0, 0x9AB5},{0x57A2, 0x8D43},{0x57A3, 0x8A5F},{0x57A4, 0x9AB7},{0x57AA, 0x9AB8},{0x57AC, 0xED7B},{0x57B0, 0x9AB9}, - {0x57B3, 0x9AB6},{0x57C0, 0x9AAF},{0x57C3, 0x9ABA},{0x57C6, 0x9ABB},{0x57C7, 0xED7D},{0x57C8, 0xED7C},{0x57CB, 0x9684},{0x57CE, 0x8FE9}, - {0x57D2, 0x9ABD},{0x57D3, 0x9ABE},{0x57D4, 0x9ABC},{0x57D6, 0x9AC0},{0x57DC, 0x9457},{0x57DF, 0x88E6},{0x57E0, 0x9575},{0x57E3, 0x9AC1}, - {0x57F4, 0x8FFB},{0x57F7, 0x8EB7},{0x57F9, 0x947C},{0x57FA, 0x8AEE},{0x57FC, 0x8DE9},{0x5800, 0x9678},{0x5802, 0x93B0},{0x5805, 0x8C98}, - {0x5806, 0x91CD},{0x580A, 0x9ABF},{0x580B, 0x9AC2},{0x5815, 0x91C2},{0x5819, 0x9AC3},{0x581D, 0x9AC4},{0x5821, 0x9AC6},{0x5824, 0x92E7}, - {0x582A, 0x8AAC},{0x582F, 0xEA9F},{0x5830, 0x8981},{0x5831, 0x95F1},{0x5834, 0x8FEA},{0x5835, 0x9367},{0x583A, 0x8DE4},{0x583D, 0x9ACC}, - {0x5840, 0x95BB},{0x5841, 0x97DB},{0x584A, 0x89F2},{0x584B, 0x9AC8},{0x5851, 0x9159},{0x5852, 0x9ACB},{0x5854, 0x9383},{0x5857, 0x9368}, - {0x5858, 0x9384},{0x5859, 0x94B7},{0x585A, 0x92CB},{0x585E, 0x8DC7},{0x5862, 0x9AC7},{0x5869, 0x8996},{0x586B, 0x9355},{0x5870, 0x9AC9}, - {0x5872, 0x9AC5},{0x5875, 0x906F},{0x5879, 0x9ACD},{0x587E, 0x8F6D},{0x5883, 0x8BAB},{0x5885, 0x9ACE},{0x5893, 0x95E6},{0x5897, 0x919D}, - {0x589C, 0x92C4},{0x589E, 0xED81},{0x589F, 0x9AD0},{0x58A8, 0x966E},{0x58AB, 0x9AD1},{0x58AE, 0x9AD6},{0x58B2, 0xED82},{0x58B3, 0x95AD}, - {0x58B8, 0x9AD5},{0x58B9, 0x9ACF},{0x58BA, 0x9AD2},{0x58BB, 0x9AD4},{0x58BE, 0x8DA4},{0x58C1, 0x95C7},{0x58C5, 0x9AD7},{0x58C7, 0x9264}, - {0x58CA, 0x89F3},{0x58CC, 0x8FEB},{0x58D1, 0x9AD9},{0x58D3, 0x9AD8},{0x58D5, 0x8D88},{0x58D7, 0x9ADA},{0x58D8, 0x9ADC},{0x58D9, 0x9ADB}, - {0x58DC, 0x9ADE},{0x58DE, 0x9AD3},{0x58DF, 0x9AE0},{0x58E4, 0x9ADF},{0x58E5, 0x9ADD},{0x58EB, 0x8E6D},{0x58EC, 0x9070},{0x58EE, 0x9173}, - {0x58EF, 0x9AE1},{0x58F0, 0x90BA},{0x58F1, 0x88EB},{0x58F2, 0x9484},{0x58F7, 0x92D9},{0x58F9, 0x9AE3},{0x58FA, 0x9AE2},{0x58FB, 0x9AE4}, - {0x58FC, 0x9AE5},{0x58FD, 0x9AE6},{0x5902, 0x9AE7},{0x5909, 0x95CF},{0x590A, 0x9AE8},{0x590B, 0xED83},{0x590F, 0x89C4},{0x5910, 0x9AE9}, - {0x5915, 0x975B},{0x5916, 0x8A4F},{0x5918, 0x99C7},{0x5919, 0x8F67},{0x591A, 0x91BD},{0x591B, 0x9AEA},{0x591C, 0x96E9},{0x5922, 0x96B2}, - {0x5925, 0x9AEC},{0x5927, 0x91E5},{0x5929, 0x9356},{0x592A, 0x91BE},{0x592B, 0x9576},{0x592C, 0x9AED},{0x592D, 0x9AEE},{0x592E, 0x899B}, - {0x5931, 0x8EB8},{0x5932, 0x9AEF},{0x5937, 0x88CE},{0x5938, 0x9AF0},{0x593E, 0x9AF1},{0x5944, 0x8982},{0x5947, 0x8AEF},{0x5948, 0x93DE}, - {0x5949, 0x95F2},{0x594E, 0x9AF5},{0x594F, 0x9174},{0x5950, 0x9AF4},{0x5951, 0x8C5F},{0x5953, 0xED84},{0x5954, 0x967A},{0x5955, 0x9AF3}, - {0x5957, 0x9385},{0x5958, 0x9AF7},{0x595A, 0x9AF6},{0x595B, 0xED85},{0x595D, 0xED86},{0x5960, 0x9AF9},{0x5962, 0x9AF8},{0x5963, 0xED87}, - {0x5965, 0x899C},{0x5967, 0x9AFA},{0x5968, 0x8FA7},{0x5969, 0x9AFC},{0x596A, 0x9244},{0x596C, 0x9AFB},{0x596E, 0x95B1},{0x5973, 0x8F97}, - {0x5974, 0x937A},{0x5978, 0x9B40},{0x597D, 0x8D44},{0x5981, 0x9B41},{0x5982, 0x9440},{0x5983, 0x94DC},{0x5984, 0x96CF},{0x598A, 0x9444}, - {0x598D, 0x9B4A},{0x5993, 0x8B57},{0x5996, 0x9764},{0x5999, 0x96AD},{0x599B, 0x9BAA},{0x599D, 0x9B42},{0x59A3, 0x9B45},{0x59A4, 0xED88}, - {0x59A5, 0x91C3},{0x59A8, 0x9657},{0x59AC, 0x9369},{0x59B2, 0x9B46},{0x59B9, 0x9685},{0x59BA, 0xED89},{0x59BB, 0x8DC8},{0x59BE, 0x8FA8}, - {0x59C6, 0x9B47},{0x59C9, 0x8E6F},{0x59CB, 0x8E6E},{0x59D0, 0x88B7},{0x59D1, 0x8CC6},{0x59D3, 0x90A9},{0x59D4, 0x88CF},{0x59D9, 0x9B4B}, - {0x59DA, 0x9B4C},{0x59DC, 0x9B49},{0x59E5, 0x8957},{0x59E6, 0x8AAD},{0x59E8, 0x9B48},{0x59EA, 0x96C3},{0x59EB, 0x9550},{0x59F6, 0x88A6}, - {0x59FB, 0x88F7},{0x59FF, 0x8E70},{0x5A01, 0x88D0},{0x5A03, 0x88A1},{0x5A09, 0x9B51},{0x5A11, 0x9B4F},{0x5A18, 0x96BA},{0x5A1A, 0x9B52}, - {0x5A1C, 0x9B50},{0x5A1F, 0x9B4E},{0x5A20, 0x9050},{0x5A25, 0x9B4D},{0x5A29, 0x95D8},{0x5A2F, 0x8CE2},{0x5A35, 0x9B56},{0x5A36, 0x9B57}, - {0x5A3C, 0x8FA9},{0x5A40, 0x9B53},{0x5A41, 0x984B},{0x5A46, 0x946B},{0x5A49, 0x9B55},{0x5A5A, 0x8DA5},{0x5A62, 0x9B58},{0x5A66, 0x9577}, - {0x5A6A, 0x9B59},{0x5A6C, 0x9B54},{0x5A7F, 0x96B9},{0x5A92, 0x947D},{0x5A9A, 0x9B5A},{0x5A9B, 0x9551},{0x5ABC, 0x9B5B},{0x5ABD, 0x9B5F}, - {0x5ABE, 0x9B5C},{0x5AC1, 0x89C5},{0x5AC2, 0x9B5E},{0x5AC9, 0x8EB9},{0x5ACB, 0x9B5D},{0x5ACC, 0x8C99},{0x5AD0, 0x9B6B},{0x5AD6, 0x9B64}, - {0x5AD7, 0x9B61},{0x5AE1, 0x9284},{0x5AE3, 0x9B60},{0x5AE6, 0x9B62},{0x5AE9, 0x9B63},{0x5AFA, 0x9B65},{0x5AFB, 0x9B66},{0x5B09, 0x8AF0}, - {0x5B0B, 0x9B68},{0x5B0C, 0x9B67},{0x5B16, 0x9B69},{0x5B22, 0x8FEC},{0x5B2A, 0x9B6C},{0x5B2C, 0x92DA},{0x5B30, 0x8964},{0x5B32, 0x9B6A}, - {0x5B36, 0x9B6D},{0x5B3E, 0x9B6E},{0x5B40, 0x9B71},{0x5B43, 0x9B6F},{0x5B45, 0x9B70},{0x5B50, 0x8E71},{0x5B51, 0x9B72},{0x5B54, 0x8D45}, - {0x5B55, 0x9B73},{0x5B56, 0xED8A},{0x5B57, 0x8E9A},{0x5B58, 0x91B6},{0x5B5A, 0x9B74},{0x5B5B, 0x9B75},{0x5B5C, 0x8E79},{0x5B5D, 0x8D46}, - {0x5B5F, 0x96D0},{0x5B63, 0x8B47},{0x5B64, 0x8CC7},{0x5B65, 0x9B76},{0x5B66, 0x8A77},{0x5B69, 0x9B77},{0x5B6B, 0x91B7},{0x5B70, 0x9B78}, - {0x5B71, 0x9BA1},{0x5B73, 0x9B79},{0x5B75, 0x9B7A},{0x5B78, 0x9B7B},{0x5B7A, 0x9B7D},{0x5B80, 0x9B7E},{0x5B83, 0x9B80},{0x5B85, 0x91EE}, - {0x5B87, 0x8946},{0x5B88, 0x8EE7},{0x5B89, 0x88C0},{0x5B8B, 0x9176},{0x5B8C, 0x8AAE},{0x5B8D, 0x8EB3},{0x5B8F, 0x8D47},{0x5B95, 0x9386}, - {0x5B97, 0x8F40},{0x5B98, 0x8AAF},{0x5B99, 0x9288},{0x5B9A, 0x92E8},{0x5B9B, 0x88B6},{0x5B9C, 0x8B58},{0x5B9D, 0x95F3},{0x5B9F, 0x8EC0}, - {0x5BA2, 0x8B71},{0x5BA3, 0x90E9},{0x5BA4, 0x8EBA},{0x5BA5, 0x9747},{0x5BA6, 0x9B81},{0x5BAE, 0x8B7B},{0x5BB0, 0x8DC9},{0x5BB3, 0x8A51}, - {0x5BB4, 0x8983},{0x5BB5, 0x8FAA},{0x5BB6, 0x89C6},{0x5BB8, 0x9B82},{0x5BB9, 0x9765},{0x5BBF, 0x8F68},{0x5BC0, 0xED8B},{0x5BC2, 0x8EE2}, - {0x5BC3, 0x9B83},{0x5BC4, 0x8AF1},{0x5BC5, 0x93D0},{0x5BC6, 0x96A7},{0x5BC7, 0x9B84},{0x5BC9, 0x9B85},{0x5BCC, 0x9578},{0x5BD0, 0x9B87}, - {0x5BD2, 0x8AA6},{0x5BD3, 0x8BF5},{0x5BD4, 0x9B86},{0x5BD8, 0xED8D},{0x5BDB, 0x8AB0},{0x5BDD, 0x9051},{0x5BDE, 0x9B8B},{0x5BDF, 0x8E40}, - {0x5BE1, 0x89C7},{0x5BE2, 0x9B8A},{0x5BE4, 0x9B88},{0x5BE5, 0x9B8C},{0x5BE6, 0x9B89},{0x5BE7, 0x944A},{0x5BE8, 0x9ECB},{0x5BE9, 0x9052}, - {0x5BEB, 0x9B8D},{0x5BEC, 0xED8E},{0x5BEE, 0x97BE},{0x5BF0, 0x9B8E},{0x5BF3, 0x9B90},{0x5BF5, 0x929E},{0x5BF6, 0x9B8F},{0x5BF8, 0x90A1}, - {0x5BFA, 0x8E9B},{0x5BFE, 0x91CE},{0x5BFF, 0x8EF5},{0x5C01, 0x9595},{0x5C02, 0x90EA},{0x5C04, 0x8ECB},{0x5C05, 0x9B91},{0x5C06, 0x8FAB}, - {0x5C07, 0x9B92},{0x5C08, 0x9B93},{0x5C09, 0x88D1},{0x5C0A, 0x91B8},{0x5C0B, 0x9071},{0x5C0D, 0x9B94},{0x5C0E, 0x93B1},{0x5C0F, 0x8FAC}, - {0x5C11, 0x8FAD},{0x5C13, 0x9B95},{0x5C16, 0x90EB},{0x5C1A, 0x8FAE},{0x5C1E, 0xED8F},{0x5C20, 0x9B96},{0x5C22, 0x9B97},{0x5C24, 0x96DE}, - {0x5C28, 0x9B98},{0x5C2D, 0x8BC4},{0x5C31, 0x8F41},{0x5C38, 0x9B99},{0x5C39, 0x9B9A},{0x5C3A, 0x8EDA},{0x5C3B, 0x904B},{0x5C3C, 0x93F2}, - {0x5C3D, 0x9073},{0x5C3E, 0x94F6},{0x5C3F, 0x9441},{0x5C40, 0x8BC7},{0x5C41, 0x9B9B},{0x5C45, 0x8B8F},{0x5C46, 0x9B9C},{0x5C48, 0x8BFC}, - {0x5C4A, 0x93CD},{0x5C4B, 0x89AE},{0x5C4D, 0x8E72},{0x5C4E, 0x9B9D},{0x5C4F, 0x9BA0},{0x5C50, 0x9B9F},{0x5C51, 0x8BFB},{0x5C53, 0x9B9E}, - {0x5C55, 0x9357},{0x5C5E, 0x91AE},{0x5C60, 0x936A},{0x5C61, 0x8EC6},{0x5C64, 0x9177},{0x5C65, 0x979A},{0x5C6C, 0x9BA2},{0x5C6E, 0x9BA3}, - {0x5C6F, 0x93D4},{0x5C71, 0x8E52},{0x5C76, 0x9BA5},{0x5C79, 0x9BA6},{0x5C8C, 0x9BA7},{0x5C90, 0x8AF2},{0x5C91, 0x9BA8},{0x5C94, 0x9BA9}, - {0x5CA1, 0x89AA},{0x5CA6, 0xED90},{0x5CA8, 0x915A},{0x5CA9, 0x8AE2},{0x5CAB, 0x9BAB},{0x5CAC, 0x96A6},{0x5CB1, 0x91D0},{0x5CB3, 0x8A78}, - {0x5CB6, 0x9BAD},{0x5CB7, 0x9BAF},{0x5CB8, 0x8ADD},{0x5CBA, 0xED91},{0x5CBB, 0x9BAC},{0x5CBC, 0x9BAE},{0x5CBE, 0x9BB1},{0x5CC5, 0x9BB0}, - {0x5CC7, 0x9BB2},{0x5CD9, 0x9BB3},{0x5CE0, 0x93BB},{0x5CE1, 0x8BAC},{0x5CE8, 0x89E3},{0x5CE9, 0x9BB4},{0x5CEA, 0x9BB9},{0x5CED, 0x9BB7}, - {0x5CEF, 0x95F5},{0x5CF0, 0x95F4},{0x5CF5, 0xED92},{0x5CF6, 0x9387},{0x5CFA, 0x9BB6},{0x5CFB, 0x8F73},{0x5CFD, 0x9BB5},{0x5D07, 0x9092}, - {0x5D0B, 0x9BBA},{0x5D0E, 0x8DE8},{0x5D11, 0x9BC0},{0x5D14, 0x9BC1},{0x5D15, 0x9BBB},{0x5D16, 0x8A52},{0x5D17, 0x9BBC},{0x5D18, 0x9BC5}, - {0x5D19, 0x9BC4},{0x5D1A, 0x9BC3},{0x5D1B, 0x9BBF},{0x5D1F, 0x9BBE},{0x5D22, 0x9BC2},{0x5D27, 0xED93},{0x5D29, 0x95F6},{0x5D42, 0xED96}, - {0x5D4B, 0x9BC9},{0x5D4C, 0x9BC6},{0x5D4E, 0x9BC8},{0x5D50, 0x9792},{0x5D52, 0x9BC7},{0x5D53, 0xED94},{0x5D5C, 0x9BBD},{0x5D69, 0x9093}, - {0x5D6C, 0x9BCA},{0x5D6D, 0xED97},{0x5D6F, 0x8DB5},{0x5D73, 0x9BCB},{0x5D76, 0x9BCC},{0x5D82, 0x9BCF},{0x5D84, 0x9BCE},{0x5D87, 0x9BCD}, - {0x5D8B, 0x9388},{0x5D8C, 0x9BB8},{0x5D90, 0x9BD5},{0x5D9D, 0x9BD1},{0x5DA2, 0x9BD0},{0x5DAC, 0x9BD2},{0x5DAE, 0x9BD3},{0x5DB7, 0x9BD6}, - {0x5DB8, 0xED98},{0x5DB9, 0xED99},{0x5DBA, 0x97E4},{0x5DBC, 0x9BD7},{0x5DBD, 0x9BD4},{0x5DC9, 0x9BD8},{0x5DCC, 0x8ADE},{0x5DCD, 0x9BD9}, - {0x5DD0, 0xED9A},{0x5DD2, 0x9BDB},{0x5DD3, 0x9BDA},{0x5DD6, 0x9BDC},{0x5DDB, 0x9BDD},{0x5DDD, 0x90EC},{0x5DDE, 0x8F42},{0x5DE1, 0x8F84}, - {0x5DE3, 0x9183},{0x5DE5, 0x8D48},{0x5DE6, 0x8DB6},{0x5DE7, 0x8D49},{0x5DE8, 0x8B90},{0x5DEB, 0x9BDE},{0x5DEE, 0x8DB7},{0x5DF1, 0x8CC8}, - {0x5DF2, 0x9BDF},{0x5DF3, 0x96A4},{0x5DF4, 0x9462},{0x5DF5, 0x9BE0},{0x5DF7, 0x8D4A},{0x5DFB, 0x8AAA},{0x5DFD, 0x9246},{0x5DFE, 0x8BD0}, - {0x5E02, 0x8E73},{0x5E03, 0x957A},{0x5E06, 0x94BF},{0x5E0B, 0x9BE1},{0x5E0C, 0x8AF3},{0x5E11, 0x9BE4},{0x5E16, 0x929F},{0x5E19, 0x9BE3}, - {0x5E1A, 0x9BE2},{0x5E1B, 0x9BE5},{0x5E1D, 0x92E9},{0x5E25, 0x9083},{0x5E2B, 0x8E74},{0x5E2D, 0x90C8},{0x5E2F, 0x91D1},{0x5E30, 0x8B41}, - {0x5E33, 0x92A0},{0x5E36, 0x9BE6},{0x5E37, 0x9BE7},{0x5E38, 0x8FED},{0x5E3D, 0x9658},{0x5E40, 0x9BEA},{0x5E43, 0x9BE9},{0x5E44, 0x9BE8}, - {0x5E45, 0x959D},{0x5E47, 0x9BF1},{0x5E4C, 0x9679},{0x5E4E, 0x9BEB},{0x5E54, 0x9BED},{0x5E55, 0x968B},{0x5E57, 0x9BEC},{0x5E5F, 0x9BEE}, - {0x5E61, 0x94A6},{0x5E62, 0x9BEF},{0x5E63, 0x95BC},{0x5E64, 0x9BF0},{0x5E72, 0x8AB1},{0x5E73, 0x95BD},{0x5E74, 0x944E},{0x5E75, 0x9BF2}, - {0x5E76, 0x9BF3},{0x5E78, 0x8D4B},{0x5E79, 0x8AB2},{0x5E7A, 0x9BF4},{0x5E7B, 0x8CB6},{0x5E7C, 0x9763},{0x5E7D, 0x9748},{0x5E7E, 0x8AF4}, - {0x5E7F, 0x9BF6},{0x5E81, 0x92A1},{0x5E83, 0x8D4C},{0x5E84, 0x8FAF},{0x5E87, 0x94DD},{0x5E8A, 0x8FB0},{0x5E8F, 0x8F98},{0x5E95, 0x92EA}, - {0x5E96, 0x95F7},{0x5E97, 0x9358},{0x5E9A, 0x8D4D},{0x5E9C, 0x957B},{0x5EA0, 0x9BF7},{0x5EA6, 0x9378},{0x5EA7, 0x8DC0},{0x5EAB, 0x8CC9}, - {0x5EAD, 0x92EB},{0x5EB5, 0x88C1},{0x5EB6, 0x8F8E},{0x5EB7, 0x8D4E},{0x5EB8, 0x9766},{0x5EC1, 0x9BF8},{0x5EC2, 0x9BF9},{0x5EC3, 0x9470}, - {0x5EC8, 0x9BFA},{0x5EC9, 0x97F5},{0x5ECA, 0x984C},{0x5ECF, 0x9BFC},{0x5ED0, 0x9BFB},{0x5ED3, 0x8A66},{0x5ED6, 0x9C40},{0x5EDA, 0x9C43}, - {0x5EDB, 0x9C44},{0x5EDD, 0x9C42},{0x5EDF, 0x955F},{0x5EE0, 0x8FB1},{0x5EE1, 0x9C46},{0x5EE2, 0x9C45},{0x5EE3, 0x9C41},{0x5EE8, 0x9C47}, - {0x5EE9, 0x9C48},{0x5EEC, 0x9C49},{0x5EF0, 0x9C4C},{0x5EF1, 0x9C4A},{0x5EF3, 0x9C4B},{0x5EF4, 0x9C4D},{0x5EF6, 0x8984},{0x5EF7, 0x92EC}, - {0x5EF8, 0x9C4E},{0x5EFA, 0x8C9A},{0x5EFB, 0x89F4},{0x5EFC, 0x9455},{0x5EFE, 0x9C4F},{0x5EFF, 0x93F9},{0x5F01, 0x95D9},{0x5F03, 0x9C50}, - {0x5F04, 0x984D},{0x5F09, 0x9C51},{0x5F0A, 0x95BE},{0x5F0B, 0x9C54},{0x5F0C, 0x989F},{0x5F0D, 0x98AF},{0x5F0F, 0x8EAE},{0x5F10, 0x93F3}, - {0x5F11, 0x9C55},{0x5F13, 0x8B7C},{0x5F14, 0x92A2},{0x5F15, 0x88F8},{0x5F16, 0x9C56},{0x5F17, 0x95A4},{0x5F18, 0x8D4F},{0x5F1B, 0x926F}, - {0x5F1F, 0x92ED},{0x5F21, 0xED9B},{0x5F25, 0x96ED},{0x5F26, 0x8CB7},{0x5F27, 0x8CCA},{0x5F29, 0x9C57},{0x5F2D, 0x9C58},{0x5F2F, 0x9C5E}, - {0x5F31, 0x8EE3},{0x5F34, 0xED9C},{0x5F35, 0x92A3},{0x5F37, 0x8BAD},{0x5F38, 0x9C59},{0x5F3C, 0x954A},{0x5F3E, 0x9265},{0x5F41, 0x9C5A}, - {0x5F45, 0xED4B},{0x5F48, 0x9C5B},{0x5F4A, 0x8BAE},{0x5F4C, 0x9C5C},{0x5F4E, 0x9C5D},{0x5F51, 0x9C5F},{0x5F53, 0x9396},{0x5F56, 0x9C60}, - {0x5F57, 0x9C61},{0x5F59, 0x9C62},{0x5F5C, 0x9C53},{0x5F5D, 0x9C52},{0x5F61, 0x9C63},{0x5F62, 0x8C60},{0x5F66, 0x9546},{0x5F67, 0xED9D}, - {0x5F69, 0x8DCA},{0x5F6A, 0x9556},{0x5F6B, 0x92A4},{0x5F6C, 0x956A},{0x5F6D, 0x9C64},{0x5F70, 0x8FB2},{0x5F71, 0x8965},{0x5F73, 0x9C65}, - {0x5F77, 0x9C66},{0x5F79, 0x96F0},{0x5F7C, 0x94DE},{0x5F7F, 0x9C69},{0x5F80, 0x899D},{0x5F81, 0x90AA},{0x5F82, 0x9C68},{0x5F83, 0x9C67}, - {0x5F84, 0x8C61},{0x5F85, 0x91D2},{0x5F87, 0x9C6D},{0x5F88, 0x9C6B},{0x5F8A, 0x9C6A},{0x5F8B, 0x97A5},{0x5F8C, 0x8CE3},{0x5F90, 0x8F99}, - {0x5F91, 0x9C6C},{0x5F92, 0x936B},{0x5F93, 0x8F5D},{0x5F97, 0x93BE},{0x5F98, 0x9C70},{0x5F99, 0x9C6F},{0x5F9E, 0x9C6E},{0x5FA0, 0x9C71}, - {0x5FA1, 0x8CE4},{0x5FA8, 0x9C72},{0x5FA9, 0x959C},{0x5FAA, 0x8F7A},{0x5FAD, 0x9C73},{0x5FAE, 0x94F7},{0x5FB3, 0x93BF},{0x5FB4, 0x92A5}, - {0x5FB7, 0xED9E},{0x5FB9, 0x934F},{0x5FBC, 0x9C74},{0x5FBD, 0x8B4A},{0x5FC3, 0x9053},{0x5FC5, 0x954B},{0x5FCC, 0x8AF5},{0x5FCD, 0x9445}, - {0x5FD6, 0x9C75},{0x5FD7, 0x8E75},{0x5FD8, 0x9659},{0x5FD9, 0x965A},{0x5FDC, 0x899E},{0x5FDD, 0x9C7A},{0x5FDE, 0xED9F},{0x5FE0, 0x9289}, - {0x5FE4, 0x9C77},{0x5FEB, 0x89F5},{0x5FF0, 0x9CAB},{0x5FF1, 0x9C79},{0x5FF5, 0x944F},{0x5FF8, 0x9C78},{0x5FFB, 0x9C76},{0x5FFD, 0x8D9A}, - {0x5FFF, 0x9C7C},{0x600E, 0x9C83},{0x600F, 0x9C89},{0x6010, 0x9C81},{0x6012, 0x937B},{0x6015, 0x9C86},{0x6016, 0x957C},{0x6019, 0x9C80}, - {0x601B, 0x9C85},{0x601C, 0x97E5},{0x601D, 0x8E76},{0x6020, 0x91D3},{0x6021, 0x9C7D},{0x6025, 0x8B7D},{0x6026, 0x9C88},{0x6027, 0x90AB}, - {0x6028, 0x8985},{0x6029, 0x9C82},{0x602A, 0x89F6},{0x602B, 0x9C87},{0x602F, 0x8BAF},{0x6031, 0x9C84},{0x603A, 0x9C8A},{0x6041, 0x9C8C}, - {0x6042, 0x9C96},{0x6043, 0x9C94},{0x6046, 0x9C91},{0x604A, 0x9C90},{0x604B, 0x97F6},{0x604D, 0x9C92},{0x6050, 0x8BB0},{0x6052, 0x8D50}, - {0x6055, 0x8F9A},{0x6059, 0x9C99},{0x605A, 0x9C8B},{0x605D, 0xEDA0},{0x605F, 0x9C8F},{0x6060, 0x9C7E},{0x6062, 0x89F8},{0x6063, 0x9C93}, - {0x6064, 0x9C95},{0x6065, 0x9270},{0x6068, 0x8DA6},{0x6069, 0x89B6},{0x606A, 0x9C8D},{0x606B, 0x9C98},{0x606C, 0x9C97},{0x606D, 0x8BB1}, - {0x606F, 0x91A7},{0x6070, 0x8A86},{0x6075, 0x8C62},{0x6077, 0x9C8E},{0x6081, 0x9C9A},{0x6083, 0x9C9D},{0x6084, 0x9C9F},{0x6085, 0xEDA1}, - {0x6089, 0x8EBB},{0x608A, 0xEDA2},{0x608B, 0x9CA5},{0x608C, 0x92EE},{0x608D, 0x9C9B},{0x6092, 0x9CA3},{0x6094, 0x89F7},{0x6096, 0x9CA1}, - {0x6097, 0x9CA2},{0x609A, 0x9C9E},{0x609B, 0x9CA0},{0x609F, 0x8CE5},{0x60A0, 0x9749},{0x60A3, 0x8AB3},{0x60A6, 0x8978},{0x60A7, 0x9CA4}, - {0x60A9, 0x9459},{0x60AA, 0x88AB},{0x60B2, 0x94DF},{0x60B3, 0x9C7B},{0x60B4, 0x9CAA},{0x60B5, 0x9CAE},{0x60B6, 0x96E3},{0x60B8, 0x9CA7}, - {0x60BC, 0x9389},{0x60BD, 0x9CAC},{0x60C5, 0x8FEE},{0x60C6, 0x9CAD},{0x60C7, 0x93D5},{0x60D1, 0x9866},{0x60D3, 0x9CA9},{0x60D5, 0xEDA4}, - {0x60D8, 0x9CAF},{0x60DA, 0x8D9B},{0x60DC, 0x90C9},{0x60DE, 0xEDA3},{0x60DF, 0x88D2},{0x60E0, 0x9CA8},{0x60E1, 0x9CA6},{0x60E3, 0x9179}, - {0x60E7, 0x9C9C},{0x60E8, 0x8E53},{0x60F0, 0x91C4},{0x60F1, 0x9CBB},{0x60F2, 0xEDA6},{0x60F3, 0x917A},{0x60F4, 0x9CB6},{0x60F6, 0x9CB3}, - {0x60F7, 0x9CB4},{0x60F9, 0x8EE4},{0x60FA, 0x9CB7},{0x60FB, 0x9CBA},{0x6100, 0x9CB5},{0x6101, 0x8F44},{0x6103, 0x9CB8},{0x6106, 0x9CB2}, - {0x6108, 0x96FA},{0x6109, 0x96F9},{0x610D, 0x9CBC},{0x610E, 0x9CBD},{0x610F, 0x88D3},{0x6111, 0xEDA7},{0x6115, 0x9CB1},{0x611A, 0x8BF0}, - {0x611B, 0x88A4},{0x611F, 0x8AB4},{0x6120, 0xEDA5},{0x6121, 0x9CB9},{0x6127, 0x9CC1},{0x6128, 0x9CC0},{0x612C, 0x9CC5},{0x6130, 0xEDA9}, - {0x6134, 0x9CC6},{0x6137, 0xEDA8},{0x613C, 0x9CC4},{0x613D, 0x9CC7},{0x613E, 0x9CBF},{0x613F, 0x9CC3},{0x6142, 0x9CC8},{0x6144, 0x9CC9}, - {0x6147, 0x9CBE},{0x6148, 0x8E9C},{0x614A, 0x9CC2},{0x614B, 0x91D4},{0x614C, 0x8D51},{0x614D, 0x9CB0},{0x614E, 0x9054},{0x6153, 0x9CD6}, - {0x6155, 0x95E7},{0x6158, 0x9CCC},{0x6159, 0x9CCD},{0x615A, 0x9CCE},{0x615D, 0x9CD5},{0x615F, 0x9CD4},{0x6162, 0x969D},{0x6163, 0x8AB5}, - {0x6165, 0x9CD2},{0x6167, 0x8C64},{0x6168, 0x8A53},{0x616B, 0x9CCF},{0x616E, 0x97B6},{0x616F, 0x9CD1},{0x6170, 0x88D4},{0x6171, 0x9CD3}, - {0x6173, 0x9CCA},{0x6174, 0x9CD0},{0x6175, 0x9CD7},{0x6176, 0x8C63},{0x6177, 0x9CCB},{0x617E, 0x977C},{0x6182, 0x974A},{0x6187, 0x9CDA}, - {0x618A, 0x9CDE},{0x618E, 0x919E},{0x6190, 0x97F7},{0x6191, 0x9CDF},{0x6194, 0x9CDC},{0x6196, 0x9CD9},{0x6198, 0xEDAA},{0x6199, 0x9CD8}, - {0x619A, 0x9CDD},{0x61A4, 0x95AE},{0x61A7, 0x93B2},{0x61A9, 0x8C65},{0x61AB, 0x9CE0},{0x61AC, 0x9CDB},{0x61AE, 0x9CE1},{0x61B2, 0x8C9B}, - {0x61B6, 0x89AF},{0x61BA, 0x9CE9},{0x61BE, 0x8AB6},{0x61C3, 0x9CE7},{0x61C6, 0x9CE8},{0x61C7, 0x8DA7},{0x61C8, 0x9CE6},{0x61C9, 0x9CE4}, - {0x61CA, 0x9CE3},{0x61CB, 0x9CEA},{0x61CC, 0x9CE2},{0x61CD, 0x9CEC},{0x61D0, 0x89F9},{0x61E3, 0x9CEE},{0x61E6, 0x9CED},{0x61F2, 0x92A6}, - {0x61F4, 0x9CF1},{0x61F6, 0x9CEF},{0x61F7, 0x9CE5},{0x61F8, 0x8C9C},{0x61FA, 0x9CF0},{0x61FC, 0x9CF4},{0x61FD, 0x9CF3},{0x61FE, 0x9CF5}, - {0x61FF, 0x9CF2},{0x6200, 0x9CF6},{0x6208, 0x9CF7},{0x6209, 0x9CF8},{0x620A, 0x95E8},{0x620C, 0x9CFA},{0x620D, 0x9CF9},{0x620E, 0x8F5E}, - {0x6210, 0x90AC},{0x6211, 0x89E4},{0x6212, 0x89FA},{0x6213, 0xEDAB},{0x6214, 0x9CFB},{0x6216, 0x88BD},{0x621A, 0x90CA},{0x621B, 0x9CFC}, - {0x621D, 0xE6C1},{0x621E, 0x9D40},{0x621F, 0x8C81},{0x6221, 0x9D41},{0x6226, 0x90ED},{0x622A, 0x9D42},{0x622E, 0x9D43},{0x622F, 0x8B59}, - {0x6230, 0x9D44},{0x6232, 0x9D45},{0x6233, 0x9D46},{0x6234, 0x91D5},{0x6238, 0x8CCB},{0x623B, 0x96DF},{0x623F, 0x965B},{0x6240, 0x8F8A}, - {0x6241, 0x9D47},{0x6247, 0x90EE},{0x6248, 0xE7BB},{0x6249, 0x94E0},{0x624B, 0x8EE8},{0x624D, 0x8DCB},{0x624E, 0x9D48},{0x6253, 0x91C5}, - {0x6255, 0x95A5},{0x6258, 0x91EF},{0x625B, 0x9D4B},{0x625E, 0x9D49},{0x6260, 0x9D4C},{0x6263, 0x9D4A},{0x6268, 0x9D4D},{0x626E, 0x95AF}, - {0x6271, 0x88B5},{0x6276, 0x957D},{0x6279, 0x94E1},{0x627C, 0x9D4E},{0x627E, 0x9D51},{0x627F, 0x8FB3},{0x6280, 0x8B5A},{0x6282, 0x9D4F}, - {0x6283, 0x9D56},{0x6284, 0x8FB4},{0x6289, 0x9D50},{0x628A, 0x9463},{0x6291, 0x977D},{0x6292, 0x9D52},{0x6293, 0x9D53},{0x6294, 0x9D57}, - {0x6295, 0x938A},{0x6296, 0x9D54},{0x6297, 0x8D52},{0x6298, 0x90DC},{0x629B, 0x9D65},{0x629C, 0x94B2},{0x629E, 0x91F0},{0x62A6, 0xEDAC}, - {0x62AB, 0x94E2},{0x62AC, 0x9DAB},{0x62B1, 0x95F8},{0x62B5, 0x92EF},{0x62B9, 0x9695},{0x62BB, 0x9D5A},{0x62BC, 0x899F},{0x62BD, 0x928A}, - {0x62C2, 0x9D63},{0x62C5, 0x9253},{0x62C6, 0x9D5D},{0x62C7, 0x9D64},{0x62C8, 0x9D5F},{0x62C9, 0x9D66},{0x62CA, 0x9D62},{0x62CC, 0x9D61}, - {0x62CD, 0x948F},{0x62CF, 0x9D5B},{0x62D0, 0x89FB},{0x62D1, 0x9D59},{0x62D2, 0x8B91},{0x62D3, 0x91F1},{0x62D4, 0x9D55},{0x62D7, 0x9D58}, - {0x62D8, 0x8D53},{0x62D9, 0x90D9},{0x62DB, 0x8FB5},{0x62DC, 0x9D60},{0x62DD, 0x9471},{0x62E0, 0x8B92},{0x62E1, 0x8A67},{0x62EC, 0x8A87}, - {0x62ED, 0x9040},{0x62EE, 0x9D68},{0x62EF, 0x9D6D},{0x62F1, 0x9D69},{0x62F3, 0x8C9D},{0x62F5, 0x9D6E},{0x62F6, 0x8E41},{0x62F7, 0x8D89}, - {0x62FE, 0x8F45},{0x62FF, 0x9D5C},{0x6301, 0x8E9D},{0x6302, 0x9D6B},{0x6307, 0x8E77},{0x6308, 0x9D6C},{0x6309, 0x88C2},{0x630C, 0x9D67}, - {0x6311, 0x92A7},{0x6319, 0x8B93},{0x631F, 0x8BB2},{0x6327, 0x9D6A},{0x6328, 0x88A5},{0x632B, 0x8DC1},{0x632F, 0x9055},{0x633A, 0x92F0}, - {0x633D, 0x94D2},{0x633E, 0x9D70},{0x633F, 0x917D},{0x6349, 0x91A8},{0x634C, 0x8E4A},{0x634D, 0x9D71},{0x634F, 0x9D73},{0x6350, 0x9D6F}, - {0x6355, 0x95DF},{0x6357, 0x92BB},{0x635C, 0x917B},{0x6367, 0x95F9},{0x6368, 0x8ECC},{0x6369, 0x9D80},{0x636B, 0x9D7E},{0x636E, 0x9098}, - {0x6372, 0x8C9E},{0x6376, 0x9D78},{0x6377, 0x8FB7},{0x637A, 0x93E6},{0x637B, 0x9450},{0x6380, 0x9D76},{0x6383, 0x917C},{0x6388, 0x8EF6}, - {0x6389, 0x9D7B},{0x638C, 0x8FB6},{0x638E, 0x9D75},{0x638F, 0x9D7A},{0x6392, 0x9472},{0x6396, 0x9D74},{0x6398, 0x8C40},{0x639B, 0x8A7C}, - {0x639F, 0x9D7C},{0x63A0, 0x97A9},{0x63A1, 0x8DCC},{0x63A2, 0x9254},{0x63A3, 0x9D79},{0x63A5, 0x90DA},{0x63A7, 0x8D54},{0x63A8, 0x9084}, - {0x63A9, 0x8986},{0x63AA, 0x915B},{0x63AB, 0x9D77},{0x63AC, 0x8B64},{0x63B2, 0x8C66},{0x63B4, 0x92CD},{0x63B5, 0x9D7D},{0x63BB, 0x917E}, - {0x63BE, 0x9D81},{0x63C0, 0x9D83},{0x63C3, 0x91B5},{0x63C4, 0x9D89},{0x63C6, 0x9D84},{0x63C9, 0x9D86},{0x63CF, 0x9560},{0x63D0, 0x92F1}, - {0x63D2, 0x9D87},{0x63D6, 0x974B},{0x63DA, 0x9767},{0x63DB, 0x8AB7},{0x63E1, 0x88AC},{0x63E3, 0x9D85},{0x63E9, 0x9D82},{0x63EE, 0x8AF6}, - {0x63F4, 0x8987},{0x63F5, 0xEDAD},{0x63F6, 0x9D88},{0x63FA, 0x9768},{0x6406, 0x9D8C},{0x640D, 0x91B9},{0x640F, 0x9D93},{0x6413, 0x9D8D}, - {0x6416, 0x9D8A},{0x6417, 0x9D91},{0x641C, 0x9D72},{0x6426, 0x9D8E},{0x6428, 0x9D92},{0x642C, 0x94C0},{0x642D, 0x938B},{0x6434, 0x9D8B}, - {0x6436, 0x9D8F},{0x643A, 0x8C67},{0x643E, 0x8DEF},{0x6442, 0x90DB},{0x644E, 0x9D97},{0x6458, 0x9345},{0x6460, 0xEDAE},{0x6467, 0x9D94}, - {0x6469, 0x9680},{0x646F, 0x9D95},{0x6476, 0x9D96},{0x6478, 0x96CC},{0x647A, 0x90A0},{0x6483, 0x8C82},{0x6488, 0x9D9D},{0x6492, 0x8E54}, - {0x6493, 0x9D9A},{0x6495, 0x9D99},{0x649A, 0x9451},{0x649D, 0xEDAF},{0x649E, 0x93B3},{0x64A4, 0x9350},{0x64A5, 0x9D9B},{0x64A9, 0x9D9C}, - {0x64AB, 0x958F},{0x64AD, 0x9464},{0x64AE, 0x8E42},{0x64B0, 0x90EF},{0x64B2, 0x966F},{0x64B9, 0x8A68},{0x64BB, 0x9DA3},{0x64BC, 0x9D9E}, - {0x64C1, 0x9769},{0x64C2, 0x9DA5},{0x64C5, 0x9DA1},{0x64C7, 0x9DA2},{0x64CD, 0x9180},{0x64CE, 0xEDB0},{0x64D2, 0x9DA0},{0x64D4, 0x9D5E}, - {0x64D8, 0x9DA4},{0x64DA, 0x9D9F},{0x64E0, 0x9DA9},{0x64E1, 0x9DAA},{0x64E2, 0x9346},{0x64E3, 0x9DAC},{0x64E6, 0x8E43},{0x64E7, 0x9DA7}, - {0x64EC, 0x8B5B},{0x64EF, 0x9DAD},{0x64F1, 0x9DA6},{0x64F2, 0x9DB1},{0x64F4, 0x9DB0},{0x64F6, 0x9DAF},{0x64FA, 0x9DB2},{0x64FD, 0x9DB4}, - {0x64FE, 0x8FEF},{0x6500, 0x9DB3},{0x6505, 0x9DB7},{0x6518, 0x9DB5},{0x651C, 0x9DB6},{0x651D, 0x9D90},{0x6523, 0x9DB9},{0x6524, 0x9DB8}, - {0x652A, 0x9D98},{0x652B, 0x9DBA},{0x652C, 0x9DAE},{0x652F, 0x8E78},{0x6534, 0x9DBB},{0x6535, 0x9DBC},{0x6536, 0x9DBE},{0x6537, 0x9DBD}, - {0x6538, 0x9DBF},{0x6539, 0x89FC},{0x653B, 0x8D55},{0x653E, 0x95FA},{0x653F, 0x90AD},{0x6545, 0x8CCC},{0x6548, 0x9DC1},{0x654D, 0x9DC4}, - {0x654E, 0xEDB1},{0x654F, 0x9571},{0x6551, 0x8B7E},{0x6555, 0x9DC3},{0x6556, 0x9DC2},{0x6557, 0x9473},{0x6558, 0x9DC5},{0x6559, 0x8BB3}, - {0x655D, 0x9DC7},{0x655E, 0x9DC6},{0x6562, 0x8AB8},{0x6563, 0x8E55},{0x6566, 0x93D6},{0x656C, 0x8C68},{0x6570, 0x9094},{0x6572, 0x9DC8}, - {0x6574, 0x90AE},{0x6575, 0x9347},{0x6577, 0x957E},{0x6578, 0x9DC9},{0x6582, 0x9DCA},{0x6583, 0x9DCB},{0x6587, 0x95B6},{0x6588, 0x9B7C}, - {0x6589, 0x90C4},{0x658C, 0x956B},{0x658E, 0x8DD6},{0x6590, 0x94E3},{0x6591, 0x94C1},{0x6597, 0x936C},{0x6599, 0x97BF},{0x659B, 0x9DCD}, - {0x659C, 0x8ECE},{0x659F, 0x9DCE},{0x65A1, 0x88B4},{0x65A4, 0x8BD2},{0x65A5, 0x90CB},{0x65A7, 0x9580},{0x65AB, 0x9DCF},{0x65AC, 0x8E61}, - {0x65AD, 0x9266},{0x65AF, 0x8E7A},{0x65B0, 0x9056},{0x65B7, 0x9DD0},{0x65B9, 0x95FB},{0x65BC, 0x8997},{0x65BD, 0x8E7B},{0x65C1, 0x9DD3}, - {0x65C3, 0x9DD1},{0x65C4, 0x9DD4},{0x65C5, 0x97B7},{0x65C6, 0x9DD2},{0x65CB, 0x90F9},{0x65CC, 0x9DD5},{0x65CF, 0x91B0},{0x65D2, 0x9DD6}, - {0x65D7, 0x8AF8},{0x65D9, 0x9DD8},{0x65DB, 0x9DD7},{0x65E0, 0x9DD9},{0x65E1, 0x9DDA},{0x65E2, 0x8AF9},{0x65E5, 0x93FA},{0x65E6, 0x9255}, - {0x65E7, 0x8B8C},{0x65E8, 0x8E7C},{0x65E9, 0x9181},{0x65EC, 0x8F7B},{0x65ED, 0x88AE},{0x65F1, 0x9DDB},{0x65FA, 0x89A0},{0x65FB, 0x9DDF}, - {0x6600, 0xEDB2},{0x6602, 0x8D56},{0x6603, 0x9DDE},{0x6606, 0x8DA9},{0x6607, 0x8FB8},{0x6609, 0xEDB5},{0x660A, 0x9DDD},{0x660C, 0x8FB9}, - {0x660E, 0x96BE},{0x660F, 0x8DA8},{0x6613, 0x88D5},{0x6614, 0x90CC},{0x6615, 0xEDB3},{0x661C, 0x9DE4},{0x661E, 0xEDB7},{0x661F, 0x90AF}, - {0x6620, 0x8966},{0x6624, 0xEDB8},{0x6625, 0x8F74},{0x6627, 0x9686},{0x6628, 0x8DF0},{0x662D, 0x8FBA},{0x662E, 0xEDB6},{0x662F, 0x90A5}, - {0x6631, 0xED47},{0x6634, 0x9DE3},{0x6635, 0x9DE1},{0x6636, 0x9DE2},{0x663B, 0xEDB4},{0x663C, 0x928B},{0x663F, 0x9E45},{0x6641, 0x9DE8}, - {0x6642, 0x8E9E},{0x6643, 0x8D57},{0x6644, 0x9DE6},{0x6649, 0x9DE7},{0x664B, 0x9057},{0x664F, 0x9DE5},{0x6652, 0x8E4E},{0x6657, 0xEDBA}, - {0x6659, 0xEDBB},{0x665D, 0x9DEA},{0x665E, 0x9DE9},{0x665F, 0x9DEE},{0x6662, 0x9DEF},{0x6664, 0x9DEB},{0x6665, 0xEDB9},{0x6666, 0x8A41}, - {0x6667, 0x9DEC},{0x6668, 0x9DED},{0x6669, 0x94D3},{0x666E, 0x9581},{0x666F, 0x8C69},{0x6670, 0x9DF0},{0x6673, 0xEDBD},{0x6674, 0x90B0}, - {0x6676, 0x8FBB},{0x667A, 0x9271},{0x6681, 0x8BC5},{0x6683, 0x9DF1},{0x6684, 0x9DF5},{0x6687, 0x89C9},{0x6688, 0x9DF2},{0x6689, 0x9DF4}, - {0x668E, 0x9DF3},{0x6691, 0x8F8B},{0x6696, 0x9267},{0x6697, 0x88C3},{0x6698, 0x9DF6},{0x6699, 0xEDBE},{0x669D, 0x9DF7},{0x66A0, 0xEDBF}, - {0x66A2, 0x92A8},{0x66A6, 0x97EF},{0x66AB, 0x8E62},{0x66AE, 0x95E9},{0x66B2, 0xEDC0},{0x66B4, 0x965C},{0x66B8, 0x9E41},{0x66B9, 0x9DF9}, - {0x66BC, 0x9DFC},{0x66BE, 0x9DFB},{0x66BF, 0xEDC1},{0x66C1, 0x9DF8},{0x66C4, 0x9E40},{0x66C7, 0x93DC},{0x66C9, 0x9DFA},{0x66D6, 0x9E42}, - {0x66D9, 0x8F8C},{0x66DA, 0x9E43},{0x66DC, 0x976A},{0x66DD, 0x9498},{0x66E0, 0x9E44},{0x66E6, 0x9E46},{0x66E9, 0x9E47},{0x66F0, 0x9E48}, - {0x66F2, 0x8BC8},{0x66F3, 0x8967},{0x66F4, 0x8D58},{0x66F5, 0x9E49},{0x66F7, 0x9E4A},{0x66F8, 0x8F91},{0x66F9, 0x9182},{0x66FA, 0xEDC2}, - {0x66FB, 0xED4A},{0x66FC, 0x99D6},{0x66FD, 0x915D},{0x66FE, 0x915C},{0x66FF, 0x91D6},{0x6700, 0x8DC5},{0x6703, 0x98F0},{0x6708, 0x8C8E}, - {0x6709, 0x974C},{0x670B, 0x95FC},{0x670D, 0x959E},{0x670E, 0xEDC3},{0x670F, 0x9E4B},{0x6714, 0x8DF1},{0x6715, 0x92BD},{0x6716, 0x9E4C}, - {0x6717, 0x984E},{0x671B, 0x965D},{0x671D, 0x92A9},{0x671E, 0x9E4D},{0x671F, 0x8AFA},{0x6726, 0x9E4E},{0x6727, 0x9E4F},{0x6728, 0x96D8}, - {0x672A, 0x96A2},{0x672B, 0x9696},{0x672C, 0x967B},{0x672D, 0x8E44},{0x672E, 0x9E51},{0x6731, 0x8EE9},{0x6734, 0x9670},{0x6736, 0x9E53}, - {0x6737, 0x9E56},{0x6738, 0x9E55},{0x673A, 0x8AF7},{0x673D, 0x8B80},{0x673F, 0x9E52},{0x6741, 0x9E54},{0x6746, 0x9E57},{0x6749, 0x9099}, - {0x674E, 0x979B},{0x674F, 0x88C7},{0x6750, 0x8DDE},{0x6751, 0x91BA},{0x6753, 0x8EDB},{0x6756, 0x8FF1},{0x6759, 0x9E5A},{0x675C, 0x936D}, - {0x675E, 0x9E58},{0x675F, 0x91A9},{0x6760, 0x9E59},{0x6761, 0x8FF0},{0x6762, 0x96DB},{0x6763, 0x9E5B},{0x6764, 0x9E5C},{0x6765, 0x9788}, - {0x6766, 0xEDC5},{0x676A, 0x9E61},{0x676D, 0x8D59},{0x676F, 0x9474},{0x6770, 0x9E5E},{0x6771, 0x938C},{0x6772, 0x9DDC},{0x6773, 0x9DE0}, - {0x6775, 0x8B6E},{0x6777, 0x9466},{0x677C, 0x9E60},{0x677E, 0x8FBC},{0x677F, 0x94C2},{0x6785, 0x9E66},{0x6787, 0x94F8},{0x6789, 0x9E5D}, - {0x678B, 0x9E63},{0x678C, 0x9E62},{0x6790, 0x90CD},{0x6795, 0x968D},{0x6797, 0x97D1},{0x679A, 0x9687},{0x679C, 0x89CA},{0x679D, 0x8E7D}, - {0x67A0, 0x9867},{0x67A1, 0x9E65},{0x67A2, 0x9095},{0x67A6, 0x9E64},{0x67A9, 0x9E5F},{0x67AF, 0x8CCD},{0x67B3, 0x9E6B},{0x67B4, 0x9E69}, - {0x67B6, 0x89CB},{0x67B7, 0x9E67},{0x67B8, 0x9E6D},{0x67B9, 0x9E73},{0x67BB, 0xEDC6},{0x67C0, 0xEDC8},{0x67C1, 0x91C6},{0x67C4, 0x95BF}, - {0x67C6, 0x9E75},{0x67CA, 0x9541},{0x67CE, 0x9E74},{0x67CF, 0x9490},{0x67D0, 0x965E},{0x67D1, 0x8AB9},{0x67D3, 0x90F5},{0x67D4, 0x8F5F}, - {0x67D8, 0x92D1},{0x67DA, 0x974D},{0x67DD, 0x9E70},{0x67DE, 0x9E6F},{0x67E2, 0x9E71},{0x67E4, 0x9E6E},{0x67E7, 0x9E76},{0x67E9, 0x9E6C}, - {0x67EC, 0x9E6A},{0x67EE, 0x9E72},{0x67EF, 0x9E68},{0x67F1, 0x928C},{0x67F3, 0x96F6},{0x67F4, 0x8EC4},{0x67F5, 0x8DF2},{0x67FB, 0x8DB8}, - {0x67FE, 0x968F},{0x67FF, 0x8A60},{0x6801, 0xEDC9},{0x6802, 0x92CC},{0x6803, 0x93C8},{0x6804, 0x8968},{0x6813, 0x90F0},{0x6816, 0x90B2}, - {0x6817, 0x8C49},{0x681E, 0x9E78},{0x6821, 0x8D5A},{0x6822, 0x8A9C},{0x6829, 0x9E7A},{0x682A, 0x8A94},{0x682B, 0x9E81},{0x6832, 0x9E7D}, - {0x6834, 0x90F1},{0x6838, 0x8A6A},{0x6839, 0x8DAA},{0x683C, 0x8A69},{0x683D, 0x8DCD},{0x6840, 0x9E7B},{0x6841, 0x8C85},{0x6842, 0x8C6A}, - {0x6843, 0x938D},{0x6844, 0xEDCA},{0x6846, 0x9E79},{0x6848, 0x88C4},{0x684D, 0x9E7C},{0x684E, 0x9E7E},{0x6850, 0x8BCB},{0x6851, 0x8C4B}, - {0x6852, 0xEDC7},{0x6853, 0x8ABA},{0x6854, 0x8B6A},{0x6859, 0x9E82},{0x685C, 0x8DF7},{0x685D, 0x9691},{0x685F, 0x8E56},{0x6863, 0x9E83}, - {0x6867, 0x954F},{0x6874, 0x9E8F},{0x6876, 0x89B1},{0x6877, 0x9E84},{0x687E, 0x9E95},{0x687F, 0x9E85},{0x6881, 0x97C0},{0x6883, 0x9E8C}, - {0x6885, 0x947E},{0x688D, 0x9E94},{0x688F, 0x9E87},{0x6893, 0x88B2},{0x6894, 0x9E89},{0x6897, 0x8D5B},{0x689B, 0x9E8B},{0x689D, 0x9E8A}, - {0x689F, 0x9E86},{0x68A0, 0x9E91},{0x68A2, 0x8FBD},{0x68A6, 0x9AEB},{0x68A7, 0x8CE6},{0x68A8, 0x979C},{0x68AD, 0x9E88},{0x68AF, 0x92F2}, - {0x68B0, 0x8A42},{0x68B1, 0x8DAB},{0x68B3, 0x9E80},{0x68B5, 0x9E90},{0x68B6, 0x8A81},{0x68B9, 0x9E8E},{0x68BA, 0x9E92},{0x68BC, 0x938E}, - {0x68C4, 0x8AFC},{0x68C6, 0x9EB0},{0x68C8, 0xED48},{0x68C9, 0x96C7},{0x68CA, 0x9E97},{0x68CB, 0x8AFB},{0x68CD, 0x9E9E},{0x68CF, 0xEDCB}, - {0x68D2, 0x965F},{0x68D4, 0x9E9F},{0x68D5, 0x9EA1},{0x68D7, 0x9EA5},{0x68D8, 0x9E99},{0x68DA, 0x9249},{0x68DF, 0x938F},{0x68E0, 0x9EA9}, - {0x68E1, 0x9E9C},{0x68E3, 0x9EA6},{0x68E7, 0x9EA0},{0x68EE, 0x9058},{0x68EF, 0x9EAA},{0x68F2, 0x90B1},{0x68F9, 0x9EA8},{0x68FA, 0x8ABB}, - {0x6900, 0x986F},{0x6901, 0x9E96},{0x6904, 0x9EA4},{0x6905, 0x88D6},{0x6908, 0x9E98},{0x690B, 0x96B8},{0x690C, 0x9E9D},{0x690D, 0x9041}, - {0x690E, 0x92C5},{0x690F, 0x9E93},{0x6912, 0x9EA3},{0x6919, 0x909A},{0x691A, 0x9EAD},{0x691B, 0x8A91},{0x691C, 0x8C9F},{0x6921, 0x9EAF}, - {0x6922, 0x9E9A},{0x6923, 0x9EAE},{0x6925, 0x9EA7},{0x6926, 0x9E9B},{0x6928, 0x9EAB},{0x692A, 0x9EAC},{0x6930, 0x9EBD},{0x6934, 0x93CC}, - {0x6936, 0x9EA2},{0x6939, 0x9EB9},{0x693D, 0x9EBB},{0x693F, 0x92D6},{0x694A, 0x976B},{0x6953, 0x9596},{0x6954, 0x9EB6},{0x6955, 0x91C8}, - {0x6959, 0x9EBC},{0x695A, 0x915E},{0x695C, 0x9EB3},{0x695D, 0x9EC0},{0x695E, 0x9EBF},{0x6960, 0x93ED},{0x6961, 0x9EBE},{0x6962, 0x93E8}, - {0x6968, 0xEDCD},{0x696A, 0x9EC2},{0x696B, 0x9EB5},{0x696D, 0x8BC6},{0x696E, 0x9EB8},{0x696F, 0x8F7C},{0x6973, 0x9480},{0x6974, 0x9EBA}, - {0x6975, 0x8BC9},{0x6977, 0x9EB2},{0x6978, 0x9EB4},{0x6979, 0x9EB1},{0x697C, 0x984F},{0x697D, 0x8A79},{0x697E, 0x9EB7},{0x6981, 0x9EC1}, - {0x6982, 0x8A54},{0x698A, 0x8DE5},{0x698E, 0x897C},{0x6991, 0x9ED2},{0x6994, 0x9850},{0x6995, 0x9ED5},{0x6998, 0xEDCF},{0x699B, 0x9059}, - {0x699C, 0x9ED4},{0x69A0, 0x9ED3},{0x69A7, 0x9ED0},{0x69AE, 0x9EC4},{0x69B1, 0x9EE1},{0x69B2, 0x9EC3},{0x69B4, 0x9ED6},{0x69BB, 0x9ECE}, - {0x69BE, 0x9EC9},{0x69BF, 0x9EC6},{0x69C1, 0x9EC7},{0x69C3, 0x9ECF},{0x69C7, 0xEAA0},{0x69CA, 0x9ECC},{0x69CB, 0x8D5C},{0x69CC, 0x92C6}, - {0x69CD, 0x9184},{0x69CE, 0x9ECA},{0x69D0, 0x9EC5},{0x69D3, 0x9EC8},{0x69D8, 0x976C},{0x69D9, 0x968A},{0x69DD, 0x9ECD},{0x69DE, 0x9ED7}, - {0x69E2, 0xEDD0},{0x69E7, 0x9EDF},{0x69E8, 0x9ED8},{0x69EB, 0x9EE5},{0x69ED, 0x9EE3},{0x69F2, 0x9EDE},{0x69F9, 0x9EDD},{0x69FB, 0x92CE}, - {0x69FD, 0x9185},{0x69FF, 0x9EDB},{0x6A02, 0x9ED9},{0x6A05, 0x9EE0},{0x6A0A, 0x9EE6},{0x6A0B, 0x94F3},{0x6A0C, 0x9EEC},{0x6A12, 0x9EE7}, - {0x6A13, 0x9EEA},{0x6A14, 0x9EE4},{0x6A17, 0x9294},{0x6A19, 0x9557},{0x6A1B, 0x9EDA},{0x6A1E, 0x9EE2},{0x6A1F, 0x8FBE},{0x6A21, 0x96CD}, - {0x6A22, 0x9EF6},{0x6A23, 0x9EE9},{0x6A29, 0x8CA0},{0x6A2A, 0x89A1},{0x6A2B, 0x8A7E},{0x6A2E, 0x9ED1},{0x6A30, 0xEDD1},{0x6A35, 0x8FBF}, - {0x6A36, 0x9EEE},{0x6A38, 0x9EF5},{0x6A39, 0x8EF7},{0x6A3A, 0x8A92},{0x6A3D, 0x924D},{0x6A44, 0x9EEB},{0x6A46, 0xEDD3},{0x6A47, 0x9EF0}, - {0x6A48, 0x9EF4},{0x6A4B, 0x8BB4},{0x6A58, 0x8B6B},{0x6A59, 0x9EF2},{0x6A5F, 0x8B40},{0x6A61, 0x93C9},{0x6A62, 0x9EF1},{0x6A66, 0x9EF3}, - {0x6A6B, 0xEDD2},{0x6A72, 0x9EED},{0x6A73, 0xEDD4},{0x6A78, 0x9EEF},{0x6A7E, 0xEDD5},{0x6A7F, 0x8A80},{0x6A80, 0x9268},{0x6A84, 0x9EFA}, - {0x6A8D, 0x9EF8},{0x6A8E, 0x8CE7},{0x6A90, 0x9EF7},{0x6A97, 0x9F40},{0x6A9C, 0x9E77},{0x6AA0, 0x9EF9},{0x6AA2, 0x9EFB},{0x6AA3, 0x9EFC}, - {0x6AAA, 0x9F4B},{0x6AAC, 0x9F47},{0x6AAE, 0x9E8D},{0x6AB3, 0x9F46},{0x6AB8, 0x9F45},{0x6ABB, 0x9F42},{0x6AC1, 0x9EE8},{0x6AC2, 0x9F44}, - {0x6AC3, 0x9F43},{0x6AD1, 0x9F49},{0x6AD3, 0x9845},{0x6ADA, 0x9F4C},{0x6ADB, 0x8BF9},{0x6ADE, 0x9F48},{0x6ADF, 0x9F4A},{0x6AE2, 0xEDD6}, - {0x6AE4, 0xEDD7},{0x6AE8, 0x94A5},{0x6AEA, 0x9F4D},{0x6AFA, 0x9F51},{0x6AFB, 0x9F4E},{0x6B04, 0x9793},{0x6B05, 0x9F4F},{0x6B0A, 0x9EDC}, - {0x6B12, 0x9F52},{0x6B16, 0x9F53},{0x6B1D, 0x8954},{0x6B1F, 0x9F55},{0x6B20, 0x8C87},{0x6B21, 0x8E9F},{0x6B23, 0x8BD3},{0x6B27, 0x89A2}, - {0x6B32, 0x977E},{0x6B37, 0x9F57},{0x6B38, 0x9F56},{0x6B39, 0x9F59},{0x6B3A, 0x8B5C},{0x6B3D, 0x8BD4},{0x6B3E, 0x8ABC},{0x6B43, 0x9F5C}, - {0x6B47, 0x9F5B},{0x6B49, 0x9F5D},{0x6B4C, 0x89CC},{0x6B4E, 0x9256},{0x6B50, 0x9F5E},{0x6B53, 0x8ABD},{0x6B54, 0x9F60},{0x6B59, 0x9F5F}, - {0x6B5B, 0x9F61},{0x6B5F, 0x9F62},{0x6B61, 0x9F63},{0x6B62, 0x8E7E},{0x6B63, 0x90B3},{0x6B64, 0x8D9F},{0x6B66, 0x9590},{0x6B69, 0x95E0}, - {0x6B6A, 0x9863},{0x6B6F, 0x8E95},{0x6B73, 0x8DCE},{0x6B74, 0x97F0},{0x6B78, 0x9F64},{0x6B79, 0x9F65},{0x6B7B, 0x8E80},{0x6B7F, 0x9F66}, - {0x6B80, 0x9F67},{0x6B83, 0x9F69},{0x6B84, 0x9F68},{0x6B86, 0x9677},{0x6B89, 0x8F7D},{0x6B8A, 0x8EEA},{0x6B8B, 0x8E63},{0x6B8D, 0x9F6A}, - {0x6B95, 0x9F6C},{0x6B96, 0x9042},{0x6B98, 0x9F6B},{0x6B9E, 0x9F6D},{0x6BA4, 0x9F6E},{0x6BAA, 0x9F6F},{0x6BAB, 0x9F70},{0x6BAF, 0x9F71}, - {0x6BB1, 0x9F73},{0x6BB2, 0x9F72},{0x6BB3, 0x9F74},{0x6BB4, 0x89A3},{0x6BB5, 0x9269},{0x6BB7, 0x9F75},{0x6BBA, 0x8E45},{0x6BBB, 0x8A6B}, - {0x6BBC, 0x9F76},{0x6BBF, 0x9361},{0x6BC0, 0x9ACA},{0x6BC5, 0x8B42},{0x6BC6, 0x9F77},{0x6BCB, 0x9F78},{0x6BCD, 0x95EA},{0x6BCE, 0x9688}, - {0x6BD2, 0x93C5},{0x6BD3, 0x9F79},{0x6BD4, 0x94E4},{0x6BD6, 0xEDD8},{0x6BD8, 0x94F9},{0x6BDB, 0x96D1},{0x6BDF, 0x9F7A},{0x6BEB, 0x9F7C}, - {0x6BEC, 0x9F7B},{0x6BEF, 0x9F7E},{0x6BF3, 0x9F7D},{0x6C08, 0x9F81},{0x6C0F, 0x8E81},{0x6C11, 0x96AF},{0x6C13, 0x9F82},{0x6C14, 0x9F83}, - {0x6C17, 0x8B43},{0x6C1B, 0x9F84},{0x6C23, 0x9F86},{0x6C24, 0x9F85},{0x6C34, 0x9085},{0x6C37, 0x9558},{0x6C38, 0x8969},{0x6C3E, 0x94C3}, - {0x6C3F, 0xEDD9},{0x6C40, 0x92F3},{0x6C41, 0x8F60},{0x6C42, 0x8B81},{0x6C4E, 0x94C4},{0x6C50, 0x8EAC},{0x6C55, 0x9F88},{0x6C57, 0x8ABE}, - {0x6C5A, 0x8998},{0x6C5C, 0xEDDA},{0x6C5D, 0x93F0},{0x6C5E, 0x9F87},{0x6C5F, 0x8D5D},{0x6C60, 0x9272},{0x6C62, 0x9F89},{0x6C68, 0x9F91}, - {0x6C6A, 0x9F8A},{0x6C6F, 0xEDDC},{0x6C70, 0x91BF},{0x6C72, 0x8B82},{0x6C73, 0x9F92},{0x6C7A, 0x8C88},{0x6C7D, 0x8B44},{0x6C7E, 0x9F90}, - {0x6C81, 0x9F8E},{0x6C82, 0x9F8B},{0x6C83, 0x9780},{0x6C86, 0xEDDB},{0x6C88, 0x92BE},{0x6C8C, 0x93D7},{0x6C8D, 0x9F8C},{0x6C90, 0x9F94}, - {0x6C92, 0x9F93},{0x6C93, 0x8C42},{0x6C96, 0x89AB},{0x6C99, 0x8DB9},{0x6C9A, 0x9F8D},{0x6C9B, 0x9F8F},{0x6CA1, 0x9676},{0x6CA2, 0x91F2}, - {0x6CAB, 0x9697},{0x6CAE, 0x9F9C},{0x6CB1, 0x9F9D},{0x6CB3, 0x89CD},{0x6CB8, 0x95A6},{0x6CB9, 0x96FB},{0x6CBA, 0x9F9F},{0x6CBB, 0x8EA1}, - {0x6CBC, 0x8FC0},{0x6CBD, 0x9F98},{0x6CBE, 0x9F9E},{0x6CBF, 0x8988},{0x6CC1, 0x8BB5},{0x6CC4, 0x9F95},{0x6CC5, 0x9F9A},{0x6CC9, 0x90F2}, - {0x6CCA, 0x9491},{0x6CCC, 0x94E5},{0x6CD3, 0x9F97},{0x6CD5, 0x9640},{0x6CD7, 0x9F99},{0x6CD9, 0x9FA2},{0x6CDA, 0xEDDD},{0x6CDB, 0x9FA0}, - {0x6CDD, 0x9F9B},{0x6CE1, 0x9641},{0x6CE2, 0x9467},{0x6CE3, 0x8B83},{0x6CE5, 0x9344},{0x6CE8, 0x928D},{0x6CEA, 0x9FA3},{0x6CEF, 0x9FA1}, - {0x6CF0, 0x91D7},{0x6CF1, 0x9F96},{0x6CF3, 0x896A},{0x6D04, 0xEDDE},{0x6D0B, 0x976D},{0x6D0C, 0x9FAE},{0x6D12, 0x9FAD},{0x6D17, 0x90F4}, - {0x6D19, 0x9FAA},{0x6D1B, 0x978C},{0x6D1E, 0x93B4},{0x6D1F, 0x9FA4},{0x6D25, 0x92C3},{0x6D29, 0x896B},{0x6D2A, 0x8D5E},{0x6D2B, 0x9FA7}, - {0x6D32, 0x8F46},{0x6D33, 0x9FAC},{0x6D35, 0x9FAB},{0x6D36, 0x9FA6},{0x6D38, 0x9FA9},{0x6D3B, 0x8A88},{0x6D3D, 0x9FA8},{0x6D3E, 0x9468}, - {0x6D41, 0x97AC},{0x6D44, 0x8FF2},{0x6D45, 0x90F3},{0x6D59, 0x9FB4},{0x6D5A, 0x9FB2},{0x6D5C, 0x956C},{0x6D63, 0x9FAF},{0x6D64, 0x9FB1}, - {0x6D66, 0x8959},{0x6D69, 0x8D5F},{0x6D6A, 0x9851},{0x6D6C, 0x8A5C},{0x6D6E, 0x9582},{0x6D6F, 0xEDE0},{0x6D74, 0x9781},{0x6D77, 0x8A43}, - {0x6D78, 0x905A},{0x6D79, 0x9FB3},{0x6D85, 0x9FB8},{0x6D87, 0xEDDF},{0x6D88, 0x8FC1},{0x6D8C, 0x974F},{0x6D8E, 0x9FB5},{0x6D93, 0x9FB0}, - {0x6D95, 0x9FB6},{0x6D96, 0xEDE1},{0x6D99, 0x97DC},{0x6D9B, 0x9393},{0x6D9C, 0x93C0},{0x6DAC, 0xEDE2},{0x6DAF, 0x8A55},{0x6DB2, 0x8974}, - {0x6DB5, 0x9FBC},{0x6DB8, 0x9FBF},{0x6DBC, 0x97C1},{0x6DC0, 0x9784},{0x6DC5, 0x9FC6},{0x6DC6, 0x9FC0},{0x6DC7, 0x9FBD},{0x6DCB, 0x97D2}, - {0x6DCC, 0x9FC3},{0x6DCF, 0xEDE3},{0x6DD1, 0x8F69},{0x6DD2, 0x9FC5},{0x6DD5, 0x9FCA},{0x6DD8, 0x9391},{0x6DD9, 0x9FC8},{0x6DDE, 0x9FC2}, - {0x6DE1, 0x9257},{0x6DE4, 0x9FC9},{0x6DE6, 0x9FBE},{0x6DE8, 0x9FC4},{0x6DEA, 0x9FCB},{0x6DEB, 0x88FA},{0x6DEC, 0x9FC1},{0x6DEE, 0x9FCC}, - {0x6DF1, 0x905B},{0x6DF2, 0xEDE5},{0x6DF3, 0x8F7E},{0x6DF5, 0x95A3},{0x6DF7, 0x8DAC},{0x6DF8, 0xEDE4},{0x6DF9, 0x9FB9},{0x6DFA, 0x9FC7}, - {0x6DFB, 0x9359},{0x6DFC, 0xEDE6},{0x6E05, 0x90B4},{0x6E07, 0x8A89},{0x6E08, 0x8DCF},{0x6E09, 0x8FC2},{0x6E0A, 0x9FBB},{0x6E0B, 0x8F61}, - {0x6E13, 0x8C6B},{0x6E15, 0x9FBA},{0x6E19, 0x9FD0},{0x6E1A, 0x8F8D},{0x6E1B, 0x8CB8},{0x6E1D, 0x9FDF},{0x6E1F, 0x9FD9},{0x6E20, 0x8B94}, - {0x6E21, 0x936E},{0x6E23, 0x9FD4},{0x6E24, 0x9FDD},{0x6E25, 0x88AD},{0x6E26, 0x8951},{0x6E27, 0xEDE9},{0x6E29, 0x89B7},{0x6E2B, 0x9FD6}, - {0x6E2C, 0x91AA},{0x6E2D, 0x9FCD},{0x6E2E, 0x9FCF},{0x6E2F, 0x8D60},{0x6E38, 0x9FE0},{0x6E39, 0xEDE7},{0x6E3A, 0x9FDB},{0x6E3C, 0xEDEA}, - {0x6E3E, 0x9FD3},{0x6E43, 0x9FDA},{0x6E4A, 0x96A9},{0x6E4D, 0x9FD8},{0x6E4E, 0x9FDC},{0x6E56, 0x8CCE},{0x6E58, 0x8FC3},{0x6E5B, 0x9258}, - {0x6E5C, 0xEDE8},{0x6E5F, 0x9FD2},{0x6E67, 0x974E},{0x6E6B, 0x9FD5},{0x6E6E, 0x9FCE},{0x6E6F, 0x9392},{0x6E72, 0x9FD1},{0x6E76, 0x9FD7}, - {0x6E7E, 0x9870},{0x6E7F, 0x8EBC},{0x6E80, 0x969E},{0x6E82, 0x9FE1},{0x6E8C, 0x94AC},{0x6E8F, 0x9FED},{0x6E90, 0x8CB9},{0x6E96, 0x8F80}, - {0x6E98, 0x9FE3},{0x6E9C, 0x97AD},{0x6E9D, 0x8D61},{0x6E9F, 0x9FF0},{0x6EA2, 0x88EC},{0x6EA5, 0x9FEE},{0x6EAA, 0x9FE2},{0x6EAF, 0x9FE8}, - {0x6EB2, 0x9FEA},{0x6EB6, 0x976E},{0x6EB7, 0x9FE5},{0x6EBA, 0x934D},{0x6EBD, 0x9FE7},{0x6EBF, 0xEDEB},{0x6EC2, 0x9FEF},{0x6EC4, 0x9FE9}, - {0x6EC5, 0x96C5},{0x6EC9, 0x9FE4},{0x6ECB, 0x8EA0},{0x6ECC, 0x9FFC},{0x6ED1, 0x8A8A},{0x6ED3, 0x9FE6},{0x6ED4, 0x9FEB},{0x6ED5, 0x9FEC}, - {0x6EDD, 0x91EA},{0x6EDE, 0x91D8},{0x6EEC, 0x9FF4},{0x6EEF, 0x9FFA},{0x6EF2, 0x9FF8},{0x6EF4, 0x9348},{0x6EF7, 0xE042},{0x6EF8, 0x9FF5}, - {0x6EFE, 0x9FF6},{0x6EFF, 0x9FDE},{0x6F01, 0x8B99},{0x6F02, 0x9559},{0x6F06, 0x8EBD},{0x6F09, 0x8D97},{0x6F0F, 0x9852},{0x6F11, 0x9FF2}, - {0x6F13, 0xE041},{0x6F14, 0x8989},{0x6F15, 0x9186},{0x6F20, 0x9499},{0x6F22, 0x8ABF},{0x6F23, 0x97F8},{0x6F2B, 0x969F},{0x6F2C, 0x92D0}, - {0x6F31, 0x9FF9},{0x6F32, 0x9FFB},{0x6F38, 0x9151},{0x6F3E, 0xE040},{0x6F3F, 0x9FF7},{0x6F41, 0x9FF1},{0x6F45, 0x8AC1},{0x6F54, 0x8C89}, - {0x6F58, 0xE04E},{0x6F5B, 0xE049},{0x6F5C, 0x90F6},{0x6F5F, 0x8A83},{0x6F64, 0x8F81},{0x6F66, 0xE052},{0x6F6D, 0xE04B},{0x6F6E, 0x92AA}, - {0x6F6F, 0xE048},{0x6F70, 0x92D7},{0x6F74, 0xE06B},{0x6F78, 0xE045},{0x6F7A, 0xE044},{0x6F7C, 0xE04D},{0x6F80, 0xE047},{0x6F81, 0xE046}, - {0x6F82, 0xE04C},{0x6F84, 0x909F},{0x6F86, 0xE043},{0x6F88, 0xEDEC},{0x6F8E, 0xE04F},{0x6F91, 0xE050},{0x6F97, 0x8AC0},{0x6FA1, 0xE055}, - {0x6FA3, 0xE054},{0x6FA4, 0xE056},{0x6FAA, 0xE059},{0x6FB1, 0x9362},{0x6FB3, 0xE053},{0x6FB5, 0xEDED},{0x6FB9, 0xE057},{0x6FC0, 0x8C83}, - {0x6FC1, 0x91F7},{0x6FC2, 0xE051},{0x6FC3, 0x945A},{0x6FC6, 0xE058},{0x6FD4, 0xE05D},{0x6FD5, 0xE05B},{0x6FD8, 0xE05E},{0x6FDB, 0xE061}, - {0x6FDF, 0xE05A},{0x6FE0, 0x8D8A},{0x6FE1, 0x9447},{0x6FE4, 0x9FB7},{0x6FEB, 0x9794},{0x6FEC, 0xE05C},{0x6FEE, 0xE060},{0x6FEF, 0x91F3}, - {0x6FF1, 0xE05F},{0x6FF3, 0xE04A},{0x6FF5, 0xEDEE},{0x6FF6, 0xE889},{0x6FFA, 0xE064},{0x6FFE, 0xE068},{0x7001, 0xE066},{0x7005, 0xEDEF}, - {0x7007, 0xEDF0},{0x7009, 0xE062},{0x700B, 0xE063},{0x700F, 0xE067},{0x7011, 0xE065},{0x7015, 0x956D},{0x7018, 0xE06D},{0x701A, 0xE06A}, - {0x701B, 0xE069},{0x701D, 0xE06C},{0x701E, 0x93D2},{0x701F, 0xE06E},{0x7026, 0x9295},{0x7027, 0x91EB},{0x7028, 0xEDF1},{0x702C, 0x90A3}, - {0x7030, 0xE06F},{0x7032, 0xE071},{0x703E, 0xE070},{0x704C, 0x9FF3},{0x7051, 0xE072},{0x7058, 0x93E5},{0x7063, 0xE073},{0x706B, 0x89CE}, - {0x706F, 0x9394},{0x7070, 0x8A44},{0x7078, 0x8B84},{0x707C, 0x8EDC},{0x707D, 0x8DD0},{0x7085, 0xEDF2},{0x7089, 0x9846},{0x708A, 0x9086}, - {0x708E, 0x898A},{0x7092, 0xE075},{0x7099, 0xE074},{0x70AB, 0xEDF3},{0x70AC, 0xE078},{0x70AD, 0x9259},{0x70AE, 0xE07B},{0x70AF, 0xE076}, - {0x70B3, 0xE07A},{0x70B8, 0xE079},{0x70B9, 0x935F},{0x70BA, 0x88D7},{0x70BB, 0xED46},{0x70C8, 0x97F3},{0x70CB, 0xE07D},{0x70CF, 0x8947}, - {0x70D9, 0xE080},{0x70DD, 0xE07E},{0x70DF, 0xE07C},{0x70F1, 0xE077},{0x70F9, 0x9642},{0x70FD, 0xE082},{0x7104, 0xEDF5},{0x7109, 0xE081}, - {0x710F, 0xEDF4},{0x7114, 0x898B},{0x7119, 0xE084},{0x711A, 0x95B0},{0x711C, 0xE083},{0x7121, 0x96B3},{0x7126, 0x8FC5},{0x7136, 0x9152}, - {0x713C, 0x8FC4},{0x7146, 0xEDF7},{0x7147, 0xEDF8},{0x7149, 0x97F9},{0x714C, 0xE08A},{0x714E, 0x90F7},{0x7155, 0xE086},{0x7156, 0xE08B}, - {0x7159, 0x898C},{0x715C, 0xEDF6},{0x7162, 0xE089},{0x7164, 0x9481},{0x7165, 0xE085},{0x7166, 0xE088},{0x7167, 0x8FC6},{0x7169, 0x94CF}, - {0x716C, 0xE08C},{0x716E, 0x8ECF},{0x717D, 0x90F8},{0x7184, 0xE08F},{0x7188, 0xE087},{0x718A, 0x8C46},{0x718F, 0xE08D},{0x7194, 0x976F}, - {0x7195, 0xE090},{0x7199, 0xEAA4},{0x719F, 0x8F6E},{0x71A8, 0xE091},{0x71AC, 0xE092},{0x71B1, 0x944D},{0x71B9, 0xE094},{0x71BE, 0xE095}, - {0x71C1, 0xEDFA},{0x71C3, 0x9452},{0x71C8, 0x9395},{0x71C9, 0xE097},{0x71CE, 0xE099},{0x71D0, 0x97D3},{0x71D2, 0xE096},{0x71D4, 0xE098}, - {0x71D5, 0x898D},{0x71D7, 0xE093},{0x71DF, 0x9A7A},{0x71E0, 0xE09A},{0x71E5, 0x9187},{0x71E6, 0x8E57},{0x71E7, 0xE09C},{0x71EC, 0xE09B}, - {0x71ED, 0x9043},{0x71EE, 0x99D7},{0x71F5, 0xE09D},{0x71F9, 0xE09F},{0x71FB, 0xE08E},{0x71FC, 0xE09E},{0x71FE, 0xEDFB},{0x71FF, 0xE0A0}, - {0x7206, 0x949A},{0x720D, 0xE0A1},{0x7210, 0xE0A2},{0x721B, 0xE0A3},{0x7228, 0xE0A4},{0x722A, 0x92DC},{0x722C, 0xE0A6},{0x722D, 0xE0A5}, - {0x7230, 0xE0A7},{0x7232, 0xE0A8},{0x7235, 0x8EDD},{0x7236, 0x9583},{0x723A, 0x96EA},{0x723B, 0xE0A9},{0x723C, 0xE0AA},{0x723D, 0x9175}, - {0x723E, 0x8EA2},{0x723F, 0xE0AB},{0x7240, 0xE0AC},{0x7246, 0xE0AD},{0x7247, 0x95D0},{0x7248, 0x94C5},{0x724B, 0xE0AE},{0x724C, 0x9476}, - {0x7252, 0x92AB},{0x7258, 0xE0AF},{0x7259, 0x89E5},{0x725B, 0x8B8D},{0x725D, 0x96C4},{0x725F, 0x96B4},{0x7261, 0x89B2},{0x7262, 0x9853}, - {0x7267, 0x9671},{0x7269, 0x95A8},{0x7272, 0x90B5},{0x7274, 0xE0B0},{0x7279, 0x93C1},{0x727D, 0x8CA1},{0x727E, 0xE0B1},{0x7280, 0x8DD2}, - {0x7281, 0xE0B3},{0x7282, 0xE0B2},{0x7287, 0xE0B4},{0x7292, 0xE0B5},{0x7296, 0xE0B6},{0x72A0, 0x8B5D},{0x72A2, 0xE0B7},{0x72A7, 0xE0B8}, - {0x72AC, 0x8CA2},{0x72AF, 0x94C6},{0x72B1, 0xEDFC},{0x72B2, 0xE0BA},{0x72B6, 0x8FF3},{0x72B9, 0xE0B9},{0x72BE, 0xEE40},{0x72C2, 0x8BB6}, - {0x72C3, 0xE0BB},{0x72C4, 0xE0BD},{0x72C6, 0xE0BC},{0x72CE, 0xE0BE},{0x72D0, 0x8CCF},{0x72D2, 0xE0BF},{0x72D7, 0x8BE7},{0x72D9, 0x915F}, - {0x72DB, 0x8D9D},{0x72E0, 0xE0C1},{0x72E1, 0xE0C2},{0x72E2, 0xE0C0},{0x72E9, 0x8EEB},{0x72EC, 0x93C6},{0x72ED, 0x8BB7},{0x72F7, 0xE0C4}, - {0x72F8, 0x924B},{0x72F9, 0xE0C3},{0x72FC, 0x9854},{0x72FD, 0x9482},{0x730A, 0xE0C7},{0x7316, 0xE0C9},{0x7317, 0xE0C6},{0x731B, 0x96D2}, - {0x731C, 0xE0C8},{0x731D, 0xE0CA},{0x731F, 0x97C2},{0x7324, 0xEE41},{0x7325, 0xE0CE},{0x7329, 0xE0CD},{0x732A, 0x9296},{0x732B, 0x944C}, - {0x732E, 0x8CA3},{0x732F, 0xE0CC},{0x7334, 0xE0CB},{0x7336, 0x9750},{0x7337, 0x9751},{0x733E, 0xE0CF},{0x733F, 0x898E},{0x7344, 0x8D96}, - {0x7345, 0x8E82},{0x734E, 0xE0D0},{0x734F, 0xE0D1},{0x7357, 0xE0D3},{0x7363, 0x8F62},{0x7368, 0xE0D5},{0x736A, 0xE0D4},{0x7370, 0xE0D6}, - {0x7372, 0x8A6C},{0x7375, 0xE0D8},{0x7377, 0xEE43},{0x7378, 0xE0D7},{0x737A, 0xE0DA},{0x737B, 0xE0D9},{0x7384, 0x8CBA},{0x7387, 0x97A6}, - {0x7389, 0x8BCA},{0x738B, 0x89A4},{0x7396, 0x8BE8},{0x73A9, 0x8ADF},{0x73B2, 0x97E6},{0x73B3, 0xE0DC},{0x73BB, 0xE0DE},{0x73BD, 0xEE44}, - {0x73C0, 0xE0DF},{0x73C2, 0x89CF},{0x73C8, 0xE0DB},{0x73C9, 0xEE45},{0x73CA, 0x8E58},{0x73CD, 0x92BF},{0x73CE, 0xE0DD},{0x73D2, 0xEE48}, - {0x73D6, 0xEE46},{0x73DE, 0xE0E2},{0x73E0, 0x8EEC},{0x73E3, 0xEE47},{0x73E5, 0xE0E0},{0x73EA, 0x8C5D},{0x73ED, 0x94C7},{0x73EE, 0xE0E1}, - {0x73F1, 0xE0FC},{0x73F5, 0xEE4A},{0x73F8, 0xE0E7},{0x73FE, 0x8CBB},{0x7403, 0x8B85},{0x7405, 0xE0E4},{0x7406, 0x979D},{0x7407, 0xEE49}, - {0x7409, 0x97AE},{0x7422, 0x91F4},{0x7425, 0xE0E6},{0x7426, 0xEE4B},{0x7429, 0xEE4D},{0x742A, 0xEE4C},{0x742E, 0xEE4E},{0x7432, 0xE0E8}, - {0x7433, 0x97D4},{0x7434, 0x8BD5},{0x7435, 0x94FA},{0x7436, 0x9469},{0x743A, 0xE0E9},{0x743F, 0xE0EB},{0x7441, 0xE0EE},{0x7455, 0xE0EA}, - {0x7459, 0xE0ED},{0x745A, 0x8CE8},{0x745B, 0x896C},{0x745C, 0xE0EF},{0x745E, 0x9090},{0x745F, 0xE0EC},{0x7460, 0x97DA},{0x7462, 0xEE4F}, - {0x7463, 0xE0F2},{0x7464, 0xEAA2},{0x7469, 0xE0F0},{0x746A, 0xE0F3},{0x746F, 0xE0E5},{0x7470, 0xE0F1},{0x7473, 0x8DBA},{0x7476, 0xE0F4}, - {0x747E, 0xE0F5},{0x7483, 0x979E},{0x7489, 0xEE50},{0x748B, 0xE0F6},{0x749E, 0xE0F7},{0x749F, 0xEE51},{0x74A2, 0xE0E3},{0x74A7, 0xE0F8}, - {0x74B0, 0x8AC2},{0x74BD, 0x8EA3},{0x74CA, 0xE0F9},{0x74CF, 0xE0FA},{0x74D4, 0xE0FB},{0x74DC, 0x895A},{0x74E0, 0xE140},{0x74E2, 0x955A}, - {0x74E3, 0xE141},{0x74E6, 0x8AA2},{0x74E7, 0xE142},{0x74E9, 0xE143},{0x74EE, 0xE144},{0x74F0, 0xE146},{0x74F1, 0xE147},{0x74F2, 0xE145}, - {0x74F6, 0x9572},{0x74F7, 0xE149},{0x74F8, 0xE148},{0x7501, 0xEE52},{0x7503, 0xE14B},{0x7504, 0xE14A},{0x7505, 0xE14C},{0x750C, 0xE14D}, - {0x750D, 0xE14F},{0x750E, 0xE14E},{0x7511, 0x8D99},{0x7513, 0xE151},{0x7515, 0xE150},{0x7518, 0x8AC3},{0x751A, 0x9072},{0x751C, 0x935B}, - {0x751E, 0xE152},{0x751F, 0x90B6},{0x7523, 0x8E59},{0x7525, 0x8999},{0x7526, 0xE153},{0x7528, 0x9770},{0x752B, 0x95E1},{0x752C, 0xE154}, - {0x752F, 0xED8C},{0x7530, 0x9363},{0x7531, 0x9752},{0x7532, 0x8D62},{0x7533, 0x905C},{0x7537, 0x926A},{0x7538, 0x99B2},{0x753A, 0x92AC}, - {0x753B, 0x89E6},{0x753C, 0xE155},{0x7544, 0xE156},{0x7546, 0xE15B},{0x7549, 0xE159},{0x754A, 0xE158},{0x754B, 0x9DC0},{0x754C, 0x8A45}, - {0x754D, 0xE157},{0x754F, 0x88D8},{0x7551, 0x94A8},{0x7554, 0x94C8},{0x7559, 0x97AF},{0x755A, 0xE15C},{0x755B, 0xE15A},{0x755C, 0x927B}, - {0x755D, 0x90A4},{0x7560, 0x94A9},{0x7562, 0x954C},{0x7564, 0xE15E},{0x7565, 0x97AA},{0x7566, 0x8C6C},{0x7567, 0xE15F},{0x7569, 0xE15D}, - {0x756A, 0x94D4},{0x756B, 0xE160},{0x756D, 0xE161},{0x756F, 0xEE53},{0x7570, 0x88D9},{0x7573, 0x8FF4},{0x7574, 0xE166},{0x7576, 0xE163}, - {0x7577, 0x93EB},{0x7578, 0xE162},{0x757F, 0x8B45},{0x7582, 0xE169},{0x7586, 0xE164},{0x7587, 0xE165},{0x7589, 0xE168},{0x758A, 0xE167}, - {0x758B, 0x9544},{0x758E, 0x9161},{0x758F, 0x9160},{0x7591, 0x8B5E},{0x7594, 0xE16A},{0x759A, 0xE16B},{0x759D, 0xE16C},{0x75A3, 0xE16E}, - {0x75A5, 0xE16D},{0x75AB, 0x8975},{0x75B1, 0xE176},{0x75B2, 0x94E6},{0x75B3, 0xE170},{0x75B5, 0xE172},{0x75B8, 0xE174},{0x75B9, 0x905D}, - {0x75BC, 0xE175},{0x75BD, 0xE173},{0x75BE, 0x8EBE},{0x75C2, 0xE16F},{0x75C3, 0xE171},{0x75C5, 0x9561},{0x75C7, 0x8FC7},{0x75CA, 0xE178}, - {0x75CD, 0xE177},{0x75D2, 0xE179},{0x75D4, 0x8EA4},{0x75D5, 0x8DAD},{0x75D8, 0x9397},{0x75D9, 0xE17A},{0x75DB, 0x92C9},{0x75DE, 0xE17C}, - {0x75E2, 0x979F},{0x75E3, 0xE17B},{0x75E9, 0x9189},{0x75F0, 0xE182},{0x75F2, 0xE184},{0x75F3, 0xE185},{0x75F4, 0x9273},{0x75FA, 0xE183}, - {0x75FC, 0xE180},{0x75FE, 0xE17D},{0x75FF, 0xE17E},{0x7601, 0xE181},{0x7609, 0xE188},{0x760B, 0xE186},{0x760D, 0xE187},{0x761F, 0xE189}, - {0x7620, 0xE18B},{0x7621, 0xE18C},{0x7622, 0xE18D},{0x7624, 0xE18E},{0x7627, 0xE18A},{0x7630, 0xE190},{0x7634, 0xE18F},{0x763B, 0xE191}, - {0x7642, 0x97C3},{0x7646, 0xE194},{0x7647, 0xE192},{0x7648, 0xE193},{0x764C, 0x8AE0},{0x7652, 0x96FC},{0x7656, 0x95C8},{0x7658, 0xE196}, - {0x765C, 0xE195},{0x7661, 0xE197},{0x7662, 0xE198},{0x7667, 0xE19C},{0x7668, 0xE199},{0x7669, 0xE19A},{0x766A, 0xE19B},{0x766C, 0xE19D}, - {0x7670, 0xE19E},{0x7672, 0xE19F},{0x7676, 0xE1A0},{0x7678, 0xE1A1},{0x767A, 0x94AD},{0x767B, 0x936F},{0x767C, 0xE1A2},{0x767D, 0x9492}, - {0x767E, 0x9553},{0x7680, 0xE1A3},{0x7682, 0xEE54},{0x7683, 0xE1A4},{0x7684, 0x9349},{0x7686, 0x8A46},{0x7687, 0x8D63},{0x7688, 0xE1A5}, - {0x768B, 0xE1A6},{0x768E, 0xE1A7},{0x7690, 0x8E48},{0x7693, 0xE1A9},{0x7696, 0xE1A8},{0x7699, 0xE1AA},{0x769A, 0xE1AB},{0x769B, 0xEE57}, - {0x769C, 0xEE55},{0x769E, 0xEE56},{0x76A6, 0xEE58},{0x76AE, 0x94E7},{0x76B0, 0xE1AC},{0x76B4, 0xE1AD},{0x76B7, 0xEA89},{0x76B8, 0xE1AE}, - {0x76B9, 0xE1AF},{0x76BA, 0xE1B0},{0x76BF, 0x8E4D},{0x76C2, 0xE1B1},{0x76C3, 0x9475},{0x76C6, 0x967E},{0x76C8, 0x896D},{0x76CA, 0x8976}, - {0x76CD, 0xE1B2},{0x76D2, 0xE1B4},{0x76D6, 0xE1B3},{0x76D7, 0x9390},{0x76DB, 0x90B7},{0x76DC, 0x9F58},{0x76DE, 0xE1B5},{0x76DF, 0x96BF}, - {0x76E1, 0xE1B6},{0x76E3, 0x8AC4},{0x76E4, 0x94D5},{0x76E5, 0xE1B7},{0x76E7, 0xE1B8},{0x76EA, 0xE1B9},{0x76EE, 0x96DA},{0x76F2, 0x96D3}, - {0x76F4, 0x92BC},{0x76F8, 0x918A},{0x76FB, 0xE1BB},{0x76FE, 0x8F82},{0x7701, 0x8FC8},{0x7704, 0xE1BE},{0x7707, 0xE1BD},{0x7708, 0xE1BC}, - {0x7709, 0x94FB},{0x770B, 0x8AC5},{0x770C, 0x8CA7},{0x771B, 0xE1C4},{0x771E, 0xE1C1},{0x771F, 0x905E},{0x7720, 0x96B0},{0x7724, 0xE1C0}, - {0x7725, 0xE1C2},{0x7726, 0xE1C3},{0x7729, 0xE1BF},{0x7737, 0xE1C5},{0x7738, 0xE1C6},{0x773A, 0x92AD},{0x773C, 0x8AE1},{0x7740, 0x9285}, - {0x7746, 0xEE5A},{0x7747, 0xE1C7},{0x775A, 0xE1C8},{0x775B, 0xE1CB},{0x7761, 0x9087},{0x7763, 0x93C2},{0x7765, 0xE1CC},{0x7766, 0x9672}, - {0x7768, 0xE1C9},{0x776B, 0xE1CA},{0x7779, 0xE1CF},{0x777E, 0xE1CE},{0x777F, 0xE1CD},{0x778B, 0xE1D1},{0x778E, 0xE1D0},{0x7791, 0xE1D2}, - {0x779E, 0xE1D4},{0x77A0, 0xE1D3},{0x77A5, 0x95CB},{0x77AC, 0x8F75},{0x77AD, 0x97C4},{0x77B0, 0xE1D5},{0x77B3, 0x93B5},{0x77B6, 0xE1D6}, - {0x77B9, 0xE1D7},{0x77BB, 0xE1DB},{0x77BC, 0xE1D9},{0x77BD, 0xE1DA},{0x77BF, 0xE1D8},{0x77C7, 0xE1DC},{0x77CD, 0xE1DD},{0x77D7, 0xE1DE}, - {0x77DA, 0xE1DF},{0x77DB, 0x96B5},{0x77DC, 0xE1E0},{0x77E2, 0x96EE},{0x77E3, 0xE1E1},{0x77E5, 0x926D},{0x77E7, 0x948A},{0x77E9, 0x8BE9}, - {0x77ED, 0x925A},{0x77EE, 0xE1E2},{0x77EF, 0x8BB8},{0x77F3, 0x90CE},{0x77FC, 0xE1E3},{0x7802, 0x8DBB},{0x780C, 0xE1E4},{0x7812, 0xE1E5}, - {0x7814, 0x8CA4},{0x7815, 0x8DD3},{0x7820, 0xE1E7},{0x7821, 0xEE5C},{0x7825, 0x9375},{0x7826, 0x8DD4},{0x7827, 0x8B6D},{0x7832, 0x9643}, - {0x7834, 0x946A},{0x783A, 0x9376},{0x783F, 0x8D7B},{0x7845, 0xE1E9},{0x784E, 0xEE5D},{0x785D, 0x8FC9},{0x7864, 0xEE5E},{0x786B, 0x97B0}, - {0x786C, 0x8D64},{0x786F, 0x8CA5},{0x7872, 0x94A1},{0x7874, 0xE1EB},{0x787A, 0xEE5F},{0x787C, 0xE1ED},{0x7881, 0x8CE9},{0x7886, 0xE1EC}, - {0x7887, 0x92F4},{0x788C, 0xE1EF},{0x788D, 0x8A56},{0x788E, 0xE1EA},{0x7891, 0x94E8},{0x7893, 0x894F},{0x7895, 0x8DEA},{0x7897, 0x9871}, - {0x789A, 0xE1EE},{0x78A3, 0xE1F0},{0x78A7, 0x95C9},{0x78A9, 0x90D7},{0x78AA, 0xE1F2},{0x78AF, 0xE1F3},{0x78B5, 0xE1F1},{0x78BA, 0x8A6D}, - {0x78BC, 0xE1F9},{0x78BE, 0xE1F8},{0x78C1, 0x8EA5},{0x78C5, 0xE1FA},{0x78C6, 0xE1F5},{0x78CA, 0xE1FB},{0x78CB, 0xE1F6},{0x78D0, 0x94D6}, - {0x78D1, 0xE1F4},{0x78D4, 0xE1F7},{0x78DA, 0xE241},{0x78E7, 0xE240},{0x78E8, 0x9681},{0x78EC, 0xE1FC},{0x78EF, 0x88E9},{0x78F4, 0xE243}, - {0x78FD, 0xE242},{0x7901, 0x8FCA},{0x7907, 0xE244},{0x790E, 0x9162},{0x7911, 0xE246},{0x7912, 0xE245},{0x7919, 0xE247},{0x7926, 0xE1E6}, - {0x792A, 0xE1E8},{0x792B, 0xE249},{0x792C, 0xE248},{0x7930, 0xEE60},{0x793A, 0x8EA6},{0x793C, 0x97E7},{0x793E, 0x8ED0},{0x7940, 0xE24A}, - {0x7941, 0x8C56},{0x7947, 0x8B5F},{0x7948, 0x8B46},{0x7949, 0x8E83},{0x7950, 0x9753},{0x7953, 0xE250},{0x7955, 0xE24F},{0x7956, 0x9163}, - {0x7957, 0xE24C},{0x795A, 0xE24E},{0x795D, 0x8F6A},{0x795E, 0x905F},{0x795F, 0xE24D},{0x7960, 0xE24B},{0x7962, 0x9449},{0x7965, 0x8FCB}, - {0x7968, 0x955B},{0x796D, 0x8DD5},{0x7977, 0x9398},{0x797A, 0xE251},{0x797F, 0xE252},{0x7980, 0xE268},{0x7981, 0x8BD6},{0x7984, 0x985C}, - {0x7985, 0x9154},{0x798A, 0xE253},{0x798D, 0x89D0},{0x798E, 0x92F5},{0x798F, 0x959F},{0x7994, 0xEE64},{0x799B, 0xEE66},{0x799D, 0xE254}, - {0x79A6, 0x8B9A},{0x79A7, 0xE255},{0x79AA, 0xE257},{0x79AE, 0xE258},{0x79B0, 0x9448},{0x79B3, 0xE259},{0x79B9, 0xE25A},{0x79BA, 0xE25B}, - {0x79BD, 0x8BD7},{0x79BE, 0x89D1},{0x79BF, 0x93C3},{0x79C0, 0x8F47},{0x79C1, 0x8E84},{0x79C9, 0xE25C},{0x79CB, 0x8F48},{0x79D1, 0x89C8}, - {0x79D2, 0x9562},{0x79D5, 0xE25D},{0x79D8, 0x94E9},{0x79DF, 0x9164},{0x79E1, 0xE260},{0x79E3, 0xE261},{0x79E4, 0x9489},{0x79E6, 0x9060}, - {0x79E7, 0xE25E},{0x79E9, 0x9281},{0x79EC, 0xE25F},{0x79F0, 0x8FCC},{0x79FB, 0x88DA},{0x7A00, 0x8B48},{0x7A08, 0xE262},{0x7A0B, 0x92F6}, - {0x7A0D, 0xE263},{0x7A0E, 0x90C5},{0x7A14, 0x96AB},{0x7A17, 0x9542},{0x7A18, 0xE264},{0x7A19, 0xE265},{0x7A1A, 0x9274},{0x7A1C, 0x97C5}, - {0x7A1F, 0xE267},{0x7A20, 0xE266},{0x7A2E, 0x8EED},{0x7A31, 0xE269},{0x7A32, 0x88EE},{0x7A37, 0xE26C},{0x7A3B, 0xE26A},{0x7A3C, 0x89D2}, - {0x7A3D, 0x8C6D},{0x7A3E, 0xE26B},{0x7A3F, 0x8D65},{0x7A40, 0x8D92},{0x7A42, 0x95E4},{0x7A43, 0xE26D},{0x7A46, 0x9673},{0x7A49, 0xE26F}, - {0x7A4D, 0x90CF},{0x7A4E, 0x896E},{0x7A4F, 0x89B8},{0x7A50, 0x88AA},{0x7A57, 0xE26E},{0x7A61, 0xE270},{0x7A62, 0xE271},{0x7A63, 0x8FF5}, - {0x7A69, 0xE272},{0x7A6B, 0x8A6E},{0x7A70, 0xE274},{0x7A74, 0x8C8A},{0x7A76, 0x8B86},{0x7A79, 0xE275},{0x7A7A, 0x8BF3},{0x7A7D, 0xE276}, - {0x7A7F, 0x90FA},{0x7A81, 0x93CB},{0x7A83, 0x90DE},{0x7A84, 0x8DF3},{0x7A88, 0xE277},{0x7A92, 0x9282},{0x7A93, 0x918B},{0x7A95, 0xE279}, - {0x7A96, 0xE27B},{0x7A97, 0xE278},{0x7A98, 0xE27A},{0x7A9F, 0x8C41},{0x7AA9, 0xE27C},{0x7AAA, 0x8C45},{0x7AAE, 0x8B87},{0x7AAF, 0x9771}, - {0x7AB0, 0xE27E},{0x7AB6, 0xE280},{0x7ABA, 0x894D},{0x7ABF, 0xE283},{0x7AC3, 0x8A96},{0x7AC4, 0xE282},{0x7AC5, 0xE281},{0x7AC7, 0xE285}, - {0x7AC8, 0xE27D},{0x7ACA, 0xE286},{0x7ACB, 0x97A7},{0x7ACD, 0xE287},{0x7ACF, 0xE288},{0x7AD1, 0xEE67},{0x7AD2, 0x9AF2},{0x7AD3, 0xE28A}, - {0x7AD5, 0xE289},{0x7AD9, 0xE28B},{0x7ADA, 0xE28C},{0x7ADC, 0x97B3},{0x7ADD, 0xE28D},{0x7ADF, 0xE8ED},{0x7AE0, 0x8FCD},{0x7AE1, 0xE28E}, - {0x7AE2, 0xE28F},{0x7AE3, 0x8F76},{0x7AE5, 0x93B6},{0x7AE6, 0xE290},{0x7AE7, 0xEE68},{0x7AEA, 0x9247},{0x7AEB, 0xEE6A},{0x7AED, 0xE291}, - {0x7AEF, 0x925B},{0x7AF0, 0xE292},{0x7AF6, 0x8BA3},{0x7AF8, 0x995E},{0x7AF9, 0x927C},{0x7AFA, 0x8EB1},{0x7AFF, 0x8AC6},{0x7B02, 0xE293}, - {0x7B04, 0xE2A0},{0x7B06, 0xE296},{0x7B08, 0x8B88},{0x7B0A, 0xE295},{0x7B0B, 0xE2A2},{0x7B0F, 0xE294},{0x7B11, 0x8FCE},{0x7B18, 0xE298}, - {0x7B19, 0xE299},{0x7B1B, 0x934A},{0x7B1E, 0xE29A},{0x7B20, 0x8A7D},{0x7B25, 0x9079},{0x7B26, 0x9584},{0x7B28, 0xE29C},{0x7B2C, 0x91E6}, - {0x7B33, 0xE297},{0x7B35, 0xE29B},{0x7B36, 0xE29D},{0x7B39, 0x8DF9},{0x7B45, 0xE2A4},{0x7B46, 0x954D},{0x7B48, 0x94A4},{0x7B49, 0x9399}, - {0x7B4B, 0x8BD8},{0x7B4C, 0xE2A3},{0x7B4D, 0xE2A1},{0x7B4F, 0x94B3},{0x7B50, 0xE29E},{0x7B51, 0x927D},{0x7B52, 0x939B},{0x7B54, 0x939A}, - {0x7B56, 0x8DF4},{0x7B5D, 0xE2B6},{0x7B65, 0xE2A6},{0x7B67, 0xE2A8},{0x7B6C, 0xE2AB},{0x7B6E, 0xE2AC},{0x7B70, 0xE2A9},{0x7B71, 0xE2AA}, - {0x7B74, 0xE2A7},{0x7B75, 0xE2A5},{0x7B7A, 0xE29F},{0x7B86, 0x95CD},{0x7B87, 0x89D3},{0x7B8B, 0xE2B3},{0x7B8D, 0xE2B0},{0x7B8F, 0xE2B5}, - {0x7B92, 0xE2B4},{0x7B94, 0x9493},{0x7B95, 0x96A5},{0x7B97, 0x8E5A},{0x7B98, 0xE2AE},{0x7B99, 0xE2B7},{0x7B9A, 0xE2B2},{0x7B9C, 0xE2B1}, - {0x7B9D, 0xE2AD},{0x7B9E, 0xEE6B},{0x7B9F, 0xE2AF},{0x7BA1, 0x8AC7},{0x7BAA, 0x925C},{0x7BAD, 0x90FB},{0x7BB1, 0x94A0},{0x7BB4, 0xE2BC}, - {0x7BB8, 0x94A2},{0x7BC0, 0x90DF},{0x7BC1, 0xE2B9},{0x7BC4, 0x94CD},{0x7BC6, 0xE2BD},{0x7BC7, 0x95D1},{0x7BC9, 0x927A},{0x7BCB, 0xE2B8}, - {0x7BCC, 0xE2BA},{0x7BCF, 0xE2BB},{0x7BDD, 0xE2BE},{0x7BE0, 0x8EC2},{0x7BE4, 0x93C4},{0x7BE5, 0xE2C3},{0x7BE6, 0xE2C2},{0x7BE9, 0xE2BF}, - {0x7BED, 0x9855},{0x7BF3, 0xE2C8},{0x7BF6, 0xE2CC},{0x7BF7, 0xE2C9},{0x7C00, 0xE2C5},{0x7C07, 0xE2C6},{0x7C0D, 0xE2CB},{0x7C11, 0xE2C0}, - {0x7C12, 0x99D3},{0x7C13, 0xE2C7},{0x7C14, 0xE2C1},{0x7C17, 0xE2CA},{0x7C1F, 0xE2D0},{0x7C21, 0x8AC8},{0x7C23, 0xE2CD},{0x7C27, 0xE2CE}, - {0x7C2A, 0xE2CF},{0x7C2B, 0xE2D2},{0x7C37, 0xE2D1},{0x7C38, 0x94F4},{0x7C3D, 0xE2D3},{0x7C3E, 0x97FA},{0x7C3F, 0x95EB},{0x7C40, 0xE2D8}, - {0x7C43, 0xE2D5},{0x7C4C, 0xE2D4},{0x7C4D, 0x90D0},{0x7C4F, 0xE2D7},{0x7C50, 0xE2D9},{0x7C54, 0xE2D6},{0x7C56, 0xE2DD},{0x7C58, 0xE2DA}, - {0x7C5F, 0xE2DB},{0x7C60, 0xE2C4},{0x7C64, 0xE2DC},{0x7C65, 0xE2DE},{0x7C6C, 0xE2DF},{0x7C73, 0x95C4},{0x7C75, 0xE2E0},{0x7C7E, 0x96E0}, - {0x7C81, 0x8BCC},{0x7C82, 0x8C48},{0x7C83, 0xE2E1},{0x7C89, 0x95B2},{0x7C8B, 0x9088},{0x7C8D, 0x96AE},{0x7C90, 0xE2E2},{0x7C92, 0x97B1}, - {0x7C95, 0x9494},{0x7C97, 0x9165},{0x7C98, 0x9453},{0x7C9B, 0x8F6C},{0x7C9F, 0x88BE},{0x7CA1, 0xE2E7},{0x7CA2, 0xE2E5},{0x7CA4, 0xE2E3}, - {0x7CA5, 0x8A9F},{0x7CA7, 0x8FCF},{0x7CA8, 0xE2E8},{0x7CAB, 0xE2E6},{0x7CAD, 0xE2E4},{0x7CAE, 0xE2EC},{0x7CB1, 0xE2EB},{0x7CB2, 0xE2EA}, - {0x7CB3, 0xE2E9},{0x7CB9, 0xE2ED},{0x7CBD, 0xE2EE},{0x7CBE, 0x90B8},{0x7CC0, 0xE2EF},{0x7CC2, 0xE2F1},{0x7CC5, 0xE2F0},{0x7CCA, 0x8CD0}, - {0x7CCE, 0x9157},{0x7CD2, 0xE2F3},{0x7CD6, 0x939C},{0x7CD8, 0xE2F2},{0x7CDC, 0xE2F4},{0x7CDE, 0x95B3},{0x7CDF, 0x918C},{0x7CE0, 0x8D66}, - {0x7CE2, 0xE2F5},{0x7CE7, 0x97C6},{0x7CEF, 0xE2F7},{0x7CF2, 0xE2F8},{0x7CF4, 0xE2F9},{0x7CF6, 0xE2FA},{0x7CF8, 0x8E85},{0x7CFA, 0xE2FB}, - {0x7CFB, 0x8C6E},{0x7CFE, 0x8B8A},{0x7D00, 0x8B49},{0x7D02, 0xE340},{0x7D04, 0x96F1},{0x7D05, 0x8D67},{0x7D06, 0xE2FC},{0x7D0A, 0xE343}, - {0x7D0B, 0x96E4},{0x7D0D, 0x945B},{0x7D10, 0x9552},{0x7D14, 0x8F83},{0x7D15, 0xE342},{0x7D17, 0x8ED1},{0x7D18, 0x8D68},{0x7D19, 0x8E86}, - {0x7D1A, 0x8B89},{0x7D1B, 0x95B4},{0x7D1C, 0xE341},{0x7D20, 0x9166},{0x7D21, 0x9661},{0x7D22, 0x8DF5},{0x7D2B, 0x8E87},{0x7D2C, 0x92DB}, - {0x7D2E, 0xE346},{0x7D2F, 0x97DD},{0x7D30, 0x8DD7},{0x7D32, 0xE347},{0x7D33, 0x9061},{0x7D35, 0xE349},{0x7D39, 0x8FD0},{0x7D3A, 0x8DAE}, - {0x7D3F, 0xE348},{0x7D42, 0x8F49},{0x7D43, 0x8CBC},{0x7D44, 0x9167},{0x7D45, 0xE344},{0x7D46, 0xE34A},{0x7D48, 0xEE6D},{0x7D4B, 0xE345}, - {0x7D4C, 0x8C6F},{0x7D4E, 0xE34D},{0x7D4F, 0xE351},{0x7D50, 0x8C8B},{0x7D56, 0xE34C},{0x7D5B, 0xE355},{0x7D5C, 0xEE6E},{0x7D5E, 0x8D69}, - {0x7D61, 0x978D},{0x7D62, 0x88BA},{0x7D63, 0xE352},{0x7D66, 0x8B8B},{0x7D68, 0xE34F},{0x7D6E, 0xE350},{0x7D71, 0x939D},{0x7D72, 0xE34E}, - {0x7D73, 0xE34B},{0x7D75, 0x8A47},{0x7D76, 0x90E2},{0x7D79, 0x8CA6},{0x7D7D, 0xE357},{0x7D89, 0xE354},{0x7D8F, 0xE356},{0x7D93, 0xE353}, - {0x7D99, 0x8C70},{0x7D9A, 0x91B1},{0x7D9B, 0xE358},{0x7D9C, 0x918E},{0x7D9F, 0xE365},{0x7DA0, 0xEE70},{0x7DA2, 0xE361},{0x7DA3, 0xE35B}, - {0x7DAB, 0xE35F},{0x7DAC, 0x8EF8},{0x7DAD, 0x88DB},{0x7DAE, 0xE35A},{0x7DAF, 0xE362},{0x7DB0, 0xE366},{0x7DB1, 0x8D6A},{0x7DB2, 0x96D4}, - {0x7DB4, 0x92D4},{0x7DB5, 0xE35C},{0x7DB7, 0xEE6F},{0x7DB8, 0xE364},{0x7DBA, 0xE359},{0x7DBB, 0x925D},{0x7DBD, 0xE35E},{0x7DBE, 0x88BB}, - {0x7DBF, 0x96C8},{0x7DC7, 0xE35D},{0x7DCA, 0x8BD9},{0x7DCB, 0x94EA},{0x7DCF, 0x918D},{0x7DD1, 0x97CE},{0x7DD2, 0x8F8F},{0x7DD5, 0xE38E}, - {0x7DD6, 0xEE71},{0x7DD8, 0xE367},{0x7DDA, 0x90FC},{0x7DDC, 0xE363},{0x7DDD, 0xE368},{0x7DDE, 0xE36A},{0x7DE0, 0x92F7},{0x7DE1, 0xE36D}, - {0x7DE4, 0xE369},{0x7DE8, 0x95D2},{0x7DE9, 0x8AC9},{0x7DEC, 0x96C9},{0x7DEF, 0x88DC},{0x7DF2, 0xE36C},{0x7DF4, 0x97FB},{0x7DFB, 0xE36B}, - {0x7E01, 0x898F},{0x7E04, 0x93EA},{0x7E05, 0xE36E},{0x7E09, 0xE375},{0x7E0A, 0xE36F},{0x7E0B, 0xE376},{0x7E12, 0xE372},{0x7E1B, 0x949B}, - {0x7E1E, 0x8EC8},{0x7E1F, 0xE374},{0x7E21, 0xE371},{0x7E22, 0xE377},{0x7E23, 0xE370},{0x7E26, 0x8F63},{0x7E2B, 0x9644},{0x7E2E, 0x8F6B}, - {0x7E31, 0xE373},{0x7E32, 0xE380},{0x7E35, 0xE37B},{0x7E37, 0xE37E},{0x7E39, 0xE37C},{0x7E3A, 0xE381},{0x7E3B, 0xE37A},{0x7E3D, 0xE360}, - {0x7E3E, 0x90D1},{0x7E41, 0x94C9},{0x7E43, 0xE37D},{0x7E46, 0xE378},{0x7E4A, 0x9140},{0x7E4B, 0x8C71},{0x7E4D, 0x8F4A},{0x7E52, 0xEE72}, - {0x7E54, 0x9044},{0x7E55, 0x9155},{0x7E56, 0xE384},{0x7E59, 0xE386},{0x7E5A, 0xE387},{0x7E5D, 0xE383},{0x7E5E, 0xE385},{0x7E66, 0xE379}, - {0x7E67, 0xE382},{0x7E69, 0xE38A},{0x7E6A, 0xE389},{0x7E6D, 0x969A},{0x7E70, 0x8C4A},{0x7E79, 0xE388},{0x7E7B, 0xE38C},{0x7E7C, 0xE38B}, - {0x7E7D, 0xE38F},{0x7E7F, 0xE391},{0x7E82, 0x8E5B},{0x7E83, 0xE38D},{0x7E88, 0xE392},{0x7E89, 0xE393},{0x7E8A, 0xED40},{0x7E8C, 0xE394}, - {0x7E8E, 0xE39A},{0x7E8F, 0x935A},{0x7E90, 0xE396},{0x7E92, 0xE395},{0x7E93, 0xE397},{0x7E94, 0xE398},{0x7E96, 0xE399},{0x7E9B, 0xE39B}, - {0x7E9C, 0xE39C},{0x7F36, 0x8ACA},{0x7F38, 0xE39D},{0x7F3A, 0xE39E},{0x7F45, 0xE39F},{0x7F47, 0xEE73},{0x7F4C, 0xE3A0},{0x7F4D, 0xE3A1}, - {0x7F4E, 0xE3A2},{0x7F50, 0xE3A3},{0x7F51, 0xE3A4},{0x7F54, 0xE3A6},{0x7F55, 0xE3A5},{0x7F58, 0xE3A7},{0x7F5F, 0xE3A8},{0x7F60, 0xE3A9}, - {0x7F67, 0xE3AC},{0x7F68, 0xE3AA},{0x7F69, 0xE3AB},{0x7F6A, 0x8DDF},{0x7F6B, 0x8C72},{0x7F6E, 0x9275},{0x7F70, 0x94B1},{0x7F72, 0x8F90}, - {0x7F75, 0x946C},{0x7F77, 0x94EB},{0x7F78, 0xE3AD},{0x7F79, 0x9CEB},{0x7F82, 0xE3AE},{0x7F83, 0xE3B0},{0x7F85, 0x9785},{0x7F86, 0xE3AF}, - {0x7F87, 0xE3B2},{0x7F88, 0xE3B1},{0x7F8A, 0x9772},{0x7F8C, 0xE3B3},{0x7F8E, 0x94FC},{0x7F94, 0xE3B4},{0x7F9A, 0xE3B7},{0x7F9D, 0xE3B6}, - {0x7F9E, 0xE3B5},{0x7FA1, 0xEE74},{0x7FA3, 0xE3B8},{0x7FA4, 0x8C51},{0x7FA8, 0x9141},{0x7FA9, 0x8B60},{0x7FAE, 0xE3BC},{0x7FAF, 0xE3B9}, - {0x7FB2, 0xE3BA},{0x7FB6, 0xE3BD},{0x7FB8, 0xE3BE},{0x7FB9, 0xE3BB},{0x7FBD, 0x8948},{0x7FC1, 0x89A5},{0x7FC5, 0xE3C0},{0x7FC6, 0xE3C1}, - {0x7FCA, 0xE3C2},{0x7FCC, 0x9782},{0x7FD2, 0x8F4B},{0x7FD4, 0xE3C4},{0x7FD5, 0xE3C3},{0x7FE0, 0x9089},{0x7FE1, 0xE3C5},{0x7FE6, 0xE3C6}, - {0x7FE9, 0xE3C7},{0x7FEB, 0x8AE3},{0x7FF0, 0x8ACB},{0x7FF3, 0xE3C8},{0x7FF9, 0xE3C9},{0x7FFB, 0x967C},{0x7FFC, 0x9783},{0x8000, 0x9773}, - {0x8001, 0x9856},{0x8003, 0x8D6C},{0x8004, 0xE3CC},{0x8005, 0x8ED2},{0x8006, 0xE3CB},{0x800B, 0xE3CD},{0x800C, 0x8EA7},{0x8010, 0x91CF}, - {0x8012, 0xE3CE},{0x8015, 0x8D6B},{0x8017, 0x96D5},{0x8018, 0xE3CF},{0x8019, 0xE3D0},{0x801C, 0xE3D1},{0x8021, 0xE3D2},{0x8028, 0xE3D3}, - {0x8033, 0x8EA8},{0x8036, 0x96EB},{0x803B, 0xE3D5},{0x803D, 0x925E},{0x803F, 0xE3D4},{0x8046, 0xE3D7},{0x804A, 0xE3D6},{0x8052, 0xE3D8}, - {0x8056, 0x90B9},{0x8058, 0xE3D9},{0x805A, 0xE3DA},{0x805E, 0x95B7},{0x805F, 0xE3DB},{0x8061, 0x918F},{0x8062, 0xE3DC},{0x8068, 0xE3DD}, - {0x806F, 0x97FC},{0x8070, 0xE3E0},{0x8072, 0xE3DF},{0x8073, 0xE3DE},{0x8074, 0x92AE},{0x8076, 0xE3E1},{0x8077, 0x9045},{0x8079, 0xE3E2}, - {0x807D, 0xE3E3},{0x807E, 0x9857},{0x807F, 0xE3E4},{0x8084, 0xE3E5},{0x8085, 0xE3E7},{0x8086, 0xE3E6},{0x8087, 0x94A3},{0x8089, 0x93F7}, - {0x808B, 0x985D},{0x808C, 0x94A7},{0x8093, 0xE3E9},{0x8096, 0x8FD1},{0x8098, 0x9549},{0x809A, 0xE3EA},{0x809B, 0xE3E8},{0x809D, 0x8ACC}, - {0x80A1, 0x8CD2},{0x80A2, 0x8E88},{0x80A5, 0x94EC},{0x80A9, 0x8CA8},{0x80AA, 0x9662},{0x80AC, 0xE3ED},{0x80AD, 0xE3EB},{0x80AF, 0x8D6D}, - {0x80B1, 0x8D6E},{0x80B2, 0x88E7},{0x80B4, 0x8DE6},{0x80BA, 0x9478},{0x80C3, 0x88DD},{0x80C4, 0xE3F2},{0x80C6, 0x925F},{0x80CC, 0x9477}, - {0x80CE, 0x91D9},{0x80D6, 0xE3F4},{0x80D9, 0xE3F0},{0x80DA, 0xE3F3},{0x80DB, 0xE3EE},{0x80DD, 0xE3F1},{0x80DE, 0x9645},{0x80E1, 0x8CD3}, - {0x80E4, 0x88FB},{0x80E5, 0xE3EF},{0x80EF, 0xE3F6},{0x80F1, 0xE3F7},{0x80F4, 0x93B7},{0x80F8, 0x8BB9},{0x80FC, 0xE445},{0x80FD, 0x945C}, - {0x8102, 0x8E89},{0x8105, 0x8BBA},{0x8106, 0x90C6},{0x8107, 0x9865},{0x8108, 0x96AC},{0x8109, 0xE3F5},{0x810A, 0x90D2},{0x811A, 0x8B72}, - {0x811B, 0xE3F8},{0x8123, 0xE3FA},{0x8129, 0xE3F9},{0x812F, 0xE3FB},{0x8131, 0x9245},{0x8133, 0x945D},{0x8139, 0x92AF},{0x813E, 0xE442}, - {0x8146, 0xE441},{0x814B, 0xE3FC},{0x814E, 0x9074},{0x8150, 0x9585},{0x8151, 0xE444},{0x8153, 0xE443},{0x8154, 0x8D6F},{0x8155, 0x9872}, - {0x815F, 0xE454},{0x8165, 0xE448},{0x8166, 0xE449},{0x816B, 0x8EEE},{0x816E, 0xE447},{0x8170, 0x8D98},{0x8171, 0xE446},{0x8174, 0xE44A}, - {0x8178, 0x92B0},{0x8179, 0x95A0},{0x817A, 0x9142},{0x817F, 0x91DA},{0x8180, 0xE44E},{0x8182, 0xE44F},{0x8183, 0xE44B},{0x8188, 0xE44C}, - {0x818A, 0xE44D},{0x818F, 0x8D70},{0x8193, 0xE455},{0x8195, 0xE451},{0x819A, 0x9586},{0x819C, 0x968C},{0x819D, 0x9547},{0x81A0, 0xE450}, - {0x81A3, 0xE453},{0x81A4, 0xE452},{0x81A8, 0x9663},{0x81A9, 0xE456},{0x81B0, 0xE457},{0x81B3, 0x9156},{0x81B5, 0xE458},{0x81B8, 0xE45A}, - {0x81BA, 0xE45E},{0x81BD, 0xE45B},{0x81BE, 0xE459},{0x81BF, 0x945E},{0x81C0, 0xE45C},{0x81C2, 0xE45D},{0x81C6, 0x89B0},{0x81C8, 0xE464}, - {0x81C9, 0xE45F},{0x81CD, 0xE460},{0x81D1, 0xE461},{0x81D3, 0x919F},{0x81D8, 0xE463},{0x81D9, 0xE462},{0x81DA, 0xE465},{0x81DF, 0xE466}, - {0x81E0, 0xE467},{0x81E3, 0x9062},{0x81E5, 0x89E7},{0x81E7, 0xE468},{0x81E8, 0x97D5},{0x81EA, 0x8EA9},{0x81ED, 0x8F4C},{0x81F3, 0x8E8A}, - {0x81F4, 0x9276},{0x81FA, 0xE469},{0x81FB, 0xE46A},{0x81FC, 0x8950},{0x81FE, 0xE46B},{0x8201, 0xE46C},{0x8202, 0xE46D},{0x8205, 0xE46E}, - {0x8207, 0xE46F},{0x8208, 0x8BBB},{0x8209, 0x9DA8},{0x820A, 0xE470},{0x820C, 0x90E3},{0x820D, 0xE471},{0x820E, 0x8EC9},{0x8210, 0xE472}, - {0x8212, 0x98AE},{0x8216, 0xE473},{0x8217, 0x95DC},{0x8218, 0x8ADA},{0x821B, 0x9143},{0x821C, 0x8F77},{0x821E, 0x9591},{0x821F, 0x8F4D}, - {0x8229, 0xE474},{0x822A, 0x8D71},{0x822B, 0xE475},{0x822C, 0x94CA},{0x822E, 0xE484},{0x8233, 0xE477},{0x8235, 0x91C7},{0x8236, 0x9495}, - {0x8237, 0x8CBD},{0x8238, 0xE476},{0x8239, 0x9144},{0x8240, 0xE478},{0x8247, 0x92F8},{0x8258, 0xE47A},{0x8259, 0xE479},{0x825A, 0xE47C}, - {0x825D, 0xE47B},{0x825F, 0xE47D},{0x8262, 0xE480},{0x8264, 0xE47E},{0x8266, 0x8ACD},{0x8268, 0xE481},{0x826A, 0xE482},{0x826B, 0xE483}, - {0x826E, 0x8DAF},{0x826F, 0x97C7},{0x8271, 0xE485},{0x8272, 0x9046},{0x8276, 0x8990},{0x8277, 0xE486},{0x8278, 0xE487},{0x827E, 0xE488}, - {0x828B, 0x88F0},{0x828D, 0xE489},{0x8292, 0xE48A},{0x8299, 0x9587},{0x829D, 0x8EC5},{0x829F, 0xE48C},{0x82A5, 0x8A48},{0x82A6, 0x88B0}, - {0x82AB, 0xE48B},{0x82AC, 0xE48E},{0x82AD, 0x946D},{0x82AF, 0x9063},{0x82B1, 0x89D4},{0x82B3, 0x9646},{0x82B8, 0x8C7C},{0x82B9, 0x8BDA}, - {0x82BB, 0xE48D},{0x82BD, 0x89E8},{0x82C5, 0x8AA1},{0x82D1, 0x8991},{0x82D2, 0xE492},{0x82D3, 0x97E8},{0x82D4, 0x91DB},{0x82D7, 0x9563}, - {0x82D9, 0xE49E},{0x82DB, 0x89D5},{0x82DC, 0xE49C},{0x82DE, 0xE49A},{0x82DF, 0xE491},{0x82E1, 0xE48F},{0x82E3, 0xE490},{0x82E5, 0x8EE1}, - {0x82E6, 0x8BEA},{0x82E7, 0x9297},{0x82EB, 0x93CF},{0x82F1, 0x8970},{0x82F3, 0xE494},{0x82F4, 0xE493},{0x82F9, 0xE499},{0x82FA, 0xE495}, - {0x82FB, 0xE498},{0x8301, 0xEE76},{0x8302, 0x96CE},{0x8303, 0xE497},{0x8304, 0x89D6},{0x8305, 0x8A9D},{0x8306, 0xE49B},{0x8309, 0xE49D}, - {0x830E, 0x8C73},{0x8316, 0xE4A1},{0x8317, 0xE4AA},{0x8318, 0xE4AB},{0x831C, 0x88A9},{0x8323, 0xE4B2},{0x8328, 0x88EF},{0x832B, 0xE4A9}, - {0x832F, 0xE4A8},{0x8331, 0xE4A3},{0x8332, 0xE4A2},{0x8334, 0xE4A0},{0x8335, 0xE49F},{0x8336, 0x9283},{0x8338, 0x91F9},{0x8339, 0xE4A5}, - {0x8340, 0xE4A4},{0x8345, 0xE4A7},{0x8349, 0x9190},{0x834A, 0x8C74},{0x834F, 0x8960},{0x8350, 0xE4A6},{0x8352, 0x8D72},{0x8358, 0x9191}, - {0x8362, 0xEE77},{0x8373, 0xE4B8},{0x8375, 0xE4B9},{0x8377, 0x89D7},{0x837B, 0x89AC},{0x837C, 0xE4B6},{0x837F, 0xEE78},{0x8385, 0xE4AC}, - {0x8387, 0xE4B4},{0x8389, 0xE4BB},{0x838A, 0xE4B5},{0x838E, 0xE4B3},{0x8393, 0xE496},{0x8396, 0xE4B1},{0x839A, 0xE4AD},{0x839E, 0x8ACE}, - {0x839F, 0xE4AF},{0x83A0, 0xE4BA},{0x83A2, 0xE4B0},{0x83A8, 0xE4BC},{0x83AA, 0xE4AE},{0x83AB, 0x949C},{0x83B1, 0x9789},{0x83B5, 0xE4B7}, - {0x83BD, 0xE4CD},{0x83C1, 0xE4C5},{0x83C5, 0x909B},{0x83C7, 0xEE79},{0x83CA, 0x8B65},{0x83CC, 0x8BDB},{0x83CE, 0xE4C0},{0x83D3, 0x89D9}, - {0x83D6, 0x8FD2},{0x83D8, 0xE4C3},{0x83DC, 0x8DD8},{0x83DF, 0x9370},{0x83E0, 0xE4C8},{0x83E9, 0x95EC},{0x83EB, 0xE4BF},{0x83EF, 0x89D8}, - {0x83F0, 0x8CD4},{0x83F1, 0x9548},{0x83F2, 0xE4C9},{0x83F4, 0xE4BD},{0x83F6, 0xEE7A},{0x83F7, 0xE4C6},{0x83FB, 0xE4D0},{0x83FD, 0xE4C1}, - {0x8403, 0xE4C2},{0x8404, 0x93B8},{0x8407, 0xE4C7},{0x840B, 0xE4C4},{0x840C, 0x9647},{0x840D, 0xE4CA},{0x840E, 0x88DE},{0x8413, 0xE4BE}, - {0x8420, 0xE4CC},{0x8422, 0xE4CB},{0x8429, 0x948B},{0x842A, 0xE4D2},{0x842C, 0xE4DD},{0x8431, 0x8A9E},{0x8435, 0xE4E0},{0x8438, 0xE4CE}, - {0x843C, 0xE4D3},{0x843D, 0x978E},{0x8446, 0xE4DC},{0x8448, 0xEE7B},{0x8449, 0x9774},{0x844E, 0x97A8},{0x8457, 0x9298},{0x845B, 0x8A8B}, - {0x8461, 0x9592},{0x8462, 0xE4E2},{0x8463, 0x939F},{0x8466, 0x88AF},{0x8469, 0xE4DB},{0x846B, 0xE4D7},{0x846C, 0x9192},{0x846D, 0xE4D1}, - {0x846E, 0xE4D9},{0x846F, 0xE4DE},{0x8471, 0x944B},{0x8475, 0x88A8},{0x8477, 0xE4D6},{0x8479, 0xE4DF},{0x847A, 0x9598},{0x8482, 0xE4DA}, - {0x8484, 0xE4D5},{0x848B, 0x8FD3},{0x8490, 0x8F4E},{0x8494, 0x8EAA},{0x8499, 0x96D6},{0x849C, 0x9566},{0x849F, 0xE4E5},{0x84A1, 0xE4EE}, - {0x84AD, 0xE4D8},{0x84B2, 0x8A97},{0x84B4, 0xEE7C},{0x84B8, 0x8FF6},{0x84B9, 0xE4E3},{0x84BB, 0xE4E8},{0x84BC, 0x9193},{0x84BF, 0xE4E4}, - {0x84C1, 0xE4EB},{0x84C4, 0x927E},{0x84C6, 0xE4EC},{0x84C9, 0x9775},{0x84CA, 0xE4E1},{0x84CB, 0x8A57},{0x84CD, 0xE4E7},{0x84D0, 0xE4EA}, - {0x84D1, 0x96AA},{0x84D6, 0xE4ED},{0x84D9, 0xE4E6},{0x84DA, 0xE4E9},{0x84DC, 0xED44},{0x84EC, 0x9648},{0x84EE, 0x9840},{0x84F4, 0xE4F1}, - {0x84FC, 0xE4F8},{0x84FF, 0xE4F0},{0x8500, 0x8EC1},{0x8506, 0xE4CF},{0x8511, 0x95CC},{0x8513, 0x96A0},{0x8514, 0xE4F7},{0x8515, 0xE4F6}, - {0x8517, 0xE4F2},{0x8518, 0xE4F3},{0x851A, 0x8955},{0x851F, 0xE4F5},{0x8521, 0xE4EF},{0x8526, 0x92D3},{0x852C, 0xE4F4},{0x852D, 0x88FC}, - {0x8535, 0x91A0},{0x853D, 0x95C1},{0x8540, 0xE4F9},{0x8541, 0xE540},{0x8543, 0x94D7},{0x8548, 0xE4FC},{0x8549, 0x8FD4},{0x854A, 0x8EC7}, - {0x854B, 0xE542},{0x854E, 0x8BBC},{0x8553, 0xEE7D},{0x8555, 0xE543},{0x8557, 0x9599},{0x8558, 0xE4FB},{0x8559, 0xEE7E},{0x855A, 0xE4D4}, - {0x8563, 0xE4FA},{0x8568, 0x986E},{0x8569, 0x93A0},{0x856A, 0x9593},{0x856B, 0xEE80},{0x856D, 0xE54A},{0x8577, 0xE550},{0x857E, 0xE551}, - {0x8580, 0xE544},{0x8584, 0x9496},{0x8587, 0xE54E},{0x8588, 0xE546},{0x858A, 0xE548},{0x8590, 0xE552},{0x8591, 0xE547},{0x8594, 0xE54B}, - {0x8597, 0x8992},{0x8599, 0x93E3},{0x859B, 0xE54C},{0x859C, 0xE54F},{0x85A4, 0xE545},{0x85A6, 0x9145},{0x85A8, 0xE549},{0x85A9, 0x8E46}, - {0x85AA, 0x9064},{0x85AB, 0x8C4F},{0x85AC, 0x96F2},{0x85AE, 0x96F7},{0x85AF, 0x8F92},{0x85B0, 0xEE82},{0x85B9, 0xE556},{0x85BA, 0xE554}, - {0x85C1, 0x986D},{0x85C9, 0xE553},{0x85CD, 0x9795},{0x85CF, 0xE555},{0x85D0, 0xE557},{0x85D5, 0xE558},{0x85DC, 0xE55B},{0x85DD, 0xE559}, - {0x85E4, 0x93A1},{0x85E5, 0xE55A},{0x85E9, 0x94CB},{0x85EA, 0xE54D},{0x85F7, 0x8F93},{0x85F9, 0xE55C},{0x85FA, 0xE561},{0x85FB, 0x9194}, - {0x85FE, 0xE560},{0x8602, 0xE541},{0x8606, 0xE562},{0x8607, 0x9168},{0x860A, 0xE55D},{0x860B, 0xE55F},{0x8613, 0xE55E},{0x8616, 0x9F50}, - {0x8617, 0x9F41},{0x861A, 0xE564},{0x8622, 0xE563},{0x862D, 0x9796},{0x862F, 0xE1BA},{0x8630, 0xE565},{0x863F, 0xE566},{0x864D, 0xE567}, - {0x864E, 0x8CD5},{0x8650, 0x8B73},{0x8654, 0xE569},{0x8655, 0x997C},{0x865A, 0x8B95},{0x865C, 0x97B8},{0x865E, 0x8BF1},{0x865F, 0xE56A}, - {0x8667, 0xE56B},{0x866B, 0x928E},{0x8671, 0xE56C},{0x8679, 0x93F8},{0x867B, 0x88B8},{0x868A, 0x89E1},{0x868B, 0xE571},{0x868C, 0xE572}, - {0x8693, 0xE56D},{0x8695, 0x8E5C},{0x86A3, 0xE56E},{0x86A4, 0x9461},{0x86A9, 0xE56F},{0x86AA, 0xE570},{0x86AB, 0xE57A},{0x86AF, 0xE574}, - {0x86B0, 0xE577},{0x86B6, 0xE573},{0x86C4, 0xE575},{0x86C6, 0xE576},{0x86C7, 0x8ED6},{0x86C9, 0xE578},{0x86CB, 0x9260},{0x86CD, 0x8C75}, - {0x86CE, 0x8A61},{0x86D4, 0xE57B},{0x86D9, 0x8A5E},{0x86DB, 0xE581},{0x86DE, 0xE57C},{0x86DF, 0xE580},{0x86E4, 0x94B8},{0x86E9, 0xE57D}, - {0x86EC, 0xE57E},{0x86ED, 0x9567},{0x86EE, 0x94D8},{0x86EF, 0xE582},{0x86F8, 0x91FB},{0x86F9, 0xE58C},{0x86FB, 0xE588},{0x86FE, 0x89E9}, - {0x8700, 0xE586},{0x8702, 0x9649},{0x8703, 0xE587},{0x8706, 0xE584},{0x8708, 0xE585},{0x8709, 0xE58A},{0x870A, 0xE58D},{0x870D, 0xE58B}, - {0x8711, 0xE589},{0x8712, 0xE583},{0x8718, 0x9277},{0x871A, 0xE594},{0x871C, 0x96A8},{0x8725, 0xE592},{0x8729, 0xE593},{0x8734, 0xE58E}, - {0x8737, 0xE590},{0x873B, 0xE591},{0x873F, 0xE58F},{0x8749, 0x90E4},{0x874B, 0x9858},{0x874C, 0xE598},{0x874E, 0xE599},{0x8753, 0xE59F}, - {0x8755, 0x9049},{0x8757, 0xE59B},{0x8759, 0xE59E},{0x875F, 0xE596},{0x8760, 0xE595},{0x8763, 0xE5A0},{0x8766, 0x89DA},{0x8768, 0xE59C}, - {0x876A, 0xE5A1},{0x876E, 0xE59D},{0x8774, 0xE59A},{0x8776, 0x92B1},{0x8778, 0xE597},{0x877F, 0x9488},{0x8782, 0xE5A5},{0x878D, 0x975A}, - {0x879F, 0xE5A4},{0x87A2, 0xE5A3},{0x87AB, 0xE5AC},{0x87AF, 0xE5A6},{0x87B3, 0xE5AE},{0x87BA, 0x9786},{0x87BB, 0xE5B1},{0x87BD, 0xE5A8}, - {0x87C0, 0xE5A9},{0x87C4, 0xE5AD},{0x87C6, 0xE5B0},{0x87C7, 0xE5AF},{0x87CB, 0xE5A7},{0x87D0, 0xE5AA},{0x87D2, 0xE5BB},{0x87E0, 0xE5B4}, - {0x87EF, 0xE5B2},{0x87F2, 0xE5B3},{0x87F6, 0xE5B8},{0x87F7, 0xE5B9},{0x87F9, 0x8A49},{0x87FB, 0x8B61},{0x87FE, 0xE5B7},{0x8805, 0xE5A2}, - {0x8807, 0xEE85},{0x880D, 0xE5B6},{0x880E, 0xE5BA},{0x880F, 0xE5B5},{0x8811, 0xE5BC},{0x8815, 0xE5BE},{0x8816, 0xE5BD},{0x8821, 0xE5C0}, - {0x8822, 0xE5BF},{0x8823, 0xE579},{0x8827, 0xE5C4},{0x8831, 0xE5C1},{0x8836, 0xE5C2},{0x8839, 0xE5C3},{0x883B, 0xE5C5},{0x8840, 0x8C8C}, - {0x8842, 0xE5C7},{0x8844, 0xE5C6},{0x8846, 0x8F4F},{0x884C, 0x8D73},{0x884D, 0x9FA5},{0x8852, 0xE5C8},{0x8853, 0x8F70},{0x8857, 0x8A58}, - {0x8859, 0xE5C9},{0x885B, 0x8971},{0x885D, 0x8FD5},{0x885E, 0xE5CA},{0x8861, 0x8D74},{0x8862, 0xE5CB},{0x8863, 0x88DF},{0x8868, 0x955C}, - {0x886B, 0xE5CC},{0x8870, 0x908A},{0x8872, 0xE5D3},{0x8875, 0xE5D0},{0x8877, 0x928F},{0x887D, 0xE5D1},{0x887E, 0xE5CE},{0x887F, 0x8BDC}, - {0x8881, 0xE5CD},{0x8882, 0xE5D4},{0x8888, 0x8C55},{0x888B, 0x91DC},{0x888D, 0xE5DA},{0x8892, 0xE5D6},{0x8896, 0x91B3},{0x8897, 0xE5D5}, - {0x8899, 0xE5D8},{0x889E, 0xE5CF},{0x88A2, 0xE5D9},{0x88A4, 0xE5DB},{0x88AB, 0x94ED},{0x88AE, 0xE5D7},{0x88B0, 0xE5DC},{0x88B1, 0xE5DE}, - {0x88B4, 0x8CD1},{0x88B5, 0xE5D2},{0x88B7, 0x88BF},{0x88BF, 0xE5DD},{0x88C1, 0x8DD9},{0x88C2, 0x97F4},{0x88C3, 0xE5DF},{0x88C4, 0xE5E0}, - {0x88C5, 0x9195},{0x88CF, 0x97A0},{0x88D4, 0xE5E1},{0x88D5, 0x9754},{0x88D8, 0xE5E2},{0x88D9, 0xE5E3},{0x88DC, 0x95E2},{0x88DD, 0xE5E4}, - {0x88DF, 0x8DBE},{0x88E1, 0x97A1},{0x88E8, 0xE5E9},{0x88F2, 0xE5EA},{0x88F3, 0x8FD6},{0x88F4, 0xE5E8},{0x88F5, 0xEE86},{0x88F8, 0x9787}, - {0x88F9, 0xE5E5},{0x88FC, 0xE5E7},{0x88FD, 0x90BB},{0x88FE, 0x909E},{0x8902, 0xE5E6},{0x8904, 0xE5EB},{0x8907, 0x95A1},{0x890A, 0xE5ED}, - {0x890C, 0xE5EC},{0x8910, 0x8A8C},{0x8912, 0x964A},{0x8913, 0xE5EE},{0x891C, 0xED41},{0x891D, 0xE5FA},{0x891E, 0xE5F0},{0x8925, 0xE5F1}, - {0x892A, 0xE5F2},{0x892B, 0xE5F3},{0x8936, 0xE5F7},{0x8938, 0xE5F8},{0x893B, 0xE5F6},{0x8941, 0xE5F4},{0x8943, 0xE5EF},{0x8944, 0xE5F5}, - {0x894C, 0xE5F9},{0x894D, 0xE8B5},{0x8956, 0x89A6},{0x895E, 0xE5FC},{0x895F, 0x8BDD},{0x8960, 0xE5FB},{0x8964, 0xE641},{0x8966, 0xE640}, - {0x896A, 0xE643},{0x896D, 0xE642},{0x896F, 0xE644},{0x8972, 0x8F50},{0x8974, 0xE645},{0x8977, 0xE646},{0x897E, 0xE647},{0x897F, 0x90BC}, - {0x8981, 0x9776},{0x8983, 0xE648},{0x8986, 0x95A2},{0x8987, 0x9465},{0x8988, 0xE649},{0x898A, 0xE64A},{0x898B, 0x8CA9},{0x898F, 0x8B4B}, - {0x8993, 0xE64B},{0x8996, 0x8E8B},{0x8997, 0x9460},{0x8998, 0xE64C},{0x899A, 0x8A6F},{0x89A1, 0xE64D},{0x89A6, 0xE64F},{0x89A7, 0x9797}, - {0x89A9, 0xE64E},{0x89AA, 0x9065},{0x89AC, 0xE650},{0x89AF, 0xE651},{0x89B2, 0xE652},{0x89B3, 0x8ACF},{0x89BA, 0xE653},{0x89BD, 0xE654}, - {0x89BF, 0xE655},{0x89C0, 0xE656},{0x89D2, 0x8A70},{0x89DA, 0xE657},{0x89DC, 0xE658},{0x89DD, 0xE659},{0x89E3, 0x89F0},{0x89E6, 0x9047}, - {0x89E7, 0xE65A},{0x89F4, 0xE65B},{0x89F8, 0xE65C},{0x8A00, 0x8CBE},{0x8A02, 0x92F9},{0x8A03, 0xE65D},{0x8A08, 0x8C76},{0x8A0A, 0x9075}, - {0x8A0C, 0xE660},{0x8A0E, 0x93A2},{0x8A10, 0xE65F},{0x8A12, 0xEE87},{0x8A13, 0x8C50},{0x8A16, 0xE65E},{0x8A17, 0x91F5},{0x8A18, 0x8B4C}, - {0x8A1B, 0xE661},{0x8A1D, 0xE662},{0x8A1F, 0x8FD7},{0x8A23, 0x8C8D},{0x8A25, 0xE663},{0x8A2A, 0x964B},{0x8A2D, 0x90DD},{0x8A31, 0x8B96}, - {0x8A33, 0x96F3},{0x8A34, 0x9169},{0x8A36, 0xE664},{0x8A37, 0xEE88},{0x8A3A, 0x9066},{0x8A3B, 0x9290},{0x8A3C, 0x8FD8},{0x8A41, 0xE665}, - {0x8A46, 0xE668},{0x8A48, 0xE669},{0x8A50, 0x8DBC},{0x8A51, 0x91C0},{0x8A52, 0xE667},{0x8A54, 0x8FD9},{0x8A55, 0x955D},{0x8A5B, 0xE666}, - {0x8A5E, 0x8E8C},{0x8A60, 0x8972},{0x8A62, 0xE66D},{0x8A63, 0x8C77},{0x8A66, 0x8E8E},{0x8A69, 0x8E8D},{0x8A6B, 0x986C},{0x8A6C, 0xE66C}, - {0x8A6D, 0xE66B},{0x8A6E, 0x9146},{0x8A70, 0x8B6C},{0x8A71, 0x9862},{0x8A72, 0x8A59},{0x8A73, 0x8FDA},{0x8A79, 0xEE89},{0x8A7C, 0xE66A}, - {0x8A82, 0xE66F},{0x8A84, 0xE670},{0x8A85, 0xE66E},{0x8A87, 0x8CD6},{0x8A89, 0x975F},{0x8A8C, 0x8E8F},{0x8A8D, 0x9446},{0x8A91, 0xE673}, - {0x8A93, 0x90BE},{0x8A95, 0x9261},{0x8A98, 0x9755},{0x8A9A, 0xE676},{0x8A9E, 0x8CEA},{0x8AA0, 0x90BD},{0x8AA1, 0xE672},{0x8AA3, 0xE677}, - {0x8AA4, 0x8CEB},{0x8AA5, 0xE674},{0x8AA6, 0xE675},{0x8AA7, 0xEE8A},{0x8AA8, 0xE671},{0x8AAC, 0x90E0},{0x8AAD, 0x93C7},{0x8AB0, 0x924E}, - {0x8AB2, 0x89DB},{0x8AB9, 0x94EE},{0x8ABC, 0x8B62},{0x8ABE, 0xEE8B},{0x8ABF, 0x92B2},{0x8AC2, 0xE67A},{0x8AC4, 0xE678},{0x8AC7, 0x926B}, - {0x8ACB, 0x90BF},{0x8ACC, 0x8AD0},{0x8ACD, 0xE679},{0x8ACF, 0x907A},{0x8AD2, 0x97C8},{0x8AD6, 0x985F},{0x8ADA, 0xE67B},{0x8ADB, 0xE687}, - {0x8ADC, 0x92B3},{0x8ADE, 0xE686},{0x8ADF, 0xEE8C},{0x8AE0, 0xE683},{0x8AE1, 0xE68B},{0x8AE2, 0xE684},{0x8AE4, 0xE680},{0x8AE6, 0x92FA}, - {0x8AE7, 0xE67E},{0x8AEB, 0xE67C},{0x8AED, 0x9740},{0x8AEE, 0x8E90},{0x8AF1, 0xE681},{0x8AF3, 0xE67D},{0x8AF6, 0xEE8E},{0x8AF7, 0xE685}, - {0x8AF8, 0x8F94},{0x8AFA, 0x8CBF},{0x8AFE, 0x91F8},{0x8B00, 0x9664},{0x8B01, 0x8979},{0x8B02, 0x88E0},{0x8B04, 0x93A3},{0x8B07, 0xE689}, - {0x8B0C, 0xE688},{0x8B0E, 0x93E4},{0x8B10, 0xE68D},{0x8B14, 0xE682},{0x8B16, 0xE68C},{0x8B17, 0xE68E},{0x8B19, 0x8CAA},{0x8B1A, 0xE68A}, - {0x8B1B, 0x8D75},{0x8B1D, 0x8ED3},{0x8B20, 0xE68F},{0x8B21, 0x9777},{0x8B26, 0xE692},{0x8B28, 0xE695},{0x8B2B, 0xE693},{0x8B2C, 0x9554}, - {0x8B33, 0xE690},{0x8B39, 0x8BDE},{0x8B3E, 0xE694},{0x8B41, 0xE696},{0x8B49, 0xE69A},{0x8B4C, 0xE697},{0x8B4E, 0xE699},{0x8B4F, 0xE698}, - {0x8B53, 0xEE8F},{0x8B56, 0xE69B},{0x8B58, 0x8EAF},{0x8B5A, 0xE69D},{0x8B5B, 0xE69C},{0x8B5C, 0x9588},{0x8B5F, 0xE69F},{0x8B66, 0x8C78}, - {0x8B6B, 0xE69E},{0x8B6C, 0xE6A0},{0x8B6F, 0xE6A1},{0x8B70, 0x8B63},{0x8B71, 0xE3BF},{0x8B72, 0x8FF7},{0x8B74, 0xE6A2},{0x8B77, 0x8CEC}, - {0x8B7D, 0xE6A3},{0x8B7F, 0xEE90},{0x8B80, 0xE6A4},{0x8B83, 0x8E5D},{0x8B8A, 0x9DCC},{0x8B8C, 0xE6A5},{0x8B8E, 0xE6A6},{0x8B90, 0x8F51}, - {0x8B92, 0xE6A7},{0x8B93, 0xE6A8},{0x8B96, 0xE6A9},{0x8B99, 0xE6AA},{0x8B9A, 0xE6AB},{0x8C37, 0x924A},{0x8C3A, 0xE6AC},{0x8C3F, 0xE6AE}, - {0x8C41, 0xE6AD},{0x8C46, 0x93A4},{0x8C48, 0xE6AF},{0x8C4A, 0x964C},{0x8C4C, 0xE6B0},{0x8C4E, 0xE6B1},{0x8C50, 0xE6B2},{0x8C55, 0xE6B3}, - {0x8C5A, 0x93D8},{0x8C61, 0x8FDB},{0x8C62, 0xE6B4},{0x8C6A, 0x8D8B},{0x8C6B, 0x98AC},{0x8C6C, 0xE6B5},{0x8C78, 0xE6B6},{0x8C79, 0x955E}, - {0x8C7A, 0xE6B7},{0x8C7C, 0xE6BF},{0x8C82, 0xE6B8},{0x8C85, 0xE6BA},{0x8C89, 0xE6B9},{0x8C8A, 0xE6BB},{0x8C8C, 0x9665},{0x8C8D, 0xE6BC}, - {0x8C8E, 0xE6BD},{0x8C94, 0xE6BE},{0x8C98, 0xE6C0},{0x8C9D, 0x8A4C},{0x8C9E, 0x92E5},{0x8CA0, 0x9589},{0x8CA1, 0x8DE0},{0x8CA2, 0x8D76}, - {0x8CA7, 0x956E},{0x8CA8, 0x89DD},{0x8CA9, 0x94CC},{0x8CAA, 0xE6C3},{0x8CAB, 0x8AD1},{0x8CAC, 0x90D3},{0x8CAD, 0xE6C2},{0x8CAE, 0xE6C7}, - {0x8CAF, 0x9299},{0x8CB0, 0x96E1},{0x8CB2, 0xE6C5},{0x8CB3, 0xE6C6},{0x8CB4, 0x8B4D},{0x8CB6, 0xE6C8},{0x8CB7, 0x9483},{0x8CB8, 0x91DD}, - {0x8CBB, 0x94EF},{0x8CBC, 0x935C},{0x8CBD, 0xE6C4},{0x8CBF, 0x9666},{0x8CC0, 0x89EA},{0x8CC1, 0xE6CA},{0x8CC2, 0x9847},{0x8CC3, 0x92C0}, - {0x8CC4, 0x9864},{0x8CC7, 0x8E91},{0x8CC8, 0xE6C9},{0x8CCA, 0x91AF},{0x8CCD, 0xE6DA},{0x8CCE, 0x9147},{0x8CD1, 0x93F6},{0x8CD3, 0x956F}, - {0x8CDA, 0xE6CD},{0x8CDB, 0x8E5E},{0x8CDC, 0x8E92},{0x8CDE, 0x8FDC},{0x8CE0, 0x9485},{0x8CE2, 0x8CAB},{0x8CE3, 0xE6CC},{0x8CE4, 0xE6CB}, - {0x8CE6, 0x958A},{0x8CEA, 0x8EBF},{0x8CED, 0x9371},{0x8CF0, 0xEE91},{0x8CF4, 0xEE92},{0x8CFA, 0xE6CF},{0x8CFB, 0xE6D0},{0x8CFC, 0x8D77}, - {0x8CFD, 0xE6CE},{0x8D04, 0xE6D1},{0x8D05, 0xE6D2},{0x8D07, 0xE6D4},{0x8D08, 0x91A1},{0x8D0A, 0xE6D3},{0x8D0B, 0x8AE4},{0x8D0D, 0xE6D6}, - {0x8D0F, 0xE6D5},{0x8D10, 0xE6D7},{0x8D12, 0xEE93},{0x8D13, 0xE6D9},{0x8D14, 0xE6DB},{0x8D16, 0xE6DC},{0x8D64, 0x90D4},{0x8D66, 0x8ECD}, - {0x8D67, 0xE6DD},{0x8D6B, 0x8A71},{0x8D6D, 0xE6DE},{0x8D70, 0x9196},{0x8D71, 0xE6DF},{0x8D73, 0xE6E0},{0x8D74, 0x958B},{0x8D76, 0xEE94}, - {0x8D77, 0x8B4E},{0x8D81, 0xE6E1},{0x8D85, 0x92B4},{0x8D8A, 0x897A},{0x8D99, 0xE6E2},{0x8DA3, 0x8EEF},{0x8DA8, 0x9096},{0x8DB3, 0x91AB}, - {0x8DBA, 0xE6E5},{0x8DBE, 0xE6E4},{0x8DC2, 0xE6E3},{0x8DCB, 0xE6EB},{0x8DCC, 0xE6E9},{0x8DCF, 0xE6E6},{0x8DD6, 0xE6E8},{0x8DDA, 0xE6E7}, - {0x8DDB, 0xE6EA},{0x8DDD, 0x8B97},{0x8DDF, 0xE6EE},{0x8DE1, 0x90D5},{0x8DE3, 0xE6EF},{0x8DE8, 0x8CD7},{0x8DEA, 0xE6EC},{0x8DEB, 0xE6ED}, - {0x8DEF, 0x9848},{0x8DF3, 0x92B5},{0x8DF5, 0x9148},{0x8DFC, 0xE6F0},{0x8DFF, 0xE6F3},{0x8E08, 0xE6F1},{0x8E09, 0xE6F2},{0x8E0A, 0x9778}, - {0x8E0F, 0x93A5},{0x8E10, 0xE6F6},{0x8E1D, 0xE6F4},{0x8E1E, 0xE6F5},{0x8E1F, 0xE6F7},{0x8E2A, 0xE748},{0x8E30, 0xE6FA},{0x8E34, 0xE6FB}, - {0x8E35, 0xE6F9},{0x8E42, 0xE6F8},{0x8E44, 0x92FB},{0x8E47, 0xE740},{0x8E48, 0xE744},{0x8E49, 0xE741},{0x8E4A, 0xE6FC},{0x8E4C, 0xE742}, - {0x8E50, 0xE743},{0x8E55, 0xE74A},{0x8E59, 0xE745},{0x8E5F, 0x90D6},{0x8E60, 0xE747},{0x8E63, 0xE749},{0x8E64, 0xE746},{0x8E72, 0xE74C}, - {0x8E74, 0x8F52},{0x8E76, 0xE74B},{0x8E7C, 0xE74D},{0x8E81, 0xE74E},{0x8E84, 0xE751},{0x8E85, 0xE750},{0x8E87, 0xE74F},{0x8E8A, 0xE753}, - {0x8E8B, 0xE752},{0x8E8D, 0x96F4},{0x8E91, 0xE755},{0x8E93, 0xE754},{0x8E94, 0xE756},{0x8E99, 0xE757},{0x8EA1, 0xE759},{0x8EAA, 0xE758}, - {0x8EAB, 0x9067},{0x8EAC, 0xE75A},{0x8EAF, 0x8BEB},{0x8EB0, 0xE75B},{0x8EB1, 0xE75D},{0x8EBE, 0xE75E},{0x8EC5, 0xE75F},{0x8EC6, 0xE75C}, - {0x8EC8, 0xE760},{0x8ECA, 0x8ED4},{0x8ECB, 0xE761},{0x8ECC, 0x8B4F},{0x8ECD, 0x8C52},{0x8ECF, 0xEE96},{0x8ED2, 0x8CAC},{0x8EDB, 0xE762}, - {0x8EDF, 0x93EE},{0x8EE2, 0x935D},{0x8EE3, 0xE763},{0x8EEB, 0xE766},{0x8EF8, 0x8EB2},{0x8EFB, 0xE765},{0x8EFC, 0xE764},{0x8EFD, 0x8C79}, - {0x8EFE, 0xE767},{0x8F03, 0x8A72},{0x8F05, 0xE769},{0x8F09, 0x8DDA},{0x8F0A, 0xE768},{0x8F0C, 0xE771},{0x8F12, 0xE76B},{0x8F13, 0xE76D}, - {0x8F14, 0x95E3},{0x8F15, 0xE76A},{0x8F19, 0xE76C},{0x8F1B, 0xE770},{0x8F1C, 0xE76E},{0x8F1D, 0x8B50},{0x8F1F, 0xE76F},{0x8F26, 0xE772}, - {0x8F29, 0x9479},{0x8F2A, 0x97D6},{0x8F2F, 0x8F53},{0x8F33, 0xE773},{0x8F38, 0x9741},{0x8F39, 0xE775},{0x8F3B, 0xE774},{0x8F3E, 0xE778}, - {0x8F3F, 0x9760},{0x8F42, 0xE777},{0x8F44, 0x8A8D},{0x8F45, 0xE776},{0x8F46, 0xE77B},{0x8F49, 0xE77A},{0x8F4C, 0xE779},{0x8F4D, 0x9351}, - {0x8F4E, 0xE77C},{0x8F57, 0xE77D},{0x8F5C, 0xE77E},{0x8F5F, 0x8D8C},{0x8F61, 0x8C44},{0x8F62, 0xE780},{0x8F63, 0xE781},{0x8F64, 0xE782}, - {0x8F9B, 0x9068},{0x8F9C, 0xE783},{0x8F9E, 0x8EAB},{0x8F9F, 0xE784},{0x8FA3, 0xE785},{0x8FA7, 0x999F},{0x8FA8, 0x999E},{0x8FAD, 0xE786}, - {0x8FAE, 0xE390},{0x8FAF, 0xE787},{0x8FB0, 0x9243},{0x8FB1, 0x904A},{0x8FB2, 0x945F},{0x8FB7, 0xE788},{0x8FBA, 0x95D3},{0x8FBB, 0x92D2}, - {0x8FBC, 0x8D9E},{0x8FBF, 0x9248},{0x8FC2, 0x8949},{0x8FC4, 0x9698},{0x8FC5, 0x9076},{0x8FCE, 0x8C7D},{0x8FD1, 0x8BDF},{0x8FD4, 0x95D4}, - {0x8FDA, 0xE789},{0x8FE2, 0xE78B},{0x8FE5, 0xE78A},{0x8FE6, 0x89DE},{0x8FE9, 0x93F4},{0x8FEA, 0xE78C},{0x8FEB, 0x9497},{0x8FED, 0x9352}, - {0x8FEF, 0xE78D},{0x8FF0, 0x8F71},{0x8FF4, 0xE78F},{0x8FF7, 0x96C0},{0x8FF8, 0xE79E},{0x8FF9, 0xE791},{0x8FFA, 0xE792},{0x8FFD, 0x92C7}, - {0x9000, 0x91DE},{0x9001, 0x9197},{0x9003, 0x93A6},{0x9005, 0xE790},{0x9006, 0x8B74},{0x900B, 0xE799},{0x900D, 0xE796},{0x900E, 0xE7A3}, - {0x900F, 0x93A7},{0x9010, 0x9280},{0x9011, 0xE793},{0x9013, 0x92FC},{0x9014, 0x9372},{0x9015, 0xE794},{0x9016, 0xE798},{0x9017, 0x9080}, - {0x9019, 0x9487},{0x901A, 0x92CA},{0x901D, 0x90C0},{0x901E, 0xE797},{0x901F, 0x91AC},{0x9020, 0x91A2},{0x9021, 0xE795},{0x9022, 0x88A7}, - {0x9023, 0x9841},{0x9027, 0xE79A},{0x902E, 0x91DF},{0x9031, 0x8F54},{0x9032, 0x9069},{0x9035, 0xE79C},{0x9036, 0xE79B},{0x9038, 0x88ED}, - {0x9039, 0xE79D},{0x903C, 0x954E},{0x903E, 0xE7A5},{0x9041, 0x93D9},{0x9042, 0x908B},{0x9045, 0x9278},{0x9047, 0x8BF6},{0x9049, 0xE7A4}, - {0x904A, 0x9756},{0x904B, 0x895E},{0x904D, 0x95D5},{0x904E, 0x89DF},{0x904F, 0xE79F},{0x9050, 0xE7A0},{0x9051, 0xE7A1},{0x9052, 0xE7A2}, - {0x9053, 0x93B9},{0x9054, 0x9242},{0x9055, 0x88E1},{0x9056, 0xE7A6},{0x9058, 0xE7A7},{0x9059, 0xEAA1},{0x905C, 0x91BB},{0x905E, 0xE7A8}, - {0x9060, 0x8993},{0x9061, 0x916B},{0x9063, 0x8CAD},{0x9065, 0x9779},{0x9067, 0xEE99},{0x9068, 0xE7A9},{0x9069, 0x934B},{0x906D, 0x9198}, - {0x906E, 0x8ED5},{0x906F, 0xE7AA},{0x9072, 0xE7AD},{0x9075, 0x8F85},{0x9076, 0xE7AB},{0x9077, 0x914A},{0x9078, 0x9149},{0x907A, 0x88E2}, - {0x907C, 0x97C9},{0x907D, 0xE7AF},{0x907F, 0x94F0},{0x9080, 0xE7B1},{0x9081, 0xE7B0},{0x9082, 0xE7AE},{0x9083, 0xE284},{0x9084, 0x8AD2}, - {0x9087, 0xE78E},{0x9089, 0xE7B3},{0x908A, 0xE7B2},{0x908F, 0xE7B4},{0x9091, 0x9757},{0x90A3, 0x93DF},{0x90A6, 0x964D},{0x90A8, 0xE7B5}, - {0x90AA, 0x8ED7},{0x90AF, 0xE7B6},{0x90B1, 0xE7B7},{0x90B5, 0xE7B8},{0x90B8, 0x9340},{0x90C1, 0x88E8},{0x90CA, 0x8D78},{0x90CE, 0x9859}, - {0x90DB, 0xE7BC},{0x90DE, 0xEE9A},{0x90E1, 0x8C53},{0x90E2, 0xE7B9},{0x90E4, 0xE7BA},{0x90E8, 0x9594},{0x90ED, 0x8A73},{0x90F5, 0x9758}, - {0x90F7, 0x8BBD},{0x90FD, 0x9373},{0x9102, 0xE7BD},{0x9112, 0xE7BE},{0x9115, 0xEE9C},{0x9119, 0xE7BF},{0x9127, 0xEE9D},{0x912D, 0x9341}, - {0x9130, 0xE7C1},{0x9132, 0xE7C0},{0x9149, 0x93D1},{0x914A, 0xE7C2},{0x914B, 0x8F55},{0x914C, 0x8EDE},{0x914D, 0x947A},{0x914E, 0x9291}, - {0x9152, 0x8EF0},{0x9154, 0x908C},{0x9156, 0xE7C3},{0x9158, 0xE7C4},{0x9162, 0x907C},{0x9163, 0xE7C5},{0x9165, 0xE7C6},{0x9169, 0xE7C7}, - {0x916A, 0x978F},{0x916C, 0x8F56},{0x9172, 0xE7C9},{0x9173, 0xE7C8},{0x9175, 0x8D79},{0x9177, 0x8D93},{0x9178, 0x8E5F},{0x9182, 0xE7CC}, - {0x9187, 0x8F86},{0x9189, 0xE7CB},{0x918B, 0xE7CA},{0x918D, 0x91E7},{0x9190, 0x8CED},{0x9192, 0x90C1},{0x9197, 0x94AE},{0x919C, 0x8F58}, - {0x91A2, 0xE7CD},{0x91A4, 0x8FDD},{0x91AA, 0xE7D0},{0x91AB, 0xE7CE},{0x91AF, 0xE7CF},{0x91B4, 0xE7D2},{0x91B5, 0xE7D1},{0x91B8, 0x8FF8}, - {0x91BA, 0xE7D3},{0x91C0, 0xE7D4},{0x91C1, 0xE7D5},{0x91C6, 0x94CE},{0x91C7, 0x8DD1},{0x91C8, 0x8EDF},{0x91C9, 0xE7D6},{0x91CB, 0xE7D7}, - {0x91CC, 0x97A2},{0x91CD, 0x8F64},{0x91CE, 0x96EC},{0x91CF, 0x97CA},{0x91D0, 0xE7D8},{0x91D1, 0x8BE0},{0x91D6, 0xE7D9},{0x91D7, 0xEE9F}, - {0x91D8, 0x9342},{0x91DA, 0xEE9E},{0x91DB, 0xE7DC},{0x91DC, 0x8A98},{0x91DD, 0x906A},{0x91DE, 0xEEA0},{0x91DF, 0xE7DA},{0x91E1, 0xE7DB}, - {0x91E3, 0x92DE},{0x91E4, 0xEEA3},{0x91E5, 0xEEA4},{0x91E6, 0x9674},{0x91E7, 0x8BFA},{0x91ED, 0xEEA1},{0x91EE, 0xEEA2},{0x91F5, 0xE7DE}, - {0x91F6, 0xE7DF},{0x91FC, 0xE7DD},{0x91FF, 0xE7E1},{0x9206, 0xEEA5},{0x920A, 0xEEA7},{0x920D, 0x93DD},{0x920E, 0x8A62},{0x9210, 0xEEA6}, - {0x9211, 0xE7E5},{0x9214, 0xE7E2},{0x9215, 0xE7E4},{0x921E, 0xE7E0},{0x9229, 0xE86E},{0x922C, 0xE7E3},{0x9234, 0x97E9},{0x9237, 0x8CD8}, - {0x9239, 0xEEAE},{0x923A, 0xEEA8},{0x923C, 0xEEAA},{0x923F, 0xE7ED},{0x9240, 0xEEA9},{0x9244, 0x9353},{0x9245, 0xE7E8},{0x9248, 0xE7EB}, - {0x9249, 0xE7E9},{0x924B, 0xE7EE},{0x924E, 0xEEAB},{0x9250, 0xE7EF},{0x9251, 0xEEAD},{0x9257, 0xE7E7},{0x9259, 0xEEAC},{0x925A, 0xE7F4}, - {0x925B, 0x8994},{0x925E, 0xE7E6},{0x9262, 0x94AB},{0x9264, 0xE7EA},{0x9266, 0x8FDE},{0x9267, 0xEEAF},{0x9271, 0x8D7A},{0x9277, 0xEEB1}, - {0x9278, 0xEEB2},{0x927E, 0x9667},{0x9280, 0x8BE2},{0x9283, 0x8F65},{0x9285, 0x93BA},{0x9288, 0xED43},{0x9291, 0x914C},{0x9293, 0xE7F2}, - {0x9295, 0xE7EC},{0x9296, 0xE7F1},{0x9298, 0x96C1},{0x929A, 0x92B6},{0x929B, 0xE7F3},{0x929C, 0xE7F0},{0x92A7, 0xEEB0},{0x92AD, 0x914B}, - {0x92B7, 0xE7F7},{0x92B9, 0xE7F6},{0x92CF, 0xE7F5},{0x92D0, 0xEEB6},{0x92D2, 0x964E},{0x92D3, 0xEEBA},{0x92D5, 0xEEB8},{0x92D7, 0xEEB4}, - {0x92D9, 0xEEB5},{0x92E0, 0xEEB9},{0x92E4, 0x8F9B},{0x92E7, 0xEEB3},{0x92E9, 0xE7F8},{0x92EA, 0x95DD},{0x92ED, 0x8973},{0x92F2, 0x9565}, - {0x92F3, 0x9292},{0x92F8, 0x8B98},{0x92F9, 0xED49},{0x92FA, 0xE7FA},{0x92FB, 0xEEBD},{0x92FC, 0x8D7C},{0x92FF, 0xEEC0},{0x9302, 0xEEC2}, - {0x9306, 0x8E4B},{0x930F, 0xE7F9},{0x9310, 0x908D},{0x9318, 0x908E},{0x9319, 0xE840},{0x931A, 0xE842},{0x931D, 0xEEC1},{0x931E, 0xEEBF}, - {0x9320, 0x8FF9},{0x9321, 0xEEBC},{0x9322, 0xE841},{0x9323, 0xE843},{0x9325, 0xEEBB},{0x9326, 0x8BD1},{0x9328, 0x9564},{0x932B, 0x8EE0}, - {0x932C, 0x9842},{0x932E, 0xE7FC},{0x932F, 0x8DF6},{0x9332, 0x985E},{0x9335, 0xE845},{0x933A, 0xE844},{0x933B, 0xE846},{0x9344, 0xE7FB}, - {0x9348, 0xED42},{0x934B, 0x93E7},{0x934D, 0x9374},{0x9354, 0x92D5},{0x9356, 0xE84B},{0x9357, 0xEEC4},{0x935B, 0x9262},{0x935C, 0xE847}, - {0x9360, 0xE848},{0x936C, 0x8C4C},{0x936E, 0xE84A},{0x9370, 0xEEC3},{0x9375, 0x8CAE},{0x937C, 0xE849},{0x937E, 0x8FDF},{0x938C, 0x8A99}, - {0x9394, 0xE84F},{0x9396, 0x8DBD},{0x9397, 0x9199},{0x939A, 0x92C8},{0x93A4, 0xEEC5},{0x93A7, 0x8A5A},{0x93AC, 0xE84D},{0x93AD, 0xE84E}, - {0x93AE, 0x92C1},{0x93B0, 0xE84C},{0x93B9, 0xE850},{0x93C3, 0xE856},{0x93C6, 0xEEC6},{0x93C8, 0xE859},{0x93D0, 0xE858},{0x93D1, 0x934C}, - {0x93D6, 0xE851},{0x93D7, 0xE852},{0x93D8, 0xE855},{0x93DD, 0xE857},{0x93DE, 0xEEC7},{0x93E1, 0x8BBE},{0x93E4, 0xE85A},{0x93E5, 0xE854}, - {0x93E8, 0xE853},{0x93F8, 0xEEC8},{0x9403, 0xE85E},{0x9407, 0xE85F},{0x9410, 0xE860},{0x9413, 0xE85D},{0x9414, 0xE85C},{0x9418, 0x8FE0}, - {0x9419, 0x93A8},{0x941A, 0xE85B},{0x9421, 0xE864},{0x942B, 0xE862},{0x9431, 0xEEC9},{0x9435, 0xE863},{0x9436, 0xE861},{0x9438, 0x91F6}, - {0x943A, 0xE865},{0x9441, 0xE866},{0x9444, 0xE868},{0x9445, 0xEECA},{0x9448, 0xEECB},{0x9451, 0x8AD3},{0x9452, 0xE867},{0x9453, 0x96F8}, - {0x945A, 0xE873},{0x945B, 0xE869},{0x945E, 0xE86C},{0x9460, 0xE86A},{0x9462, 0xE86B},{0x946A, 0xE86D},{0x9470, 0xE86F},{0x9475, 0xE870}, - {0x9477, 0xE871},{0x947C, 0xE874},{0x947D, 0xE872},{0x947E, 0xE875},{0x947F, 0xE877},{0x9481, 0xE876},{0x9577, 0x92B7},{0x9580, 0x96E5}, - {0x9582, 0xE878},{0x9583, 0x914D},{0x9587, 0xE879},{0x9589, 0x95C2},{0x958A, 0xE87A},{0x958B, 0x8A4A},{0x958F, 0x895B},{0x9591, 0x8AD5}, - {0x9592, 0xEECC},{0x9593, 0x8AD4},{0x9594, 0xE87B},{0x9596, 0xE87C},{0x9598, 0xE87D},{0x9599, 0xE87E},{0x95A0, 0xE880},{0x95A2, 0x8AD6}, - {0x95A3, 0x8A74},{0x95A4, 0x8D7D},{0x95A5, 0x94B4},{0x95A7, 0xE882},{0x95A8, 0xE881},{0x95AD, 0xE883},{0x95B2, 0x897B},{0x95B9, 0xE886}, - {0x95BB, 0xE885},{0x95BC, 0xE884},{0x95BE, 0xE887},{0x95C3, 0xE88A},{0x95C7, 0x88C5},{0x95CA, 0xE888},{0x95CC, 0xE88C},{0x95CD, 0xE88B}, - {0x95D4, 0xE88E},{0x95D5, 0xE88D},{0x95D6, 0xE88F},{0x95D8, 0x93AC},{0x95DC, 0xE890},{0x95E1, 0xE891},{0x95E2, 0xE893},{0x95E5, 0xE892}, - {0x961C, 0x958C},{0x9621, 0xE894},{0x9628, 0xE895},{0x962A, 0x8DE3},{0x962E, 0xE896},{0x962F, 0xE897},{0x9632, 0x9668},{0x963B, 0x916A}, - {0x963F, 0x88A2},{0x9640, 0x91C9},{0x9642, 0xE898},{0x9644, 0x958D},{0x964B, 0xE89B},{0x964C, 0xE899},{0x964D, 0x8D7E},{0x964F, 0xE89A}, - {0x9650, 0x8CC0},{0x965B, 0x95C3},{0x965C, 0xE89D},{0x965D, 0xE89F},{0x965E, 0xE89E},{0x965F, 0xE8A0},{0x9662, 0x8940},{0x9663, 0x9077}, - {0x9664, 0x8F9C},{0x9665, 0x8AD7},{0x9666, 0xE8A1},{0x966A, 0x9486},{0x966C, 0xE8A3},{0x9670, 0x8941},{0x9672, 0xE8A2},{0x9673, 0x92C2}, - {0x9675, 0x97CB},{0x9676, 0x93A9},{0x9677, 0xE89C},{0x9678, 0x97A4},{0x967A, 0x8CAF},{0x967D, 0x977A},{0x9685, 0x8BF7},{0x9686, 0x97B2}, - {0x9688, 0x8C47},{0x968A, 0x91E0},{0x968B, 0xE440},{0x968D, 0xE8A4},{0x968E, 0x8A4B},{0x968F, 0x908F},{0x9694, 0x8A75},{0x9695, 0xE8A6}, - {0x9697, 0xE8A7},{0x9698, 0xE8A5},{0x9699, 0x8C84},{0x969B, 0x8DDB},{0x969C, 0x8FE1},{0x969D, 0xEECF},{0x96A0, 0x8942},{0x96A3, 0x97D7}, - {0x96A7, 0xE8A9},{0x96A8, 0xE7AC},{0x96AA, 0xE8A8},{0x96AF, 0xEED0},{0x96B0, 0xE8AC},{0x96B1, 0xE8AA},{0x96B2, 0xE8AB},{0x96B4, 0xE8AD}, - {0x96B6, 0xE8AE},{0x96B7, 0x97EA},{0x96B8, 0xE8AF},{0x96B9, 0xE8B0},{0x96BB, 0x90C7},{0x96BC, 0x94B9},{0x96C0, 0x909D},{0x96C1, 0x8AE5}, - {0x96C4, 0x9759},{0x96C5, 0x89EB},{0x96C6, 0x8F57},{0x96C7, 0x8CD9},{0x96C9, 0xE8B3},{0x96CB, 0xE8B2},{0x96CC, 0x8E93},{0x96CD, 0xE8B4}, - {0x96CE, 0xE8B1},{0x96D1, 0x8E47},{0x96D5, 0xE8B8},{0x96D6, 0xE5AB},{0x96D9, 0x99D4},{0x96DB, 0x9097},{0x96DC, 0xE8B6},{0x96E2, 0x97A3}, - {0x96E3, 0x93EF},{0x96E8, 0x894A},{0x96EA, 0x90E1},{0x96EB, 0x8EB4},{0x96F0, 0x95B5},{0x96F2, 0x895F},{0x96F6, 0x97EB},{0x96F7, 0x978B}, - {0x96F9, 0xE8B9},{0x96FB, 0x9364},{0x9700, 0x8EF9},{0x9704, 0xE8BA},{0x9706, 0xE8BB},{0x9707, 0x906B},{0x9708, 0xE8BC},{0x970A, 0x97EC}, - {0x970D, 0xE8B7},{0x970E, 0xE8BE},{0x970F, 0xE8C0},{0x9711, 0xE8BF},{0x9713, 0xE8BD},{0x9716, 0xE8C1},{0x9719, 0xE8C2},{0x971C, 0x919A}, - {0x971E, 0x89E0},{0x9724, 0xE8C3},{0x9727, 0x96B6},{0x972A, 0xE8C4},{0x9730, 0xE8C5},{0x9732, 0x9849},{0x9733, 0xEED1},{0x9738, 0x9E50}, - {0x9739, 0xE8C6},{0x973B, 0xEED2},{0x973D, 0xE8C7},{0x973E, 0xE8C8},{0x9742, 0xE8CC},{0x9743, 0xEED3},{0x9744, 0xE8C9},{0x9746, 0xE8CA}, - {0x9748, 0xE8CB},{0x9749, 0xE8CD},{0x974D, 0xEED4},{0x974F, 0xEED5},{0x9751, 0xEED6},{0x9752, 0x90C2},{0x9755, 0xEED7},{0x9756, 0x96F5}, - {0x9759, 0x90C3},{0x975C, 0xE8CE},{0x975E, 0x94F1},{0x9760, 0xE8CF},{0x9761, 0xEA72},{0x9762, 0x96CA},{0x9764, 0xE8D0},{0x9766, 0xE8D1}, - {0x9768, 0xE8D2},{0x9769, 0x8A76},{0x976B, 0xE8D4},{0x976D, 0x9078},{0x9771, 0xE8D5},{0x9774, 0x8C43},{0x9779, 0xE8D6},{0x977A, 0xE8DA}, - {0x977C, 0xE8D8},{0x9781, 0xE8D9},{0x9784, 0x8A93},{0x9785, 0xE8D7},{0x9786, 0xE8DB},{0x978B, 0xE8DC},{0x978D, 0x88C6},{0x978F, 0xE8DD}, - {0x9790, 0xE8DE},{0x9798, 0x8FE2},{0x979C, 0xE8DF},{0x97A0, 0x8B66},{0x97A3, 0xE8E2},{0x97A6, 0xE8E1},{0x97A8, 0xE8E0},{0x97AB, 0xE691}, - {0x97AD, 0x95DA},{0x97B3, 0xE8E3},{0x97B4, 0xE8E4},{0x97C3, 0xE8E5},{0x97C6, 0xE8E6},{0x97C8, 0xE8E7},{0x97CB, 0xE8E8},{0x97D3, 0x8AD8}, - {0x97DC, 0xE8E9},{0x97ED, 0xE8EA},{0x97EE, 0x9442},{0x97F2, 0xE8EC},{0x97F3, 0x89B9},{0x97F5, 0xE8EF},{0x97F6, 0xE8EE},{0x97FB, 0x8943}, - {0x97FF, 0x8BBF},{0x9801, 0x95C5},{0x9802, 0x92B8},{0x9803, 0x8DA0},{0x9805, 0x8D80},{0x9806, 0x8F87},{0x9808, 0x907B},{0x980C, 0xE8F1}, - {0x980F, 0xE8F0},{0x9810, 0x9761},{0x9811, 0x8AE6},{0x9812, 0x94D0},{0x9813, 0x93DA},{0x9817, 0x909C},{0x9818, 0x97CC},{0x981A, 0x8C7A}, - {0x9821, 0xE8F4},{0x9824, 0xE8F3},{0x982C, 0x966A},{0x982D, 0x93AA},{0x9834, 0x896F},{0x9837, 0xE8F5},{0x9838, 0xE8F2},{0x983B, 0x9570}, - {0x983C, 0x978A},{0x983D, 0xE8F6},{0x9846, 0xE8F7},{0x984B, 0xE8F9},{0x984C, 0x91E8},{0x984D, 0x8A7A},{0x984E, 0x8A7B},{0x984F, 0xE8F8}, - {0x9854, 0x8AE7},{0x9855, 0x8CB0},{0x9857, 0xEED8},{0x9858, 0x8AE8},{0x985B, 0x935E},{0x985E, 0x97DE},{0x9865, 0xEED9},{0x9867, 0x8CDA}, - {0x986B, 0xE8FA},{0x986F, 0xE8FB},{0x9870, 0xE8FC},{0x9871, 0xE940},{0x9873, 0xE942},{0x9874, 0xE941},{0x98A8, 0x9597},{0x98AA, 0xE943}, - {0x98AF, 0xE944},{0x98B1, 0xE945},{0x98B6, 0xE946},{0x98C3, 0xE948},{0x98C4, 0xE947},{0x98C6, 0xE949},{0x98DB, 0x94F2},{0x98DC, 0xE3CA}, - {0x98DF, 0x9048},{0x98E2, 0x8B51},{0x98E9, 0xE94A},{0x98EB, 0xE94B},{0x98ED, 0x99AA},{0x98EE, 0x9F5A},{0x98EF, 0x94D1},{0x98F2, 0x88F9}, - {0x98F4, 0x88B9},{0x98FC, 0x8E94},{0x98FD, 0x964F},{0x98FE, 0x8FFC},{0x9903, 0xE94C},{0x9905, 0x96DD},{0x9909, 0xE94D},{0x990A, 0x977B}, - {0x990C, 0x8961},{0x9910, 0x8E60},{0x9912, 0xE94E},{0x9913, 0x89EC},{0x9914, 0xE94F},{0x9918, 0xE950},{0x991D, 0xE952},{0x991E, 0xE953}, - {0x9920, 0xE955},{0x9921, 0xE951},{0x9924, 0xE954},{0x9927, 0xEEDC},{0x9928, 0x8AD9},{0x992C, 0xE956},{0x992E, 0xE957},{0x993D, 0xE958}, - {0x993E, 0xE959},{0x9942, 0xE95A},{0x9945, 0xE95C},{0x9949, 0xE95B},{0x994B, 0xE95E},{0x994C, 0xE961},{0x9950, 0xE95D},{0x9951, 0xE95F}, - {0x9952, 0xE960},{0x9955, 0xE962},{0x9957, 0x8BC0},{0x9996, 0x8EF1},{0x9997, 0xE963},{0x9998, 0xE964},{0x9999, 0x8D81},{0x999E, 0xEEDE}, - {0x99A5, 0xE965},{0x99A8, 0x8A5D},{0x99AC, 0x946E},{0x99AD, 0xE966},{0x99AE, 0xE967},{0x99B3, 0x9279},{0x99B4, 0x93E9},{0x99BC, 0xE968}, - {0x99C1, 0x949D},{0x99C4, 0x91CA},{0x99C5, 0x8977},{0x99C6, 0x8BEC},{0x99C8, 0x8BED},{0x99D0, 0x9293},{0x99D1, 0xE96D},{0x99D2, 0x8BEE}, - {0x99D5, 0x89ED},{0x99D8, 0xE96C},{0x99DB, 0xE96A},{0x99DD, 0xE96B},{0x99DF, 0xE969},{0x99E2, 0xE977},{0x99ED, 0xE96E},{0x99EE, 0xE96F}, - {0x99F1, 0xE970},{0x99F2, 0xE971},{0x99F8, 0xE973},{0x99FB, 0xE972},{0x99FF, 0x8F78},{0x9A01, 0xE974},{0x9A05, 0xE976},{0x9A0E, 0x8B52}, - {0x9A0F, 0xE975},{0x9A12, 0x919B},{0x9A13, 0x8CB1},{0x9A19, 0xE978},{0x9A28, 0x91CB},{0x9A2B, 0xE979},{0x9A30, 0x93AB},{0x9A37, 0xE97A}, - {0x9A3E, 0xE980},{0x9A40, 0xE97D},{0x9A42, 0xE97C},{0x9A43, 0xE97E},{0x9A45, 0xE97B},{0x9A4D, 0xE982},{0x9A4E, 0xEEDF},{0x9A55, 0xE981}, - {0x9A57, 0xE984},{0x9A5A, 0x8BC1},{0x9A5B, 0xE983},{0x9A5F, 0xE985},{0x9A62, 0xE986},{0x9A64, 0xE988},{0x9A65, 0xE987},{0x9A69, 0xE989}, - {0x9A6A, 0xE98B},{0x9A6B, 0xE98A},{0x9AA8, 0x8D9C},{0x9AAD, 0xE98C},{0x9AB0, 0xE98D},{0x9AB8, 0x8A5B},{0x9ABC, 0xE98E},{0x9AC0, 0xE98F}, - {0x9AC4, 0x9091},{0x9ACF, 0xE990},{0x9AD1, 0xE991},{0x9AD3, 0xE992},{0x9AD4, 0xE993},{0x9AD8, 0x8D82},{0x9AD9, 0xEEE0},{0x9ADC, 0xEEE1}, - {0x9ADE, 0xE994},{0x9ADF, 0xE995},{0x9AE2, 0xE996},{0x9AE3, 0xE997},{0x9AE6, 0xE998},{0x9AEA, 0x94AF},{0x9AEB, 0xE99A},{0x9AED, 0x9545}, - {0x9AEE, 0xE99B},{0x9AEF, 0xE999},{0x9AF1, 0xE99D},{0x9AF4, 0xE99C},{0x9AF7, 0xE99E},{0x9AFB, 0xE99F},{0x9B06, 0xE9A0},{0x9B18, 0xE9A1}, - {0x9B1A, 0xE9A2},{0x9B1F, 0xE9A3},{0x9B22, 0xE9A4},{0x9B23, 0xE9A5},{0x9B25, 0xE9A6},{0x9B27, 0xE9A7},{0x9B28, 0xE9A8},{0x9B29, 0xE9A9}, - {0x9B2A, 0xE9AA},{0x9B2E, 0xE9AB},{0x9B2F, 0xE9AC},{0x9B31, 0x9F54},{0x9B32, 0xE9AD},{0x9B3B, 0xE2F6},{0x9B3C, 0x8B53},{0x9B41, 0x8A40}, - {0x9B42, 0x8DB0},{0x9B43, 0xE9AF},{0x9B44, 0xE9AE},{0x9B45, 0x96A3},{0x9B4D, 0xE9B1},{0x9B4E, 0xE9B2},{0x9B4F, 0xE9B0},{0x9B51, 0xE9B3}, - {0x9B54, 0x9682},{0x9B58, 0xE9B4},{0x9B5A, 0x8B9B},{0x9B6F, 0x9844},{0x9B72, 0xEEE3},{0x9B74, 0xE9B5},{0x9B75, 0xEEE2},{0x9B83, 0xE9B7}, - {0x9B8E, 0x88BC},{0x9B8F, 0xEEE4},{0x9B91, 0xE9B8},{0x9B92, 0x95A9},{0x9B93, 0xE9B6},{0x9B96, 0xE9B9},{0x9B97, 0xE9BA},{0x9B9F, 0xE9BB}, - {0x9BA0, 0xE9BC},{0x9BA8, 0xE9BD},{0x9BAA, 0x968E},{0x9BAB, 0x8E4C},{0x9BAD, 0x8DF8},{0x9BAE, 0x914E},{0x9BB1, 0xEEE5},{0x9BB4, 0xE9BE}, - {0x9BB9, 0xE9C1},{0x9BBB, 0xEEE6},{0x9BC0, 0xE9BF},{0x9BC6, 0xE9C2},{0x9BC9, 0x8CEF},{0x9BCA, 0xE9C0},{0x9BCF, 0xE9C3},{0x9BD1, 0xE9C4}, - {0x9BD2, 0xE9C5},{0x9BD4, 0xE9C9},{0x9BD6, 0x8E49},{0x9BDB, 0x91E2},{0x9BE1, 0xE9CA},{0x9BE2, 0xE9C7},{0x9BE3, 0xE9C6},{0x9BE4, 0xE9C8}, - {0x9BE8, 0x8C7E},{0x9BF0, 0xE9CE},{0x9BF1, 0xE9CD},{0x9BF2, 0xE9CC},{0x9BF5, 0x88B1},{0x9C00, 0xEEE7},{0x9C04, 0xE9D8},{0x9C06, 0xE9D4}, - {0x9C08, 0xE9D5},{0x9C09, 0xE9D1},{0x9C0A, 0xE9D7},{0x9C0C, 0xE9D3},{0x9C0D, 0x8A82},{0x9C10, 0x986B},{0x9C12, 0xE9D6},{0x9C13, 0xE9D2}, - {0x9C14, 0xE9D0},{0x9C15, 0xE9CF},{0x9C1B, 0xE9DA},{0x9C21, 0xE9DD},{0x9C24, 0xE9DC},{0x9C25, 0xE9DB},{0x9C2D, 0x9568},{0x9C2E, 0xE9D9}, - {0x9C2F, 0x88F1},{0x9C30, 0xE9DE},{0x9C32, 0xE9E0},{0x9C39, 0x8A8F},{0x9C3A, 0xE9CB},{0x9C3B, 0x8956},{0x9C3E, 0xE9E2},{0x9C46, 0xE9E1}, - {0x9C47, 0xE9DF},{0x9C48, 0x924C},{0x9C52, 0x9690},{0x9C57, 0x97D8},{0x9C5A, 0xE9E3},{0x9C60, 0xE9E4},{0x9C67, 0xE9E5},{0x9C76, 0xE9E6}, - {0x9C78, 0xE9E7},{0x9CE5, 0x92B9},{0x9CE7, 0xE9E8},{0x9CE9, 0x94B5},{0x9CEB, 0xE9ED},{0x9CEC, 0xE9E9},{0x9CF0, 0xE9EA},{0x9CF3, 0x9650}, - {0x9CF4, 0x96C2},{0x9CF6, 0x93CE},{0x9D03, 0xE9EE},{0x9D06, 0xE9EF},{0x9D07, 0x93BC},{0x9D08, 0xE9EC},{0x9D09, 0xE9EB},{0x9D0E, 0x89A8}, - {0x9D12, 0xE9F7},{0x9D15, 0xE9F6},{0x9D1B, 0x8995},{0x9D1F, 0xE9F4},{0x9D23, 0xE9F3},{0x9D26, 0xE9F1},{0x9D28, 0x8A9B},{0x9D2A, 0xE9F0}, - {0x9D2B, 0x8EB0},{0x9D2C, 0x89A7},{0x9D3B, 0x8D83},{0x9D3E, 0xE9FA},{0x9D3F, 0xE9F9},{0x9D41, 0xE9F8},{0x9D44, 0xE9F5},{0x9D46, 0xE9FB}, - {0x9D48, 0xE9FC},{0x9D50, 0xEA44},{0x9D51, 0xEA43},{0x9D59, 0xEA45},{0x9D5C, 0x894C},{0x9D5D, 0xEA40},{0x9D5E, 0xEA41},{0x9D60, 0x8D94}, - {0x9D61, 0x96B7},{0x9D64, 0xEA42},{0x9D6B, 0xEEE9},{0x9D6C, 0x9651},{0x9D6F, 0xEA4A},{0x9D70, 0xEEE8},{0x9D72, 0xEA46},{0x9D7A, 0xEA4B}, - {0x9D87, 0xEA48},{0x9D89, 0xEA47},{0x9D8F, 0x8C7B},{0x9D9A, 0xEA4C},{0x9DA4, 0xEA4D},{0x9DA9, 0xEA4E},{0x9DAB, 0xEA49},{0x9DAF, 0xE9F2}, - {0x9DB2, 0xEA4F},{0x9DB4, 0x92DF},{0x9DB8, 0xEA53},{0x9DBA, 0xEA54},{0x9DBB, 0xEA52},{0x9DC1, 0xEA51},{0x9DC2, 0xEA57},{0x9DC4, 0xEA50}, - {0x9DC6, 0xEA55},{0x9DCF, 0xEA56},{0x9DD3, 0xEA59},{0x9DD9, 0xEA58},{0x9DE6, 0xEA5B},{0x9DED, 0xEA5C},{0x9DEF, 0xEA5D},{0x9DF2, 0x9868}, - {0x9DF8, 0xEA5A},{0x9DF9, 0x91E9},{0x9DFA, 0x8DEB},{0x9DFD, 0xEA5E},{0x9E19, 0xEEEB},{0x9E1A, 0xEA5F},{0x9E1B, 0xEA60},{0x9E1E, 0xEA61}, - {0x9E75, 0xEA62},{0x9E78, 0x8CB2},{0x9E79, 0xEA63},{0x9E7D, 0xEA64},{0x9E7F, 0x8EAD},{0x9E81, 0xEA65},{0x9E88, 0xEA66},{0x9E8B, 0xEA67}, - {0x9E8C, 0xEA68},{0x9E91, 0xEA6B},{0x9E92, 0xEA69},{0x9E93, 0x985B},{0x9E95, 0xEA6A},{0x9E97, 0x97ED},{0x9E9D, 0xEA6C},{0x9E9F, 0x97D9}, - {0x9EA5, 0xEA6D},{0x9EA6, 0x949E},{0x9EA9, 0xEA6E},{0x9EAA, 0xEA70},{0x9EAD, 0xEA71},{0x9EB8, 0xEA6F},{0x9EB9, 0x8D8D},{0x9EBA, 0x96CB}, - {0x9EBB, 0x9683},{0x9EBC, 0x9BF5},{0x9EBE, 0x9F80},{0x9EBF, 0x969B},{0x9EC4, 0x89A9},{0x9ECC, 0xEA73},{0x9ECD, 0x8B6F},{0x9ECE, 0xEA74}, - {0x9ECF, 0xEA75},{0x9ED0, 0xEA76},{0x9ED1, 0xEEEC},{0x9ED2, 0x8D95},{0x9ED4, 0xEA77},{0x9ED8, 0xE0D2},{0x9ED9, 0x96D9},{0x9EDB, 0x91E1}, - {0x9EDC, 0xEA78},{0x9EDD, 0xEA7A},{0x9EDE, 0xEA79},{0x9EE0, 0xEA7B},{0x9EE5, 0xEA7C},{0x9EE8, 0xEA7D},{0x9EEF, 0xEA7E},{0x9EF4, 0xEA80}, - {0x9EF6, 0xEA81},{0x9EF7, 0xEA82},{0x9EF9, 0xEA83},{0x9EFB, 0xEA84},{0x9EFC, 0xEA85},{0x9EFD, 0xEA86},{0x9F07, 0xEA87},{0x9F08, 0xEA88}, - {0x9F0E, 0x9343},{0x9F13, 0x8CDB},{0x9F15, 0xEA8A},{0x9F20, 0x916C},{0x9F21, 0xEA8B},{0x9F2C, 0xEA8C},{0x9F3B, 0x9540},{0x9F3E, 0xEA8D}, - {0x9F4A, 0xEA8E},{0x9F4B, 0xE256},{0x9F4E, 0xE6D8},{0x9F4F, 0xE8EB},{0x9F52, 0xEA8F},{0x9F54, 0xEA90},{0x9F5F, 0xEA92},{0x9F60, 0xEA93}, - {0x9F61, 0xEA94},{0x9F62, 0x97EE},{0x9F63, 0xEA91},{0x9F66, 0xEA95},{0x9F67, 0xEA96},{0x9F6A, 0xEA98},{0x9F6C, 0xEA97},{0x9F72, 0xEA9A}, - {0x9F76, 0xEA9B},{0x9F77, 0xEA99},{0x9F8D, 0x97B4},{0x9F95, 0xEA9C},{0x9F9C, 0xEA9D},{0x9F9D, 0xE273},{0x9FA0, 0xEA9E},{0xF929, 0xEDC4}, - {0xF9DC, 0xEECD},{0xFA0E, 0xED73},{0xFA0F, 0xED7E},{0xFA10, 0xED80},{0xFA11, 0xED95},{0xFA12, 0xEDBC},{0xFA13, 0xEDCC},{0xFA14, 0xEDCE}, - {0xFA15, 0xEDF9},{0xFA16, 0xEE42},{0xFA17, 0xEE59},{0xFA18, 0xEE61},{0xFA19, 0xEE62},{0xFA1A, 0xEE63},{0xFA1B, 0xEE65},{0xFA1C, 0xEE69}, - {0xFA1D, 0xEE6C},{0xFA1E, 0xEE75},{0xFA1F, 0xEE81},{0xFA20, 0xEE83},{0xFA21, 0xEE84},{0xFA22, 0xEE8D},{0xFA23, 0xEE95},{0xFA24, 0xEE97}, - {0xFA25, 0xEE98},{0xFA26, 0xEE9B},{0xFA27, 0xEEB7},{0xFA28, 0xEEBE},{0xFA29, 0xEECE},{0xFA2A, 0xEEDA},{0xFA2B, 0xEEDB},{0xFA2C, 0xEEDD}, - {0xFA2D, 0xEEEA},{0xFF01, 0x8149},{0xFF02, 0xEEFC},{0xFF03, 0x8194},{0xFF04, 0x8190},{0xFF05, 0x8193},{0xFF06, 0x8195},{0xFF07, 0xEEFB}, - {0xFF08, 0x8169},{0xFF09, 0x816A},{0xFF0A, 0x8196},{0xFF0B, 0x817B},{0xFF0C, 0x8143},{0xFF0D, 0x817C},{0xFF0E, 0x8144},{0xFF0F, 0x815E}, - {0xFF10, 0x824F},{0xFF11, 0x8250},{0xFF12, 0x8251},{0xFF13, 0x8252},{0xFF14, 0x8253},{0xFF15, 0x8254},{0xFF16, 0x8255},{0xFF17, 0x8256}, - {0xFF18, 0x8257},{0xFF19, 0x8258},{0xFF1A, 0x8146},{0xFF1B, 0x8147},{0xFF1C, 0x8183},{0xFF1D, 0x8181},{0xFF1E, 0x8184},{0xFF1F, 0x8148}, - {0xFF20, 0x8197},{0xFF21, 0x8260},{0xFF22, 0x8261},{0xFF23, 0x8262},{0xFF24, 0x8263},{0xFF25, 0x8264},{0xFF26, 0x8265},{0xFF27, 0x8266}, - {0xFF28, 0x8267},{0xFF29, 0x8268},{0xFF2A, 0x8269},{0xFF2B, 0x826A},{0xFF2C, 0x826B},{0xFF2D, 0x826C},{0xFF2E, 0x826D},{0xFF2F, 0x826E}, - {0xFF30, 0x826F},{0xFF31, 0x8270},{0xFF32, 0x8271},{0xFF33, 0x8272},{0xFF34, 0x8273},{0xFF35, 0x8274},{0xFF36, 0x8275},{0xFF37, 0x8276}, - {0xFF38, 0x8277},{0xFF39, 0x8278},{0xFF3A, 0x8279},{0xFF3B, 0x816D},{0xFF3C, 0x815F},{0xFF3D, 0x816E},{0xFF3E, 0x814F},{0xFF3F, 0x8151}, - {0xFF40, 0x814D},{0xFF41, 0x8281},{0xFF42, 0x8282},{0xFF43, 0x8283},{0xFF44, 0x8284},{0xFF45, 0x8285},{0xFF46, 0x8286},{0xFF47, 0x8287}, - {0xFF48, 0x8288},{0xFF49, 0x8289},{0xFF4A, 0x828A},{0xFF4B, 0x828B},{0xFF4C, 0x828C},{0xFF4D, 0x828D},{0xFF4E, 0x828E},{0xFF4F, 0x828F}, - {0xFF50, 0x8290},{0xFF51, 0x8291},{0xFF52, 0x8292},{0xFF53, 0x8293},{0xFF54, 0x8294},{0xFF55, 0x8295},{0xFF56, 0x8296},{0xFF57, 0x8297}, - {0xFF58, 0x8298},{0xFF59, 0x8299},{0xFF5A, 0x829A},{0xFF5B, 0x816F},{0xFF5C, 0x8162},{0xFF5D, 0x8170},{0xFF5E, 0x8160},{0xFF61, 0x00A1}, - {0xFF62, 0x00A2},{0xFF63, 0x00A3},{0xFF64, 0x00A4},{0xFF65, 0x00A5},{0xFF66, 0x00A6},{0xFF67, 0x00A7},{0xFF68, 0x00A8},{0xFF69, 0x00A9}, - {0xFF6A, 0x00AA},{0xFF6B, 0x00AB},{0xFF6C, 0x00AC},{0xFF6D, 0x00AD},{0xFF6E, 0x00AE},{0xFF6F, 0x00AF},{0xFF70, 0x00B0},{0xFF71, 0x00B1}, - {0xFF72, 0x00B2},{0xFF73, 0x00B3},{0xFF74, 0x00B4},{0xFF75, 0x00B5},{0xFF76, 0x00B6},{0xFF77, 0x00B7},{0xFF78, 0x00B8},{0xFF79, 0x00B9}, - {0xFF7A, 0x00BA},{0xFF7B, 0x00BB},{0xFF7C, 0x00BC},{0xFF7D, 0x00BD},{0xFF7E, 0x00BE},{0xFF7F, 0x00BF},{0xFF80, 0x00C0},{0xFF81, 0x00C1}, - {0xFF82, 0x00C2},{0xFF83, 0x00C3},{0xFF84, 0x00C4},{0xFF85, 0x00C5},{0xFF86, 0x00C6},{0xFF87, 0x00C7},{0xFF88, 0x00C8},{0xFF89, 0x00C9}, - {0xFF8A, 0x00CA},{0xFF8B, 0x00CB},{0xFF8C, 0x00CC},{0xFF8D, 0x00CD},{0xFF8E, 0x00CE},{0xFF8F, 0x00CF},{0xFF90, 0x00D0},{0xFF91, 0x00D1}, - {0xFF92, 0x00D2},{0xFF93, 0x00D3},{0xFF94, 0x00D4},{0xFF95, 0x00D5},{0xFF96, 0x00D6},{0xFF97, 0x00D7},{0xFF98, 0x00D8},{0xFF99, 0x00D9}, - {0xFF9A, 0x00DA},{0xFF9B, 0x00DB},{0xFF9C, 0x00DC},{0xFF9D, 0x00DD},{0xFF9E, 0x00DE},{0xFF9F, 0x00DF},{0xFFE0, 0x8191},{0xFFE1, 0x8192}, - {0xFFE2, 0x81CA},{0xFFE3, 0x8150},{0xFFE4, 0xEEFA},{0xFFE5, 0x818F} -}; diff --git a/vcl/source/fontsubset/u2wansung.inc b/vcl/source/fontsubset/u2wansung.inc deleted file mode 100644 index b321c9e58bfa..000000000000 --- a/vcl/source/fontsubset/u2wansung.inc +++ /dev/null @@ -1,1071 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// TODO: use generic RTL_TEXTENCODING_WANSUNG to get rid of this file - -sal_uInt16pair xlat_1_5[8319] = { - {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027}, - {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F}, - {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037}, - {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F}, - {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047}, - {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F}, - {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057}, - {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F}, - {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067}, - {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F}, - {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077}, - {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A1, 0xA2AE}, - {0x00A4, 0xA2B4},{0x00A7, 0xA1D7},{0x00A8, 0xA1A7},{0x00AA, 0xA8A3},{0x00AD, 0xA1A9},{0x00B0, 0xA1C6},{0x00B1, 0xA1BE},{0x00B2, 0xA9F7}, - {0x00B3, 0xA9F8},{0x00B4, 0xA2A5},{0x00B6, 0xA2D2},{0x00B7, 0xA1A4},{0x00B8, 0xA2AC},{0x00B9, 0xA9F6},{0x00BA, 0xA8AC},{0x00BC, 0xA8F9}, - {0x00BD, 0xA8F6},{0x00BE, 0xA8FA},{0x00BF, 0xA2AF},{0x00C6, 0xA8A1},{0x00D0, 0xA8A2},{0x00D7, 0xA1BF},{0x00D8, 0xA8AA},{0x00DE, 0xA8AD}, - {0x00DF, 0xA9AC},{0x00E6, 0xA9A1},{0x00F0, 0xA9A3},{0x00F7, 0xA1C0},{0x00F8, 0xA9AA},{0x00FE, 0xA9AD},{0x0111, 0xA9A2},{0x0126, 0xA8A4}, - {0x0127, 0xA9A4},{0x0131, 0xA9A5},{0x0132, 0xA8A6},{0x0133, 0xA9A6},{0x0138, 0xA9A7},{0x013F, 0xA8A8},{0x0140, 0xA9A8},{0x0141, 0xA8A9}, - {0x0142, 0xA9A9},{0x0149, 0xA9B0},{0x014A, 0xA8AF},{0x014B, 0xA9AF},{0x0152, 0xA8AB},{0x0153, 0xA9AB},{0x0166, 0xA8AE},{0x0167, 0xA9AE}, - {0x02C7, 0xA2A7},{0x02D0, 0xA2B0},{0x02D8, 0xA2A8},{0x02D9, 0xA2AB},{0x02DA, 0xA2AA},{0x02DB, 0xA2AD},{0x02DD, 0xA2A9},{0x0391, 0xA5C1}, - {0x0392, 0xA5C2},{0x0393, 0xA5C3},{0x0394, 0xA5C4},{0x0395, 0xA5C5},{0x0396, 0xA5C6},{0x0397, 0xA5C7},{0x0398, 0xA5C8},{0x0399, 0xA5C9}, - {0x039A, 0xA5CA},{0x039B, 0xA5CB},{0x039C, 0xA5CC},{0x039D, 0xA5CD},{0x039E, 0xA5CE},{0x039F, 0xA5CF},{0x03A0, 0xA5D0},{0x03A1, 0xA5D1}, - {0x03A3, 0xA5D2},{0x03A4, 0xA5D3},{0x03A5, 0xA5D4},{0x03A6, 0xA5D5},{0x03A7, 0xA5D6},{0x03A8, 0xA5D7},{0x03A9, 0xA5D8},{0x03B1, 0xA5E1}, - {0x03B2, 0xA5E2},{0x03B3, 0xA5E3},{0x03B4, 0xA5E4},{0x03B5, 0xA5E5},{0x03B6, 0xA5E6},{0x03B7, 0xA5E7},{0x03B8, 0xA5E8},{0x03B9, 0xA5E9}, - {0x03BA, 0xA5EA},{0x03BB, 0xA5EB},{0x03BC, 0xA5EC},{0x03BD, 0xA5ED},{0x03BE, 0xA5EE},{0x03BF, 0xA5EF},{0x03C0, 0xA5F0},{0x03C1, 0xA5F1}, - {0x03C3, 0xA5F2},{0x03C4, 0xA5F3},{0x03C5, 0xA5F4},{0x03C6, 0xA5F5},{0x03C7, 0xA5F6},{0x03C8, 0xA5F7},{0x03C9, 0xA5F8},{0x0401, 0xACA7}, - {0x0410, 0xACA1},{0x0411, 0xACA2},{0x0412, 0xACA3},{0x0413, 0xACA4},{0x0414, 0xACA5},{0x0415, 0xACA6},{0x0416, 0xACA8},{0x0417, 0xACA9}, - {0x0418, 0xACAA},{0x0419, 0xACAB},{0x041A, 0xACAC},{0x041B, 0xACAD},{0x041C, 0xACAE},{0x041D, 0xACAF},{0x041E, 0xACB0},{0x041F, 0xACB1}, - {0x0420, 0xACB2},{0x0421, 0xACB3},{0x0422, 0xACB4},{0x0423, 0xACB5},{0x0424, 0xACB6},{0x0425, 0xACB7},{0x0426, 0xACB8},{0x0427, 0xACB9}, - {0x0428, 0xACBA},{0x0429, 0xACBB},{0x042A, 0xACBC},{0x042B, 0xACBD},{0x042C, 0xACBE},{0x042D, 0xACBF},{0x042E, 0xACC0},{0x042F, 0xACC1}, - {0x0430, 0xACD1},{0x0431, 0xACD2},{0x0432, 0xACD3},{0x0433, 0xACD4},{0x0434, 0xACD5},{0x0435, 0xACD6},{0x0436, 0xACD8},{0x0437, 0xACD9}, - {0x0438, 0xACDA},{0x0439, 0xACDB},{0x043A, 0xACDC},{0x043B, 0xACDD},{0x043C, 0xACDE},{0x043D, 0xACDF},{0x043E, 0xACE0},{0x043F, 0xACE1}, - {0x0440, 0xACE2},{0x0441, 0xACE3},{0x0442, 0xACE4},{0x0443, 0xACE5},{0x0444, 0xACE6},{0x0445, 0xACE7},{0x0446, 0xACE8},{0x0447, 0xACE9}, - {0x0448, 0xACEA},{0x0449, 0xACEB},{0x044A, 0xACEC},{0x044B, 0xACED},{0x044C, 0xACEE},{0x044D, 0xACEF},{0x044E, 0xACF0},{0x044F, 0xACF1}, - {0x0451, 0xACD7},{0x2015, 0xA1AA},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2020, 0xA2D3},{0x2021, 0xA2D4}, - {0x2025, 0xA1A5},{0x2026, 0xA1A6},{0x2030, 0xA2B6},{0x2032, 0xA1C7},{0x2033, 0xA1C8},{0x203B, 0xA1D8},{0x2074, 0xA9F9},{0x207F, 0xA9FA}, - {0x2081, 0xA9FB},{0x2082, 0xA9FC},{0x2083, 0xA9FD},{0x2084, 0xA9FE},{0x2103, 0xA1C9},{0x2109, 0xA2B5},{0x2113, 0xA7A4},{0x2116, 0xA2E0}, - {0x2121, 0xA2E5},{0x2122, 0xA2E2},{0x2126, 0xA7D9},{0x212B, 0xA1CA},{0x2153, 0xA8F7},{0x2154, 0xA8F8},{0x215B, 0xA8FB},{0x215C, 0xA8FC}, - {0x215D, 0xA8FD},{0x215E, 0xA8FE},{0x2160, 0xA5B0},{0x2161, 0xA5B1},{0x2162, 0xA5B2},{0x2163, 0xA5B3},{0x2164, 0xA5B4},{0x2165, 0xA5B5}, - {0x2166, 0xA5B6},{0x2167, 0xA5B7},{0x2168, 0xA5B8},{0x2169, 0xA5B9},{0x2170, 0xA5A1},{0x2171, 0xA5A2},{0x2172, 0xA5A3},{0x2173, 0xA5A4}, - {0x2174, 0xA5A5},{0x2175, 0xA5A6},{0x2176, 0xA5A7},{0x2177, 0xA5A8},{0x2178, 0xA5A9},{0x2179, 0xA5AA},{0x2190, 0xA1E7},{0x2191, 0xA1E8}, - {0x2192, 0xA1E6},{0x2193, 0xA1E9},{0x2194, 0xA1EA},{0x2195, 0xA2D5},{0x2196, 0xA2D8},{0x2197, 0xA2D6},{0x2198, 0xA2D9},{0x2199, 0xA2D7}, - {0x21D2, 0xA2A1},{0x21D4, 0xA2A2},{0x2200, 0xA2A3},{0x2202, 0xA1D3},{0x2203, 0xA2A4},{0x2207, 0xA1D4},{0x2208, 0xA1F4},{0x220B, 0xA1F5}, - {0x220F, 0xA2B3},{0x2211, 0xA2B2},{0x221A, 0xA1EE},{0x221D, 0xA1F0},{0x221E, 0xA1C4},{0x2220, 0xA1D0},{0x2225, 0xA1AB},{0x2227, 0xA1FC}, - {0x2228, 0xA1FD},{0x2229, 0xA1FB},{0x222A, 0xA1FA},{0x222B, 0xA1F2},{0x222C, 0xA1F3},{0x222E, 0xA2B1},{0x2234, 0xA1C5},{0x2235, 0xA1F1}, - {0x223C, 0xA1AD},{0x223D, 0xA1EF},{0x2252, 0xA1D6},{0x2260, 0xA1C1},{0x2261, 0xA1D5},{0x2264, 0xA1C2},{0x2265, 0xA1C3},{0x226A, 0xA1EC}, - {0x226B, 0xA1ED},{0x2282, 0xA1F8},{0x2283, 0xA1F9},{0x2286, 0xA1F6},{0x2287, 0xA1F7},{0x2299, 0xA2C1},{0x22A5, 0xA1D1},{0x2312, 0xA1D2}, - {0x2460, 0xA8E7},{0x2461, 0xA8E8},{0x2462, 0xA8E9},{0x2463, 0xA8EA},{0x2464, 0xA8EB},{0x2465, 0xA8EC},{0x2466, 0xA8ED},{0x2467, 0xA8EE}, - {0x2468, 0xA8EF},{0x2469, 0xA8F0},{0x246A, 0xA8F1},{0x246B, 0xA8F2},{0x246C, 0xA8F3},{0x246D, 0xA8F4},{0x246E, 0xA8F5},{0x2474, 0xA9E7}, - {0x2475, 0xA9E8},{0x2476, 0xA9E9},{0x2477, 0xA9EA},{0x2478, 0xA9EB},{0x2479, 0xA9EC},{0x247A, 0xA9ED},{0x247B, 0xA9EE},{0x247C, 0xA9EF}, - {0x247D, 0xA9F0},{0x247E, 0xA9F1},{0x247F, 0xA9F2},{0x2480, 0xA9F3},{0x2481, 0xA9F4},{0x2482, 0xA9F5},{0x249C, 0xA9CD},{0x249D, 0xA9CE}, - {0x249E, 0xA9CF},{0x249F, 0xA9D0},{0x24A0, 0xA9D1},{0x24A1, 0xA9D2},{0x24A2, 0xA9D3},{0x24A3, 0xA9D4},{0x24A4, 0xA9D5},{0x24A5, 0xA9D6}, - {0x24A6, 0xA9D7},{0x24A7, 0xA9D8},{0x24A8, 0xA9D9},{0x24A9, 0xA9DA},{0x24AA, 0xA9DB},{0x24AB, 0xA9DC},{0x24AC, 0xA9DD},{0x24AD, 0xA9DE}, - {0x24AE, 0xA9DF},{0x24AF, 0xA9E0},{0x24B0, 0xA9E1},{0x24B1, 0xA9E2},{0x24B2, 0xA9E3},{0x24B3, 0xA9E4},{0x24B4, 0xA9E5},{0x24B5, 0xA9E6}, - {0x24D0, 0xA8CD},{0x24D1, 0xA8CE},{0x24D2, 0xA8CF},{0x24D3, 0xA8D0},{0x24D4, 0xA8D1},{0x24D5, 0xA8D2},{0x24D6, 0xA8D3},{0x24D7, 0xA8D4}, - {0x24D8, 0xA8D5},{0x24D9, 0xA8D6},{0x24DA, 0xA8D7},{0x24DB, 0xA8D8},{0x24DC, 0xA8D9},{0x24DD, 0xA8DA},{0x24DE, 0xA8DB},{0x24DF, 0xA8DC}, - {0x24E0, 0xA8DD},{0x24E1, 0xA8DE},{0x24E2, 0xA8DF},{0x24E3, 0xA8E0},{0x24E4, 0xA8E1},{0x24E5, 0xA8E2},{0x24E6, 0xA8E3},{0x24E7, 0xA8E4}, - {0x24E8, 0xA8E5},{0x24E9, 0xA8E6},{0x2500, 0xA6A1},{0x2501, 0xA6AC},{0x2502, 0xA6A2},{0x2503, 0xA6AD},{0x250C, 0xA6A3},{0x250D, 0xA6C8}, - {0x250E, 0xA6C7},{0x250F, 0xA6AE},{0x2510, 0xA6A4},{0x2511, 0xA6C2},{0x2512, 0xA6C1},{0x2513, 0xA6AF},{0x2514, 0xA6A6},{0x2515, 0xA6C6}, - {0x2516, 0xA6C5},{0x2517, 0xA6B1},{0x2518, 0xA6A5},{0x2519, 0xA6C4},{0x251A, 0xA6C3},{0x251B, 0xA6B0},{0x251C, 0xA6A7},{0x251D, 0xA6BC}, - {0x251E, 0xA6C9},{0x251F, 0xA6CA},{0x2520, 0xA6B7},{0x2521, 0xA6CB},{0x2522, 0xA6CC},{0x2523, 0xA6B2},{0x2524, 0xA6A9},{0x2525, 0xA6BE}, - {0x2526, 0xA6CD},{0x2527, 0xA6CE},{0x2528, 0xA6B9},{0x2529, 0xA6CF},{0x252A, 0xA6D0},{0x252B, 0xA6B4},{0x252C, 0xA6A8},{0x252D, 0xA6D1}, - {0x252E, 0xA6D2},{0x252F, 0xA6B8},{0x2530, 0xA6BD},{0x2531, 0xA6D3},{0x2532, 0xA6D4},{0x2533, 0xA6B3},{0x2534, 0xA6AA},{0x2535, 0xA6D5}, - {0x2536, 0xA6D6},{0x2537, 0xA6BA},{0x2538, 0xA6BF},{0x2539, 0xA6D7},{0x253A, 0xA6D8},{0x253B, 0xA6B5},{0x253C, 0xA6AB},{0x253D, 0xA6D9}, - {0x253E, 0xA6DA},{0x253F, 0xA6BB},{0x2540, 0xA6DB},{0x2541, 0xA6DC},{0x2542, 0xA6C0},{0x2543, 0xA6DD},{0x2544, 0xA6DE},{0x2545, 0xA6DF}, - {0x2546, 0xA6E0},{0x2547, 0xA6E1},{0x2548, 0xA6E2},{0x2549, 0xA6E3},{0x254A, 0xA6E4},{0x254B, 0xA6B6},{0x2592, 0xA2C6},{0x25A0, 0xA1E1}, - {0x25A1, 0xA1E0},{0x25A3, 0xA2C3},{0x25A4, 0xA2C7},{0x25A5, 0xA2C8},{0x25A6, 0xA2CB},{0x25A7, 0xA2CA},{0x25A8, 0xA2C9},{0x25A9, 0xA2CC}, - {0x25B2, 0xA1E3},{0x25B3, 0xA1E2},{0x25B6, 0xA2BA},{0x25B7, 0xA2B9},{0x25BC, 0xA1E5},{0x25BD, 0xA1E4},{0x25C0, 0xA2B8},{0x25C1, 0xA2B7}, - {0x25C6, 0xA1DF},{0x25C7, 0xA1DE},{0x25C8, 0xA2C2},{0x25CB, 0xA1DB},{0x25CE, 0xA1DD},{0x25CF, 0xA1DC},{0x25D0, 0xA2C4},{0x25D1, 0xA2C5}, - {0x2605, 0xA1DA},{0x2606, 0xA1D9},{0x260E, 0xA2CF},{0x260F, 0xA2CE},{0x261C, 0xA2D0},{0x261E, 0xA2D1},{0x2640, 0xA1CF},{0x2642, 0xA1CE}, - {0x2660, 0xA2BC},{0x2661, 0xA2BD},{0x2663, 0xA2C0},{0x2664, 0xA2BB},{0x2665, 0xA2BE},{0x2667, 0xA2BF},{0x2668, 0xA2CD},{0x2669, 0xA2DB}, - {0x266A, 0xA2DC},{0x266C, 0xA2DD},{0x266D, 0xA2DA},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3},{0x3003, 0xA1A8},{0x3008, 0xA1B4}, - {0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7},{0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BC}, - {0x3011, 0xA1BD},{0x3013, 0xA1EB},{0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3041, 0xAAA1},{0x3042, 0xAAA2},{0x3043, 0xAAA3},{0x3044, 0xAAA4}, - {0x3045, 0xAAA5},{0x3046, 0xAAA6},{0x3047, 0xAAA7},{0x3048, 0xAAA8},{0x3049, 0xAAA9},{0x304A, 0xAAAA},{0x304B, 0xAAAB},{0x304C, 0xAAAC}, - {0x304D, 0xAAAD},{0x304E, 0xAAAE},{0x304F, 0xAAAF},{0x3050, 0xAAB0},{0x3051, 0xAAB1},{0x3052, 0xAAB2},{0x3053, 0xAAB3},{0x3054, 0xAAB4}, - {0x3055, 0xAAB5},{0x3056, 0xAAB6},{0x3057, 0xAAB7},{0x3058, 0xAAB8},{0x3059, 0xAAB9},{0x305A, 0xAABA},{0x305B, 0xAABB},{0x305C, 0xAABC}, - {0x305D, 0xAABD},{0x305E, 0xAABE},{0x305F, 0xAABF},{0x3060, 0xAAC0},{0x3061, 0xAAC1},{0x3062, 0xAAC2},{0x3063, 0xAAC3},{0x3064, 0xAAC4}, - {0x3065, 0xAAC5},{0x3066, 0xAAC6},{0x3067, 0xAAC7},{0x3068, 0xAAC8},{0x3069, 0xAAC9},{0x306A, 0xAACA},{0x306B, 0xAACB},{0x306C, 0xAACC}, - {0x306D, 0xAACD},{0x306E, 0xAACE},{0x306F, 0xAACF},{0x3070, 0xAAD0},{0x3071, 0xAAD1},{0x3072, 0xAAD2},{0x3073, 0xAAD3},{0x3074, 0xAAD4}, - {0x3075, 0xAAD5},{0x3076, 0xAAD6},{0x3077, 0xAAD7},{0x3078, 0xAAD8},{0x3079, 0xAAD9},{0x307A, 0xAADA},{0x307B, 0xAADB},{0x307C, 0xAADC}, - {0x307D, 0xAADD},{0x307E, 0xAADE},{0x307F, 0xAADF},{0x3080, 0xAAE0},{0x3081, 0xAAE1},{0x3082, 0xAAE2},{0x3083, 0xAAE3},{0x3084, 0xAAE4}, - {0x3085, 0xAAE5},{0x3086, 0xAAE6},{0x3087, 0xAAE7},{0x3088, 0xAAE8},{0x3089, 0xAAE9},{0x308A, 0xAAEA},{0x308B, 0xAAEB},{0x308C, 0xAAEC}, - {0x308D, 0xAAED},{0x308E, 0xAAEE},{0x308F, 0xAAEF},{0x3090, 0xAAF0},{0x3091, 0xAAF1},{0x3092, 0xAAF2},{0x3093, 0xAAF3},{0x30A1, 0xABA1}, - {0x30A2, 0xABA2},{0x30A3, 0xABA3},{0x30A4, 0xABA4},{0x30A5, 0xABA5},{0x30A6, 0xABA6},{0x30A7, 0xABA7},{0x30A8, 0xABA8},{0x30A9, 0xABA9}, - {0x30AA, 0xABAA},{0x30AB, 0xABAB},{0x30AC, 0xABAC},{0x30AD, 0xABAD},{0x30AE, 0xABAE},{0x30AF, 0xABAF},{0x30B0, 0xABB0},{0x30B1, 0xABB1}, - {0x30B2, 0xABB2},{0x30B3, 0xABB3},{0x30B4, 0xABB4},{0x30B5, 0xABB5},{0x30B6, 0xABB6},{0x30B7, 0xABB7},{0x30B8, 0xABB8},{0x30B9, 0xABB9}, - {0x30BA, 0xABBA},{0x30BB, 0xABBB},{0x30BC, 0xABBC},{0x30BD, 0xABBD},{0x30BE, 0xABBE},{0x30BF, 0xABBF},{0x30C0, 0xABC0},{0x30C1, 0xABC1}, - {0x30C2, 0xABC2},{0x30C3, 0xABC3},{0x30C4, 0xABC4},{0x30C5, 0xABC5},{0x30C6, 0xABC6},{0x30C7, 0xABC7},{0x30C8, 0xABC8},{0x30C9, 0xABC9}, - {0x30CA, 0xABCA},{0x30CB, 0xABCB},{0x30CC, 0xABCC},{0x30CD, 0xABCD},{0x30CE, 0xABCE},{0x30CF, 0xABCF},{0x30D0, 0xABD0},{0x30D1, 0xABD1}, - {0x30D2, 0xABD2},{0x30D3, 0xABD3},{0x30D4, 0xABD4},{0x30D5, 0xABD5},{0x30D6, 0xABD6},{0x30D7, 0xABD7},{0x30D8, 0xABD8},{0x30D9, 0xABD9}, - {0x30DA, 0xABDA},{0x30DB, 0xABDB},{0x30DC, 0xABDC},{0x30DD, 0xABDD},{0x30DE, 0xABDE},{0x30DF, 0xABDF},{0x30E0, 0xABE0},{0x30E1, 0xABE1}, - {0x30E2, 0xABE2},{0x30E3, 0xABE3},{0x30E4, 0xABE4},{0x30E5, 0xABE5},{0x30E6, 0xABE6},{0x30E7, 0xABE7},{0x30E8, 0xABE8},{0x30E9, 0xABE9}, - {0x30EA, 0xABEA},{0x30EB, 0xABEB},{0x30EC, 0xABEC},{0x30ED, 0xABED},{0x30EE, 0xABEE},{0x30EF, 0xABEF},{0x30F0, 0xABF0},{0x30F1, 0xABF1}, - {0x30F2, 0xABF2},{0x30F3, 0xABF3},{0x30F4, 0xABF4},{0x30F5, 0xABF5},{0x30F6, 0xABF6},{0x3131, 0xA4A1},{0x3132, 0xA4A2},{0x3133, 0xA4A3}, - {0x3134, 0xA4A4},{0x3135, 0xA4A5},{0x3136, 0xA4A6},{0x3137, 0xA4A7},{0x3138, 0xA4A8},{0x3139, 0xA4A9},{0x313A, 0xA4AA},{0x313B, 0xA4AB}, - {0x313C, 0xA4AC},{0x313D, 0xA4AD},{0x313E, 0xA4AE},{0x313F, 0xA4AF},{0x3140, 0xA4B0},{0x3141, 0xA4B1},{0x3142, 0xA4B2},{0x3143, 0xA4B3}, - {0x3144, 0xA4B4},{0x3145, 0xA4B5},{0x3146, 0xA4B6},{0x3147, 0xA4B7},{0x3148, 0xA4B8},{0x3149, 0xA4B9},{0x314A, 0xA4BA},{0x314B, 0xA4BB}, - {0x314C, 0xA4BC},{0x314D, 0xA4BD},{0x314E, 0xA4BE},{0x314F, 0xA4BF},{0x3150, 0xA4C0},{0x3151, 0xA4C1},{0x3152, 0xA4C2},{0x3153, 0xA4C3}, - {0x3154, 0xA4C4},{0x3155, 0xA4C5},{0x3156, 0xA4C6},{0x3157, 0xA4C7},{0x3158, 0xA4C8},{0x3159, 0xA4C9},{0x315A, 0xA4CA},{0x315B, 0xA4CB}, - {0x315C, 0xA4CC},{0x315D, 0xA4CD},{0x315E, 0xA4CE},{0x315F, 0xA4CF},{0x3160, 0xA4D0},{0x3161, 0xA4D1},{0x3162, 0xA4D2},{0x3163, 0xA4D3}, - {0x3164, 0xA4D4},{0x3165, 0xA4D5},{0x3166, 0xA4D6},{0x3167, 0xA4D7},{0x3168, 0xA4D8},{0x3169, 0xA4D9},{0x316A, 0xA4DA},{0x316B, 0xA4DB}, - {0x316C, 0xA4DC},{0x316D, 0xA4DD},{0x316E, 0xA4DE},{0x316F, 0xA4DF},{0x3170, 0xA4E0},{0x3171, 0xA4E1},{0x3172, 0xA4E2},{0x3173, 0xA4E3}, - {0x3174, 0xA4E4},{0x3175, 0xA4E5},{0x3176, 0xA4E6},{0x3177, 0xA4E7},{0x3178, 0xA4E8},{0x3179, 0xA4E9},{0x317A, 0xA4EA},{0x317B, 0xA4EB}, - {0x317C, 0xA4EC},{0x317D, 0xA4ED},{0x317E, 0xA4EE},{0x317F, 0xA4EF},{0x3180, 0xA4F0},{0x3181, 0xA4F1},{0x3182, 0xA4F2},{0x3183, 0xA4F3}, - {0x3184, 0xA4F4},{0x3185, 0xA4F5},{0x3186, 0xA4F6},{0x3187, 0xA4F7},{0x3188, 0xA4F8},{0x3189, 0xA4F9},{0x318A, 0xA4FA},{0x318B, 0xA4FB}, - {0x318C, 0xA4FC},{0x318D, 0xA4FD},{0x318E, 0xA4FE},{0x3200, 0xA9B1},{0x3201, 0xA9B2},{0x3202, 0xA9B3},{0x3203, 0xA9B4},{0x3204, 0xA9B5}, - {0x3205, 0xA9B6},{0x3206, 0xA9B7},{0x3207, 0xA9B8},{0x3208, 0xA9B9},{0x3209, 0xA9BA},{0x320A, 0xA9BB},{0x320B, 0xA9BC},{0x320C, 0xA9BD}, - {0x320D, 0xA9BE},{0x320E, 0xA9BF},{0x320F, 0xA9C0},{0x3210, 0xA9C1},{0x3211, 0xA9C2},{0x3212, 0xA9C3},{0x3213, 0xA9C4},{0x3214, 0xA9C5}, - {0x3215, 0xA9C6},{0x3216, 0xA9C7},{0x3217, 0xA9C8},{0x3218, 0xA9C9},{0x3219, 0xA9CA},{0x321A, 0xA9CB},{0x321B, 0xA9CC},{0x321C, 0xA2DF}, - {0x3260, 0xA8B1},{0x3261, 0xA8B2},{0x3262, 0xA8B3},{0x3263, 0xA8B4},{0x3264, 0xA8B5},{0x3265, 0xA8B6},{0x3266, 0xA8B7},{0x3267, 0xA8B8}, - {0x3268, 0xA8B9},{0x3269, 0xA8BA},{0x326A, 0xA8BB},{0x326B, 0xA8BC},{0x326C, 0xA8BD},{0x326D, 0xA8BE},{0x326E, 0xA8BF},{0x326F, 0xA8C0}, - {0x3270, 0xA8C1},{0x3271, 0xA8C2},{0x3272, 0xA8C3},{0x3273, 0xA8C4},{0x3274, 0xA8C5},{0x3275, 0xA8C6},{0x3276, 0xA8C7},{0x3277, 0xA8C8}, - {0x3278, 0xA8C9},{0x3279, 0xA8CA},{0x327A, 0xA8CB},{0x327B, 0xA8CC},{0x327F, 0xA2DE},{0x3380, 0xA7C9},{0x3381, 0xA7CA},{0x3382, 0xA7CB}, - {0x3383, 0xA7CC},{0x3384, 0xA7CD},{0x3388, 0xA7BA},{0x3389, 0xA7BB},{0x338A, 0xA7DC},{0x338B, 0xA7DD},{0x338C, 0xA7DE},{0x338D, 0xA7B6}, - {0x338E, 0xA7B7},{0x338F, 0xA7B8},{0x3390, 0xA7D4},{0x3391, 0xA7D5},{0x3392, 0xA7D6},{0x3393, 0xA7D7},{0x3394, 0xA7D8},{0x3395, 0xA7A1}, - {0x3396, 0xA7A2},{0x3397, 0xA7A3},{0x3398, 0xA7A5},{0x3399, 0xA7AB},{0x339A, 0xA7AC},{0x339B, 0xA7AD},{0x339C, 0xA7AE},{0x339D, 0xA7AF}, - {0x339E, 0xA7B0},{0x339F, 0xA7B1},{0x33A0, 0xA7B2},{0x33A1, 0xA7B3},{0x33A2, 0xA7B4},{0x33A3, 0xA7A7},{0x33A4, 0xA7A8},{0x33A5, 0xA7A9}, - {0x33A6, 0xA7AA},{0x33A7, 0xA7BD},{0x33A8, 0xA7BE},{0x33A9, 0xA7E5},{0x33AA, 0xA7E6},{0x33AB, 0xA7E7},{0x33AC, 0xA7E8},{0x33AD, 0xA7E1}, - {0x33AE, 0xA7E2},{0x33AF, 0xA7E3},{0x33B0, 0xA7BF},{0x33B1, 0xA7C0},{0x33B2, 0xA7C1},{0x33B3, 0xA7C2},{0x33B4, 0xA7C3},{0x33B5, 0xA7C4}, - {0x33B6, 0xA7C5},{0x33B7, 0xA7C6},{0x33B8, 0xA7C7},{0x33B9, 0xA7C8},{0x33BA, 0xA7CE},{0x33BB, 0xA7CF},{0x33BC, 0xA7D0},{0x33BD, 0xA7D1}, - {0x33BE, 0xA7D2},{0x33BF, 0xA7D3},{0x33C0, 0xA7DA},{0x33C1, 0xA7DB},{0x33C2, 0xA2E3},{0x33C3, 0xA7EC},{0x33C4, 0xA7A6},{0x33C5, 0xA7E0}, - {0x33C6, 0xA7EF},{0x33C7, 0xA2E1},{0x33C8, 0xA7BC},{0x33C9, 0xA7ED},{0x33CA, 0xA7B5},{0x33CF, 0xA7B9},{0x33D0, 0xA7EA},{0x33D3, 0xA7EB}, - {0x33D6, 0xA7DF},{0x33D8, 0xA2E4},{0x33DB, 0xA7E4},{0x33DC, 0xA7EE},{0x33DD, 0xA7E9},{0x4E00, 0xECE9},{0x4E01, 0xEFCB},{0x4E03, 0xF6D2}, - {0x4E07, 0xD8B2},{0x4E08, 0xEDDB},{0x4E09, 0xDFB2},{0x4E0A, 0xDFBE},{0x4E0B, 0xF9BB},{0x4E0D, 0xDCF4},{0x4E11, 0xF5E4},{0x4E14, 0xF3A6}, - {0x4E15, 0xDDE0},{0x4E16, 0xE1A6},{0x4E18, 0xCEF8},{0x4E19, 0xDCB0},{0x4E1E, 0xE3AA},{0x4E2D, 0xF1E9},{0x4E32, 0xCDFA},{0x4E38, 0xFCAF}, - {0x4E39, 0xD3A1},{0x4E3B, 0xF1AB},{0x4E42, 0xE7D1},{0x4E43, 0xD2AC},{0x4E45, 0xCEF9},{0x4E4B, 0xF1FD},{0x4E4D, 0xDEBF},{0x4E4E, 0xFBBA}, - {0x4E4F, 0xF9B9},{0x4E56, 0xCED2},{0x4E58, 0xE3AB},{0x4E59, 0xEBE0},{0x4E5D, 0xCEFA},{0x4E5E, 0xCBF7},{0x4E5F, 0xE5A5},{0x4E6B, 0xCAE1}, - {0x4E6D, 0xD4CC},{0x4E73, 0xEAE1},{0x4E76, 0xDCE3},{0x4E77, 0xDFAD},{0x4E7E, 0xCBEB},{0x4E82, 0xD5AF},{0x4E86, 0xD6F5},{0x4E88, 0xE5F8}, - {0x4E8B, 0xDEC0},{0x4E8C, 0xECA3},{0x4E8E, 0xE9CD},{0x4E90, 0xEAA7},{0x4E91, 0xE9F6},{0x4E92, 0xFBBB},{0x4E94, 0xE7E9},{0x4E95, 0xEFCC}, - {0x4E98, 0xD0E6},{0x4E9B, 0xDEC1},{0x4E9E, 0xE4AC},{0x4EA1, 0xD8CC},{0x4EA2, 0xF9F1},{0x4EA4, 0xCEDF},{0x4EA5, 0xFAA4},{0x4EA6, 0xE6B2}, - {0x4EA8, 0xFAFB},{0x4EAB, 0xFABD},{0x4EAC, 0xCCC8},{0x4EAD, 0xEFCD},{0x4EAE, 0xD5D5},{0x4EB6, 0xD3A2},{0x4EBA, 0xECD1},{0x4EC0, 0xE4A7}, - {0x4EC1, 0xECD2},{0x4EC4, 0xF6B1},{0x4EC7, 0xCEFB},{0x4ECA, 0xD0D1},{0x4ECB, 0xCBBF},{0x4ECD, 0xEDA4},{0x4ED4, 0xEDA8},{0x4ED5, 0xDEC2}, - {0x4ED6, 0xF6E2},{0x4ED7, 0xEDDC},{0x4ED8, 0xDCF5},{0x4ED9, 0xE0B9},{0x4EDD, 0xD4CE},{0x4EDF, 0xF4B5},{0x4EE3, 0xD3DB},{0x4EE4, 0xD6B5}, - {0x4EE5, 0xECA4},{0x4EF0, 0xE4E6},{0x4EF2, 0xF1EA},{0x4EF6, 0xCBEC},{0x4EF7, 0xCBC0},{0x4EFB, 0xECF2},{0x4F01, 0xD0EA},{0x4F09, 0xF9F2}, - {0x4F0A, 0xECA5},{0x4F0B, 0xD0DF},{0x4F0D, 0xE7EA},{0x4F0E, 0xD0EB},{0x4F0F, 0xDCD1},{0x4F10, 0xDBE9},{0x4F11, 0xFDCC},{0x4F2F, 0xDBD7}, - {0x4F34, 0xDAE1},{0x4F36, 0xD6B6},{0x4F38, 0xE3DF},{0x4F3A, 0xDEC3},{0x4F3C, 0xDEC4},{0x4F3D, 0xCAA1},{0x4F43, 0xEEEC},{0x4F46, 0xD3A3}, - {0x4F47, 0xEEB7},{0x4F48, 0xF8CF},{0x4F4D, 0xEAC8},{0x4F4E, 0xEEB8},{0x4F4F, 0xF1AC},{0x4F50, 0xF1A5},{0x4F51, 0xE9CE},{0x4F55, 0xF9BC}, - {0x4F59, 0xE5F9},{0x4F5A, 0xECEA},{0x4F5B, 0xDDD6},{0x4F5C, 0xEDC2},{0x4F69, 0xF8A5},{0x4F6F, 0xE5BA},{0x4F70, 0xDBD8},{0x4F73, 0xCAA2}, - {0x4F76, 0xD1CD},{0x4F7A, 0xEEED},{0x4F7E, 0xECEB},{0x4F7F, 0xDEC5},{0x4F81, 0xE3E0},{0x4F83, 0xCAC9},{0x4F84, 0xF2E9},{0x4F86, 0xD5CE}, - {0x4F88, 0xF6B6},{0x4F8A, 0xCEC2},{0x4F8B, 0xD6C7},{0x4F8D, 0xE3B4},{0x4F8F, 0xF1AD},{0x4F91, 0xEAE2},{0x4F96, 0xD7C2},{0x4F98, 0xF3A7}, - {0x4F9B, 0xCDEA},{0x4F9D, 0xEBEE},{0x4FAE, 0xD9B2},{0x4FAF, 0xFDA5},{0x4FB5, 0xF6D5},{0x4FB6, 0xD5E2},{0x4FBF, 0xF8B5},{0x4FC2, 0xCCF5}, - {0x4FC3, 0xF5B5},{0x4FC4, 0xE4AD},{0x4FC9, 0xE7EB},{0x4FCA, 0xF1D5},{0x4FCE, 0xF0BB},{0x4FD1, 0xE9B5},{0x4FD3, 0xCCC9},{0x4FD4, 0xFAD5}, - {0x4FD7, 0xE1D4},{0x4FDA, 0xD7D6},{0x4FDD, 0xDCC1},{0x4FDF, 0xDEC6},{0x4FE0, 0xFAEF},{0x4FE1, 0xE3E1},{0x4FEE, 0xE1F3},{0x4FEF, 0xDCF6}, - {0x4FF1, 0xCEFC},{0x4FF3, 0xDBC4},{0x4FF5, 0xF8F1},{0x4FF8, 0xDCE4},{0x4FFA, 0xE5EF},{0x5002, 0xDCB1},{0x5006, 0xD5D6},{0x5009, 0xF3DA}, - {0x500B, 0xCBC1},{0x500D, 0xDBC3},{0x5011, 0xD9FA},{0x5012, 0xD3EE},{0x5016, 0xFAB8},{0x5019, 0xFDA6},{0x501A, 0xEBEF},{0x501C, 0xF4A6}, - {0x501E, 0xCCCA},{0x501F, 0xF3A8},{0x5021, 0xF3DB},{0x5023, 0xDBA7},{0x5024, 0xF6B7},{0x5026, 0xCFE6},{0x5027, 0xF0F2},{0x5028, 0xCBDA}, - {0x502A, 0xE7D2},{0x502B, 0xD7C3},{0x502C, 0xF6F0},{0x502D, 0xE8DE},{0x503B, 0xE5A6},{0x5043, 0xE5E7},{0x5047, 0xCAA3},{0x5048, 0xCCA7}, - {0x5049, 0xEAC9},{0x504F, 0xF8B6},{0x5055, 0xFAA5},{0x505A, 0xF1AE},{0x505C, 0xEFCE},{0x5065, 0xCBED},{0x5074, 0xF6B0},{0x5075, 0xEFCF}, - {0x5076, 0xE9CF},{0x5078, 0xF7DE},{0x5080, 0xCED3},{0x5085, 0xDCF7},{0x508D, 0xDBA8},{0x5091, 0xCBF8},{0x5098, 0xDFA1},{0x5099, 0xDDE1}, - {0x50AC, 0xF5CA},{0x50AD, 0xE9B6},{0x50B2, 0xE7EC},{0x50B3, 0xEEEE},{0x50B5, 0xF3F0},{0x50B7, 0xDFBF},{0x50BE, 0xCCCB},{0x50C5, 0xD0C1}, - {0x50C9, 0xF4D2},{0x50CA, 0xE0BA},{0x50CF, 0xDFC0},{0x50D1, 0xCEE0},{0x50D5, 0xDCD2},{0x50D6, 0xFDEA},{0x50DA, 0xD6F6},{0x50DE, 0xEACA}, - {0x50E5, 0xE8E9},{0x50E7, 0xE3AC},{0x50ED, 0xF3D0},{0x50F9, 0xCAA4},{0x50FB, 0xDBF8},{0x50FF, 0xDEC7},{0x5100, 0xEBF0},{0x5101, 0xF1D6}, - {0x5104, 0xE5E2},{0x5106, 0xCCCC},{0x5109, 0xCBFB},{0x5112, 0xEAE3},{0x511F, 0xDFC1},{0x5121, 0xD6ED},{0x512A, 0xE9D0},{0x5132, 0xEEB9}, - {0x5137, 0xD5E3},{0x513A, 0xD1D3},{0x513C, 0xE5F0},{0x5140, 0xE8B4},{0x5141, 0xEBC3},{0x5143, 0xEAAA},{0x5144, 0xFAFC},{0x5145, 0xF5F6}, - {0x5146, 0xF0BC},{0x5147, 0xFDD4},{0x5148, 0xE0BB},{0x5149, 0xCEC3},{0x514B, 0xD0BA},{0x514C, 0xF7BA},{0x514D, 0xD8F3},{0x514E, 0xF7CD}, - {0x5152, 0xE4AE},{0x515C, 0xD4DF},{0x5162, 0xD0E7},{0x5165, 0xECFD},{0x5167, 0xD2AE},{0x5168, 0xEEEF},{0x5169, 0xD5D7},{0x516A, 0xEAE4}, - {0x516B, 0xF8A2},{0x516C, 0xCDEB},{0x516D, 0xD7BF},{0x516E, 0xFBB1},{0x5171, 0xCDEC},{0x5175, 0xDCB2},{0x5176, 0xD0EC},{0x5177, 0xCEFD}, - {0x5178, 0xEEF0},{0x517C, 0xCCC2},{0x5180, 0xD0ED},{0x5186, 0xE5F7},{0x518A, 0xF3FC},{0x518D, 0xEEA2},{0x5192, 0xD9B3},{0x5195, 0xD8F4}, - {0x5197, 0xE9B7},{0x51A0, 0xCEAE},{0x51A5, 0xD9A2},{0x51AA, 0xD8F1},{0x51AC, 0xD4CF},{0x51B6, 0xE5A7},{0x51B7, 0xD5D2},{0x51BD, 0xD6A9}, - {0x51C4, 0xF4A2},{0x51C6, 0xF1D7},{0x51C9, 0xD5D8},{0x51CB, 0xF0BD},{0x51CC, 0xD7D0},{0x51CD, 0xD4D0},{0x51DC, 0xD7CF},{0x51DD, 0xEBEA}, - {0x51DE, 0xFDEB},{0x51E1, 0xDBED},{0x51F0, 0xFCC5},{0x51F1, 0xCBC2},{0x51F6, 0xFDD5},{0x51F8, 0xF4C8},{0x51F9, 0xE8EA},{0x51FA, 0xF5F3}, - {0x51FD, 0xF9DE},{0x5200, 0xD3EF},{0x5203, 0xECD3},{0x5206, 0xDDC2},{0x5207, 0xEFB7},{0x5208, 0xE7D4},{0x520A, 0xCACA},{0x520E, 0xD9FB}, - {0x5211, 0xFAFD},{0x5217, 0xD6AA},{0x521D, 0xF4F8},{0x5224, 0xF7F7},{0x5225, 0xDCAC},{0x5229, 0xD7D7},{0x522A, 0xDFA2},{0x522E, 0xCEBE}, - {0x5230, 0xD3F0},{0x5236, 0xF0A4},{0x5237, 0xE1EC},{0x5238, 0xCFE7},{0x5239, 0xF3CB},{0x523A, 0xEDA9},{0x523B, 0xCABE},{0x5243, 0xF4EF}, - {0x5247, 0xF6CE},{0x524A, 0xDEFB},{0x524B, 0xD0BB},{0x524C, 0xD5B7},{0x524D, 0xEEF1},{0x5254, 0xF4A8},{0x5256, 0xDCF8},{0x525B, 0xCBA7}, - {0x525D, 0xDACE},{0x5261, 0xE0E6},{0x5269, 0xEDA5},{0x526A, 0xEEF2},{0x526F, 0xDCF9},{0x5272, 0xF9DC},{0x5275, 0xF3DC},{0x527D, 0xF8F2}, - {0x527F, 0xF4F9},{0x5283, 0xFCF1},{0x5287, 0xD0BC},{0x5288, 0xDBF9},{0x5289, 0xD7B1},{0x528D, 0xCBFC},{0x5291, 0xF0A5},{0x5292, 0xCBFD}, - {0x529B, 0xD5F4},{0x529F, 0xCDED},{0x52A0, 0xCAA5},{0x52A3, 0xD6AB},{0x52A4, 0xD0C2},{0x52A9, 0xF0BE},{0x52AA, 0xD2BD},{0x52AB, 0xCCA4}, - {0x52BE, 0xFAB6},{0x52C1, 0xCCCD},{0x52C3, 0xDAFA},{0x52C5, 0xF6CF},{0x52C7, 0xE9B8},{0x52C9, 0xD8F5},{0x52CD, 0xCCCE},{0x52D2, 0xD7CD}, - {0x52D5, 0xD4D1},{0x52D6, 0xE9ED},{0x52D8, 0xCAEB},{0x52D9, 0xD9E2},{0x52DB, 0xFDB2},{0x52DD, 0xE3AD},{0x52DE, 0xD6CC},{0x52DF, 0xD9B4}, - {0x52E2, 0xE1A7},{0x52E3, 0xEED3},{0x52E4, 0xD0C3},{0x52F3, 0xFDB3},{0x52F5, 0xD5E4},{0x52F8, 0xCFE8},{0x52FA, 0xEDC3},{0x52FB, 0xD0B2}, - {0x52FE, 0xCEFE},{0x52FF, 0xDAA8},{0x5305, 0xF8D0},{0x5308, 0xFDD6},{0x530D, 0xF8D1},{0x530F, 0xF8D2},{0x5310, 0xDCD3},{0x5315, 0xDDE2}, - {0x5316, 0xFBF9},{0x5317, 0xDDC1},{0x5319, 0xE3B5},{0x5320, 0xEDDD},{0x5321, 0xCEC4},{0x5323, 0xCBA1},{0x532A, 0xDDE3},{0x532F, 0xFCDD}, - {0x5339, 0xF9AF},{0x533F, 0xD2FB},{0x5340, 0xCFA1},{0x5341, 0xE4A8},{0x5343, 0xF4B6},{0x5344, 0xECFE},{0x5347, 0xE3AE},{0x5348, 0xE7ED}, - {0x5349, 0xFDC1},{0x534A, 0xDAE2},{0x534D, 0xD8B3},{0x5351, 0xDDE4},{0x5352, 0xF0EF},{0x5353, 0xF6F1},{0x5354, 0xFAF0},{0x5357, 0xD1F5}, - {0x535A, 0xDACF},{0x535C, 0xDCD4},{0x535E, 0xDCA6},{0x5360, 0xEFBF},{0x5366, 0xCECF},{0x5368, 0xE0D9},{0x536F, 0xD9D6},{0x5370, 0xECD4}, - {0x5371, 0xEACB},{0x5374, 0xCABF},{0x5375, 0xD5B0},{0x5377, 0xCFE9},{0x537D, 0xF1ED},{0x537F, 0xCCCF},{0x5384, 0xE4F8},{0x5393, 0xE4ED}, - {0x5398, 0xD7D8},{0x539A, 0xFDA7},{0x539F, 0xEAAB},{0x53A0, 0xF6B2},{0x53A5, 0xCFF0},{0x53A6, 0xF9BD},{0x53AD, 0xE6F4},{0x53BB, 0xCBDB}, - {0x53C3, 0xF3D1},{0x53C8, 0xE9D1},{0x53C9, 0xF3A9},{0x53CA, 0xD0E0},{0x53CB, 0xE9D2},{0x53CD, 0xDAE3},{0x53D4, 0xE2D2},{0x53D6, 0xF6A2}, - {0x53D7, 0xE1F4},{0x53DB, 0xDAE4},{0x53E1, 0xE7D5},{0x53E2, 0xF5BF},{0x53E3, 0xCFA2},{0x53E4, 0xCDAF},{0x53E5, 0xCFA3},{0x53E9, 0xCDB0}, - {0x53EA, 0xF1FE},{0x53EB, 0xD0A3},{0x53EC, 0xE1AF},{0x53ED, 0xF8A3},{0x53EF, 0xCAA6},{0x53F0, 0xF7BB},{0x53F1, 0xF2EA},{0x53F2, 0xDEC8}, - {0x53F3, 0xE9D3},{0x53F8, 0xDEC9},{0x5403, 0xFDDE},{0x5404, 0xCAC0},{0x5408, 0xF9EA},{0x5409, 0xD1CE},{0x540A, 0xEED4},{0x540C, 0xD4D2}, - {0x540D, 0xD9A3},{0x540E, 0xFDA8},{0x540F, 0xD7D9},{0x5410, 0xF7CE},{0x5411, 0xFABE},{0x541B, 0xCFD6},{0x541D, 0xD7F0},{0x541F, 0xEBE1}, - {0x5420, 0xF8C5},{0x5426, 0xDCFA},{0x5429, 0xDDC3},{0x542B, 0xF9DF},{0x5433, 0xE7EF},{0x5438, 0xFDE5},{0x5439, 0xF6A3},{0x543B, 0xD9FC}, - {0x543C, 0xFDA9},{0x543E, 0xE7EE},{0x5442, 0xD5E5},{0x5448, 0xEFD0},{0x544A, 0xCDB1},{0x5451, 0xF7A2},{0x5468, 0xF1B2},{0x546A, 0xF1B1}, - {0x5471, 0xCDB2},{0x5473, 0xDAAB},{0x5475, 0xCAA7},{0x547B, 0xE3E2},{0x547C, 0xFBBC},{0x547D, 0xD9A4},{0x5480, 0xEEBA},{0x5486, 0xF8D3}, - {0x548C, 0xFBFA},{0x548E, 0xCFA4},{0x5490, 0xDCFB},{0x54A4, 0xF6E3},{0x54A8, 0xEDAA},{0x54AB, 0xF2A1},{0x54AC, 0xCEE1},{0x54B3, 0xFAA6}, - {0x54B8, 0xF9E0},{0x54BD, 0xECD6},{0x54C0, 0xE4EE},{0x54C1, 0xF9A1},{0x54C4, 0xFBEF},{0x54C8, 0xF9EB},{0x54C9, 0xEEA3},{0x54E1, 0xEAAC}, - {0x54E5, 0xCAA8},{0x54E8, 0xF4FA},{0x54ED, 0xCDD6},{0x54EE, 0xFCF6},{0x54F2, 0xF4C9},{0x54FA, 0xF8D4},{0x5504, 0xF8A6},{0x5506, 0xDECA}, - {0x5507, 0xF2C6},{0x550E, 0xD7DA},{0x5510, 0xD3D0},{0x551C, 0xD8C5},{0x552F, 0xEAE6},{0x5531, 0xF3DD},{0x5535, 0xE4DA},{0x553E, 0xF6E4}, - {0x5544, 0xF6F2},{0x5546, 0xDFC2},{0x554F, 0xD9FD},{0x5553, 0xCCF6},{0x5556, 0xD3BA},{0x555E, 0xE4AF},{0x5563, 0xF9E1},{0x557C, 0xF0A6}, - {0x5580, 0xCBD3},{0x5584, 0xE0BC},{0x5586, 0xF4CA},{0x5587, 0xD4FA},{0x5589, 0xFDAA},{0x558A, 0xF9E2},{0x5598, 0xF4B7},{0x5599, 0xFDC2}, - {0x559A, 0xFCB0},{0x559C, 0xFDEC},{0x559D, 0xCAE2},{0x55A7, 0xFDBD},{0x55A9, 0xEAE7},{0x55AA, 0xDFC3},{0x55AB, 0xD1D2},{0x55AC, 0xCEE2}, - {0x55AE, 0xD3A4},{0x55C5, 0xFDAB},{0x55C7, 0xDFE0},{0x55D4, 0xF2C7},{0x55DA, 0xE7F0},{0x55DC, 0xD0EE},{0x55DF, 0xF3AA},{0x55E3, 0xDECB}, - {0x55E4, 0xF6B8},{0x55FD, 0xE1F5},{0x55FE, 0xF1B3},{0x5606, 0xF7A3},{0x5609, 0xCAA9},{0x5614, 0xCFA5},{0x5617, 0xDFC4},{0x562F, 0xE1B0}, - {0x5632, 0xF0BF},{0x5634, 0xF6A4},{0x5636, 0xE3B6},{0x5653, 0xFAC6},{0x5668, 0xD0EF},{0x566B, 0xFDED},{0x5674, 0xDDC4},{0x5686, 0xFCF7}, - {0x56A5, 0xE6BF},{0x56AC, 0xDEAD},{0x56AE, 0xFABF},{0x56B4, 0xE5F1},{0x56BC, 0xEDC4},{0x56CA, 0xD2A5},{0x56CD, 0xFDEE},{0x56D1, 0xF5B6}, - {0x56DA, 0xE1F6},{0x56DB, 0xDECC},{0x56DE, 0xFCDE},{0x56E0, 0xECD7},{0x56F0, 0xCDDD},{0x56F9, 0xD6B7},{0x56FA, 0xCDB3},{0x5703, 0xF8D5}, - {0x5704, 0xE5D8},{0x5708, 0xCFEA},{0x570B, 0xCFD0},{0x570D, 0xEACC},{0x5712, 0xEAAE},{0x5713, 0xEAAD},{0x5716, 0xD3F1},{0x5718, 0xD3A5}, - {0x571F, 0xF7CF},{0x5728, 0xEEA4},{0x572D, 0xD0A4},{0x5730, 0xF2A2},{0x573B, 0xD0F0},{0x5740, 0xF2A3},{0x5742, 0xF7F8},{0x5747, 0xD0B3}, - {0x574A, 0xDBA9},{0x574D, 0xD3BB},{0x574E, 0xCAEC},{0x5750, 0xF1A6},{0x5751, 0xCBD5},{0x5761, 0xF7E7},{0x5764, 0xCDDE},{0x5766, 0xF7A4}, - {0x576A, 0xF8C0},{0x576E, 0xD3DD},{0x5770, 0xCCD0},{0x5775, 0xCFA6},{0x577C, 0xF6F3},{0x5782, 0xE1F7},{0x5788, 0xD3DC},{0x578B, 0xFAFE}, - {0x5793, 0xFAA7},{0x57A0, 0xEBD9},{0x57A2, 0xCFA7},{0x57A3, 0xEAAF},{0x57C3, 0xE4EF},{0x57C7, 0xE9B9},{0x57C8, 0xF1D8},{0x57CB, 0xD8D8}, - {0x57CE, 0xE0F2},{0x57DF, 0xE6B4},{0x57E0, 0xDCFC},{0x57F0, 0xF3F1},{0x57F4, 0xE3D0},{0x57F7, 0xF2FB},{0x57F9, 0xDBC6},{0x57FA, 0xD0F1}, - {0x57FC, 0xD0F2},{0x5800, 0xCFDC},{0x5802, 0xD3D1},{0x5805, 0xCCB1},{0x5806, 0xF7D8},{0x5808, 0xCBA8},{0x5809, 0xEBBC},{0x580A, 0xE4BE}, - {0x581E, 0xF4DC},{0x5821, 0xDCC2},{0x5824, 0xF0A7},{0x5827, 0xE6C0},{0x582A, 0xCAED},{0x582F, 0xE8EB},{0x5830, 0xE5E8},{0x5831, 0xDCC3}, - {0x5834, 0xEDDE},{0x5835, 0xD3F2},{0x583A, 0xCCF7},{0x584A, 0xCED4},{0x584B, 0xE7AB},{0x584F, 0xCBC3},{0x5851, 0xE1B1},{0x5854, 0xF7B2}, - {0x5857, 0xD3F3},{0x5858, 0xD3D2},{0x585A, 0xF5C0},{0x585E, 0xDFDD},{0x5861, 0xEEF3},{0x5862, 0xE7F1},{0x5864, 0xFDB4},{0x5875, 0xF2C8}, - {0x5879, 0xF3D2},{0x587C, 0xEEF4},{0x587E, 0xE2D3},{0x5883, 0xCCD1},{0x5885, 0xDFEA},{0x5889, 0xE9BA},{0x5893, 0xD9D7},{0x589C, 0xF5CD}, - {0x589E, 0xF1F2},{0x589F, 0xFAC7},{0x58A8, 0xD9F8},{0x58A9, 0xD4C2},{0x58AE, 0xF6E5},{0x58B3, 0xDDC5},{0x58BA, 0xE7F2},{0x58BB, 0xEDDF}, - {0x58BE, 0xCACB},{0x58C1, 0xDBFA},{0x58C5, 0xE8B5},{0x58C7, 0xD3A6},{0x58CE, 0xFDB5},{0x58D1, 0xF9C9},{0x58D3, 0xE4E2},{0x58D5, 0xFBBD}, - {0x58D8, 0xD7A4},{0x58D9, 0xCEC5},{0x58DE, 0xCED5},{0x58DF, 0xD6E6},{0x58E4, 0xE5BD},{0x58EB, 0xDECD},{0x58EC, 0xECF3},{0x58EF, 0xEDE0}, - {0x58F9, 0xECEC},{0x58FA, 0xFBBE},{0x58FB, 0xDFEB},{0x58FD, 0xE1F8},{0x590F, 0xF9BE},{0x5914, 0xD0F3},{0x5915, 0xE0AA},{0x5916, 0xE8E2}, - {0x5919, 0xE2D4},{0x591A, 0xD2FD},{0x591C, 0xE5A8},{0x5922, 0xD9D3},{0x5927, 0xD3DE},{0x5929, 0xF4B8},{0x592A, 0xF7BC},{0x592B, 0xDCFD}, - {0x592D, 0xE8EC},{0x592E, 0xE4E7},{0x5931, 0xE3F7},{0x5937, 0xECA8},{0x593E, 0xFAF1},{0x5944, 0xE5F2},{0x5947, 0xD0F4},{0x5948, 0xD2AF}, - {0x5949, 0xDCE5},{0x594E, 0xD0A5},{0x594F, 0xF1B4},{0x5950, 0xFCB1},{0x5951, 0xCCF8},{0x5954, 0xDDC6},{0x5955, 0xFAD1},{0x5957, 0xF7DF}, - {0x595A, 0xFAA8},{0x5960, 0xEEF5},{0x5962, 0xDECE},{0x5967, 0xE7F3},{0x596A, 0xF7AC},{0x596B, 0xEBC4},{0x596C, 0xEDE1},{0x596D, 0xE0AB}, - {0x596E, 0xDDC7},{0x5973, 0xD2B3},{0x5974, 0xD2BF},{0x5978, 0xCACC},{0x597D, 0xFBBF},{0x5982, 0xE5FD},{0x5983, 0xDDE5},{0x5984, 0xD8CD}, - {0x598A, 0xECF4},{0x5993, 0xD0F5},{0x5996, 0xE8ED},{0x5997, 0xD0D2},{0x5999, 0xD9D8},{0x59A5, 0xF6E6},{0x59A8, 0xDBAA},{0x59AC, 0xF7E0}, - {0x59B9, 0xD8D9},{0x59BB, 0xF4A3},{0x59BE, 0xF4DD},{0x59C3, 0xEFD1},{0x59C6, 0xD9B5},{0x59C9, 0xEDAB},{0x59CB, 0xE3B7},{0x59D0, 0xEEBB}, - {0x59D1, 0xCDB4},{0x59D3, 0xE0F3},{0x59D4, 0xEACD},{0x59D9, 0xECF5},{0x59DA, 0xE8EE},{0x59DC, 0xCBA9},{0x59DD, 0xF1AF},{0x59E6, 0xCACD}, - {0x59E8, 0xECA9},{0x59EA, 0xF2EB},{0x59EC, 0xFDEF},{0x59EE, 0xF9F3},{0x59F8, 0xE6C1},{0x59FB, 0xECD8},{0x59FF, 0xEDAC},{0x5A01, 0xEACE}, - {0x5A03, 0xE8DF},{0x5A11, 0xDECF},{0x5A18, 0xD2A6},{0x5A1B, 0xE7F4},{0x5A1C, 0xD1D6},{0x5A1F, 0xE6C2},{0x5A20, 0xE3E3},{0x5A25, 0xE4B0}, - {0x5A29, 0xD8B4},{0x5A36, 0xF6A5},{0x5A3C, 0xF3DE},{0x5A41, 0xD7A5},{0x5A46, 0xF7E8},{0x5A49, 0xE8C6},{0x5A5A, 0xFBE6},{0x5A62, 0xDDE6}, - {0x5A66, 0xDCFE},{0x5A92, 0xD8DA},{0x5A9A, 0xDAAC},{0x5A9B, 0xEAB0},{0x5AA4, 0xE3B8},{0x5AC1, 0xCAAA},{0x5AC2, 0xE1F9},{0x5AC4, 0xEAB1}, - {0x5AC9, 0xF2EC},{0x5ACC, 0xFAEE},{0x5AE1, 0xEED5},{0x5AE6, 0xF9F4},{0x5AE9, 0xD2EC},{0x5B05, 0xFBFB},{0x5B09, 0xFDF0},{0x5B0B, 0xE0BD}, - {0x5B0C, 0xCEE3},{0x5B16, 0xF8C6},{0x5B2A, 0xDEAE},{0x5B40, 0xDFC5},{0x5B43, 0xE5BE},{0x5B50, 0xEDAD},{0x5B51, 0xFAEA},{0x5B54, 0xCDEE}, - {0x5B55, 0xEDA6},{0x5B57, 0xEDAE},{0x5B58, 0xF0ED},{0x5B5A, 0xDDA1},{0x5B5C, 0xEDAF},{0x5B5D, 0xFCF8},{0x5B5F, 0xD8EB},{0x5B63, 0xCCF9}, - {0x5B64, 0xCDB5},{0x5B69, 0xFAA9},{0x5B6B, 0xE1DD},{0x5B70, 0xE2D5},{0x5B71, 0xEDCF},{0x5B75, 0xDDA2},{0x5B78, 0xF9CA},{0x5B7A, 0xEAE8}, - {0x5B7C, 0xE5ED},{0x5B85, 0xD3EB},{0x5B87, 0xE9D4},{0x5B88, 0xE1FA},{0x5B89, 0xE4CC},{0x5B8B, 0xE1E4},{0x5B8C, 0xE8C7},{0x5B8F, 0xCEDB}, - {0x5B93, 0xDCD5},{0x5B95, 0xF7B5},{0x5B96, 0xFCF3},{0x5B97, 0xF0F3},{0x5B98, 0xCEAF},{0x5B99, 0xF1B5},{0x5B9A, 0xEFD2},{0x5B9B, 0xE8C8}, - {0x5B9C, 0xEBF1},{0x5BA2, 0xCBD4},{0x5BA3, 0xE0BE},{0x5BA4, 0xE3F8},{0x5BA5, 0xEAE9},{0x5BA6, 0xFCB2},{0x5BAC, 0xE0F4},{0x5BAE, 0xCFE0}, - {0x5BB0, 0xEEA5},{0x5BB3, 0xFAAA},{0x5BB4, 0xE6C3},{0x5BB5, 0xE1B2},{0x5BB6, 0xCAAB},{0x5BB8, 0xE3E4},{0x5BB9, 0xE9BB},{0x5BBF, 0xE2D6}, - {0x5BC0, 0xF3F2},{0x5BC2, 0xEED6},{0x5BC3, 0xEAB2},{0x5BC4, 0xD0F6},{0x5BC5, 0xECD9},{0x5BC6, 0xDACB},{0x5BC7, 0xCFA8},{0x5BCC, 0xDDA3}, - {0x5BD0, 0xD8DB},{0x5BD2, 0xF9CE},{0x5BD3, 0xE9D5},{0x5BD4, 0xE3D1},{0x5BD7, 0xD2BC},{0x5BDE, 0xD8AC},{0x5BDF, 0xF3CC},{0x5BE1, 0xCDFB}, - {0x5BE2, 0xF6D6},{0x5BE4, 0xE7F5},{0x5BE5, 0xE8EF},{0x5BE6, 0xE3F9},{0x5BE7, 0xD2BB},{0x5BE8, 0xF3F3},{0x5BE9, 0xE3FB},{0x5BEB, 0xDED0}, - {0x5BEC, 0xCEB0},{0x5BEE, 0xD6F7},{0x5BEF, 0xF1D9},{0x5BF5, 0xF5C1},{0x5BF6, 0xDCC4},{0x5BF8, 0xF5BB},{0x5BFA, 0xDED1},{0x5C01, 0xDCE6}, - {0x5C04, 0xDED2},{0x5C07, 0xEDE2},{0x5C08, 0xEEF6},{0x5C09, 0xEACF},{0x5C0A, 0xF0EE},{0x5C0B, 0xE3FC},{0x5C0D, 0xD3DF},{0x5C0E, 0xD3F4}, - {0x5C0F, 0xE1B3},{0x5C11, 0xE1B4},{0x5C16, 0xF4D3},{0x5C19, 0xDFC6},{0x5C24, 0xE9D6},{0x5C28, 0xDBAB},{0x5C31, 0xF6A6},{0x5C38, 0xE3B9}, - {0x5C39, 0xEBC5},{0x5C3A, 0xF4A9},{0x5C3B, 0xCDB6},{0x5C3C, 0xD2F9},{0x5C3E, 0xDAAD},{0x5C3F, 0xD2E3},{0x5C40, 0xCFD1},{0x5C45, 0xCBDC}, - {0x5C46, 0xCCFA},{0x5C48, 0xCFDD},{0x5C4B, 0xE8A9},{0x5C4D, 0xE3BB},{0x5C4E, 0xE3BA},{0x5C51, 0xE0DA},{0x5C55, 0xEEF7},{0x5C5B, 0xDCB3}, - {0x5C60, 0xD3F5},{0x5C62, 0xD7A6},{0x5C64, 0xF6B5},{0x5C65, 0xD7DB},{0x5C6C, 0xE1D5},{0x5C6F, 0xD4EA},{0x5C71, 0xDFA3},{0x5C79, 0xFDDF}, - {0x5C90, 0xD0F7},{0x5C91, 0xEDD4},{0x5CA1, 0xCBAA},{0x5CA9, 0xE4DB},{0x5CAB, 0xE1FB},{0x5CAC, 0xCBA2},{0x5CB1, 0xD3E0},{0x5CB3, 0xE4BF}, - {0x5CB5, 0xFBC0},{0x5CB7, 0xDABE},{0x5CB8, 0xE4CD},{0x5CBA, 0xD6B9},{0x5CBE, 0xEFC0},{0x5CC0, 0xE1FC},{0x5CD9, 0xF6B9},{0x5CE0, 0xDFC7}, - {0x5CE8, 0xE4B1},{0x5CEF, 0xDCE7},{0x5CF0, 0xDCE8},{0x5CF4, 0xFAD6},{0x5CF6, 0xD3F6},{0x5CFB, 0xF1DA},{0x5CFD, 0xFAF2},{0x5D07, 0xE2FD}, - {0x5D0D, 0xD5CF},{0x5D0E, 0xD0F8},{0x5D11, 0xCDDF},{0x5D14, 0xF5CB},{0x5D16, 0xE4F0},{0x5D17, 0xCBAB},{0x5D19, 0xD7C4},{0x5D27, 0xE2FE}, - {0x5D29, 0xDDDA},{0x5D4B, 0xDAAE},{0x5D4C, 0xCAEE},{0x5D50, 0xD5B9},{0x5D69, 0xE3A1},{0x5D6C, 0xE8E3},{0x5D6F, 0xF3AB},{0x5D87, 0xCFA9}, - {0x5D8B, 0xD3F7},{0x5D9D, 0xD4F1},{0x5DA0, 0xCEE4},{0x5DA2, 0xE8F2},{0x5DAA, 0xE5F5},{0x5DB8, 0xE7AE},{0x5DBA, 0xD6BA},{0x5DBC, 0xDFEC}, - {0x5DBD, 0xE4C0},{0x5DCD, 0xE8E4},{0x5DD2, 0xD8B5},{0x5DD6, 0xE4DC},{0x5DDD, 0xF4B9},{0x5DDE, 0xF1B6},{0x5DE1, 0xE2DE},{0x5DE2, 0xE1B5}, - {0x5DE5, 0xCDEF},{0x5DE6, 0xF1A7},{0x5DE7, 0xCEE5},{0x5DE8, 0xCBDD},{0x5DEB, 0xD9E3},{0x5DEE, 0xF3AC},{0x5DF1, 0xD0F9},{0x5DF2, 0xECAB}, - {0x5DF3, 0xDED3},{0x5DF4, 0xF7E9},{0x5DF7, 0xF9F5},{0x5DFD, 0xE1DE},{0x5DFE, 0xCBEE},{0x5E02, 0xE3BC},{0x5E03, 0xF8D6},{0x5E06, 0xDBEE}, - {0x5E0C, 0xFDF1},{0x5E11, 0xF7B6},{0x5E16, 0xF4DE},{0x5E19, 0xF2ED},{0x5E1B, 0xDBD9},{0x5E1D, 0xF0A8},{0x5E25, 0xE1FD},{0x5E2B, 0xDED4}, - {0x5E2D, 0xE0AC},{0x5E33, 0xEDE3},{0x5E36, 0xD3E1},{0x5E38, 0xDFC8},{0x5E3D, 0xD9B6},{0x5E3F, 0xFDAC},{0x5E40, 0xEFD3},{0x5E44, 0xE4C1}, - {0x5E45, 0xF8EB},{0x5E47, 0xDBAC},{0x5E4C, 0xFCC6},{0x5E55, 0xD8AD},{0x5E5F, 0xF6BA},{0x5E61, 0xDBDF},{0x5E62, 0xD3D3},{0x5E63, 0xF8C7}, - {0x5E72, 0xCACE},{0x5E73, 0xF8C1},{0x5E74, 0xD2B4},{0x5E77, 0xDCB4},{0x5E78, 0xFAB9},{0x5E79, 0xCACF},{0x5E7B, 0xFCB3},{0x5E7C, 0xEAEA}, - {0x5E7D, 0xEAEB},{0x5E7E, 0xD0FA},{0x5E84, 0xEDE4},{0x5E87, 0xDDE7},{0x5E8A, 0xDFC9},{0x5E8F, 0xDFED},{0x5E95, 0xEEBC},{0x5E97, 0xEFC1}, - {0x5E9A, 0xCCD2},{0x5E9C, 0xDDA4},{0x5EA0, 0xDFCA},{0x5EA6, 0xD3F8},{0x5EA7, 0xF1A8},{0x5EAB, 0xCDB7},{0x5EAD, 0xEFD4},{0x5EB5, 0xE4DD}, - {0x5EB6, 0xDFEE},{0x5EB7, 0xCBAC},{0x5EB8, 0xE9BC},{0x5EBE, 0xEAEC},{0x5EC2, 0xDFCB},{0x5EC8, 0xF9BF},{0x5EC9, 0xD6AF},{0x5ECA, 0xD5C6}, - {0x5ED0, 0xCFAA},{0x5ED3, 0xCEA9},{0x5ED6, 0xD6F8},{0x5EDA, 0xF1B7},{0x5EDB, 0xEEF8},{0x5EDF, 0xD9D9},{0x5EE0, 0xF3DF},{0x5EE2, 0xF8C8}, - {0x5EE3, 0xCEC6},{0x5EEC, 0xD5E6},{0x5EF3, 0xF4E6},{0x5EF6, 0xE6C5},{0x5EF7, 0xEFD5},{0x5EFA, 0xCBEF},{0x5EFB, 0xFCDF},{0x5F01, 0xDCA7}, - {0x5F04, 0xD6E7},{0x5F0A, 0xF8C9},{0x5F0F, 0xE3D2},{0x5F11, 0xE3BD},{0x5F13, 0xCFE1},{0x5F14, 0xF0C0},{0x5F15, 0xECDA},{0x5F17, 0xDDD7}, - {0x5F18, 0xFBF0},{0x5F1B, 0xECAC},{0x5F1F, 0xF0A9},{0x5F26, 0xFAD7},{0x5F27, 0xFBC1},{0x5F29, 0xD2C0},{0x5F31, 0xE5B0},{0x5F35, 0xEDE5}, - {0x5F3A, 0xCBAD},{0x5F3C, 0xF9B0},{0x5F48, 0xF7A5},{0x5F4A, 0xCBAE},{0x5F4C, 0xDAAF},{0x5F4E, 0xD8B6},{0x5F56, 0xD3A7},{0x5F57, 0xFBB2}, - {0x5F59, 0xFDC4},{0x5F5B, 0xECAD},{0x5F62, 0xFBA1},{0x5F66, 0xE5E9},{0x5F67, 0xE9EE},{0x5F69, 0xF3F4},{0x5F6A, 0xF8F3},{0x5F6B, 0xF0C1}, - {0x5F6C, 0xDEAF},{0x5F6D, 0xF8B0},{0x5F70, 0xF3E0},{0x5F71, 0xE7AF},{0x5F77, 0xDBAD},{0x5F79, 0xE6B5},{0x5F7C, 0xF9A8},{0x5F7F, 0xDDD8}, - {0x5F80, 0xE8D9},{0x5F81, 0xEFD6},{0x5F85, 0xD3E2},{0x5F87, 0xE2DF},{0x5F8A, 0xFCE0},{0x5F8B, 0xD7C8},{0x5F8C, 0xFDAD},{0x5F90, 0xDFEF}, - {0x5F91, 0xCCD3},{0x5F92, 0xD3F9},{0x5F97, 0xD4F0},{0x5F98, 0xDBC7},{0x5F99, 0xDED5},{0x5F9E, 0xF0F4},{0x5FA0, 0xD5D0},{0x5FA1, 0xE5D9}, - {0x5FA8, 0xFCC7},{0x5FA9, 0xDCD6},{0x5FAA, 0xE2E0},{0x5FAE, 0xDAB0},{0x5FB5, 0xF3A3},{0x5FB7, 0xD3EC},{0x5FB9, 0xF4CB},{0x5FBD, 0xFDC5}, - {0x5FC3, 0xE3FD},{0x5FC5, 0xF9B1},{0x5FCC, 0xD0FB},{0x5FCD, 0xECDB},{0x5FD6, 0xF5BC},{0x5FD7, 0xF2A4},{0x5FD8, 0xD8CE},{0x5FD9, 0xD8CF}, - {0x5FE0, 0xF5F7},{0x5FEB, 0xF6E1},{0x5FF5, 0xD2B7},{0x5FFD, 0xFBEC},{0x5FFF, 0xDDC8},{0x600F, 0xE4E8},{0x6012, 0xD2C1},{0x6016, 0xF8D7}, - {0x601C, 0xD6BB},{0x601D, 0xDED6},{0x6020, 0xF7BD},{0x6021, 0xECAE},{0x6025, 0xD0E1},{0x6027, 0xE0F5},{0x6028, 0xEAB3},{0x602A, 0xCED6}, - {0x602F, 0xCCA5},{0x6041, 0xECF6},{0x6042, 0xE2E1},{0x6043, 0xE3BE},{0x604D, 0xFCC8},{0x6050, 0xCDF0},{0x6052, 0xF9F6},{0x6055, 0xDFF0}, - {0x6059, 0xE5BF},{0x605D, 0xCEBF},{0x6062, 0xFCE1},{0x6063, 0xEDB0},{0x6064, 0xFDD1},{0x6065, 0xF6BB},{0x6068, 0xF9CF},{0x6069, 0xEBDA}, - {0x606A, 0xCAC1},{0x606C, 0xD2B8},{0x606D, 0xCDF1},{0x606F, 0xE3D3},{0x6070, 0xFDE6},{0x6085, 0xE6ED},{0x6089, 0xE3FA},{0x608C, 0xF0AA}, - {0x608D, 0xF9D0},{0x6094, 0xFCE2},{0x6096, 0xF8A7},{0x609A, 0xE1E5},{0x609B, 0xEEF9},{0x609F, 0xE7F6},{0x60A0, 0xEAED},{0x60A3, 0xFCB4}, - {0x60A4, 0xF5C2},{0x60A7, 0xD7DC},{0x60B0, 0xF0F5},{0x60B2, 0xDDE8},{0x60B3, 0xD3ED},{0x60B4, 0xF5FC},{0x60B6, 0xDABF},{0x60B8, 0xCCFB}, - {0x60BC, 0xD3FA},{0x60BD, 0xF4A4},{0x60C5, 0xEFD7},{0x60C7, 0xD4C3},{0x60D1, 0xFBE3},{0x60DA, 0xFBED},{0x60DC, 0xE0AD},{0x60DF, 0xEAEE}, - {0x60E0, 0xFBB3},{0x60E1, 0xE4C2},{0x60F0, 0xF6E7},{0x60F1, 0xD2DD},{0x60F3, 0xDFCC},{0x60F6, 0xFCC9},{0x60F9, 0xE5A9},{0x60FA, 0xE0F6}, - {0x60FB, 0xF6B3},{0x6101, 0xE1FE},{0x6106, 0xCBF0},{0x6108, 0xEAEF},{0x6109, 0xEAF0},{0x610D, 0xDAC0},{0x610E, 0xF8B4},{0x610F, 0xEBF2}, - {0x6115, 0xE4C3},{0x611A, 0xE9D7},{0x611B, 0xE4F1},{0x611F, 0xCAEF},{0x6127, 0xCED7},{0x6130, 0xFCCA},{0x6134, 0xF3E1},{0x6137, 0xCBC4}, - {0x613C, 0xE3E5},{0x613E, 0xCBC5},{0x613F, 0xEAB4},{0x6142, 0xE9BD},{0x6144, 0xD7C9},{0x6147, 0xEBDB},{0x6148, 0xEDB1},{0x614A, 0xCCC3}, - {0x614B, 0xF7BE},{0x614C, 0xFCCB},{0x6153, 0xF8F4},{0x6155, 0xD9B7},{0x6158, 0xF3D3},{0x6159, 0xF3D4},{0x615D, 0xF7E4},{0x615F, 0xF7D1}, - {0x6162, 0xD8B7},{0x6163, 0xCEB1},{0x6164, 0xCAC2},{0x6167, 0xFBB4},{0x6168, 0xCBC6},{0x616B, 0xF0F6},{0x616E, 0xD5E7},{0x6170, 0xEAD0}, - {0x6176, 0xCCD4},{0x6177, 0xCBAF},{0x617D, 0xF4AA},{0x617E, 0xE9AF},{0x6181, 0xF5C3},{0x6182, 0xE9D8},{0x618A, 0xDDE9},{0x618E, 0xF1F3}, - {0x6190, 0xD5FB},{0x6191, 0xDEBB},{0x6194, 0xF4FB},{0x6198, 0xFDF3},{0x6199, 0xFDF2},{0x619A, 0xF7A6},{0x61A4, 0xDDC9},{0x61A7, 0xD4D3}, - {0x61A9, 0xCCA8},{0x61AB, 0xDAC1},{0x61AC, 0xCCD5},{0x61AE, 0xD9E4},{0x61B2, 0xFACA},{0x61B6, 0xE5E3},{0x61BA, 0xD3BC},{0x61BE, 0xCAF0}, - {0x61C3, 0xD0C4},{0x61C7, 0xCAD0},{0x61C8, 0xFAAB},{0x61C9, 0xEBEB},{0x61CA, 0xE7F8},{0x61CB, 0xD9E5},{0x61E6, 0xD1D7},{0x61F2, 0xF3A4}, - {0x61F6, 0xD4FB},{0x61F7, 0xFCE3},{0x61F8, 0xFAD8},{0x61FA, 0xF3D5},{0x61FC, 0xCFAB},{0x61FF, 0xEBF3},{0x6200, 0xD5FC},{0x6207, 0xD3D4}, - {0x6208, 0xCDFC},{0x620A, 0xD9E6},{0x620C, 0xE2F9},{0x620D, 0xE2A1},{0x620E, 0xEBD4},{0x6210, 0xE0F7},{0x6211, 0xE4B2},{0x6212, 0xCCFC}, - {0x6216, 0xFBE4},{0x621A, 0xF4AB},{0x621F, 0xD0BD},{0x6221, 0xCAF1},{0x622A, 0xEFB8},{0x622E, 0xD7C0},{0x6230, 0xEEFA},{0x6231, 0xFDF4}, - {0x6234, 0xD3E3},{0x6236, 0xFBC2},{0x623E, 0xD5E8},{0x623F, 0xDBAE},{0x6240, 0xE1B6},{0x6241, 0xF8B7},{0x6247, 0xE0BF},{0x6248, 0xFBC3}, - {0x6249, 0xDDEA},{0x624B, 0xE2A2},{0x624D, 0xEEA6},{0x6253, 0xF6E8},{0x6258, 0xF6F5},{0x626E, 0xDDCA},{0x6271, 0xD0E2},{0x6276, 0xDDA6}, - {0x6279, 0xDDEB},{0x627C, 0xE4F9},{0x627F, 0xE3AF},{0x6280, 0xD0FC},{0x6284, 0xF4FC},{0x6289, 0xCCBC},{0x628A, 0xF7EA},{0x6291, 0xE5E4}, - {0x6292, 0xDFF1},{0x6295, 0xF7E1},{0x6297, 0xF9F7},{0x6298, 0xEFB9},{0x629B, 0xF8D8},{0x62AB, 0xF9A9},{0x62B1, 0xF8D9},{0x62B5, 0xEEBD}, - {0x62B9, 0xD8C6},{0x62BC, 0xE4E3},{0x62BD, 0xF5CE},{0x62C2, 0xDDD9},{0x62C7, 0xD9E7},{0x62C8, 0xD2B9},{0x62C9, 0xD5C3},{0x62CC, 0xDAE5}, - {0x62CD, 0xDAD0},{0x62CF, 0xD1D9},{0x62D0, 0xCED8},{0x62D2, 0xCBDE},{0x62D3, 0xF4AC},{0x62D4, 0xDAFB},{0x62D6, 0xF6E9},{0x62D7, 0xE8F3}, - {0x62D8, 0xCFAC},{0x62D9, 0xF0F0},{0x62DB, 0xF4FD},{0x62DC, 0xDBC8},{0x62EC, 0xCEC0},{0x62ED, 0xE3D4},{0x62EE, 0xD1CF},{0x62EF, 0xF1F5}, - {0x62F1, 0xCDF2},{0x62F3, 0xCFEB},{0x62F7, 0xCDB8},{0x62FE, 0xE3A6},{0x62FF, 0xD1DA},{0x6301, 0xF2A5},{0x6307, 0xF2A6},{0x6309, 0xE4CE}, - {0x6311, 0xD3FB},{0x632B, 0xF1A9},{0x632F, 0xF2C9},{0x633A, 0xEFD8},{0x633B, 0xE6C9},{0x633D, 0xD8B8},{0x633E, 0xFAF3},{0x6349, 0xF3B5}, - {0x634C, 0xF8A4},{0x634F, 0xD1F3},{0x6350, 0xE6C8},{0x6355, 0xF8DA},{0x6367, 0xDCE9},{0x6368, 0xDED7},{0x636E, 0xCBDF},{0x6372, 0xCFEC}, - {0x6377, 0xF4DF},{0x637A, 0xD1F4},{0x637B, 0xD2BA},{0x637F, 0xDFF2},{0x6383, 0xE1B7},{0x6388, 0xE2A3},{0x6389, 0xD3FC},{0x638C, 0xEDE6}, - {0x6392, 0xDBC9},{0x6396, 0xE4FA},{0x6398, 0xCFDE},{0x639B, 0xCED0},{0x63A0, 0xD5D3},{0x63A1, 0xF3F5},{0x63A2, 0xF7AE},{0x63A5, 0xEFC8}, - {0x63A7, 0xCDF3},{0x63A8, 0xF5CF},{0x63A9, 0xE5F3},{0x63AA, 0xF0C2},{0x63C0, 0xCAD1},{0x63C4, 0xEAF1},{0x63C6, 0xD0A6},{0x63CF, 0xD9DA}, - {0x63D0, 0xF0AB},{0x63D6, 0xEBE7},{0x63DA, 0xE5C0},{0x63DB, 0xFCB5},{0x63E1, 0xE4C4},{0x63ED, 0xCCA9},{0x63EE, 0xFDC6},{0x63F4, 0xEAB5}, - {0x63F6, 0xE5AA},{0x63F7, 0xDFBA},{0x640D, 0xE1DF},{0x640F, 0xDAD1},{0x6414, 0xE1B8},{0x6416, 0xE8F4},{0x6417, 0xD3FD},{0x641C, 0xE2A4}, - {0x6422, 0xF2CA},{0x642C, 0xDAE6},{0x642D, 0xF7B3},{0x643A, 0xFDCD},{0x643E, 0xF3B6},{0x6458, 0xEED7},{0x6460, 0xF5C4},{0x6469, 0xD8A4}, - {0x646F, 0xF2A7},{0x6478, 0xD9B8},{0x6479, 0xD9B9},{0x647A, 0xEFC9},{0x6488, 0xD6CE},{0x6491, 0xF7CB},{0x6492, 0xDFAE},{0x6493, 0xE8F5}, - {0x649A, 0xD2B5},{0x649E, 0xD3D5},{0x64A4, 0xF4CC},{0x64A5, 0xDAFC},{0x64AB, 0xD9E8},{0x64AD, 0xF7EB},{0x64AE, 0xF5C9},{0x64B0, 0xF3BC}, - {0x64B2, 0xDAD2},{0x64BB, 0xD3B5},{0x64C1, 0xE8B6},{0x64C4, 0xD6CF},{0x64C5, 0xF4BA},{0x64C7, 0xF7C9},{0x64CA, 0xCCAA},{0x64CD, 0xF0C3}, - {0x64CE, 0xCCD6},{0x64D2, 0xD0D3},{0x64D4, 0xD3BD},{0x64D8, 0xDBFB},{0x64DA, 0xCBE0},{0x64E1, 0xD3E4},{0x64E2, 0xF6F7},{0x64E5, 0xD5BA}, - {0x64E6, 0xF3CD},{0x64E7, 0xCBE1},{0x64EC, 0xEBF4},{0x64F2, 0xF4AD},{0x64F4, 0xFCAA},{0x64FA, 0xF7EC},{0x64FE, 0xE8F6},{0x6500, 0xDAE7}, - {0x6504, 0xF7CC},{0x6518, 0xE5C1},{0x651D, 0xE0EE},{0x6523, 0xD5FD},{0x652A, 0xCEE6},{0x652B, 0xFCAB},{0x652C, 0xD5BB},{0x652F, 0xF2A8}, - {0x6536, 0xE2A5},{0x6537, 0xCDB9},{0x6538, 0xEAF2},{0x6539, 0xCBC7},{0x653B, 0xCDF4},{0x653E, 0xDBAF},{0x653F, 0xEFD9},{0x6545, 0xCDBA}, - {0x6548, 0xFCF9},{0x654D, 0xDFF3},{0x654E, 0xCEE7},{0x654F, 0xDAC2},{0x6551, 0xCFAD},{0x6556, 0xE7F9},{0x6557, 0xF8A8},{0x655E, 0xF3E2}, - {0x6562, 0xCAF2},{0x6563, 0xDFA4},{0x6566, 0xD4C4},{0x656C, 0xCCD7},{0x656D, 0xE5C2},{0x6572, 0xCDBB},{0x6574, 0xEFDA},{0x6575, 0xEED8}, - {0x6577, 0xDDA7},{0x6578, 0xE2A6},{0x657E, 0xE0C0},{0x6582, 0xD6B0},{0x6583, 0xF8CA},{0x6585, 0xFCFA},{0x6587, 0xD9FE},{0x658C, 0xDEB0}, - {0x6590, 0xDDEC},{0x6591, 0xDAE8},{0x6597, 0xD4E0},{0x6599, 0xD6F9},{0x659B, 0xCDD7},{0x659C, 0xDED8},{0x659F, 0xF2F8},{0x65A1, 0xE4D6}, - {0x65A4, 0xD0C5},{0x65A5, 0xF4AE},{0x65A7, 0xDDA8},{0x65AB, 0xEDC5},{0x65AC, 0xF3D6},{0x65AF, 0xDED9},{0x65B0, 0xE3E6},{0x65B7, 0xD3A8}, - {0x65B9, 0xDBB0},{0x65BC, 0xE5DA},{0x65BD, 0xE3BF},{0x65C1, 0xDBB1},{0x65C5, 0xD5E9},{0x65CB, 0xE0C1},{0x65CC, 0xEFDB},{0x65CF, 0xF0E9}, - {0x65D2, 0xD7B2},{0x65D7, 0xD0FD},{0x65E0, 0xD9E9},{0x65E3, 0xD0FE},{0x65E5, 0xECED},{0x65E6, 0xD3A9},{0x65E8, 0xF2A9},{0x65E9, 0xF0C4}, - {0x65EC, 0xE2E2},{0x65ED, 0xE9EF},{0x65F1, 0xF9D1},{0x65F4, 0xE9D9},{0x65FA, 0xE8DA},{0x65FB, 0xDAC3},{0x65FC, 0xDAC4},{0x65FD, 0xD4C5}, - {0x65FF, 0xE7FA},{0x6606, 0xCDE0},{0x6607, 0xE3B0},{0x6609, 0xDBB2},{0x660A, 0xFBC4},{0x660C, 0xF3E3},{0x660E, 0xD9A5},{0x660F, 0xFBE7}, - {0x6610, 0xDDCB},{0x6611, 0xD0D4},{0x6613, 0xE6B6},{0x6614, 0xE0AE},{0x6615, 0xFDDA},{0x661E, 0xDCB5},{0x661F, 0xE0F8},{0x6620, 0xE7B1}, - {0x6625, 0xF5F0},{0x6627, 0xD8DC},{0x6628, 0xEDC6},{0x662D, 0xE1B9},{0x662F, 0xE3C0},{0x6630, 0xF9C0},{0x6631, 0xE9F0},{0x6634, 0xD9DB}, - {0x6636, 0xF3E4},{0x663A, 0xDCB6},{0x663B, 0xE4E9},{0x6641, 0xF0C5},{0x6642, 0xE3C1},{0x6643, 0xFCCC},{0x6644, 0xFCCD},{0x6649, 0xF2CB}, - {0x664B, 0xF2CC},{0x664F, 0xE4CF},{0x6659, 0xF1DB},{0x665B, 0xFAD9},{0x665D, 0xF1B8},{0x665E, 0xFDF5},{0x665F, 0xE0F9},{0x6664, 0xE7FB}, - {0x6665, 0xFCB7},{0x6666, 0xFCE4},{0x6667, 0xFBC5},{0x6668, 0xE3E7},{0x6669, 0xD8B9},{0x666B, 0xF6F8},{0x666E, 0xDCC5},{0x666F, 0xCCD8}, - {0x6673, 0xE0AF},{0x6674, 0xF4E7},{0x6676, 0xEFDC},{0x6677, 0xCFFC},{0x6678, 0xEFDD},{0x667A, 0xF2AA},{0x6684, 0xFDBE},{0x6687, 0xCAAC}, - {0x6688, 0xFDBB},{0x6689, 0xFDC7},{0x668E, 0xE7B2},{0x6690, 0xEAD1},{0x6691, 0xDFF4},{0x6696, 0xD1EC},{0x6697, 0xE4DE},{0x6698, 0xE5C3}, - {0x669D, 0xD9A6},{0x66A0, 0xCDBC},{0x66A2, 0xF3E5},{0x66AB, 0xEDD5},{0x66AE, 0xD9BA},{0x66B2, 0xEDE7},{0x66B3, 0xFBB5},{0x66B4, 0xF8EC}, - {0x66B9, 0xE0E7},{0x66BB, 0xCCD9},{0x66BE, 0xD4C6},{0x66C4, 0xE7A5},{0x66C6, 0xD5F5},{0x66C7, 0xD3BE},{0x66C9, 0xFCFB},{0x66D6, 0xE4F2}, - {0x66D9, 0xDFF5},{0x66DC, 0xE8F8},{0x66DD, 0xF8ED},{0x66E0, 0xCEC7},{0x66E6, 0xFDF6},{0x66F0, 0xE8D8},{0x66F2, 0xCDD8},{0x66F3, 0xE7D6}, - {0x66F4, 0xCCDA},{0x66F7, 0xCAE3},{0x66F8, 0xDFF6},{0x66F9, 0xF0C7},{0x66FA, 0xF0C6},{0x66FC, 0xD8BA},{0x66FE, 0xF1F4},{0x66FF, 0xF4F0}, - {0x6700, 0xF5CC},{0x6703, 0xFCE5},{0x6708, 0xEAC5},{0x6709, 0xEAF3},{0x670B, 0xDDDB},{0x670D, 0xDCD7},{0x6714, 0xDEFD},{0x6715, 0xF2F9}, - {0x6717, 0xD5C7},{0x671B, 0xD8D0},{0x671D, 0xF0C8},{0x671E, 0xD1A1},{0x671F, 0xD1A2},{0x6726, 0xD9D4},{0x6727, 0xD6E8},{0x6728, 0xD9CA}, - {0x672A, 0xDAB1},{0x672B, 0xD8C7},{0x672C, 0xDCE2},{0x672D, 0xF3CE},{0x672E, 0xF5F4},{0x6731, 0xF1B9},{0x6734, 0xDAD3},{0x6736, 0xF6EA}, - {0x673A, 0xCFF5},{0x673D, 0xFDAE},{0x6746, 0xCAD2},{0x6749, 0xDFB4},{0x674E, 0xD7DD},{0x674F, 0xFABA},{0x6750, 0xEEA7},{0x6751, 0xF5BD}, - {0x6753, 0xF8F5},{0x6756, 0xEDE8},{0x675C, 0xD4E1},{0x675E, 0xD1A3},{0x675F, 0xE1D6},{0x676D, 0xF9F8},{0x676F, 0xDBCA},{0x6770, 0xCBF9}, - {0x6771, 0xD4D4},{0x6773, 0xD9DC},{0x6775, 0xEEBE},{0x6777, 0xF7ED},{0x677B, 0xD2EE},{0x677E, 0xE1E6},{0x677F, 0xF7F9},{0x6787, 0xDDED}, - {0x6789, 0xE8DB},{0x678B, 0xDBB3},{0x678F, 0xD1F7},{0x6790, 0xE0B0},{0x6793, 0xD4E2},{0x6795, 0xF6D7},{0x6797, 0xD7F9},{0x679A, 0xD8DD}, - {0x679C, 0xCDFD},{0x679D, 0xF2AB},{0x67AF, 0xCDBD},{0x67B0, 0xF8C2},{0x67B3, 0xF2AC},{0x67B6, 0xCAAD},{0x67B7, 0xCAAE},{0x67B8, 0xCFAE}, - {0x67BE, 0xE3C2},{0x67C4, 0xDCB7},{0x67CF, 0xDBDA},{0x67D0, 0xD9BB},{0x67D1, 0xCAF3},{0x67D2, 0xF6D3},{0x67D3, 0xE6F8},{0x67D4, 0xEAF5}, - {0x67DA, 0xEAF6},{0x67DD, 0xF6F9},{0x67E9, 0xCFAF},{0x67EC, 0xCAD3},{0x67EF, 0xCAAF},{0x67F0, 0xD2B0},{0x67F1, 0xF1BA},{0x67F3, 0xD7B3}, - {0x67F4, 0xE3C3},{0x67F5, 0xF3FD},{0x67F6, 0xDEDA},{0x67FB, 0xDEDB},{0x67FE, 0xEFDE},{0x6812, 0xE2E3},{0x6813, 0xEEFB},{0x6816, 0xDFF7}, - {0x6817, 0xD7CA},{0x6821, 0xCEE8},{0x6822, 0xDBDB},{0x682A, 0xF1BB},{0x682F, 0xE9F1},{0x6838, 0xFAB7},{0x6839, 0xD0C6},{0x683C, 0xCCAB}, - {0x683D, 0xEEA8},{0x6840, 0xCBFA},{0x6841, 0xF9F9},{0x6842, 0xCCFD},{0x6843, 0xD3FE},{0x6848, 0xE4D0},{0x684E, 0xF2EE},{0x6850, 0xD4D5}, - {0x6851, 0xDFCD},{0x6853, 0xFCB8},{0x6854, 0xD1D0},{0x686D, 0xF2CD},{0x6876, 0xF7D2},{0x687F, 0xCAD4},{0x6881, 0xD5D9},{0x6885, 0xD8DE}, - {0x688F, 0xCDD9},{0x6893, 0xEEA9},{0x6894, 0xF6BC},{0x6897, 0xCCDB},{0x689D, 0xF0C9},{0x689F, 0xFCFC},{0x68A1, 0xE8C9},{0x68A2, 0xF4FE}, - {0x68A7, 0xE7FC},{0x68A8, 0xD7DE},{0x68AD, 0xDEDC},{0x68AF, 0xF0AC},{0x68B0, 0xCCFE},{0x68B1, 0xCDE1},{0x68B3, 0xE1BA},{0x68B5, 0xDBEF}, - {0x68B6, 0xDAB2},{0x68C4, 0xD1A5},{0x68C5, 0xDCB8},{0x68C9, 0xD8F6},{0x68CB, 0xD1A4},{0x68CD, 0xCDE2},{0x68D2, 0xDCEA},{0x68D5, 0xF0F7}, - {0x68D7, 0xF0CA},{0x68D8, 0xD0BE},{0x68DA, 0xDDDC},{0x68DF, 0xD4D6},{0x68E0, 0xD3D6},{0x68E7, 0xEDD0},{0x68E8, 0xCDA1},{0x68EE, 0xDFB5}, - {0x68F2, 0xDFF8},{0x68F9, 0xD4A1},{0x68FA, 0xCEB2},{0x6900, 0xE8CA},{0x6905, 0xEBF5},{0x690D, 0xE3D5},{0x690E, 0xF5D0},{0x6912, 0xF5A1}, - {0x6927, 0xD9A7},{0x6930, 0xE5AB},{0x693D, 0xE6CB},{0x693F, 0xF5F1},{0x694A, 0xE5C5},{0x6953, 0xF9A3},{0x6954, 0xE0DB},{0x6955, 0xF6EB}, - {0x6957, 0xCBF1},{0x6959, 0xD9EA},{0x695A, 0xF5A2},{0x695E, 0xD7D1},{0x6960, 0xD1F8},{0x6961, 0xEAF8},{0x6962, 0xEAF9},{0x6963, 0xDAB3}, - {0x6968, 0xEFDF},{0x696B, 0xF1EF},{0x696D, 0xE5F6},{0x696E, 0xEEBF},{0x696F, 0xE2E4},{0x6975, 0xD0BF},{0x6977, 0xFAAC},{0x6978, 0xF5D1}, - {0x6979, 0xE7B3},{0x6995, 0xE9BE},{0x699B, 0xF2CE},{0x699C, 0xDBB4},{0x69A5, 0xFCCE},{0x69A7, 0xDDEE},{0x69AE, 0xE7B4},{0x69B4, 0xD7B4}, - {0x69BB, 0xF7B4},{0x69C1, 0xCDBE},{0x69C3, 0xDAE9},{0x69CB, 0xCFB0},{0x69CC, 0xF7D9},{0x69CD, 0xF3E6},{0x69D0, 0xCED9},{0x69E8, 0xCEAA}, - {0x69EA, 0xCBC8},{0x69FB, 0xD0A7},{0x69FD, 0xF0CB},{0x69FF, 0xD0C7},{0x6A02, 0xE4C5},{0x6A0A, 0xDBE0},{0x6A11, 0xD5DA},{0x6A13, 0xD7A7}, - {0x6A17, 0xEEC0},{0x6A19, 0xF8F6},{0x6A1E, 0xF5D2},{0x6A1F, 0xEDE9},{0x6A21, 0xD9BC},{0x6A23, 0xE5C6},{0x6A35, 0xF5A3},{0x6A38, 0xDAD4}, - {0x6A39, 0xE2A7},{0x6A3A, 0xFBFC},{0x6A3D, 0xF1DC},{0x6A44, 0xCAF4},{0x6A48, 0xE8FA},{0x6A4B, 0xCEE9},{0x6A52, 0xE9F8},{0x6A53, 0xE2E5}, - {0x6A58, 0xD0B9},{0x6A59, 0xD4F2},{0x6A5F, 0xD1A6},{0x6A61, 0xDFCE},{0x6A6B, 0xFCF4},{0x6A80, 0xD3AA},{0x6A84, 0xCCAC},{0x6A89, 0xEFE0}, - {0x6A8D, 0xE5E5},{0x6A8E, 0xD0D5},{0x6A97, 0xDBFC},{0x6A9C, 0xFCE6},{0x6AA2, 0xCBFE},{0x6AA3, 0xEDEA},{0x6AB3, 0xDEB1},{0x6ABB, 0xF9E3}, - {0x6AC2, 0xD4A2},{0x6AC3, 0xCFF6},{0x6AD3, 0xD6D0},{0x6ADA, 0xD5EA},{0x6ADB, 0xF1EE},{0x6AF6, 0xFACB},{0x6AFB, 0xE5A1},{0x6B04, 0xD5B1}, - {0x6B0A, 0xCFED},{0x6B0C, 0xEDEB},{0x6B12, 0xD5B2},{0x6B16, 0xD5BC},{0x6B20, 0xFDE2},{0x6B21, 0xF3AD},{0x6B23, 0xFDDB},{0x6B32, 0xE9B0}, - {0x6B3A, 0xD1A7},{0x6B3D, 0xFDE3},{0x6B3E, 0xCEB3},{0x6B46, 0xFDE4},{0x6B47, 0xFACE},{0x6B4C, 0xCAB0},{0x6B4E, 0xF7A7},{0x6B50, 0xCFB1}, - {0x6B5F, 0xE6A2},{0x6B61, 0xFCB6},{0x6B62, 0xF2AD},{0x6B63, 0xEFE1},{0x6B64, 0xF3AE},{0x6B65, 0xDCC6},{0x6B66, 0xD9EB},{0x6B6A, 0xE8E0}, - {0x6B72, 0xE1A8},{0x6B77, 0xD5F6},{0x6B78, 0xCFFD},{0x6B7B, 0xDEDD},{0x6B7F, 0xD9D1},{0x6B83, 0xE4EA},{0x6B84, 0xF2CF},{0x6B86, 0xF7BF}, - {0x6B89, 0xE2E6},{0x6B8A, 0xE2A8},{0x6B96, 0xE3D6},{0x6B98, 0xEDD1},{0x6B9E, 0xE9F9},{0x6BAE, 0xD6B1},{0x6BAF, 0xDEB2},{0x6BB2, 0xE0E8}, - {0x6BB5, 0xD3AB},{0x6BB7, 0xEBDC},{0x6BBA, 0xDFAF},{0x6BBC, 0xCAC3},{0x6BBF, 0xEEFC},{0x6BC1, 0xFDC3},{0x6BC5, 0xEBF6},{0x6BC6, 0xCFB2}, - {0x6BCB, 0xD9EC},{0x6BCD, 0xD9BD},{0x6BCF, 0xD8DF},{0x6BD2, 0xD4B8},{0x6BD3, 0xEBBE},{0x6BD4, 0xDDEF},{0x6BD6, 0xDDF0},{0x6BD7, 0xDDF1}, - {0x6BD8, 0xDDF2},{0x6BDB, 0xD9BE},{0x6BEB, 0xFBC6},{0x6BEC, 0xCFB3},{0x6C08, 0xEEFD},{0x6C0F, 0xE4AB},{0x6C11, 0xDAC5},{0x6C13, 0xD8EC}, - {0x6C23, 0xD1A8},{0x6C34, 0xE2A9},{0x6C37, 0xDEBC},{0x6C38, 0xE7B5},{0x6C3E, 0xDBF0},{0x6C40, 0xEFE2},{0x6C41, 0xF1F0},{0x6C42, 0xCFB4}, - {0x6C4E, 0xDBF1},{0x6C50, 0xE0B1},{0x6C55, 0xDFA5},{0x6C57, 0xF9D2},{0x6C5A, 0xE7FD},{0x6C5D, 0xE6A3},{0x6C5E, 0xFBF1},{0x6C5F, 0xCBB0}, - {0x6C60, 0xF2AE},{0x6C68, 0xCDE7},{0x6C6A, 0xE8DC},{0x6C6D, 0xE7D7},{0x6C70, 0xF7C0},{0x6C72, 0xD0E3},{0x6C76, 0xDAA1},{0x6C7A, 0xCCBD}, - {0x6C7D, 0xD1A9},{0x6C7E, 0xDDCC},{0x6C81, 0xE3FE},{0x6C82, 0xD1AA},{0x6C83, 0xE8AA},{0x6C85, 0xEAB6},{0x6C86, 0xF9FA},{0x6C87, 0xE6CC}, - {0x6C88, 0xF6D8},{0x6C8C, 0xD4C7},{0x6C90, 0xD9CB},{0x6C92, 0xD9D2},{0x6C93, 0xD3CB},{0x6C94, 0xD8F7},{0x6C95, 0xDAA9},{0x6C96, 0xF5F8}, - {0x6C99, 0xDEDE},{0x6C9A, 0xF2AF},{0x6C9B, 0xF8A9},{0x6CAB, 0xD8C8},{0x6CAE, 0xEEC1},{0x6CB3, 0xF9C1},{0x6CB8, 0xDDF3},{0x6CB9, 0xEAFA}, - {0x6CBB, 0xF6BD},{0x6CBC, 0xE1BB},{0x6CBD, 0xCDBF},{0x6CBE, 0xF4D4},{0x6CBF, 0xE6CD},{0x6CC1, 0xFCCF},{0x6CC2, 0xFBA2},{0x6CC4, 0xE0DC}, - {0x6CC9, 0xF4BB},{0x6CCA, 0xDAD5},{0x6CCC, 0xF9B2},{0x6CD3, 0xFBF2},{0x6CD5, 0xDBF6},{0x6CD7, 0xDEDF},{0x6CDB, 0xDBF2},{0x6CE1, 0xF8DC}, - {0x6CE2, 0xF7EE},{0x6CE3, 0xEBE8},{0x6CE5, 0xD2FA},{0x6CE8, 0xF1BC},{0x6CEB, 0xFADA},{0x6CEE, 0xDAEA},{0x6CEF, 0xDAC6},{0x6CF0, 0xF7C1}, - {0x6CF3, 0xE7B6},{0x6D0B, 0xE5C7},{0x6D0C, 0xD6AC},{0x6D11, 0xDCC7},{0x6D17, 0xE1A9},{0x6D19, 0xE2AA},{0x6D1B, 0xD5A6},{0x6D1E, 0xD4D7}, - {0x6D25, 0xF2D0},{0x6D27, 0xEAFB},{0x6D29, 0xE0DD},{0x6D2A, 0xFBF3},{0x6D32, 0xF1BD},{0x6D35, 0xE2E7},{0x6D36, 0xFDD7},{0x6D38, 0xCEC8}, - {0x6D39, 0xEAB7},{0x6D3B, 0xFCC0},{0x6D3D, 0xFDE7},{0x6D3E, 0xF7EF},{0x6D41, 0xD7B5},{0x6D59, 0xEFBA},{0x6D5A, 0xF1DD},{0x6D5C, 0xDEB3}, - {0x6D63, 0xE8CB},{0x6D66, 0xF8DD},{0x6D69, 0xFBC7},{0x6D6A, 0xD5C8},{0x6D6C, 0xD7DF},{0x6D6E, 0xDDA9},{0x6D74, 0xE9B1},{0x6D77, 0xFAAD}, - {0x6D78, 0xF6D9},{0x6D79, 0xFAF4},{0x6D7F, 0xF8AA},{0x6D85, 0xE6EE},{0x6D87, 0xCCDC},{0x6D88, 0xE1BC},{0x6D89, 0xE0EF},{0x6D8C, 0xE9BF}, - {0x6D8D, 0xFCFD},{0x6D8E, 0xE6CE},{0x6D91, 0xE1D7},{0x6D93, 0xE6CF},{0x6D95, 0xF4F1},{0x6DAF, 0xE4F3},{0x6DB2, 0xE4FB},{0x6DB5, 0xF9E4}, - {0x6DC0, 0xEFE3},{0x6DC3, 0xCFEE},{0x6DC4, 0xF6BE},{0x6DC5, 0xE0B2},{0x6DC6, 0xFCFE},{0x6DC7, 0xD1AB},{0x6DCB, 0xD7FA},{0x6DCF, 0xFBC8}, - {0x6DD1, 0xE2D7},{0x6DD8, 0xD4A3},{0x6DD9, 0xF0F8},{0x6DDA, 0xD7A8},{0x6DDE, 0xE1E7},{0x6DE1, 0xD3BF},{0x6DE8, 0xEFE4},{0x6DEA, 0xD7C5}, - {0x6DEB, 0xEBE2},{0x6DEE, 0xFCE7},{0x6DF1, 0xE4A2},{0x6DF3, 0xE2E8},{0x6DF5, 0xE6D0},{0x6DF7, 0xFBE8},{0x6DF8, 0xF4E8},{0x6DF9, 0xE5F4}, - {0x6DFA, 0xF4BC},{0x6DFB, 0xF4D5},{0x6E17, 0xDFB6},{0x6E19, 0xFCB9},{0x6E1A, 0xEEC2},{0x6E1B, 0xCAF5},{0x6E1F, 0xEFE5},{0x6E20, 0xCBE2}, - {0x6E21, 0xD4A4},{0x6E23, 0xDEE0},{0x6E24, 0xDAFD},{0x6E25, 0xE4C6},{0x6E26, 0xE8BE},{0x6E2B, 0xE0DE},{0x6E2C, 0xF6B4},{0x6E2D, 0xEAD2}, - {0x6E2F, 0xF9FB},{0x6E32, 0xE0C2},{0x6E34, 0xCAE4},{0x6E36, 0xE7B7},{0x6E38, 0xEAFD},{0x6E3A, 0xD9DD},{0x6E3C, 0xDAB4},{0x6E3D, 0xEEAA}, - {0x6E3E, 0xFBE9},{0x6E43, 0xDBCB},{0x6E44, 0xDAB5},{0x6E4A, 0xF1BE},{0x6E4D, 0xD3AC},{0x6E56, 0xFBC9},{0x6E58, 0xDFCF},{0x6E5B, 0xD3C0}, - {0x6E5C, 0xE3D7},{0x6E5E, 0xEFE6},{0x6E5F, 0xFCD0},{0x6E67, 0xE9C0},{0x6E6B, 0xF5D3},{0x6E6E, 0xECDC},{0x6E6F, 0xF7B7},{0x6E72, 0xEAB8}, - {0x6E73, 0xD1F9},{0x6E7A, 0xDCC8},{0x6E90, 0xEAB9},{0x6E96, 0xF1DE},{0x6E9C, 0xD7B6},{0x6E9D, 0xCFB5},{0x6E9F, 0xD9A8},{0x6EA2, 0xECEE}, - {0x6EA5, 0xDDAA},{0x6EAA, 0xCDA2},{0x6EAB, 0xE8AE},{0x6EAF, 0xE1BD},{0x6EB1, 0xF2D1},{0x6EB6, 0xE9C1},{0x6EBA, 0xD2FC},{0x6EC2, 0xDBB5}, - {0x6EC4, 0xF3E7},{0x6EC5, 0xD8FE},{0x6EC9, 0xFCD1},{0x6ECB, 0xEDB2},{0x6ECC, 0xF4AF},{0x6ECE, 0xFBA3},{0x6ED1, 0xFCC1},{0x6ED3, 0xEEAB}, - {0x6ED4, 0xD4A5},{0x6EEF, 0xF4F2},{0x6EF4, 0xEED9},{0x6EF8, 0xFBCA},{0x6EFE, 0xCDE3},{0x6EFF, 0xD8BB},{0x6F01, 0xE5DB},{0x6F02, 0xF8F7}, - {0x6F06, 0xF6D4},{0x6F0F, 0xD7A9},{0x6F11, 0xCBC9},{0x6F14, 0xE6D1},{0x6F15, 0xF0CC},{0x6F20, 0xD8AE},{0x6F22, 0xF9D3},{0x6F23, 0xD5FE}, - {0x6F2B, 0xD8BC},{0x6F2C, 0xF2B0},{0x6F31, 0xE2AB},{0x6F32, 0xF3E8},{0x6F38, 0xEFC2},{0x6F3F, 0xEDEC},{0x6F41, 0xE7B8},{0x6F51, 0xDAFE}, - {0x6F54, 0xCCBE},{0x6F57, 0xF2FC},{0x6F58, 0xDAEB},{0x6F5A, 0xE2D8},{0x6F5B, 0xEDD6},{0x6F5E, 0xD6D1},{0x6F5F, 0xE0B3},{0x6F62, 0xFCD2}, - {0x6F64, 0xEBC8},{0x6F6D, 0xD3C1},{0x6F6E, 0xF0CD},{0x6F70, 0xCFF7},{0x6F7A, 0xEDD2},{0x6F7C, 0xD4D8},{0x6F7D, 0xDCC9},{0x6F7E, 0xD7F1}, - {0x6F81, 0xDFBB},{0x6F84, 0xF3A5},{0x6F88, 0xF4CD},{0x6F8D, 0xF1BF},{0x6F8E, 0xF8B1},{0x6F90, 0xE9FA},{0x6F94, 0xFBCB},{0x6F97, 0xCAD5}, - {0x6FA3, 0xF9D4},{0x6FA4, 0xF7CA},{0x6FA7, 0xD6C8},{0x6FAE, 0xFCE8},{0x6FAF, 0xF3BD},{0x6FB1, 0xEEFE},{0x6FB3, 0xE7FE},{0x6FB9, 0xD3C2}, - {0x6FBE, 0xD3B6},{0x6FC0, 0xCCAD},{0x6FC1, 0xF6FA},{0x6FC2, 0xD6B2},{0x6FC3, 0xD2D8},{0x6FCA, 0xE7D8},{0x6FD5, 0xE3A5},{0x6FDA, 0xE7B9}, - {0x6FDF, 0xF0AD},{0x6FE0, 0xFBCC},{0x6FE1, 0xEBA1},{0x6FE4, 0xD4A6},{0x6FE9, 0xFBCD},{0x6FEB, 0xD5BD},{0x6FEC, 0xF1DF},{0x6FEF, 0xF6FB}, - {0x6FF1, 0xDEB4},{0x6FFE, 0xD5EB},{0x7001, 0xE5C8},{0x7005, 0xFBA4},{0x7006, 0xD4B9},{0x7009, 0xDEE1},{0x700B, 0xE4A3},{0x700F, 0xD7B7}, - {0x7011, 0xF8EE},{0x7015, 0xDEB5},{0x7018, 0xD6D2},{0x701A, 0xF9D5},{0x701B, 0xE7BA},{0x701C, 0xEBD5},{0x701D, 0xD5F7},{0x701E, 0xEFE7}, - {0x701F, 0xE1BE},{0x7023, 0xFAAE},{0x7027, 0xD6E9},{0x7028, 0xD6EE},{0x702F, 0xE7BB},{0x7037, 0xECCB},{0x703E, 0xD5B3},{0x704C, 0xCEB4}, - {0x7050, 0xFBA5},{0x7051, 0xE1EE},{0x7058, 0xF7A8},{0x705D, 0xFBCE},{0x7063, 0xD8BD},{0x706B, 0xFBFD},{0x7070, 0xFCE9},{0x7078, 0xCFB6}, - {0x707C, 0xEDC7},{0x707D, 0xEEAC},{0x7085, 0xCCDD},{0x708A, 0xF6A7},{0x708E, 0xE6FA},{0x7092, 0xF5A4},{0x7098, 0xFDDC},{0x7099, 0xEDB3}, - {0x709A, 0xCEC9},{0x70A1, 0xEFE8},{0x70A4, 0xE1BF},{0x70AB, 0xFADB},{0x70AC, 0xCBE3},{0x70AD, 0xF7A9},{0x70AF, 0xFBA6},{0x70B3, 0xDCB9}, - {0x70B7, 0xF1C0},{0x70B8, 0xEDC8},{0x70B9, 0xEFC3},{0x70C8, 0xD6AD},{0x70CB, 0xFDCE},{0x70CF, 0xE8A1},{0x70D8, 0xFBF4},{0x70D9, 0xD5A7}, - {0x70DD, 0xF1F6},{0x70DF, 0xE6D3},{0x70F1, 0xCCDE},{0x70F9, 0xF8B2},{0x70FD, 0xDCEB},{0x7104, 0xFDB6},{0x7109, 0xE5EA},{0x710C, 0xF1E0}, - {0x7119, 0xDBCC},{0x711A, 0xDDCD},{0x711E, 0xD4C8},{0x7121, 0xD9ED},{0x7126, 0xF5A5},{0x7130, 0xE6FB},{0x7136, 0xE6D4},{0x7147, 0xFDC8}, - {0x7149, 0xD6A1},{0x714A, 0xFDBF},{0x714C, 0xFCD3},{0x714E, 0xEFA1},{0x7150, 0xE7BC},{0x7156, 0xD1EE},{0x7159, 0xE6D5},{0x715C, 0xE9F2}, - {0x715E, 0xDFB0},{0x7164, 0xD8E0},{0x7165, 0xFCBA},{0x7166, 0xFDAF},{0x7167, 0xF0CE},{0x7169, 0xDBE1},{0x716C, 0xE5C9},{0x716E, 0xEDB4}, - {0x717D, 0xE0C3},{0x7184, 0xE3D8},{0x7189, 0xE9FB},{0x718A, 0xEAA8},{0x718F, 0xFDB7},{0x7192, 0xFBA7},{0x7194, 0xE9C2},{0x7199, 0xFDF7}, - {0x719F, 0xE2D9},{0x71A2, 0xDCEC},{0x71AC, 0xE8A2},{0x71B1, 0xE6F0},{0x71B9, 0xFDF8},{0x71BA, 0xFDF9},{0x71BE, 0xF6BF},{0x71C1, 0xE7A7}, - {0x71C3, 0xE6D7},{0x71C8, 0xD4F3},{0x71C9, 0xD4C9},{0x71CE, 0xD6FA},{0x71D0, 0xD7F2},{0x71D2, 0xE1C0},{0x71D4, 0xDBE2},{0x71D5, 0xE6D8}, - {0x71DF, 0xE7BD},{0x71E5, 0xF0CF},{0x71E6, 0xF3BE},{0x71E7, 0xE2AC},{0x71ED, 0xF5B7},{0x71EE, 0xE0F0},{0x71FB, 0xFDB8},{0x71FC, 0xE3E8}, - {0x71FE, 0xD4A7},{0x71FF, 0xE8FC},{0x7200, 0xFAD2},{0x7206, 0xF8EF},{0x7210, 0xD6D3},{0x721B, 0xD5B4},{0x722A, 0xF0D0},{0x722C, 0xF7F0}, - {0x722D, 0xEEB3},{0x7230, 0xEABA},{0x7232, 0xEAD3},{0x7235, 0xEDC9},{0x7236, 0xDDAB},{0x723A, 0xE5AC},{0x723B, 0xFDA1},{0x723D, 0xDFD0}, - {0x723E, 0xECB3},{0x7240, 0xDFD1},{0x7246, 0xEDED},{0x7247, 0xF8B8},{0x7248, 0xF7FA},{0x724C, 0xF8AB},{0x7252, 0xF4E0},{0x7258, 0xD4BA}, - {0x7259, 0xE4B3},{0x725B, 0xE9DA},{0x725D, 0xDEB6},{0x725F, 0xD9BF},{0x7261, 0xD9C0},{0x7262, 0xD6EF},{0x7267, 0xD9CC},{0x7269, 0xDAAA}, - {0x7272, 0xDFE5},{0x7279, 0xF7E5},{0x727D, 0xCCB2},{0x7280, 0xDFF9},{0x7281, 0xD7E0},{0x72A2, 0xD4BB},{0x72A7, 0xFDFA},{0x72AC, 0xCCB3}, - {0x72AF, 0xDBF3},{0x72C0, 0xDFD2},{0x72C2, 0xCECA},{0x72C4, 0xEEDA},{0x72CE, 0xE4E4},{0x72D0, 0xFBCF},{0x72D7, 0xCFB7},{0x72D9, 0xEEC3}, - {0x72E1, 0xCEEA},{0x72E9, 0xE2AD},{0x72F8, 0xD7E1},{0x72F9, 0xFAF5},{0x72FC, 0xD5C9},{0x72FD, 0xF8AC},{0x730A, 0xE7D9},{0x7316, 0xF3E9}, - {0x731B, 0xD8ED},{0x731C, 0xE3C4},{0x731D, 0xF0F1},{0x7325, 0xE8E5},{0x7329, 0xE0FA},{0x732A, 0xEEC4},{0x732B, 0xD9DE},{0x7336, 0xEBA2}, - {0x7337, 0xEBA3},{0x733E, 0xFCC2},{0x733F, 0xEABB},{0x7344, 0xE8AB},{0x7345, 0xDEE2},{0x7350, 0xEDEF},{0x7352, 0xE8A3},{0x7357, 0xCFF1}, - {0x7368, 0xD4BC},{0x736A, 0xFCEA},{0x7370, 0xE7BE},{0x7372, 0xFCF2},{0x7375, 0xD6B4},{0x7378, 0xE2AE},{0x737A, 0xD3B7},{0x737B, 0xFACC}, - {0x7384, 0xFADC},{0x7386, 0xEDB5},{0x7387, 0xE1E3},{0x7389, 0xE8AC},{0x738B, 0xE8DD},{0x738E, 0xEFE9},{0x7394, 0xF4BD},{0x7396, 0xCFB8}, - {0x7397, 0xE9DB},{0x7398, 0xD1AC},{0x739F, 0xDAC7},{0x73A7, 0xEBC9},{0x73A9, 0xE8CC},{0x73AD, 0xDEB7},{0x73B2, 0xD6BC},{0x73B3, 0xD3E5}, - {0x73B9, 0xFADD},{0x73C0, 0xDAD6},{0x73C2, 0xCAB1},{0x73C9, 0xDAC8},{0x73CA, 0xDFA6},{0x73CC, 0xF9B3},{0x73CD, 0xF2D2},{0x73CF, 0xCAC4}, - {0x73D6, 0xCECB},{0x73D9, 0xCDF5},{0x73DD, 0xFDB0},{0x73DE, 0xD5A8},{0x73E0, 0xF1C1},{0x73E3, 0xE2E9},{0x73E4, 0xDCCA},{0x73E5, 0xECB4}, - {0x73E6, 0xFAC0},{0x73E9, 0xFBA8},{0x73EA, 0xD0A8},{0x73ED, 0xDAEC},{0x73F7, 0xD9EE},{0x73F9, 0xE0FB},{0x73FD, 0xEFEA},{0x73FE, 0xFADE}, - {0x7401, 0xE0C4},{0x7403, 0xCFB9},{0x7405, 0xD5CA},{0x7406, 0xD7E2},{0x7407, 0xE2AF},{0x7409, 0xD7B8},{0x7413, 0xE8CD},{0x741B, 0xF6DA}, - {0x7420, 0xEFA2},{0x7421, 0xE2DA},{0x7422, 0xF6FC},{0x7425, 0xFBD0},{0x7426, 0xD1AD},{0x7428, 0xCDE4},{0x742A, 0xD1AE},{0x742B, 0xDCED}, - {0x742C, 0xE8CE},{0x742E, 0xF0F9},{0x742F, 0xCEB5},{0x7430, 0xE6FC},{0x7433, 0xD7FB},{0x7434, 0xD0D6},{0x7435, 0xDDF5},{0x7436, 0xF7F1}, - {0x7438, 0xF6FD},{0x743A, 0xDBF7},{0x743F, 0xFBEA},{0x7440, 0xE9DC},{0x7441, 0xD9C1},{0x7443, 0xF5F2},{0x7444, 0xE0C5},{0x744B, 0xEAD4}, - {0x7455, 0xF9C2},{0x7457, 0xEABC},{0x7459, 0xD2C5},{0x745A, 0xFBD1},{0x745B, 0xE7C0},{0x745C, 0xEBA5},{0x745E, 0xDFFA},{0x745F, 0xE3A2}, - {0x7460, 0xD7B9},{0x7462, 0xE9C3},{0x7464, 0xE8FD},{0x7465, 0xE8AF},{0x7468, 0xF2D3},{0x7469, 0xFBA9},{0x746A, 0xD8A5},{0x746F, 0xD5CB}, - {0x747E, 0xD0C8},{0x7482, 0xD1AF},{0x7483, 0xD7E3},{0x7487, 0xE0C6},{0x7489, 0xD6A2},{0x748B, 0xEDF0},{0x7498, 0xD7F3},{0x749C, 0xFCD4}, - {0x749E, 0xDAD7},{0x749F, 0xCCDF},{0x74A1, 0xF2D4},{0x74A3, 0xD1B0},{0x74A5, 0xCCE0},{0x74A7, 0xDBFD},{0x74A8, 0xF3BF},{0x74AA, 0xF0D1}, - {0x74B0, 0xFCBB},{0x74B2, 0xE2B0},{0x74B5, 0xE6A5},{0x74B9, 0xE2DB},{0x74BD, 0xDFDE},{0x74BF, 0xE0C7},{0x74C6, 0xF2EF},{0x74CA, 0xCCE1}, - {0x74CF, 0xD6EA},{0x74D4, 0xE7C2},{0x74D8, 0xCEB6},{0x74DA, 0xF3C0},{0x74DC, 0xCDFE},{0x74E0, 0xFBD2},{0x74E2, 0xF8F8},{0x74E3, 0xF7FB}, - {0x74E6, 0xE8BF},{0x74EE, 0xE8B7},{0x74F7, 0xEDB6},{0x7501, 0xDCBA},{0x7504, 0xCCB4},{0x7511, 0xF1F7},{0x7515, 0xE8B8},{0x7518, 0xCAF6}, - {0x751A, 0xE4A4},{0x751B, 0xF4D6},{0x751F, 0xDFE6},{0x7523, 0xDFA7},{0x7525, 0xDFE7},{0x7526, 0xE1C1},{0x7528, 0xE9C4},{0x752B, 0xDCCB}, - {0x752C, 0xE9C5},{0x7530, 0xEFA3},{0x7531, 0xEBA6},{0x7532, 0xCBA3},{0x7533, 0xE3E9},{0x7537, 0xD1FB},{0x7538, 0xEFA4},{0x753A, 0xEFEB}, - {0x7547, 0xD0B4},{0x754C, 0xCDA3},{0x754F, 0xE8E6},{0x7551, 0xEFA5},{0x7553, 0xD3CC},{0x7554, 0xDAED},{0x7559, 0xD7BA},{0x755B, 0xF2D5}, - {0x755C, 0xF5E5},{0x755D, 0xD9EF},{0x7562, 0xF9B4},{0x7565, 0xD5D4},{0x7566, 0xFDCF},{0x756A, 0xDBE3},{0x756F, 0xF1E1},{0x7570, 0xECB6}, - {0x7575, 0xFBFE},{0x7576, 0xD3D7},{0x7578, 0xD1B1},{0x757A, 0xCBB1},{0x757F, 0xD1B2},{0x7586, 0xCBB2},{0x7587, 0xF1C2},{0x758A, 0xF4E1}, - {0x758B, 0xF9B5},{0x758E, 0xE1C3},{0x758F, 0xE1C2},{0x7591, 0xEBF7},{0x759D, 0xDFA8},{0x75A5, 0xCBCA},{0x75AB, 0xE6B9},{0x75B1, 0xF8DE}, - {0x75B2, 0xF9AA},{0x75B3, 0xCAF7},{0x75B5, 0xEDB7},{0x75B8, 0xD3B8},{0x75B9, 0xF2D6},{0x75BC, 0xD4D9},{0x75BD, 0xEEC5},{0x75BE, 0xF2F0}, - {0x75C2, 0xCAB2},{0x75C5, 0xDCBB},{0x75C7, 0xF1F8},{0x75CD, 0xECB7},{0x75D2, 0xE5CA},{0x75D4, 0xF6C0},{0x75D5, 0xFDDD},{0x75D8, 0xD4E3}, - {0x75D9, 0xCCE2},{0x75DB, 0xF7D4},{0x75E2, 0xD7E5},{0x75F0, 0xD3C3},{0x75F2, 0xD8A6},{0x75F4, 0xF6C1},{0x75FA, 0xDDF6},{0x75FC, 0xCDC0}, - {0x7600, 0xE5DC},{0x760D, 0xE5CB},{0x7619, 0xE1C4},{0x761F, 0xE8B0},{0x7620, 0xF4B0},{0x7621, 0xF3EA},{0x7622, 0xDAEE},{0x7624, 0xD7BB}, - {0x7626, 0xE2B1},{0x763B, 0xD7AA},{0x7642, 0xD6FB},{0x764C, 0xE4DF},{0x764E, 0xCAD6},{0x7652, 0xEBA8},{0x7656, 0xDBFE},{0x7661, 0xF6C2}, - {0x7664, 0xEFBB},{0x7669, 0xD4FD},{0x766C, 0xE0C8},{0x7670, 0xE8B9},{0x7672, 0xEFA6},{0x7678, 0xCDA4},{0x767B, 0xD4F4},{0x767C, 0xDBA1}, - {0x767D, 0xDBDC},{0x767E, 0xDBDD},{0x7684, 0xEEDC},{0x7686, 0xCBCB},{0x7687, 0xFCD5},{0x768E, 0xCEEB},{0x7690, 0xCDC1},{0x7693, 0xFBD3}, - {0x76AE, 0xF9AB},{0x76BA, 0xF5D4},{0x76BF, 0xD9A9},{0x76C2, 0xE9DD},{0x76C3, 0xDBCD},{0x76C6, 0xDDCE},{0x76C8, 0xE7C3},{0x76CA, 0xECCC}, - {0x76D2, 0xF9EC},{0x76D6, 0xCBCC},{0x76DB, 0xE0FC},{0x76DC, 0xD4A8},{0x76DE, 0xEDD3},{0x76DF, 0xD8EF},{0x76E1, 0xF2D7},{0x76E3, 0xCAF8}, - {0x76E4, 0xDAEF},{0x76E7, 0xD6D4},{0x76EE, 0xD9CD},{0x76F2, 0xD8EE},{0x76F4, 0xF2C1},{0x76F8, 0xDFD3},{0x76FC, 0xDAF0},{0x76FE, 0xE2EA}, - {0x7701, 0xE0FD},{0x7704, 0xD8F8},{0x7708, 0xF7AF},{0x7709, 0xDAB6},{0x770B, 0xCAD7},{0x771E, 0xF2D8},{0x7720, 0xD8F9},{0x7729, 0xFADF}, - {0x7737, 0xCFEF},{0x7738, 0xD9C2},{0x773A, 0xF0D2},{0x773C, 0xE4D1},{0x7740, 0xF3B7},{0x774D, 0xFAE0},{0x775B, 0xEFEC},{0x7761, 0xE2B2}, - {0x7763, 0xD4BD},{0x7766, 0xD9CE},{0x776B, 0xF4E2},{0x7779, 0xD4A9},{0x777E, 0xCDC2},{0x777F, 0xE7DA},{0x778B, 0xF2D9},{0x7791, 0xD9AA}, - {0x779E, 0xD8BE},{0x77A5, 0xDCAD},{0x77AC, 0xE2EB},{0x77AD, 0xD6FC},{0x77B0, 0xCAF9},{0x77B3, 0xD4DA},{0x77BB, 0xF4D7},{0x77BC, 0xCCA1}, - {0x77BF, 0xCFBA},{0x77D7, 0xF5B8},{0x77DB, 0xD9C3},{0x77DC, 0xD0E8},{0x77E2, 0xE3C5},{0x77E3, 0xEBF8},{0x77E5, 0xF2B1},{0x77E9, 0xCFBB}, - {0x77ED, 0xD3AD},{0x77EE, 0xE8E1},{0x77EF, 0xCEEC},{0x77F3, 0xE0B4},{0x7802, 0xDEE3},{0x7812, 0xDDF7},{0x7825, 0xF2B2},{0x7826, 0xF3F6}, - {0x7827, 0xF6DB},{0x782C, 0xD7FE},{0x7832, 0xF8DF},{0x7834, 0xF7F2},{0x7845, 0xD0A9},{0x784F, 0xE6DA},{0x785D, 0xF5A6},{0x786B, 0xD7BC}, - {0x786C, 0xCCE3},{0x786F, 0xE6DB},{0x787C, 0xDDDD},{0x7881, 0xD1B3},{0x7887, 0xEFED},{0x788C, 0xD6DE},{0x788D, 0xE4F4},{0x788E, 0xE1EF}, - {0x7891, 0xDDF8},{0x7897, 0xE8CF},{0x78A3, 0xCAE5},{0x78A7, 0xDCA1},{0x78A9, 0xE0B5},{0x78BA, 0xFCAC},{0x78BB, 0xFCAD},{0x78BC, 0xD8A7}, - {0x78C1, 0xEDB8},{0x78C5, 0xDBB6},{0x78CA, 0xD6F0},{0x78CB, 0xF3AF},{0x78CE, 0xCDA5},{0x78D0, 0xDAF1},{0x78E8, 0xD8A8},{0x78EC, 0xCCE4}, - {0x78EF, 0xD1B4},{0x78F5, 0xCAD8},{0x78FB, 0xDAF2},{0x7901, 0xF5A7},{0x790E, 0xF5A8},{0x7916, 0xE6A6},{0x792A, 0xD5EC},{0x792B, 0xD5F8}, - {0x792C, 0xDAF3},{0x793A, 0xE3C6},{0x793E, 0xDEE4},{0x7940, 0xDEE5},{0x7941, 0xD1B5},{0x7947, 0xD1B6},{0x7948, 0xD1B7},{0x7949, 0xF2B3}, - {0x7950, 0xE9DE},{0x7956, 0xF0D3},{0x7957, 0xF2B4},{0x795A, 0xF0D4},{0x795B, 0xCBE4},{0x795C, 0xFBD4},{0x795D, 0xF5E6},{0x795E, 0xE3EA}, - {0x7960, 0xDEE6},{0x7965, 0xDFD4},{0x7968, 0xF8F9},{0x796D, 0xF0AE},{0x797A, 0xD1B8},{0x797F, 0xD6DF},{0x7981, 0xD0D7},{0x798D, 0xFCA1}, - {0x798E, 0xEFEE},{0x798F, 0xDCD8},{0x7991, 0xE9DF},{0x79A6, 0xE5DD},{0x79A7, 0xFDFB},{0x79AA, 0xE0C9},{0x79AE, 0xD6C9},{0x79B1, 0xD4AA}, - {0x79B3, 0xE5CC},{0x79B9, 0xE9E0},{0x79BD, 0xD0D8},{0x79BE, 0xFCA2},{0x79BF, 0xD4BE},{0x79C0, 0xE2B3},{0x79C1, 0xDEE7},{0x79C9, 0xDCBC}, - {0x79CA, 0xD2B6},{0x79CB, 0xF5D5},{0x79D1, 0xCEA1},{0x79D2, 0xF5A9},{0x79D5, 0xDDF9},{0x79D8, 0xDDFA},{0x79DF, 0xF0D5},{0x79E4, 0xF6DF}, - {0x79E6, 0xF2DA},{0x79E7, 0xE4EB},{0x79E9, 0xF2F1},{0x79FB, 0xECB9},{0x7A00, 0xFDFC},{0x7A05, 0xE1AA},{0x7A08, 0xCAD9},{0x7A0B, 0xEFEF}, - {0x7A0D, 0xF5AA},{0x7A14, 0xECF9},{0x7A17, 0xF8AD},{0x7A19, 0xF2C2},{0x7A1A, 0xF6C3},{0x7A1C, 0xD7D2},{0x7A1F, 0xF9A2},{0x7A20, 0xF0D6}, - {0x7A2E, 0xF0FA},{0x7A31, 0xF6E0},{0x7A36, 0xE9F3},{0x7A37, 0xF2C3},{0x7A3B, 0xD4AB},{0x7A3C, 0xCAB3},{0x7A3D, 0xCDA6},{0x7A3F, 0xCDC3}, - {0x7A40, 0xCDDA},{0x7A46, 0xD9CF},{0x7A49, 0xF6C4},{0x7A4D, 0xEEDD},{0x7A4E, 0xE7C4},{0x7A57, 0xE2B4},{0x7A61, 0xDFE2},{0x7A62, 0xE7DB}, - {0x7A69, 0xE8B1},{0x7A6B, 0xFCAE},{0x7A70, 0xE5CD},{0x7A74, 0xFAEB},{0x7A76, 0xCFBC},{0x7A79, 0xCFE2},{0x7A7A, 0xCDF6},{0x7A7D, 0xEFF0}, - {0x7A7F, 0xF4BE},{0x7A81, 0xD4CD},{0x7A84, 0xF3B8},{0x7A88, 0xE9A1},{0x7A92, 0xF2F2},{0x7A93, 0xF3EB},{0x7A95, 0xF0D7},{0x7A98, 0xCFD7}, - {0x7A9F, 0xCFDF},{0x7AA9, 0xE8C0},{0x7AAA, 0xE8C1},{0x7AAE, 0xCFE3},{0x7AAF, 0xE9A2},{0x7ABA, 0xD0AA},{0x7AC4, 0xF3C1},{0x7AC5, 0xD0AB}, - {0x7AC7, 0xD4E4},{0x7ACA, 0xEFBC},{0x7ACB, 0xD8A1},{0x7AD7, 0xD9DF},{0x7AD9, 0xF3D7},{0x7ADD, 0xDCBD},{0x7ADF, 0xCCE5},{0x7AE0, 0xEDF1}, - {0x7AE3, 0xF1E2},{0x7AE5, 0xD4DB},{0x7AEA, 0xE2B5},{0x7AED, 0xCAE6},{0x7AEF, 0xD3AE},{0x7AF6, 0xCCE6},{0x7AF9, 0xF1D3},{0x7AFA, 0xF5E7}, - {0x7AFF, 0xCADA},{0x7B0F, 0xFBEE},{0x7B11, 0xE1C5},{0x7B19, 0xDFE9},{0x7B1B, 0xEEDE},{0x7B1E, 0xF7C2},{0x7B20, 0xD8A2},{0x7B26, 0xDDAC}, - {0x7B2C, 0xF0AF},{0x7B2D, 0xD6BD},{0x7B39, 0xE1AB},{0x7B46, 0xF9B6},{0x7B49, 0xD4F5},{0x7B4B, 0xD0C9},{0x7B4C, 0xEFA7},{0x7B4D, 0xE2EC}, - {0x7B4F, 0xDBEA},{0x7B50, 0xCECC},{0x7B51, 0xF5E8},{0x7B52, 0xF7D5},{0x7B54, 0xD3CD},{0x7B56, 0xF3FE},{0x7B60, 0xD0B5},{0x7B6C, 0xE0FE}, - {0x7B6E, 0xDFFB},{0x7B75, 0xE6DD},{0x7B7D, 0xE8A4},{0x7B87, 0xCBCD},{0x7B8B, 0xEFA8},{0x7B8F, 0xEEB4},{0x7B94, 0xDAD8},{0x7B95, 0xD1B9}, - {0x7B97, 0xDFA9},{0x7B9A, 0xF3B0},{0x7B9D, 0xCCC4},{0x7BA1, 0xCEB7},{0x7BAD, 0xEFA9},{0x7BB1, 0xDFD5},{0x7BB4, 0xEDD7},{0x7BB8, 0xEEC6}, - {0x7BC0, 0xEFBD},{0x7BC1, 0xFCD6},{0x7BC4, 0xDBF4},{0x7BC6, 0xEFAA},{0x7BC7, 0xF8B9},{0x7BC9, 0xF5E9},{0x7BD2, 0xE3D9},{0x7BE0, 0xE1C6}, - {0x7BE4, 0xD4BF},{0x7BE9, 0xDEE8},{0x7C07, 0xF0EA},{0x7C12, 0xF3C2},{0x7C1E, 0xD3AF},{0x7C21, 0xCADB},{0x7C27, 0xFCD7},{0x7C2A, 0xEDD8}, - {0x7C2B, 0xE1C7},{0x7C3D, 0xF4D8},{0x7C3E, 0xD6B3},{0x7C3F, 0xDDAD},{0x7C43, 0xD5BE},{0x7C4C, 0xF1C3},{0x7C4D, 0xEEDF},{0x7C60, 0xD6EB}, - {0x7C64, 0xF4D9},{0x7C6C, 0xD7E6},{0x7C73, 0xDAB7},{0x7C83, 0xDDFB},{0x7C89, 0xDDCF},{0x7C92, 0xD8A3},{0x7C95, 0xDAD9},{0x7C97, 0xF0D8}, - {0x7C98, 0xEFC4},{0x7C9F, 0xE1D8},{0x7CA5, 0xF1D4},{0x7CA7, 0xEDF2},{0x7CAE, 0xD5DB},{0x7CB1, 0xD5DC},{0x7CB2, 0xF3C4},{0x7CB3, 0xCBD7}, - {0x7CB9, 0xE2B6},{0x7CBE, 0xEFF1},{0x7CCA, 0xFBD5},{0x7CD6, 0xD3D8},{0x7CDE, 0xDDD0},{0x7CDF, 0xF0D9},{0x7CE0, 0xCBB3},{0x7CE7, 0xD5DD}, - {0x7CFB, 0xCDA7},{0x7CFE, 0xD0AC},{0x7D00, 0xD1BA},{0x7D02, 0xF1C4},{0x7D04, 0xE5B3},{0x7D05, 0xFBF5},{0x7D06, 0xE9E1},{0x7D07, 0xFDE0}, - {0x7D08, 0xFCBC},{0x7D0A, 0xDAA2},{0x7D0B, 0xDAA3},{0x7D0D, 0xD2A1},{0x7D10, 0xD2EF},{0x7D14, 0xE2ED},{0x7D17, 0xDEE9},{0x7D18, 0xCEDC}, - {0x7D19, 0xF2B5},{0x7D1A, 0xD0E4},{0x7D1B, 0xDDD1},{0x7D20, 0xE1C8},{0x7D21, 0xDBB7},{0x7D22, 0xDFE3},{0x7D2B, 0xEDB9},{0x7D2C, 0xF1C5}, - {0x7D2E, 0xF3CF},{0x7D2F, 0xD7AB},{0x7D30, 0xE1AC},{0x7D33, 0xE3EB},{0x7D35, 0xEEC7},{0x7D39, 0xE1C9},{0x7D3A, 0xCAFA},{0x7D42, 0xF0FB}, - {0x7D43, 0xFAE1},{0x7D44, 0xF0DA},{0x7D45, 0xCCE7},{0x7D46, 0xDAF4},{0x7D50, 0xCCBF},{0x7D5E, 0xCEED},{0x7D61, 0xD5A9},{0x7D62, 0xFAE2}, - {0x7D66, 0xD0E5},{0x7D68, 0xEBD6},{0x7D6A, 0xECDF},{0x7D6E, 0xDFFC},{0x7D71, 0xF7D6},{0x7D72, 0xDEEA},{0x7D73, 0xCBB4},{0x7D76, 0xEFBE}, - {0x7D79, 0xCCB5},{0x7D7F, 0xCFBD},{0x7D8E, 0xEFF2},{0x7D8F, 0xE2B7},{0x7D93, 0xCCE8},{0x7D9C, 0xF0FC},{0x7DA0, 0xD6E0},{0x7DA2, 0xF1C6}, - {0x7DAC, 0xE2B8},{0x7DAD, 0xEBAB},{0x7DB1, 0xCBB5},{0x7DB2, 0xD8D1},{0x7DB4, 0xF4CE},{0x7DB5, 0xF3F7},{0x7DB8, 0xD7C6},{0x7DBA, 0xD1BB}, - {0x7DBB, 0xF7AA},{0x7DBD, 0xEDCA},{0x7DBE, 0xD7D3},{0x7DBF, 0xD8FA},{0x7DC7, 0xF6C5},{0x7DCA, 0xD1CC},{0x7DCB, 0xDDFC},{0x7DD6, 0xDFFD}, - {0x7DD8, 0xF9E5},{0x7DDA, 0xE0CA},{0x7DDD, 0xF2FD},{0x7DDE, 0xD3B0},{0x7DE0, 0xF4F3},{0x7DE1, 0xDAC9},{0x7DE3, 0xE6DE},{0x7DE8, 0xF8BA}, - {0x7DE9, 0xE8D0},{0x7DEC, 0xD8FB},{0x7DEF, 0xEAD5},{0x7DF4, 0xD6A3},{0x7DFB, 0xF6C6},{0x7E09, 0xF2DB},{0x7E0A, 0xE4FC},{0x7E15, 0xE8B2}, - {0x7E1B, 0xDADA},{0x7E1D, 0xF2DC},{0x7E1E, 0xFBD6},{0x7E1F, 0xE9B2},{0x7E21, 0xEEAD},{0x7E23, 0xFAE3},{0x7E2B, 0xDCEE},{0x7E2E, 0xF5EA}, - {0x7E2F, 0xE6E0},{0x7E31, 0xF0FD},{0x7E37, 0xD7AC},{0x7E3D, 0xF5C5},{0x7E3E, 0xEEE0},{0x7E41, 0xDBE5},{0x7E43, 0xDDDE},{0x7E46, 0xD9F0}, - {0x7E47, 0xE9A3},{0x7E52, 0xF1F9},{0x7E54, 0xF2C4},{0x7E55, 0xE0CB},{0x7E5E, 0xE9A4},{0x7E61, 0xE2B9},{0x7E69, 0xE3B1},{0x7E6A, 0xFCEB}, - {0x7E6B, 0xCDA8},{0x7E6D, 0xCCB6},{0x7E70, 0xF0DB},{0x7E79, 0xE6BA},{0x7E7C, 0xCDA9},{0x7E82, 0xF3C3},{0x7E8C, 0xE1D9},{0x7E8F, 0xEFAB}, - {0x7E93, 0xE7C5},{0x7E96, 0xE0E9},{0x7E98, 0xF3C5},{0x7E9B, 0xD4C0},{0x7E9C, 0xD5BF},{0x7F36, 0xDDAE},{0x7F38, 0xF9FC},{0x7F3A, 0xCCC0}, - {0x7F4C, 0xE5A2},{0x7F50, 0xCEB8},{0x7F54, 0xD8D2},{0x7F55, 0xF9D6},{0x7F6A, 0xF1AA},{0x7F6B, 0xCED1},{0x7F6E, 0xF6C7},{0x7F70, 0xDBEB}, - {0x7F72, 0xDFFE},{0x7F75, 0xD8E1},{0x7F77, 0xF7F3},{0x7F79, 0xD7E7},{0x7F85, 0xD4FE},{0x7F88, 0xD1BC},{0x7F8A, 0xE5CF},{0x7F8C, 0xCBB6}, - {0x7F8E, 0xDAB8},{0x7F94, 0xCDC4},{0x7F9A, 0xD6BE},{0x7F9E, 0xE2BA},{0x7FA4, 0xCFD8},{0x7FA8, 0xE0CC},{0x7FA9, 0xEBF9},{0x7FB2, 0xFDFD}, - {0x7FB8, 0xD7E8},{0x7FB9, 0xCBD8},{0x7FBD, 0xE9E2},{0x7FC1, 0xE8BA},{0x7FC5, 0xE3C7},{0x7FCA, 0xECCD},{0x7FCC, 0xECCE},{0x7FCE, 0xD6BF}, - {0x7FD2, 0xE3A7},{0x7FD4, 0xDFD6},{0x7FD5, 0xFDE8},{0x7FDF, 0xEEE1},{0x7FE0, 0xF6A8},{0x7FE1, 0xDDFD},{0x7FE9, 0xF8BB},{0x7FEB, 0xE8D1}, - {0x7FF0, 0xF9D7},{0x7FF9, 0xCEEE},{0x7FFC, 0xECCF},{0x8000, 0xE9A5},{0x8001, 0xD6D5},{0x8003, 0xCDC5},{0x8005, 0xEDBA},{0x8006, 0xD1BD}, - {0x8009, 0xCFBE},{0x800C, 0xECBB},{0x8010, 0xD2B1},{0x8015, 0xCCE9},{0x8017, 0xD9C4},{0x8018, 0xE9FC},{0x802D, 0xD1BE},{0x8033, 0xECBC}, - {0x8036, 0xE5AD},{0x803D, 0xF7B0},{0x803F, 0xCCEA},{0x8043, 0xD3C4},{0x8046, 0xD6C0},{0x804A, 0xD6FD},{0x8056, 0xE1A1},{0x8058, 0xDEBD}, - {0x805A, 0xF6A9},{0x805E, 0xDAA4},{0x806F, 0xD6A4},{0x8070, 0xF5C6},{0x8072, 0xE1A2},{0x8073, 0xE9C6},{0x8077, 0xF2C5},{0x807D, 0xF4E9}, - {0x807E, 0xD6EC},{0x807F, 0xEBD3},{0x8084, 0xECBD},{0x8085, 0xE2DC},{0x8086, 0xDEEB},{0x8087, 0xF0DC},{0x8089, 0xEBBF},{0x808B, 0xD7CE}, - {0x808C, 0xD1BF},{0x8096, 0xF5AB},{0x809B, 0xF9FD},{0x809D, 0xCADC},{0x80A1, 0xCDC6},{0x80A2, 0xF2B6},{0x80A5, 0xDDFE},{0x80A9, 0xCCB7}, - {0x80AA, 0xDBB8},{0x80AF, 0xD0E9},{0x80B1, 0xCEDD},{0x80B2, 0xEBC0},{0x80B4, 0xFDA2},{0x80BA, 0xF8CB},{0x80C3, 0xEAD6},{0x80C4, 0xF1B0}, - {0x80CC, 0xDBCE},{0x80CE, 0xF7C3},{0x80DA, 0xDBCF},{0x80DB, 0xCBA4},{0x80DE, 0xF8E0},{0x80E1, 0xFBD7},{0x80E4, 0xEBCA},{0x80E5, 0xE0A1}, - {0x80F1, 0xCECD},{0x80F4, 0xD4DC},{0x80F8, 0xFDD8},{0x80FD, 0xD2F6},{0x8102, 0xF2B7},{0x8105, 0xFAF6},{0x8106, 0xF6AA},{0x8107, 0xFAF7}, - {0x8108, 0xD8E6},{0x810A, 0xF4B1},{0x8118, 0xE8D2},{0x811A, 0xCAC5},{0x811B, 0xCCEB},{0x8123, 0xE2EE},{0x8129, 0xE2BB},{0x812B, 0xF7AD}, - {0x812F, 0xF8E1},{0x8139, 0xF3EC},{0x813E, 0xDEA1},{0x814B, 0xE4FD},{0x814E, 0xE3EC},{0x8150, 0xDDAF},{0x8151, 0xDDB0},{0x8154, 0xCBB7}, - {0x8155, 0xE8D3},{0x8165, 0xE1A3},{0x8166, 0xD2E0},{0x816B, 0xF0FE},{0x8170, 0xE9A6},{0x8171, 0xCBF2},{0x8178, 0xEDF3},{0x8179, 0xDCD9}, - {0x817A, 0xE0CD},{0x817F, 0xF7DA},{0x8180, 0xDBB9},{0x8188, 0xCCAE},{0x818A, 0xDADB},{0x818F, 0xCDC7},{0x819A, 0xDDB1},{0x819C, 0xD8AF}, - {0x819D, 0xE3A3},{0x81A0, 0xCEEF},{0x81A3, 0xF2F3},{0x81A8, 0xF8B3},{0x81B3, 0xE0CE},{0x81B5, 0xF5FD},{0x81BA, 0xEBEC},{0x81BD, 0xD3C5}, - {0x81BE, 0xFCEC},{0x81BF, 0xD2DB},{0x81C0, 0xD4EB},{0x81C2, 0xDEA2},{0x81C6, 0xE5E6},{0x81CD, 0xF0B0},{0x81D8, 0xD5C4},{0x81DF, 0xEDF4}, - {0x81E3, 0xE3ED},{0x81E5, 0xE8C2},{0x81E7, 0xEDF5},{0x81E8, 0xD7FC},{0x81EA, 0xEDBB},{0x81ED, 0xF6AB},{0x81F3, 0xF2B8},{0x81F4, 0xF6C8}, - {0x81FA, 0xD3E6},{0x81FB, 0xF2DD},{0x81FC, 0xCFBF},{0x81FE, 0xEBAC},{0x8205, 0xCFC0},{0x8207, 0xE6A8},{0x8208, 0xFDE9},{0x820A, 0xCFC1}, - {0x820C, 0xE0DF},{0x820D, 0xDEEC},{0x8212, 0xE0A2},{0x821B, 0xF4BF},{0x821C, 0xE2EF},{0x821E, 0xD9F1},{0x821F, 0xF1C7},{0x8221, 0xCBB8}, - {0x822A, 0xF9FE},{0x822B, 0xDBBA},{0x822C, 0xDAF5},{0x8235, 0xF6EC},{0x8236, 0xDADC},{0x8237, 0xFAE4},{0x8239, 0xE0CF},{0x8240, 0xDDB2}, - {0x8245, 0xE6A9},{0x8247, 0xEFF3},{0x8259, 0xF3ED},{0x8264, 0xEBFA},{0x8266, 0xF9E6},{0x826E, 0xCADD},{0x826F, 0xD5DE},{0x8271, 0xCADE}, - {0x8272, 0xDFE4},{0x8276, 0xE6FD},{0x8278, 0xF5AC},{0x827E, 0xE4F5},{0x828B, 0xE9E3},{0x828D, 0xEDCB},{0x828E, 0xCFE4},{0x8292, 0xD8D3}, - {0x8299, 0xDDB3},{0x829A, 0xD4EC},{0x829D, 0xF2B9},{0x829F, 0xDFB7},{0x82A5, 0xCBCE},{0x82A6, 0xFBD8},{0x82A9, 0xD0D9},{0x82AC, 0xDDD2}, - {0x82AD, 0xF7F4},{0x82AE, 0xE7DC},{0x82AF, 0xE4A5},{0x82B1, 0xFCA3},{0x82B3, 0xDBBB},{0x82B7, 0xF2BA},{0x82B8, 0xE9FD},{0x82B9, 0xD0CA}, - {0x82BB, 0xF5D6},{0x82BC, 0xD9C5},{0x82BD, 0xE4B4},{0x82BF, 0xEDA7},{0x82D1, 0xEABD},{0x82D2, 0xE6FE},{0x82D4, 0xF7C4},{0x82D5, 0xF5AD}, - {0x82D7, 0xD9E0},{0x82DB, 0xCAB4},{0x82DE, 0xF8E2},{0x82DF, 0xCFC2},{0x82E1, 0xECBE},{0x82E5, 0xE5B4},{0x82E6, 0xCDC8},{0x82E7, 0xEEC8}, - {0x82F1, 0xE7C8},{0x82FD, 0xCDC9},{0x82FE, 0xF9B7},{0x8301, 0xF1E8},{0x8302, 0xD9F2},{0x8303, 0xDBF5},{0x8304, 0xCAB5},{0x8305, 0xD9C6}, - {0x8309, 0xD8C9},{0x8317, 0xD9AB},{0x8328, 0xEDBC},{0x832B, 0xD8D4},{0x832F, 0xDCDA},{0x8331, 0xE2BC},{0x8334, 0xFCED},{0x8335, 0xECE0}, - {0x8336, 0xD2FE},{0x8338, 0xE9C7},{0x8339, 0xE6AA},{0x8340, 0xE2F0},{0x8347, 0xFABB},{0x8349, 0xF5AE},{0x834A, 0xFBAA},{0x834F, 0xECFB}, - {0x8351, 0xECBF},{0x8352, 0xFCD8},{0x8373, 0xD4E5},{0x8377, 0xF9C3},{0x837B, 0xEEE2},{0x8389, 0xD7E9},{0x838A, 0xEDF6},{0x838E, 0xDEED}, - {0x8396, 0xCCEC},{0x8398, 0xE3EE},{0x839E, 0xE8D4},{0x83A2, 0xFAF8},{0x83A9, 0xDDB4},{0x83AA, 0xE4B5},{0x83AB, 0xD8B0},{0x83BD, 0xD8D5}, - {0x83C1, 0xF4EA},{0x83C5, 0xCEB9},{0x83C9, 0xD6E1},{0x83CA, 0xCFD2},{0x83CC, 0xD0B6},{0x83D3, 0xCEA2},{0x83D6, 0xF3EE},{0x83DC, 0xF3F8}, - {0x83E9, 0xDCCC},{0x83EB, 0xD0CB},{0x83EF, 0xFCA4},{0x83F0, 0xCDCA},{0x83F1, 0xD7D4},{0x83F2, 0xDEA3},{0x83F4, 0xE4E0},{0x83F9, 0xEEC9}, - {0x83FD, 0xE2DD},{0x8403, 0xF5FE},{0x8404, 0xD4AC},{0x840A, 0xD5D1},{0x840C, 0xD8F0},{0x840D, 0xF8C3},{0x840E, 0xEAD7},{0x8429, 0xF5D7}, - {0x842C, 0xD8BF},{0x8431, 0xFDC0},{0x8438, 0xEBAD},{0x843D, 0xD5AA},{0x8449, 0xE7A8},{0x8457, 0xEECA},{0x845B, 0xCAE7},{0x8461, 0xF8E3}, - {0x8463, 0xD4DD},{0x8466, 0xEAD8},{0x846B, 0xFBD9},{0x846C, 0xEDF7},{0x846F, 0xE5B5},{0x8475, 0xD0AD},{0x847A, 0xF1F1},{0x8490, 0xE2BD}, - {0x8494, 0xE3C8},{0x8499, 0xD9D5},{0x849C, 0xDFAA},{0x84A1, 0xDBBC},{0x84B2, 0xF8E4},{0x84B8, 0xF1FA},{0x84BB, 0xE5B6},{0x84BC, 0xF3EF}, - {0x84BF, 0xFBDA},{0x84C0, 0xE1E0},{0x84C2, 0xD9AC},{0x84C4, 0xF5EB},{0x84C6, 0xE0B6},{0x84C9, 0xE9C8},{0x84CB, 0xCBCF},{0x84CD, 0xE3C9}, - {0x84D1, 0xDEEE},{0x84DA, 0xE2BE},{0x84EC, 0xDCEF},{0x84EE, 0xD6A5},{0x84F4, 0xE2F1},{0x84FC, 0xD6FE},{0x8511, 0xD9A1},{0x8513, 0xD8C0}, - {0x8514, 0xDCDB},{0x8517, 0xEDBD},{0x8518, 0xDFB8},{0x851A, 0xEAA5},{0x851E, 0xD7AD},{0x8521, 0xF3F9},{0x8523, 0xEDF8},{0x8525, 0xF5C7}, - {0x852C, 0xE1CA},{0x852D, 0xEBE3},{0x852F, 0xF2DE},{0x853D, 0xF8CC},{0x853F, 0xEAD9},{0x8541, 0xD3C6},{0x8543, 0xDBE6},{0x8549, 0xF5AF}, - {0x854E, 0xCEF0},{0x8553, 0xE9FE},{0x8559, 0xFBB6},{0x8563, 0xE2F2},{0x8568, 0xCFF2},{0x8569, 0xF7B9},{0x856A, 0xD9F3},{0x856D, 0xE1CB}, - {0x8584, 0xDADD},{0x8587, 0xDAB9},{0x858F, 0xEBFB},{0x8591, 0xCBB9},{0x8594, 0xEDF9},{0x859B, 0xE0E0},{0x85A6, 0xF4C0},{0x85A8, 0xFDBC}, - {0x85A9, 0xDFB1},{0x85AA, 0xE3EF},{0x85AF, 0xE0A3},{0x85B0, 0xFDB9},{0x85BA, 0xF0B1},{0x85C1, 0xCDCB},{0x85C9, 0xEDBE},{0x85CD, 0xD5C0}, - {0x85CE, 0xE3F0},{0x85CF, 0xEDFA},{0x85D5, 0xE9E4},{0x85DC, 0xD5ED},{0x85DD, 0xE7DD},{0x85E4, 0xD4F6},{0x85E5, 0xE5B7},{0x85E9, 0xDBE7}, - {0x85EA, 0xE2BF},{0x85F7, 0xEECB},{0x85FA, 0xD7F4},{0x85FB, 0xF0DD},{0x85FF, 0xCEAB},{0x8602, 0xE7DE},{0x8606, 0xD6D6},{0x8607, 0xE1CC}, - {0x860A, 0xE8B3},{0x8616, 0xE5EE},{0x8617, 0xDCA2},{0x861A, 0xE0D0},{0x862D, 0xD5B5},{0x863F, 0xD5A1},{0x864E, 0xFBDB},{0x8650, 0xF9CB}, - {0x8654, 0xCBF3},{0x8655, 0xF4A5},{0x865B, 0xFAC8},{0x865C, 0xD6D7},{0x865E, 0xE9E5},{0x865F, 0xFBDC},{0x8667, 0xFDD0},{0x8679, 0xFBF6}, - {0x868A, 0xDAA5},{0x868C, 0xDBBD},{0x8693, 0xECE2},{0x86A3, 0xCDF7},{0x86A4, 0xF0DE},{0x86A9, 0xF6C9},{0x86C7, 0xDEEF},{0x86CB, 0xD3B1}, - {0x86D4, 0xFCEE},{0x86D9, 0xE8C3},{0x86DB, 0xF1C8},{0x86DF, 0xCEF1},{0x86E4, 0xF9ED},{0x86ED, 0xF2F4},{0x86FE, 0xE4B6},{0x8700, 0xF5B9}, - {0x8702, 0xDCF0},{0x8703, 0xE3F1},{0x8708, 0xE8A5},{0x8718, 0xF2BB},{0x871A, 0xDEA4},{0x871C, 0xDACC},{0x874E, 0xCAE9},{0x8755, 0xE3DA}, - {0x8757, 0xFCD9},{0x875F, 0xEADA},{0x8766, 0xF9C4},{0x8768, 0xE3A4},{0x8774, 0xFBDD},{0x8776, 0xEFCA},{0x8778, 0xE8C4},{0x8782, 0xD5CC}, - {0x878D, 0xEBD7},{0x879F, 0xD9AD},{0x87A2, 0xFBAB},{0x87B3, 0xD3D9},{0x87BA, 0xD5A2},{0x87C4, 0xF6DE},{0x87E0, 0xDAF6},{0x87EC, 0xE0D1}, - {0x87EF, 0xE9A8},{0x87F2, 0xF5F9},{0x87F9, 0xFAAF},{0x87FB, 0xEBFC},{0x87FE, 0xE0EA},{0x8805, 0xE3B2},{0x881F, 0xD5C5},{0x8822, 0xF1E3}, - {0x8823, 0xD5EE},{0x8831, 0xCDCC},{0x8836, 0xEDD9},{0x883B, 0xD8C1},{0x8840, 0xFAEC},{0x8846, 0xF1EB},{0x884C, 0xFABC},{0x884D, 0xE6E2}, - {0x8852, 0xFAE5},{0x8853, 0xE2FA},{0x8857, 0xCAB6},{0x8859, 0xE4B7},{0x885B, 0xEADB},{0x885D, 0xF5FA},{0x8861, 0xFBAC},{0x8862, 0xCFC3}, - {0x8863, 0xEBFD},{0x8868, 0xF8FA},{0x886B, 0xDFB9},{0x8870, 0xE1F1},{0x8872, 0xD2A4},{0x8877, 0xF5FB},{0x887E, 0xD0DA},{0x887F, 0xD0DB}, - {0x8881, 0xEABE},{0x8882, 0xD9B1},{0x8888, 0xCAB7},{0x888B, 0xD3E7},{0x888D, 0xF8E5},{0x8892, 0xD3B2},{0x8896, 0xE2C0},{0x8897, 0xF2DF}, - {0x889E, 0xCDE5},{0x88AB, 0xF9AC},{0x88B4, 0xCDCD},{0x88C1, 0xEEAE},{0x88C2, 0xD6AE},{0x88CF, 0xD7EA},{0x88D4, 0xE7E0},{0x88D5, 0xEBAE}, - {0x88D9, 0xCFD9},{0x88DC, 0xDCCD},{0x88DD, 0xEDFB},{0x88DF, 0xDEF0},{0x88E1, 0xD7EB},{0x88E8, 0xDEA5},{0x88F3, 0xDFD7},{0x88F4, 0xDBD0}, - {0x88F5, 0xDBD1},{0x88F8, 0xD5A3},{0x88FD, 0xF0B2},{0x8907, 0xDCDC},{0x8910, 0xCAE8},{0x8912, 0xF8E6},{0x8913, 0xDCCE},{0x8918, 0xEADC}, - {0x8919, 0xDBD2},{0x8925, 0xE9B3},{0x892A, 0xF7DB},{0x8936, 0xE3A8},{0x8938, 0xD7AE},{0x893B, 0xE0E1},{0x8941, 0xCBBA},{0x8944, 0xE5D1}, - {0x895F, 0xD0DC},{0x8964, 0xD5C1},{0x896A, 0xD8CA},{0x8972, 0xE3A9},{0x897F, 0xE0A4},{0x8981, 0xE9A9},{0x8983, 0xD3C7},{0x8986, 0xDCDD}, - {0x8987, 0xF8AE},{0x898B, 0xCCB8},{0x898F, 0xD0AE},{0x8993, 0xD8F2},{0x8996, 0xE3CA},{0x89A1, 0xCCAF},{0x89A9, 0xD4AD},{0x89AA, 0xF6D1}, - {0x89B2, 0xD0CC},{0x89BA, 0xCAC6},{0x89BD, 0xD5C2},{0x89C0, 0xCEBA},{0x89D2, 0xCAC7},{0x89E3, 0xFAB0},{0x89F4, 0xDFD8},{0x89F8, 0xF5BA}, - {0x8A00, 0xE5EB},{0x8A02, 0xEFF4},{0x8A03, 0xDDB5},{0x8A08, 0xCDAA},{0x8A0A, 0xE3F2},{0x8A0C, 0xFBF7},{0x8A0E, 0xF7D0},{0x8A13, 0xFDBA}, - {0x8A16, 0xFDE1},{0x8A17, 0xF6FE},{0x8A18, 0xD1C0},{0x8A1B, 0xE8C5},{0x8A1D, 0xE4B8},{0x8A1F, 0xE1E8},{0x8A23, 0xCCC1},{0x8A25, 0xD2ED}, - {0x8A2A, 0xDBBE},{0x8A2D, 0xE0E2},{0x8A31, 0xFAC9},{0x8A34, 0xE1CD},{0x8A36, 0xCAB8},{0x8A3A, 0xF2E0},{0x8A3B, 0xF1C9},{0x8A50, 0xDEF1}, - {0x8A54, 0xF0DF},{0x8A55, 0xF8C4},{0x8A5B, 0xEECC},{0x8A5E, 0xDEF2},{0x8A60, 0xE7C9},{0x8A62, 0xE2F3},{0x8A63, 0xE7E1},{0x8A66, 0xE3CB}, - {0x8A69, 0xE3CC},{0x8A6D, 0xCFF8},{0x8A6E, 0xEFAC},{0x8A70, 0xFDFE},{0x8A71, 0xFCA5},{0x8A72, 0xFAB1},{0x8A73, 0xDFD9},{0x8A75, 0xE0D2}, - {0x8A79, 0xF4DA},{0x8A85, 0xF1CA},{0x8A87, 0xCEA3},{0x8A8C, 0xF2BC},{0x8A8D, 0xECE3},{0x8A93, 0xE0A5},{0x8A95, 0xF7AB},{0x8A98, 0xEBAF}, - {0x8A9E, 0xE5DE},{0x8AA0, 0xE1A4},{0x8AA1, 0xCDAB},{0x8AA3, 0xD9F4},{0x8AA4, 0xE8A6},{0x8AA5, 0xCDCE},{0x8AA6, 0xE1E9},{0x8AA8, 0xFCEF}, - {0x8AAA, 0xE0E3},{0x8AB0, 0xE2C1},{0x8AB2, 0xCEA4},{0x8AB9, 0xDEA6},{0x8ABC, 0xEBFE},{0x8ABE, 0xEBDD},{0x8ABF, 0xF0E0},{0x8AC2, 0xF4DB}, - {0x8AC4, 0xE2F4},{0x8AC7, 0xD3C8},{0x8ACB, 0xF4EB},{0x8ACD, 0xEEB5},{0x8ACF, 0xF5D8},{0x8AD2, 0xD5DF},{0x8AD6, 0xD6E5},{0x8ADB, 0xEBB0}, - {0x8ADC, 0xF4E3},{0x8AE1, 0xE3CD},{0x8AE6, 0xF4F4},{0x8AE7, 0xFAB2},{0x8AEA, 0xEFF5},{0x8AEB, 0xCADF},{0x8AED, 0xEBB1},{0x8AEE, 0xEDBF}, - {0x8AF1, 0xFDC9},{0x8AF6, 0xE4A6},{0x8AF7, 0xF9A4},{0x8AF8, 0xF0B3},{0x8AFA, 0xE5EC},{0x8AFE, 0xD1E7},{0x8B00, 0xD9C7},{0x8B01, 0xE4D7}, - {0x8B02, 0xEADD},{0x8B04, 0xD4F7},{0x8B0E, 0xDABA},{0x8B10, 0xDACD},{0x8B14, 0xF9CC},{0x8B16, 0xE1DA},{0x8B17, 0xDBBF},{0x8B19, 0xCCC5}, - {0x8B1A, 0xECD0},{0x8B1B, 0xCBBB},{0x8B1D, 0xDEF3},{0x8B20, 0xE9AA},{0x8B28, 0xD9C8},{0x8B2B, 0xEEE3},{0x8B2C, 0xD7BD},{0x8B33, 0xCFC4}, - {0x8B39, 0xD0CD},{0x8B41, 0xFCA6},{0x8B49, 0xF1FB},{0x8B4E, 0xFDD2},{0x8B4F, 0xD1C1},{0x8B58, 0xE3DB},{0x8B5A, 0xD3C9},{0x8B5C, 0xDCCF}, - {0x8B66, 0xCCED},{0x8B6C, 0xDEA7},{0x8B6F, 0xE6BB},{0x8B70, 0xECA1},{0x8B74, 0xCCB9},{0x8B77, 0xFBDE},{0x8B7D, 0xE7E2},{0x8B80, 0xD4C1}, - {0x8B8A, 0xDCA8},{0x8B90, 0xE2C2},{0x8B92, 0xF3D8},{0x8B93, 0xE5D3},{0x8B96, 0xF3D9},{0x8B9A, 0xF3C6},{0x8C37, 0xCDDB},{0x8C3F, 0xCDAC}, - {0x8C41, 0xFCC3},{0x8C46, 0xD4E7},{0x8C48, 0xD1C2},{0x8C4A, 0xF9A5},{0x8C4C, 0xE8D5},{0x8C55, 0xE3CE},{0x8C5A, 0xD4CA},{0x8C61, 0xDFDA}, - {0x8C6A, 0xFBDF},{0x8C6B, 0xE7E3},{0x8C79, 0xF8FB},{0x8C7A, 0xE3CF},{0x8C82, 0xF5B0},{0x8C8A, 0xD8E7},{0x8C8C, 0xD9C9},{0x8C9D, 0xF8AF}, - {0x8C9E, 0xEFF6},{0x8CA0, 0xDDB6},{0x8CA1, 0xEEAF},{0x8CA2, 0xCDF8},{0x8CA7, 0xDEB8},{0x8CA8, 0xFCA7},{0x8CA9, 0xF7FC},{0x8CAA, 0xF7B1}, - {0x8CAB, 0xCEBB},{0x8CAC, 0xF4A1},{0x8CAF, 0xEECD},{0x8CB0, 0xE1AE},{0x8CB3, 0xECC3},{0x8CB4, 0xCFFE},{0x8CB6, 0xF8BF},{0x8CB7, 0xD8E2}, - {0x8CB8, 0xD3E8},{0x8CBB, 0xDEA8},{0x8CBC, 0xF4E4},{0x8CBD, 0xECC2},{0x8CBF, 0xD9F5},{0x8CC0, 0xF9C5},{0x8CC1, 0xDDD3},{0x8CC2, 0xD6F1}, - {0x8CC3, 0xECFC},{0x8CC4, 0xFCF0},{0x8CC7, 0xEDC0},{0x8CC8, 0xCAB9},{0x8CCA, 0xEEE4},{0x8CD1, 0xF2E1},{0x8CD3, 0xDEB9},{0x8CDA, 0xD6F2}, - {0x8CDC, 0xDEF4},{0x8CDE, 0xDFDB},{0x8CE0, 0xDBD3},{0x8CE2, 0xFAE7},{0x8CE3, 0xD8E3},{0x8CE4, 0xF4C1},{0x8CE6, 0xDDB7},{0x8CEA, 0xF2F5}, - {0x8CED, 0xD4AE},{0x8CF4, 0xD6F3},{0x8CFB, 0xDDB8},{0x8CFC, 0xCFC5},{0x8CFD, 0xDFDF},{0x8D04, 0xF2BE},{0x8D05, 0xF6A1},{0x8D07, 0xEBCB}, - {0x8D08, 0xF1FC},{0x8D0A, 0xF3C7},{0x8D0D, 0xE0EB},{0x8D13, 0xEDFC},{0x8D16, 0xE1DB},{0x8D64, 0xEEE5},{0x8D66, 0xDEF5},{0x8D6B, 0xFAD3}, - {0x8D70, 0xF1CB},{0x8D73, 0xD0AF},{0x8D74, 0xDDB9},{0x8D77, 0xD1C3},{0x8D85, 0xF5B1},{0x8D8A, 0xEAC6},{0x8D99, 0xF0E1},{0x8DA3, 0xF6AC}, - {0x8DA8, 0xF5D9},{0x8DB3, 0xF0EB},{0x8DBA, 0xDDBA},{0x8DBE, 0xF2BF},{0x8DC6, 0xF7C5},{0x8DCB, 0xDBA2},{0x8DCC, 0xF2F6},{0x8DCF, 0xCABA}, - {0x8DDB, 0xF7F5},{0x8DDD, 0xCBE5},{0x8DE1, 0xEEE6},{0x8DE3, 0xE0D3},{0x8DE8, 0xCEA5},{0x8DEF, 0xD6D8},{0x8DF3, 0xD4AF},{0x8E0A, 0xE9C9}, - {0x8E0F, 0xD3CE},{0x8E10, 0xF4C2},{0x8E1E, 0xCBE6},{0x8E2A, 0xF1A1},{0x8E30, 0xEBB2},{0x8E35, 0xF1A2},{0x8E42, 0xEBB3},{0x8E44, 0xF0B4}, - {0x8E47, 0xCBF4},{0x8E48, 0xD4B0},{0x8E49, 0xF3B2},{0x8E4A, 0xFBB7},{0x8E59, 0xF5EC},{0x8E5F, 0xEEE7},{0x8E60, 0xF4B2},{0x8E74, 0xF5ED}, - {0x8E76, 0xCFF3},{0x8E81, 0xF0E2},{0x8E87, 0xEECE},{0x8E8A, 0xF1CC},{0x8E8D, 0xE5B8},{0x8EAA, 0xD7F5},{0x8EAB, 0xE3F3},{0x8EAC, 0xCFE5}, - {0x8EC0, 0xCFC6},{0x8ECA, 0xF3B3},{0x8ECB, 0xE4D8},{0x8ECC, 0xCFF9},{0x8ECD, 0xCFDA},{0x8ED2, 0xFACD},{0x8EDF, 0xE6E3},{0x8EEB, 0xF2E2}, - {0x8EF8, 0xF5EE},{0x8EFB, 0xCABB},{0x8EFE, 0xE3DC},{0x8F03, 0xCEF2},{0x8F05, 0xD6D9},{0x8F09, 0xEEB0},{0x8F12, 0xF4E5},{0x8F13, 0xD8C2}, - {0x8F14, 0xDCD0},{0x8F15, 0xCCEE},{0x8F1B, 0xD5E0},{0x8F1C, 0xF6CA},{0x8F1D, 0xFDCA},{0x8F1E, 0xD8D6},{0x8F1F, 0xF4CF},{0x8F26, 0xD6A6}, - {0x8F27, 0xDCBE},{0x8F29, 0xDBD4},{0x8F2A, 0xD7C7},{0x8F2F, 0xF2FE},{0x8F33, 0xF1CD},{0x8F38, 0xE2C3},{0x8F39, 0xDCDE},{0x8F3B, 0xDCDF}, - {0x8F3E, 0xEFAD},{0x8F3F, 0xE6AB},{0x8F44, 0xF9DD},{0x8F45, 0xEABF},{0x8F49, 0xEFAE},{0x8F4D, 0xF4D0},{0x8F4E, 0xCEF3},{0x8F5D, 0xE6AC}, - {0x8F5F, 0xCEDE},{0x8F62, 0xD5F9},{0x8F9B, 0xE3F4},{0x8F9C, 0xCDD0},{0x8FA3, 0xD5B8},{0x8FA6, 0xF7FD},{0x8FA8, 0xDCA9},{0x8FAD, 0xDEF6}, - {0x8FAF, 0xDCAA},{0x8FB0, 0xF2E3},{0x8FB1, 0xE9B4},{0x8FB2, 0xD2DC},{0x8FC2, 0xE9E6},{0x8FC5, 0xE3F6},{0x8FCE, 0xE7CA},{0x8FD1, 0xD0CE}, - {0x8FD4, 0xDAF7},{0x8FE6, 0xCABC},{0x8FEA, 0xEEE8},{0x8FEB, 0xDADE},{0x8FED, 0xF2F7},{0x8FF0, 0xE2FB},{0x8FF2, 0xCCA6},{0x8FF7, 0xDABB}, - {0x8FF9, 0xEEE9},{0x8FFD, 0xF5DA},{0x9000, 0xF7DC},{0x9001, 0xE1EA},{0x9002, 0xCEC1},{0x9003, 0xD4B1},{0x9005, 0xFDB1},{0x9006, 0xE6BD}, - {0x9008, 0xFBAD},{0x900B, 0xF8E7},{0x900D, 0xE1CE},{0x900F, 0xF7E2},{0x9010, 0xF5EF},{0x9011, 0xCFC7},{0x9014, 0xD4B2},{0x9015, 0xCCEF}, - {0x9017, 0xD4E8},{0x9019, 0xEECF},{0x901A, 0xF7D7},{0x901D, 0xE0A6},{0x901E, 0xD6C1},{0x901F, 0xE1DC},{0x9020, 0xF0E3},{0x9021, 0xF1E4}, - {0x9022, 0xDCF1},{0x9023, 0xD6A7},{0x902E, 0xF4F5},{0x9031, 0xF1CE},{0x9032, 0xF2E4},{0x9035, 0xD0B0},{0x9038, 0xECEF},{0x903C, 0xF9BA}, - {0x903E, 0xEBB5},{0x9041, 0xD4ED},{0x9042, 0xE2C4},{0x9047, 0xE9E7},{0x904A, 0xEBB4},{0x904B, 0xEAA1},{0x904D, 0xF8BC},{0x904E, 0xCEA6}, - {0x9050, 0xF9C6},{0x9051, 0xFCDA},{0x9053, 0xD4B3},{0x9054, 0xD3B9},{0x9055, 0xEADE},{0x9059, 0xE9AB},{0x905C, 0xE1E1},{0x905D, 0xD3CF}, - {0x905E, 0xF4F6},{0x9060, 0xEAC0},{0x9061, 0xE1CF},{0x9063, 0xCCBA},{0x9069, 0xEEEA},{0x906D, 0xF0E4},{0x906E, 0xF3B4},{0x906F, 0xD4EE}, - {0x9072, 0xF2C0},{0x9075, 0xF1E5},{0x9077, 0xF4C3},{0x9078, 0xE0D4},{0x907A, 0xEBB6},{0x907C, 0xD7A1},{0x907D, 0xCBE8},{0x907F, 0xF9AD}, - {0x9080, 0xE9AD},{0x9081, 0xD8E4},{0x9082, 0xFAB3},{0x9083, 0xE2C5},{0x9084, 0xFCBD},{0x9087, 0xECC4},{0x9088, 0xD8B1},{0x908A, 0xDCAB}, - {0x908F, 0xD5A4},{0x9091, 0xEBE9},{0x9095, 0xE8BB},{0x9099, 0xD8D7},{0x90A2, 0xFBAE},{0x90A3, 0xD1E1},{0x90A6, 0xDBC0},{0x90A8, 0xF5BE}, - {0x90AA, 0xDEF7},{0x90AF, 0xCAFB},{0x90B0, 0xF7C6},{0x90B1, 0xCFC8},{0x90B5, 0xE1D0},{0x90B8, 0xEED0},{0x90C1, 0xE9F4},{0x90CA, 0xCEF4}, - {0x90DE, 0xD5CD},{0x90E1, 0xCFDB},{0x90E8, 0xDDBB},{0x90ED, 0xCEAC},{0x90F5, 0xE9E8},{0x90FD, 0xD4B4},{0x9102, 0xE4C7},{0x9112, 0xF5DB}, - {0x9115, 0xFAC1},{0x9119, 0xDEA9},{0x9127, 0xD4F8},{0x912D, 0xEFF7},{0x9132, 0xD3B3},{0x9149, 0xEBB7},{0x914A, 0xEFF8},{0x914B, 0xF5DC}, - {0x914C, 0xEDCC},{0x914D, 0xDBD5},{0x914E, 0xF1CF},{0x9152, 0xF1D0},{0x9162, 0xF5B2},{0x9169, 0xD9AE},{0x916A, 0xD5AC},{0x916C, 0xE2C6}, - {0x9175, 0xFDA3},{0x9177, 0xFBE5},{0x9178, 0xDFAB},{0x9187, 0xE2F5},{0x9189, 0xF6AD},{0x918B, 0xF5B3},{0x918D, 0xF0B5},{0x9192, 0xE1A5}, - {0x919C, 0xF5DD},{0x91AB, 0xECA2},{0x91AC, 0xEDFD},{0x91AE, 0xF5B4},{0x91AF, 0xFBB8},{0x91B1, 0xDBA3},{0x91B4, 0xD6CA},{0x91B5, 0xCBD9}, - {0x91C0, 0xE5D4},{0x91C7, 0xF3FA},{0x91C9, 0xEBB8},{0x91CB, 0xE0B7},{0x91CC, 0xD7EC},{0x91CD, 0xF1EC},{0x91CE, 0xE5AF},{0x91CF, 0xD5E1}, - {0x91D0, 0xD7ED},{0x91D1, 0xD1D1},{0x91D7, 0xE1F2},{0x91D8, 0xEFF9},{0x91DC, 0xDDBC},{0x91DD, 0xF6DC},{0x91E3, 0xF0E5},{0x91E7, 0xF4C4}, - {0x91EA, 0xE9E9},{0x91F5, 0xF3FB},{0x920D, 0xD4EF},{0x9210, 0xCCA2},{0x9211, 0xF7FE},{0x9212, 0xDFBC},{0x9217, 0xEBCD},{0x921E, 0xD0B7}, - {0x9234, 0xD6C2},{0x923A, 0xE8AD},{0x923F, 0xEFAF},{0x9240, 0xCBA5},{0x9245, 0xCBE9},{0x9249, 0xFAE8},{0x9257, 0xCCC6},{0x925B, 0xE6E7}, - {0x925E, 0xEAC7},{0x9262, 0xDBA4},{0x9264, 0xCFC9},{0x9265, 0xE2FC},{0x9266, 0xEFFA},{0x9280, 0xEBDE},{0x9283, 0xF5C8},{0x9285, 0xD4DE}, - {0x9291, 0xE0D5},{0x9293, 0xEFB0},{0x9296, 0xE2C7},{0x9298, 0xD9AF},{0x929C, 0xF9E7},{0x92B3, 0xE7E5},{0x92B6, 0xCFCA},{0x92B7, 0xE1D1}, - {0x92B9, 0xE2C8},{0x92CC, 0xEFFB},{0x92CF, 0xFAF9},{0x92D2, 0xDCF2},{0x92E4, 0xE0A7},{0x92EA, 0xF8E8},{0x92F8, 0xCBEA},{0x92FC, 0xCBBC}, - {0x9304, 0xD6E2},{0x9310, 0xF5DE},{0x9318, 0xF5DF},{0x931A, 0xEEB6},{0x931E, 0xE2F6},{0x931F, 0xD3CA},{0x9320, 0xEFFC},{0x9321, 0xD1C4}, - {0x9322, 0xEFB1},{0x9324, 0xD1C5},{0x9326, 0xD0DE},{0x9328, 0xD9E1},{0x932B, 0xE0B8},{0x932E, 0xCDD1},{0x932F, 0xF3B9},{0x9348, 0xE7CC}, - {0x934A, 0xD6A8},{0x934B, 0xCEA7},{0x934D, 0xD4B5},{0x9354, 0xE4C8},{0x935B, 0xD3B4},{0x936E, 0xEBB9},{0x9375, 0xCBF5},{0x937C, 0xF6DD}, - {0x937E, 0xF1A3},{0x938C, 0xCCC7},{0x9394, 0xE9CA},{0x9396, 0xE1F0},{0x939A, 0xF5E0},{0x93A3, 0xFBAF},{0x93A7, 0xCBD1},{0x93AC, 0xFBE0}, - {0x93AD, 0xF2E5},{0x93B0, 0xECF0},{0x93C3, 0xF0EC},{0x93D1, 0xEEEB},{0x93DE, 0xE9CB},{0x93E1, 0xCCF0},{0x93E4, 0xD7AF},{0x93F6, 0xF3A1}, - {0x9404, 0xFCF5},{0x9418, 0xF1A4},{0x9425, 0xE0D6},{0x942B, 0xEFB2},{0x9435, 0xF4D1},{0x9438, 0xF7A1},{0x9444, 0xF1D1},{0x9451, 0xCAFC}, - {0x9452, 0xCAFD},{0x945B, 0xCECE},{0x947D, 0xF3C8},{0x947F, 0xF3BA},{0x9577, 0xEDFE},{0x9580, 0xDAA6},{0x9583, 0xE0EC},{0x9589, 0xF8CD}, - {0x958B, 0xCBD2},{0x958F, 0xEBCE},{0x9591, 0xF9D8},{0x9592, 0xF9D9},{0x9593, 0xCAE0},{0x9594, 0xDACA},{0x9598, 0xCBA6},{0x95A3, 0xCAC8}, - {0x95A4, 0xF9EE},{0x95A5, 0xDBEC},{0x95A8, 0xD0B1},{0x95AD, 0xD5EF},{0x95B1, 0xE6F3},{0x95BB, 0xE7A2},{0x95BC, 0xE4D9},{0x95C7, 0xE4E1}, - {0x95CA, 0xFCC4},{0x95D4, 0xF9EF},{0x95D5, 0xCFF4},{0x95D6, 0xF7E6},{0x95DC, 0xCEBC},{0x95E1, 0xF4C5},{0x95E2, 0xDCA3},{0x961C, 0xDDBD}, - {0x9621, 0xF4C6},{0x962A, 0xF8A1},{0x962E, 0xE8D6},{0x9632, 0xDBC1},{0x963B, 0xF0E6},{0x963F, 0xE4B9},{0x9640, 0xF6ED},{0x9642, 0xF9AE}, - {0x9644, 0xDDBE},{0x964B, 0xD7B0},{0x964C, 0xD8E8},{0x964D, 0xCBBD},{0x9650, 0xF9DA},{0x965B, 0xF8CE},{0x965C, 0xF9F0},{0x965D, 0xE0ED}, - {0x965E, 0xE3B3},{0x965F, 0xF4B3},{0x9662, 0xEAC2},{0x9663, 0xF2E6},{0x9664, 0xF0B6},{0x966A, 0xDBD6},{0x9670, 0xEBE4},{0x9673, 0xF2E7}, - {0x9675, 0xD7D5},{0x9676, 0xD4B6},{0x9677, 0xF9E8},{0x9678, 0xD7C1},{0x967D, 0xE5D5},{0x9685, 0xE9EA},{0x9686, 0xD7CC},{0x968A, 0xD3E9}, - {0x968B, 0xE2C9},{0x968D, 0xFCDB},{0x968E, 0xCDAD},{0x9694, 0xCCB0},{0x9695, 0xEAA2},{0x9698, 0xE4F6},{0x9699, 0xD0C0},{0x969B, 0xF0B7}, - {0x969C, 0xEEA1},{0x96A3, 0xD7F6},{0x96A7, 0xE2CA},{0x96A8, 0xE2CB},{0x96AA, 0xFACF},{0x96B1, 0xEBDF},{0x96B7, 0xD6CB},{0x96BB, 0xF4B4}, - {0x96C0, 0xEDCD},{0x96C1, 0xE4D2},{0x96C4, 0xEAA9},{0x96C5, 0xE4BA},{0x96C6, 0xF3A2},{0x96C7, 0xCDD2},{0x96C9, 0xF6CB},{0x96CB, 0xF1E6}, - {0x96CC, 0xEDC1},{0x96CD, 0xE8BC},{0x96CE, 0xEED1},{0x96D5, 0xF0E7},{0x96D6, 0xE2CC},{0x96D9, 0xE4AA},{0x96DB, 0xF5E1},{0x96DC, 0xEDDA}, - {0x96E2, 0xD7EE},{0x96E3, 0xD1F1},{0x96E8, 0xE9EB},{0x96E9, 0xE9EC},{0x96EA, 0xE0E4},{0x96EF, 0xDAA7},{0x96F0, 0xDDD4},{0x96F2, 0xEAA3}, - {0x96F6, 0xD6C3},{0x96F7, 0xD6F4},{0x96F9, 0xDADF},{0x96FB, 0xEFB3},{0x9700, 0xE2CD},{0x9706, 0xEFFD},{0x9707, 0xF2E8},{0x9711, 0xEFC5}, - {0x9713, 0xE7E7},{0x9716, 0xD7FD},{0x9719, 0xE7CE},{0x971C, 0xDFDC},{0x971E, 0xF9C7},{0x9727, 0xD9F6},{0x9730, 0xDFAC},{0x9732, 0xD6DA}, - {0x9739, 0xDCA4},{0x973D, 0xF0B8},{0x9742, 0xD5FA},{0x9744, 0xE4F7},{0x9748, 0xD6C4},{0x9751, 0xF4EC},{0x9756, 0xEFFE},{0x975C, 0xF0A1}, - {0x975E, 0xDEAA},{0x9761, 0xDABC},{0x9762, 0xD8FC},{0x9769, 0xFAD4},{0x976D, 0xECE5},{0x9774, 0xFCA8},{0x9777, 0xECE6},{0x977A, 0xD8CB}, - {0x978B, 0xFBB9},{0x978D, 0xE4D3},{0x978F, 0xCDF9},{0x97A0, 0xCFD3},{0x97A8, 0xCAEA},{0x97AB, 0xCFD4},{0x97AD, 0xF8BD},{0x97C6, 0xF4C7}, - {0x97CB, 0xEADF},{0x97D3, 0xF9DB},{0x97DC, 0xD4B7},{0x97F3, 0xEBE5},{0x97F6, 0xE1D2},{0x97FB, 0xEAA4},{0x97FF, 0xFAC2},{0x9800, 0xFBE1}, - {0x9801, 0xFAED},{0x9802, 0xF0A2},{0x9803, 0xCCF1},{0x9805, 0xFAA3},{0x9806, 0xE2F7},{0x9808, 0xE2CE},{0x980A, 0xE9F5},{0x980C, 0xE1EB}, - {0x9810, 0xE7E8},{0x9811, 0xE8D7},{0x9812, 0xDAF8},{0x9813, 0xD4CB},{0x9817, 0xF7F6},{0x9818, 0xD6C5},{0x982D, 0xD4E9},{0x9830, 0xFAFA}, - {0x9838, 0xCCF2},{0x9839, 0xF7DD},{0x983B, 0xDEBA},{0x9846, 0xCEA8},{0x984C, 0xF0B9},{0x984D, 0xE4FE},{0x984E, 0xE4C9},{0x9854, 0xE4D4}, - {0x9858, 0xEAC3},{0x985A, 0xEFB4},{0x985E, 0xD7BE},{0x9865, 0xFBE2},{0x9867, 0xCDD3},{0x986B, 0xEFB5},{0x986F, 0xFAE9},{0x98A8, 0xF9A6}, - {0x98AF, 0xDFBD},{0x98B1, 0xF7C7},{0x98C4, 0xF8FD},{0x98C7, 0xF8FC},{0x98DB, 0xDEAB},{0x98DC, 0xDBE8},{0x98DF, 0xE3DD},{0x98E1, 0xE1E2}, - {0x98E2, 0xD1C6},{0x98ED, 0xF6D0},{0x98EE, 0xEBE6},{0x98EF, 0xDAF9},{0x98F4, 0xECC7},{0x98FC, 0xDEF8},{0x98FD, 0xF8E9},{0x98FE, 0xE3DE}, - {0x9903, 0xCEF5},{0x9909, 0xFAC3},{0x990A, 0xE5D7},{0x990C, 0xECC8},{0x9910, 0xF3C9},{0x9913, 0xE4BB},{0x9918, 0xE6AE},{0x991E, 0xEFB6}, - {0x9920, 0xDCBF},{0x9928, 0xCEBD},{0x9945, 0xD8C3},{0x9949, 0xD0CF},{0x994B, 0xCFFA},{0x994C, 0xF3CA},{0x994D, 0xE0D7},{0x9951, 0xD1C7}, - {0x9952, 0xE9AE},{0x9954, 0xE8BD},{0x9957, 0xFAC4},{0x9996, 0xE2CF},{0x9999, 0xFAC5},{0x999D, 0xF9B8},{0x99A5, 0xDCE0},{0x99A8, 0xFBB0}, - {0x99AC, 0xD8A9},{0x99AD, 0xE5DF},{0x99AE, 0xF9A7},{0x99B1, 0xF6EE},{0x99B3, 0xF6CC},{0x99B4, 0xE2F8},{0x99B9, 0xECF1},{0x99C1, 0xDAE0}, - {0x99D0, 0xF1D2},{0x99D1, 0xD2CC},{0x99D2, 0xCFCB},{0x99D5, 0xCABD},{0x99D9, 0xDDBF},{0x99DD, 0xF6EF},{0x99DF, 0xDEF9},{0x99ED, 0xFAB4}, - {0x99F1, 0xD5AD},{0x99FF, 0xF1E7},{0x9A01, 0xDEBE},{0x9A08, 0xDCC0},{0x9A0E, 0xD1C8},{0x9A0F, 0xD1C9},{0x9A19, 0xF8BE},{0x9A2B, 0xCBF6}, - {0x9A30, 0xD4F9},{0x9A36, 0xF5E2},{0x9A37, 0xE1D3},{0x9A40, 0xD8E9},{0x9A43, 0xF8FE},{0x9A45, 0xCFCC},{0x9A4D, 0xFDA4},{0x9A55, 0xCEF6}, - {0x9A57, 0xFAD0},{0x9A5A, 0xCCF3},{0x9A5B, 0xE6BE},{0x9A5F, 0xF6AE},{0x9A62, 0xD5F0},{0x9A65, 0xD1CA},{0x9A69, 0xFCBE},{0x9A6A, 0xD5F1}, - {0x9AA8, 0xCDE9},{0x9AB8, 0xFAB5},{0x9AD3, 0xE2D0},{0x9AD4, 0xF4F7},{0x9AD8, 0xCDD4},{0x9AE5, 0xE7A3},{0x9AEE, 0xDBA5},{0x9B1A, 0xE2D1}, - {0x9B27, 0xD7A2},{0x9B2A, 0xF7E3},{0x9B31, 0xEAA6},{0x9B3C, 0xD0A1},{0x9B41, 0xCEDA},{0x9B42, 0xFBEB},{0x9B43, 0xDBA6},{0x9B44, 0xDBDE}, - {0x9B45, 0xD8E5},{0x9B4F, 0xEAE0},{0x9B54, 0xD8AA},{0x9B5A, 0xE5E0},{0x9B6F, 0xD6DB},{0x9B8E, 0xEFC6},{0x9B91, 0xF8EA},{0x9B9F, 0xE4D5}, - {0x9BAB, 0xCEF7},{0x9BAE, 0xE0D8},{0x9BC9, 0xD7EF},{0x9BD6, 0xF4ED},{0x9BE4, 0xCDE6},{0x9BE8, 0xCCF4},{0x9C0D, 0xF5E3},{0x9C10, 0xE4CA}, - {0x9C12, 0xDCE1},{0x9C15, 0xF9C8},{0x9C25, 0xFCBF},{0x9C32, 0xE8A7},{0x9C3B, 0xD8C4},{0x9C47, 0xCBBE},{0x9C49, 0xDCAE},{0x9C57, 0xD7F7}, - {0x9CE5, 0xF0E8},{0x9CE7, 0xDDC0},{0x9CE9, 0xCFCD},{0x9CF3, 0xDCF3},{0x9CF4, 0xD9B0},{0x9CF6, 0xE6E9},{0x9D09, 0xE4BC},{0x9D1B, 0xEAC4}, - {0x9D26, 0xE4EC},{0x9D28, 0xE4E5},{0x9D3B, 0xFBF8},{0x9D51, 0xCCBB},{0x9D5D, 0xE4BD},{0x9D60, 0xCDDC},{0x9D61, 0xD9F7},{0x9D6C, 0xDDDF}, - {0x9D72, 0xEDCE},{0x9DA9, 0xD9D0},{0x9DAF, 0xE5A3},{0x9DB4, 0xF9CD},{0x9DC4, 0xCDAE},{0x9DD7, 0xCFCE},{0x9DF2, 0xF6AF},{0x9DF8, 0xFDD3}, - {0x9DF9, 0xEBED},{0x9DFA, 0xD6DC},{0x9E1A, 0xE5A4},{0x9E1E, 0xD5B6},{0x9E75, 0xD6DD},{0x9E79, 0xF9E9},{0x9E7D, 0xE7A4},{0x9E7F, 0xD6E3}, - {0x9E92, 0xD1CB},{0x9E93, 0xD6E4},{0x9E97, 0xD5F2},{0x9E9D, 0xDEFA},{0x9E9F, 0xD7F8},{0x9EA5, 0xD8EA},{0x9EB4, 0xCFD5},{0x9EB5, 0xD8FD}, - {0x9EBB, 0xD8AB},{0x9EBE, 0xFDCB},{0x9EC3, 0xFCDC},{0x9ECD, 0xE0A8},{0x9ECE, 0xD5F3},{0x9ED1, 0xFDD9},{0x9ED4, 0xCCA3},{0x9ED8, 0xD9F9}, - {0x9EDB, 0xD3EA},{0x9EDC, 0xF5F5},{0x9EDE, 0xEFC7},{0x9EE8, 0xD3DA},{0x9EF4, 0xDABD},{0x9F07, 0xE8A8},{0x9F08, 0xDCAF},{0x9F0E, 0xF0A3}, - {0x9F13, 0xCDD5},{0x9F20, 0xE0A9},{0x9F3B, 0xDEAC},{0x9F4A, 0xF0BA},{0x9F4B, 0xEEB1},{0x9F4E, 0xEEB2},{0x9F52, 0xF6CD},{0x9F5F, 0xEED2}, - {0x9F61, 0xD6C6},{0x9F67, 0xE0E5},{0x9F6A, 0xF3BB},{0x9F6C, 0xE5E1},{0x9F77, 0xE4CB},{0x9F8D, 0xD7A3},{0x9F90, 0xDBC2},{0x9F95, 0xCAFE}, - {0x9F9C, 0xCFCF},{0xAC00, 0xB0A1},{0xAC01, 0xB0A2},{0xAC04, 0xB0A3},{0xAC07, 0xB0A4},{0xAC08, 0xB0A5},{0xAC09, 0xB0A6},{0xAC0A, 0xB0A7}, - {0xAC10, 0xB0A8},{0xAC11, 0xB0A9},{0xAC12, 0xB0AA},{0xAC13, 0xB0AB},{0xAC14, 0xB0AC},{0xAC15, 0xB0AD},{0xAC16, 0xB0AE},{0xAC17, 0xB0AF}, - {0xAC19, 0xB0B0},{0xAC1A, 0xB0B1},{0xAC1B, 0xB0B2},{0xAC1C, 0xB0B3},{0xAC1D, 0xB0B4},{0xAC20, 0xB0B5},{0xAC24, 0xB0B6},{0xAC2C, 0xB0B7}, - {0xAC2D, 0xB0B8},{0xAC2F, 0xB0B9},{0xAC30, 0xB0BA},{0xAC31, 0xB0BB},{0xAC38, 0xB0BC},{0xAC39, 0xB0BD},{0xAC3C, 0xB0BE},{0xAC40, 0xB0BF}, - {0xAC4B, 0xB0C0},{0xAC4D, 0xB0C1},{0xAC54, 0xB0C2},{0xAC58, 0xB0C3},{0xAC5C, 0xB0C4},{0xAC70, 0xB0C5},{0xAC71, 0xB0C6},{0xAC74, 0xB0C7}, - {0xAC77, 0xB0C8},{0xAC78, 0xB0C9},{0xAC7A, 0xB0CA},{0xAC80, 0xB0CB},{0xAC81, 0xB0CC},{0xAC83, 0xB0CD},{0xAC84, 0xB0CE},{0xAC85, 0xB0CF}, - {0xAC86, 0xB0D0},{0xAC89, 0xB0D1},{0xAC8A, 0xB0D2},{0xAC8B, 0xB0D3},{0xAC8C, 0xB0D4},{0xAC90, 0xB0D5},{0xAC94, 0xB0D6},{0xAC9C, 0xB0D7}, - {0xAC9D, 0xB0D8},{0xAC9F, 0xB0D9},{0xACA0, 0xB0DA},{0xACA1, 0xB0DB},{0xACA8, 0xB0DC},{0xACA9, 0xB0DD},{0xACAA, 0xB0DE},{0xACAC, 0xB0DF}, - {0xACAF, 0xB0E0},{0xACB0, 0xB0E1},{0xACB8, 0xB0E2},{0xACB9, 0xB0E3},{0xACBB, 0xB0E4},{0xACBC, 0xB0E5},{0xACBD, 0xB0E6},{0xACC1, 0xB0E7}, - {0xACC4, 0xB0E8},{0xACC8, 0xB0E9},{0xACCC, 0xB0EA},{0xACD5, 0xB0EB},{0xACD7, 0xB0EC},{0xACE0, 0xB0ED},{0xACE1, 0xB0EE},{0xACE4, 0xB0EF}, - {0xACE7, 0xB0F0},{0xACE8, 0xB0F1},{0xACEA, 0xB0F2},{0xACEC, 0xB0F3},{0xACEF, 0xB0F4},{0xACF0, 0xB0F5},{0xACF1, 0xB0F6},{0xACF3, 0xB0F7}, - {0xACF5, 0xB0F8},{0xACF6, 0xB0F9},{0xACFC, 0xB0FA},{0xACFD, 0xB0FB},{0xAD00, 0xB0FC},{0xAD04, 0xB0FD},{0xAD06, 0xB0FE},{0xAD0C, 0xB1A1}, - {0xAD0D, 0xB1A2},{0xAD0F, 0xB1A3},{0xAD11, 0xB1A4},{0xAD18, 0xB1A5},{0xAD1C, 0xB1A6},{0xAD20, 0xB1A7},{0xAD29, 0xB1A8},{0xAD2C, 0xB1A9}, - {0xAD2D, 0xB1AA},{0xAD34, 0xB1AB},{0xAD35, 0xB1AC},{0xAD38, 0xB1AD},{0xAD3C, 0xB1AE},{0xAD44, 0xB1AF},{0xAD45, 0xB1B0},{0xAD47, 0xB1B1}, - {0xAD49, 0xB1B2},{0xAD50, 0xB1B3},{0xAD54, 0xB1B4},{0xAD58, 0xB1B5},{0xAD61, 0xB1B6},{0xAD63, 0xB1B7},{0xAD6C, 0xB1B8},{0xAD6D, 0xB1B9}, - {0xAD70, 0xB1BA},{0xAD73, 0xB1BB},{0xAD74, 0xB1BC},{0xAD75, 0xB1BD},{0xAD76, 0xB1BE},{0xAD7B, 0xB1BF},{0xAD7C, 0xB1C0},{0xAD7D, 0xB1C1}, - {0xAD7F, 0xB1C2},{0xAD81, 0xB1C3},{0xAD82, 0xB1C4},{0xAD88, 0xB1C5},{0xAD89, 0xB1C6},{0xAD8C, 0xB1C7},{0xAD90, 0xB1C8},{0xAD9C, 0xB1C9}, - {0xAD9D, 0xB1CA},{0xADA4, 0xB1CB},{0xADB7, 0xB1CC},{0xADC0, 0xB1CD},{0xADC1, 0xB1CE},{0xADC4, 0xB1CF},{0xADC8, 0xB1D0},{0xADD0, 0xB1D1}, - {0xADD1, 0xB1D2},{0xADD3, 0xB1D3},{0xADDC, 0xB1D4},{0xADE0, 0xB1D5},{0xADE4, 0xB1D6},{0xADF8, 0xB1D7},{0xADF9, 0xB1D8},{0xADFC, 0xB1D9}, - {0xADFF, 0xB1DA},{0xAE00, 0xB1DB},{0xAE01, 0xB1DC},{0xAE08, 0xB1DD},{0xAE09, 0xB1DE},{0xAE0B, 0xB1DF},{0xAE0D, 0xB1E0},{0xAE14, 0xB1E1}, - {0xAE30, 0xB1E2},{0xAE31, 0xB1E3},{0xAE34, 0xB1E4},{0xAE37, 0xB1E5},{0xAE38, 0xB1E6},{0xAE3A, 0xB1E7},{0xAE40, 0xB1E8},{0xAE41, 0xB1E9}, - {0xAE43, 0xB1EA},{0xAE45, 0xB1EB},{0xAE46, 0xB1EC},{0xAE4A, 0xB1ED},{0xAE4C, 0xB1EE},{0xAE4D, 0xB1EF},{0xAE4E, 0xB1F0},{0xAE50, 0xB1F1}, - {0xAE54, 0xB1F2},{0xAE56, 0xB1F3},{0xAE5C, 0xB1F4},{0xAE5D, 0xB1F5},{0xAE5F, 0xB1F6},{0xAE60, 0xB1F7},{0xAE61, 0xB1F8},{0xAE65, 0xB1F9}, - {0xAE68, 0xB1FA},{0xAE69, 0xB1FB},{0xAE6C, 0xB1FC},{0xAE70, 0xB1FD},{0xAE78, 0xB1FE},{0xAE79, 0xB2A1},{0xAE7B, 0xB2A2},{0xAE7C, 0xB2A3}, - {0xAE7D, 0xB2A4},{0xAE84, 0xB2A5},{0xAE85, 0xB2A6},{0xAE8C, 0xB2A7},{0xAEBC, 0xB2A8},{0xAEBD, 0xB2A9},{0xAEBE, 0xB2AA},{0xAEC0, 0xB2AB}, - {0xAEC4, 0xB2AC},{0xAECC, 0xB2AD},{0xAECD, 0xB2AE},{0xAECF, 0xB2AF},{0xAED0, 0xB2B0},{0xAED1, 0xB2B1},{0xAED8, 0xB2B2},{0xAED9, 0xB2B3}, - {0xAEDC, 0xB2B4},{0xAEE8, 0xB2B5},{0xAEEB, 0xB2B6},{0xAEED, 0xB2B7},{0xAEF4, 0xB2B8},{0xAEF8, 0xB2B9},{0xAEFC, 0xB2BA},{0xAF07, 0xB2BB}, - {0xAF08, 0xB2BC},{0xAF0D, 0xB2BD},{0xAF10, 0xB2BE},{0xAF2C, 0xB2BF},{0xAF2D, 0xB2C0},{0xAF30, 0xB2C1},{0xAF32, 0xB2C2},{0xAF34, 0xB2C3}, - {0xAF3C, 0xB2C4},{0xAF3D, 0xB2C5},{0xAF3F, 0xB2C6},{0xAF41, 0xB2C7},{0xAF42, 0xB2C8},{0xAF43, 0xB2C9},{0xAF48, 0xB2CA},{0xAF49, 0xB2CB}, - {0xAF50, 0xB2CC},{0xAF5C, 0xB2CD},{0xAF5D, 0xB2CE},{0xAF64, 0xB2CF},{0xAF65, 0xB2D0},{0xAF79, 0xB2D1},{0xAF80, 0xB2D2},{0xAF84, 0xB2D3}, - {0xAF88, 0xB2D4},{0xAF90, 0xB2D5},{0xAF91, 0xB2D6},{0xAF95, 0xB2D7},{0xAF9C, 0xB2D8},{0xAFB8, 0xB2D9},{0xAFB9, 0xB2DA},{0xAFBC, 0xB2DB}, - {0xAFC0, 0xB2DC},{0xAFC7, 0xB2DD},{0xAFC8, 0xB2DE},{0xAFC9, 0xB2DF},{0xAFCB, 0xB2E0},{0xAFCD, 0xB2E1},{0xAFCE, 0xB2E2},{0xAFD4, 0xB2E3}, - {0xAFDC, 0xB2E4},{0xAFE8, 0xB2E5},{0xAFE9, 0xB2E6},{0xAFF0, 0xB2E7},{0xAFF1, 0xB2E8},{0xAFF4, 0xB2E9},{0xAFF8, 0xB2EA},{0xB000, 0xB2EB}, - {0xB001, 0xB2EC},{0xB004, 0xB2ED},{0xB00C, 0xB2EE},{0xB010, 0xB2EF},{0xB014, 0xB2F0},{0xB01C, 0xB2F1},{0xB01D, 0xB2F2},{0xB028, 0xB2F3}, - {0xB044, 0xB2F4},{0xB045, 0xB2F5},{0xB048, 0xB2F6},{0xB04A, 0xB2F7},{0xB04C, 0xB2F8},{0xB04E, 0xB2F9},{0xB053, 0xB2FA},{0xB054, 0xB2FB}, - {0xB055, 0xB2FC},{0xB057, 0xB2FD},{0xB059, 0xB2FE},{0xB05D, 0xB3A1},{0xB07C, 0xB3A2},{0xB07D, 0xB3A3},{0xB080, 0xB3A4},{0xB084, 0xB3A5}, - {0xB08C, 0xB3A6},{0xB08D, 0xB3A7},{0xB08F, 0xB3A8},{0xB091, 0xB3A9},{0xB098, 0xB3AA},{0xB099, 0xB3AB},{0xB09A, 0xB3AC},{0xB09C, 0xB3AD}, - {0xB09F, 0xB3AE},{0xB0A0, 0xB3AF},{0xB0A1, 0xB3B0},{0xB0A2, 0xB3B1},{0xB0A8, 0xB3B2},{0xB0A9, 0xB3B3},{0xB0AB, 0xB3B4},{0xB0AC, 0xB3B5}, - {0xB0AD, 0xB3B6},{0xB0AE, 0xB3B7},{0xB0AF, 0xB3B8},{0xB0B1, 0xB3B9},{0xB0B3, 0xB3BA},{0xB0B4, 0xB3BB},{0xB0B5, 0xB3BC},{0xB0B8, 0xB3BD}, - {0xB0BC, 0xB3BE},{0xB0C4, 0xB3BF},{0xB0C5, 0xB3C0},{0xB0C7, 0xB3C1},{0xB0C8, 0xB3C2},{0xB0C9, 0xB3C3},{0xB0D0, 0xB3C4},{0xB0D1, 0xB3C5}, - {0xB0D4, 0xB3C6},{0xB0D8, 0xB3C7},{0xB0E0, 0xB3C8},{0xB0E5, 0xB3C9},{0xB108, 0xB3CA},{0xB109, 0xB3CB},{0xB10B, 0xB3CC},{0xB10C, 0xB3CD}, - {0xB110, 0xB3CE},{0xB112, 0xB3CF},{0xB113, 0xB3D0},{0xB118, 0xB3D1},{0xB119, 0xB3D2},{0xB11B, 0xB3D3},{0xB11C, 0xB3D4},{0xB11D, 0xB3D5}, - {0xB123, 0xB3D6},{0xB124, 0xB3D7},{0xB125, 0xB3D8},{0xB128, 0xB3D9},{0xB12C, 0xB3DA},{0xB134, 0xB3DB},{0xB135, 0xB3DC},{0xB137, 0xB3DD}, - {0xB138, 0xB3DE},{0xB139, 0xB3DF},{0xB140, 0xB3E0},{0xB141, 0xB3E1},{0xB144, 0xB3E2},{0xB148, 0xB3E3},{0xB150, 0xB3E4},{0xB151, 0xB3E5}, - {0xB154, 0xB3E6},{0xB155, 0xB3E7},{0xB158, 0xB3E8},{0xB15C, 0xB3E9},{0xB160, 0xB3EA},{0xB178, 0xB3EB},{0xB179, 0xB3EC},{0xB17C, 0xB3ED}, - {0xB180, 0xB3EE},{0xB182, 0xB3EF},{0xB188, 0xB3F0},{0xB189, 0xB3F1},{0xB18B, 0xB3F2},{0xB18D, 0xB3F3},{0xB192, 0xB3F4},{0xB193, 0xB3F5}, - {0xB194, 0xB3F6},{0xB198, 0xB3F7},{0xB19C, 0xB3F8},{0xB1A8, 0xB3F9},{0xB1CC, 0xB3FA},{0xB1D0, 0xB3FB},{0xB1D4, 0xB3FC},{0xB1DC, 0xB3FD}, - {0xB1DD, 0xB3FE},{0xB1DF, 0xB4A1},{0xB1E8, 0xB4A2},{0xB1E9, 0xB4A3},{0xB1EC, 0xB4A4},{0xB1F0, 0xB4A5},{0xB1F9, 0xB4A6},{0xB1FB, 0xB4A7}, - {0xB1FD, 0xB4A8},{0xB204, 0xB4A9},{0xB205, 0xB4AA},{0xB208, 0xB4AB},{0xB20B, 0xB4AC},{0xB20C, 0xB4AD},{0xB214, 0xB4AE},{0xB215, 0xB4AF}, - {0xB217, 0xB4B0},{0xB219, 0xB4B1},{0xB220, 0xB4B2},{0xB234, 0xB4B3},{0xB23C, 0xB4B4},{0xB258, 0xB4B5},{0xB25C, 0xB4B6},{0xB260, 0xB4B7}, - {0xB268, 0xB4B8},{0xB269, 0xB4B9},{0xB274, 0xB4BA},{0xB275, 0xB4BB},{0xB27C, 0xB4BC},{0xB284, 0xB4BD},{0xB285, 0xB4BE},{0xB289, 0xB4BF}, - {0xB290, 0xB4C0},{0xB291, 0xB4C1},{0xB294, 0xB4C2},{0xB298, 0xB4C3},{0xB299, 0xB4C4},{0xB29A, 0xB4C5},{0xB2A0, 0xB4C6},{0xB2A1, 0xB4C7}, - {0xB2A3, 0xB4C8},{0xB2A5, 0xB4C9},{0xB2A6, 0xB4CA},{0xB2AA, 0xB4CB},{0xB2AC, 0xB4CC},{0xB2B0, 0xB4CD},{0xB2B4, 0xB4CE},{0xB2C8, 0xB4CF}, - {0xB2C9, 0xB4D0},{0xB2CC, 0xB4D1},{0xB2D0, 0xB4D2},{0xB2D2, 0xB4D3},{0xB2D8, 0xB4D4},{0xB2D9, 0xB4D5},{0xB2DB, 0xB4D6},{0xB2DD, 0xB4D7}, - {0xB2E2, 0xB4D8},{0xB2E4, 0xB4D9},{0xB2E5, 0xB4DA},{0xB2E6, 0xB4DB},{0xB2E8, 0xB4DC},{0xB2EB, 0xB4DD},{0xB2EC, 0xB4DE},{0xB2ED, 0xB4DF}, - {0xB2EE, 0xB4E0},{0xB2EF, 0xB4E1},{0xB2F3, 0xB4E2},{0xB2F4, 0xB4E3},{0xB2F5, 0xB4E4},{0xB2F7, 0xB4E5},{0xB2F8, 0xB4E6},{0xB2F9, 0xB4E7}, - {0xB2FA, 0xB4E8},{0xB2FB, 0xB4E9},{0xB2FF, 0xB4EA},{0xB300, 0xB4EB},{0xB301, 0xB4EC},{0xB304, 0xB4ED},{0xB308, 0xB4EE},{0xB310, 0xB4EF}, - {0xB311, 0xB4F0},{0xB313, 0xB4F1},{0xB314, 0xB4F2},{0xB315, 0xB4F3},{0xB31C, 0xB4F4},{0xB354, 0xB4F5},{0xB355, 0xB4F6},{0xB356, 0xB4F7}, - {0xB358, 0xB4F8},{0xB35B, 0xB4F9},{0xB35C, 0xB4FA},{0xB35E, 0xB4FB},{0xB35F, 0xB4FC},{0xB364, 0xB4FD},{0xB365, 0xB4FE},{0xB367, 0xB5A1}, - {0xB369, 0xB5A2},{0xB36B, 0xB5A3},{0xB36E, 0xB5A4},{0xB370, 0xB5A5},{0xB371, 0xB5A6},{0xB374, 0xB5A7},{0xB378, 0xB5A8},{0xB380, 0xB5A9}, - {0xB381, 0xB5AA},{0xB383, 0xB5AB},{0xB384, 0xB5AC},{0xB385, 0xB5AD},{0xB38C, 0xB5AE},{0xB390, 0xB5AF},{0xB394, 0xB5B0},{0xB3A0, 0xB5B1}, - {0xB3A1, 0xB5B2},{0xB3A8, 0xB5B3},{0xB3AC, 0xB5B4},{0xB3C4, 0xB5B5},{0xB3C5, 0xB5B6},{0xB3C8, 0xB5B7},{0xB3CB, 0xB5B8},{0xB3CC, 0xB5B9}, - {0xB3CE, 0xB5BA},{0xB3D0, 0xB5BB},{0xB3D4, 0xB5BC},{0xB3D5, 0xB5BD},{0xB3D7, 0xB5BE},{0xB3D9, 0xB5BF},{0xB3DB, 0xB5C0},{0xB3DD, 0xB5C1}, - {0xB3E0, 0xB5C2},{0xB3E4, 0xB5C3},{0xB3E8, 0xB5C4},{0xB3FC, 0xB5C5},{0xB410, 0xB5C6},{0xB418, 0xB5C7},{0xB41C, 0xB5C8},{0xB420, 0xB5C9}, - {0xB428, 0xB5CA},{0xB429, 0xB5CB},{0xB42B, 0xB5CC},{0xB434, 0xB5CD},{0xB450, 0xB5CE},{0xB451, 0xB5CF},{0xB454, 0xB5D0},{0xB458, 0xB5D1}, - {0xB460, 0xB5D2},{0xB461, 0xB5D3},{0xB463, 0xB5D4},{0xB465, 0xB5D5},{0xB46C, 0xB5D6},{0xB480, 0xB5D7},{0xB488, 0xB5D8},{0xB49D, 0xB5D9}, - {0xB4A4, 0xB5DA},{0xB4A8, 0xB5DB},{0xB4AC, 0xB5DC},{0xB4B5, 0xB5DD},{0xB4B7, 0xB5DE},{0xB4B9, 0xB5DF},{0xB4C0, 0xB5E0},{0xB4C4, 0xB5E1}, - {0xB4C8, 0xB5E2},{0xB4D0, 0xB5E3},{0xB4D5, 0xB5E4},{0xB4DC, 0xB5E5},{0xB4DD, 0xB5E6},{0xB4E0, 0xB5E7},{0xB4E3, 0xB5E8},{0xB4E4, 0xB5E9}, - {0xB4E6, 0xB5EA},{0xB4EC, 0xB5EB},{0xB4ED, 0xB5EC},{0xB4EF, 0xB5ED},{0xB4F1, 0xB5EE},{0xB4F8, 0xB5EF},{0xB514, 0xB5F0},{0xB515, 0xB5F1}, - {0xB518, 0xB5F2},{0xB51B, 0xB5F3},{0xB51C, 0xB5F4},{0xB524, 0xB5F5},{0xB525, 0xB5F6},{0xB527, 0xB5F7},{0xB528, 0xB5F8},{0xB529, 0xB5F9}, - {0xB52A, 0xB5FA},{0xB530, 0xB5FB},{0xB531, 0xB5FC},{0xB534, 0xB5FD},{0xB538, 0xB5FE},{0xB540, 0xB6A1},{0xB541, 0xB6A2},{0xB543, 0xB6A3}, - {0xB544, 0xB6A4},{0xB545, 0xB6A5},{0xB54B, 0xB6A6},{0xB54C, 0xB6A7},{0xB54D, 0xB6A8},{0xB550, 0xB6A9},{0xB554, 0xB6AA},{0xB55C, 0xB6AB}, - {0xB55D, 0xB6AC},{0xB55F, 0xB6AD},{0xB560, 0xB6AE},{0xB561, 0xB6AF},{0xB5A0, 0xB6B0},{0xB5A1, 0xB6B1},{0xB5A4, 0xB6B2},{0xB5A8, 0xB6B3}, - {0xB5AA, 0xB6B4},{0xB5AB, 0xB6B5},{0xB5B0, 0xB6B6},{0xB5B1, 0xB6B7},{0xB5B3, 0xB6B8},{0xB5B4, 0xB6B9},{0xB5B5, 0xB6BA},{0xB5BB, 0xB6BB}, - {0xB5BC, 0xB6BC},{0xB5BD, 0xB6BD},{0xB5C0, 0xB6BE},{0xB5C4, 0xB6BF},{0xB5CC, 0xB6C0},{0xB5CD, 0xB6C1},{0xB5CF, 0xB6C2},{0xB5D0, 0xB6C3}, - {0xB5D1, 0xB6C4},{0xB5D8, 0xB6C5},{0xB5EC, 0xB6C6},{0xB610, 0xB6C7},{0xB611, 0xB6C8},{0xB614, 0xB6C9},{0xB618, 0xB6CA},{0xB625, 0xB6CB}, - {0xB62C, 0xB6CC},{0xB634, 0xB6CD},{0xB648, 0xB6CE},{0xB664, 0xB6CF},{0xB668, 0xB6D0},{0xB69C, 0xB6D1},{0xB69D, 0xB6D2},{0xB6A0, 0xB6D3}, - {0xB6A4, 0xB6D4},{0xB6AB, 0xB6D5},{0xB6AC, 0xB6D6},{0xB6B1, 0xB6D7},{0xB6D4, 0xB6D8},{0xB6F0, 0xB6D9},{0xB6F4, 0xB6DA},{0xB6F8, 0xB6DB}, - {0xB700, 0xB6DC},{0xB701, 0xB6DD},{0xB705, 0xB6DE},{0xB728, 0xB6DF},{0xB729, 0xB6E0},{0xB72C, 0xB6E1},{0xB72F, 0xB6E2},{0xB730, 0xB6E3}, - {0xB738, 0xB6E4},{0xB739, 0xB6E5},{0xB73B, 0xB6E6},{0xB744, 0xB6E7},{0xB748, 0xB6E8},{0xB74C, 0xB6E9},{0xB754, 0xB6EA},{0xB755, 0xB6EB}, - {0xB760, 0xB6EC},{0xB764, 0xB6ED},{0xB768, 0xB6EE},{0xB770, 0xB6EF},{0xB771, 0xB6F0},{0xB773, 0xB6F1},{0xB775, 0xB6F2},{0xB77C, 0xB6F3}, - {0xB77D, 0xB6F4},{0xB780, 0xB6F5},{0xB784, 0xB6F6},{0xB78C, 0xB6F7},{0xB78D, 0xB6F8},{0xB78F, 0xB6F9},{0xB790, 0xB6FA},{0xB791, 0xB6FB}, - {0xB792, 0xB6FC},{0xB796, 0xB6FD},{0xB797, 0xB6FE},{0xB798, 0xB7A1},{0xB799, 0xB7A2},{0xB79C, 0xB7A3},{0xB7A0, 0xB7A4},{0xB7A8, 0xB7A5}, - {0xB7A9, 0xB7A6},{0xB7AB, 0xB7A7},{0xB7AC, 0xB7A8},{0xB7AD, 0xB7A9},{0xB7B4, 0xB7AA},{0xB7B5, 0xB7AB},{0xB7B8, 0xB7AC},{0xB7C7, 0xB7AD}, - {0xB7C9, 0xB7AE},{0xB7EC, 0xB7AF},{0xB7ED, 0xB7B0},{0xB7F0, 0xB7B1},{0xB7F4, 0xB7B2},{0xB7FC, 0xB7B3},{0xB7FD, 0xB7B4},{0xB7FF, 0xB7B5}, - {0xB800, 0xB7B6},{0xB801, 0xB7B7},{0xB807, 0xB7B8},{0xB808, 0xB7B9},{0xB809, 0xB7BA},{0xB80C, 0xB7BB},{0xB810, 0xB7BC},{0xB818, 0xB7BD}, - {0xB819, 0xB7BE},{0xB81B, 0xB7BF},{0xB81D, 0xB7C0},{0xB824, 0xB7C1},{0xB825, 0xB7C2},{0xB828, 0xB7C3},{0xB82C, 0xB7C4},{0xB834, 0xB7C5}, - {0xB835, 0xB7C6},{0xB837, 0xB7C7},{0xB838, 0xB7C8},{0xB839, 0xB7C9},{0xB840, 0xB7CA},{0xB844, 0xB7CB},{0xB851, 0xB7CC},{0xB853, 0xB7CD}, - {0xB85C, 0xB7CE},{0xB85D, 0xB7CF},{0xB860, 0xB7D0},{0xB864, 0xB7D1},{0xB86C, 0xB7D2},{0xB86D, 0xB7D3},{0xB86F, 0xB7D4},{0xB871, 0xB7D5}, - {0xB878, 0xB7D6},{0xB87C, 0xB7D7},{0xB88D, 0xB7D8},{0xB8A8, 0xB7D9},{0xB8B0, 0xB7DA},{0xB8B4, 0xB7DB},{0xB8B8, 0xB7DC},{0xB8C0, 0xB7DD}, - {0xB8C1, 0xB7DE},{0xB8C3, 0xB7DF},{0xB8C5, 0xB7E0},{0xB8CC, 0xB7E1},{0xB8D0, 0xB7E2},{0xB8D4, 0xB7E3},{0xB8DD, 0xB7E4},{0xB8DF, 0xB7E5}, - {0xB8E1, 0xB7E6},{0xB8E8, 0xB7E7},{0xB8E9, 0xB7E8},{0xB8EC, 0xB7E9},{0xB8F0, 0xB7EA},{0xB8F8, 0xB7EB},{0xB8F9, 0xB7EC},{0xB8FB, 0xB7ED}, - {0xB8FD, 0xB7EE},{0xB904, 0xB7EF},{0xB918, 0xB7F0},{0xB920, 0xB7F1},{0xB93C, 0xB7F2},{0xB93D, 0xB7F3},{0xB940, 0xB7F4},{0xB944, 0xB7F5}, - {0xB94C, 0xB7F6},{0xB94F, 0xB7F7},{0xB951, 0xB7F8},{0xB958, 0xB7F9},{0xB959, 0xB7FA},{0xB95C, 0xB7FB},{0xB960, 0xB7FC},{0xB968, 0xB7FD}, - {0xB969, 0xB7FE},{0xB96B, 0xB8A1},{0xB96D, 0xB8A2},{0xB974, 0xB8A3},{0xB975, 0xB8A4},{0xB978, 0xB8A5},{0xB97C, 0xB8A6},{0xB984, 0xB8A7}, - {0xB985, 0xB8A8},{0xB987, 0xB8A9},{0xB989, 0xB8AA},{0xB98A, 0xB8AB},{0xB98D, 0xB8AC},{0xB98E, 0xB8AD},{0xB9AC, 0xB8AE},{0xB9AD, 0xB8AF}, - {0xB9B0, 0xB8B0},{0xB9B4, 0xB8B1},{0xB9BC, 0xB8B2},{0xB9BD, 0xB8B3},{0xB9BF, 0xB8B4},{0xB9C1, 0xB8B5},{0xB9C8, 0xB8B6},{0xB9C9, 0xB8B7}, - {0xB9CC, 0xB8B8},{0xB9CE, 0xB8B9},{0xB9CF, 0xB8BA},{0xB9D0, 0xB8BB},{0xB9D1, 0xB8BC},{0xB9D2, 0xB8BD},{0xB9D8, 0xB8BE},{0xB9D9, 0xB8BF}, - {0xB9DB, 0xB8C0},{0xB9DD, 0xB8C1},{0xB9DE, 0xB8C2},{0xB9E1, 0xB8C3},{0xB9E3, 0xB8C4},{0xB9E4, 0xB8C5},{0xB9E5, 0xB8C6},{0xB9E8, 0xB8C7}, - {0xB9EC, 0xB8C8},{0xB9F4, 0xB8C9},{0xB9F5, 0xB8CA},{0xB9F7, 0xB8CB},{0xB9F8, 0xB8CC},{0xB9F9, 0xB8CD},{0xB9FA, 0xB8CE},{0xBA00, 0xB8CF}, - {0xBA01, 0xB8D0},{0xBA08, 0xB8D1},{0xBA15, 0xB8D2},{0xBA38, 0xB8D3},{0xBA39, 0xB8D4},{0xBA3C, 0xB8D5},{0xBA40, 0xB8D6},{0xBA42, 0xB8D7}, - {0xBA48, 0xB8D8},{0xBA49, 0xB8D9},{0xBA4B, 0xB8DA},{0xBA4D, 0xB8DB},{0xBA4E, 0xB8DC},{0xBA53, 0xB8DD},{0xBA54, 0xB8DE},{0xBA55, 0xB8DF}, - {0xBA58, 0xB8E0},{0xBA5C, 0xB8E1},{0xBA64, 0xB8E2},{0xBA65, 0xB8E3},{0xBA67, 0xB8E4},{0xBA68, 0xB8E5},{0xBA69, 0xB8E6},{0xBA70, 0xB8E7}, - {0xBA71, 0xB8E8},{0xBA74, 0xB8E9},{0xBA78, 0xB8EA},{0xBA83, 0xB8EB},{0xBA84, 0xB8EC},{0xBA85, 0xB8ED},{0xBA87, 0xB8EE},{0xBA8C, 0xB8EF}, - {0xBAA8, 0xB8F0},{0xBAA9, 0xB8F1},{0xBAAB, 0xB8F2},{0xBAAC, 0xB8F3},{0xBAB0, 0xB8F4},{0xBAB2, 0xB8F5},{0xBAB8, 0xB8F6},{0xBAB9, 0xB8F7}, - {0xBABB, 0xB8F8},{0xBABD, 0xB8F9},{0xBAC4, 0xB8FA},{0xBAC8, 0xB8FB},{0xBAD8, 0xB8FC},{0xBAD9, 0xB8FD},{0xBAFC, 0xB8FE},{0xBB00, 0xB9A1}, - {0xBB04, 0xB9A2},{0xBB0D, 0xB9A3},{0xBB0F, 0xB9A4},{0xBB11, 0xB9A5},{0xBB18, 0xB9A6},{0xBB1C, 0xB9A7},{0xBB20, 0xB9A8},{0xBB29, 0xB9A9}, - {0xBB2B, 0xB9AA},{0xBB34, 0xB9AB},{0xBB35, 0xB9AC},{0xBB36, 0xB9AD},{0xBB38, 0xB9AE},{0xBB3B, 0xB9AF},{0xBB3C, 0xB9B0},{0xBB3D, 0xB9B1}, - {0xBB3E, 0xB9B2},{0xBB44, 0xB9B3},{0xBB45, 0xB9B4},{0xBB47, 0xB9B5},{0xBB49, 0xB9B6},{0xBB4D, 0xB9B7},{0xBB4F, 0xB9B8},{0xBB50, 0xB9B9}, - {0xBB54, 0xB9BA},{0xBB58, 0xB9BB},{0xBB61, 0xB9BC},{0xBB63, 0xB9BD},{0xBB6C, 0xB9BE},{0xBB88, 0xB9BF},{0xBB8C, 0xB9C0},{0xBB90, 0xB9C1}, - {0xBBA4, 0xB9C2},{0xBBA8, 0xB9C3},{0xBBAC, 0xB9C4},{0xBBB4, 0xB9C5},{0xBBB7, 0xB9C6},{0xBBC0, 0xB9C7},{0xBBC4, 0xB9C8},{0xBBC8, 0xB9C9}, - {0xBBD0, 0xB9CA},{0xBBD3, 0xB9CB},{0xBBF8, 0xB9CC},{0xBBF9, 0xB9CD},{0xBBFC, 0xB9CE},{0xBBFF, 0xB9CF},{0xBC00, 0xB9D0},{0xBC02, 0xB9D1}, - {0xBC08, 0xB9D2},{0xBC09, 0xB9D3},{0xBC0B, 0xB9D4},{0xBC0C, 0xB9D5},{0xBC0D, 0xB9D6},{0xBC0F, 0xB9D7},{0xBC11, 0xB9D8},{0xBC14, 0xB9D9}, - {0xBC15, 0xB9DA},{0xBC16, 0xB9DB},{0xBC17, 0xB9DC},{0xBC18, 0xB9DD},{0xBC1B, 0xB9DE},{0xBC1C, 0xB9DF},{0xBC1D, 0xB9E0},{0xBC1E, 0xB9E1}, - {0xBC1F, 0xB9E2},{0xBC24, 0xB9E3},{0xBC25, 0xB9E4},{0xBC27, 0xB9E5},{0xBC29, 0xB9E6},{0xBC2D, 0xB9E7},{0xBC30, 0xB9E8},{0xBC31, 0xB9E9}, - {0xBC34, 0xB9EA},{0xBC38, 0xB9EB},{0xBC40, 0xB9EC},{0xBC41, 0xB9ED},{0xBC43, 0xB9EE},{0xBC44, 0xB9EF},{0xBC45, 0xB9F0},{0xBC49, 0xB9F1}, - {0xBC4C, 0xB9F2},{0xBC4D, 0xB9F3},{0xBC50, 0xB9F4},{0xBC5D, 0xB9F5},{0xBC84, 0xB9F6},{0xBC85, 0xB9F7},{0xBC88, 0xB9F8},{0xBC8B, 0xB9F9}, - {0xBC8C, 0xB9FA},{0xBC8E, 0xB9FB},{0xBC94, 0xB9FC},{0xBC95, 0xB9FD},{0xBC97, 0xB9FE},{0xBC99, 0xBAA1},{0xBC9A, 0xBAA2},{0xBCA0, 0xBAA3}, - {0xBCA1, 0xBAA4},{0xBCA4, 0xBAA5},{0xBCA7, 0xBAA6},{0xBCA8, 0xBAA7},{0xBCB0, 0xBAA8},{0xBCB1, 0xBAA9},{0xBCB3, 0xBAAA},{0xBCB4, 0xBAAB}, - {0xBCB5, 0xBAAC},{0xBCBC, 0xBAAD},{0xBCBD, 0xBAAE},{0xBCC0, 0xBAAF},{0xBCC4, 0xBAB0},{0xBCCD, 0xBAB1},{0xBCCF, 0xBAB2},{0xBCD0, 0xBAB3}, - {0xBCD1, 0xBAB4},{0xBCD5, 0xBAB5},{0xBCD8, 0xBAB6},{0xBCDC, 0xBAB7},{0xBCF4, 0xBAB8},{0xBCF5, 0xBAB9},{0xBCF6, 0xBABA},{0xBCF8, 0xBABB}, - {0xBCFC, 0xBABC},{0xBD04, 0xBABD},{0xBD05, 0xBABE},{0xBD07, 0xBABF},{0xBD09, 0xBAC0},{0xBD10, 0xBAC1},{0xBD14, 0xBAC2},{0xBD24, 0xBAC3}, - {0xBD2C, 0xBAC4},{0xBD40, 0xBAC5},{0xBD48, 0xBAC6},{0xBD49, 0xBAC7},{0xBD4C, 0xBAC8},{0xBD50, 0xBAC9},{0xBD58, 0xBACA},{0xBD59, 0xBACB}, - {0xBD64, 0xBACC},{0xBD68, 0xBACD},{0xBD80, 0xBACE},{0xBD81, 0xBACF},{0xBD84, 0xBAD0},{0xBD87, 0xBAD1},{0xBD88, 0xBAD2},{0xBD89, 0xBAD3}, - {0xBD8A, 0xBAD4},{0xBD90, 0xBAD5},{0xBD91, 0xBAD6},{0xBD93, 0xBAD7},{0xBD95, 0xBAD8},{0xBD99, 0xBAD9},{0xBD9A, 0xBADA},{0xBD9C, 0xBADB}, - {0xBDA4, 0xBADC},{0xBDB0, 0xBADD},{0xBDB8, 0xBADE},{0xBDD4, 0xBADF},{0xBDD5, 0xBAE0},{0xBDD8, 0xBAE1},{0xBDDC, 0xBAE2},{0xBDE9, 0xBAE3}, - {0xBDF0, 0xBAE4},{0xBDF4, 0xBAE5},{0xBDF8, 0xBAE6},{0xBE00, 0xBAE7},{0xBE03, 0xBAE8},{0xBE05, 0xBAE9},{0xBE0C, 0xBAEA},{0xBE0D, 0xBAEB}, - {0xBE10, 0xBAEC},{0xBE14, 0xBAED},{0xBE1C, 0xBAEE},{0xBE1D, 0xBAEF},{0xBE1F, 0xBAF0},{0xBE44, 0xBAF1},{0xBE45, 0xBAF2},{0xBE48, 0xBAF3}, - {0xBE4C, 0xBAF4},{0xBE4E, 0xBAF5},{0xBE54, 0xBAF6},{0xBE55, 0xBAF7},{0xBE57, 0xBAF8},{0xBE59, 0xBAF9},{0xBE5A, 0xBAFA},{0xBE5B, 0xBAFB}, - {0xBE60, 0xBAFC},{0xBE61, 0xBAFD},{0xBE64, 0xBAFE},{0xBE68, 0xBBA1},{0xBE6A, 0xBBA2},{0xBE70, 0xBBA3},{0xBE71, 0xBBA4},{0xBE73, 0xBBA5}, - {0xBE74, 0xBBA6},{0xBE75, 0xBBA7},{0xBE7B, 0xBBA8},{0xBE7C, 0xBBA9},{0xBE7D, 0xBBAA},{0xBE80, 0xBBAB},{0xBE84, 0xBBAC},{0xBE8C, 0xBBAD}, - {0xBE8D, 0xBBAE},{0xBE8F, 0xBBAF},{0xBE90, 0xBBB0},{0xBE91, 0xBBB1},{0xBE98, 0xBBB2},{0xBE99, 0xBBB3},{0xBEA8, 0xBBB4},{0xBED0, 0xBBB5}, - {0xBED1, 0xBBB6},{0xBED4, 0xBBB7},{0xBED7, 0xBBB8},{0xBED8, 0xBBB9},{0xBEE0, 0xBBBA},{0xBEE3, 0xBBBB},{0xBEE4, 0xBBBC},{0xBEE5, 0xBBBD}, - {0xBEEC, 0xBBBE},{0xBF01, 0xBBBF},{0xBF08, 0xBBC0},{0xBF09, 0xBBC1},{0xBF18, 0xBBC2},{0xBF19, 0xBBC3},{0xBF1B, 0xBBC4},{0xBF1C, 0xBBC5}, - {0xBF1D, 0xBBC6},{0xBF40, 0xBBC7},{0xBF41, 0xBBC8},{0xBF44, 0xBBC9},{0xBF48, 0xBBCA},{0xBF50, 0xBBCB},{0xBF51, 0xBBCC},{0xBF55, 0xBBCD}, - {0xBF94, 0xBBCE},{0xBFB0, 0xBBCF},{0xBFC5, 0xBBD0},{0xBFCC, 0xBBD1},{0xBFCD, 0xBBD2},{0xBFD0, 0xBBD3},{0xBFD4, 0xBBD4},{0xBFDC, 0xBBD5}, - {0xBFDF, 0xBBD6},{0xBFE1, 0xBBD7},{0xC03C, 0xBBD8},{0xC051, 0xBBD9},{0xC058, 0xBBDA},{0xC05C, 0xBBDB},{0xC060, 0xBBDC},{0xC068, 0xBBDD}, - {0xC069, 0xBBDE},{0xC090, 0xBBDF},{0xC091, 0xBBE0},{0xC094, 0xBBE1},{0xC098, 0xBBE2},{0xC0A0, 0xBBE3},{0xC0A1, 0xBBE4},{0xC0A3, 0xBBE5}, - {0xC0A5, 0xBBE6},{0xC0AC, 0xBBE7},{0xC0AD, 0xBBE8},{0xC0AF, 0xBBE9},{0xC0B0, 0xBBEA},{0xC0B3, 0xBBEB},{0xC0B4, 0xBBEC},{0xC0B5, 0xBBED}, - {0xC0B6, 0xBBEE},{0xC0BC, 0xBBEF},{0xC0BD, 0xBBF0},{0xC0BF, 0xBBF1},{0xC0C0, 0xBBF2},{0xC0C1, 0xBBF3},{0xC0C5, 0xBBF4},{0xC0C8, 0xBBF5}, - {0xC0C9, 0xBBF6},{0xC0CC, 0xBBF7},{0xC0D0, 0xBBF8},{0xC0D8, 0xBBF9},{0xC0D9, 0xBBFA},{0xC0DB, 0xBBFB},{0xC0DC, 0xBBFC},{0xC0DD, 0xBBFD}, - {0xC0E4, 0xBBFE},{0xC0E5, 0xBCA1},{0xC0E8, 0xBCA2},{0xC0EC, 0xBCA3},{0xC0F4, 0xBCA4},{0xC0F5, 0xBCA5},{0xC0F7, 0xBCA6},{0xC0F9, 0xBCA7}, - {0xC100, 0xBCA8},{0xC104, 0xBCA9},{0xC108, 0xBCAA},{0xC110, 0xBCAB},{0xC115, 0xBCAC},{0xC11C, 0xBCAD},{0xC11D, 0xBCAE},{0xC11E, 0xBCAF}, - {0xC11F, 0xBCB0},{0xC120, 0xBCB1},{0xC123, 0xBCB2},{0xC124, 0xBCB3},{0xC126, 0xBCB4},{0xC127, 0xBCB5},{0xC12C, 0xBCB6},{0xC12D, 0xBCB7}, - {0xC12F, 0xBCB8},{0xC130, 0xBCB9},{0xC131, 0xBCBA},{0xC136, 0xBCBB},{0xC138, 0xBCBC},{0xC139, 0xBCBD},{0xC13C, 0xBCBE},{0xC140, 0xBCBF}, - {0xC148, 0xBCC0},{0xC149, 0xBCC1},{0xC14B, 0xBCC2},{0xC14C, 0xBCC3},{0xC14D, 0xBCC4},{0xC154, 0xBCC5},{0xC155, 0xBCC6},{0xC158, 0xBCC7}, - {0xC15C, 0xBCC8},{0xC164, 0xBCC9},{0xC165, 0xBCCA},{0xC167, 0xBCCB},{0xC168, 0xBCCC},{0xC169, 0xBCCD},{0xC170, 0xBCCE},{0xC174, 0xBCCF}, - {0xC178, 0xBCD0},{0xC185, 0xBCD1},{0xC18C, 0xBCD2},{0xC18D, 0xBCD3},{0xC18E, 0xBCD4},{0xC190, 0xBCD5},{0xC194, 0xBCD6},{0xC196, 0xBCD7}, - {0xC19C, 0xBCD8},{0xC19D, 0xBCD9},{0xC19F, 0xBCDA},{0xC1A1, 0xBCDB},{0xC1A5, 0xBCDC},{0xC1A8, 0xBCDD},{0xC1A9, 0xBCDE},{0xC1AC, 0xBCDF}, - {0xC1B0, 0xBCE0},{0xC1BD, 0xBCE1},{0xC1C4, 0xBCE2},{0xC1C8, 0xBCE3},{0xC1CC, 0xBCE4},{0xC1D4, 0xBCE5},{0xC1D7, 0xBCE6},{0xC1D8, 0xBCE7}, - {0xC1E0, 0xBCE8},{0xC1E4, 0xBCE9},{0xC1E8, 0xBCEA},{0xC1F0, 0xBCEB},{0xC1F1, 0xBCEC},{0xC1F3, 0xBCED},{0xC1FC, 0xBCEE},{0xC1FD, 0xBCEF}, - {0xC200, 0xBCF0},{0xC204, 0xBCF1},{0xC20C, 0xBCF2},{0xC20D, 0xBCF3},{0xC20F, 0xBCF4},{0xC211, 0xBCF5},{0xC218, 0xBCF6},{0xC219, 0xBCF7}, - {0xC21C, 0xBCF8},{0xC21F, 0xBCF9},{0xC220, 0xBCFA},{0xC228, 0xBCFB},{0xC229, 0xBCFC},{0xC22B, 0xBCFD},{0xC22D, 0xBCFE},{0xC22F, 0xBDA1}, - {0xC231, 0xBDA2},{0xC232, 0xBDA3},{0xC234, 0xBDA4},{0xC248, 0xBDA5},{0xC250, 0xBDA6},{0xC251, 0xBDA7},{0xC254, 0xBDA8},{0xC258, 0xBDA9}, - {0xC260, 0xBDAA},{0xC265, 0xBDAB},{0xC26C, 0xBDAC},{0xC26D, 0xBDAD},{0xC270, 0xBDAE},{0xC274, 0xBDAF},{0xC27C, 0xBDB0},{0xC27D, 0xBDB1}, - {0xC27F, 0xBDB2},{0xC281, 0xBDB3},{0xC288, 0xBDB4},{0xC289, 0xBDB5},{0xC290, 0xBDB6},{0xC298, 0xBDB7},{0xC29B, 0xBDB8},{0xC29D, 0xBDB9}, - {0xC2A4, 0xBDBA},{0xC2A5, 0xBDBB},{0xC2A8, 0xBDBC},{0xC2AC, 0xBDBD},{0xC2AD, 0xBDBE},{0xC2B4, 0xBDBF},{0xC2B5, 0xBDC0},{0xC2B7, 0xBDC1}, - {0xC2B9, 0xBDC2},{0xC2DC, 0xBDC3},{0xC2DD, 0xBDC4},{0xC2E0, 0xBDC5},{0xC2E3, 0xBDC6},{0xC2E4, 0xBDC7},{0xC2EB, 0xBDC8},{0xC2EC, 0xBDC9}, - {0xC2ED, 0xBDCA},{0xC2EF, 0xBDCB},{0xC2F1, 0xBDCC},{0xC2F6, 0xBDCD},{0xC2F8, 0xBDCE},{0xC2F9, 0xBDCF},{0xC2FB, 0xBDD0},{0xC2FC, 0xBDD1}, - {0xC300, 0xBDD2},{0xC308, 0xBDD3},{0xC309, 0xBDD4},{0xC30C, 0xBDD5},{0xC30D, 0xBDD6},{0xC313, 0xBDD7},{0xC314, 0xBDD8},{0xC315, 0xBDD9}, - {0xC318, 0xBDDA},{0xC31C, 0xBDDB},{0xC324, 0xBDDC},{0xC325, 0xBDDD},{0xC328, 0xBDDE},{0xC329, 0xBDDF},{0xC345, 0xBDE0},{0xC368, 0xBDE1}, - {0xC369, 0xBDE2},{0xC36C, 0xBDE3},{0xC370, 0xBDE4},{0xC372, 0xBDE5},{0xC378, 0xBDE6},{0xC379, 0xBDE7},{0xC37C, 0xBDE8},{0xC37D, 0xBDE9}, - {0xC384, 0xBDEA},{0xC388, 0xBDEB},{0xC38C, 0xBDEC},{0xC3C0, 0xBDED},{0xC3D8, 0xBDEE},{0xC3D9, 0xBDEF},{0xC3DC, 0xBDF0},{0xC3DF, 0xBDF1}, - {0xC3E0, 0xBDF2},{0xC3E2, 0xBDF3},{0xC3E8, 0xBDF4},{0xC3E9, 0xBDF5},{0xC3ED, 0xBDF6},{0xC3F4, 0xBDF7},{0xC3F5, 0xBDF8},{0xC3F8, 0xBDF9}, - {0xC408, 0xBDFA},{0xC410, 0xBDFB},{0xC424, 0xBDFC},{0xC42C, 0xBDFD},{0xC430, 0xBDFE},{0xC434, 0xBEA1},{0xC43C, 0xBEA2},{0xC43D, 0xBEA3}, - {0xC448, 0xBEA4},{0xC464, 0xBEA5},{0xC465, 0xBEA6},{0xC468, 0xBEA7},{0xC46C, 0xBEA8},{0xC474, 0xBEA9},{0xC475, 0xBEAA},{0xC479, 0xBEAB}, - {0xC480, 0xBEAC},{0xC494, 0xBEAD},{0xC49C, 0xBEAE},{0xC4B8, 0xBEAF},{0xC4BC, 0xBEB0},{0xC4E9, 0xBEB1},{0xC4F0, 0xBEB2},{0xC4F1, 0xBEB3}, - {0xC4F4, 0xBEB4},{0xC4F8, 0xBEB5},{0xC4FA, 0xBEB6},{0xC4FF, 0xBEB7},{0xC500, 0xBEB8},{0xC501, 0xBEB9},{0xC50C, 0xBEBA},{0xC510, 0xBEBB}, - {0xC514, 0xBEBC},{0xC51C, 0xBEBD},{0xC528, 0xBEBE},{0xC529, 0xBEBF},{0xC52C, 0xBEC0},{0xC530, 0xBEC1},{0xC538, 0xBEC2},{0xC539, 0xBEC3}, - {0xC53B, 0xBEC4},{0xC53D, 0xBEC5},{0xC544, 0xBEC6},{0xC545, 0xBEC7},{0xC548, 0xBEC8},{0xC549, 0xBEC9},{0xC54A, 0xBECA},{0xC54C, 0xBECB}, - {0xC54D, 0xBECC},{0xC54E, 0xBECD},{0xC553, 0xBECE},{0xC554, 0xBECF},{0xC555, 0xBED0},{0xC557, 0xBED1},{0xC558, 0xBED2},{0xC559, 0xBED3}, - {0xC55D, 0xBED4},{0xC55E, 0xBED5},{0xC560, 0xBED6},{0xC561, 0xBED7},{0xC564, 0xBED8},{0xC568, 0xBED9},{0xC570, 0xBEDA},{0xC571, 0xBEDB}, - {0xC573, 0xBEDC},{0xC574, 0xBEDD},{0xC575, 0xBEDE},{0xC57C, 0xBEDF},{0xC57D, 0xBEE0},{0xC580, 0xBEE1},{0xC584, 0xBEE2},{0xC587, 0xBEE3}, - {0xC58C, 0xBEE4},{0xC58D, 0xBEE5},{0xC58F, 0xBEE6},{0xC591, 0xBEE7},{0xC595, 0xBEE8},{0xC597, 0xBEE9},{0xC598, 0xBEEA},{0xC59C, 0xBEEB}, - {0xC5A0, 0xBEEC},{0xC5A9, 0xBEED},{0xC5B4, 0xBEEE},{0xC5B5, 0xBEEF},{0xC5B8, 0xBEF0},{0xC5B9, 0xBEF1},{0xC5BB, 0xBEF2},{0xC5BC, 0xBEF3}, - {0xC5BD, 0xBEF4},{0xC5BE, 0xBEF5},{0xC5C4, 0xBEF6},{0xC5C5, 0xBEF7},{0xC5C6, 0xBEF8},{0xC5C7, 0xBEF9},{0xC5C8, 0xBEFA},{0xC5C9, 0xBEFB}, - {0xC5CA, 0xBEFC},{0xC5CC, 0xBEFD},{0xC5CE, 0xBEFE},{0xC5D0, 0xBFA1},{0xC5D1, 0xBFA2},{0xC5D4, 0xBFA3},{0xC5D8, 0xBFA4},{0xC5E0, 0xBFA5}, - {0xC5E1, 0xBFA6},{0xC5E3, 0xBFA7},{0xC5E5, 0xBFA8},{0xC5EC, 0xBFA9},{0xC5ED, 0xBFAA},{0xC5EE, 0xBFAB},{0xC5F0, 0xBFAC},{0xC5F4, 0xBFAD}, - {0xC5F6, 0xBFAE},{0xC5F7, 0xBFAF},{0xC5FC, 0xBFB0},{0xC5FD, 0xBFB1},{0xC5FE, 0xBFB2},{0xC5FF, 0xBFB3},{0xC600, 0xBFB4},{0xC601, 0xBFB5}, - {0xC605, 0xBFB6},{0xC606, 0xBFB7},{0xC607, 0xBFB8},{0xC608, 0xBFB9},{0xC60C, 0xBFBA},{0xC610, 0xBFBB},{0xC618, 0xBFBC},{0xC619, 0xBFBD}, - {0xC61B, 0xBFBE},{0xC61C, 0xBFBF},{0xC624, 0xBFC0},{0xC625, 0xBFC1},{0xC628, 0xBFC2},{0xC62C, 0xBFC3},{0xC62D, 0xBFC4},{0xC62E, 0xBFC5}, - {0xC630, 0xBFC6},{0xC633, 0xBFC7},{0xC634, 0xBFC8},{0xC635, 0xBFC9},{0xC637, 0xBFCA},{0xC639, 0xBFCB},{0xC63B, 0xBFCC},{0xC640, 0xBFCD}, - {0xC641, 0xBFCE},{0xC644, 0xBFCF},{0xC648, 0xBFD0},{0xC650, 0xBFD1},{0xC651, 0xBFD2},{0xC653, 0xBFD3},{0xC654, 0xBFD4},{0xC655, 0xBFD5}, - {0xC65C, 0xBFD6},{0xC65D, 0xBFD7},{0xC660, 0xBFD8},{0xC66C, 0xBFD9},{0xC66F, 0xBFDA},{0xC671, 0xBFDB},{0xC678, 0xBFDC},{0xC679, 0xBFDD}, - {0xC67C, 0xBFDE},{0xC680, 0xBFDF},{0xC688, 0xBFE0},{0xC689, 0xBFE1},{0xC68B, 0xBFE2},{0xC68D, 0xBFE3},{0xC694, 0xBFE4},{0xC695, 0xBFE5}, - {0xC698, 0xBFE6},{0xC69C, 0xBFE7},{0xC6A4, 0xBFE8},{0xC6A5, 0xBFE9},{0xC6A7, 0xBFEA},{0xC6A9, 0xBFEB},{0xC6B0, 0xBFEC},{0xC6B1, 0xBFED}, - {0xC6B4, 0xBFEE},{0xC6B8, 0xBFEF},{0xC6B9, 0xBFF0},{0xC6BA, 0xBFF1},{0xC6C0, 0xBFF2},{0xC6C1, 0xBFF3},{0xC6C3, 0xBFF4},{0xC6C5, 0xBFF5}, - {0xC6CC, 0xBFF6},{0xC6CD, 0xBFF7},{0xC6D0, 0xBFF8},{0xC6D4, 0xBFF9},{0xC6DC, 0xBFFA},{0xC6DD, 0xBFFB},{0xC6E0, 0xBFFC},{0xC6E1, 0xBFFD}, - {0xC6E8, 0xBFFE},{0xC6E9, 0xC0A1},{0xC6EC, 0xC0A2},{0xC6F0, 0xC0A3},{0xC6F8, 0xC0A4},{0xC6F9, 0xC0A5},{0xC6FD, 0xC0A6},{0xC704, 0xC0A7}, - {0xC705, 0xC0A8},{0xC708, 0xC0A9},{0xC70C, 0xC0AA},{0xC714, 0xC0AB},{0xC715, 0xC0AC},{0xC717, 0xC0AD},{0xC719, 0xC0AE},{0xC720, 0xC0AF}, - {0xC721, 0xC0B0},{0xC724, 0xC0B1},{0xC728, 0xC0B2},{0xC730, 0xC0B3},{0xC731, 0xC0B4},{0xC733, 0xC0B5},{0xC735, 0xC0B6},{0xC737, 0xC0B7}, - {0xC73C, 0xC0B8},{0xC73D, 0xC0B9},{0xC740, 0xC0BA},{0xC744, 0xC0BB},{0xC74A, 0xC0BC},{0xC74C, 0xC0BD},{0xC74D, 0xC0BE},{0xC74F, 0xC0BF}, - {0xC751, 0xC0C0},{0xC752, 0xC0C1},{0xC753, 0xC0C2},{0xC754, 0xC0C3},{0xC755, 0xC0C4},{0xC756, 0xC0C5},{0xC757, 0xC0C6},{0xC758, 0xC0C7}, - {0xC75C, 0xC0C8},{0xC760, 0xC0C9},{0xC768, 0xC0CA},{0xC76B, 0xC0CB},{0xC774, 0xC0CC},{0xC775, 0xC0CD},{0xC778, 0xC0CE},{0xC77C, 0xC0CF}, - {0xC77D, 0xC0D0},{0xC77E, 0xC0D1},{0xC783, 0xC0D2},{0xC784, 0xC0D3},{0xC785, 0xC0D4},{0xC787, 0xC0D5},{0xC788, 0xC0D6},{0xC789, 0xC0D7}, - {0xC78A, 0xC0D8},{0xC78E, 0xC0D9},{0xC790, 0xC0DA},{0xC791, 0xC0DB},{0xC794, 0xC0DC},{0xC796, 0xC0DD},{0xC797, 0xC0DE},{0xC798, 0xC0DF}, - {0xC79A, 0xC0E0},{0xC7A0, 0xC0E1},{0xC7A1, 0xC0E2},{0xC7A3, 0xC0E3},{0xC7A4, 0xC0E4},{0xC7A5, 0xC0E5},{0xC7A6, 0xC0E6},{0xC7AC, 0xC0E7}, - {0xC7AD, 0xC0E8},{0xC7B0, 0xC0E9},{0xC7B4, 0xC0EA},{0xC7BC, 0xC0EB},{0xC7BD, 0xC0EC},{0xC7BF, 0xC0ED},{0xC7C0, 0xC0EE},{0xC7C1, 0xC0EF}, - {0xC7C8, 0xC0F0},{0xC7C9, 0xC0F1},{0xC7CC, 0xC0F2},{0xC7CE, 0xC0F3},{0xC7D0, 0xC0F4},{0xC7D8, 0xC0F5},{0xC7DD, 0xC0F6},{0xC7E4, 0xC0F7}, - {0xC7E8, 0xC0F8},{0xC7EC, 0xC0F9},{0xC800, 0xC0FA},{0xC801, 0xC0FB},{0xC804, 0xC0FC},{0xC808, 0xC0FD},{0xC80A, 0xC0FE},{0xC810, 0xC1A1}, - {0xC811, 0xC1A2},{0xC813, 0xC1A3},{0xC815, 0xC1A4},{0xC816, 0xC1A5},{0xC81C, 0xC1A6},{0xC81D, 0xC1A7},{0xC820, 0xC1A8},{0xC824, 0xC1A9}, - {0xC82C, 0xC1AA},{0xC82D, 0xC1AB},{0xC82F, 0xC1AC},{0xC831, 0xC1AD},{0xC838, 0xC1AE},{0xC83C, 0xC1AF},{0xC840, 0xC1B0},{0xC848, 0xC1B1}, - {0xC849, 0xC1B2},{0xC84C, 0xC1B3},{0xC84D, 0xC1B4},{0xC854, 0xC1B5},{0xC870, 0xC1B6},{0xC871, 0xC1B7},{0xC874, 0xC1B8},{0xC878, 0xC1B9}, - {0xC87A, 0xC1BA},{0xC880, 0xC1BB},{0xC881, 0xC1BC},{0xC883, 0xC1BD},{0xC885, 0xC1BE},{0xC886, 0xC1BF},{0xC887, 0xC1C0},{0xC88B, 0xC1C1}, - {0xC88C, 0xC1C2},{0xC88D, 0xC1C3},{0xC894, 0xC1C4},{0xC89D, 0xC1C5},{0xC89F, 0xC1C6},{0xC8A1, 0xC1C7},{0xC8A8, 0xC1C8},{0xC8BC, 0xC1C9}, - {0xC8BD, 0xC1CA},{0xC8C4, 0xC1CB},{0xC8C8, 0xC1CC},{0xC8CC, 0xC1CD},{0xC8D4, 0xC1CE},{0xC8D5, 0xC1CF},{0xC8D7, 0xC1D0},{0xC8D9, 0xC1D1}, - {0xC8E0, 0xC1D2},{0xC8E1, 0xC1D3},{0xC8E4, 0xC1D4},{0xC8F5, 0xC1D5},{0xC8FC, 0xC1D6},{0xC8FD, 0xC1D7},{0xC900, 0xC1D8},{0xC904, 0xC1D9}, - {0xC905, 0xC1DA},{0xC906, 0xC1DB},{0xC90C, 0xC1DC},{0xC90D, 0xC1DD},{0xC90F, 0xC1DE},{0xC911, 0xC1DF},{0xC918, 0xC1E0},{0xC92C, 0xC1E1}, - {0xC934, 0xC1E2},{0xC950, 0xC1E3},{0xC951, 0xC1E4},{0xC954, 0xC1E5},{0xC958, 0xC1E6},{0xC960, 0xC1E7},{0xC961, 0xC1E8},{0xC963, 0xC1E9}, - {0xC96C, 0xC1EA},{0xC970, 0xC1EB},{0xC974, 0xC1EC},{0xC97C, 0xC1ED},{0xC988, 0xC1EE},{0xC989, 0xC1EF},{0xC98C, 0xC1F0},{0xC990, 0xC1F1}, - {0xC998, 0xC1F2},{0xC999, 0xC1F3},{0xC99B, 0xC1F4},{0xC99D, 0xC1F5},{0xC9C0, 0xC1F6},{0xC9C1, 0xC1F7},{0xC9C4, 0xC1F8},{0xC9C7, 0xC1F9}, - {0xC9C8, 0xC1FA},{0xC9CA, 0xC1FB},{0xC9D0, 0xC1FC},{0xC9D1, 0xC1FD},{0xC9D3, 0xC1FE},{0xC9D5, 0xC2A1},{0xC9D6, 0xC2A2},{0xC9D9, 0xC2A3}, - {0xC9DA, 0xC2A4},{0xC9DC, 0xC2A5},{0xC9DD, 0xC2A6},{0xC9E0, 0xC2A7},{0xC9E2, 0xC2A8},{0xC9E4, 0xC2A9},{0xC9E7, 0xC2AA},{0xC9EC, 0xC2AB}, - {0xC9ED, 0xC2AC},{0xC9EF, 0xC2AD},{0xC9F0, 0xC2AE},{0xC9F1, 0xC2AF},{0xC9F8, 0xC2B0},{0xC9F9, 0xC2B1},{0xC9FC, 0xC2B2},{0xCA00, 0xC2B3}, - {0xCA08, 0xC2B4},{0xCA09, 0xC2B5},{0xCA0B, 0xC2B6},{0xCA0C, 0xC2B7},{0xCA0D, 0xC2B8},{0xCA14, 0xC2B9},{0xCA18, 0xC2BA},{0xCA29, 0xC2BB}, - {0xCA4C, 0xC2BC},{0xCA4D, 0xC2BD},{0xCA50, 0xC2BE},{0xCA54, 0xC2BF},{0xCA5C, 0xC2C0},{0xCA5D, 0xC2C1},{0xCA5F, 0xC2C2},{0xCA60, 0xC2C3}, - {0xCA61, 0xC2C4},{0xCA68, 0xC2C5},{0xCA7D, 0xC2C6},{0xCA84, 0xC2C7},{0xCA98, 0xC2C8},{0xCABC, 0xC2C9},{0xCABD, 0xC2CA},{0xCAC0, 0xC2CB}, - {0xCAC4, 0xC2CC},{0xCACC, 0xC2CD},{0xCACD, 0xC2CE},{0xCACF, 0xC2CF},{0xCAD1, 0xC2D0},{0xCAD3, 0xC2D1},{0xCAD8, 0xC2D2},{0xCAD9, 0xC2D3}, - {0xCAE0, 0xC2D4},{0xCAEC, 0xC2D5},{0xCAF4, 0xC2D6},{0xCB08, 0xC2D7},{0xCB10, 0xC2D8},{0xCB14, 0xC2D9},{0xCB18, 0xC2DA},{0xCB20, 0xC2DB}, - {0xCB21, 0xC2DC},{0xCB41, 0xC2DD},{0xCB48, 0xC2DE},{0xCB49, 0xC2DF},{0xCB4C, 0xC2E0},{0xCB50, 0xC2E1},{0xCB58, 0xC2E2},{0xCB59, 0xC2E3}, - {0xCB5D, 0xC2E4},{0xCB64, 0xC2E5},{0xCB78, 0xC2E6},{0xCB79, 0xC2E7},{0xCB9C, 0xC2E8},{0xCBB8, 0xC2E9},{0xCBD4, 0xC2EA},{0xCBE4, 0xC2EB}, - {0xCBE7, 0xC2EC},{0xCBE9, 0xC2ED},{0xCC0C, 0xC2EE},{0xCC0D, 0xC2EF},{0xCC10, 0xC2F0},{0xCC14, 0xC2F1},{0xCC1C, 0xC2F2},{0xCC1D, 0xC2F3}, - {0xCC21, 0xC2F4},{0xCC22, 0xC2F5},{0xCC27, 0xC2F6},{0xCC28, 0xC2F7},{0xCC29, 0xC2F8},{0xCC2C, 0xC2F9},{0xCC2E, 0xC2FA},{0xCC30, 0xC2FB}, - {0xCC38, 0xC2FC},{0xCC39, 0xC2FD},{0xCC3B, 0xC2FE},{0xCC3C, 0xC3A1},{0xCC3D, 0xC3A2},{0xCC3E, 0xC3A3},{0xCC44, 0xC3A4},{0xCC45, 0xC3A5}, - {0xCC48, 0xC3A6},{0xCC4C, 0xC3A7},{0xCC54, 0xC3A8},{0xCC55, 0xC3A9},{0xCC57, 0xC3AA},{0xCC58, 0xC3AB},{0xCC59, 0xC3AC},{0xCC60, 0xC3AD}, - {0xCC64, 0xC3AE},{0xCC66, 0xC3AF},{0xCC68, 0xC3B0},{0xCC70, 0xC3B1},{0xCC75, 0xC3B2},{0xCC98, 0xC3B3},{0xCC99, 0xC3B4},{0xCC9C, 0xC3B5}, - {0xCCA0, 0xC3B6},{0xCCA8, 0xC3B7},{0xCCA9, 0xC3B8},{0xCCAB, 0xC3B9},{0xCCAC, 0xC3BA},{0xCCAD, 0xC3BB},{0xCCB4, 0xC3BC},{0xCCB5, 0xC3BD}, - {0xCCB8, 0xC3BE},{0xCCBC, 0xC3BF},{0xCCC4, 0xC3C0},{0xCCC5, 0xC3C1},{0xCCC7, 0xC3C2},{0xCCC9, 0xC3C3},{0xCCD0, 0xC3C4},{0xCCD4, 0xC3C5}, - {0xCCE4, 0xC3C6},{0xCCEC, 0xC3C7},{0xCCF0, 0xC3C8},{0xCD01, 0xC3C9},{0xCD08, 0xC3CA},{0xCD09, 0xC3CB},{0xCD0C, 0xC3CC},{0xCD10, 0xC3CD}, - {0xCD18, 0xC3CE},{0xCD19, 0xC3CF},{0xCD1B, 0xC3D0},{0xCD1D, 0xC3D1},{0xCD24, 0xC3D2},{0xCD28, 0xC3D3},{0xCD2C, 0xC3D4},{0xCD39, 0xC3D5}, - {0xCD5C, 0xC3D6},{0xCD60, 0xC3D7},{0xCD64, 0xC3D8},{0xCD6C, 0xC3D9},{0xCD6D, 0xC3DA},{0xCD6F, 0xC3DB},{0xCD71, 0xC3DC},{0xCD78, 0xC3DD}, - {0xCD88, 0xC3DE},{0xCD94, 0xC3DF},{0xCD95, 0xC3E0},{0xCD98, 0xC3E1},{0xCD9C, 0xC3E2},{0xCDA4, 0xC3E3},{0xCDA5, 0xC3E4},{0xCDA7, 0xC3E5}, - {0xCDA9, 0xC3E6},{0xCDB0, 0xC3E7},{0xCDC4, 0xC3E8},{0xCDCC, 0xC3E9},{0xCDD0, 0xC3EA},{0xCDE8, 0xC3EB},{0xCDEC, 0xC3EC},{0xCDF0, 0xC3ED}, - {0xCDF8, 0xC3EE},{0xCDF9, 0xC3EF},{0xCDFB, 0xC3F0},{0xCDFD, 0xC3F1},{0xCE04, 0xC3F2},{0xCE08, 0xC3F3},{0xCE0C, 0xC3F4},{0xCE14, 0xC3F5}, - {0xCE19, 0xC3F6},{0xCE20, 0xC3F7},{0xCE21, 0xC3F8},{0xCE24, 0xC3F9},{0xCE28, 0xC3FA},{0xCE30, 0xC3FB},{0xCE31, 0xC3FC},{0xCE33, 0xC3FD}, - {0xCE35, 0xC3FE},{0xCE58, 0xC4A1},{0xCE59, 0xC4A2},{0xCE5C, 0xC4A3},{0xCE5F, 0xC4A4},{0xCE60, 0xC4A5},{0xCE61, 0xC4A6},{0xCE68, 0xC4A7}, - {0xCE69, 0xC4A8},{0xCE6B, 0xC4A9},{0xCE6D, 0xC4AA},{0xCE74, 0xC4AB},{0xCE75, 0xC4AC},{0xCE78, 0xC4AD},{0xCE7C, 0xC4AE},{0xCE84, 0xC4AF}, - {0xCE85, 0xC4B0},{0xCE87, 0xC4B1},{0xCE89, 0xC4B2},{0xCE90, 0xC4B3},{0xCE91, 0xC4B4},{0xCE94, 0xC4B5},{0xCE98, 0xC4B6},{0xCEA0, 0xC4B7}, - {0xCEA1, 0xC4B8},{0xCEA3, 0xC4B9},{0xCEA4, 0xC4BA},{0xCEA5, 0xC4BB},{0xCEAC, 0xC4BC},{0xCEAD, 0xC4BD},{0xCEC1, 0xC4BE},{0xCEE4, 0xC4BF}, - {0xCEE5, 0xC4C0},{0xCEE8, 0xC4C1},{0xCEEB, 0xC4C2},{0xCEEC, 0xC4C3},{0xCEF4, 0xC4C4},{0xCEF5, 0xC4C5},{0xCEF7, 0xC4C6},{0xCEF8, 0xC4C7}, - {0xCEF9, 0xC4C8},{0xCF00, 0xC4C9},{0xCF01, 0xC4CA},{0xCF04, 0xC4CB},{0xCF08, 0xC4CC},{0xCF10, 0xC4CD},{0xCF11, 0xC4CE},{0xCF13, 0xC4CF}, - {0xCF15, 0xC4D0},{0xCF1C, 0xC4D1},{0xCF20, 0xC4D2},{0xCF24, 0xC4D3},{0xCF2C, 0xC4D4},{0xCF2D, 0xC4D5},{0xCF2F, 0xC4D6},{0xCF30, 0xC4D7}, - {0xCF31, 0xC4D8},{0xCF38, 0xC4D9},{0xCF54, 0xC4DA},{0xCF55, 0xC4DB},{0xCF58, 0xC4DC},{0xCF5C, 0xC4DD},{0xCF64, 0xC4DE},{0xCF65, 0xC4DF}, - {0xCF67, 0xC4E0},{0xCF69, 0xC4E1},{0xCF70, 0xC4E2},{0xCF71, 0xC4E3},{0xCF74, 0xC4E4},{0xCF78, 0xC4E5},{0xCF80, 0xC4E6},{0xCF85, 0xC4E7}, - {0xCF8C, 0xC4E8},{0xCFA1, 0xC4E9},{0xCFA8, 0xC4EA},{0xCFB0, 0xC4EB},{0xCFC4, 0xC4EC},{0xCFE0, 0xC4ED},{0xCFE1, 0xC4EE},{0xCFE4, 0xC4EF}, - {0xCFE8, 0xC4F0},{0xCFF0, 0xC4F1},{0xCFF1, 0xC4F2},{0xCFF3, 0xC4F3},{0xCFF5, 0xC4F4},{0xCFFC, 0xC4F5},{0xD000, 0xC4F6},{0xD004, 0xC4F7}, - {0xD011, 0xC4F8},{0xD018, 0xC4F9},{0xD02D, 0xC4FA},{0xD034, 0xC4FB},{0xD035, 0xC4FC},{0xD038, 0xC4FD},{0xD03C, 0xC4FE},{0xD044, 0xC5A1}, - {0xD045, 0xC5A2},{0xD047, 0xC5A3},{0xD049, 0xC5A4},{0xD050, 0xC5A5},{0xD054, 0xC5A6},{0xD058, 0xC5A7},{0xD060, 0xC5A8},{0xD06C, 0xC5A9}, - {0xD06D, 0xC5AA},{0xD070, 0xC5AB},{0xD074, 0xC5AC},{0xD07C, 0xC5AD},{0xD07D, 0xC5AE},{0xD081, 0xC5AF},{0xD0A4, 0xC5B0},{0xD0A5, 0xC5B1}, - {0xD0A8, 0xC5B2},{0xD0AC, 0xC5B3},{0xD0B4, 0xC5B4},{0xD0B5, 0xC5B5},{0xD0B7, 0xC5B6},{0xD0B9, 0xC5B7},{0xD0C0, 0xC5B8},{0xD0C1, 0xC5B9}, - {0xD0C4, 0xC5BA},{0xD0C8, 0xC5BB},{0xD0C9, 0xC5BC},{0xD0D0, 0xC5BD},{0xD0D1, 0xC5BE},{0xD0D3, 0xC5BF},{0xD0D4, 0xC5C0},{0xD0D5, 0xC5C1}, - {0xD0DC, 0xC5C2},{0xD0DD, 0xC5C3},{0xD0E0, 0xC5C4},{0xD0E4, 0xC5C5},{0xD0EC, 0xC5C6},{0xD0ED, 0xC5C7},{0xD0EF, 0xC5C8},{0xD0F0, 0xC5C9}, - {0xD0F1, 0xC5CA},{0xD0F8, 0xC5CB},{0xD10D, 0xC5CC},{0xD130, 0xC5CD},{0xD131, 0xC5CE},{0xD134, 0xC5CF},{0xD138, 0xC5D0},{0xD13A, 0xC5D1}, - {0xD140, 0xC5D2},{0xD141, 0xC5D3},{0xD143, 0xC5D4},{0xD144, 0xC5D5},{0xD145, 0xC5D6},{0xD14C, 0xC5D7},{0xD14D, 0xC5D8},{0xD150, 0xC5D9}, - {0xD154, 0xC5DA},{0xD15C, 0xC5DB},{0xD15D, 0xC5DC},{0xD15F, 0xC5DD},{0xD161, 0xC5DE},{0xD168, 0xC5DF},{0xD16C, 0xC5E0},{0xD17C, 0xC5E1}, - {0xD184, 0xC5E2},{0xD188, 0xC5E3},{0xD1A0, 0xC5E4},{0xD1A1, 0xC5E5},{0xD1A4, 0xC5E6},{0xD1A8, 0xC5E7},{0xD1B0, 0xC5E8},{0xD1B1, 0xC5E9}, - {0xD1B3, 0xC5EA},{0xD1B5, 0xC5EB},{0xD1BA, 0xC5EC},{0xD1BC, 0xC5ED},{0xD1C0, 0xC5EE},{0xD1D8, 0xC5EF},{0xD1F4, 0xC5F0},{0xD1F8, 0xC5F1}, - {0xD207, 0xC5F2},{0xD209, 0xC5F3},{0xD210, 0xC5F4},{0xD22C, 0xC5F5},{0xD22D, 0xC5F6},{0xD230, 0xC5F7},{0xD234, 0xC5F8},{0xD23C, 0xC5F9}, - {0xD23D, 0xC5FA},{0xD23F, 0xC5FB},{0xD241, 0xC5FC},{0xD248, 0xC5FD},{0xD25C, 0xC5FE},{0xD264, 0xC6A1},{0xD280, 0xC6A2},{0xD281, 0xC6A3}, - {0xD284, 0xC6A4},{0xD288, 0xC6A5},{0xD290, 0xC6A6},{0xD291, 0xC6A7},{0xD295, 0xC6A8},{0xD29C, 0xC6A9},{0xD2A0, 0xC6AA},{0xD2A4, 0xC6AB}, - {0xD2AC, 0xC6AC},{0xD2B1, 0xC6AD},{0xD2B8, 0xC6AE},{0xD2B9, 0xC6AF},{0xD2BC, 0xC6B0},{0xD2BF, 0xC6B1},{0xD2C0, 0xC6B2},{0xD2C2, 0xC6B3}, - {0xD2C8, 0xC6B4},{0xD2C9, 0xC6B5},{0xD2CB, 0xC6B6},{0xD2D4, 0xC6B7},{0xD2D8, 0xC6B8},{0xD2DC, 0xC6B9},{0xD2E4, 0xC6BA},{0xD2E5, 0xC6BB}, - {0xD2F0, 0xC6BC},{0xD2F1, 0xC6BD},{0xD2F4, 0xC6BE},{0xD2F8, 0xC6BF},{0xD300, 0xC6C0},{0xD301, 0xC6C1},{0xD303, 0xC6C2},{0xD305, 0xC6C3}, - {0xD30C, 0xC6C4},{0xD30D, 0xC6C5},{0xD30E, 0xC6C6},{0xD310, 0xC6C7},{0xD314, 0xC6C8},{0xD316, 0xC6C9},{0xD31C, 0xC6CA},{0xD31D, 0xC6CB}, - {0xD31F, 0xC6CC},{0xD320, 0xC6CD},{0xD321, 0xC6CE},{0xD325, 0xC6CF},{0xD328, 0xC6D0},{0xD329, 0xC6D1},{0xD32C, 0xC6D2},{0xD330, 0xC6D3}, - {0xD338, 0xC6D4},{0xD339, 0xC6D5},{0xD33B, 0xC6D6},{0xD33C, 0xC6D7},{0xD33D, 0xC6D8},{0xD344, 0xC6D9},{0xD345, 0xC6DA},{0xD37C, 0xC6DB}, - {0xD37D, 0xC6DC},{0xD380, 0xC6DD},{0xD384, 0xC6DE},{0xD38C, 0xC6DF},{0xD38D, 0xC6E0},{0xD38F, 0xC6E1},{0xD390, 0xC6E2},{0xD391, 0xC6E3}, - {0xD398, 0xC6E4},{0xD399, 0xC6E5},{0xD39C, 0xC6E6},{0xD3A0, 0xC6E7},{0xD3A8, 0xC6E8},{0xD3A9, 0xC6E9},{0xD3AB, 0xC6EA},{0xD3AD, 0xC6EB}, - {0xD3B4, 0xC6EC},{0xD3B8, 0xC6ED},{0xD3BC, 0xC6EE},{0xD3C4, 0xC6EF},{0xD3C5, 0xC6F0},{0xD3C8, 0xC6F1},{0xD3C9, 0xC6F2},{0xD3D0, 0xC6F3}, - {0xD3D8, 0xC6F4},{0xD3E1, 0xC6F5},{0xD3E3, 0xC6F6},{0xD3EC, 0xC6F7},{0xD3ED, 0xC6F8},{0xD3F0, 0xC6F9},{0xD3F4, 0xC6FA},{0xD3FC, 0xC6FB}, - {0xD3FD, 0xC6FC},{0xD3FF, 0xC6FD},{0xD401, 0xC6FE},{0xD408, 0xC7A1},{0xD41D, 0xC7A2},{0xD440, 0xC7A3},{0xD444, 0xC7A4},{0xD45C, 0xC7A5}, - {0xD460, 0xC7A6},{0xD464, 0xC7A7},{0xD46D, 0xC7A8},{0xD46F, 0xC7A9},{0xD478, 0xC7AA},{0xD479, 0xC7AB},{0xD47C, 0xC7AC},{0xD47F, 0xC7AD}, - {0xD480, 0xC7AE},{0xD482, 0xC7AF},{0xD488, 0xC7B0},{0xD489, 0xC7B1},{0xD48B, 0xC7B2},{0xD48D, 0xC7B3},{0xD494, 0xC7B4},{0xD4A9, 0xC7B5}, - {0xD4CC, 0xC7B6},{0xD4D0, 0xC7B7},{0xD4D4, 0xC7B8},{0xD4DC, 0xC7B9},{0xD4DF, 0xC7BA},{0xD4E8, 0xC7BB},{0xD4EC, 0xC7BC},{0xD4F0, 0xC7BD}, - {0xD4F8, 0xC7BE},{0xD4FB, 0xC7BF},{0xD4FD, 0xC7C0},{0xD504, 0xC7C1},{0xD508, 0xC7C2},{0xD50C, 0xC7C3},{0xD514, 0xC7C4},{0xD515, 0xC7C5}, - {0xD517, 0xC7C6},{0xD53C, 0xC7C7},{0xD53D, 0xC7C8},{0xD540, 0xC7C9},{0xD544, 0xC7CA},{0xD54C, 0xC7CB},{0xD54D, 0xC7CC},{0xD54F, 0xC7CD}, - {0xD551, 0xC7CE},{0xD558, 0xC7CF},{0xD559, 0xC7D0},{0xD55C, 0xC7D1},{0xD560, 0xC7D2},{0xD565, 0xC7D3},{0xD568, 0xC7D4},{0xD569, 0xC7D5}, - {0xD56B, 0xC7D6},{0xD56D, 0xC7D7},{0xD574, 0xC7D8},{0xD575, 0xC7D9},{0xD578, 0xC7DA},{0xD57C, 0xC7DB},{0xD584, 0xC7DC},{0xD585, 0xC7DD}, - {0xD587, 0xC7DE},{0xD588, 0xC7DF},{0xD589, 0xC7E0},{0xD590, 0xC7E1},{0xD5A5, 0xC7E2},{0xD5C8, 0xC7E3},{0xD5C9, 0xC7E4},{0xD5CC, 0xC7E5}, - {0xD5D0, 0xC7E6},{0xD5D2, 0xC7E7},{0xD5D8, 0xC7E8},{0xD5D9, 0xC7E9},{0xD5DB, 0xC7EA},{0xD5DD, 0xC7EB},{0xD5E4, 0xC7EC},{0xD5E5, 0xC7ED}, - {0xD5E8, 0xC7EE},{0xD5EC, 0xC7EF},{0xD5F4, 0xC7F0},{0xD5F5, 0xC7F1},{0xD5F7, 0xC7F2},{0xD5F9, 0xC7F3},{0xD600, 0xC7F4},{0xD601, 0xC7F5}, - {0xD604, 0xC7F6},{0xD608, 0xC7F7},{0xD610, 0xC7F8},{0xD611, 0xC7F9},{0xD613, 0xC7FA},{0xD614, 0xC7FB},{0xD615, 0xC7FC},{0xD61C, 0xC7FD}, - {0xD620, 0xC7FE},{0xD624, 0xC8A1},{0xD62D, 0xC8A2},{0xD638, 0xC8A3},{0xD639, 0xC8A4},{0xD63C, 0xC8A5},{0xD640, 0xC8A6},{0xD645, 0xC8A7}, - {0xD648, 0xC8A8},{0xD649, 0xC8A9},{0xD64B, 0xC8AA},{0xD64D, 0xC8AB},{0xD651, 0xC8AC},{0xD654, 0xC8AD},{0xD655, 0xC8AE},{0xD658, 0xC8AF}, - {0xD65C, 0xC8B0},{0xD667, 0xC8B1},{0xD669, 0xC8B2},{0xD670, 0xC8B3},{0xD671, 0xC8B4},{0xD674, 0xC8B5},{0xD683, 0xC8B6},{0xD685, 0xC8B7}, - {0xD68C, 0xC8B8},{0xD68D, 0xC8B9},{0xD690, 0xC8BA},{0xD694, 0xC8BB},{0xD69D, 0xC8BC},{0xD69F, 0xC8BD},{0xD6A1, 0xC8BE},{0xD6A8, 0xC8BF}, - {0xD6AC, 0xC8C0},{0xD6B0, 0xC8C1},{0xD6B9, 0xC8C2},{0xD6BB, 0xC8C3},{0xD6C4, 0xC8C4},{0xD6C5, 0xC8C5},{0xD6C8, 0xC8C6},{0xD6CC, 0xC8C7}, - {0xD6D1, 0xC8C8},{0xD6D4, 0xC8C9},{0xD6D7, 0xC8CA},{0xD6D9, 0xC8CB},{0xD6E0, 0xC8CC},{0xD6E4, 0xC8CD},{0xD6E8, 0xC8CE},{0xD6F0, 0xC8CF}, - {0xD6F5, 0xC8D0},{0xD6FC, 0xC8D1},{0xD6FD, 0xC8D2},{0xD700, 0xC8D3},{0xD704, 0xC8D4},{0xD711, 0xC8D5},{0xD718, 0xC8D6},{0xD719, 0xC8D7}, - {0xD71C, 0xC8D8},{0xD720, 0xC8D9},{0xD728, 0xC8DA},{0xD729, 0xC8DB},{0xD72B, 0xC8DC},{0xD72D, 0xC8DD},{0xD734, 0xC8DE},{0xD735, 0xC8DF}, - {0xD738, 0xC8E0},{0xD73C, 0xC8E1},{0xD744, 0xC8E2},{0xD747, 0xC8E3},{0xD749, 0xC8E4},{0xD750, 0xC8E5},{0xD751, 0xC8E6},{0xD754, 0xC8E7}, - {0xD756, 0xC8E8},{0xD757, 0xC8E9},{0xD758, 0xC8EA},{0xD759, 0xC8EB},{0xD760, 0xC8EC},{0xD761, 0xC8ED},{0xD763, 0xC8EE},{0xD765, 0xC8EF}, - {0xD769, 0xC8F0},{0xD76C, 0xC8F1},{0xD770, 0xC8F2},{0xD774, 0xC8F3},{0xD77C, 0xC8F4},{0xD77D, 0xC8F5},{0xD781, 0xC8F6},{0xD788, 0xC8F7}, - {0xD789, 0xC8F8},{0xD78C, 0xC8F9},{0xD790, 0xC8FA},{0xD798, 0xC8FB},{0xD799, 0xC8FC},{0xD79B, 0xC8FD},{0xD79D, 0xC8FE},{0xF900, 0xCBD0}, - {0xF901, 0xCBD6},{0xF902, 0xCBE7},{0xF903, 0xCDCF},{0xF904, 0xCDE8},{0xF905, 0xCEAD},{0xF906, 0xCFFB},{0xF907, 0xD0A2},{0xF908, 0xD0B8}, - {0xF909, 0xD0D0},{0xF90A, 0xD0DD},{0xF90B, 0xD1D4},{0xF90C, 0xD1D5},{0xF90D, 0xD1D8},{0xF90E, 0xD1DB},{0xF90F, 0xD1DC},{0xF910, 0xD1DD}, - {0xF911, 0xD1DE},{0xF912, 0xD1DF},{0xF913, 0xD1E0},{0xF914, 0xD1E2},{0xF915, 0xD1E3},{0xF916, 0xD1E4},{0xF917, 0xD1E5},{0xF918, 0xD1E6}, - {0xF919, 0xD1E8},{0xF91A, 0xD1E9},{0xF91B, 0xD1EA},{0xF91C, 0xD1EB},{0xF91D, 0xD1ED},{0xF91E, 0xD1EF},{0xF91F, 0xD1F0},{0xF920, 0xD1F2}, - {0xF921, 0xD1F6},{0xF922, 0xD1FA},{0xF923, 0xD1FC},{0xF924, 0xD1FD},{0xF925, 0xD1FE},{0xF926, 0xD2A2},{0xF927, 0xD2A3},{0xF928, 0xD2A7}, - {0xF929, 0xD2A8},{0xF92A, 0xD2A9},{0xF92B, 0xD2AA},{0xF92C, 0xD2AB},{0xF92D, 0xD2AD},{0xF92E, 0xD2B2},{0xF92F, 0xD2BE},{0xF930, 0xD2C2}, - {0xF931, 0xD2C3},{0xF932, 0xD2C4},{0xF933, 0xD2C6},{0xF934, 0xD2C7},{0xF935, 0xD2C8},{0xF936, 0xD2C9},{0xF937, 0xD2CA},{0xF938, 0xD2CB}, - {0xF939, 0xD2CD},{0xF93A, 0xD2CE},{0xF93B, 0xD2CF},{0xF93C, 0xD2D0},{0xF93D, 0xD2D1},{0xF93E, 0xD2D2},{0xF93F, 0xD2D3},{0xF940, 0xD2D4}, - {0xF941, 0xD2D5},{0xF942, 0xD2D6},{0xF943, 0xD2D7},{0xF944, 0xD2D9},{0xF945, 0xD2DA},{0xF946, 0xD2DE},{0xF947, 0xD2DF},{0xF948, 0xD2E1}, - {0xF949, 0xD2E2},{0xF94A, 0xD2E4},{0xF94B, 0xD2E5},{0xF94C, 0xD2E6},{0xF94D, 0xD2E7},{0xF94E, 0xD2E8},{0xF94F, 0xD2E9},{0xF950, 0xD2EA}, - {0xF951, 0xD2EB},{0xF952, 0xD2F0},{0xF953, 0xD2F1},{0xF954, 0xD2F2},{0xF955, 0xD2F3},{0xF956, 0xD2F4},{0xF957, 0xD2F5},{0xF958, 0xD2F7}, - {0xF959, 0xD2F8},{0xF95A, 0xD4E6},{0xF95B, 0xD4FC},{0xF95C, 0xD5A5},{0xF95D, 0xD5AB},{0xF95E, 0xD5AE},{0xF95F, 0xD6B8},{0xF960, 0xD6CD}, - {0xF961, 0xD7CB},{0xF962, 0xD7E4},{0xF963, 0xDBC5},{0xF964, 0xDBE4},{0xF965, 0xDCA5},{0xF966, 0xDDA5},{0xF967, 0xDDD5},{0xF968, 0xDDF4}, - {0xF969, 0xDEFC},{0xF96A, 0xDEFE},{0xF96B, 0xDFB3},{0xF96C, 0xDFE1},{0xF96D, 0xDFE8},{0xF96E, 0xE0F1},{0xF96F, 0xE1AD},{0xF970, 0xE1ED}, - {0xF971, 0xE3F5},{0xF972, 0xE4A1},{0xF973, 0xE4A9},{0xF974, 0xE5AE},{0xF975, 0xE5B1},{0xF976, 0xE5B2},{0xF977, 0xE5B9},{0xF978, 0xE5BB}, - {0xF979, 0xE5BC},{0xF97A, 0xE5C4},{0xF97B, 0xE5CE},{0xF97C, 0xE5D0},{0xF97D, 0xE5D2},{0xF97E, 0xE5D6},{0xF97F, 0xE5FA},{0xF980, 0xE5FB}, - {0xF981, 0xE5FC},{0xF982, 0xE5FE},{0xF983, 0xE6A1},{0xF984, 0xE6A4},{0xF985, 0xE6A7},{0xF986, 0xE6AD},{0xF987, 0xE6AF},{0xF988, 0xE6B0}, - {0xF989, 0xE6B1},{0xF98A, 0xE6B3},{0xF98B, 0xE6B7},{0xF98C, 0xE6B8},{0xF98D, 0xE6BC},{0xF98E, 0xE6C4},{0xF98F, 0xE6C6},{0xF990, 0xE6C7}, - {0xF991, 0xE6CA},{0xF992, 0xE6D2},{0xF993, 0xE6D6},{0xF994, 0xE6D9},{0xF995, 0xE6DC},{0xF996, 0xE6DF},{0xF997, 0xE6E1},{0xF998, 0xE6E4}, - {0xF999, 0xE6E5},{0xF99A, 0xE6E6},{0xF99B, 0xE6E8},{0xF99C, 0xE6EA},{0xF99D, 0xE6EB},{0xF99E, 0xE6EC},{0xF99F, 0xE6EF},{0xF9A0, 0xE6F1}, - {0xF9A1, 0xE6F2},{0xF9A2, 0xE6F5},{0xF9A3, 0xE6F6},{0xF9A4, 0xE6F7},{0xF9A5, 0xE6F9},{0xF9A6, 0xE7A1},{0xF9A7, 0xE7A6},{0xF9A8, 0xE7A9}, - {0xF9A9, 0xE7AA},{0xF9AA, 0xE7AC},{0xF9AB, 0xE7AD},{0xF9AC, 0xE7B0},{0xF9AD, 0xE7BF},{0xF9AE, 0xE7C1},{0xF9AF, 0xE7C6},{0xF9B0, 0xE7C7}, - {0xF9B1, 0xE7CB},{0xF9B2, 0xE7CD},{0xF9B3, 0xE7CF},{0xF9B4, 0xE7D0},{0xF9B5, 0xE7D3},{0xF9B6, 0xE7DF},{0xF9B7, 0xE7E4},{0xF9B8, 0xE7E6}, - {0xF9B9, 0xE7F7},{0xF9BA, 0xE8E7},{0xF9BB, 0xE8E8},{0xF9BC, 0xE8F0},{0xF9BD, 0xE8F1},{0xF9BE, 0xE8F7},{0xF9BF, 0xE8F9},{0xF9C0, 0xE8FB}, - {0xF9C1, 0xE8FE},{0xF9C2, 0xE9A7},{0xF9C3, 0xE9AC},{0xF9C4, 0xE9CC},{0xF9C5, 0xE9F7},{0xF9C6, 0xEAC1},{0xF9C7, 0xEAE5},{0xF9C8, 0xEAF4}, - {0xF9C9, 0xEAF7},{0xF9CA, 0xEAFC},{0xF9CB, 0xEAFE},{0xF9CC, 0xEBA4},{0xF9CD, 0xEBA7},{0xF9CE, 0xEBA9},{0xF9CF, 0xEBAA},{0xF9D0, 0xEBBA}, - {0xF9D1, 0xEBBB},{0xF9D2, 0xEBBD},{0xF9D3, 0xEBC1},{0xF9D4, 0xEBC2},{0xF9D5, 0xEBC6},{0xF9D6, 0xEBC7},{0xF9D7, 0xEBCC},{0xF9D8, 0xEBCF}, - {0xF9D9, 0xEBD0},{0xF9DA, 0xEBD1},{0xF9DB, 0xEBD2},{0xF9DC, 0xEBD8},{0xF9DD, 0xECA6},{0xF9DE, 0xECA7},{0xF9DF, 0xECAA},{0xF9E0, 0xECAF}, - {0xF9E1, 0xECB0},{0xF9E2, 0xECB1},{0xF9E3, 0xECB2},{0xF9E4, 0xECB5},{0xF9E5, 0xECB8},{0xF9E6, 0xECBA},{0xF9E7, 0xECC0},{0xF9E8, 0xECC1}, - {0xF9E9, 0xECC5},{0xF9EA, 0xECC6},{0xF9EB, 0xECC9},{0xF9EC, 0xECCA},{0xF9ED, 0xECD5},{0xF9EE, 0xECDD},{0xF9EF, 0xECDE},{0xF9F0, 0xECE1}, - {0xF9F1, 0xECE4},{0xF9F2, 0xECE7},{0xF9F3, 0xECE8},{0xF9F4, 0xECF7},{0xF9F5, 0xECF8},{0xF9F6, 0xECFA},{0xF9F7, 0xEDA1},{0xF9F8, 0xEDA2}, - {0xF9F9, 0xEDA3},{0xF9FA, 0xEDEE},{0xF9FB, 0xEEDB},{0xF9FC, 0xF2BD},{0xF9FD, 0xF2FA},{0xF9FE, 0xF3B1},{0xF9FF, 0xF4A7},{0xFA00, 0xF4EE}, - {0xFA01, 0xF6F4},{0xFA02, 0xF6F6},{0xFA03, 0xF7B8},{0xFA04, 0xF7C8},{0xFA05, 0xF7D3},{0xFA06, 0xF8DB},{0xFA07, 0xF8F0},{0xFA08, 0xFAA1}, - {0xFA09, 0xFAA2},{0xFA0A, 0xFAE6},{0xFA0B, 0xFCA9},{0xFF01, 0xA3A1},{0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA3A4},{0xFF05, 0xA3A5}, - {0xFF06, 0xA3A6},{0xFF07, 0xA3A7},{0xFF08, 0xA3A8},{0xFF09, 0xA3A9},{0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD}, - {0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF},{0xFF10, 0xA3B0},{0xFF11, 0xA3B1},{0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5}, - {0xFF16, 0xA3B6},{0xFF17, 0xA3B7},{0xFF18, 0xA3B8},{0xFF19, 0xA3B9},{0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD}, - {0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF},{0xFF20, 0xA3C0},{0xFF21, 0xA3C1},{0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5}, - {0xFF26, 0xA3C6},{0xFF27, 0xA3C7},{0xFF28, 0xA3C8},{0xFF29, 0xA3C9},{0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD}, - {0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF},{0xFF30, 0xA3D0},{0xFF31, 0xA3D1},{0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5}, - {0xFF36, 0xA3D6},{0xFF37, 0xA3D7},{0xFF38, 0xA3D8},{0xFF39, 0xA3D9},{0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA1AC},{0xFF3D, 0xA3DD}, - {0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF},{0xFF40, 0xA3E0},{0xFF41, 0xA3E1},{0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5}, - {0xFF46, 0xA3E6},{0xFF47, 0xA3E7},{0xFF48, 0xA3E8},{0xFF49, 0xA3E9},{0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED}, - {0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF},{0xFF50, 0xA3F0},{0xFF51, 0xA3F1},{0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5}, - {0xFF56, 0xA3F6},{0xFF57, 0xA3F7},{0xFF58, 0xA3F8},{0xFF59, 0xA3F9},{0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD}, - {0xFF5E, 0xA2A6},{0xFFE0, 0xA1CB},{0xFFE1, 0xA1CC},{0xFFE2, 0xA1FE},{0xFFE3, 0xA3FE},{0xFFE5, 0xA1CD},{0xFFE6, 0xA3DC} -}; diff --git a/vcl/source/fontsubset/xlat.cxx b/vcl/source/fontsubset/xlat.cxx index 27b2f517f4a1..c4699ec5a81a 100644 --- a/vcl/source/fontsubset/xlat.cxx +++ b/vcl/source/fontsubset/xlat.cxx @@ -25,163 +25,196 @@ * ************************************************************************/ -/* - * - * Data translation from Unicode to MS encodings - * If the host system provides this functionality - * this file should be rewritten to use it and - * the large translation arrays should be removed - * - * Author: Alexander Gelfenbain - * - */ +#include "rtl/textcvt.h" +#include -#include "xlat.hxx" +namespace { // anonymous namespace -namespace vcl -{ +// ==================================================================== -// TODO: use generic encoding converters and get rid of the include files below -#include "u2big5.inc" -#include "u2johab.inc" -#include "u2prc.inc" -#include "u2shiftjis.inc" -#include "u2wansung.inc" +#define MAX_CVT_SELECT 6 -#define MISSING_CODE 0 +class ConverterCache +{ +public: + explicit ConverterCache( void ); + ~ConverterCache( void ); + sal_uInt16 convertOne( int nSelect, sal_Unicode ); + void convertStr( int nSelect, const sal_Unicode* pSrc, sal_uInt16* pDst, int nCount ); +protected: + void ensureConverter( int nSelect ); +private: + rtl_UnicodeToTextConverter maConverterCache[ MAX_CVT_SELECT+1 ]; + rtl_UnicodeToTextContext maContexts[ MAX_CVT_SELECT+1 ]; +}; + +// ==================================================================== + +ConverterCache::ConverterCache( void) +{ + for( int i = 0; i <= MAX_CVT_SELECT; ++i) + { + maConverterCache[i] = NULL; + maContexts[i] = NULL; + } +} -static sal_uInt16 xlat(sal_uInt16pair p[], sal_uInt32 n, sal_uInt16 src) +// -------------------------------------------------------------------- + +ConverterCache::~ConverterCache( void) { - int l = 0, r = n - 1, i; - sal_uInt16 t, res = MISSING_CODE; + for( int i = 0; i <= MAX_CVT_SELECT; ++i) + { + if( !maContexts[i] ) + continue; + rtl_destroyUnicodeToTextContext( maConverterCache[i], maContexts[i] ); + rtl_destroyUnicodeToTextConverter( maConverterCache[i] ); + } +} - do { - i = (l + r) >> 1; - t = p[i].s; - if (src >= t) l = i + 1; - if (src <= t) r = i - 1; - } while (l <= r); +// -------------------------------------------------------------------- - if (l - r == 2) { - res = p[l-1].d; +void ConverterCache::ensureConverter( int nSelect ) +{ + // DBG_ASSERT( (2<=nSelect) && (nSelect<=MAX_CVT_SELECT)), "invalid XLAT.Converter requested" ); + rtl_UnicodeToTextContext aContext = maContexts[ nSelect ]; + if( !aContext ) + { + rtl_TextEncoding eRecodeFrom = RTL_TEXTENCODING_UNICODE; + switch( nSelect ) + { + default: nSelect = 1; // fall through to unicode recoding + case 1: eRecodeFrom = RTL_TEXTENCODING_UNICODE; break; + case 2: eRecodeFrom = RTL_TEXTENCODING_SHIFT_JIS; break; + case 3: eRecodeFrom = RTL_TEXTENCODING_GB_2312; break; + case 4: eRecodeFrom = RTL_TEXTENCODING_BIG5; break; + case 5: eRecodeFrom = RTL_TEXTENCODING_MS_949; break; + case 6: eRecodeFrom = RTL_TEXTENCODING_MS_1361; break; + } + rtl_UnicodeToTextConverter aRecodeConverter = rtl_createUnicodeToTextConverter( eRecodeFrom ); + maConverterCache[ nSelect ] = aRecodeConverter; + + aContext = rtl_createUnicodeToTextContext( aRecodeConverter ); + maContexts[ nSelect ] = aContext; } - return res; + rtl_resetUnicodeToTextContext( maConverterCache[ nSelect ], aContext ); +} + +// -------------------------------------------------------------------- + +sal_uInt16 ConverterCache::convertOne( int nSelect, sal_Unicode aChar ) +{ + ensureConverter( nSelect ); + + sal_Unicode aUCS2Char = aChar; + sal_Char aTempArray[8]; + sal_Size nTempSize; + sal_uInt32 nCvtInfo; + + // TODO: use direct unicode->mbcs converter should there ever be one + int nCodeLen = rtl_convertUnicodeToText( + maConverterCache[ nSelect ], maContexts[ nSelect ], + &aUCS2Char, 1, aTempArray, sizeof(aTempArray), + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0 + | RTL_UNICODETOTEXT_FLAGS_INVALID_0, + &nCvtInfo, &nTempSize ); + + sal_uInt16 aCode = aTempArray[0]; + for( int i = 1; i < nCodeLen; ++i ) + aCode = (aCode << 8) + (aTempArray[i] & 0xFF); + return aCode; +} + +// -------------------------------------------------------------------- + +void ConverterCache::convertStr( int nSelect, const sal_Unicode* pSrc, sal_uInt16* pDst, int nCount ) +{ + ensureConverter( nSelect ); + + for( int n = 0; n < nCount; ++n ) + { + sal_Unicode aUCS2Char = pSrc[n]; + + sal_Char aTempArray[8]; + sal_Size nTempSize; + sal_uInt32 nCvtInfo; + + // assume that non-unicode-fonts do not support codepoints >U+FFFF + // TODO: use direct unicode->mbcs converter should there ever be one + int nCodeLen = rtl_convertUnicodeToText( + maConverterCache[ nSelect ], maContexts[ nSelect ], + &aUCS2Char, 1, aTempArray, sizeof(aTempArray), + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0 + | RTL_UNICODETOTEXT_FLAGS_INVALID_0, + &nCvtInfo, &nTempSize ); + + sal_uInt16 aCode = aTempArray[0]; + for( int i = 1; i < nCodeLen; ++i ) + aCode = (aCode << 8) + (aTempArray[i] & 0xFF); + pDst[n] = aCode; + } } +} // anonymous namespace + +// ==================================================================== + +#include "xlat.hxx" + +namespace vcl +{ + +static ConverterCache aCC; + sal_uInt16 TranslateChar12(sal_uInt16 src) { - return xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), src); + return aCC.convertOne( 2, src); } sal_uInt16 TranslateChar13(sal_uInt16 src) { - return xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), src); + return aCC.convertOne( 3, src); } sal_uInt16 TranslateChar14(sal_uInt16 src) { - return xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), src); + return aCC.convertOne( 4, src); } sal_uInt16 TranslateChar15(sal_uInt16 src) { - return xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), src); + return aCC.convertOne( 5, src); } sal_uInt16 TranslateChar16(sal_uInt16 src) { - return xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_5[0]), src); + return aCC.convertOne( 6, src); } void TranslateString12(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n) { - sal_uInt32 i; - sal_uInt16 lastS, lastD; - - if (n == 0) return; - - lastD = dst[0] = xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), lastS = src[0]); - - for (i=1; i < n; i++) { - if (src[i] == lastS) { - dst[i] = lastD; - } else { - lastD = dst[i] = xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), lastS = src[i]); - } - } + aCC.convertStr( 2, src, dst, n); } void TranslateString13(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n) { - sal_uInt32 i; - sal_uInt16 lastS, lastD; - - if (n == 0) return; - - lastD = dst[0] = xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), lastS = src[0]); - - for (i=1; i < n; i++) { - if (src[i] == lastS) { - dst[i] = lastD; - } else { - lastD = dst[i] = xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), lastS = src[i]); - } - } + aCC.convertStr( 3, src, dst, n); } void TranslateString14(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n) { - sal_uInt32 i; - sal_uInt16 lastS, lastD; - - if (n == 0) return; - - lastD = dst[0] = xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), lastS = src[0]); - - for (i=1; i < n; i++) { - if (src[i] == lastS) { - dst[i] = lastD; - } else { - lastD = dst[i] = xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), lastS = src[i]); - } - } + aCC.convertStr( 4, src, dst, n); } void TranslateString15(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n) { - sal_uInt32 i; - sal_uInt16 lastS, lastD; - - if (n == 0) return; - - lastD = dst[0] = xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), lastS = src[0]); - - for (i=1; i < n; i++) { - if (src[i] == lastS) { - dst[i] = lastD; - } else { - lastD = dst[i] = xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), lastS = src[i]); - } - } + aCC.convertStr( 5, src, dst, n); } void TranslateString16(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n) { - sal_uInt32 i; - sal_uInt16 lastS, lastD; - - if (n == 0) return; - - lastD = dst[0] = xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_6[0]), lastS = src[0]); - - for (i=1; i < n; i++) { - if (src[i] == lastS) { - dst[i] = lastD; - } else { - lastD = dst[i] = xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_6[0]), lastS = src[i]); - } - } + aCC.convertStr( 6, src, dst, n); } } // namespace vcl diff --git a/vcl/source/fontsubset/xlat.hxx b/vcl/source/fontsubset/xlat.hxx index c3bd076f6fbd..2e6d1721776b 100644 --- a/vcl/source/fontsubset/xlat.hxx +++ b/vcl/source/fontsubset/xlat.hxx @@ -31,7 +31,7 @@ #ifndef __XLAT_H #define __XLAT_H -#include "sft.hxx" +//####include "sft.hxx" namespace vcl { diff --git a/vcl/source/gdi/metric.cxx b/vcl/source/gdi/metric.cxx index 49e4dc080d8f..c387bd158306 100644 --- a/vcl/source/gdi/metric.cxx +++ b/vcl/source/gdi/metric.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: metric.cxx,v $ - * $Revision: 1.23 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -236,50 +233,80 @@ BOOL FontMetric::operator==( const FontMetric& rMetric ) const // ======================================================================= -ImplFontCharMap::ImplFontCharMap( int nRangePairs, - const sal_uInt32* pRangeCodes, const int* pStartGlyphs ) -: mpRangeCodes( pRangeCodes ), - mpStartGlyphs( pStartGlyphs ), - mnRangeCount( nRangePairs ), - mnCharCount( 0 ), - mnRefCount( 1 ) +CmapResult::CmapResult( bool bSymbolic, + const sal_uInt32* pRangeCodes, int nRangeCount, + const int* pStartGlyphs, const USHORT* pExtraGlyphIds ) +: mpRangeCodes( pRangeCodes) +, mpStartGlyphs( pStartGlyphs) +, mpGlyphIds( pExtraGlyphIds) +, mnRangeCount( nRangeCount) +, mbSymbolic( bSymbolic) +, mbRecoded( false) +{} + +// ======================================================================= + +ImplFontCharMap::ImplFontCharMap( const CmapResult& rCR ) +: mpRangeCodes( rCR.mpRangeCodes ) +, mpStartGlyphs( rCR.mpStartGlyphs ) +, mpGlyphIds( rCR.mpGlyphIds ) +, mnRangeCount( rCR.mnRangeCount ) +, mnCharCount( 0 ) +, mnRefCount( 1 ) { - while( --nRangePairs >= 0 ) + const sal_uInt32* pRangePtr = mpRangeCodes; + for( int i = mnRangeCount; --i >= 0; pRangePtr += 2 ) { - sal_uInt32 cFirst = *(pRangeCodes++); - sal_uInt32 cLast = *(pRangeCodes++); + sal_uInt32 cFirst = pRangePtr[0]; + sal_uInt32 cLast = pRangePtr[1]; mnCharCount += cLast - cFirst; } } static ImplFontCharMap* pDefaultImplFontCharMap = NULL; -static const sal_uInt32 pDefaultRangeCodes[] = {0x0020,0xD800, 0xE000,0xFFF0}; +static const sal_uInt32 aDefaultUnicodeRanges[] = {0x0020,0xD800, 0xE000,0xFFF0}; +static const sal_uInt32 aDefaultSymbolRanges[] = {0x0020,0x0100, 0xF020,0xF100}; + +// ----------------------------------------------------------------------- + +bool ImplFontCharMap::IsDefaultMap() const +{ + const bool bIsDefault = (mpRangeCodes == aDefaultUnicodeRanges) || (mpRangeCodes == aDefaultSymbolRanges); + return bIsDefault; +} // ----------------------------------------------------------------------- ImplFontCharMap::~ImplFontCharMap() { - if( mpRangeCodes != pDefaultRangeCodes ) - delete[] mpRangeCodes; + if( IsDefaultMap() ) + return; + delete[] mpRangeCodes; delete[] mpStartGlyphs; + delete[] mpGlyphIds; } // ----------------------------------------------------------------------- -ImplFontCharMap* ImplFontCharMap::GetDefaultMap() +ImplFontCharMap* ImplFontCharMap::GetDefaultMap( bool bSymbols) { if( pDefaultImplFontCharMap ) pDefaultImplFontCharMap->AddReference(); else - pDefaultImplFontCharMap = new ImplFontCharMap( 2, pDefaultRangeCodes, NULL ); - return pDefaultImplFontCharMap; -} + { + const sal_uInt32* pRangeCodes = aDefaultUnicodeRanges; + int nCodesCount = sizeof(aDefaultUnicodeRanges) / sizeof(*pRangeCodes); + if( bSymbols ) + { + pRangeCodes = aDefaultSymbolRanges; + nCodesCount = sizeof(aDefaultSymbolRanges) / sizeof(*pRangeCodes); + } -// ----------------------------------------------------------------------- + CmapResult aDefaultCR( bSymbols, pRangeCodes, nCodesCount/2 ); + pDefaultImplFontCharMap = new ImplFontCharMap( aDefaultCR ); + } -bool ImplFontCharMap::IsDefaultMap() const -{ - return (mpRangeCodes == pDefaultRangeCodes); + return pDefaultImplFontCharMap; } // ----------------------------------------------------------------------- @@ -328,15 +355,24 @@ int ImplFontCharMap::ImplFindRangeIndex( sal_uInt32 cChar ) const bool ImplFontCharMap::HasChar( sal_uInt32 cChar ) const { - int nRange = ImplFindRangeIndex( cChar ); - if( nRange==0 && cChar=0xF000) & (mpRangeCodes[1]<=0xF0FF); + if( !bSymbolic ) + return 0; + // check for symbol aliasing (U+F0xx -> U+00xx) + nRange = ImplFindRangeIndex( cChar | 0xF000 ); + } + // check that we are inside a range + if( (nRange & 1) != 0 ) return 0; - // calculate the glyph index with the range' start code and start glyph - int nGlyphIndex = mpStartGlyphs[ nRange/2 ]; - nGlyphIndex += cChar - mpRangeCodes[ nRange ]; + // get glyph index directly or indirectly + int nGlyphIndex = cChar - mpRangeCodes[ nRange ]; + const int nStartIndex = mpStartGlyphs[ nRange/2 ]; + if( nStartIndex >= 0 ) { + // the glyph index can be calculated + nGlyphIndex += nStartIndex; + } else { + // the glyphid array has the glyph index + nGlyphIndex = mpGlyphIds[ nGlyphIndex - nStartIndex]; + } + return nGlyphIndex; } @@ -478,24 +530,29 @@ static int GetSShort( const unsigned char* p ){ return((static_cast // TODO: move CMAP parsing directly into the ImplFontCharMap class bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult ) { + rResult.mpRangeCodes = NULL; + rResult.mpStartGlyphs= NULL; + rResult.mpGlyphIds = NULL; + rResult.mnRangeCount = 0; + rResult.mbRecoded = false; + rResult.mbSymbolic = false; + + // parse the table header and check for validity if( !pCmap || (nLength < 24) ) return false; - rResult.mpPairCodes = NULL; - rResult.mpStartGlyphs= NULL; - rResult.mnPairCount = 0; - rResult.mbRecoded = false; - rResult.mbSymbolic = false; - if( GetUShort( pCmap ) != 0x0000 ) // simple check for CMAP corruption return false; + int nSubTables = GetUShort( pCmap + 2 ); + if( (nSubTables <= 0) || (nLength < (24 + 8*nSubTables)) ) + return false; + // find the most interesting subtable in the CMAP rtl_TextEncoding eRecodeFrom = RTL_TEXTENCODING_UNICODE; int nOffset = 0; int nFormat = -1; int nBestVal = 0; - int nSubTables = GetUShort( pCmap + 2 ); for( const unsigned char* p = pCmap + 4; --nSubTables >= 0; p += 8 ) { int nPlatform = GetUShort( p ); @@ -548,6 +605,11 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult ) sal_uInt32* pCodePairs = NULL; int* pStartGlyphs = NULL; + typedef std::vector U16Vector; + U16Vector aGlyphIdArray; + aGlyphIdArray.reserve( 0x1000 ); + aGlyphIdArray.push_back( 0 ); + // format 4, the most common 16bit char mapping table if( (nFormat == 4) && ((nOffset+16) < nLength) ) { @@ -557,20 +619,33 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult ) pStartGlyphs = new int[ nRangeCount ]; const unsigned char* pLimitBase = pCmap + nOffset + 14; const unsigned char* pBeginBase = pLimitBase + nSegCountX2 + 2; - const unsigned char* pGlyphBase = pBeginBase + nSegCountX2; + const unsigned char* pDeltaBase = pBeginBase + nSegCountX2; + const unsigned char* pOffsetBase = pDeltaBase + nSegCountX2; sal_uInt32* pCP = pCodePairs; for( int i = 0; i < nRangeCount; ++i ) { - sal_uInt32 cMinChar = GetUShort( pBeginBase + 2*i ); - sal_uInt32 cMaxChar = GetUShort( pLimitBase + 2*i ); - int nStartGlyph = cMinChar + GetSShort( pGlyphBase + 2*i ); + const sal_uInt32 cMinChar = GetUShort( pBeginBase + 2*i ); + const sal_uInt32 cMaxChar = GetUShort( pLimitBase + 2*i ); + const int nGlyphDelta = GetSShort( pDeltaBase + 2*i ); + const int nRangeOffset = GetUShort( pOffsetBase + 2*i ); if( cMinChar > cMaxChar ) // no sane font should trigger this break; if( cMaxChar == 0xFFFF ) break; *(pCP++) = cMinChar; *(pCP++) = cMaxChar + 1; - pStartGlyphs[i] = nStartGlyph; + if( !nRangeOffset ) { + // glyphid can be calculated directly + pStartGlyphs[i] = (cMinChar + nGlyphDelta) & 0xFFFF; + } else { + // update the glyphid-array with the glyphs in this range + pStartGlyphs[i] = -(int)aGlyphIdArray.size(); + const unsigned char* pGlyphIdPtr = pOffsetBase + 2*i + nRangeOffset; + for( sal_uInt32 c = cMinChar; c <= cMaxChar; ++c, pGlyphIdPtr+=2 ) { + const int nGlyphIndex = GetUShort( pGlyphIdPtr ) + nGlyphDelta; + aGlyphIdArray.push_back( static_cast(nGlyphIndex) ); + } + } } nRangeCount = (pCP - pCodePairs) / 2; } @@ -604,6 +679,7 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult ) nRangeCount = (pCP - pCodePairs) / 2; } + // check if any subtable resulted in something usable if( nRangeCount <= 0 ) { delete[] pCodePairs; @@ -617,8 +693,8 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult ) pCodePairs[1] = 0x0100; pCodePairs[2] = 0xF020; // original symbols pCodePairs[3] = 0xF100; - rResult.mpPairCodes = pCodePairs; - rResult.mnPairCount = 2; + rResult.mpRangeCodes = pCodePairs; + rResult.mnRangeCount = 2; return true; } @@ -701,6 +777,7 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult ) // glyph mapping for non-unicode fonts not implemented delete[] pStartGlyphs; pStartGlyphs = NULL; + aGlyphIdArray.clear(); // make a pCodePairs array using the vector from above delete[] pCodePairs; @@ -713,9 +790,23 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult ) *(pCP++) = *itInt; } - rResult.mpPairCodes = pCodePairs; + // prepare the glyphid-array if needed + // TODO: merge ranges if they are close enough? + USHORT* pGlyphIds = NULL; + if( !aGlyphIdArray.empty()) + { + pGlyphIds = new USHORT[ aGlyphIdArray.size() ]; + USHORT* pOut = pGlyphIds; + U16Vector::const_iterator it = aGlyphIdArray.begin(); + while( it != aGlyphIdArray.end() ) + *(pOut++) = *(it++); + } + + // update the result struct + rResult.mpRangeCodes = pCodePairs; rResult.mpStartGlyphs = pStartGlyphs; - rResult.mnPairCount = nRangeCount; + rResult.mnRangeCount = nRangeCount; + rResult.mpGlyphIds = pGlyphIds; return true; } @@ -821,3 +912,4 @@ sal_uInt32 FontCharMap::GetCharFromIndex( int nIndex ) const } // ======================================================================= + diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 25f02a1b2718..2cbebf6f23e2 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -2812,6 +2813,38 @@ sal_Int32 PDFWriterImpl::emitBuiltinFont( const ImplFontData* pFont, sal_Int32 n return nFontObject; } +typedef int ThreeInts[3]; +static bool getPfbSegmentLengths( const unsigned char* pFontBytes, int nByteLen, + ThreeInts& rSegmentLengths ) +{ + if( !pFontBytes || (nByteLen < 0) ) + return false; + const unsigned char* pPtr = pFontBytes; + const unsigned char* pEnd = pFontBytes + nByteLen; + + for( int i = 0; i < 3; ++i) { + // read segment1 header + if( pPtr+6 >= pEnd ) + return false; + if( (pPtr[0] != 0x80) || (pPtr[1] >= 0x03) ) + return false; + const int nLen = (pPtr[5]<<24) + (pPtr[4]<<16) + (pPtr[3]<<8) + pPtr[2]; + if( nLen <= 0) + return false; + rSegmentLengths[i] = nLen; + pPtr += nLen + 6; + } + + // read segment-end header + if( pPtr+2 >= pEnd ) + return false; + if( (pPtr[0] != 0x80) || (pPtr[1] != 0x03) ) + return false; + + return true; +} + +// TODO: always subset instead of embedding the full font => this method becomes obsolete then std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFontData* pFont, EmbedFont& rEmbed ) { std::map< sal_Int32, sal_Int32 > aRet; @@ -2852,7 +2885,7 @@ std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFont sal_Int32 nLength1, nLength2; if( (pFontData = (const unsigned char*)m_pReferenceDevice->mpGraphics->GetEmbedFontData( pFont, nEncodedCodes, pWidths, aInfo, &nFontLen )) != NULL ) { - if( aInfo.m_nFontType != SAL_FONTSUBSETINFO_TYPE_TYPE1 ) + if( (aInfo.m_nFontType & FontSubsetInfo::ANY_TYPE1) == 0 ) goto streamend; // see whether it is pfb or pfa; if it is a pfb, fill ranges // of 6 bytes that are not part of the font program @@ -2873,6 +2906,7 @@ std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFont } // search for eexec + // TODO: use getPfbSegmentLengths() if possible to skip the search thingies below nIndex = 0; int nEndAsciiIndex; int nBeginBinaryIndex; @@ -3573,10 +3607,11 @@ sal_Int32 PDFWriterImpl::emitFontDescriptor( const ImplFontData* pFont, FontSubs "/FontFile" ); switch( rInfo.m_nFontType ) { - case SAL_FONTSUBSETINFO_TYPE_TRUETYPE: + case FontSubsetInfo::SFNT_TTF: aLine.append( '2' ); break; - case SAL_FONTSUBSETINFO_TYPE_TYPE1: + case FontSubsetInfo::TYPE1_PFA: + case FontSubsetInfo::TYPE1_PFB: break; default: DBG_ERROR( "unknown fonttype in PDF font descriptor" ); @@ -3609,7 +3644,6 @@ bool PDFWriterImpl::emitFonts() return false; OStringBuffer aLine( 1024 ); - char buf[8192]; std::map< sal_Int32, sal_Int32 > aFontIDToObject; @@ -3652,14 +3686,13 @@ bool PDFWriterImpl::emitFonts() FontSubsetInfo aSubsetInfo; if( m_pReferenceDevice->mpGraphics->CreateFontSubset( aTmpName, it->first, pGlyphIDs, pEncoding, pWidths, nGlyphs, aSubsetInfo ) ) { - DBG_ASSERT( aSubsetInfo.m_nFontType == SAL_FONTSUBSETINFO_TYPE_TRUETYPE, "wrong font type in font subset" ); // create font stream oslFileHandle aFontFile; CHECK_RETURN( (osl_File_E_None == osl_openFile( aTmpName.pData, &aFontFile, osl_File_OpenFlag_Read ) ) ); // get file size - sal_uInt64 nLength; + sal_uInt64 nLength1; CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_End, 0 ) ) ); - CHECK_RETURN( (osl_File_E_None == osl_getFilePos( aFontFile, &nLength ) ) ); + CHECK_RETURN( (osl_File_E_None == osl_getFilePos( aFontFile, &nLength1 ) ) ); CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_Absolut, 0 ) ) ); #if OSL_DEBUG_LEVEL > 1 @@ -3681,25 +3714,74 @@ bool PDFWriterImpl::emitFonts() "/Filter/FlateDecode" #endif "/Length1 " ); - aLine.append( (sal_Int32)nLength ); + + sal_uInt64 nStartPos = 0; + if( aSubsetInfo.m_nFontType == FontSubsetInfo::SFNT_TTF ) + { + aLine.append( (sal_Int32)nLength1 ); + aLine.append( ">>\n" "stream\n" ); CHECK_RETURN( writeBuffer( aLine.getStr(), aLine.getLength() ) ); - - sal_uInt64 nStartPos = 0; CHECK_RETURN( (osl_File_E_None == osl_getFilePos( m_aFile, &nStartPos ) ) ); // copy font file beginCompression(); checkAndEnableStreamEncryption( nFontStream ); - sal_uInt64 nRead; sal_Bool bEOF = sal_False; do { + char buf[8192]; + sal_uInt64 nRead; CHECK_RETURN( (osl_File_E_None == osl_readFile( aFontFile, buf, sizeof( buf ), &nRead ) ) ); CHECK_RETURN( writeBuffer( buf, nRead ) ); CHECK_RETURN( (osl_File_E_None == osl_isEndOfFile( aFontFile, &bEOF ) ) ); } while( ! bEOF ); + } + else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::CFF_FONT) != 0 ) + { + // TODO: implement + DBG_ERROR( "PDFWriterImpl does not support CFF-font subsets yet!" ); + } + else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::TYPE1_PFB) != 0 ) // TODO: also support PFA? + { + unsigned char* pBuffer = new unsigned char[ (int)nLength1 ]; + + sal_uInt64 nBytesRead = 0; + CHECK_RETURN( (osl_File_E_None == osl_readFile( aFontFile, pBuffer, nLength1, &nBytesRead ) ) ); + DBG_ASSERT( nBytesRead==nLength1, "PDF-FontSubset read incomplete!" ); + CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_Absolut, 0 ) ) ); + // get the PFB-segment lengths + ThreeInts aSegmentLengths = {0,0,0}; + getPfbSegmentLengths( pBuffer, (int)nBytesRead, aSegmentLengths ); + // the lengths below are mandatory for PDF-exported Type1 fonts + // because the PFB segment headers get stripped! WhyOhWhy. + aLine.append( (sal_Int32)aSegmentLengths[0] ); + aLine.append( "/Length2 " ); + aLine.append( (sal_Int32)aSegmentLengths[1] ); + aLine.append( "/Length3 " ); + aLine.append( (sal_Int32)aSegmentLengths[2] ); + + aLine.append( ">>\n" + "stream\n" ); + CHECK_RETURN( writeBuffer( aLine.getStr(), aLine.getLength() ) ); + CHECK_RETURN( (osl_File_E_None == osl_getFilePos( m_aFile, &nStartPos ) ) ); + + // emit PFB-sections without section headers + beginCompression(); + checkAndEnableStreamEncryption( nFontStream ); + CHECK_RETURN( writeBuffer( pBuffer+ 6, aSegmentLengths[0] ) ); + CHECK_RETURN( writeBuffer( pBuffer+12 + aSegmentLengths[0], aSegmentLengths[1] ) ); + CHECK_RETURN( writeBuffer( pBuffer+18 + aSegmentLengths[0] + aSegmentLengths[1], aSegmentLengths[2] ) ); + + delete[] pBuffer; + } + else + { + fprintf( stderr, "PDF: CreateFontSubset result in not yet supported format=%d\n",aSubsetInfo.m_nFontType); + aLine.append( "0 >>\nstream\n" ); + } + endCompression(); disableStreamEncryption(); // close the file @@ -3731,8 +3813,11 @@ bool PDFWriterImpl::emitFonts() CHECK_RETURN( updateObject( nFontObject ) ); aLine.setLength( 0 ); aLine.append( nFontObject ); - aLine.append( " 0 obj\n" - "<m_nFontID, aSubsetInfo.m_aPSName, aLine ); aLine.append( "\n" "/FirstChar 0\n" @@ -11811,3 +11896,4 @@ according to the table 3.15, pdf v 1.4 */ m_aContext.Encrypt = false; //then turn the encryption off } /* end i12626 methods */ + diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx index 50c0bafc0489..7d5ec2bf4f61 100644 --- a/vcl/source/gdi/pdfwriter_impl.hxx +++ b/vcl/source/gdi/pdfwriter_impl.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pdfwriter_impl.hxx,v $ - * $Revision: 1.55.134.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -57,7 +54,7 @@ class ImplFontSelectData; class ImplFontMetricData; -struct FontSubsetInfo; +class FontSubsetInfo; class ZCodec; // the maximum password length diff --git a/vcl/source/glyphs/gcach_ftyp.cxx b/vcl/source/glyphs/gcach_ftyp.cxx index ebb530b1acf6..712c2334b35c 100644 --- a/vcl/source/glyphs/gcach_ftyp.cxx +++ b/vcl/source/glyphs/gcach_ftyp.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gcach_ftyp.cxx,v $ - * $Revision: 1.151 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -353,7 +350,7 @@ FT_FaceRec_* FtFontInfo::GetFaceFT() maFaceFT = NULL; } - return maFaceFT; + return maFaceFT; } // ----------------------------------------------------------------------- @@ -1712,60 +1709,55 @@ bool FreetypeServerFont::GetGlyphBitmap8( int nGlyphIndex, RawBitmap& rRawBitmap // ----------------------------------------------------------------------- // TODO: replace with GetFontCharMap() -ULONG FreetypeServerFont::GetFontCodeRanges( sal_uInt32* pCodes ) const +bool FreetypeServerFont::GetFontCodeRanges( CmapResult& rResult ) const { - CmapResult aResult; - aResult.mnPairCount = 0; - aResult.mpPairCodes = NULL; - aResult.mbSymbolic = mpFontInfo->IsSymbolFont(); + rResult.mbSymbolic = mpFontInfo->IsSymbolFont(); + // TODO: is the full CmapResult needed on platforms calling this? if( FT_IS_SFNT( maFaceFT ) ) { ULONG nLength = 0; const unsigned char* pCmap = mpFontInfo->GetTable( "cmap", &nLength ); - if( pCmap && nLength && ParseCMAP( pCmap, nLength, aResult ) ) - { - // copy the ranges into the provided array... - if( pCodes ) - for( int i = 0; i < 2*aResult.mnPairCount; ++i ) - pCodes[ i ] = aResult.mpPairCodes[ i ]; - - delete[] aResult.mpPairCodes; - } + if( pCmap && (nLength > 0) ) + if( ParseCMAP( pCmap, nLength, rResult ) ) + return true; } - if( aResult.mnPairCount <= 0 ) + typedef std::vector U32Vector; + U32Vector aCodes; + + // FT's coverage is available since FT>=2.1.0 (OOo-baseline>=2.1.4 => ok) + aCodes.reserve( 0x1000 ); + FT_UInt nGlyphIndex; + for( sal_uInt32 cCode = FT_Get_First_Char( maFaceFT, &nGlyphIndex );; ) { - if( aResult.mbSymbolic ) - { - // we usually get here for Type1 symbol fonts - if( pCodes ) - { - pCodes[ 0 ] = 0xF020; - pCodes[ 1 ] = 0xF100; - } - aResult.mnPairCount = 1; - } - else - { - // we have to use the brute force method... - for( sal_uInt32 cCode = 0x0020;; ) - { - for(; cCode<0xFFF0 && !GetGlyphIndex( cCode ); ++cCode ) ; - if( cCode >= 0xFFF0 ) - break; - ++aResult.mnPairCount; - if( pCodes ) - *(pCodes++) = cCode; - for(; cCode<0xFFF0 && GetGlyphIndex( cCode ); ++cCode ) ; - if( pCodes ) - *(pCodes++) = cCode; - } - } + if( !nGlyphIndex ) + break; + aCodes.push_back( cCode ); // first code inside range + sal_uInt32 cNext = cCode; + do cNext = FT_Get_Next_Char( maFaceFT, cCode, &nGlyphIndex ); while( cNext == ++cCode ); + aCodes.push_back( cCode ); // first code outside range + cCode = cNext; } - return aResult.mnPairCount; + const int nCount = aCodes.size(); + if( !nCount) { + if( !rResult.mbSymbolic ) + return false; + + // we usually get here for Type1 symbol fonts + aCodes.push_back( 0xF020 ); + aCodes.push_back( 0xF100 ); + } + + sal_uInt32* pCodes = new sal_uInt32[ nCount ]; + for( int i = 0; i < nCount; ++i ) + pCodes[i] = aCodes[i]; + rResult.mpRangeCodes = pCodes; + rResult.mnRangeCount = nCount / 2; + return true; } + // ----------------------------------------------------------------------- // kerning stuff // ----------------------------------------------------------------------- diff --git a/vcl/source/glyphs/gcach_ftyp.hxx b/vcl/source/glyphs/gcach_ftyp.hxx index 660f772d43ed..936abdc02e59 100644 --- a/vcl/source/glyphs/gcach_ftyp.hxx +++ b/vcl/source/glyphs/gcach_ftyp.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gcach_ftyp.hxx,v $ - * $Revision: 1.41 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -208,7 +205,7 @@ protected: int ApplyGlyphTransform( int nGlyphFlags, FT_GlyphRec_*, bool ) const; virtual void InitGlyphData( int nGlyphIndex, GlyphData& ) const; - virtual ULONG GetFontCodeRanges( sal_uInt32* pCodes ) const; + virtual bool GetFontCodeRanges( CmapResult& ) const; bool ApplyGSUB( const ImplFontSelectData& ); virtual ServerFontLayoutEngine* GetLayoutEngine(); diff --git a/vcl/source/glyphs/gcach_layout.cxx b/vcl/source/glyphs/gcach_layout.cxx index 6bbf78f819b0..364a1fcd3beb 100644 --- a/vcl/source/glyphs/gcach_layout.cxx +++ b/vcl/source/glyphs/gcach_layout.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gcach_layout.cxx,v $ - * $Revision: 1.46 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/vcl/source/glyphs/gcach_rbmp.cxx b/vcl/source/glyphs/gcach_rbmp.cxx index 9cba5332f281..1419a205f9a6 100644 --- a/vcl/source/glyphs/gcach_rbmp.cxx +++ b/vcl/source/glyphs/gcach_rbmp.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gcach_rbmp.cxx,v $ - * $Revision: 1.10.114.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/vcl/source/glyphs/gcach_vdev.cxx b/vcl/source/glyphs/gcach_vdev.cxx index 31e0824ea0ba..1ac9ee9bf0a6 100644 --- a/vcl/source/glyphs/gcach_vdev.cxx +++ b/vcl/source/glyphs/gcach_vdev.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gcach_vdev.cxx,v $ - * $Revision: 1.20 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/vcl/source/glyphs/gcach_vdev.hxx b/vcl/source/glyphs/gcach_vdev.hxx index ae90c23d46a4..01ebc0f704cd 100644 --- a/vcl/source/glyphs/gcach_vdev.hxx +++ b/vcl/source/glyphs/gcach_vdev.hxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gcach_vdev.hxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/vcl/source/glyphs/glyphcache.cxx b/vcl/source/glyphs/glyphcache.cxx index f4e2de486b4b..e3e840e40730 100644 --- a/vcl/source/glyphs/glyphcache.cxx +++ b/vcl/source/glyphs/glyphcache.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: glyphcache.cxx,v $ - * $Revision: 1.44 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/vcl/unx/headless/svpprn.cxx b/vcl/unx/headless/svpprn.cxx index c3253ed163e8..1882b50e6ad7 100644 --- a/vcl/unx/headless/svpprn.cxx +++ b/vcl/unx/headless/svpprn.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: svpprn.cxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -28,6 +25,9 @@ * ************************************************************************/ +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + #include "vcl/svapp.hxx" #include "vcl/jobset.h" #include "vcl/print.h" diff --git a/vcl/unx/headless/svppspgraphics.cxx b/vcl/unx/headless/svppspgraphics.cxx index eb342a130d85..3e9d67bcbbe9 100644 --- a/vcl/unx/headless/svppspgraphics.cxx +++ b/vcl/unx/headless/svppspgraphics.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: svppspgraphics.cxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -28,6 +25,9 @@ * ************************************************************************/ +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + #include "svppspgraphics.hxx" #include "svpbmp.hxx" @@ -39,6 +39,7 @@ #include "vcl/glyphcache.hxx" #include "vcl/impfont.hxx" #include "vcl/outfont.hxx" +#include "vcl/fontsubset.hxx" #include "vcl/svapp.hxx" #include "vcl/salprn.hxx" #include "vcl/sysdata.hxx" @@ -685,16 +686,13 @@ void PspGraphics::DrawServerFontLayout( const ServerFontLayout& rLayout ) ImplFontCharMap* PspGraphics::GetImplFontCharMap() const { // TODO: get ImplFontCharMap directly from fonts - int nPairCount = 0; - if( m_pServerFont[0] ) - nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL ); - if( !nPairCount ) + if( !m_pServerFont[0] ) return NULL; - sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ]; - if( m_pServerFont[0] ) - m_pServerFont[0]->GetFontCodeRanges( pCodePairs ); - return new ImplFontCharMap( nPairCount, pCodePairs ); + CmapResult aCmapResult; + if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) ) + return NULL; + return new ImplFontCharMap( aCmapResult ); } USHORT PspGraphics::SetFont( ImplFontSelectData *pEntry, int nFallbackLevel ) @@ -906,7 +904,7 @@ BOOL PspGraphics::CreateFontSubset( sal_Int32* pGlyphIDs, sal_uInt8* pEncoding, sal_Int32* pWidths, - int nGlyphs, + int nGlyphCount, FontSubsetInfo& rInfo ) { @@ -916,7 +914,16 @@ BOOL PspGraphics::CreateFontSubset( // which this method was created). The correct way would // be to have the GlyphCache search for the ImplFontData pFont psp::fontID aFont = pFont->GetFontId(); - return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo ); + + psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); + bool bSuccess = rMgr.createFontSubset( rInfo, + aFont, + rToFile, + pGlyphIDs, + pEncoding, + pWidths, + nGlyphCount ); + return bSuccess; } //-------------------------------------------------------------------------- @@ -970,50 +977,6 @@ void PspGraphics::GetGlyphWidths( const ImplFontData* pFont, // static helpers of PspGraphics -bool PspGraphics::DoCreateFontSubset( const rtl::OUString& rToFile, - psp::fontID aFont, - sal_Int32* pGlyphIDs, - sal_uInt8* pEncoding, - sal_Int32* pWidths, - int nGlyphs, - FontSubsetInfo& rInfo ) -{ - psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); - psp::PrintFontInfo aFontInfo; - - if( ! rMgr.getFontInfo( aFont, aFontInfo ) ) - return false; - - // fill in font info - switch( aFontInfo.m_eType ) - { - case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break; - case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break; - default: - return false; - } - rInfo.m_nAscent = aFontInfo.m_nAscend; - rInfo.m_nDescent = aFontInfo.m_nDescend; - rInfo.m_aPSName = rMgr.getPSName( aFont ); - - int xMin, yMin, xMax, yMax; - rMgr.getFontBoundingBox( aFont, xMin, yMin, xMax, yMax ); - - if( ! rMgr.createFontSubset( aFont, - rToFile, - pGlyphIDs, - pEncoding, - pWidths, - nGlyphs - ) ) - return false; - - rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) ); - rInfo.m_nCapHeight = yMax; // Well ... - - return true; -} - const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen ) { psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); @@ -1025,8 +988,8 @@ const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnico // fill in font info switch( aFontInfo.m_eType ) { - case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break; - case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break; + case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break; + case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break; default: return NULL; } diff --git a/vcl/unx/headless/svppspgraphics.hxx b/vcl/unx/headless/svppspgraphics.hxx index 81e4a29b8d55..7e5ff051f27b 100644 --- a/vcl/unx/headless/svppspgraphics.hxx +++ b/vcl/unx/headless/svppspgraphics.hxx @@ -72,13 +72,6 @@ public: virtual ~PspGraphics(); // helper methods for sharing with X11SalGraphics - static bool DoCreateFontSubset( const rtl::OUString& rToFile, - psp::fontID aFont, - sal_Int32* pGlyphIDs, - sal_uInt8* pEncoding, - sal_Int32* pWidths, - int nGlyphs, - FontSubsetInfo& rInfo ); static const void* DoGetEmbedFontData( psp::fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen ); static void DoFreeEmbedFontData( const void* pData, long nLen ); static const Ucs2SIntMap* DoGetFontEncodingVector( psp::fontID aFont, const Ucs2OStrMap** pNonEncoded ); diff --git a/vcl/unx/headless/svptext.cxx b/vcl/unx/headless/svptext.cxx index dc96aaaa8160..eac9e46c2348 100644 --- a/vcl/unx/headless/svptext.cxx +++ b/vcl/unx/headless/svptext.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: svptext.cxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -274,20 +271,13 @@ ULONG SvpSalGraphics::GetKernPairs( ULONG nPairs, ImplKernPairData* pKernPairs ) ImplFontCharMap* SvpSalGraphics::GetImplFontCharMap() const { - ImplFontCharMap* pMap = NULL; - - int nPairCount = 0; - if( m_pServerFont[0] ) - nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL ); + if( !m_pServerFont[0] ) + return NULL; - if( nPairCount > 0 ) - { - sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ]; - m_pServerFont[0]->GetFontCodeRanges( pCodePairs ); - pMap = new ImplFontCharMap( nPairCount, pCodePairs ); - } - - return pMap; + CmapResult aCmapResult; + if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) ) + return NULL; + return new ImplFontCharMap( aCmapResult ); } // --------------------------------------------------------------------------- @@ -354,7 +344,7 @@ BOOL SvpSalGraphics::CreateFontSubset( sal_Int32* pGlyphIDs, sal_uInt8* pEncoding, sal_Int32* pWidths, - int nGlyphs, + int nGlyphCount, FontSubsetInfo& rInfo ) { @@ -364,7 +354,16 @@ BOOL SvpSalGraphics::CreateFontSubset( // which this method was created). The correct way would // be to have the GlyphCache search for the ImplFontData pFont psp::fontID aFont = pFont->GetFontId(); - return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo ); + + psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); + bool bSuccess = rMgr.createFontSubset( rInfo, + aFont, + rToFile, + pGlyphIDs, + pEncoding, + pWidths, + nGlyphCount ); + return bSuccess; } // --------------------------------------------------------------------------- diff --git a/vcl/unx/inc/pspgraphics.h b/vcl/unx/inc/pspgraphics.h index 219cc5f0a8ff..0ccc13291714 100644 --- a/vcl/unx/inc/pspgraphics.h +++ b/vcl/unx/inc/pspgraphics.h @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pspgraphics.h,v $ - * $Revision: 1.21 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -68,13 +65,6 @@ public: virtual ~PspGraphics(); // helper methods for sharing with X11SalGraphics - static bool DoCreateFontSubset( const rtl::OUString& rToFile, - psp::fontID aFont, - sal_Int32* pGlyphIDs, - sal_uInt8* pEncoding, - sal_Int32* pWidths, - int nGlyphs, - FontSubsetInfo& rInfo ); static const void* DoGetEmbedFontData( psp::fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen ); static void DoFreeEmbedFontData( const void* pData, long nLen ); static const Ucs2SIntMap* DoGetFontEncodingVector( psp::fontID aFont, const Ucs2OStrMap** pNonEncoded ); diff --git a/vcl/unx/kde/kdedata.cxx b/vcl/unx/kde/kdedata.cxx index f29ef1d4ff96..15a5ba087ab2 100644 --- a/vcl/unx/kde/kdedata.cxx +++ b/vcl/unx/kde/kdedata.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: kdedata.cxx,v $ - * $Revision: 1.21 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -248,7 +245,7 @@ extern "C" { if( nMajor != 3 || nMinor < 2 || (nMinor == 2 && nMicro < 2) ) { #if OSL_DEBUG_LEVEL > 1 - fprintf( stderr, "unsuitable qt version %"SAL_PRIdINT32".%"SAL_PRIdINT32".%"SAL_PRIdINT32"\n", nMajor, nMinor, nMicro ); + fprintf( stderr, "unsuitable qt version %d.%d.%d\n", (int)nMajor, (int)nMinor, (int)nMicro ); #endif return NULL; } diff --git a/vcl/unx/source/fontmanager/fontcache.cxx b/vcl/unx/source/fontmanager/fontcache.cxx index 4932f7a771e0..524a365ee20b 100644 --- a/vcl/unx/source/fontmanager/fontcache.cxx +++ b/vcl/unx/source/fontmanager/fontcache.cxx @@ -7,7 +7,6 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: fontcache.cxx,v $ - * $Revision: 1.26 $ * * This file is part of OpenOffice.org. * @@ -50,7 +49,7 @@ #endif #define FONTCACHEFILE "/user/psprint/pspfontcache" -#define CACHE_MAGIC "PspFontCacheFile format 3" +#define CACHE_MAGIC "PspFontCacheFile format 4" using namespace std; using namespace rtl; diff --git a/vcl/unx/source/fontmanager/fontmanager.cxx b/vcl/unx/source/fontmanager/fontmanager.cxx index 995abb5fb89f..99f19ba2fc31 100644 --- a/vcl/unx/source/fontmanager/fontmanager.cxx +++ b/vcl/unx/source/fontmanager/fontmanager.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: fontmanager.cxx,v $ - * $Revision: 1.81.22.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -41,7 +38,8 @@ #include "vcl/fontmanager.hxx" #include "vcl/fontcache.hxx" -#include "vcl/helper.hxx" +#include "vcl/fontcache.hxx" +#include "vcl/fontsubset.hxx" #include "vcl/strhelper.hxx" #include "vcl/ppdparser.hxx" #include "vcl/svdata.hxx" @@ -377,6 +375,15 @@ PrintFontManager::Type1FontFile::~Type1FontFile() // ------------------------------------------------------------------------- +PrintFontManager::TrueTypeFontFile::TrueTypeFontFile() +: PrintFont( fonttype::TrueType ) +, m_nDirectory( 0 ) +, m_nCollectionEntry(-1) +, m_nTypeFlags( TYPEFLAG_INVALID ) +{} + +// ------------------------------------------------------------------------- + PrintFontManager::TrueTypeFontFile::~TrueTypeFontFile() { } @@ -1353,7 +1360,7 @@ bool PrintFontManager::analyzeFontFile( int nDirID, const OString& rFontFile, co } else if( aExt.EqualsIgnoreCaseAscii( "ttf" ) || aExt.EqualsIgnoreCaseAscii( "tte" ) // #i33947# for Gaiji support - || aExt.EqualsIgnoreCaseAscii( "otf" ) ) // #112957# allow GLYF-OTF + || aExt.EqualsIgnoreCaseAscii( "otf" ) ) // check for TTF- and PS-OpenType too { TrueTypeFontFile* pFont = new TrueTypeFontFile(); pFont->m_nDirectory = nDirID; @@ -2625,6 +2632,10 @@ void PrintFontManager::fillPrintFontInfo( PrintFont* pFont, FastPrintFontInfo& r rInfo.m_aEncoding = pFont->m_aEncoding; rInfo.m_eEmbeddedbitmap = pFont->m_eEmbeddedbitmap; rInfo.m_eAntialias = pFont->m_eAntialias; + + rInfo.m_bEmbeddable = (pFont->m_eType == fonttype::Type1); + rInfo.m_bSubsettable = (pFont->m_eType == fonttype::TrueType); // TODO: rename to SfntType + rInfo.m_aAliases.clear(); for( ::std::list< int >::iterator it = pFont->m_aAliases.begin(); it != pFont->m_aAliases.end(); ++it ) rInfo.m_aAliases.push_back( m_pAtoms->getString( ATOM_FAMILYNAME, *it ) ); @@ -3054,7 +3065,7 @@ bool PrintFontManager::isFontDownloadingAllowed( fontID nFont ) const if( pFont && pFont->m_eType == fonttype::TrueType ) { TrueTypeFontFile* pTTFontFile = static_cast(pFont); - if( pTTFontFile->m_nTypeFlags & 0x80000000 ) + if( pTTFontFile->m_nTypeFlags & TYPEFLAG_INVALID ) { TrueTypeFont* pTTFont = NULL; ByteString aFile = getFontFile( pFont ); @@ -3068,7 +3079,7 @@ bool PrintFontManager::isFontDownloadingAllowed( fontID nFont ) const } } - unsigned int nCopyrightFlags = pTTFontFile->m_nTypeFlags & 0x0e; + unsigned int nCopyrightFlags = pTTFontFile->m_nTypeFlags & TYPEFLAG_COPYRIGHT_MASK; // font embedding is allowed if either // no restriction at all (bit 1 clear) @@ -3610,7 +3621,9 @@ bool PrintFontManager::getAlternativeFamilyNames( fontID nFont, ::std::list< OUS // ------------------------------------------------------------------------- +// TODO: move most of this stuff into the central font-subsetting code bool PrintFontManager::createFontSubset( + FontSubsetInfo& rInfo, fontID nFont, const OUString& rOutFile, sal_Int32* pGlyphIDs, @@ -3621,27 +3634,31 @@ bool PrintFontManager::createFontSubset( ) { PrintFont* pFont = getFont( nFont ); - if( !pFont || pFont->m_eType != fonttype::TrueType ) + if( !pFont ) return false; - OUString aSysPath; - if( osl_File_E_None != osl_getSystemPathFromFileURL( rOutFile.pData, &aSysPath.pData ) ) + switch( pFont->m_eType ) + { + case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break; + case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break; + default: + return false; + } + // TODO: remove when Type1 subsetting gets implemented + if( pFont->m_eType != fonttype::TrueType ) return false; - rtl_TextEncoding aEncoding = osl_getThreadTextEncoding(); - ByteString aFromFile = getFontFile( pFont ); - ByteString aToFile( OUStringToOString( aSysPath, aEncoding ) ); - + // reshuffle array of requested glyphs to make sure glyph0==notdef sal_uInt8 pEnc[256]; sal_uInt16 pGID[256]; sal_uInt8 pOldIndex[256]; - memset( pEnc, 0, sizeof( pEnc ) ); memset( pGID, 0, sizeof( pGID ) ); memset( pOldIndex, 0, sizeof( pOldIndex ) ); + if( nGlyphs > 256 ) + return false; int nChar = 1; - int i; - for( i = 0; i < nGlyphs; i++ ) + for( int i = 0; i < nGlyphs; i++ ) { if( pNewEncoding[i] == 0 ) { @@ -3660,21 +3677,70 @@ bool PrintFontManager::createFontSubset( } nGlyphs = nChar; // either input value or increased by one - if( nGlyphs > 256 ) - return false; + // prepare system name for read access for subset source file + // TODO: since this file is usually already mmapped there is no need to open it again + const ByteString aFromFile = getFontFile( pFont ); - TrueTypeFont* pTTFont = NULL; + TrueTypeFont* pTTFont = NULL; // TODO: rename to SfntFont TrueTypeFontFile* pTTFontFile = static_cast< TrueTypeFontFile* >(pFont); if( OpenTTFontFile( aFromFile.GetBuffer(), pTTFontFile->m_nCollectionEntry < 0 ? 0 : pTTFontFile->m_nCollectionEntry, &pTTFont ) != SF_OK ) return false; + // prepare system name for write access for subset file target + OUString aSysPath; + if( osl_File_E_None != osl_getSystemPathFromFileURL( rOutFile.pData, &aSysPath.pData ) ) + return false; + const rtl_TextEncoding aEncoding = osl_getThreadTextEncoding(); + const ByteString aToFile( OUStringToOString( aSysPath, aEncoding ) ); + + // do CFF subsetting if possible + int nCffLength = 0; + const sal_uInt8* pCffBytes = NULL; + if( GetSfntTable( pTTFont, O_CFF, &pCffBytes, &nCffLength ) ) + { + rInfo.LoadFont( FontSubsetInfo::CFF_FONT, pCffBytes, nCffLength ); +#if 1 // TODO: remove 16bit->long conversion when related methods handle non-16bit glyphids + long aRequestedGlyphs[256]; + for( int i = 0; i < nGlyphs; ++i ) + aRequestedGlyphs[i] = pGID[i]; +#endif + // create subset file at requested path + FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" ); + // create font subset + const char* pGlyphSetName = NULL; // TODO: better name? + const bool bOK = rInfo.CreateFontSubset( + FontSubsetInfo::TYPE1_PFB, + pOutFile, pGlyphSetName, + aRequestedGlyphs, pEnc, nGlyphs, pWidths ); + fclose( pOutFile ); + // cleanup before early return + CloseTTFont( pTTFont ); + return bOK; + } + + // do TTF->Type42 or Type3 subsetting + // fill in font info + psp::PrintFontInfo aFontInfo; + if( ! getFontInfo( nFont, aFontInfo ) ) + return false; + + rInfo.m_nAscent = aFontInfo.m_nAscend; + rInfo.m_nDescent = aFontInfo.m_nDescend; + rInfo.m_aPSName = getPSName( nFont ); + + int xMin, yMin, xMax, yMax; + getFontBoundingBox( nFont, xMin, yMin, xMax, yMax ); + rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) ); + rInfo.m_nCapHeight = yMax; // Well ... + + // fill in glyph advance widths TTSimpleGlyphMetrics* pMetrics = GetTTSimpleGlyphMetrics( pTTFont, pGID, nGlyphs, bVertical ? 1 : 0 ); if( pMetrics ) { - for( i = 0; i < nGlyphs; i++ ) + for( int i = 0; i < nGlyphs; i++ ) pWidths[pOldIndex[i]] = pMetrics[i].adv; free( pMetrics ); } diff --git a/vcl/unx/source/gdi/pspgraphics.cxx b/vcl/unx/source/gdi/pspgraphics.cxx index 18a54ef0d770..009b14c56062 100644 --- a/vcl/unx/source/gdi/pspgraphics.cxx +++ b/vcl/unx/source/gdi/pspgraphics.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pspgraphics.cxx,v $ - * $Revision: 1.33 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -40,6 +37,7 @@ #include "vcl/glyphcache.hxx" #include "vcl/impfont.hxx" #include "vcl/outfont.hxx" +#include "vcl/fontsubset.hxx" #include "vcl/svapp.hxx" #include "vcl/salprn.hxx" #include "vcl/sysdata.hxx" @@ -775,16 +773,13 @@ void PspGraphics::DrawServerFontLayout( const ServerFontLayout& rLayout ) ImplFontCharMap* PspGraphics::GetImplFontCharMap() const { // TODO: get ImplFontCharMap directly from fonts - int nPairCount = 0; - if( m_pServerFont[0] ) - nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL ); - if( !nPairCount ) + if( !m_pServerFont[0] ) return NULL; - sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ]; - if( m_pServerFont[0] ) - m_pServerFont[0]->GetFontCodeRanges( pCodePairs ); - return new ImplFontCharMap( nPairCount, pCodePairs ); + CmapResult aCmapResult; + if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) ) + return NULL; + return new ImplFontCharMap( aCmapResult ); } USHORT PspGraphics::SetFont( ImplFontSelectData *pEntry, int nFallbackLevel ) @@ -1016,7 +1011,7 @@ BOOL PspGraphics::CreateFontSubset( sal_Int32* pGlyphIDs, sal_uInt8* pEncoding, sal_Int32* pWidths, - int nGlyphs, + int nGlyphCount, FontSubsetInfo& rInfo ) { @@ -1026,7 +1021,16 @@ BOOL PspGraphics::CreateFontSubset( // which this method was created). The correct way would // be to have the GlyphCache search for the ImplFontData pFont psp::fontID aFont = pFont->GetFontId(); - return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo ); + + psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); + bool bSuccess = rMgr.createFontSubset( rInfo, + aFont, + rToFile, + pGlyphIDs, + pEncoding, + pWidths, + nGlyphCount ); + return bSuccess; } //-------------------------------------------------------------------------- @@ -1081,50 +1085,6 @@ void PspGraphics::GetGlyphWidths( const ImplFontData* pFont, // static helpers of PspGraphics -bool PspGraphics::DoCreateFontSubset( const rtl::OUString& rToFile, - psp::fontID aFont, - sal_Int32* pGlyphIDs, - sal_uInt8* pEncoding, - sal_Int32* pWidths, - int nGlyphs, - FontSubsetInfo& rInfo ) -{ - psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); - psp::PrintFontInfo aFontInfo; - - if( ! rMgr.getFontInfo( aFont, aFontInfo ) ) - return false; - - // fill in font info - switch( aFontInfo.m_eType ) - { - case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break; - case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break; - default: - return false; - } - rInfo.m_nAscent = aFontInfo.m_nAscend; - rInfo.m_nDescent = aFontInfo.m_nDescend; - rInfo.m_aPSName = rMgr.getPSName( aFont ); - - int xMin, yMin, xMax, yMax; - rMgr.getFontBoundingBox( aFont, xMin, yMin, xMax, yMax ); - - if( ! rMgr.createFontSubset( aFont, - rToFile, - pGlyphIDs, - pEncoding, - pWidths, - nGlyphs - ) ) - return false; - - rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) ); - rInfo.m_nCapHeight = yMax; // Well ... - - return true; -} - const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen ) { psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); @@ -1136,8 +1096,8 @@ const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnico // fill in font info switch( aFontInfo.m_eType ) { - case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break; - case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break; + case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break; + case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break; default: return NULL; } @@ -1315,6 +1275,8 @@ ImplDevFontAttributes PspGraphics::Info2DevFontAttributes( const psp::FastPrintF aDFA.meWidthType = ToFontWidth (rInfo.m_eWidth); aDFA.mePitch = ToFontPitch (rInfo.m_ePitch); aDFA.mbSymbolFlag = (rInfo.m_aEncoding == RTL_TEXTENCODING_SYMBOL); + aDFA.mbSubsettable = rInfo.m_bSubsettable; + aDFA.mbEmbeddable = rInfo.m_bEmbeddable; switch (rInfo.m_eEmbeddedbitmap) { @@ -1347,26 +1309,18 @@ ImplDevFontAttributes PspGraphics::Info2DevFontAttributes( const psp::FastPrintF case psp::fonttype::Builtin: aDFA.mnQuality = 1024; aDFA.mbDevice = true; - aDFA.mbSubsettable = false; - aDFA.mbEmbeddable = false; break; case psp::fonttype::TrueType: aDFA.mnQuality = 512; aDFA.mbDevice = false; - aDFA.mbSubsettable = true; - aDFA.mbEmbeddable = false; break; case psp::fonttype::Type1: aDFA.mnQuality = 0; aDFA.mbDevice = false; - aDFA.mbSubsettable = false; - aDFA.mbEmbeddable = true; break; default: aDFA.mnQuality = 0; aDFA.mbDevice = false; - aDFA.mbSubsettable = false; - aDFA.mbEmbeddable = false; break; } diff --git a/vcl/unx/source/gdi/salgdi3.cxx b/vcl/unx/source/gdi/salgdi3.cxx index 0ee0e0bb20c8..5d6cd464376a 100644 --- a/vcl/unx/source/gdi/salgdi3.cxx +++ b/vcl/unx/source/gdi/salgdi3.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: salgdi3.cxx,v $ - * $Revision: 1.157.12.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -1455,21 +1452,17 @@ void X11SalGraphics::DrawStringUCS2MB( ExtendedFontStruct& rFont, ImplFontCharMap* X11SalGraphics::GetImplFontCharMap() const { // TODO: get ImplFontCharMap directly from fonts - int nPairCount = 0; - if( mpServerFont[0] ) - nPairCount = mpServerFont[0]->GetFontCodeRanges( NULL ); - else if( mXFont[0] ) - nPairCount = mXFont[0]->GetFontCodeRanges( NULL ); - - if( !nPairCount ) + if( !mpServerFont[0] ) +#if 0 // RIP XLFD fonts + if( mXFont[0] ) + // TODO?: nPairCount = mXFont[0]->GetFontCodeRanges( NULL ); +#endif return NULL; - sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ]; - if( mpServerFont[0] ) - mpServerFont[0]->GetFontCodeRanges( pCodePairs ); - else if( mXFont[0] ) - mXFont[0]->GetFontCodeRanges( pCodePairs ); - return new ImplFontCharMap( nPairCount, pCodePairs ); + CmapResult aCmapResult; + if( !mpServerFont[0]->GetFontCodeRanges( aCmapResult ) ) + return NULL; + return new ImplFontCharMap( aCmapResult ); } // ---------------------------------------------------------------------------- @@ -1750,21 +1743,26 @@ BOOL X11SalGraphics::CreateFontSubset( sal_Int32* pGlyphIDs, sal_uInt8* pEncoding, sal_Int32* pWidths, - int nGlyphs, + int nGlyphCount, FontSubsetInfo& rInfo ) { -#ifndef _USE_PRINT_EXTENSION_ // in this context the pFont->GetFontId() is a valid PSP // font since they are the only ones left after the PDF // export has filtered its list of subsettable fonts (for // which this method was created). The correct way would // be to have the GlyphCache search for the ImplFontData pFont psp::fontID aFont = pFont->GetFontId(); - return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo ); -#else - return FALSE; -#endif + + psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); + bool bSuccess = rMgr.createFontSubset( rInfo, + aFont, + rToFile, + pGlyphIDs, + pEncoding, + pWidths, + nGlyphCount ); + return bSuccess; } //-------------------------------------------------------------------------- diff --git a/vcl/unx/source/printergfx/glyphset.cxx b/vcl/unx/source/printergfx/glyphset.cxx index 2a35e975cbab..156517d98220 100644 --- a/vcl/unx/source/printergfx/glyphset.cxx +++ b/vcl/unx/source/printergfx/glyphset.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: glyphset.cxx,v $ - * $Revision: 1.24 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -38,6 +35,7 @@ #include "vcl/printergfx.hxx" #include "vcl/fontmanager.hxx" +#include "vcl/fontsubset.hxx" #include "osl/thread.h" @@ -787,8 +785,32 @@ GlyphSet::PSUploadEncoding(osl::File* pOutFile, PrinterGfx &rGfx) return sal_True; } +static void CreatePSUploadableFont( TrueTypeFont* pSrcFont, FILE* pTmpFile, + const char* pGlyphSetName, int nGlyphCount, + /*const*/ sal_uInt16* pRequestedGlyphs, /*const*/ sal_uChar* pEncoding, + bool bAllowType42, bool /*bAllowCID*/ ) +{ + // match the font-subset to the printer capabilities + // TODO: allow CFF for capable printers + int nTargetMask = FontSubsetInfo::TYPE1_PFA | FontSubsetInfo::TYPE3_FONT; + if( bAllowType42 ) + nTargetMask |= FontSubsetInfo::TYPE42_FONT; + + FontSubsetInfo aInfo; + aInfo.LoadFont( pSrcFont ); + +#if 1 // TODO: remove 16bit->long conversion when input args has been changed + long aRequestedGlyphs[256]; + for( int i = 0; i < nGlyphCount; ++i ) + aRequestedGlyphs[i] = pRequestedGlyphs[i]; +#endif + + aInfo.CreateFontSubset( nTargetMask, pTmpFile, pGlyphSetName, + aRequestedGlyphs, pEncoding, nGlyphCount, NULL ); +} + sal_Bool -GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, std::list< OString >& rSuppliedFonts ) +GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAllowType42, std::list< OString >& rSuppliedFonts ) { // only for truetype fonts if (meBaseType != fonttype::TrueType) @@ -811,6 +833,7 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s // of the glyph in the output file sal_uChar pEncoding[256]; sal_uInt16 pTTGlyphMapping[256]; + const bool bAllowCID = false; // TODO: nPSLanguageLevel>=3 // loop thru all the font subsets sal_Int32 nCharSetID; @@ -838,13 +861,8 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s // create the current subset OString aCharSetName = GetCharSetName(nCharSetID); fprintf( pTmpFile, "%%%%BeginResource: font %s\n", aCharSetName.getStr() ); - if( bAsType42 ) - CreateT42FromTTGlyphs (pTTFont, pTmpFile, aCharSetName.getStr(), - pTTGlyphMapping, pEncoding, (*aCharSet).size() ); - else - CreateT3FromTTGlyphs (pTTFont, pTmpFile, aCharSetName.getStr(), - pTTGlyphMapping, pEncoding, (*aCharSet).size(), - 0 /* 0 = horizontal, 1 = vertical */ ); + CreatePSUploadableFont( pTTFont, pTmpFile, aCharSetName.getStr(), (*aCharSet).size(), + pTTGlyphMapping, pEncoding, bAllowType42, bAllowCID ); fprintf( pTmpFile, "%%%%EndResource\n" ); rSuppliedFonts.push_back( aCharSetName ); } @@ -872,13 +890,8 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s // create the current subset OString aGlyphSetName = GetGlyphSetName(nGlyphSetID); fprintf( pTmpFile, "%%%%BeginResource: font %s\n", aGlyphSetName.getStr() ); - if( bAsType42 ) - CreateT42FromTTGlyphs (pTTFont, pTmpFile, aGlyphSetName.getStr(), - pTTGlyphMapping, pEncoding, (*aGlyphSet).size() ); - else - CreateT3FromTTGlyphs (pTTFont, pTmpFile, aGlyphSetName.getStr(), - pTTGlyphMapping, pEncoding, (*aGlyphSet).size(), - 0 /* 0 = horizontal, 1 = vertical */ ); + CreatePSUploadableFont( pTTFont, pTmpFile, aGlyphSetName.getStr(), (*aGlyphSet).size(), + pTTGlyphMapping, pEncoding, bAllowType42, bAllowCID ); fprintf( pTmpFile, "%%%%EndResource\n" ); rSuppliedFonts.push_back( aGlyphSetName ); } @@ -903,5 +916,3 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s return sal_True; } - - diff --git a/vcl/unx/source/printergfx/text_gfx.cxx b/vcl/unx/source/printergfx/text_gfx.cxx index e9c173682f87..00e3ab5f44c2 100644 --- a/vcl/unx/source/printergfx/text_gfx.cxx +++ b/vcl/unx/source/printergfx/text_gfx.cxx @@ -199,7 +199,7 @@ void PrinterGfx::drawGlyphs( void PrinterGfx::DrawGlyphs( const Point& rPoint, - sal_uInt32* pGlyphIds, + sal_GlyphId* pGlyphIds, sal_Unicode* pUnicodes, sal_Int16 nLen, sal_Int32* pDeltaArray @@ -256,8 +256,8 @@ void PrinterGfx::DrawGlyphs( for( sal_Int16 i = 0; i < nLen; i++ ) { - sal_Int32 nRot = ((pGlyphIds[i] >> 24) & 3); - if( nRot == 0 ) + const sal_GlyphId nRot = pGlyphIds[i] & GF_ROTMASK; + if( nRot == GF_NONE ) { pTempUnicodes[nTempLen] = pUnicodes[i]; pTempGlyphIds[nTempLen] = pGlyphIds[i]; @@ -282,20 +282,20 @@ void PrinterGfx::DrawGlyphs( sal_Int32 nRotAngle = 0; switch( nRot ) { - case 3: + case GF_ROTR: nRotAngle = 2700; aRotPoint = Point( -nAscend*nTextWidth/nTextHeight, -nDescend*nTextWidth/nTextHeight - nOffset ); break; - case 2: + case GF_VERT: nRotAngle = 1800; aRotPoint = Point( -nOffset, (nAscend+nDescend) ); break; - case 1: + case GF_ROTL: nRotAngle = 900; aRotPoint = Point( -nDescend*nTextWidth/nTextHeight, nOffset + nAscend*nTextWidth/nTextHeight ); break; } - sal_uInt32 nRotGlyphId = pGlyphIds[i]; + sal_GlyphId nRotGlyphId = pGlyphIds[i]; sal_Unicode nRotUnicode = pUnicodes[i]; sal_Int32 nRotDelta = 0; diff --git a/vcl/win/source/gdi/salgdi3.cxx b/vcl/win/source/gdi/salgdi3.cxx index 2bae9ab1388b..73f4d8320acc 100644 --- a/vcl/win/source/gdi/salgdi3.cxx +++ b/vcl/win/source/gdi/salgdi3.cxx @@ -6,9 +6,6 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: salgdi3.cxx,v $ - * $Revision: 1.95.14.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -47,6 +44,7 @@ #include "vcl/svapp.hxx" #include "vcl/outfont.hxx" #include "vcl/font.hxx" +#include "vcl/fontsubset.hxx" #include "vcl/sallayout.hxx" #include "rtl/logfile.hxx" @@ -556,13 +554,10 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXA& rE aDFA.mbEmbeddable = false; aDFA.mbSubsettable = false; - if( (rMetric.tmPitchAndFamily & TMPF_TRUETYPE) != 0 ) - if( (rMetric.tmPitchAndFamily & TMPF_DEVICE) == 0 ) - // TODO: implement type1 or CFF subsetting - if( 0 == (rMetric.ntmFlags & (NTM_PS_OPENTYPE | NTM_TYPE1) ) ) - aDFA.mbSubsettable = true; - // for now we can only embed Type1 fonts - if( 0 != (rMetric.ntmFlags & NTM_TYPE1 ) ) + if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) + || 0 != (rMetric.tmPitchAndFamily & TMPF_TRUETYPE)) + aDFA.mbSubsettable = true; + else if( 0 != (rMetric.tmPitchAndFamily & NTM_TYPE1) ) // TODO: implement subsetting for type1 too aDFA.mbEmbeddable = true; // heuristics for font quality @@ -571,7 +566,7 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXA& rE aDFA.mnQuality = 0; if( rMetric.tmPitchAndFamily & TMPF_TRUETYPE ) aDFA.mnQuality += 50; - if( rMetric.ntmFlags & NTM_TT_OPENTYPE ) + if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) ) aDFA.mnQuality += 10; if( aDFA.mbSubsettable ) aDFA.mnQuality += 200; @@ -638,13 +633,10 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXW& rE aDFA.mbEmbeddable = false; aDFA.mbSubsettable = false; - if( (rMetric.tmPitchAndFamily & TMPF_TRUETYPE) != 0 ) - if( (rMetric.tmPitchAndFamily & TMPF_DEVICE) == 0 ) - // TODO: implement type1 or CFF subsetting - if( 0 == (rMetric.ntmFlags & (NTM_PS_OPENTYPE | NTM_TYPE1) ) ) - aDFA.mbSubsettable = true; - // for now we can only embed Type1 fonts - if( rMetric.ntmFlags & NTM_TYPE1 ) + if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) + || 0 != (rMetric.tmPitchAndFamily & TMPF_TRUETYPE)) + aDFA.mbSubsettable = true; + else if( 0 != (rMetric.tmPitchAndFamily & NTM_TYPE1) ) // TODO: implement subsetting for type1 too aDFA.mbEmbeddable = true; // heuristics for font quality @@ -653,7 +645,7 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXW& rE aDFA.mnQuality = 0; if( rMetric.tmPitchAndFamily & TMPF_TRUETYPE ) aDFA.mnQuality += 50; - if( rMetric.ntmFlags & NTM_TT_OPENTYPE ) + if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) ) aDFA.mnQuality += 10; if( aDFA.mbSubsettable ) aDFA.mnQuality += 200; @@ -1008,27 +1000,25 @@ void ImplWinFontData::ReadGsubTable( HDC hDC ) const void ImplWinFontData::ReadCmapTable( HDC hDC ) const { - CmapResult aResult; - aResult.mnPairCount = 0; - aResult.mpPairCodes = NULL; - aResult.mpStartGlyphs = NULL; - aResult.mbSymbolic = (meWinCharSet == SYMBOL_CHARSET); - aResult.mbRecoded = true; + if( mpUnicodeMap != NULL ) + return; + bool bIsSymbolFont = (meWinCharSet == SYMBOL_CHARSET); // get the CMAP table from the font which is selected into the DC const DWORD nCmapTag = CalcTag( "cmap" ); const RawFontData aRawFontData( hDC, nCmapTag ); // parse the CMAP table if available - if( aRawFontData.get() ) + if( aRawFontData.get() ) { + CmapResult aResult; ParseCMAP( aRawFontData.get(), aRawFontData.size(), aResult ); + mbDisableGlyphApi |= aResult.mbRecoded; + aResult.mbSymbolic = bIsSymbolFont; + if( aResult.mnRangeCount > 0 ) + mpUnicodeMap = new ImplFontCharMap( aResult ); + } - mbDisableGlyphApi |= aResult.mbRecoded; - - if( aResult.mnPairCount > 0 ) - mpUnicodeMap = new ImplFontCharMap( aResult.mnPairCount, - aResult.mpPairCodes, aResult.mpStartGlyphs ); - else - mpUnicodeMap = ImplFontCharMap::GetDefaultMap(); + if( !mpUnicodeMap ) + mpUnicodeMap = ImplFontCharMap::GetDefaultMap( bIsSymbolFont ); } // ======================================================================= @@ -2562,6 +2552,8 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, const ImplFontData* pFont, long* pGlyphIDs, sal_uInt8* pEncoding, sal_Int32* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rInfo ) { + // TODO: use more of the central font-subsetting code, move stuff there if needed + // create matching ImplFontSelectData // we need just enough to get to the font file data // use height=1000 for easier debugging (to match psprint's font units) @@ -2569,10 +2561,14 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, // TODO: much better solution: move SetFont and restoration of old font to caller ScopedFont aOldFont(*this); - float fScale = 0.0; + float fScale = 1.0; HFONT hOldFont = 0; ImplDoSetFont( &aIFSD, fScale, hOldFont ); + ImplWinFontData* pWinFontData = (ImplWinFontData*)aIFSD.mpFontData; + pWinFontData->UpdateFromHDC( mhDC ); +/*const*/ ImplFontCharMap* pImplFontCharMap = pWinFontData->GetImplFontCharMap(); + #if OSL_DEBUG_LEVEL > 1 // get font metrics TEXTMETRICA aWinMetric; @@ -2583,8 +2579,42 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, DBG_ASSERT( aWinMetric.tmPitchAndFamily & TMPF_TRUETYPE, "can only subset TT font" ); #endif + rtl::OUString aSysPath; + if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) ) + return FALSE; + const rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding(); + const ByteString aToFile( aSysPath.getStr(), (xub_StrLen)aSysPath.getLength(), aThreadEncoding ); + + // check if the font has a CFF-table + const DWORD nCffTag = CalcTag( "CFF " ); + const RawFontData aRawCffData( mhDC, nCffTag ); + if( aRawCffData.get() ) + { + long nRealGlyphIds[ 256 ]; + for( int i = 0; i < nGlyphCount; ++i ) + { + // TODO: remap notdef glyph if needed + // TODO: use GDI's GetGlyphIndices instead? Does it handle GSUB properly? + sal_uInt32 nGlyphIdx = pGlyphIDs[i] & GF_IDXMASK; + if( pGlyphIDs[i] & GF_ISCHAR ) // remaining pseudo-glyphs need to be translated + nGlyphIdx = pImplFontCharMap->GetGlyphIndex( nGlyphIdx ); + if( (pGlyphIDs[i] & (GF_ROTMASK|GF_GSUB)) != 0) // TODO: vertical substitution + {/*####*/} + + nRealGlyphIds[i] = nGlyphIdx; + } + + // provide a font subset from the CFF-table + FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" ); + rInfo.LoadFont( FontSubsetInfo::CFF_FONT, aRawCffData.get(), aRawCffData.size() ); + bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, NULL, + nRealGlyphIds, pEncoding, nGlyphCount, pGlyphWidths ); + fclose( pOutFile ); + return bRC; + } + // get raw font file data - const RawFontData xRawFontData( mhDC ); + const RawFontData xRawFontData( mhDC, NULL ); if( !xRawFontData.get() ) return FALSE; @@ -2600,7 +2630,7 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, TTGlobalFontInfo aTTInfo; ::GetTTGlobalFontInfo( aSftTTF.get(), &aTTInfo ); - rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE; + rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; rInfo.m_aPSName = ImplSalGetUniString( aTTInfo.psname ); rInfo.m_nAscent = +aTTInfo.winAscent; rInfo.m_nDescent = -aTTInfo.winDescent; @@ -2608,7 +2638,7 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, Point( aTTInfo.xMax, aTTInfo.yMax ) ); rInfo.m_nCapHeight = aTTInfo.yMax; // Well ... - // subset glyphs and get their properties + // subset TTF-glyphs and get their properties // take care that subset fonts require the NotDef glyph in pos 0 int nOrigCount = nGlyphCount; USHORT aShortIDs[ 256 ]; @@ -2664,11 +2694,6 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, free( pMetrics ); // write subset into destination file - rtl::OUString aSysPath; - if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) ) - return FALSE; - rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding(); - ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) ); nRC = ::CreateTTFromTTGlyphs( aSftTTF.get(), aToFile.GetBuffer(), aShortIDs, aTempEncs, nGlyphCount, 0, NULL, 0 ); return (nRC == SF_OK); @@ -2698,7 +2723,7 @@ const void* WinSalGraphics::GetEmbedFontData( const ImplFontData* pFont, TEXTMETRICA aTm; if( !::GetTextMetricsA( mhDC, &aTm ) ) *pDataLen = 0; - rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1; + rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; WCHAR aFaceName[64]; int nFNLen = ::GetTextFaceW( mhDC, 64, aFaceName ); // #i59854# strip eventual null byte @@ -2891,3 +2916,4 @@ SystemFontData WinSalGraphics::GetSysFontData( int nFallbacklevel ) const } //-------------------------------------------------------------------------- + -- cgit v1.2.3 From d30c818de2aa67effa98d57a40e25f3bde37267a Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Thu, 27 Aug 2009 15:44:10 +0000 Subject: CWS-TOOLING: integrate CWS c28v001_DEV300 2009-06-11 09:57:13 +0200 pl r272848 : #160046# make product and welcome text have transparent background to allow for more flexibility of the background bitmap 2009-06-11 09:54:27 +0200 pl r272847 : #160045# add edition search path for images.zip --- vcl/source/gdi/impimagetree.cxx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/vcl/source/gdi/impimagetree.cxx b/vcl/source/gdi/impimagetree.cxx index 9e1378f22326..039041826124 100644 --- a/vcl/source/gdi/impimagetree.cxx +++ b/vcl/source/gdi/impimagetree.cxx @@ -187,6 +187,17 @@ void ImplImageTree::setStyle(rtl::OUString const & style) { void ImplImageTree::resetZips() { m_zips.clear(); + { + rtl::OUString url( + RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/program/edition/images.zip")); + rtl::Bootstrap::expandMacros(url); + INetURLObject u(url); + OSL_ASSERT(!u.HasError()); + m_zips.push_back( + std::make_pair( + u.GetMainURL(INetURLObject::NO_DECODE), + css::uno::Reference< css::container::XNameAccess >())); + } { rtl::OUString url( RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/share/config")); -- cgit v1.2.3 From a3f1ad73fb8a8e84ee5ecd58b7f6a41460d09b49 Mon Sep 17 00:00:00 2001 From: Release Engineers Date: Thu, 27 Aug 2009 15:54:55 +0000 Subject: CWS-TOOLING: integrate CWS bjm02 2009-08-12 Bjoern Michaelsen #i101879# moved officeversion from envelope body to requestbody 2009-08-11 Bjoern Michaelsen #i103732# reverting changeset f3f527950572 2009-08-10 Bjoern Michaelsen cws bjm02: merging local minibranches 2009-08-10 Bjoern Michaelsen #i104128# remove additional duplication in svx headers, remove license header merge conflicts in svx headers 2009-08-10 Bjoern Michaelsen #i100484# fixed buildbreaker on win32 2009-08-10 Bjoern Michaelsen #i104128# remove duplication in svx headers 2009-08-04 Bjoern Michaelsen #i103913# fixed bookmark updating when moving numbered para 2009-08-03 Bjoern Michaelsen #i101879# include officeversion/productname in soaprequest 2009-07-31 Bjoern Michaelsen #i84926# Selecting all in blockmode automatically falls back to std mode 2009-07-31 Bjoern Michaelsen #i100484# operation on 'pCmpLine' may be undefined, thanks cmc 2009-07-29 Bjoern Michaelsen #i103059# fixing crash on empty enumeration 2009-07-29 Bjoern Michaelsen #i98659# fixing typo in usagetracking option tabpage 2009-07-29 Bjoern Michaelsen #i103732# not triggering loading of oooimprovement dll if usage tracking is disabled 2009-07-29 Bjoern Michaelsen #i103036# stlunosequence can be use simple array-pointers as iterators, fixing used type in xmloff 2009-07-29 Bjoern Michaelsen #i103036# stlunosequence can be use simple array-pointers as iterators 2009-07-29 Bjoern Michaelsen #i103182# completely removing unused functions in extensions/oooimprovement 2009-07-28 Bjoern Michaelsen cws bjm02: merged changes from master up to milestone DEV300_m53 2009-06-29 Bjoern Michaelsen #i103182# commenting out getFailedAttempts(..) for future use 2009-06-29 Bjoern Michaelsen #i103183# removed unused function sw::mark::CrossRefBookmark::IsLegalName(..) 2009-06-29 Bjoern Michaelsen #i103182# removing unused functions in extensions/oooimprovement 2009-06-24 Bjoern Michaelsen #i103059# not using enumeration for getByName/getByIndex 2009-06-24 Bjoern Michaelsen #i103059# not using enumeration for hasByName/GetCount/hasElements for performance reasons 2009-06-24 Bjoern Michaelsen #i103036# stlunosequence can be use simple array-pointers as iterators 2009-08-27 releng CWS-TOOLING: integrate CWS hr65 2009-08-26 Jens-Heiner Rechtien #i104521#: implement 'setcurrent'; document --hg option to 'create' 2009-08-26 Jens-Heiner Rechtien #i104521#: SOAP method setSCMName() doesn't return a value 2009-08-26 Jens-Heiner Rechtien #i104521#: implement [set|get]_scm() 2009-08-26 Jens-Heiner Rechtien #i104521#: implement --hg switch to 'cws create' 2009-08-27 vg CWS-TOOLING: integrate CWS hr64_DEV300 2009-07-21 13:24:57 +0200 hr r274189 : #i99576#: re-enable optimization for tabcont.cxx 2009-07-21 13:17:18 +0200 hr r274188 : #i99592: disable -xspace optimization for Solaris x86 and SunStudio 12, due to some mis-optimzation in sc and elsewhere. SunStudio 12 update 1 is OK, but needs a few unrelated changes which will be implemented in DEV300 code line 2009-08-27 releng CWS-TOOLING: integrate CWS sw32bf02 2009-08-25 15:52:04 +0200 hde r275366 : reactived testcases hit by issue 102752 2009-08-21 13:52:17 +0200 od r275245 : #i102921# delete files whose deletion has been forgotten in cws impress172 2009-08-21 11:20:47 +0200 od r275225 : CWS-TOOLING: rebase CWS sw32bf02 to trunk@275001 (milestone: DEV300:m55) 2009-08-20 16:21:30 +0200 od r275191 : #i92511# method - invalidation of cache for object rectangle inclusive spaces is needed. 2009-08-20 15:50:40 +0200 od r275188 : #i96726# method - trigger recalculation of page preview layout even if the count of pages is not changing 2009-08-20 12:37:32 +0200 od r275172 : #i100466# correction for showing and hiding redlines 2009-08-18 13:25:18 +0200 od r275100 : #i103817# method # - correct condition for handling embedded documents and embedded math objects 2009-08-12 14:11:34 +0200 od r274891 : #i97379# assure that columns are not applied to fly frames, which represent graphics or embedded objects 2009-08-12 12:51:43 +0200 od r274889 : #i101870# method - perform action on different paragraph styles before applying new paragraph style 2009-08-12 12:24:44 +0200 od r274888 : #i101092# method - encapsulate paint of document background and document into pre and post drawing layer paint calls 2009-08-12 11:38:48 +0200 od r274886 : #i98766# minor adjustment in order to be warning free under Mac port builds 2009-08-12 11:33:54 +0200 od r274885 : #i99267# method - reset after forward move to assure that follows can be joined, if further space is available. 2009-08-12 11:11:49 +0200 od r274882 : #i98766# method - adjust condition to apply automatic tab stop at left margin correctly in case that tab stops are not relative to indent 2009-07-10 11:53:53 +0200 od r273883 : #i102752 method - assure that a ShapePropertyChangeNotifier exists 2009-07-07 12:01:58 +0200 mst r273788 : #i103304# apply patch by dtardon to fix bogus conditional 2009-07-07 09:01:13 +0200 od r273767 : CWS-TOOLING: rebase CWS sw32bf02 to trunk@273468 (milestone: DEV300:m51) 2009-08-27 vg CWS-TOOLING: integrate CWS native264_DEV300 2009-08-13 11:58:58 +0200 is r274928 : #i104200# update to jre6u16 2009-08-27 vg CWS-TOOLING: integrate CWS automationdev300m54tables 2009-08-14 13:01:05 +0200 wg r274976 : i104224 2009-08-14 13:00:28 +0200 wg r274975 : i104224 2009-08-14 12:12:34 +0200 wg r274974 : i104222 2009-08-13 14:28:13 +0200 wg r274944 : i104205 2009-08-13 14:27:40 +0200 wg r274943 : i104205 2009-08-13 14:26:36 +0200 wg r274942 : i104205 --- comphelper/inc/comphelper/stlunosequence.hxx | 482 +++------------------------ 1 file changed, 41 insertions(+), 441 deletions(-) diff --git a/comphelper/inc/comphelper/stlunosequence.hxx b/comphelper/inc/comphelper/stlunosequence.hxx index a0ace84e8a6e..c9bc525cabd6 100644 --- a/comphelper/inc/comphelper/stlunosequence.hxx +++ b/comphelper/inc/comphelper/stlunosequence.hxx @@ -5,9 +5,9 @@ * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: stlunosequence.hxx,v $ + * $RCSfile: $ * - * $Revision: 1.3 $ + * $Revision: $ * * This file is part of OpenOffice.org. * @@ -31,459 +31,59 @@ #define _COMPHELPER_STLUNOITERATOR_HXX #include -#include #include -namespace comphelper { namespace stlunosequence { - template - class StlSequence; - - template - class StlSequenceIterator : public std::iterator - { - public: - typedef ::std::random_access_iterator_tag iterator_category; - typedef V& reference; - typedef V value_type; - typedef sal_Int32 difference_type; - typedef V* pointer; - typedef const V& const_reference; - - StlSequenceIterator(); - StlSequenceIterator(S * uno_sequence, typename StlSequenceIterator::difference_type index); - - reference operator*() const; - StlSequenceIterator& operator++(); - StlSequenceIterator operator++(int); - StlSequenceIterator& operator--(); - StlSequenceIterator operator--(int); - StlSequenceIterator& operator+=(const typename StlSequenceIterator::difference_type by); - StlSequenceIterator& operator-=(const typename StlSequenceIterator::difference_type by); - StlSequenceIterator operator+(const typename StlSequenceIterator::difference_type by) const; - StlSequenceIterator operator-(const typename StlSequenceIterator::difference_type by) const; - typename StlSequenceIterator::difference_type operator-(const StlSequenceIterator& to) const; - - bool operator==(const StlSequenceIterator& other) const; - bool operator!=(const StlSequenceIterator& other) const; - bool operator<(const StlSequenceIterator& other) const; - reference operator[](const typename StlSequenceIterator::difference_type by) const; - - - protected: - friend class StlSequence; - S * m_UnoSequence; - typename StlSequenceIterator::difference_type m_Index; - }; - - template - class StlSequenceConstIterator : public StlSequenceIterator - { - public: - typedef const V& reference; - StlSequenceConstIterator(); - StlSequenceConstIterator(S * uno_sequence, typename StlSequenceIterator::difference_type by); - typename StlSequenceIterator::const_reference operator*() const - { - return (*(this->m_UnoSequence))[this->m_Index]; - } - - typename StlSequenceIterator::const_reference operator[](const typename StlSequenceIterator::difference_type by) const - { - return (*(this->m_UnoSequence))[this->m_Index+by]; - } - }; - - template - class StlSequence - { - public: - typedef sal_Int32 size_type; - typedef V& reference; - typedef const V& const_reference; - typedef sal_Int32 difference_type; - typedef V value_type; - typedef StlSequenceIterator iterator; - typedef StlSequenceConstIterator const_iterator; - - StlSequence(S& uno_sequence); - - typename StlSequence::size_type size() const; - typename StlSequence::size_type max_size() const; - bool empty() const; - void swap(StlSequence& other); - typename StlSequence::iterator begin(); - typename StlSequence::iterator end(); - typename StlSequence::const_iterator begin() const; - typename StlSequence::const_iterator end() const; - - bool operator==(const StlSequence& other) const; - bool operator!=(const StlSequence& other) const; - bool operator<(const StlSequence& other) const; - bool operator>(const StlSequence& other) const; - bool operator<=(const StlSequence& other) const; - bool operator>=(const StlSequence& other) const; - - - private: - friend class StlSequenceIterator; - S * m_UnoSequence; - static const typename StlSequence::size_type begin_of_sequence; - static const typename StlSequence::size_type end_of_sequence; - }; - - //StlSequenceIterator - template - StlSequenceIterator::StlSequenceIterator() - : m_UnoSequence(0), m_Index(StlSequence::end_of_sequence) - {} - - template - StlSequenceConstIterator::StlSequenceConstIterator() - {} - - template - StlSequenceIterator::StlSequenceIterator(S * uno_sequence, typename StlSequenceIterator::difference_type index) - : m_UnoSequence(uno_sequence), m_Index(index) - {} - - template - StlSequenceConstIterator::StlSequenceConstIterator(S * uno_sequence, typename StlSequenceIterator::difference_type index) - : StlSequenceIterator(uno_sequence, index) - {} - - template - inline typename StlSequenceIterator::reference StlSequenceIterator::operator*() const - { - return (*m_UnoSequence)[m_Index]; - } - - template - inline StlSequenceIterator& StlSequenceIterator::operator++() - { - ++m_Index; - if(m_Index>=m_UnoSequence->getLength()) - m_Index = StlSequence::end_of_sequence; - return *this; - } - - template - inline StlSequenceIterator StlSequenceIterator::operator++(int) - { - StlSequenceIterator temp = *this; - ++*this; - return temp; - } - - template - inline StlSequenceIterator& StlSequenceIterator::operator--() - { - if(m_Index==StlSequence::end_of_sequence) - m_Index = m_UnoSequence->getLength(); - --m_Index; - return *this; - } - - template - inline StlSequenceIterator StlSequenceIterator::operator--(int) - { - StlSequenceIterator temp = *this; - --*this; - return temp; - } - - template - inline StlSequenceIterator& StlSequenceIterator::operator+=(const typename StlSequenceIterator::difference_type by) - { - if(by<0) - { - this->operator-=(-by); - return *this; - } - if(by==0) - return *this; - m_Index+=by; - if(m_Index>=m_UnoSequence->getLength()) - m_Index=StlSequence::end_of_sequence; - return *this; - } - - template - inline StlSequenceIterator& StlSequenceIterator::operator-=(const typename StlSequenceIterator::difference_type by) - { - if(by<0) - { - if(-by==by) return *this; // breaking infinitive loop on MIN_INT - this->operator+=(-by); - return *this; - } - if(by==0) - return *this; - if(m_Index==StlSequence::end_of_sequence) - m_Index=m_UnoSequence->getLength(); - m_Index-=by; - return *this; - } - - template - inline StlSequenceIterator StlSequenceIterator::operator+(const typename StlSequenceIterator::difference_type by) const - { - StlSequenceIterator result = StlSequenceIterator(*this); - result+=by; - return result; - } - - template - inline StlSequenceIterator StlSequenceIterator::operator-(const typename StlSequenceIterator::difference_type by) const - { - StlSequenceIterator result = StlSequenceIterator(*this); - result-=by; - return result; - } - - template - inline typename StlSequenceIterator::difference_type StlSequenceIterator::operator-(const StlSequenceIterator& to) const - { - if(m_Index==StlSequence::end_of_sequence ^ to.m_Index==StlSequence::end_of_sequence) - { - if(m_Index==StlSequence::end_of_sequence) - return m_UnoSequence->getLength()-to.m_Index; - else - return m_Index-m_UnoSequence->getLength(); - } - return m_Index-to.m_Index; - } - - template - inline bool StlSequenceIterator::operator==(const StlSequenceIterator& other) const - { - return (m_Index == other.m_Index); - } - - template - inline bool StlSequenceIterator::operator!=(const StlSequenceIterator& other) const - { - return !this->operator==(other); - } - - template - inline bool StlSequenceIterator::operator<(const StlSequenceIterator& other) const - { - if(m_Index==StlSequence::end_of_sequence ^ other.m_Index==StlSequence::end_of_sequence) - return other.m_Index==StlSequence::end_of_sequence; - return m_Index - inline typename StlSequenceIterator::reference StlSequenceIterator::operator[](const typename StlSequenceIterator::difference_type by) const - { - return (*(this->m_UnoSequence))[this->m_Index+by]; - } - - // StlSequence - template - StlSequence::StlSequence(S& uno_sequence) - : m_UnoSequence(&uno_sequence) - {} - - template - inline typename StlSequence::size_type StlSequence::size() const - { - return m_UnoSequence->getLength(); - } - - template - inline typename StlSequence::size_type StlSequence::max_size() const - { - return this->size(); - } - - template - inline bool StlSequence::empty() const - { - return this->size() == 0; - } - - template - inline void StlSequence::swap(StlSequence& other) - { - ::std::swap(*this, other); - } - - template - inline typename StlSequence::iterator StlSequence::begin() - { - return typename StlSequence::iterator(m_UnoSequence, - size() ? begin_of_sequence : end_of_sequence); - } - - template - inline typename StlSequence::iterator StlSequence::end() - { - return typename StlSequence::iterator(m_UnoSequence, end_of_sequence); - } - - template - inline typename StlSequence::const_iterator StlSequence::begin() const - { - return typename StlSequence::const_iterator(m_UnoSequence, - size() ? begin_of_sequence : end_of_sequence); - } - - template - inline typename StlSequence::const_iterator StlSequence::end() const - { - return typename StlSequence::const_iterator(m_UnoSequence, end_of_sequence); - } - - template - inline bool StlSequence::operator==(const StlSequence& other) const - { - if(this->size() != other.size()) return false; - return ::std::equal(this->begin(), this->end(), other.begin()); - } - - template - inline bool StlSequence::operator<(const StlSequence& other) const - { - return ::std::lexicographical_compare(this->begin(), this->end(), other.begin(), other.end()); - } - - template - inline bool StlSequence::operator!=(const StlSequence& other) const - { return !(*this == other); } - - template - inline bool StlSequence::operator>(const StlSequence& other) const - { return (other < *this); } - - template - inline bool StlSequence::operator<=(const StlSequence& other) const - { return !(other < *this); } - - template - inline bool StlSequence::operator>=(const StlSequence& other) const - { return !(*this < other); } - - template - const typename StlSequence::size_type StlSequence::begin_of_sequence = 0; - - template - const typename StlSequence::size_type StlSequence::end_of_sequence = -1; -}} - namespace comphelper { /** - @short a wrapper-class that provides stl-container-like access to an existing - ::com::sun::star::uno::Sequence - @descr This template class allows using an existing ::com::sun::star::uno::Sequence - like any other stl container. It provides standard-compliant mutable random access - iterators. Because random access iterators are the most generic iterators defined - by the stl, any stl algorithm can be applied to the Sequence. -

- This is just a basic stl forward container, but _not_ an stl sequence (the size of the - ::com::sun::star::uno::Sequence cannot be changed using the StlUnoSequence interface). - Inserts are expensive operations on ::com::sun::star::uno::Sequence - use - ::std::copy() to a efficient stl container implementing the stl sequence interface - and the available insert iterator adapters you need those. -

- @attention There is one requirement of an stl container that this class does not meet: - It is _not_ owner of its contents and thus it does not destroy its contents when destructed. - @attention No additional boundschecking over the requirements of the STL are performed. - E.g. sequence.begin()-- results in undefined behavior. - @attention StlUnoSequence is not threadsafe. -

- Example: (creating a ::std::list from a ::com::sun::star::uno::Sequence) - - ::com::sun::star::uno::Sequence uno_seq(10); - ::comphelper::StlUnoSequence stl_seq(&uno_seq); - ::std::list stl_list(stl_seq.begin(), stl_seq.end()); - -

- Example: (sorting ::com::sun::star::uno::Sequence inplace) - - ::com::sun::star::uno::Sequence uno_seq(10); - ::comphelper::StlUnoSequence stl_seq(&uno_seq); - ::std::sort(stl_seq.begin(), stl_seq.end()); - -

- Example: (counting occurrences of 4711 in a ::com::sun::star::uno::Sequence) - - ::com::sun::star::uno::Sequence uno_seq(10); - ::comphelper::StlUnoSequence stl_seq(&uno_seq); - sal_Int32 count = 0; - ::std::count(stl_seq.begin(), stl_seq.end(), 4711, count); - -

- Example: (inserting the second half of one Sequence after the first element of another) - - ::com::sun::star::uno::Sequence uno_seq1(10); - ::com::sun::star::uno::Sequence uno_seq2(10); - ::com::sun::star::uno::Sequence result(15); - ::comphelper::StlUnoSequence stl_seq1(&uno_seq1); - ::comphelper::StlUnoSequence stl_seq2(&uno_seq1); - ::comphelper::StlUnoSequence stl_result(&result); - ::std::list temp(uno_seq1.begin(), uno_seq1.end()); - ::std::copy(uno_seq2.begin()+5, uno_seq2.end(), ::std::insert_iterator< ::std::list >(temp, ++temp.begin())); - ::std::copy(temp.begin(), temp.end(), result.begin()); - - - @see http://www.sgi.com/tech/stl/Container.html - @see http://www.sgi.com/tech/stl/Sequence.html - @see http://www.sgi.com/tech/stl/RandomAccessIterator.html + @short stl-container-like access to an existing ::com::sun::star::uno::Sequence + @descr These template functions allows using an existing + ::com::sun::star::uno::Sequence using stl algorithms. They provides + standard-compliant mutable random access iterators. Because random access + iterators are the most generic iterators defined by the stl, any stl algorithm + can be applied to the Sequence (excluding algorithms requiring output + iterators). +

+ Example: (creating a ::std::list from a ::com::sun::star::uno::Sequence) + + ::com::sun::star::uno::Sequence aSeq(10); + ::std::list stl_list(stl_begin(aSeq), stl_end(aSeq)); + +

+ Example: (sorting ::com::sun::star::uno::Sequence inplace) + + ::com::sun::star::uno::Sequence aSeq(10); + ::std::sort(stl_begin(aSeq), stl_seq.end(aSeq)); + +

+ Example: (counting occurrences of 4711 in a ::com::sun::star::uno::Sequence) + + ::com::sun::star::uno::Sequence aSeq(10); + sal_Int32 count = 0; + ::std::count(stl_begin(aSeq), stl_end(aSeq), 4711, count); + +

+ + @see http://www.sgi.com/tech/stl/Container.html + @see http://www.sgi.com/tech/stl/Sequence.html + @see http://www.sgi.com/tech/stl/RandomAccessIterator.html */ template - class StlUnoSequence : public stlunosequence::StlSequence< ::com::sun::star::uno::Sequence, V> - { - public: - /* - @short named constructor (these are needed to keep const-correctness) - */ - static StlUnoSequence createInstance(::com::sun::star::uno::Sequence& uno_sequence) - { return StlUnoSequence(uno_sequence); } - /* - @short named constructor (these are needed to keep const-correctness) - */ - static const StlUnoSequence createInstance(const ::com::sun::star::uno::Sequence& uno_sequence) - { return StlUnoSequence(const_cast< ::com::sun::star::uno::Sequence& >(uno_sequence)); } - private: - StlUnoSequence(::com::sun::star::uno::Sequence& uno_sequence) - : stlunosequence::StlSequence< ::com::sun::star::uno::Sequence, V>(uno_sequence) - {} - }; - - /* - @short shortcut for StlUnoSequence::createInstance(uno_sequence).begin() - */ - template - typename StlUnoSequence::iterator stl_begin(::com::sun::star::uno::Sequence& uno_sequence) - { return StlUnoSequence::createInstance(uno_sequence).begin(); } + V* stl_begin(::com::sun::star::uno::Sequence& rSeq) + { return rSeq.getArray(); } - /* - @short shortcut for StlUnoSequence::createInstance(uno_sequence).end() - */ template - typename StlUnoSequence::iterator stl_end(::com::sun::star::uno::Sequence& uno_sequence) - { return StlUnoSequence::createInstance(uno_sequence).end(); } + V* stl_end(::com::sun::star::uno::Sequence& rSeq) + { return rSeq.getArray() + rSeq.getLength(); } - /* - @short shortcut for StlUnoSequence::createInstance(uno_sequence).begin() - */ template - typename StlUnoSequence::const_iterator stl_begin(const ::com::sun::star::uno::Sequence& uno_sequence) - { - return StlUnoSequence::createInstance(uno_sequence).begin(); - } + const V* stl_begin(const ::com::sun::star::uno::Sequence& rSeq) + { return rSeq.getConstArray(); } - /* - @short shortcut for StlUnoSequence::createInstance(uno_sequence).end() - */ template - typename StlUnoSequence::const_iterator stl_end(const ::com::sun::star::uno::Sequence& uno_sequence) - { - return StlUnoSequence::createInstance(uno_sequence).end(); - } + const V* stl_end(const ::com::sun::star::uno::Sequence& rSeq) + { return rSeq.getConstArray() + rSeq.getLength(); } } #endif -- cgit v1.2.3 -- cgit v1.2.3