Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
0d95b821
Commit
0d95b821
authored
Apr 18, 2023
by
Piotr Caban
Committed by
Alexandre Julliard
Apr 19, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wineps: Add BiDi support in EMR_EXTTEXTOUTW record.
parent
2df476c1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1320 additions
and
1 deletion
+1320
-1
Makefile.in
dlls/wineps.drv/Makefile.in
+1
-0
direction.c
dlls/wineps.drv/direction.c
+717
-0
printproc.c
dlls/wineps.drv/printproc.c
+601
-1
make_unicode
tools/make_unicode
+1
-0
No files found.
dlls/wineps.drv/Makefile.in
View file @
0d95b821
...
...
@@ -45,6 +45,7 @@ C_SRCS = \
data/ZapfChancery_MediumItalic.c
\
data/ZapfDingbats.c
\
data/agl.c
\
direction.c
\
download.c
\
driver.c
\
encode.c
\
...
...
dlls/wineps.drv/direction.c
0 → 100644
View file @
0d95b821
/* Unicode BiDi direction table */
/* Automatically generated; DO NOT EDIT!! */
#include "windef.h"
const
unsigned
short
DECLSPEC_HIDDEN
bidi_direction_table
[
5631
]
=
{
/* level 1 offsets */
0x0110
,
0x0120
,
0x0130
,
0x0140
,
0x0144
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x015e
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x016a
,
0x017a
,
0x018a
,
0x0152
,
0x019a
,
0x0152
,
0x0152
,
0x01a0
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x01b0
,
0x01bd
,
0x01cd
,
0x01dd
,
0x01ed
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x01fd
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
0x0152
,
/* level 2 offsets */
0x020d
,
0x021d
,
0x0222
,
0x0232
,
0x0242
,
0x024b
,
0x025b
,
0x026b
,
0x027b
,
0x028b
,
0x029b
,
0x02ab
,
0x02bb
,
0x02cb
,
0x02d9
,
0x02e8
,
0x02f6
,
0x021d
,
0x021d
,
0x0301
,
0x0311
,
0x021d
,
0x0319
,
0x0328
,
0x0338
,
0x0346
,
0x0356
,
0x0366
,
0x0376
,
0x0386
,
0x021d
,
0x0396
,
0x03a6
,
0x03b6
,
0x03c5
,
0x03d2
,
0x03e0
,
0x03ef
,
0x03f5
,
0x03ef
,
0x021d
,
0x03ef
,
0x03ef
,
0x0400
,
0x0410
,
0x0420
,
0x0430
,
0x0440
,
0x0450
,
0x0460
,
0x046f
,
0x047c
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x048c
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x049c
,
0x021d
,
0x04ac
,
0x04bc
,
0x04cc
,
0x04dc
,
0x04eb
,
0x04fb
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x050a
,
0x0518
,
0x0525
,
0x0535
,
0x0545
,
0x021d
,
0x0555
,
0x0565
,
0x0575
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x0585
,
0x0595
,
0x05a5
,
0x05b5
,
0x05c5
,
0x05d5
,
0x05df
,
0x05ef
,
0x05ff
,
0x060f
,
0x061d
,
0x062d
,
0x063a
,
0x0647
,
0x0655
,
0x0664
,
0x0672
,
0x067f
,
0x068f
,
0x021d
,
0x069c
,
0x06a9
,
0x06b3
,
0x06c3
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x06d3
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x06d9
,
0x06e9
,
0x021d
,
0x021d
,
0x021d
,
0x06f5
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x0704
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x0714
,
0x021d
,
0x071e
,
0x072e
,
0x073e
,
0x021d
,
0x021d
,
0x0744
,
0x0753
,
0x021d
,
0x021d
,
0x0763
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x0773
,
0x06e9
,
0x077c
,
0x021d
,
0x078c
,
0x021d
,
0x021d
,
0x021d
,
0x079c
,
0x07ac
,
0x021d
,
0x021d
,
0x07b5
,
0x07c5
,
0x07d5
,
0x021d
,
0x07e5
,
0x07f5
,
0x0800
,
0x03ef
,
0x03ef
,
0x03ef
,
0x0810
,
0x0820
,
0x0830
,
0x03ef
,
0x0840
,
0x0850
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x0860
,
0x0870
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
0x021d
,
/* level 3 offsets */
0x0880
,
0x088e
,
0x089e
,
0x08ae
,
0x08bd
,
0x08c2
,
0x08bd
,
0x08d2
,
0x08e1
,
0x08e7
,
0x08f7
,
0x0907
,
0x0917
,
0x0920
,
0x0917
,
0x0920
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0928
,
0x0936
,
0x0936
,
0x0946
,
0x0955
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0975
,
0x0984
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0921
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0991
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x099b
,
0x09ab
,
0x0965
,
0x09ad
,
0x09bb
,
0x09cb
,
0x09d0
,
0x09df
,
0x09ef
,
0x09ff
,
0x0a0a
,
0x0a0a
,
0x0a0f
,
0x0965
,
0x0a1f
,
0x0a09
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a2c
,
0x0a3b
,
0x0a4b
,
0x0a55
,
0x0a64
,
0x0a0a
,
0x0965
,
0x0a74
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a6e
,
0x0a84
,
0x09cb
,
0x09cb
,
0x0a94
,
0x0aa0
,
0x09cb
,
0x0aae
,
0x0aba
,
0x09cc
,
0x09cb
,
0x0aca
,
0x0ada
,
0x0a0a
,
0x0aea
,
0x0afa
,
0x0a0a
,
0x0a0a
,
0x0a6a
,
0x0965
,
0x0b08
,
0x0965
,
0x0b15
,
0x0917
,
0x0917
,
0x0b1b
,
0x0b2a
,
0x0993
,
0x0b38
,
0x0917
,
0x0b47
,
0x0917
,
0x0917
,
0x0b3c
,
0x0b56
,
0x0917
,
0x0b38
,
0x0b64
,
0x0b73
,
0x0917
,
0x0917
,
0x0b3c
,
0x0b82
,
0x0b47
,
0x0917
,
0x0b8e
,
0x0b73
,
0x0917
,
0x0917
,
0x0b3c
,
0x0b9d
,
0x0917
,
0x0b38
,
0x0bac
,
0x0b47
,
0x0917
,
0x0917
,
0x0bbc
,
0x0b56
,
0x0bcc
,
0x0b38
,
0x0917
,
0x0b46
,
0x0917
,
0x0917
,
0x0917
,
0x0b3b
,
0x0917
,
0x0917
,
0x0bd9
,
0x0be9
,
0x0917
,
0x0917
,
0x0bee
,
0x0bfd
,
0x0bcc
,
0x0b38
,
0x0c0b
,
0x0b47
,
0x0917
,
0x0917
,
0x0b3c
,
0x0b77
,
0x0917
,
0x0b38
,
0x0917
,
0x0c1b
,
0x0917
,
0x0917
,
0x0b78
,
0x0b56
,
0x0917
,
0x0b38
,
0x0917
,
0x0b47
,
0x0917
,
0x0917
,
0x0917
,
0x0b3e
,
0x0c29
,
0x0917
,
0x0917
,
0x0917
,
0x0c38
,
0x0c48
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0c57
,
0x098c
,
0x0917
,
0x0917
,
0x0917
,
0x0c64
,
0x0917
,
0x0c6f
,
0x0917
,
0x0917
,
0x0917
,
0x0c7e
,
0x0c88
,
0x0c95
,
0x0965
,
0x0968
,
0x0b42
,
0x0917
,
0x0917
,
0x0917
,
0x0b4a
,
0x0ca4
,
0x0917
,
0x0b7b
,
0x0cb2
,
0x0cc1
,
0x0ccf
,
0x0cdd
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0b4a
,
0x0917
,
0x0917
,
0x0917
,
0x0ced
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x08bd
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0cfd
,
0x0d02
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0d10
,
0x0917
,
0x0b38
,
0x0917
,
0x0b38
,
0x0917
,
0x0b38
,
0x0917
,
0x0917
,
0x0917
,
0x0d1c
,
0x0c33
,
0x0d26
,
0x0917
,
0x0ced
,
0x0d36
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0bcc
,
0x0917
,
0x0b3f
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0d45
,
0x0d53
,
0x0d63
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x08bf
,
0x0955
,
0x0955
,
0x0917
,
0x0d6c
,
0x0917
,
0x0917
,
0x0917
,
0x0d78
,
0x0d86
,
0x0d93
,
0x0917
,
0x0917
,
0x0917
,
0x0965
,
0x0966
,
0x0917
,
0x0917
,
0x0917
,
0x0b14
,
0x0917
,
0x0917
,
0x0da3
,
0x0b46
,
0x0917
,
0x0db0
,
0x0b14
,
0x0c1b
,
0x0917
,
0x0dc0
,
0x0917
,
0x0917
,
0x0917
,
0x0dce
,
0x0c1b
,
0x0917
,
0x0917
,
0x0b4b
,
0x0ddd
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0ded
,
0x0dfc
,
0x0e05
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0e0f
,
0x08d0
,
0x08c0
,
0x08c0
,
0x0d00
,
0x0e1f
,
0x0955
,
0x0e2f
,
0x0e3f
,
0x0e4b
,
0x0e50
,
0x0e60
,
0x0e70
,
0x0e80
,
0x0917
,
0x0e90
,
0x0e90
,
0x0e9f
,
0x0965
,
0x0965
,
0x0cb2
,
0x0eaf
,
0x0ebb
,
0x0ec9
,
0x0ed8
,
0x0ee8
,
0x0955
,
0x0917
,
0x0917
,
0x0ef6
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0f06
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0f10
,
0x0917
,
0x0917
,
0x0917
,
0x08c2
,
0x0955
,
0x094f
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0f0f
,
0x0917
,
0x093b
,
0x0917
,
0x0955
,
0x0955
,
0x0f20
,
0x0f28
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0f16
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0f38
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0f45
,
0x0955
,
0x094e
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0f55
,
0x0f64
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0cb3
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0965
,
0x0965
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0938
,
0x0917
,
0x0917
,
0x0955
,
0x0f6d
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x08ba
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0f10
,
0x0917
,
0x093a
,
0x0f7d
,
0x0955
,
0x0f8c
,
0x0f9c
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0fac
,
0x08bd
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x091c
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0955
,
0x0955
,
0x08ba
,
0x0917
,
0x0d00
,
0x0917
,
0x0917
,
0x0917
,
0x0955
,
0x0917
,
0x0fb9
,
0x0917
,
0x0917
,
0x0917
,
0x0954
,
0x08c1
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0fc8
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x08bf
,
0x0917
,
0x08be
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0955
,
0x0955
,
0x0955
,
0x0f0f
,
0x0917
,
0x0917
,
0x0917
,
0x08c0
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0cb3
,
0x0fd8
,
0x0917
,
0x0b49
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0c1b
,
0x0955
,
0x0955
,
0x08bc
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x091f
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0fe8
,
0x0917
,
0x0ff4
,
0x1001
,
0x0917
,
0x0917
,
0x0917
,
0x0eee
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x100d
,
0x0917
,
0x0965
,
0x0b16
,
0x0917
,
0x0917
,
0x1017
,
0x0917
,
0x1025
,
0x0c1b
,
0x0917
,
0x0917
,
0x0b15
,
0x0917
,
0x0917
,
0x1035
,
0x0917
,
0x0917
,
0x0b43
,
0x0917
,
0x0917
,
0x1043
,
0x0cac
,
0x1052
,
0x0917
,
0x0917
,
0x0b3c
,
0x0917
,
0x0917
,
0x0917
,
0x1062
,
0x0b47
,
0x0917
,
0x0b77
,
0x0b42
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0ed8
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1072
,
0x0917
,
0x1080
,
0x108f
,
0x1099
,
0x10a9
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x10b9
,
0x0ae7
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x10c9
,
0x0955
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0ae8
,
0x0a0a
,
0x0a0a
,
0x10d9
,
0x0917
,
0x0917
,
0x10e9
,
0x0965
,
0x0ced
,
0x0965
,
0x0955
,
0x0955
,
0x10f9
,
0x1109
,
0x1119
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x111f
,
0x112f
,
0x08ae
,
0x08bd
,
0x08c2
,
0x08bd
,
0x08c2
,
0x0f10
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x113f
,
0x08c4
,
0x114e
,
0x0917
,
0x0917
,
0x0917
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0939
,
0x0939
,
0x08bd
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0cdd
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x115e
,
0x0f28
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x116e
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x117e
,
0x09cb
,
0x09cb
,
0x1188
,
0x09cb
,
0x1197
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cc
,
0x09c4
,
0x0917
,
0x0917
,
0x0917
,
0x09cb
,
0x11a4
,
0x09cb
,
0x11af
,
0x09cb
,
0x11bf
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09d3
,
0x09cb
,
0x09c9
,
0x09cb
,
0x09cb
,
0x11ce
,
0x11de
,
0x09cb
,
0x11e8
,
0x11f8
,
0x11f8
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x0917
,
0x0917
,
0x09cb
,
0x09cb
,
0x1208
,
0x1213
,
0x09cb
,
0x09cb
,
0x09cb
,
0x1223
,
0x09cb
,
0x1233
,
0x09cb
,
0x1240
,
0x09cb
,
0x124e
,
0x0a8b
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x11f8
,
0x0917
,
0x0917
,
0x0917
,
0x09cb
,
0x09cb
,
0x09cb
,
0x1258
,
0x09cb
,
0x09cb
,
0x09cb
,
0x1268
,
0x0a0a
,
0x0a0a
,
0x1278
,
0x1288
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1298
,
0x1299
,
0x09cb
,
0x09cb
,
0x12a9
,
0x12b9
,
0x0917
,
0x0917
,
0x0917
,
0x0b4a
,
0x09cb
,
0x09cb
,
0x12c9
,
0x0a0a
,
0x0a6e
,
0x12d9
,
0x0917
,
0x09cb
,
0x12e9
,
0x0917
,
0x0917
,
0x09cb
,
0x09cf
,
0x0917
,
0x09cb
,
0x1213
,
0x0b47
,
0x0917
,
0x0917
,
0x1015
,
0x0994
,
0x0936
,
0x0f10
,
0x12f9
,
0x0c1b
,
0x0917
,
0x0917
,
0x1305
,
0x0b46
,
0x0917
,
0x0917
,
0x0917
,
0x0b15
,
0x0917
,
0x1310
,
0x0b13
,
0x0917
,
0x0917
,
0x0917
,
0x0b45
,
0x0c1b
,
0x0917
,
0x0917
,
0x1026
,
0x12ff
,
0x0917
,
0x0917
,
0x0917
,
0x0cb3
,
0x131e
,
0x0b47
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0cb3
,
0x101a
,
0x0917
,
0x0c1b
,
0x0917
,
0x0917
,
0x0b78
,
0x0cb2
,
0x0917
,
0x098e
,
0x0b13
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1015
,
0x0c29
,
0x132d
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x133c
,
0x0b72
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1349
,
0x0cb2
,
0x0b77
,
0x0917
,
0x0917
,
0x0917
,
0x1359
,
0x0cb2
,
0x0917
,
0x0939
,
0x0917
,
0x0917
,
0x0917
,
0x0b1a
,
0x1368
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0b4a
,
0x1376
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0cb3
,
0x0c85
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1382
,
0x0b45
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1304
,
0x0cb2
,
0x0917
,
0x1391
,
0x0917
,
0x0917
,
0x139e
,
0x0b41
,
0x13ad
,
0x0917
,
0x0917
,
0x1013
,
0x13bd
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x13cd
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0c7d
,
0x13dd
,
0x13ec
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x13fb
,
0x1368
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x140a
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0e0a
,
0x0c1b
,
0x0917
,
0x0917
,
0x116e
,
0x140f
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x141a
,
0x1429
,
0x08bc
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1439
,
0x0995
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0b13
,
0x0917
,
0x0917
,
0x0917
,
0x0994
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0cb3
,
0x0917
,
0x0917
,
0x0917
,
0x0cb3
,
0x0b15
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1449
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0b76
,
0x1459
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0965
,
0x0965
,
0x0967
,
0x0965
,
0x0994
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x1462
,
0x146f
,
0x147c
,
0x0917
,
0x0b4d
,
0x0917
,
0x0917
,
0x0917
,
0x0928
,
0x0917
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x148c
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0f0f
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x091c
,
0x0917
,
0x0917
,
0x1497
,
0x0917
,
0x0917
,
0x08be
,
0x0917
,
0x0917
,
0x0917
,
0x091e
,
0x0917
,
0x0917
,
0x0917
,
0x1499
,
0x14a7
,
0x14a7
,
0x14a7
,
0x0965
,
0x0965
,
0x0965
,
0x14b7
,
0x0965
,
0x0965
,
0x0968
,
0x0b43
,
0x0b44
,
0x0db0
,
0x09ab
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x14c2
,
0x14ca
,
0x14d8
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0cb3
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x132d
,
0x0917
,
0x0917
,
0x0917
,
0x0b4b
,
0x14e3
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0b4b
,
0x0917
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x14f3
,
0x0994
,
0x0917
,
0x0917
,
0x09cb
,
0x09cb
,
0x09cb
,
0x09cb
,
0x14ff
,
0x09d1
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0ae9
,
0x0a0a
,
0x0a0a
,
0x0a0a
,
0x150f
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0ae9
,
0x0a0a
,
0x0a0a
,
0x151f
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x111a
,
0x0a0a
,
0x152e
,
0x153b
,
0x1549
,
0x1559
,
0x1567
,
0x156f
,
0x157f
,
0x158a
,
0x1599
,
0x158a
,
0x0917
,
0x0917
,
0x0917
,
0x08bc
,
0x0955
,
0x0955
,
0x093a
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x08ba
,
0x15a9
,
0x0954
,
0x0954
,
0x0954
,
0x0955
,
0x0f10
,
0x15b9
,
0x0917
,
0x08be
,
0x0917
,
0x0917
,
0x0917
,
0x0f16
,
0x0917
,
0x0917
,
0x0917
,
0x091a
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0f10
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x15c4
,
0x0939
,
0x0939
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x15c5
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0ced
,
0x093a
,
0x08bd
,
0x093a
,
0x0955
,
0x0955
,
0x0955
,
0x0f0e
,
0x0ced
,
0x0955
,
0x0955
,
0x0f0e
,
0x0955
,
0x0938
,
0x08bc
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x08ba
,
0x0938
,
0x0939
,
0x0f0d
,
0x0955
,
0x0955
,
0x15d0
,
0x15df
,
0x093a
,
0x0f0d
,
0x0f0d
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0955
,
0x0951
,
0x0955
,
0x0955
,
0x093b
,
0x0917
,
0x0917
,
0x1164
,
0x15ef
,
0x0917
,
0x08e7
,
0x08e7
,
0x08e7
,
0x08e7
,
0x08e7
,
0x08e7
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0917
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0965
,
0x0917
,
/* values */
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000b
,
0x000d
,
0x000b
,
0x000c
,
0x000d
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000d
,
0x000d
,
0x000d
,
0x000b
,
0x000c
,
0x0000
,
0x0000
,
0x0009
,
0x0009
,
0x0009
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0008
,
0x0007
,
0x0008
,
0x0007
,
0x0007
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0007
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000d
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x0007
,
0x0000
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x000a
,
0x0000
,
0x0000
,
0x0009
,
0x0009
,
0x0004
,
0x0004
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0004
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0009
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0002
,
0x0006
,
0x0006
,
0x0002
,
0x0006
,
0x0006
,
0x0002
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0000
,
0x0000
,
0x0005
,
0x0009
,
0x0009
,
0x0005
,
0x0007
,
0x0005
,
0x0000
,
0x0000
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0009
,
0x0003
,
0x0003
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0003
,
0x0000
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0005
,
0x0005
,
0x0006
,
0x0006
,
0x0000
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0005
,
0x0005
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0006
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0006
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0002
,
0x0002
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0002
,
0x0001
,
0x0001
,
0x0006
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0002
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0003
,
0x0003
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0003
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0009
,
0x0009
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0009
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0009
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0009
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0009
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x000c
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0009
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0006
,
0x0006
,
0x0006
,
0x000a
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0000
,
0x000c
,
0x000c
,
0x000c
,
0x000c
,
0x000c
,
0x000c
,
0x000c
,
0x000c
,
0x000c
,
0x000c
,
0x000c
,
0x000a
,
0x000a
,
0x000a
,
0x0001
,
0x0002
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x000c
,
0x000d
,
0x0011
,
0x000f
,
0x0012
,
0x0010
,
0x000e
,
0x0007
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0007
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x000c
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x0001
,
0x0013
,
0x0014
,
0x0015
,
0x0016
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x0004
,
0x0001
,
0x0001
,
0x0001
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0008
,
0x0008
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0008
,
0x0008
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0009
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0001
,
0x0000
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0009
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0008
,
0x0009
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x000c
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0000
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0009
,
0x0009
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0006
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0008
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0000
,
0x0000
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0000
,
0x0000
,
0x0000
,
0x0007
,
0x0000
,
0x0007
,
0x0001
,
0x0000
,
0x0007
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0009
,
0x0000
,
0x0000
,
0x0008
,
0x0008
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0009
,
0x0009
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0001
,
0x000a
,
0x0001
,
0x0000
,
0x0000
,
0x0009
,
0x0009
,
0x0009
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0008
,
0x0007
,
0x0008
,
0x0007
,
0x0007
,
0x0009
,
0x0009
,
0x0000
,
0x0000
,
0x0000
,
0x0009
,
0x0009
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0003
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0006
,
0x0006
,
0x0002
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0009
,
0x0009
,
0x0009
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x000a
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0006
,
0x0006
,
0x0006
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0001
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0009
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0001
,
0x0001
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0002
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0006
,
0x0002
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0001
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0005
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0004
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0000
,
0x0000
,
0x0001
,
0x000a
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
};
dlls/wineps.drv/printproc.c
View file @
0d95b821
...
...
@@ -25,6 +25,7 @@
#include <ntgdi.h>
#include <winspool.h>
#include <ddk/winsplp.h>
#include <usp10.h>
#include "psdrv.h"
...
...
@@ -1143,6 +1144,585 @@ static BOOL get_text_extent(struct pp_data *data, const WCHAR *str, INT count,
return
ret
;
}
extern
const
unsigned
short
bidi_direction_table
[]
DECLSPEC_HIDDEN
;
/*------------------------------------------------------------------------
Bidirectional Character Types
as defined by the Unicode Bidirectional Algorithm Table 3-7.
Note:
The list of bidirectional character types here is not grouped the
same way as the table 3-7, since the numeric values for the types
are chosen to keep the state and action tables compact.
------------------------------------------------------------------------*/
enum
directions
{
/* input types */
/* ON MUST be zero, code relies on ON = N = 0 */
ON
=
0
,
/* Other Neutral */
L
,
/* Left Letter */
R
,
/* Right Letter */
AN
,
/* Arabic Number */
EN
,
/* European Number */
AL
,
/* Arabic Letter (Right-to-left) */
NSM
,
/* Non-spacing Mark */
CS
,
/* Common Separator */
ES
,
/* European Separator */
ET
,
/* European Terminator (post/prefix e.g. $ and %) */
/* resolved types */
BN
,
/* Boundary neutral (type of RLE etc after explicit levels) */
/* input types, */
S
,
/* Segment Separator (TAB) // used only in L1 */
WS
,
/* White space // used only in L1 */
B
,
/* Paragraph Separator (aka as PS) */
/* types for explicit controls */
RLO
,
/* these are used only in X1-X9 */
RLE
,
LRO
,
LRE
,
PDF
,
LRI
,
/* Isolate formatting characters new with 6.3 */
RLI
,
FSI
,
PDI
,
/* resolved types, also resolved directions */
NI
=
ON
,
/* alias, where ON, WS and S are treated the same */
};
static
inline
unsigned
short
get_table_entry_32
(
const
unsigned
short
*
table
,
UINT
ch
)
{
return
table
[
table
[
table
[
table
[
ch
>>
12
]
+
((
ch
>>
8
)
&
0x0f
)]
+
((
ch
>>
4
)
&
0x0f
)]
+
(
ch
&
0xf
)];
}
/* Convert the libwine information to the direction enum */
static
void
classify
(
LPCWSTR
lpString
,
WORD
*
chartype
,
DWORD
uCount
)
{
unsigned
i
;
for
(
i
=
0
;
i
<
uCount
;
++
i
)
chartype
[
i
]
=
get_table_entry_32
(
bidi_direction_table
,
lpString
[
i
]);
}
/* Set a run of cval values at locations all prior to, but not including */
/* iStart, to the new value nval. */
static
void
SetDeferredRun
(
BYTE
*
pval
,
int
cval
,
int
iStart
,
int
nval
)
{
int
i
=
iStart
-
1
;
for
(;
i
>=
iStart
-
cval
;
i
--
)
{
pval
[
i
]
=
nval
;
}
}
/* THE PARAGRAPH LEVEL */
/*------------------------------------------------------------------------
Function: resolveParagraphs
Resolves the input strings into blocks over which the algorithm
is then applied.
Implements Rule P1 of the Unicode Bidi Algorithm
Input: Text string
Character count
Output: revised character count
Note: This is a very simplistic function. In effect it restricts
the action of the algorithm to the first paragraph in the input
where a paragraph ends at the end of the first block separator
or at the end of the input text.
------------------------------------------------------------------------*/
static
int
resolveParagraphs
(
WORD
*
types
,
int
cch
)
{
/* skip characters not of type B */
int
ich
=
0
;
for
(;
ich
<
cch
&&
types
[
ich
]
!=
B
;
ich
++
);
/* stop after first B, make it a BN for use in the next steps */
if
(
ich
<
cch
&&
types
[
ich
]
==
B
)
types
[
ich
++
]
=
BN
;
return
ich
;
}
/* REORDER */
/*------------------------------------------------------------------------
Function: resolveLines
Breaks a paragraph into lines
Input: Array of line break flags
Character count
In/Out: Array of characters
Returns the count of characters on the first line
Note: This function only breaks lines at hard line breaks. Other
line breaks can be passed in. If pbrk[n] is TRUE, then a break
occurs after the character in pszInput[n]. Breaks before the first
character are not allowed.
------------------------------------------------------------------------*/
static
int
resolveLines
(
LPCWSTR
pszInput
,
const
BOOL
*
pbrk
,
int
cch
)
{
/* skip characters not of type LS */
int
ich
=
0
;
for
(;
ich
<
cch
;
ich
++
)
{
if
(
pszInput
[
ich
]
==
(
WCHAR
)
'\n'
||
(
pbrk
&&
pbrk
[
ich
]))
{
ich
++
;
break
;
}
}
return
ich
;
}
/*------------------------------------------------------------------------
Function: resolveWhiteSpace
Resolves levels for WS and S
Implements rule L1 of the Unicode bidi Algorithm.
Input: Base embedding level
Character count
Array of direction classes (for one line of text)
In/Out: Array of embedding levels (for one line of text)
Note: this should be applied a line at a time. The default driver
code supplied in this file assumes a single line of text; for
a real implementation, cch and the initial pointer values
would have to be adjusted.
------------------------------------------------------------------------*/
static
void
resolveWhitespace
(
int
baselevel
,
const
WORD
*
pcls
,
BYTE
*
plevel
,
int
cch
)
{
int
cchrun
=
0
;
BYTE
oldlevel
=
baselevel
;
int
ich
=
0
;
for
(;
ich
<
cch
;
ich
++
)
{
switch
(
pcls
[
ich
])
{
default:
cchrun
=
0
;
/* any other character breaks the run */
break
;
case
WS
:
cchrun
++
;
break
;
case
RLE
:
case
LRE
:
case
LRO
:
case
RLO
:
case
PDF
:
case
LRI
:
case
RLI
:
case
FSI
:
case
PDI
:
case
BN
:
plevel
[
ich
]
=
oldlevel
;
cchrun
++
;
break
;
case
S
:
case
B
:
/* reset levels for WS before eot */
SetDeferredRun
(
plevel
,
cchrun
,
ich
,
baselevel
);
cchrun
=
0
;
plevel
[
ich
]
=
baselevel
;
break
;
}
oldlevel
=
plevel
[
ich
];
}
/* reset level before eot */
SetDeferredRun
(
plevel
,
cchrun
,
ich
,
baselevel
);
}
/*------------------------------------------------------------------------
Function: BidiLines
Implements the Line-by-Line phases of the Unicode Bidi Algorithm
Input: Count of characters
Array of character directions
Inp/Out: Input text
Array of levels
------------------------------------------------------------------------*/
static
void
BidiLines
(
int
baselevel
,
LPWSTR
pszOutLine
,
LPCWSTR
pszLine
,
const
WORD
*
pclsLine
,
BYTE
*
plevelLine
,
int
cchPara
,
const
BOOL
*
pbrk
)
{
int
cchLine
=
0
;
int
done
=
0
;
int
*
run
;
run
=
HeapAlloc
(
GetProcessHeap
(),
0
,
cchPara
*
sizeof
(
int
));
if
(
!
run
)
{
WARN
(
"Out of memory
\n
"
);
return
;
}
do
{
/* break lines at LS */
cchLine
=
resolveLines
(
pszLine
,
pbrk
,
cchPara
);
/* resolve whitespace */
resolveWhitespace
(
baselevel
,
pclsLine
,
plevelLine
,
cchLine
);
if
(
pszOutLine
)
{
int
i
;
/* reorder each line in place */
ScriptLayout
(
cchLine
,
plevelLine
,
NULL
,
run
);
for
(
i
=
0
;
i
<
cchLine
;
i
++
)
pszOutLine
[
done
+
run
[
i
]]
=
pszLine
[
i
];
}
pszLine
+=
cchLine
;
plevelLine
+=
cchLine
;
pbrk
+=
pbrk
?
cchLine
:
0
;
pclsLine
+=
cchLine
;
cchPara
-=
cchLine
;
done
+=
cchLine
;
}
while
(
cchPara
);
HeapFree
(
GetProcessHeap
(),
0
,
run
);
}
#define WINE_GCPW_FORCE_LTR 0
#define WINE_GCPW_FORCE_RTL 1
#define WINE_GCPW_DIR_MASK 3
static
BOOL
BIDI_Reorder
(
HDC
hDC
,
/* [in] Display DC */
LPCWSTR
lpString
,
/* [in] The string for which information is to be returned */
INT
uCount
,
/* [in] Number of WCHARs in string. */
DWORD
dwFlags
,
/* [in] GetCharacterPlacement compatible flags */
DWORD
dwWineGCP_Flags
,
/* [in] Wine internal flags - Force paragraph direction */
LPWSTR
lpOutString
,
/* [out] Reordered string */
INT
uCountOut
,
/* [in] Size of output buffer */
UINT
*
lpOrder
,
/* [out] Logical -> Visual order map */
WORD
**
lpGlyphs
,
/* [out] reordered, mirrored, shaped glyphs to display */
INT
*
cGlyphs
)
/* [out] number of glyphs generated */
{
WORD
*
chartype
=
NULL
;
BYTE
*
levels
=
NULL
;
INT
i
,
done
;
unsigned
glyph_i
;
BOOL
is_complex
,
ret
=
FALSE
;
int
maxItems
;
int
nItems
;
SCRIPT_CONTROL
Control
;
SCRIPT_STATE
State
;
SCRIPT_ITEM
*
pItems
=
NULL
;
HRESULT
res
;
SCRIPT_CACHE
psc
=
NULL
;
WORD
*
run_glyphs
=
NULL
;
WORD
*
pwLogClust
=
NULL
;
SCRIPT_VISATTR
*
psva
=
NULL
;
DWORD
cMaxGlyphs
=
0
;
BOOL
doGlyphs
=
TRUE
;
TRACE
(
"%s, %d, 0x%08lx lpOutString=%p, lpOrder=%p
\n
"
,
debugstr_wn
(
lpString
,
uCount
),
uCount
,
dwFlags
,
lpOutString
,
lpOrder
);
memset
(
&
Control
,
0
,
sizeof
(
Control
));
memset
(
&
State
,
0
,
sizeof
(
State
));
if
(
lpGlyphs
)
*
lpGlyphs
=
NULL
;
if
(
!
(
dwFlags
&
GCP_REORDER
))
{
FIXME
(
"Asked to reorder without reorder flag set
\n
"
);
return
FALSE
;
}
if
(
lpOutString
&&
uCountOut
<
uCount
)
{
FIXME
(
"lpOutString too small
\n
"
);
return
FALSE
;
}
chartype
=
HeapAlloc
(
GetProcessHeap
(),
0
,
uCount
*
sizeof
(
WORD
));
if
(
!
chartype
)
{
WARN
(
"Out of memory
\n
"
);
return
FALSE
;
}
if
(
lpOutString
)
memcpy
(
lpOutString
,
lpString
,
uCount
*
sizeof
(
WCHAR
));
is_complex
=
FALSE
;
for
(
i
=
0
;
i
<
uCount
&&
!
is_complex
;
i
++
)
{
if
((
lpString
[
i
]
>=
0x900
&&
lpString
[
i
]
<=
0xfff
)
||
(
lpString
[
i
]
>=
0x1cd0
&&
lpString
[
i
]
<=
0x1cff
)
||
(
lpString
[
i
]
>=
0xa840
&&
lpString
[
i
]
<=
0xa8ff
))
is_complex
=
TRUE
;
}
/* Verify reordering will be required */
if
(
WINE_GCPW_FORCE_RTL
==
(
dwWineGCP_Flags
&
WINE_GCPW_DIR_MASK
))
State
.
uBidiLevel
=
1
;
else
if
(
!
is_complex
)
{
done
=
1
;
classify
(
lpString
,
chartype
,
uCount
);
for
(
i
=
0
;
i
<
uCount
;
i
++
)
switch
(
chartype
[
i
])
{
case
R
:
case
AL
:
case
RLE
:
case
RLO
:
done
=
0
;
break
;
}
if
(
done
)
{
HeapFree
(
GetProcessHeap
(),
0
,
chartype
);
if
(
lpOrder
)
{
for
(
i
=
0
;
i
<
uCount
;
i
++
)
lpOrder
[
i
]
=
i
;
}
return
TRUE
;
}
}
levels
=
HeapAlloc
(
GetProcessHeap
(),
0
,
uCount
*
sizeof
(
BYTE
));
if
(
!
levels
)
{
WARN
(
"Out of memory
\n
"
);
goto
cleanup
;
}
maxItems
=
5
;
pItems
=
HeapAlloc
(
GetProcessHeap
(),
0
,
maxItems
*
sizeof
(
SCRIPT_ITEM
));
if
(
!
pItems
)
{
WARN
(
"Out of memory
\n
"
);
goto
cleanup
;
}
if
(
lpGlyphs
)
{
cMaxGlyphs
=
1
.
5
*
uCount
+
16
;
run_glyphs
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
WORD
)
*
cMaxGlyphs
);
if
(
!
run_glyphs
)
{
WARN
(
"Out of memory
\n
"
);
goto
cleanup
;
}
pwLogClust
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
WORD
)
*
uCount
);
if
(
!
pwLogClust
)
{
WARN
(
"Out of memory
\n
"
);
goto
cleanup
;
}
psva
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
SCRIPT_VISATTR
)
*
cMaxGlyphs
);
if
(
!
psva
)
{
WARN
(
"Out of memory
\n
"
);
goto
cleanup
;
}
}
done
=
0
;
glyph_i
=
0
;
while
(
done
<
uCount
)
{
INT
j
;
classify
(
lpString
+
done
,
chartype
,
uCount
-
done
);
/* limit text to first block */
i
=
resolveParagraphs
(
chartype
,
uCount
-
done
);
for
(
j
=
0
;
j
<
i
;
++
j
)
switch
(
chartype
[
j
])
{
case
B
:
case
S
:
case
WS
:
case
ON
:
chartype
[
j
]
=
NI
;
default:
continue
;
}
res
=
ScriptItemize
(
lpString
+
done
,
i
,
maxItems
,
&
Control
,
&
State
,
pItems
,
&
nItems
);
while
(
res
==
E_OUTOFMEMORY
)
{
SCRIPT_ITEM
*
new_pItems
=
HeapReAlloc
(
GetProcessHeap
(),
0
,
pItems
,
sizeof
(
*
pItems
)
*
maxItems
*
2
);
if
(
!
new_pItems
)
{
WARN
(
"Out of memory
\n
"
);
goto
cleanup
;
}
pItems
=
new_pItems
;
maxItems
*=
2
;
res
=
ScriptItemize
(
lpString
+
done
,
i
,
maxItems
,
&
Control
,
&
State
,
pItems
,
&
nItems
);
}
if
(
lpOutString
||
lpOrder
)
for
(
j
=
0
;
j
<
nItems
;
j
++
)
{
int
k
;
for
(
k
=
pItems
[
j
].
iCharPos
;
k
<
pItems
[
j
+
1
].
iCharPos
;
k
++
)
levels
[
k
]
=
pItems
[
j
].
a
.
s
.
uBidiLevel
;
}
if
(
lpOutString
)
{
/* assign directional types again, but for WS, S this time */
classify
(
lpString
+
done
,
chartype
,
i
);
BidiLines
(
State
.
uBidiLevel
,
lpOutString
+
done
,
lpString
+
done
,
chartype
,
levels
,
i
,
0
);
}
if
(
lpOrder
)
{
int
k
,
lastgood
;
for
(
j
=
lastgood
=
0
;
j
<
i
;
++
j
)
if
(
levels
[
j
]
!=
levels
[
lastgood
])
{
--
j
;
if
(
levels
[
lastgood
]
&
1
)
for
(
k
=
j
;
k
>=
lastgood
;
--
k
)
lpOrder
[
done
+
k
]
=
done
+
j
-
k
;
else
for
(
k
=
lastgood
;
k
<=
j
;
++
k
)
lpOrder
[
done
+
k
]
=
done
+
k
;
lastgood
=
++
j
;
}
if
(
levels
[
lastgood
]
&
1
)
for
(
k
=
j
-
1
;
k
>=
lastgood
;
--
k
)
lpOrder
[
done
+
k
]
=
done
+
j
-
1
-
k
;
else
for
(
k
=
lastgood
;
k
<
j
;
++
k
)
lpOrder
[
done
+
k
]
=
done
+
k
;
}
if
(
lpGlyphs
&&
doGlyphs
)
{
BYTE
*
runOrder
;
int
*
visOrder
;
SCRIPT_ITEM
*
curItem
;
runOrder
=
HeapAlloc
(
GetProcessHeap
(),
0
,
maxItems
*
sizeof
(
*
runOrder
));
visOrder
=
HeapAlloc
(
GetProcessHeap
(),
0
,
maxItems
*
sizeof
(
*
visOrder
));
if
(
!
runOrder
||
!
visOrder
)
{
WARN
(
"Out of memory
\n
"
);
HeapFree
(
GetProcessHeap
(),
0
,
runOrder
);
HeapFree
(
GetProcessHeap
(),
0
,
visOrder
);
goto
cleanup
;
}
for
(
j
=
0
;
j
<
nItems
;
j
++
)
runOrder
[
j
]
=
pItems
[
j
].
a
.
s
.
uBidiLevel
;
ScriptLayout
(
nItems
,
runOrder
,
visOrder
,
NULL
);
for
(
j
=
0
;
j
<
nItems
;
j
++
)
{
int
k
;
int
cChars
,
cOutGlyphs
;
curItem
=
&
pItems
[
visOrder
[
j
]];
cChars
=
pItems
[
visOrder
[
j
]
+
1
].
iCharPos
-
curItem
->
iCharPos
;
res
=
ScriptShape
(
hDC
,
&
psc
,
lpString
+
done
+
curItem
->
iCharPos
,
cChars
,
cMaxGlyphs
,
&
curItem
->
a
,
run_glyphs
,
pwLogClust
,
psva
,
&
cOutGlyphs
);
while
(
res
==
E_OUTOFMEMORY
)
{
WORD
*
new_run_glyphs
=
HeapReAlloc
(
GetProcessHeap
(),
0
,
run_glyphs
,
sizeof
(
*
run_glyphs
)
*
cMaxGlyphs
*
2
);
SCRIPT_VISATTR
*
new_psva
=
HeapReAlloc
(
GetProcessHeap
(),
0
,
psva
,
sizeof
(
*
psva
)
*
cMaxGlyphs
*
2
);
if
(
!
new_run_glyphs
||
!
new_psva
)
{
WARN
(
"Out of memory
\n
"
);
HeapFree
(
GetProcessHeap
(),
0
,
runOrder
);
HeapFree
(
GetProcessHeap
(),
0
,
visOrder
);
HeapFree
(
GetProcessHeap
(),
0
,
*
lpGlyphs
);
*
lpGlyphs
=
NULL
;
if
(
new_run_glyphs
)
run_glyphs
=
new_run_glyphs
;
if
(
new_psva
)
psva
=
new_psva
;
goto
cleanup
;
}
run_glyphs
=
new_run_glyphs
;
psva
=
new_psva
;
cMaxGlyphs
*=
2
;
res
=
ScriptShape
(
hDC
,
&
psc
,
lpString
+
done
+
curItem
->
iCharPos
,
cChars
,
cMaxGlyphs
,
&
curItem
->
a
,
run_glyphs
,
pwLogClust
,
psva
,
&
cOutGlyphs
);
}
if
(
res
)
{
if
(
res
==
USP_E_SCRIPT_NOT_IN_FONT
)
TRACE
(
"Unable to shape with currently selected font
\n
"
);
else
FIXME
(
"Unable to shape string (%lx)
\n
"
,
res
);
j
=
nItems
;
doGlyphs
=
FALSE
;
HeapFree
(
GetProcessHeap
(),
0
,
*
lpGlyphs
);
*
lpGlyphs
=
NULL
;
}
else
{
WORD
*
new_glyphs
;
if
(
*
lpGlyphs
)
new_glyphs
=
HeapReAlloc
(
GetProcessHeap
(),
0
,
*
lpGlyphs
,
sizeof
(
**
lpGlyphs
)
*
(
glyph_i
+
cOutGlyphs
));
else
new_glyphs
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
**
lpGlyphs
)
*
(
glyph_i
+
cOutGlyphs
));
if
(
!
new_glyphs
)
{
WARN
(
"Out of memory
\n
"
);
HeapFree
(
GetProcessHeap
(),
0
,
runOrder
);
HeapFree
(
GetProcessHeap
(),
0
,
visOrder
);
HeapFree
(
GetProcessHeap
(),
0
,
*
lpGlyphs
);
*
lpGlyphs
=
NULL
;
goto
cleanup
;
}
*
lpGlyphs
=
new_glyphs
;
for
(
k
=
0
;
k
<
cOutGlyphs
;
k
++
)
(
*
lpGlyphs
)[
glyph_i
+
k
]
=
run_glyphs
[
k
];
glyph_i
+=
cOutGlyphs
;
}
}
HeapFree
(
GetProcessHeap
(),
0
,
runOrder
);
HeapFree
(
GetProcessHeap
(),
0
,
visOrder
);
}
done
+=
i
;
}
if
(
cGlyphs
)
*
cGlyphs
=
glyph_i
;
ret
=
TRUE
;
cleanup:
HeapFree
(
GetProcessHeap
(),
0
,
chartype
);
HeapFree
(
GetProcessHeap
(),
0
,
levels
);
HeapFree
(
GetProcessHeap
(),
0
,
pItems
);
HeapFree
(
GetProcessHeap
(),
0
,
run_glyphs
);
HeapFree
(
GetProcessHeap
(),
0
,
pwLogClust
);
HeapFree
(
GetProcessHeap
(),
0
,
psva
);
ScriptFreeCache
(
&
psc
);
return
ret
;
}
static
inline
BOOL
intersect_rect
(
RECT
*
dst
,
const
RECT
*
src1
,
const
RECT
*
src2
)
{
dst
->
left
=
max
(
src1
->
left
,
src2
->
left
);
...
...
@@ -1182,9 +1762,28 @@ static BOOL ext_text_out(struct pp_data *data, HANDLETABLE *htable,
RECT
rc
;
POINT
*
deltas
=
NULL
,
width
=
{
0
,
0
};
INT
breakRem
;
WORD
*
glyphs
=
NULL
;
XFORM
xform
;
/* TODO: Add BiDi support */
if
(
!
(
flags
&
(
ETO_GLYPH_INDEX
|
ETO_IGNORELANGUAGE
))
&&
count
>
0
)
{
int
glyphs_count
=
0
;
UINT
bidi_flags
;
bidi_flags
=
(
GetTextAlign
(
hdc
)
&
TA_RTLREADING
)
||
(
flags
&
ETO_RTLREADING
)
?
WINE_GCPW_FORCE_RTL
:
WINE_GCPW_FORCE_LTR
;
BIDI_Reorder
(
hdc
,
str
,
count
,
GCP_REORDER
,
bidi_flags
,
NULL
,
0
,
NULL
,
&
glyphs
,
&
glyphs_count
);
flags
|=
ETO_IGNORELANGUAGE
;
if
(
glyphs
)
{
flags
|=
ETO_GLYPH_INDEX
;
count
=
glyphs_count
;
str
=
glyphs
;
}
}
align
=
GetTextAlign
(
hdc
);
breakRem
=
data
->
break_rem
;
...
...
@@ -1504,6 +2103,7 @@ done:
DeleteObject
(
hbrush
);
}
HeapFree
(
GetProcessHeap
(),
0
,
glyphs
);
return
ret
;
}
...
...
tools/make_unicode
View file @
0d95b821
...
...
@@ -5807,6 +5807,7 @@ chdir ".." if -f "./make_unicode";
load_data
();
dump_bidi_dir_table
(
"dlls/gdi32/uniscribe/direction.c"
);
dump_bidi_dir_table
(
"dlls/dwrite/direction.c"
);
dump_bidi_dir_table
(
"dlls/wineps.drv/direction.c"
);
dump_mirroring
(
"dlls/gdi32/uniscribe/mirror.c"
);
dump_mirroring
(
"dlls/dwrite/mirror.c"
);
dump_bracket
(
"dlls/gdi32/uniscribe/bracket.c"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment