latest contify.fun

Matthew Fluet Matthew Fluet <fluet@CS.Cornell.EDU>
Thu, 22 Feb 2001 15:44:44 -0500 (EST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-1932422408-982873315=:22815
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.SOL.3.95.1010222154216.22815L@hoho.cs.cornell.edu>


Here's the revised contify.new.fun.  No linear lookups for any addEdge.  I
also tweaked the transform code, to process the nodes as part of the dfs,
rather than building a todo list and then immediately processing it.

> > I was going to have both an addEdge and an addEdge' (the latter doing the
> > linear lookup), and was wondering if MLton would determine that the
> > addEdge' function is never called, so conceivable could be removed from
> > the record.  But that would mean chaning the return type of
> > newJumpFuncGraph, which started seeming overly complicated.
> 
> That should get caught.  You can always do a -keep cps and find out :-)

Well, I'm leaving addEdge' in.  If the graphs still seem to big, we can
try using it in some places.




---559023410-1932422408-982873315=:22815
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="contify.new.fun"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95.1010222154444.22815M@hoho.cs.cornell.edu>
Content-Description: 

KCogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4NCiAqIFBs
ZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4NCiAqKQ0K
KCoNCiAqIFRoaXMgcGFzcyBjb21iaW5lcyB0d28gYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9u
cy4NCiAqDQogKiBUaGUgZmlyc3QgYW5hbHlzaXMsICJjYWxsIGJhc2VkIiBub3RpY2VzIGlmIGEg
dG9wbGV2ZWwgZnVuY3Rpb24gaXMgY2FsbGVkDQogKiAgICAgICAxLiBmcm9tIG9uZSBwbGFjZSBv
dXRzaWRlIGl0c2VsZg0KICogICBhbmQgMi4gYWxsIGNhbGxzIHRvIGl0c2VsZiB3aXRoaW4gaXRz
ZWxmIGFyZSB0YWlsDQogKiBJZiAoMSkgYW5kICgyKSBhcmUgdHJ1ZSwgdGhlbiB0aGF0IGZ1bmN0
aW9uIGNhbiBiZSBtYWRlIGxvY2FsIGF0IHRoZSBwb2ludA0KICogb2YgaXRzIG91dGVyIGNhbGwu
DQogKg0KICogVGhlIHNlY29uZCBhbmFseXNpcyBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHBh
cGVyLg0KICogICBMb2NhbCBDUFMgY29udmVyc2lvbiBpbiBhIGRpcmVjdC1zdHlsZSBjb21waWxl
ci4gIEpvaG4gUmVwcHkuDQogKiBJdCBkZXRlcm1pbmVzIHRoZSBzZXQgb2YgY29udGludWF0aW9u
cyB0aGF0IGEgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGguICBJZg0KICogdGhhdCBzZXQgaXMgYSBz
aW5nbGV0b24sIHRoZW4gdGhlIGZ1bmN0aW9uIGNhbiBiZSBwcmVmaXhlZCBvbnRvIHRoZQ0KICog
Y29udGludWF0aW9uIGl0IGlzIGNhbGxlZCB3aXRoLg0KICopDQoNCmZ1bmN0b3IgQ29udGlmeSAo
UzogQ09OVElGWV9TVFJVQ1RTKTogQ09OVElGWSA9IA0Kc3RydWN0DQoNCm9wZW4gUw0Kb3BlbiBE
ZWMgVHJhbnNmZXINCg0KKCogUmV0dXJuID0ge1VuY2FsbGVkLCBVbmtub3dufSBVIEp1bXAgVSBG
dW5jDQogKikNCnN0cnVjdHVyZSBSZXR1cm4gPQ0KICBzdHJ1Y3QNCiAgICBkYXRhdHlwZSB0DQog
ICAgICA9IFVuY2FsbGVkDQogICAgICB8IFVua25vd24NCiAgICAgIHwgSnVtcExhYmVsIG9mIEp1
bXAudA0KICAgICAgfCBGdW5jTGFiZWwgb2YgRnVuYy50DQoNCiAgICBmdW4gbGF5b3V0IHINCiAg
ICAgID0gbGV0IA0KCSAgb3BlbiBMYXlvdXQNCglpbg0KCSAgY2FzZSByDQoJICAgIG9mIFVuY2Fs
bGVkID0+IHN0ciAiVW5jYWxsZWQiDQoJICAgICB8IFVua25vd24gPT4gc3RyICJVbmtub3duIg0K
CSAgICAgfCBKdW1wTGFiZWwgaiA9PiBzZXEgW0p1bXAubGF5b3V0IGpdDQoJICAgICB8IEZ1bmNM
YWJlbCBmID0+IHNlcSBbRnVuYy5sYXlvdXQgZl0NCgllbmQNCiAgICB2YWwgdG9TdHJpbmcgPSBM
YXlvdXQudG9TdHJpbmcgbyBsYXlvdXQNCiAgICAgIA0KICAgIHZhbCBlcXVhbHMNCiAgICAgID0g
Zm4gKFVuY2FsbGVkLCBVbmNhbGxlZCkgPT4gdHJ1ZQ0KICAgICAgICAgfCAoVW5rbm93biwgVW5r
bm93bikgPT4gdHJ1ZQ0KCSB8IChKdW1wTGFiZWwgajEsIEp1bXBMYWJlbCBqMikgPT4gSnVtcC5l
cXVhbHMoajEsIGoyKQ0KCSB8IChGdW5jTGFiZWwgZjEsIEZ1bmNMYWJlbCBmMikgPT4gRnVuYy5l
cXVhbHMoZjEsIGYyKQ0KCSB8IF8gPT4gZmFsc2UNCg0KICAgIHZhbCBpc1VuY2FsbGVkIA0KICAg
ICAgPSBmbiBVbmNhbGxlZCA9PiB0cnVlDQogICAgICAgICB8IF8gPT4gZmFsc2UNCiAgICB2YWwg
aXNVbmtub3duDQogICAgICA9IGZuIFVua25vd24gPT4gdHJ1ZQ0KICAgICAgICAgfCBfID0+IGZh
bHNlDQogIGVuZA0KDQpzdHJ1Y3R1cmUgSnVtcERhdGEgPQ0KICBzdHJ1Y3QNCiAgICBkYXRhdHlw
ZSB0ID0gVCBvZiB7bm9kZTogRGlyZWN0ZWRHcmFwaC5Ob2RlLnQgb3B0aW9uIHJlZiwNCgkJICAg
ICAgIHJvb3RFZGdlOiBib29sIHJlZiwNCgkJICAgICAgIHByZWZpeGVzOiBGdW5jLnQgbGlzdCBy
ZWZ9DQogICAgICANCiAgICBmdW4gbmV3ICgpID0gVCB7bm9kZSA9IHJlZiBOT05FLA0KCQkgICAg
cm9vdEVkZ2UgPSByZWYgZmFsc2UsDQoJCSAgICBwcmVmaXhlcyA9IHJlZiBbXX0NCg0KICAgIGxv
Y2FsDQogICAgICBmdW4gbWFrZSBzID0gbGV0DQoJCSAgICAgZnVuIFMnIChUIHIpID0gcyByDQoJ
CSAgICAgdmFsIFMgPSAhIG8gUycNCgkJICAgaW4NCgkJICAgICAoUycsIFMpDQoJCSAgIGVuZA0K
ICAgIGluDQogICAgICB2YWwgKG5vZGUnLCBub2RlKSA9IG1ha2UgI25vZGUNCiAgICAgIHZhbCAo
cm9vdEVkZ2UnLCByb290RWRnZSkgPSBtYWtlICNyb290RWRnZQ0KICAgICAgdmFsIChwcmVmaXhl
cycsIHByZWZpeGVzKSA9IG1ha2UgI3ByZWZpeGVzDQogICAgZW5kDQogICAgZnVuIG5vZGVSZXNl
dCAoVCB7bm9kZSwgLi4ufSkgPSBub2RlIDo9IE5PTkUNCiAgZW5kDQoNCnN0cnVjdHVyZSBGdW5j
RGF0YSA9DQogIHN0cnVjdA0KICAgIGRhdGF0eXBlIHQgPSBUIG9mIHtub2RlOiBEaXJlY3RlZEdy
YXBoLk5vZGUudCBvcHRpb24gcmVmLA0KCQkgICAgICAgcmVhY2g6IGJvb2wgcmVmLA0KCQkgICAg
ICAgY2FsbGVyczogRnVuYy50IGxpc3QgcmVmLA0KCQkgICAgICAgY2FsbGVlczogRnVuYy50IGxp
c3QgcmVmLA0KCQkgICAgICAgQTogUmV0dXJuLnQgcmVmLA0KCQkgICAgICAgQUNhbGw6IFJldHVy
bi50IHJlZiwNCgkJICAgICAgIGxlc3NUaGFuOiBGdW5jLnQgbGlzdCByZWYsDQoJCSAgICAgICBB
Q29udDogUmV0dXJuLnQgcmVmLA0KCQkgICAgICAgQURvbTogUmV0dXJuLnQgcmVmLA0KCQkgICAg
ICAgY29udGlmeTogYm9vbCByZWYsDQoJCSAgICAgICBwcmVmaXhlczogRnVuYy50IGxpc3QgcmVm
LA0KCQkgICAgICAgcmVwbGFjZToge2FyZ3M6IChWYXIudCAqIFR5cGUudCkgdmVjdG9yLA0KCQkJ
CSBib2R5OiBFeHAudCwNCgkJCQkganVtcDogSnVtcC50fSBvcHRpb24gcmVmfQ0KICAgICAgDQog
ICAgZnVuIG5ldyAoKSA9IFQge25vZGUgPSByZWYgTk9ORSwNCgkJICAgIHJlYWNoID0gcmVmIGZh
bHNlLA0KCQkgICAgY2FsbGVycyA9IHJlZiBbXSwNCgkJICAgIGNhbGxlZXMgPSByZWYgW10sDQoJ
CSAgICBBID0gcmVmIFJldHVybi5VbmNhbGxlZCwNCgkJICAgIEFDYWxsID0gcmVmIFJldHVybi5V
bmNhbGxlZCwNCgkJICAgIGxlc3NUaGFuID0gcmVmIFtdLA0KCQkgICAgQUNvbnQgPSByZWYgUmV0
dXJuLlVuY2FsbGVkLA0KCQkgICAgQURvbSA9IHJlZiBSZXR1cm4uVW5jYWxsZWQsDQoJCSAgICBj
b250aWZ5ID0gcmVmIHRydWUsDQoJCSAgICBwcmVmaXhlcyA9IHJlZiBbXSwNCgkJICAgIHJlcGxh
Y2UgPSByZWYgTk9ORX0NCiAgICAgIA0KICAgIGxvY2FsDQogICAgICBmdW4gbWFrZSBzID0gbGV0
DQoJCSAgICAgZnVuIFMnIChUIHIpID0gcyByDQoJCSAgICAgdmFsIFMgPSAhIG8gUycNCgkJICAg
aW4NCgkJICAgICAoUycsIFMpDQoJCSAgIGVuZA0KICAgIGluDQogICAgICB2YWwgKG5vZGUnLCBu
b2RlKSA9IG1ha2UgI25vZGUNCiAgICAgIHZhbCAocmVhY2gnLCByZWFjaCkgPSBtYWtlICNyZWFj
aA0KICAgICAgdmFsIChjYWxsZXJzJywgY2FsbGVycykgPSBtYWtlICNjYWxsZXJzDQogICAgICB2
YWwgKGNhbGxlZXMnLCBjYWxsZWVzKSA9IG1ha2UgI2NhbGxlZXMNCiAgICAgIHZhbCAoQScsIEEp
ID0gbWFrZSAjQQ0KICAgICAgdmFsIChBQ2FsbCcsIEFDYWxsKSA9IG1ha2UgI0FDYWxsDQogICAg
ICB2YWwgKGxlc3NUaGFuJywgbGVzc1RoYW4pID0gbWFrZSAjbGVzc1RoYW4NCiAgICAgIHZhbCAo
QUNvbnQnLCBBQ29udCkgPSBtYWtlICNBQ29udA0KICAgICAgdmFsIChBRG9tJywgQURvbSkgPSBt
YWtlICNBRG9tDQogICAgICB2YWwgKGNvbnRpZnknLCBjb250aWZ5KSA9IG1ha2UgI2NvbnRpZnkN
CiAgICAgIHZhbCAocHJlZml4ZXMnLCBwcmVmaXhlcykgPSBtYWtlICNwcmVmaXhlcw0KICAgICAg
dmFsIChyZXBsYWNlJywgcmVwbGFjZSkgPSBtYWtlICNyZXBsYWNlDQogICAgZW5kDQogICAgZnVu
IG5vZGVSZXNldCAoVCB7bm9kZSwgLi4ufSkgPSBub2RlIDo9IE5PTkUNCiAgZW5kDQoNCnN0cnVj
dHVyZSBKdW1wRnVuY0dyYXBoID0NCiAgc3RydWN0DQogICAgc3RydWN0dXJlIEdyYXBoID0gRGly
ZWN0ZWRHcmFwaA0KICAgIHN0cnVjdHVyZSBOb2RlID0gR3JhcGguTm9kZQ0KICAgIHN0cnVjdHVy
ZSBFZGdlID0gR3JhcGguRWRnZQ0KICAgIHN0cnVjdHVyZSBEZnNQYXJhbSA9IEdyYXBoLkRmc1Bh
cmFtDQoNCiAgICBkYXRhdHlwZSB0ID0gSnVtcE5vZGUgb2YgSnVtcC50DQogICAgICAgICAgICAg
ICB8IEZ1bmNOb2RlIG9mIEZ1bmMudA0KICAgIGZ1biBuZXdKdW1wRnVuY0dyYXBoIHtnZXRKdW1w
RGF0YTogSnVtcC50IC0+IEp1bXBEYXRhLnQsDQoJCQkgIGdldEZ1bmNEYXRhOiBGdW5jLnQgLT4g
RnVuY0RhdGEudH0NCiAgICAgID0gbGV0DQoJICB2YWwgRyA9IEdyYXBoLm5ldyAoKQ0KDQoJICBm
dW4gYWRkRWRnZSBlZGdlDQoJICAgID0gKEdyYXBoLmFkZEVkZ2UgKEcsIGVkZ2UpOyAoKSkNCg0K
CSAgZnVuIGFkZEVkZ2UnIGVkZ2UNCgkgICAgPSBpZiBOb2RlLmhhc0VkZ2UgZWRnZQ0KCQl0aGVu
ICgpDQoJCWVsc2UgYWRkRWRnZSBlZGdlDQoNCgkgIHZhbCB7Z2V0ID0gZ2V0Tm9kZUluZm8gOiBO
b2RlLnQgLT4gdCwgDQoJICAgICAgIHNldCA9IHNldE5vZGVJbmZvfQ0KCSAgICA9IFByb3BlcnR5
LmdldFNldE9uY2UNCgkgICAgICAoTm9kZS5wbGlzdCwNCgkgICAgICAgUHJvcGVydHkuaW5pdFJh
aXNlICgibm9kZUluZm8iLCBOb2RlLmxheW91dCkpDQoNCgkgIGZ1biBnZXRGdW5jTm9kZSBmDQoJ
ICAgID0gbGV0DQoJCXZhbCBub2RlID0gRnVuY0RhdGEubm9kZScgKGdldEZ1bmNEYXRhIGYpDQoJ
ICAgICAgaW4NCgkJY2FzZSAhbm9kZQ0KCQkgIG9mIFNPTUUgbiA9PiBuDQoJCSAgIHwgTk9ORSA9
PiBsZXQNCgkJCSAgICAgICB2YWwgbiA9IEdyYXBoLm5ld05vZGUgRw0KCQkJICAgICBpbg0KCQkJ
ICAgICAgIHNldE5vZGVJbmZvIChuLCBGdW5jTm9kZSBmKTsNCgkJCSAgICAgICBub2RlIDo9IFNP
TUUgbjsNCgkJCSAgICAgICBuDQoJCQkgICAgIGVuZA0KCSAgICAgIGVuZA0KDQoJICBmdW4gZ2V0
SnVtcE5vZGUgag0KCSAgICA9IGxldA0KCQl2YWwgbm9kZSA9IEp1bXBEYXRhLm5vZGUnIChnZXRK
dW1wRGF0YSBqKQ0KCSAgICAgIGluDQoJCWNhc2UgIW5vZGUNCgkJICBvZiBTT01FIG4gPT4gbg0K
CQkgICB8IE5PTkUgPT4gbGV0DQoJCQkgICAgICAgdmFsIG4gPSBHcmFwaC5uZXdOb2RlIEcNCgkJ
CSAgICAgaW4NCgkJCSAgICAgICBzZXROb2RlSW5mbyAobiwgSnVtcE5vZGUgaik7DQoJCQkgICAg
ICAgbm9kZSA6PSBTT01FIG47DQoJCQkgICAgICAgbg0KCQkJICAgICBlbmQNCgkgICAgICBlbmQN
Cg0KCSAgZnVuIHJlc2V0IHANCgkgICAgPSBHcmFwaC5mb3JlYWNoTm9kZQ0KCSAgICAgIChHLA0K
CSAgICAgICBmbiBuID0+IGlmIHAgbg0KCQkJIHRoZW4gY2FzZSBnZXROb2RlSW5mbyBuDQoJCQkJ
b2YgSnVtcE5vZGUgag0KCQkJCSA9PiBKdW1wRGF0YS5ub2RlUmVzZXQgKGdldEp1bXBEYXRhIGop
DQoJCSAgICAgICAgICAgICAgICAgfCBGdW5jTm9kZSBmIA0KCQkJICAgICAgICAgPT4gRnVuY0Rh
dGEubm9kZVJlc2V0IChnZXRGdW5jRGF0YSBmKQ0KCQkJIGVsc2UgKCkpDQoJaW4NCgkgIHtHID0g
RywgDQoJICAgYWRkRWRnZSA9IGFkZEVkZ2UsIA0KCSAgIGFkZEVkZ2UnID0gYWRkRWRnZScsDQoJ
ICAgZ2V0Tm9kZUluZm8gPSBnZXROb2RlSW5mbywgDQoJICAgZ2V0SnVtcE5vZGUgPSBnZXRKdW1w
Tm9kZSwgDQoJICAgZ2V0RnVuY05vZGUgPSBnZXRGdW5jTm9kZSwNCgkgICByZXNldCA9IHJlc2V0
fQ0KCWVuZA0KDQogICAgZnVuIG5ld0Z1bmNHcmFwaCB7Z2V0RnVuY0RhdGE6IEZ1bmMudCAtPiBG
dW5jRGF0YS50fQ0KICAgICAgPSBsZXQNCgkgIHZhbCB7RywgYWRkRWRnZSwgYWRkRWRnZScsDQoJ
ICAgICAgIGdldE5vZGVJbmZvLCANCgkgICAgICAgZ2V0SnVtcE5vZGUsIGdldEZ1bmNOb2RlLCAN
CgkgICAgICAgcmVzZXR9DQoJICAgID0gbmV3SnVtcEZ1bmNHcmFwaCB7Z2V0SnVtcERhdGEgPSBm
biBfID0+IEVycm9yLmJ1ZyAibmV3RnVuY0dyYXBoIiwNCgkJCQlnZXRGdW5jRGF0YSA9IGdldEZ1
bmNEYXRhfQ0KCWluDQoJICB7RyA9IEcsDQoJICAgYWRkRWRnZSA9IGFkZEVkZ2UsDQoJICAgYWRk
RWRnZScgPSBhZGRFZGdlJywNCgkgICBnZXROb2RlSW5mbyA9IGZuIG4gPT4gY2FzZSBnZXROb2Rl
SW5mbyBuDQoJCQkJICAgb2YgRnVuY05vZGUgZiA9PiBmDQoJCQkJICAgIHwgSnVtcE5vZGUgaiA9
PiBFcnJvci5idWcgIm5ld0Z1bmNHcmFwaCIsDQoJICAgZ2V0RnVuY05vZGUgPSBnZXRGdW5jTm9k
ZSwNCgkgICByZXNldCA9IHJlc2V0fQ0KCWVuZA0KICBlbmQNCg0Kc3RydWN0dXJlIEluaXRSZWFj
aENhbGxlcnNDYWxsZWVzID0NCiAgc3RydWN0DQogICAgc3RydWN0dXJlIEdyYXBoID0gRGlyZWN0
ZWRHcmFwaA0KICAgIHN0cnVjdHVyZSBEZnNQYXJhbSA9IEdyYXBoLkRmc1BhcmFtDQoNCiAgICAo
KiBEZWZpbmUgUmVhY2g6IEZ1bmMgLT4gQm9vbCBhcyBmb2xsb3dzOg0KICAgICAqICBSZWFjaChm
KSBpZmYgdGhlcmUgaXMgYSBwYXRoIG9mIGNhbGxzIGZyb20gZm0gdG8gZi4NCiAgICAgKg0KICAg
ICAqIERlZmluZSBDYWxsZXJzOiBGdW5jIC0+IFAoRnVuYykgYXMgZm9sbG93czoNCiAgICAgKiAg
Q2FsbGVycyhmKSA9IHtnIHwgKGcsIGYsIEopIGluIE4gb3IgKGcsIGYpIGluIFR9DQogICAgICog
RGVmaW5lIENhbGxlZXM6IEZ1bmMgLT4gUChGdW5jKSBhcyBmb2xsb3dzOg0KICAgICAqICBDYWxs
ZWVzKGYpID0ge2cgfCAoZiwgZywgSikgaW4gTiBvciAoZiwgZykgaW4gVH0NCiAgICAgKg0KICAg
ICAqIFByZWNvbmRpdGlvbjogZm9yYWxsIGYgaW4gRnVuYy4gKEZ1bmNEYXRhLm5vZGUgbyBnZXRG
dW5jRGF0YSkgZiA9IE5PTkUNCiAgICAgKiAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1bmMu
IChKdW1wRGF0YS5jYWxsZXJzIG8gZ2V0RnVuY0RhdGEpIGYgPSBbXQ0KICAgICAqICAgICAgICAg
ICAgICAgZm9yYWxsIGYgaW4gRnVuYy4gKEp1bXBEYXRhLmNhbGxlZXMgbyBnZXRGdW5jRGF0YSkg
ZiA9IFtdDQogICAgICogUG9zdGNvbmRpdGlvbjogRnVuY0RhdGEucmVhY2ggbyBnZXRGdW5jRGF0
YSA9IFJlYWNoDQogICAgICogICAgICAgICAgICAgICAgRnVuY0RhdGEuY2FsbGVycyBvIGdldEZ1
bmNEYXRhID0gQ2FsbGVycw0KICAgICAqICAgICAgICAgICAgICAgIEZ1bmNEYXRhLmNhbGxlZXMg
byBnZXRGdW5jRGF0YSA9IENhbGxlZXMNCiAgICAgKiAgICAgICAgICAgICAgICBmb3JhbGwgZiBp
biBGdW5jLiAoRnVuY0RhdGEubm9kZSBvIGdldEZ1bmNEYXRhKSBmID0gTk9ORQ0KICAgICAqKQ0K
ICAgIGZ1biBpbml0UmVhY2hDYWxsZXJzQ2FsbGVlcyANCiAgICAgICAge3Byb2dyYW0gYXMgUHJv
Z3JhbS5UIHtmdW5jdGlvbnMsIG1haW4gPSBmbSwgLi4ufSwNCgkgZ2V0RnVuY0RhdGE6IEZ1bmMu
dCAtPiBGdW5jRGF0YS50fSA6IHVuaXQNCiAgICAgID0gbGV0DQoJICB2YWwge0csIGFkZEVkZ2Us
IGFkZEVkZ2UnLCANCgkgICAgICAgZ2V0Tm9kZUluZm8sIGdldEZ1bmNOb2RlLCANCgkgICAgICAg
cmVzZXR9DQoJICAgID0gSnVtcEZ1bmNHcmFwaC5uZXdGdW5jR3JhcGgge2dldEZ1bmNEYXRhID0g
Z2V0RnVuY0RhdGF9DQoNCgkgIHZhbCBfIA0KCSAgICA9IFZlY3Rvci5mb3JlYWNoDQoJICAgICAg
KGZ1bmN0aW9ucywgDQoJICAgICAgIGZuIHtuYW1lID0gZiwgYm9keSA9IGZfYm9keSwgLi4ufQ0K
CSAgICAgICAgPT4gbGV0DQoJCSAgICAgdmFsIGNhbGxlZXMgPSBGdW5jRGF0YS5jYWxsZWVzJyAo
Z2V0RnVuY0RhdGEgZikNCgkJICAgICB2YWwgZl9ub2RlID0gZ2V0RnVuY05vZGUgZg0KCQkgICBp
bg0KCQkgICAgIEV4cC5mb3JlYWNoQ2FsbA0KCQkgICAgIChmX2JvZHksDQoJCSAgICAgIGZuIHtm
dW5jID0gZywgLi4ufQ0KCQkgICAgICAgPT4gbGV0DQoJCQkgICAgdmFsIGNhbGxlcnMgPSBGdW5j
RGF0YS5jYWxsZXJzJyAoZ2V0RnVuY0RhdGEgZykNCgkJCSAgICB2YWwgZ19ub2RlID0gZ2V0RnVu
Y05vZGUgZw0KCQkJICBpbg0KCQkJICAgIExpc3QucHVzaChjYWxsZWVzLCBnKTsNCgkJCSAgICBM
aXN0LnB1c2goY2FsbGVycywgZik7DQoJCQkgICAgYWRkRWRnZSB7ZnJvbSA9IGZfbm9kZSwNCgkJ
CQkgICAgIHRvID0gZ19ub2RlfQ0KCQkJICBlbmQpDQoJCSAgIGVuZCkNCgkgICAgICANCgkgIHZh
bCBkZnNfcGFyYW0NCgkgICAgPSBEZnNQYXJhbS5maW5pc2hOb2RlDQoJICAgICAgKGZuIG4gPT4g
bGV0DQoJCQkgdmFsIHJlYWNoIA0KCQkJICAgPSBGdW5jRGF0YS5yZWFjaCcgKGdldEZ1bmNEYXRh
IChnZXROb2RlSW5mbyBuKSkNCgkJICAgICAgIGluDQoJCQkgcmVhY2ggOj0gdHJ1ZQ0KCQkgICAg
ICAgZW5kKQ0KCSAgdmFsIGZtX25vZGUgPSBnZXRGdW5jTm9kZSBmbQ0KCWluDQoJICBHcmFwaC5k
ZnNOb2RlcyAoRywgW2ZtX25vZGVdLCBkZnNfcGFyYW0pOw0KCSAgcmVzZXQgKGZuIF8gPT4gdHJ1
ZSkNCgllbmQNCiAgZW5kDQoNCnN0cnVjdHVyZSBBbmFseXplQ2FsbCA9DQogIHN0cnVjdA0KICAg
IGRhdGF0eXBlIHogPSBkYXRhdHlwZSBSZXR1cm4udA0KDQogICAgKCoNCiAgICAgKiBQcmVjb25k
aXRpb246IGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5BQ2FsbCBvIGdldEZ1bmNEYXRhKSBm
ID0gVW5jYWxsZWQNCiAgICAgKiBQb3N0Y29uZGl0aW9uOiBGdW5jRGF0YS5BQ2FsbCBvIGdldEZ1
bmNEYXRhID0gQV9DYWxsDQogICAgICopDQogICAgZnVuIGFuYWx5emVDYWxsIHtwcm9ncmFtIGFz
IFByb2dyYW0uVCB7ZnVuY3Rpb25zLCBtYWluID0gZm0sIC4uLn0sDQoJCSAgICAgZ2V0RnVuY0Rh
dGE6IEZ1bmMudCAtPiBGdW5jRGF0YS50fSA6IHVuaXQNCiAgICAgID0gbGV0DQoJICB2YWwgZm1f
QUNhbGwgPSBGdW5jRGF0YS5BQ2FsbCcgKGdldEZ1bmNEYXRhIGZtKQ0KCSAgdmFsIF8gPSBmbV9B
Q2FsbCA6PSBVbmtub3duDQoJaW4NCgkgIFZlY3Rvci5mb3JlYWNoDQoJICAoZnVuY3Rpb25zLA0K
CSAgIGZuIHtuYW1lID0gZiwgYm9keSA9IGZfYm9keSwgLi4ufQ0KCSAgICA9PiBpZiBGdW5jRGF0
YS5yZWFjaCAoZ2V0RnVuY0RhdGEgZikNCgkJIHRoZW4gRXhwLmZvcmVhY2hDYWxsDQoJCSAgICAg
IChmX2JvZHksDQoJCSAgICAgICBmbiB7ZnVuYyA9IGcsIGNvbnQsIC4uLn0gDQoJCSAgICAgICAg
PT4gbGV0DQoJCQkgICAgIHZhbCBBQ2FsbCA9IEZ1bmNEYXRhLkFDYWxsJyAoZ2V0RnVuY0RhdGEg
ZykNCgkJCSAgIGluDQoJCQkgICAgIGlmIEZ1bmMuZXF1YWxzIChmLCBnKQ0KCQkJICAgICAgIHRo
ZW4gY2FzZSBjb250DQoJCQkJICAgICAgb2YgTk9ORSA9PiAoKQ0KCQkJCSAgICAgICB8IFNPTUUg
aiA9PiBBQ2FsbCA6PSBVbmtub3duDQoJCQkgICAgICAgZWxzZSBjYXNlICFBQ2FsbA0KCQkJCSAg
ICAgIG9mIFVuY2FsbGVkIA0KCQkJCSAgICAgICA9PiAoY2FzZSBjb250DQoJCQkJCSAgICAgb2Yg
Tk9ORSANCgkJCQkJICAgICAgPT4gQUNhbGwgOj0gRnVuY0xhYmVsIGYNCgkJCQkJICAgICAgfCBT
T01FIGogDQoJCQkJCSAgICAgID0+IEFDYWxsIDo9IEp1bXBMYWJlbCBqKQ0KCQkJCSAgICAgICB8
IEp1bXBMYWJlbCBfID0+IEFDYWxsIDo9IFVua25vd24NCgkJCQkgICAgICAgfCBGdW5jTGFiZWwg
XyA9PiBBQ2FsbCA6PSBVbmtub3duDQoJCQkJICAgICAgIHwgVW5rbm93biA9PiAoKQ0KCQkJICAg
ICBlbmQpDQoJCSBlbHNlICgpKQ0KCWVuZA0KICAgIHZhbCBhbmFseXplQ2FsbCA9IENvbnRyb2wu
dHJhY2VDYWxsICJhbmFseXplQ2FsbCIgYW5hbHl6ZUNhbGwNCiAgZW5kDQoNCnN0cnVjdHVyZSBB
bmFseXplQ29udCA9DQogIHN0cnVjdA0KICAgIGRhdGF0eXBlIHogPSBkYXRhdHlwZSBSZXR1cm4u
dA0KDQogICAgKCoNCiAgICAgKiBQcmVjb25kaXRpb246IGZvcmFsbCBmIGluIEZ1bmMuIChGdW5j
RGF0YS5BQ29udCBvIGdldEZ1bmNEYXRhKSBmID0gVW5jYWxsZWQNCiAgICAgKiAgICAgICAgICAg
ICAgIGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5sZXNzVGhhbiBvIGdldEZ1bmNEYXRhKSBm
ID0gW10NCiAgICAgKiAgICAgICAgICAgICAgIA0KICAgICAqIFBvc3Rjb25kaXRpb246IEZ1bmNE
YXRhLkFDb250IG8gZ2V0RnVuY0RhdGEgPSBBX0NvbnQNCiAgICAgKikNCiAgICBmdW4gYW5hbHl6
ZUNvbnQge3Byb2dyYW0gYXMgUHJvZ3JhbS5UIHtmdW5jdGlvbnMsIG1haW4gPSBmbSwgLi4ufSwN
CgkJICAgICBnZXRGdW5jRGF0YTogRnVuYy50IC0+IEZ1bmNEYXRhLnR9IDogdW5pdA0KICAgICAg
PSBsZXQNCgkgIGZ1biB1cCAoZiwgcykNCgkgICAgPSBsZXQNCgkJdmFsIEZ1bmNEYXRhLlQge0FD
b250LCBsZXNzVGhhbiwgLi4ufSA9IGdldEZ1bmNEYXRhIGYNCgkJZnVuIGRvaXQgcw0KCQkgID0g
KEFDb250IDo9IHM7DQoJCSAgICAgTGlzdC5mb3JlYWNoICghbGVzc1RoYW4sIGZuIGcgPT4gdXAg
KGcsIHMpKSkNCgkgICAgICBpbg0KCQljYXNlICghQUNvbnQsIHMpDQoJCSAgb2YgKF8sIFVuY2Fs
bGVkKSA9PiAoKQ0KCQkgICB8IChVbmtub3duLCBfKSA9PiAoKQ0KCQkgICB8IChVbmNhbGxlZCwg
XykgPT4gZG9pdCBzDQoJCSAgIHwgKEp1bXBMYWJlbCBqLCBKdW1wTGFiZWwgaicpDQoJCSAgID0+
IGlmIEp1bXAuZXF1YWxzIChqLCBqJykNCgkJCXRoZW4gKCkNCgkJCWVsc2UgZG9pdCBVbmtub3du
DQoJCSAgIHwgKEZ1bmNMYWJlbCBnLCBGdW5jTGFiZWwgZycpDQoJCSAgID0+IGlmIEZ1bmMuZXF1
YWxzIChnLCBnJykNCgkJCXRoZW4gKCkNCgkJCWVsc2UgZG9pdCBVbmtub3duDQoJCSAgIHwgXyA9
PiBkb2l0IFVua25vd24NCgkgICAgICBlbmQNCg0KCSAgZnVuIHRocnVGdW5jIChmLCBnKSANCgkg
ICAgPSBsZXQNCgkJdmFsIEZ1bmNEYXRhLlQge0FDb250LCBsZXNzVGhhbiwgLi4ufSA9IGdldEZ1
bmNEYXRhIGcNCgkgICAgICBpbg0KCQlMaXN0LnB1c2ggKGxlc3NUaGFuLCBmKTsNCgkJdXAgKGYs
ICFBQ29udCkNCgkgICAgICBlbmQNCgkgIGZ1biBhZGRKdW1wIChmLCBqKSA9IHVwIChmLCBKdW1w
TGFiZWwgaikNCgkgIGZ1biBtYWtlVG9wIGYgPSB1cCAoZiwgVW5rbm93bikNCg0KDQoJICB2YWwg
XyA9IG1ha2VUb3AgZm0NCglpbg0KCSAgVmVjdG9yLmZvcmVhY2gNCgkgIChmdW5jdGlvbnMsDQoJ
ICAgZm4ge25hbWUgPSBmLCBib2R5ID0gZl9ib2R5LCAuLi59DQoJICAgID0+IGlmIEZ1bmNEYXRh
LnJlYWNoIChnZXRGdW5jRGF0YSBmKQ0KCQkgdGhlbiBFeHAuZm9yZWFjaENhbGwNCgkJICAgICAg
KGZfYm9keSwNCgkJICAgICAgIGZuIHtmdW5jID0gZywgY29udCwgLi4ufQ0KCQkgICAgICAgID0+
IGlmIEZ1bmMuZXF1YWxzIChmLCBnKQ0KCQkJICAgICB0aGVuIGNhc2UgY29udA0KCQkJCSAgICBv
ZiBOT05FID0+ICgpDQoJCQkJICAgICB8IFNPTUUgaiA9PiBtYWtlVG9wIGYNCgkJCSAgICAgZWxz
ZSBjYXNlIGNvbnQNCgkJCQkgICAgb2YgTk9ORSA9PiB0aHJ1RnVuYyAoZywgZikNCgkJCQkgICAg
IHwgU09NRSBqID0+IGFkZEp1bXAgKGcsIGopKQ0KCQkgZWxzZSAoKSkNCgllbmQNCiAgICB2YWwg
YW5hbHl6ZUNvbnQgPSBDb250cm9sLnRyYWNlQ2FsbCAiYW5hbHl6ZUNvbnQiIGFuYWx5emVDb250
DQogIGVuZA0KDQpzdHJ1Y3R1cmUgQW5hbHl6ZURvbSA9DQogIHN0cnVjdA0KICAgIHN0cnVjdHVy
ZSBHcmFwaCA9IERpcmVjdGVkR3JhcGgNCiAgICBzdHJ1Y3R1cmUgTm9kZSA9IEdyYXBoLk5vZGUN
Cg0KICAgICgqIE5vdyBkZWZpbmUgYSBkaXJlY3RlZCBncmFwaCBHID0gKE5vZGUsIEVkZ2UpIHdo
ZXJlDQogICAgICogICAgICBOb2RlID0gSnVtcCBVIEZ1biBVIHtSb290fQ0KICAgICAqICAgICAg
RWRnZSA9IHsoUm9vdCwgZm0pfQ0KICAgICAqICAgICAgICAgICAgIFUgeyhSb290LCBqKSB8IGog
aW4gSnVtcH0NCiAgICAgKiAgICAgICAgICAgICBVIHsoUm9vdCwgZikgfCBub3QoUmVhY2goZikp
fQ0KICAgICAqICAgICAgICAgICAgIFUgeyhmLCBnKSB8IChmLCBnKSBpbiBUIGFuZCBSZWFjaChm
KX0NCiAgICAgKiAgICAgICAgICAgICBVIHsoaiwgZykgfCAoZiwgZywgaikgaW4gTiBhbmQgUmVh
Y2goZil9DQogICAgICoNCiAgICAgKiBMZXQgRCBiZSB0aGUgZG9taW5hdG9yIHRyZWUgb2YgRyBy
b290ZWQgYXQgUm9vdC4NCiAgICAgKiBGb3IgZiBpbiBGdW4sIGxldCBpZG9tKGYpIGJlIHRoZSBw
YXJlbnQgb2YgZiBpbiBELg0KICAgICAqDQogICAgICogRGVmaW5lIGFuIGFuYWx5c2lzLCBBX0Rv
bSwgYmFzZWQgb24gRCBhcyBmb2xsb3dzOg0KICAgICAqICAgICAgQV9Eb20oZikgPSANCiAgICAg
KiAgICAgICAgICAgaWYgaWRvbShmKSA9IFJvb3QNCiAgICAgKiAgICAgICAgICAgICB0aGVuIGlm
IFJlYWNoKGYpIHRoZW4gVW5rbm93biBlbHNlIFVuY2FsbGVkDQogICAgICogICAgICAgICAgICAg
ZWxzZSB0aGUgYW5jZXN0b3IgZyBvZiBmIGluIEQgc3VjaCB0aGF0IGlkb20oZykgPSBSb290DQog
ICAgICoNCiAgICAgKiBQcmVjb25kaXRpb246IGZvcmFsbCBqIGluIEp1bXAuIChKdW1wRGF0YS5u
b2RlIG8gZ2V0SnVtcERhdGEpIGogPSBOT05FDQogICAgICogICAgICAgICAgICAgICBmb3JhbGwg
aiBpbiBKdW1wLiAoSnVtcERhdGEucm9vdEVkZ2UgbyBnZXRKdW1wRGF0YSkgaiA9IGZhbHNlDQog
ICAgICogICAgICAgICAgICAgICBmb3JhbGwgZiBpbiBGdW5jLiAoRnVuY0RhdGEubm9kZSBvIGdl
dEZ1bmNEYXRhKSBmID0gTk9ORSANCiAgICAgKiAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1
bmMuIChGdW5jRGF0YS5ub2RlIG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05FDQogICAgICogICAgICAg
ICAgICAgICBmb3JhbGwgZiBpbiBGdW5jLiAoRnVuY0RhdGEucmVhY2ggbyBnZXRGdW5jRGF0YSkg
ZiA9IFJlYWNoDQogICAgICogUG9zdGNvbmRpdGlvbjogRnVuY0RhdGEuQURvbSBvIGdldEZ1bmNE
YXRhID0gQV9Eb20NCiAgICAgKiAgICAgICAgICAgICAgICBmb3JhbGwgaiBpbiBKdW1wLiAoSnVt
cERhdGEubm9kZSBvIGdldEp1bXBEYXRhKSBqID0gTk9ORQ0KICAgICAqICAgICAgICAgICAgICAg
IGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5ub2RlIG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05F
DQogICAgICopDQogICAgZnVuIGFuYWx5emVEb20ge3Byb2dyYW0gYXMgUHJvZ3JhbS5UIHtmdW5j
dGlvbnMsIG1haW4gPSBmbSwgLi4ufSwNCgkJICAgIGdldEZ1bmNEYXRhOiBGdW5jLnQgLT4gRnVu
Y0RhdGEudCwNCgkJICAgIGdldEp1bXBEYXRhOiBKdW1wLnQgLT4gSnVtcERhdGEudH0gOiB1bml0
DQogICAgICA9IGxldA0KCSAgZGF0YXR5cGUgeiA9IGRhdGF0eXBlIFJldHVybi50DQoNCgkgIHZh
bCB7RywgYWRkRWRnZSwgYWRkRWRnZScsIA0KCSAgICAgICBnZXROb2RlSW5mbywgZ2V0RnVuY05v
ZGUsIGdldEp1bXBOb2RlLCANCgkgICAgICAgcmVzZXR9DQoJICAgID0gSnVtcEZ1bmNHcmFwaC5u
ZXdKdW1wRnVuY0dyYXBoIHtnZXRKdW1wRGF0YSA9IGdldEp1bXBEYXRhLA0KCQkJCQkgICAgICBn
ZXRGdW5jRGF0YSA9IGdldEZ1bmNEYXRhfQ0KCSAgdmFsIFJvb3QgPSBEaXJlY3RlZEdyYXBoLm5l
d05vZGUgRw0KDQoJICBmdW4gYnVpbGRHcmFwaCAoKSA9IGxldA0KCSAgdmFsIGZtX25vZGUgPSBn
ZXRGdW5jTm9kZSBmbQ0KCSAgKCogeyhSb290LCBmbSl9ICopDQoJICB2YWwgXyA9IGFkZEVkZ2Ug
e2Zyb20gPSBSb290LCB0byA9IGZtX25vZGV9DQoJICAgIA0KCSAgdmFsIF8NCgkgICAgPSBWZWN0
b3IuZm9yZWFjaA0KCSAgICAgIChmdW5jdGlvbnMsDQoJICAgICAgIGZuIHtuYW1lID0gZiwgYm9k
eSA9IGZfYm9keSwgLi4ufQ0KCSAgICAgICAgPT4gbGV0DQoJCSAgICAgdmFsIGZfcmVhY2ggPSBG
dW5jRGF0YS5yZWFjaCAoZ2V0RnVuY0RhdGEgZikNCgkJICAgICB2YWwgZl9ub2RlID0gZ2V0RnVu
Y05vZGUgZg0KCQkgICBpbg0KCQkgICAgIGlmIGZfcmVhY2gNCgkJICAgICAgIHRoZW4gRXhwLmZv
cmVhY2hDYWxsDQoJCQkgICAgKGZfYm9keSwNCgkJCSAgICAgZm4ge2Z1bmMgPSBnLCBjb250LCAu
Li59DQoJCQkgICAgICA9PiBpZiBGdW5jRGF0YS5yZWFjaCAoZ2V0RnVuY0RhdGEgZykNCgkJCQkg
ICB0aGVuIGxldA0KCQkJCQkgIHZhbCBnX25vZGUgPSBnZXRGdW5jTm9kZSBnDQoJCQkJCWluDQoJ
CQkJCSAgY2FzZSBjb250DQoJCQkJCSAgICBvZiBOT05FDQoJCQkJCSAgICAgPT4gKCogeyhmLCBn
KSB8IChmLCBnKSBpbiBUIA0KCQkJCQkJICogICAgICAgYW5kIFJlYWNoKGYpfSAqKQ0KCQkJCQkg
ICAgICAgIGFkZEVkZ2Uge2Zyb20gPSBmX25vZGUsDQoJCQkJCQkJIHRvID0gZ19ub2RlfQ0KCQkJ
CQkgICAgIHwgU09NRSBqDQoJCQkJCSAgICAgPT4gbGV0DQoJCQkJCQkgIHZhbCBqX25vZGUgPSBn
ZXRKdW1wTm9kZSBqDQoJCQkJCQkgIHZhbCByb290RWRnZSANCgkJCQkJCSAgICA9IEp1bXBEYXRh
LnJvb3RFZGdlJw0KCQkJCQkJICAgICAgKGdldEp1bXBEYXRhIGopDQoJCQkJCQlpbg0KCQkJCQkJ
ICBpZiAhcm9vdEVkZ2UNCgkJCQkJCSAgICB0aGVuICgpDQoJCQkJCQkgICAgZWxzZSAoKCogeyhS
b290LCBqKSB8IGogaW4gSnVtcH0gKikNCgkJCQkJCSAgICAgICAgICBhZGRFZGdlIHtmcm9tID0g
Um9vdCwNCgkJCQkJCQkJICAgdG8gPSBqX25vZGV9Ow0KCQkJCQkJCSAgcm9vdEVkZ2UgOj0gdHJ1
ZSk7DQoJCQkJCQkgICgqIHsoaiwgZykgfCAoZiwgZywgaikgaW4gTg0KCQkJCQkJICAgKiAgICAg
ICBhbmQgUmVhY2goZil9ICopDQoJCQkJCQkgIGFkZEVkZ2Uge2Zyb20gPSBqX25vZGUsDQoJCQkJ
CQkJICAgdG8gPSBnX25vZGV9DQoJCQkJCQllbmQNCgkJCQkJZW5kDQoJCQkJICAgZWxzZSAoKSkN
CgkJICAgICAgIGVsc2UgKCogeyhSb290LCBmKSB8IG5vdChSZWFjaChmKSl9ICopDQoJCQkgICAg
YWRkRWRnZSB7ZnJvbSA9IFJvb3QsDQoJCQkJICAgICB0byA9IGZfbm9kZX0NCgkJICAgZW5kKQ0K
CSAgaW4gKCkgZW5kDQoJICB2YWwgYnVpbGRHcmFwaCA9IENvbnRyb2wudHJhY2VDYWxsICJidWls
ZEdyYXBoIiBidWlsZEdyYXBoDQoJICB2YWwgXyA9IGJ1aWxkR3JhcGggKCkNCg0KCSAgZnVuIGNv
bXB1dGVEb21pbmF0b3JzICgpID0gbGV0DQoJICB2YWwge2lkb219ID0gR3JhcGguZG9taW5hdG9y
cyB7Z3JhcGggPSBHLCByb290ID0gUm9vdH0NCgkgIGluIGlkb20gZW5kDQoJICB2YWwgY29tcHV0
ZURvbWluYXRvcnMgPSBDb250cm9sLnRyYWNlQ2FsbCAiY29tcHV0ZURvbWluYXRvcnMiIGNvbXB1
dGVEb21pbmF0b3JzDQoJICB2YWwgaWRvbSA9IGNvbXB1dGVEb21pbmF0b3JzICgpDQoNCgkgIGZ1
biBjb21wdXRlQURvbSAoKSA9IGxldA0KCSAgZnVuIGFuY2VzdG9yIG5vZGUNCgkgICAgPSBsZXQN
CgkJdmFsIHBhcmVudCA9IGlkb20gbm9kZQ0KCSAgICAgIGluDQoJCWlmIE5vZGUuZXF1YWxzKHBh
cmVudCwgUm9vdCkNCgkJICB0aGVuIG5vZGUNCgkJICBlbHNlIGFuY2VzdG9yIHBhcmVudA0KCSAg
ICAgIGVuZA0KDQoJICB2YWwgXw0KCSAgICA9IFZlY3Rvci5mb3JlYWNoDQoJICAgICAgKGZ1bmN0
aW9ucywNCgkgICAgICAgZm4ge25hbWUsIC4uLn0NCgkgICAgICAgID0+IGxldA0KCQkgICAgIHZh
bCBGdW5jRGF0YS5UIHtBRG9tLCByZWFjaCwgbm9kZSwgLi4ufSA9IGdldEZ1bmNEYXRhIG5hbWUN
CgkJICAgICB2YWwgZl9BRG9tID0gQURvbQ0KCQkgICAgIHZhbCBmX3JlYWNoID0gIXJlYWNoDQoJ
CSAgICAgdmFsIGZfbm9kZSA9IHZhbE9mICghbm9kZSkNCgkJICAgICBkYXRhdHlwZSB6ID0gZGF0
YXR5cGUgSnVtcEZ1bmNHcmFwaC50DQoJCSAgIGluDQoJCSAgICAgaWYgTm9kZS5lcXVhbHMoaWRv
bSBmX25vZGUsIFJvb3QpDQoJCSAgICAgICB0aGVuIGlmIGZfcmVhY2gNCgkJCSAgICAgIHRoZW4g
Zl9BRG9tIDo9IFVua25vd24NCgkJCSAgICAgIGVsc2UgZl9BRG9tIDo9IFVuY2FsbGVkDQoJCSAg
ICAgICBlbHNlIGxldA0KCQkJICAgICAgKCogVXNlIHRoaXMgZm9yIHRoZSBhbmNlc3RvciB2ZXJz
aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgbF9ub2RlID0gYW5jZXN0b3Ig
Zl9ub2RlDQoJCQkgICAgICAgKikNCgkJCSAgICAgICgqIFVzZSB0aGlzIGZvciB0aGUgcGFyZW50
IHZlcnNpb24gKikNCgkJCSAgICAgIHZhbCBsX25vZGUgPSBpZG9tIGZfbm9kZQ0KCQkJICAgICAg
dmFsIGwgPSBnZXROb2RlSW5mbyBsX25vZGUNCgkJCSAgICBpbg0KCQkJICAgICAgY2FzZSBnZXRO
b2RlSW5mbyBsX25vZGUNCgkJCQlvZiBGdW5jTm9kZSBnID0+IGZfQURvbSA6PSBGdW5jTGFiZWwg
Zw0KCQkJCSB8IEp1bXBOb2RlIGogPT4gZl9BRG9tIDo9IEp1bXBMYWJlbCBqDQoJCQkgICAgZW5k
DQoJCSAgIGVuZCkNCgkgIGluICgpIGVuZA0KCSAgdmFsIGNvbXB1dGVBRG9tID0gQ29udHJvbC50
cmFjZUNhbGwgImNvbXB1dGUgQURvbSIgY29tcHV0ZUFEb20NCgkgIHZhbCBfID0gY29tcHV0ZUFE
b20gKCkNCg0KCSAgdmFsIF8gPSByZXNldCAoZm4gbiA9PiBub3QgKE5vZGUuZXF1YWxzKG4sIFJv
b3QpKSkNCg0KCWluDQoJICAoKQ0KCWVuZA0KICAgIHZhbCBhbmFseXplRG9tID0gQ29udHJvbC50
cmFjZUNhbGwgImFuYWx5emVEb20iIGFuYWx5emVEb20NCmVuZA0KDQpzdHJ1Y3R1cmUgVHJhbnNm
b3JtID0NCiAgc3RydWN0DQoNCiAgICBzdHJ1Y3R1cmUgR3JhcGggPSBEaXJlY3RlZEdyYXBoDQog
ICAgc3RydWN0dXJlIE5vZGUgPSBHcmFwaC5Ob2RlDQogICAgc3RydWN0dXJlIEVkZ2UgPSBHcmFw
aC5FZGdlDQogICAgc3RydWN0dXJlIERmc1BhcmFtID0gR3JhcGguRGZzUGFyYW0NCg0KICAgICgq
DQogICAgICogUHJlY29uZGl0aW9uOiBmb3JhbGwgaiBpbiBKdW1wLiAoSnVtcERhdGEubm9kZSBv
IGdldEp1bXBEYXRhKSBqID0gTk9ORQ0KICAgICAqICAgICAgICAgICAgICAgZm9yYWxsIGogaW4g
SnVtcC4gKEp1bXBEYXRhLnByZWZpeGVzIG8gZ2V0SnVtcERhdGEpIGogPSBbXQ0KICAgICAqICAg
ICAgICAgICAgICAgZm9yYWxsIGYgaW4gRnVuYy4gKEZ1bmNEYXRhLm5vZGUgbyBnZXRGdW5jRGF0
YSkgZiA9IE5PTkUNCiAgICAgKiAgICAgICAgICAgICAgIEZ1bmNEYXRhLkEgbyBnZXRGdW5jRGF0
YSA9IEENCiAgICAgKiAgICAgICAgICAgICAgICB3aGVyZSBBIGlzIGEgc2FmZSBhbmFseXNpcw0K
ICAgICAqICAgICAgICAgICAgICAgRnVuY0RhdGEuY2FsbGVycyBvIGdldEZ1bmNEYXRhID0gQ2Fs
bGVycw0KICAgICAqICAgICAgICAgICAgICAgRnVuY0RhdGEuY2FsbGVlcyBvIGdldEZ1bmNEYXRh
ID0gQ2FsbGVlcw0KICAgICAqICAgICAgICAgICAgICAgZm9yYWxsIGYgaW4gRnVuYy4gKEp1bXBE
YXRhLnByZWZpeGVzIG8gZ2V0RnVuY0RhdGEpIGYgPSBbXQ0KICAgICAqICAgICAgICAgICAgICAg
Zm9yYWxsIGYgaW4gRnVuYy4gKEp1bXBEYXRhLnJlcGxhY2UgbyBnZXRGdW5jRGF0YSkgZiA9IE5P
TkUNCiAgICAgKiBQb3N0Y29uZGl0aW9uOiBmb3JhbGwgaiBpbiBKdW1wLiAoSnVtcERhdGEubm9k
ZSBvIGdldEp1bXBEYXRhKSBqID0gTk9ORQ0KICAgICAqICAgICAgICAgICAgICAgIGZvcmFsbCBm
IGluIEZ1bmMuIChGdW5jRGF0YS5ub2RlIG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05FDQogICAgICop
DQogICAgZnVuIHRyYW5zZm9ybSB7cHJvZ3JhbSBhcyBQcm9ncmFtLlQge2RhdGF0eXBlcywgZ2xv
YmFscywgDQoJCQkJCSBmdW5jdGlvbnMsIG1haW59LA0KCQkgICBnZXRGdW5jRGF0YTogRnVuYy50
IC0+IEZ1bmNEYXRhLnQsDQoJCSAgIGdldEp1bXBEYXRhOiBKdW1wLnQgLT4gSnVtcERhdGEudH0g
OiBQcm9ncmFtLnQNCiAgICAgID0gbGV0DQoJICBkYXRhdHlwZSB6ID0gZGF0YXR5cGUgUmV0dXJu
LnQNCg0KCSAgdmFsIHtHLCBhZGRFZGdlLCBhZGRFZGdlJywNCgkgICAgICAgZ2V0Tm9kZUluZm8s
IGdldEp1bXBOb2RlLCBnZXRGdW5jTm9kZSwgDQoJICAgICAgIHJlc2V0fQ0KCSAgICA9IEp1bXBG
dW5jR3JhcGgubmV3SnVtcEZ1bmNHcmFwaCB7Z2V0RnVuY0RhdGEgPSBnZXRGdW5jRGF0YSwNCgkJ
CQkJICAgICAgZ2V0SnVtcERhdGEgPSBnZXRKdW1wRGF0YX0NCg0KCSAgdmFsIHJvb3RzID0gcmVm
IFtdDQoJICB2YWwgXyANCgkgICAgPSBWZWN0b3IuZm9yZWFjaA0KCSAgICAgIChmdW5jdGlvbnMs
DQoJICAgICAgIGZuIHtuYW1lID0gZiwgLi4ufQ0KCSAgICAgICAgPT4gbGV0DQoJCSAgICAgdmFs
IEZ1bmNEYXRhLlQge0EsIGNvbnRpZnksIC4uLn0gDQoJCSAgICAgICA9IGdldEZ1bmNEYXRhIGYN
CgkJICAgICB2YWwgZl9ub2RlID0gZ2V0RnVuY05vZGUgZg0KCQkgICBpbg0KCQkgICAgIGNhc2Ug
IUENCgkJICAgICAgIG9mIFVuY2FsbGVkID0+IChMaXN0LnB1c2gocm9vdHMsIGZfbm9kZSk7DQoJ
CQkJICAgICAgIGNvbnRpZnkgOj0gZmFsc2UpDQoJCQl8IFVua25vd24gPT4gKExpc3QucHVzaChy
b290cywgZl9ub2RlKTsNCgkJCQkgICAgICBjb250aWZ5IDo9IGZhbHNlKQ0KCQkgICAgICAgIHwg
SnVtcExhYmVsIGoNCgkJCT0+IGxldA0KCQkJICAgICB2YWwgbF9ub2RlID0gZ2V0SnVtcE5vZGUg
ag0KCQkJICAgaW4NCgkJCSAgICAgTGlzdC5wdXNoKHJvb3RzLCBsX25vZGUpOw0KCQkJICAgICBj
b250aWZ5IDo9IHRydWU7DQoJCQkgICAgIGFkZEVkZ2Uge2Zyb20gPSBsX25vZGUsDQoJCQkJICAg
ICAgdG8gPSBmX25vZGV9DQoJCQkgICBlbmQNCgkJICAgICAgICB8IEZ1bmNMYWJlbCBnDQoJCQk9
PiBsZXQNCgkJCSAgICAgdmFsIGxfbm9kZSA9IGdldEZ1bmNOb2RlIGcNCgkJCSAgIGluDQoJCQkg
ICAgIGNvbnRpZnkgOj0gdHJ1ZTsNCgkJCSAgICAgYWRkRWRnZSB7ZnJvbSA9IGxfbm9kZSwNCgkJ
CQkgICAgICB0byA9IGZfbm9kZX0NCgkJCSAgIGVuZA0KCQkgICBlbmQpDQoJICB2YWwgXyA9IHJl
c2V0IChmbiBfID0+IHRydWUpDQoNCgkgIGZ1biBjYXNjYWRlIGZzDQoJICAgID0gbGV0DQoJCXZh
bCB7eWVzID0gY29udGlmaWFibGUsIG5vID0gdW5jb250aWZpYWJsZX0NCgkJICA9IExpc3QucGFy
dGl0aW9uDQoJCSAgICAoTGlzdC5yZXYgZnMsIGZuIGcgPT4gRnVuY0RhdGEuY29udGlmeSAoZ2V0
RnVuY0RhdGEgZykpDQoNCgkJZnVuIGRvaXQgZg0KCQkgID0gbGV0DQoJCSAgICAgIHZhbCBGdW5j
RGF0YS5UIHtjYWxsZWVzLCBwcmVmaXhlcywgLi4ufSA9IGdldEZ1bmNEYXRhIGYNCgkJICAgIGlu
DQoJCSAgICAgIExpc3QuZm9yZWFjaA0KCQkgICAgICAoIWNhbGxlZXMsDQoJCSAgICAgICBmbiBn
ID0+IGxldA0KCQkJCSB2YWwgY29udGlmeSANCgkJCQkgICA9IEZ1bmNEYXRhLmNvbnRpZnknIChn
ZXRGdW5jRGF0YSBnKQ0KCQkJICAgICAgIGluDQoJCQkJIGNvbnRpZnkgOj0gZmFsc2UNCgkJCSAg
ICAgICBlbmQpOw0KCQkgICAgICBMaXN0LmZvcmVhY2goIXByZWZpeGVzLCBkb2l0KQ0KCQkgICAg
ZW5kDQoJICAgICAgaW4NCgkJY2FzZSB1bmNvbnRpZmlhYmxlDQoJCSAgb2YgW10gDQoJCSAgID0+
IGNvbnRpZmlhYmxlDQoJCSAgIHwgXyANCgkJICAgPT4gbGV0DQoJCQl2YWwgXyA9IExpc3QuZm9y
ZWFjaCAodW5jb250aWZpYWJsZSwgZG9pdCkNCgkJICAgICAgaW4NCgkJCWNhc2NhZGUgY29udGlm
aWFibGUNCgkJICAgICAgZW5kDQoJICAgICAgZW5kDQoNCgkgICgqIFN0cm9uZ2x5IGNvbm5lY3Rl
ZCBjb21wb25lbnRzIG9mIGEgZ3JvdXAgb2YgZnVuY3Rpb25zLiAqKQ0KCSAgZnVuIGdldFNDQ1Mg
KGZzOiBGdW5jLnQgbGlzdCkgOiBGdW5jLnQgbGlzdCBsaXN0DQoJICAgID0gbGV0DQoJCXZhbCB7
RywgYWRkRWRnZSwgYWRkRWRnZScsDQoJCSAgICAgZ2V0Tm9kZUluZm8sIGdldEZ1bmNOb2RlLCAN
CgkJICAgICByZXNldH0NCgkJICA9IEp1bXBGdW5jR3JhcGgubmV3RnVuY0dyYXBoIHtnZXRGdW5j
RGF0YSA9IGdldEZ1bmNEYXRhfQ0KDQoJCXZhbCBfIA0KCQkgID0gTGlzdC5mb3JlYWNoDQoJCSAg
ICAoZnMsDQoJCSAgICAgZm4gZiA9PiBsZXQNCgkJCSAgICAgICB2YWwgY2FsbGVycyA9IEZ1bmNE
YXRhLmNhbGxlcnMgKGdldEZ1bmNEYXRhIGYpDQoJCQkgICAgICAgdmFsIGZfbm9kZSA9IGdldEZ1
bmNOb2RlIGYNCgkJCSAgICAgaW4NCgkJCSAgICAgICBMaXN0LmZvcmVhY2gNCgkJCSAgICAgICAo
Y2FsbGVycywNCgkJCQlmbiBnID0+IGlmIExpc3QuY29udGFpbnMoZnMsIGcsIEZ1bmMuZXF1YWxz
KQ0KCQkJCQkgIHRoZW4gbGV0DQoJCQkJCQkgdmFsIGdfbm9kZSA9IGdldEZ1bmNOb2RlIGcNCgkJ
CQkJICAgICAgIGluDQoJCQkJCQkgYWRkRWRnZSB7ZnJvbSA9IGZfbm9kZSwNCgkJCQkJCQkgIHRv
ID0gZ19ub2RlfQ0KCQkJCQkgICAgICAgZW5kDQoJCQkJCSAgZWxzZSAoKSkNCgkJCSAgICAgZW5k
KQ0KDQoJCXZhbCBzY2NzID0gR3JhcGguc3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzIEcNCgkJ
dmFsIF8gPSByZXNldCAoZm4gXyA9PiB0cnVlKQ0KCSAgICAgIGluDQoJCUxpc3QubWFwIChzY2Nz
LCBmbiBzY2MgPT4gTGlzdC5yZXZNYXAgKHNjYywgZ2V0Tm9kZUluZm8pKQ0KCSAgICAgIGVuZA0K
DQoJICBleGNlcHRpb24gTm9wZQ0KCSAgZnVuIGdldFNDQ1NIZWFkcyAoZnMgOiBGdW5jLnQgbGlz
dCkgOiBGdW5jLnQgbGlzdA0KCSAgICA9IChjYXNjYWRlIG8gTGlzdC5jb25jYXRNYXApDQoJICAg
ICAgKGdldFNDQ1MgZnMsDQoJICAgICAgIGZuIGZzDQoJICAgICAgICA9PiBsZXQNCgkJICAgICB2
YWwgb3V0c2lkZUNhbGxlZSA9IHJlZiBOT05FDQoJCSAgICAgdmFsIF8NCgkJICAgICAgID0gTGlz
dC5mb3JlYWNoDQoJCSAgICAgICAgIChmcywNCgkJCSAgZm4gZiA9PiBsZXQNCgkJCQkgICAgdmFs
IGNhbGxlcnMgDQoJCQkJICAgICAgPSBGdW5jRGF0YS5jYWxsZXJzIChnZXRGdW5jRGF0YSBmKQ0K
CQkJCSAgaW4NCgkJCQkgICAgaWYgTGlzdC5leGlzdHMNCgkJCQkgICAgICAgKGNhbGxlcnMsDQoJ
CQkJCWZuIGcgPT4gbm90IChMaXN0LmNvbnRhaW5zDQoJCQkJCQkgICAgIChmcywgZywgRnVuYy5l
cXVhbHMpKSkNCgkJCQkgICAgICB0aGVuIGNhc2UgIW91dHNpZGVDYWxsZWUNCgkJCQkJICAgICBv
ZiBOT05FID0+IG91dHNpZGVDYWxsZWUgOj0gU09NRSBmDQoJCQkJCSAgICAgIHwgU09NRSBfID0+
IHJhaXNlIE5vcGUNCgkJCQkgICAgICBlbHNlICgpDQoJCQkJICBlbmQpDQoJCSAgIGluDQoJCSAg
ICAgY2FzZSAhb3V0c2lkZUNhbGxlZQ0KCQkgICAgICAgb2YgTk9ORSA9PiBFcnJvci5idWcgImdl
dFNDQ0hlYWRzIg0KCQkJfCBTT01FIGYgDQoJCQk9PiBsZXQNCgkJCSAgICAgdmFsIHByZWZpeGVz
ID0gRnVuY0RhdGEucHJlZml4ZXMnIChnZXRGdW5jRGF0YSBmKQ0KCQkJICAgICB2YWwgcmVzdCA9
IExpc3QucmVtb3ZlRmlyc3QgDQoJCQkgICAgICAgICAgICAgICAgKGZzLCBmbiBnID0+IEZ1bmMu
ZXF1YWxzIChmLCBnKSkNCgkJCSAgICAgdmFsIHByZWZpeCA9IGdldFNDQ1NIZWFkcyByZXN0DQoJ
CQkgICBpbg0KCQkJICAgICBwcmVmaXhlcyA6PSBwcmVmaXggQCAhcHJlZml4ZXM7DQoJCQkgICAg
IFtmXQ0KCQkJICAgZW5kDQoJCSAgIGVuZA0KCQkgICBoYW5kbGUgTm9wZQ0KCQkgICAgPT4gKExp
c3QuZm9yZWFjaA0KCQkJKGZzLA0KCQkJIGZuIGYgPT4gbGV0DQoJCQkJICAgdmFsIGNvbnRpZnkg
DQoJCQkJICAgICA9IEZ1bmNEYXRhLmNvbnRpZnknIChnZXRGdW5jRGF0YSBmKQ0KCQkJCSBpbg0K
CQkJCSAgIGNvbnRpZnkgOj0gZmFsc2UNCgkJCQkgZW5kKTsNCgkJCWZzKSkNCg0KCSAgZGF0YXR5
cGUgeiA9IGRhdGF0eXBlIEp1bXBGdW5jR3JhcGgudA0KCSAgZnVuIHByb2Nlc3NOb2RlIG4NCgkg
ICAgPSBsZXQNCgkJdmFsIHN1Y2NzID0gTGlzdC5tYXAoTm9kZS5zdWNjZXNzb3JzIG4sIEVkZ2Uu
dG8pDQoJCXZhbCBzdWNjcyA9IExpc3Qua2VlcEFsbE1hcA0KCQkgICAgICAgICAgICAoc3VjY3Ms
DQoJCQkgICAgIGZuIG4gPT4gY2FzZSBnZXROb2RlSW5mbyBuDQoJCQkJICAgICAgIG9mIEp1bXBO
b2RlIGogPT4gTk9ORQ0KCQkJCQl8IEZ1bmNOb2RlIGYgPT4gU09NRSBmKQ0KCQl2YWwgc2NjSGVh
ZHMgPSBnZXRTQ0NTSGVhZHMgc3VjY3MNCgkgICAgICBpbiANCgkJY2FzZSBnZXROb2RlSW5mbyBu
DQoJCSAgb2YgSnVtcE5vZGUgaiANCgkJICAgPT4gbGV0DQoJCQl2YWwgcHJlZml4ZXMgPSBKdW1w
RGF0YS5wcmVmaXhlcycgKGdldEp1bXBEYXRhIGopDQoJCSAgICAgIGluIA0KCQkJcHJlZml4ZXMg
Oj0gc2NjSGVhZHMgQCAhcHJlZml4ZXMNCgkJICAgICAgZW5kIA0KCQkgICB8IEZ1bmNOb2RlIGYN
CgkJICAgICAgPT4gbGV0DQoJCQkgICB2YWwgcHJlZml4ZXMgPSBGdW5jRGF0YS5wcmVmaXhlcycg
KGdldEZ1bmNEYXRhIGYpDQoJCQkgaW4gDQoJCQkgICBwcmVmaXhlcyA6PSBzY2NIZWFkcyBAICFw
cmVmaXhlcw0KCQkJIGVuZA0KCSAgICAgIGVuZA0KDQoJICB2YWwgZGZzX3BhcmFtDQoJICAgID0g
e3N0YXJ0Tm9kZSA9IGlnbm9yZSwNCgkgICAgICAgZmluaXNoTm9kZSA9IHByb2Nlc3NOb2RlLA0K
CSAgICAgICBoYW5kbGVUcmVlRWRnZSA9IGlnbm9yZSwNCgkgICAgICAgaGFuZGxlTm9uVHJlZUVk
Z2UgPSBmbiBfID0+IEVycm9yLmJ1ZyAiY3ljbGljIGFuYWx5c2lzIiwNCgkgICAgICAgc3RhcnRU
cmVlID0gaWdub3JlLA0KCSAgICAgICBmaW5pc2hUcmVlID0gaWdub3JlLA0KCSAgICAgICBmaW5p
c2hEZnMgPSBpZ25vcmV9DQoJICB2YWwgXyA9IEdyYXBoLmRmc05vZGVzIChHLCAhcm9vdHMsIGRm
c19wYXJhbSkNCg0KCSAgKCogRm9yIGZ1bmN0aW9ucyB0dXJuZWQgaW50byBjb250aW51YXRpb25z
LA0KCSAgICogIHJlY29yZCB0aGVpciBhcmdzLCBib2R5LCBhbmQgbmV3IG5hbWUuDQoJICAgKikN
CgkgIHZhbCBfIA0KCSAgICA9IFZlY3Rvci5mb3JlYWNoDQoJICAgICAgKGZ1bmN0aW9ucywNCgkg
ICAgICAgZm4ge25hbWUgPSBmLCBhcmdzID0gZl9hcmdzLCBib2R5ID0gZl9ib2R5LCAuLi59IA0K
CSAgICAgICAgPT4gbGV0DQoJCSAgICAgdmFsIEZ1bmNEYXRhLlQge2NvbnRpZnksIHJlcGxhY2Us
IC4uLn0gPSBnZXRGdW5jRGF0YSBmDQoJCSAgIGluDQoJCSAgICAgaWYgIWNvbnRpZnkNCgkJICAg
ICAgIHRoZW4gbGV0DQoJCQkgICAgICB2YWwganVtcCA9IEp1bXAubmV3U3RyaW5nIChGdW5jLm9y
aWdpbmFsTmFtZSBmKQ0KCQkJICAgIGluIA0KCQkJICAgICAgcmVwbGFjZSA6PSBTT01FIHtqdW1w
ID0ganVtcCwNCgkJCQkJICAgICAgIGFyZ3MgPSBmX2FyZ3MsDQoJCQkJCSAgICAgICBib2R5ID0g
Zl9ib2R5fQ0KCQkJCQkgICAgICAgDQoJCQkgICAgZW5kDQoJCSAgICAgICBlbHNlICgpDQoJCSAg
IGVuZCkNCg0KCSAgKCogV2FsayBvdmVyIGFsbCBmdW5jdGlvbnMsIHJlbW92aW5nIHRob3NlIHRo
YXQgYXJlbid0IHRvcCBsZXZlbCwNCgkgICAqICBhbmQgZGVzY2VuaW5nIHRob3NlIHRoYXQgYXJl
LCBpbnNlcnRpbmcgbG9jYWwgZnVuY3Rpb25zDQoJICAgKiAgd2hlcmUgbmVjZXNzYXJ5Lg0KCSAg
ICogLSB0dXJuIHRhaWwgY2FsbHMgaW50byBub250YWlsIGNhbGxzDQoJICAgKiAtIHR1cm4gcmV0
dXJucyBpbnRvIGp1bXBzDQoJICAgKikNCgkgIGZ1biB3YWxrRXhwIChmOiBGdW5jLnQsIGU6IEV4
cC50LCBjOiBKdW1wLnQgb3B0aW9uKTogRXhwLnQgDQoJICAgID0gbGV0DQoJCXZhbCB7ZGVjcywg
dHJhbnNmZXJ9ID0gRXhwLmRlc3QgZQ0KCQl2YWwgZGVjcw0KCQkgID0gTGlzdC5mb2xkDQoJCSAg
ICAoTGlzdC5yZXYgZGVjcywNCgkJICAgICBbXSwNCgkJICAgICBmbiAoZCwgZHMpDQoJCSAgICAg
ID0+IGNhc2UgZCANCgkJCSAgIG9mIEJpbmQgXyA9PiBkIDo6IGRzDQoJCQkgICAgfCBGdW4ge25h
bWUgPSBqLCBhcmdzLCBib2R5fSANCgkJCSAgICA9PiBGdW4ge25hbWUgPSBqLA0KCQkJCSAgICBh
cmdzID0gYXJncywNCgkJCQkgICAgYm9keSA9IHdhbGtFeHAgKGYsIGJvZHksIGMpfSA6Og0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldA0KCQkJCSB2YWwgcHJlZml4ZXMNCgkJCQkg
ICA9IEp1bXBEYXRhLnByZWZpeGVzIChnZXRKdW1wRGF0YSBqKQ0KCQkJICAgICAgIGluDQoJCQkJ
IHByZWZpeF9kZWMgKHByZWZpeGVzLCBTT01FIGosIGRzKQ0KCQkJICAgICAgIGVuZA0KCQkJICAg
IHwgSGFuZGxlclB1c2ggaCA9PiBIYW5kbGVyUHVzaCBoIDo6IGRzDQoJCQkgICAgfCBIYW5kbGVy
UG9wID0+IEhhbmRsZXJQb3AgOjogZHMpDQoNCgkJZnVuIG1ha2UgdHJhbnNmZXIgPSBFeHAubWFr
ZSB7ZGVjcyA9IGRlY3MsIHRyYW5zZmVyID0gdHJhbnNmZXJ9DQoJICAgICAgaW4NCgkJY2FzZSB0
cmFuc2Zlcg0KCQkgIG9mIENhbGwge2Z1bmMsIGFyZ3MsIGNvbnR9IA0KCQkgICA9PiBsZXQNCgkJ
CXZhbCByZXBsYWNlID0gRnVuY0RhdGEucmVwbGFjZSAoZ2V0RnVuY0RhdGEgZnVuYykNCgkJICAg
ICAgaW4NCgkJCWNhc2UgcmVwbGFjZQ0KCQkJICBvZiBOT05FID0+IG1ha2UgKENhbGwge2Z1bmMg
PSBmdW5jLA0KCQkJCQkJIGFyZ3MgPSBhcmdzLA0KCQkJCQkJIGNvbnQgPSBjYXNlIGNvbnQNCgkJ
CQkJCQkgIG9mIE5PTkUgPT4gYw0KCQkJCQkJCSAgIHwgU09NRSBfID0+IGNvbnR9KQ0KCQkJICAg
fCBTT01FIHtqdW1wLCAuLi59DQoJCQkgICA9PiBtYWtlIChKdW1wIHtkc3QgPSBqdW1wLCBhcmdz
ID0gYXJnc30pDQoJCSAgICAgIGVuZA0KCQkgICB8IFJldHVybiB4cw0KCQkgICA9PiBtYWtlIChj
YXNlIGMNCgkJCSAgICAgIG9mIE5PTkUgPT4gdHJhbnNmZXINCgkJCSAgICAgICB8IFNPTUUgYyA9
PiBKdW1wIHtkc3QgPSBjLCBhcmdzID0geHN9KQ0KCQkgICB8IF8gPT4gbWFrZSB0cmFuc2Zlcg0K
CSAgICAgIGVuZA0KCSAgYW5kIHByZWZpeF9kZWMgKGZzOiBGdW5jLnQgbGlzdCwgDQoJCQkgIGM6
IEp1bXAudCBvcHRpb24sIA0KCQkJICBkczogRGVjLnQgbGlzdCkgOiBEZWMudCBsaXN0DQoJICAg
ID0gTGlzdC5mb2xkDQoJICAgICAgKExpc3QucmV2IGZzLA0KCSAgICAgICBkcywNCgkgICAgICAg
Zm4gKGYsIGRzKQ0KCSAgICAgICAgPT4gbGV0DQoJCSAgICAgdmFsIEZ1bmNEYXRhLlQge3JlcGxh
Y2UsIHByZWZpeGVzLCAuLi59DQoJCSAgICAgICA9IGdldEZ1bmNEYXRhIGYNCgkJICAgICB2YWwg
e2p1bXAsIGFyZ3MsIGJvZHl9ID0gdmFsT2YgKCFyZXBsYWNlKQ0KCQkgICAgIHZhbCBib2R5ID0g
cHJlZml4X2V4cCAoIXByZWZpeGVzLCBjLCB3YWxrRXhwIChmLCBib2R5LCBjKSkNCgkJICAgaW4N
CgkJICAgICBGdW4ge25hbWUgPSBqdW1wLCBhcmdzID0gYXJncywgYm9keSA9IGJvZHl9IDo6IGRz
DQoJCSAgIGVuZCkNCgkgIGFuZCBwcmVmaXhfZXhwIChmczogRnVuYy50IGxpc3QsDQoJCQkgIGM6
IEp1bXAudCBvcHRpb24sDQoJCQkgIGU6IEV4cC50KSA6IEV4cC50DQoJICAgID0gbGV0DQoJCXZh
bCB7ZGVjcywgdHJhbnNmZXJ9ID0gRXhwLmRlc3QgZQ0KCSAgICAgIGluDQoJCUV4cC5tYWtlIHtk
ZWNzID0gcHJlZml4X2RlYyAoZnMsIGMsIGRlY3MpLA0KCQkJICB0cmFuc2ZlciA9IHRyYW5zZmVy
fQ0KCSAgICAgIGVuZA0KDQoJICB2YWwgc2hyaW5rRXhwID0gc2hyaW5rRXhwIGdsb2JhbHMNCgkg
IHZhbCBmdW5jdGlvbnMgDQoJICAgID0gVmVjdG9yLmZyb21MaXN0DQoJICAgICAgKFZlY3Rvci5m
b2xkcg0KCSAgICAgICAoZnVuY3Rpb25zLCANCgkJW10sIA0KCSAgICAgICAgZm4gKHtuYW1lID0g
ZiwgYXJncyA9IGZfYXJncywgDQoJCSAgICAgYm9keSA9IGZfYm9keSwgcmV0dXJucyA9IGZfcmV0
dXJuc30sIA0KCQkgICAgZnVuY3Rpb25zKQ0KCSAgICAgICAgID0+IGxldA0KCQkgICAgICB2YWwg
RnVuY0RhdGEuVCB7QSwgcmVwbGFjZSwgcHJlZml4ZXMsIC4uLn0gDQoJCQk9IGdldEZ1bmNEYXRh
IGYNCgkJICAgIGluDQoJCSAgICAgIGNhc2UgIXJlcGxhY2UNCgkJCW9mIE5PTkUNCgkJCSA9PiBp
ZiBSZXR1cm4uaXNVbmNhbGxlZCAoIUEpDQoJCQkgICAgICB0aGVuIGZ1bmN0aW9ucw0KCQkJICAg
ICAgZWxzZSBsZXQNCgkJCQkgICAgIHZhbCBmX2JvZHkgDQoJCQkJICAgICAgID0gcHJlZml4X2V4
cCAoIXByZWZpeGVzLCANCgkJCQkJCSAgICAgTk9ORSwgDQoJCQkJCQkgICAgIHdhbGtFeHAgKGYs
IGZfYm9keSwgTk9ORSkpDQoJCQkJICAgICB2YWwgZl9ib2R5ID0gc2hyaW5rRXhwIGZfYm9keQ0K
CQkJCSAgIGluDQoJCQkJICAgICB7bmFtZSA9IGYsDQoJCQkJICAgICAgYXJncyA9IGZfYXJncywN
CgkJCQkgICAgICBib2R5ID0gZl9ib2R5LA0KCQkJCSAgICAgIHJldHVybnMgPSBmX3JldHVybnN9
IDo6IGZ1bmN0aW9ucw0KCQkJCSAgIGVuZA0KCQkJIHwgXyA9PiBmdW5jdGlvbnMNCgkJICAgIGVu
ZCkpDQoJICB2YWwgcHJvZ3JhbSANCgkgICAgPSBQcm9ncmFtLlQge2RhdGF0eXBlcyA9IGRhdGF0
eXBlcywNCgkJCSBnbG9iYWxzID0gZ2xvYmFscywNCgkJCSBmdW5jdGlvbnMgPSBmdW5jdGlvbnMs
DQoJCQkgbWFpbiA9IG1haW59DQoJaW4NCgkgIHByb2dyYW0NCgllbmQNCiAgICB2YWwgdHJhbnNm
b3JtID0gQ29udHJvbC50cmFjZUNhbGwgInRyYW5zZm9ybSIgdHJhbnNmb3JtDQogIGVuZA0KDQpz
dHJ1Y3R1cmUgRGlhZ25vc3RpY3MgPQ0KICBzdHJ1Y3QNCiAgICBmdW4gZGlhZ25vc3RpY3Mge3By
b2dyYW0gYXMgUHJvZ3JhbS5UIHtmdW5jdGlvbnMsIC4uLn0sDQoJCSAgICAgZ2V0RnVuY0RhdGE6
IEZ1bmMudCAtPiBGdW5jRGF0YS50fQ0KICAgICAgPSBpZiAoKiAhQ29udHJvbC5jb250aWZ5RGlh
ZyAqKSB0cnVlDQoJICB0aGVuIGxldA0KCQkgZGF0YXR5cGUgeiA9IGRhdGF0eXBlIFJldHVybi50
DQoNCgkJICgqIHByaW50IG91dCBlbnRpcmUgY3BzIElMICopDQoJCSB2YWwgY3BzID0gZmFsc2UN
CgkJICgqIHByaW50IG91dCB0aGUgQSBmb3IgZWFjaCBmdW5jdGlvbiAqKQ0KCQkgdmFsIGFuYWx5
c2lzID0gZmFsc2UNCgkJICgqIHByaW50IG91dCBhY3Rpb24gKGNvbnRpZmlhYmxlLCByZW1vdmVh
YmxlKSAqKQ0KCQkgdmFsIGFjdGlvbiA9IGZhbHNlDQoJCSAoKiBwcmludCBvdXQgdGhlIHRvdGFs
cyAqKQ0KCQkgdmFsIHRvdGFscyA9IHRydWUNCg0KCQkgdmFsIF8NCgkJICAgPSBpZiBjcHMNCgkJ
ICAgICAgIHRoZW4gUHJvZ3JhbS5sYXlvdXRzDQoJCQkgICAgKHByb2dyYW0sIA0KCQkJICAgICBm
biBsID0+IChMYXlvdXQub3V0cHV0IChsLCBPdXQuZXJyb3IpDQoJCQkJICAgICAgOyBPdXQubmV3
bGluZSBPdXQuZXJyb3IpKQ0KCQkgICAgICAgZWxzZSAoKQ0KDQoJCSB2YWwgY2FsbCA9IHJlZiAw
DQoJCSB2YWwgY29udCA9IHJlZiAwDQoJCSB2YWwgZG9tID0gcmVmIDANCgkJIHZhbCBjYWxsX2Nv
bnQgPSByZWYgMA0KCQkgdmFsIGNhbGxfZG9tID0gcmVmIDANCgkJIHZhbCBjb250X2RvbSA9IHJl
ZiAwDQoJCSB2YWwgY2FsbF9jb250X2RvbSA9IHJlZiAwDQoNCgkJIHZhbCByZW1fY2FsbCA9IHJl
ZiAwDQoJCSB2YWwgcmVtX2NvbnQgPSByZWYgMA0KCQkgdmFsIHJlbV9kb20gPSByZWYgMA0KCQkg
dmFsIHJlbV9jYWxsX2NvbnQgPSByZWYgMA0KCQkgdmFsIHJlbV9jYWxsX2RvbSA9IHJlZiAwDQoJ
CSB2YWwgcmVtX2NvbnRfZG9tID0gcmVmIDANCgkJIHZhbCByZW1fY2FsbF9jb250X2RvbSA9IHJl
ZiAwDQoJICAgICAgIGluIA0KCQkgVmVjdG9yLmZvcmVhY2gNCgkJIChmdW5jdGlvbnMsIGZuIHtu
YW1lLCAuLi59ID0+DQoJCSAgbGV0DQoJCSAgICB2YWwgRnVuY0RhdGEuVCB7QUNhbGwsIEFDb250
LCBBRG9tLCAuLi59DQoJCSAgICAgID0gZ2V0RnVuY0RhdGEgbmFtZQ0KCQkgICAgICANCgkJICAg
IHZhbCBfIA0KCQkgICAgICA9IGlmIGFuYWx5c2lzDQoJCQkgIHRoZW4gcHJpbnQgKGNvbmNhdCBb
RnVuYy50b1N0cmluZyBuYW1lLA0KCQkJCQkgICAgICAiOjoiLA0KCQkJCQkgICAgICAiIEFDYWxs
OiAiLA0KCQkJCQkgICAgICBSZXR1cm4udG9TdHJpbmcgKCFBQ2FsbCksDQoJCQkJCSAgICAgICIg
QUNvbnQ6ICIsDQoJCQkJCSAgICAgIFJldHVybi50b1N0cmluZyAoIUFDb250KSwNCgkJCQkJICAg
ICAgIiBBRG9tOiAiLA0KCQkJCQkgICAgICBSZXR1cm4udG9TdHJpbmcgKCFBRG9tKSwNCgkJCQkJ
ICAgICAgIlxuIl0pDQoJCQkgIGVsc2UgKCkNCgkJCSAgICANCgkJICAgIGZ1biBkb2l0IChyLCBz
KSANCgkJICAgICAgPSAoSW50LmluYyByDQoJCQkgOyBpZiBhY3Rpb24NCgkJCSAgICAgdGhlbiBw
cmludCAoY29uY2F0IFtzLCANCgkJCQkJCSAiICIsDQoJCQkJCQkgRnVuYy50b1N0cmluZyBuYW1l
LCANCgkJCQkJCSAiXG4iXSkNCgkJCSAgICAgZWxzZSAoKSkNCgkJICAgICAgDQoJCSAgICBmdW4g
Y2hlY2sgQSA9IGNhc2UgIUENCgkJCQkgICAgb2YgVW5jYWxsZWQgPT4gKGZhbHNlLCB0cnVlKQ0K
CQkJCSAgICAgfCBGdW5jTGFiZWwgXyA9PiAodHJ1ZSwgZmFsc2UpDQoJCQkJICAgICB8IEp1bXBM
YWJlbCBfID0+ICh0cnVlLCBmYWxzZSkNCgkJCQkgICAgIHwgVW5rbm93biA9PiAoZmFsc2UsIGZh
bHNlKQ0KCQkJCQkNCgkJICAgIHZhbCAoY2FuX2NhbGwsIGNhbl9yZW1fY2FsbCkgPSBjaGVjayBB
Q2FsbA0KCQkgICAgdmFsIChjYW5fY29udCwgY2FuX3JlbV9jb250KSA9IGNoZWNrIEFDb250DQoJ
CSAgICB2YWwgKGNhbl9kb20sIGNhbl9yZW1fZG9tKSA9IGNoZWNrIEFEb20NCgkJICBpbiANCgkJ
ICAgIGNhc2UgKGNhbl9jYWxsLCBjYW5fY29udCwgY2FuX2RvbSkNCgkJICAgICAgb2YgKHRydWUs
IHRydWUsIHRydWUpDQoJCSAgICAgICA9PiBkb2l0IChjYWxsX2NvbnRfZG9tLCAiY2FsbF9jb250
X2RvbSIpDQoJCSAgICAgICB8ICh0cnVlLCB0cnVlLCBmYWxzZSkNCgkJICAgICAgID0+IGRvaXQg
KGNhbGxfY29udCwgImNhbGxfY29udCIpDQoJCSAgICAgICB8ICh0cnVlLCBmYWxzZSwgdHJ1ZSkN
CgkJICAgICAgID0+IGRvaXQgKGNhbGxfZG9tLCAiY2FsbF9kb20iKQ0KCQkgICAgICAgfCAodHJ1
ZSwgZmFsc2UsIGZhbHNlKQ0KCQkgICAgICAgPT4gZG9pdCAoY2FsbCwgImNhbGwiKQ0KCQkgICAg
ICAgfCAoZmFsc2UsIHRydWUsIHRydWUpDQoJCSAgICAgICA9PiBkb2l0IChjb250X2RvbSwgImNv
bnRfZG9tIikNCgkJICAgICAgIHwgKGZhbHNlLCB0cnVlLCBmYWxzZSkNCgkJICAgICAgID0+IGRv
aXQgKGNvbnQsICJjb250IikNCgkJICAgICAgIHwgKGZhbHNlLCBmYWxzZSwgdHJ1ZSkNCgkJICAg
ICAgID0+IGRvaXQgKGRvbSwgImRvbSIpDQoJCSAgICAgICB8IChmYWxzZSwgZmFsc2UsIGZhbHNl
KQ0KCQkgICAgICAgPT4gKCk7DQoJCSAgICBjYXNlIChjYW5fcmVtX2NhbGwsIGNhbl9yZW1fY29u
dCwgY2FuX3JlbV9kb20pDQoJCSAgICAgIG9mICh0cnVlLCB0cnVlLCB0cnVlKQ0KCQkgICAgICAg
PT4gZG9pdCAocmVtX2NhbGxfY29udF9kb20sICJyZW1fY2FsbF9jb250X2RvbSIpDQoJCSAgICAg
ICB8ICh0cnVlLCB0cnVlLCBmYWxzZSkNCgkJICAgICAgID0+IGRvaXQgKHJlbV9jYWxsX2NvbnQs
ICJyZW1fY2FsbF9jb250IikNCgkJICAgICAgIHwgKHRydWUsIGZhbHNlLCB0cnVlKQ0KCQkgICAg
ICAgPT4gZG9pdCAocmVtX2NhbGxfZG9tLCAicmVtX2NhbGxfZG9tIikNCgkJICAgICAgIHwgKHRy
dWUsIGZhbHNlLCBmYWxzZSkNCgkJICAgICAgID0+IGRvaXQgKHJlbV9jYWxsLCAicmVtX2NhbGwi
KQ0KCQkgICAgICAgfCAoZmFsc2UsIHRydWUsIHRydWUpDQoJCSAgICAgICA9PiBkb2l0IChyZW1f
Y29udF9kb20sICJyZW1fY29udF9kb20iKQ0KCQkgICAgICAgfCAoZmFsc2UsIHRydWUsIGZhbHNl
KQ0KCQkgICAgICAgPT4gZG9pdCAocmVtX2NvbnQsICJyZW1fY29udCIpDQoJCSAgICAgICB8IChm
YWxzZSwgZmFsc2UsIHRydWUpDQoJCSAgICAgICA9PiBkb2l0IChyZW1fZG9tLCAicmVtX2RvbSIp
DQoJCSAgICAgICB8IChmYWxzZSwgZmFsc2UsIGZhbHNlKQ0KCQkgICAgICAgPT4gKCkNCgkJICBl
bmQpOw0KCQkgaWYgdG90YWxzDQoJCSAgIHRoZW4gcHJpbnQgKGNvbmNhdA0KCQkJICAgICAgIFsi
ZnVuY3Rpb25zOiAiLA0KCQkJCUludC50b1N0cmluZyAoVmVjdG9yLmxlbmd0aCBmdW5jdGlvbnMp
LA0KCQkJCSJcbiIsDQoJCQkJIiAgY2FsbF9jb250X2RvbTogIiwNCgkJCQlJbnQudG9TdHJpbmcg
KCFjYWxsX2NvbnRfZG9tKSwNCgkJCQkiICBjYWxsX2NvbnQ6ICIsDQoJCQkJSW50LnRvU3RyaW5n
ICghY2FsbF9jb250KSwNCgkJCQkiXG4iLA0KCQkJCSIgIGNhbGxfZG9tOiAiLA0KCQkJCUludC50
b1N0cmluZyAoIWNhbGxfZG9tKSwNCgkJCQkiICBjb250X2RvbTogIiwNCgkJCQlJbnQudG9TdHJp
bmcgKCFjb250X2RvbSksDQoJCQkJIlxuIiwNCgkJCQkiICBjYWxsOiAiLA0KCQkJCUludC50b1N0
cmluZyAoIWNhbGwpLA0KCQkJCSIgIGNvbnQ6ICIsDQoJCQkJSW50LnRvU3RyaW5nICghY29udCks
DQoJCQkJIiAgZG9tOiAiLA0KCQkJCUludC50b1N0cmluZyAoIWRvbSksDQoJCQkJIlxuIiwNCgkJ
CQkiICByZW1fY2FsbF9jb250X2RvbTogIiwNCgkJCQlJbnQudG9TdHJpbmcgKCFyZW1fY2FsbF9j
b250X2RvbSksDQoJCQkJIiAgcmVtX2NhbGxfY29udDogIiwNCgkJCQlJbnQudG9TdHJpbmcgKCFy
ZW1fY2FsbF9jb250KSwNCgkJCQkiXG4iLA0KCQkJCSIgIHJlbV9jYWxsX2RvbTogIiwNCgkJCQlJ
bnQudG9TdHJpbmcgKCFyZW1fY2FsbF9kb20pLA0KCQkJCSIgIHJlbV9jb250X2RvbTogIiwNCgkJ
CQlJbnQudG9TdHJpbmcgKCFyZW1fY29udF9kb20pLA0KCQkJCSJcbiIsDQoJCQkJIiAgcmVtX2Nh
bGw6ICIsDQoJCQkJSW50LnRvU3RyaW5nICghcmVtX2NhbGwpLA0KCQkJCSIgIHJlbV9jb250OiAi
LA0KCQkJCUludC50b1N0cmluZyAoIXJlbV9jb250KSwNCgkJCQkiICByZW1fZG9tOiAiLA0KCQkJ
CUludC50b1N0cmluZyAoIXJlbV9kb20pLA0KCQkJCSJcbiJdKQ0KCQkgICBlbHNlICgpDQoJICAg
ICAgIGVuZA0KCSAgZWxzZSAoKQ0KICAgIHZhbCBkaWFnbm9zdGljcyA9IENvbnRyb2wudHJhY2VD
YWxsICJkaWFnbm9zdGljcyIgZGlhZ25vc3RpY3MNCiAgZW5kDQoNCmZ1biBjb250aWZ5IChwcm9n
cmFtIGFzIFByb2dyYW0uVCB7ZnVuY3Rpb25zLCAuLi59KQ0KICA9IGxldA0KICAgICAgdmFsIHtn
ZXQgPSBnZXRGdW5jRGF0YSA6IEZ1bmMudCAtPiBGdW5jRGF0YS50fQ0KCT0gUHJvcGVydHkuZ2V0
IChGdW5jLnBsaXN0LA0KCQkJUHJvcGVydHkuaW5pdEZ1bg0KCQkJKGZuIF8gPT4gRnVuY0RhdGEu
bmV3ICgpKSkNCiAgICAgIHZhbCB7Z2V0ID0gZ2V0SnVtcERhdGEgOiBKdW1wLnQgLT4gSnVtcERh
dGEudH0NCgk9IFByb3BlcnR5LmdldCAoSnVtcC5wbGlzdCwNCgkJCVByb3BlcnR5LmluaXRGdW4N
CgkJCShmbiBfID0+IEp1bXBEYXRhLm5ldyAoKSkpDQoNCiAgICAgIHZhbCBfID0gSW5pdFJlYWNo
Q2FsbGVyc0NhbGxlZXMuaW5pdFJlYWNoQ2FsbGVyc0NhbGxlZXMgDQoJICAgICAge3Byb2dyYW0g
PSBwcm9ncmFtLA0KCSAgICAgICBnZXRGdW5jRGF0YSA9IGdldEZ1bmNEYXRhfQ0KICAgICAgdmFs
IF8gPSBBbmFseXplQ2FsbC5hbmFseXplQ2FsbA0KCSAgICAgIHtwcm9ncmFtID0gcHJvZ3JhbSwN
CgkgICAgICAgZ2V0RnVuY0RhdGEgPSBnZXRGdW5jRGF0YX0NCiAgICAgIHZhbCBfID0gQW5hbHl6
ZUNvbnQuYW5hbHl6ZUNvbnQNCgkgICAgICB7cHJvZ3JhbSA9IHByb2dyYW0sDQoJICAgICAgIGdl
dEZ1bmNEYXRhID0gZ2V0RnVuY0RhdGF9DQogICAgICB2YWwgXyA9IEFuYWx5emVEb20uYW5hbHl6
ZURvbSANCgkgICAgICB7cHJvZ3JhbSA9IHByb2dyYW0sDQoJICAgICAgIGdldEZ1bmNEYXRhID0g
Z2V0RnVuY0RhdGEsDQoJICAgICAgIGdldEp1bXBEYXRhID0gZ2V0SnVtcERhdGF9DQoNCiAgICAg
IHZhbCBfID0gRGlhZ25vc3RpY3MuZGlhZ25vc3RpY3Mge3Byb2dyYW0gPSBwcm9ncmFtLA0KCQkJ
CSAgICAgICBnZXRGdW5jRGF0YSA9IGdldEZ1bmNEYXRhfQ0KDQogICAgICBkYXRhdHlwZSB6ID0g
ZGF0YXR5cGUgUmV0dXJuLnQNCiAgICAgIHZhbCBfDQoJPSBWZWN0b3IuZm9yZWFjaA0KCSAgKGZ1
bmN0aW9ucywNCgkgICBmbiB7bmFtZSA9IGYsIC4uLn0NCgkgICAgPT4gbGV0DQoJCSB2YWwgRnVu
Y0RhdGEuVCB7QSwgQUNhbGwsIEFDb250LCBBRG9tLCAuLi59DQoJCSAgID0gZ2V0RnVuY0RhdGEg
Zg0KCSAgICAgICBpbg0KCQkgY2FzZSAhQ29udHJvbC5jb250aWZ5U3RyYXRlZ3kNCgkJICAgb2Yg
Q29udHJvbC5Ob25lID0+IEEgOj0gVW5rbm93bg0KCQkgICAgfCBDb250cm9sLkNhbGwgPT4gQSA6
PSAhQUNhbGwNCgkJICAgIHwgQ29udHJvbC5Db250ID0+IEEgOj0gIUFDb250DQoJCSAgICB8IENv
bnRyb2wuQ2FsbENvbnQNCgkJICAgID0+IChjYXNlICghQUNhbGwsICFBQ29udCkNCgkJCSAgb2Yg
KFVuY2FsbGVkLCBfKSA9PiBBIDo9IFVuY2FsbGVkDQoJCQkgICB8IChfLCBVbmNhbGxlZCkgPT4g
QSA6PSBVbmNhbGxlZA0KCQkJICAgfCAoVW5rbm93biwgcikgPT4gQSA6PSByDQoJCQkgICB8IChy
LCBVbmtub3duKSA9PiBBIDo9IHINCgkJCSAgIHwgKEp1bXBMYWJlbCBqLCBKdW1wTGFiZWwgaicp
DQoJCQkgICA9PiBpZiBKdW1wLmVxdWFscyAoaiwgaicpDQoJCQkJdGhlbiBBIDo9IEp1bXBMYWJl
bCBqDQoJCQkJZWxzZSBFcnJvci5idWcgIkNhbGxDb250OiBpbmNvbXBhdGlibGUiDQoJCQkgICB8
IChGdW5jTGFiZWwgZiwgRnVuY0xhYmVsIGYnKQ0KCQkJICAgPT4gaWYgRnVuYy5lcXVhbHMgKGYs
IGYnKQ0KCQkJCXRoZW4gQSA6PSBGdW5jTGFiZWwgZg0KCQkJCWVsc2UgRXJyb3IuYnVnICJDYWxs
Q29udDogaW5jb21wYXRpYmxlIg0KCQkJICAgfCAoSnVtcExhYmVsIGosIEZ1bmNMYWJlbCBmKQ0K
CQkJICAgPT4gQSA6PSBGdW5jTGFiZWwgZg0KCQkJICAgfCAoRnVuY0xhYmVsIGYsIEp1bXBMYWJl
bCBqKQ0KCQkJICAgPT4gQSA6PSBGdW5jTGFiZWwgZikNCgkJICAgIHwgQ29udHJvbC5Eb20gPT4g
QSA6PSAhQURvbQ0KCSAgICAgICBlbmQpDQoNCiAgICAgIHZhbCBwcm9ncmFtID0gVHJhbnNmb3Jt
LnRyYW5zZm9ybSB7cHJvZ3JhbSA9IHByb2dyYW0sDQoJCQkJCSBnZXRGdW5jRGF0YSA9IGdldEZ1
bmNEYXRhLA0KCQkJCQkgZ2V0SnVtcERhdGEgPSBnZXRKdW1wRGF0YX0NCg0KICAgICAgdmFsIF8g
PSBQcm9ncmFtLmNsZWFyIHByb2dyYW0NCiAgICBpbg0KICAgICAgcHJvZ3JhbQ0KICAgIGVuZA0K
ZW5kDQo=

---559023410-1932422408-982873315=:22815--