[Bf-committers] Oops Patch (selection masking and organization change)

bf-committers@blender.org bf-committers@blender.org
Wed, 28 Apr 2004 18:50:18 -0500


--Message-Boundary-28827
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

Hey everyone,

I have completed code to mask unselected oops and organize the 
schematic differently. Now I just need people to test it and give me 
feedback. The patch adds 3 new menu options in the view menu
-Manual Arrangment which undo's any masking and allows you to 
reposition blocks manually.
-Dynamic:Selection which hides unselected objects blocks in the 
schematic and shows only blocks for selected objects and their linked 
blocks
-Tree Graph which displays the oops using a right->left Tree Graph 
organization.

Please try it out and let me know what you think. If you like it I'll 
polish it up some and keep working on more to submit to tohupuu or bf 
whichever would be best at first.

--Message-Boundary-28827
Content-type: text/plain; charset=US-ASCII
Content-disposition: inline
Content-description: Attachment information.

The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any other MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  OopsPatch.txt
     Date:  28 Apr 2004, 18:44
     Size:  28396 bytes.
     Type:  Text

--Message-Boundary-28827
Content-type: Application/Octet-stream; name="OopsPatch.txt"; type=Text
Content-disposition: attachment; filename="OopsPatch.txt"
Content-transfer-encoding: BASE64

SW5kZXg6IHNvdXJjZS9ibGVuZGVyL2luY2x1ZGUvQklGX29vcHMuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KUkNTIGZpbGU6IC9jdnNyb290L2JmLWJsZW5kZXIvYmxlbmRlci9zb3VyY2UvYmxlbmRl
ci9pbmNsdWRlL0JJRl9vb3BzLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUNCmRpZmYg
LXUgLXIxLjUgQklGX29vcHMuaA0KLS0tIHNvdXJjZS9ibGVuZGVyL2luY2x1ZGUvQklGX29v
cHMuaAkyNyBEZWMgMjAwMiAxMzoxMDoyMCAtMDAwMAkxLjUNCisrKyBzb3VyY2UvYmxlbmRl
ci9pbmNsdWRlL0JJRl9vb3BzLmgJMjggQXByIDIwMDQgMjM6NDU6NTAgLTAwMDANCkBAIC01
Myw3ICs1Myw3IEBADQogdm9pZCBhZGRfdGV4dHVyZV9vb3BzKHN0cnVjdCBNYXRlcmlhbCAq
bWEpOw0KIHZvaWQgYnVpbGRfb29wcyh2b2lkKTsNCiBzdHJ1Y3QgT29wcyAqZmluZF9vb3Bz
KElEICppZCk7DQotdm9pZCBmcmVlX29vcHMoc3RydWN0IE9vcHMgKm9vcHMpOwkvKiBvb2sg
b29wcyB6ZWxmICovDQordm9pZCBmcmVlX29vcHMoc3RydWN0IE9vcHMgKm9vcHMsIHN0cnVj
dCBTcGFjZU9vcHMgKnNvKTsJLyogb29rIG9vcHMgemVsZiAqLw0KIHZvaWQgZnJlZV9vb3Bz
cGFjZShzdHJ1Y3QgU3BhY2VPb3BzICpzbyk7DQogdm9pZCBuZXdfb29wc19sb2NhdGlvbihz
dHJ1Y3QgT29wcyAqKTsNCiBpbnQgb29wc190ZXN0X292ZXJsYXAoc3RydWN0IE9vcHMgKnRl
c3QpOw0KQEAgLTY0LDYgKzY0LDggQEANCiBpbnQgdGVzdF9vb3BzKHN0cnVjdCBPb3BzICpv
b3BzKTsNCiB2b2lkIHRlc3Rfb29wc2xpbmsoc3RydWN0IE9vcHNMaW5rICpvbCk7DQogdm9p
ZCB0ZXN0X29vcHNsaW5rbyhzdHJ1Y3QgT29wc0xpbmsgKm9sKTsNCi0NCit2b2lkIG9yZ2Fu
aXplX29vcHMoKTsNCitmbG9hdCB0cmVlX2dyYXBoX3Bvc2l0aW9uX29vcHMoc3RydWN0IE9v
cHMgKmN1cm9vcCk7DQordm9pZCBvcmdhbml6ZV90cmVlX2dyYXBoX29vcHMoKTsNCiAjZW5k
aWYNCiANCkluZGV4OiBzb3VyY2UvYmxlbmRlci9tYWtlc2RuYS9ETkFfc3BhY2VfdHlwZXMu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L2JmLWJsZW5kZXIvYmxlbmRl
ci9zb3VyY2UvYmxlbmRlci9tYWtlc2RuYS9ETkFfc3BhY2VfdHlwZXMuaCx2DQpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTkNCmRpZmYgLXUgLXIxLjE5IEROQV9zcGFjZV90eXBlcy5oDQot
LS0gc291cmNlL2JsZW5kZXIvbWFrZXNkbmEvRE5BX3NwYWNlX3R5cGVzLmgJMTkgQXByIDIw
MDQgMjI6MDU6MzYgLTAwMDAJMS4xOQ0KKysrIHNvdXJjZS9ibGVuZGVyL21ha2VzZG5hL0RO
QV9zcGFjZV90eXBlcy5oCTI4IEFwciAyMDA0IDIzOjQ1OjUyIC0wMDAwDQpAQCAtMTkwLDYg
KzE5MCw5IEBADQogDQogCVZpZXcyRCB2MmQ7DQogCQ0KKwlpbnQgdmlld1R5cGU7DQorCWlu
dCBvcmdhbml6ZVR5cGU7IC8qIGFkZGVkIHRvIGtlZXAgdGhlIHN0cnVjdCA4IGJ5dGVzIGFs
aWduZWQgKi8NCisJDQogCUxpc3RCYXNlIG9vcHM7DQogCXNob3J0IHBpbiwgdmlzaWZsYWcs
IGZsYWcsIHJ0Ow0KIAl2b2lkICpsb2NrcG9pbjsNCkBAIC00NTQsNiArNDU3LDE0IEBADQog
I2RlZmluZSBPT1BTX0xBWQkxMDI0DQogI2RlZmluZSBPT1BTX0xJCQkyMDQ4DQogI2RlZmlu
ZSBPT1BTX0lNCQk0MDk2DQorDQorLyogU3BhY2VPb3Blcy0+dmlld1R5cGUgKi8NCisjZGVm
aW5lIE1BTlVBTF9EUkFXIAkxDQorI2RlZmluZSBTRUxFQ1RJT05fT05MWQkyDQorDQorLyog
U3BhY2VPb3Blcy0+b3JnYW5pemVUeXBlICovDQorI2RlZmluZSBERUZBVUxUX09SR0FOSVpF
UiAJMQ0KKyNkZWZpbmUgVFJFRV9HUkFQSAkyDQogDQogLyogaGVhZGVyYnV0dG9uczogNDUw
LTQ5OSAqLw0KIA0KSW5kZXg6IHNvdXJjZS9ibGVuZGVyL3NyYy9oZWFkZXJfb29wcy5jDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmYtYmxlbmRlci9ibGVuZGVyL3Nv
dXJjZS9ibGVuZGVyL3NyYy9oZWFkZXJfb29wcy5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS43DQpkaWZmIC11IC1yMS43IGhlYWRlcl9vb3BzLmMNCi0tLSBzb3VyY2UvYmxlbmRlci9z
cmMvaGVhZGVyX29vcHMuYwkyNiBNYXIgMjAwNCAwMToxMjo0NSAtMDAwMAkxLjcNCisrKyBz
b3VyY2UvYmxlbmRlci9zcmMvaGVhZGVyX29vcHMuYwkyOCBBcHIgMjAwNCAyMzo0NTo1NiAt
MDAwMA0KQEAgLTEwMSwyMDkgKzEwMSwyMjkgQEANCiAJCWJyZWFrOw0KIAl9DQogfQ0KLQ0K
LXN0YXRpYyB2b2lkIGRvX29vcHNfdmlld21lbnUodm9pZCAqYXJnLCBpbnQgZXZlbnQpDQot
ew0KLQ0KLQlzd2l0Y2goZXZlbnQpIHsNCi0JY2FzZSAwOiAvKiBTaHVmZmxlIFNlbGVjdGVk
IEJsb2NrcyAqLw0KLQkJc2h1ZmZsZV9vb3BzKCk7DQotCQlicmVhazsNCi0JY2FzZSAxOiAv
KiBTaHJpbmsgU2VsZWN0ZWQgQmxvY2tzICovDQotICAgIAlzaHJpbmtfb29wcygpOw0KLSAg
ICAgICAgYnJlYWs7DQotICAgIGNhc2UgMjogLyogVmlldyBBbGwgKi8NCi0JCWRvX29vcHNf
YnV0dG9ucyhCX09PUFNIT01FKTsNCi0JCWJyZWFrOw0KLQljYXNlIDM6IC8qIE1heGltaXpl
IFdpbmRvdyAqLw0KLQkJLyogdXNpbmcgZXZlbnQgQl9GVUxMICovDQotCQlicmVhazsNCi0J
fQ0KLX0JCQkNCi0NCi1zdGF0aWMgdWlCbG9jayAqb29wc192aWV3bWVudSh2b2lkICphcmdf
dW51c2VkKQ0KLXsNCi0vKglzdGF0aWMgc2hvcnQgdG9nPTA7ICovDQotCXVpQmxvY2sgKmJs
b2NrOw0KLQlzaG9ydCB5Y289IDAsIG1lbnV3aWR0aD0xMjA7DQotCQ0KLQlibG9jaz0gdWlO
ZXdCbG9jaygmY3VyYXJlYS0+dWlibG9ja3MsICJvb3BzX3ZpZXdtZW51IiwgVUlfRU1CT1NT
UCwgVUlfSEVMViwgY3VyYXJlYS0+aGVhZHdpbik7DQotCXVpQmxvY2tTZXRCdXRtRnVuYyhi
bG9jaywgZG9fb29wc192aWV3bWVudSwgTlVMTCk7DQotCQkNCi0JdWlEZWZJY29uVGV4dEJ1
dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJTaHVmZmxlIFNlbGVjdGVkIEJsb2Nr
c3xTaGlmdCBTIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAs
IDEsIDAsICIiKTsNCi0gICAgdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNP
Tl9CTEFOSzEsICJTaHJpbmsgU2VsZWN0ZWQgQmxvY2tzfEFsdCBTIiwgMCwgeWNvLT0yMCwg
bWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDEsIDEsICIiKTsNCiANCitzdGF0aWMg
dm9pZCBkb19vb3BzX3ZpZXdtZW51KHZvaWQgKmFyZywgaW50IGV2ZW50KQ0KK3sNCisNCisJ
c3dpdGNoKGV2ZW50KSB7DQorCWNhc2UgMDogLyogU2h1ZmZsZSBTZWxlY3RlZCBCbG9ja3Mg
Ki8NCisJCXNodWZmbGVfb29wcygpOw0KKwkJYnJlYWs7DQorCWNhc2UgMTogLyogU2hyaW5r
IFNlbGVjdGVkIEJsb2NrcyAqLw0KKyAgICAJc2hyaW5rX29vcHMoKTsNCisgICAgICAgIGJy
ZWFrOw0KKyAgICBjYXNlIDI6IC8qIFZpZXcgQWxsICovDQorCQlkb19vb3BzX2J1dHRvbnMo
Ql9PT1BTSE9NRSk7DQorCQlicmVhazsNCisJY2FzZSAzOiAvKiBNYXhpbWl6ZSBXaW5kb3cg
Ki8NCisJCS8qIHVzaW5nIGV2ZW50IEJfRlVMTCAqLw0KKwkJYnJlYWs7DQorCWNhc2UgNDog
LyogTWFudWFsIE1vZGUgKi8NCisJCUcuc29vcHMtPnZpZXdUeXBlID0gTUFOVUFMX0RSQVc7
DQorCQlidWlsZF9vb3BzKDApOw0KKwkJYnJlYWs7DQorCWNhc2UgNTogLyogRHluYW1pYzpz
ZWxlY3Rpb24gTW9kZSAqLw0KKwkJRy5zb29wcy0+b3JnYW5pemVUeXBlID0gVFJFRV9HUkFQ
SDsNCisJCWJ1aWxkX29vcHMoMCk7DQorCQlicmVhazsNCisJY2FzZSA2OiAvKiBEeW5hbWlj
OnNlbGVjdGlvbiBNb2RlICovDQorCQlHLnNvb3BzLT52aWV3VHlwZSA9IFNFTEVDVElPTl9P
TkxZOw0KKwkJYnVpbGRfb29wcygwKTsNCisJCWJyZWFrOw0KKwkNCisJfQ0KK30JCQkNCisN
CitzdGF0aWMgdWlCbG9jayAqb29wc192aWV3bWVudSh2b2lkICphcmdfdW51c2VkKQ0KK3sN
CisvKglzdGF0aWMgc2hvcnQgdG9nPTA7ICovDQorCXVpQmxvY2sgKmJsb2NrOw0KKwlzaG9y
dCB5Y289IDAsIG1lbnV3aWR0aD0xMjA7DQorCQ0KKwlibG9jaz0gdWlOZXdCbG9jaygmY3Vy
YXJlYS0+dWlibG9ja3MsICJvb3BzX3ZpZXdtZW51IiwgVUlfRU1CT1NTUCwgVUlfSEVMViwg
Y3VyYXJlYS0+aGVhZHdpbik7DQorCXVpQmxvY2tTZXRCdXRtRnVuYyhibG9jaywgZG9fb29w
c192aWV3bWVudSwgTlVMTCk7DQorCQkNCisJdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVU
TSwgMSwgSUNPTl9CTEFOSzEsICJTaHVmZmxlIFNlbGVjdGVkIEJsb2Nrc3xTaGlmdCBTIiwg
MCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDEsIDAsICIiKTsN
CisgICAgdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJT
aHJpbmsgU2VsZWN0ZWQgQmxvY2tzfEFsdCBTIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAx
OSwgTlVMTCwgMC4wLCAwLjAsIDEsIDEsICIiKTsNCisJDQorCXVpRGVmQnV0KGJsb2NrLCBT
RVBSLCAwLCAiIiwgICAgICAgIDAsIHljby09NiwgbWVudXdpZHRoLCA2LCBOVUxMLCAwLjAs
IDAuMCwgMCwgMCwgIiIpOyAgDQorDQorCXVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0s
IDEsIElDT05fQkxBTksxLCAiVmlldyBBbGx8SG9tZSIsIDAsIHljby09MjAsIG1lbnV3aWR0
aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAxLCAyLCAiIik7DQorCQkNCisJaWYoIWN1cmFyZWEt
PmZ1bGwpIHVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIEJfRlVMTCwgSUNPTl9CTEFO
SzEsICJNYXhpbWl6ZSBXaW5kb3d8Q3RybCBVcEFycm93IiwgMCwgeWNvLT0yMCwgbWVudXdp
ZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAsIDMsICIiKTsNCisJZWxzZSB1aURlZkljb25U
ZXh0QnV0KGJsb2NrLCBCVVRNLCBCX0ZVTEwsIElDT05fQkxBTksxLCAiVGlsZSBXaW5kb3d8
Q3RybCBEb3duQXJyb3ciLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBOVUxMLCAwLjAs
IDAuMCwgMCwgMywgIiIpOw0KKwkNCiAJdWlEZWZCdXQoYmxvY2ssIFNFUFIsIDAsICIiLCAg
ICAgICAgMCwgeWNvLT02LCBtZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwgMC4wLCAwLCAwLCAi
Iik7ICANCi0NCi0JdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFO
SzEsICJWaWV3IEFsbHxIb21lIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwg
MC4wLCAwLjAsIDEsIDIsICIiKTsNCi0JCQ0KLQlpZighY3VyYXJlYS0+ZnVsbCkgdWlEZWZJ
Y29uVGV4dEJ1dChibG9jaywgQlVUTSwgQl9GVUxMLCBJQ09OX0JMQU5LMSwgIk1heGltaXpl
IFdpbmRvd3xDdHJsIFVwQXJyb3ciLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBOVUxM
LCAwLjAsIDAuMCwgMCwgMywgIiIpOw0KLQllbHNlIHVpRGVmSWNvblRleHRCdXQoYmxvY2ss
IEJVVE0sIEJfRlVMTCwgSUNPTl9CTEFOSzEsICJUaWxlIFdpbmRvd3xDdHJsIERvd25BcnJv
dyIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAwLCAzLCAi
Iik7DQotCQ0KLQlpZihjdXJhcmVhLT5oZWFkZXJ0eXBlPT1IRUFERVJUT1ApIHsNCi0JCXVp
QmxvY2tTZXREaXJlY3Rpb24oYmxvY2ssIFVJX0RPV04pOw0KLQl9DQotCWVsc2Ugew0KLQkJ
dWlCbG9ja1NldERpcmVjdGlvbihibG9jaywgVUlfVE9QKTsNCi0JCXVpQmxvY2tGbGlwT3Jk
ZXIoYmxvY2spOw0KLQl9DQotDQotCXVpVGV4dEJvdW5kc0Jsb2NrKGJsb2NrLCA1MCk7DQot
CQ0KLQlyZXR1cm4gYmxvY2s7DQotfQ0KLQ0KLQ0KLXN0YXRpYyB2b2lkIGRvX29vcHNfc2Vs
ZWN0bWVudSh2b2lkICphcmcsIGludCBldmVudCkNCi17CQ0KLQ0KLQlzd2l0Y2goZXZlbnQp
DQotCXsNCi0JY2FzZSAwOiAvKiBCb3JkZXIgU2VsZWN0ICovDQotCQlib3JkZXJzZWxlY3Rf
b29wcygpOw0KLQkJYnJlYWs7DQotCWNhc2UgMTogLyogU2VsZWN0L0Rlc2VsZWN0IEFsbCAq
Lw0KLQkJc3dhcF9zZWxlY3RfYWxsX29vcHMoKTsNCi0JCWJyZWFrOw0KLQljYXNlIDI6IC8q
IExpbmtlZCB0byBTZWxlY3RlZCAqLw0KLQkJc2VsZWN0X2xpbmtlZF9vb3BzKCk7DQotCQli
cmVhazsNCi0JY2FzZSAzOiAvKiBVc2VycyBvZiBTZWxlY3RlZCAqLw0KLQkJc2VsZWN0X2Jh
Y2tsaW5rZWRfb29wcygpOw0KLQkJYnJlYWs7DQotCX0NCi19DQotDQotc3RhdGljIHVpQmxv
Y2sgKm9vcHNfc2VsZWN0bWVudSh2b2lkICphcmdfdW51c2VkKQ0KLXsNCi0JdWlCbG9jayAq
YmxvY2s7DQotCXNob3J0IHljbz0gMCwgbWVudXdpZHRoPTEyMDsNCi0NCi0JYmxvY2s9IHVp
TmV3QmxvY2soJmN1cmFyZWEtPnVpYmxvY2tzLCAib29wc19zZWxlY3RtZW51IiwgVUlfRU1C
T1NTUCwgVUlfSEVMViwgY3VyYXJlYS0+aGVhZHdpbik7DQotCXVpQmxvY2tTZXRCdXRtRnVu
YyhibG9jaywgZG9fb29wc19zZWxlY3RtZW51LCBOVUxMKTsNCi0NCi0JdWlEZWZJY29uVGV4
dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJCb3JkZXIgU2VsZWN0fEIiLCAw
LCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBOVUxMLCAwLjAsIDAuMCwgMCwgMCwgIiIpOw0K
LQkNCi0JdWlEZWZCdXQoYmxvY2ssIFNFUFIsIDAsICIiLCAgICAgICAgMCwgeWNvLT02LCBt
ZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwgMC4wLCAwLCAwLCAiIik7DQotDQotCXVpRGVmSWNv
blRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiU2VsZWN0L0Rlc2VsZWN0
IEFsbHxBIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAs
IDEsICIiKTsNCi0NCi0JdWlEZWZCdXQoYmxvY2ssIFNFUFIsIDAsICIiLCAgICAgICAgMCwg
eWNvLT02LCBtZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwgMC4wLCAwLCAwLCAiIik7ICAgIA0K
LQ0KLQl1aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIkxp
bmtlZCB0byBTZWxlY3RlZHxMIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwg
MC4wLCAwLjAsIDAsIDIsICIiKTsNCi0JdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwg
MSwgSUNPTl9CTEFOSzEsICJVc2VycyBvZiBTZWxlY3RlZHxTaGlmdCBMIiwgMCwgeWNvLT0y
MCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAsIDMsICIiKTsNCi0NCi0JaWYo
Y3VyYXJlYS0+aGVhZGVydHlwZT09SEVBREVSVE9QKSB7DQotCQl1aUJsb2NrU2V0RGlyZWN0
aW9uKGJsb2NrLCBVSV9ET1dOKTsNCi0JfQ0KLQllbHNlIHsNCi0JCXVpQmxvY2tTZXREaXJl
Y3Rpb24oYmxvY2ssIFVJX1RPUCk7DQotCQl1aUJsb2NrRmxpcE9yZGVyKGJsb2NrKTsNCi0J
fQ0KLQ0KLQl1aVRleHRCb3VuZHNCbG9jayhibG9jaywgNTApOw0KLQ0KLQlyZXR1cm4gYmxv
Y2s7DQotfQ0KLQ0KLQ0KLXZvaWQgb29wc19idXR0b25zKHZvaWQpDQotewkNCi0JU3BhY2VP
b3BzICpzb29wczsNCi0JT29wcyAqb29wczsNCi0JdWlCbG9jayAqYmxvY2s7DQotCXNob3J0
IHhjbywgeG1heDsNCi0JY2hhciBuYWFtWzI1Nl07DQotDQotCXNvb3BzPSBjdXJhcmVhLT5z
cGFjZWRhdGEuZmlyc3Q7DQotDQotCXNwcmludGYobmFhbSwgImhlYWRlciAlZCIsIGN1cmFy
ZWEtPmhlYWR3aW4pOw0KLQlibG9jaz0gdWlOZXdCbG9jaygmY3VyYXJlYS0+dWlibG9ja3Ms
IG5hYW0sIFVJX0VNQk9TUywgVUlfSEVMViwgY3VyYXJlYS0+aGVhZHdpbik7DQotDQotCWlm
KGFyZWFfaXNfYWN0aXZlX2FyZWEoY3VyYXJlYSkpIHVpQmxvY2tTZXRDb2woYmxvY2ssIFRI
X0hFQURFUik7DQotCWVsc2UgdWlCbG9ja1NldENvbChibG9jaywgVEhfSEVBREVSREVTRUwp
Ow0KLQ0KLQljdXJhcmVhLT5idXRzcGFjZXR5cGU9IFNQQUNFX09PUFM7DQotDQotCXhjbyA9
IDg7DQotCQ0KLQl1aURlZkljb25UZXh0QnV0QyhibG9jaywgSUNPTlRFWFRST1csQl9ORVdT
UEFDRSwgSUNPTl9WSUVXM0QsIHdpbmRvd3R5cGVfcHVwKCksIHhjbywwLFhJQysxMCxZSUMs
ICYoY3VyYXJlYS0+YnV0c3BhY2V0eXBlKSwgMS4wLCBTUEFDRUlDT05NQVgsIDAsIDAsICJE
aXNwbGF5cyBDdXJyZW50IFdpbmRvdyBUeXBlLiBDbGljayBmb3IgbWVudSBvZiBhdmFpbGFi
bGUgdHlwZXMuIik7DQotDQotCXhjbys9IFhJQysxNDsNCi0NCi0JdWlCbG9ja1NldEVtYm9z
cyhibG9jaywgVUlfRU1CT1NTTik7DQotCWlmKGN1cmFyZWEtPmZsYWcgJiBIRUFERVJfTk9f
UFVMTERPV04pIHsNCi0JCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8MCwgQl9GTElQ
SU5GT01FTlUsIElDT05fRElTQ0xPU1VSRV9UUklfUklHSFQsDQotCQkJCXhjbywyLFhJQyxZ
SUMtMiwNCi0JCQkJJihjdXJhcmVhLT5mbGFnKSwgMCwgMCwgMCwgMCwgIlNob3cgcHVsbGRv
d24gbWVudXMiKTsNCi0JfSBlbHNlIHsNCi0JCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xC
SVR8MCwgQl9GTElQSU5GT01FTlUsIElDT05fRElTQ0xPU1VSRV9UUklfRE9XTiwNCi0JCQkJ
eGNvLDIsWElDLFlJQy0yLA0KLQkJCQkmKGN1cmFyZWEtPmZsYWcpLCAwLCAwLCAwLCAwLCAi
SGlkZSBwdWxsZG93biBtZW51cyIpOw0KLQl9DQotCXVpQmxvY2tTZXRFbWJvc3MoYmxvY2ss
IFVJX0VNQk9TUyk7DQotCXhjbys9WElDOw0KLQ0KLQlpZigoY3VyYXJlYS0+ZmxhZyAmIEhF
QURFUl9OT19QVUxMRE9XTik9PTApIHsNCi0JLyogcHVsbCBkb3duIG1lbnVzICovDQotCQl1
aUJsb2NrU2V0RW1ib3NzKGJsb2NrLCBVSV9FTUJPU1NQKTsNCi0JDQotCQl4bWF4PSBHZXRC
dXRTdHJpbmdMZW5ndGgoIlZpZXciKTsNCi0JCXVpRGVmQmxvY2tCdXQoYmxvY2ssIG9vcHNf
dmlld21lbnUsIE5VTEwsICJWaWV3IiwgeGNvLCAtMiwgeG1heC0zLCAyNCwgIiIpOw0KLQkJ
eGNvKz0geG1heDsNCi0JCQ0KLQkJeG1heD0gR2V0QnV0U3RyaW5nTGVuZ3RoKCJTZWxlY3Qi
KTsNCi0JCXVpRGVmQmxvY2tCdXQoYmxvY2ssIG9vcHNfc2VsZWN0bWVudSwgTlVMTCwgIlNl
bGVjdCIsIHhjbywgLTIsIHhtYXgtMywgMjQsICIiKTsNCi0JCXhjbys9IHhtYXg7DQotDQot
CX0NCi0NCi0JdWlCbG9ja1NldEVtYm9zcyhibG9jaywgVUlfRU1CT1NTWCk7DQorCQ0KKwl1
aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIk1hbnVhbCBB
cnJhbmdlbWVudCIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4w
LCAxLCA0LCAiU2V0IE9vcHMgdG8gbWFudWFsIGFycmFuZ2VtZW50Iik7DQorCXVpRGVmSWNv
blRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiVHJlZSBHcmFwaCIsIDAs
IHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAxLCA1LCAiU2V0IE9v
cHMgdG8gTGVmdC0+UmlnaHQgVHJlZSBBcnJhbmdtZW50Iik7DQorCXVpRGVmQnV0KGJsb2Nr
LCBTRVBSLCAwLCAiIiwgICAgICAgIDAsIHljby09NiwgbWVudXdpZHRoLCA2LCBOVUxMLCAw
LjAsIDAuMCwgMCwgMCwgIiIpOyAgDQorCXVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0s
IDEsIElDT05fQkxBTksxLCAiU2VsZWN0aW9uOkR5bmFtaWMiLCAwLCB5Y28tPTIwLCBtZW51
d2lkdGgsIDE5LCBOVUxMLCAwLjAsIDAuMCwgMSwgNiwgIlNldCBPb3BzIHRvIGR5bmFtaWMg
c2VsZWN0aW9uIGJhc2VkIGFycmFuZ2VtZW50Iik7DQorCQ0KKwlpZihjdXJhcmVhLT5oZWFk
ZXJ0eXBlPT1IRUFERVJUT1ApIHsNCisJCXVpQmxvY2tTZXREaXJlY3Rpb24oYmxvY2ssIFVJ
X0RPV04pOw0KKwl9DQorCWVsc2Ugew0KKwkJdWlCbG9ja1NldERpcmVjdGlvbihibG9jaywg
VUlfVE9QKTsNCisJCXVpQmxvY2tGbGlwT3JkZXIoYmxvY2spOw0KKwl9DQorDQorCXVpVGV4
dEJvdW5kc0Jsb2NrKGJsb2NrLCA1MCk7DQorCQ0KKwlyZXR1cm4gYmxvY2s7DQorfQ0KKw0K
Kw0KK3N0YXRpYyB2b2lkIGRvX29vcHNfc2VsZWN0bWVudSh2b2lkICphcmcsIGludCBldmVu
dCkNCit7CQ0KKw0KKwlzd2l0Y2goZXZlbnQpDQorCXsNCisJY2FzZSAwOiAvKiBCb3JkZXIg
U2VsZWN0ICovDQorCQlib3JkZXJzZWxlY3Rfb29wcygpOw0KKwkJYnJlYWs7DQorCWNhc2Ug
MTogLyogU2VsZWN0L0Rlc2VsZWN0IEFsbCAqLw0KKwkJc3dhcF9zZWxlY3RfYWxsX29vcHMo
KTsNCisJCWJyZWFrOw0KKwljYXNlIDI6IC8qIExpbmtlZCB0byBTZWxlY3RlZCAqLw0KKwkJ
c2VsZWN0X2xpbmtlZF9vb3BzKCk7DQorCQlicmVhazsNCisJY2FzZSAzOiAvKiBVc2VycyBv
ZiBTZWxlY3RlZCAqLw0KKwkJc2VsZWN0X2JhY2tsaW5rZWRfb29wcygpOw0KKwkJYnJlYWs7
DQorCX0NCit9DQorDQorc3RhdGljIHVpQmxvY2sgKm9vcHNfc2VsZWN0bWVudSh2b2lkICph
cmdfdW51c2VkKQ0KK3sNCisJdWlCbG9jayAqYmxvY2s7DQorCXNob3J0IHljbz0gMCwgbWVu
dXdpZHRoPTEyMDsNCisNCisJYmxvY2s9IHVpTmV3QmxvY2soJmN1cmFyZWEtPnVpYmxvY2tz
LCAib29wc19zZWxlY3RtZW51IiwgVUlfRU1CT1NTUCwgVUlfSEVMViwgY3VyYXJlYS0+aGVh
ZHdpbik7DQorCXVpQmxvY2tTZXRCdXRtRnVuYyhibG9jaywgZG9fb29wc19zZWxlY3RtZW51
LCBOVUxMKTsNCisNCisJdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9C
TEFOSzEsICJCb3JkZXIgU2VsZWN0fEIiLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBO
VUxMLCAwLjAsIDAuMCwgMCwgMCwgIiIpOw0KKwkNCisJdWlEZWZCdXQoYmxvY2ssIFNFUFIs
IDAsICIiLCAgICAgICAgMCwgeWNvLT02LCBtZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwgMC4w
LCAwLCAwLCAiIik7DQorDQorCXVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElD
T05fQkxBTksxLCAiU2VsZWN0L0Rlc2VsZWN0IEFsbHxBIiwgMCwgeWNvLT0yMCwgbWVudXdp
ZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAsIDEsICIiKTsNCisNCisJdWlEZWZCdXQoYmxv
Y2ssIFNFUFIsIDAsICIiLCAgICAgICAgMCwgeWNvLT02LCBtZW51d2lkdGgsIDYsIE5VTEws
IDAuMCwgMC4wLCAwLCAwLCAiIik7ICAgIA0KKw0KKwl1aURlZkljb25UZXh0QnV0KGJsb2Nr
LCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIkxpbmtlZCB0byBTZWxlY3RlZHxMIiwgMCwgeWNv
LT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAsIDIsICIiKTsNCisJdWlE
ZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJVc2VycyBvZiBT
ZWxlY3RlZHxTaGlmdCBMIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4w
LCAwLjAsIDAsIDMsICIiKTsNCisNCisJaWYoY3VyYXJlYS0+aGVhZGVydHlwZT09SEVBREVS
VE9QKSB7DQorCQl1aUJsb2NrU2V0RGlyZWN0aW9uKGJsb2NrLCBVSV9ET1dOKTsNCisJfQ0K
KwllbHNlIHsNCisJCXVpQmxvY2tTZXREaXJlY3Rpb24oYmxvY2ssIFVJX1RPUCk7DQorCQl1
aUJsb2NrRmxpcE9yZGVyKGJsb2NrKTsNCisJfQ0KKw0KKwl1aVRleHRCb3VuZHNCbG9jayhi
bG9jaywgNTApOw0KKw0KKwlyZXR1cm4gYmxvY2s7DQorfQ0KKw0KKw0KK3ZvaWQgb29wc19i
dXR0b25zKHZvaWQpDQorewkNCisJU3BhY2VPb3BzICpzb29wczsNCisJT29wcyAqb29wczsN
CisJdWlCbG9jayAqYmxvY2s7DQorCXNob3J0IHhjbywgeG1heDsNCisJY2hhciBuYWFtWzI1
Nl07DQorDQorCXNvb3BzPSBjdXJhcmVhLT5zcGFjZWRhdGEuZmlyc3Q7DQorDQorCXNwcmlu
dGYobmFhbSwgImhlYWRlciAlZCIsIGN1cmFyZWEtPmhlYWR3aW4pOw0KKwlibG9jaz0gdWlO
ZXdCbG9jaygmY3VyYXJlYS0+dWlibG9ja3MsIG5hYW0sIFVJX0VNQk9TUywgVUlfSEVMViwg
Y3VyYXJlYS0+aGVhZHdpbik7DQorDQorCWlmKGFyZWFfaXNfYWN0aXZlX2FyZWEoY3VyYXJl
YSkpIHVpQmxvY2tTZXRDb2woYmxvY2ssIFRIX0hFQURFUik7DQorCWVsc2UgdWlCbG9ja1Nl
dENvbChibG9jaywgVEhfSEVBREVSREVTRUwpOw0KKw0KKwljdXJhcmVhLT5idXRzcGFjZXR5
cGU9IFNQQUNFX09PUFM7DQorDQorCXhjbyA9IDg7DQorCQ0KKwl1aURlZkljb25UZXh0QnV0
QyhibG9jaywgSUNPTlRFWFRST1csQl9ORVdTUEFDRSwgSUNPTl9WSUVXM0QsIHdpbmRvd3R5
cGVfcHVwKCksIHhjbywwLFhJQysxMCxZSUMsICYoY3VyYXJlYS0+YnV0c3BhY2V0eXBlKSwg
MS4wLCBTUEFDRUlDT05NQVgsIDAsIDAsICJEaXNwbGF5cyBDdXJyZW50IFdpbmRvdyBUeXBl
LiBDbGljayBmb3IgbWVudSBvZiBhdmFpbGFibGUgdHlwZXMuIik7DQorDQorCXhjbys9IFhJ
QysxNDsNCisNCisJdWlCbG9ja1NldEVtYm9zcyhibG9jaywgVUlfRU1CT1NTTik7DQorCWlm
KGN1cmFyZWEtPmZsYWcgJiBIRUFERVJfTk9fUFVMTERPV04pIHsNCisJCXVpRGVmSWNvbkJ1
dFMoYmxvY2ssIFRPR3xCSVR8MCwgQl9GTElQSU5GT01FTlUsIElDT05fRElTQ0xPU1VSRV9U
UklfUklHSFQsDQorCQkJCXhjbywyLFhJQyxZSUMtMiwNCisJCQkJJihjdXJhcmVhLT5mbGFn
KSwgMCwgMCwgMCwgMCwgIlNob3cgcHVsbGRvd24gbWVudXMiKTsNCisJfSBlbHNlIHsNCisJ
CXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8MCwgQl9GTElQSU5GT01FTlUsIElDT05f
RElTQ0xPU1VSRV9UUklfRE9XTiwNCisJCQkJeGNvLDIsWElDLFlJQy0yLA0KKwkJCQkmKGN1
cmFyZWEtPmZsYWcpLCAwLCAwLCAwLCAwLCAiSGlkZSBwdWxsZG93biBtZW51cyIpOw0KKwl9
DQorCXVpQmxvY2tTZXRFbWJvc3MoYmxvY2ssIFVJX0VNQk9TUyk7DQorCXhjbys9WElDOw0K
Kw0KKwlpZigoY3VyYXJlYS0+ZmxhZyAmIEhFQURFUl9OT19QVUxMRE9XTik9PTApIHsNCisJ
LyogcHVsbCBkb3duIG1lbnVzICovDQorCQl1aUJsb2NrU2V0RW1ib3NzKGJsb2NrLCBVSV9F
TUJPU1NQKTsNCisJDQorCQl4bWF4PSBHZXRCdXRTdHJpbmdMZW5ndGgoIlZpZXciKTsNCisJ
CXVpRGVmQmxvY2tCdXQoYmxvY2ssIG9vcHNfdmlld21lbnUsIE5VTEwsICJWaWV3IiwgeGNv
LCAtMiwgeG1heC0zLCAyNCwgIiIpOw0KKwkJeGNvKz0geG1heDsNCisJCQ0KKwkJeG1heD0g
R2V0QnV0U3RyaW5nTGVuZ3RoKCJTZWxlY3QiKTsNCisJCXVpRGVmQmxvY2tCdXQoYmxvY2ss
IG9vcHNfc2VsZWN0bWVudSwgTlVMTCwgIlNlbGVjdCIsIHhjbywgLTIsIHhtYXgtMywgMjQs
ICIiKTsNCisJCXhjbys9IHhtYXg7DQorDQorCX0NCisNCisJdWlCbG9ja1NldEVtYm9zcyhi
bG9jaywgVUlfRU1CT1NTWCk7DQogDQogCXhjbys9IDg7DQotCQ0KKwkNCiAJLyogWk9PTSBh
bmQgQk9SREVSICovDQotICAgIHVpQmxvY2tCZWdpbkFsaWduKGJsb2NrKTsNCi0JdWlEZWZJ
Y29uQnV0SShibG9jaywgVE9HLCBCX1ZJRVcyRFpPT00sIElDT05fVklFV1pPT00sCShzaG9y
dCkoeGNvKSwwLFhJQyxZSUMsICZ2aWV3bW92ZXRlbXAsIDAsIDAsIDAsIDAsICJab29tcyB2
aWV3IChDdHJsIE1pZGRsZU1vdXNlKSIpOw0KLQl1aURlZkljb25CdXQoYmxvY2ssIEJVVCwg
Ql9JUE9CT1JERVIsIElDT05fQk9SREVSTU9WRSwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMs
WUlDLCAwLCAwLCAwLCAwLCAwLCAiWm9vbXMgdmlldyB0byBhcmVhIik7DQotICAgIHVpQmxv
Y2tFbmRBbGlnbihibG9jayk7DQotICAgIA0KKyAgICB1aUJsb2NrQmVnaW5BbGlnbihibG9j
ayk7DQorCXVpRGVmSWNvbkJ1dEkoYmxvY2ssIFRPRywgQl9WSUVXMkRaT09NLCBJQ09OX1ZJ
RVdaT09NLAkoc2hvcnQpKHhjbyksMCxYSUMsWUlDLCAmdmlld21vdmV0ZW1wLCAwLCAwLCAw
LCAwLCAiWm9vbXMgdmlldyAoQ3RybCBNaWRkbGVNb3VzZSkiKTsNCisJdWlEZWZJY29uQnV0
KGJsb2NrLCBCVVQsIEJfSVBPQk9SREVSLCBJQ09OX0JPUkRFUk1PVkUsCShzaG9ydCkoeGNv
Kz1YSUMpLDAsWElDLFlJQywgMCwgMCwgMCwgMCwgMCwgIlpvb21zIHZpZXcgdG8gYXJlYSIp
Ow0KKyAgICB1aUJsb2NrRW5kQWxpZ24oYmxvY2spOw0KKyAgICANCiAJeGNvKz0gODsNCi0g
ICAgDQotCS8qIFZJU0lCTEUgKi8NCi0JdWlCbG9ja0JlZ2luQWxpZ24oYmxvY2spOw0KLQl1
aURlZkJ1dFMoYmxvY2ssIFRPR3xCSVR8MTAsQl9ORVdPT1BTLCAiTGF5ZXIiLAkJKHNob3J0
KSh4Y28rPVhJQyksMCxYSUMrMjAsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAw
LCAiT25seSBzaG93IG9iamVjdCBkYXRhYmxvY2tzIG9uIHZpc2libGUgbGF5ZXJzIik7DQot
ICAgIHhjbys9IDIwOw0KLQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDAsIEJfTkVX
T09QUywgSUNPTl9TQ0VORV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNv
b3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIFNjZW5lIGRhdGFibG9ja3Mi
KTsNCi0JdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHwxLCBCX05FV09PUFMsIElDT05f
T0JKRUNUX0hMVCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lm
bGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxheXMgT2JqZWN0IGRhdGFibG9ja3MiKTsNCi0JdWlE
ZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHwyLCBCX05FV09PUFMsIElDT05fTUVTSF9ITFQs
CShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwg
MCwgMCwgIkRpc3BsYXlzIE1lc2ggZGF0YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJs
b2NrLCBUT0d8QklUfDMsIEJfTkVXT09QUywgSUNPTl9DVVJWRV9ITFQsCShzaG9ydCkoeGNv
Kz1YSUMpLDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3Bs
YXlzIEN1cnZlL1N1cmZhY2UvRm9udCBkYXRhYmxvY2tzIik7DQotCXVpRGVmSWNvbkJ1dFMo
YmxvY2ssIFRPR3xCSVR8NCwgQl9ORVdPT1BTLCBJQ09OX01CQUxMX0hMVCwJKHNob3J0KSh4
Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlz
cGxheXMgTWV0YWJhbGwgZGF0YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJsb2NrLCBU
T0d8QklUfDUsIEJfTkVXT09QUywgSUNPTl9MQVRUSUNFX0hMVCwJKHNob3J0KSh4Y28rPVhJ
QyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxheXMg
TGF0dGljZSBkYXRhYmxvY2tzIik7DQotCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8
NiwgQl9ORVdPT1BTLCBJQ09OX0xBTVBfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZ
SUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBMYW1wIGRhdGFi
bG9ja3MiKTsNCi0JdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHw3LCBCX05FV09PUFMs
IElDT05fTUFURVJJQUxfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29w
cy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBNYXRlcmlhbCBkYXRhYmxvY2tz
Iik7DQotCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8OCwgQl9ORVdPT1BTLCBJQ09O
X1RFWFRVUkVfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlz
aWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBUZXh0dXJlIGRhdGFibG9ja3MiKTsNCi0J
dWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHw5LCBCX05FV09PUFMsIElDT05fSVBPX0hM
VCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAw
LCAwLCAwLCAiRGlzcGxheXMgSXBvIGRhdGFibG9ja3MiKTsNCi0JdWlEZWZJY29uQnV0Uyhi
bG9jaywgVE9HfEJJVHwxMiwgQl9ORVdPT1BTLCBJQ09OX0lNQUdFX0hMVCwJKHNob3J0KSh4
Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlz
cGxheXMgSW1hZ2UgZGF0YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8
QklUfDExLCBCX05FV09PUFMsIElDT05fTElCUkFSWV9ITFQsCShzaG9ydCkoeGNvKz1YSUMp
LDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIExp
YnJhcnkgZGF0YWJsb2NrcyIpOw0KLQ0KLSAgICB1aUJsb2NrRW5kQWxpZ24oYmxvY2spOw0K
LSAgDQotCS8qIG5hbWUgKi8NCi0JaWYoRy5zb29wcy0+bG9ja3BvaW4pIHsNCi0JCW9vcHM9
IEcuc29vcHMtPmxvY2twb2luOw0KLQkJaWYob29wcy0+dHlwZT09SURfTEkpIHN0cmNweShu
YWFtLCAoKExpYnJhcnkgKilvb3BzLT5pZCktPm5hbWUpOw0KLQkJZWxzZSBzdHJjcHkobmFh
bSwgb29wcy0+aWQtPm5hbWUpOw0KLQkJDQotCQljcGFjaygweDApOw0KLQkJZ2xSYXN0ZXJQ
b3MyaSh4Y28rPVhJQysxMCwJNSk7DQotCQlCTUZfRHJhd1N0cmluZyh1aUJsb2NrR2V0Q3Vy
Rm9udChibG9jayksIG5hYW0pOw0KLQ0KLQl9DQorICAgIA0KKwkvKiBWSVNJQkxFICovDQor
CXVpQmxvY2tCZWdpbkFsaWduKGJsb2NrKTsNCisJdWlEZWZCdXRTKGJsb2NrLCBUT0d8QklU
fDEwLEJfTkVXT09QUywgIkxheWVyIiwJCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDKzIwLFlJ
QywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIk9ubHkgc2hvdyBvYmplY3QgZGF0
YWJsb2NrcyBvbiB2aXNpYmxlIGxheWVycyIpOw0KKyAgICB4Y28rPSAyMDsNCisJdWlEZWZJ
Y29uQnV0UyhibG9jaywgVE9HfEJJVHwwLCBCX05FV09PUFMsIElDT05fU0NFTkVfSExULAko
c2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAs
IDAsICJEaXNwbGF5cyBTY2VuZSBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1dFMoYmxv
Y2ssIFRPR3xCSVR8MSwgQl9ORVdPT1BTLCBJQ09OX09CSkVDVF9ITFQsCShzaG9ydCkoeGNv
Kz1YSUMpLDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3Bs
YXlzIE9iamVjdCBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xC
SVR8MiwgQl9ORVdPT1BTLCBJQ09OX01FU0hfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJ
QyxZSUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBNZXNoIGRh
dGFibG9ja3MiKTsNCisJdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHwzLCBCX05FV09P
UFMsIElDT05fQ1VSVkVfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29w
cy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBDdXJ2ZS9TdXJmYWNlL0ZvbnQg
ZGF0YWJsb2NrcyIpOw0KKwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDQsIEJfTkVX
T09QUywgSUNPTl9NQkFMTF9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNv
b3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIE1ldGFiYWxsIGRhdGFibG9j
a3MiKTsNCisJdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHw1LCBCX05FV09PUFMsIElD
T05fTEFUVElDRV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3BzLT52
aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIExhdHRpY2UgZGF0YWJsb2NrcyIpOw0K
Kwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDYsIEJfTkVXT09QUywgSUNPTl9MQU1Q
X0hMVCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAw
LCAwLCAwLCAwLCAiRGlzcGxheXMgTGFtcCBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1
dFMoYmxvY2ssIFRPR3xCSVR8NywgQl9ORVdPT1BTLCBJQ09OX01BVEVSSUFMX0hMVCwJKHNo
b3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAw
LCAiRGlzcGxheXMgTWF0ZXJpYWwgZGF0YWJsb2NrcyIpOw0KKwl1aURlZkljb25CdXRTKGJs
b2NrLCBUT0d8QklUfDgsIEJfTkVXT09QUywgSUNPTl9URVhUVVJFX0hMVCwJKHNob3J0KSh4
Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlz
cGxheXMgVGV4dHVyZSBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRP
R3xCSVR8OSwgQl9ORVdPT1BTLCBJQ09OX0lQT19ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAs
WElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIElwbyBk
YXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8MTIsIEJfTkVX
T09QUywgSUNPTl9JTUFHRV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNv
b3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIEltYWdlIGRhdGFibG9ja3Mi
KTsNCisJdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHwxMSwgQl9ORVdPT1BTLCBJQ09O
X0xJQlJBUllfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlz
aWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBMaWJyYXJ5IGRhdGFibG9ja3MiKTsNCisN
CisgICAgdWlCbG9ja0VuZEFsaWduKGJsb2NrKTsNCisgIA0KKwkvKiBuYW1lICovDQorCWlm
KEcuc29vcHMtPmxvY2twb2luKSB7DQorCQlvb3BzPSBHLnNvb3BzLT5sb2NrcG9pbjsNCisJ
CWlmKG9vcHMtPnR5cGU9PUlEX0xJKSBzdHJjcHkobmFhbSwgKChMaWJyYXJ5ICopb29wcy0+
aWQpLT5uYW1lKTsNCisJCWVsc2Ugc3RyY3B5KG5hYW0sIG9vcHMtPmlkLT5uYW1lKTsNCisJ
CQ0KKwkJY3BhY2soMHgwKTsNCisJCWdsUmFzdGVyUG9zMmkoeGNvKz1YSUMrMTAsCTUpOw0K
KwkJQk1GX0RyYXdTdHJpbmcodWlCbG9ja0dldEN1ckZvbnQoYmxvY2spLCBuYWFtKTsNCisN
CisJfQ0KIA0KLQkvKiBhbHdheXMgZG8gYXMgbGFzdCAqLw0KLQljdXJhcmVhLT5oZWFkYnV0
bGVuPSB4Y28rMipYSUM7DQorCS8qIGFsd2F5cyBkbyBhcyBsYXN0ICovDQorCWN1cmFyZWEt
PmhlYWRidXRsZW49IHhjbysyKlhJQzsNCiANCi0JdWlEcmF3QmxvY2soYmxvY2spOw0KKwl1
aURyYXdCbG9jayhibG9jayk7DQogfQ0KIA0KSW5kZXg6IHNvdXJjZS9ibGVuZGVyL3NyYy9v
b3BzLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3Zzcm9vdC9iZi1ibGVuZGVyL2Js
ZW5kZXIvc291cmNlL2JsZW5kZXIvc3JjL29vcHMuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNg0KZGlmZiAtdSAtcjEuNiBvb3BzLmMNCi0tLSBzb3VyY2UvYmxlbmRlci9zcmMvb29w
cy5jCTcgSmFuIDIwMDQgMTI6MjY6NDAgLTAwMDAJMS42DQorKysgc291cmNlL2JsZW5kZXIv
c3JjL29vcHMuYwkyOCBBcHIgMjAwNCAyMzo0NjowMCAtMDAwMA0KQEAgLTcxLDYgKzcxLDcg
QEANCiANCiBzdGF0aWMgaW50IGNvcnJlY3Rfb29wc195KE9vcHMgKm9vcHMpOw0KIA0KK2Zs
b2F0IG9vcHNsYXN0eD0wLjAsIG9vcHNsYXN0eT0gMC4wOw0KIA0KIE9vcHMgKmFkZF9vb3Bz
KHZvaWQgKmlkKQ0KIHsNCkBAIC01MzAsOCArNTMxLDYgQEANCiAJZWxzZSByZXR1cm4gMTsN
CiB9DQogDQotZmxvYXQgb29wc2xhc3R4PTAuMCwgb29wc2xhc3R5PSAwLjA7DQotDQogdm9p
ZCBuZXdfb29wc19sb2NhdGlvbihPb3BzICpuZXcpDQogew0KIAlmbG9hdCBkaXJ2ZWNbNF1b
Ml07DQpAQCAtNTM5LDcgKzUzOCwxMSBAQA0KIAlpbnQgYSwgYiwgcmM9IDEsIHRlbD0xLCBv
az0wOw0KIAkNCiAJaWYoRy5zb29wcz09MCkgcmV0dXJuOw0KLQkNCisJLyogdGVzdCBmb3Ig
d2hpY2ggcG9zaXRpb25pbmcgY29kZSBJIHVzZSBoZXJlLiAqLw0KKwlpZihHLnNvb3BzLT5v
cmdhbml6ZVR5cGUgPT0gVFJFRV9HUkFQSCkJew0KKwkJLyogY2FsbCBvdXIgb3JnYW5pemVy
IGNvZGUgaGVyZSAqLw0KKwkJcmV0dXJuOw0KKwl9DQogCWlmKEcuc29vcHMtPm9vcHMuZmly
c3Q9PUcuc29vcHMtPm9vcHMubGFzdCkgew0KIAkJb29wc2xhc3R4PSBvb3BzbGFzdHk9IDAu
MDsNCiAJfQ0KQEAgLTYxNyw5ICs2MjAsOTEgQEANCiANCiB9DQogDQordm9pZCBvcmdhbml6
ZV90cmVlX2dyYXBoX29vcHMoKSB7DQorCS8qIElOSVQ6DQorCSAqIGdldCB0aGUgZmlyc3Qg
b29wcyBhbmQgdGhlIHZpZXcgdHlwZQ0KKwkgKiBzZXQgYmVnaW4gcG9zaXRpb24gKi8NCisJ
T29wcyAqY3Vyb29wID0gRy5zb29wcy0+b29wcy5maXJzdDsNCisJT2JqZWN0ICpvYjsNCisJ
ZmxvYXQgcG9zdmVjWzJdID0gezAuMCwgMC4wfTsNCisJZmxvYXQgeGRpc3Q9IChmbG9hdClP
T1BTWCoxLjI7DQorCWZsb2F0IHlkaXN0PSAoZmxvYXQpT09QU1kqMS4yOw0KKwkNCisJLyog
Y2xlYXIgYWxsIG9vcHMgcG9zaXRpb25zICovDQorCXByaW50ZiAoInJlc2V0aW5nIGFsbCB0
aGUgb29wcyBwb3NpdGlvbnNcbiIpOw0KKwl3aGlsZSAoY3Vyb29wKSB7DQorCQljdXJvb3At
PnggPSAwLjA7DQorCQljdXJvb3AtPnkgPSAwLjA7DQorCQljdXJvb3AgPSBjdXJvb3AtPm5l
eHQ7DQorCX0NCisJLyogQkVHSU46DQorCSAqIHRlc3QgY3VycmVudCBvb3AgZm9yIHZpZXcg
dHlwZSBtYXNrIGFuZCB0aGVuIA0KKwkgKiBwb3NpdGlvbiBhdCAwLjAsMC4wIGlmIG1hc2sg
Zml0cyAqLw0KKwljdXJvb3AgPSBHLnNvb3BzLT5vb3BzLmZpcnN0Ow0KKwl3aGlsZSAoY3Vy
b29wKSB7DQorCQlpZiAoY3Vyb29wLT54ID09IDAuMCkgY3Vyb29wLT54ID0gcG9zdmVjWzBd
Ow0KKwkJaWYgKGN1cm9vcC0+eSA9PSAwLjApIGN1cm9vcC0+eSA9IHBvc3ZlY1sxXTsJDQor
CQlvYj0gKE9iamVjdCAqKWN1cm9vcC0+aWQ7DQorLy8JCWlmICgoRy5zb29wcy0+dmlld1R5
cGUgPT0gU0VMRUNUSU9OX09OTFkpICYmICEoIG9iLT5mbGFnICYgU0VMRUNUICkpICB7DQor
Ly8JCQljdXJvb3AgPSBjdXJvb3AtPm5leHQ7DQorLy8JCQljb250aW51ZTsNCisvLwkJfQ0K
KwkJcHJpbnRmICgiY2FsbGluZyB0aGUgcmVjdXJzaXZlIHBvc2l0aW9uIGZ1bmN0aW9uXG4i
KTsNCisJCXRyZWVfZ3JhcGhfcG9zaXRpb25fb29wcyhjdXJvb3ApOw0KKwkJLyogc2V0IHRo
ZSBwb3N2ZWMgdG8gb25lIGRvd24gZnJvbSB0aGUgbGFzdCBvb3BzIGRvbmUgKi8NCisJCXBv
c3ZlY1sxXT0gcG9zdmVjWzFdIC0gIHlkaXN0Ow0KKwkJY3Vyb29wID0gY3Vyb29wLT5uZXh0
Ow0KKwl9DQorfQ0KKw0KK2Zsb2F0IHRyZWVfZ3JhcGhfcG9zaXRpb25fb29wcyAoT29wcyAq
Y3Vyb29wKSB7DQorCU9vcHMgKmxpbmtlZG9vcDsJIA0KKwlPb3BzTGluayAqb2w7DQorCWZs
b2F0IHBvc3ZlY1syXTsNCisJZmxvYXQgeGRpc3Q9IChmbG9hdClPT1BTWCoxLjI7DQorCWZs
b2F0IHlkaXN0PSAoZmxvYXQpT09QU1kqMS4yOw0KKwkNCisJaWYgKCFjdXJvb3AtPmxpbmsu
Zmlyc3QpIHJldHVybiBjdXJvb3AtPng7DQorCW9sPSBjdXJvb3AtPmxpbmsuZmlyc3Q7DQor
CWxpbmtlZG9vcCA9IG9sLT50bzsNCisJLyogc2V0IHRoZSBwb3N2ZWMgdG8gb25lIG92ZXIg
ZnJvbSB0aGUgcGFyZW50IG9vcCAqLw0KKwlwb3N2ZWNbMF09IGN1cm9vcC0+eCArIHhkaXN0
Ow0KKwlwb3N2ZWNbMV09IGN1cm9vcC0+eTsNCisJcHJpbnRmICgic3RhcnRpbmcgdGhlIGxp
bmtlZCBsb29wXG4iKTsNCisJd2hpbGUgKG9sKSB7DQorCQlsaW5rZWRvb3AtPnggPSBwb3N2
ZWNbMF07DQorCQlsaW5rZWRvb3AtPnkgPSBwb3N2ZWNbMV07DQorCQlwb3N2ZWNbMF09IHRy
ZWVfZ3JhcGhfcG9zaXRpb25fb29wcyhsaW5rZWRvb3ApOw0KKwkJDQorCQkvKiBzZXQgdGhl
IHBvc3ZlYyB0byBvbmUgZG93biBmcm9tIHRoZSBsYXN0IGxpbmtlZG9vcCBkb25lICovDQor
CQlwb3N2ZWNbMV09IGxpbmtlZG9vcC0+eSAtIHlkaXN0Ow0KKwkJaWYgKCFvbC0+bmV4dCkg
YnJlYWs7DQorCQlwcmludGYoImdvaW5nIHRvIHRoZSBuZXh0IGxpbmsgaW4gdGhlIGxpc3Rc
biIpOw0KKwkJb2w9IG9sLT5uZXh0Ow0KKwkJcHJpbnRmKCJnZXR0aW5nIHRoZSBvb3AgbGlu
a2VkIHRvXG4iKTsNCisJCWxpbmtlZG9vcD0gb2wtPnRvOw0KKwl9DQorCQ0KKwlyZXR1cm4g
cG9zdmVjWzBdOw0KK30NCiANCi12b2lkIGZyZWVfb29wcyhPb3BzICpvb3BzKQkvKiBhbHNv
IG9vcHMgaXRzZWxmICovDQorLyogZW50cnkgcG9pbnQgZm9yIG9vcHMgb3JnYW5pemF0aW9u
IGNvZGUgKi8NCit2b2lkIG9yZ2FuaXplX29vcHMgKCkNCiB7DQorCXN3aXRjaChHLnNvb3Bz
LT5vcmdhbml6ZVR5cGUpIHsNCisJY2FzZSBUUkVFX0dSQVBIOg0KKwkJcHJpbnRmICgiRW50
ZXJlZCB0aGUgdHJlZSBncmFwaGluZyBjb2RlXG4iKTsNCisJCW9yZ2FuaXplX3RyZWVfZ3Jh
cGhfb29wcygpOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuOw0KKwkJCQkNCisJfQ0KKwlhbGxx
dWV1ZShSRURSQVdPT1BTLCAxKTsJDQorfQ0KKw0KK3ZvaWQgZnJlZV9vb3BzKE9vcHMgKm9v
cHMsIFNwYWNlT29wcyAqc28pCS8qIGFsc28gb29wcyBpdHNlbGYgKi8NCit7DQorCUJMSV9y
ZW1saW5rKCZzby0+b29wcywgb29wcyk7DQogCUJMSV9mcmVlbGlzdE4oJm9vcHMtPmxpbmsp
Ow0KIAlNRU1fZnJlZU4ob29wcyk7DQogfQ0KQEAgLTYyOSw4ICs3MTQsNyBAQA0KIAlPb3Bz
ICpvb3BzOw0KIA0KIAl3aGlsZSggKG9vcHM9IHNvLT5vb3BzLmZpcnN0KSApIHsNCi0JCUJM
SV9yZW1saW5rKCZzby0+b29wcywgb29wcyk7DQotCQlmcmVlX29vcHMob29wcyk7DQorCQlm
cmVlX29vcHMob29wcywgc28pOw0KIAl9DQogfQ0KIA0KQEAgLTc1OSwxNSArODQzLDE1IEBA
DQogCX0NCiAJZWxzZSB7DQogCQlvb3BzPSBhZGRfb29wcyhpZCk7DQotCQluZXdfb29wc19s
b2NhdGlvbihvb3BzKTsNCisJCW5ld19vb3BzX2xvY2F0aW9uKG9vcHMpOy8qIGVudHJ5IHBv
aW50IGZvciBvb3BzIHBvc2l0aW9uaW5nIGNvZGUgKi8NCiAJCWlmKEcuc29vcHMtPmZsYWcg
JiBTT19ORVdTRUxFQ1RFRCkgew0KIAkJCW9vcHMtPmZsYWcgfD0gU0VMRUNUOw0KIAkJfQ0K
IAl9DQotCQ0KIAlzd2l0Y2goIEdTKCAoKElEICopaWQpLT5uYW1lKSkgew0KIAljYXNlIElE
X1NDRToNCi0JCWFkZF9vb3BzbGluaygic2V0Iiwgb29wcywgSURfU0NFLCAmKChTY2VuZSAq
KWlkKS0+c2V0LCAoZmxvYXQpKC41Kk9PUFNYKSwgKGZsb2F0KU9PUFNZKTsNCisJCWlmIChH
LnNvb3BzLT52aWV3VHlwZSA9PSBTRUxFQ1RJT05fT05MWSkgcmV0dXJuIE5VTEw7DQorCSAJ
YWRkX29vcHNsaW5rKCJzZXQiLCBvb3BzLCBJRF9TQ0UsICYoKFNjZW5lICopaWQpLT5zZXQs
IChmbG9hdCkoLjUqT09QU1gpLCAoZmxvYXQpT09QU1kpOw0KIAkJYnJlYWs7DQogCWNhc2Ug
SURfT0I6DQogCQlvYj0gKE9iamVjdCAqKWlkOw0KQEAgLTgyOCw2ICs5MTIsNyBAQA0KIA0K
IAlpZihHLnNvb3BzPT0wKSByZXR1cm47CQ0KIAkNCisNCiAJLyogc2V0IGhpZGUgZmxhZ3Mg
Ki8NCiAJb29wcz0gRy5zb29wcy0+b29wcy5maXJzdDsNCiAJd2hpbGUob29wcykgew0KQEAg
LTg3Niw4NCArOTYxLDExIEBADQogDQogCQkJd2hpbGUob2IpIHsNCiAJCQkJb29wcz0gYWRk
X3Rlc3Rfb29wcyhvYik7DQotCQkJCW9iPSBvYi0+aWQubmV4dDsNCi0JCQl9DQotCQl9DQot
CQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfTUUpIHsNCi0JCQlNZXNoICptZT0gRy5t
YWluLT5tZXNoLmZpcnN0Ow0KLQkJCXdoaWxlKG1lKSB7DQotCQkJCW9vcHM9IGFkZF90ZXN0
X29vcHMobWUpOw0KLQkJCQltZT0gbWUtPmlkLm5leHQ7DQotCQkJfQ0KLQkJfQ0KLQkNCi0J
CWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19DVSkgew0KLQkJCUN1cnZlICpjdT0gRy5t
YWluLT5jdXJ2ZS5maXJzdDsNCi0JCQl3aGlsZShjdSkgew0KLQkJCQlvb3BzPSBhZGRfdGVz
dF9vb3BzKGN1KTsNCi0JCQkJY3U9IGN1LT5pZC5uZXh0Ow0KLQkJCX0NCi0JCX0NCi0NCi0J
CWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19NQikgew0KLQkJCU1ldGFCYWxsICptYj0g
Ry5tYWluLT5tYmFsbC5maXJzdDsNCi0JCQl3aGlsZShtYikgew0KLQkJCQlvb3BzPSBhZGRf
dGVzdF9vb3BzKG1iKTsNCi0JCQkJbWI9IG1iLT5pZC5uZXh0Ow0KLQkJCX0NCi0JCX0NCi0J
DQotCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfTEEpIHsNCi0JCQlMYW1wICpsYT0g
Ry5tYWluLT5sYW1wLmZpcnN0Ow0KLQkJCXdoaWxlKGxhKSB7DQotCQkJCW9vcHM9IGFkZF90
ZXN0X29vcHMobGEpOw0KLQkJCQlsYT0gbGEtPmlkLm5leHQ7DQotCQkJfQ0KLQkJfQ0KLQkJ
DQotCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfSVApIHsNCi0JCQlJcG8gKmlwbz0g
Ry5tYWluLT5pcG8uZmlyc3Q7DQotCQkJd2hpbGUoaXBvKSB7DQotCQkJCW9vcHM9IGFkZF90
ZXN0X29vcHMoaXBvKTsNCi0JCQkJaXBvPSBpcG8tPmlkLm5leHQ7DQotCQkJfQ0KLQkJfQ0K
LQkJDQotCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfTUEpIHsNCi0JCQlNYXRlcmlh
bCAqbWE9IEcubWFpbi0+bWF0LmZpcnN0Ow0KLQkJCXdoaWxlKG1hKSB7DQotCQkJCW9vcHM9
IGFkZF90ZXN0X29vcHMobWEpOw0KLQkJCQltYT0gbWEtPmlkLm5leHQ7DQotCQkJfQ0KLQkJ
fQ0KLQkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BTX1RFKSB7DQotCQkJVGV4ICp0ZXg9
IEcubWFpbi0+dGV4LmZpcnN0Ow0KLQkJCXdoaWxlKHRleCkgew0KLQkJCQlvb3BzPSBhZGRf
dGVzdF9vb3BzKHRleCk7DQotCQkJCXRleD0gdGV4LT5pZC5uZXh0Ow0KLQkJCX0NCi0JCX0N
Ci0JCWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19JTSkgew0KLQkJCUltYWdlICppbWE9
IEcubWFpbi0+aW1hZ2UuZmlyc3Q7DQotCQkJd2hpbGUoaW1hKSB7DQotCQkJCW9vcHM9IGFk
ZF90ZXN0X29vcHMoaW1hKTsNCi0JCQkJaW1hPSBpbWEtPmlkLm5leHQ7DQotCQkJfQ0KLQkJ
fQ0KLQkJDQotCX0NCi0JZWxzZSB7DQotCQkNCi0JCS8qIG9ubHkgYmxvY2tzIGZyb20gdGhp
cyBzY2VuZSAqLw0KLQkJDQotCQliYXNlPSBGSVJTVEJBU0U7DQotCQl3aGlsZShiYXNlKSB7
DQotCQkJDQotCQkJLyogbGF5ZXI/ICovDQotCQkJaWYoIChHLnNvb3BzLT52aXNpZmxhZyAm
IE9PUFNfTEFZKT09MCB8fCAoYmFzZS0+bGF5ICYgRy5zY2VuZS0+bGF5KSkgew0KLQkJCQlv
Yj0gYmFzZS0+b2JqZWN0Ow0KLQkJCQkNCi0JCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBP
T1BTX09CKSB7DQorCQkJCWlmICgoRy5zb29wcy0+dmlld1R5cGUgPT0gU0VMRUNUSU9OX09O
TFkpICYmICEob2ItPmZsYWcgJiBTRUxFQ1QpKSB7DQorCQkJCQlvYj0gb2ItPmlkLm5leHQ7
DQorCQkJCQljb250aW51ZTsNCisJCQkJfQ0KKyAJCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcg
JiBPT1BTX09CKSB7DQogCQkJCQlvb3BzPSBhZGRfdGVzdF9vb3BzKG9iKTsNCiAJCQkJfQ0K
IAkJCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfTUEpIHsNCkBAIC0xMDIwLDI2ICsx
MDMyLDExMyBAQA0KIAkJCQkJCW9vcHM9IGFkZF90ZXN0X29vcHMob2ItPmRhdGEpOw0KIAkJ
CQkJfQ0KIAkJCQl9DQorCQkJCW9iPSBvYi0+aWQubmV4dDsNCiAJCQl9DQotCQkJYmFzZT0g
YmFzZS0+bmV4dDsNCi0JCX0NCisJCX0JCQ0KIAl9DQorZWxzZSB7DQorCQkNCisJLyogb25s
eSBibG9ja3MgZnJvbSB0aGlzIHNjZW5lICovDQogCQ0KLQkNCi0NCi0NCi0JLyogdGVzdCBs
aW5rcyAqLw0KLQlvb3BzPSBHLnNvb3BzLT5vb3BzLmZpcnN0Ow0KLQl3aGlsZShvb3BzKSB7
DQotCQlpZihvb3BzLT5oaWRlPT0wKSB7CQ0KLQkJCW9sPSBvb3BzLT5saW5rLmZpcnN0Ow0K
LQkJCXdoaWxlKG9sKSB7DQotCQkJCXRlc3Rfb29wc2xpbmsob2wpOw0KLQkJCQlvbD0gb2wt
Pm5leHQ7DQorCWJhc2U9IEZJUlNUQkFTRTsNCisJd2hpbGUoYmFzZSkgew0KKwkJDQorCQkv
KiBsYXllcj8gKi8NCisJCQlpZiggKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19MQVkpPT0w
IHx8IChiYXNlLT5sYXkgJiBHLnNjZW5lLT5sYXkpKSB7DQorCQkJCW9iPSBiYXNlLT5vYmpl
Y3Q7DQorCQkJCWlmICgoRy5zb29wcy0+dmlld1R5cGUgPT0gU0VMRUNUSU9OX09OTFkpICYm
ICEob2ItPmZsYWcgJiBTRUxFQ1QpKSB7DQorCQkJCQliYXNlPSBiYXNlLT5uZXh0Ow0KKwkJ
CQkJY29udGludWU7DQorCQkJCX0NCisJCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BT
X09CKSB7DQorCQkJCQlvb3BzPSBhZGRfdGVzdF9vb3BzKG9iKTsNCisJCQkJfQ0KKwkJCQlp
ZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfTUEpIHsNCisJCQkJCWZvcihhPTA7IGE8b2It
PnRvdGNvbDsgYSsrKSB7DQorCQkJCQkJaWYob2ItPm1hdFthXSkgew0KKwkJCQkJCQlvb3Bz
PSBhZGRfdGVzdF9vb3BzKG9iLT5tYXRbYV0pOw0KKwkJCQkJCQlpZihHLnNvb3BzLT52aXNp
ZmxhZyAmIE9PUFNfVEUpIGFkZF90ZXh0dXJlX29vcHMob2ItPm1hdFthXSk7DQorCQkJCQkJ
fQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19J
UCkgb29wcz0gYWRkX3Rlc3Rfb29wcyhvYi0+aXBvKTsNCisJCQkJDQorCQkJCWlkPSBvYi0+
ZGF0YTsNCisJCQlpZihpZCkgew0KKwkJCQl0eXBlPSBHUyhpZC0+bmFtZSk7DQorCQkJCQ0K
KwkJCQlpZih0eXBlPT1JRF9NRSAmJiBHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfTUUpIHsN
CisJCQkJCU1lc2ggKm1lPSBvYi0+ZGF0YTsNCisJCQkJCW9vcHM9IGFkZF90ZXN0X29vcHMo
b2ItPmRhdGEpOw0KKwkJCQkJDQorCQkJCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNf
TUEpIHsNCisJCQkJCQlmb3IoYT0wOyBhPG1lLT50b3Rjb2w7IGErKykgew0KKwkJCQkJCQlp
ZihtZS0+bWF0W2FdKSB7DQorCQkJCQkJCQlvb3BzPSBhZGRfdGVzdF9vb3BzKG1lLT5tYXRb
YV0pOw0KKwkJCQkJCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BTX1RFKSBhZGRfdGV4
dHVyZV9vb3BzKG1lLT5tYXRbYV0pOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJfQ0K
KwkJCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BTX0lQKSB7DQorCQkJCQkJaWYobWUt
PmtleSkgb29wcz0gYWRkX3Rlc3Rfb29wcyhtZS0+a2V5LT5pcG8pOw0KKwkJCQkJfQ0KKwkJ
CQl9DQorCQkJCWVsc2UgaWYodHlwZT09SURfQ1UgJiYgRy5zb29wcy0+dmlzaWZsYWcgJiBP
T1BTX0NVKSB7DQorCQkJCQlDdXJ2ZSAqY3U9IG9iLT5kYXRhOw0KKwkJCQkJb29wcz0gYWRk
X3Rlc3Rfb29wcyhvYi0+ZGF0YSk7DQorCQkJCQkNCisJCQkJCWlmKEcuc29vcHMtPnZpc2lm
bGFnICYgT09QU19NQSkgew0KKwkJCQkJCWZvcihhPTA7IGE8Y3UtPnRvdGNvbDsgYSsrKSB7
DQorCQkJCQkJCWlmKGN1LT5tYXRbYV0pIHsNCisJCQkJCQkJCW9vcHM9IGFkZF90ZXN0X29v
cHMoY3UtPm1hdFthXSk7DQorCQkJCQkJCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNf
VEUpIGFkZF90ZXh0dXJlX29vcHMoY3UtPm1hdFthXSk7DQorCQkJCQkJCX0NCisJCQkJCQl9
DQorCQkJCQl9DQorCQkJCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfSVApIHsNCisJ
CQkJCQlpZihjdS0+aXBvKSBvb3BzPSBhZGRfdGVzdF9vb3BzKGN1LT5pcG8pOw0KKwkJCQkJ
CWlmKGN1LT5rZXkpIG9vcHM9IGFkZF90ZXN0X29vcHMoY3UtPmtleS0+aXBvKTsNCisJCQkJ
CX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmKHR5cGU9PUlEX01CICYmIEcuc29vcHMtPnZpc2lm
bGFnICYgT09QU19NQikgew0KKwkJCQkJb29wcz0gYWRkX3Rlc3Rfb29wcyhvYi0+ZGF0YSk7
DQorCQkJCQkNCisJCQkJCWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19NQSkgew0KKwkJ
CQkJCU1ldGFCYWxsICptYj0gb2ItPmRhdGE7DQorCQkJCQkJZm9yKGE9MDsgYTxtYi0+dG90
Y29sOyBhKyspIHsNCisJCQkJCQkJaWYobWItPm1hdFthXSkgew0KKwkJCQkJCQkJb29wcz0g
YWRkX3Rlc3Rfb29wcyhtYi0+bWF0W2FdKTsNCisJCQkJCQkJCWlmKEcuc29vcHMtPnZpc2lm
bGFnICYgT09QU19URSkgYWRkX3RleHR1cmVfb29wcyhtYi0+bWF0W2FdKTsNCisJCQkJCQkJ
fQ0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmKHR5cGU9PUlEX0xB
ICYmIEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19MQSkgew0KKwkJCQkJb29wcz0gYWRkX3Rl
c3Rfb29wcyhvYi0+ZGF0YSk7DQorCQkJCX0NCiAJCQl9DQogCQl9DQotCQlvb3BzPSBvb3Bz
LT5uZXh0Ow0KKwkJYmFzZT0gYmFzZS0+bmV4dDsNCiAJfQ0KK30NCisNCiAJDQotCUcuc29v
cHMtPmZsYWcgJj0gflNPX05FV1NFTEVDVEVEOw0KKwkJDQorCWlmIChHLnNvb3BzLT5vb3Bz
LmZpcnN0KSB7DQorCQlvb3BzPSBHLnNvb3BzLT5vb3BzLmZpcnN0Ow0KKwkJLyogdGVzdCBs
aW5rcyAqLw0KKwkJd2hpbGUob29wcykgew0KKwkJCWlmKG9vcHMtPmhpZGU9PTApIHsJDQor
CQkJCW9sPSBvb3BzLT5saW5rLmZpcnN0Ow0KKwkJCQl3aGlsZShvbCkgew0KKwkJCQkJdGVz
dF9vb3BzbGluayhvbCk7DQorCQkJCQlvbD0gb2wtPm5leHQ7DQorCQkJCX0NCisJCQl9DQor
CQkJb29wcz0gb29wcy0+bmV4dDsNCisJCX0NCisJCQ0KKwkJRy5zb29wcy0+ZmxhZyAmPSB+
U09fTkVXU0VMRUNURUQ7DQorCX0NCisJb3JnYW5pemVfb29wcygpOw0KIH0NCg==

--Message-Boundary-28827--