[Bf-committers] CSG + gcc = problems

Laurence Bourn bf-committers@blender.org
Wed, 18 Feb 2004 12:04:16 +0100


This is a multi-part message in MIME format.

------_=_NextPart_001_01C3F60E.F33B6F77
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Here's the new booleanops.c code.=20

Note, the booleanops_mesh.c (or something like that) stuff will not work =
and should be removed (Never did anything anyway!).

Can you or someone commit those nice changes you made to the intern/csg =
module?

Thanks,
Laurence.

P.s. Managed to fix my computer without reinstall (phew!) crazy conflict =
between cygwin paths and wincvs!



-----Original Message-----
From: bf-committers-admin@blender.org
[mailto:bf-committers-admin@blender.org]On Behalf Of Brecht Van Lommel
Sent: dinsdag 17 februari 2004 19:16
To: bf-commiters
Subject: RE: [Bf-committers] CSG + gcc =3D problems


Hi,

On Tue, 2004-02-17 at 19:06, Kester Maddock wrote:
> This patch looks correct.  See =
http://www.codeguru.com/cpp/tic/tic0201.shtml

Thanks for the link. The explanation is a lot clearer than the c++ book
I've got here.

On Tue, 2004-02-17 at 08:26, Laurence Bourn wrote:
> Dude,
> Respect! Thanks very mush for doing that, pretty impressive for a =
'rookie' if
> I may say so. Your patch looks good to me sprinkling all those =
typenames around
> more reflects my poor programming style. I should really define all =
template
> types and type assumptions by using typedef typename foo::bla bla in =
the
> template declaration instead of using the assumed template type =
directly. One
> other thing is whilst you are correct that vector<>::size_t maps to =
unsigned
> int on most platforms I'm not sure that it's cast in stone. Maybe =
better to
> define a top level typedef for this.=20

Don't know if unsigned int is the standard either. Just got rid of this
to get a better overview of the real errors.

> If you like I can send you the booleanops.c code so that you can see =
it working
> in blender. Unfortunately my windoze development box is seriously ill. =
Not even
> wincvs works anymore after a clean install. Time to reinstall the OS =
on this
> filhy virus ridden piece of junk me thinks.=20

I'd be glad to test it. Good luck with the Windows reinstall.

> Thanks for the Graphite link, i'll definately take a look. Although =
i'm
> considering doing my own implementation just because its a fairly =
interesting
> problem.

Cool, that's the true hackers spirit :).

Cheers,

Brecht

_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://www.blender.org/mailman/listinfo/bf-committers

------_=_NextPart_001_01C3F60E.F33B6F77
Content-Type: application/octet-stream;
	name="booleanops.c"
Content-Transfer-Encoding: base64
Content-Description: booleanops.c
Content-Disposition: attachment;
	filename="booleanops.c"

DQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKioNCiogJElkOiBib29sZWFub3BzLmMsdiAxLjQgMjAw
My8wMy8yNCAxNjowODoxNSB6dXN0ZXIgRXhwICQNCioNCiogKioqKiogQkVHSU4gR1BML0JMIERV
QUwgTElDRU5TRSBCTE9DSyAqKioqKg0KKg0KKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQoqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQoqIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyDQoqIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBUaGUgQmxl
bmRlcg0KKiBGb3VuZGF0aW9uIGFsc28gc2VsbHMgbGljZW5zZXMgZm9yIHVzZSBpbiBwcm9wcmll
dGFyeSBzb2Z0d2FyZSB1bmRlcg0KKiB0aGUgQmxlbmRlciBMaWNlbnNlLiAgU2VlIGh0dHA6Ly93
d3cuYmxlbmRlci5vcmcvQkwvIGZvciBpbmZvcm1hdGlvbg0KKiBhYm91dCB0aGlzLg0KKg0KKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwNCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YNCiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLg0KKg0KKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLA0KKiBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4N
CioNCiogVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgYnkgTmFO
IEhvbGRpbmcgQlYuDQoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoqDQoqIFRoZSBPcmlnaW5hbCBD
b2RlIGlzOiBtb3N0bHkgZ29uZS4NCioNCiogQ29udHJpYnV0b3Iocyk6IExhdXJlbmNlIEJvdXJu
IC0gbGFyZ2VseSByZXdyaXR0ZW4gZm9yIG5ldyBDU0cgY29kZS4NCioNCiogKioqKiogRU5EIEdQ
TC9CTCBEVUFMIExJQ0VOU0UgQkxPQ0sgKioqKioNCiogQ1NHIG9wZXJhdGlvbnMuDQoqLw0KDQoj
aW5jbHVkZSAiTUVNX2d1YXJkZWRhbGxvYy5oIg0KDQojaW5jbHVkZSAiQkxJX2doYXNoLmgiDQoN
CiNpbmNsdWRlICJETkFfbWF0ZXJpYWxfdHlwZXMuaCINCiNpbmNsdWRlICJETkFfbWVzaF90eXBl
cy5oIg0KI2luY2x1ZGUgIkROQV9vYmplY3RfdHlwZXMuaCINCiNpbmNsdWRlICJETkFfc2NlbmVf
dHlwZXMuaCINCg0KI2luY2x1ZGUgIkNTR19JbnRlcmZhY2UuaCINCg0KI2luY2x1ZGUgIkJLRV9n
bG9iYWwuaCINCiNpbmNsdWRlICJCS0VfbWVzaC5oIg0KI2luY2x1ZGUgIkJLRV9kaXNwbGlzdC5o
Ig0KI2luY2x1ZGUgIkJLRV9vYmplY3QuaCINCiNpbmNsdWRlICJCS0VfYm9vbGVhbm9wcy5oIg0K
I2luY2x1ZGUgIkJLRV91dGlsZGVmaW5lcy5oIg0KI2luY2x1ZGUgIkJLRV9saWJyYXJ5LmgiDQoj
aW5jbHVkZSAiQktFX21hdGVyaWFsLmgiDQoNCiNpbmNsdWRlIDxtYXRoLmg+DQoNCi8vIFRPRE8g
Y2hlY2sgdG8gc2VlIGhvdyBtYW55IG9mIHRoZXNlIGluY2x1ZGVzIGFyZSBuZWNlc3NhcnkNCg0K
I2luY2x1ZGUgIkJMSV9ibGVubGliLmgiDQojaW5jbHVkZSAiQkxJX2VkaXRWZXJ0LmgiDQojaW5j
bHVkZSAiQkxJX2FyaXRoYi5oIg0KI2luY2x1ZGUgIkJMSV9saW5rbGlzdC5oIg0KI2luY2x1ZGUg
IkJMSV9tZW1hcmVuYS5oIg0KDQojaWZkZWYgSEFWRV9DT05GSUdfSA0KI2luY2x1ZGUgPGNvbmZp
Zy5oPg0KI2VuZGlmDQoNCi8qKg0KKiBIZXJlJ3MgdGhlIHZlcnRleCBpdGVyYXRvciBzdHJ1Y3R1
cmUgdXNlZCB0byB3YWxrIHRocm91Z2gNCiogdGhlIGJsZW5kZXIgdmVydGV4IHN0cnVjdHVyZS4N
CiovDQoNCnR5cGVkZWYgc3RydWN0IHsNCglPYmplY3QgKm9iOw0KCU1lc2ggKm1lc2g7DQoJaW50
IHBvczsNCn0gVmVydGV4SXQ7DQoNCi8qKg0KKiBJbXBsZW1lbnRhdGlvbnMgb2YgbG9jYWwgdmVy
dGV4IGl0ZXJhdG9yIGZ1bmN0aW9ucy4NCiogVGhlc2UgZGVzY3JpYmUgYSBibGVuZGVyIG1lc2gg
dG8gdGhlIENTRyBtb2R1bGUuDQoqLw0KDQpzdGF0aWMNCgl2b2lkDQpWZXJ0ZXhJdF9EZXN0cnVj
dCgNCglDU0dfVmVydGV4SXRlcmF0b3JEZXNjcmlwdG9yICogaXRlcmF0b3INCil7DQoJaWYgKGl0
ZXJhdG9yLT5pdCkgew0KCQkvLyBkZWFsbG9jYXRlIG1lbW9yeSBmb3IgaXRlcmF0b3INCgkJTUVN
X2ZyZWVOKGl0ZXJhdG9yLT5pdCk7DQoJCWl0ZXJhdG9yLT5pdCA9IDA7DQoJfQ0KCWl0ZXJhdG9y
LT5Eb25lID0gTlVMTDsNCglpdGVyYXRvci0+RmlsbCA9IE5VTEw7DQoJaXRlcmF0b3ItPlJlc2V0
ID0gTlVMTDsNCglpdGVyYXRvci0+U3RlcCA9IE5VTEw7DQoJaXRlcmF0b3ItPm51bV9lbGVtZW50
cyA9IDA7DQoNCn07DQoNCnN0YXRpYw0KCWludA0KVmVydGV4SXRfRG9uZSgNCglDU0dfSXRlcmF0
b3JQdHIgaXQNCil7DQoJVmVydGV4SXQgKiBpdGVyYXRvciA9IChWZXJ0ZXhJdCAqKWl0Ow0KCXJl
dHVybihpdGVyYXRvci0+cG9zID49IGl0ZXJhdG9yLT5tZXNoLT50b3R2ZXJ0KTsNCn0NCg0KDQpz
dGF0aWMNCgl2b2lkDQpWZXJ0ZXhJdF9GaWxsKA0KCUNTR19JdGVyYXRvclB0ciBpdCwNCglDU0df
SVZlcnRleCAqdmVydA0KKXsNCglWZXJ0ZXhJdCAqIGl0ZXJhdG9yID0gKFZlcnRleEl0ICopaXQ7
DQoJTVZlcnQgKnZlcnRzID0gaXRlcmF0b3ItPm1lc2gtPm12ZXJ0Ow0KDQoJZmxvYXQgZ2xvYmFs
X3Bvc1szXTsNCg0KCVZlY01hdDRNdWxWZWNmbCgNCgkJZ2xvYmFsX3BvcywNCgkJaXRlcmF0b3It
Pm9iLT5vYm1hdCwNCgkJdmVydHNbaXRlcmF0b3ItPnBvc10uY28NCgkpOw0KDQoJdmVydC0+cG9z
aXRpb25bMF0gPSBnbG9iYWxfcG9zWzBdOw0KCXZlcnQtPnBvc2l0aW9uWzFdID0gZ2xvYmFsX3Bv
c1sxXTsNCgl2ZXJ0LT5wb3NpdGlvblsyXSA9IGdsb2JhbF9wb3NbMl07DQp9DQoNCnN0YXRpYw0K
CXZvaWQNClZlcnRleEl0X1N0ZXAoDQoJQ1NHX0l0ZXJhdG9yUHRyIGl0DQopew0KCVZlcnRleEl0
ICogaXRlcmF0b3IgPSAoVmVydGV4SXQgKilpdDsNCglpdGVyYXRvci0+cG9zICsrOw0KfQ0KDQpz
dGF0aWMNCgl2b2lkDQpWZXJ0ZXhJdF9SZXNldCgNCglDU0dfSXRlcmF0b3JQdHIgaXQNCil7DQoJ
VmVydGV4SXQgKiBpdGVyYXRvciA9IChWZXJ0ZXhJdCAqKWl0Ow0KCWl0ZXJhdG9yLT5wb3MgPSAw
Ow0KfQ0KDQpzdGF0aWMNCgl2b2lkDQpWZXJ0ZXhJdF9Db25zdHJ1Y3QoDQoJQ1NHX1ZlcnRleEl0
ZXJhdG9yRGVzY3JpcHRvciAqIG91dHB1dCwNCglPYmplY3QgKm9iDQopew0KDQoJVmVydGV4SXQg
Kml0Ow0KCWlmIChvdXRwdXQgPT0gMCkgcmV0dXJuOw0KDQoJLy8gYWxsb2NhdGUgc29tZSBtZW1v
cnkgZm9yIGJsZW5kZXIgaXRlcmF0b3INCglpdCA9IChWZXJ0ZXhJdCAqKShNRU1fbWFsbG9jTihz
aXplb2YoVmVydGV4SXQpLCJCb29sZWFuX1ZJdCIpKTsNCglpZiAoaXQgPT0gMCkgew0KCQlyZXR1
cm47DQoJfQ0KCS8vIGFzc2lnbiBibGVuZGVyIHNwZWNpZmljIHZhcmlhYmxlcw0KCWl0LT5vYiA9
IG9iOw0KCWl0LT5tZXNoID0gb2ItPmRhdGE7DQoNCglpdC0+cG9zID0gMDsNCg0KCS8vIGFzc2ln
biBpdGVyYXRvciBmdW5jdGlvbiBwb2ludGVycy4NCglvdXRwdXQtPlN0ZXAgPSBWZXJ0ZXhJdF9T
dGVwOw0KCW91dHB1dC0+RmlsbCA9IFZlcnRleEl0X0ZpbGw7DQoJb3V0cHV0LT5Eb25lID0gVmVy
dGV4SXRfRG9uZTsNCglvdXRwdXQtPlJlc2V0ID0gVmVydGV4SXRfUmVzZXQ7DQoJb3V0cHV0LT5u
dW1fZWxlbWVudHMgPSBpdC0+bWVzaC0+dG90dmVydDsNCglvdXRwdXQtPml0ID0gaXQ7DQp9DQoN
Ci8qKg0KKiBCbGVuZGVyIEZhY2UgaXRlcmF0b3INCiovDQoNCnR5cGVkZWYgc3RydWN0IHsNCglP
YmplY3QgKm9iOw0KCU1lc2ggKm1lc2g7DQoJaW50IHBvczsNCn0gRmFjZUl0Ow0KDQoNCnN0YXRp
Yw0KCXZvaWQNCkZhY2VJdF9EZXN0cnVjdCgNCglDU0dfRmFjZUl0ZXJhdG9yRGVzY3JpcHRvciAq
IGl0ZXJhdG9yDQopIHsNCglNRU1fZnJlZU4oaXRlcmF0b3ItPml0KTsNCglpdGVyYXRvci0+RG9u
ZSA9IE5VTEw7DQoJaXRlcmF0b3ItPkZpbGwgPSBOVUxMOw0KCWl0ZXJhdG9yLT5SZXNldCA9IE5V
TEw7DQoJaXRlcmF0b3ItPlN0ZXAgPSBOVUxMOw0KCWl0ZXJhdG9yLT5udW1fZWxlbWVudHMgPSAw
Ow0KfTsNCg0KDQpzdGF0aWMNCglpbnQNCkZhY2VJdF9Eb25lKA0KCUNTR19JdGVyYXRvclB0ciBp
dA0KKSB7DQoJLy8gYXNzdW1lIENTR19JdGVyYXRvclB0ciBpcyBvZiB0aGUgY29ycmVjdCB0eXBl
Lg0KCUZhY2VJdCAqIGl0ZXJhdG9yID0gKEZhY2VJdCAqKWl0Ow0KCXJldHVybihpdGVyYXRvci0+
cG9zID49IGl0ZXJhdG9yLT5tZXNoLT50b3RmYWNlKTsNCn07DQoNCnN0YXRpYw0KCXZvaWQNCkZh
Y2VJdF9GaWxsKA0KCUNTR19JdGVyYXRvclB0ciBpdCwNCglDU0dfSUZhY2UgKmZhY2UNCil7DQoJ
Ly8gYXNzdW1lIENTR19JdGVyYXRvclB0ciBpcyBvZiB0aGUgY29ycmVjdCB0eXBlLg0KCUZhY2VJ
dCAqIGZhY2VfaXQgPSAoRmFjZUl0ICopaXQ7DQoJT2JqZWN0ICpvYiA9IGZhY2VfaXQtPm9iOw0K
CU1GYWNlICptZmFjZXMgPSBmYWNlX2l0LT5tZXNoLT5tZmFjZTsNCglURmFjZSAqdGZhY2VzID0g
ZmFjZV9pdC0+bWVzaC0+dGZhY2U7DQoJTVZlcnQgKnZlcnRzID0gZmFjZV9pdC0+bWVzaC0+bXZl
cnQ7DQoJaW50IGZfaW5kZXggPSBmYWNlX2l0LT5wb3M7DQoJTUZhY2UgKm1mYWNlID0gJm1mYWNl
c1tmX2luZGV4XTsNCg0KCUNTR19JRmFjZURhdGEgKmZkYXRhID0gJihmYWNlLT5tX2ZhY2VEYXRh
KTsNCg0KCWlmIChtZmFjZS0+djMpIHsNCgkJLy8gaWdub3JlIGxpbmVzIChmYWNlcyB3aXRoIG1m
YWNlLT52Mz09MCkNCgkJZmFjZS0+bV92ZXJ0ZXhEYXRhWzBdLm1fdmVydGV4SW5kZXggPSBtZmFj
ZS0+djE7DQoJCWZhY2UtPm1fdmVydGV4RGF0YVsxXS5tX3ZlcnRleEluZGV4ID0gbWZhY2UtPnYy
Ow0KCQlmYWNlLT5tX3ZlcnRleERhdGFbMl0ubV92ZXJ0ZXhJbmRleCA9IG1mYWNlLT52MzsNCg0K
CQlpZiAobWZhY2UtPnY0KSB7DQoJCQlmYWNlLT5tX3ZlcnRleERhdGFbM10ubV92ZXJ0ZXhJbmRl
eCA9IG1mYWNlLT52NDsNCgkJCWZhY2UtPm1fdmVydGV4TnVtYmVyID0gNDsNCgkJfSBlbHNlIHsN
CgkJCWZhY2UtPm1fdmVydGV4TnVtYmVyID0gMzsNCgkJfQ0KCX0NCg0KCWZkYXRhLT5tX21hdGVy
aWFsID0gZ2l2ZV9jdXJyZW50X21hdGVyaWFsKG9iLCBtZmFjZS0+bWF0X25yKzEpOw0KCWZkYXRh
LT5tX2ZsYWcgPSBtZmFjZS0+ZmxhZzsNCg0KCQkvLyBwYWNrIHJnYmEgY29sb3JzLg0KCWlmICh0
ZmFjZXMpIHsNCgkJVEZhY2UgKnRmYWNlPSAmdGZhY2VzW2ZfaW5kZXhdOw0KCQlpbnQgaTsNCg0K
CQlmZGF0YS0+bV90cGFnZSA9IHRmYWNlLT50cGFnZTsNCgkJZmRhdGEtPm1fZmxhZyA9IHRmYWNl
LT5mbGFnOw0KCQlmZGF0YS0+bV90cmFuc3AgPSB0ZmFjZS0+dHJhbnNwOw0KCQlmZGF0YS0+bV9t
b2RlID0gdGZhY2UtPm1vZGU7DQoJCWZkYXRhLT5tX3RpbGUgPSB0ZmFjZS0+dGlsZTsNCg0KCQlm
b3IgKGk9MDsgaTxmYWNlLT5tX3ZlcnRleE51bWJlcjsgaSsrKSB7DQoJCQlDU0dfSUZhY2VWZXJ0
ZXhEYXRhICpmdmRhdGE9IGZhY2UtPm1fdmVydGV4RGF0YSArIGk7DQoNCgkJCWZ2ZGF0YS0+bV91
dlswXSA9IHRmYWNlLT51dltpXVswXTsNCgkJCWZ2ZGF0YS0+bV91dlsxXSA9IHRmYWNlLT51dltp
XVsxXTsNCgkJCWZ2ZGF0YS0+bV9jb2xvclswXSA9IChmbG9hdCkgKCh0ZmFjZS0+Y29sW2ldID4+
IDI0KSAmIDB4ZmYpOw0KCQkJZnZkYXRhLT5tX2NvbG9yWzFdID0gKGZsb2F0KSAoKHRmYWNlLT5j
b2xbaV0gPj4gMTYpICYgMHhmZik7DQoJCQlmdmRhdGEtPm1fY29sb3JbMl0gPSAoZmxvYXQpICgo
dGZhY2UtPmNvbFtpXSA+PiA4KSAmIDB4ZmYpOw0KCQkJZnZkYXRhLT5tX2NvbG9yWzNdID0gKGZs
b2F0KSAoKHRmYWNlLT5jb2xbaV0gPj4gMCkgJiAweGZmKTsNCg0KCQkJZnZkYXRhLT5tX25vcm1h
bFswXSA9IHZlcnRzW2Z2ZGF0YS0+bV92ZXJ0ZXhJbmRleF0ubm9bMF07DQoJCQlmdmRhdGEtPm1f
bm9ybWFsWzFdID0gdmVydHNbZnZkYXRhLT5tX3ZlcnRleEluZGV4XS5ub1sxXTsNCgkJCWZ2ZGF0
YS0+bV9ub3JtYWxbMl0gPSB2ZXJ0c1tmdmRhdGEtPm1fdmVydGV4SW5kZXhdLm5vWzJdOw0KCQl9
DQoNCgl9DQp9Ow0KDQoNCnN0YXRpYw0KCXZvaWQNCkZhY2VJdF9TdGVwKA0KCUNTR19JdGVyYXRv
clB0ciBpdA0KKSB7DQoJRmFjZUl0ICogZmFjZV9pdCA9IChGYWNlSXQgKilpdDsNCglmYWNlX2l0
LT5wb3MgKys7DQp9Ow0KDQpzdGF0aWMNCgl2b2lkDQpGYWNlSXRfUmVzZXQoDQoJQ1NHX0l0ZXJh
dG9yUHRyIGl0DQopIHsNCglGYWNlSXQgKiBmYWNlX2l0ID0gKEZhY2VJdCAqKWl0Ow0KCWZhY2Vf
aXQtPnBvcyA9IDA7DQp9DQoNCnN0YXRpYw0KCXZvaWQNCkZhY2VJdF9Db25zdHJ1Y3QoDQoJQ1NH
X0ZhY2VJdGVyYXRvckRlc2NyaXB0b3IgKiBvdXRwdXQsDQoJT2JqZWN0ICogb2INCil7DQoNCglG
YWNlSXQgKml0Ow0KCWlmIChvdXRwdXQgPT0gMCkgcmV0dXJuOw0KDQoJLy8gYWxsb2NhdGUgc29t
ZSBtZW1vcnkgZm9yIGJsZW5kZXIgaXRlcmF0b3INCglpdCA9IChGYWNlSXQgKikoTUVNX21hbGxv
Y04oc2l6ZW9mKEZhY2VJdCksIkJvb2xlYW5fRkl0IikpOw0KCWlmIChpdCA9PSAwKSB7DQoJCXJl
dHVybiA7DQoJfQ0KCS8vIGFzc2lnbiBibGVuZGVyIHNwZWNpZmljIHZhcmlhYmxlcw0KCWl0LT5v
YiA9IG9iOw0KCWl0LT5tZXNoID0gb2ItPmRhdGE7DQoJaXQtPnBvcyA9IDA7DQoNCgkvLyBhc3Np
Z24gaXRlcmF0b3IgZnVuY3Rpb24gcG9pbnRlcnMuDQoJb3V0cHV0LT5TdGVwID0gRmFjZUl0X1N0
ZXA7DQoJb3V0cHV0LT5GaWxsID0gRmFjZUl0X0ZpbGw7DQoJb3V0cHV0LT5Eb25lID0gRmFjZUl0
X0RvbmU7DQoJb3V0cHV0LT5SZXNldCA9IEZhY2VJdF9SZXNldDsNCglvdXRwdXQtPm51bV9lbGVt
ZW50cyA9IGl0LT5tZXNoLT50b3RmYWNlOw0KCW91dHB1dC0+aXQgPSBpdDsNCn07DQoNCg0KLyoq
DQoqIEludGVycG9sYXRpb24gZnVuY3Rpb25zIGZvciB2YXJpb3VzIHVzZXIgZGF0YSB0eXBlcy4N
CiovDQoJaW50DQpJbnRlcnBOb1VzZXJEYXRhKA0KCWNvbnN0IENTR19JRmFjZVZlcnRleERhdGEg
KmQxLA0KCWNvbnN0IENTR19JRmFjZVZlcnRleERhdGEgKiBkMiwNCiAgICBDU0dfSUZhY2VWZXJ0
ZXhEYXRhICpkbmV3LA0KCWRvdWJsZSBlcHNpbG9uDQopIHsNCgkvLyBub3RoaW5nIHRvIGRvIG9m
IGNvdXJzZS4NCglyZXR1cm4gMDsNCn0NCg0KCWludA0KSW50ZXJwRmFjZVZlcnRleERhdGEoDQoJ
Y29uc3QgQ1NHX0lGYWNlVmVydGV4RGF0YSAqZDEsDQoJY29uc3QgQ1NHX0lGYWNlVmVydGV4RGF0
YSAqIGQyLA0KICAgIENTR19JRmFjZVZlcnRleERhdGEgKmRuZXcsDQoJZG91YmxlIGVwc2lsb24N
Cikgew0KCWZsb2F0IGlub3Jtc1szXTsNCglkb3VibGUgIG1hZzsNCg0KCWRuZXctPm1fdXZbMF0g
PSAoZmxvYXQpKChkMi0+bV91dlswXSAtIGQxLT5tX3V2WzBdKSAqIGVwc2lsb24gKyBkMS0+bV91
dlswXSk7DQoJZG5ldy0+bV91dlsxXSA9IChmbG9hdCkoKGQyLT5tX3V2WzFdIC0gZDEtPm1fdXZb
MV0pICogZXBzaWxvbiArIGQxLT5tX3V2WzFdKTsNCglkbmV3LT5tX2NvbG9yWzBdID0gKGZsb2F0
KSgoZDItPm1fY29sb3JbMF0gLSBkMS0+bV9jb2xvclswXSkgKiBlcHNpbG9uICsgZDEtPm1fY29s
b3JbMF0pOw0KCWRuZXctPm1fY29sb3JbMV0gPSAoZmxvYXQpKChkMi0+bV9jb2xvclsxXSAtIGQx
LT5tX2NvbG9yWzFdKSAqIGVwc2lsb24gKyBkMS0+bV9jb2xvclsxXSk7DQoJZG5ldy0+bV9jb2xv
clsyXSA9IChmbG9hdCkoKGQyLT5tX2NvbG9yWzJdIC0gZDEtPm1fY29sb3JbMl0pICogZXBzaWxv
biArIGQxLT5tX2NvbG9yWzJdKTsNCglkbmV3LT5tX2NvbG9yWzNdID0gKGZsb2F0KSgoZDItPm1f
Y29sb3JbM10gLSBkMS0+bV9jb2xvclszXSkgKiBlcHNpbG9uICsgZDEtPm1fY29sb3JbM10pOw0K
DQoJLy8gaW50ZXJwb2xhdGUgbm9ybWFscw0KCWlub3Jtc1swXSA9IChmbG9hdCkoKGQyLT5tX25v
cm1hbFswXSAtIGQxLT5tX25vcm1hbFswXSkgKiBlcHNpbG9uICsgZDEtPm1fbm9ybWFsWzBdKTsN
Cglpbm9ybXNbMV0gPSAoZmxvYXQpKChkMi0+bV9ub3JtYWxbMV0gLSBkMS0+bV9ub3JtYWxbMV0p
ICogZXBzaWxvbiArIGQxLT5tX25vcm1hbFsxXSk7DQoJaW5vcm1zWzJdID0gKGZsb2F0KSgoZDIt
Pm1fbm9ybWFsWzJdIC0gZDEtPm1fbm9ybWFsWzJdKSAqIGVwc2lsb24gKyBkMS0+bV9ub3JtYWxb
Ml0pOw0KDQoJbWFnID0gMzI3NjcuMC9zcXJ0KGlub3Jtc1swXSppbm9ybXNbMF0gKyBpbm9ybXNb
MV0qaW5vcm1zWzFdICsgaW5vcm1zWzJdKmlub3Jtc1syXSk7DQoNCglkbmV3LT5tX25vcm1hbFsw
XSA9IChzaG9ydClmbG9vcihpbm9ybXNbMF0gKiBtYWcpOw0KCWRuZXctPm1fbm9ybWFsWzFdID0g
KHNob3J0KWZsb29yKGlub3Jtc1sxXSAqIG1hZyk7DQoJZG5ldy0+bV9ub3JtYWxbMl0gPSAoc2hv
cnQpZmxvb3IoaW5vcm1zWzJdICogbWFnKTsNCg0KDQoJcmV0dXJuIDA7DQp9DQoNCg0KCXZvaWQN
CkJ1aWxkTWVzaERlc2NyaXB0b3JzKA0KCXN0cnVjdCBPYmplY3QgKm9iLA0KCXN0cnVjdCBDU0df
RmFjZUl0ZXJhdG9yRGVzY3JpcHRvciAqIGZhY2VfaXQsDQoJc3RydWN0IENTR19WZXJ0ZXhJdGVy
YXRvckRlc2NyaXB0b3IgKiB2ZXJ0ZXhfaXQNCil7DQoJVmVydGV4SXRfQ29uc3RydWN0KHZlcnRl
eF9pdCxvYik7DQoJRmFjZUl0X0NvbnN0cnVjdChmYWNlX2l0LG9iKTsNCn0NCg0KCXZvaWQNCkZy
ZWVNZXNoRGVzY3JpcHRvcnMoDQoJc3RydWN0IENTR19GYWNlSXRlcmF0b3JEZXNjcmlwdG9yICpm
YWNlX2l0LA0KCXN0cnVjdCBDU0dfVmVydGV4SXRlcmF0b3JEZXNjcmlwdG9yICp2ZXJ0ZXhfaXQN
Cil7DQoJVmVydGV4SXRfRGVzdHJ1Y3QodmVydGV4X2l0KTsNCglGYWNlSXRfRGVzdHJ1Y3QoZmFj
ZV9pdCk7DQp9DQoNCglPYmplY3QgKg0KQWRkTmV3QmxlbmRlck1lc2goDQoJQmFzZSAqYmFzZQ0K
KXsNCglNZXNoICpvbGRfbWU7DQoJQmFzZSAqYmFzZW47DQoJT2JqZWN0ICpvYl9uZXc7DQoNCgkv
LyBub3cgY3JlYXRlIGEgbmV3IGJsZW5kZXIgb2JqZWN0Lg0KCS8vIGR1cGxpY2F0aW5nIGFsbCB0
aGUgc2V0dGluZ3MgZnJvbSB0aGUgcHJldmlvdXMgb2JqZWN0DQoJLy8gdG8gdGhlIG5ldyBvbmUu
DQoJb2JfbmV3PSBjb3B5X29iamVjdChiYXNlLT5vYmplY3QpOw0KDQoJLy8gT2sgd2UgZG9uJ3Qg
d2FudCB0byB1c2UgdGhlIGFjdHVhbCBkYXRhIGZyb20gdGhlDQoJLy8gbGFzdCBvYmplY3QsIHRo
ZSBhYm92ZSBmdW5jdGlvbiBpbmNyZW1lbnRlZCB0aGUNCgkvLyBudW1iZXIgb2YgdXNlcnMsIHNv
IGRlY3JlbWVudCBpdCBoZXJlLg0KCW9sZF9tZT0gb2JfbmV3LT5kYXRhOw0KCW9sZF9tZS0+aWQu
dXMtLTsNCg0KCS8vIE5vdyBjcmVhdGUgYSBuZXcgYmFzZSB0byBhZGQgaW50byB0aGUgbGlua2Vk
IGxpc3Qgb2YNCgkvLyB2YXNlIG9iamVjdHMuDQoNCgliYXNlbj0gTUVNX21hbGxvY04oc2l6ZW9m
KEJhc2UpLCAiZHVwbGliYXNlIik7DQoJKmJhc2VuPSAqYmFzZTsNCglCTElfYWRkaGVhZCgmRy5z
Y2VuZS0+YmFzZSwgYmFzZW4pOwkvKiBhZGRoZWFkOiBhbmRlcnMgb25laW5kaWdlIGx1cyAqLw0K
CWJhc2VuLT5vYmplY3Q9IG9iX25ldzsNCgliYXNlbi0+ZmxhZyAmPSB+U0VMRUNUOw0KDQoJLy8g
SW5pdGlhbGl6ZSB0aGUgbWVzaCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC4NCglv
Yl9uZXctPmRhdGE9IGFkZF9tZXNoKCk7DQoJRy50b3RtZXNoKys7DQoNCgkvLyBGaW5hbGx5IGFz
c2lnbiB0aGUgb2JqZWN0IHR5cGUuDQoJb2JfbmV3LT50eXBlPSBPQl9NRVNIOw0KDQoJcmV0dXJu
IG9iX25ldzsNCn07DQoNCi8qKg0KKg0KKiBFeHRlcm5hbCBpbnRlcmZhY2UNCioNCiogVGhpcyBm
dW5jdGlvbiBidWlsZHMgYSBibGVuZGVyIG1lc2ggdXNpbmcgdGhlIG91dHB1dCBpbmZvcm1hdGlv
biBmcm9tDQoqIHRoZSBDU0cgbW9kdWxlLiBJdCBkZWNsYXJlcyBhbGwgdGhlIG5lY2Vzc2FyeSBi
bGVuZGVyIGNydWZ0IGFuZA0KKiBmaWxscyBpbiB0aGUgdmVydGV4IGFuZCBmYWNlIGFycmF5cy4N
CiovDQoJaW50DQpDb252ZXJ0Q1NHRGVzY3JpcHRvcnNUb01lc2hPYmplY3QoDQoJT2JqZWN0ICpv
YiwNCglpbnQgb3V0cHV0TWVzaFR5cGUsDQoJQ1NHX0ZhY2VJdGVyYXRvckRlc2NyaXB0b3IgKmZh
Y2VfaXQsDQoJQ1NHX1ZlcnRleEl0ZXJhdG9yRGVzY3JpcHRvciAqdmVydGV4X2l0LA0KCWZsb2F0
IHBhcmludltdWzRdDQopew0KCU1lc2ggKm1lID0gb2ItPmRhdGE7DQoJR0hhc2ggKm1hdGVyaWFs
X2hhc2g7DQoJQ1NHX0lWZXJ0ZXggdmVydDsNCglDU0dfSUZhY2UgZmFjZTsNCglNVmVydCAqaW5z
ZXJ0X3BvczsNCglNRmFjZSAqbWZhY2VzOw0KCVRGYWNlICp0ZmFjZXM7DQoJaW50IGZpX2luc2Vy
dF9wb3MsIG5tYXRlcmlhbHM7DQoNCgkvLyBjcmVhdGUgc29tZSBtZW1vcnkgZm9yIHRoZSBJZmFj
ZSBhY2NvcmRpbmcgdG8gb3V0cHV0IG1lc2ggcHJvcHMuDQoNCglpZiAoZmFjZV9pdCA9PSBOVUxM
IHx8IHZlcnRleF9pdCA9PSBOVUxMIHx8IG1lID09IE5VTEwpIHsNCgkJcmV0dXJuIDA7DQoJfQ0K
CWlmICh2ZXJ0ZXhfaXQtPm51bV9lbGVtZW50cyA+IDY1MDAwKSByZXR1cm4gMDsNCg0KCS8vIGNy
ZWF0ZSBtZW1vcnkgZm9yIHRoZSB2ZXJ0ZXggYXJyYXkuDQoNCgltZS0+bXZlcnQgPSBNRU1fY2Fs
bG9jTihzaXplb2YoTVZlcnQpICogdmVydGV4X2l0LT5udW1fZWxlbWVudHMsIkJvb2xlYW5PcF9W
ZXJ0ZXhBcnJheSIpOw0KCW1lLT5tZmFjZSA9IE1FTV9jYWxsb2NOKHNpemVvZihNRmFjZSkgKiBm
YWNlX2l0LT5udW1fZWxlbWVudHMsIkJvb2xlYW5PcF9GYWNlQXJyYXkiKTsNCg0KCWlmIChvdXRw
dXRNZXNoVHlwZSkgew0KCQltZS0+dGZhY2UgPSBNRU1fY2FsbG9jTihzaXplb2YoVEZhY2UpICog
ZmFjZV9pdC0+bnVtX2VsZW1lbnRzLCJCb29sZWFuT3BfVEZhY2VBcnJheSIpOw0KCQlpZiAobWUt
PnRmYWNlID09IE5VTEwpIHJldHVybiAwOw0KCX0gZWxzZSB7DQoJCW1lLT50ZmFjZSA9IE5VTEw7
DQoJfQ0KDQoJaWYgKG1lLT5tdmVydCA9PSBOVUxMIHx8IG1lLT5tZmFjZSA9PSBOVUxMKSByZXR1
cm4gMDsNCg0KCWluc2VydF9wb3MgPSBtZS0+bXZlcnQ7DQoJbWZhY2VzID0gbWUtPm1mYWNlOw0K
CXRmYWNlcyA9IG1lLT50ZmFjZTsNCg0KCWZpX2luc2VydF9wb3MgPSAwOw0KDQoJLy8gc3RlcCB0
aHJvdWdoIHRoZSBpdGVyYXRvcnMuDQoNCgl3aGlsZSAoIXZlcnRleF9pdC0+RG9uZSh2ZXJ0ZXhf
aXQtPml0KSkgew0KCQl2ZXJ0ZXhfaXQtPkZpbGwodmVydGV4X2l0LT5pdCwmdmVydCk7DQoNCgkJ
Ly8gbWFwIG91dHB1dCB2ZXJ0ZXggaW50byBpbnNlcnRfcG9zDQoJCS8vIGFuZCB0cmFuc2Zvcm0g
YXQgYnkgcGFyaW52IGF0IHRoZSBzYW1lIHRpbWUuDQoNCgkJVmVjTWF0NE11bFZlY2ZsKA0KCQkJ
aW5zZXJ0X3Bvcy0+Y28sDQoJCQlwYXJpbnYsDQoJCQl2ZXJ0LnBvc2l0aW9uDQoJCSk7DQoJCWlu
c2VydF9wb3MgKys7DQoJCXZlcnRleF9pdC0+U3RlcCh2ZXJ0ZXhfaXQtPml0KTsNCgl9DQoNCglt
ZS0+dG90dmVydCA9IHZlcnRleF9pdC0+bnVtX2VsZW1lbnRzOw0KDQoJLy8gYSBoYXNoIHRhYmxl
IHRvIHJlbWFwIG1hdGVyaWFscyB0byBpbmRpY2VzIHdpdGgNCgltYXRlcmlhbF9oYXNoID0gQkxJ
X2doYXNoX25ldyhCTElfZ2hhc2h1dGlsX3B0cmhhc2gsIEJMSV9naGFzaHV0aWxfcHRyY21wKTsN
CglubWF0ZXJpYWxzID0gMDsNCg0KCXdoaWxlICghZmFjZV9pdC0+RG9uZShmYWNlX2l0LT5pdCkp
IHsNCgkJTUZhY2UgKm1mYWNlID0gJm1mYWNlc1tmaV9pbnNlcnRfcG9zXTsNCgkJQ1NHX0lGYWNl
RGF0YSAqZmRhdGE7DQoNCgkJZmFjZV9pdC0+RmlsbChmYWNlX2l0LT5pdCwmZmFjZSk7DQoNCgkJ
Ly8gY2hlYXQgQ1NHIG5ldmVyIGR1bXBzIG91dCBxdWFkcy4NCgkJbWZhY2UtPnYxID0gZmFjZS5t
X3ZlcnRleERhdGFbMF0ubV92ZXJ0ZXhJbmRleDsNCgkJbWZhY2UtPnYyID0gZmFjZS5tX3ZlcnRl
eERhdGFbMV0ubV92ZXJ0ZXhJbmRleDsNCgkJbWZhY2UtPnYzID0gZmFjZS5tX3ZlcnRleERhdGFb
Ml0ubV92ZXJ0ZXhJbmRleDsNCgkJbWZhY2UtPnY0ID0gMDsNCg0KCQltZmFjZS0+ZWRjb2RlID0g
TUVfVjFWMnxNRV9WMlYzfE1FX1YzVjR8TUVfVjRWMTsNCgkJbWZhY2UtPnB1bm8gPSAwOw0KCQlt
ZmFjZS0+bWF0X25yID0gMDsNCgkJbWZhY2UtPmZsYWcgPSAwOw0KDQoJCS8qIEhBQ0ssIHBlcmZv
cm0gbWF0ZXJpYWwgdG8gaW5kZXggbWFwcGluZyB1c2luZyBhIGdlbmVyYWwNCgkJICogaGFzaCB0
YWJsZSwganVzdCB0dWNrIHRoZSBpbnQgaW50byBhIHZvaWQgKi4NCgkJICovDQoJCWZkYXRhID0g
JihmYWNlLm1fZmFjZURhdGEpOw0KDQoJCWlmICghQkxJX2doYXNoX2hhc2tleShtYXRlcmlhbF9o
YXNoLCBmZGF0YS0+bV9tYXRlcmlhbCkpIHsNCgkJCWludCBtYXRuciA9IG5tYXRlcmlhbHMrKzsN
CgkJCUJMSV9naGFzaF9pbnNlcnQobWF0ZXJpYWxfaGFzaCwgZmRhdGEtPm1fbWF0ZXJpYWwsICh2
b2lkKikgbWF0bnIpOw0KCQkJYXNzaWduX21hdGVyaWFsKG9iLCBmZGF0YS0+bV9tYXRlcmlhbCwg
bWF0bnIrMSk7DQoJCX0NCgkJbWZhY2UtPm1hdF9uciA9IChpbnQpIEJMSV9naGFzaF9sb29rdXAo
bWF0ZXJpYWxfaGFzaCwgZmRhdGEtPm1fbWF0ZXJpYWwpOw0KDQoJCS8vIGdyYWIgdGhlIHZlcnRl
eCBjb2xvcnMgYW5kIHRleHR1cmUgY29zIGFuZCBkdW1wIHRoZW0gaW50byB0aGUgdGZhY2UuDQoN
CgkJaWYgKHRmYWNlcykgew0KDQoJCQlURmFjZSAqdGZhY2U9ICZ0ZmFjZXNbZmlfaW5zZXJ0X3Bv
c107DQoJCQlpbnQgaTsNCg0KCQkJLy8gY29weSBhbGwgdGhlIHRmYWNlIHNldHRpbmdzIGJhY2sN
CgkJCXRmYWNlLT50cGFnZSA9IGZkYXRhLT5tX3RwYWdlOw0KCQkJdGZhY2UtPmZsYWcgPSBmZGF0
YS0+bV9mbGFnOw0KCQkJdGZhY2UtPnRyYW5zcCA9IGZkYXRhLT5tX3RyYW5zcDsNCgkJCXRmYWNl
LT5tb2RlID0gZmRhdGEtPm1fbW9kZTsNCgkJCXRmYWNlLT50aWxlID0gZmRhdGEtPm1fdGlsZTsN
Cg0KCQkJZm9yIChpPTA7IGk8ZmFjZS5tX3ZlcnRleE51bWJlcjsgaSsrKSB7DQoJCQkJQ1NHX0lG
YWNlVmVydGV4RGF0YSAqZnZkYXRhID0gZmFjZS5tX3ZlcnRleERhdGEgK2k7DQoJCQkJZmxvYXQg
KmNvbG9yID0gZnZkYXRhLT5tX2NvbG9yOw0KDQoJCQkJdGZhY2UtPnV2W2ldWzBdID0gZnZkYXRh
LT5tX3V2WzBdOw0KCQkJCXRmYWNlLT51dltpXVsxXSA9IGZ2ZGF0YS0+bV91dlsxXTsNCgkJCQl0
ZmFjZS0+Y29sW2ldID0NCgkJCQkJKCgoKHVuc2lnbmVkIGludClmbG9vcihjb2xvclswXSArIDAu
NWYpKSAmIDB4ZmYpIDw8IDI0KSB8DQoJCQkJCSgoKCh1bnNpZ25lZCBpbnQpZmxvb3IoY29sb3Jb
MV0gKyAwLjVmKSkgJiAweGZmKSA8PCAxNikgfA0KCQkJCQkoKCgodW5zaWduZWQgaW50KWZsb29y
KGNvbG9yWzJdICsgMC41ZikpICYgMHhmZikgPDwgOCkgfA0KCQkJCQkoKCgodW5zaWduZWQgaW50
KWZsb29yKGNvbG9yWzNdICsgMC41ZikpICYgMHhmZikgPDwgMCk7DQoNCgkJCQltZS0+bXZlcnRb
ZnZkYXRhLT5tX3ZlcnRleEluZGV4XS5ub1swXSA9IGZ2ZGF0YS0+bV9ub3JtYWxbMF07DQoJCQkJ
bWUtPm12ZXJ0W2Z2ZGF0YS0+bV92ZXJ0ZXhJbmRleF0ubm9bMV0gPSBmdmRhdGEtPm1fbm9ybWFs
WzFdOw0KCQkJCW1lLT5tdmVydFtmdmRhdGEtPm1fdmVydGV4SW5kZXhdLm5vWzJdID0gZnZkYXRh
LT5tX25vcm1hbFsyXTsNCg0KCQkJfQ0KDQoJCQl0ZXN0X2luZGV4X2ZhY2UobWZhY2UsIHRmYWNl
LCAzKTsNCgkJfSBlbHNlIHsNCgkJCXRlc3RfaW5kZXhfbWZhY2UobWZhY2UsIDMpOw0KCQl9DQoN
CgkJZmlfaW5zZXJ0X3BvcysrOw0KCQlmYWNlX2l0LT5TdGVwKGZhY2VfaXQtPml0KTsNCg0KCX0N
Cg0KCUJMSV9naGFzaF9mcmVlKG1hdGVyaWFsX2hhc2gsIE5VTEwsIE5VTEwpOw0KDQoJbWUtPnRv
dGZhY2UgPSBmYWNlX2l0LT5udW1fZWxlbWVudHM7DQoJLy8gdGhhdHMgaXQhDQoNCglyZXR1cm4g
MTsNCn0NCi8qKg0KKiBBc3N1bWVzIG1lc2ggaXMgdmFsaWQgYW5kIGZvcm1zIHBhcnQgb2YgYSBm
cmVzaA0KKiBibGVuZGVyIG9iamVjdC4NCiovDQoJaW50DQpOZXdCb29sZWFuTWVzaCgNCglzdHJ1
Y3QgQmFzZSAqIGJhc2UsDQoJc3RydWN0IEJhc2UgKiBiYXNlX3NlbGVjdCwNCglpbnQgaW50X29w
X3R5cGUNCil7DQoJTWVzaCAqbWUyID0gZ2V0X21lc2goYmFzZV9zZWxlY3QtPm9iamVjdCk7DQoJ
TWVzaCAqbWUgPSBnZXRfbWVzaChiYXNlLT5vYmplY3QpOw0KCU1lc2ggKm1lX25ldyA9IE5VTEw7
DQoJT2JqZWN0ICpvYjsNCglpbnQgZnJlZV90ZmFjZTEsZnJlZV90ZmFjZTI7DQoNCglmbG9hdCBp
bnZfbWF0WzRdWzRdOw0KCWludCBzdWNjZXNzID0gMDsNCgkvLyBidWlsZCBhbmQgZmlsbCBuZXcg
ZGVzY3JpcHRvcnMgZm9yIHRoZXNlIG1lc2hlcw0KCUNTR19WZXJ0ZXhJdGVyYXRvckRlc2NyaXB0
b3IgdmRfMTsNCglDU0dfVmVydGV4SXRlcmF0b3JEZXNjcmlwdG9yIHZkXzI7DQoJQ1NHX0ZhY2VJ
dGVyYXRvckRlc2NyaXB0b3IgZmRfMTsNCglDU0dfRmFjZUl0ZXJhdG9yRGVzY3JpcHRvciBmZF8y
Ow0KDQoJLy8gd29yayBvdXQgdGhlIG9wZXJhdGlvbiB0aGV5IGNob3NlIGFuZCBwaWNrIHRoZSBh
cHByb3ByaWF0ZQ0KCS8vIGVudW0gZnJvbSB0aGUgY3NnIG1vZHVsZS4NCg0KCUNTR19PcGVyYXRp
b25UeXBlIG9wX3R5cGU7DQoNCglpbnQgb3V0cHV0TWVzaFR5cGUgPSAwOw0KDQoJaWYgKG1lID09
IE5VTEwgfHwgbWUyID09IE5VTEwpIHJldHVybiAwOw0KDQoJc3dpdGNoIChpbnRfb3BfdHlwZSkg
ew0KCQljYXNlIDEgOiBvcF90eXBlID0gZV9jc2dfaW50ZXJzZWN0aW9uOyBicmVhazsNCgkJY2Fz
ZSAyIDogb3BfdHlwZSA9IGVfY3NnX3VuaW9uOyBicmVhazsNCgkJY2FzZSAzIDogb3BfdHlwZSA9
IGVfY3NnX2RpZmZlcmVuY2U7IGJyZWFrOw0KCQljYXNlIDQgOiBvcF90eXBlID0gZV9jc2dfY2xh
c3NpZnk7IGJyZWFrOw0KCQlkZWZhdWx0IDogb3BfdHlwZSA9IGVfY3NnX2ludGVyc2VjdGlvbjsN
Cgl9DQoNCgkvLyBIZXJlIGlzIHRoZSBzZWN0aW9uIHdoZXJlIHdlIGRlc2NyaWJlIHRoZSBwcm9w
ZXJ0aWVzIG9mDQoJLy8gYm90aCBtZXNoZXMgdG8gdGhlIGJzcCBtb2R1bGUuDQoNCglpZiAobWUt
Pm1jb2wgIT0gTlVMTCkgew0KCQkvLyBUaGVuIHRoaXMgbWVzaCBoYXMgdmVydGV4IGNvbG9ycyBv
bmx5DQoJCS8vIHdlbGwgdGhpcyBpcyBhd2t3YXJkIGJlY2F1c2UgdGhlcmUgaXMgbm8gZXF1aXZh
bGVudA0KCQkvLyB0ZXN0X2luZGV4X21mYWNlIGp1c3QgZm9yIHZlcnRleCBjb2xvcnMhDQoJCS8v
IGFzIGEgdGVtcG9yYXJ5IGhhY2sgd2UgY2FuIGNvbnZlcnQgdGhlc2UgdmVydGV4IGNvbG9ycw0K
CQkvLyBpbnRvIHRmYWNlcyBkbyB0aGUgb3BlcmF0aW9uIGFuZCB0dXJuIHRoZW0gYmFjayBhZ2Fp
bi4NCg0KCQkvLyBjcmVhdGUgc29tZSBtZW1vcnkgZm9yIHRoZSB0ZmFjZXMuDQoJCW1lLT50ZmFj
ZSA9IChURmFjZSAqKU1FTV9jYWxsb2NOKHNpemVvZihURmFjZSkqbWUtPnRvdGZhY2UsIkJvb2xl
YW5PcHNfVGVtcFRGYWNlIik7DQoJCW1jb2xfdG9fdGZhY2UobWUsMSk7DQoJCWZyZWVfdGZhY2Ux
ID0gMTsNCgl9IGVsc2Ugew0KCQlmcmVlX3RmYWNlMSA9IDA7DQoJfQ0KDQoJaWYgKG1lLT50ZmFj
ZSkgew0KCQlvdXRwdXRNZXNoVHlwZSA9IDE7DQoJfQ0KDQoJLy8gc2FtZSBmb3IgbWVzaDINCg0K
CWlmIChtZTItPm1jb2wgIT0gTlVMTCkgew0KCQkvLyBjcmVhdGUgc29tZSBtZW1vcnkgZm9yIHRo
ZSB0ZmFjZXMuDQoJCW1lMi0+dGZhY2UgPSAoVEZhY2UgKilNRU1fY2FsbG9jTihzaXplb2YoVEZh
Y2UpKm1lMi0+dG90ZmFjZSwiQm9vbGVhbk9wc19UZW1wVEZhY2UiKTsNCgkJbWNvbF90b190ZmFj
ZShtZTIsMSk7DQoJCWZyZWVfdGZhY2UyID0gMTsNCgl9IGVsc2Ugew0KCQlmcmVlX3RmYWNlMiA9
IDA7DQoJfQ0KDQoJaWYgKG1lMi0+dGZhY2UpIHsNCgkJb3V0cHV0TWVzaFR5cGUgPSAxOw0KCX0N
Cg0KCW9iID0gYmFzZS0+b2JqZWN0Ow0KDQoJLy8gd2UgbWFwIHRoZSBmaW5hbCBvYmplY3QgYmFj
ayBpbnRvIG9iamVjdCAxJ3MgKG9iKQ0KCS8vIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UuIEZvciB0
aGlzIHdlIG5lZWQgdG8gY29tcHV0ZQ0KCS8vIHRoZSBpbnZlcnNlIHRyYW5zZm9ybSBmcm9tIGds
b2JhbCB0byBsb2NhbC4NCg0KCU1hdDRJbnZlcnQoaW52X21hdCxvYi0+b2JtYXQpOw0KDQoJLy8g
bWFrZSBhIGJvb2xlYW4gb3BlcmF0aW9uOw0KCXsNCgkJQ1NHX0Jvb2xlYW5PcGVyYXRpb24gKiBi
b29sX29wID0gQ1NHX05ld0Jvb2xlYW5GdW5jdGlvbigpOw0KDQoJCUJ1aWxkTWVzaERlc2NyaXB0
b3JzKA0KCQkJYmFzZS0+b2JqZWN0LA0KCQkJJmZkXzEsDQoJCQkmdmRfMQ0KCQkpOw0KCQlCdWls
ZE1lc2hEZXNjcmlwdG9ycygNCgkJCWJhc2Vfc2VsZWN0LT5vYmplY3QsDQoJCQkmZmRfMiwNCgkJ
CSZ2ZF8yDQoJCSk7DQoNCgkJLy8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uDQoNCgkJaWYgKG91dHB1
dE1lc2hUeXBlID09IDApIHsNCg0KCQkJc3VjY2VzcyA9DQoJCQlDU0dfUGVyZm9ybUJvb2xlYW5P
cGVyYXRpb24oDQoJCQkJYm9vbF9vcCwNCgkJCQlvcF90eXBlLA0KCQkJCWZkXzEsdmRfMSxmZF8y
LHZkXzIsDQoJCQkJSW50ZXJwTm9Vc2VyRGF0YQ0KCQkJKTsNCgkJfSBlbHNlIHsNCgkJCXN1Y2Nl
c3MgPQ0KCQkJQ1NHX1BlcmZvcm1Cb29sZWFuT3BlcmF0aW9uKA0KCQkJCWJvb2xfb3AsDQoJCQkJ
b3BfdHlwZSwNCgkJCQlmZF8xLHZkXzEsZmRfMix2ZF8yLA0KCQkJCUludGVycEZhY2VWZXJ0ZXhE
YXRhDQoJCQkpOw0KCQl9DQoNCgkJaWYgKHN1Y2Nlc3MpIHsNCgkJCS8vIGRlc2NyaXB0aW9ucyBv
ZiB0aGUgb3V0cHV0Ow0KCQkJQ1NHX1ZlcnRleEl0ZXJhdG9yRGVzY3JpcHRvciB2ZF9vOw0KCQkJ
Q1NHX0ZhY2VJdGVyYXRvckRlc2NyaXB0b3IgZmRfbzsNCg0KCQkJLy8gQ3JlYXRlIGEgbmV3IGJs
ZW5kZXIgbWVzaCBvYmplY3QgLSB1c2luZyAnYmFzZScgYXMNCgkJCS8vIGEgdGVtcGxhdGUgZm9y
IHRoZSBuZXcgb2JqZWN0Lg0KCQkJT2JqZWN0ICogb2JfbmV3PSAgQWRkTmV3QmxlbmRlck1lc2go
YmFzZSk7DQoNCgkJCS8vIGdldCB0aGUgb3V0cHV0IGRlc2NyaXB0b3JzDQoNCgkJCUNTR19PdXRw
dXRGYWNlRGVzY3JpcHRvcihib29sX29wLCZmZF9vKTsNCgkJCUNTR19PdXRwdXRWZXJ0ZXhEZXNj
cmlwdG9yKGJvb2xfb3AsJnZkX28pOw0KDQoJCQltZV9uZXcgPSBvYl9uZXctPmRhdGE7DQoJCQkv
LyBpdGVyYXRlIHRocm91Z2ggcmVzdWx0cyBvZiBvcGVyYXRpb24gYW5kIGluc2VydCBpbnRvIG5l
dyBvYmplY3QNCgkJCS8vIHNlZSBzdWJzdXJmLmMNCg0KDQoJCQlDb252ZXJ0Q1NHRGVzY3JpcHRv
cnNUb01lc2hPYmplY3QoDQoJCQkJb2JfbmV3LA0KCQkJCW91dHB1dE1lc2hUeXBlLA0KCQkJCSZm
ZF9vLA0KCQkJCSZ2ZF9vLA0KCQkJCWludl9tYXQNCgkJCSk7DQoNCgkJCS8vIGluaXRpYWxpemUg
dGhlIG9iamVjdA0KCQkJdGV4X3NwYWNlX21lc2gobWVfbmV3KTsNCg0KCQkJLy8gZnJlZSB1cCB0
aGUgbWVtb3J5DQoNCgkJCUNTR19GcmVlVmVydGV4RGVzY3JpcHRvcigmdmRfbyk7DQoJCQlDU0df
RnJlZUZhY2VEZXNjcmlwdG9yKCZmZF9vKTsNCgkJfQ0KDQoJCUNTR19GcmVlQm9vbGVhbk9wZXJh
dGlvbihib29sX29wKTsNCgkJYm9vbF9vcCA9IE5VTEw7DQoNCgl9DQoNCgkvLyBXZSBtYXkgbmVl
ZCB0byBtYXAgYmFjayB0aGUgdGZhY2VzIHRvIG1jb2xzIGhlcmUuDQoJaWYgKGZyZWVfdGZhY2Ux
KSB7DQoJCXRmYWNlX3RvX21jb2wobWUpOw0KCQlNRU1fZnJlZU4obWUtPnRmYWNlKTsNCgkJbWUt
PnRmYWNlID0gTlVMTDsNCgl9DQoJaWYgKGZyZWVfdGZhY2UyKSB7DQoJCXRmYWNlX3RvX21jb2wo
bWUyKTsNCgkJTUVNX2ZyZWVOKG1lMi0+dGZhY2UpOw0KCQltZTItPnRmYWNlID0gTlVMTDsNCgl9
DQoNCglpZiAoZnJlZV90ZmFjZTEgJiYgZnJlZV90ZmFjZTIpIHsNCgkJLy8gdGhlbiB3ZSBuZWVk
IHRvIG1hcCB0aGUgb3V0cHV0IHRmYWNlcyBpbnRvIG1jb2xzDQoJCWlmIChtZV9uZXcpIHsNCgkJ
CXRmYWNlX3RvX21jb2wobWVfbmV3KTsNCgkJCU1FTV9mcmVlTihtZV9uZXctPnRmYWNlKTsNCgkJ
CW1lX25ldy0+dGZhY2UgPSBOVUxMOw0KCQl9DQoJfQ0KDQoJRnJlZU1lc2hEZXNjcmlwdG9ycygm
ZmRfMSwmdmRfMSk7DQoJRnJlZU1lc2hEZXNjcmlwdG9ycygmZmRfMiwmdmRfMik7DQoNCglyZXR1
cm4gc3VjY2VzczsNCn0NCg0KDQoNCg0KDQoNCg0KDQoNCg==

------_=_NextPart_001_01C3F60E.F33B6F77--