1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
|
Delivery-date: Wed, 23 Oct 2024 19:07:06 -0700
Received: from mail-yb1-f187.google.com ([209.85.219.187])
by mail.fairlystable.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
(Exim 4.94.2)
(envelope-from <bitcoindev+bncBDK6LL4DT4ARBQOX424AMGQEK4L6F4Q@googlegroups.com>)
id 1t3nFh-00023X-Rp
for bitcoindev@gnusha.org; Wed, 23 Oct 2024 19:07:06 -0700
Received: by mail-yb1-f187.google.com with SMTP id 3f1490d57ef6-e0b8fa94718sf990357276.0
for <bitcoindev@gnusha.org>; Wed, 23 Oct 2024 19:07:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=googlegroups.com; s=20230601; t=1729735619; x=1730340419; darn=gnusha.org;
h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post
:list-id:mailing-list:precedence:x-original-sender:mime-version
:subject:message-id:to:from:date:sender:from:to:cc:subject:date
:message-id:reply-to;
bh=AUAp6IzeH4d2W9fDj3Lix4bhOZrQEeG0/Oq1k5rT5Ys=;
b=aTbaqH1D8P/+O8q0RuqvpUVYtCj5ULLddRxKETGdXL9qyrH0ACqcgG7+wAvn2SxcQK
Oyqr8HESJCElcGvddcNjJr/fzMakgcj0rfNnqhLhSxV8XJpbfjOCJcyq0pOnba+OftGU
qSYdnLX2nJVSIMH1NO7NIcU8XOA6WjzfT+i6cAWhmZ6znsVlAxhcsrto4ATiG9gkMJtu
uttSrBGipSGJ+/jN26ZSCIiX9zXxiAuXRGBpNV0NheOqiMkNyS9aTDHqMq7Bx5To0fy9
hG0iJ8p7WRhlCzngqRopxZ+nSsuh8yvfydwSbTEgZj/bVim+JWX4VXuxQ6vM/kGqEa1v
qncg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1729735619; x=1730340419; darn=gnusha.org;
h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post
:list-id:mailing-list:precedence:x-original-sender:mime-version
:subject:message-id:to:from:date:from:to:cc:subject:date:message-id
:reply-to;
bh=AUAp6IzeH4d2W9fDj3Lix4bhOZrQEeG0/Oq1k5rT5Ys=;
b=XIaTACXmkHqBeMIxTsgwllwTBp3L3JTrslsO2Fp8y/vtctxOklf4ZIGcqlGXmGy5id
SAoBSFQkBGFC8vlXy+X3Eqr8VVrCUq1BbI4oaNZAWENNLusBbw8H66eIdYEMgswag1mT
XP+MMDCX8tvycPHvssUnVYnOXahA5xsboJF/mc6mWo04wMZ4DYYmULvrFEchN7ftUqBb
fUffheaTmWjXsOcwWviI7WCockq9/sYCR+i8qQJqOSnpVZkYnCeM2ZXRXk2e01lN7XuJ
iSBOP0oJb3vPJzFY8YqKtpejt+5D9seFoe0cg1DJxioir1Hy/OftDLv3wQdYDkoEORmv
+E5g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1729735619; x=1730340419;
h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post
:list-id:mailing-list:precedence:x-original-sender:mime-version
:subject:message-id:to:from:date:x-beenthere:x-gm-message-state
:sender:from:to:cc:subject:date:message-id:reply-to;
bh=AUAp6IzeH4d2W9fDj3Lix4bhOZrQEeG0/Oq1k5rT5Ys=;
b=HYLOJNMgU0xpfn0VCoiZZ1HLSe+xnHI8839T04LP4QCfDiyXx2NjNsQdfrNFnKb4gx
rBNyrmhUkuhziWCdSUr0SYa6X0zUlArQT16J7cpgDr09AaS1crwvaCS4XtG+zKP6mghA
y2HZ6WuAmoFan9/Q+3CezuHc45QcTnpCjniDSBD+R1fhlPHY23rx+CUCLrxD3yzS1Gbs
D6d80NQIjOJG9QsQ/B5/Cnhj+ac/GsugaMsAPeeKSETxoOWbbobGH+rREFYtqdZ1FD8N
BC9gLIipL3jOPxgkleQqJAo93i6dFtwVyD/h3JxnFiDsqF7kHJnc9lvCVzRSXAYYTrr5
Qrdg==
Sender: bitcoindev@googlegroups.com
X-Forwarded-Encrypted: i=1; AJvYcCWioiusECZx+k0jGSvt0oDEVMz5MV93PX4qJXRXtWyWAa8+t/6CHeI2h4+j0lfYU1zBMILLyogiMOb4@gnusha.org
X-Gm-Message-State: AOJu0YzJjdebgVW3UB8z2y1grwJxJ1KzzknGJ6mEVon5YHa8sKlGtcqP
nTjbm3O1CMALScdAu3p4L94a16senKPAwfOijJ5Y77dvxu6+qGl4
X-Google-Smtp-Source: AGHT+IGy+lfdaLaiqlXsWimQ1csXgm8TrepP8mC0NDtC639uIHr5ajLgYT2kf85S3pbbo2UkyPXz/Q==
X-Received: by 2002:a05:6902:1b0c:b0:e28:ecf0:f880 with SMTP id 3f1490d57ef6-e2e3a65071cmr4625823276.23.1729735619268;
Wed, 23 Oct 2024 19:06:59 -0700 (PDT)
X-BeenThere: bitcoindev@googlegroups.com
Received: by 2002:a05:6902:188c:b0:e1c:eeec:3175 with SMTP id
3f1490d57ef6-e2e4a77e8fals697764276.1.-pod-prod-02-us; Wed, 23 Oct 2024
19:06:57 -0700 (PDT)
X-Received: by 2002:a05:690c:4087:b0:6e5:bca9:cb8f with SMTP id 00721157ae682-6e7f0fcc42emr38450437b3.38.1729735616907;
Wed, 23 Oct 2024 19:06:56 -0700 (PDT)
Received: by 2002:a05:690c:f8b:b0:6e2:1e5e:a1e1 with SMTP id 00721157ae682-6e7ef02e532ms7b3;
Wed, 23 Oct 2024 18:51:59 -0700 (PDT)
X-Received: by 2002:a05:690c:dc4:b0:6e2:11b7:f681 with SMTP id 00721157ae682-6e85814c19emr5758027b3.6.1729734718298;
Wed, 23 Oct 2024 18:51:58 -0700 (PDT)
Date: Wed, 23 Oct 2024 18:51:57 -0700 (PDT)
From: Andrew Toth <andrewstoth@gmail.com>
To: Bitcoin Development Mailing List <bitcoindev@googlegroups.com>
Message-Id: <b0f40eab-42f3-4153-8083-b455fbd17e19n@googlegroups.com>
Subject: [bitcoindev] BIP: DLEQ
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_22384_485612025.1729734717967"
X-Original-Sender: andrewstoth@gmail.com
Precedence: list
Mailing-list: list bitcoindev@googlegroups.com; contact bitcoindev+owners@googlegroups.com
List-ID: <bitcoindev.googlegroups.com>
X-Google-Group-Id: 786775582512
List-Post: <https://groups.google.com/group/bitcoindev/post>, <mailto:bitcoindev@googlegroups.com>
List-Help: <https://groups.google.com/support/>, <mailto:bitcoindev+help@googlegroups.com>
List-Archive: <https://groups.google.com/group/bitcoindev
List-Subscribe: <https://groups.google.com/group/bitcoindev/subscribe>, <mailto:bitcoindev+subscribe@googlegroups.com>
List-Unsubscribe: <mailto:googlegroups-manage+786775582512+unsubscribe@googlegroups.com>,
<https://groups.google.com/group/bitcoindev/subscribe>
X-Spam-Score: -0.5 (/)
------=_Part_22384_485612025.1729734717967
Content-Type: multipart/alternative;
boundary="----=_Part_22385_1372994977.1729734717967"
------=_Part_22385_1372994977.1729734717967
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
=20
This BIP specifies a standard way to generate and verify DLEQ proofs. This=
=20
is motivated by sending to silent payments in PSBTs. However, there are=20
also other uses where DLEQs could be useful, so it would be good to have=20
this BIP for others to reference.
This is inspired by=20
https://github.com/discreetlogcontracts/dlcspecs/blob/master/ECDSA-adaptor.=
md#proof-of-discrete-logarithm-equality,=20
but is a little more specific.
There is an implementation of that already at=20
https://github.com/BlockstreamResearch/secp256k1-zkp/blob/master/src/module=
s/ecdsa_adaptor/dleq_impl.h,=20
which this BIP attempts to be compatible with.
Pull request here https://github.com/bitcoin/bips/pull/1689
<pre>
BIP: ?
Title: Discrete Log Equality Proofs over secp256k1
Author: Andrew Toth <andrewstoth@gmail.com>
Ruben Somsen <rsomsen@gmail.com>
Comments-URI: TBD
Status: Draft
Type: Standards Track
License: BSD-2-Clause
Created: 2024-06-29
Post-History: TBD
</pre>
=3D=3D Introduction =3D=3D
=3D=3D=3D Abstract =3D=3D=3D
This document proposes a standard for 64-byte zero-knowledge ''discrete=20
logarithm equality proofs'' (DLEQ proofs) over the elliptic curve=20
''secp256k1''. For given elliptic curve points ''A'', ''B'', and ''C'', the=
=20
prover proves knowledge of a scalar ''a'' such that ''A =3D a=E2=8B=85G'' a=
nd ''C =3D=20
a=E2=8B=85B'' without revealing anything about ''a''. This can, for instanc=
e, be=20
useful in ECDH: if ''A'' and ''B'' are ECDH public keys, and ''C'' is their=
=20
ECDH shared secret computed as ''C =3D a=E2=8B=85B'', the proof establishes=
that the=20
same secret key ''a'' is used for generating both ''A'' and ''C'' without=
=20
revealing ''a''.
=3D=3D=3D Copyright =3D=3D=3D
This document is licensed under the 2-clause BSD license.
=3D=3D=3D Motivation =3D=3D=3D
[https://github.com/bitcoin/bips/blob/master/bip-0352.mediawiki#specificati=
on=20
BIP352] requires senders to compute output scripts using ECDH shared=20
secrets from the same secret keys used to sign the inputs. Generating an=20
incorrect signature will produce an invalid transaction that will be=20
rejected by consensus. An incorrectly generated output script can still be=
=20
consensus-valid, meaning funds may be lost if it gets broadcast.
By producing a DLEQ proof for the generated ECDH shared secrets, the=20
signing entity can prove to other entities that the output scripts have=20
been generated correctly without revealing the private keys.
=3D=3D Specification =3D=3D
All conventions and notations are used as defined in=20
[https://github.com/bitcoin/bips/blob/master/bip-0327.mediawiki#user-conten=
t-Notation=20
BIP327].
=3D=3D=3D DLEQ Proof Generation =3D=3D=3D
Input:
* The secret key ''a'': a 256-bit unsigned integer
* The public key ''B'': a point on the curve
* Auxiliary random data ''r'': a 32-byte array
The algorithm ''Prove(a, B, r)'' is defined as:
* Fail if ''a =3D 0'' or ''a ≥ n''.
* Fail if ''is_infinite(B)''.
* Let ''A =3D a=E2=8B=85G''.
* Let ''C =3D a=E2=8B=85B''.
* Let ''t'' be the byte-wise xor of ''bytes(32, a)'' and=20
''hash<sub>BIP?/aux</sub>(r)''.
* Let ''rand =3D hash<sub>DLEQ</sub>(t || cbytes(A) || cytes(C))''.
* Let ''k =3D int(rand) mod n''.
* Fail if ''k =3D 0''.
* Let ''R<sub>1</sub> =3D k=E2=8B=85G''.
* Let ''R<sub>2</sub> =3D k=E2=8B=85B''.
* Let ''e =3D int(hash<sub>DLEQ</sub>(cbytes(A) || cbytes(B) || cbytes(C) |=
|=20
cbytes(R<sub>1</sub>) || cbytes(R<sub>2</sub>)))''.
* Let ''proof =3D bytes(32, e) || bytes(32, (k + ea) mod n)''.
* If ''VerifyProof(A, B, C, proof)'' (see below) returns failure, abort.
* Return the proof ''proof''.
=3D=3D=3D DLEQ Proof Verification =3D=3D=3D
Input:
* The public key of the secret key used in the proof generation ''A'': a=20
point on the curve
* The public key used in the proof generation ''B'': a point on the curve
* The result of multiplying the secret and public keys used in the proof=20
generation ''C'': a point on the curve
* A proof ''proof'': a 64-byte array
The algorithm ''VerifyProof(A, B, C, proof)'' is defined as:
* Let ''e =3D int(proof[0:32])''.
* Let ''s =3D int(proof[32:64])''; fail if ''s ≥ n''.
* Let ''R<sub>1</sub> =3D s=E2=8B=85G - e=E2=8B=85A''.
* Fail if ''is_infinite(R<sub>1</sub>)''.
* Fail if ''not has_even_y(R<sub>1</sub>)''.
* Let ''R<sub>2</sub> =3D s=E2=8B=85B - e=E2=8B=85C''.
* Fail if ''is_infinite(R<sub>2</sub>)''.
* Fail if ''not has_even_y(R<sub>2</sub>)''.
* Fail if ''e =E2=89=A0 int(hash<sub>BIP?/DLEQ</sub>(cbytes(A) || cbytes(B)=
||=20
cbytes(C) || cbytes(R<sub>1</sub>) || cbytes(R<sub>2</sub>)))''.
* Return success iff no failure occurred before reaching this point.
=3D=3D Test Vectors and Reference Code =3D=3D
TBD
=3D=3D Changelog =3D=3D
TBD
=3D=3D Footnotes =3D=3D
<references />
=3D=3D Acknowledgements =3D=3D
TBD
--=20
You received this message because you are subscribed to the Google Groups "=
Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to bitcoindev+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/=
b0f40eab-42f3-4153-8083-b455fbd17e19n%40googlegroups.com.
------=_Part_22385_1372994977.1729734717967
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div>
<div>
=20
<span>
<div>
<p dir=3D"auto">This BIP specifies a standard way to generate and=20
verify DLEQ proofs. This is motivated by sending to silent payments in=20
PSBTs. However, there are also other uses where DLEQs could be useful,=20
so it would be good to have this BIP for others to reference.</p>
<p dir=3D"auto">This is inspired by <a href=3D"https://github.com/discreetl=
ogcontracts/dlcspecs/blob/master/ECDSA-adaptor.md#proof-of-discrete-logarit=
hm-equality">https://github.com/discreetlogcontracts/dlcspecs/blob/master/E=
CDSA-adaptor.md#proof-of-discrete-logarithm-equality</a>, but is a little m=
ore specific.<br />
There is an implementation of that already at <a href=3D"https://github.com=
/BlockstreamResearch/secp256k1-zkp/blob/master/src/modules/ecdsa_adaptor/dl=
eq_impl.h">https://github.com/BlockstreamResearch/secp256k1-zkp/blob/master=
/src/modules/ecdsa_adaptor/dleq_impl.h</a>, which this BIP attempts to be c=
ompatible with.</p><p dir=3D"auto">Pull request here https://github.com/bit=
coin/bips/pull/1689</p><p dir=3D"auto"><br /></p><pre><br />=C2=A0 BI=
P: ?<br />=C2=A0 Title: Discrete Log Equality Proofs over secp256k1<br />=
=C2=A0 Author: Andrew Toth <andrewstoth@gmail.com><br />=C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 Ruben Somsen <rsomsen@gmail.com><br />=C2=A0 Co=
mments-URI: TBD<br />=C2=A0 Status: Draft<br />=C2=A0 Type: Standards Track=
<br />=C2=A0 License: BSD-2-Clause<br />=C2=A0 Created: 2024-06-29<br />=C2=
=A0 Post-History: TBD<br /></pre><br /><br />=3D=3D Introduction =3D=
=3D<br /><br />=3D=3D=3D Abstract =3D=3D=3D<br /><br />This document propos=
es a standard for 64-byte zero-knowledge ''discrete logarithm equality proo=
fs'' (DLEQ proofs) over the elliptic curve ''secp256k1''. For given ellipti=
c curve points ''A'', ''B'', and ''C'', the prover proves knowledge of a sc=
alar ''a'' such that ''A =3D a=E2=8B=85G'' and ''C =3D a=E2=8B=85B'' withou=
t revealing anything about ''a''. This can, for instance, be useful in ECDH=
: if ''A'' and ''B'' are ECDH public keys, and ''C'' is their ECDH shared s=
ecret computed as ''C =3D a=E2=8B=85B'', the proof establishes that the sam=
e secret key ''a'' is used for generating both ''A'' and ''C'' without reve=
aling ''a''.<br /><br />=3D=3D=3D Copyright =3D=3D=3D<br /><br />This docum=
ent is licensed under the 2-clause BSD license.<br /><br />=3D=3D=3D Motiva=
tion =3D=3D=3D<br /><br />[https://github.com/bitcoin/bips/blob/master/bip-=
0352.mediawiki#specification BIP352] requires senders to compute output scr=
ipts using ECDH shared secrets from the same secret keys used to sign the i=
nputs. Generating an incorrect signature will produce an invalid transactio=
n that will be rejected by consensus. An incorrectly generated output scrip=
t can still be consensus-valid, meaning funds may be lost if it gets broadc=
ast.<br />By producing a DLEQ proof for the generated ECDH shared secrets, =
the signing entity can prove to other entities that the output scripts have=
been generated correctly without revealing the private keys.<br /><br />=
=3D=3D Specification =3D=3D<br /><br />All conventions and notations are us=
ed as defined in [https://github.com/bitcoin/bips/blob/master/bip-0327.medi=
awiki#user-content-Notation BIP327].<br /><br />=3D=3D=3D DLEQ Proof Genera=
tion =3D=3D=3D<br /><br />Input:<br />* The secret key ''a'': a 256-bit uns=
igned integer<br />* The public key ''B'': a point on the curve<br />* Auxi=
liary random data ''r'': a 32-byte array<br /><br />The algorithm ''Prove(a=
, B, r)'' is defined as:<br />* Fail if ''a =3D 0'' or ''a &ge; n''.<br=
/>* Fail if ''is_infinite(B)''.<br />* Let ''A =3D a=E2=8B=85G''.<br />* L=
et ''C =3D a=E2=8B=85B''.<br />* Let ''t'' be the byte-wise xor of ''bytes(=
32, a)'' and ''hash<sub>BIP?/aux</sub>(r)''.<br />* Let ''rand =
=3D hash<sub>DLEQ</sub>(t || cbytes(A) || cytes(C))''.<br />* L=
et ''k =3D int(rand) mod n''.<br />* Fail if ''k =3D 0''.<br />* Let ''R<=
;sub>1</sub> =3D k=E2=8B=85G''.<br />* Let ''R<sub>2</sub=
> =3D k=E2=8B=85B''.<br />* Let ''e =3D int(hash<sub>DLEQ</sub&=
gt;(cbytes(A) || cbytes(B) || cbytes(C) || cbytes(R<sub>1</sub>=
) || cbytes(R<sub>2</sub>)))''.<br />* Let ''proof =3D bytes(32=
, e) || bytes(32, (k + ea) mod n)''.<br />* If ''VerifyProof(A, B, C, proof=
)'' (see below) returns failure, abort.<br />* Return the proof ''proof''.<=
br /><br />=3D=3D=3D DLEQ Proof Verification =3D=3D=3D<br /><br />Input:<br=
/>* The public key of the secret key used in the proof generation ''A'': a=
point on the curve<br />* The public key used in the proof generation ''B'=
': a point on the curve<br />* The result of multiplying the secret and pub=
lic keys used in the proof generation ''C'': a point on the curve<br />* A =
proof ''proof'': a 64-byte array<br /><br />The algorithm ''VerifyProof(A, =
B, C, proof)'' is defined as:<br />* Let ''e =3D int(proof[0:32])''.<br />*=
Let ''s =3D int(proof[32:64])''; fail if ''s &ge; n''.<br />* Let ''R&=
lt;sub>1</sub> =3D s=E2=8B=85G - e=E2=8B=85A''.<br />* Fail if ''i=
s_infinite(R<sub>1</sub>)''.<br />* Fail if ''not has_even_y(R&=
lt;sub>1</sub>)''.<br />* Let ''R<sub>2</sub> =3D s=E2=
=8B=85B - e=E2=8B=85C''.<br />* Fail if ''is_infinite(R<sub>2</sub=
>)''.<br />* Fail if ''not has_even_y(R<sub>2</sub>)''.<br /=
>* Fail if ''e =E2=89=A0 int(hash<sub>BIP?/DLEQ</sub>(cbytes(A)=
|| cbytes(B) || cbytes(C) || cbytes(R<sub>1</sub>) || cbytes(R=
<sub>2</sub>)))''.<br />* Return success iff no failure occurre=
d before reaching this point.<br /><br />=3D=3D Test Vectors and Reference =
Code =3D=3D<br /><br />TBD<br /><br />=3D=3D Changelog =3D=3D<br /><br />TB=
D<br /><br />=3D=3D Footnotes =3D=3D<br /><br /><references /><br /><=
br />=3D=3D Acknowledgements =3D=3D<br /><br />TBD</div>
</span>
=20
</div>
</div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;Bitcoin Development Mailing List" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:bitcoindev+unsubscribe@googlegroups.com">bitcoind=
ev+unsubscribe@googlegroups.com</a>.<br />
To view this discussion visit <a href=3D"https://groups.google.com/d/msgid/=
bitcoindev/b0f40eab-42f3-4153-8083-b455fbd17e19n%40googlegroups.com?utm_med=
ium=3Demail&utm_source=3Dfooter">https://groups.google.com/d/msgid/bitcoind=
ev/b0f40eab-42f3-4153-8083-b455fbd17e19n%40googlegroups.com</a>.<br />
------=_Part_22385_1372994977.1729734717967--
------=_Part_22384_485612025.1729734717967--
|