My code is compiled under "6502 Macro Assembler&Simulator".
To adapt to other compilers or platforms , several modifies is needed.
Code: Select all
.ORG 0
jmp main
OrgS1=OrgSbox
OrgS2=OrgSbox+256*4
OrgS3=OrgSbox+256*4*2
OrgS4=OrgSbox+256*4*3
OrgSend=OrgSbox+256*4*4
S1=Sbox
S2=S1+256*4
S3=S1+256*4*2
S4=S1+256*4*3
Send=S1+256*4*4
Pboxa=Pbox+4
Pboxb=Pbox+16*4
MAX_KEYLEN=56
MIN_KEYLEN=5
;======================================================
;vars
DataL .DB 0,0,0,0
DataR .DB 0,0,0,0
OutL .DB 0,0,0,0
OutR .DB 0,0,0,0
KeyLen .DB 0
KeyPtr .DB 0,0
KeyStr .DB "TESTKEY"
SboxPtr .DB 0,0
;SPtr1 .DB 0,0
;SPtr2 .DB 0,0
;SPtr3 .DB 0,0
;SPtr4 .DB 0,0
;SPtrEnd .DB 0,0
TmpDW0 .DB 0,0,0,0
TmpDW1 .DB 0,0,0,0
TmpDW2 .DB 0,0,0,0
TmpDW3 .DB 0,0,0,0
TmpDW4 .DB 0,0,0,0
TmpDW5 .DB 0,0,0,0
TmpDW6 .DB 0,0,0,0
TmpDW7 .DB 0,0,0,0
TmpDW8 .DB 0,0,0,0
TmpDW9 .DB 0,0,0,0
.ORG $1000
Pbox .DCB 18*4,0
Sbox .DCB 4*4*256,0
;======================================================
xchgBYTE .MACRO a,b
LDA a
LDX b
STA b
STX a
.ENDM
xchgWORD .MACRO a,b
xchgBYTE a,b
xchgBYTE a+1,b+1
.ENDM
xchgDWORD .MACRO a,b
xchgWORD a,b
xchgWORD a+2,b+2
.ENDM
memcpy256B .MACRO src,dest,len;len=0 mean 1byte
LDY #len
.cpynextB LDA src,y
STA dest,y
DEY
CPY #$FF
BNE .cpynextB
.ENDM
memcpy1KB .MACRO src,dest
memcpy256B src,dest,$FF
memcpy256B src+256,dest+256,$FF
memcpy256B src+256*2,dest+256*2,$FF
memcpy256B src+256*3,dest+256*3,$FF
.ENDM
setBYTE .MACRO var,val
LDA #val
STA var
.ENDM
setWORD .MACRO var,val
setBYTE var,<val
setBYTE var+1,>val
.ENDM
setDWORD .MACRO var,valH,valL
setWORD var,valL
setWORD var+2,valH
.ENDM
xorBYTE .MACRO a,b,c
LDA a
EOR b
STA c
.ENDM
xorWORD .MACRO a,b,c
xorBYTE a,b,c
xorBYTE a+1,b+1,c+1
.ENDM
xorDWORD .MACRO a,b,c
xorWORD a,b,c
xorWORD a+2,b+2,c+2
.ENDM
loadBYTE .MACRO a,ptr
LDY #0
LDA (ptr),y
STA a
.ENDM
loadWORD .MACRO a,ptr
LDY #0
LDA (ptr),y
STA a
INY
LDA (ptr),y
STA a+1
.ENDM
loadDWORD .MACRO a,ptr
LDY #0
LDA (ptr),y
STA a
INY
LDA (ptr),y
STA a+1
INY
LDA (ptr),y
STA a+2
INY
LDA (ptr),y
STA a+3
.ENDM
storBYTE .MACRO a,ptr
LDY #0
LDA a
STA (ptr),y
.ENDM
storWORD .MACRO a,ptr
LDY #0
LDA a
STA (ptr),y
INY
LDA a+1
STA (ptr),y
.ENDM
storDWORD .MACRO a,ptr
LDY #0
LDA a
STA (ptr),y
INY
LDA a+1
STA (ptr),y
INY
LDA a+2
STA (ptr),y
INY
LDA a+3
STA (ptr),y
.ENDM
;MinusBYTE .MACRO
addBYTE .MACRO a,b,c
LDA a
ADC b
STA c
.ENDM
addWORD .MACRO a,b,c
addBYTE a,b,c
addBYTE a+1,b+1,c+1
.ENDM
addDWORD .MACRO a,b,c
addWORD a,b,c
addWORD a+2,b+2,c+2
.ENDM
;======================================================
InitBF
;initialize key
;cpy sbox()
memcpy1KB OrgS1,S1
memcpy1KB OrgS2,S2
memcpy1KB OrgS3,S3
memcpy1KB OrgS4,S4
;intialize pbox step1
LDX #0
LDY #3
L2 LDA KeyStr,x
EOR OrgPbox,y
STA Pbox,y
INX
CPX KeyLen
BNE L1
LDX #0
L1 DEY
TYA
AND #3
CMP #3
BNE L2
CPY #$43
BEQ L0
TYA
CLC
ADC #8
TAY
JMP L2
L0
;intialize pbox step2
setBYTE TmpDW5,0
setDWORD DataL,0,0
setDWORD DataR,0,0
NOP
L4 JSR BF_Encrypt
LDY #0
LDX TmpDW5
L5 LDA DataL,y
STA Pbox,x
INY
INX
CPY #8
BNE L5
STX TmpDW5
CPX #72
BNE L4
NOP
;initial sbox
setWORD TmpDW5,Sbox
L6 JSR BF_Encrypt
LDY #7
L7 LDA DataL,y
STA (TmpDW5),y
DEY
CPY #$FF
BNE L7
CLC
LDA TmpDW5
ADC #8
STA TmpDW5
BCC L8
INC TmpDW5+1
L8 LDA TmpDW5+1
CMP #>Send
BNE L6
LDA TmpDW5
CMP #<Send
BNE L6
RTS
;======================================================
;private MACRO
LoadS .MACRO Snum,address,tag ;use TmpDW2
setWORD TmpDW2,0
LDA address
CLC
ASL
ROL TmpDW2+1
ASL
ROL TmpDW2+1
ADC #<Snum
STA TmpDW2
LDA TmpDW2+1
ADC #>Snum
STA TmpDW2+1
loadDWORD tag,TmpDW2
.ENDM
;======================================================
BF_Encrypt
setWORD TmpDW0,Pbox
L9 ;cycle
loadDWORD TmpDW1,TmpDW0
xorDWORD DataL,TmpDW1,DataL
LoadS S1,DataL+3,TmpDW3
LoadS S2,DataL+2,TmpDW4
CLC
addDWORD TmpDW3,TmpDW4,TmpDW3
LoadS S3,DataL+1,TmpDW4
xorDWORD TmpDW3,TmpDW4,TmpDW3
LoadS S4,DataL,TmpDW4
CLC
addDWORD TmpDW3,TmpDW4,TmpDW3
xorDWORD DataR,TmpDW3,DataR
xchgDWORD DataL,DataR
CLC
LDA TmpDW0
ADC #4
STA TmpDW0
BCC L10
INC TmpDW0+1
L10 LDA TmpDW0+1
CMP #>Pboxb
BEQ TL1
JMP L9
TL1 LDA TmpDW0
CMP #<Pboxb
BEQ TL2
JMP L9
TL2
xchgDWORD DataL,DataR
xorDWORD DataR,Pbox+16*4,DataR
xorDWORD DataL,Pbox+17*4,DataL
RTS
;======================================================
BF_Decrypt
setWORD TmpDW0,Pbox+17*4
L11 ;cycle
loadDWORD TmpDW1,TmpDW0
xorDWORD DataL,TmpDW1,DataL
LoadS S1,DataL+3,TmpDW3
LoadS S2,DataL+2,TmpDW4
CLC
addDWORD TmpDW3,TmpDW4,TmpDW3
LoadS S3,DataL+1,TmpDW4
xorDWORD TmpDW3,TmpDW4,TmpDW3
LoadS S4,DataL,TmpDW4
CLC
addDWORD TmpDW3,TmpDW4,TmpDW3
xorDWORD DataR,TmpDW3,DataR
xchgDWORD DataL,DataR
SEC
LDA TmpDW0
SBC #4
STA TmpDW0
BCS L12
DEC TmpDW0+1
L12 LDA TmpDW0+1
CMP #>Pboxa
BEQ TL3
JMP L11
TL3
LDA TmpDW0
CMP #<Pboxa
BEQ TL4
JMP L11
TL4
xchgDWORD DataL,DataR
xorDWORD DataR,Pbox+4,DataR
xorDWORD DataL,Pbox,DataL
RTS
;======================================================
main NOP
setWORD KeyPtr,KeyStr
setBYTE KeyLen,7
JSR InitBF
NOP
setDWORD DataL,0,0
setDWORD DataR,0,0
setDWORD DataL,0,1
setDWORD DataR,0,2
JSR BF_Encrypt
NOP
JSR BF_Decrypt
NOP
RTS
;======================================================
;Data Segment
OrgPbox
.db $88, $6A, $3F, $24, $D3, $08, $A3, $85, $2E, $8A, $19, $13, $44, $73, $70, $03
.db $22, $38, $09, $A4, $D0, $31, $9F, $29, $98, $FA, $2E, $08, $89, $6C, $4E, $EC
.db $E6, $21, $28, $45, $77, $13, $D0, $38, $CF, $66, $54, $BE, $6C, $0C, $E9, $34
.db $B7, $29, $AC, $C0, $DD, $50, $7C, $C9, $B5, $D5, $84, $3F, $17, $09, $47, $B5
.DB $D9, $D5, $16, $92, $1B, $FB, $79, $89
OrgSbox
.db $A6, $0B, $31, $D1, $AC, $B5, $DF, $98, $DB, $72, $FD, $2F, $B7, $DF, $1A, $D0
.db $ED, $AF, $E1, $B8, $96, $7E, $26, $6A, $45, $90, $7C, $BA, $99, $7F, $2C, $F1
.db $47, $99, $A1, $24, $F7, $6C, $91, $B3, $E2, $F2, $01, $08, $16, $FC, $8E, $85
.db $D8, $20, $69, $63, $69, $4E, $57, $71, $A3, $FE, $58, $A4, $7E, $3D, $93, $F4
.db $8F, $74, $95, $0D, $58, $B6, $8E, $72, $58, $CD, $8B, $71, $EE, $4A, $15, $82
.db $1D, $A4, $54, $7B, $B5, $59, $5A, $C2, $39, $D5, $30, $9C, $13, $60, $F2, $2A
.db $23, $B0, $D1, $C5, $F0, $85, $60, $28, $18, $79, $41, $CA, $EF, $38, $DB, $B8
.db $B0, $DC, $79, $8E, $0E, $18, $3A, $60, $8B, $0E, $9E, $6C, $3E, $8A, $1E, $B0
.db $C1, $77, $15, $D7, $27, $4B, $31, $BD, $DA, $2F, $AF, $78, $60, $5C, $60, $55
.db $F3, $25, $55, $E6, $94, $AB, $55, $AA, $62, $98, $48, $57, $40, $14, $E8, $63
.db $6A, $39, $CA, $55, $B6, $10, $AB, $2A, $34, $5C, $CC, $B4, $CE, $E8, $41, $11
.db $AF, $86, $54, $A1, $93, $E9, $72, $7C, $11, $14, $EE, $B3, $2A, $BC, $6F, $63
.db $5D, $C5, $A9, $2B, $F6, $31, $18, $74, $16, $3E, $5C, $CE, $1E, $93, $87, $9B
.db $33, $BA, $D6, $AF, $5C, $CF, $24, $6C, $81, $53, $32, $7A, $77, $86, $95, $28
.db $98, $48, $8F, $3B, $AF, $B9, $4B, $6B, $1B, $E8, $BF, $C4, $93, $21, $28, $66
.db $CC, $09, $D8, $61, $91, $A9, $21, $FB, $60, $AC, $7C, $48, $32, $80, $EC, $5D
.db $5D, $5D, $84, $EF, $B1, $75, $85, $E9, $02, $23, $26, $DC, $88, $1B, $65, $EB
.db $81, $3E, $89, $23, $C5, $AC, $96, $D3, $F3, $6F, $6D, $0F, $39, $42, $F4, $83
.db $82, $44, $0B, $2E, $04, $20, $84, $A4, $4A, $F0, $C8, $69, $5E, $9B, $1F, $9E
.db $42, $68, $C6, $21, $9A, $6C, $E9, $F6, $61, $9C, $0C, $67, $F0, $88, $D3, $AB
.db $D2, $A0, $51, $6A, $68, $2F, $54, $D8, $28, $A7, $0F, $96, $A3, $33, $51, $AB
.db $6C, $0B, $EF, $6E, $E4, $3B, $7A, $13, $50, $F0, $3B, $BA, $98, $2A, $FB, $7E
.db $1D, $65, $F1, $A1, $76, $01, $AF, $39, $3E, $59, $CA, $66, $88, $0E, $43, $82
.db $19, $86, $EE, $8C, $B4, $9F, $6F, $45, $C3, $A5, $84, $7D, $BE, $5E, $8B, $3B
.db $D8, $75, $6F, $E0, $73, $20, $C1, $85, $9F, $44, $1A, $40, $A6, $6A, $C1, $56
.db $62, $AA, $D3, $4E, $06, $77, $3F, $36, $72, $DF, $FE, $1B, $3D, $02, $9B, $42
.db $24, $D7, $D0, $37, $48, $12, $0A, $D0, $D3, $EA, $0F, $DB, $9B, $C0, $F1, $49
.db $C9, $72, $53, $07, $7B, $1B, $99, $80, $D8, $79, $D4, $25, $F7, $DE, $E8, $F6
.db $1A, $50, $FE, $E3, $3B, $4C, $79, $B6, $BD, $E0, $6C, $97, $BA, $06, $C0, $04
.db $B6, $4F, $A9, $C1, $C4, $60, $9F, $40, $C2, $9E, $5C, $5E, $63, $24, $6A, $19
.db $AF, $6F, $FB, $68, $B5, $53, $6C, $3E, $EB, $B2, $39, $13, $6F, $EC, $52, $3B
.db $1F, $51, $FC, $6D, $2C, $95, $30, $9B, $44, $45, $81, $CC, $09, $BD, $5E, $AF
.db $04, $D0, $E3, $BE, $FD, $4A, $33, $DE, $07, $28, $0F, $66, $B3, $4B, $2E, $19
.db $57, $A8, $CB, $C0, $0F, $74, $C8, $45, $39, $5F, $0B, $D2, $DB, $FB, $D3, $B9
.db $BD, $C0, $79, $55, $0A, $32, $60, $1A, $C6, $00, $A1, $D6, $79, $72, $2C, $40
.db $FE, $25, $9F, $67, $CC, $A3, $1F, $FB, $F8, $E9, $A5, $8E, $F8, $22, $32, $DB
.db $DF, $16, $75, $3C, $15, $6B, $61, $FD, $C8, $1E, $50, $2F, $AB, $52, $05, $AD
.db $FA, $B5, $3D, $32, $60, $87, $23, $FD, $48, $7B, $31, $53, $82, $DF, $00, $3E
.db $BB, $57, $5C, $9E, $A0, $8C, $6F, $CA, $2E, $56, $87, $1A, $DB, $69, $17, $DF
.db $F6, $A8, $42, $D5, $C3, $FF, $7E, $28, $C6, $32, $67, $AC, $73, $55, $4F, $8C
.db $B0, $27, $5B, $69, $C8, $58, $CA, $BB, $5D, $A3, $FF, $E1, $A0, $11, $F0, $B8
.db $98, $3D, $FA, $10, $B8, $83, $21, $FD, $6C, $B5, $FC, $4A, $5B, $D3, $D1, $2D
.db $79, $E4, $53, $9A, $65, $45, $F8, $B6, $BC, $49, $8E, $D2, $90, $97, $FB, $4B
.db $DA, $F2, $DD, $E1, $33, $7E, $CB, $A4, $41, $13, $FB, $62, $E8, $C6, $E4, $CE
.db $DA, $CA, $20, $EF, $01, $4C, $77, $36, $FE, $9E, $7E, $D0, $B4, $1F, $F1, $2B
.db $4D, $DA, $DB, $95, $98, $91, $90, $AE, $71, $8E, $AD, $EA, $A0, $D5, $93, $6B
.db $D0, $D1, $8E, $D0, $E0, $25, $C7, $AF, $2F, $5B, $3C, $8E, $B7, $94, $75, $8E
.db $FB, $E2, $F6, $8F, $64, $2B, $12, $F2, $12, $B8, $88, $88, $1C, $F0, $0D, $90
.db $A0, $5E, $AD, $4F, $1C, $C3, $8F, $68, $91, $F1, $CF, $D1, $AD, $C1, $A8, $B3
.db $18, $22, $2F, $2F, $77, $17, $0E, $BE, $FE, $2D, $75, $EA, $A1, $1F, $02, $8B
.db $0F, $CC, $A0, $E5, $E8, $74, $6F, $B5, $D6, $F3, $AC, $18, $99, $E2, $89, $CE
.db $E0, $4F, $A8, $B4, $B7, $E0, $13, $FD, $81, $3B, $C4, $7C, $D9, $A8, $AD, $D2
.db $66, $A2, $5F, $16, $05, $77, $95, $80, $14, $73, $CC, $93, $77, $14, $1A, $21
.db $65, $20, $AD, $E6, $86, $FA, $B5, $77, $F5, $42, $54, $C7, $CF, $35, $9D, $FB
.db $0C, $AF, $CD, $EB, $A0, $89, $3E, $7B, $D3, $1B, $41, $D6, $49, $7E, $1E, $AE
.db $2D, $0E, $25, $00, $5E, $B3, $71, $20, $BB, $00, $68, $22, $AF, $E0, $B8, $57
.db $9B, $36, $64, $24, $1E, $B9, $09, $F0, $1D, $91, $63, $55, $AA, $A6, $DF, $59
.db $89, $43, $C1, $78, $7F, $53, $5A, $D9, $A2, $5B, $7D, $20, $C5, $B9, $E5, $02
.db $76, $03, $26, $83, $A9, $CF, $95, $62, $68, $19, $C8, $11, $41, $4A, $73, $4E
.db $CA, $2D, $47, $B3, $4A, $A9, $14, $7B, $52, $00, $51, $1B, $15, $29, $53, $9A
.db $3F, $57, $0F, $D6, $E4, $C6, $9B, $BC, $76, $A4, $60, $2B, $00, $74, $E6, $81
.db $B5, $6F, $BA, $08, $1F, $E9, $1B, $57, $6B, $EC, $96, $F2, $15, $D9, $0D, $2A
.db $21, $65, $63, $B6, $B6, $F9, $B9, $E7, $2E, $05, $34, $FF, $64, $56, $85, $C5
.db $5D, $2D, $B0, $53, $A1, $8F, $9F, $A9, $99, $47, $BA, $08, $6A, $07, $85, $6E
.db $E9, $70, $7A, $4B, $44, $29, $B3, $B5, $2E, $09, $75, $DB, $23, $26, $19, $C4
.db $B0, $A6, $6E, $AD, $7D, $DF, $A7, $49, $B8, $60, $EE, $9C, $66, $B2, $ED, $8F
.db $71, $8C, $AA, $EC, $FF, $17, $9A, $69, $6C, $52, $64, $56, $E1, $9E, $B1, $C2
.db $A5, $02, $36, $19, $29, $4C, $09, $75, $40, $13, $59, $A0, $3E, $3A, $18, $E4
.db $9A, $98, $54, $3F, $65, $9D, $42, $5B, $D6, $E4, $8F, $6B, $D6, $3F, $F7, $99
.db $07, $9C, $D2, $A1, $F5, $30, $E8, $EF, $E6, $38, $2D, $4D, $C1, $5D, $25, $F0
.db $86, $20, $DD, $4C, $26, $EB, $70, $84, $C6, $E9, $82, $63, $5E, $CC, $1E, $02
.db $3F, $6B, $68, $09, $C9, $EF, $BA, $3E, $14, $18, $97, $3C, $A1, $70, $6A, $6B
.db $84, $35, $7F, $68, $86, $E2, $A0, $52, $05, $53, $9C, $B7, $37, $07, $50, $AA
.db $1C, $84, $07, $3E, $5C, $AE, $DE, $7F, $EC, $44, $7D, $8E, $B8, $F2, $16, $57
.db $37, $DA, $3A, $B0, $0D, $0C, $50, $F0, $04, $1F, $1C, $F0, $FF, $B3, $00, $02
.db $1A, $F5, $0C, $AE, $B2, $74, $B5, $3C, $58, $7A, $83, $25, $BD, $21, $09, $DC
.db $F9, $13, $91, $D1, $F6, $2F, $A9, $7C, $73, $47, $32, $94, $01, $47, $F5, $22
.db $81, $E5, $E5, $3A, $DC, $DA, $C2, $37, $34, $76, $B5, $C8, $A7, $DD, $F3, $9A
.db $46, $61, $44, $A9, $0E, $03, $D0, $0F, $3E, $C7, $C8, $EC, $41, $1E, $75, $A4
.db $99, $CD, $38, $E2, $2F, $0E, $EA, $3B, $A1, $BB, $80, $32, $31, $B3, $3E, $18
.db $38, $8B, $54, $4E, $08, $B9, $6D, $4F, $03, $0D, $42, $6F, $BF, $04, $0A, $F6
.db $90, $12, $B8, $2C, $79, $7C, $97, $24, $72, $B0, $79, $56, $AF, $89, $AF, $BC
.db $1F, $77, $9A, $DE, $10, $08, $93, $D9, $12, $AE, $8B, $B3, $2E, $3F, $CF, $DC
.db $1F, $72, $12, $55, $24, $71, $6B, $2E, $E6, $DD, $1A, $50, $87, $CD, $84, $9F
.db $18, $47, $58, $7A, $17, $DA, $08, $74, $BC, $9A, $9F, $BC, $8C, $7D, $4B, $E9
.db $3A, $EC, $7A, $EC, $FA, $1D, $85, $DB, $66, $43, $09, $63, $D2, $C3, $64, $C4
.db $47, $18, $1C, $EF, $08, $D9, $15, $32, $37, $3B, $43, $DD, $16, $BA, $C2, $24
.db $43, $4D, $A1, $12, $51, $C4, $65, $2A, $02, $00, $94, $50, $DD, $E4, $3A, $13
.db $9E, $F8, $DF, $71, $55, $4E, $31, $10, $D6, $77, $AC, $81, $9B, $19, $11, $5F
.db $F1, $56, $35, $04, $6B, $C7, $A3, $D7, $3B, $18, $11, $3C, $09, $A5, $24, $59
.db $ED, $E6, $8F, $F2, $FA, $FB, $F1, $97, $2C, $BF, $BA, $9E, $6E, $3C, $15, $1E
.db $70, $45, $E3, $86, $B1, $6F, $E9, $EA, $0A, $5E, $0E, $86, $B3, $2A, $3E, $5A
.db $1C, $E7, $1F, $77, $FA, $06, $3D, $4E, $B9, $DC, $65, $29, $0F, $1D, $E7, $99
.db $D6, $89, $3E, $80, $25, $C8, $66, $52, $78, $C9, $4C, $2E, $6A, $B3, $10, $9C
.db $BA, $0E, $15, $C6, $78, $EA, $E2, $94, $53, $3C, $FC, $A5, $F4, $2D, $0A, $1E
.db $A7, $4E, $F7, $F2, $3D, $2B, $1D, $36, $0F, $26, $39, $19, $60, $79, $C2, $19
.db $08, $A7, $23, $52, $B6, $12, $13, $F7, $6E, $FE, $AD, $EB, $66, $1F, $C3, $EA
.db $95, $45, $BC, $E3, $83, $C8, $7B, $A6, $D1, $37, $7F, $B1, $28, $FF, $8C, $01
.db $EF, $DD, $32, $C3, $A5, $5A, $6C, $BE, $85, $21, $58, $65, $02, $98, $AB, $68
.db $0F, $A5, $CE, $EE, $3B, $95, $2F, $DB, $AD, $7D, $EF, $2A, $84, $2F, $6E, $5B
.db $28, $B6, $21, $15, $70, $61, $07, $29, $75, $47, $DD, $EC, $10, $15, $9F, $61
.db $30, $A8, $CC, $13, $96, $BD, $61, $EB, $1E, $FE, $34, $03, $CF, $63, $03, $AA
.db $90, $5C, $73, $B5, $39, $A2, $70, $4C, $0B, $9E, $9E, $D5, $14, $DE, $AA, $CB
.db $BC, $86, $CC, $EE, $A7, $2C, $62, $60, $AB, $5C, $AB, $9C, $6E, $84, $F3, $B2
.db $AF, $1E, $8B, $64, $CA, $F0, $BD, $19, $B9, $69, $23, $A0, $50, $BB, $5A, $65
.db $32, $5A, $68, $40, $B3, $B4, $2A, $3C, $D5, $E9, $9E, $31, $F7, $B8, $21, $C0
.db $19, $0B, $54, $9B, $99, $A0, $5F, $87, $7E, $99, $F7, $95, $A8, $7D, $3D, $62
.db $9A, $88, $37, $F8, $77, $2D, $E3, $97, $5F, $93, $ED, $11, $81, $12, $68, $16
.db $29, $88, $35, $0E, $D6, $1F, $E6, $C7, $A1, $DF, $DE, $96, $99, $BA, $58, $78
.db $A5, $84, $F5, $57, $63, $72, $22, $1B, $FF, $C3, $83, $9B, $96, $46, $C2, $1A
.db $EB, $0A, $B3, $CD, $54, $30, $2E, $53, $E4, $48, $D9, $8F, $28, $31, $BC, $6D
.db $EF, $F2, $EB, $58, $EA, $FF, $C6, $34, $61, $ED, $28, $FE, $73, $3C, $7C, $EE
.db $D9, $14, $4A, $5D, $E3, $B7, $64, $E8, $14, $5D, $10, $42, $E0, $13, $3E, $20
.db $B6, $E2, $EE, $45, $EA, $AB, $AA, $A3, $15, $4F, $6C, $DB, $D0, $4F, $CB, $FA
.db $42, $F4, $42, $C7, $B5, $BB, $6A, $EF, $1D, $3B, $4F, $65, $05, $21, $CD, $41
.db $9E, $79, $1E, $D8, $C7, $4D, $85, $86, $6A, $47, $4B, $E4, $50, $62, $81, $3D
.db $F2, $A1, $62, $CF, $46, $26, $8D, $5B, $A0, $83, $88, $FC, $A3, $B6, $C7, $C1
.db $C3, $24, $15, $7F, $92, $74, $CB, $69, $0B, $8A, $84, $47, $85, $B2, $92, $56
.db $00, $BF, $5B, $09, $9D, $48, $19, $AD, $74, $B1, $62, $14, $00, $0E, $82, $23
.db $2A, $8D, $42, $58, $EA, $F5, $55, $0C, $3E, $F4, $AD, $1D, $61, $70, $3F, $23
.db $92, $F0, $72, $33, $41, $7E, $93, $8D, $F1, $EC, $5F, $D6, $DB, $3B, $22, $6C
.db $59, $37, $DE, $7C, $60, $74, $EE, $CB, $A7, $F2, $85, $40, $6E, $32, $77, $CE
.db $84, $80, $07, $A6, $9E, $50, $F8, $19, $55, $D8, $EF, $E8, $35, $97, $D9, $61
.db $AA, $A7, $69, $A9, $C2, $06, $0C, $C5, $FC, $AB, $04, $5A, $DC, $CA, $0B, $80
.db $2E, $7A, $44, $9E, $84, $34, $45, $C3, $05, $67, $D5, $FD, $C9, $9E, $1E, $0E
.db $D3, $DB, $73, $DB, $CD, $88, $55, $10, $79, $DA, $5F, $67, $40, $43, $67, $E3
.db $65, $34, $C4, $C5, $D8, $38, $3E, $71, $9E, $F8, $28, $3D, $20, $FF, $6D, $F1
.db $E7, $21, $3E, $15, $4A, $3D, $B0, $8F, $2B, $9F, $E3, $E6, $F7, $AD, $83, $DB
.db $68, $5A, $3D, $E9, $F7, $40, $81, $94, $1C, $26, $4C, $F6, $34, $29, $69, $94
.db $F7, $20, $15, $41, $F7, $D4, $02, $76, $2E, $6B, $F4, $BC, $68, $00, $A2, $D4
.db $71, $24, $08, $D4, $6A, $F4, $20, $33, $B7, $D4, $B7, $43, $AF, $61, $00, $50
.db $2E, $F6, $39, $1E, $46, $45, $24, $97, $74, $4F, $21, $14, $40, $88, $8B, $BF
.db $1D, $FC, $95, $4D, $AF, $91, $B5, $96, $D3, $DD, $F4, $70, $45, $2F, $A0, $66
.db $EC, $09, $BC, $BF, $85, $97, $BD, $03, $D0, $6D, $AC, $7F, $04, $85, $CB, $31
.db $B3, $27, $EB, $96, $41, $39, $FD, $55, $E6, $47, $25, $DA, $9A, $0A, $CA, $AB
.db $25, $78, $50, $28, $F4, $29, $04, $53, $DA, $86, $2C, $0A, $FB, $6D, $B6, $E9
.db $62, $14, $DC, $68, $00, $69, $48, $D7, $A4, $C0, $0E, $68, $EE, $8D, $A1, $27
.db $A2, $FE, $3F, $4F, $8C, $AD, $87, $E8, $06, $E0, $8C, $B5, $B6, $D6, $F4, $7A
.db $7C, $1E, $CE, $AA, $EC, $5F, $37, $D3, $99, $A3, $78, $CE, $42, $2A, $6B, $40
.db $35, $9E, $FE, $20, $B9, $85, $F3, $D9, $AB, $D7, $39, $EE, $8B, $4E, $12, $3B
.db $F7, $FA, $C9, $1D, $56, $18, $6D, $4B, $31, $66, $A3, $26, $B2, $97, $E3, $EA
.db $74, $FA, $6E, $3A, $32, $43, $5B, $DD, $F7, $E7, $41, $68, $FB, $20, $78, $CA
.db $4E, $F5, $0A, $FB, $97, $B3, $FE, $D8, $AC, $56, $40, $45, $27, $95, $48, $BA
.db $3A, $3A, $53, $55, $87, $8D, $83, $20, $B7, $A9, $6B, $FE, $4B, $95, $96, $D0
.db $BC, $67, $A8, $55, $58, $9A, $15, $A1, $63, $29, $A9, $CC, $33, $DB, $E1, $99
.db $56, $4A, $2A, $A6, $F9, $25, $31, $3F, $1C, $7E, $F4, $5E, $7C, $31, $29, $90
.db $02, $E8, $F8, $FD, $70, $2F, $27, $04, $5C, $15, $BB, $80, $E3, $2C, $28, $05
.db $48, $15, $C1, $95, $22, $6D, $C6, $E4, $3F, $13, $C1, $48, $DC, $86, $0F, $C7
.db $EE, $C9, $F9, $07, $0F, $1F, $04, $41, $A4, $79, $47, $40, $17, $6E, $88, $5D
.db $EB, $51, $5F, $32, $D1, $C0, $9B, $D5, $8F, $C1, $BC, $F2, $64, $35, $11, $41
.db $34, $78, $7B, $25, $60, $9C, $2A, $60, $A3, $E8, $F8, $DF, $1B, $6C, $63, $1F
.db $C2, $B4, $12, $0E, $9E, $32, $E1, $02, $D1, $4F, $66, $AF, $15, $81, $D1, $CA
.db $E0, $95, $23, $6B, $E1, $92, $3E, $33, $62, $0B, $24, $3B, $22, $B9, $BE, $EE
.db $0E, $A2, $B2, $85, $99, $0D, $BA, $E6, $8C, $0C, $72, $DE, $28, $F7, $A2, $2D
.db $45, $78, $12, $D0, $FD, $94, $B7, $95, $62, $08, $7D, $64, $F0, $F5, $CC, $E7
.db $6F, $A3, $49, $54, $FA, $48, $7D, $87, $27, $FD, $9D, $C3, $1E, $8D, $3E, $F3
.db $41, $63, $47, $0A, $74, $FF, $2E, $99, $AB, $6E, $6F, $3A, $37, $FD, $F8, $F4
.db $60, $DC, $12, $A8, $F8, $DD, $EB, $A1, $4C, $E1, $1B, $99, $0D, $6B, $6E, $DB
.db $10, $55, $7B, $C6, $37, $2C, $67, $6D, $3B, $D4, $65, $27, $04, $E8, $D0, $DC
.db $C7, $0D, $29, $F1, $A3, $FF, $00, $CC, $92, $0F, $39, $B5, $0B, $ED, $0F, $69
.db $FB, $9F, $7B, $66, $9C, $7D, $DB, $CE, $0B, $CF, $91, $A0, $A3, $5E, $15, $D9
.db $88, $2F, $13, $BB, $24, $AD, $5B, $51, $BF, $79, $94, $7B, $EB, $D6, $3B, $76
.db $B3, $2E, $39, $37, $79, $59, $11, $CC, $97, $E2, $26, $80, $2D, $31, $2E, $F4
.db $A7, $AD, $42, $68, $3B, $2B, $6A, $C6, $CC, $4C, $75, $12, $1C, $F1, $2E, $78
.db $37, $42, $12, $6A, $E7, $51, $92, $B7, $E6, $BB, $A1, $06, $50, $63, $FB, $4B
.db $18, $10, $6B, $1A, $FA, $ED, $CA, $11, $D8, $BD, $25, $3D, $C9, $C3, $E1, $E2
.db $59, $16, $42, $44, $86, $13, $12, $0A, $6E, $EC, $0C, $D9, $2A, $EA, $AB, $D5
.db $4E, $67, $AF, $64, $5F, $A8, $86, $DA, $88, $E9, $BF, $BE, $FE, $C3, $E4, $64
.db $57, $80, $BC, $9D, $86, $C0, $F7, $F0, $F8, $7B, $78, $60, $4D, $60, $03, $60
.db $46, $83, $FD, $D1, $B0, $1F, $38, $F6, $04, $AE, $45, $77, $CC, $FC, $36, $D7
.db $33, $6B, $42, $83, $71, $AB, $1E, $F0, $87, $41, $80, $B0, $5F, $5E, $00, $3C
.db $BE, $57, $A0, $77, $24, $AE, $E8, $BD, $99, $42, $46, $55, $61, $2E, $58, $BF
.db $8F, $F4, $58, $4E, $A2, $FD, $DD, $F2, $38, $EF, $74, $F4, $C2, $BD, $89, $87
.db $C3, $F9, $66, $53, $74, $8E, $B3, $C8, $55, $F2, $75, $B4, $B9, $D9, $FC, $46
.db $61, $26, $EB, $7A, $84, $DF, $1D, $8B, $79, $0E, $6A, $84, $E2, $95, $5F, $91
.db $8E, $59, $6E, $46, $70, $57, $B4, $20, $91, $55, $D5, $8C, $4C, $DE, $02, $C9
.db $E1, $AC, $0B, $B9, $D0, $05, $82, $BB, $48, $62, $A8, $11, $9E, $A9, $74, $75
.db $B6, $19, $7F, $B7, $09, $DC, $A9, $E0, $A1, $09, $2D, $66, $33, $46, $32, $C4
.db $02, $1F, $5A, $E8, $8C, $BE, $F0, $09, $25, $A0, $99, $4A, $10, $FE, $6E, $1D
.db $1D, $3D, $B9, $1A, $DF, $A4, $A5, $0B, $0F, $F2, $86, $A1, $69, $F1, $68, $28
.db $83, $DA, $B7, $DC, $FE, $06, $39, $57, $9B, $CE, $E2, $A1, $52, $7F, $CD, $4F
.db $01, $5E, $11, $50, $FA, $83, $06, $A7, $C4, $B5, $02, $A0, $27, $D0, $E6, $0D
.db $27, $8C, $F8, $9A, $41, $86, $3F, $77, $06, $4C, $60, $C3, $B5, $06, $A8, $61
.db $28, $7A, $17, $F0, $E0, $86, $F5, $C0, $AA, $58, $60, $00, $62, $7D, $DC, $30
.db $D7, $9E, $E6, $11, $63, $EA, $38, $23, $94, $DD, $C2, $53, $34, $16, $C2, $C2
.db $56, $EE, $CB, $BB, $DE, $B6, $BC, $90, $A1, $7D, $FC, $EB, $76, $1D, $59, $CE
.db $09, $E4, $05, $6F, $88, $01, $7C, $4B, $3D, $0A, $72, $39, $24, $7C, $92, $7C
.db $5F, $72, $E3, $86, $B9, $9D, $4D, $72, $B4, $5B, $C1, $1A, $FC, $B8, $9E, $D3
.db $78, $55, $54, $ED, $B5, $A5, $FC, $08, $D3, $7C, $3D, $D8, $C4, $0F, $AD, $4D
.db $5E, $EF, $50, $1E, $F8, $E6, $61, $B1, $D9, $14, $85, $A2, $3C, $13, $51, $6C
.db $E7, $C7, $D5, $6F, $C4, $4E, $E1, $56, $CE, $BF, $2A, $36, $37, $C8, $C6, $DD
.db $34, $32, $9A, $D7, $12, $82, $63, $92, $8E, $FA, $0E, $67, $E0, $00, $60, $40
.db $37, $CE, $39, $3A, $CF, $F5, $FA, $D3, $37, $77, $C2, $AB, $1B, $2D, $C5, $5A
.db $9E, $67, $B0, $5C, $42, $37, $A3, $4F, $40, $27, $82, $D3, $BE, $9B, $BC, $99
.db $9D, $8E, $11, $D5, $15, $73, $0F, $BF, $7E, $1C, $2D, $D6, $7B, $C4, $00, $C7
.db $6B, $1B, $8C, $B7, $45, $90, $A1, $21, $BE, $B1, $6E, $B2, $B4, $6E, $36, $6A
.db $2F, $AB, $48, $57, $79, $6E, $94, $BC, $D2, $76, $A3, $C6, $C8, $C2, $49, $65
.db $EE, $F8, $0F, $53, $7D, $DE, $8D, $46, $1D, $0A, $73, $D5, $C6, $4D, $D0, $4C
.db $DB, $BB, $39, $29, $50, $46, $BA, $A9, $E8, $26, $95, $AC, $04, $E3, $5E, $BE
.db $F0, $D5, $FA, $A1, $9A, $51, $2D, $6A, $E2, $8C, $EF, $63, $22, $EE, $86, $9A
.db $B8, $C2, $89, $C0, $F6, $2E, $24, $43, $AA, $03, $1E, $A5, $A4, $D0, $F2, $9C
.db $BA, $61, $C0, $83, $4D, $6A, $E9, $9B, $50, $15, $E5, $8F, $D6, $5B, $64, $BA
.db $F9, $A2, $26, $28, $E1, $3A, $3A, $A7, $86, $95, $A9, $4B, $E9, $62, $55, $EF
.db $D3, $EF, $2F, $C7, $DA, $F7, $52, $F7, $69, $6F, $04, $3F, $59, $0A, $FA, $77
.db $15, $A9, $E4, $80, $01, $86, $B0, $87, $AD, $E6, $09, $9B, $93, $E5, $3E, $3B
.db $5A, $FD, $90, $E9, $97, $D7, $34, $9E, $D9, $B7, $F0, $2C, $51, $8B, $2B, $02
.db $3A, $AC, $D5, $96, $7D, $A6, $7D, $01, $D6, $3E, $CF, $D1, $28, $2D, $7D, $7C
.db $CF, $25, $9F, $1F, $9B, $B8, $F2, $AD, $72, $B4, $D6, $5A, $4C, $F5, $88, $5A
.db $71, $AC, $29, $E0, $E6, $A5, $19, $E0, $FD, $AC, $B0, $47, $9B, $FA, $93, $ED
.db $8D, $C4, $D3, $E8, $CC, $57, $3B, $28, $29, $66, $D5, $F8, $28, $2E, $13, $79
.db $91, $01, $5F, $78, $55, $60, $75, $ED, $44, $0E, $96, $F7, $8C, $5E, $D3, $E3
.db $D4, $6D, $05, $15, $BA, $6D, $F4, $88, $25, $61, $A1, $03, $BD, $F0, $64, $05
.db $15, $9E, $EB, $C3, $A2, $57, $90, $3C, $EC, $1A, $27, $97, $2A, $07, $3A, $A9
.db $9B, $6D, $3F, $1B, $F5, $21, $63, $1E, $FB, $66, $9C, $F5, $19, $F3, $DC, $26
.db $28, $D9, $33, $75, $F5, $FD, $55, $B1, $82, $34, $56, $03, $BB, $3C, $BA, $8A
.db $11, $77, $51, $28, $F8, $D9, $0A, $C2, $67, $51, $CC, $AB, $5F, $92, $AD, $CC
.db $51, $17, $E8, $4D, $8E, $DC, $30, $38, $62, $58, $9D, $37, $91, $F9, $20, $93
.db $C2, $90, $7A, $EA, $CE, $7B, $3E, $FB, $64, $CE, $21, $51, $32, $BE, $4F, $77
.db $7E, $E3, $B6, $A8, $46, $3D, $29, $C3, $69, $53, $DE, $48, $80, $E6, $13, $64
.db $10, $08, $AE, $A2, $24, $B2, $6D, $DD, $FD, $2D, $85, $69, $66, $21, $07, $09
.db $0A, $46, $9A, $B3, $DD, $C0, $45, $64, $CF, $DE, $6C, $58, $AE, $C8, $20, $1C
.db $DD, $F7, $BE, $5B, $40, $8D, $58, $1B, $7F, $01, $D2, $CC, $BB, $E3, $B4, $6B
.db $7E, $6A, $A2, $DD, $45, $FF, $59, $3A, $44, $0A, $35, $3E, $D5, $CD, $B4, $BC
.db $A8, $CE, $EA, $72, $BB, $84, $64, $FA, $AE, $12, $66, $8D, $47, $6F, $3C, $BF
.db $63, $E4, $9B, $D2, $9E, $5D, $2F, $54, $1B, $77, $C2, $AE, $70, $63, $4E, $F6
.db $8D, $0D, $0E, $74, $57, $13, $5B, $E7, $71, $16, $72, $F8, $5D, $7D, $53, $AF
.db $08, $CB, $40, $40, $CC, $E2, $B4, $4E, $6A, $46, $D2, $34, $84, $AF, $15, $01
.db $28, $04, $B0, $E1, $1D, $3A, $98, $95, $B4, $9F, $B8, $06, $48, $A0, $6E, $CE
.db $82, $3B, $3F, $6F, $82, $AB, $20, $35, $4B, $1D, $1A, $01, $F8, $27, $72, $27
.db $B1, $60, $15, $61, $DC, $3F, $93, $E7, $2B, $79, $3A, $BB, $BD, $25, $45, $34
.db $E1, $39, $88, $A0, $4B, $79, $CE, $51, $B7, $C9, $32, $2F, $C9, $BA, $1F, $A0
.db $7E, $C8, $1C, $E0, $F6, $D1, $C7, $BC, $C3, $11, $01, $CF, $C7, $AA, $E8, $A1
.db $49, $87, $90, $1A, $9A, $BD, $4F, $D4, $CB, $DE, $DA, $D0, $38, $DA, $0A, $D5
.db $2A, $C3, $39, $03, $67, $36, $91, $C6, $7C, $31, $F9, $8D, $4F, $2B, $B1, $E0
.db $B7, $59, $9E, $F7, $3A, $BB, $F5, $43, $FF, $19, $D5, $F2, $9C, $45, $D9, $27
.db $2C, $22, $97, $BF, $2A, $FC, $E6, $15, $71, $FC, $91, $0F, $25, $15, $94, $9B
.db $61, $93, $E5, $FA, $EB, $9C, $B6, $CE, $59, $64, $A8, $C2, $D1, $A8, $BA, $12
.db $5E, $07, $C1, $B6, $0C, $6A, $05, $E3, $65, $50, $D2, $10, $42, $A4, $03, $CB
.db $0E, $6E, $EC, $E0, $3B, $DB, $98, $16, $BE, $A0, $98, $4C, $64, $E9, $78, $32
.db $32, $95, $1F, $9F, $DF, $92, $D3, $E0, $2B, $34, $A0, $D3, $1E, $F2, $71, $89
.db $41, $74, $0A, $1B, $8C, $34, $A3, $4B, $20, $71, $BE, $C5, $D8, $32, $76, $C3
.db $8D, $9F, $35, $DF, $2E, $2F, $99, $9B, $47, $6F, $0B, $E6, $1D, $F1, $E3, $0F
.db $54, $DA, $4C, $E5, $91, $D8, $DA, $1E, $CF, $79, $62, $CE, $6F, $7E, $3E, $CD
.db $66, $B1, $18, $16, $05, $1D, $2C, $FD, $C5, $D2, $8F, $84, $99, $22, $FB, $F6
.db $57, $F3, $23, $F5, $23, $76, $32, $A6, $31, $35, $A8, $93, $02, $CD, $CC, $56
.db $62, $81, $F0, $AC, $B5, $EB, $75, $5A, $97, $36, $16, $6E, $CC, $73, $D2, $88
.db $92, $62, $96, $DE, $D0, $49, $B9, $81, $1B, $90, $50, $4C, $14, $56, $C6, $71
.db $BD, $C7, $C6, $E6, $0A, $14, $7A, $32, $06, $D0, $E1, $45, $9A, $7B, $F2, $C3
.db $FD, $53, $AA, $C9, $00, $0F, $A8, $62, $E2, $BF, $25, $BB, $F6, $D2, $BD, $35
.db $05, $69, $12, $71, $22, $02, $04, $B2, $7C, $CF, $CB, $B6, $2B, $9C, $76, $CD
.db $C0, $3E, $11, $53, $D3, $E3, $40, $16, $60, $BD, $AB, $38, $F0, $AD, $47, $25
.db $9C, $20, $38, $BA, $76, $CE, $46, $F7, $C5, $A1, $AF, $77, $60, $60, $75, $20
.db $4E, $FE, $CB, $85, $D8, $8D, $E8, $8A, $B0, $F9, $AA, $7A, $7E, $AA, $F9, $4C
.db $5C, $C2, $48, $19, $8C, $8A, $FB, $02, $E4, $6A, $C3, $01, $F9, $E1, $EB, $D6
.db $69, $F8, $D4, $90, $A0, $DE, $5C, $A6, $2D, $25, $09, $3F, $9F, $E6, $08, $C2
.db $32, $61, $4E, $B7, $5B, $E2, $77, $CE, $E3, $DF, $8F, $57, $E6, $72, $C3, $3A