c++/4614: "c:/dos/pub/djgpp/lang/cxx/stl_vector.h:95: Internal compiler error in `layout_decl', at stor-layout.c:247"

junkmacc@hotmail.com junkmacc@hotmail.com
Thu Oct 18 16:56:00 GMT 2001


>Number:         4614
>Category:       c++
>Synopsis:       "c:/dos/pub/djgpp/lang/cxx/stl_vector.h:95: Internal compiler error in `layout_decl', at stor-layout.c:247"
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Oct 18 16:56:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     ?
>Release:        gcc 2.952
>Organization:
>Environment:
djgpp
>Description:
received message:
c:/dos/pub/djgpp/lang/cxx/stl_vector.h:95: Internal compiler error in `layout_decl', at stor-layout.c:247
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.

Very simple program that caused it:

#include <iostream>
#include <vector>
using namespace std;
class class_1 {};
class class_2 : public class_1 {};
void main() {
    vector<class_1 &> input;
    input.push_back(*new class_2());
}

Appears to be connected with some kind of memory leak as compiler appears to correctly bail out some times; other times I get the above internal error. I think it could be connected with too many error messages being generated. Hmm. Lemme know. Sorry I can't help fix this or even verify it better.

Hopefully someone out there will at leat be able to duplicate it.

I don't need it fixed. It's just that if this error exists, perhaps it's caused by a larger bug.

If I use -O, message appears to go away.
>How-To-Repeat:
Using Windows ME, go to the command prompt and run the following command:
gcc -c qd__gcc__bug.ii

Because of the possibility that this is connected to memory leaking, I advise creating a _NEW_ DOS command prompt and IMMEDIATELY compiling the above file, rather than first compiling something else etc. Dunno.
>Fix:
?
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="qd__gcc__bug.ii"; name="qd__gcc__bug.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="qd__gcc__bug.ii"

IyAxICJxZF9fZ2NjX19idWcuY3BwIg0KDQogDQogDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdwcC9s
YW5nL2N4eC9pb3N0cmVhbSIgMSAzDQogDQogDQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAv
bGFuZy9jeHgvaW9zdHJlYW0uaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiNwcmFnbWEgaW50ZXJmYWNlDQoNCg0KDQogDQojIDEgImM6
L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RyZWFtfjEuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KI3ByYWdtYSBpbnRlcmZhY2UN
Cg0KDQogICANCg0KDQoNCmV4dGVybiAiQyIgew0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv
Y3h4L2xpYmlvLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQogDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvX0df
Y29ufjEuaCIgMSAzDQogIA0KDQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiAgICAgICAgICBpbnQg
ICBfR19pbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOw0KdHlwZWRlZiB1
bnNpZ25lZCBpbnQgIF9HX3VpbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkp
Ow0KdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2Rl
X18oX19ISV9fKSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1
dGVfXygoX19tb2RlX18oX19ISV9fKSkpOw0KdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDMy
X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOw0KdHlwZWRl
ZiAgICAgICAgICBpbnQgIF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9f
KSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19t
b2RlX18oX19ESV9fKSkpOw0KDQpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9HX2xs
b25nOw0KX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7
DQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBpbnQgX0dfY2xvY2tfdDsNCnR5cGVkZWYgaW50IF9H
X2Rldl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX2Zwb3NfdDsNCnR5cGVkZWYgaW50IF9H
X2dpZF90Ow0KdHlwZWRlZiBpbnQgX0dfaW5vX3Q7DQp0eXBlZGVmIGludCBfR19tb2RlX3Q7DQp0
eXBlZGVmIGludCBfR19ubGlua190Ow0KdHlwZWRlZiBpbnQgX0dfb2ZmX3Q7DQp0eXBlZGVmIGlu
dCBfR19waWRfdDsNCg0KDQoNCnR5cGVkZWYgbG9uZyBpbnQgX0dfcHRyZGlmZl90Ow0KdHlwZWRl
ZiBpbnQgICBfR19zaWdzZXRfdDsNCg0KDQoNCnR5cGVkZWYgbG9uZyB1bnNpZ25lZCBpbnQgX0df
c2l6ZV90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdGltZV90Ow0KdHlwZWRlZiBpbnQgX0df
dWlkX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9HX3djaGFyX3Q7DQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBfR19zc2l6ZV90Ow0KdHlwZWRlZiBpbnQgX0df
d2ludF90Ow0KdHlwZWRlZiB2b2lkICogX0dfdmFfbGlzdDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
DQogDQoNCg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdwcC9pbmNs
dWRlL3N5cy9kanR5cGVzLmgiIDEgMw0KIA0KIA0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCiMgOSAiYzovZG9zL3B1Yi9kamdwcC9pbmNsdWRlL3N0
ZGRlZi5oIiAyIDMNCg0KICANCg0KDQp0eXBlZGVmIGludCBwdHJkaWZmX3Q7DQoNCnR5cGVkZWYg
bG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90OyANCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KfQ0KDQoNCg0KIyA4NiAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9fR19j
b25+MS5oIiAyIDMNCg0KDQojIDMxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L2xpYmlvLmgi
IDIgMw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA1NyAiYzovZG9zL3B1
Yi9kamdwcC9sYW5nL2N4eC9saWJpby5oIiAzDQoNCg0KDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdw
cC9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMNCiANCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDYxICJj
Oi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L2xpYmlvLmgiIDIgMw0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAxMDYg
ImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvbGliaW8uaCIgMw0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0Kc3RydWN0IF9JT19qdW1wX3Q7
ICBzdHJ1Y3QgX0lPX0ZJTEU7DQoNCiANCiMgMTc2ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4
L2xpYmlvLmgiIDMNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICB0eXBlZGVmIHZvaWQgX0lPX2xvY2tf
dDsNCg0KDQoNCg0KDQogDQoNCnN0cnVjdCBfSU9fbWFya2VyIHsNCiAgc3RydWN0IF9JT19tYXJr
ZXIgKl9uZXh0Ow0KICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOw0KICAgDQoNCiAgIA0KICBpbnQg
X3BvczsNCiMgMjA5ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L2xpYmlvLmgiIDMNCg0KfTsN
Cg0Kc3RydWN0IF9JT19GSUxFIHsNCiAgaW50IF9mbGFnczsJCSANCg0KDQogICANCiAgIA0KICBj
aGFyKiBfSU9fcmVhZF9wdHI7CSANCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgDQogIGNoYXIqIF9J
T19yZWFkX2Jhc2U7CSANCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSANCiAgY2hhciogX0lPX3dy
aXRlX3B0cjsJIA0KICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgDQogIGNoYXIqIF9JT19idWZfYmFz
ZTsJIA0KICBjaGFyKiBfSU9fYnVmX2VuZDsJIA0KICAgDQogIGNoYXIgKl9JT19zYXZlX2Jhc2U7
ICANCiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIA0KICBjaGFyICpfSU9fc2F2ZV9lbmQ7ICAN
Cg0KICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7DQoNCiAgc3RydWN0IF9JT19GSUxFICpf
Y2hhaW47DQoNCiAgaW50IF9maWxlbm87DQogIGludCBfYmxrc2l6ZTsNCg0KDQoNCiAgX0dfb2Zm
X3QgIF9vZmZzZXQ7DQoNCg0KDQogICANCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47DQog
IGNoYXIgX3VudXNlZDsNCiAgY2hhciBfc2hvcnRidWZbMV07DQoNCiAgIA0KDQoNCg0KDQoNCg0K
DQoNCn07DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0Kc3RydWN0IF9JT19GSUxFX3BsdXM7DQpleHRl
cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPX3N0ZGluXywgX0lPX3N0ZG91dF8sIF9JT19zdGRl
cnJfOw0KDQoNCg0KDQoNCiANCnR5cGVkZWYgc3RydWN0DQp7DQogIF9HX3NzaXplX3QgICgqcmVh
ZCkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zc2l6ZV90ICkgIDsNCiAgX0dfc3Np
emVfdCAgKCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBfR19zc2l6
ZV90ICkgIDsNCiAgX0dfZnBvc190ICAoKnNlZWspICAoc3RydWN0IF9JT19GSUxFICosIF9HX29m
Zl90ICwgaW50KSAgOw0KICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsNCn0g
X0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsNCg0KIA0Kc3RydWN0IF9JT19jb29raWVfZmlsZQ0K
ew0KICBzdHJ1Y3QgX0lPX0ZJTEUgZmlsZTsNCiAgY29uc3Qgdm9pZCAqdnRhYmxlOw0KICB2b2lk
ICpjb29raWU7DQogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOw0KfTsN
Cg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCmV4dGVybiBpbnQgX191bmRlcmZsb3cgIChfSU9fRklM
RSAqKSAgOw0KZXh0ZXJuIGludCBfX3VmbG93ICAoX0lPX0ZJTEUgKikgIDsNCmV4dGVybiBpbnQg
X19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7DQpleHRl
cm4gaW50IF9JT19wdXRjICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICA7DQpleHRlcm4gaW50
IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICA7DQpleHRlcm4gaW50IF9JT19mZXJyb3IgIChf
SU9fRklMRSAqX19mcCkgIDsNCg0KZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkICAoX0lPX0ZJ
TEUgKl9fZnApICA7DQoNCiANCg0KDQoNCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9f
RklMRSAqKSAgOw0KZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsN
CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAgKF9JT19GSUxFICopICA7DQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25z
dCBjaGFyICosIF9HX3ZhX2xpc3QgLCBpbnQgKikgIDsNCmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRm
ICAoX0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLCBfR192YV9saXN0ICkgIDsNCmV4dGVybiBfR19z
c2l6ZV90ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVfdCApICA7DQpleHRl
cm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChfSU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCAp
ICA7DQoNCg0KDQoNCg0KZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAq
LCBfR19vZmZfdCAsIGludCwgaW50KSAgOw0KZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtwb3Mg
IChfSU9fRklMRSAqLCBfR19mcG9zX3QgLCBpbnQpICA7DQoNCg0KZXh0ZXJuIHZvaWQgX0lPX2Zy
ZWVfYmFja3VwX2FyZWEgIChfSU9fRklMRSAqKSAgOw0KDQoNCn0NCg0KDQoNCiMgMzYgImM6L2Rv
cy9wdWIvZGpncHAvbGFuZy9jeHgvc3RyZWFtfjEuaCIgMiAzDQoNCn0NCiANCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQpleHRlcm4gIkMrKyIgew0K
Y2xhc3MgaXN0cmVhbTsgIA0KY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOw0KDQogDQoN
Cg0KDQoNCg0KDQoNCnR5cGVkZWYgX0dfb2ZmX3QgIHN0cmVhbW9mZjsNCnR5cGVkZWYgX0dfZnBv
c190ICBzdHJlYW1wb3M7DQoNCnR5cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFtc2l6ZTsNCg0KdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7DQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19p
b3N0YXRlOw0KDQpzdHJ1Y3QgX2lvc19maWVsZHMNCnsgIA0KICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1
ZjsNCiAgICBvc3RyZWFtKiBfdGllOw0KICAgIGludCBfd2lkdGg7DQogICAgX19mbXRmbGFncyBf
ZmxhZ3M7DQogICAgc2hvcnQgIF9maWxsOw0KICAgIF9faW9zdGF0ZSBfc3RhdGU7DQogICAgX19p
b3N0YXRlIF9leGNlcHRpb25zOw0KICAgIGludCBfcHJlY2lzaW9uOw0KDQogICAgdm9pZCAqX2Fy
cmF5czsgIA0KfTsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMgMTI0ICJjOi9kb3Mv
cHViL2RqZ3BwL2xhbmcvY3h4L3N0cmVhbX4xLmgiIDMNCg0KDQpjbGFzcyBpb3MgOiBwdWJsaWMg
X2lvc19maWVsZHMgew0KICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICANCiAgaW9zIChjb25zdCBp
b3MmKTsgIA0KICBwdWJsaWM6DQogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOw0KICAg
IHR5cGVkZWYgaW50IGlvc3RhdGU7DQogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7DQogICAgdHlw
ZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOw0KICAgIGVudW0gaW9fc3RhdGUgew0KCWdvb2Ri
aXQgPSAwICwNCgllb2ZiaXQgPSAxICwNCglmYWlsYml0ID0gMiAsDQoJYmFkYml0ID0gNCAgfTsN
CiAgICBlbnVtIG9wZW5fbW9kZSB7DQoJaW4gPSAxICwNCglvdXQgPSAyICwNCglhdGUgPSA0ICwN
CglhcHAgPSA4ICwNCgl0cnVuYyA9IDE2ICwNCglub2NyZWF0ZSA9IDMyICwNCglub3JlcGxhY2Ug
PSA2NCAsDQoJYmluID0gMTI4ICwgIA0KCWJpbmFyeSA9IDEyOCAgfTsNCiAgICBlbnVtIHNlZWtf
ZGlyIHsgYmVnLCBjdXIsIGVuZH07DQogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7
DQogICAgIA0KICAgIGVudW0geyBza2lwd3M9IDAxICwNCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAw
NCAsIGludGVybmFsPSAwMTAgLA0KCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9IDAxMDAg
LA0KCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAwICwNCgkgICB1cHBlcmNhc2U9
IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLA0KCSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9
IDAxMDAwMCAsDQoJICAgdW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCANCg0KDQoNCgkg
ICB9Ow0KICAgIGVudW0geyAgDQoJYmFzZWZpZWxkPWRlYytvY3QraGV4LA0KCWZsb2F0ZmllbGQg
PSBzY2llbnRpZmljK2ZpeGVkLA0KCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRlcm5hbA0K
ICAgIH07DQoNCiMgMTc3ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0cmVhbX4xLmgiIDMN
Cg0KDQogICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQ0KICAgIG9zdHJl
YW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0
dXJuIHNhdmU7IH0NCg0KICAgICANCiAgICBzaG9ydCAgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9m
aWxsOyB9DQogICAgc2hvcnQgIGZpbGwoc2hvcnQgIG5ld2YpDQoJe3Nob3J0ICBvbGRmID0gX2Zp
bGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQ0KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29u
c3QgeyByZXR1cm4gX2ZsYWdzOyB9DQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3Zh
bCkgew0KCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVy
biBvbGRfdmFsOyB9DQogICAgaW50IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNp
b247IH0NCiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7DQoJdW5zaWduZWQgc2hvcnQgb2xk
cCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsNCglyZXR1
cm4gb2xkcDsgfQ0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7DQoJZm10ZmxhZ3Mg
b2xkYml0cyA9IF9mbGFnczsNCglfZmxhZ3MgfD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQ0KICAg
IGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7DQoJZm10ZmxhZ3Mg
b2xkYml0cyA9IF9mbGFnczsNCglfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwgKHZhbCAmIG1h
c2spOyByZXR1cm4gb2xkYml0czsgfQ0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNr
KSB7DQoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsNCglfZmxhZ3MgJj0gfm1hc2s7IHJldHVy
biBvbGRiaXRzOyB9DQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9DQog
ICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsg
cmV0dXJuIHNhdmU7IH0NCg0KDQoNCg0KICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7
IH0NCg0KICAgIHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsNCglfc3RhdGUgPSBfc3Ry
YnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7DQoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBf
dGhyb3dfZmFpbHVyZSgpOyB9DQogICAgdm9pZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8
PSBmbGFnOw0KCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQ0K
ICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgDQoJaWYg
KF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9DQogICAgaW50IGdvb2Qo
KSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQ0KICAgIGludCBlb2YoKSBjb25zdCB7IHJl
dHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQ0KICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1
cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0NCiAgICBpbnQgYmFkKCkg
Y29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0NCiAgICBpb3N0YXRlIHJkc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0NCiAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0
IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQqKSgtMSk7IH0NCiAgICBpbnQgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9DQogICAgaW9zdGF0ZSBleGNlcHRpb25z
KCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0NCiAgICB2b2lkIGV4Y2VwdGlvbnMoaW9z
dGF0ZSBlbmFibGUpIHsNCglfZXhjZXB0aW9ucyA9IGVuYWJsZTsNCglpZiAoX3N0YXRlICYgX2V4
Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0NCg0KICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBj
b25zdCB7IHJldHVybiBfc3RyYnVmOyB9DQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1idWYg
Kl9zKSB7DQogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3RyYnVmID0gX3M7IGNs
ZWFyICgpOyByZXR1cm4gX29sZDsgfQ0KDQogICAgc3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8o
aW50IG9uKTsNCiAgICBzdGF0aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9z
dGRpbygxKTsgfQ0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOw0KICAgIHN0YXRpYyBp
bnQgeGFsbG9jKCk7DQogICAgdm9pZComIHB3b3JkKGludCk7DQogICAgdm9pZCogcHdvcmQoaW50
KSBjb25zdDsNCiAgICBsb25nJiBpd29yZChpbnQpOw0KICAgIGxvbmcgaXdvcmQoaW50KSBjb25z
dDsNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgDQogICAgY2xhc3MgSW5pdCB7DQogICAgcHVibGlj
Og0KICAgICAgSW5pdCAoKSB7IH0NCiAgICB9Ow0KDQogIHByb3RlY3RlZDoNCiAgICBpbmxpbmUg
aW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsNCiAgICBpbmxpbmUg
dmlydHVhbCB+aW9zKCk7DQogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3Ry
ZWFtKiB0aWUgPSAwKTsNCn07DQoNCg0KDQoNCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19k
aXI7DQoNCg0KIA0KIA0KIA0KIA0KIA0KDQogDQogDQpjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2
YXRlIF9JT19tYXJrZXIgew0KICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7DQogICAgdm9pZCBz
ZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9mZnNldDsgfQ0KICBwdWJsaWM6DQogICAg
c3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOw0KICAgIH5zdHJlYW1tYXJrZXIoKTsNCiAgICBp
bnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0NCiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7
DQogICAgaW50IGRlbHRhKCk7DQp9Ow0KDQpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19G
SUxFIHsgIA0KICAgIGZyaWVuZCBjbGFzcyBpb3M7DQogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07
DQogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07DQogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtl
cjsNCiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgo
X0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQ0KICBwcm90ZWN0ZWQ6DQogICAgc3RhdGljIHN0cmVhbWJ1
ZiogX2xpc3RfYWxsOyAgDQogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47
IH0NCiAgICB2b2lkIF91bl9saW5rKCk7DQogICAgdm9pZCBfbGlua19pbigpOw0KICAgIGNoYXIq
IGdwdHIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZl
X2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0NCiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4g
X0lPX3dyaXRlX3B0cjsgfQ0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QNCiAgICAgIHsgcmV0dXJu
IF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0NCiAgICBj
aGFyKiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9lbmQ7IH0NCiAgICBjaGFyKiBw
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9DQogICAgY2hhciogZWJhY2so
KSBjb25zdA0KICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2Ug
OiBfSU9fcmVhZF9iYXNlO30NCiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1
Zl9iYXNlOyB9DQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9
DQogICAgaW50IGJsZW4oKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFz
ZTsgfQ0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsg
fQ0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9DQogICAgaW50IHhmbGFncyhp
bnQgZikge2ludCBmbCA9IF9mbGFncyA7IF9mbGFncyAgPSBmOyByZXR1cm4gZmw7fQ0KICAgIHZv
aWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQ0KICAgIHZvaWQgeHNldGZsYWdz
KGludCBmLCBpbnQgbWFzaykNCiAgICAgIHsgX2ZsYWdzICA9IChfZmxhZ3MgICYgfm1hc2spIHwg
KGYgJiBtYXNrKTsgfQ0KICAgIHZvaWQgZ2J1bXAoaW50IG4pDQogICAgICB7IF9mbGFncyAgJiAw
eDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQ0KICAgIHZvaWQg
cGJ1bXAoaW50IG4pIHsgX0lPX3dyaXRlX3B0ciArPSBuOyB9DQogICAgdm9pZCBzZXRiKGNoYXIq
IGIsIGNoYXIqIGViLCBpbnQgYT0wKTsNCiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXAp
DQogICAgICB7IF9JT193cml0ZV9iYXNlPV9JT193cml0ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1l
cDsgfQ0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsNCiAgICAg
IGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgDQogICAg
ICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFkX3B0ciA9IGc7IF9JT19yZWFkX2VuZCA9IGVn
OyB9DQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0NCg0KICAgIGlu
dCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA7IH0NCiAgICAgDQogICAgY2hh
ciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVh
ZF9iYXNlOyB9DQogICAgIA0KICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkg
PyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0NCiAgICAgDQogICAgY2hhciAqQmJhc2Uo
KSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Jhc2UgOiBfSU9fc2F2ZV9iYXNlOyB9
DQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQ0KICAgICANCiAg
ICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfZW5kIDogX0lP
X3NhdmVfZW5kOyB9DQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9
DQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0NCiAgICBpbnQgaGF2
ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IDAgOyB9DQogICAgaW50IGhhdmVf
bWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IDAgOyB9DQogICAgdm9pZCBmcmVlX2JhY2t1
cF9hcmVhKCk7DQogICAgdm9pZCB1bnNhdmVfbWFya2VycygpOyAgDQogICAgaW50IHB1dF9tb2Rl
KCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9DQogICAgaW50IHN3aXRjaF90b19nZXRfbW9k
ZSgpOw0KICAgIA0KICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9MCk7DQogIHB1YmxpYzoNCiAgICBz
dGF0aWMgaW50IGZsdXNoX2FsbCgpOw0KICAgIHN0YXRpYyB2b2lkIGZsdXNoX2FsbF9saW5lYnVm
ZmVyZWQoKTsgIA0KICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOw0KICAgIHZpcnR1YWwgaW50IG92
ZXJmbG93KGludCBjID0gKC0xKSApOyAgDQogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7ICAN
CiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOyAgDQogICAgdmlydHVhbCBpbnQgcGJhY2tmYWlsKGlu
dCBjKTsNCiANCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0
cmVhbXNpemUgbik7DQogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJl
YW1zaXplIG4pOw0KICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vl
a19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOw0KICAgIHZpcnR1YWwgc3RyZWFtcG9z
IHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsNCg0K
ICAgIHN0cmVhbXBvcyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1v
ZGU9aW9zOjppbnxpb3M6Om91dCkNCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBv
LCBkLCBtb2RlKTsgfQ0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGlu
dCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkNCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0
aGlzLCBwb3MsIG1vZGUpOyB9DQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3Nl
ZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsNCiAgICBzdHJlYW1wb3Mgc3NlZWtw
b3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsNCiAgICB2aXJ0
dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOw0KICAgIHZpcnR1YWwgaW50
IHN5bmMoKTsNCiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7DQoNCiAgICBpbnQgc2Vla21h
cmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsNCiAgICBpbnQgc3B1dGJhY2tj
KGNoYXIgYyk7DQogICAgaW50IHN1bmdldGMoKTsNCiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0
dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0NCiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1
cm4gX2ZsYWdzICYgMHgyMDAgID8gMSA6IDA7IH0NCiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkp
DQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0NCiAgICB2b2lk
IGxpbmVidWZmZXJlZChpbnQgaSkNCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9m
bGFncyAmPSB+MHgyMDAgOyB9DQogICAgaW50IGFsbG9jYXRlKCkgeyAgDQoJaWYgKGJhc2UoKSB8
fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOw0KCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUoKTsgfQ0K
ICAgICANCiAgICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IDAgKSBkb2FsbG9jYnVm
KCk7IH0NCiAgICB2b2lkIGRvYWxsb2NidWYoKTsNCiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVy
biBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0NCiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7
IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0NCiAgICBzdHJlYW1zaXpl
IHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMsIG4p
OyB9DQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJu
IF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0NCiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMs
IHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9DQogICAgaW50
IGlnbm9yZShpbnQpOw0KICAgIGludCBnZXRfY29sdW1uKCk7DQogICAgaW50IHNldF9jb2x1bW4o
aW50KTsNCiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0dfc2l6ZV90ICBuLCBjaGFyIGRl
bGltLCBpbnQgcHV0YmFja19kZWxpbSk7DQogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBf
SU9fcHV0YyhjLCB0aGlzKTsgfQ0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0
aGlzKTsgfQ0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5fSU9fcmVhZF9w
dHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICggIHRoaXMgICkg
PT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9fcmVh
ZF9wdHIpICA7IH0NCiAgICBpbnQgc25leHRjKCkgew0KCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lP
X3JlYWRfZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQ0KCSAgcmV0dXJuICgtMSkg
Ow0KCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9DQogICAgdm9pZCBzdG9z
c2MoKSB7IGlmIChfSU9fcmVhZF9wdHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9
DQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3MqIHN0
cmVhbSA9IDAgKTsNCiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7DQogICAgaW50
IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsNCiAgICBpbnQgZm9ybShj
aGFyIGNvbnN0ICpmbXQwIC4uLik7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOw0KICAgIHZpcnR1YWwgc3RyZWFtc2l6
ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOw0KICAgIHZpcnR1YWwgc3RyZWFt
cG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsNCiAgICB2aXJ0dWFsIGludCBzeXNf
Y2xvc2UoKTsNCiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICANCg0KDQoNCg0KfTsN
Cg0KIA0KIA0KDQpjbGFzcyBmaWxlYnVmIDogcHVibGljIHN0cmVhbWJ1ZiB7DQogIHByb3RlY3Rl
ZDoNCiAgICB2b2lkIGluaXQoKTsNCiAgcHVibGljOg0KICAgIHN0YXRpYyBjb25zdCBpbnQgb3Bl
bnByb3Q7ICANCiAgICBmaWxlYnVmKCk7DQogICAgZmlsZWJ1ZihpbnQgZmQpOw0KICAgIGZpbGVi
dWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsNCg0KDQoNCiAgICB+ZmlsZWJ1ZigpOw0KICAg
IGZpbGVidWYqIGF0dGFjaChpbnQgZmQpOw0KICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq
ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOw0KICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hh
ciAqZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsNCiAgICB2
aXJ0dWFsIGludCB1bmRlcmZsb3coKTsNCiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9
ICgtMSkgKTsNCiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsg
fQ0KICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJuIGlzX29wZW4oKSA/IF9maWxlbm8gOiAoLTEp
IDsgfQ0KICAgIGZpbGVidWYqIGNsb3NlKCk7DQogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgp
Ow0KICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGlu
dCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOw0KICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYo
Y2hhciogcCwgaW50IGxlbik7DQogICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywg
c3RyZWFtc2l6ZSBuKTsNCiAgICBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOw0KICAgIHZpcnR1YWwgaW50IHN5bmMoKTsNCiAgcHJvdGVjdGVkOiAgDQogDQogICAgaW50
IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0NCiAgICBjaGFyKiBj
dXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQ0KICAg
ICANCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0NCiAgICAgDQogICAg
dmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsN
CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7DQog
ICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7
DQogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgDQogICAgdmlydHVhbCBpbnQgc3lz
X2Nsb3NlKCk7DQoNCg0KDQoNCn07DQoNCmlubGluZSB2b2lkIGlvczo6aW5pdChzdHJlYW1idWYq
IHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsNCgkJX3N0YXRlID0gc2IgPyBpb3M6Omdvb2RiaXQgOiBp
b3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsNCgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsg
X3dpZHRoPTA7IF9maWxsPScgJzsNCg0KCQlfZmxhZ3M9aW9zOjpza2lwd3N8aW9zOjpkZWM7DQoN
Cg0KDQoJCV9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0NCg0KaW5saW5lIGlvczo6aW9zKHN0
cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgeyBpbml0KHNiLCB0aWVfdG8pOyB9DQoNCmlu
bGluZSBpb3M6On5pb3MoKSB7DQoNCg0KDQogICAgIA0KICAgICANCiAgICBvcGVyYXRvciBkZWxl
dGVbXSAoX2FycmF5cyk7DQp9DQp9ICANCg0KIyAzMiAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4
eC9pb3N0cmVhbS5oIiAyIDMNCg0KDQpleHRlcm4gIkMrKyIgew0KY2xhc3MgaXN0cmVhbTsgY2xh
c3Mgb3N0cmVhbTsNCnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOw0KdHlwZWRlZiBpc3Ry
ZWFtJiAoKl9faW1hbmlwKShpc3RyZWFtJik7DQp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXAp
KG9zdHJlYW0mKTsNCg0KZXh0ZXJuIGlzdHJlYW0mIHdzKGlzdHJlYW0mIGlucyk7DQpleHRlcm4g
b3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7DQpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3Ry
ZWFtJiBvdXRzKTsNCmV4dGVybiBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mIG91dHMpOw0KDQpjbGFz
cyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zDQp7DQogICAgIA0KICAgIHZvaWQgZG9fb3Nm
eCgpOw0KICBwdWJsaWM6DQogICAgb3N0cmVhbSgpIHsgfQ0KICAgIG9zdHJlYW0oc3RyZWFtYnVm
KiBzYiwgb3N0cmVhbSogdGllZD0gMCApOw0KICAgIGludCBvcGZ4KCkgew0KCWlmICghZ29vZCgp
KSByZXR1cm4gMDsNCgllbHNlIHsgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7ICA7IHJldHVybiAx
O30gfQ0KICAgIHZvaWQgb3NmeCgpIHsgIDsNCgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRi
dWZ8aW9zOjpzdGRpbykpDQoJCSAgICAgIGRvX29zZngoKTsgfQ0KICAgIG9zdHJlYW0mIGZsdXNo
KCk7DQogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJu
ICp0aGlzOyB9DQoNCg0KDQoNCg0KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0
cmVhbXNpemUgbik7DQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywg
c3RyZWFtc2l6ZSBuKQ0KICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30N
CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQ0K
ICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30NCiAgICBvc3RyZWFtJiB3
cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pDQogICAgICB7IHJldHVybiB3cml0ZSgo
Y29uc3QgY2hhciopcywgbik7fQ0KICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7DQogICAg
b3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOw0KICAgIHN0cmVhbXBvcyB0ZWxs
cCgpOw0KICAgIG9zdHJlYW0mIGZvcm0oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7DQogICAgb3N0
cmVhbSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsNCg0KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVu
c2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9DQogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7
IH0NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOw0KICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykNCgl7IHJldHVybiAoKnRoaXMpIDw8
IChjb25zdCBjaGFyKilzOyB9DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQg
Y2hhciAqcykNCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9DQogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lkICpwKTsNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGludCBuKTsNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsNCiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbik7DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNp
Z25lZCBsb25nIG4pOw0KDQogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxv
bmcgbG9uZyBuKTsNCiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWdu
ZWQgbG9uZyBsb25nIG4pOw0KDQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0
dXJuIG9wZXJhdG9yPDwoKGludCluKTt9DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9DQoNCiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9
DQoNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBuKTsNCiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQ0KDQoNCg0K
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbikgeyByZXR1cm4gb3BlcmF0b3I8
PCgoZG91YmxlKW4pOyB9DQoNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMp
IHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21h
bmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30NCiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHN0cmVhbWJ1ZiopOw0KDQoNCg0KfTsNCg0KY2xhc3MgaXN0cmVhbSA6IHZpcnR1
YWwgcHVibGljIGlvcw0Kew0KICAgICANCnByb3RlY3RlZDoNCiAgICBfR19zaXplX3QgIF9nY291
bnQ7DQoNCiAgICBpbnQgX3NraXBfd3MoKTsNCiAgcHVibGljOg0KICAgIGlzdHJlYW0oKTogX2dj
b3VudCAoMCkgeyB9DQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IDAg
KTsNCiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu
Jyk7DQogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk
ZWxpbSA9ICdcbicpDQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9DQog
ICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOw0KICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFy
JiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9DQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFy
KiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsNCiAgICBpc3RyZWFtJiBnZXRsaW5l
KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpDQoJeyByZXR1
cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQ0KICAgIGlzdHJlYW0mIGdldChz
aWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0NCiAgICBpc3RyZWFtJiBn
ZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpDQoJeyByZXR1
cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9DQogICAgaXN0cmVhbSYgZ2V0bGluZShz
aWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykNCgl7IHJldHVybiBn
ZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9DQogICAgaXN0cmVhbSYgcmVhZChjaGFy
ICpwdHIsIHN0cmVhbXNpemUgbik7DQogICAgaXN0cmVhbSYgcmVhZCh1bnNpZ25lZCBjaGFyICpw
dHIsIHN0cmVhbXNpemUgbikNCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0N
CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikNCiAgICAg
IHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0NCiAgICBpc3RyZWFtJiByZWFkKHZvaWQg
KnB0ciwgc3RyZWFtc2l6ZSBuKQ0KICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsg
fQ0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7DQog
ICAgaXN0cmVhbSYgZ2V0cyhjaGFyICoqcywgY2hhciBkZWxpbSA9ICdcbicpOw0KICAgIGludCBp
cGZ4KGludCBuZWVkID0gMCkgew0KCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy
ZXR1cm4gMDsgfQ0KCWVsc2Ugew0KCSAgIDsNCgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwg
cmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOw0KCSAgaWYgKCFuZWVk
ICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsNCgkgIGVsc2Ug
cmV0dXJuIDE7DQoJfQ0KICAgIH0NCiAgICBpbnQgaXBmeDAoKSB7ICANCglpZiAoIWdvb2QoKSkg
eyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0NCgllbHNlIHsNCgkgICA7DQoJICBpZiAo
X3RpZSkgX3RpZS0+Zmx1c2goKTsNCgkgIGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVy
biBfc2tpcF93cygpOw0KCSAgZWxzZSByZXR1cm4gMTsNCgl9DQogICAgfQ0KICAgIGludCBpcGZ4
MSgpIHsgIA0KCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQ0K
CWVsc2Ugew0KCSAgIDsNCgkgIGlmIChfdGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkg
X3RpZS0+Zmx1c2goKTsNCgkgIHJldHVybiAxOw0KCX0NCiAgICB9DQogICAgdm9pZCBpc2Z4KCkg
eyAgOyB9DQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7DQoJCWVs
c2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsNCgkJICAgICAgIGlmIChjaCA9PSAoLTEp
ICkgc2V0KGlvczo6ZW9mYml0KTsNCgkJICAgICAgIGlzZngoKTsNCgkJICAgICAgIHJldHVybiBj
aDsNCgkJICAgICB9IH0NCiAgICBpbnQgcGVlaygpOw0KICAgIF9HX3NpemVfdCAgZ2NvdW50KCkg
eyByZXR1cm4gX2djb3VudDsgfQ0KICAgIGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVs
aW0gPSAoLTEpICk7DQogICAgaW50IHN5bmMgKCk7DQogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFt
cG9zKTsNCiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7DQogICAgc3Ry
ZWFtcG9zIHRlbGxnKCk7DQogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7DQoJaWYgKGdv
b2QoKSAmJiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJp
dCk7DQoJcmV0dXJuICp0aGlzO30NCiAgICBpc3RyZWFtJiB1bmdldCgpIHsNCglpZiAoZ29vZCgp
ICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOw0KCXJl
dHVybiAqdGhpczt9DQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsN
CiAgICBpc3RyZWFtJiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3QgIGFyZ3Mp
Ow0KDQoNCg0KDQoNCg0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOw0KICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hh
ciopcCk7IH0NCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJu
IG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBj
KTsNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3Bl
cmF0b3I+PigoY2hhciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIm
IGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4oaW50Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7DQoNCiAgICBfX2V4dGVu
c2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBsb25nJik7DQogICAgX19leHRlbnNpb25f
XyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYpOw0KDQogICAgaXN0cmVh
bSYgb3BlcmF0b3I+PihzaG9ydCYpOw0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQg
aW50Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7DQogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOw0KDQogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pihib29sJik7DQoNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7DQogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcg
ZG91YmxlJik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5j
KSgqdGhpcyk7IHJldHVybiAqdGhpczt9DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5p
cCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4oc3RyZWFtYnVmKik7DQp9Ow0KDQpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBw
dWJsaWMgb3N0cmVhbQ0Kew0KICBwdWJsaWM6DQogICAgaW9zdHJlYW0oKSB7IH0NCiAgICBpb3N0
cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IDAgKTsNCn07DQoNCmNsYXNzIF9JT19p
c3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7DQpwdWJsaWM6DQogIF9JT19pc3Ry
ZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3RyZWFtJik7DQogIF9JT19pc3RyZWFtX3dpdGhh
c3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpDQogICAgeyByZXR1
cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9DQp9Ow0KDQpjbGFz
cyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gew0KcHVibGljOg0KICBf
SU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYpOw0KICBfSU9fb3N0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQ0KICAg
IHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQ0KfTsN
Cg0KZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOw0KIA0KZXh0ZXJuIF9JT19vc3Ry
ZWFtX3dpdGhhc3NpZ24gY291dCwgY2VycjsNCg0KZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3Np
Z24gY2xvZw0KDQoNCg0KOw0KDQpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOw0K
ZXh0ZXJuIGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOw0KZXh0ZXJuIG9zdHJlYW0mIGxv
Y2sob3N0cmVhbSYgb3V0cyk7DQpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMp
Ow0KDQpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIA0KDQppbmxpbmUgaW9zJiBkZWMoaW9z
JiBpKQ0KeyBpLnNldGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0
dXJuIGk7IH0NCmlubGluZSBpb3MmIGhleChpb3MmIGkpDQp7IGkuc2V0Zihpb3M6OmhleCwgaW9z
OjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQ0KaW5saW5lIGlvcyYgb2N0KGlv
cyYgaSkNCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJl
dHVybiBpOyB9DQp9ICANCg0KDQojIDYgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvaW9zdHJl
YW0iIDIgMw0KDQoNCiMgNSAicWRfX2djY19fYnVnLmNwcCIgMg0KDQojIDEgImM6L2Rvcy9wdWIv
ZGpncHAvbGFuZy9jeHgvdmVjdG9yIiAxIDMNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv
Y3h4L3N0bGFsZ29iYXNlLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KIyAxICJjOi9kb3MvcHViL2Rq
Z3BwL2xhbmcvY3h4L3N0bF9jb25maWcuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCiANCiANCiANCiANCiANCiANCiAN
CiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiAN
CiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCg0K
DQogDQogDQogDQogDQogDQogDQogDQogDQogDQogDQogDQoNCg0KIA0KDQogDQogDQogDQogDQog
DQogDQogDQoNCg0KDQoNCg0KDQoNCg0KIyAxNDggImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgv
c3RsX2NvbmZpZy5oIiAzDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
IyAxNzggImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2NvbmZpZy5oIiAzDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQojIDIzOCAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfY29uZmlnLmgiIDMN
Cg0KDQojIDI1MiAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfY29uZmlnLmgiIDMNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQogDQogDQogDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQogDQogDQojIDMyMCAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfY29uZmlnLmgiIDMN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQogDQogDQogDQojIDM2ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv
Y3h4L3N0bGFsZ29iYXNlLmgiIDIgMw0KDQoNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv
Y3h4L3N0bF9yZWxvcHMuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9U
cD4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSB7DQogIHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0K
aW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgew0K
ICByZXR1cm4gX195IDwgX194Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsNCiAgcmV0dXJu
ICEoX195IDwgX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7DQogIHJldHVybiAhKF9f
eCA8IF9feSk7DQp9DQoNCiANCg0KDQoNCiANCiANCiANCiMgMzkgImM6L2Rvcy9wdWIvZGpncHAv
bGFuZy9jeHgvc3RsYWxnb2Jhc2UuaCIgMiAzDQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAv
bGFuZy9jeHgvc3RsX3BhaXIuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCiANCg0KdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPg0Kc3RydWN0IHBhaXIgew0KICB0eXBlZGVmIF9UMSBmaXJzdF90eXBl
Ow0KICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsNCg0KICBfVDEgZmlyc3Q7DQogIF9UMiBzZWNv
bmQ7DQogIHBhaXIoKSA6IGZpcnN0KF9UMSgpKSwgc2Vjb25kKF9UMigpKSB7fQ0KICBwYWlyKGNv
bnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7
fQ0KDQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPg0KICBwYWlyKGNvbnN0IHBh
aXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQp
IHt9DQoNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feSkNCnsgDQogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNv
bmQgPT0gX195LnNlY29uZDsgDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4N
CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX195KQ0KeyANCiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8
fCANCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9f
eS5zZWNvbmQpOyANCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5l
IHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihjb25zdCBfVDEmIF9feCwgY29uc3QgX1QyJiBfX3kp
DQp7DQogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7DQp9DQoNCiANCg0KDQoNCiAN
CiANCiANCiMgNDIgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsYWxnb2Jhc2UuaCIgMiAz
DQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvdHlwZV90cmFpdHMuaCIgMSAz
DQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCnN0
cnVjdCBfX3RydWVfdHlwZSB7DQp9Ow0KDQpzdHJ1Y3QgX19mYWxzZV90eXBlIHsNCn07DQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7IA0KICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICAgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsNCiAgICAgICAg
ICAgICAgICAgICAgDQoNCg0KDQoNCg0KICAgIA0KDQoNCg0KDQoNCg0KDQoNCiANCg0KICAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAg
IHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
Ow0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAg
IHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KDQoNCiANCiANCiAN
Cg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3Ry
dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q
T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBj
aGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt
cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gew0KICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQp0ZW1wbGF0ZTw+ICBzdHJ1
Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlz
X1BPRF90eXBlOw0KfTsNCg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNo
b3J0PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt
cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxpbnQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5
cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+
IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0
ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8
dW5zaWduZWQgbG9uZz4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsN
Cn07DQoNCg0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0
IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gew0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3Ry
dWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q
T0RfdHlwZTsNCn07DQoNCiMgMjk1ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3R5cGVfdHJh
aXRzLmgiIDMNCg0KDQoNCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p
bnRlZ2VyIHsNCiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KDQoNCnRl
bXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7DQogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOw0KfTsNCg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxj
aGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8
PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQoNCg0K
dGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsNCiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRl
Z2VyPHNob3J0PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVt
cGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7DQogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRl
Z2VyPGludD4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBs
YXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsNCiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8
bG9uZz4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRl
PD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7DQogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOw0KfTsNCg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdl
cjxsb25nIGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7DQogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KDQoNCg0KDQogDQogDQogDQojIDQ1
ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bGFsZ29iYXNlLmgiIDIgMw0KDQoNCg0KIyAx
ICJjOi9kb3MvcHViL2RqZ3BwL2luY2x1ZGUvc3RyaW5nLmgiIDEgMw0KIA0KIA0KDQoNCg0KDQpl
eHRlcm4gIkMiIHsNCg0KDQoNCg0KDQogICAgDQogDQoNCg0KDQogDQoNCg0KDQp2b2lkICoJbWVt
Y2hyKGNvbnN0IHZvaWQgKl9zLCBpbnQgX2MsIHNpemVfdCBfbik7DQppbnQJbWVtY21wKGNvbnN0
IHZvaWQgKl9zMSwgY29uc3Qgdm9pZCAqX3MyLCBzaXplX3QgX24pOw0Kdm9pZCAqCW1lbWNweSh2
b2lkICpfZGVzdCwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IF9uKTsNCnZvaWQgKgltZW1tb3Zl
KHZvaWQgKl9zMSwgY29uc3Qgdm9pZCAqX3MyLCBzaXplX3QgX24pOw0Kdm9pZCAqCW1lbXNldCh2
b2lkICpfcywgaW50IF9jLCBzaXplX3QgX24pOw0KY2hhciAqCXN0cmNhdChjaGFyICpfczEsIGNv
bnN0IGNoYXIgKl9zMik7DQpjaGFyICoJc3RyY2hyKGNvbnN0IGNoYXIgKl9zLCBpbnQgX2MpOw0K
aW50CXN0cmNtcChjb25zdCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQppbnQJc3RyY29s
bChjb25zdCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQpjaGFyICoJc3RyY3B5KGNoYXIg
Kl9zMSwgY29uc3QgY2hhciAqX3MyKTsNCnNpemVfdAlzdHJjc3BuKGNvbnN0IGNoYXIgKl9zMSwg
Y29uc3QgY2hhciAqX3MyKTsNCmNoYXIgKglzdHJlcnJvcihpbnQgX2VycmNvZGUpOw0Kc2l6ZV90
CXN0cmxlbihjb25zdCBjaGFyICpfcyk7DQpjaGFyICoJc3RybmNhdChjaGFyICpfczEsIGNvbnN0
IGNoYXIgKl9zMiwgc2l6ZV90IF9uKTsNCmludAlzdHJuY21wKGNvbnN0IGNoYXIgKl9zMSwgY29u
c3QgY2hhciAqX3MyLCBzaXplX3QgX24pOw0KY2hhciAqCXN0cm5jcHkoY2hhciAqX3MxLCBjb25z
dCBjaGFyICpfczIsIHNpemVfdCBfbik7DQpjaGFyICoJc3RycGJyayhjb25zdCBjaGFyICpfczEs
IGNvbnN0IGNoYXIgKl9zMik7DQpjaGFyICoJc3RycmNocihjb25zdCBjaGFyICpfcywgaW50IF9j
KTsNCnNpemVfdAlzdHJzcG4oY29uc3QgY2hhciAqX3MxLCBjb25zdCBjaGFyICpfczIpOw0KY2hh
ciAqCXN0cnN0cihjb25zdCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQpjaGFyICoJc3Ry
dG9rKGNoYXIgKl9zMSwgY29uc3QgY2hhciAqX3MyKTsNCnNpemVfdAlzdHJ4ZnJtKGNoYXIgKl9z
MSwgY29uc3QgY2hhciAqX3MyLCBzaXplX3QgX24pOw0KDQoNCg0KDQoNCiMgMSAiYzovZG9zL3B1
Yi9kamdwcC9pbmNsdWRlL3N5cy9tb3ZlZGF0YS5oIiAxIDMNCiANCiANCg0KDQoNCg0KZXh0ZXJu
ICJDIiB7DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCiANCg0KDQoNCiANCnZvaWQgZG9z
bWVtZ2V0KHVuc2lnbmVkIGxvbmcgX29mZnNldCwgc2l6ZV90IF9sZW5ndGgsIHZvaWQgKl9idWZm
ZXIpOw0Kdm9pZCBkb3NtZW1wdXQoY29uc3Qgdm9pZCAqX2J1ZmZlciwgc2l6ZV90IF9sZW5ndGgs
IHVuc2lnbmVkIGxvbmcgX29mZnNldCk7DQoNCiANCnZvaWQgX2Rvc21lbWdldGIodW5zaWduZWQg
bG9uZyBfb2Zmc2V0LCBzaXplX3QgX3hmZXJzLCB2b2lkICpfYnVmZmVyKTsNCnZvaWQgX2Rvc21l
bWdldHcodW5zaWduZWQgbG9uZyBfb2Zmc2V0LCBzaXplX3QgX3hmZXJzLCB2b2lkICpfYnVmZmVy
KTsNCnZvaWQgX2Rvc21lbWdldGwodW5zaWduZWQgbG9uZyBfb2Zmc2V0LCBzaXplX3QgX3hmZXJz
LCB2b2lkICpfYnVmZmVyKTsNCnZvaWQgX2Rvc21lbXB1dGIoY29uc3Qgdm9pZCAqX2J1ZmZlciwg
c2l6ZV90IF94ZmVycywgdW5zaWduZWQgbG9uZyBfb2Zmc2V0KTsNCnZvaWQgX2Rvc21lbXB1dHco
Y29uc3Qgdm9pZCAqX2J1ZmZlciwgc2l6ZV90IF94ZmVycywgdW5zaWduZWQgbG9uZyBfb2Zmc2V0
KTsNCnZvaWQgX2Rvc21lbXB1dGwoY29uc3Qgdm9pZCAqX2J1ZmZlciwgc2l6ZV90IF94ZmVycywg
dW5zaWduZWQgbG9uZyBfb2Zmc2V0KTsNCg0KDQogDQp2b2lkIG1vdmVkYXRhKHVuc2lnbmVkIF9z
b3VyY2Vfc2VsZWN0b3IsIHVuc2lnbmVkIF9zb3VyY2Vfb2Zmc2V0LA0KCSAgICAgICB1bnNpZ25l
ZCBfZGVzdF9zZWxlY3RvciwgdW5zaWduZWQgX2Rlc3Rfb2Zmc2V0LA0KCSAgICAgICBzaXplX3Qg
X2xlbmd0aCk7DQoNCiANCnZvaWQgX21vdmVkYXRhYih1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2ln
bmVkLCB1bnNpZ25lZCwgc2l6ZV90KTsNCnZvaWQgX21vdmVkYXRhdyh1bnNpZ25lZCwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgc2l6ZV90KTsNCnZvaWQgX21vdmVkYXRhbCh1bnNpZ25l
ZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgc2l6ZV90KTsNCiAgDQoNCg0KDQoNCg0K
DQoNCg0KfQ0KDQoNCg0KIyA0OSAiYzovZG9zL3B1Yi9kamdwcC9pbmNsdWRlL3N0cmluZy5oIiAy
IDMNCg0KDQppbnQJYmNtcChjb25zdCB2b2lkICpfcHRyMSwgY29uc3Qgdm9pZCAqX3B0cjIsIGlu
dCBfbGVuZ3RoKTsNCnZvaWQgKgliY29weShjb25zdCB2b2lkICpfYSwgdm9pZCAqX2IsIHNpemVf
dCBfbGVuKTsNCnZvaWQgKgliemVybyh2b2lkICpwdHIsIHNpemVfdCBfbGVuKTsNCmludAlmZnMo
aW50IF9tYXNrKTsNCmNoYXIgKiAgaW5kZXgoY29uc3QgY2hhciAqX3N0cmluZywgaW50IF9jKTsN
CnZvaWQgKgltZW1jY3B5KHZvaWQgKl90bywgY29uc3Qgdm9pZCAqX2Zyb20sIGludCBjLCBzaXpl
X3Qgbik7DQppbnQJbWVtaWNtcChjb25zdCB2b2lkICpfczEsIGNvbnN0IHZvaWQgKl9zMiwgc2l6
ZV90IF9uKTsNCmNoYXIgKiAgcmluZGV4KGNvbnN0IGNoYXIgKl9zdHJpbmcsIGludCBfYyk7DQpj
aGFyICoJc3RwY3B5KGNoYXIgKl9kZXN0LCBjb25zdCBjaGFyICpfc3JjKTsNCmNoYXIgKglzdHJk
dXAoY29uc3QgY2hhciAqX3MpOw0KY2hhciAqCXN0cmx3cihjaGFyICpfcyk7DQppbnQJc3RyY2Fz
ZWNtcChjb25zdCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQppbnQJc3RyaWNtcChjb25z
dCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQppbnQJc3RybmNhc2VjbXAoY29uc3QgY2hh
ciAqX3MxLCBjb25zdCBjaGFyICpfczIsIHNpemVfdCBfbik7DQppbnQJc3RybmljbXAoY29uc3Qg
Y2hhciAqX3MxLCBjb25zdCBjaGFyICpfczIsIHNpemVfdCBfbik7DQpjaGFyICoJc3Ryc2VwKGNo
YXIgKipfc3RyaW5ncCwgY29uc3QgY2hhciAqX2RlbGltKTsNCmNoYXIgKglzdHJ1cHIoY2hhciAq
X3MpOw0KDQoNCg0KDQoNCg0KDQoNCg0KfQ0KDQoNCg0KIyA0OCAiYzovZG9zL3B1Yi9kamdwcC9s
YW5nL2N4eC9zdGxhbGdvYmFzZS5oIiAyIDMNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2luY2x1
ZGUvbGltaXRzLmgiIDEgMw0KIA0KIA0KDQoNCg0KDQpleHRlcm4gIkMiIHsNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KIA0KDQogDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAN
Cg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCn0NCg0KDQoNCiMgNDkgImM6L2Rvcy9w
dWIvZGpncHAvbGFuZy9jeHgvc3RsYWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAiYzovZG9zL3B1Yi9k
amdwcC9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMNCiANCiANCiANCg0KDQoNCg0KZXh0ZXJuICJDIiB7
DQoNCg0KDQoNCg0KICANCiANCg0KDQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IF9fZGpfbWJfY3Vy
X21heDsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICBpbnQgcXVvdDsNCiAgaW50IHJlbTsNCn0gZGl2
X3Q7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgbG9uZyBxdW90Ow0KICBsb25nIHJlbTsNCn0gbGRp
dl90Ow0KDQogDQoNCg0KIA0KDQoNCg0Kdm9pZAlhYm9ydCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChu
b3JldHVybikpOw0KaW50CWFicyhpbnQgX2kpOw0KaW50CWF0ZXhpdCh2b2lkICgqX2Z1bmMpKHZv
aWQpKTsNCmRvdWJsZQlhdG9mKGNvbnN0IGNoYXIgKl9zKTsNCmludAlhdG9pKGNvbnN0IGNoYXIg
Kl9zKTsNCmxvbmcJYXRvbChjb25zdCBjaGFyICpfcyk7DQp2b2lkICoJYnNlYXJjaChjb25zdCB2
b2lkICpfa2V5LCBjb25zdCB2b2lkICpfYmFzZSwgc2l6ZV90IF9uZWxlbSwNCgkJc2l6ZV90IF9z
aXplLCBpbnQgKCpfY21wKShjb25zdCB2b2lkICpfY2ssIGNvbnN0IHZvaWQgKl9jZSkpOw0Kdm9p
ZCAqCWNhbGxvYyhzaXplX3QgX25lbGVtLCBzaXplX3QgX3NpemUpOw0KZGl2X3QJZGl2KGludCBf
bnVtZXIsIGludCBfZGVub20pOw0Kdm9pZAlleGl0KGludCBfc3RhdHVzKSBfX2F0dHJpYnV0ZV9f
KChub3JldHVybikpOw0Kdm9pZAlmcmVlKHZvaWQgKl9wdHIpOw0KY2hhciAqIGdldGVudihjb25z
dCBjaGFyICpfbmFtZSk7DQpsb25nCWxhYnMobG9uZyBfaSk7DQpsZGl2X3QJbGRpdihsb25nIF9u
dW1lciwgbG9uZyBfZGVub20pOw0Kdm9pZCAqCW1hbGxvYyhzaXplX3QgX3NpemUpOw0KaW50CW1i
bGVuKGNvbnN0IGNoYXIgKl9zLCBzaXplX3QgX24pOw0Kc2l6ZV90CW1ic3Rvd2NzKHdjaGFyX3Qg
Kl93Y3MsIGNvbnN0IGNoYXIgKl9zLCBzaXplX3QgX24pOw0KaW50CW1idG93Yyh3Y2hhcl90ICpf
cHdjLCBjb25zdCBjaGFyICpfcywgc2l6ZV90IF9uKTsNCnZvaWQJcXNvcnQodm9pZCAqX2Jhc2Us
IHNpemVfdCBfbmVsZW0sIHNpemVfdCBfc2l6ZSwNCgkgICAgICBpbnQgKCpfY21wKShjb25zdCB2
b2lkICpfZTEsIGNvbnN0IHZvaWQgKl9lMikpOw0KaW50CXJhbmQodm9pZCk7DQp2b2lkICoJcmVh
bGxvYyh2b2lkICpfcHRyLCBzaXplX3QgX3NpemUpOw0Kdm9pZAlzcmFuZCh1bnNpZ25lZCBfc2Vl
ZCk7DQpkb3VibGUJc3RydG9kKGNvbnN0IGNoYXIgKl9zLCBjaGFyICoqX2VuZHB0cik7DQpsb25n
CXN0cnRvbChjb25zdCBjaGFyICpfcywgY2hhciAqKl9lbmRwdHIsIGludCBfYmFzZSk7DQp1bnNp
Z25lZCBsb25nCXN0cnRvdWwoY29uc3QgY2hhciAqX3MsIGNoYXIgKipfZW5kcHRyLCBpbnQgX2Jh
c2UpOw0KaW50CXN5c3RlbShjb25zdCBjaGFyICpfcyk7DQpzaXplX3QJd2NzdG9tYnMoY2hhciAq
X3MsIGNvbnN0IHdjaGFyX3QgKl93Y3MsIHNpemVfdCBfbik7DQppbnQJd2N0b21iKGNoYXIgKl9z
LCB3Y2hhcl90IF93Y2hhcik7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICBsb25nIGxv
bmcgcXVvdDsNCiAgbG9uZyBsb25nIHJlbTsNCn0gbGxkaXZfdDsNCg0Kdm9pZCAqCQlhbGxvY2Eo
c2l6ZV90IF9zaXplKTsNCmxvbmcgZG91YmxlCV9hdG9sZChjb25zdCBjaGFyICpfcyk7DQpsb25n
IGxvbmcJYXRvbGwoY29uc3QgY2hhciAqX3MpOw0Kdm9pZAkJY2ZyZWUodm9pZCAqX3B0cik7DQpk
b3VibGUgICAgICAgICAgZHJhbmQ0OCh2b2lkKTsNCmNoYXIgKgkJZWN2dGJ1Zihkb3VibGUgX3Zh
bCwgaW50IF9uZCwgaW50ICpfZHAsIGludCAqX3NuLCBjaGFyICpfYmYpOw0KY2hhciAqCQllY3Z0
KGRvdWJsZSBfdmFsLCBpbnQgX25kLCBpbnQgKl9kcCwgaW50ICpfc24pOw0KZG91YmxlICAgICAg
ICAgIGVyYW5kNDgodW5zaWduZWQgc2hvcnQgc3RhdGVbM10pOw0KY2hhciAqCQlmY3Z0YnVmKGRv
dWJsZSBfdmFsLCBpbnQgX25kLCBpbnQgKl9kcCwgaW50ICpfc24sIGNoYXIgKl9iZik7DQpjaGFy
ICoJCWZjdnQoZG91YmxlIF92YWwsIGludCBfbmQsIGludCAqX2RwLCBpbnQgKl9zbik7DQpjaGFy
ICoJCWdjdnQoZG91YmxlIF92YWwsIGludCBfbmQsIGNoYXIgKl9idWYpOw0KY2hhciAqCQlnZXRw
YXNzKGNvbnN0IGNoYXIgKl9wcm9tcHQpOw0KaW50CQlnZXRsb25ncGFzcyhjb25zdCBjaGFyICpf
cHJvbXB0LCBjaGFyICpfYnVmZmVyLCBpbnQgX21heF9sZW4pOw0KY2hhciAqCQlpdG9hKGludCB2
YWx1ZSwgY2hhciAqYnVmZmVyLCBpbnQgcmFkaXgpOw0KbG9uZyAgICAgICAgICAgIGpyYW5kNDgo
dW5zaWduZWQgc2hvcnQgc3RhdGVbM10pOw0KbG9uZyBsb25nCWxsYWJzKGxvbmcgbG9uZyBfaSk7
DQpsbGRpdl90CQlsbGRpdihsb25nIGxvbmcgX251bWVyLCBsb25nIGxvbmcgX2Rlbm9tKTsNCnZv
aWQgICAgICAgICAgICBsY29uZzQ4KHVuc2lnbmVkIHNob3J0IHBhcmFtWzddKTsNCnVuc2lnbmVk
IGxvbmcgICBscmFuZDQ4KHZvaWQpOw0KbG9uZyAgICAgICAgICAgIG1yYW5kNDgodm9pZCk7DQp1
bnNpZ25lZCBsb25nICAgbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydCBzdGF0ZVszXSk7DQppbnQJCXB1
dGVudihjb25zdCBjaGFyICpfdmFsKTsNCnVuc2lnbmVkIHNob3J0ICpzZWVkNDgodW5zaWduZWQg
c2hvcnQgc3RhdGVfc2VlZFszXSk7DQppbnQJCXNldGVudihjb25zdCBjaGFyICpfdmFyLCBjb25z
dCBjaGFyICpfdmFsLCBpbnQgX3JlcGxhY2UpOw0Kdm9pZCAgICAgICAgICAgIHNyYW5kNDgobG9u
ZyBzZWVkdmFsKTsNCmludAkJc3RhY2thdmFpbCh2b2lkKTsNCmxvbmcgZG91YmxlCV9zdHJ0b2xk
KGNvbnN0IGNoYXIgKl9zLCBjaGFyICoqX2VuZHB0cik7DQpsb25nIGxvbmcJc3RydG9sbChjb25z
dCBjaGFyICpfcywgY2hhciAqKl9lbmRwdHIsIGludCBfYmFzZSk7DQp1bnNpZ25lZCBsb25nIGxv
bmcgc3RydG91bGwoY29uc3QgY2hhciAqX3MsIGNoYXIgKipfZW5kcHRyLCBpbnQgX2Jhc2UpOw0K
dm9pZAkJc3dhYihjb25zdCB2b2lkICpmcm9tLCB2b2lkICp0bywgaW50IG5ieXRlcyk7DQoNCg0K
DQoNCg0KIA0KY2hhciAgKglpbml0c3RhdGUgKHVuc2lnbmVkIF9zZWVkLCBjaGFyICpfYXJnX3N0
YXRlLCBpbnQgX24pOw0KY2hhciAgKglzZXRzdGF0ZShjaGFyICpfYXJnX3N0YXRlKTsNCmxvbmcJ
cmFuZG9tKHZvaWQpOw0KaW50CXNyYW5kb20oaW50IF9zZWVkKTsNCg0KIA0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX3N5c3RlbV9mbGFnczsNCg0KDQoNCg0KDQoN
Cg0KDQoNCn0NCg0KDQoNCiMgNTAgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsYWxnb2Jh
c2UuaCIgMiAzDQoNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xpYi9nY2MtbGliL2RqZ3BwLzIu
OTUyL2luY2x1ZGUvbmV3LmgiIDEgMw0KIA0KDQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAv
bGliL2djYy1saWIvZGpncHAvMi45NTIvaW5jbHVkZS9uZXciIDEgMw0KIA0KIA0KDQoNCg0KDQoj
cHJhZ21hIGludGVyZmFjZSAibmV3Ig0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvbGliL2djYy1s
aWIvZGpncHAvMi45NTIvaW5jbHVkZS9leGNlcHRpb24iIDEgMw0KIA0KIA0KDQoNCg0KDQojcHJh
Z21hIGludGVyZmFjZSAiZXhjZXB0aW9uIg0KDQpleHRlcm4gIkMrKyIgew0KDQpuYW1lc3BhY2Ug
c3RkIHsNCg0KY2xhc3MgZXhjZXB0aW9uIHsNCnB1YmxpYzoNCiAgZXhjZXB0aW9uICgpIHsgfQ0K
ICB2aXJ0dWFsIH5leGNlcHRpb24gKCkgeyB9DQogIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCAo
KSBjb25zdDsNCn07DQoNCmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uIHsN
CnB1YmxpYzoNCiAgYmFkX2V4Y2VwdGlvbiAoKSB7IH0NCiAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv
biAoKSB7IH0NCn07DQoNCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsNCnR5
cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7DQoNCnRlcm1pbmF0ZV9oYW5kbGVy
IHNldF90ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsNCnZvaWQgdGVybWluYXRlICgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCnVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5l
eHBlY3RlZCAodW5leHBlY3RlZF9oYW5kbGVyKTsNCnZvaWQgdW5leHBlY3RlZCAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsNCg0K
fSAgDQoNCn0gIA0KDQoNCiMgOSAiYzovZG9zL3B1Yi9kamdwcC9saWIvZ2NjLWxpYi9kamdwcC8y
Ljk1Mi9pbmNsdWRlL25ldyIgMiAzDQoNCg0KZXh0ZXJuICJDKysiIHsNCg0KbmFtZXNwYWNlIHN0
ZCB7DQoNCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbiB7DQogIHB1YmxpYzoN
CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJi
YWRfYWxsb2MiOyB9DQogIH07DQoNCiAgc3RydWN0IG5vdGhyb3dfdCB7fTsNCiAgZXh0ZXJuIGNv
bnN0IG5vdGhyb3dfdCBub3Rocm93Ow0KICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsN
CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyIChuZXdfaGFuZGxlcik7DQoNCn0gIA0KDQog
DQp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsNCnZv
aWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7DQp2b2lk
IG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGVb
XSAodm9pZCAqKSB0aHJvdygpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QsIGNvbnN0IHN0
ZDo6bm90aHJvd190JikgdGhyb3coKTsNCnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QsIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lk
ICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRl
W10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0KDQogDQppbmxpbmUg
dm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4g
cGxhY2U7IH0NCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNl
KSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9DQp9ICANCg0KDQojIDYgImM6L2Rvcy9wdWIvZGpn
cHAvbGliL2djYy1saWIvZGpncHAvMi45NTIvaW5jbHVkZS9uZXcuaCIgMiAzDQoNCg0KdXNpbmcg
c3RkOjpuZXdfaGFuZGxlcjsNCnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOw0KDQoNCiMgNTIg
ImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsYWxnb2Jhc2UuaCIgMiAzDQoNCg0KDQoNCiMg
MSAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfaXRlcmF0b3IuaCIgMSAzDQogDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0K
DQoNCiANCg0Kc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCBvdXRwdXRfaXRl
cmF0b3JfdGFnIHt9Ow0Kc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0
X2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsNCg0KIA0KIA0K
IA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1
dF9pdGVyYXRvciB7DQogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5Ow0KICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOw0KICB0eXBlZGVm
IF9EaXN0YW5jZSAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiAgICAg
ICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5j
ZTsNCn07DQoNCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3Igew0KICB0eXBlZGVmIG91dHB1dF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg
ICB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90
eXBlOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiB2
b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3Igew0KICB0eXBlZGVmIGZv
cndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCAgICAg
ICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAg
ZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgIHBvaW50ZXI7
DQogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0KfTsNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yIHsNCiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBl
Ow0KICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsN
CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVm
IF9UcCYgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Ig
ew0KICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
Ow0KICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5
cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBl
ZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiAg
ICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0KfTsNCg0KIyA5OCAiYzovZG9zL3B1Yi9k
amdwcC9sYW5nL2N4eC9zdGxfaXRlcmF0b3IuaCIgMw0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXJhdG9yPg0Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7DQogIHR5cGVkZWYgdHlwZW5hbWUg
X0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5
cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5
cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyICAgICAgICAgICBwb2lu
dGVyOw0KICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlICAgICAgICAgcmVm
ZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBpdGVyYXRvcl90cmFp
dHM8X1RwKj4gew0KICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90
eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5
cGU7DQogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7DQogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBs
YXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsNCiAg
dHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAg
dHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRl
ZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm
IGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9U
cCYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7DQp9Ow0KDQogDQogDQogDQogDQoNCiANCg0K
dGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVy
JikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRv
cl9jYXRlZ29yeSBfQ2F0ZWdvcnk7DQogIHJldHVybiBfQ2F0ZWdvcnkoKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSoNCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpDQp7DQogIHJl
dHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUqPigwKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQpfX3ZhbHVlX3R5cGUoY29u
c3QgX0l0ZXImKQ0Kew0KICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+
DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdv
cnkNCml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19pKTsgfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqDQpkaXN0YW5j
ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKg0KdmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJl
dHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQ0KDQoNCg0KDQoNCiMgMjU5ICJjOi9kb3MvcHViL2Rq
Z3BwL2xhbmcvY3h4L3N0bF9pdGVyYXRvci5oIiAzDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0NCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZv
aWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgDQogICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIA0KICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQp7
DQogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIA0KICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s
YXN0LCBfRGlzdGFuY2UmIF9fbikNCnsNCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9f
biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9f
biA9IDA7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsrX19maXJzdDsgKytf
X247DQogIH0NCiAgcmV0dXJuIF9fbjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KZGlzdGFuY2Uo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0
ZWdvcnkgDQogICAgX0NhdGVnb3J5Ow0KICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9DYXRlZ29yeSgpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBf
RGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgd2hpbGUgKF9fbi0tKSArK19f
aTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgDQogICAgICAgICAgICAgICAgICAgICAgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcpIHsNCiAgaWYgKF9fbiA+PSAwKQ0KICAgIHdoaWxlIChfX24t
LSkgKytfX2k7DQogIGVsc2UNCiAgICB3aGlsZSAoX19uKyspIC0tX19pOw0KfQ0KDQoNCg0KDQoN
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4N
CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3Rh
bmNlIF9fbiwgDQogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcpIHsNCiAgX19pICs9IF9fbjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
LCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBf
X2ksIF9EaXN0YW5jZSBfX24pIHsNCiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRl
Z29yeShfX2kpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQpjbGFzcyBiYWNr
X2luc2VydF9pdGVyYXRvciB7DQpwcm90ZWN0ZWQ6DQogIF9Db250YWluZXIqIGNvbnRhaW5lcjsN
CnB1YmxpYzoNCiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOw0K
ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgICAgICAg
ICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg
cG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCg0KICBl
eHBsaWNpdCBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy
KCZfX3gpIHt9DQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+Jg0KICBvcGVyYXRv
cj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyANCiAg
ICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0N
CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJu
ICp0aGlzOyB9DQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisr
KCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m
IG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQ0KfTsNCg0KIyAzNzggImM6L2Rvcy9w
dWIvZGpncHAvbGFuZy9jeHgvc3RsX2l0ZXJhdG9yLmgiIDMNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NvbnRhaW5lcj4NCmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNr
X2luc2VydGVyKF9Db250YWluZXImIF9feCkgew0KICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4oX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQpj
bGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igew0KcHJvdGVjdGVkOg0KICBfQ29udGFpbmVyKiBj
b250YWluZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWlu
ZXJfdHlwZTsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
Ow0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB2
b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lkICAgICAg
ICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7DQoNCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkg
OiBjb250YWluZXIoJl9feCkge30NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192
YWx1ZSkgeyANCiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7DQogICAgcmV0dXJu
ICp0aGlzOw0KICB9DQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0
b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu
ZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoN
CiMgNDE3ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9pdGVyYXRvci5oIiAzDQoNCg0K
dGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkgew0KICByZXR1cm4g
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfQ29udGFpbmVyPg0KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAg
X0NvbnRhaW5lciogY29udGFpbmVyOw0KICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBp
dGVyOw0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5
cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAg
dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0K
DQogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6
Oml0ZXJhdG9yIF9faSkgDQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQ0KICBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBf
Q29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IA0KICAgIGl0ZXIgPSBjb250YWluZXIt
Pmluc2VydChpdGVyLCBfX3ZhbHVlKTsNCiAgICArK2l0ZXI7DQogICAgcmV0dXJuICp0aGlzOw0K
ICB9DQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4g
KnRoaXM7IH0NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyBy
ZXR1cm4gKnRoaXM7IH0NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisr
KGludCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoNCiMgNDU5ICJjOi9kb3MvcHViL2RqZ3BwL2xh
bmcvY3h4L3N0bF9pdGVyYXRvci5oIiAzDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIs
IGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSANCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBp
bnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpDQp7DQogIHR5cGVkZWYgdHlw
ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOw0KICByZXR1cm4gaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBf
VHAmLCANCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+IA0KDQoNCg0KDQpj
bGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igew0KICB0eXBlZGVmIHJldmVyc2Vf
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVHAsIA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFu
Y2U+ICBfU2VsZjsNCnByb3RlY3RlZDoNCiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBjdXJyZW50
Ow0KcHVibGljOg0KICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5
cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl
Ow0KICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVk
ZWYgX1JlZmVyZW5jZSAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0KDQogIHJldmVyc2VfYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9DQogIGV4cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkNCiAgICA6IGN1cnJlbnQoX194
KSB7fQ0KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJy
ZW50OyB9DQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qgew0KICAgIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50Ow0KICAgIHJldHVybiAqLS1fX3RtcDsNCiAgfQ0K
DQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9
DQoNCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiAq
dGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0g
KnRoaXM7DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBfU2VsZiYg
b3BlcmF0b3ItLSgpIHsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQog
IF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7DQogICAgX1NlbGYgX190bXAgPSAqdGhpczsNCiAgICAr
K2N1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQp9Ow0KDQojIDU1MCAiYzovZG9zL3B1
Yi9kamdwcC9sYW5nL2N4eC9zdGxfaXRlcmF0b3IuaCIgMw0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
QmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl
Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgNCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9u
YWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsIA0KICAgIGNv
bnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E
aXN0YW5jZT4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsNCn0N
Cg0KDQoNCiANCiANCiANCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmNsYXNz
IHJldmVyc2VfaXRlcmF0b3IgDQp7DQpwcm90ZWN0ZWQ6DQogIF9JdGVyYXRvciBjdXJyZW50Ow0K
cHVibGljOg0KICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpp
dGVyYXRvcl9jYXRlZ29yeQ0KICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQogICAgICAg
ICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyDQogICAgICAg
ICAgcG9pbnRlcjsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6cmVmZXJlbmNlDQogICAgICAgICAgcmVmZXJlbmNlOw0KDQogIHR5cGVkZWYgX0l0ZXJhdG9y
IGl0ZXJhdG9yX3R5cGU7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9T
ZWxmOw0KDQpwdWJsaWM6DQogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQ0KICBleHBsaWNpdCByZXZl
cnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQ0KDQogIHJl
dmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7
fQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQ0KICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7
fQ0KDQogICAgDQogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7
IH0NCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsNCiAgICBfSXRlcmF0b3IgX190bXAg
PSBjdXJyZW50Ow0KICAgIHJldHVybiAqLS1fX3RtcDsNCiAgfQ0KDQogIHBvaW50ZXIgb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCg0KICBfU2VsZiYgb3Bl
cmF0b3IrKygpIHsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9T
ZWxmIG9wZXJhdG9yKysoaW50KSB7DQogICAgX1NlbGYgX190bXAgPSAqdGhpczsNCiAgICAtLWN1
cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIF9TZWxmJiBvcGVyYXRvci0tKCkgew0K
ICAgICsrY3VycmVudDsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3It
LShpbnQpIHsNCiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOw0KICAgICsrY3VycmVudDsNCiAgICBy
ZXR1cm4gX190bXA7DQogIH0NCg0KICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9f
bikgY29uc3Qgew0KICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsNCiAgfQ0KICBfU2Vs
ZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCAtPSBfX247
DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5
cGUgX19uKSBjb25zdCB7DQogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOw0KICB9DQog
IF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsNCiAgICBjdXJyZW50ICs9
IF9fbjsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlm
ZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIA0KfTsg
DQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgDQogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVy
biBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0
b3I+DQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3gsIA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0Kb3BlcmF0b3ItKGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCANCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNl
KCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQppbmxpbmUgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+IA0Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgew0KICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOw0KfQ0KDQojIDgwNSAiYzovZG9zL3B1Yi9kamdwcC9s
YW5nL2N4eC9zdGxfaXRlcmF0b3IuaCIgMw0KDQoNCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IA0KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7DQog
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0gPD4gIChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVh
bV9pdGVyYXRvciYpOw0KcHJvdGVjdGVkOg0KICBpc3RyZWFtKiBfTV9zdHJlYW07DQogIF9UcCBf
TV92YWx1ZTsNCiAgYm9vbCBfTV9lbmRfbWFya2VyOw0KICB2b2lkIF9NX3JlYWQoKSB7DQogICAg
X01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsNCiAgICBpZiAoX01f
ZW5kX21hcmtlcikgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsNCiAgICBfTV9lbmRfbWFya2VyID0g
KCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOw0KICB9DQpwdWJsaWM6DQogIHR5cGVkZWYgaW5w
dXRfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgICAgICAg
ICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3QgICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICBwb2ludGVyOw0KICB0
eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVmZXJlbmNlOw0KDQogIGlzdHJlYW1faXRlcmF0
b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihmYWxzZSkge30NCiAgaXN0cmVh
bV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9
DQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQ0KDQog
IHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQoN
CiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygpIHsgDQogICAgX01f
cmVhZCgpOyANCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAs
IF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsNCiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rp
c3Q+IF9fdG1wID0gKnRoaXM7DQogICAgX01fcmVhZCgpOw0KICAgIHJldHVybiBfX3RtcDsNCiAg
fQ0KfTsNCg0KIyA4NjQgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2l0ZXJhdG9yLmgi
IDMNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gs
DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlz
dGFuY2U+JiBfX3kpIHsNCiAgcmV0dXJuIChfX3guX01fc3RyZWFtID09IF9feS5fTV9zdHJlYW0g
JiYNCiAgICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBfX3kuX01fZW5kX21hcmtlcikgfHwN
CiAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2Vy
ID09IGZhbHNlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KY2xhc3Mgb3N0cmVhbV9pdGVy
YXRvciB7DQpwcm90ZWN0ZWQ6DQogIG9zdHJlYW0qIF9NX3N0cmVhbTsNCiAgY29uc3QgY2hhciog
X01fc3RyaW5nOw0KcHVibGljOg0KICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOw0K
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm
IHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg
ICAgIHJlZmVyZW5jZTsNCg0KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcykgOiBfTV9z
dHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQ0KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0m
IF9fcywgY29uc3QgY2hhciogX19jKSANCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5n
KF9fYykgIHt9DQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYg
X192YWx1ZSkgeyANCiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7DQogICAgaWYgKF9NX3N0cmlu
ZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIG9z
dHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgb3N0
cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0gDQogIG9z
dHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9IA0K
fTsNCg0KIyA5MDcgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2l0ZXJhdG9yLmgiIDMN
Cg0KDQogDQoNCg0KDQogDQogDQogDQojIDU2ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0
bGFsZ29iYXNlLmgiIDIgMw0KDQoNCg0KIA0KDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZCBfX2l0
ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopIHsNCiAg
X1RwIF9fdG1wID0gKl9fYTsNCiAgKl9fYSA9ICpfX2I7DQogICpfX2IgPSBfX3RtcDsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+DQppbmxp
bmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKSB7
DQogIF9faXRlcl9zd2FwKF9fYSwgX19iLCBfX3ZhbHVlX3R5cGUoIF9fYSApICk7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikg
ew0KICBfVHAgX190bXAgPSBfX2E7DQogIF9fYSA9IF9fYjsNCiAgX19iID0gX190bXA7DQp9DQoN
CiANCiANCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgY29uc3QgX1Rw
JiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7DQogIHJldHVybiBfX2IgPCBf
X2EgPyBfX2IgOiBfX2E7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgY29uc3Qg
X1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7DQogIHJldHVybiAgX19h
IDwgX19iID8gX19iIDogX19hOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmU+DQppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U
cCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsNCiAgcmV0dXJuIF9fY29tcChfX2IsIF9fYSkgPyBf
X2IgOiBfX2E7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPg0KaW5s
aW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBh
cmUgX19jb21wKSB7DQogIHJldHVybiBfX2NvbXAoX19hLCBfX2IpID8gX19iIDogX19hOw0KfQ0K
DQogDQogDQoNCiANCiANCiANCiANCiANCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgX091dHB1dEl0
ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopDQp7DQogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkNCiAgICAqX19yZXN1bHQg
PSAqX19maXJzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp
bmUgX091dHB1dEl0ZXINCl9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQ0Kew0KICBmb3IgKF9EaXN0YW5jZSBfX24g
PSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgew0KICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJldHVybiBf
X3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBfVHAqDQpfX2NvcHlf
dHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVz
dWx0KSB7DQogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFz
dCAtIF9fZmlyc3QpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOw0K
fQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBj
bGFzcyBfQm9vbFR5cGU+DQpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoIHsNCiAgc3RhdGljIF9PdXRw
dXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsNCiAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkg
X0NhdGVnb3J5Ow0KICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOw0KICAgIHJldHVybiBfX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdGVnb3J5KCksIChfRGlzdGFuY2UqKSAwKTsNCiAgfQ0K
fTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8X1RwKiwg
X1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2Zp
cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIHJldHVybiBfX2Nv
cHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgfQ0KfTsNCg0KdGVtcGxh
dGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwg
X190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj
b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIHJldHVybiBfX2NvcHlfdHJp
dmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5saW5lIF9PdXRwdXRJdGVyIGNv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsNCiAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IN
CiAgICAgICAgICBfVHJpdmlhbDsNCiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVy
LCBfT3V0cHV0SXRlciwgX1RyaXZpYWw+DQogICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQpOw0KfQ0KDQojIDIxMyAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxhbGdvYmFz
ZS5oIiAzDQoNCg0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwgDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPg0K
aW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19maXJzdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKikNCnsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQ0KICAgICotLV9fcmVzdWx0ID0g
Ki0tX19sYXN0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+
DQppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopDQp7
DQogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19u
KQ0KICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoN
Cg0KDQogDQogDQogDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4NCnN0
cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5IA0KICAg
ICAgICAgIF9DYXQ7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVj
dGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUNCiAgICAgICAgICBfRGlzdGFuY2U7DQoNCiAg
c3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly
c3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fcmVzdWx0KSB7DQogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsNCiAgfQ0KfTsNCg0K
dGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1Rw
KiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIGNvbnN0IHB0
cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsNCiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g
X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsNCiAgICByZXR1cm4gX19yZXN1bHQg
LSBfTnVtOw0KICB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IF9fY29weV9i
YWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCnsNCiAgc3Rh
dGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAq
IF9fcmVzdWx0KSB7DQogICAgcmV0dXJuICBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwg
X1RwKiwgX190cnVlX3R5cGU+DQogICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7DQogIH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPg0KaW5saW5l
IF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVz
dWx0KSB7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+DQogICAgICAgICAgICAgICAgICAgICAgICA6Omhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3INCiAgICAgICAgICBfVHJpdmlhbDsNCiAgcmV0
dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4NCiAgICAg
ICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KfQ0KDQojIDMwMyAi
YzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxhbGdvYmFzZS5oIiAzDQoNCg0KIA0KIA0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVy
Pg0KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1f
X2NvdW50KSB7DQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICAg
ICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+
KF9fZmlyc3QsIF9fcmVzdWx0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJ
dGVyPg0KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
Zykgew0KICBfUkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Ow0KICByZXR1cm4gcGFp
cjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBj
bGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0K
X19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkgew0KICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQs
DQogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0
SXRlcj4NCmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0KY29weV9uKF9JbnB1
dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsNCiAg
cmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0KTsNCn0NCg0KIA0KIA0K
DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCnZvaWQgZmlsbChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh
bHVlKSB7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAqX19m
aXJzdCA9IF9fdmFsdWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg
X1NpemUsIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgew0KICBmb3IgKCA7IF9fbiA+IDA7IC0t
X19uLCArK19fZmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KICByZXR1cm4gX19maXJz
dDsNCn0NCg0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyPg0KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIpIHsNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0Mikgew0KICAgICsrX19maXJzdDE7DQogICAgKytfX2Zp
cnN0MjsNCiAgfQ0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmly
c3QxLCBfX2ZpcnN0Mik7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpwYWlyPF9JbnB1dEl0ZXIxLCBf
SW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQpIHsNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlf
cHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsNCiAgICArK19fZmlyc3QxOw0KICAgICsrX19m
aXJzdDI7DQogIH0NCiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2Zp
cnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyPg0KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
Mikgew0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJz
dDIpDQogICAgaWYgKCpfX2ZpcnN0MSAhPSAqX19maXJzdDIpDQogICAgICByZXR1cm4gZmFsc2U7
DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0KaW5saW5lIGJvb2wgZXF1YWwo
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
KSB7DQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0
MikNCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAg
cmV0dXJuIGZhbHNlOw0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KIA0KIA0KIA0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KYm9vbCBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIpIHsNCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDINCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQogICAgaWYg
KCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpDQogICAgICByZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIF9f
Zmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+DQpi
b29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKSB7DQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyDQogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgew0K
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIHRydWU7
DQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQogICAgICByZXR1cm4gZmFs
c2U7DQogIH0NCiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MjsNCn0NCg0KaW5saW5lIGJvb2wgDQpsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1
bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fbGFzdDIpDQp7DQogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0g
X19maXJzdDE7DQogIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7DQog
IGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xl
bjEsIF9fbGVuMikpOw0KICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9f
bGVuMSA8IF9fbGVuMjsNCn0NCg0KaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUo
Y29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciog
X19sYXN0MikNCnsNCg0KICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNp
Z25lZCBjaGFyKikgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsNCg0KDQoNCg0KDQoN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4NCmlu
dCBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0KICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgaWYgKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgIHJldHVybiAtMTsNCiAgICBpZiAoKl9fZmlyc3QyIDwg
Kl9fZmlyc3QxKQ0KICAgICAgcmV0dXJuIDE7DQogICAgKytfX2ZpcnN0MTsNCiAgICArK19fZmly
c3QyOw0KICB9DQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7DQogICAgcmV0dXJuICEoX19m
aXJzdDEgPT0gX19sYXN0MSk7DQogIH0NCiAgZWxzZSB7DQogICAgcmV0dXJuIC0xOw0KICB9DQp9
DQoNCmlubGluZSBpbnQNCl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpDQp7DQogIGNvbnN0IHB0cmRpZmZf
dCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7DQogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIg
PSBfX2xhc3QyIC0gX19maXJzdDI7DQogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2Zp
cnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOw0KICByZXR1cm4gX19yZXN1bHQg
IT0gMCA/IF9fcmVzdWx0IA0KICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19s
ZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsNCn0NCg0KaW5saW5lIGludCAN
Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29u
c3QgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikNCnsNCg0KICByZXR1cm4gX19sZXhp
Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOw0KDQoN
Cg0KDQoNCg0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyPg0KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCiAgcmV0dXJu
IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJz
dDIsIF9fbGFzdDIpOw0KfQ0KDQogDQoNCg0KDQogDQogDQogDQojIDMwICJjOi9kb3MvcHViL2Rq
Z3BwL2xhbmcvY3h4L3ZlY3RvciIgMiAzDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4
eC9zdGxfYWxsb2MuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCiANCiANCiANCiANCiANCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2luY2x1ZGUvYXNz
ZXJ0LmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgew0K
DQoNCnZvaWQJX19kal9hc3NlcnQoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKixpbnQpIF9fYXR0
cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOw0KDQoNCn0NCg0KDQoNCg0KDQojIDU2ICJjOi9kb3Mv
cHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9hbGxvYy5oIiAyIDMNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQojIDc4ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9hbGxvYy5oIiAzDQoNCiMgODcg
ImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2FsbG9jLmgiIDMNCg0KIyA5NyAiYzovZG9z
L3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfYWxsb2MuaCIgMw0KDQojIDExNSAiYzovZG9zL3B1Yi9k
amdwcC9sYW5nL2N4eC9zdGxfYWxsb2MuaCIgMw0KDQoNCiANCg0KDQoNCg0KDQoNCiANCg0KDQoN
Cg0KDQogDQogDQoNCg0KDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCmNsYXNz
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsNCg0KcHJpdmF0ZToNCg0KICBzdGF0aWMgdm9pZCog
X1Nfb29tX21hbGxvYyhzaXplX3QpOw0KICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9p
ZCosIHNpemVfdCk7DQoNCg0KICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlcikoKTsNCg0KDQpwdWJsaWM6DQoNCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBf
X24pDQogIHsNCiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOw0KICAgIGlmICgwID09
IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsNCiAgICByZXR1cm4gX19y
ZXN1bHQ7DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90
ICApDQogIHsNCiAgICBmcmVlKF9fcCk7DQogIH0NCg0KICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0
ZSh2b2lkKiBfX3AsIHNpemVfdCAgLCBzaXplX3QgX19uZXdfc3opDQogIHsNCiAgICB2b2lkKiBf
X3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7DQogICAgaWYgKDAgPT0gX19yZXN1bHQp
IF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7DQogICAgcmV0dXJuIF9f
cmVzdWx0Ow0KICB9DQoNCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9p
ZCAoKl9fZikoKSkpKCkNCiAgew0KICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxv
Y19vb21faGFuZGxlcjsNCiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsNCiAg
ICByZXR1cm4oX19vbGQpOw0KICB9DQoNCn07DQoNCiANCg0KDQp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4NCnZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxs
b2Nfb29tX2hhbmRsZXIpKCkgPSAwOw0KDQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCoN
Cl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9f
bikNCnsNCiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgdm9pZCogX19y
ZXN1bHQ7DQoNCiAgICBmb3IgKDs7KSB7DQogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBf
X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsNCiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2Nf
aGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpIDsgfQ0K
ICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgICAgIF9fcmVzdWx0ID0gbWFs
bG9jKF9fbik7DQogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsNCiAgICB9
DQp9DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQ0Kew0KICAg
IHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICB2b2lkKiBfX3Jlc3VsdDsNCg0K
ICAgIGZvciAoOzspIHsNCiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyOw0KICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7
IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9DQogICAgICAgICgq
X19teV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg
X19uKTsNCiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOw0KICAgIH0NCn0N
Cg0KdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTwwPiBtYWxsb2NfYWxsb2M7DQoNCnRl
bXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KY2xhc3Mgc2ltcGxlX2FsbG9jIHsNCg0K
cHVibGljOg0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBfX24pDQogICAgICB7IHJl
dHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2Yg
KF9UcCkpOyB9DQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkNCiAgICAgIHsgcmV0dXJu
IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0NCiAgICBzdGF0aWMgdm9p
ZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQ0KICAgICAgeyBpZiAoMCAhPSBfX24p
IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0NCiAgICBzdGF0
aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQ0KICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUo
X19wLCBzaXplb2YgKF9UcCkpOyB9DQp9Ow0KDQogDQogDQogDQogDQogDQp0ZW1wbGF0ZSA8Y2xh
c3MgX0FsbG9jPg0KY2xhc3MgZGVidWdfYWxsb2Mgew0KDQpwcml2YXRlOg0KDQogIGVudW0ge19T
X2V4dHJhID0gOH07ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAg
ICAgICAgICAgICAgDQoNCnB1YmxpYzoNCg0KICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90
IF9fbikNCiAgew0KICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUo
X19uICsgX1NfZXh0cmEpOw0KICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsNCiAgICByZXR1
cm4gX19yZXN1bHQgKyBfU19leHRyYTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciop
X19wIC0gX1NfZXh0cmE7DQogICAgKCh2b2lkKSgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24g
KXx8KF9fZGpfYXNzZXJ0KCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwiYzovZG9zL3B1Yi9k
amdwcC9sYW5nL2N4eC9zdGxfYWxsb2MuaCIsMjYzKSwwKSkpIDsNCiAgICBfQWxsb2M6OmRlYWxs
b2NhdGUoX19yZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkKiBy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opDQog
IHsNCiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsNCiAgICAoKHZv
aWQpKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6ICl8fChfX2RqX2Fzc2VydCgiKihz
aXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9z
dGxfYWxsb2MuaCIsMjcwKSwwKSkpIDsNCiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikNCiAg
ICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19u
ZXdfc3ogKyBfU19leHRyYSk7DQogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7DQog
ICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7DQogIH0NCg0KfTsNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KDQogDQogDQog
DQogDQogDQogDQogDQogDQogDQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxib29sIHRocmVhZHMs
IGludCBpbnN0Pg0KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsNCg0KcHJpdmF0ZToN
CiAgIA0KICAgDQoNCiAgICBlbnVtIHtfQUxJR04gPSA4fTsNCiAgICBlbnVtIHtfTUFYX0JZVEVT
ID0gMTI4fTsNCiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMvX0FMSUdOfTsNCg0K
ICBzdGF0aWMgc2l6ZV90DQogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQ0KICAgIHsgcmV0
dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpICYgfihfQUxJR04gLSAxKSk7IH0NCg0KcHJpdmF0
ZSA6DQogIHVuaW9uIF9PYmogew0KICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGlu
azsNCiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsgICAgIA0KICB9Ow0KcHJpdmF0ZToN
Cg0KDQoNCg0KICAgIHN0YXRpYyBfT2JqKiAgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107DQoN
CiAgc3RhdGljICBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsNCiAg
ICAgICAgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOw0KICB9DQoN
CiAgIA0KICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOw0KICAgDQogICANCiAg
c3RhdGljIGNoYXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7
DQoNCiAgIA0KICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsNCiAgc3RhdGljIGNoYXIqIF9T
X2VuZF9mcmVlOw0KICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCiMgMzg5ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9hbGxv
Yy5oIiAzDQoNCg0KICAgIGNsYXNzIF9Mb2NrIHsNCiAgICAgICAgcHVibGljOg0KICAgICAgICAg
ICAgX0xvY2soKSB7ICA7IH0NCiAgICAgICAgICAgIH5fTG9jaygpIHsgIDsgfQ0KICAgIH07DQog
ICAgZnJpZW5kIGNsYXNzIF9Mb2NrOw0KDQpwdWJsaWM6DQoNCiAgIA0KICBzdGF0aWMgdm9pZCog
YWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgew0KICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0Ow0K
ICAgIF9PYmoqICAgX19yZXN1bHQ7DQoNCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRF
Uykgew0KICAgICAgICByZXR1cm4obWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX24pKTsNCiAgICB9
DQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChf
X24pOw0KICAgICANCiAgICAgDQogICAgIA0KDQoNCg0KDQogICAgX19yZXN1bHQgPSAqX19teV9m
cmVlX2xpc3Q7DQogICAgaWYgKF9fcmVzdWx0ID09IDApIHsNCiAgICAgICAgdm9pZCogX19yID0g
X1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOw0KICAgICAgICByZXR1cm4gX19yOw0KICAgIH0N
CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAg
ICByZXR1cm4gKF9fcmVzdWx0KTsNCiAgfTsNCg0KICAgDQogIHN0YXRpYyB2b2lkIGRlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgX09iaiogX19xID0gKF9PYmoqKV9f
cDsNCiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlzdDsNCg0KICAgIGlmIChfX24gPiAoc2l6ZV90
KSBfTUFYX0JZVEVTKSB7DQogICAgICAgIG1hbGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9f
bik7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KICAgICANCg0KDQoNCg0KICAgIF9fcSAt
PiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAqX19teV9mcmVlX2xp
c3QgPSBfX3E7DQogICAgIA0KICB9DQoNCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7DQoNCn0gOw0KDQp0eXBlZGVm
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTwgZmFsc2UgLCAwPiBhbGxvYzsNCnR5cGVkZWYgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOw0KDQoN
Cg0KIA0KIA0KIA0KIA0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hh
cioNCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5r
X2FsbG9jKHNpemVfdCBfX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpDQp7DQogICAgY2hhciogX19y
ZXN1bHQ7DQogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0KICAg
IHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7DQoNCiAg
ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsNCiAgICAgICAgX19yZXN1bHQg
PSBfU19zdGFydF9mcmVlOw0KICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7
DQogICAgICAgIHJldHVybihfX3Jlc3VsdCk7DQogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQg
Pj0gX19zaXplKSB7DQogICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXpl
KTsNCiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7DQogICAgICAgIF9f
cmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFs
X2J5dGVzOw0KICAgICAgICByZXR1cm4oX19yZXN1bHQpOw0KICAgIH0gZWxzZSB7DQogICAgICAg
IHNpemVfdCBfX2J5dGVzX3RvX2dldCA9DQoJICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5k
X3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsNCiAgICAgICAgIA0KICAgICAgICBpZiAoX19ieXRlc19s
ZWZ0ID4gMCkgew0KICAgICAgICAgICAgX09iaiogICogX19teV9mcmVlX2xpc3QgPQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRl
c19sZWZ0KTsNCg0KICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVl
X2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgICAgICAgICpfX215X2ZyZWVfbGlz
dCA9IChfT2JqKilfU19zdGFydF9mcmVlOw0KICAgICAgICB9DQogICAgICAgIF9TX3N0YXJ0X2Zy
ZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsNCiAgICAgICAgaWYgKDAgPT0gX1Nf
c3RhcnRfZnJlZSkgew0KICAgICAgICAgICAgc2l6ZV90IF9faTsNCiAgICAgICAgICAgIF9PYmoq
ICAqIF9fbXlfZnJlZV9saXN0Ow0KCSAgICBfT2JqKiBfX3A7DQogICAgICAgICAgICAgDQogICAg
ICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6ZTsg
X19pIDw9IF9NQVhfQllURVM7IF9faSArPSBfQUxJR04pIHsNCiAgICAgICAgICAgICAgICBfX215
X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7DQogICAg
ICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0Ow0KICAgICAgICAgICAgICAgIGlmICgw
ICE9IF9fcCkgew0KICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4g
X01fZnJlZV9saXN0X2xpbms7DQogICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAo
Y2hhciopX19wOw0KICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy
ZWUgKyBfX2k7DQogICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3Np
emUsIF9fbm9ianMpKTsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg
ICAgDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KCSAgICBfU19lbmRfZnJlZSA9
IDA7CSANCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjph
bGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7DQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQog
ICAgICAgICAgICAgDQogICAgICAgIH0NCiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNf
dG9fZ2V0Ow0KICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3Rv
X2dldDsNCiAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0K
ICAgIH0NCn0NCg0KDQogDQogDQogDQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+DQp2b2lkKg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6
X1NfcmVmaWxsKHNpemVfdCBfX24pDQp7DQogICAgaW50IF9fbm9ianMgPSAyMDsNCiAgICBjaGFy
KiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsNCiAgICBfT2JqKiAgKiBf
X215X2ZyZWVfbGlzdDsNCiAgICBfT2JqKiBfX3Jlc3VsdDsNCiAgICBfT2JqKiBfX2N1cnJlbnRf
b2JqOw0KICAgIF9PYmoqIF9fbmV4dF9vYmo7DQogICAgaW50IF9faTsNCg0KICAgIGlmICgxID09
IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsNCiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVf
bGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7DQoNCiAgICAgDQogICAgICBfX3Jlc3VsdCA9
IChfT2JqKilfX2NodW5rOw0KICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChf
T2JqKikoX19jaHVuayArIF9fbik7DQogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsNCiAg
ICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7DQogICAgICAgIF9fbmV4dF9vYmogPSAo
X09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsNCiAgICAgICAgaWYgKF9fbm9ianMgLSAx
ID09IF9faSkgew0KICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGlu
ayA9IDA7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg
IF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOw0KICAgICAg
ICB9DQogICAgICB9DQogICAgcmV0dXJuKF9fcmVzdWx0KTsNCn0NCg0KdGVtcGxhdGUgPGJvb2wg
dGhyZWFkcywgaW50IGluc3Q+DQp2b2lkKg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVh
ZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6
KQ0Kew0KICAgIHZvaWQqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX2NvcHlfc3o7DQoNCiAgICBp
ZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkg
X01BWF9CWVRFUykgew0KICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7DQog
ICAgfQ0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdf
c3opKSByZXR1cm4oX19wKTsNCiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsNCiAg
ICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6Ow0K
ICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOw0KICAgIGRlYWxsb2NhdGUoX19w
LCBfX29sZF9zeik7DQogICAgcmV0dXJuKF9fcmVzdWx0KTsNCn0NCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCiMgNjAyICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9hbGxvYy5o
IiAzDQoNCg0KIyA2ODkgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2FsbG9jLmgiIDMN
Cg0KDQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpjaGFyKiBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsN
Cg0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hhciogX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOw0KDQp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpzaXplX3QgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsNCg0KdGVt
cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogIA0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsNCiAgICBfTkZSRUVMSVNUUw0KXSA9
IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9Ow0KIA0K
IA0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQogDQogDQogDQogDQogDQogDQoNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPg0KY2xhc3MgYWxsb2NhdG9yIHsNCiAgdHlwZWRlZiBhbGxvYyBfQWxs
b2M7ICAgICAgICAgICANCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsN
CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqICAg
ICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOw0KICB0eXBl
ZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVm
ZXJlbmNlOw0KICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4g
b3RoZXI7DQogIH07DQoNCiAgYWxsb2NhdG9yKCkgdGhyb3coKSAge30NCiAgYWxsb2NhdG9yKGNv
bnN0IGFsbG9jYXRvciYpIHRocm93KCkgIHt9DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxv
Y2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSAge30NCiAgfmFsbG9jYXRvcigp
IHRocm93KCkgIHt9DQoNCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsg
cmV0dXJuICZfX3g7IH0NCiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf
X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0NCg0KICAgDQogICANCiAgX1RwKiBhbGxvY2F0ZShz
aXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsNCiAgICByZXR1cm4gX19uICE9IDAgPyBz
dGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkNCiAg
ICAgICAgICAgICAgICAgICAgOiAwOw0KICB9DQoNCiAgIA0KICB2b2lkIGRlYWxsb2NhdGUocG9p
bnRlciBfX3AsIHNpemVfdHlwZSBfX24pDQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBf
X24gKiBzaXplb2YoX1RwKSk7IH0NCg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJv
dygpIA0KICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0KDQogIHZvaWQg
Y29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChf
X3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9
Ow0KDQp0ZW1wbGF0ZTw+DQpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gew0KICB0eXBlZGVmIHNpemVf
dCAgICAgIHNpemVfdHlwZTsNCiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7
DQogIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBj
b25zdF9wb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7DQoNCiAgdGVt
cGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAgIHR5cGVkZWYgYWxsb2NhdG9y
PF9UcDE+IG90aGVyOw0KICB9Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3Qg
YWxsb2NhdG9yPF9UMj4mKQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8
X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikNCnsNCiAgcmV0dXJuIGZhbHNlOw0KfQ0KDQog
DQogDQogDQogDQogDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnN0
cnVjdCBfX2FsbG9jYXRvciB7DQogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7DQoNCiAgdHlw
ZWRlZiBzaXplX3QgICAgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7DQogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9U
cCogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsNCiAgdHlw
ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfVHAgICAgICAgIHZh
bHVlX3R5cGU7DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAg
IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsNCiAgfTsNCg0KICBfX2Fs
bG9jYXRvcigpIHRocm93KCkgIHt9DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBf
X2EpIHRocm93KCkgDQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19h
bGxvYykge30NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9f
YWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKSANCiAgICA6IF9fdW5kZXJseWlu
Z19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQ0KICB+X19hbGxvY2F0b3IoKSB0aHJv
dygpICB7fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy
biAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj
b25zdCB7IHJldHVybiAmX194OyB9DQoNCiAgIA0KICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBf
X24sIGNvbnN0IHZvaWQqID0gMCkgew0KICAgIHJldHVybiBfX24gIT0gMA0KICAgICAgICA/IHN0
YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2Yo
X1RwKSkpDQogICAgICAgIDogMDsNCiAgfQ0KDQogICANCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50
ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2Nh
dGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0NCg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj
b25zdCB0aHJvdygpIA0KICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0K
DQogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhf
X3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9U
cCgpOyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgX19hbGxvY2F0b3I8
dm9pZCwgX0FsbG9jPiB7DQogIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOw0KICB0eXBl
ZGVmIHB0cmRpZmZfdCAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lkKiAgICAgICBw
b2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYg
dm9pZCAgICAgICAgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0
IHJlYmluZCB7DQogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOw0K
ICB9Ow0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsDQogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikN
CnsNCiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5n
X2FsbG9jOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLA0K
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f
YTIpDQp7DQogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJs
eWluZ19hbGxvYzsNCn0NCg0KDQogDQogDQogDQoNCnRlbXBsYXRlIDxpbnQgaW5zdD4NCmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLA0K
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0
PiYpDQp7DQogIHJldHVybiB0cnVlOw0KfQ0KDQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0KaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiYpDQp7DQogIHJldHVybiBmYWxzZTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxib29sIF9f
dGhyZWFkcywgaW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsDQogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m
KQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikNCnsNCiAgcmV0
dXJuIGZhbHNlOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsDQogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7DQogIHJldHVybiB0cnVlOw0KfQ0K
DQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGRlYnVnX2FsbG9jPF9BbGxvYz4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1
Z19hbGxvYzxfQWxsb2M+Jikgew0KICByZXR1cm4gZmFsc2U7DQp9DQoNCg0KIA0KIA0KIA0KIA0K
IA0KIA0KDQogDQogDQogDQogDQogDQogDQoNCiANCiANCiANCiANCiANCiANCiANCiANCiANCiAN
CiANCg0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPg0Kc3RydWN0
IF9BbGxvY190cmFpdHMNCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g
ZmFsc2U7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6ICAgcmViaW5kPF9UcD46Om90
aGVyDQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2NhdG9yPg0KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j
YXRvcj46Ol9TX2luc3RhbmNlbGVzczsNCg0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfVHAxPg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPg0Kew0K
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNp
bXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBhbGxvY2F0b3I8
X1RwPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50
IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy
dWU7DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
PiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5
cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4NCiAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlw
ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7
DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh
dG9yX3R5cGU7DQp9Ow0KDQogDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
IGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsDQogICAgICAgICAgICAgICAg
ICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
Pg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBl
ZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBf
QWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2Nf
dHJhaXRzPF9UcCwNCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RociwgX19pbnN0PiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz
ID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHIsX19pbnN0PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+
DQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19h
bGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0
IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1Rw
LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCg0K
DQoNCg0KDQoNCiANCg0KDQoNCg0KDQogDQogDQogDQojIDMxICJjOi9kb3MvcHViL2RqZ3BwL2xh
bmcvY3h4L3ZlY3RvciIgMiAzDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxf
Y29uc3RydWN0LmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQogDQogDQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHA+DQppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7DQogIF9fcG9p
bnRlci0+fl9UcCgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxp
bmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgew0KICBuZXcg
KF9fcCkgX1QxKF9fdmFsdWUpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPg0KaW5saW5lIHZv
aWQgY29uc3RydWN0KF9UMSogX19wKSB7DQogIG5ldyAoX19wKSBfVDEoKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZA0KX19kZXN0cm95X2F1eChf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNl
X3R5cGUpDQp7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICBk
ZXN0cm95KCYqX19maXJzdCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
Pg0KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0
ZXJhdG9yLCBfX3RydWVfdHlwZSkge30NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3IsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikNCnsNCiAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3INCiAgICAgICAg
ICBfVHJpdmlhbF9kZXN0cnVjdG9yOw0KICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+DQppbmxpbmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QpIHsNCiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192
YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsNCn0NCg0KaW5saW5lIHZvaWQgZGVzdHJveShjaGFyKiwg
Y2hhciopIHt9DQppbmxpbmUgdm9pZCBkZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90Kikge30NCg0K
IA0KDQoNCg0KIA0KIA0KIA0KIyAzMiAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC92ZWN0b3Ii
IDIgMw0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX3VuaW5pdGlhbGl6ZWQu
aCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCiANCg0KDQoNCg0KDQoNCiANCg0KIA0KDQogDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlciANCl9fdW5pbml0
aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIGNvcHkoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXI+DQpfRm9yd2FyZEl0ZXIgDQpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAg
X19mYWxzZV90eXBlKQ0Kew0KICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsNCiAgdHJ5
ICB7DQogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQ0K
ICAgICAgY29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsNCiAgICByZXR1cm4gX19jdXI7DQog
IH0NCiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7
DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX1RwKikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5
cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogIHJldHVybiBfX3VuaW5pdGlh
bGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlubGlu
ZSBfRm9yd2FyZEl0ZXINCiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQpDQp7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBf
X3Jlc3VsdCApICk7DQp9DQoNCmlubGluZSBjaGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qg
Y2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyKiBfX3Jlc3VsdCkgew0KICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0
LCBfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmly
c3QpOw0KfQ0KDQppbmxpbmUgd2NoYXJfdCogDQp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2No
YXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QqIF9fcmVzdWx0KQ0Kew0KICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl
b2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOw0KICByZXR1cm4gX19yZXN1bHQgKyAo
X19sYXN0IC0gX19maXJzdCk7DQp9DQoNCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3
YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs
DQogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgX0Zvcndh
cmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7DQogIHRyeSAgew0KICAgIGZvciAoIDsgX19jb3VudCA+
IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikgDQogICAgICBjb25zdHJ1Y3QoJipf
X2N1ciwgKl9fZmlyc3QpOw0KICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRl
cj4oX19maXJzdCwgX19jdXIpOw0KICB9DQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3Vs
dCwgX19jdXIpIDsgdGhyb3c7IH0gOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUgcGFpcjxfUmFu
ZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPg0KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9f
Zmlyc3QgKyBfX2NvdW50Ow0KICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0Zvcndh
cmRJdGVyPigNCiAgICAgICAgICAgICAgICAgX19sYXN0LA0KICAgICAgICAgICAgICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlu
bGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5
X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29w
eV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxp
bmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+DQp1bmluaXRpYWxpemVkX2NvcHlfbihf
SW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsDQogICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQpIHsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24o
X19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOw0KfQ0KDQogDQogDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX191bmluaXRp
YWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LCANCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUp
DQp7DQogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIA0KICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3YXJk
SXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogIHRyeSAgew0KICAgIGZvciAoIDsgX19jdXIgIT0gX19s
YXN0OyArK19fY3VyKQ0KICAgICAgY29uc3RydWN0KCYqX19jdXIsIF9feCk7DQogIH0NCiAgY2F0
Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRocm93OyB9IDsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0KaW5saW5l
IHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw
JiBfX3gsIF9UcDEqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46
OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0
LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsNCiAgICAgICAgICAgICAgICAgICANCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQgdW5pbml0
aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX194KQ0Kew0KICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0
LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsNCn0NCg0KIA0KIA0KdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCmlubGlu
ZSBfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCwgX190cnVlX3R5cGUpDQp7DQogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gp
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3Mg
X1RwPg0KX0ZvcndhcmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX1NpemUgX19uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkNCnsNCiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJz
dDsNCiAgdHJ5ICB7DQogICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikNCiAgICAg
IGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOw0KICAgIHJldHVybiBfX2N1cjsNCiAgfQ0KICBjYXRj
aCguLi4pIHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0gOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBf
VHAxPg0KaW5saW5lIF9Gb3J3YXJkSXRlciANCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQ0Kew0KICB0
eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7
DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwg
X0lzX1BPRCgpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9UcD4NCmlubGluZSBfRm9yd2FyZEl0ZXIgDQp1bmluaXRpYWxpemVkX2ZpbGxf
bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkNCnsNCiAg
cmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gsIF9fdmFsdWVf
dHlwZSggX19maXJzdCApICk7DQp9DQoNCiANCiANCg0KIA0KIA0KIA0KIA0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+
DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQ0Kew0KICBfRm9yd2FyZEl0
ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KTsNCiAgdHJ5ICB7DQogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19s
YXN0MiwgX19taWQpOw0KICB9DQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19t
aWQpIDsgdGhyb3c7IH0gOw0KfQ0KDQogDQogDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1dEl0ZXI+DQppbmxpbmUgX0ZvcndhcmRJdGVyIA0K
X191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJk
SXRlciBfX21pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QpDQp7DQogIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7DQog
IHRyeSAgew0KICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBf
X21pZCk7DQogIH0NCiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0
aHJvdzsgfSA7DQp9DQoNCiANCiANCiANCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX3VuaW5pdGlhbGl6ZWRf
Y29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIg
X19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpDQp7DQog
IF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFz
dDEsIF9fZmlyc3QyKTsNCiAgdHJ5ICB7DQogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwg
X19sYXN0MiwgX194KTsNCiAgfQ0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdDIsIF9f
bWlkMikgOyB0aHJvdzsgfSA7DQp9DQoNCiANCg0KDQoNCiANCiANCiANCiMgMzMgImM6L2Rvcy9w
dWIvZGpncHAvbGFuZy9jeHgvdmVjdG9yIiAyIDMNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xh
bmcvY3h4L3N0bF92ZWN0b3IuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCiAgDQoNCg0KDQoNCg0KDQogDQog
DQogDQogDQogDQoNCg0KDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
LCBib29sIF9Jc1N0YXRpYz4NCmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZSB7DQpwdWJsaWM6DQog
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0
b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRf
YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0KICBfVmVj
dG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkNCiAgICA6IF9NX2RhdGFf
YWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9y
YWdlKDApIA0KICB7fQ0KICANCnByb3RlY3RlZDoNCiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h
bGxvY2F0b3I7DQogIF9UcCogX01fc3RhcnQ7DQogIF9UcCogX01fZmluaXNoOw0KICBfVHAqIF9N
X2VuZF9vZl9zdG9yYWdlOw0KDQogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgICB7
IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9DQogIHZvaWQgX01fZGVh
bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxs
b2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9DQp9Ow0KDQogDQogDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPg0KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jYXRvciwgdHJ1ZT4gew0KcHVibGljOg0KICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190
cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IGFsbG9jYXRvcl90eXBlKCk7IH0NCg0KICBfVmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2Nh
dG9yX3R5cGUmKQ0KICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0
b3JhZ2UoMCkgDQogIHt9DQogIA0KcHJvdGVjdGVkOg0KICBfVHAqIF9NX3N0YXJ0Ow0KICBfVHAq
IF9NX2ZpbmlzaDsNCiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUgX0FsbG9jX3R5
cGU7DQogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgICB7IHJldHVybiBfQWxsb2Nf
dHlwZTo6YWxsb2NhdGUoX19uKTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNp
emVfdCBfX24pDQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQ0KfTsN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0Kc3RydWN0IF9WZWN0b3JfYmFz
ZQ0KICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFu
Y2VsZXNzPg0Kew0KICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+Ojpf
U19pbnN0YW5jZWxlc3M+DQogICAgICAgICAgX0Jhc2U7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh
c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOw0KDQogIF9WZWN0b3JfYmFzZShjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30NCiAgX1ZlY3Rvcl9iYXNlKHNp
emVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7DQogICAg
X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0Ow0K
ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247DQogIH0NCg0KICB+X1ZlY3Rv
cl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N
X3N0YXJ0KTsgfQ0KfTsgICAgDQoNCiMgMTUwICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0
bF92ZWN0b3IuaCIgMw0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFs
bG9jYXRvcjwgX1RwID4gID4NCmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8
X1RwLCBfQWxsb2M+IA0Kew0KcHJpdmF0ZToNCiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBf
QWxsb2M+IF9CYXNlOw0KcHVibGljOg0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBl
ZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u
c3RfcG9pbnRlcjsNCiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBpdGVyYXRvcjsNCiAgdHlwZWRlZiBj
b25zdCB2YWx1ZV90eXBlKiBjb25zdF9pdGVyYXRvcjsNCiAgdHlwZWRlZiB2YWx1ZV90eXBlJiBy
ZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOw0K
ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsNCg0KICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxv
Y2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0NCg0KDQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy
YXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsNCiAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOw0KDQoNCg0KDQoNCg0K
DQpwcm90ZWN0ZWQ6DQoNCiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlOw0KICB1c2luZyBfQmFz
ZTo6X01fZGVhbGxvY2F0ZTsNCiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0Ow0KICB1c2luZyBfQmFz
ZTo6X01fZmluaXNoOw0KICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7DQoNCg0KcHJv
dGVjdGVkOg0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3Qg
X1RwJiBfX3gpOw0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7DQoN
CnB1YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQ0KICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9DQogIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQ0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpDQog
ICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0NCiAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByYmVnaW4oKSBjb25zdA0KICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IoZW5kKCkpOyB9DQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpDQogICAgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQ0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KSBjb25zdA0KICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0N
Cg0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgp
IC0gYmVnaW4oKSk7IH0NCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QNCiAgICB7IHJldHVy
biBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0NCiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkg
Y29uc3QNCiAgICB7IHJldHVybiBzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBiZWdpbigp
KTsgfQ0KICBib29sIGVtcHR5KCkgY29uc3QNCiAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgp
OyB9DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgeyByZXR1cm4gKihi
ZWdpbigpICsgX19uKTsgfQ0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUg
X19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9DQoNCiAgZXhwbGljaXQgdmVj
dG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDog
X0Jhc2UoX19hKSB7fQ0KDQogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFs
dWUsDQogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkgDQogICAgOiBfQmFzZShfX24sIF9fYSkNCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9DQoNCiAgZXhwbGljaXQgdmVjdG9y
KHNpemVfdHlwZSBfX24pDQogICAgOiBfQmFzZShfX24sIGFsbG9jYXRvcl90eXBlKCkpDQogICAg
eyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfVHAoKSk7
IH0NCg0KICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSANCiAgICA6IF9C
YXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyBfTV9maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9DQoN
Cg0KICAgDQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdmVjdG9yKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgew0K
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdy
YWwgX0ludGVncmFsOw0KICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0lu
dGVncmFsKCkpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPg0KICB2b2lkIF9N
X2luaXRpYWxpemVfYXV4KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5
cGUpIHsNCiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7DQogICAgX01fZW5kX29mX3N0
b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsgDQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m
aWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZmFsc2VfdHlwZSkgew0KICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0
LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCiAgfQ0KDQoNCg0KDQoNCg0KDQoN
CiAgfnZlY3RvcigpIHsgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQ0KDQogIHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gp
Ow0KICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgew0KICAgIGlmIChjYXBhY2l0eSgpIDwg
X19uKSB7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICAg
IGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01f
ZmluaXNoKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9k
ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAg
IF9NX3N0YXJ0ID0gX190bXA7DQogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7
DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOw0KICAgIH0NCiAgfQ0K
DQogICANCiAgIA0KICAgDQogICANCg0KICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25z
dCBfVHAmIF9fdmFsKTsNCg0KDQogIA0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
DQogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkgew0KICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+
OjpfSW50ZWdyYWwgX0ludGVncmFsOw0KICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBf
X2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4N
CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwg
X190cnVlX3R5cGUpDQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7
IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4NCiAgdm9pZCBfTV9hc3NpZ25fZGlz
cGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBl
KQ0KICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv
cnkoIF9fZmlyc3QgKSApOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K
ICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4
KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7IA0KDQoNCg0KICByZWZlcmVu
Y2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQo
KSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQ0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu
ICooZW5kKCkgLSAxKTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJu
ICooZW5kKCkgLSAxKTsgfQ0KDQogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7DQog
ICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAgICAgY29uc3RydWN0
KF9NX2ZpbmlzaCwgX194KTsNCiAgICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQog
ICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOw0KICB9DQogIHZvaWQgcHVzaF9iYWNrKCkg
ew0KICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsNCiAgICAgIGNvbnN0
cnVjdChfTV9maW5pc2gpOw0KICAgICAgKytfTV9maW5pc2g7DQogICAgfQ0KICAgIGVsc2UNCiAg
ICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOw0KICB9DQogIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBf
QWxsb2M+JiBfX3gpIHsNCiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOw0KICAg
ICA6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsNCiAgICAgOjpzd2FwKF9NX2VuZF9v
Zl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOw0KICB9DQoNCiAgaXRlcmF0b3IgaW5z
ZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7DQogICAgc2l6ZV90eXBl
IF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOw0KICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k
X29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgew0KICAgICAgY29uc3RydWN0KF9N
X2ZpbmlzaCwgX194KTsNCiAgICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAg
ICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7DQogICAgcmV0dXJuIGJlZ2luKCkgKyBf
X247DQogIH0NCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsNCiAgICBz
aXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7DQogICAgaWYgKF9NX2ZpbmlzaCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7DQogICAgICBjb25z
dHJ1Y3QoX01fZmluaXNoKTsNCiAgICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQog
ICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24pOw0KICAgIHJldHVybiBiZWdpbigpICsgX19u
Ow0KICB9DQoNCiAgIA0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQg
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0
ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19w
b3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnRlZ2VyPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvcywg
X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X190cnVlX3R5cGUpIHsNCiAgICBpbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkg
X192YWwpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lk
IF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAgICBfTV9yYW5nZV9pbnNl
cnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCAp
ICk7DQogIH0NCg0KDQoNCg0KDQogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOw0KDQogIHZvaWQgcG9wX2JhY2soKSB7DQogICAgLS1f
TV9maW5pc2g7DQogICAgZGVzdHJveShfTV9maW5pc2gpOw0KICB9DQogIGl0ZXJhdG9yIGVyYXNl
KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsNCiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkp
DQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBfTV9maW5pc2gsIF9fcG9zaXRpb24pOw0KICAg
IC0tX01fZmluaXNoOw0KICAgIGRlc3Ryb3koX01fZmluaXNoKTsNCiAgICByZXR1cm4gX19wb3Np
dGlvbjsNCiAgfQ0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpIHsNCiAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBfX2Zp
cnN0KTsNCiAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsNCiAgICBfTV9maW5pc2ggPSBfTV9m
aW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7DQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIH0NCg0K
ICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsNCiAg
ICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkgDQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdf
c2l6ZSwgZW5kKCkpOw0KICAgIGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAt
IHNpemUoKSwgX194KTsNCiAgfQ0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkg
eyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9DQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJl
Z2luKCksIGVuZCgpKTsgfQ0KDQpwcm90ZWN0ZWQ6DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4NCiAgaXRlcmF0b3IgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBl
IF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCANCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpDQp7DQogICAg
aXRlcmF0b3IgX19yZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIHRyeSAgew0KICAgICAg
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KICAgICAgcmV0
dXJuIF9fcmVzdWx0Ow0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUoX19y
ZXN1bHQsIF9fbikgOyB0aHJvdzsgfSA7DQogIH0NCiMgNDQwICJjOi9kb3MvcHViL2RqZ3BwL2xh
bmcvY3h4L3N0bF92ZWN0b3IuaCIgMw0KDQoNCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwg
aW5wdXRfaXRlcmF0b3JfdGFnKQ0KICB7DQogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQ0KICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsNCiAgfQ0KDQogICANCiAgdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6
ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQogIHsNCiAgICBz
aXplX3R5cGUgX19uID0gMDsNCiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7DQog
ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X01fc3RhcnQgKyBfX247DQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX01fc3RhcnQpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPg0KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywNCiAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOw0KDQogIHRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KICB2b2lkIF9NX3JhbmdlX2luc2VydChp
dGVyYXRvciBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpOw0KDQoNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4NCmlubGluZSBib29sIA0Kb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBf
QWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkNCnsNCiAgcmV0dXJu
IF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJg0KICAgICAgICAgZXF1YWwoX194LmJlZ2luKCks
IF9feC5lbmQoKSwgX195LmJlZ2luKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+DQppbmxpbmUgYm9vbCANCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkNCnsNCiAgcmV0dXJuIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksIA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7DQp9DQoNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQppbmxpbmUgdm9pZCBzd2FwKHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQ0Kew0KICBf
X3guc3dhcChfX3kpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
Pg0KdmVjdG9yPF9UcCxfQWxsb2M+JiANCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNv
bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkNCnsNCiAgaWYgKCZfX3ggIT0gdGhpcykgew0K
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOw0KICAgIGlmIChfX3hsZW4g
PiBjYXBhY2l0eSgpKSB7DQogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9j
b3B5KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7DQogICAgICBkZXN0cm95KF9NX3N0
YXJ0LCBfTV9maW5pc2gpOw0KICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAgICBfTV9zdGFydCA9IF9fdG1wOw0KICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsNCiAgICB9DQogICAgZWxzZSBpZiAo
c2l6ZSgpID49IF9feGxlbikgew0KICAgICAgaXRlcmF0b3IgX19pID0gY29weShfX3guYmVnaW4o
KSwgX194LmVuZCgpLCBiZWdpbigpKTsNCiAgICAgIGRlc3Ryb3koX19pLCBfTV9maW5pc2gpOw0K
ICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsg
c2l6ZSgpLCBfTV9zdGFydCk7DQogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkg
KyBzaXplKCksIF9feC5lbmQoKSwgX01fZmluaXNoKTsNCiAgICB9DQogICAgX01fZmluaXNoID0g
X01fc3RhcnQgKyBfX3hsZW47DQogIH0NCiAgcmV0dXJuICp0aGlzOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46OmFzc2ln
bihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkgew0KICBpZiAoX19uID4gY2Fw
YWNpdHkoKSkgew0KICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0
X2FsbG9jYXRvcigpKTsNCiAgICBfX3RtcC5zd2FwKCp0aGlzKTsNCiAgfQ0KICBlbHNlIGlmIChf
X24gPiBzaXplKCkpIHsNCiAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7DQogICAgX01f
ZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9f
dmFsKTsNCiAgfQ0KICBlbHNlDQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwgX192YWwp
LCBlbmQoKSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPg0Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9h
c3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7DQog
IGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAm
JiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQ0KICAgICpfX2N1ciA9ICpfX2Zp
cnN0Ow0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgZXJhc2UoX19jdXIsIGVuZCgpKTsN
CiAgZWxzZQ0KICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
Pg0Kdm9pZA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsNCiAgc2l6ZV90eXBlIF9fbGVuID0gMDsN
CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7DQoNCiAgaWYgKF9fbGVuID4gY2Fw
YWNpdHkoKSkgew0KICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19s
ZW4sIF9fZmlyc3QsIF9fbGFzdCk7DQogICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsN
CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0
KTsNCiAgICBfTV9zdGFydCA9IF9fdG1wOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmlu
aXNoID0gX01fc3RhcnQgKyBfX2xlbjsNCiAgfQ0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4p
IHsNCiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f
c3RhcnQpOw0KICAgIGRlc3Ryb3koX19uZXdfZmluaXNoLCBfTV9maW5pc2gpOw0KICAgIF9NX2Zp
bmlzaCA9IF9fbmV3X2ZpbmlzaDsNCiAgfQ0KICBlbHNlIHsNCiAgICBfRm9yd2FyZEl0ZXIgX19t
aWQgPSBfX2ZpcnN0Ow0KICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgY29weShfX2Zp
cnN0LCBfX21pZCwgX01fc3RhcnQpOw0KICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOw0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5z
ZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkNCnsNCiAgaWYgKF9N
X2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAgIGNvbnN0cnVjdChfTV9maW5pc2gs
ICooX01fZmluaXNoIC0gMSkpOw0KICAgICsrX01fZmluaXNoOw0KICAgIF9UcCBfX3hfY29weSA9
IF9feDsNCiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2Zp
bmlzaCAtIDEpOw0KICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7DQogIH0NCiAgZWxzZSB7DQog
ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAgY29uc3Qgc2l6ZV90
eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAgIGl0
ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOw0KICAgIGl0ZXJhdG9yIF9f
bmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0Ow0KICAgIHRyeSAgew0KICAgICAgX19uZXdfZmluaXNo
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7
DQogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLCBfX3gpOw0KICAgICAgKytfX25ld19maW5p
c2g7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwg
X01fZmluaXNoLCBfX25ld19maW5pc2gpOw0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgIChkZXN0
cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIA0KICAgICAgICAgICAgICAgICAgX01fZGVh
bGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOw0KICAgIGRlc3Ryb3koYmVn
aW4oKSwgZW5kKCkpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y
YWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7DQogICAgX01fZmlu
aXNoID0gX19uZXdfZmluaXNoOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQg
KyBfX2xlbjsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2
b2lkIA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0
aW9uKQ0Kew0KICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29u
c3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9maW5pc2g7DQog
ICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2ggLSAyLCBfTV9maW5pc2ggLSAx
KTsNCiAgICAqX19wb3NpdGlvbiA9IF9UcCgpOw0KICB9DQogIGVsc2Ugew0KICAgIGNvbnN0IHNp
emVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOw0KICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9
IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsNCiAgICBpdGVyYXRvciBfX25l
d19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsNCiAgICBpdGVyYXRvciBfX25ld19maW5pc2gg
PSBfX25ld19zdGFydDsNCiAgICB0cnkgIHsNCiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlh
bGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0KICAgICAgY29u
c3RydWN0KF9fbmV3X2ZpbmlzaCk7DQogICAgICArK19fbmV3X2ZpbmlzaDsNCiAgICAgIF9fbmV3
X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3
X2ZpbmlzaCk7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQs
X19uZXdfZmluaXNoKSwgDQogICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0
YXJ0LF9fbGVuKSkgOyB0aHJvdzsgfSA7DQogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7DQog
ICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7
DQogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsNCiAgICBfTV9maW5pc2ggPSBfX25ld19maW5p
c2g7DQogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOw0KICB9DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQgdmVjdG9yPF9UcCwg
X0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpDQp7DQogIGlmIChf
X24gIT0gMCkgew0KICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5p
c2gpID49IF9fbikgew0KICAgICAgX1RwIF9feF9jb3B5ID0gX194Ow0KICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRl
cmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOw0KICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIg
PiBfX24pIHsNCiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01f
ZmluaXNoLCBfTV9maW5pc2gpOw0KICAgICAgICBfTV9maW5pc2ggKz0gX19uOw0KICAgICAgICBj
b3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNo
KTsNCiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7
DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01f
ZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7DQogICAgICAgIF9NX2Zpbmlz
aCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19w
b3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOw0KICAgICAgICBfTV9maW5pc2ggKz0g
X19lbGVtc19hZnRlcjsNCiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9f
eF9jb3B5KTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICBjb25zdCBzaXplX3R5
cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsgICAgICAgIA0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
bGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOw0KICAgICAgaXRlcmF0b3Ig
X19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7DQogICAgICBpdGVyYXRvciBfX25ld19m
aW5pc2ggPSBfX25ld19zdGFydDsNCiAgICAgIHRyeSAgew0KICAgICAgICBfX25ld19maW5pc2gg
PSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsN
CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdfZmluaXNo
LCBfX24sIF9feCk7DQogICAgICAgIF9fbmV3X2ZpbmlzaA0KICAgICAgICAgID0gdW5pbml0aWFs
aXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsNCiAgICAgIH0N
CiAgICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwg
DQogICAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7
IHRocm93OyB9IDsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBf
TV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAg
ICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7DQogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5p
c2g7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47DQogICAg
fQ0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCnZvaWQgDQp2ZWN0b3I8X1RwLCBfQWxsb2M+Ojpf
TV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpDQp7DQogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgew0KICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9z
LCAqX19maXJzdCk7DQogICAgKytfX3BvczsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0Kdm9pZCAN
CnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykNCnsNCiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgc2l6
ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0KICAg
IGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgew0K
ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0
aW9uOw0KICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOw0KICAgICAgaWYg
KF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsNCiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2Zp
bmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOw0KICAgICAgICBfTV9maW5pc2ggKz0g
X19uOw0KICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9f
biwgX19vbGRfZmluaXNoKTsNCiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRp
b24pOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19t
aWQgPSBfX2ZpcnN0Ow0KICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsNCiAg
ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7DQogICAg
ICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICB1bmluaXRpYWxp
emVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOw0KICAgICAgICBf
TV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsNCiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwg
X19wb3NpdGlvbik7DQogICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4g
PSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7DQogICAgICBpdGVyYXRvciBfX25l
d19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsNCiAgICAgIGl0ZXJhdG9yIF9fbmV3X2Zpbmlz
aCA9IF9fbmV3X3N0YXJ0Ow0KICAgICAgdHJ5ICB7DQogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVu
aW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0KICAg
ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBf
X25ld19maW5pc2gpOw0KICAgICAgICBfX25ld19maW5pc2gNCiAgICAgICAgICA9IHVuaW5pdGlh
bGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7DQogICAgICB9
DQogICAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCks
IA0KICAgICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkg
OyB0aHJvdzsgfSA7DQogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOw0KICAgICAg
X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQog
ICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0Ow0KICAgICAgX01fZmluaXNoID0gX19uZXdfZmlu
aXNoOw0KICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOw0KICAg
IH0NCiAgfQ0KfQ0KDQojIDgxMCAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfdmVjdG9y
LmgiIDMNCg0KDQoNCg0KDQoNCg0KICANCg0KDQoNCiANCiANCiANCiMgMzQgImM6L2Rvcy9wdWIv
ZGpncHAvbGFuZy9jeHgvdmVjdG9yIiAyIDMNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv
Y3h4L3N0bF9idmVjdG9yLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQogIA0KDQpzdGF0aWMgY29uc3QgaW50
IF9fV09SRF9CSVQgPSBpbnQoOCAqc2l6ZW9mKHVuc2lnbmVkIGludCkpOw0KDQoNCg0KDQoNCg0K
c3RydWN0IF9CaXRfcmVmZXJlbmNlIHsNCiAgdW5zaWduZWQgaW50KiBfTV9wOw0KICB1bnNpZ25l
ZCBpbnQgX01fbWFzazsNCiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2ln
bmVkIGludCBfX3kpIA0KICAgIDogX01fcChfX3gpLCBfTV9tYXNrKF9feSkge30NCg0KcHVibGlj
Og0KICBfQml0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01fbWFzaygwKSB7fQ0KICBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9DQogIF9CaXRf
cmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpDQogIHsNCiAgICBpZiAoX194KSAgKl9NX3Ag
fD0gX01fbWFzazsNCiAgICBlbHNlICAgICAgKl9NX3AgJj0gfl9NX21hc2s7DQogICAgcmV0dXJu
ICp0aGlzOw0KICB9DQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZl
cmVuY2UmIF9feCkgDQogICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0NCiAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0DQogICAgeyByZXR1cm4g
Ym9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9DQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRf
cmVmZXJlbmNlJiBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2wo
X194KTsNCiAgfQ0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0NCn07DQoNCmlu
bGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVyZW5jZSBfX3kpDQp7
DQogIGJvb2wgX190bXAgPSBfX3g7DQogIF9feCA9IF9feTsNCiAgX195ID0gX190bXA7DQp9DQoN
CnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9v
bCwgcHRyZGlmZl90PiB7DQogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgIHJlZmVyZW5jZTsNCiAg
dHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsNCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9y
ICAgaXRlcmF0b3I7DQoNCiAgdW5zaWduZWQgaW50KiBfTV9wOw0KICB1bnNpZ25lZCBpbnQgX01f
b2Zmc2V0Ow0KICB2b2lkIGJ1bXBfdXAoKSB7DQogICAgaWYgKF9NX29mZnNldCsrID09IF9fV09S
RF9CSVQgLSAxKSB7DQogICAgICBfTV9vZmZzZXQgPSAwOw0KICAgICAgKytfTV9wOw0KICAgIH0N
CiAgfQ0KICB2b2lkIGJ1bXBfZG93bigpIHsNCiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgew0K
ICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7DQogICAgICAtLV9NX3A7DQogICAgfQ0K
ICB9DQoNCiAgX0JpdF9pdGVyYXRvcigpIDogX01fcCgwKSwgX01fb2Zmc2V0KDApIHt9DQogIF9C
aXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIA0KICAgIDog
X01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7fQ0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7IH0NCiAgaXRlcmF0
b3ImIG9wZXJhdG9yKysoKSB7DQogICAgYnVtcF91cCgpOw0KICAgIHJldHVybiAqdGhpczsNCiAg
fQ0KICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkgew0KICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7DQogICAgYnVtcF91cCgpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBpdGVyYXRvciYg
b3BlcmF0b3ItLSgpIHsNCiAgICBidW1wX2Rvd24oKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0N
CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsNCiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlz
Ow0KICAgIGJ1bXBfZG93bigpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBpdGVyYXRvciYg
b3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7DQogICAgZGlmZmVyZW5jZV90eXBlIF9f
biA9IF9faSArIF9NX29mZnNldDsNCiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7DQogICAg
X19uID0gX19uICUgX19XT1JEX0JJVDsNCiAgICBpZiAoX19uIDwgMCkgew0KICAgICAgX01fb2Zm
c2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsNCiAgICAgIC0tX01fcDsNCiAg
ICB9IGVsc2UNCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsNCiAgICByZXR1
cm4gKnRoaXM7DQogIH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f
aSkgew0KICAgICp0aGlzICs9IC1fX2k7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0ZXJh
dG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3Ig
X190bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190bXAgKz0gX19pOw0KICB9DQogIGl0ZXJhdG9y
IG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3IgX190
bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190bXAgLT0gX19pOw0KICB9DQogIGRpZmZlcmVuY2Vf
dHlwZSBvcGVyYXRvci0oaXRlcmF0b3IgX194KSBjb25zdCB7DQogICAgcmV0dXJuIF9fV09SRF9C
SVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9feC5fTV9vZmZzZXQ7DQogIH0N
CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1cm4gKigq
dGhpcyArIF9faSk7IH0NCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBfX3gpIGNv
bnN0IHsNCiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9N
X29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIF9feCkgY29u
c3Qgew0KICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01f
b2Zmc2V0Ow0KICB9DQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9yIF9feCkgY29uc3Qgew0KICAg
IHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0
IDwgX194Ll9NX29mZnNldCk7DQogIH0NCn07DQoNCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9y
DQogIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pg0Kew0K
ICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBib29s
ICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3QgYm9vbCog
ICAgICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yICBjb25zdF9p
dGVyYXRvcjsNCg0KICB1bnNpZ25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGludCBfTV9vZmZz
ZXQ7DQogIHZvaWQgYnVtcF91cCgpIHsNCiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJ
VCAtIDEpIHsNCiAgICAgIF9NX29mZnNldCA9IDA7DQogICAgICArK19NX3A7DQogICAgfQ0KICB9
DQogIHZvaWQgYnVtcF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7DQogICAg
ICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAgIC0tX01fcDsNCiAgICB9DQogIH0N
Cg0KICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30NCiAg
X0JpdF9jb25zdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkg
DQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9DQogIF9CaXRfY29uc3RfaXRlcmF0
b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KSANCiAgICA6IF9NX3AoX194Ll9NX3ApLCBfTV9v
ZmZzZXQoX194Ll9NX29mZnNldCkge30NCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
bnN0IHsNCiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsN
CiAgfQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsNCiAgICBidW1wX3VwKCk7DQog
ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7
DQogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICBidW1wX3VwKCk7DQogICAg
cmV0dXJuIF9fdG1wOw0KICB9DQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgew0KICAg
IGJ1bXBfZG93bigpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciBv
cGVyYXRvci0tKGludCkgew0KICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAg
YnVtcF9kb3duKCk7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIGNvbnN0X2l0ZXJhdG9yJiBv
cGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsNCiAgICBkaWZmZXJlbmNlX3R5cGUgX19u
ID0gX19pICsgX01fb2Zmc2V0Ow0KICAgIF9NX3AgKz0gX19uIC8gX19XT1JEX0JJVDsNCiAgICBf
X24gPSBfX24gJSBfX1dPUkRfQklUOw0KICAgIGlmIChfX24gPCAwKSB7DQogICAgICBfTV9vZmZz
ZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBfX1dPUkRfQklUOw0KICAgICAgLS1fTV9wOw0KICAg
IH0gZWxzZQ0KICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOw0KICAgIHJldHVy
biAqdGhpczsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAg
Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsNCiAg
ICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7
DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNv
bnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3Rt
cCAtPSBfX2k7DQogIH0NCiAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdF9pdGVyYXRv
ciBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gX19XT1JEX0JJVCAqIChfTV9wIC0gX194Ll9NX3Ap
ICsgX01fb2Zmc2V0IC0gX194Ll9NX29mZnNldDsNCiAgfQ0KICBjb25zdF9yZWZlcmVuY2Ugb3Bl
cmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IA0KICAgIHJldHVybiAqKCp0aGlzICsgX19p
KTsgDQogIH0NCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNv
bnN0IHsNCiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9N
X29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9f
eCkgY29uc3Qgew0KICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBf
X3guX01fb2Zmc2V0Ow0KICB9DQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0X2l0ZXJhdG9yIF9feCkg
Y29uc3Qgew0KICAgIHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3Ag
JiYgX01fb2Zmc2V0IDwgX194Ll9NX29mZnNldCk7DQogIH0NCn07DQoNCiANCiANCg0KDQoNCiAN
CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3RhdGljPg0KY2xhc3MgX0J2
ZWN0b3JfYWxsb2NfYmFzZSB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX2RhdGFfYWxsb2NhdG9yOyB9DQoNCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hKQ0KICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQo
KSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9DQoNCnByb3RlY3RlZDoNCiAg
dW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgDQogICAgeyByZXR1cm4gX01f
ZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklU
KTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApDQog
ICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsIA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0
Ll9NX3ApOw0KICB9ICANCg0KICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwg
X0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlIA0KICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9y
Ow0KICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsN
CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsNCn07DQoNCiANCnRlbXBsYXRlIDxj
bGFzcyBfQWxsb2NhdG9yPg0KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0
cnVlPiB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBf
QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAg
YWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90
eXBlKCk7IH0NCg0KICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikN
CiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQ0K
DQpwcm90ZWN0ZWQ6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBp
bnQsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQ0KICAgICAgICAgIF9BbGxvY190eXBlOw0KICAg
ICAgICAgIA0KICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKSANCiAgICB7
IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP
UkRfQklUKTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9NX3N0YXJ0Ll9N
X3ApDQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9w
KTsNCiAgfSAgDQoNCiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsNCiAgX0JpdF9pdGVyYXRvciBf
TV9maW5pc2g7DQogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7DQp9OyAgDQoNCnRl
bXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBfQnZlY3Rvcl9iYXNlDQogIDogcHVibGljIF9C
dmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPg0Kew0KICB0eXBl
ZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQogICAg
ICAgICAgX0Jhc2U7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRv
cl90eXBlIGFsbG9jYXRvcl90eXBlOw0KDQogIF9CdmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9DQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6
X01fZGVhbGxvY2F0ZSgpOyB9DQp9Ow0KDQojIDM0OCAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4
eC9zdGxfYnZlY3Rvci5oIiAzDQoNCg0KIA0KIA0KIA0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQog
ICAgICAgIA0KDQogICAgICAgIA0KdGVtcGxhdGU8Y2xhc3MgX0FsbG9jPiBjbGFzcyB2ZWN0b3I8
Ym9vbCxfQWxsb2M+DQogIDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPg0KDQoNCg0KDQp7
DQoNCiAgdHlwZWRlZiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4gX0Jhc2U7DQoNCg0KDQpwdWJsaWM6
DQogIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsgDQogIHR5cGVkZWYgX0JpdF9y
ZWZlcmVuY2UgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOw0KICB0
eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNv
bnN0X3BvaW50ZXI7DQoNCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgICAgICAgICAgICAgIGl0
ZXJhdG9yOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgICAgICAgICAgY29uc3RfaXRl
cmF0b3I7DQoNCg0KICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv
bnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRv
cj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0KDQoNCg0KDQoNCg0KICB0eXBlZGVmIHR5cGVuYW1lIF9C
YXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0NCg0K
cHJvdGVjdGVkOg0KDQoNCg0KDQoNCg0KDQoNCnByb3RlY3RlZDoNCiAgdm9pZCBfTV9pbml0aWFs
aXplKHNpemVfdHlwZSBfX24pIHsNCiAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxv
YyhfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQg
LSAxKS9fX1dPUkRfQklUOw0KICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICBf
TV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOw0KICB9DQogIHZvaWQg
X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgew0KICAgIGlmIChf
TV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAgICAgY29weV9iYWNrd2Fy
ZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOw0KICAgICAgKl9fcG9zaXRp
b24gPSBfX3g7DQogICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICBz
aXplX3R5cGUgX19sZW4gPSBzaXplKCkgPyAyICogc2l6ZSgpIDogX19XT1JEX0JJVDsNCiAgICAg
IHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsNCiAgICAgIGl0ZXJhdG9y
IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAg
ICAqX19pKysgPSBfX3g7DQogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgp
LCBfX2kpOw0KICAgICAgX01fZGVhbGxvY2F0ZSgpOw0KICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICAgIF9NX3N0
YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICB9DQogIH0NCg0KDQogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsN
CiAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsN
CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIA0KICAgICAgcHVzaF9i
YWNrKCpfX2ZpcnN0KTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
Pg0KICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKSB7DQogICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX24pOw0KICAgIF9NX2luaXRpYWxpemUoX19uKTsNCiAgICBjb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3BvcywNCiAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsN
CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsNCiAgICAgIF9fcG9z
ID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7DQogICAgICArK19fcG9zOw0KICAgIH0NCiAgfQ0K
DQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9y
YW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgew0KICAgIGlmIChfX2ZpcnN0ICE9IF9f
bGFzdCkgew0KICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgICBkaXN0YW5jZShfX2ZpcnN0
LCBfX2xhc3QsIF9fbik7DQogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsN
CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlm
ZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3Np
dGlvbik7DQogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsNCiAgICAg
IH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgo
c2l6ZSgpLCBfX24pOw0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhf
X2xlbik7DQogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwg
aXRlcmF0b3IoX19xLCAwKSk7DQogICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBf
X2kpOw0KICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOw0K
ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19x
ICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7DQogICAgICAgIF9NX3N0YXJ0
ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgIH0NCiAgICB9DQogIH0gICAgICANCg0KDQoNCnB1
YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQ0KICBjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9DQogIGl0ZXJhdG9yIGVu
ZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQ0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkgY29uc3QgeyANCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQo
KSk7IA0KICB9DQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IoYmVnaW4oKSk7IH0NCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Qg
eyANCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgDQogIH0NCg0K
ICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2lu
KCkpOyB9DQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgt
MSk7IH0NCiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgew0KICAgIHJldHVybiBzaXplX3R5
cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4oKSk7DQogIH0N
CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCiAgcmVm
ZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgew0KICAgIHJldHVybiAqKGJlZ2luKCkg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7DQogIH0NCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y
W10oc2l6ZV90eXBlIF9fbikgY29uc3Qgew0KICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJl
bmNlX3R5cGUoX19uKSk7DQogIH0NCg0KICBleHBsaWNpdCB2ZWN0b3IgKGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jhc2UoX19hKSB7fQ0KDQog
IHZlY3RvciAoc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLA0KICAgICAgICAgICAgY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpDQogICAgOiBfQmFzZShfX2Ep
DQogIHsNCiAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgZmlsbChfTV9zdGFydC5fTV9wLCBf
TV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/IH4wIDogMCk7DQogIH0NCg0KICBleHBsaWNpdCB2
ZWN0b3IgKHNpemVfdHlwZSBfX24pDQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQ0KICB7
DQogICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5k
X29mX3N0b3JhZ2UsIDApOw0KICB9DQoNCiAgdmVjdG9yIChjb25zdCB2ZWN0b3IgJiBfX3gpIDog
X0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkgew0KICAgIF9NX2luaXRpYWxpemUoX194LnNpemUo
KSk7DQogICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7DQogIH0NCg0K
DQogICANCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2ZWN0b3IgKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jhc2Uo
X19hKQ0KICB7DQogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRv
cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7DQogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2Zp
cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0KICAgIA0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0ludGVnZXI+DQogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9J
bnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsNCiAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAg
ZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsNCiAg
fQ0KICAgIA0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5p
dGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAg
ICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y
eSggX19maXJzdCApICk7DQogIH0NCiMgNTg3ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0
bF9idmVjdG9yLmgiIDMNCg0KDQogIH52ZWN0b3IgKCkgeyB9DQoNCiAgdmVjdG9yICYgb3BlcmF0
b3I9KGNvbnN0IHZlY3RvciAmIF9feCkgew0KICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAq
dGhpczsNCiAgICBpZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsNCiAgICAgIF9NX2RlYWxs
b2NhdGUoKTsNCiAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7DQogICAgfQ0KICAgIGNv
cHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7DQogICAgX01fZmluaXNoID0gYmVn
aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAgICByZXR1cm4gKnRoaXM7DQog
IH0NCg0KICAgDQogICANCiAgIA0KICAgDQoNCiAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9v
bCBfX3gpIHsNCiAgICBpZiAoX19uID4gc2l6ZSgpKSB7DQogICAgICBmaWxsKF9NX3N0YXJ0Ll9N
X3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0KICAgICAgaW5zZXJ0KGVuZCgp
LCBfX24gLSBzaXplKCksIF9feCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgZXJhc2UoYmVn
aW4oKSArIF9fbiwgZW5kKCkpOw0KICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zf
c3RvcmFnZSwgX194ID8gfjAgOiAwKTsNCiAgICB9DQogIH0NCg0KDQoNCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9hc3NpZ25f
ZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQ0KICAgIHsgYXNzaWduKChzaXplX3QpIF9f
biwgKGJvb2wpIF9fdmFsKTsgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPg0KICB2
b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfX2ZhbHNlX3R5cGUpDQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpIHsNCiAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7DQogICAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0
KQ0KICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7DQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0K
ICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsNCiAgICBlbHNlDQogICAgICBpbnNlcnQoZW5kKCks
IF9fZmlyc3QsIF9fbGFzdCk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
YXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykgew0KICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQogICAgZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0LCBfX2xlbik7DQogICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQ0KICAgICAgZXJhc2Uo
Y29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7DQogICAgZWxzZSB7DQogICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsNCiAgICAgIGFkdmFuY2UoX19taWQs
IHNpemUoKSk7DQogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsNCiAgICAgIGlu
c2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7DQogICAgfQ0KICB9ICAgIA0KDQoNCg0KICB2b2lk
IHJlc2VydmUoc2l6ZV90eXBlIF9fbikgew0KICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7DQog
ICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOw0KICAgICAgX01fZmlu
aXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAgICBfTV9k
ZWFsbG9jYXRlKCk7DQogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJ
VDsNCiAgICB9DQogIH0NCg0KICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsg
fQ0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQ0K
ICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQ0KICBjb25zdF9yZWZl
cmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQ0KICB2b2lkIHB1c2hf
YmFjayhib29sIF9feCkgew0KICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3Rv
cmFnZSkNCiAgICAgICpfTV9maW5pc2grKyA9IF9feDsNCiAgICBlbHNlDQogICAgICBfTV9pbnNl
cnRfYXV4KGVuZCgpLCBfX3gpOw0KICB9DQogIHZvaWQgc3dhcCh2ZWN0b3IgJiBfX3gpIHsNCiAg
ICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOw0KICAgICA6OnN3YXAoX01fZmluaXNo
LCBfX3guX01fZmluaXNoKTsNCiAgICAgOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01f
ZW5kX29mX3N0b3JhZ2UpOw0KICB9DQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0
aW9uLCBib29sIF9feCA9IGJvb2woKSkgew0KICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bv
c2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0
b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkNCiAgICAgICpfTV9maW5pc2grKyA9IF9feDsN
CiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7DQogICAgcmV0
dXJuIGJlZ2luKCkgKyBfX247DQogIH0NCg0KDQogICANCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPg0KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLA0KICAgICAgICAg
ICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs
IF9JbnRlZ3JhbDsNCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+
DQogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24s
IF9JbnRlZ2VyIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsN
CiAgICBpbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKGJvb2wpIF9feCk7DQogIH0NCg0K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5zZXJ0X2Rpc3Bh
dGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZmFsc2VfdHlwZSkgew0KICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJz
dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCiAgfQ0KIyA3NjEg
ImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2J2ZWN0b3IuaCIgMw0KDQogIA0KICB2b2lk
IGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgew0K
ICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOw0KICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49
IF9fbikgew0KICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNo
ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0
aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7DQogICAgICBfTV9maW5pc2ggKz0gZGlm
ZmVyZW5jZV90eXBlKF9fbik7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsNCiAgICAgIHVuc2lnbmVkIGludCogX19x
ID0gX01fYml0X2FsbG9jKF9fbGVuKTsNCiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4o
KSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAgICBmaWxsX24oX19pLCBfX24s
IF9feCk7DQogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBk
aWZmZXJlbmNlX3R5cGUoX19uKSk7DQogICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklU
Ow0KICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOw0KICAgIH0NCiAgfQ0KDQogIHZv
aWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9DQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9y
IF9fcG9zaXRpb24pIHsNCiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpDQogICAgICBj
b3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7DQogICAgICAtLV9NX2Zpbmlz
aDsNCiAgICByZXR1cm4gX19wb3NpdGlvbjsNCiAgfQ0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRv
ciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsNCiAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFz
dCwgZW5kKCksIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICB9DQogIHZvaWQgcmVz
aXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgew0KICAgIGlmIChf
X25ld19zaXplIDwgc2l6ZSgpKSANCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5
cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsNCiAgICBlbHNlDQogICAgICBpbnNlcnQoZW5kKCksIF9f
bmV3X3NpemUgLSBzaXplKCksIF9feCk7DQogIH0NCiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVn
aW4oKSwgZW5kKCkpOyB9DQp9Ow0KDQoNCg0KdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgYWxsb2M+IGJp
dF92ZWN0b3I7DQoNCiMgODIyICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9idmVjdG9y
LmgiIDMNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICANCg0KDQoNCiANCiANCiANCiMgMzUgImM6L2Rv
cy9wdWIvZGpncHAvbGFuZy9jeHgvdmVjdG9yIiAyIDMNCg0KDQoNCg0KIA0KIA0KIA0KIyA2ICJx
ZF9fZ2NjX19idWcuY3BwIiAyDQoNCg0KdXNpbmcgbmFtZXNwYWNlIHN0ZDsNCg0KY2xhc3MgY2xh
c3NfMSB7DQp9Ow0KDQpjbGFzcyBjbGFzc18yIDogcHVibGljIGNsYXNzXzEgew0KfTsNCg0Kdm9p
ZCBtYWluKCkgew0KICAgIHZlY3RvcjxjbGFzc18xICY+IGlucHV0Ow0KICAgIGlucHV0LnB1c2hf
YmFjaygqbmV3IGNsYXNzXzIoKSk7DQp9DQoNCg==



More information about the Gcc-bugs mailing list