Coverage report: /home/ellis/comp/ext/ironclad/src/ciphers/kalyna.lisp
Kind | Covered | All | % |
expression | 0 | 3103 | 0.0 |
branch | 0 | 4 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;;; kalyna.lisp -- implementation of the Kalyna block ciphers (DSTU 7624:2014)
5
(eval-when (:compile-toplevel :load-toplevel :execute)
8
:element-type '(unsigned-byte 64)
9
:initial-contents '((#xa832a829d77f9aa8 #x4352432297d41143
10
#x5f3e5fc2df80615f #x061e063014121806
11
#x6bda6b7f670cb16b #x75bc758f2356c975
12
#x6cc16c477519ad6c #x592059f2cb927959
13
#x71a871af3b4ad971 #xdf84dfb6f8275bdf
14
#x87a1874c35b22687 #x95fb95dc59cc6e95
15
#x174b17b872655c17 #xf017f0d31aeae7f0
16
#xd89fd88eea3247d8 #x092d0948363f2409
17
#x6dc46d4f731ea96d #xf318f3cb10e3ebf3
18
#x1d691de84e53741d #xcbc0cb16804b0bcb
19
#xc9cac9068c4503c9 #x4d644d52b3fe294d
20
#x2c9c2c7de8c4b02c #xaf29af11c56a86af
21
#x798079ef0b72f979 #xe047e0537a9aa7e0
22
#x97f197cc55c26697 #xfd2efdbb34c9d3fd
23
#x6fce6f5f7f10a16f #x4b7a4b62a7ec314b
24
#x454c451283c60945 #x39dd39d596afe439
25
#x3ec63eed84baf83e #xdd8edda6f42953dd
26
#xa315a371ed4eb6a3 #x4f6e4f42bff0214f
27
#xb45eb4c99f2beab4 #xb654b6d99325e2b6
28
#x9ac89aa47be1529a #x0e360e70242a380e
29
#x1f631ff8425d7c1f #xbf79bf91a51ac6bf
30
#x154115a87e6b5415 #xe142e15b7c9da3e1
31
#x49704972abe23949 #xd2bdd2ded6046fd2
32
#x93e593ec4dde7693 #xc6f9c67eae683fc6
33
#x92e092e44bd97292 #x72a772b73143d572
34
#x9edc9e8463fd429e #x61f8612f5b3a9961
35
#xd1b2d1c6dc0d63d1 #x63f2633f57349163
36
#xfa35fa8326dccffa #xee71ee235eb09fee
37
#xf403f4f302f6f7f4 #x197d19c8564f6419
38
#xd5a6d5e6c41173d5 #xad23ad01c9648ead
39
#x582558facd957d58 #xa40ea449ff5baaa4
40
#xbb6dbbb1bd06d6bb #xa11fa161e140bea1
41
#xdc8bdcaef22e57dc #xf21df2c316e4eff2
42
#x83b5836c2dae3683 #x37eb37a5b285dc37
43
#x4257422a91d31542 #xe453e4736286b7e4
44
#x7a8f7af7017bf57a #x32fa328dac9ec832
45
#x9cd69c946ff34a9c #xccdbcc2e925e17cc
46
#xab3dab31dd7696ab #x4a7f4a6aa1eb354a
47
#x8f898f0c058a068f #x6ecb6e577917a56e
48
#x04140420181c1004 #x27bb2725d2f59c27
49
#x2e962e6de4cab82e #xe75ce76b688fbbe7
50
#xe24de2437694afe2 #x5a2f5aeac19b755a
51
#x96f496c453c56296 #x164e16b074625816
52
#x23af2305cae98c23 #x2b872b45fad1ac2b
53
#xc2edc25eb6742fc2 #x65ec650f43268965
54
#x66e36617492f8566 #x0f330f78222d3c0f
55
#xbc76bc89af13cabc #xa937a921d1789ea9
56
#x474647028fc80147 #x415841329bda1941
57
#x34e434bdb88cd034 #x4875487aade53d48
58
#xfc2bfcb332ced7fc #xb751b7d19522e6b7
59
#x6adf6a77610bb56a #x88928834179f1a88
60
#xa50ba541f95caea5 #x530253a2f7a45153
61
#x86a4864433b52286 #xf93af99b2cd5c3f9
62
#x5b2a5be2c79c715b #xdb90db96e03b4bdb
63
#x38d838dd90a8e038 #x7b8a7bff077cf17b
64
#xc3e8c356b0732bc3 #x1e661ef0445a781e
65
#x22aa220dccee8822 #x33ff3385aa99cc33
66
#x24b4243dd8fc9024 #x2888285df0d8a028
67
#x36ee36adb482d836 #xc7fcc776a86f3bc7
68
#xb240b2f98b39f2b2 #x3bd73bc59aa1ec3b
69
#x8e8c8e04038d028e #x77b6779f2f58c177
70
#xba68bab9bb01d2ba #xf506f5fb04f1f3f5
71
#x144414a0786c5014 #x9fd99f8c65fa469f
72
#x0828084030382008 #x551c5592e3b64955
73
#x9bcd9bac7de6569b #x4c614c5ab5f92d4c
74
#xfe21fea33ec0dffe #x60fd60275d3d9d60
75
#x5c315cdad5896d5c #xda95da9ee63c4fda
76
#x187818c050486018 #x4643460a89cf0546
77
#xcddecd26945913cd #x7d947dcf136ee97d
78
#x21a52115c6e78421 #xb04ab0e98737fab0
79
#x3fc33fe582bdfc3f #x1b771bd85a416c1b
80
#x8997893c11981e89 #xff24ffab38c7dbff
81
#xeb60eb0b40ab8beb #x84ae84543fbb2a84
82
#x69d0696f6b02b969 #x3ad23acd9ca6e83a
83
#x9dd39d9c69f44e9d #xd7acd7f6c81f7bd7
84
#xd3b8d3d6d0036bd3 #x70ad70a73d4ddd70
85
#x67e6671f4f288167 #x405d403a9ddd1d40
86
#xb55bb5c1992ceeb5 #xde81debefe205fde
87
#x5d345dd2d38e695d #x30f0309da090c030
88
#x91ef91fc41d07e91 #xb14fb1e18130feb1
89
#x788578e70d75fd78 #x1155118866774411
90
#x0105010806070401 #xe556e57b6481b3e5
91
#x0000000000000000 #x68d568676d05bd68
92
#x98c298b477ef5a98 #xa01aa069e747baa0
93
#xc5f6c566a46133c5 #x020a02100c0e0802
94
#xa604a659f355a2a6 #x74b974872551cd74
95
#x2d992d75eec3b42d #x0b270b583a312c0b
96
#xa210a279eb49b2a2 #x76b37697295fc576
97
#xb345b3f18d3ef6b3 #xbe7cbe99a31dc2be
98
#xced1ce3e9e501fce #xbd73bd81a914cebd
99
#xae2cae19c36d82ae #xe96ae91b4ca583e9
100
#x8a988a241b91128a #x31f53195a697c431
101
#x1c6c1ce04854701c #xec7bec3352be97ec
102
#xf112f1db1cede3f1 #x99c799bc71e85e99
103
#x94fe94d45fcb6a94 #xaa38aa39db7192aa
104
#xf609f6e30ef8fff6 #x26be262dd4f29826
105
#x2f932f65e2cdbc2f #xef74ef2b58b79bef
106
#xe86fe8134aa287e8 #x8c868c140f830a8c
107
#x35e135b5be8bd435 #x030f03180a090c03
108
#xd4a3d4eec21677d4 #x7f9e7fdf1f60e17f
109
#xfb30fb8b20dbcbfb #x051105281e1b1405
110
#xc1e2c146bc7d23c1 #x5e3b5ecad987655e
111
#x90ea90f447d77a90 #x20a0201dc0e08020
112
#x3dc93df58eb3f43d #x82b082642ba93282
113
#xf70cf7eb08fffbf7 #xea65ea0346ac8fea
114
#x0a220a503c36280a #x0d390d682e23340d
115
#x7e9b7ed71967e57e #xf83ff8932ad2c7f8
116
#x500d50bafdad5d50 #x1a721ad05c46681a
117
#xc4f3c46ea26637c4 #x071b073812151c07
118
#x57165782efb84157 #xb862b8a9b70fdab8
119
#x3ccc3cfd88b4f03c #x62f7623751339562
120
#xe348e34b7093abe3 #xc8cfc80e8a4207c8
121
#xac26ac09cf638aac #x520752aaf1a35552
122
#x64e9640745218d64 #x1050108060704010
123
#xd0b7d0ceda0a67d0 #xd99ad986ec3543d9
124
#x135f13986a794c13 #x0c3c0c602824300c
125
#x125a12906c7e4812 #x298d2955f6dfa429
126
#x510851b2fbaa5951 #xb967b9a1b108deb9
127
#xcfd4cf3698571bcf #xd6a9d6fece187fd6
128
#x73a273bf3744d173 #x8d838d1c09840e8d
129
#x81bf817c21a03e81 #x5419549ae5b14d54
130
#xc0e7c04eba7a27c0 #xed7eed3b54b993ed
131
#x4e6b4e4ab9f7254e #x4449441a85c10d44
132
#xa701a751f552a6a7 #x2a822a4dfcd6a82a
133
#x85ab855c39bc2e85 #x25b12535defb9425
134
#xe659e6636e88bfe6 #xcac5ca1e864c0fca
135
#x7c917cc71569ed7c #x8b9d8b2c1d96168b
136
#x5613568ae9bf4556 #x80ba807427a73a80)
137
(#xd1ce3e9e501fcece #x6dbbb1bd06d6bbbb
138
#x60eb0b40ab8bebeb #xe092e44bd9729292
139
#x65ea0346ac8feaea #xc0cb16804b0bcbcb
140
#x5f13986a794c1313 #xe2c146bc7d23c1c1
141
#x6ae91b4ca583e9e9 #xd23acd9ca6e83a3a
142
#xa9d6fece187fd6d6 #x40b2f98b39f2b2b2
143
#xbdd2ded6046fd2d2 #xea90f447d77a9090
144
#x4b17b872655c1717 #x3ff8932ad2c7f8f8
145
#x57422a91d3154242 #x4115a87e6b541515
146
#x13568ae9bf455656 #x5eb4c99f2beab4b4
147
#xec650f4326896565 #x6c1ce04854701c1c
148
#x928834179f1a8888 #x52432297d4114343
149
#xf6c566a46133c5c5 #x315cdad5896d5c5c
150
#xee36adb482d83636 #x68bab9bb01d2baba
151
#x06f5fb04f1f3f5f5 #x165782efb8415757
152
#xe6671f4f28816767 #x838d1c09840e8d8d
153
#xf53195a697c43131 #x09f6e30ef8fff6f6
154
#xe9640745218d6464 #x2558facd957d5858
155
#xdc9e8463fd429e9e #x03f4f302f6f7f4f4
156
#xaa220dccee882222 #x38aa39db7192aaaa
157
#xbc758f2356c97575 #x330f78222d3c0f0f
158
#x0a02100c0e080202 #x4fb1e18130feb1b1
159
#x84dfb6f8275bdfdf #xc46d4f731ea96d6d
160
#xa273bf3744d17373 #x644d52b3fe294d4d
161
#x917cc71569ed7c7c #xbe262dd4f2982626
162
#x962e6de4cab82e2e #x0cf7eb08fffbf7f7
163
#x2808403038200808 #x345dd2d38e695d5d
164
#x49441a85c10d4444 #xc63eed84baf83e3e
165
#xd99f8c65fa469f9f #x4414a0786c501414
166
#xcfc80e8a4207c8c8 #x2cae19c36d82aeae
167
#x19549ae5b14d5454 #x5010806070401010
168
#x9fd88eea3247d8d8 #x76bc89af13cabcbc
169
#x721ad05c46681a1a #xda6b7f670cb16b6b
170
#xd0696f6b02b96969 #x18f3cb10e3ebf3f3
171
#x73bd81a914cebdbd #xff3385aa99cc3333
172
#x3dab31dd7696abab #x35fa8326dccffafa
173
#xb2d1c6dc0d63d1d1 #xcd9bac7de6569b9b
174
#xd568676d05bd6868 #x6b4e4ab9f7254e4e
175
#x4e16b07462581616 #xfb95dc59cc6e9595
176
#xef91fc41d07e9191 #x71ee235eb09feeee
177
#x614c5ab5f92d4c4c #xf2633f5734916363
178
#x8c8e04038d028e8e #x2a5be2c79c715b5b
179
#xdbcc2e925e17cccc #xcc3cfd88b4f03c3c
180
#x7d19c8564f641919 #x1fa161e140bea1a1
181
#xbf817c21a03e8181 #x704972abe2394949
182
#x8a7bff077cf17b7b #x9ad986ec3543d9d9
183
#xce6f5f7f10a16f6f #xeb37a5b285dc3737
184
#xfd60275d3d9d6060 #xc5ca1e864c0fcaca
185
#x5ce76b688fbbe7e7 #x872b45fad1ac2b2b
186
#x75487aade53d4848 #x2efdbb34c9d3fdfd
187
#xf496c453c5629696 #x4c451283c6094545
188
#x2bfcb332ced7fcfc #x5841329bda194141
189
#x5a12906c7e481212 #x390d682e23340d0d
190
#x8079ef0b72f97979 #x56e57b6481b3e5e5
191
#x97893c11981e8989 #x868c140f830a8c8c
192
#x48e34b7093abe3e3 #xa0201dc0e0802020
193
#xf0309da090c03030 #x8bdcaef22e57dcdc
194
#x51b7d19522e6b7b7 #xc16c477519ad6c6c
195
#x7f4a6aa1eb354a4a #x5bb5c1992ceeb5b5
196
#xc33fe582bdfc3f3f #xf197cc55c2669797
197
#xa3d4eec21677d4d4 #xf762375133956262
198
#x992d75eec3b42d2d #x1e06301412180606
199
#x0ea449ff5baaa4a4 #x0ba541f95caea5a5
200
#xb5836c2dae368383 #x3e5fc2df80615f5f
201
#x822a4dfcd6a82a2a #x95da9ee63c4fdada
202
#xcac9068c4503c9c9 #x0000000000000000
203
#x9b7ed71967e57e7e #x10a279eb49b2a2a2
204
#x1c5592e3b6495555 #x79bf91a51ac6bfbf
205
#x5511886677441111 #xa6d5e6c41173d5d5
206
#xd69c946ff34a9c9c #xd4cf3698571bcfcf
207
#x360e70242a380e0e #x220a503c36280a0a
208
#xc93df58eb3f43d3d #x0851b2fbaa595151
209
#x947dcf136ee97d7d #xe593ec4dde769393
210
#x771bd85a416c1b1b #x21fea33ec0dffefe
211
#xf3c46ea26637c4c4 #x4647028fc8014747
212
#x2d0948363f240909 #xa4864433b5228686
213
#x270b583a312c0b0b #x898f0c058a068f8f
214
#xd39d9c69f44e9d9d #xdf6a77610bb56a6a
215
#x1b073812151c0707 #x67b9a1b108deb9b9
216
#x4ab0e98737fab0b0 #xc298b477ef5a9898
217
#x7818c05048601818 #xfa328dac9ec83232
218
#xa871af3b4ad97171 #x7a4b62a7ec314b4b
219
#x74ef2b58b79befef #xd73bc59aa1ec3b3b
220
#xad70a73d4ddd7070 #x1aa069e747baa0a0
221
#x53e4736286b7e4e4 #x5d403a9ddd1d4040
222
#x24ffab38c7dbffff #xe8c356b0732bc3c3
223
#x37a921d1789ea9a9 #x59e6636e88bfe6e6
224
#x8578e70d75fd7878 #x3af99b2cd5c3f9f9
225
#x9d8b2c1d96168b8b #x43460a89cf054646
226
#xba807427a73a8080 #x661ef0445a781e1e
227
#xd838dd90a8e03838 #x42e15b7c9da3e1e1
228
#x62b8a9b70fdab8b8 #x32a829d77f9aa8a8
229
#x47e0537a9aa7e0e0 #x3c0c602824300c0c
230
#xaf2305cae98c2323 #xb37697295fc57676
231
#x691de84e53741d1d #xb12535defb942525
232
#xb4243dd8fc902424 #x1105281e1b140505
233
#x12f1db1cede3f1f1 #xcb6e577917a56e6e
234
#xfe94d45fcb6a9494 #x88285df0d8a02828
235
#xc89aa47be1529a9a #xae84543fbb2a8484
236
#x6fe8134aa287e8e8 #x15a371ed4eb6a3a3
237
#x6e4f42bff0214f4f #xb6779f2f58c17777
238
#xb8d3d6d0036bd3d3 #xab855c39bc2e8585
239
#x4de2437694afe2e2 #x0752aaf1a3555252
240
#x1df2c316e4eff2f2 #xb082642ba9328282
241
#x0d50bafdad5d5050 #x8f7af7017bf57a7a
242
#x932f65e2cdbc2f2f #xb974872551cd7474
243
#x0253a2f7a4515353 #x45b3f18d3ef6b3b3
244
#xf8612f5b3a996161 #x29af11c56a86afaf
245
#xdd39d596afe43939 #xe135b5be8bd43535
246
#x81debefe205fdede #xdecd26945913cdcd
247
#x631ff8425d7c1f1f #xc799bc71e85e9999
248
#x26ac09cf638aacac #x23ad01c9648eadad
249
#xa772b73143d57272 #x9c2c7de8c4b02c2c
250
#x8edda6f42953dddd #xb7d0ceda0a67d0d0
251
#xa1874c35b2268787 #x7cbe99a31dc2bebe
252
#x3b5ecad987655e5e #x04a659f355a2a6a6
253
#x7bec3352be97ecec #x140420181c100404
254
#xf9c67eae683fc6c6 #x0f03180a090c0303
255
#xe434bdb88cd03434 #x30fb8b20dbcbfbfb
256
#x90db96e03b4bdbdb #x2059f2cb92795959
257
#x54b6d99325e2b6b6 #xedc25eb6742fc2c2
258
#x0501080607040101 #x17f0d31aeae7f0f0
259
#x2f5aeac19b755a5a #x7eed3b54b993eded
260
#x01a751f552a6a7a7 #xe36617492f856666
261
#xa52115c6e7842121 #x9e7fdf1f60e17f7f
262
#x988a241b91128a8a #xbb2725d2f59c2727
263
#xfcc776a86f3bc7c7 #xe7c04eba7a27c0c0
264
#x8d2955f6dfa42929 #xacd7f6c81f7bd7d7)
265
(#x93ec4dde769393e5 #xd986ec3543d9d99a
266
#x9aa47be1529a9ac8 #xb5c1992ceeb5b55b
267
#x98b477ef5a9898c2 #x220dccee882222aa
268
#x451283c60945454c #xfcb332ced7fcfc2b
269
#xbab9bb01d2baba68 #x6a77610bb56a6adf
270
#xdfb6f8275bdfdf84 #x02100c0e0802020a
271
#x9f8c65fa469f9fd9 #xdcaef22e57dcdc8b
272
#x51b2fbaa59515108 #x59f2cb9279595920
273
#x4a6aa1eb354a4a7f #x17b872655c17174b
274
#x2b45fad1ac2b2b87 #xc25eb6742fc2c2ed
275
#x94d45fcb6a9494fe #xf4f302f6f7f4f403
276
#xbbb1bd06d6bbbb6d #xa371ed4eb6a3a315
277
#x62375133956262f7 #xe4736286b7e4e453
278
#x71af3b4ad97171a8 #xd4eec21677d4d4a3
279
#xcd26945913cdcdde #x70a73d4ddd7070ad
280
#x16b074625816164e #xe15b7c9da3e1e142
281
#x4972abe239494970 #x3cfd88b4f03c3ccc
282
#xc04eba7a27c0c0e7 #xd88eea3247d8d89f
283
#x5cdad5896d5c5c31 #x9bac7de6569b9bcd
284
#xad01c9648eadad23 #x855c39bc2e8585ab
285
#x53a2f7a451535302 #xa161e140bea1a11f
286
#x7af7017bf57a7a8f #xc80e8a4207c8c8cf
287
#x2d75eec3b42d2d99 #xe0537a9aa7e0e047
288
#xd1c6dc0d63d1d1b2 #x72b73143d57272a7
289
#xa659f355a2a6a604 #x2c7de8c4b02c2c9c
290
#xc46ea26637c4c4f3 #xe34b7093abe3e348
291
#x7697295fc57676b3 #x78e70d75fd787885
292
#xb7d19522e6b7b751 #xb4c99f2beab4b45e
293
#x0948363f2409092d #x3bc59aa1ec3b3bd7
294
#x0e70242a380e0e36 #x41329bda19414158
295
#x4c5ab5f92d4c4c61 #xdebefe205fdede81
296
#xb2f98b39f2b2b240 #x90f447d77a9090ea
297
#x2535defb942525b1 #xa541f95caea5a50b
298
#xd7f6c81f7bd7d7ac #x03180a090c03030f
299
#x1188667744111155 #x0000000000000000
300
#xc356b0732bc3c3e8 #x2e6de4cab82e2e96
301
#x92e44bd9729292e0 #xef2b58b79befef74
302
#x4e4ab9f7254e4e6b #x12906c7e4812125a
303
#x9d9c69f44e9d9dd3 #x7dcf136ee97d7d94
304
#xcb16804b0bcbcbc0 #x35b5be8bd43535e1
305
#x1080607040101050 #xd5e6c41173d5d5a6
306
#x4f42bff0214f4f6e #x9e8463fd429e9edc
307
#x4d52b3fe294d4d64 #xa921d1789ea9a937
308
#x5592e3b64955551c #xc67eae683fc6c6f9
309
#xd0ceda0a67d0d0b7 #x7bff077cf17b7b8a
310
#x18c0504860181878 #x97cc55c2669797f1
311
#xd3d6d0036bd3d3b8 #x36adb482d83636ee
312
#xe6636e88bfe6e659 #x487aade53d484875
313
#x568ae9bf45565613 #x817c21a03e8181bf
314
#x8f0c058a068f8f89 #x779f2f58c17777b6
315
#xcc2e925e17ccccdb #x9c946ff34a9c9cd6
316
#xb9a1b108deb9b967 #xe2437694afe2e24d
317
#xac09cf638aacac26 #xb8a9b70fdab8b862
318
#x2f65e2cdbc2f2f93 #x15a87e6b54151541
319
#xa449ff5baaa4a40e #x7cc71569ed7c7c91
320
#xda9ee63c4fdada95 #x38dd90a8e03838d8
321
#x1ef0445a781e1e66 #x0b583a312c0b0b27
322
#x05281e1b14050511 #xd6fece187fd6d6a9
323
#x14a0786c50141444 #x6e577917a56e6ecb
324
#x6c477519ad6c6cc1 #x7ed71967e57e7e9b
325
#x6617492f856666e3 #xfdbb34c9d3fdfd2e
326
#xb1e18130feb1b14f #xe57b6481b3e5e556
327
#x60275d3d9d6060fd #xaf11c56a86afaf29
328
#x5ecad987655e5e3b #x3385aa99cc3333ff
329
#x874c35b2268787a1 #xc9068c4503c9c9ca
330
#xf0d31aeae7f0f017 #x5dd2d38e695d5d34
331
#x6d4f731ea96d6dc4 #x3fe582bdfc3f3fc3
332
#x8834179f1a888892 #x8d1c09840e8d8d83
333
#xc776a86f3bc7c7fc #xf7eb08fffbf7f70c
334
#x1de84e53741d1d69 #xe91b4ca583e9e96a
335
#xec3352be97ecec7b #xed3b54b993eded7e
336
#x807427a73a8080ba #x2955f6dfa429298d
337
#x2725d2f59c2727bb #xcf3698571bcfcfd4
338
#x99bc71e85e9999c7 #xa829d77f9aa8a832
339
#x50bafdad5d50500d #x0f78222d3c0f0f33
340
#x37a5b285dc3737eb #x243dd8fc902424b4
341
#x285df0d8a0282888 #x309da090c03030f0
342
#x95dc59cc6e9595fb #xd2ded6046fd2d2bd
343
#x3eed84baf83e3ec6 #x5be2c79c715b5b2a
344
#x403a9ddd1d40405d #x836c2dae368383b5
345
#xb3f18d3ef6b3b345 #x696f6b02b96969d0
346
#x5782efb841575716 #x1ff8425d7c1f1f63
347
#x073812151c07071b #x1ce04854701c1c6c
348
#x8a241b91128a8a98 #xbc89af13cabcbc76
349
#x201dc0e0802020a0 #xeb0b40ab8bebeb60
350
#xce3e9e501fceced1 #x8e04038d028e8e8c
351
#xab31dd7696abab3d #xee235eb09feeee71
352
#x3195a697c43131f5 #xa279eb49b2a2a210
353
#x73bf3744d17373a2 #xf99b2cd5c3f9f93a
354
#xca1e864c0fcacac5 #x3acd9ca6e83a3ad2
355
#x1ad05c46681a1a72 #xfb8b20dbcbfbfb30
356
#x0d682e23340d0d39 #xc146bc7d23c1c1e2
357
#xfea33ec0dffefe21 #xfa8326dccffafa35
358
#xf2c316e4eff2f21d #x6f5f7f10a16f6fce
359
#xbd81a914cebdbd73 #x96c453c5629696f4
360
#xdda6f42953dddd8e #x432297d411434352
361
#x52aaf1a355525207 #xb6d99325e2b6b654
362
#x0840303820080828 #xf3cb10e3ebf3f318
363
#xae19c36d82aeae2c #xbe99a31dc2bebe7c
364
#x19c8564f6419197d #x893c11981e898997
365
#x328dac9ec83232fa #x262dd4f2982626be
366
#xb0e98737fab0b04a #xea0346ac8feaea65
367
#x4b62a7ec314b4b7a #x640745218d6464e9
368
#x84543fbb2a8484ae #x82642ba9328282b0
369
#x6b7f670cb16b6bda #xf5fb04f1f3f5f506
370
#x79ef0b72f9797980 #xbf91a51ac6bfbf79
371
#x0108060704010105 #x5fc2df80615f5f3e
372
#x758f2356c97575bc #x633f5734916363f2
373
#x1bd85a416c1b1b77 #x2305cae98c2323af
374
#x3df58eb3f43d3dc9 #x68676d05bd6868d5
375
#x2a4dfcd6a82a2a82 #x650f4326896565ec
376
#xe8134aa287e8e86f #x91fc41d07e9191ef
377
#xf6e30ef8fff6f609 #xffab38c7dbffff24
378
#x13986a794c13135f #x58facd957d585825
379
#xf1db1cede3f1f112 #x47028fc801474746
380
#x0a503c36280a0a22 #x7fdf1f60e17f7f9e
381
#xc566a46133c5c5f6 #xa751f552a6a7a701
382
#xe76b688fbbe7e75c #x612f5b3a996161f8
383
#x5aeac19b755a5a2f #x063014121806061e
384
#x460a89cf05464643 #x441a85c10d444449
385
#x422a91d315424257 #x0420181c10040414
386
#xa069e747baa0a01a #xdb96e03b4bdbdb90
387
#x39d596afe43939dd #x864433b5228686a4
388
#x549ae5b14d545419 #xaa39db7192aaaa38
389
#x8c140f830a8c8c86 #x34bdb88cd03434e4
390
#x2115c6e7842121a5 #x8b2c1d96168b8b9d
391
#xf8932ad2c7f8f83f #x0c602824300c0c3c
392
#x74872551cd7474b9 #x671f4f28816767e6)
393
(#x676d05bd6868d568 #x1c09840e8d8d838d
394
#x1e864c0fcacac5ca #x52b3fe294d4d644d
395
#xbf3744d17373a273 #x62a7ec314b4b7a4b
396
#x4ab9f7254e4e6b4e #x4dfcd6a82a2a822a
397
#xeec21677d4d4a3d4 #xaaf1a35552520752
398
#x2dd4f2982626be26 #xf18d3ef6b3b345b3
399
#x9ae5b14d54541954 #xf0445a781e1e661e
400
#xc8564f6419197d19 #xf8425d7c1f1f631f
401
#x0dccee882222aa22 #x180a090c03030f03
402
#x0a89cf0546464346 #xf58eb3f43d3dc93d
403
#x75eec3b42d2d992d #x6aa1eb354a4a7f4a
404
#xa2f7a45153530253 #x6c2dae368383b583
405
#x986a794c13135f13 #x241b91128a8a988a
406
#xd19522e6b7b751b7 #xe6c41173d5d5a6d5
407
#x35defb942525b125 #xef0b72f979798079
408
#xfb04f1f3f5f506f5 #x81a914cebdbd73bd
409
#xfacd957d58582558 #x65e2cdbc2f2f932f
410
#x682e23340d0d390d #x100c0e0802020a02
411
#x3b54b993eded7eed #xb2fbaa5951510851
412
#x8463fd429e9edc9e #x8866774411115511
413
#xc316e4eff2f21df2 #xed84baf83e3ec63e
414
#x92e3b64955551c55 #xcad987655e5e3b5e
415
#xc6dc0d63d1d1b2d1 #xb074625816164e16
416
#xfd88b4f03c3ccc3c #x17492f856666e366
417
#xa73d4ddd7070ad70 #xd2d38e695d5d345d
418
#xcb10e3ebf3f318f3 #x1283c60945454c45
419
#x3a9ddd1d40405d40 #x2e925e17ccccdbcc
420
#x134aa287e8e86fe8 #xd45fcb6a9494fe94
421
#x8ae9bf4556561356 #x4030382008082808
422
#x3e9e501fceced1ce #xd05c46681a1a721a
423
#xcd9ca6e83a3ad23a #xded6046fd2d2bdd2
424
#x5b7c9da3e1e142e1 #xb6f8275bdfdf84df
425
#xc1992ceeb5b55bb5 #xdd90a8e03838d838
426
#x577917a56e6ecb6e #x70242a380e0e360e
427
#x7b6481b3e5e556e5 #xf302f6f7f4f403f4
428
#x9b2cd5c3f9f93af9 #x4433b5228686a486
429
#x1b4ca583e9e96ae9 #x42bff0214f4f6e4f
430
#xfece187fd6d6a9d6 #x5c39bc2e8585ab85
431
#x05cae98c2323af23 #x3698571bcfcfd4cf
432
#x8dac9ec83232fa32 #xbc71e85e9999c799
433
#x95a697c43131f531 #xa0786c5014144414
434
#x19c36d82aeae2cae #x235eb09feeee71ee
435
#x0e8a4207c8c8cfc8 #x7aade53d48487548
436
#xd6d0036bd3d3b8d3 #x9da090c03030f030
437
#x61e140bea1a11fa1 #xe44bd9729292e092
438
#x329bda1941415841 #xe18130feb1b14fb1
439
#xc050486018187818 #x6ea26637c4c4f3c4
440
#x7de8c4b02c2c9c2c #xaf3b4ad97171a871
441
#xb73143d57272a772 #x1a85c10d44444944
442
#xa87e6b5415154115 #xbb34c9d3fdfd2efd
443
#xa5b285dc3737eb37 #x99a31dc2bebe7cbe
444
#xc2df80615f5f3e5f #x39db7192aaaa38aa
445
#xac7de6569b9bcd9b #x34179f1a88889288
446
#x8eea3247d8d89fd8 #x31dd7696abab3dab
447
#x3c11981e89899789 #x946ff34a9c9cd69c
448
#x8326dccffafa35fa #x275d3d9d6060fd60
449
#x0346ac8feaea65ea #x89af13cabcbc76bc
450
#x375133956262f762 #x602824300c0c3c0c
451
#x3dd8fc902424b424 #x59f355a2a6a604a6
452
#x29d77f9aa8a832a8 #x3352be97ecec7bec
453
#x1f4f28816767e667 #x1dc0e0802020a020
454
#x96e03b4bdbdb90db #xc71569ed7c7c917c
455
#x5df0d8a028288828 #xa6f42953dddd8edd
456
#x09cf638aacac26ac #xe2c79c715b5b2a5b
457
#xbdb88cd03434e434 #xd71967e57e7e9b7e
458
#x8060704010105010 #xdb1cede3f1f112f1
459
#xff077cf17b7b8a7b #x0c058a068f8f898f
460
#x3f5734916363f263 #x69e747baa0a01aa0
461
#x281e1b1405051105 #xa47be1529a9ac89a
462
#x2297d41143435243 #x9f2f58c17777b677
463
#x15c6e7842121a521 #x91a51ac6bfbf79bf
464
#x25d2f59c2727bb27 #x48363f2409092d09
465
#x56b0732bc3c3e8c3 #x8c65fa469f9fd99f
466
#xd99325e2b6b654b6 #xf6c81f7bd7d7acd7
467
#x55f6dfa429298d29 #x5eb6742fc2c2edc2
468
#x0b40ab8bebeb60eb #x4eba7a27c0c0e7c0
469
#x49ff5baaa4a40ea4 #x2c1d96168b8b9d8b
470
#x140f830a8c8c868c #xe84e53741d1d691d
471
#x8b20dbcbfbfb30fb #xab38c7dbffff24ff
472
#x46bc7d23c1c1e2c1 #xf98b39f2b2b240b2
473
#xcc55c2669797f197 #x6de4cab82e2e962e
474
#x932ad2c7f8f83ff8 #x0f4326896565ec65
475
#xe30ef8fff6f609f6 #x8f2356c97575bc75
476
#x3812151c07071b07 #x20181c1004041404
477
#x72abe23949497049 #x85aa99cc3333ff33
478
#x736286b7e4e453e4 #x86ec3543d9d99ad9
479
#xa1b108deb9b967b9 #xceda0a67d0d0b7d0
480
#x2a91d31542425742 #x76a86f3bc7c7fcc7
481
#x477519ad6c6cc16c #xf447d77a9090ea90
482
#x0000000000000000 #x04038d028e8e8c8e
483
#x5f7f10a16f6fce6f #xbafdad5d50500d50
484
#x0806070401010501 #x66a46133c5c5f6c5
485
#x9ee63c4fdada95da #x028fc80147474647
486
#xe582bdfc3f3fc33f #x26945913cdcddecd
487
#x6f6b02b96969d069 #x79eb49b2a2a210a2
488
#x437694afe2e24de2 #xf7017bf57a7a8f7a
489
#x51f552a6a7a701a7 #x7eae683fc6c6f9c6
490
#xec4dde769393e593 #x78222d3c0f0f330f
491
#x503c36280a0a220a #x3014121806061e06
492
#x636e88bfe6e659e6 #x45fad1ac2b2b872b
493
#xc453c5629696f496 #x71ed4eb6a3a315a3
494
#xe04854701c1c6c1c #x11c56a86afaf29af
495
#x77610bb56a6adf6a #x906c7e4812125a12
496
#x543fbb2a8484ae84 #xd596afe43939dd39
497
#x6b688fbbe7e75ce7 #xe98737fab0b04ab0
498
#x642ba9328282b082 #xeb08fffbf7f70cf7
499
#xa33ec0dffefe21fe #x9c69f44e9d9dd39d
500
#x4c35b2268787a187 #xdad5896d5c5c315c
501
#x7c21a03e8181bf81 #xb5be8bd43535e135
502
#xbefe205fdede81de #xc99f2beab4b45eb4
503
#x41f95caea5a50ba5 #xb332ced7fcfc2bfc
504
#x7427a73a8080ba80 #x2b58b79befef74ef
505
#x16804b0bcbcbc0cb #xb1bd06d6bbbb6dbb
506
#x7f670cb16b6bda6b #x97295fc57676b376
507
#xb9bb01d2baba68ba #xeac19b755a5a2f5a
508
#xcf136ee97d7d947d #xe70d75fd78788578
509
#x583a312c0b0b270b #xdc59cc6e9595fb95
510
#x4b7093abe3e348e3 #x01c9648eadad23ad
511
#x872551cd7474b974 #xb477ef5a9898c298
512
#xc59aa1ec3b3bd73b #xadb482d83636ee36
513
#x0745218d6464e964 #x4f731ea96d6dc46d
514
#xaef22e57dcdc8bdc #xd31aeae7f0f017f0
515
#xf2cb927959592059 #x21d1789ea9a937a9
516
#x5ab5f92d4c4c614c #xb872655c17174b17
517
#xdf1f60e17f7f9e7f #xfc41d07e9191ef91
518
#xa9b70fdab8b862b8 #x068c4503c9c9cac9
519
#x82efb84157571657 #xd85a416c1b1b771b
520
#x537a9aa7e0e047e0 #x2f5b3a996161f861)
521
(#xd77f9aa8a832a829 #x97d4114343524322
522
#xdf80615f5f3e5fc2 #x14121806061e0630
523
#x670cb16b6bda6b7f #x2356c97575bc758f
524
#x7519ad6c6cc16c47 #xcb927959592059f2
525
#x3b4ad97171a871af #xf8275bdfdf84dfb6
526
#x35b2268787a1874c #x59cc6e9595fb95dc
527
#x72655c17174b17b8 #x1aeae7f0f017f0d3
528
#xea3247d8d89fd88e #x363f2409092d0948
529
#x731ea96d6dc46d4f #x10e3ebf3f318f3cb
530
#x4e53741d1d691de8 #x804b0bcbcbc0cb16
531
#x8c4503c9c9cac906 #xb3fe294d4d644d52
532
#xe8c4b02c2c9c2c7d #xc56a86afaf29af11
533
#x0b72f979798079ef #x7a9aa7e0e047e053
534
#x55c2669797f197cc #x34c9d3fdfd2efdbb
535
#x7f10a16f6fce6f5f #xa7ec314b4b7a4b62
536
#x83c60945454c4512 #x96afe43939dd39d5
537
#x84baf83e3ec63eed #xf42953dddd8edda6
538
#xed4eb6a3a315a371 #xbff0214f4f6e4f42
539
#x9f2beab4b45eb4c9 #x9325e2b6b654b6d9
540
#x7be1529a9ac89aa4 #x242a380e0e360e70
541
#x425d7c1f1f631ff8 #xa51ac6bfbf79bf91
542
#x7e6b5415154115a8 #x7c9da3e1e142e15b
543
#xabe2394949704972 #xd6046fd2d2bdd2de
544
#x4dde769393e593ec #xae683fc6c6f9c67e
545
#x4bd9729292e092e4 #x3143d57272a772b7
546
#x63fd429e9edc9e84 #x5b3a996161f8612f
547
#xdc0d63d1d1b2d1c6 #x5734916363f2633f
548
#x26dccffafa35fa83 #x5eb09feeee71ee23
549
#x02f6f7f4f403f4f3 #x564f6419197d19c8
550
#xc41173d5d5a6d5e6 #xc9648eadad23ad01
551
#xcd957d58582558fa #xff5baaa4a40ea449
552
#xbd06d6bbbb6dbbb1 #xe140bea1a11fa161
553
#xf22e57dcdc8bdcae #x16e4eff2f21df2c3
554
#x2dae368383b5836c #xb285dc3737eb37a5
555
#x91d315424257422a #x6286b7e4e453e473
556
#x017bf57a7a8f7af7 #xac9ec83232fa328d
557
#x6ff34a9c9cd69c94 #x925e17ccccdbcc2e
558
#xdd7696abab3dab31 #xa1eb354a4a7f4a6a
559
#x058a068f8f898f0c #x7917a56e6ecb6e57
560
#x181c100404140420 #xd2f59c2727bb2725
561
#xe4cab82e2e962e6d #x688fbbe7e75ce76b
562
#x7694afe2e24de243 #xc19b755a5a2f5aea
563
#x53c5629696f496c4 #x74625816164e16b0
564
#xcae98c2323af2305 #xfad1ac2b2b872b45
565
#xb6742fc2c2edc25e #x4326896565ec650f
566
#x492f856666e36617 #x222d3c0f0f330f78
567
#xaf13cabcbc76bc89 #xd1789ea9a937a921
568
#x8fc8014747464702 #x9bda194141584132
569
#xb88cd03434e434bd #xade53d484875487a
570
#x32ced7fcfc2bfcb3 #x9522e6b7b751b7d1
571
#x610bb56a6adf6a77 #x179f1a8888928834
572
#xf95caea5a50ba541 #xf7a45153530253a2
573
#x33b5228686a48644 #x2cd5c3f9f93af99b
574
#xc79c715b5b2a5be2 #xe03b4bdbdb90db96
575
#x90a8e03838d838dd #x077cf17b7b8a7bff
576
#xb0732bc3c3e8c356 #x445a781e1e661ef0
577
#xccee882222aa220d #xaa99cc3333ff3385
578
#xd8fc902424b4243d #xf0d8a0282888285d
579
#xb482d83636ee36ad #xa86f3bc7c7fcc776
580
#x8b39f2b2b240b2f9 #x9aa1ec3b3bd73bc5
581
#x038d028e8e8c8e04 #x2f58c17777b6779f
582
#xbb01d2baba68bab9 #x04f1f3f5f506f5fb
583
#x786c5014144414a0 #x65fa469f9fd99f8c
584
#x3038200808280840 #xe3b64955551c5592
585
#x7de6569b9bcd9bac #xb5f92d4c4c614c5a
586
#x3ec0dffefe21fea3 #x5d3d9d6060fd6027
587
#xd5896d5c5c315cda #xe63c4fdada95da9e
588
#x50486018187818c0 #x89cf05464643460a
589
#x945913cdcddecd26 #x136ee97d7d947dcf
590
#xc6e7842121a52115 #x8737fab0b04ab0e9
591
#x82bdfc3f3fc33fe5 #x5a416c1b1b771bd8
592
#x11981e898997893c #x38c7dbffff24ffab
593
#x40ab8bebeb60eb0b #x3fbb2a8484ae8454
594
#x6b02b96969d0696f #x9ca6e83a3ad23acd
595
#x69f44e9d9dd39d9c #xc81f7bd7d7acd7f6
596
#xd0036bd3d3b8d3d6 #x3d4ddd7070ad70a7
597
#x4f28816767e6671f #x9ddd1d40405d403a
598
#x992ceeb5b55bb5c1 #xfe205fdede81debe
599
#xd38e695d5d345dd2 #xa090c03030f0309d
600
#x41d07e9191ef91fc #x8130feb1b14fb1e1
601
#x0d75fd78788578e7 #x6677441111551188
602
#x0607040101050108 #x6481b3e5e556e57b
603
#x0000000000000000 #x6d05bd6868d56867
604
#x77ef5a9898c298b4 #xe747baa0a01aa069
605
#xa46133c5c5f6c566 #x0c0e0802020a0210
606
#xf355a2a6a604a659 #x2551cd7474b97487
607
#xeec3b42d2d992d75 #x3a312c0b0b270b58
608
#xeb49b2a2a210a279 #x295fc57676b37697
609
#x8d3ef6b3b345b3f1 #xa31dc2bebe7cbe99
610
#x9e501fceced1ce3e #xa914cebdbd73bd81
611
#xc36d82aeae2cae19 #x4ca583e9e96ae91b
612
#x1b91128a8a988a24 #xa697c43131f53195
613
#x4854701c1c6c1ce0 #x52be97ecec7bec33
614
#x1cede3f1f112f1db #x71e85e9999c799bc
615
#x5fcb6a9494fe94d4 #xdb7192aaaa38aa39
616
#x0ef8fff6f609f6e3 #xd4f2982626be262d
617
#xe2cdbc2f2f932f65 #x58b79befef74ef2b
618
#x4aa287e8e86fe813 #x0f830a8c8c868c14
619
#xbe8bd43535e135b5 #x0a090c03030f0318
620
#xc21677d4d4a3d4ee #x1f60e17f7f9e7fdf
621
#x20dbcbfbfb30fb8b #x1e1b140505110528
622
#xbc7d23c1c1e2c146 #xd987655e5e3b5eca
623
#x47d77a9090ea90f4 #xc0e0802020a0201d
624
#x8eb3f43d3dc93df5 #x2ba9328282b08264
625
#x08fffbf7f70cf7eb #x46ac8feaea65ea03
626
#x3c36280a0a220a50 #x2e23340d0d390d68
627
#x1967e57e7e9b7ed7 #x2ad2c7f8f83ff893
628
#xfdad5d50500d50ba #x5c46681a1a721ad0
629
#xa26637c4c4f3c46e #x12151c07071b0738
630
#xefb8415757165782 #xb70fdab8b862b8a9
631
#x88b4f03c3ccc3cfd #x5133956262f76237
632
#x7093abe3e348e34b #x8a4207c8c8cfc80e
633
#xcf638aacac26ac09 #xf1a35552520752aa
634
#x45218d6464e96407 #x6070401010501080
635
#xda0a67d0d0b7d0ce #xec3543d9d99ad986
636
#x6a794c13135f1398 #x2824300c0c3c0c60
637
#x6c7e4812125a1290 #xf6dfa429298d2955
638
#xfbaa5951510851b2 #xb108deb9b967b9a1
639
#x98571bcfcfd4cf36 #xce187fd6d6a9d6fe
640
#x3744d17373a273bf #x09840e8d8d838d1c
641
#x21a03e8181bf817c #xe5b14d545419549a
642
#xba7a27c0c0e7c04e #x54b993eded7eed3b
643
#xb9f7254e4e6b4e4a #x85c10d444449441a
644
#xf552a6a7a701a751 #xfcd6a82a2a822a4d
645
#x39bc2e8585ab855c #xdefb942525b12535
646
#x6e88bfe6e659e663 #x864c0fcacac5ca1e
647
#x1569ed7c7c917cc7 #x1d96168b8b9d8b2c
648
#xe9bf45565613568a #x27a73a8080ba8074)
649
(#x501fceced1ce3e9e #x06d6bbbb6dbbb1bd
650
#xab8bebeb60eb0b40 #xd9729292e092e44b
651
#xac8feaea65ea0346 #x4b0bcbcbc0cb1680
652
#x794c13135f13986a #x7d23c1c1e2c146bc
653
#xa583e9e96ae91b4c #xa6e83a3ad23acd9c
654
#x187fd6d6a9d6fece #x39f2b2b240b2f98b
655
#x046fd2d2bdd2ded6 #xd77a9090ea90f447
656
#x655c17174b17b872 #xd2c7f8f83ff8932a
657
#xd315424257422a91 #x6b5415154115a87e
658
#xbf45565613568ae9 #x2beab4b45eb4c99f
659
#x26896565ec650f43 #x54701c1c6c1ce048
660
#x9f1a888892883417 #xd411434352432297
661
#x6133c5c5f6c566a4 #x896d5c5c315cdad5
662
#x82d83636ee36adb4 #x01d2baba68bab9bb
663
#xf1f3f5f506f5fb04 #xb8415757165782ef
664
#x28816767e6671f4f #x840e8d8d838d1c09
665
#x97c43131f53195a6 #xf8fff6f609f6e30e
666
#x218d6464e9640745 #x957d58582558facd
667
#xfd429e9edc9e8463 #xf6f7f4f403f4f302
668
#xee882222aa220dcc #x7192aaaa38aa39db
669
#x56c97575bc758f23 #x2d3c0f0f330f7822
670
#x0e0802020a02100c #x30feb1b14fb1e181
671
#x275bdfdf84dfb6f8 #x1ea96d6dc46d4f73
672
#x44d17373a273bf37 #xfe294d4d644d52b3
673
#x69ed7c7c917cc715 #xf2982626be262dd4
674
#xcab82e2e962e6de4 #xfffbf7f70cf7eb08
675
#x3820080828084030 #x8e695d5d345dd2d3
676
#xc10d444449441a85 #xbaf83e3ec63eed84
677
#xfa469f9fd99f8c65 #x6c5014144414a078
678
#x4207c8c8cfc80e8a #x6d82aeae2cae19c3
679
#xb14d545419549ae5 #x7040101050108060
680
#x3247d8d89fd88eea #x13cabcbc76bc89af
681
#x46681a1a721ad05c #x0cb16b6bda6b7f67
682
#x02b96969d0696f6b #xe3ebf3f318f3cb10
683
#x14cebdbd73bd81a9 #x99cc3333ff3385aa
684
#x7696abab3dab31dd #xdccffafa35fa8326
685
#x0d63d1d1b2d1c6dc #xe6569b9bcd9bac7d
686
#x05bd6868d568676d #xf7254e4e6b4e4ab9
687
#x625816164e16b074 #xcc6e9595fb95dc59
688
#xd07e9191ef91fc41 #xb09feeee71ee235e
689
#xf92d4c4c614c5ab5 #x34916363f2633f57
690
#x8d028e8e8c8e0403 #x9c715b5b2a5be2c7
691
#x5e17ccccdbcc2e92 #xb4f03c3ccc3cfd88
692
#x4f6419197d19c856 #x40bea1a11fa161e1
693
#xa03e8181bf817c21 #xe2394949704972ab
694
#x7cf17b7b8a7bff07 #x3543d9d99ad986ec
695
#x10a16f6fce6f5f7f #x85dc3737eb37a5b2
696
#x3d9d6060fd60275d #x4c0fcacac5ca1e86
697
#x8fbbe7e75ce76b68 #xd1ac2b2b872b45fa
698
#xe53d484875487aad #xc9d3fdfd2efdbb34
699
#xc5629696f496c453 #xc60945454c451283
700
#xced7fcfc2bfcb332 #xda1941415841329b
701
#x7e4812125a12906c #x23340d0d390d682e
702
#x72f979798079ef0b #x81b3e5e556e57b64
703
#x981e898997893c11 #x830a8c8c868c140f
704
#x93abe3e348e34b70 #xe0802020a0201dc0
705
#x90c03030f0309da0 #x2e57dcdc8bdcaef2
706
#x22e6b7b751b7d195 #x19ad6c6cc16c4775
707
#xeb354a4a7f4a6aa1 #x2ceeb5b55bb5c199
708
#xbdfc3f3fc33fe582 #xc2669797f197cc55
709
#x1677d4d4a3d4eec2 #x33956262f7623751
710
#xc3b42d2d992d75ee #x121806061e063014
711
#x5baaa4a40ea449ff #x5caea5a50ba541f9
712
#xae368383b5836c2d #x80615f5f3e5fc2df
713
#xd6a82a2a822a4dfc #x3c4fdada95da9ee6
714
#x4503c9c9cac9068c #x0000000000000000
715
#x67e57e7e9b7ed719 #x49b2a2a210a279eb
716
#xb64955551c5592e3 #x1ac6bfbf79bf91a5
717
#x7744111155118866 #x1173d5d5a6d5e6c4
718
#xf34a9c9cd69c946f #x571bcfcfd4cf3698
719
#x2a380e0e360e7024 #x36280a0a220a503c
720
#xb3f43d3dc93df58e #xaa5951510851b2fb
721
#x6ee97d7d947dcf13 #xde769393e593ec4d
722
#x416c1b1b771bd85a #xc0dffefe21fea33e
723
#x6637c4c4f3c46ea2 #xc80147474647028f
724
#x3f2409092d094836 #xb5228686a4864433
725
#x312c0b0b270b583a #x8a068f8f898f0c05
726
#xf44e9d9dd39d9c69 #x0bb56a6adf6a7761
727
#x151c07071b073812 #x08deb9b967b9a1b1
728
#x37fab0b04ab0e987 #xef5a9898c298b477
729
#x486018187818c050 #x9ec83232fa328dac
730
#x4ad97171a871af3b #xec314b4b7a4b62a7
731
#xb79befef74ef2b58 #xa1ec3b3bd73bc59a
732
#x4ddd7070ad70a73d #x47baa0a01aa069e7
733
#x86b7e4e453e47362 #xdd1d40405d403a9d
734
#xc7dbffff24ffab38 #x732bc3c3e8c356b0
735
#x789ea9a937a921d1 #x88bfe6e659e6636e
736
#x75fd78788578e70d #xd5c3f9f93af99b2c
737
#x96168b8b9d8b2c1d #xcf05464643460a89
738
#xa73a8080ba807427 #x5a781e1e661ef044
739
#xa8e03838d838dd90 #x9da3e1e142e15b7c
740
#x0fdab8b862b8a9b7 #x7f9aa8a832a829d7
741
#x9aa7e0e047e0537a #x24300c0c3c0c6028
742
#xe98c2323af2305ca #x5fc57676b3769729
743
#x53741d1d691de84e #xfb942525b12535de
744
#xfc902424b4243dd8 #x1b1405051105281e
745
#xede3f1f112f1db1c #x17a56e6ecb6e5779
746
#xcb6a9494fe94d45f #xd8a0282888285df0
747
#xe1529a9ac89aa47b #xbb2a8484ae84543f
748
#xa287e8e86fe8134a #x4eb6a3a315a371ed
749
#xf0214f4f6e4f42bf #x58c17777b6779f2f
750
#x036bd3d3b8d3d6d0 #xbc2e8585ab855c39
751
#x94afe2e24de24376 #xa35552520752aaf1
752
#xe4eff2f21df2c316 #xa9328282b082642b
753
#xad5d50500d50bafd #x7bf57a7a8f7af701
754
#xcdbc2f2f932f65e2 #x51cd7474b9748725
755
#xa45153530253a2f7 #x3ef6b3b345b3f18d
756
#x3a996161f8612f5b #x6a86afaf29af11c5
757
#xafe43939dd39d596 #x8bd43535e135b5be
758
#x205fdede81debefe #x5913cdcddecd2694
759
#x5d7c1f1f631ff842 #xe85e9999c799bc71
760
#x638aacac26ac09cf #x648eadad23ad01c9
761
#x43d57272a772b731 #xc4b02c2c9c2c7de8
762
#x2953dddd8edda6f4 #x0a67d0d0b7d0ceda
763
#xb2268787a1874c35 #x1dc2bebe7cbe99a3
764
#x87655e5e3b5ecad9 #x55a2a6a604a659f3
765
#xbe97ecec7bec3352 #x1c10040414042018
766
#x683fc6c6f9c67eae #x090c03030f03180a
767
#x8cd03434e434bdb8 #xdbcbfbfb30fb8b20
768
#x3b4bdbdb90db96e0 #x927959592059f2cb
769
#x25e2b6b654b6d993 #x742fc2c2edc25eb6
770
#x0704010105010806 #xeae7f0f017f0d31a
771
#x9b755a5a2f5aeac1 #xb993eded7eed3b54
772
#x52a6a7a701a751f5 #x2f856666e3661749
773
#xe7842121a52115c6 #x60e17f7f9e7fdf1f
774
#x91128a8a988a241b #xf59c2727bb2725d2
775
#x6f3bc7c7fcc776a8 #x7a27c0c0e7c04eba
776
#xdfa429298d2955f6 #x1f7bd7d7acd7f6c8)
777
(#x769393e593ec4dde #x43d9d99ad986ec35
778
#x529a9ac89aa47be1 #xeeb5b55bb5c1992c
779
#x5a9898c298b477ef #x882222aa220dccee
780
#x0945454c451283c6 #xd7fcfc2bfcb332ce
781
#xd2baba68bab9bb01 #xb56a6adf6a77610b
782
#x5bdfdf84dfb6f827 #x0802020a02100c0e
783
#x469f9fd99f8c65fa #x57dcdc8bdcaef22e
784
#x5951510851b2fbaa #x7959592059f2cb92
785
#x354a4a7f4a6aa1eb #x5c17174b17b87265
786
#xac2b2b872b45fad1 #x2fc2c2edc25eb674
787
#x6a9494fe94d45fcb #xf7f4f403f4f302f6
788
#xd6bbbb6dbbb1bd06 #xb6a3a315a371ed4e
789
#x956262f762375133 #xb7e4e453e4736286
790
#xd97171a871af3b4a #x77d4d4a3d4eec216
791
#x13cdcddecd269459 #xdd7070ad70a73d4d
792
#x5816164e16b07462 #xa3e1e142e15b7c9d
793
#x394949704972abe2 #xf03c3ccc3cfd88b4
794
#x27c0c0e7c04eba7a #x47d8d89fd88eea32
795
#x6d5c5c315cdad589 #x569b9bcd9bac7de6
796
#x8eadad23ad01c964 #x2e8585ab855c39bc
797
#x5153530253a2f7a4 #xbea1a11fa161e140
798
#xf57a7a8f7af7017b #x07c8c8cfc80e8a42
799
#xb42d2d992d75eec3 #xa7e0e047e0537a9a
800
#x63d1d1b2d1c6dc0d #xd57272a772b73143
801
#xa2a6a604a659f355 #xb02c2c9c2c7de8c4
802
#x37c4c4f3c46ea266 #xabe3e348e34b7093
803
#xc57676b37697295f #xfd78788578e70d75
804
#xe6b7b751b7d19522 #xeab4b45eb4c99f2b
805
#x2409092d0948363f #xec3b3bd73bc59aa1
806
#x380e0e360e70242a #x1941415841329bda
807
#x2d4c4c614c5ab5f9 #x5fdede81debefe20
808
#xf2b2b240b2f98b39 #x7a9090ea90f447d7
809
#x942525b12535defb #xaea5a50ba541f95c
810
#x7bd7d7acd7f6c81f #x0c03030f03180a09
811
#x4411115511886677 #x0000000000000000
812
#x2bc3c3e8c356b073 #xb82e2e962e6de4ca
813
#x729292e092e44bd9 #x9befef74ef2b58b7
814
#x254e4e6b4e4ab9f7 #x4812125a12906c7e
815
#x4e9d9dd39d9c69f4 #xe97d7d947dcf136e
816
#x0bcbcbc0cb16804b #xd43535e135b5be8b
817
#x4010105010806070 #x73d5d5a6d5e6c411
818
#x214f4f6e4f42bff0 #x429e9edc9e8463fd
819
#x294d4d644d52b3fe #x9ea9a937a921d178
820
#x4955551c5592e3b6 #x3fc6c6f9c67eae68
821
#x67d0d0b7d0ceda0a #xf17b7b8a7bff077c
822
#x6018187818c05048 #x669797f197cc55c2
823
#x6bd3d3b8d3d6d003 #xd83636ee36adb482
824
#xbfe6e659e6636e88 #x3d484875487aade5
825
#x45565613568ae9bf #x3e8181bf817c21a0
826
#x068f8f898f0c058a #xc17777b6779f2f58
827
#x17ccccdbcc2e925e #x4a9c9cd69c946ff3
828
#xdeb9b967b9a1b108 #xafe2e24de2437694
829
#x8aacac26ac09cf63 #xdab8b862b8a9b70f
830
#xbc2f2f932f65e2cd #x5415154115a87e6b
831
#xaaa4a40ea449ff5b #xed7c7c917cc71569
832
#x4fdada95da9ee63c #xe03838d838dd90a8
833
#x781e1e661ef0445a #x2c0b0b270b583a31
834
#x1405051105281e1b #x7fd6d6a9d6fece18
835
#x5014144414a0786c #xa56e6ecb6e577917
836
#xad6c6cc16c477519 #xe57e7e9b7ed71967
837
#x856666e36617492f #xd3fdfd2efdbb34c9
838
#xfeb1b14fb1e18130 #xb3e5e556e57b6481
839
#x9d6060fd60275d3d #x86afaf29af11c56a
840
#x655e5e3b5ecad987 #xcc3333ff3385aa99
841
#x268787a1874c35b2 #x03c9c9cac9068c45
842
#xe7f0f017f0d31aea #x695d5d345dd2d38e
843
#xa96d6dc46d4f731e #xfc3f3fc33fe582bd
844
#x1a8888928834179f #x0e8d8d838d1c0984
845
#x3bc7c7fcc776a86f #xfbf7f70cf7eb08ff
846
#x741d1d691de84e53 #x83e9e96ae91b4ca5
847
#x97ecec7bec3352be #x93eded7eed3b54b9
848
#x3a8080ba807427a7 #xa429298d2955f6df
849
#x9c2727bb2725d2f5 #x1bcfcfd4cf369857
850
#x5e9999c799bc71e8 #x9aa8a832a829d77f
851
#x5d50500d50bafdad #x3c0f0f330f78222d
852
#xdc3737eb37a5b285 #x902424b4243dd8fc
853
#xa0282888285df0d8 #xc03030f0309da090
854
#x6e9595fb95dc59cc #x6fd2d2bdd2ded604
855
#xf83e3ec63eed84ba #x715b5b2a5be2c79c
856
#x1d40405d403a9ddd #x368383b5836c2dae
857
#xf6b3b345b3f18d3e #xb96969d0696f6b02
858
#x415757165782efb8 #x7c1f1f631ff8425d
859
#x1c07071b07381215 #x701c1c6c1ce04854
860
#x128a8a988a241b91 #xcabcbc76bc89af13
861
#x802020a0201dc0e0 #x8bebeb60eb0b40ab
862
#x1fceced1ce3e9e50 #x028e8e8c8e04038d
863
#x96abab3dab31dd76 #x9feeee71ee235eb0
864
#xc43131f53195a697 #xb2a2a210a279eb49
865
#xd17373a273bf3744 #xc3f9f93af99b2cd5
866
#x0fcacac5ca1e864c #xe83a3ad23acd9ca6
867
#x681a1a721ad05c46 #xcbfbfb30fb8b20db
868
#x340d0d390d682e23 #x23c1c1e2c146bc7d
869
#xdffefe21fea33ec0 #xcffafa35fa8326dc
870
#xeff2f21df2c316e4 #xa16f6fce6f5f7f10
871
#xcebdbd73bd81a914 #x629696f496c453c5
872
#x53dddd8edda6f429 #x11434352432297d4
873
#x5552520752aaf1a3 #xe2b6b654b6d99325
874
#x2008082808403038 #xebf3f318f3cb10e3
875
#x82aeae2cae19c36d #xc2bebe7cbe99a31d
876
#x6419197d19c8564f #x1e898997893c1198
877
#xc83232fa328dac9e #x982626be262dd4f2
878
#xfab0b04ab0e98737 #x8feaea65ea0346ac
879
#x314b4b7a4b62a7ec #x8d6464e964074521
880
#x2a8484ae84543fbb #x328282b082642ba9
881
#xb16b6bda6b7f670c #xf3f5f506f5fb04f1
882
#xf979798079ef0b72 #xc6bfbf79bf91a51a
883
#x0401010501080607 #x615f5f3e5fc2df80
884
#xc97575bc758f2356 #x916363f2633f5734
885
#x6c1b1b771bd85a41 #x8c2323af2305cae9
886
#xf43d3dc93df58eb3 #xbd6868d568676d05
887
#xa82a2a822a4dfcd6 #x896565ec650f4326
888
#x87e8e86fe8134aa2 #x7e9191ef91fc41d0
889
#xfff6f609f6e30ef8 #xdbffff24ffab38c7
890
#x4c13135f13986a79 #x7d58582558facd95
891
#xe3f1f112f1db1ced #x0147474647028fc8
892
#x280a0a220a503c36 #xe17f7f9e7fdf1f60
893
#x33c5c5f6c566a461 #xa6a7a701a751f552
894
#xbbe7e75ce76b688f #x996161f8612f5b3a
895
#x755a5a2f5aeac19b #x1806061e06301412
896
#x05464643460a89cf #x0d444449441a85c1
897
#x15424257422a91d3 #x100404140420181c
898
#xbaa0a01aa069e747 #x4bdbdb90db96e03b
899
#xe43939dd39d596af #x228686a4864433b5
900
#x4d545419549ae5b1 #x92aaaa38aa39db71
901
#x0a8c8c868c140f83 #xd03434e434bdb88c
902
#x842121a52115c6e7 #x168b8b9d8b2c1d96
903
#xc7f8f83ff8932ad2 #x300c0c3c0c602824
904
#xcd7474b974872551 #x816767e6671f4f28)
905
(#x6868d568676d05bd #x8d8d838d1c09840e
906
#xcacac5ca1e864c0f #x4d4d644d52b3fe29
907
#x7373a273bf3744d1 #x4b4b7a4b62a7ec31
908
#x4e4e6b4e4ab9f725 #x2a2a822a4dfcd6a8
909
#xd4d4a3d4eec21677 #x52520752aaf1a355
910
#x2626be262dd4f298 #xb3b345b3f18d3ef6
911
#x545419549ae5b14d #x1e1e661ef0445a78
912
#x19197d19c8564f64 #x1f1f631ff8425d7c
913
#x2222aa220dccee88 #x03030f03180a090c
914
#x464643460a89cf05 #x3d3dc93df58eb3f4
915
#x2d2d992d75eec3b4 #x4a4a7f4a6aa1eb35
916
#x53530253a2f7a451 #x8383b5836c2dae36
917
#x13135f13986a794c #x8a8a988a241b9112
918
#xb7b751b7d19522e6 #xd5d5a6d5e6c41173
919
#x2525b12535defb94 #x79798079ef0b72f9
920
#xf5f506f5fb04f1f3 #xbdbd73bd81a914ce
921
#x58582558facd957d #x2f2f932f65e2cdbc
922
#x0d0d390d682e2334 #x02020a02100c0e08
923
#xeded7eed3b54b993 #x51510851b2fbaa59
924
#x9e9edc9e8463fd42 #x1111551188667744
925
#xf2f21df2c316e4ef #x3e3ec63eed84baf8
926
#x55551c5592e3b649 #x5e5e3b5ecad98765
927
#xd1d1b2d1c6dc0d63 #x16164e16b0746258
928
#x3c3ccc3cfd88b4f0 #x6666e36617492f85
929
#x7070ad70a73d4ddd #x5d5d345dd2d38e69
930
#xf3f318f3cb10e3eb #x45454c451283c609
931
#x40405d403a9ddd1d #xccccdbcc2e925e17
932
#xe8e86fe8134aa287 #x9494fe94d45fcb6a
933
#x565613568ae9bf45 #x0808280840303820
934
#xceced1ce3e9e501f #x1a1a721ad05c4668
935
#x3a3ad23acd9ca6e8 #xd2d2bdd2ded6046f
936
#xe1e142e15b7c9da3 #xdfdf84dfb6f8275b
937
#xb5b55bb5c1992cee #x3838d838dd90a8e0
938
#x6e6ecb6e577917a5 #x0e0e360e70242a38
939
#xe5e556e57b6481b3 #xf4f403f4f302f6f7
940
#xf9f93af99b2cd5c3 #x8686a4864433b522
941
#xe9e96ae91b4ca583 #x4f4f6e4f42bff021
942
#xd6d6a9d6fece187f #x8585ab855c39bc2e
943
#x2323af2305cae98c #xcfcfd4cf3698571b
944
#x3232fa328dac9ec8 #x9999c799bc71e85e
945
#x3131f53195a697c4 #x14144414a0786c50
946
#xaeae2cae19c36d82 #xeeee71ee235eb09f
947
#xc8c8cfc80e8a4207 #x484875487aade53d
948
#xd3d3b8d3d6d0036b #x3030f0309da090c0
949
#xa1a11fa161e140be #x9292e092e44bd972
950
#x41415841329bda19 #xb1b14fb1e18130fe
951
#x18187818c0504860 #xc4c4f3c46ea26637
952
#x2c2c9c2c7de8c4b0 #x7171a871af3b4ad9
953
#x7272a772b73143d5 #x444449441a85c10d
954
#x15154115a87e6b54 #xfdfd2efdbb34c9d3
955
#x3737eb37a5b285dc #xbebe7cbe99a31dc2
956
#x5f5f3e5fc2df8061 #xaaaa38aa39db7192
957
#x9b9bcd9bac7de656 #x8888928834179f1a
958
#xd8d89fd88eea3247 #xabab3dab31dd7696
959
#x898997893c11981e #x9c9cd69c946ff34a
960
#xfafa35fa8326dccf #x6060fd60275d3d9d
961
#xeaea65ea0346ac8f #xbcbc76bc89af13ca
962
#x6262f76237513395 #x0c0c3c0c60282430
963
#x2424b4243dd8fc90 #xa6a604a659f355a2
964
#xa8a832a829d77f9a #xecec7bec3352be97
965
#x6767e6671f4f2881 #x2020a0201dc0e080
966
#xdbdb90db96e03b4b #x7c7c917cc71569ed
967
#x282888285df0d8a0 #xdddd8edda6f42953
968
#xacac26ac09cf638a #x5b5b2a5be2c79c71
969
#x3434e434bdb88cd0 #x7e7e9b7ed71967e5
970
#x1010501080607040 #xf1f112f1db1cede3
971
#x7b7b8a7bff077cf1 #x8f8f898f0c058a06
972
#x6363f2633f573491 #xa0a01aa069e747ba
973
#x05051105281e1b14 #x9a9ac89aa47be152
974
#x434352432297d411 #x7777b6779f2f58c1
975
#x2121a52115c6e784 #xbfbf79bf91a51ac6
976
#x2727bb2725d2f59c #x09092d0948363f24
977
#xc3c3e8c356b0732b #x9f9fd99f8c65fa46
978
#xb6b654b6d99325e2 #xd7d7acd7f6c81f7b
979
#x29298d2955f6dfa4 #xc2c2edc25eb6742f
980
#xebeb60eb0b40ab8b #xc0c0e7c04eba7a27
981
#xa4a40ea449ff5baa #x8b8b9d8b2c1d9616
982
#x8c8c868c140f830a #x1d1d691de84e5374
983
#xfbfb30fb8b20dbcb #xffff24ffab38c7db
984
#xc1c1e2c146bc7d23 #xb2b240b2f98b39f2
985
#x9797f197cc55c266 #x2e2e962e6de4cab8
986
#xf8f83ff8932ad2c7 #x6565ec650f432689
987
#xf6f609f6e30ef8ff #x7575bc758f2356c9
988
#x07071b073812151c #x0404140420181c10
989
#x4949704972abe239 #x3333ff3385aa99cc
990
#xe4e453e4736286b7 #xd9d99ad986ec3543
991
#xb9b967b9a1b108de #xd0d0b7d0ceda0a67
992
#x424257422a91d315 #xc7c7fcc776a86f3b
993
#x6c6cc16c477519ad #x9090ea90f447d77a
994
#x0000000000000000 #x8e8e8c8e04038d02
995
#x6f6fce6f5f7f10a1 #x50500d50bafdad5d
996
#x0101050108060704 #xc5c5f6c566a46133
997
#xdada95da9ee63c4f #x47474647028fc801
998
#x3f3fc33fe582bdfc #xcdcddecd26945913
999
#x6969d0696f6b02b9 #xa2a210a279eb49b2
1000
#xe2e24de2437694af #x7a7a8f7af7017bf5
1001
#xa7a701a751f552a6 #xc6c6f9c67eae683f
1002
#x9393e593ec4dde76 #x0f0f330f78222d3c
1003
#x0a0a220a503c3628 #x06061e0630141218
1004
#xe6e659e6636e88bf #x2b2b872b45fad1ac
1005
#x9696f496c453c562 #xa3a315a371ed4eb6
1006
#x1c1c6c1ce0485470 #xafaf29af11c56a86
1007
#x6a6adf6a77610bb5 #x12125a12906c7e48
1008
#x8484ae84543fbb2a #x3939dd39d596afe4
1009
#xe7e75ce76b688fbb #xb0b04ab0e98737fa
1010
#x8282b082642ba932 #xf7f70cf7eb08fffb
1011
#xfefe21fea33ec0df #x9d9dd39d9c69f44e
1012
#x8787a1874c35b226 #x5c5c315cdad5896d
1013
#x8181bf817c21a03e #x3535e135b5be8bd4
1014
#xdede81debefe205f #xb4b45eb4c99f2bea
1015
#xa5a50ba541f95cae #xfcfc2bfcb332ced7
1016
#x8080ba807427a73a #xefef74ef2b58b79b
1017
#xcbcbc0cb16804b0b #xbbbb6dbbb1bd06d6
1018
#x6b6bda6b7f670cb1 #x7676b37697295fc5
1019
#xbaba68bab9bb01d2 #x5a5a2f5aeac19b75
1020
#x7d7d947dcf136ee9 #x78788578e70d75fd
1021
#x0b0b270b583a312c #x9595fb95dc59cc6e
1022
#xe3e348e34b7093ab #xadad23ad01c9648e
1023
#x7474b974872551cd #x9898c298b477ef5a
1024
#x3b3bd73bc59aa1ec #x3636ee36adb482d8
1025
#x6464e9640745218d #x6d6dc46d4f731ea9
1026
#xdcdc8bdcaef22e57 #xf0f017f0d31aeae7
1027
#x59592059f2cb9279 #xa9a937a921d1789e
1028
#x4c4c614c5ab5f92d #x17174b17b872655c
1029
#x7f7f9e7fdf1f60e1 #x9191ef91fc41d07e
1030
#xb8b862b8a9b70fda #xc9c9cac9068c4503
1031
#x5757165782efb841 #x1b1b771bd85a416c
1032
#xe0e047e0537a9aa7 #x6161f8612f5b3a99))))
1034
(defconst +kalyna-it+
1035
(make-array '(8 256)
1036
:element-type '(unsigned-byte 64)
1037
:initial-contents '((#x7826942b9f5f8a9a #x210f43c934970c53
1038
#x5f028fdd9d0551b8 #x14facd82b494c83b
1039
#x2b72ab886edd68c0 #xa6a87e5bff19d9b4
1040
#xa29ae571db6443ea #x039b2c911be8e5b6
1041
#xd9275dcb5fd32cc6 #x10c856a890e95265
1042
#x7d96e085b27ab85d #x31c71561a47e5e36
1043
#x74702455f3d83978 #xe8e048aafbad72f0
1044
#x9b39db4437e03460 #x75f2cbd1fa8091e1
1045
#x1ab5bee9caa336f6 #x8395a6b8eff34fb9
1046
#x64b872fd63316b1d #xe1068c7aba0ff3d5
1047
#xeecb1095cd60a581 #xbc1dc0b235baef42
1048
#xf04c355623be0929 #xb252b3d94b8d118f
1049
#x18ac7dfcd8137bd9 #xbbb477090a2f90aa
1050
#x8625d216c2d67d7e #x66a1b1e871812632
1051
#x6f4775383023a717 #x92df1f947642b545
1052
#xe962a72ef2f5da69 #x8bf18deca7096605
1053
#xc86de4e7c662d63a #xaafece25939e6a56
1054
#x5c99a34c86edb40e #x52d6d027f8da4ac3
1055
#x6b75ee12145e3d49 #x54fd8818ce179db2
1056
#xa3180af5d23ceb73 #xbe0403a7270aa26d
1057
#xfe03463d5d89f7e4 #xf1cedad22ae6a1b0
1058
#xd143769f1729057a #xc7a07808b10d806e
1059
#xfc1a85284f39bacb #xa4b1bd4eeda9949b
1060
#x0bff07c55312cc0a #xef49ff11c4380d18
1061
#xc392e32295701a30 #x7f8f2390a0caf572
1062
#x62932ac255fcbc6c #xc9ef0b63cf3a7ea3
1063
#xf9aaf186621c880c #x818c65adfd430296
1064
#x325c39f0bf96bb80 #x0c56b07e6c87b3e2
1065
#x4bf8425f29919983 #xb5fb046274186e67
1066
#x462c1da54c4e82f8 #x90c6dc8164f2f86a
1067
#xf8281e026b442095 #x6af701961d0695d0
1068
#x5766a489d5ff7804 #xf3d719c73856ec9f
1069
#xad57799eac0b15be #x1b37516dc3fb9e6f
1070
#xc009cfb38e98ff86 #x9576a82f49d7caad
1071
#xe6af3bc1859a8c3d #x208dac4d3dcfa4ca
1072
#x8ddad5d391c4b174 #x8e41f9428a2c54c2
1073
#x6cdc59a92bcb42a1 #xe53417509e72698b
1074
#xd0c1991b1e71ade3 #x8217493ce6abe720
1075
#xd4f302313a0c37bd #x5e806059945df921
1076
#x73d993eecc4d4690 #xf5fc41f80e9b3bee
1077
#x13537a398b01b7d3 #x53543fa3f182e25a
1078
#x2d59f3b75810bfb1 #x35f58e4b8003c468
1079
#x886aa17dbce183b3 #x4c51f5e41604e66b
1080
#x98a2f7d52c08d1d6 #xa101c9e0c08ca65c
1081
#x4007459a7a835589 #xcc5f7fcde21f4c64
1082
#xa965e2b488768fe0 #x12d195bd82591f4a
1083
#x2f4030a24aa0f29e #x56e44b0ddca7d09d
1084
#x914433056daa50f3 #x37ec4d5e92b38947
1085
#xe31f4f6fa8bfbefa #x50cf1332ea6a07ec
1086
#x6d5eb62d2293ea38 #x09e6c4d041a28125
1087
#x8fc316c68374fc5b #x421e868f683318a6
1088
#xe08463feb3575b4c #x3821d1b1e5dcdf13
1089
#xed503c04d6884037 #xd35ab58a05994855
1090
#x976f6b3a5b678782 #x6ec59abc397b0f8e
1091
#x5929d7e2abc886c9 #xa53352cae4f13c02
1092
#x89e84ef9b5b92b2a #x1761e113af7c2d8d
1093
#x28e9871975358d76 #xdc97296572f61e01
1094
#x67235e6c78d98eab #x3d91a51fc8f9edd4
1095
#x68eec2830fb6d8ff #xfbb3329370acc523
1096
#x062b583f36cdd771 #x15782206bdcc60a2
1097
#x16e30e97a6248514 #x79a47baf96072203
1098
#xf7e582ed1c2b76c1 #xde8eea706046532e
1099
#xaf4eba8bbebb5891 #x08642b5448fa29bc
1100
#x24bf376719b23e94 #x231680dc2627417c
1101
#x0dd45ffa65df1b7b #x1d1c0952f536491e
1102
#xff81a9b954d15f7d #x992018512550794f
1103
#x71c050fbdefd0bbf #xc18b203787c0571f
1104
#x253dd8e310ea960d #xeb7b643be0459746
1105
#x0219c31512b04d2f #xc43b5499aae565d8
1106
#xeaf98bbfe91d3fdf #x3a3812a4f76c923c
1107
#x4dd31a601f5c4ef2 #xa8e70d30812e2779
1108
#x800e8a29f41baa0f #x1c9ee6d6fc6ee187
1109
#x5d1b4cc88fb51c97 #x610806534e1459da
1110
#xf255f643310e4406 #xd2d85a0e0cc1e0cc
1111
#x0182ef840958a899 #x7e0dcc14a9925deb
1112
#x653a9d796a69c384 #x4e4836f104b4ab44
1113
#x4fcad9750dec03dd #xcddd9049eb47e4fd
1114
#x0e4f736b7e37fecd #x4185aa1e73dbfd10
1115
#x725b7c6ac515ee09 #x8a736268ae51ce9c
1116
#xc5b9bb1da3bdcd41 #x7bbdb8ba84b76f2c
1117
#xdabc715a443bc970 #xe29da0eba1e71663
1118
#x935df0107f1a1ddc #x608ae9d7474cf143
1119
#xd571edb533549f24 #xa0832664c9d40ec5
1120
#xfd986aac46611252 #x4435deb05efecfd7
1121
#x0000000000000000 #x2cdb1c3351481728
1122
#x94f447ab408f6234 #x45b7313457a6674e
1123
#xb82f5b9811c7751c #x8c583a57989c19ed
1124
#xdd15c6e17baeb698 #x696c2d0706ee7066
1125
#x3f88660ada49a0fb #xf47eae7c07c39377
1126
#x05b074ae2d2532c7 #xb3d05c5d42d5b916
1127
#x39a33e35ec84778a #x0fcd9cef776f5654
1128
#xacd5961aa553bd27 #x5b3014f7b978cbe6
1129
#x347761cf895b6cf1 #xc622978cb85528f7
1130
#xb7e2c77766a82348 #x77eb08c4e830dcce
1131
#xb9adb41c189fdd85 #x114ab92c99b1fafc
1132
#x26a6f4720b0273bb #x1e8725c3eedeaca8
1133
#x2af0440c6785c059 #x04329b2a247d9a5e
1134
#xd7682ea021e4d20b #x7c140f01bb2210c4
1135
#x96ed84be523f2f1b #xca7427f2d4d29b15
1136
#x47aef22145162a61 #xa72a91dff641712d
1137
#x5ab2fb73b020637f #xcbf6c876dd8a338c
1138
#x6311c5465ca414f5 #x07a9b7bb3f957fe8
1139
#xe72dd4458cc224a4 #x9d12837b012de311
1140
#x843c1103d0663051 #x0a7de8415a4a6493
1141
#xd6eac12428bc7a92 #x9c906cff08754b88
1142
#x7042bf7fd7a5a326 #xbd9f2f363ce247db
1143
#xb66028f36ff08bd1 #x192e9278d14bd340
1144
#x9f0b406e139dae3e #x1f05ca47e7860431
1145
#x85befe87d93e98c8 #x439c690b616bb03f
1146
#xba36988d03773833 #x87a73d92cb8ed5e7
1147
#xaecc550fb7e3f008 #xc2100ca69c28b2a9
1148
#x9abb34c03eb89cf9 #x49e1814a3b21d4ac
1149
#xecd2d380dfd0e8ae #x296b689d7c6d25ef
1150
#x3c134a9bc1a1454d #xcfc4535cf9f7a9d2
1151
#x557f679cc74f352b #xb479ebe67d40c6fe
1152
#xf6676d691573de58 #x9e89afea1ac506a7
1153
#xd8a5b24f568b845f #x48636ece32797c35
1154
#xdf0c05f4691efbb7 #xe4b6f8d4972ac112
1155
#xfa31dd1779f46dba #xbf86ec232e520af4
1156
#x3e0a898ed3110862 #x7a3f573e8defc7b5
1157
#x27241bf6025adb22 #x58ab3866a2902e50
1158
#x3bbafd20fe343aa5 #x3045fae5ad26f6af
1159
#x2ec2df2643f85a07 #x22946f582f7fe9e5
1160
#x366ea2da9beb21de #x4a7aaddb20c9311a
1161
#xb1c99f485065f439 #xb04b70cc593d5ca0
1162
#xab7c21a19ac6c2cf #x33ded674b6ce1319
1163
#xce46bcd8f0af014b #xdb3e9ede4d6361e9
1164
#x7669e740e1687457 #x514dfcb6e332af75)
1165
(#x1f4f6fa8bfbefae3 #xf0440c6785c0592a
1166
#x1dc0b235baef42bc #x22978cb85528f7c6
1167
#xcedad22ae6a1b0f1 #x180af5d23ceb73a3
1168
#x946f582f7fe9e522 #xe44b0ddca7d09d56
1169
#x906cff08754b889c #x9f2f363ce247dbbd
1170
#xa1b1e87181263266 #x21d1b1e5dcdf1338
1171
#x31dd1779f46dbafa #x4b70cc593d5ca0b0
1172
#xd719c73856ec9ff3 #x8725c3eedeaca81e
1173
#x71edb533549f24d5 #x12837b012de3119d
1174
#x3dd8e310ea960d25 #x29d7e2abc886c959
1175
#xb477090a2f90aabb #x45fae5ad26f6af30
1176
#x9ee6d6fc6ee1871c #xbefe87d93e98c885
1177
#xe30e97a624851416 #xd6d027f8da4ac352
1178
#xcc550fb7e3f008ae #x5ab58a05994855d3
1179
#x806059945df9215e #x82ef840958a89901
1180
#x4ab92c99b1fafc11 #x281e026b442095f8
1181
#x62a72ef2f5da69e9 #x8b203787c0571fc1
1182
#x4f736b7e37fecd0e #xab3866a2902e5058
1183
#x6ea2da9beb21de36 #xf447ab408f623494
1184
#x235e6c78d98eab67 #x11c5465ca414f563
1185
#xd31a601f5c4ef24d #xa2f7d52c08d1d698
1186
#x85aa1e73dbfd1041 #xdc59a92bcb42a16c
1187
#x59f3b75810bfb12d #xe2c77766a82348b7
1188
#xb9bb1da3bdcd41c5 #x96e085b27ab85d7d
1189
#x99a34c86edb40e5c #x66a489d5ff780457
1190
#x95a6b8eff34fb983 #x7f679cc74f352b55
1191
#x7de8415a4a64930a #x9b2c911be8e5b603
1192
#x4836f104b4ab444e #xdb1c33514817282c
1193
#x15c6e17baeb698dd #xed84be523f2f1b96
1194
#xe1814a3b21d4ac49 #x503c04d6884037ed
1195
#x4c355623be0929f0 #x3b5499aae565d8c4
1196
#x0a898ed31108623e #xb074ae2d2532c705
1197
#x028fdd9d0551b85f #xf58e4b8003c46835
1198
#x3352cae4f13c02a5 #x6c2d0706ee706669
1199
#x7c21a19ac6c2cfab #x19c31512b04d2f02
1200
#xa6f4720b0273bb26 #x05ca47e78604311f
1201
#x46bcd8f0af014bce #x1e868f683318a642
1202
#x5c39f0bf96bb8032 #x79ebe67d40c6feb4
1203
#xff07c55312cc0a0b #xaef22145162a6147
1204
#xc1991b1e71ade3d0 #xded674b6ce131933
1205
#x7aaddb20c9311a4a #x4dfcb6e332af7551
1206
#x6de4e7c662d63ac8 #xbf376719b23e9424
1207
#x07459a7a83558940 #xac7dfcd8137bd918
1208
#xdf1f947642b54592 #x17493ce6abe72082
1209
#xfc41f80e9b3beef5 #xe70d30812e2779a8
1210
#xd993eecc4d469073 #x65e2b488768fe0a9
1211
#xd2d380dfd0e8aeec #xe6c4d041a2812509
1212
#x068c7aba0ff3d5e1 #x51f5e41604e66b4c
1213
#x41f9428a2c54c28e #x537a398b01b7d313
1214
#x782206bdcc60a215 #x89afea1ac506a79e
1215
#x8ae9d7474cf14360 #xf6c876dd8a338ccb
1216
#x43769f1729057ad1 #x8dac4d3dcfa4ca20
1217
#xb7313457a6674e45 #x2018512550794f99
1218
#xbb34c03eb89cf99a #xbafd20fe343aa53b
1219
#x03463d5d89f7e4fe #x42bf7fd7a5a32670
1220
#x3f573e8defc7b57a #xadb41c189fdd85b9
1221
#xcad9750dec03dd4f #x0f43c934970c5321
1222
#x2f5b9811c7751cb8 #xd85a0e0cc1e0ccd2
1223
#xe048aafbad72f0e8 #xf18deca70966058b
1224
#xdd9049eb47e4fdcd #xa87e5bff19d9b4a6
1225
#x5df0107f1a1ddc93 #xd195bd82591f4a12
1226
#x0c05f4691efbb7df #x8463feb3575b4ce0
1227
#x55f643310e4406f2 #xb6f8d4972ac112e4
1228
#x4030a24aa0f29e2f #xfd8818ce179db254
1229
#x3c1103d066305184 #x682ea021e4d20bd7
1230
#x81a9b954d15f7dff #x275dcb5fd32cc6d9
1231
#xfacd82b494c83b14 #x4433056daa50f391
1232
#xe9871975358d7628 #xeac12428bc7a92d6
1233
#x1a85284f39bacbfc #xf8425f299199834b
1234
#x676d691573de58f6 #xd05c5d42d5b916b3
1235
#x8eea706046532ede #xfb046274186e67b5
1236
#x134a9bc1a1454d3c #x57799eac0b15bead
1237
#x241bf6025adb2227 #x72ab886edd68c02b
1238
#x9ae571db6443eaa2 #xc050fbdefd0bbf71
1239
#xa5b24f568b845fd8 #xe84ef9b5b92b2a89
1240
#x6f6b3a5b67878297 #xc6dc8164f2f86a90
1241
#x7eae7c07c39377f4 #x5eb62d2293ea386d
1242
#x8c65adfd43029681 #x2dd4458cc224a4e7
1243
#xfece25939e6a56aa #xcd9cef776f56540f
1244
#xa33e35ec84778a39 #xc2df2643f85a072e
1245
#xbc715a443bc970da #xa07808b10d806ec7
1246
#x36988d03773833ba #x1680dc2627417c23
1247
#xcb1095cd60a581ee #xbdb8ba84b76f2c7b
1248
#x702455f3d8397874 #x35deb05efecfd744
1249
#x8f2390a0caf5727f #xb1bd4eeda9949ba4
1250
#x39db4437e034609b #xe582ed1c2b76c1f7
1251
#xc4535cf9f7a9d2cf #xb2fb73b020637f5a
1252
#x583a57989c19ed8c #x25d216c2d67d7e86
1253
#x0806534e1459da61 #x6b689d7c6d25ef29
1254
#x0dcc14a9925deb7e #xc99f485065f439b1
1255
#xa9b7bb3f957fe807 #x2a91dff641712da7
1256
#x1c0952f536491e1d #x75ee12145e3d496b
1257
#xf98bbfe91d3fdfea #x92e32295701a30c3
1258
#x3e9ede4d6361e9db #x76a82f49d7caad95
1259
#x9da0eba1e71663e2 #x09cfb38e98ff86c0
1260
#x9c690b616bb03f43 #xdad5d391c4b1748d
1261
#x3812a4f76c923c3a #x5f7fcde21f4c64cc
1262
#x6aa17dbce183b388 #xeec2830fb6d8ff68
1263
#x736268ae51ce9c8a #xa47baf9607220379
1264
#x543fa3f182e25a53 #x4eba8bbebb5891af
1265
#x2e9278d14bd34019 #x69e740e168745776
1266
#x37516dc3fb9e6f1b #xb3329370acc523fb
1267
#x3a9d796a69c38465 #x7761cf895b6cf134
1268
#x0000000000000000 #x88660ada49a0fb3f
1269
#xb5bee9caa336f61a #x5b7c6ac515ee0972
1270
#x52b3d94b8d118fb2 #x329b2a247d9a5e04
1271
#x0e8a29f41baa0f80 #x642b5448fa29bc08
1272
#x7b643be0459746eb #xd45ffa65df1b7b0d
1273
#xeb08c4e830dcce77 #xf2cbd1fa8091e175
1274
#xf302313a0c37bdd4 #x91a51fc8f9edd43d
1275
#xef0b63cf3a7ea3c9 #xc316c68374fc5b8f
1276
#x01c9e0c08ca65ca1 #x3417509e72698be5
1277
#x4775383023a7176f #x636ece32797c3548
1278
#x1b4cc88fb51c975d #x140f01bb2210c47c
1279
#x7427f2d4d29b15ca #xa73d92cb8ed5e787
1280
#xc71561a47e5e3631 #xaaf186621c880cf9
1281
#x6028f36ff08bd1b6 #x97296572f61e01dc
1282
#xc59abc397b0f8e6e #xec4d5e92b3894737
1283
#xb872fd63316b1d64 #xaf3bc1859a8c3de6
1284
#x0403a7270aa26dbe #x26942b9f5f8a9a78
1285
#x86ec232e520af4bf #x49ff11c4380d18ef
1286
#xf701961d0695d06a #x56b07e6c87b3e20c
1287
#xd5961aa553bd27ac #x61e113af7c2d8d17
1288
#x100ca69c28b2a9c2 #xcf1332ea6a07ec50
1289
#xc856a890e9526510 #x2b583f36cdd77106
1290
#x932ac255fcbc6c62 #x0b406e139dae3e9f
1291
#x832664c9d40ec5a0 #x3014f7b978cbe65b
1292
#x2c1da54c4e82f846 #x986aac46611252fd)
1293
(#x679cc74f352b557f #x376719b23e9424bf
1294
#xcc14a9925deb7e0d #xb07e6c87b3e20c56
1295
#xa17dbce183b3886a #xee12145e3d496b75
1296
#x406e139dae3e9f0b #x942b9f5f8a9a7826
1297
#xb24f568b845fd8a5 #xdf2643f85a072ec2
1298
#x8c7aba0ff3d5e106 #x0b63cf3a7ea3c9ef
1299
#x12a4f76c923c3a38 #x8bbfe91d3fdfeaf9
1300
#x9278d14bd340192e #xca47e78604311f05
1301
#x07c55312cc0a0bff #xcfb38e98ff86c009
1302
#x991b1e71ade3d0c1 #x16c68374fc5b8fc3
1303
#x39f0bf96bb80325c #x3d92cb8ed5e787a7
1304
#xac4d3dcfa4ca208d #xfae5ad26f6af3045
1305
#x63feb3575b4ce084 #x28f36ff08bd1b660
1306
#xc6e17baeb698dd15 #x84be523f2f1b96ed
1307
#x3c04d6884037ed50 #xce25939e6a56aafe
1308
#xa34c86edb40e5c99 #xebe67d40c6feb479
1309
#x27f2d4d29b15ca74 #x6d691573de58f667
1310
#x329370acc523fbb3 #x2c911be8e5b6039b
1311
#x871975358d7628e9 #x550fb7e3f008aecc
1312
#x7e5bff19d9b4a6a8 #xf8d4972ac112e4b6
1313
#xd1b1e5dcdf133821 #xfcb6e332af75514d
1314
#x1e026b442095f828 #x1f947642b54592df
1315
#x5e6c78d98eab6723 #x17509e72698be534
1316
#x2ac255fcbc6c6293 #x95bd82591f4a12d1
1317
#x799eac0b15bead57 #xf0107f1a1ddc935d
1318
#xd674b6ce131933de #xf5e41604e66b4c51
1319
#x8818ce179db254fd #x03a7270aa26dbe04
1320
#x1c33514817282cdb #x2f363ce247dbbd9f
1321
#xa72ef2f5da69e962 #x93eecc4d469073d9
1322
#xb92c99b1fafc114a #x77090a2f90aabbb4
1323
#x0ca69c28b2a9c210 #xc9e0c08ca65ca101
1324
#x4b0ddca7d09d56e4 #x988d03773833ba36
1325
#x06534e1459da6108 #x3a57989c19ed8c58
1326
#x0952f536491e1d1c #x0af5d23ceb73a318
1327
#x0d30812e2779a8e7 #xd7e2abc886c95929
1328
#xa51fc8f9edd43d91 #x690b616bb03f439c
1329
#x516dc3fb9e6f1b37 #xa489d5ff78045766
1330
#x52cae4f13c02a533 #x4cc88fb51c975d1b
1331
#x459a7a8355894007 #x9d796a69c384653a
1332
#x313457a6674e45b7 #x4a9bc1a1454d3c13
1333
#x6268ae51ce9c8a73 #xfe87d93e98c885be
1334
#xff11c4380d18ef49 #x8deca70966058bf1
1335
#xdeb05efecfd74435 #xd027f8da4ac352d6
1336
#xf186621c880cf9aa #x43c934970c53210f
1337
#xbee9caa336f61ab5 #x56a890e9526510c8
1338
#xe8415a4a64930a7d #xe32295701a30c392
1339
#x3e35ec84778a39a3 #x4f6fa8bfbefae31f
1340
#x5dcb5fd32cc6d927 #x9f485065f439b1c9
1341
#x1095cd60a581eecb #x978cb85528f7c622
1342
#x7baf9607220379a4 #xd216c2d67d7e8625
1343
#xe4e7c662d63ac86d #xb62d2293ea386d5e
1344
#x8a29f41baa0f800e #x5ffa65df1b7b0dd4
1345
#x61cf895b6cf13477 #xa6b8eff34fb98395
1346
#x814a3b21d4ac49e1 #xaddb20c9311a4a7a
1347
#x74ae2d2532c705b0 #x30a24aa0f29e2f40
1348
#x91dff641712da72a #x9049eb47e4fdcddd
1349
#x493ce6abe7208217 #x36f104b4ab444e48
1350
#xf22145162a6147ae #x5c5d42d5b916b3d0
1351
#xf7d52c08d1d698a2 #x7a398b01b7d31353
1352
#x6cff08754b889c90 #x14f7b978cbe65b30
1353
#xc4d041a2812509e6 #xe085b27ab85d7d96
1354
#xc0b235baef42bc1d #x868f683318a6421e
1355
#xea706046532ede8e #x4ef9b5b92b2a89e8
1356
#xdc8164f2f86a90c6 #x2455f3d839787470
1357
#x5499aae565d8c43b #x59a92bcb42a16cdc
1358
#xa9b954d15f7dff81 #xae7c07c39377f47e
1359
#x01961d0695d06af7 #xdb4437e034609b39
1360
#x3bc1859a8c3de6af #xaa1e73dbfd104185
1361
#x7dfcd8137bd918ac #x80dc2627417c2316
1362
#xd9750dec03dd4fca #xc5465ca414f56311
1363
#x203787c0571fc18b #xd5d391c4b1748dda
1364
#xc2830fb6d8ff68ee #xbcd8f0af014bce46
1365
#xa0eba1e71663e29d #xfb73b020637f5ab2
1366
#x7c6ac515ee09725b #x0000000000000000
1367
#xc876dd8a338ccbf6 #x9cef776f56540fcd
1368
#x47ab408f623494f4 #xcbd1fa8091e175f2
1369
#x9abc397b0f8e6ec5 #xb58a05994855d35a
1370
#x4d5e92b3894737ec #x961aa553bd27acd5
1371
#xc31512b04d2f0219 #xe6d6fc6ee1871c9e
1372
#xe2b488768fe0a965 #xb3d94b8d118fb252
1373
#x440c6785c0592af0 #x25c3eedeaca81e87
1374
#x583f36cdd771062b #x2d0706ee7066696c
1375
#x425f299199834bf8 #xfd20fe343aa53bba
1376
#xf643310e4406f255 #xdad22ae6a1b0f1ce
1377
#x1da54c4e82f8462c #x355623be0929f04c
1378
#x769f1729057ad143 #xbd4eeda9949ba4b1
1379
#xd8e310ea960d253d #x736b7e37fecd0e4f
1380
#x65adfd430296818c #xb8ba84b76f2c7bbd
1381
#x9b2a247d9a5e0432 #xc77766a82348b7e2
1382
#x08c4e830dcce77eb #x0e97a624851416e3
1383
#x898ed31108623e0a #xe571db6443eaa29a
1384
#x573e8defc7b57a3f #x21a19ac6c2cfab7c
1385
#x70cc593d5ca0b04b #x2664c9d40ec5a083
1386
#x296572f61e01dc97 #x85284f39bacbfc1a
1387
#x715a443bc970dabc #xef840958a8990182
1388
#xcd82b494c83b14fa #x48aafbad72f0e8e0
1389
#xe9d7474cf143608a #x2390a0caf5727f8f
1390
#xb7bb3f957fe807a9 #x82ed1c2b76c1f7e5
1391
#xbb1da3bdcd41c5b9 #x72fd63316b1d64b8
1392
#x7808b10d806ec7a0 #x837b012de3119d12
1393
#x689d7c6d25ef296b #x02313a0c37bdd4f3
1394
#x1103d0663051843c #xab886edd68c02b72
1395
#x6b3a5b678782976f #xe113af7c2d8d1761
1396
#x6aac46611252fd98 #x50fbdefd0bbf71c0
1397
#x2ea021e4d20bd768 #x5a0e0cc1e0ccd2d8
1398
#x34c03eb89cf99abb #xb41c189fdd85b9ad
1399
#x9ede4d6361e9db3e #xafea1ac506a79e89
1400
#x463d5d89f7e4fe03 #x18512550794f9920
1401
#x41f80e9b3beef5fc #xa82f49d7caad9576
1402
#x0f01bb2210c47c14 #xec232e520af4bf86
1403
#x1bf6025adb222724 #xa2da9beb21de366e
1404
#xedb533549f24d571 #x643be0459746eb7b
1405
#xbf7fd7a5a3267042 #x046274186e67b5fb
1406
#x8e4b8003c46835f5 #x1332ea6a07ec50cf
1407
#xd380dfd0e8aeecd2 #x6f582f7fe9e52294
1408
#xf9428a2c54c28e41 #x3fa3f182e25a5354
1409
#x535cf9f7a9d2cfc4 #x660ada49a0fb3f88
1410
#x33056daa50f39144 #x8fdd9d0551b85f02
1411
#x19c73856ec9ff3d7 #xb1e87181263266a1
1412
#x1561a47e5e3631c7 #xd4458cc224a4e72d
1413
#xe740e16874577669 #xc12428bc7a92d6ea
1414
#x3866a2902e5058ab #x1a601f5c4ef24dd3
1415
#x6059945df9215e80 #x05f4691efbb7df0c
1416
#x5b9811c7751cb82f #x2b5448fa29bc0864
1417
#xba8bbebb5891af4e #xf4720b0273bb26a6
1418
#xdd1779f46dbafa31 #x6ece32797c354863
1419
#x7fcde21f4c64cc5f #x2206bdcc60a21578
1420
#x75383023a7176f47 #xf3b75810bfb12d59)
1421
(#x03d0663051843c11 #xbfe91d3fdfeaf98b
1422
#xf80e9b3beef5fc41 #xe5ad26f6af3045fa
1423
#x5a443bc970dabc71 #x7b012de3119d1283
1424
#x82b494c83b14facd #x750dec03dd4fcad9
1425
#x090a2f90aabbb477 #xb6e332af75514dfc
1426
#xadfd430296818c65 #xfd63316b1d64b872
1427
#x3d5d89f7e4fe0346 #xd7474cf143608ae9
1428
#x7e6c87b3e20c56b0 #x601f5c4ef24dd31a
1429
#x40e16874577669e7 #x4437e034609b39db
1430
#xe7c662d63ac86de4 #xaf9607220379a47b
1431
#xea1ac506a79e89af #xd8f0af014bce46bc
1432
#x7fd7a5a3267042bf #x9f1729057ad14376
1433
#x1c189fdd85b9adb4 #x87d93e98c885befe
1434
#x57989c19ed8c583a #xa4f76c923c3a3812
1435
#x2a247d9a5e04329b #xc03eb89cf99abb34
1436
#xf6025adb2227241b #xa890e9526510c856
1437
#x06bdcc60a2157822 #xc73856ec9ff3d719
1438
#xcae4f13c02a53352 #xd6fc6ee1871c9ee6
1439
#xf0bf96bb80325c39 #x13af7c2d8d1761e1
1440
#x3be0459746eb7b64 #x99aae565d8c43b54
1441
#x95cd60a581eecb10 #x68ae51ce9c8a7362
1442
#xcde21f4c64cc5f7f #xdc2627417c231680
1443
#x428a2c54c28e41f9 #x76dd8a338ccbf6c8
1444
#xb8eff34fb98395a6 #xa69c28b2a9c2100c
1445
#x08b10d806ec7a078 #xc55312cc0a0bff07
1446
#x886edd68c02b72ab #xdd9d0551b85f028f
1447
#x1e73dbfd104185aa #x911be8e5b6039b2c
1448
#x30812e2779a8e70d #x3a5b678782976f6b
1449
#x20fe343aa53bbafd #xb954d15f7dff81a9
1450
#x9a7a835589400745 #x1fc8f9edd43d91a5
1451
#x0e0cc1e0ccd2d85a #xbb3f957fe807a9b7
1452
#xc3eedeaca81e8725 #x66a2902e5058ab38
1453
#xff08754b889c906c #xfeb3575b4ce08463
1454
#x107f1a1ddc935df0 #x25939e6a56aafece
1455
#xa92bcb42a16cdc59 #x32ea6a07ec50cf13
1456
#x947642b54592df1f #x1779f46dbafa31dd
1457
#x5623be0929f04c35 #xf2d4d29b15ca7427
1458
#x59945df9215e8060 #x9370acc523fbb332
1459
#xb05efecfd74435de #x71db6443eaa29ae5
1460
#xe2abc886c95929d7 #x458cc224a4e72dd4
1461
#xce32797c3548636e #x1aa553bd27acd596
1462
#x4a3b21d4ac49e181 #x284f39bacbfc1a85
1463
#xd94b8d118fb252b3 #xb235baef42bc1dc0
1464
#x2643f85a072ec2df #x8bbebb5891af4eba
1465
#x89d5ff78045766a4 #xeecc4d469073d993
1466
#x0b616bb03f439c69 #xe41604e66b4c51f5
1467
#x16c2d67d7e8625d2 #x6c78d98eab67235e
1468
#x9d7c6d25ef296b68 #x64c9d40ec5a08326
1469
#x2ef2f5da69e962a7 #xfa65df1b7b0dd45f
1470
#x12145e3d496b75ee #xfcd8137bd918ac7d
1471
#x52f536491e1d1c09 #xe67d40c6feb479eb
1472
#x2145162a6147aef2 #x29f41baa0f800e8a
1473
#x0000000000000000 #x840958a8990182ef
1474
#xc88fb51c975d1b4c #xc68374fc5b8fc316
1475
#x5d42d5b916b3d05c #x7dbce183b3886aa1
1476
#x512550794f992018 #xe17baeb698dd15c6
1477
#x43310e4406f255f6 #x6dc3fb9e6f1b3751
1478
#x86621c880cf9aaf1 #xbc397b0f8e6ec59a
1479
#x415a4a64930a7de8 #x04d6884037ed503c
1480
#xe9caa336f61ab5be #x0ada49a0fb3f8866
1481
#x55f3d83978747024 #x3ce6abe720821749
1482
#xf5d23ceb73a3180a #xa24aa0f29e2f4030
1483
#x582f7fe9e522946f #x7aba0ff3d5e1068c
1484
#x313a0c37bdd4f302 #x3787c0571fc18b20
1485
#x5cf9f7a9d2cfc453 #xbe523f2f1b96ed84
1486
#x85b27ab85d7d96e0 #x0706ee7066696c2d
1487
#x961d0695d06af701 #x1b1e71ade3d0c199
1488
#xc255fcbc6c62932a #x398b01b7d313537a
1489
#xcc593d5ca0b04b70 #x5f299199834bf842
1490
#x80dfd0e8aeecd2d3 #x9eac0b15bead5779
1491
#xef776f56540fcd9c #x2f49d7caad9576a8
1492
#x2c99b1fafc114ab9 #x8d03773833ba3698
1493
#x720b0273bb26a6f4 #x18ce179db254fd88
1494
#x8f683318a6421e86 #x4f568b845fd8a5b2
1495
#x8ed31108623e0a89 #xd22ae6a1b0f1ceda
1496
#x74b6ce131933ded6 #x97a624851416e30e
1497
#x6e139dae3e9f0b40 #xa7270aa26dbe0403
1498
#x5448fa29bc08642b #xe310ea960d253dd8
1499
#x706046532ede8eea #x485065f439b1c99f
1500
#x6b7e37fecd0e4f73 #xfbdefd0bbf71c050
1501
#xd391c4b1748ddad5 #xa021e4d20bd7682e
1502
#xab408f623494f447 #x5bff19d9b4a6a87e
1503
#xb1e5dcdf133821d1 #x026b442095f8281e
1504
#xdff641712da72a91 #x11c4380d18ef49ff
1505
#xae2d2532c705b074 #xc1859a8c3de6af3b
1506
#x4b8003c46835f58e #x92cb8ed5e787a73d
1507
#xcb5fd32cc6d9275d #x8cb85528f7c62297
1508
#x9bc1a1454d3c134a #x056daa50f3914433
1509
#xf4691efbb7df0c05 #xd1fa8091e175f2cb
1510
#x7c07c39377f47eae #x14a9925deb7e0dcc
1511
#xcf895b6cf1347761 #x0fb7e3f008aecc55
1512
#x8a05994855d35ab5 #xf104b4ab444e4836
1513
#x691573de58f6676d #x4eeda9949ba4b1bd
1514
#x2428bc7a92d6eac1 #xb75810bfb12d59f3
1515
#x63cf3a7ea3c9ef0b #x6274186e67b5fb04
1516
#x1512b04d2f0219c3 #xe87181263266a1b1
1517
#x1975358d7628e987 #x534e1459da610806
1518
#x47e78604311f05ca #xd4972ac112e4b6f8
1519
#x33514817282cdb1c #x90a0caf5727f8f23
1520
#x3e8defc7b57a3f57 #x3f36cdd771062b58
1521
#x796a69c384653a9d #x465ca414f56311c5
1522
#x5e92b3894737ec4d #x9811c7751cb82f5b
1523
#xd041a2812509e6c4 #x49eb47e4fdcddd90
1524
#x78d14bd340192e92 #xf9b5b92b2a89e84e
1525
#x61a47e5e3631c715 #x509e72698be53417
1526
#xb533549f24d571ed #x27f8da4ac352d6d0
1527
#x6572f61e01dc9729 #xde4d6361e9db3e9e
1528
#x3457a6674e45b731 #xa54c4e82f8462c1d
1529
#xbd82591f4a12d195 #x830fb6d8ff68eec2
1530
#x383023a7176f4775 #x7766a82348b7e2c7
1531
#x0c6785c0592af044 #xba84b76f2c7bbdb8
1532
#xe0c08ca65ca101c9 #xeba1e71663e29da0
1533
#xd52c08d1d698a2f7 #xc4e830dcce77eb08
1534
#xda9beb21de366ea2 #xa3f182e25a53543f
1535
#xac46611252fd986a #xb38e98ff86c009cf
1536
#xf36ff08bd1b66028 #xdb20c9311a4a7aad
1537
#xa19ac6c2cfab7c21 #x6ac515ee09725b7c
1538
#x4c86edb40e5c99a3 #x363ce247dbbd9f2f
1539
#x8164f2f86a90c6dc #x35ec84778a39a33e
1540
#xb488768fe0a965e2 #x73b020637f5ab2fb
1541
#x232e520af4bf86ec #x6fa8bfbefae31f4f
1542
#xeca70966058bf18d #x1da3bdcd41c5b9bb
1543
#x9cc74f352b557f67 #x4d3dcfa4ca208dac
1544
#x2b9f5f8a9a782694 #xaafbad72f0e8e048
1545
#xc934970c53210f43 #xed1c2b76c1f7e582
1546
#x01bb2210c47c140f #x0ddca7d09d56e44b
1547
#x2d2293ea386d5eb6 #xf7b978cbe65b3014
1548
#x6719b23e9424bf37 #x2295701a30c392e3)
1549
(#x9f5f8a9a7826942b #x34970c53210f43c9
1550
#x9d0551b85f028fdd #xb494c83b14facd82
1551
#x6edd68c02b72ab88 #xff19d9b4a6a87e5b
1552
#xdb6443eaa29ae571 #x1be8e5b6039b2c91
1553
#x5fd32cc6d9275dcb #x90e9526510c856a8
1554
#xb27ab85d7d96e085 #xa47e5e3631c71561
1555
#xf3d8397874702455 #xfbad72f0e8e048aa
1556
#x37e034609b39db44 #xfa8091e175f2cbd1
1557
#xcaa336f61ab5bee9 #xeff34fb98395a6b8
1558
#x63316b1d64b872fd #xba0ff3d5e1068c7a
1559
#xcd60a581eecb1095 #x35baef42bc1dc0b2
1560
#x23be0929f04c3556 #x4b8d118fb252b3d9
1561
#xd8137bd918ac7dfc #x0a2f90aabbb47709
1562
#xc2d67d7e8625d216 #x7181263266a1b1e8
1563
#x3023a7176f477538 #x7642b54592df1f94
1564
#xf2f5da69e962a72e #xa70966058bf18dec
1565
#xc662d63ac86de4e7 #x939e6a56aafece25
1566
#x86edb40e5c99a34c #xf8da4ac352d6d027
1567
#x145e3d496b75ee12 #xce179db254fd8818
1568
#xd23ceb73a3180af5 #x270aa26dbe0403a7
1569
#x5d89f7e4fe03463d #x2ae6a1b0f1cedad2
1570
#x1729057ad143769f #xb10d806ec7a07808
1571
#x4f39bacbfc1a8528 #xeda9949ba4b1bd4e
1572
#x5312cc0a0bff07c5 #xc4380d18ef49ff11
1573
#x95701a30c392e322 #xa0caf5727f8f2390
1574
#x55fcbc6c62932ac2 #xcf3a7ea3c9ef0b63
1575
#x621c880cf9aaf186 #xfd430296818c65ad
1576
#xbf96bb80325c39f0 #x6c87b3e20c56b07e
1577
#x299199834bf8425f #x74186e67b5fb0462
1578
#x4c4e82f8462c1da5 #x64f2f86a90c6dc81
1579
#x6b442095f8281e02 #x1d0695d06af70196
1580
#xd5ff78045766a489 #x3856ec9ff3d719c7
1581
#xac0b15bead57799e #xc3fb9e6f1b37516d
1582
#x8e98ff86c009cfb3 #x49d7caad9576a82f
1583
#x859a8c3de6af3bc1 #x3dcfa4ca208dac4d
1584
#x91c4b1748ddad5d3 #x8a2c54c28e41f942
1585
#x2bcb42a16cdc59a9 #x9e72698be5341750
1586
#x1e71ade3d0c1991b #xe6abe7208217493c
1587
#x3a0c37bdd4f30231 #x945df9215e806059
1588
#xcc4d469073d993ee #x0e9b3beef5fc41f8
1589
#x8b01b7d313537a39 #xf182e25a53543fa3
1590
#x5810bfb12d59f3b7 #x8003c46835f58e4b
1591
#xbce183b3886aa17d #x1604e66b4c51f5e4
1592
#x2c08d1d698a2f7d5 #xc08ca65ca101c9e0
1593
#x7a8355894007459a #xe21f4c64cc5f7fcd
1594
#x88768fe0a965e2b4 #x82591f4a12d195bd
1595
#x4aa0f29e2f4030a2 #xdca7d09d56e44b0d
1596
#x6daa50f391443305 #x92b3894737ec4d5e
1597
#xa8bfbefae31f4f6f #xea6a07ec50cf1332
1598
#x2293ea386d5eb62d #x41a2812509e6c4d0
1599
#x8374fc5b8fc316c6 #x683318a6421e868f
1600
#xb3575b4ce08463fe #xe5dcdf133821d1b1
1601
#xd6884037ed503c04 #x05994855d35ab58a
1602
#x5b678782976f6b3a #x397b0f8e6ec59abc
1603
#xabc886c95929d7e2 #xe4f13c02a53352ca
1604
#xb5b92b2a89e84ef9 #xaf7c2d8d1761e113
1605
#x75358d7628e98719 #x72f61e01dc972965
1606
#x78d98eab67235e6c #xc8f9edd43d91a51f
1607
#x0fb6d8ff68eec283 #x70acc523fbb33293
1608
#x36cdd771062b583f #xbdcc60a215782206
1609
#xa624851416e30e97 #x9607220379a47baf
1610
#x1c2b76c1f7e582ed #x6046532ede8eea70
1611
#xbebb5891af4eba8b #x48fa29bc08642b54
1612
#x19b23e9424bf3767 #x2627417c231680dc
1613
#x65df1b7b0dd45ffa #xf536491e1d1c0952
1614
#x54d15f7dff81a9b9 #x2550794f99201851
1615
#xdefd0bbf71c050fb #x87c0571fc18b2037
1616
#x10ea960d253dd8e3 #xe0459746eb7b643b
1617
#x12b04d2f0219c315 #xaae565d8c43b5499
1618
#xe91d3fdfeaf98bbf #xf76c923c3a3812a4
1619
#x1f5c4ef24dd31a60 #x812e2779a8e70d30
1620
#xf41baa0f800e8a29 #xfc6ee1871c9ee6d6
1621
#x8fb51c975d1b4cc8 #x4e1459da61080653
1622
#x310e4406f255f643 #x0cc1e0ccd2d85a0e
1623
#x0958a8990182ef84 #xa9925deb7e0dcc14
1624
#x6a69c384653a9d79 #x04b4ab444e4836f1
1625
#x0dec03dd4fcad975 #xeb47e4fdcddd9049
1626
#x7e37fecd0e4f736b #x73dbfd104185aa1e
1627
#xc515ee09725b7c6a #xae51ce9c8a736268
1628
#xa3bdcd41c5b9bb1d #x84b76f2c7bbdb8ba
1629
#x443bc970dabc715a #xa1e71663e29da0eb
1630
#x7f1a1ddc935df010 #x474cf143608ae9d7
1631
#x33549f24d571edb5 #xc9d40ec5a0832664
1632
#x46611252fd986aac #x5efecfd74435deb0
1633
#x0000000000000000 #x514817282cdb1c33
1634
#x408f623494f447ab #x57a6674e45b73134
1635
#x11c7751cb82f5b98 #x989c19ed8c583a57
1636
#x7baeb698dd15c6e1 #x06ee7066696c2d07
1637
#xda49a0fb3f88660a #x07c39377f47eae7c
1638
#x2d2532c705b074ae #x42d5b916b3d05c5d
1639
#xec84778a39a33e35 #x776f56540fcd9cef
1640
#xa553bd27acd5961a #xb978cbe65b3014f7
1641
#x895b6cf1347761cf #xb85528f7c622978c
1642
#x66a82348b7e2c777 #xe830dcce77eb08c4
1643
#x189fdd85b9adb41c #x99b1fafc114ab92c
1644
#x0b0273bb26a6f472 #xeedeaca81e8725c3
1645
#x6785c0592af0440c #x247d9a5e04329b2a
1646
#x21e4d20bd7682ea0 #xbb2210c47c140f01
1647
#x523f2f1b96ed84be #xd4d29b15ca7427f2
1648
#x45162a6147aef221 #xf641712da72a91df
1649
#xb020637f5ab2fb73 #xdd8a338ccbf6c876
1650
#x5ca414f56311c546 #x3f957fe807a9b7bb
1651
#x8cc224a4e72dd445 #x012de3119d12837b
1652
#xd0663051843c1103 #x5a4a64930a7de841
1653
#x28bc7a92d6eac124 #x08754b889c906cff
1654
#xd7a5a3267042bf7f #x3ce247dbbd9f2f36
1655
#x6ff08bd1b66028f3 #xd14bd340192e9278
1656
#x139dae3e9f0b406e #xe78604311f05ca47
1657
#xd93e98c885befe87 #x616bb03f439c690b
1658
#x03773833ba36988d #xcb8ed5e787a73d92
1659
#xb7e3f008aecc550f #x9c28b2a9c2100ca6
1660
#x3eb89cf99abb34c0 #x3b21d4ac49e1814a
1661
#xdfd0e8aeecd2d380 #x7c6d25ef296b689d
1662
#xc1a1454d3c134a9b #xf9f7a9d2cfc4535c
1663
#xc74f352b557f679c #x7d40c6feb479ebe6
1664
#x1573de58f6676d69 #x1ac506a79e89afea
1665
#x568b845fd8a5b24f #x32797c3548636ece
1666
#x691efbb7df0c05f4 #x972ac112e4b6f8d4
1667
#x79f46dbafa31dd17 #x2e520af4bf86ec23
1668
#xd31108623e0a898e #x8defc7b57a3f573e
1669
#x025adb2227241bf6 #xa2902e5058ab3866
1670
#xfe343aa53bbafd20 #xad26f6af3045fae5
1671
#x43f85a072ec2df26 #x2f7fe9e522946f58
1672
#x9beb21de366ea2da #x20c9311a4a7aaddb
1673
#x5065f439b1c99f48 #x593d5ca0b04b70cc
1674
#x9ac6c2cfab7c21a1 #xb6ce131933ded674
1675
#xf0af014bce46bcd8 #x4d6361e9db3e9ede
1676
#xe16874577669e740 #xe332af75514dfcb6)
1677
(#xbfbefae31f4f6fa8 #x85c0592af0440c67
1678
#xbaef42bc1dc0b235 #x5528f7c622978cb8
1679
#xe6a1b0f1cedad22a #x3ceb73a3180af5d2
1680
#x7fe9e522946f582f #xa7d09d56e44b0ddc
1681
#x754b889c906cff08 #xe247dbbd9f2f363c
1682
#x81263266a1b1e871 #xdcdf133821d1b1e5
1683
#xf46dbafa31dd1779 #x3d5ca0b04b70cc59
1684
#x56ec9ff3d719c738 #xdeaca81e8725c3ee
1685
#x549f24d571edb533 #x2de3119d12837b01
1686
#xea960d253dd8e310 #xc886c95929d7e2ab
1687
#x2f90aabbb477090a #x26f6af3045fae5ad
1688
#x6ee1871c9ee6d6fc #x3e98c885befe87d9
1689
#x24851416e30e97a6 #xda4ac352d6d027f8
1690
#xe3f008aecc550fb7 #x994855d35ab58a05
1691
#x5df9215e80605994 #x58a8990182ef8409
1692
#xb1fafc114ab92c99 #x442095f8281e026b
1693
#xf5da69e962a72ef2 #xc0571fc18b203787
1694
#x37fecd0e4f736b7e #x902e5058ab3866a2
1695
#xeb21de366ea2da9b #x8f623494f447ab40
1696
#xd98eab67235e6c78 #xa414f56311c5465c
1697
#x5c4ef24dd31a601f #x08d1d698a2f7d52c
1698
#xdbfd104185aa1e73 #xcb42a16cdc59a92b
1699
#x10bfb12d59f3b758 #xa82348b7e2c77766
1700
#xbdcd41c5b9bb1da3 #x7ab85d7d96e085b2
1701
#xedb40e5c99a34c86 #xff78045766a489d5
1702
#xf34fb98395a6b8ef #x4f352b557f679cc7
1703
#x4a64930a7de8415a #xe8e5b6039b2c911b
1704
#xb4ab444e4836f104 #x4817282cdb1c3351
1705
#xaeb698dd15c6e17b #x3f2f1b96ed84be52
1706
#x21d4ac49e1814a3b #x884037ed503c04d6
1707
#xbe0929f04c355623 #xe565d8c43b5499aa
1708
#x1108623e0a898ed3 #x2532c705b074ae2d
1709
#x0551b85f028fdd9d #x03c46835f58e4b80
1710
#xf13c02a53352cae4 #xee7066696c2d0706
1711
#xc6c2cfab7c21a19a #xb04d2f0219c31512
1712
#x0273bb26a6f4720b #x8604311f05ca47e7
1713
#xaf014bce46bcd8f0 #x3318a6421e868f68
1714
#x96bb80325c39f0bf #x40c6feb479ebe67d
1715
#x12cc0a0bff07c553 #x162a6147aef22145
1716
#x71ade3d0c1991b1e #xce131933ded674b6
1717
#xc9311a4a7aaddb20 #x32af75514dfcb6e3
1718
#x62d63ac86de4e7c6 #xb23e9424bf376719
1719
#x8355894007459a7a #x137bd918ac7dfcd8
1720
#x42b54592df1f9476 #xabe7208217493ce6
1721
#x9b3beef5fc41f80e #x2e2779a8e70d3081
1722
#x4d469073d993eecc #x768fe0a965e2b488
1723
#xd0e8aeecd2d380df #xa2812509e6c4d041
1724
#x0ff3d5e1068c7aba #x04e66b4c51f5e416
1725
#x2c54c28e41f9428a #x01b7d313537a398b
1726
#xcc60a215782206bd #xc506a79e89afea1a
1727
#x4cf143608ae9d747 #x8a338ccbf6c876dd
1728
#x29057ad143769f17 #xcfa4ca208dac4d3d
1729
#xa6674e45b7313457 #x50794f9920185125
1730
#xb89cf99abb34c03e #x343aa53bbafd20fe
1731
#x89f7e4fe03463d5d #xa5a3267042bf7fd7
1732
#xefc7b57a3f573e8d #x9fdd85b9adb41c18
1733
#xec03dd4fcad9750d #x970c53210f43c934
1734
#xc7751cb82f5b9811 #xc1e0ccd2d85a0e0c
1735
#xad72f0e8e048aafb #x0966058bf18deca7
1736
#x47e4fdcddd9049eb #x19d9b4a6a87e5bff
1737
#x1a1ddc935df0107f #x591f4a12d195bd82
1738
#x1efbb7df0c05f469 #x575b4ce08463feb3
1739
#x0e4406f255f64331 #x2ac112e4b6f8d497
1740
#xa0f29e2f4030a24a #x179db254fd8818ce
1741
#x663051843c1103d0 #xe4d20bd7682ea021
1742
#xd15f7dff81a9b954 #xd32cc6d9275dcb5f
1743
#x94c83b14facd82b4 #xaa50f3914433056d
1744
#x358d7628e9871975 #xbc7a92d6eac12428
1745
#x39bacbfc1a85284f #x9199834bf8425f29
1746
#x73de58f6676d6915 #xd5b916b3d05c5d42
1747
#x46532ede8eea7060 #x186e67b5fb046274
1748
#xa1454d3c134a9bc1 #x0b15bead57799eac
1749
#x5adb2227241bf602 #xdd68c02b72ab886e
1750
#x6443eaa29ae571db #xfd0bbf71c050fbde
1751
#x8b845fd8a5b24f56 #xb92b2a89e84ef9b5
1752
#x678782976f6b3a5b #xf2f86a90c6dc8164
1753
#xc39377f47eae7c07 #x93ea386d5eb62d22
1754
#x430296818c65adfd #xc224a4e72dd4458c
1755
#x9e6a56aafece2593 #x6f56540fcd9cef77
1756
#x84778a39a33e35ec #xf85a072ec2df2643
1757
#x3bc970dabc715a44 #x0d806ec7a07808b1
1758
#x773833ba36988d03 #x27417c231680dc26
1759
#x60a581eecb1095cd #xb76f2c7bbdb8ba84
1760
#xd8397874702455f3 #xfecfd74435deb05e
1761
#xcaf5727f8f2390a0 #xa9949ba4b1bd4eed
1762
#xe034609b39db4437 #x2b76c1f7e582ed1c
1763
#xf7a9d2cfc4535cf9 #x20637f5ab2fb73b0
1764
#x9c19ed8c583a5798 #xd67d7e8625d216c2
1765
#x1459da610806534e #x6d25ef296b689d7c
1766
#x925deb7e0dcc14a9 #x65f439b1c99f4850
1767
#x957fe807a9b7bb3f #x41712da72a91dff6
1768
#x36491e1d1c0952f5 #x5e3d496b75ee1214
1769
#x1d3fdfeaf98bbfe9 #x701a30c392e32295
1770
#x6361e9db3e9ede4d #xd7caad9576a82f49
1771
#xe71663e29da0eba1 #x98ff86c009cfb38e
1772
#x6bb03f439c690b61 #xc4b1748ddad5d391
1773
#x6c923c3a3812a4f7 #x1f4c64cc5f7fcde2
1774
#xe183b3886aa17dbc #xb6d8ff68eec2830f
1775
#x51ce9c8a736268ae #x07220379a47baf96
1776
#x82e25a53543fa3f1 #xbb5891af4eba8bbe
1777
#x4bd340192e9278d1 #x6874577669e740e1
1778
#xfb9e6f1b37516dc3 #xacc523fbb3329370
1779
#x69c384653a9d796a #x5b6cf1347761cf89
1780
#x0000000000000000 #x49a0fb3f88660ada
1781
#xa336f61ab5bee9ca #x15ee09725b7c6ac5
1782
#x8d118fb252b3d94b #x7d9a5e04329b2a24
1783
#x1baa0f800e8a29f4 #xfa29bc08642b5448
1784
#x459746eb7b643be0 #xdf1b7b0dd45ffa65
1785
#x30dcce77eb08c4e8 #x8091e175f2cbd1fa
1786
#x0c37bdd4f302313a #xf9edd43d91a51fc8
1787
#x3a7ea3c9ef0b63cf #x74fc5b8fc316c683
1788
#x8ca65ca101c9e0c0 #x72698be53417509e
1789
#x23a7176f47753830 #x797c3548636ece32
1790
#xb51c975d1b4cc88f #x2210c47c140f01bb
1791
#xd29b15ca7427f2d4 #x8ed5e787a73d92cb
1792
#x7e5e3631c71561a4 #x1c880cf9aaf18662
1793
#xf08bd1b66028f36f #xf61e01dc97296572
1794
#x7b0f8e6ec59abc39 #xb3894737ec4d5e92
1795
#x316b1d64b872fd63 #x9a8c3de6af3bc185
1796
#x0aa26dbe0403a727 #x5f8a9a7826942b9f
1797
#x520af4bf86ec232e #x380d18ef49ff11c4
1798
#x0695d06af701961d #x87b3e20c56b07e6c
1799
#x53bd27acd5961aa5 #x7c2d8d1761e113af
1800
#x28b2a9c2100ca69c #x6a07ec50cf1332ea
1801
#xe9526510c856a890 #xcdd771062b583f36
1802
#xfcbc6c62932ac255 #x9dae3e9f0b406e13
1803
#xd40ec5a0832664c9 #x78cbe65b3014f7b9
1804
#x4e82f8462c1da54c #x611252fd986aac46)
1805
(#x352b557f679cc74f #x3e9424bf376719b2
1806
#x5deb7e0dcc14a992 #xb3e20c56b07e6c87
1807
#x83b3886aa17dbce1 #x3d496b75ee12145e
1808
#xae3e9f0b406e139d #x8a9a7826942b9f5f
1809
#x845fd8a5b24f568b #x5a072ec2df2643f8
1810
#xf3d5e1068c7aba0f #x7ea3c9ef0b63cf3a
1811
#x923c3a3812a4f76c #x3fdfeaf98bbfe91d
1812
#xd340192e9278d14b #x04311f05ca47e786
1813
#xcc0a0bff07c55312 #xff86c009cfb38e98
1814
#xade3d0c1991b1e71 #xfc5b8fc316c68374
1815
#xbb80325c39f0bf96 #xd5e787a73d92cb8e
1816
#xa4ca208dac4d3dcf #xf6af3045fae5ad26
1817
#x5b4ce08463feb357 #x8bd1b66028f36ff0
1818
#xb698dd15c6e17bae #x2f1b96ed84be523f
1819
#x4037ed503c04d688 #x6a56aafece25939e
1820
#xb40e5c99a34c86ed #xc6feb479ebe67d40
1821
#x9b15ca7427f2d4d2 #xde58f6676d691573
1822
#xc523fbb3329370ac #xe5b6039b2c911be8
1823
#x8d7628e987197535 #xf008aecc550fb7e3
1824
#xd9b4a6a87e5bff19 #xc112e4b6f8d4972a
1825
#xdf133821d1b1e5dc #xaf75514dfcb6e332
1826
#x2095f8281e026b44 #xb54592df1f947642
1827
#x8eab67235e6c78d9 #x698be53417509e72
1828
#xbc6c62932ac255fc #x1f4a12d195bd8259
1829
#x15bead57799eac0b #x1ddc935df0107f1a
1830
#x131933ded674b6ce #xe66b4c51f5e41604
1831
#x9db254fd8818ce17 #xa26dbe0403a7270a
1832
#x17282cdb1c335148 #x47dbbd9f2f363ce2
1833
#xda69e962a72ef2f5 #x469073d993eecc4d
1834
#xfafc114ab92c99b1 #x90aabbb477090a2f
1835
#xb2a9c2100ca69c28 #xa65ca101c9e0c08c
1836
#xd09d56e44b0ddca7 #x3833ba36988d0377
1837
#x59da610806534e14 #x19ed8c583a57989c
1838
#x491e1d1c0952f536 #xeb73a3180af5d23c
1839
#x2779a8e70d30812e #x86c95929d7e2abc8
1840
#xedd43d91a51fc8f9 #xb03f439c690b616b
1841
#x9e6f1b37516dc3fb #x78045766a489d5ff
1842
#x3c02a53352cae4f1 #x1c975d1b4cc88fb5
1843
#x55894007459a7a83 #xc384653a9d796a69
1844
#x674e45b7313457a6 #x454d3c134a9bc1a1
1845
#xce9c8a736268ae51 #x98c885befe87d93e
1846
#x0d18ef49ff11c438 #x66058bf18deca709
1847
#xcfd74435deb05efe #x4ac352d6d027f8da
1848
#x880cf9aaf186621c #x0c53210f43c93497
1849
#x36f61ab5bee9caa3 #x526510c856a890e9
1850
#x64930a7de8415a4a #x1a30c392e3229570
1851
#x778a39a33e35ec84 #xbefae31f4f6fa8bf
1852
#x2cc6d9275dcb5fd3 #xf439b1c99f485065
1853
#xa581eecb1095cd60 #x28f7c622978cb855
1854
#x220379a47baf9607 #x7d7e8625d216c2d6
1855
#xd63ac86de4e7c662 #xea386d5eb62d2293
1856
#xaa0f800e8a29f41b #x1b7b0dd45ffa65df
1857
#x6cf1347761cf895b #x4fb98395a6b8eff3
1858
#xd4ac49e1814a3b21 #x311a4a7aaddb20c9
1859
#x32c705b074ae2d25 #xf29e2f4030a24aa0
1860
#x712da72a91dff641 #xe4fdcddd9049eb47
1861
#xe7208217493ce6ab #xab444e4836f104b4
1862
#x2a6147aef2214516 #xb916b3d05c5d42d5
1863
#xd1d698a2f7d52c08 #xb7d313537a398b01
1864
#x4b889c906cff0875 #xcbe65b3014f7b978
1865
#x812509e6c4d041a2 #xb85d7d96e085b27a
1866
#xef42bc1dc0b235ba #x18a6421e868f6833
1867
#x532ede8eea706046 #x2b2a89e84ef9b5b9
1868
#xf86a90c6dc8164f2 #x397874702455f3d8
1869
#x65d8c43b5499aae5 #x42a16cdc59a92bcb
1870
#x5f7dff81a9b954d1 #x9377f47eae7c07c3
1871
#x95d06af701961d06 #x34609b39db4437e0
1872
#x8c3de6af3bc1859a #xfd104185aa1e73db
1873
#x7bd918ac7dfcd813 #x417c231680dc2627
1874
#x03dd4fcad9750dec #x14f56311c5465ca4
1875
#x571fc18b203787c0 #xb1748ddad5d391c4
1876
#xd8ff68eec2830fb6 #x014bce46bcd8f0af
1877
#x1663e29da0eba1e7 #x637f5ab2fb73b020
1878
#xee09725b7c6ac515 #x0000000000000000
1879
#x338ccbf6c876dd8a #x56540fcd9cef776f
1880
#x623494f447ab408f #x91e175f2cbd1fa80
1881
#x0f8e6ec59abc397b #x4855d35ab58a0599
1882
#x894737ec4d5e92b3 #xbd27acd5961aa553
1883
#x4d2f0219c31512b0 #xe1871c9ee6d6fc6e
1884
#x8fe0a965e2b48876 #x118fb252b3d94b8d
1885
#xc0592af0440c6785 #xaca81e8725c3eede
1886
#xd771062b583f36cd #x7066696c2d0706ee
1887
#x99834bf8425f2991 #x3aa53bbafd20fe34
1888
#x4406f255f643310e #xa1b0f1cedad22ae6
1889
#x82f8462c1da54c4e #x0929f04c355623be
1890
#x057ad143769f1729 #x949ba4b1bd4eeda9
1891
#x960d253dd8e310ea #xfecd0e4f736b7e37
1892
#x0296818c65adfd43 #x6f2c7bbdb8ba84b7
1893
#x9a5e04329b2a247d #x2348b7e2c77766a8
1894
#xdcce77eb08c4e830 #x851416e30e97a624
1895
#x08623e0a898ed311 #x43eaa29ae571db64
1896
#xc7b57a3f573e8def #xc2cfab7c21a19ac6
1897
#x5ca0b04b70cc593d #x0ec5a0832664c9d4
1898
#x1e01dc97296572f6 #xbacbfc1a85284f39
1899
#xc970dabc715a443b #xa8990182ef840958
1900
#xc83b14facd82b494 #x72f0e8e048aafbad
1901
#xf143608ae9d7474c #xf5727f8f2390a0ca
1902
#x7fe807a9b7bb3f95 #x76c1f7e582ed1c2b
1903
#xcd41c5b9bb1da3bd #x6b1d64b872fd6331
1904
#x806ec7a07808b10d #xe3119d12837b012d
1905
#x25ef296b689d7c6d #x37bdd4f302313a0c
1906
#x3051843c1103d066 #x68c02b72ab886edd
1907
#x8782976f6b3a5b67 #x2d8d1761e113af7c
1908
#x1252fd986aac4661 #x0bbf71c050fbdefd
1909
#xd20bd7682ea021e4 #xe0ccd2d85a0e0cc1
1910
#x9cf99abb34c03eb8 #xdd85b9adb41c189f
1911
#x61e9db3e9ede4d63 #x06a79e89afea1ac5
1912
#xf7e4fe03463d5d89 #x794f992018512550
1913
#x3beef5fc41f80e9b #xcaad9576a82f49d7
1914
#x10c47c140f01bb22 #x0af4bf86ec232e52
1915
#xdb2227241bf6025a #x21de366ea2da9beb
1916
#x9f24d571edb53354 #x9746eb7b643be045
1917
#xa3267042bf7fd7a5 #x6e67b5fb04627418
1918
#xc46835f58e4b8003 #x07ec50cf1332ea6a
1919
#xe8aeecd2d380dfd0 #xe9e522946f582f7f
1920
#x54c28e41f9428a2c #xe25a53543fa3f182
1921
#xa9d2cfc4535cf9f7 #xa0fb3f88660ada49
1922
#x50f3914433056daa #x51b85f028fdd9d05
1923
#xec9ff3d719c73856 #x263266a1b1e87181
1924
#x5e3631c71561a47e #x24a4e72dd4458cc2
1925
#x74577669e740e168 #x7a92d6eac12428bc
1926
#x2e5058ab3866a290 #x4ef24dd31a601f5c
1927
#xf9215e806059945d #xfbb7df0c05f4691e
1928
#x751cb82f5b9811c7 #x29bc08642b5448fa
1929
#x5891af4eba8bbebb #x73bb26a6f4720b02
1930
#x6dbafa31dd1779f4 #x7c3548636ece3279
1931
#x4c64cc5f7fcde21f #x60a215782206bdcc
1932
#xa7176f4775383023 #xbfb12d59f3b75810)
1933
(#x51843c1103d06630 #xdfeaf98bbfe91d3f
1934
#xeef5fc41f80e9b3b #xaf3045fae5ad26f6
1935
#x70dabc715a443bc9 #x119d12837b012de3
1936
#x3b14facd82b494c8 #xdd4fcad9750dec03
1937
#xaabbb477090a2f90 #x75514dfcb6e332af
1938
#x96818c65adfd4302 #x1d64b872fd63316b
1939
#xe4fe03463d5d89f7 #x43608ae9d7474cf1
1940
#xe20c56b07e6c87b3 #xf24dd31a601f5c4e
1941
#x577669e740e16874 #x609b39db4437e034
1942
#x3ac86de4e7c662d6 #x0379a47baf960722
1943
#xa79e89afea1ac506 #x4bce46bcd8f0af01
1944
#x267042bf7fd7a5a3 #x7ad143769f172905
1945
#x85b9adb41c189fdd #xc885befe87d93e98
1946
#xed8c583a57989c19 #x3c3a3812a4f76c92
1947
#x5e04329b2a247d9a #xf99abb34c03eb89c
1948
#x2227241bf6025adb #x6510c856a890e952
1949
#xa215782206bdcc60 #x9ff3d719c73856ec
1950
#x02a53352cae4f13c #x871c9ee6d6fc6ee1
1951
#x80325c39f0bf96bb #x8d1761e113af7c2d
1952
#x46eb7b643be04597 #xd8c43b5499aae565
1953
#x81eecb1095cd60a5 #x9c8a736268ae51ce
1954
#x64cc5f7fcde21f4c #x7c231680dc262741
1955
#xc28e41f9428a2c54 #x8ccbf6c876dd8a33
1956
#xb98395a6b8eff34f #xa9c2100ca69c28b2
1957
#x6ec7a07808b10d80 #x0a0bff07c55312cc
1958
#xc02b72ab886edd68 #xb85f028fdd9d0551
1959
#x104185aa1e73dbfd #xb6039b2c911be8e5
1960
#x79a8e70d30812e27 #x82976f6b3a5b6787
1961
#xa53bbafd20fe343a #x7dff81a9b954d15f
1962
#x894007459a7a8355 #xd43d91a51fc8f9ed
1963
#xccd2d85a0e0cc1e0 #xe807a9b7bb3f957f
1964
#xa81e8725c3eedeac #x5058ab3866a2902e
1965
#x889c906cff08754b #x4ce08463feb3575b
1966
#xdc935df0107f1a1d #x56aafece25939e6a
1967
#xa16cdc59a92bcb42 #xec50cf1332ea6a07
1968
#x4592df1f947642b5 #xbafa31dd1779f46d
1969
#x29f04c355623be09 #x15ca7427f2d4d29b
1970
#x215e806059945df9 #x23fbb3329370acc5
1971
#xd74435deb05efecf #xeaa29ae571db6443
1972
#xc95929d7e2abc886 #xa4e72dd4458cc224
1973
#x3548636ece32797c #x27acd5961aa553bd
1974
#xac49e1814a3b21d4 #xcbfc1a85284f39ba
1975
#x8fb252b3d94b8d11 #x42bc1dc0b235baef
1976
#x072ec2df2643f85a #x91af4eba8bbebb58
1977
#x045766a489d5ff78 #x9073d993eecc4d46
1978
#x3f439c690b616bb0 #x6b4c51f5e41604e6
1979
#x7e8625d216c2d67d #xab67235e6c78d98e
1980
#xef296b689d7c6d25 #xc5a0832664c9d40e
1981
#x69e962a72ef2f5da #x7b0dd45ffa65df1b
1982
#x496b75ee12145e3d #xd918ac7dfcd8137b
1983
#x1e1d1c0952f53649 #xfeb479ebe67d40c6
1984
#x6147aef22145162a #x0f800e8a29f41baa
1985
#x0000000000000000 #x990182ef840958a8
1986
#x975d1b4cc88fb51c #x5b8fc316c68374fc
1987
#x16b3d05c5d42d5b9 #xb3886aa17dbce183
1988
#x4f99201851255079 #x98dd15c6e17baeb6
1989
#x06f255f643310e44 #x6f1b37516dc3fb9e
1990
#x0cf9aaf186621c88 #x8e6ec59abc397b0f
1991
#x930a7de8415a4a64 #x37ed503c04d68840
1992
#xf61ab5bee9caa336 #xfb3f88660ada49a0
1993
#x7874702455f3d839 #x208217493ce6abe7
1994
#x73a3180af5d23ceb #x9e2f4030a24aa0f2
1995
#xe522946f582f7fe9 #xd5e1068c7aba0ff3
1996
#xbdd4f302313a0c37 #x1fc18b203787c057
1997
#xd2cfc4535cf9f7a9 #x1b96ed84be523f2f
1998
#x5d7d96e085b27ab8 #x66696c2d0706ee70
1999
#xd06af701961d0695 #xe3d0c1991b1e71ad
2000
#x6c62932ac255fcbc #xd313537a398b01b7
2001
#xa0b04b70cc593d5c #x834bf8425f299199
2002
#xaeecd2d380dfd0e8 #xbead57799eac0b15
2003
#x540fcd9cef776f56 #xad9576a82f49d7ca
2004
#xfc114ab92c99b1fa #x33ba36988d037738
2005
#xbb26a6f4720b0273 #xb254fd8818ce179d
2006
#xa6421e868f683318 #x5fd8a5b24f568b84
2007
#x623e0a898ed31108 #xb0f1cedad22ae6a1
2008
#x1933ded674b6ce13 #x1416e30e97a62485
2009
#x3e9f0b406e139dae #x6dbe0403a7270aa2
2010
#xbc08642b5448fa29 #x0d253dd8e310ea96
2011
#x2ede8eea70604653 #x39b1c99f485065f4
2012
#xcd0e4f736b7e37fe #xbf71c050fbdefd0b
2013
#x748ddad5d391c4b1 #x0bd7682ea021e4d2
2014
#x3494f447ab408f62 #xb4a6a87e5bff19d9
2015
#x133821d1b1e5dcdf #x95f8281e026b4420
2016
#x2da72a91dff64171 #x18ef49ff11c4380d
2017
#xc705b074ae2d2532 #x3de6af3bc1859a8c
2018
#x6835f58e4b8003c4 #xe787a73d92cb8ed5
2019
#xc6d9275dcb5fd32c #xf7c622978cb85528
2020
#x4d3c134a9bc1a145 #xf3914433056daa50
2021
#xb7df0c05f4691efb #xe175f2cbd1fa8091
2022
#x77f47eae7c07c393 #xeb7e0dcc14a9925d
2023
#xf1347761cf895b6c #x08aecc550fb7e3f0
2024
#x55d35ab58a059948 #x444e4836f104b4ab
2025
#x58f6676d691573de #x9ba4b1bd4eeda994
2026
#x92d6eac12428bc7a #xb12d59f3b75810bf
2027
#xa3c9ef0b63cf3a7e #x67b5fb046274186e
2028
#x2f0219c31512b04d #x3266a1b1e8718126
2029
#x7628e9871975358d #xda610806534e1459
2030
#x311f05ca47e78604 #x12e4b6f8d4972ac1
2031
#x282cdb1c33514817 #x727f8f2390a0caf5
2032
#xb57a3f573e8defc7 #x71062b583f36cdd7
2033
#x84653a9d796a69c3 #xf56311c5465ca414
2034
#x4737ec4d5e92b389 #x1cb82f5b9811c775
2035
#x2509e6c4d041a281 #xfdcddd9049eb47e4
2036
#x40192e9278d14bd3 #x2a89e84ef9b5b92b
2037
#x3631c71561a47e5e #x8be53417509e7269
2038
#x24d571edb533549f #xc352d6d027f8da4a
2039
#x01dc97296572f61e #xe9db3e9ede4d6361
2040
#x4e45b7313457a667 #xf8462c1da54c4e82
2041
#x4a12d195bd82591f #xff68eec2830fb6d8
2042
#x176f4775383023a7 #x48b7e2c77766a823
2043
#x592af0440c6785c0 #x2c7bbdb8ba84b76f
2044
#x5ca101c9e0c08ca6 #x63e29da0eba1e716
2045
#xd698a2f7d52c08d1 #xce77eb08c4e830dc
2046
#xde366ea2da9beb21 #x5a53543fa3f182e2
2047
#x52fd986aac466112 #x86c009cfb38e98ff
2048
#xd1b66028f36ff08b #x1a4a7aaddb20c931
2049
#xcfab7c21a19ac6c2 #x09725b7c6ac515ee
2050
#x0e5c99a34c86edb4 #xdbbd9f2f363ce247
2051
#x6a90c6dc8164f2f8 #x8a39a33e35ec8477
2052
#xe0a965e2b488768f #x7f5ab2fb73b02063
2053
#xf4bf86ec232e520a #xfae31f4f6fa8bfbe
2054
#x058bf18deca70966 #x41c5b9bb1da3bdcd
2055
#x2b557f679cc74f35 #xca208dac4d3dcfa4
2056
#x9a7826942b9f5f8a #xf0e8e048aafbad72
2057
#x53210f43c934970c #xc1f7e582ed1c2b76
2058
#xc47c140f01bb2210 #x9d56e44b0ddca7d0
2059
#x386d5eb62d2293ea #xe65b3014f7b978cb
2060
#x9424bf376719b23e #x30c392e32295701a))))
2062
(defconst +kalyna-s+
2063
(make-array '(4 256)
2064
:element-type '(unsigned-byte 8)
2065
:initial-contents '((#xa8 #x43 #x5f #x06 #x6b #x75 #x6c #x59
2066
#x71 #xdf #x87 #x95 #x17 #xf0 #xd8 #x09
2067
#x6d #xf3 #x1d #xcb #xc9 #x4d #x2c #xaf
2068
#x79 #xe0 #x97 #xfd #x6f #x4b #x45 #x39
2069
#x3e #xdd #xa3 #x4f #xb4 #xb6 #x9a #x0e
2070
#x1f #xbf #x15 #xe1 #x49 #xd2 #x93 #xc6
2071
#x92 #x72 #x9e #x61 #xd1 #x63 #xfa #xee
2072
#xf4 #x19 #xd5 #xad #x58 #xa4 #xbb #xa1
2073
#xdc #xf2 #x83 #x37 #x42 #xe4 #x7a #x32
2074
#x9c #xcc #xab #x4a #x8f #x6e #x04 #x27
2075
#x2e #xe7 #xe2 #x5a #x96 #x16 #x23 #x2b
2076
#xc2 #x65 #x66 #x0f #xbc #xa9 #x47 #x41
2077
#x34 #x48 #xfc #xb7 #x6a #x88 #xa5 #x53
2078
#x86 #xf9 #x5b #xdb #x38 #x7b #xc3 #x1e
2079
#x22 #x33 #x24 #x28 #x36 #xc7 #xb2 #x3b
2080
#x8e #x77 #xba #xf5 #x14 #x9f #x08 #x55
2081
#x9b #x4c #xfe #x60 #x5c #xda #x18 #x46
2082
#xcd #x7d #x21 #xb0 #x3f #x1b #x89 #xff
2083
#xeb #x84 #x69 #x3a #x9d #xd7 #xd3 #x70
2084
#x67 #x40 #xb5 #xde #x5d #x30 #x91 #xb1
2085
#x78 #x11 #x01 #xe5 #x00 #x68 #x98 #xa0
2086
#xc5 #x02 #xa6 #x74 #x2d #x0b #xa2 #x76
2087
#xb3 #xbe #xce #xbd #xae #xe9 #x8a #x31
2088
#x1c #xec #xf1 #x99 #x94 #xaa #xf6 #x26
2089
#x2f #xef #xe8 #x8c #x35 #x03 #xd4 #x7f
2090
#xfb #x05 #xc1 #x5e #x90 #x20 #x3d #x82
2091
#xf7 #xea #x0a #x0d #x7e #xf8 #x50 #x1a
2092
#xc4 #x07 #x57 #xb8 #x3c #x62 #xe3 #xc8
2093
#xac #x52 #x64 #x10 #xd0 #xd9 #x13 #x0c
2094
#x12 #x29 #x51 #xb9 #xcf #xd6 #x73 #x8d
2095
#x81 #x54 #xc0 #xed #x4e #x44 #xa7 #x2a
2096
#x85 #x25 #xe6 #xca #x7c #x8b #x56 #x80)
2097
(#xce #xbb #xeb #x92 #xea #xcb #x13 #xc1
2098
#xe9 #x3a #xd6 #xb2 #xd2 #x90 #x17 #xf8
2099
#x42 #x15 #x56 #xb4 #x65 #x1c #x88 #x43
2100
#xc5 #x5c #x36 #xba #xf5 #x57 #x67 #x8d
2101
#x31 #xf6 #x64 #x58 #x9e #xf4 #x22 #xaa
2102
#x75 #x0f #x02 #xb1 #xdf #x6d #x73 #x4d
2103
#x7c #x26 #x2e #xf7 #x08 #x5d #x44 #x3e
2104
#x9f #x14 #xc8 #xae #x54 #x10 #xd8 #xbc
2105
#x1a #x6b #x69 #xf3 #xbd #x33 #xab #xfa
2106
#xd1 #x9b #x68 #x4e #x16 #x95 #x91 #xee
2107
#x4c #x63 #x8e #x5b #xcc #x3c #x19 #xa1
2108
#x81 #x49 #x7b #xd9 #x6f #x37 #x60 #xca
2109
#xe7 #x2b #x48 #xfd #x96 #x45 #xfc #x41
2110
#x12 #x0d #x79 #xe5 #x89 #x8c #xe3 #x20
2111
#x30 #xdc #xb7 #x6c #x4a #xb5 #x3f #x97
2112
#xd4 #x62 #x2d #x06 #xa4 #xa5 #x83 #x5f
2113
#x2a #xda #xc9 #x00 #x7e #xa2 #x55 #xbf
2114
#x11 #xd5 #x9c #xcf #x0e #x0a #x3d #x51
2115
#x7d #x93 #x1b #xfe #xc4 #x47 #x09 #x86
2116
#x0b #x8f #x9d #x6a #x07 #xb9 #xb0 #x98
2117
#x18 #x32 #x71 #x4b #xef #x3b #x70 #xa0
2118
#xe4 #x40 #xff #xc3 #xa9 #xe6 #x78 #xf9
2119
#x8b #x46 #x80 #x1e #x38 #xe1 #xb8 #xa8
2120
#xe0 #x0c #x23 #x76 #x1d #x25 #x24 #x05
2121
#xf1 #x6e #x94 #x28 #x9a #x84 #xe8 #xa3
2122
#x4f #x77 #xd3 #x85 #xe2 #x52 #xf2 #x82
2123
#x50 #x7a #x2f #x74 #x53 #xb3 #x61 #xaf
2124
#x39 #x35 #xde #xcd #x1f #x99 #xac #xad
2125
#x72 #x2c #xdd #xd0 #x87 #xbe #x5e #xa6
2126
#xec #x04 #xc6 #x03 #x34 #xfb #xdb #x59
2127
#xb6 #xc2 #x01 #xf0 #x5a #xed #xa7 #x66
2128
#x21 #x7f #x8a #x27 #xc7 #xc0 #x29 #xd7)
2129
(#x93 #xd9 #x9a #xb5 #x98 #x22 #x45 #xfc
2130
#xba #x6a #xdf #x02 #x9f #xdc #x51 #x59
2131
#x4a #x17 #x2b #xc2 #x94 #xf4 #xbb #xa3
2132
#x62 #xe4 #x71 #xd4 #xcd #x70 #x16 #xe1
2133
#x49 #x3c #xc0 #xd8 #x5c #x9b #xad #x85
2134
#x53 #xa1 #x7a #xc8 #x2d #xe0 #xd1 #x72
2135
#xa6 #x2c #xc4 #xe3 #x76 #x78 #xb7 #xb4
2136
#x09 #x3b #x0e #x41 #x4c #xde #xb2 #x90
2137
#x25 #xa5 #xd7 #x03 #x11 #x00 #xc3 #x2e
2138
#x92 #xef #x4e #x12 #x9d #x7d #xcb #x35
2139
#x10 #xd5 #x4f #x9e #x4d #xa9 #x55 #xc6
2140
#xd0 #x7b #x18 #x97 #xd3 #x36 #xe6 #x48
2141
#x56 #x81 #x8f #x77 #xcc #x9c #xb9 #xe2
2142
#xac #xb8 #x2f #x15 #xa4 #x7c #xda #x38
2143
#x1e #x0b #x05 #xd6 #x14 #x6e #x6c #x7e
2144
#x66 #xfd #xb1 #xe5 #x60 #xaf #x5e #x33
2145
#x87 #xc9 #xf0 #x5d #x6d #x3f #x88 #x8d
2146
#xc7 #xf7 #x1d #xe9 #xec #xed #x80 #x29
2147
#x27 #xcf #x99 #xa8 #x50 #x0f #x37 #x24
2148
#x28 #x30 #x95 #xd2 #x3e #x5b #x40 #x83
2149
#xb3 #x69 #x57 #x1f #x07 #x1c #x8a #xbc
2150
#x20 #xeb #xce #x8e #xab #xee #x31 #xa2
2151
#x73 #xf9 #xca #x3a #x1a #xfb #x0d #xc1
2152
#xfe #xfa #xf2 #x6f #xbd #x96 #xdd #x43
2153
#x52 #xb6 #x08 #xf3 #xae #xbe #x19 #x89
2154
#x32 #x26 #xb0 #xea #x4b #x64 #x84 #x82
2155
#x6b #xf5 #x79 #xbf #x01 #x5f #x75 #x63
2156
#x1b #x23 #x3d #x68 #x2a #x65 #xe8 #x91
2157
#xf6 #xff #x13 #x58 #xf1 #x47 #x0a #x7f
2158
#xc5 #xa7 #xe7 #x61 #x5a #x06 #x46 #x44
2159
#x42 #x04 #xa0 #xdb #x39 #x86 #x54 #xaa
2160
#x8c #x34 #x21 #x8b #xf8 #x0c #x74 #x67)
2161
(#x68 #x8d #xca #x4d #x73 #x4b #x4e #x2a
2162
#xd4 #x52 #x26 #xb3 #x54 #x1e #x19 #x1f
2163
#x22 #x03 #x46 #x3d #x2d #x4a #x53 #x83
2164
#x13 #x8a #xb7 #xd5 #x25 #x79 #xf5 #xbd
2165
#x58 #x2f #x0d #x02 #xed #x51 #x9e #x11
2166
#xf2 #x3e #x55 #x5e #xd1 #x16 #x3c #x66
2167
#x70 #x5d #xf3 #x45 #x40 #xcc #xe8 #x94
2168
#x56 #x08 #xce #x1a #x3a #xd2 #xe1 #xdf
2169
#xb5 #x38 #x6e #x0e #xe5 #xf4 #xf9 #x86
2170
#xe9 #x4f #xd6 #x85 #x23 #xcf #x32 #x99
2171
#x31 #x14 #xae #xee #xc8 #x48 #xd3 #x30
2172
#xa1 #x92 #x41 #xb1 #x18 #xc4 #x2c #x71
2173
#x72 #x44 #x15 #xfd #x37 #xbe #x5f #xaa
2174
#x9b #x88 #xd8 #xab #x89 #x9c #xfa #x60
2175
#xea #xbc #x62 #x0c #x24 #xa6 #xa8 #xec
2176
#x67 #x20 #xdb #x7c #x28 #xdd #xac #x5b
2177
#x34 #x7e #x10 #xf1 #x7b #x8f #x63 #xa0
2178
#x05 #x9a #x43 #x77 #x21 #xbf #x27 #x09
2179
#xc3 #x9f #xb6 #xd7 #x29 #xc2 #xeb #xc0
2180
#xa4 #x8b #x8c #x1d #xfb #xff #xc1 #xb2
2181
#x97 #x2e #xf8 #x65 #xf6 #x75 #x07 #x04
2182
#x49 #x33 #xe4 #xd9 #xb9 #xd0 #x42 #xc7
2183
#x6c #x90 #x00 #x8e #x6f #x50 #x01 #xc5
2184
#xda #x47 #x3f #xcd #x69 #xa2 #xe2 #x7a
2185
#xa7 #xc6 #x93 #x0f #x0a #x06 #xe6 #x2b
2186
#x96 #xa3 #x1c #xaf #x6a #x12 #x84 #x39
2187
#xe7 #xb0 #x82 #xf7 #xfe #x9d #x87 #x5c
2188
#x81 #x35 #xde #xb4 #xa5 #xfc #x80 #xef
2189
#xcb #xbb #x6b #x76 #xba #x5a #x7d #x78
2190
#x0b #x95 #xe3 #xad #x74 #x98 #x3b #x36
2191
#x64 #x6d #xdc #xf0 #x59 #xa9 #x4c #x17
2192
#x7f #x91 #xb8 #xc9 #x57 #x1b #xe0 #x61))))
2194
(defconst +kalyna-is+
2195
(make-array '(4 256)
2196
:element-type '(unsigned-byte 8)
2197
:initial-contents '((#xa4 #xa2 #xa9 #xc5 #x4e #xc9 #x03 #xd9
2198
#x7e #x0f #xd2 #xad #xe7 #xd3 #x27 #x5b
2199
#xe3 #xa1 #xe8 #xe6 #x7c #x2a #x55 #x0c
2200
#x86 #x39 #xd7 #x8d #xb8 #x12 #x6f #x28
2201
#xcd #x8a #x70 #x56 #x72 #xf9 #xbf #x4f
2202
#x73 #xe9 #xf7 #x57 #x16 #xac #x50 #xc0
2203
#x9d #xb7 #x47 #x71 #x60 #xc4 #x74 #x43
2204
#x6c #x1f #x93 #x77 #xdc #xce #x20 #x8c
2205
#x99 #x5f #x44 #x01 #xf5 #x1e #x87 #x5e
2206
#x61 #x2c #x4b #x1d #x81 #x15 #xf4 #x23
2207
#xd6 #xea #xe1 #x67 #xf1 #x7f #xfe #xda
2208
#x3c #x07 #x53 #x6a #x84 #x9c #xcb #x02
2209
#x83 #x33 #xdd #x35 #xe2 #x59 #x5a #x98
2210
#xa5 #x92 #x64 #x04 #x06 #x10 #x4d #x1c
2211
#x97 #x08 #x31 #xee #xab #x05 #xaf #x79
2212
#xa0 #x18 #x46 #x6d #xfc #x89 #xd4 #xc7
2213
#xff #xf0 #xcf #x42 #x91 #xf8 #x68 #x0a
2214
#x65 #x8e #xb6 #xfd #xc3 #xef #x78 #x4c
2215
#xcc #x9e #x30 #x2e #xbc #x0b #x54 #x1a
2216
#xa6 #xbb #x26 #x80 #x48 #x94 #x32 #x7d
2217
#xa7 #x3f #xae #x22 #x3d #x66 #xaa #xf6
2218
#x00 #x5d #xbd #x4a #xe0 #x3b #xb4 #x17
2219
#x8b #x9f #x76 #xb0 #x24 #x9a #x25 #x63
2220
#xdb #xeb #x7a #x3e #x5c #xb3 #xb1 #x29
2221
#xf2 #xca #x58 #x6e #xd8 #xa8 #x2f #x75
2222
#xdf #x14 #xfb #x13 #x49 #x88 #xb2 #xec
2223
#xe4 #x34 #x2d #x96 #xc6 #x3a #xed #x95
2224
#x0e #xe5 #x85 #x6b #x40 #x21 #x9b #x09
2225
#x19 #x2b #x52 #xde #x45 #xa3 #xfa #x51
2226
#xc2 #xb5 #xd1 #x90 #xb9 #xf3 #x37 #xc1
2227
#x0d #xba #x41 #x11 #x38 #x7b #xbe #xd0
2228
#xd5 #x69 #x36 #xc8 #x62 #x1b #x82 #x8f)
2229
(#x83 #xf2 #x2a #xeb #xe9 #xbf #x7b #x9c
2230
#x34 #x96 #x8d #x98 #xb9 #x69 #x8c #x29
2231
#x3d #x88 #x68 #x06 #x39 #x11 #x4c #x0e
2232
#xa0 #x56 #x40 #x92 #x15 #xbc #xb3 #xdc
2233
#x6f #xf8 #x26 #xba #xbe #xbd #x31 #xfb
2234
#xc3 #xfe #x80 #x61 #xe1 #x7a #x32 #xd2
2235
#x70 #x20 #xa1 #x45 #xec #xd9 #x1a #x5d
2236
#xb4 #xd8 #x09 #xa5 #x55 #x8e #x37 #x76
2237
#xa9 #x67 #x10 #x17 #x36 #x65 #xb1 #x95
2238
#x62 #x59 #x74 #xa3 #x50 #x2f #x4b #xc8
2239
#xd0 #x8f #xcd #xd4 #x3c #x86 #x12 #x1d
2240
#x23 #xef #xf4 #x53 #x19 #x35 #xe6 #x7f
2241
#x5e #xd6 #x79 #x51 #x22 #x14 #xf7 #x1e
2242
#x4a #x42 #x9b #x41 #x73 #x2d #xc1 #x5c
2243
#xa6 #xa2 #xe0 #x2e #xd3 #x28 #xbb #xc9
2244
#xae #x6a #xd1 #x5a #x30 #x90 #x84 #xf9
2245
#xb2 #x58 #xcf #x7e #xc5 #xcb #x97 #xe4
2246
#x16 #x6c #xfa #xb0 #x6d #x1f #x52 #x99
2247
#x0d #x4e #x03 #x91 #xc2 #x4d #x64 #x77
2248
#x9f #xdd #xc4 #x49 #x8a #x9a #x24 #x38
2249
#xa7 #x57 #x85 #xc7 #x7c #x7d #xe7 #xf6
2250
#xb7 #xac #x27 #x46 #xde #xdf #x3b #xd7
2251
#x9e #x2b #x0b #xd5 #x13 #x75 #xf0 #x72
2252
#xb6 #x9d #x1b #x01 #x3f #x44 #xe5 #x87
2253
#xfd #x07 #xf1 #xab #x94 #x18 #xea #xfc
2254
#x3a #x82 #x5f #x05 #x54 #xdb #x00 #x8b
2255
#xe3 #x48 #x0c #xca #x78 #x89 #x0a #xff
2256
#x3e #x5b #x81 #xee #x71 #xe2 #xda #x2c
2257
#xb8 #xb5 #xcc #x6e #xa8 #x6b #xad #x60
2258
#xc6 #x08 #x04 #x02 #xe8 #xf5 #x4f #xa4
2259
#xf3 #xc0 #xce #x43 #x25 #x1c #x21 #x33
2260
#x0f #xaf #x47 #xed #x66 #x63 #x93 #xaa)
2261
(#x45 #xd4 #x0b #x43 #xf1 #x72 #xed #xa4
2262
#xc2 #x38 #xe6 #x71 #xfd #xb6 #x3a #x95
2263
#x50 #x44 #x4b #xe2 #x74 #x6b #x1e #x11
2264
#x5a #xc6 #xb4 #xd8 #xa5 #x8a #x70 #xa3
2265
#xa8 #xfa #x05 #xd9 #x97 #x40 #xc9 #x90
2266
#x98 #x8f #xdc #x12 #x31 #x2c #x47 #x6a
2267
#x99 #xae #xc8 #x7f #xf9 #x4f #x5d #x96
2268
#x6f #xf4 #xb3 #x39 #x21 #xda #x9c #x85
2269
#x9e #x3b #xf0 #xbf #xef #x06 #xee #xe5
2270
#x5f #x20 #x10 #xcc #x3c #x54 #x4a #x52
2271
#x94 #x0e #xc0 #x28 #xf6 #x56 #x60 #xa2
2272
#xe3 #x0f #xec #x9d #x24 #x83 #x7e #xd5
2273
#x7c #xeb #x18 #xd7 #xcd #xdd #x78 #xff
2274
#xdb #xa1 #x09 #xd0 #x76 #x84 #x75 #xbb
2275
#x1d #x1a #x2f #xb0 #xfe #xd6 #x34 #x63
2276
#x35 #xd2 #x2a #x59 #x6d #x4d #x77 #xe7
2277
#x8e #x61 #xcf #x9f #xce #x27 #xf5 #x80
2278
#x86 #xc7 #xa6 #xfb #xf8 #x87 #xab #x62
2279
#x3f #xdf #x48 #x00 #x14 #x9a #xbd #x5b
2280
#x04 #x92 #x02 #x25 #x65 #x4c #x53 #x0c
2281
#xf2 #x29 #xaf #x17 #x6c #x41 #x30 #xe9
2282
#x93 #x55 #xf7 #xac #x68 #x26 #xc4 #x7d
2283
#xca #x7a #x3e #xa0 #x37 #x03 #xc1 #x36
2284
#x69 #x66 #x08 #x16 #xa7 #xbc #xc5 #xd3
2285
#x22 #xb7 #x13 #x46 #x32 #xe8 #x57 #x88
2286
#x2b #x81 #xb2 #x4e #x64 #x1c #xaa #x91
2287
#x58 #x2e #x9b #x5c #x1b #x51 #x73 #x42
2288
#x23 #x01 #x6e #xf3 #x0d #xbe #x3d #x0a
2289
#x2d #x1f #x67 #x33 #x19 #x7b #x5e #xea
2290
#xde #x8b #xcb #xa9 #x8c #x8d #xad #x49
2291
#x82 #xe4 #xba #xc3 #x15 #xd1 #xe0 #x89
2292
#xfc #xb1 #xb9 #xb5 #x07 #x79 #xb8 #xe1)
2293
(#xb2 #xb6 #x23 #x11 #xa7 #x88 #xc5 #xa6
2294
#x39 #x8f #xc4 #xe8 #x73 #x22 #x43 #xc3
2295
#x82 #x27 #xcd #x18 #x51 #x62 #x2d #xf7
2296
#x5c #x0e #x3b #xfd #xca #x9b #x0d #x0f
2297
#x79 #x8c #x10 #x4c #x74 #x1c #x0a #x8e
2298
#x7c #x94 #x07 #xc7 #x5e #x14 #xa1 #x21
2299
#x57 #x50 #x4e #xa9 #x80 #xd9 #xef #x64
2300
#x41 #xcf #x3c #xee #x2e #x13 #x29 #xba
2301
#x34 #x5a #xae #x8a #x61 #x33 #x12 #xb9
2302
#x55 #xa8 #x15 #x05 #xf6 #x03 #x06 #x49
2303
#xb5 #x25 #x09 #x16 #x0c #x2a #x38 #xfc
2304
#x20 #xf4 #xe5 #x7f #xd7 #x31 #x2b #x66
2305
#x6f #xff #x72 #x86 #xf0 #xa3 #x2f #x78
2306
#x00 #xbc #xcc #xe2 #xb0 #xf1 #x42 #xb4
2307
#x30 #x5f #x60 #x04 #xec #xa5 #xe3 #x8b
2308
#xe7 #x1d #xbf #x84 #x7b #xe6 #x81 #xf8
2309
#xde #xd8 #xd2 #x17 #xce #x4b #x47 #xd6
2310
#x69 #x6c #x19 #x99 #x9a #x01 #xb3 #x85
2311
#xb1 #xf9 #x59 #xc2 #x37 #xe9 #xc8 #xa0
2312
#xed #x4f #x89 #x68 #x6d #xd5 #x26 #x91
2313
#x87 #x58 #xbd #xc9 #x98 #xdc #x75 #xc0
2314
#x76 #xf5 #x67 #x6b #x7e #xeb #x52 #xcb
2315
#xd1 #x5b #x9f #x0b #xdb #x40 #x92 #x1a
2316
#xfa #xac #xe4 #xe1 #x71 #x1f #x65 #x8d
2317
#x97 #x9e #x95 #x90 #x5d #xb7 #xc1 #xaf
2318
#x54 #xfb #x02 #xe0 #x35 #xbb #x3a #x4d
2319
#xad #x2c #x3d #x56 #x08 #x1b #x4a #x93
2320
#x6a #xab #xb8 #x7a #xf2 #x7d #xda #x3f
2321
#xfe #x3e #xbe #xea #xaa #x44 #xc6 #xd0
2322
#x36 #x48 #x70 #x96 #x77 #x24 #x53 #xdf
2323
#xf3 #x83 #x28 #x32 #x45 #x1e #xa4 #xd3
2324
#xa2 #x46 #x6e #x9c #xdd #x63 #xd4 #x9d)))))
2326
(declaim (type (simple-array (unsigned-byte 64) (8 256)) +kalyna-t+ +kalyna-it+)
2327
(type (simple-array (unsigned-byte 8) (4 256)) +kalyna-s+ +kalyna-is+))
2331
;;; Common functions and macros
2334
(declaim (inline kalyna-make-odd-key))
2335
(defun kalyna-make-odd-key (n ek ek-start ok ok-start)
2336
(declare (type (integer 0 8) n)
2337
(type (simple-array (unsigned-byte 64) (*)) ek ok)
2338
(type (integer 0 144) ek-start ok-start)
2339
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2340
(macrolet ((m (a b c d e)
2341
`(setf (aref ok (+ ok-start ,a))
2342
(logior (mod64ash (aref ek (+ ek-start ,b)) ,c)
2343
(mod64ash (aref ek (+ ek-start ,d)) ,e)))))
2346
(m 0 1 8 0 -56) (m 1 0 8 1 -56))
2348
(m 0 2 40 1 -24) (m 1 3 40 2 -24) (m 2 0 40 3 -24) (m 3 1 40 0 -24))
2350
(m 0 3 40 2 -24) (m 1 4 40 3 -24) (m 2 5 40 4 -24) (m 3 6 40 5 -24)
2351
(m 4 7 40 6 -24) (m 5 0 40 7 -24) (m 6 1 40 0 -24) (m 7 2 40 1 -24))))
2354
(declaim (inline kalyna-swap-blocks))
2355
(defun kalyna-swap-blocks (n k)
2356
(declare (type (integer 0 8) n)
2357
(type (simple-array (unsigned-byte 64) (*)) k)
2358
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2360
(2 (rotatef (aref k 0) (aref k 1)))
2361
(4 (rotatef (aref k 0) (aref k 1) (aref k 2) (aref k 3)))
2362
(8 (rotatef (aref k 0) (aref k 1) (aref k 2) (aref k 3)
2363
(aref k 4) (aref k 5) (aref k 6) (aref k 7))))
2366
(defmacro kalyna-add-key (n x x-start y k)
2367
`(dotimes-unrolled (i ,n)
2368
(setf (aref ,y i) (mod64+ (aref ,x (+ ,x-start i)) (aref ,k i)))))
2370
(defmacro kalyna-sub-key (n x y k k-start)
2371
`(dotimes-unrolled (i ,n)
2372
(setf (aref ,y i) (mod64- (aref ,x i) (aref ,k (+ ,k-start i))))))
2374
(defmacro kalyna-add-constant (n x y c)
2375
`(dotimes-unrolled (i ,n)
2376
(setf (aref ,y i) (mod64+ (aref ,x i) ,c))))
2383
(declaim (inline kalyna-g0128))
2384
(defun kalyna-g0128 (x y)
2385
(declare (type (simple-array (unsigned-byte 64) (*)) x y)
2386
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2387
(macrolet ((m (a b c)
2388
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
2390
(logxor (m 0 0 0) (m 1 0 -8) (m 2 0 -16) (m 3 0 -24)
2391
(m 4 1 -32) (m 5 1 -40) (m 6 1 -48) (m 7 1 -56)))
2393
(logxor (m 0 1 0) (m 1 1 -8) (m 2 1 -16) (m 3 1 -24)
2394
(m 4 0 -32) (m 5 0 -40) (m 6 0 -48)(m 7 0 -56))))
2397
(declaim (inline kalyna-gl128))
2398
(defun kalyna-gl128 (x y y-start k k-start)
2399
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
2400
(type (integer 0 30) y-start k-start)
2401
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2402
(macrolet ((m (a b c)
2403
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
2404
(setf (aref y (+ y-start 0))
2405
(mod64+ (aref k (+ k-start 0))
2406
(logxor (m 0 0 0) (m 1 0 -8) (m 2 0 -16) (m 3 0 -24)
2407
(m 4 1 -32) (m 5 1 -40) (m 6 1 -48) (m 7 1 -56))))
2408
(setf (aref y (+ y-start 1))
2409
(mod64+ (aref k (+ k-start 1))
2410
(logxor (m 0 1 0) (m 1 1 -8) (m 2 1 -16) (m 3 1 -24)
2411
(m 4 0 -32) (m 5 0 -40) (m 6 0 -48) (m 7 0 -56)))))
2414
(declaim (inline kalyna-imc128))
2415
(defun kalyna-imc128 (x x-start)
2416
(declare (type (simple-array (unsigned-byte 64) (*)) x)
2417
(type (integer 0 30) x-start)
2418
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2419
(macrolet ((m (a b c d)
2424
(logand (mod64ash (aref x (+ x-start ,c)) ,d) #xff)))))
2425
(setf (aref x (+ x-start 0))
2426
(logxor (m 0 0 0 0) (m 1 1 0 -8) (m 2 2 0 -16) (m 3 3 0 -24)
2427
(m 4 0 0 -32) (m 5 1 0 -40) (m 6 2 0 -48) (m 7 3 0 -56)))
2428
(setf (aref x (+ x-start 1))
2429
(logxor (m 0 0 1 0) (m 1 1 1 -8) (m 2 2 1 -16) (m 3 3 1 -24)
2430
(m 4 0 1 -32) (m 5 1 1 -40) (m 6 2 1 -48) (m 7 3 1 -56))))
2433
(declaim (inline kalyna-ig128))
2434
(defun kalyna-ig128 (x y k k-start)
2435
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
2436
(type (integer 0 30) k-start)
2437
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2438
(macrolet ((m (a b c)
2439
`(aref +kalyna-it+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
2441
(logxor (aref k (+ k-start 0))
2442
(m 0 0 0) (m 1 0 -8) (m 2 0 -16) (m 3 0 -24)
2443
(m 4 1 -32) (m 5 1 -40) (m 6 1 -48) (m 7 1 -56)))
2445
(logxor (aref k (+ k-start 1))
2446
(m 0 1 0) (m 1 1 -8) (m 2 1 -16) (m 3 1 -24)
2447
(m 4 0 -32) (m 5 0 -40) (m 6 0 -48) (m 7 0 -56))))
2450
(declaim (inline kalyna-igl128))
2451
(defun kalyna-igl128 (x y k k-start)
2452
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
2453
(type (integer 0 30) k-start)
2454
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2455
(macrolet ((m (a b c d)
2456
`(mod64ash (aref +kalyna-is+
2458
(logand (mod64ash (aref x ,b) ,c) #xff))
2461
(mod64- (logxor (m 0 0 0 0) (m 1 0 -8 8) (m 2 0 -16 16) (m 3 0 -24 24)
2462
(m 0 1 -32 32) (m 1 1 -40 40) (m 2 1 -48 48) (m 3 1 -56 56))
2463
(aref k (+ k-start 0))))
2465
(mod64- (logxor (m 0 1 0 0) (m 1 1 -8 8) (m 2 1 -16 16) (m 3 1 -24 24)
2466
(m 0 0 -32 32) (m 1 0 -40 40) (m 2 0 -48 48) (m 3 0 -56 56))
2467
(aref k (+ k-start 1)))))
2470
(declaim (inline kalyna-g128))
2471
(defun kalyna-g128 (x y k k-start)
2472
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
2473
(type (integer 0 30) k-start)
2474
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2475
(macrolet ((m (a b c)
2476
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
2478
(logxor (aref k (+ k-start 0))
2479
(m 0 0 0) (m 1 0 -8) (m 2 0 -16) (m 3 0 -24)
2480
(m 4 1 -32) (m 5 1 -40) (m 6 1 -48) (m 7 1 -56)))
2482
(logxor (aref k (+ k-start 1))
2483
(m 0 1 0) (m 1 1 -8) (m 2 1 -16) (m 3 1 -24)
2484
(m 4 0 -32) (m 5 0 -40) (m 6 0 -48) (m 7 0 -56))))
2487
(defclass kalyna128 (cipher 16-byte-block-mixin)
2488
((encryption-round-keys :accessor encryption-round-keys
2489
:initform (make-array 30 :element-type '(unsigned-byte 64))
2490
:type (simple-array (unsigned-byte 64) (30)))
2491
(decryption-round-keys :accessor decryption-round-keys
2492
:initform (make-array 30 :element-type '(unsigned-byte 64))
2493
:type (simple-array (unsigned-byte 64) (30)))
2494
(n-rounds :accessor n-rounds)))
2496
(defmethod schedule-key ((cipher kalyna128) key)
2497
(let ((encryption-round-keys (encryption-round-keys cipher))
2498
(decryption-round-keys (decryption-round-keys cipher)))
2499
(declare (type (simple-array (unsigned-byte 64) (30)) encryption-round-keys)
2500
(type (simple-array (unsigned-byte 64) (30)) decryption-round-keys))
2503
(let ((key (make-array 2 :element-type '(unsigned-byte 64)
2504
:initial-contents (list (ub64ref/le key 0)
2505
(ub64ref/le key 8))))
2506
(ks (make-array 2 :element-type '(unsigned-byte 64)))
2507
(ksc (make-array 2 :element-type '(unsigned-byte 64)))
2508
(t1 (make-array 2 :element-type '(unsigned-byte 64)))
2509
(t2 (make-array 2 :element-type '(unsigned-byte 64)))
2510
(k (make-array 2 :element-type '(unsigned-byte 64)))
2511
(kswapped (make-array 2 :element-type '(unsigned-byte 64)))
2512
(constant #x0001000100010001))
2513
(declare (type (simple-array (unsigned-byte 64) (2)) key ks ksc t1 t2 k kswapped)
2514
(dynamic-extent key ks ksc t1 t2 k kswapped)
2515
(type (unsigned-byte 64) constant))
2516
(setf (n-rounds cipher) 10)
2517
(setf (aref t1 0) (/ (+ 128 128 64) 64)
2519
(kalyna-add-key 2 t1 0 t2 key)
2520
(kalyna-g128 t2 t1 key 0)
2521
(kalyna-gl128 t1 t2 0 key 0)
2522
(kalyna-g0128 t2 ks)
2526
(setf (aref kswapped 1) (aref k 0)
2527
(aref kswapped 0) (aref k 1))
2528
(kalyna-add-constant 2 ks ksc constant)
2529
(kalyna-add-key 2 k 0 t2 ksc)
2530
(kalyna-g128 t2 t1 ksc 0)
2531
(kalyna-gl128 t1 encryption-round-keys 0 ksc 0)
2532
(kalyna-make-odd-key 2 encryption-round-keys 0 encryption-round-keys 2)
2536
(setf constant (mod64ash constant 1))
2537
(kalyna-add-constant 2 ks ksc constant)
2538
(kalyna-add-key 2 v 0 t2 ksc)
2539
(kalyna-g128 t2 t1 ksc 0)
2540
(kalyna-gl128 t1 encryption-round-keys n ksc 0)
2541
(kalyna-make-odd-key 2
2542
encryption-round-keys n
2543
encryption-round-keys (+ n 2))))
2550
(setf constant (mod64ash constant 1))
2551
(kalyna-add-constant 2 ks ksc constant)
2552
(kalyna-add-key 2 kswapped 0 t2 ksc)
2553
(kalyna-g128 t2 t1 ksc 0)
2554
(kalyna-gl128 t1 encryption-round-keys 20 ksc 0)
2556
(replace decryption-round-keys encryption-round-keys)
2557
(loop for n from 18 downto 2 by 2 do
2558
(kalyna-imc128 decryption-round-keys n))))
2561
(let ((key (make-array 4 :element-type '(unsigned-byte 64)
2562
:initial-contents (list (ub64ref/le key 0)
2565
(ub64ref/le key 24))))
2566
(ks (make-array 2 :element-type '(unsigned-byte 64)))
2567
(ksc (make-array 2 :element-type '(unsigned-byte 64)))
2568
(t1 (make-array 2 :element-type '(unsigned-byte 64)))
2569
(t2 (make-array 2 :element-type '(unsigned-byte 64)))
2570
(k (make-array 4 :element-type '(unsigned-byte 64)))
2571
(ka (make-array 2 :element-type '(unsigned-byte 64)))
2572
(ko (make-array 2 :element-type '(unsigned-byte 64)))
2573
(constant #x0001000100010001))
2574
(declare (type (simple-array (unsigned-byte 64) (4)) key k)
2575
(type (simple-array (unsigned-byte 64) (2)) ks ksc t1 t2 ka ko)
2576
(dynamic-extent key ks ksc t1 t2 k ka ko)
2577
(type (unsigned-byte 64) constant))
2578
(setf (n-rounds cipher) 14)
2579
(setf (aref t1 0) (/ (+ 128 256 64) 64)
2581
(replace ka key :end2 2)
2582
(replace ko key :start2 2)
2583
(kalyna-add-key 2 t1 0 t2 ka)
2584
(kalyna-g128 t2 t1 ko 0)
2585
(kalyna-gl128 t1 t2 0 ka 0)
2586
(kalyna-g0128 t2 ks)
2590
(kalyna-add-constant 2 ks ksc constant)
2591
(kalyna-add-key 2 k 0 t2 ksc)
2592
(kalyna-g128 t2 t1 ksc 0)
2593
(kalyna-gl128 t1 encryption-round-keys 0 ksc 0)
2594
(kalyna-make-odd-key 2 encryption-round-keys 0 encryption-round-keys 2)
2599
(kalyna-swap-blocks 4 k))
2600
(setf constant (mod64ash constant 1))
2601
(kalyna-add-constant 2 ks ksc constant)
2602
(kalyna-add-key 2 k v t2 ksc)
2603
(kalyna-g128 t2 t1 ksc 0)
2604
(kalyna-gl128 t1 encryption-round-keys n ksc 0)
2605
(kalyna-make-odd-key 2
2606
encryption-round-keys n
2607
encryption-round-keys (+ n 2))))
2616
(setf constant (mod64ash constant 1))
2617
(kalyna-add-constant 2 ks ksc constant)
2618
(kalyna-add-key 2 k 2 t2 ksc)
2619
(kalyna-g128 t2 t1 ksc 0)
2620
(kalyna-gl128 t1 encryption-round-keys 28 ksc 0)
2622
(replace decryption-round-keys encryption-round-keys)
2623
(loop for n from 26 downto 2 by 2 do
2624
(kalyna-imc128 decryption-round-keys n)))))
2627
(define-block-encryptor kalyna128 16
2628
(let ((encryption-round-keys (encryption-round-keys context))
2629
(t1 (make-array 2 :element-type '(unsigned-byte 64)))
2630
(t2 (make-array 2 :element-type '(unsigned-byte 64))))
2631
(declare (type (simple-array (unsigned-byte 64) (30)) encryption-round-keys)
2632
(type (simple-array (unsigned-byte 64) (2)) t1 t2)
2633
(dynamic-extent t1 t2))
2634
(setf (aref t2 0) (ub64ref/le plaintext plaintext-start)
2635
(aref t2 1) (ub64ref/le plaintext (+ plaintext-start 8)))
2636
(kalyna-add-key 2 t2 0 t1 encryption-round-keys)
2637
(kalyna-g128 t1 t2 encryption-round-keys 2)
2638
(kalyna-g128 t2 t1 encryption-round-keys 4)
2639
(kalyna-g128 t1 t2 encryption-round-keys 6)
2640
(kalyna-g128 t2 t1 encryption-round-keys 8)
2641
(kalyna-g128 t1 t2 encryption-round-keys 10)
2642
(kalyna-g128 t2 t1 encryption-round-keys 12)
2643
(kalyna-g128 t1 t2 encryption-round-keys 14)
2644
(kalyna-g128 t2 t1 encryption-round-keys 16)
2645
(kalyna-g128 t1 t2 encryption-round-keys 18)
2646
(ecase (n-rounds context)
2648
(kalyna-gl128 t2 t1 0 encryption-round-keys 20))
2650
(kalyna-g128 t2 t1 encryption-round-keys 20)
2651
(kalyna-g128 t1 t2 encryption-round-keys 22)
2652
(kalyna-g128 t2 t1 encryption-round-keys 24)
2653
(kalyna-g128 t1 t2 encryption-round-keys 26)
2654
(kalyna-gl128 t2 t1 0 encryption-round-keys 28)))
2655
(setf (ub64ref/le ciphertext ciphertext-start) (aref t1 0)
2656
(ub64ref/le ciphertext (+ ciphertext-start 8)) (aref t1 1))
2659
(define-block-decryptor kalyna128 16
2660
(let ((decryption-round-keys (decryption-round-keys context))
2661
(t1 (make-array 2 :element-type '(unsigned-byte 64)))
2662
(t2 (make-array 2 :element-type '(unsigned-byte 64))))
2663
(declare (type (simple-array (unsigned-byte 64) (30)) decryption-round-keys)
2664
(type (simple-array (unsigned-byte 64) (2)) t1 t2)
2665
(dynamic-extent t1 t2))
2666
(setf (aref t2 0) (ub64ref/le ciphertext ciphertext-start)
2667
(aref t2 1) (ub64ref/le ciphertext (+ ciphertext-start 8)))
2668
(ecase (n-rounds context)
2670
(kalyna-sub-key 2 t2 t1 decryption-round-keys 20)
2671
(kalyna-imc128 t1 0))
2673
(kalyna-sub-key 2 t2 t1 decryption-round-keys 28)
2674
(kalyna-imc128 t1 0)
2675
(kalyna-ig128 t1 t2 decryption-round-keys 26)
2676
(kalyna-ig128 t2 t1 decryption-round-keys 24)
2677
(kalyna-ig128 t1 t2 decryption-round-keys 22)
2678
(kalyna-ig128 t2 t1 decryption-round-keys 20)))
2679
(kalyna-ig128 t1 t2 decryption-round-keys 18)
2680
(kalyna-ig128 t2 t1 decryption-round-keys 16)
2681
(kalyna-ig128 t1 t2 decryption-round-keys 14)
2682
(kalyna-ig128 t2 t1 decryption-round-keys 12)
2683
(kalyna-ig128 t1 t2 decryption-round-keys 10)
2684
(kalyna-ig128 t2 t1 decryption-round-keys 8)
2685
(kalyna-ig128 t1 t2 decryption-round-keys 6)
2686
(kalyna-ig128 t2 t1 decryption-round-keys 4)
2687
(kalyna-ig128 t1 t2 decryption-round-keys 2)
2688
(kalyna-igl128 t2 t1 decryption-round-keys 0)
2689
(setf (ub64ref/le plaintext plaintext-start) (aref t1 0)
2690
(ub64ref/le plaintext (+ plaintext-start 8)) (aref t1 1))
2693
(defcipher kalyna128
2694
(:encrypt-function kalyna128-encrypt-block)
2695
(:decrypt-function kalyna128-decrypt-block)
2697
(:key-length (:fixed 16 32)))
2700
(declaim (inline kalyna-g0256))
2701
(defun kalyna-g0256 (x y)
2702
(declare (type (simple-array (unsigned-byte 64) (*)) x y)
2703
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2704
(macrolet ((m (a b c)
2705
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
2707
(logxor (m 0 0 0) (m 1 0 -8) (m 2 3 -16) (m 3 3 -24)
2708
(m 4 2 -32) (m 5 2 -40) (m 6 1 -48) (m 7 1 -56)))
2710
(logxor (m 0 1 0) (m 1 1 -8) (m 2 0 -16) (m 3 0 -24)
2711
(m 4 3 -32) (m 5 3 -40) (m 6 2 -48) (m 7 2 -56)))
2713
(logxor (m 0 2 0) (m 1 2 -8) (m 2 1 -16) (m 3 1 -24)
2714
(m 4 0 -32) (m 5 0 -40) (m 6 3 -48) (m 7 3 -56)))
2716
(logxor (m 0 3 0) (m 1 3 -8) (m 2 2 -16) (m 3 2 -24)
2717
(m 4 1 -32) (m 5 1 -40) (m 6 0 -48) (m 7 0 -56))))
2720
(declaim (inline kalyna-gl256))
2721
(defun kalyna-gl256 (x y y-start k k-start)
2722
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
2723
(type (integer 0 76) y-start k-start)
2724
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2725
(macrolet ((m (a b c)
2726
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
2727
(setf (aref y (+ y-start 0))
2728
(mod64+ (aref k (+ k-start 0))
2729
(logxor (m 0 0 0) (m 1 0 -8) (m 2 3 -16) (m 3 3 -24)
2730
(m 4 2 -32) (m 5 2 -40) (m 6 1 -48) (m 7 1 -56))))
2731
(setf (aref y (+ y-start 1))
2732
(mod64+ (aref k (+ k-start 1))
2733
(logxor (m 0 1 0) (m 1 1 -8) (m 2 0 -16) (m 3 0 -24)
2734
(m 4 3 -32) (m 5 3 -40) (m 6 2 -48) (m 7 2 -56))))
2735
(setf (aref y (+ y-start 2))
2736
(mod64+ (aref k (+ k-start 2))
2737
(logxor (m 0 2 0) (m 1 2 -8) (m 2 1 -16) (m 3 1 -24)
2738
(m 4 0 -32) (m 5 0 -40) (m 6 3 -48) (m 7 3 -56))))
2739
(setf (aref y (+ y-start 3))
2740
(mod64+ (aref k (+ k-start 3))
2741
(logxor (m 0 3 0) (m 1 3 -8) (m 2 2 -16) (m 3 2 -24)
2742
(m 4 1 -32) (m 5 1 -40) (m 6 0 -48) (m 7 0 -56)))))
2745
(declaim (inline kalyna-imc256))
2746
(defun kalyna-imc256 (x x-start)
2747
(declare (type (simple-array (unsigned-byte 64) (*)) x)
2748
(type (integer 0 76) x-start)
2749
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2750
(macrolet ((m (a b c d)
2755
(logand (mod64ash (aref x (+ x-start ,c)) ,d) #xff)))))
2756
(setf (aref x (+ x-start 0))
2757
(logxor (m 0 0 0 0) (m 1 1 0 -8) (m 2 2 0 -16) (m 3 3 0 -24)
2758
(m 4 0 0 -32) (m 5 1 0 -40) (m 6 2 0 -48) (m 7 3 0 -56)))
2759
(setf (aref x (+ x-start 1))
2760
(logxor (m 0 0 1 0) (m 1 1 1 -8) (m 2 2 1 -16) (m 3 3 1 -24)
2761
(m 4 0 1 -32) (m 5 1 1 -40) (m 6 2 1 -48) (m 7 3 1 -56)))
2762
(setf (aref x (+ x-start 2))
2763
(logxor (m 0 0 2 0) (m 1 1 2 -8) (m 2 2 2 -16) (m 3 3 2 -24)
2764
(m 4 0 2 -32) (m 5 1 2 -40) (m 6 2 2 -48) (m 7 3 2 -56)))
2765
(setf (aref x (+ x-start 3))
2766
(logxor (m 0 0 3 0) (m 1 1 3 -8) (m 2 2 3 -16) (m 3 3 3 -24)
2767
(m 4 0 3 -32) (m 5 1 3 -40) (m 6 2 3 -48) (m 7 3 3 -56))))
2770
(declaim (inline kalyna-ig256))
2771
(defun kalyna-ig256 (x y k k-start)
2772
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
2773
(type (integer 0 76) k-start)
2774
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2775
(macrolet ((m (a b c)
2776
`(aref +kalyna-it+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
2778
(logxor (aref k (+ k-start 0))
2779
(m 0 0 0) (m 1 0 -8) (m 2 1 -16) (m 3 1 -24)
2780
(m 4 2 -32) (m 5 2 -40) (m 6 3 -48) (m 7 3 -56)))
2782
(logxor (aref k (+ k-start 1))
2783
(m 0 1 0) (m 1 1 -8) (m 2 2 -16) (m 3 2 -24)
2784
(m 4 3 -32) (m 5 3 -40) (m 6 0 -48) (m 7 0 -56)))
2786
(logxor (aref k (+ k-start 2))
2787
(m 0 2 0) (m 1 2 -8) (m 2 3 -16) (m 3 3 -24)
2788
(m 4 0 -32) (m 5 0 -40) (m 6 1 -48) (m 7 1 -56)))
2790
(logxor (aref k (+ k-start 3))
2791
(m 0 3 0) (m 1 3 -8) (m 2 0 -16) (m 3 0 -24)
2792
(m 4 1 -32) (m 5 1 -40) (m 6 2 -48) (m 7 2 -56))))
2795
(declaim (inline kalyna-igl256))
2796
(defun kalyna-igl256 (x y k k-start)
2797
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
2798
(type (integer 0 76) k-start)
2799
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2800
(macrolet ((m (a b c d)
2801
`(mod64ash (aref +kalyna-is+
2803
(logand (mod64ash (aref x ,b) ,c) #xff))
2806
(mod64- (logxor (m 0 0 0 0) (m 1 0 -8 8) (m 2 1 -16 16) (m 3 1 -24 24)
2807
(m 0 2 -32 32) (m 1 2 -40 40) (m 2 3 -48 48) (m 3 3 -56 56))
2808
(aref k (+ k-start 0))))
2810
(mod64- (logxor (m 0 1 0 0) (m 1 1 -8 8) (m 2 2 -16 16) (m 3 2 -24 24)
2811
(m 0 3 -32 32) (m 1 3 -40 40) (m 2 0 -48 48) (m 3 0 -56 56))
2812
(aref k (+ k-start 1))))
2814
(mod64- (logxor (m 0 2 0 0) (m 1 2 -8 8) (m 2 3 -16 16) (m 3 3 -24 24)
2815
(m 0 0 -32 32) (m 1 0 -40 40) (m 2 1 -48 48) (m 3 1 -56 56))
2816
(aref k (+ k-start 2))))
2818
(mod64- (logxor (m 0 3 0 0) (m 1 3 -8 8) (m 2 0 -16 16) (m 3 0 -24 24)
2819
(m 0 1 -32 32) (m 1 1 -40 40) (m 2 2 -48 48) (m 3 2 -56 56))
2820
(aref k (+ k-start 3)))))
2823
(declaim (inline kalyna-g256))
2824
(defun kalyna-g256 (x y k k-start)
2825
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
2826
(type (integer 0 76) k-start)
2827
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
2828
(macrolet ((m (a b c)
2829
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
2831
(logxor (aref k (+ k-start 0))
2832
(m 0 0 0) (m 1 0 -8) (m 2 3 -16) (m 3 3 -24)
2833
(m 4 2 -32) (m 5 2 -40) (m 6 1 -48) (m 7 1 -56)))
2835
(logxor (aref k (+ k-start 1))
2836
(m 0 1 0) (m 1 1 -8) (m 2 0 -16) (m 3 0 -24)
2837
(m 4 3 -32) (m 5 3 -40) (m 6 2 -48) (m 7 2 -56)))
2839
(logxor (aref k (+ k-start 2))
2840
(m 0 2 0) (m 1 2 -8) (m 2 1 -16) (m 3 1 -24)
2841
(m 4 0 -32) (m 5 0 -40) (m 6 3 -48) (m 7 3 -56)))
2843
(logxor (aref k (+ k-start 3))
2844
(m 0 3 0) (m 1 3 -8) (m 2 2 -16) (m 3 2 -24)
2845
(m 4 1 -32) (m 5 1 -40) (m 6 0 -48) (m 7 0 -56))))
2848
(defclass kalyna256 (cipher 32-byte-block-mixin)
2849
((encryption-round-keys :accessor encryption-round-keys
2850
:initform (make-array 76 :element-type '(unsigned-byte 64))
2851
:type (simple-array (unsigned-byte 64) (76)))
2852
(decryption-round-keys :accessor decryption-round-keys
2853
:initform (make-array 76 :element-type '(unsigned-byte 64))
2854
:type (simple-array (unsigned-byte 64) (76)))
2855
(n-rounds :accessor n-rounds)))
2857
(defmethod schedule-key ((cipher kalyna256) key)
2858
(let ((encryption-round-keys (encryption-round-keys cipher))
2859
(decryption-round-keys (decryption-round-keys cipher)))
2860
(declare (type (simple-array (unsigned-byte 64) (76)) encryption-round-keys)
2861
(type (simple-array (unsigned-byte 64) (76)) decryption-round-keys))
2864
(let ((key (make-array 4 :element-type '(unsigned-byte 64)
2865
:initial-contents (list (ub64ref/le key 0)
2868
(ub64ref/le key 24))))
2869
(ks (make-array 4 :element-type '(unsigned-byte 64)))
2870
(ksc (make-array 4 :element-type '(unsigned-byte 64)))
2871
(t1 (make-array 4 :element-type '(unsigned-byte 64)))
2872
(t2 (make-array 4 :element-type '(unsigned-byte 64)))
2873
(k (make-array 4 :element-type '(unsigned-byte 64)))
2874
(constant #x0001000100010001))
2875
(declare (type (simple-array (unsigned-byte 64) (4)) key ks ksc t1 t2 k)
2876
(dynamic-extent key ks ksc t1 t2 k)
2877
(type (unsigned-byte 64) constant))
2878
(setf (n-rounds cipher) 14)
2880
(setf (aref t1 0) (/ (+ 256 256 64) 64))
2881
(kalyna-add-key 4 t1 0 t2 key)
2882
(kalyna-g256 t2 t1 key 0)
2883
(kalyna-gl256 t1 t2 0 key 0)
2884
(kalyna-g0256 t2 ks)
2888
(kalyna-add-constant 4 ks ksc constant)
2889
(kalyna-add-key 4 k 0 t2 ksc)
2890
(kalyna-g256 t2 t1 ksc 0)
2891
(kalyna-gl256 t1 encryption-round-keys 0 ksc 0)
2892
(kalyna-make-odd-key 4 encryption-round-keys 0 encryption-round-keys 4)
2896
(kalyna-swap-blocks 4 k)
2897
(setf constant (mod64ash constant 1))
2898
(kalyna-add-constant 4 ks ksc constant)
2899
(kalyna-add-key 4 k 0 t2 ksc)
2900
(kalyna-g256 t2 t1 ksc 0)
2901
(kalyna-gl256 t1 encryption-round-keys n ksc 0)
2902
(kalyna-make-odd-key 4
2903
encryption-round-keys n
2904
encryption-round-keys (+ n 4))))
2913
(kalyna-swap-blocks 4 k)
2914
(setf constant (mod64ash constant 1))
2915
(kalyna-add-constant 4 ks ksc constant)
2916
(kalyna-add-key 4 k 0 t2 ksc)
2917
(kalyna-g256 t2 t1 ksc 0)
2918
(kalyna-gl256 t1 encryption-round-keys 56 ksc 0)
2920
(replace decryption-round-keys encryption-round-keys)
2921
(loop for n from 52 downto 4 by 4 do
2922
(kalyna-imc256 decryption-round-keys n))))
2925
(let ((key (make-array 8 :element-type '(unsigned-byte 64)
2926
:initial-contents (list (ub64ref/le key 0)
2933
(ub64ref/le key 56))))
2934
(ks (make-array 4 :element-type '(unsigned-byte 64)))
2935
(ksc (make-array 4 :element-type '(unsigned-byte 64)))
2936
(t1 (make-array 4 :element-type '(unsigned-byte 64)))
2937
(t2 (make-array 4 :element-type '(unsigned-byte 64)))
2938
(k (make-array 8 :element-type '(unsigned-byte 64)))
2939
(ko (make-array 4 :element-type '(unsigned-byte 64)))
2940
(ka (make-array 4 :element-type '(unsigned-byte 64)))
2941
(constant #x0001000100010001))
2942
(declare (type (simple-array (unsigned-byte 64) (8)) key k)
2943
(type (simple-array (unsigned-byte 64) (4)) ks ksc t1 t2 ko ka)
2944
(dynamic-extent key ks ksc t1 t2 k ko ka)
2945
(type (unsigned-byte 64) constant))
2946
(setf (n-rounds cipher) 18)
2948
(setf (aref t1 0) (/ (+ 512 256 64) 64))
2949
(replace ka key :end2 4)
2950
(replace ko key :start2 4)
2951
(kalyna-add-key 4 t1 0 t2 ka)
2952
(kalyna-g256 t2 t1 ko 0)
2953
(kalyna-gl256 t1 t2 0 ka 0)
2954
(kalyna-g0256 t2 ks)
2958
(kalyna-add-constant 4 ks ksc constant)
2959
(kalyna-add-key 4 k 0 t2 ksc)
2960
(kalyna-g256 t2 t1 ksc 0)
2961
(kalyna-gl256 t1 encryption-round-keys 0 ksc 0)
2962
(kalyna-make-odd-key 4 encryption-round-keys 0 encryption-round-keys 4)
2967
(kalyna-swap-blocks 8 k))
2968
(setf constant (mod64ash constant 1))
2969
(kalyna-add-constant 4 ks ksc constant)
2970
(kalyna-add-key 4 k v t2 ksc)
2971
(kalyna-g256 t2 t1 ksc 0)
2972
(kalyna-gl256 t1 encryption-round-keys n ksc 0)
2973
(kalyna-make-odd-key 4
2974
encryption-round-keys n
2975
encryption-round-keys (+ n 4))))
2986
(setf constant (mod64ash constant 1))
2987
(kalyna-add-constant 4 ks ksc constant)
2988
(kalyna-add-key 4 k 4 t2 ksc)
2989
(kalyna-g256 t2 t1 ksc 0)
2990
(kalyna-gl256 t1 encryption-round-keys 72 ksc 0)
2992
(replace decryption-round-keys encryption-round-keys)
2993
(loop for n from 68 downto 4 by 4 do
2994
(kalyna-imc256 decryption-round-keys n)))))
2997
(define-block-encryptor kalyna256 32
2998
(let ((encryption-round-keys (encryption-round-keys context))
2999
(t1 (make-array 4 :element-type '(unsigned-byte 64)))
3000
(t2 (make-array 4 :element-type '(unsigned-byte 64))))
3001
(declare (type (simple-array (unsigned-byte 64) (76)) encryption-round-keys)
3002
(type (simple-array (unsigned-byte 64) (4)) t1 t2)
3003
(dynamic-extent t1 t2))
3004
(setf (aref t2 0) (ub64ref/le plaintext plaintext-start)
3005
(aref t2 1) (ub64ref/le plaintext (+ plaintext-start 8))
3006
(aref t2 2) (ub64ref/le plaintext (+ plaintext-start 16))
3007
(aref t2 3) (ub64ref/le plaintext (+ plaintext-start 24)))
3008
(kalyna-add-key 4 t2 0 t1 encryption-round-keys)
3009
(kalyna-g256 t1 t2 encryption-round-keys 4)
3010
(kalyna-g256 t2 t1 encryption-round-keys 8)
3011
(kalyna-g256 t1 t2 encryption-round-keys 12)
3012
(kalyna-g256 t2 t1 encryption-round-keys 16)
3013
(kalyna-g256 t1 t2 encryption-round-keys 20)
3014
(kalyna-g256 t2 t1 encryption-round-keys 24)
3015
(kalyna-g256 t1 t2 encryption-round-keys 28)
3016
(kalyna-g256 t2 t1 encryption-round-keys 32)
3017
(kalyna-g256 t1 t2 encryption-round-keys 36)
3018
(kalyna-g256 t2 t1 encryption-round-keys 40)
3019
(kalyna-g256 t1 t2 encryption-round-keys 44)
3020
(kalyna-g256 t2 t1 encryption-round-keys 48)
3021
(kalyna-g256 t1 t2 encryption-round-keys 52)
3022
(ecase (n-rounds context)
3024
(kalyna-gl256 t2 t1 0 encryption-round-keys 56))
3026
(kalyna-g256 t2 t1 encryption-round-keys 56)
3027
(kalyna-g256 t1 t2 encryption-round-keys 60)
3028
(kalyna-g256 t2 t1 encryption-round-keys 64)
3029
(kalyna-g256 t1 t2 encryption-round-keys 68)
3030
(kalyna-gl256 t2 t1 0 encryption-round-keys 72)))
3031
(setf (ub64ref/le ciphertext ciphertext-start) (aref t1 0)
3032
(ub64ref/le ciphertext (+ ciphertext-start 8)) (aref t1 1)
3033
(ub64ref/le ciphertext (+ ciphertext-start 16)) (aref t1 2)
3034
(ub64ref/le ciphertext (+ ciphertext-start 24)) (aref t1 3))
3037
(define-block-decryptor kalyna256 32
3038
(let ((decryption-round-keys (decryption-round-keys context))
3039
(t1 (make-array 4 :element-type '(unsigned-byte 64)))
3040
(t2 (make-array 4 :element-type '(unsigned-byte 64))))
3041
(declare (type (simple-array (unsigned-byte 64) (76)) decryption-round-keys)
3042
(type (simple-array (unsigned-byte 64) (4)) t1 t2)
3043
(dynamic-extent t1 t2))
3044
(setf (aref t2 0) (ub64ref/le ciphertext ciphertext-start)
3045
(aref t2 1) (ub64ref/le ciphertext (+ ciphertext-start 8))
3046
(aref t2 2) (ub64ref/le ciphertext (+ ciphertext-start 16))
3047
(aref t2 3) (ub64ref/le ciphertext (+ ciphertext-start 24)))
3048
(ecase (n-rounds context)
3050
(kalyna-sub-key 4 t2 t1 decryption-round-keys 56)
3051
(kalyna-imc256 t1 0))
3053
(kalyna-sub-key 4 t2 t1 decryption-round-keys 72)
3054
(kalyna-imc256 t1 0)
3055
(kalyna-ig256 t1 t2 decryption-round-keys 68)
3056
(kalyna-ig256 t2 t1 decryption-round-keys 64)
3057
(kalyna-ig256 t1 t2 decryption-round-keys 60)
3058
(kalyna-ig256 t2 t1 decryption-round-keys 56)))
3059
(kalyna-ig256 t1 t2 decryption-round-keys 52)
3060
(kalyna-ig256 t2 t1 decryption-round-keys 48)
3061
(kalyna-ig256 t1 t2 decryption-round-keys 44)
3062
(kalyna-ig256 t2 t1 decryption-round-keys 40)
3063
(kalyna-ig256 t1 t2 decryption-round-keys 36)
3064
(kalyna-ig256 t2 t1 decryption-round-keys 32)
3065
(kalyna-ig256 t1 t2 decryption-round-keys 28)
3066
(kalyna-ig256 t2 t1 decryption-round-keys 24)
3067
(kalyna-ig256 t1 t2 decryption-round-keys 20)
3068
(kalyna-ig256 t2 t1 decryption-round-keys 16)
3069
(kalyna-ig256 t1 t2 decryption-round-keys 12)
3070
(kalyna-ig256 t2 t1 decryption-round-keys 8)
3071
(kalyna-ig256 t1 t2 decryption-round-keys 4)
3072
(kalyna-igl256 t2 t1 decryption-round-keys 0)
3073
(setf (ub64ref/le plaintext plaintext-start) (aref t1 0)
3074
(ub64ref/le plaintext (+ plaintext-start 8)) (aref t1 1)
3075
(ub64ref/le plaintext (+ plaintext-start 16)) (aref t1 2)
3076
(ub64ref/le plaintext (+ plaintext-start 24)) (aref t1 3))
3079
(defcipher kalyna256
3080
(:encrypt-function kalyna256-encrypt-block)
3081
(:decrypt-function kalyna256-decrypt-block)
3083
(:key-length (:fixed 32 64)))
3086
(declaim (inline kalyna-g0512))
3087
(defun kalyna-g0512 (x y)
3088
(declare (type (simple-array (unsigned-byte 64) (*)) x y)
3089
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
3090
(macrolet ((m (a b c)
3091
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
3093
(logxor (m 0 0 0) (m 1 7 -8) (m 2 6 -16) (m 3 5 -24)
3094
(m 4 4 -32) (m 5 3 -40) (m 6 2 -48) (m 7 1 -56)))
3096
(logxor (m 0 1 0) (m 1 0 -8) (m 2 7 -16) (m 3 6 -24)
3097
(m 4 5 -32) (m 5 4 -40) (m 6 3 -48) (m 7 2 -56)))
3099
(logxor (m 0 2 0) (m 1 1 -8) (m 2 0 -16) (m 3 7 -24)
3100
(m 4 6 -32) (m 5 5 -40) (m 6 4 -48) (m 7 3 -56)))
3102
(logxor (m 0 3 0) (m 1 2 -8) (m 2 1 -16) (m 3 0 -24)
3103
(m 4 7 -32) (m 5 6 -40) (m 6 5 -48) (m 7 4 -56)))
3105
(logxor (m 0 4 0) (m 1 3 -8) (m 2 2 -16) (m 3 1 -24)
3106
(m 4 0 -32) (m 5 7 -40) (m 6 6 -48) (m 7 5 -56)))
3108
(logxor (m 0 5 0) (m 1 4 -8) (m 2 3 -16) (m 3 2 -24)
3109
(m 4 1 -32) (m 5 0 -40) (m 6 7 -48) (m 7 6 -56)))
3111
(logxor (m 0 6 0) (m 1 5 -8) (m 2 4 -16) (m 3 3 -24)
3112
(m 4 2 -32) (m 5 1 -40) (m 6 0 -48) (m 7 7 -56)))
3114
(logxor (m 0 7 0) (m 1 6 -8) (m 2 5 -16) (m 3 4 -24)
3115
(m 4 3 -32) (m 5 2 -40) (m 6 1 -48) (m 7 0 -56))))
3118
(declaim (inline kalyna-gl512))
3119
(defun kalyna-gl512 (x y y-start k k-start)
3120
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
3121
(type (integer 0 152) y-start k-start)
3122
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
3123
(macrolet ((m (a b c)
3124
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
3125
(setf (aref y (+ y-start 0))
3126
(mod64+ (aref k (+ k-start 0))
3127
(logxor (m 0 0 0) (m 1 7 -8) (m 2 6 -16) (m 3 5 -24)
3128
(m 4 4 -32) (m 5 3 -40) (m 6 2 -48) (m 7 1 -56))))
3129
(setf (aref y (+ y-start 1))
3130
(mod64+ (aref k (+ k-start 1))
3131
(logxor (m 0 1 0) (m 1 0 -8) (m 2 7 -16) (m 3 6 -24)
3132
(m 4 5 -32) (m 5 4 -40) (m 6 3 -48) (m 7 2 -56))))
3133
(setf (aref y (+ y-start 2))
3134
(mod64+ (aref k (+ k-start 2))
3135
(logxor (m 0 2 0) (m 1 1 -8) (m 2 0 -16) (m 3 7 -24)
3136
(m 4 6 -32) (m 5 5 -40) (m 6 4 -48) (m 7 3 -56))))
3137
(setf (aref y (+ y-start 3))
3138
(mod64+ (aref k (+ k-start 3))
3139
(logxor (m 0 3 0) (m 1 2 -8) (m 2 1 -16) (m 3 0 -24)
3140
(m 4 7 -32) (m 5 6 -40) (m 6 5 -48) (m 7 4 -56))))
3141
(setf (aref y (+ y-start 4))
3142
(mod64+ (aref k (+ k-start 4))
3143
(logxor (m 0 4 0) (m 1 3 -8) (m 2 2 -16) (m 3 1 -24)
3144
(m 4 0 -32) (m 5 7 -40) (m 6 6 -48) (m 7 5 -56))))
3145
(setf (aref y (+ y-start 5))
3146
(mod64+ (aref k (+ k-start 5))
3147
(logxor (m 0 5 0) (m 1 4 -8) (m 2 3 -16) (m 3 2 -24)
3148
(m 4 1 -32) (m 5 0 -40) (m 6 7 -48) (m 7 6 -56))))
3149
(setf (aref y (+ y-start 6))
3150
(mod64+ (aref k (+ k-start 6))
3151
(logxor (m 0 6 0) (m 1 5 -8) (m 2 4 -16) (m 3 3 -24)
3152
(m 4 2 -32) (m 5 1 -40) (m 6 0 -48) (m 7 7 -56))))
3153
(setf (aref y (+ y-start 7))
3154
(mod64+ (aref k (+ k-start 7))
3155
(logxor (m 0 7 0) (m 1 6 -8) (m 2 5 -16) (m 3 4 -24)
3156
(m 4 3 -32) (m 5 2 -40) (m 6 1 -48) (m 7 0 -56)))))
3159
(declaim (inline kalyna-imc512))
3160
(defun kalyna-imc512 (x x-start)
3161
(declare (type (simple-array (unsigned-byte 64) (*)) x)
3162
(type (integer 0 152) x-start)
3163
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
3164
(macrolet ((m (a b c d)
3169
(logand (mod64ash (aref x (+ x-start ,c)) ,d) #xff)))))
3170
(setf (aref x (+ x-start 0))
3171
(logxor (m 0 0 0 0) (m 1 1 0 -8) (m 2 2 0 -16) (m 3 3 0 -24)
3172
(m 4 0 0 -32) (m 5 1 0 -40) (m 6 2 0 -48) (m 7 3 0 -56)))
3173
(setf (aref x (+ x-start 1))
3174
(logxor (m 0 0 1 0) (m 1 1 1 -8) (m 2 2 1 -16) (m 3 3 1 -24)
3175
(m 4 0 1 -32) (m 5 1 1 -40) (m 6 2 1 -48) (m 7 3 1 -56)))
3176
(setf (aref x (+ x-start 2))
3177
(logxor (m 0 0 2 0) (m 1 1 2 -8) (m 2 2 2 -16) (m 3 3 2 -24)
3178
(m 4 0 2 -32) (m 5 1 2 -40) (m 6 2 2 -48) (m 7 3 2 -56)))
3179
(setf (aref x (+ x-start 3))
3180
(logxor (m 0 0 3 0) (m 1 1 3 -8) (m 2 2 3 -16) (m 3 3 3 -24)
3181
(m 4 0 3 -32) (m 5 1 3 -40) (m 6 2 3 -48) (m 7 3 3 -56)))
3182
(setf (aref x (+ x-start 4))
3183
(logxor (m 0 0 4 0) (m 1 1 4 -8) (m 2 2 4 -16) (m 3 3 4 -24)
3184
(m 4 0 4 -32) (m 5 1 4 -40) (m 6 2 4 -48) (m 7 3 4 -56)))
3185
(setf (aref x (+ x-start 5))
3186
(logxor (m 0 0 5 0) (m 1 1 5 -8) (m 2 2 5 -16) (m 3 3 5 -24)
3187
(m 4 0 5 -32) (m 5 1 5 -40) (m 6 2 5 -48) (m 7 3 5 -56)))
3188
(setf (aref x (+ x-start 6))
3189
(logxor (m 0 0 6 0) (m 1 1 6 -8) (m 2 2 6 -16) (m 3 3 6 -24)
3190
(m 4 0 6 -32) (m 5 1 6 -40) (m 6 2 6 -48) (m 7 3 6 -56)))
3191
(setf (aref x (+ x-start 7))
3192
(logxor (m 0 0 7 0) (m 1 1 7 -8) (m 2 2 7 -16) (m 3 3 7 -24)
3193
(m 4 0 7 -32) (m 5 1 7 -40) (m 6 2 7 -48) (m 7 3 7 -56))))
3196
(declaim (inline kalyna-ig512))
3197
(defun kalyna-ig512 (x y k k-start)
3198
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
3199
(type (integer 0 152) k-start)
3200
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
3201
(macrolet ((m (a b c)
3202
`(aref +kalyna-it+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
3204
(logxor (aref k (+ k-start 0))
3205
(m 0 0 0) (m 1 1 -8) (m 2 2 -16) (m 3 3 -24)
3206
(m 4 4 -32) (m 5 5 -40) (m 6 6 -48) (m 7 7 -56)))
3208
(logxor (aref k (+ k-start 1))
3209
(m 0 1 0) (m 1 2 -8) (m 2 3 -16) (m 3 4 -24)
3210
(m 4 5 -32) (m 5 6 -40) (m 6 7 -48) (m 7 0 -56)))
3212
(logxor (aref k (+ k-start 2))
3213
(m 0 2 0) (m 1 3 -8) (m 2 4 -16) (m 3 5 -24)
3214
(m 4 6 -32) (m 5 7 -40) (m 6 0 -48) (m 7 1 -56)))
3216
(logxor (aref k (+ k-start 3))
3217
(m 0 3 0) (m 1 4 -8) (m 2 5 -16) (m 3 6 -24)
3218
(m 4 7 -32) (m 5 0 -40) (m 6 1 -48) (m 7 2 -56)))
3220
(logxor (aref k (+ k-start 4))
3221
(m 0 4 0) (m 1 5 -8) (m 2 6 -16) (m 3 7 -24)
3222
(m 4 0 -32) (m 5 1 -40) (m 6 2 -48) (m 7 3 -56)))
3224
(logxor (aref k (+ k-start 5))
3225
(m 0 5 0) (m 1 6 -8) (m 2 7 -16) (m 3 0 -24)
3226
(m 4 1 -32) (m 5 2 -40) (m 6 3 -48) (m 7 4 -56)))
3228
(logxor (aref k (+ k-start 6))
3229
(m 0 6 0) (m 1 7 -8) (m 2 0 -16) (m 3 1 -24)
3230
(m 4 2 -32) (m 5 3 -40) (m 6 4 -48) (m 7 5 -56)))
3232
(logxor (aref k (+ k-start 7))
3233
(m 0 7 0) (m 1 0 -8) (m 2 1 -16) (m 3 2 -24)
3234
(m 4 3 -32) (m 5 4 -40) (m 6 5 -48) (m 7 6 -56))))
3237
(declaim (inline kalyna-igl512))
3238
(defun kalyna-igl512 (x y k k-start)
3239
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
3240
(type (integer 0 152) k-start)
3241
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
3242
(macrolet ((m (a b c d)
3243
`(mod64ash (aref +kalyna-is+
3245
(logand (mod64ash (aref x ,b) ,c) #xff))
3248
(mod64- (logxor (m 0 0 0 0) (m 1 1 -8 8) (m 2 2 -16 16) (m 3 3 -24 24)
3249
(m 0 4 -32 32) (m 1 5 -40 40) (m 2 6 -48 48) (m 3 7 -56 56))
3250
(aref k (+ k-start 0))))
3252
(mod64- (logxor (m 0 1 0 0) (m 1 2 -8 8) (m 2 3 -16 16) (m 3 4 -24 24)
3253
(m 0 5 -32 32) (m 1 6 -40 40) (m 2 7 -48 48) (m 3 0 -56 56))
3254
(aref k (+ k-start 1))))
3256
(mod64- (logxor (m 0 2 0 0) (m 1 3 -8 8) (m 2 4 -16 16) (m 3 5 -24 24)
3257
(m 0 6 -32 32) (m 1 7 -40 40) (m 2 0 -48 48) (m 3 1 -56 56))
3258
(aref k (+ k-start 2))))
3260
(mod64- (logxor (m 0 3 0 0) (m 1 4 -8 8) (m 2 5 -16 16) (m 3 6 -24 24)
3261
(m 0 7 -32 32) (m 1 0 -40 40) (m 2 1 -48 48) (m 3 2 -56 56))
3262
(aref k (+ k-start 3))))
3264
(mod64- (logxor (m 0 4 0 0) (m 1 5 -8 8) (m 2 6 -16 16) (m 3 7 -24 24)
3265
(m 0 0 -32 32) (m 1 1 -40 40) (m 2 2 -48 48) (m 3 3 -56 56))
3266
(aref k (+ k-start 4))))
3268
(mod64- (logxor (m 0 5 0 0) (m 1 6 -8 8) (m 2 7 -16 16) (m 3 0 -24 24)
3269
(m 0 1 -32 32) (m 1 2 -40 40) (m 2 3 -48 48) (m 3 4 -56 56))
3270
(aref k (+ k-start 5))))
3272
(mod64- (logxor (m 0 6 0 0) (m 1 7 -8 8) (m 2 0 -16 16) (m 3 1 -24 24)
3273
(m 0 2 -32 32) (m 1 3 -40 40) (m 2 4 -48 48) (m 3 5 -56 56))
3274
(aref k (+ k-start 6))))
3276
(mod64- (logxor (m 0 7 0 0) (m 1 0 -8 8) (m 2 1 -16 16) (m 3 2 -24 24)
3277
(m 0 3 -32 32) (m 1 4 -40 40) (m 2 5 -48 48) (m 3 6 -56 56))
3278
(aref k (+ k-start 7)))))
3281
(declaim (inline kalyna-g512))
3282
(defun kalyna-g512 (x y k k-start)
3283
(declare (type (simple-array (unsigned-byte 64) (*)) x y k)
3284
(type (integer 0 152) k-start)
3285
(optimize (speed 3) (space 0) (debug 0) (safety 0)))
3286
(macrolet ((m (a b c)
3287
`(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff))))
3289
(logxor (aref k (+ k-start 0))
3290
(m 0 0 0) (m 1 7 -8) (m 2 6 -16) (m 3 5 -24)
3291
(m 4 4 -32) (m 5 3 -40) (m 6 2 -48) (m 7 1 -56)))
3293
(logxor (aref k (+ k-start 1))
3294
(m 0 1 0) (m 1 0 -8) (m 2 7 -16) (m 3 6 -24)
3295
(m 4 5 -32) (m 5 4 -40) (m 6 3 -48) (m 7 2 -56)))
3297
(logxor (aref k (+ k-start 2))
3298
(m 0 2 0) (m 1 1 -8) (m 2 0 -16) (m 3 7 -24)
3299
(m 4 6 -32) (m 5 5 -40) (m 6 4 -48) (m 7 3 -56)))
3301
(logxor (aref k (+ k-start 3))
3302
(m 0 3 0) (m 1 2 -8) (m 2 1 -16) (m 3 0 -24)
3303
(m 4 7 -32) (m 5 6 -40) (m 6 5 -48) (m 7 4 -56)))
3305
(logxor (aref k (+ k-start 4))
3306
(m 0 4 0) (m 1 3 -8) (m 2 2 -16) (m 3 1 -24)
3307
(m 4 0 -32) (m 5 7 -40) (m 6 6 -48) (m 7 5 -56)))
3309
(logxor (aref k (+ k-start 5))
3310
(m 0 5 0) (m 1 4 -8) (m 2 3 -16) (m 3 2 -24)
3311
(m 4 1 -32) (m 5 0 -40) (m 6 7 -48) (m 7 6 -56)))
3313
(logxor (aref k (+ k-start 6))
3314
(m 0 6 0) (m 1 5 -8) (m 2 4 -16) (m 3 3 -24)
3315
(m 4 2 -32) (m 5 1 -40) (m 6 0 -48) (m 7 7 -56)))
3317
(logxor (aref k (+ k-start 7))
3318
(m 0 7 0) (m 1 6 -8) (m 2 5 -16) (m 3 4 -24)
3319
(m 4 3 -32) (m 5 2 -40) (m 6 1 -48) (m 7 0 -56))))
3322
(defclass kalyna512 (cipher 64-byte-block-mixin)
3323
((encryption-round-keys :accessor encryption-round-keys
3324
:initform (make-array 152 :element-type '(unsigned-byte 64))
3325
:type (simple-array (unsigned-byte 64) (152)))
3326
(decryption-round-keys :accessor decryption-round-keys
3327
:initform (make-array 152 :element-type '(unsigned-byte 64))
3328
:type (simple-array (unsigned-byte 64) (152)))
3329
(n-rounds :accessor n-rounds)))
3331
(defmethod schedule-key ((cipher kalyna512) key)
3332
(let ((encryption-round-keys (encryption-round-keys cipher))
3333
(decryption-round-keys (decryption-round-keys cipher))
3334
(key (make-array 8 :element-type '(unsigned-byte 64)
3335
:initial-contents (list (ub64ref/le key 0)
3342
(ub64ref/le key 56))))
3343
(ks (make-array 8 :element-type '(unsigned-byte 64)))
3344
(ksc (make-array 8 :element-type '(unsigned-byte 64)))
3345
(t1 (make-array 8 :element-type '(unsigned-byte 64)))
3346
(t2 (make-array 8 :element-type '(unsigned-byte 64)))
3347
(k (make-array 8 :element-type '(unsigned-byte 64)))
3348
(constant #x0001000100010001))
3349
(declare (type (simple-array (unsigned-byte 64) (152)) encryption-round-keys)
3350
(type (simple-array (unsigned-byte 64) (152)) decryption-round-keys)
3351
(type (simple-array (unsigned-byte 64) (8)) key ks ksc t1 t2 k)
3352
(dynamic-extent key ks ksc t1 t2 k)
3353
(type (unsigned-byte 64) constant))
3354
(setf (n-rounds cipher) 18)
3356
(setf (aref t1 0) (/ (+ 512 512 64) 64))
3357
(kalyna-add-key 8 t1 0 t2 key)
3358
(kalyna-g512 t2 t1 key 0)
3359
(kalyna-gl512 t1 t2 0 key 0)
3360
(kalyna-g0512 t2 ks)
3364
(kalyna-add-constant 8 ks ksc constant)
3365
(kalyna-add-key 8 k 0 t2 ksc)
3366
(kalyna-g512 t2 t1 ksc 0)
3367
(kalyna-gl512 t1 encryption-round-keys 0 ksc 0)
3368
(kalyna-make-odd-key 8 encryption-round-keys 0 encryption-round-keys 8)
3372
(kalyna-swap-blocks 8 k)
3373
(setf constant (mod64ash constant 1))
3374
(kalyna-add-constant 8 ks ksc constant)
3375
(kalyna-add-key 8 k 0 t2 ksc)
3376
(kalyna-g512 t2 t1 ksc 0)
3377
(kalyna-gl512 t1 encryption-round-keys n ksc 0)
3378
(kalyna-make-odd-key 8
3379
encryption-round-keys n
3380
encryption-round-keys (+ n 8))))
3391
(kalyna-swap-blocks 8 k)
3392
(setf constant (mod64ash constant 1))
3393
(kalyna-add-constant 8 ks ksc constant)
3394
(kalyna-add-key 8 k 0 t2 ksc)
3395
(kalyna-g512 t2 t1 ksc 0)
3396
(kalyna-gl512 t1 encryption-round-keys 144 ksc 0)
3398
(replace decryption-round-keys encryption-round-keys)
3399
(loop for n from 136 downto 8 by 8 do
3400
(kalyna-imc512 decryption-round-keys n))
3403
(define-block-encryptor kalyna512 64
3404
(let ((encryption-round-keys (encryption-round-keys context))
3405
(t1 (make-array 8 :element-type '(unsigned-byte 64)))
3406
(t2 (make-array 8 :element-type '(unsigned-byte 64))))
3407
(declare (type (simple-array (unsigned-byte 64) (152)) encryption-round-keys)
3408
(type (simple-array (unsigned-byte 64) (8)) t1 t2)
3409
(dynamic-extent t1 t2))
3410
(setf (aref t2 0) (ub64ref/le plaintext plaintext-start)
3411
(aref t2 1) (ub64ref/le plaintext (+ plaintext-start 8))
3412
(aref t2 2) (ub64ref/le plaintext (+ plaintext-start 16))
3413
(aref t2 3) (ub64ref/le plaintext (+ plaintext-start 24))
3414
(aref t2 4) (ub64ref/le plaintext (+ plaintext-start 32))
3415
(aref t2 5) (ub64ref/le plaintext (+ plaintext-start 40))
3416
(aref t2 6) (ub64ref/le plaintext (+ plaintext-start 48))
3417
(aref t2 7) (ub64ref/le plaintext (+ plaintext-start 56)))
3418
(kalyna-add-key 8 t2 0 t1 encryption-round-keys)
3419
(kalyna-g512 t1 t2 encryption-round-keys 8)
3420
(kalyna-g512 t2 t1 encryption-round-keys 16)
3421
(kalyna-g512 t1 t2 encryption-round-keys 24)
3422
(kalyna-g512 t2 t1 encryption-round-keys 32)
3423
(kalyna-g512 t1 t2 encryption-round-keys 40)
3424
(kalyna-g512 t2 t1 encryption-round-keys 48)
3425
(kalyna-g512 t1 t2 encryption-round-keys 56)
3426
(kalyna-g512 t2 t1 encryption-round-keys 64)
3427
(kalyna-g512 t1 t2 encryption-round-keys 72)
3428
(kalyna-g512 t2 t1 encryption-round-keys 80)
3429
(kalyna-g512 t1 t2 encryption-round-keys 88)
3430
(kalyna-g512 t2 t1 encryption-round-keys 96)
3431
(kalyna-g512 t1 t2 encryption-round-keys 104)
3432
(kalyna-g512 t2 t1 encryption-round-keys 112)
3433
(kalyna-g512 t1 t2 encryption-round-keys 120)
3434
(kalyna-g512 t2 t1 encryption-round-keys 128)
3435
(kalyna-g512 t1 t2 encryption-round-keys 136)
3436
(kalyna-gl512 t2 t1 0 encryption-round-keys 144)
3437
(setf (ub64ref/le ciphertext ciphertext-start) (aref t1 0)
3438
(ub64ref/le ciphertext (+ ciphertext-start 8)) (aref t1 1)
3439
(ub64ref/le ciphertext (+ ciphertext-start 16)) (aref t1 2)
3440
(ub64ref/le ciphertext (+ ciphertext-start 24)) (aref t1 3)
3441
(ub64ref/le ciphertext (+ ciphertext-start 32)) (aref t1 4)
3442
(ub64ref/le ciphertext (+ ciphertext-start 40)) (aref t1 5)
3443
(ub64ref/le ciphertext (+ ciphertext-start 48)) (aref t1 6)
3444
(ub64ref/le ciphertext (+ ciphertext-start 56)) (aref t1 7))
3447
(define-block-decryptor kalyna512 64
3448
(let ((decryption-round-keys (decryption-round-keys context))
3449
(t1 (make-array 8 :element-type '(unsigned-byte 64)))
3450
(t2 (make-array 8 :element-type '(unsigned-byte 64))))
3451
(declare (type (simple-array (unsigned-byte 64) (152)) decryption-round-keys)
3452
(type (simple-array (unsigned-byte 64) (8)) t1 t2)
3453
(dynamic-extent t1 t2))
3454
(setf (aref t2 0) (ub64ref/le ciphertext ciphertext-start)
3455
(aref t2 1) (ub64ref/le ciphertext (+ ciphertext-start 8))
3456
(aref t2 2) (ub64ref/le ciphertext (+ ciphertext-start 16))
3457
(aref t2 3) (ub64ref/le ciphertext (+ ciphertext-start 24))
3458
(aref t2 4) (ub64ref/le ciphertext (+ ciphertext-start 32))
3459
(aref t2 5) (ub64ref/le ciphertext (+ ciphertext-start 40))
3460
(aref t2 6) (ub64ref/le ciphertext (+ ciphertext-start 48))
3461
(aref t2 7) (ub64ref/le ciphertext (+ ciphertext-start 56)))
3462
(kalyna-sub-key 8 t2 t1 decryption-round-keys 144)
3463
(kalyna-imc512 t1 0)
3464
(kalyna-ig512 t1 t2 decryption-round-keys 136)
3465
(kalyna-ig512 t2 t1 decryption-round-keys 128)
3466
(kalyna-ig512 t1 t2 decryption-round-keys 120)
3467
(kalyna-ig512 t2 t1 decryption-round-keys 112)
3468
(kalyna-ig512 t1 t2 decryption-round-keys 104)
3469
(kalyna-ig512 t2 t1 decryption-round-keys 96)
3470
(kalyna-ig512 t1 t2 decryption-round-keys 88)
3471
(kalyna-ig512 t2 t1 decryption-round-keys 80)
3472
(kalyna-ig512 t1 t2 decryption-round-keys 72)
3473
(kalyna-ig512 t2 t1 decryption-round-keys 64)
3474
(kalyna-ig512 t1 t2 decryption-round-keys 56)
3475
(kalyna-ig512 t2 t1 decryption-round-keys 48)
3476
(kalyna-ig512 t1 t2 decryption-round-keys 40)
3477
(kalyna-ig512 t2 t1 decryption-round-keys 32)
3478
(kalyna-ig512 t1 t2 decryption-round-keys 24)
3479
(kalyna-ig512 t2 t1 decryption-round-keys 16)
3480
(kalyna-ig512 t1 t2 decryption-round-keys 8)
3481
(kalyna-igl512 t2 t1 decryption-round-keys 0)
3482
(setf (ub64ref/le plaintext plaintext-start) (aref t1 0)
3483
(ub64ref/le plaintext (+ plaintext-start 8)) (aref t1 1)
3484
(ub64ref/le plaintext (+ plaintext-start 16)) (aref t1 2)
3485
(ub64ref/le plaintext (+ plaintext-start 24)) (aref t1 3)
3486
(ub64ref/le plaintext (+ plaintext-start 32)) (aref t1 4)
3487
(ub64ref/le plaintext (+ plaintext-start 40)) (aref t1 5)
3488
(ub64ref/le plaintext (+ plaintext-start 48)) (aref t1 6)
3489
(ub64ref/le plaintext (+ plaintext-start 56)) (aref t1 7))
3492
(defcipher kalyna512
3493
(:encrypt-function kalyna512-encrypt-block)
3494
(:decrypt-function kalyna512-decrypt-block)
3496
(:key-length (:fixed 64)))